2025-11-17T09:00:09.976 [DEBUG] [Thread-51482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:00:13.415 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:00:13.416 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:00:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:00:23.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:00:23.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:00:23.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 0, 19), 13.79, 38.8, 0.0, 19.2, 14.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:00:23.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:00:19
2025-11-17T09:00:24.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:00:24.227 [DEBUG] [Thread-51483] [transport.py] [_log()] starting thread (client mode): 0xd07cc9a0
2025-11-17T09:00:24.227 [DEBUG] [Thread-51483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:00:24.248 [DEBUG] [Thread-51483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:00:24.248 [INFO] [Thread-51483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:00:24.251 [DEBUG] [Thread-51483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:00:24.251 [DEBUG] [Thread-51483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] client lang: <none>
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] server lang: <none>
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] kex follows: False
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] Compression: none
2025-11-17T09:00:24.252 [DEBUG] [Thread-51483] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:00:24.270 [DEBUG] [Thread-51483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:00:24.271 [DEBUG] [Thread-51483] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:00:24.271 [DEBUG] [Thread-51483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:00:24.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:00:24.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:00:24.273 [DEBUG] [Thread-51483] [transport.py] [_log()] userauth is OK
2025-11-17T09:00:24.273 [DEBUG] [Thread-51483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:00:24.273 [DEBUG] [Thread-51483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:00:24.273 [DEBUG] [Thread-51483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:00:24.274 [DEBUG] [Thread-51483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:00:24.292 [INFO] [Thread-51483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:00:24.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:00:25.010 [DEBUG] [Thread-51485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:00:25.104 [DEBUG] [Thread-51483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:00:25.105 [DEBUG] [Thread-51483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:00:25.105 [DEBUG] [Thread-51483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:00:25.146 [DEBUG] [Thread-51483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:00:25.146 [DEBUG] [Thread-51483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:00:25.149 [DEBUG] [Thread-51483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:00:25.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:00:25.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:00:25.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:00:25.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:00:25.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:00:25.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:00:25.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:00:25.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:00:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:00:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.291369 -999.00  +13.80  11.49     45   +2.10 1 1 1 1 1   888    0 14.04 94.29 ----- 11.5 11.5 91.2 21.2 20.1 -28.0 20.1 -25.0 18.7 -24.6 19.1 -25.4
2025-11-17T09:00:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:00:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:00:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.291369
2025-11-17T09:00:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:00:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:00:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:00:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:00:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:00:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:00:19', tmtdew=13.79, humidity=38.8, cloud=0.0, wind=19.2, temperature=14.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T06:59:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:00:25.175 [DEBUG] [Thread-51483] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:00:25.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:00:25.269 [DEBUG] [Thread-51487] [transport.py] [_log()] starting thread (client mode): 0xd0785b10
2025-11-17T09:00:25.269 [DEBUG] [Thread-51487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:00:25.285 [DEBUG] [Thread-51487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:00:25.285 [INFO] [Thread-51487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:00:25.292 [DEBUG] [Thread-51487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:00:25.292 [DEBUG] [Thread-51487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:00:25.292 [DEBUG] [Thread-51487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:00:25.292 [DEBUG] [Thread-51487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] client lang: <none>
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] server lang: <none>
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] kex follows: False
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] Compression: none
2025-11-17T09:00:25.293 [DEBUG] [Thread-51487] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:00:25.352 [DEBUG] [Thread-51487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:00:25.352 [DEBUG] [Thread-51487] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:00:25.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:00:25.354 [DEBUG] [Thread-51487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:00:25.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:00:25.408 [DEBUG] [Thread-51487] [transport.py] [_log()] userauth is OK
2025-11-17T09:00:25.408 [DEBUG] [Thread-51487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:00:25.409 [DEBUG] [Thread-51487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:00:25.409 [DEBUG] [Thread-51487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:00:25.409 [DEBUG] [Thread-51487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:00:25.429 [INFO] [Thread-51487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:00:25.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:00:25.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:00:26.320 [DEBUG] [Thread-51487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:00:26.320 [DEBUG] [Thread-51487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:00:26.369 [DEBUG] [Thread-51487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:00:26.369 [DEBUG] [Thread-51487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:00:26.379 [DEBUG] [Thread-51487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:00:26.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:00:26.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:00:26.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:00:26.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:00:26.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:00:26.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:00:26.416 [DEBUG] [Thread-51487] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:00:40.046 [DEBUG] [Thread-51489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:00:55.090 [DEBUG] [Thread-51490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:00:56.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:00:56.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:00: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
2025-11-17T09:00:57.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 0, 51), 13.98, 38.59, 0.0, 20.03, 14.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:00:57.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:00:51
2025-11-17T09:00:57.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:00:57.360 [DEBUG] [Thread-51491] [transport.py] [_log()] starting thread (client mode): 0xd0787f40
2025-11-17T09:00:57.360 [DEBUG] [Thread-51491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:00:57.380 [DEBUG] [Thread-51491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:00:57.381 [INFO] [Thread-51491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:00:57.383 [DEBUG] [Thread-51491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] client lang: <none>
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] server lang: <none>
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] kex follows: False
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] Compression: none
2025-11-17T09:00:57.384 [DEBUG] [Thread-51491] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:00:57.402 [DEBUG] [Thread-51491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:00:57.403 [DEBUG] [Thread-51491] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:00:57.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:00:57.404 [DEBUG] [Thread-51491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:00:57.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:00:57.406 [DEBUG] [Thread-51491] [transport.py] [_log()] userauth is OK
2025-11-17T09:00:57.407 [DEBUG] [Thread-51491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:00:57.407 [DEBUG] [Thread-51491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:00:57.407 [DEBUG] [Thread-51491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:00:57.407 [DEBUG] [Thread-51491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:00:57.423 [INFO] [Thread-51491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:00:57.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:00:58.036 [DEBUG] [Thread-51491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:00:58.036 [DEBUG] [Thread-51491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:00:58.037 [DEBUG] [Thread-51491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:00:58.078 [DEBUG] [Thread-51491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:00:58.078 [DEBUG] [Thread-51491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:00:58.081 [DEBUG] [Thread-51491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:00:58.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:00:58.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:00:58.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:00:58.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:00:58.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:00:58.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:00:58.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:00:58.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:00:58.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:00:58.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.291716 -999.00  +13.70  13.59     45   +2.30 1 1 1 1 1   888    0 13.88 88.27 ----- 13.6 13.6 110.6 20.9 20.2 -24.8 20.1 -24.0 18.6 -24.6 19.1 -24.5
2025-11-17T09:00:58.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:00:58.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:00:58.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.291716
2025-11-17T09:00:58.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:00:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:00:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:00:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:00:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:00:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:00:51', tmtdew=13.98, humidity=38.59, cloud=0.0, wind=20.03, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:00:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:00:58.108 [DEBUG] [Thread-51491] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:00:58.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:00:58.216 [DEBUG] [Thread-51494] [transport.py] [_log()] starting thread (client mode): 0xd0719f90
2025-11-17T09:00:58.216 [DEBUG] [Thread-51494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:00:58.230 [DEBUG] [Thread-51494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:00:58.230 [INFO] [Thread-51494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:00:58.238 [DEBUG] [Thread-51494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:00:58.238 [DEBUG] [Thread-51494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] client lang: <none>
2025-11-17T09:00:58.239 [DEBUG] [Thread-51494] [transport.py] [_log()] server lang: <none>
2025-11-17T09:00:58.240 [DEBUG] [Thread-51494] [transport.py] [_log()] kex follows: False
2025-11-17T09:00:58.240 [DEBUG] [Thread-51494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:00:58.240 [DEBUG] [Thread-51494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:00:58.240 [DEBUG] [Thread-51494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:00:58.240 [DEBUG] [Thread-51494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:00:58.240 [DEBUG] [Thread-51494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:00:58.241 [DEBUG] [Thread-51494] [transport.py] [_log()] Compression: none
2025-11-17T09:00:58.241 [DEBUG] [Thread-51494] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:00:58.300 [DEBUG] [Thread-51494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:00:58.301 [DEBUG] [Thread-51494] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:00:58.302 [DEBUG] [Thread-51494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:00:58.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:00:58.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:00:58.356 [DEBUG] [Thread-51494] [transport.py] [_log()] userauth is OK
2025-11-17T09:00:58.356 [DEBUG] [Thread-51494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:00:58.356 [DEBUG] [Thread-51494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:00:58.356 [DEBUG] [Thread-51494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:00:58.357 [DEBUG] [Thread-51494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:00:58.375 [INFO] [Thread-51494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:00:58.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:00:58.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:00:58.986 [DEBUG] [Thread-51496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:00:59.230 [DEBUG] [Thread-51494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:00:59.230 [DEBUG] [Thread-51494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:00:59.277 [DEBUG] [Thread-51494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:00:59.278 [DEBUG] [Thread-51494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:00:59.287 [DEBUG] [Thread-51494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:00:59.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:00:59.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:00: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
2025-11-17T09:00:59.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:00:59.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:00:59.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:00:59.324 [DEBUG] [Thread-51494] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:01:10.126 [DEBUG] [Thread-51497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:01:13.558 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:01:13.560 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:01:25.172 [DEBUG] [Thread-51498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:01:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:01:29.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:01:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:01:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 1, 23), 14.59, 37.11, 0.0, 17.91, 14.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:01:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:01:23
2025-11-17T09:01:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:01:30.254 [DEBUG] [Thread-51499] [transport.py] [_log()] starting thread (client mode): 0xd3161240
2025-11-17T09:01:30.254 [DEBUG] [Thread-51499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:01:30.274 [DEBUG] [Thread-51499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:01:30.274 [INFO] [Thread-51499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:01:30.276 [DEBUG] [Thread-51499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] client lang: <none>
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] server lang: <none>
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] kex follows: False
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] Compression: none
2025-11-17T09:01:30.277 [DEBUG] [Thread-51499] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:01:30.295 [DEBUG] [Thread-51499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:01:30.295 [DEBUG] [Thread-51499] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:01:30.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:01:30.296 [DEBUG] [Thread-51499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:01:30.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:01:30.298 [DEBUG] [Thread-51499] [transport.py] [_log()] userauth is OK
2025-11-17T09:01:30.298 [DEBUG] [Thread-51499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:01:30.299 [DEBUG] [Thread-51499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:01:30.299 [DEBUG] [Thread-51499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:01:30.299 [DEBUG] [Thread-51499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:01:30.317 [INFO] [Thread-51499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:01:30.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:01:31.069 [DEBUG] [Thread-51499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:01:31.069 [DEBUG] [Thread-51499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:01:31.069 [DEBUG] [Thread-51499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:01:31.111 [DEBUG] [Thread-51499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:01:31.112 [DEBUG] [Thread-51499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:01:31.114 [DEBUG] [Thread-51499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:01:31.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:01:31.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:01:31.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:01:31.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:01:31.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:01:31.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:01:31.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:01:31.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:01:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:01:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.292412 -999.00  +13.90  16.70     46   +2.50 1 1 1 1 1   888    0 13.48 81.23 ----- 16.7 16.7 113.6 24.3 20.4 -24.2 20.2 -23.4 18.8 -23.9 19.2 -24.5
2025-11-17T09:01:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:01:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:01:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.292412
2025-11-17T09:01:31.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:01:31.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:01:31.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:01:31.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:01:31.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:01:31.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:01:23', tmtdew=14.59, humidity=37.11, cloud=0.0, wind=17.91, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:01:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:01:31.138 [DEBUG] [Thread-51499] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:01:31.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:01:31.232 [DEBUG] [Thread-51502] [transport.py] [_log()] starting thread (client mode): 0xd3160e80
2025-11-17T09:01:31.232 [DEBUG] [Thread-51502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:01:31.250 [DEBUG] [Thread-51502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:01:31.251 [INFO] [Thread-51502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:01:31.258 [DEBUG] [Thread-51502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:01:31.258 [DEBUG] [Thread-51502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:01:31.258 [DEBUG] [Thread-51502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:01:31.258 [DEBUG] [Thread-51502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:01:31.258 [DEBUG] [Thread-51502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:01:31.258 [DEBUG] [Thread-51502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:01:31.258 [DEBUG] [Thread-51502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:01:31.258 [DEBUG] [Thread-51502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] client lang: <none>
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] server lang: <none>
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] kex follows: False
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] Compression: none
2025-11-17T09:01:31.259 [DEBUG] [Thread-51502] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:01:31.320 [DEBUG] [Thread-51502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:01:31.321 [DEBUG] [Thread-51502] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:01:31.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:01:31.322 [DEBUG] [Thread-51502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:01:31.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:01:31.380 [DEBUG] [Thread-51502] [transport.py] [_log()] userauth is OK
2025-11-17T09:01:31.380 [DEBUG] [Thread-51502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:01:31.381 [DEBUG] [Thread-51502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:01:31.381 [DEBUG] [Thread-51502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:01:31.381 [DEBUG] [Thread-51502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:01:31.400 [INFO] [Thread-51502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:01:31.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:01:31.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:01:32.293 [DEBUG] [Thread-51502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:01:32.294 [DEBUG] [Thread-51502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:01:32.342 [DEBUG] [Thread-51502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:01:32.342 [DEBUG] [Thread-51502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:01:32.351 [DEBUG] [Thread-51502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:01:32.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:01:32.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:01:32.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:01:32.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:01:32.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:01:32.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:01:32.398 [DEBUG] [Thread-51502] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:01:40.206 [DEBUG] [Thread-51504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:01:55.254 [DEBUG] [Thread-51505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:01:59.050 [DEBUG] [Thread-51506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:02:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:02:02.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:02:02.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:02:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 1, 55), 14.65, 36.84, 0.0, 13.94, 15.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:02:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:01:55
2025-11-17T09:02:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:02:03.321 [DEBUG] [Thread-51507] [transport.py] [_log()] starting thread (client mode): 0xd07cd0c0
2025-11-17T09:02:03.322 [DEBUG] [Thread-51507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:02:03.341 [DEBUG] [Thread-51507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:02:03.342 [INFO] [Thread-51507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] client lang: <none>
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] server lang: <none>
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] kex follows: False
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] Compression: none
2025-11-17T09:02:03.345 [DEBUG] [Thread-51507] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:02:03.359 [DEBUG] [Thread-51507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:02:03.360 [DEBUG] [Thread-51507] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:02:03.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:02:03.361 [DEBUG] [Thread-51507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:02:03.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:02:03.363 [DEBUG] [Thread-51507] [transport.py] [_log()] userauth is OK
2025-11-17T09:02:03.363 [DEBUG] [Thread-51507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:02:03.363 [DEBUG] [Thread-51507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:02:03.363 [DEBUG] [Thread-51507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:02:03.364 [DEBUG] [Thread-51507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:02:03.383 [INFO] [Thread-51507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:02:03.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:02:04.004 [DEBUG] [Thread-51507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:02:04.004 [DEBUG] [Thread-51507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:02:04.004 [DEBUG] [Thread-51507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:02:04.044 [DEBUG] [Thread-51507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:02:04.045 [DEBUG] [Thread-51507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:02:04.048 [DEBUG] [Thread-51507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:02:04.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:02:04.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:02:04.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:02:04.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:02:04.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:02:04.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:02:04.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:02:04.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:02:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:02:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.292758 -999.00  +14.40  10.73     44   +2.50 1 1 1 1 1   888    0 13.73 84.28 ----- 10.7 10.7 106.9 19.8 20.6 -24.9 20.3 -23.2 18.9 -23.0 19.2 -23.6
2025-11-17T09:02:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:02:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:02:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.292758
2025-11-17T09:02:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:02:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:02:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:02:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:02:04.076 [DEBUG] [Thread-51507] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:02:04.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:02:04.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:01:55', tmtdew=14.65, humidity=36.84, cloud=0.0, wind=13.94, temperature=15.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:01:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:02:04.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:02:04.172 [DEBUG] [Thread-51510] [transport.py] [_log()] starting thread (client mode): 0xd07cceb0
2025-11-17T09:02:04.172 [DEBUG] [Thread-51510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:02:04.187 [DEBUG] [Thread-51510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:02:04.187 [INFO] [Thread-51510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:02:04.195 [DEBUG] [Thread-51510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:02:04.195 [DEBUG] [Thread-51510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:02:04.195 [DEBUG] [Thread-51510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:02:04.195 [DEBUG] [Thread-51510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] client lang: <none>
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] server lang: <none>
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] kex follows: False
2025-11-17T09:02:04.196 [DEBUG] [Thread-51510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:02:04.197 [DEBUG] [Thread-51510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:02:04.197 [DEBUG] [Thread-51510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:02:04.197 [DEBUG] [Thread-51510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:02:04.197 [DEBUG] [Thread-51510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:02:04.197 [DEBUG] [Thread-51510] [transport.py] [_log()] Compression: none
2025-11-17T09:02:04.197 [DEBUG] [Thread-51510] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:02:04.258 [DEBUG] [Thread-51510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:02:04.259 [DEBUG] [Thread-51510] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:02:04.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:02:04.261 [DEBUG] [Thread-51510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:02:04.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:02:04.316 [DEBUG] [Thread-51510] [transport.py] [_log()] userauth is OK
2025-11-17T09:02:04.317 [DEBUG] [Thread-51510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:02:04.317 [DEBUG] [Thread-51510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:02:04.317 [DEBUG] [Thread-51510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:02:04.317 [DEBUG] [Thread-51510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:02:04.341 [INFO] [Thread-51510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:02:04.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:02:04.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:02:05.210 [DEBUG] [Thread-51510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:02:05.210 [DEBUG] [Thread-51510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:02:05.258 [DEBUG] [Thread-51510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:02:05.259 [DEBUG] [Thread-51510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:02:05.268 [DEBUG] [Thread-51510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:02:05.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:02:05.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:02:05.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:02:05.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:02:05.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:02:05.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:02:05.317 [DEBUG] [Thread-51510] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:02:10.287 [DEBUG] [Thread-51512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:02:13.701 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:02:13.702 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:02:25.348 [DEBUG] [Thread-51513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:02:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:02:35.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:02:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:02:35.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 2, 27), 14.55, 37.09, 0.0, 16.0, 15.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:02:35.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:02:27
2025-11-17T09:02:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:02:36.246 [DEBUG] [Thread-51514] [transport.py] [_log()] starting thread (client mode): 0xd07cc670
2025-11-17T09:02:36.246 [DEBUG] [Thread-51514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:02:36.266 [DEBUG] [Thread-51514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:02:36.267 [INFO] [Thread-51514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:02:36.269 [DEBUG] [Thread-51514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:02:36.269 [DEBUG] [Thread-51514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] client lang: <none>
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] server lang: <none>
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] kex follows: False
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] Compression: none
2025-11-17T09:02:36.270 [DEBUG] [Thread-51514] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:02:36.287 [DEBUG] [Thread-51514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:02:36.288 [DEBUG] [Thread-51514] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:02:36.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:02:36.289 [DEBUG] [Thread-51514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:02:36.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:02:36.291 [DEBUG] [Thread-51514] [transport.py] [_log()] userauth is OK
2025-11-17T09:02:36.291 [DEBUG] [Thread-51514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:02:36.291 [DEBUG] [Thread-51514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:02:36.291 [DEBUG] [Thread-51514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:02:36.291 [DEBUG] [Thread-51514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:02:36.327 [INFO] [Thread-51514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:02:36.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:02:37.079 [DEBUG] [Thread-51514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:02:37.079 [DEBUG] [Thread-51514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:02:37.080 [DEBUG] [Thread-51514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:02:37.120 [DEBUG] [Thread-51514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:02:37.121 [DEBUG] [Thread-51514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:02:37.123 [DEBUG] [Thread-51514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:02:37.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:02:37.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:02:37.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:02:37.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:02:37.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:02:37.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:02:37.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:02:37.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:02:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:02:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.293105 -999.00  +14.80  11.54     42   +2.20 1 1 1 1 1   888    0 13.85 85.67 ----- 11.5 11.5 111.5 16.3 20.7 -25.6 20.4 -23.2 19.0 -23.5 19.4 -24.3
2025-11-17T09:02:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:02:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:02:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.293105
2025-11-17T09:02:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:02:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:02:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:02:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:02:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:02:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:02:27', tmtdew=14.55, humidity=37.09, cloud=0.0, wind=16.0, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:02:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:02:37.148 [DEBUG] [Thread-51514] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:02:37.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:02:37.247 [DEBUG] [Thread-51517] [transport.py] [_log()] starting thread (client mode): 0xd3160850
2025-11-17T09:02:37.247 [DEBUG] [Thread-51517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:02:37.262 [DEBUG] [Thread-51517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:02:37.262 [INFO] [Thread-51517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:02:37.274 [DEBUG] [Thread-51517] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:02:37.274 [DEBUG] [Thread-51517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:02:37.274 [DEBUG] [Thread-51517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:02:37.274 [DEBUG] [Thread-51517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:02:37.274 [DEBUG] [Thread-51517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:02:37.274 [DEBUG] [Thread-51517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:02:37.275 [DEBUG] [Thread-51517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:02:37.275 [DEBUG] [Thread-51517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:02:37.275 [DEBUG] [Thread-51517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:02:37.275 [DEBUG] [Thread-51517] [transport.py] [_log()] client lang: <none>
2025-11-17T09:02:37.275 [DEBUG] [Thread-51517] [transport.py] [_log()] server lang: <none>
2025-11-17T09:02:37.275 [DEBUG] [Thread-51517] [transport.py] [_log()] kex follows: False
2025-11-17T09:02:37.275 [DEBUG] [Thread-51517] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:02:37.275 [DEBUG] [Thread-51517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:02:37.276 [DEBUG] [Thread-51517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:02:37.276 [DEBUG] [Thread-51517] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:02:37.276 [DEBUG] [Thread-51517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:02:37.276 [DEBUG] [Thread-51517] [transport.py] [_log()] Compression: none
2025-11-17T09:02:37.276 [DEBUG] [Thread-51517] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:02:37.344 [DEBUG] [Thread-51517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:02:37.345 [DEBUG] [Thread-51517] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:02:37.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:02:37.346 [DEBUG] [Thread-51517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:02:37.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:02:37.400 [DEBUG] [Thread-51517] [transport.py] [_log()] userauth is OK
2025-11-17T09:02:37.400 [DEBUG] [Thread-51517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:02:37.400 [DEBUG] [Thread-51517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:02:37.400 [DEBUG] [Thread-51517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:02:37.401 [DEBUG] [Thread-51517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:02:37.420 [INFO] [Thread-51517] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:02:37.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:02:37.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:02:38.270 [DEBUG] [Thread-51517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:02:38.270 [DEBUG] [Thread-51517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:02:38.319 [DEBUG] [Thread-51517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:02:38.319 [DEBUG] [Thread-51517] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:02:38.328 [DEBUG] [Thread-51517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:02:38.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:02:38.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:02:38.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:02:38.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:02:38.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:02:38.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:02:38.367 [DEBUG] [Thread-51517] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:02:40.387 [DEBUG] [Thread-51519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:02:55.444 [DEBUG] [Thread-51520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:02:59.101 [DEBUG] [Thread-51521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:03:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:03:08.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:03:08.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:03:09.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 2, 59), 14.88, 36.16, 0.0, 18.55, 15.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:03:09.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:02:59
2025-11-17T09:03:09.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:03:09.301 [DEBUG] [Thread-51522] [transport.py] [_log()] starting thread (client mode): 0xd0785990
2025-11-17T09:03:09.302 [DEBUG] [Thread-51522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:03:09.321 [DEBUG] [Thread-51522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:03:09.321 [INFO] [Thread-51522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:03:09.324 [DEBUG] [Thread-51522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:03:09.324 [DEBUG] [Thread-51522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] client lang: <none>
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] server lang: <none>
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] kex follows: False
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] Compression: none
2025-11-17T09:03:09.325 [DEBUG] [Thread-51522] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:03:09.339 [DEBUG] [Thread-51522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:03:09.339 [DEBUG] [Thread-51522] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:03:09.340 [DEBUG] [Thread-51522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:03:09.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:03:09.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:03:09.340 [DEBUG] [Thread-51522] [transport.py] [_log()] userauth is OK
2025-11-17T09:03:09.340 [DEBUG] [Thread-51522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:03:09.340 [DEBUG] [Thread-51522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:03:09.340 [DEBUG] [Thread-51522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:03:09.340 [DEBUG] [Thread-51522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:03:09.350 [INFO] [Thread-51522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:03:09.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:03:09.991 [DEBUG] [Thread-51522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:03:09.991 [DEBUG] [Thread-51522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:03:09.991 [DEBUG] [Thread-51522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:03:10.032 [DEBUG] [Thread-51522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:03:10.032 [DEBUG] [Thread-51522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:03:10.034 [DEBUG] [Thread-51522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:03:10.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:03:10.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:03:10.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:03:10.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:03:10.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:03:10.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:03:10.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:03:10.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:03:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:03:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.293452 -999.00  +15.00  10.06     42   +2.30 1 1 1 1 1   888    0 14.02 93.18 ----- 10.1 10.1 109.9 15.6 20.9 -23.9 20.5 -23.0 19.1 -23.6 19.5 -24.0
2025-11-17T09:03:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:03:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:03:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.293452
2025-11-17T09:03:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:03:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:03:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:03:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:03:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:03:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:02:59', tmtdew=14.88, humidity=36.16, cloud=0.0, wind=18.55, temperature=15.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:02:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:03:10.053 [DEBUG] [Thread-51522] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:03:10.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:03:10.138 [DEBUG] [Thread-51525] [transport.py] [_log()] starting thread (client mode): 0xd0786e60
2025-11-17T09:03:10.138 [DEBUG] [Thread-51525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:03:10.153 [DEBUG] [Thread-51525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:03:10.153 [INFO] [Thread-51525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:03:10.160 [DEBUG] [Thread-51525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] client lang: <none>
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] server lang: <none>
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] kex follows: False
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] Compression: none
2025-11-17T09:03:10.161 [DEBUG] [Thread-51525] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:03:10.218 [DEBUG] [Thread-51525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:03:10.218 [DEBUG] [Thread-51525] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:03:10.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:03:10.218 [DEBUG] [Thread-51525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:03:10.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:03:10.275 [DEBUG] [Thread-51525] [transport.py] [_log()] userauth is OK
2025-11-17T09:03:10.275 [DEBUG] [Thread-51525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:03:10.275 [DEBUG] [Thread-51525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:03:10.275 [DEBUG] [Thread-51525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:03:10.275 [DEBUG] [Thread-51525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:03:10.289 [INFO] [Thread-51525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:03:10.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:03:10.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:03:10.478 [DEBUG] [Thread-51527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:03:11.140 [DEBUG] [Thread-51525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:03:11.140 [DEBUG] [Thread-51525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:03:11.194 [DEBUG] [Thread-51525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:03:11.194 [DEBUG] [Thread-51525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:03:11.203 [DEBUG] [Thread-51525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:03:11.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:03:11.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:03:11.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:03:11.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:03:11.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:03:11.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:03:11.236 [DEBUG] [Thread-51525] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:03:13.843 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:03:13.843 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:03:25.512 [DEBUG] [Thread-51528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:03:40.548 [DEBUG] [Thread-51529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:03:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:03:41.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:03:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:03:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 3, 31), 15.0, 35.89, 0.0, 19.29, 15.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:03:41.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:03:31
2025-11-17T09:03:42.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:03:42.161 [DEBUG] [Thread-51530] [transport.py] [_log()] starting thread (client mode): 0xd3160e80
2025-11-17T09:03:42.161 [DEBUG] [Thread-51530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:03:42.181 [DEBUG] [Thread-51530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:03:42.181 [INFO] [Thread-51530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:03:42.185 [DEBUG] [Thread-51530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:03:42.185 [DEBUG] [Thread-51530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:03:42.185 [DEBUG] [Thread-51530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:03:42.185 [DEBUG] [Thread-51530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:03:42.185 [DEBUG] [Thread-51530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] client lang: <none>
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] server lang: <none>
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] kex follows: False
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:03:42.186 [DEBUG] [Thread-51530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:03:42.187 [DEBUG] [Thread-51530] [transport.py] [_log()] Compression: none
2025-11-17T09:03:42.187 [DEBUG] [Thread-51530] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:03:42.205 [DEBUG] [Thread-51530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:03:42.205 [DEBUG] [Thread-51530] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:03:42.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:03:42.207 [DEBUG] [Thread-51530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:03:42.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:03:42.209 [DEBUG] [Thread-51530] [transport.py] [_log()] userauth is OK
2025-11-17T09:03:42.210 [DEBUG] [Thread-51530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:03:42.210 [DEBUG] [Thread-51530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:03:42.210 [DEBUG] [Thread-51530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:03:42.210 [DEBUG] [Thread-51530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:03:42.224 [INFO] [Thread-51530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:03:42.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:03:42.952 [DEBUG] [Thread-51530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:03:42.952 [DEBUG] [Thread-51530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:03:42.952 [DEBUG] [Thread-51530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:03:42.993 [DEBUG] [Thread-51530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:03:42.993 [DEBUG] [Thread-51530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:03:42.997 [DEBUG] [Thread-51530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:03:43.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:03:43.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:03:43.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:03:43.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:03:43.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:03:43.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:03:43.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:03:43.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:03:43.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:03:43.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.293800 -999.00  +14.80  16.33     41   +2.00 1 1 1 1 1   888    0 14.04 88.80 ----- 16.3 16.3 111.6 24.2 20.7 -28.3 20.6 -24.1 19.1 -24.1 19.6 -24.3
2025-11-17T09:03:43.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:03:43.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:03:43.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.293800
2025-11-17T09:03:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:03:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:03:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:03:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:03:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:03:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:03:31', tmtdew=15.0, humidity=35.89, cloud=0.0, wind=19.29, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:03:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:03:43.024 [DEBUG] [Thread-51530] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:03:43.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:03:43.118 [DEBUG] [Thread-51533] [transport.py] [_log()] starting thread (client mode): 0xd07871f0
2025-11-17T09:03:43.118 [DEBUG] [Thread-51533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:03:43.133 [DEBUG] [Thread-51533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:03:43.133 [INFO] [Thread-51533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:03:43.141 [DEBUG] [Thread-51533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:03:43.141 [DEBUG] [Thread-51533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:03:43.141 [DEBUG] [Thread-51533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:03:43.141 [DEBUG] [Thread-51533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] client lang: <none>
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] server lang: <none>
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] kex follows: False
2025-11-17T09:03:43.142 [DEBUG] [Thread-51533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:03:43.143 [DEBUG] [Thread-51533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:03:43.143 [DEBUG] [Thread-51533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:03:43.143 [DEBUG] [Thread-51533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:03:43.143 [DEBUG] [Thread-51533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:03:43.143 [DEBUG] [Thread-51533] [transport.py] [_log()] Compression: none
2025-11-17T09:03:43.143 [DEBUG] [Thread-51533] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:03:43.203 [DEBUG] [Thread-51533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:03:43.204 [DEBUG] [Thread-51533] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:03:43.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:03:43.205 [DEBUG] [Thread-51533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:03:43.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:03:43.264 [DEBUG] [Thread-51533] [transport.py] [_log()] userauth is OK
2025-11-17T09:03:43.264 [DEBUG] [Thread-51533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:03:43.264 [DEBUG] [Thread-51533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:03:43.264 [DEBUG] [Thread-51533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:03:43.265 [DEBUG] [Thread-51533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:03:43.284 [INFO] [Thread-51533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:03:43.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:03:43.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:03:44.125 [DEBUG] [Thread-51533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:03:44.125 [DEBUG] [Thread-51533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:03:44.173 [DEBUG] [Thread-51533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:03:44.174 [DEBUG] [Thread-51533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:03:44.183 [DEBUG] [Thread-51533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:03:44.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:03:44.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:03:44.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:03:44.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:03:44.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:03:44.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:03:44.218 [DEBUG] [Thread-51533] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:03:55.590 [DEBUG] [Thread-51535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:03:59.156 [DEBUG] [Thread-51536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:04:10.634 [DEBUG] [Thread-51537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:04:13.989 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:04:13.991 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:04:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:04:14.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:04:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:04:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 4, 3), 15.19, 35.41, 0.0, 20.13, 15.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:04:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:04:03
2025-11-17T09:04:14.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:04:15.143 [DEBUG] [Thread-51538] [transport.py] [_log()] starting thread (client mode): 0xd0787070
2025-11-17T09:04:15.143 [DEBUG] [Thread-51538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:04:15.163 [DEBUG] [Thread-51538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:04:15.163 [INFO] [Thread-51538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:04:15.166 [DEBUG] [Thread-51538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:04:15.166 [DEBUG] [Thread-51538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] client lang: <none>
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] server lang: <none>
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] kex follows: False
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] Compression: none
2025-11-17T09:04:15.167 [DEBUG] [Thread-51538] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:04:15.186 [DEBUG] [Thread-51538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:04:15.187 [DEBUG] [Thread-51538] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:04:15.187 [DEBUG] [Thread-51538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:04:15.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:04:15.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:04:15.190 [DEBUG] [Thread-51538] [transport.py] [_log()] userauth is OK
2025-11-17T09:04:15.190 [DEBUG] [Thread-51538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:04:15.190 [DEBUG] [Thread-51538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:04:15.190 [DEBUG] [Thread-51538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:04:15.190 [DEBUG] [Thread-51538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:04:15.226 [INFO] [Thread-51538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:04:15.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:04:15.888 [DEBUG] [Thread-51538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:04:15.889 [DEBUG] [Thread-51538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:04:15.889 [DEBUG] [Thread-51538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:04:15.929 [DEBUG] [Thread-51538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:04:15.930 [DEBUG] [Thread-51538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:04:15.933 [DEBUG] [Thread-51538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:04:15.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:04:15.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:04:15.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:04:15.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:04:15.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:04:15.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:04:15.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:04:15.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:04:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:04:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.294147 -999.00  +14.50  17.36     42   +1.80 1 1 1 1 1   888    0 13.99 94.06 ----- 17.4 17.4 110.0 20.2 20.7 -24.8 20.5 -24.3 19.1 -24.6 19.5 -24.9
2025-11-17T09:04:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:04:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:04:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.294147
2025-11-17T09:04:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:04:15.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:04:15.957 [DEBUG] [Thread-51538] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:04:15.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:04:15.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:04:15.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:04:15.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:04:03', tmtdew=15.19, humidity=35.41, cloud=0.0, wind=20.13, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:03:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:04:16.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:04:16.066 [DEBUG] [Thread-51541] [transport.py] [_log()] starting thread (client mode): 0xd3162e90
2025-11-17T09:04:16.066 [DEBUG] [Thread-51541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:04:16.081 [DEBUG] [Thread-51541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:04:16.081 [INFO] [Thread-51541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:04:16.089 [DEBUG] [Thread-51541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:04:16.089 [DEBUG] [Thread-51541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:04:16.089 [DEBUG] [Thread-51541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:04:16.089 [DEBUG] [Thread-51541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:04:16.089 [DEBUG] [Thread-51541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:04:16.089 [DEBUG] [Thread-51541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:04:16.089 [DEBUG] [Thread-51541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] client lang: <none>
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] server lang: <none>
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] kex follows: False
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:04:16.090 [DEBUG] [Thread-51541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:04:16.091 [DEBUG] [Thread-51541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:04:16.091 [DEBUG] [Thread-51541] [transport.py] [_log()] Compression: none
2025-11-17T09:04:16.091 [DEBUG] [Thread-51541] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:04:16.148 [DEBUG] [Thread-51541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:04:16.149 [DEBUG] [Thread-51541] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:04:16.150 [DEBUG] [Thread-51541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:04:16.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:04:16.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:04:16.212 [DEBUG] [Thread-51541] [transport.py] [_log()] userauth is OK
2025-11-17T09:04:16.212 [DEBUG] [Thread-51541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:04:16.212 [DEBUG] [Thread-51541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:04:16.212 [DEBUG] [Thread-51541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:04:16.212 [DEBUG] [Thread-51541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:04:16.232 [INFO] [Thread-51541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:04:16.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:04:16.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:04:17.093 [DEBUG] [Thread-51541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:04:17.093 [DEBUG] [Thread-51541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:04:17.140 [DEBUG] [Thread-51541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:04:17.141 [DEBUG] [Thread-51541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:04:17.150 [DEBUG] [Thread-51541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:04:17.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:04:17.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:04:17.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:04:17.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:04:17.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:04:17.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:04:17.186 [DEBUG] [Thread-51541] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:04:25.669 [DEBUG] [Thread-51543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:04:40.704 [DEBUG] [Thread-51544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:04:47.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:04:47.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:04:47.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:04:47.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 4, 35), 15.03, 35.89, 0.0, 19.11, 15.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:04:47.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:04:35
2025-11-17T09:04:47.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:04:48.115 [DEBUG] [Thread-51545] [transport.py] [_log()] starting thread (client mode): 0xd3160c10
2025-11-17T09:04:48.115 [DEBUG] [Thread-51545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:04:48.127 [DEBUG] [Thread-51545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:04:48.127 [INFO] [Thread-51545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:04:48.128 [DEBUG] [Thread-51545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:04:48.128 [DEBUG] [Thread-51545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:04:48.128 [DEBUG] [Thread-51545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:04:48.128 [DEBUG] [Thread-51545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:04:48.128 [DEBUG] [Thread-51545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:04:48.128 [DEBUG] [Thread-51545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:04:48.128 [DEBUG] [Thread-51545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:04:48.128 [DEBUG] [Thread-51545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] client lang: <none>
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] server lang: <none>
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] kex follows: False
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] Compression: none
2025-11-17T09:04:48.129 [DEBUG] [Thread-51545] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:04:48.139 [DEBUG] [Thread-51545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:04:48.139 [DEBUG] [Thread-51545] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:04:48.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:04:48.140 [DEBUG] [Thread-51545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:04:48.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:04:48.142 [DEBUG] [Thread-51545] [transport.py] [_log()] userauth is OK
2025-11-17T09:04:48.142 [DEBUG] [Thread-51545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:04:48.142 [DEBUG] [Thread-51545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:04:48.142 [DEBUG] [Thread-51545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:04:48.142 [DEBUG] [Thread-51545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:04:48.157 [INFO] [Thread-51545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:04:48.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:04:48.766 [DEBUG] [Thread-51545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:04:48.766 [DEBUG] [Thread-51545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:04:48.767 [DEBUG] [Thread-51545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:04:48.808 [DEBUG] [Thread-51545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:04:48.808 [DEBUG] [Thread-51545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:04:48.812 [DEBUG] [Thread-51545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:04:48.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:04:48.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:04:48.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:04:48.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:04:48.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:04:48.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:04:48.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:04:48.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:04:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:04:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.294494 -999.00  +14.40  20.68     42   +1.90 1 1 1 1 1   888    0 13.88 94.86 ----- 20.7 20.7 119.8 23.4 20.5 -27.0 20.5 -23.7 19.1 -24.4 19.5 -24.6
2025-11-17T09:04:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:04:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:04:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.294494
2025-11-17T09:04:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:04:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:04:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:04:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:04:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:04:48.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:04:35', tmtdew=15.03, humidity=35.89, cloud=0.0, wind=19.11, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:04:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:04:48.837 [DEBUG] [Thread-51545] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:04:48.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:04:48.937 [DEBUG] [Thread-51548] [transport.py] [_log()] starting thread (client mode): 0xd0784280
2025-11-17T09:04:48.937 [DEBUG] [Thread-51548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:04:48.952 [DEBUG] [Thread-51548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:04:48.952 [INFO] [Thread-51548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:04:48.965 [DEBUG] [Thread-51548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:04:48.965 [DEBUG] [Thread-51548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] client lang: <none>
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] server lang: <none>
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] kex follows: False
2025-11-17T09:04:48.966 [DEBUG] [Thread-51548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:04:48.967 [DEBUG] [Thread-51548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:04:48.967 [DEBUG] [Thread-51548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:04:48.967 [DEBUG] [Thread-51548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:04:48.967 [DEBUG] [Thread-51548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:04:48.967 [DEBUG] [Thread-51548] [transport.py] [_log()] Compression: none
2025-11-17T09:04:48.967 [DEBUG] [Thread-51548] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:04:49.020 [DEBUG] [Thread-51548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:04:49.021 [DEBUG] [Thread-51548] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:04:49.021 [DEBUG] [Thread-51548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:04:49.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:04:49.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:04:49.076 [DEBUG] [Thread-51548] [transport.py] [_log()] userauth is OK
2025-11-17T09:04:49.076 [DEBUG] [Thread-51548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:04:49.076 [DEBUG] [Thread-51548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:04:49.076 [DEBUG] [Thread-51548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:04:49.076 [DEBUG] [Thread-51548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:04:49.095 [INFO] [Thread-51548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:04:49.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:04:49.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:04:49.947 [DEBUG] [Thread-51548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:04:49.948 [DEBUG] [Thread-51548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:04:49.996 [DEBUG] [Thread-51548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:04:49.996 [DEBUG] [Thread-51548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:04:50.005 [DEBUG] [Thread-51548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:04:50.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:04:50.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:04:50.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:04:50.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:04:50.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:04:50.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:04:50.046 [DEBUG] [Thread-51548] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:04:55.743 [DEBUG] [Thread-51550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:04:59.208 [DEBUG] [Thread-51551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:05:10.787 [DEBUG] [Thread-51552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:05:14.132 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:05:14.133 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:05:20.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:05:20.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:05:20.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:05:20.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 5, 7), 14.97, 36.04, 0.0, 17.73, 15.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:05:20.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:05:07
2025-11-17T09:05:20.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:05:20.986 [DEBUG] [Thread-51553] [transport.py] [_log()] starting thread (client mode): 0xd0786320
2025-11-17T09:05:20.986 [DEBUG] [Thread-51553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:05:21.005 [DEBUG] [Thread-51553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:05:21.005 [INFO] [Thread-51553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:05:21.009 [DEBUG] [Thread-51553] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:05:21.009 [DEBUG] [Thread-51553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:05:21.009 [DEBUG] [Thread-51553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:05:21.009 [DEBUG] [Thread-51553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:05:21.009 [DEBUG] [Thread-51553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:05:21.009 [DEBUG] [Thread-51553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:05:21.009 [DEBUG] [Thread-51553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:05:21.009 [DEBUG] [Thread-51553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] client lang: <none>
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] server lang: <none>
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] kex follows: False
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] Compression: none
2025-11-17T09:05:21.010 [DEBUG] [Thread-51553] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:05:21.030 [DEBUG] [Thread-51553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:05:21.030 [DEBUG] [Thread-51553] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:05:21.031 [DEBUG] [Thread-51553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:05:21.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:05:21.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:05:21.033 [DEBUG] [Thread-51553] [transport.py] [_log()] userauth is OK
2025-11-17T09:05:21.033 [DEBUG] [Thread-51553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:05:21.033 [DEBUG] [Thread-51553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:05:21.033 [DEBUG] [Thread-51553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:05:21.033 [DEBUG] [Thread-51553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:05:21.068 [INFO] [Thread-51553] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:05:21.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:05:21.735 [DEBUG] [Thread-51553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:05:21.735 [DEBUG] [Thread-51553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:05:21.735 [DEBUG] [Thread-51553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:05:21.776 [DEBUG] [Thread-51553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:05:21.776 [DEBUG] [Thread-51553] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:05:21.779 [DEBUG] [Thread-51553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:05:21.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:05:21.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:05:21.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:05:21.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:05:21.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:05:21.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:05:21.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:05:21.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:05:21.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:05:21.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.294841 -999.00  +14.20  14.75     42   +1.70 1 1 1 1 1   888    0 14.59 97.13 ----- 14.8 14.8 97.4 22.1 20.6 -26.1 20.4 -23.9 19.0 -25.6 19.5 -24.7
2025-11-17T09:05:21.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:05:21.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:05:21.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.294841
2025-11-17T09:05:21.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:05:21.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:05:21.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:05:21.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:05:21.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:05:21.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:05:07', tmtdew=14.97, humidity=36.04, cloud=0.0, wind=17.73, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:04:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:05:21.809 [DEBUG] [Thread-51553] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:05:21.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:05:21.905 [DEBUG] [Thread-51556] [transport.py] [_log()] starting thread (client mode): 0xd3160790
2025-11-17T09:05:21.905 [DEBUG] [Thread-51556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:05:21.921 [DEBUG] [Thread-51556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:05:21.921 [INFO] [Thread-51556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:05:21.928 [DEBUG] [Thread-51556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:05:21.928 [DEBUG] [Thread-51556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] client lang: <none>
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] server lang: <none>
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] kex follows: False
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] Compression: none
2025-11-17T09:05:21.929 [DEBUG] [Thread-51556] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:05:21.991 [DEBUG] [Thread-51556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:05:21.991 [DEBUG] [Thread-51556] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:05:21.991 [DEBUG] [Thread-51556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:05:21.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:05:21.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:05:22.052 [DEBUG] [Thread-51556] [transport.py] [_log()] userauth is OK
2025-11-17T09:05:22.052 [DEBUG] [Thread-51556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:05:22.052 [DEBUG] [Thread-51556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:05:22.052 [DEBUG] [Thread-51556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:05:22.052 [DEBUG] [Thread-51556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:05:22.069 [INFO] [Thread-51556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:05:22.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:05:22.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:05:22.956 [DEBUG] [Thread-51556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:05:22.956 [DEBUG] [Thread-51556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:05:23.004 [DEBUG] [Thread-51556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:05:23.005 [DEBUG] [Thread-51556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:05:23.014 [DEBUG] [Thread-51556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:05:23.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:05:23.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:05:23.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:05:23.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:05:23.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:05:23.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:05:23.051 [DEBUG] [Thread-51556] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:05:25.827 [DEBUG] [Thread-51558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:05:40.873 [DEBUG] [Thread-51559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:05:53.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:05:53.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:05:53.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:05:53.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 5, 39), 14.69, 36.61, 0.0, 18.81, 14.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:05:53.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:05:39
2025-11-17T09:05:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:05:53.975 [DEBUG] [Thread-51560] [transport.py] [_log()] starting thread (client mode): 0xd071ab60
2025-11-17T09:05:53.975 [DEBUG] [Thread-51560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:05:53.985 [DEBUG] [Thread-51560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:05:53.985 [INFO] [Thread-51560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:05:53.986 [DEBUG] [Thread-51560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:05:53.986 [DEBUG] [Thread-51560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:05:53.986 [DEBUG] [Thread-51560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:05:53.986 [DEBUG] [Thread-51560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:05:53.986 [DEBUG] [Thread-51560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:05:53.986 [DEBUG] [Thread-51560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] client lang: <none>
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] server lang: <none>
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] kex follows: False
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] Compression: none
2025-11-17T09:05:53.987 [DEBUG] [Thread-51560] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:05:53.997 [DEBUG] [Thread-51560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:05:53.998 [DEBUG] [Thread-51560] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:05:53.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:05:53.999 [DEBUG] [Thread-51560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:05:53.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:05:54.000 [DEBUG] [Thread-51560] [transport.py] [_log()] userauth is OK
2025-11-17T09:05:54.000 [DEBUG] [Thread-51560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:05:54.000 [DEBUG] [Thread-51560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:05:54.000 [DEBUG] [Thread-51560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:05:54.000 [DEBUG] [Thread-51560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:05:54.020 [INFO] [Thread-51560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:05:54.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:05:54.552 [DEBUG] [Thread-51560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:05:54.552 [DEBUG] [Thread-51560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:05:54.552 [DEBUG] [Thread-51560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:05:54.592 [DEBUG] [Thread-51560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:05:54.593 [DEBUG] [Thread-51560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:05:54.596 [DEBUG] [Thread-51560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:05:54.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:05:54.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:05:54.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:05:54.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:05:54.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:05:54.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:05:54.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:05:54.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:05:54.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:05:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.295536 -999.00  +13.80   9.88     44   +1.80 1 1 1 1 1   888    0 14.34 93.88 ----- 9.9 9.9 102.8 29.4 20.4 -28.1 20.4 -24.9 19.1 -25.6 19.4 -25.2
2025-11-17T09:05:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:05:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:05:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.295536
2025-11-17T09:05:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:05:54.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:05:54.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:05:54.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:05:54.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:05:54.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:05:39', tmtdew=14.69, humidity=36.61, cloud=0.0, wind=18.81, temperature=14.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:05:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:05:54.628 [DEBUG] [Thread-51560] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:05:54.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:05:54.724 [DEBUG] [Thread-51563] [transport.py] [_log()] starting thread (client mode): 0xd071b400
2025-11-17T09:05:54.724 [DEBUG] [Thread-51563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:05:54.739 [DEBUG] [Thread-51563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:05:54.739 [INFO] [Thread-51563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:05:54.746 [DEBUG] [Thread-51563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:05:54.747 [DEBUG] [Thread-51563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:05:54.747 [DEBUG] [Thread-51563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:05:54.747 [DEBUG] [Thread-51563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:05:54.747 [DEBUG] [Thread-51563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:05:54.747 [DEBUG] [Thread-51563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:05:54.747 [DEBUG] [Thread-51563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:05:54.747 [DEBUG] [Thread-51563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:05:54.747 [DEBUG] [Thread-51563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:05:54.748 [DEBUG] [Thread-51563] [transport.py] [_log()] client lang: <none>
2025-11-17T09:05:54.748 [DEBUG] [Thread-51563] [transport.py] [_log()] server lang: <none>
2025-11-17T09:05:54.748 [DEBUG] [Thread-51563] [transport.py] [_log()] kex follows: False
2025-11-17T09:05:54.748 [DEBUG] [Thread-51563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:05:54.748 [DEBUG] [Thread-51563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:05:54.748 [DEBUG] [Thread-51563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:05:54.748 [DEBUG] [Thread-51563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:05:54.748 [DEBUG] [Thread-51563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:05:54.749 [DEBUG] [Thread-51563] [transport.py] [_log()] Compression: none
2025-11-17T09:05:54.749 [DEBUG] [Thread-51563] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:05:54.804 [DEBUG] [Thread-51563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:05:54.805 [DEBUG] [Thread-51563] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:05:54.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:05:54.807 [DEBUG] [Thread-51563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:05:54.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:05:54.864 [DEBUG] [Thread-51563] [transport.py] [_log()] userauth is OK
2025-11-17T09:05:54.864 [DEBUG] [Thread-51563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:05:54.864 [DEBUG] [Thread-51563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:05:54.864 [DEBUG] [Thread-51563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:05:54.865 [DEBUG] [Thread-51563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:05:54.884 [INFO] [Thread-51563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:05:54.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:05:54.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:05:55.731 [DEBUG] [Thread-51563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:05:55.732 [DEBUG] [Thread-51563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:05:55.780 [DEBUG] [Thread-51563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:05:55.780 [DEBUG] [Thread-51563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:05:55.789 [DEBUG] [Thread-51563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:05:55.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:05:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:05:55.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:05:55.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:05:55.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:05:55.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:05:55.825 [DEBUG] [Thread-51563] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:05:55.903 [DEBUG] [Thread-51565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:05:59.265 [DEBUG] [Thread-51566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:06:10.954 [DEBUG] [Thread-51567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:06:14.274 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:06:14.275 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:06:25.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:06:25.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:06:25.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:06:25.987 [DEBUG] [Thread-51568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:06:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 6, 11), 14.76, 36.44, 0.0, 17.87, 14.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:06:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:06:11
2025-11-17T09:06:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:06:26.754 [DEBUG] [Thread-51569] [transport.py] [_log()] starting thread (client mode): 0xd071a710
2025-11-17T09:06:26.754 [DEBUG] [Thread-51569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:06:26.774 [DEBUG] [Thread-51569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:06:26.774 [INFO] [Thread-51569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:06:26.778 [DEBUG] [Thread-51569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] client lang: <none>
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] server lang: <none>
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] kex follows: False
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] Compression: none
2025-11-17T09:06:26.779 [DEBUG] [Thread-51569] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:06:26.795 [DEBUG] [Thread-51569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:06:26.796 [DEBUG] [Thread-51569] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:06:26.796 [DEBUG] [Thread-51569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:06:26.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:06:26.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:06:26.799 [DEBUG] [Thread-51569] [transport.py] [_log()] userauth is OK
2025-11-17T09:06:26.799 [DEBUG] [Thread-51569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:06:26.799 [DEBUG] [Thread-51569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:06:26.799 [DEBUG] [Thread-51569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:06:26.799 [DEBUG] [Thread-51569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:06:26.831 [INFO] [Thread-51569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:06:26.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:06:27.486 [DEBUG] [Thread-51569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:06:27.486 [DEBUG] [Thread-51569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:06:27.487 [DEBUG] [Thread-51569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:06:27.527 [DEBUG] [Thread-51569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:06:27.528 [DEBUG] [Thread-51569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:06:27.531 [DEBUG] [Thread-51569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:06:27.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:06:27.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:06:27.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:06:27.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:06:27.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:06:27.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:06:27.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:06:27.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:06:27.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:06:27.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.295883 -999.00  +13.90  17.55     44   +2.10 1 1 1 1 1   888    0 14.27 89.39 ----- 17.6 17.6 77.4 20.9 20.6 -29.1 20.4 -23.3 19.1 -24.3 19.4 -24.3
2025-11-17T09:06:27.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:06:27.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:06:27.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.295883
2025-11-17T09:06:27.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:06:27.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:06:27.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:06:27.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:06:27.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:06:27.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:06:11', tmtdew=14.76, humidity=36.44, cloud=0.0, wind=17.87, temperature=14.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:06:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:06:27.556 [DEBUG] [Thread-51569] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:06:27.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:06:27.647 [DEBUG] [Thread-51572] [transport.py] [_log()] starting thread (client mode): 0xd317cc10
2025-11-17T09:06:27.648 [DEBUG] [Thread-51572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:06:27.665 [DEBUG] [Thread-51572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:06:27.665 [INFO] [Thread-51572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:06:27.673 [DEBUG] [Thread-51572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:06:27.673 [DEBUG] [Thread-51572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:06:27.673 [DEBUG] [Thread-51572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:06:27.673 [DEBUG] [Thread-51572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:06:27.673 [DEBUG] [Thread-51572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:06:27.673 [DEBUG] [Thread-51572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] client lang: <none>
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] server lang: <none>
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] kex follows: False
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:06:27.674 [DEBUG] [Thread-51572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:06:27.675 [DEBUG] [Thread-51572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:06:27.675 [DEBUG] [Thread-51572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:06:27.675 [DEBUG] [Thread-51572] [transport.py] [_log()] Compression: none
2025-11-17T09:06:27.675 [DEBUG] [Thread-51572] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:06:27.732 [DEBUG] [Thread-51572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:06:27.732 [DEBUG] [Thread-51572] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:06:27.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:06:27.733 [DEBUG] [Thread-51572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:06:27.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:06:27.788 [DEBUG] [Thread-51572] [transport.py] [_log()] userauth is OK
2025-11-17T09:06:27.788 [DEBUG] [Thread-51572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:06:27.788 [DEBUG] [Thread-51572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:06:27.788 [DEBUG] [Thread-51572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:06:27.788 [DEBUG] [Thread-51572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:06:27.811 [INFO] [Thread-51572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:06:27.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:06:27.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:06:28.725 [DEBUG] [Thread-51572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:06:28.725 [DEBUG] [Thread-51572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:06:28.772 [DEBUG] [Thread-51572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:06:28.772 [DEBUG] [Thread-51572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:06:28.781 [DEBUG] [Thread-51572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:06:28.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:06:28.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:06:28.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:06:28.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:06:28.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:06:28.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:06:28.815 [DEBUG] [Thread-51572] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:06:41.016 [DEBUG] [Thread-51574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:06:56.066 [DEBUG] [Thread-51575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:06:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:06:58.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:06:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:06:59.312 [DEBUG] [Thread-51576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:06:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 6, 43), 14.73, 36.71, 0.0, 14.43, 15.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:06:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:06:43
2025-11-17T09:06:59.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:06:59.797 [DEBUG] [Thread-51577] [transport.py] [_log()] starting thread (client mode): 0xd317df30
2025-11-17T09:06:59.797 [DEBUG] [Thread-51577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:06:59.817 [DEBUG] [Thread-51577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:06:59.818 [INFO] [Thread-51577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] client lang: <none>
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] server lang: <none>
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] kex follows: False
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] Compression: none
2025-11-17T09:06:59.819 [DEBUG] [Thread-51577] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:06:59.829 [DEBUG] [Thread-51577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:06:59.829 [DEBUG] [Thread-51577] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:06:59.829 [DEBUG] [Thread-51577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:06:59.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:06:59.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:06:59.830 [DEBUG] [Thread-51577] [transport.py] [_log()] userauth is OK
2025-11-17T09:06:59.830 [DEBUG] [Thread-51577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:06:59.830 [DEBUG] [Thread-51577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:06:59.830 [DEBUG] [Thread-51577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:06:59.830 [DEBUG] [Thread-51577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:06:59.840 [INFO] [Thread-51577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:06:59.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:07:00.386 [DEBUG] [Thread-51577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:07:00.386 [DEBUG] [Thread-51577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:07:00.386 [DEBUG] [Thread-51577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:07:00.427 [DEBUG] [Thread-51577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:07:00.427 [DEBUG] [Thread-51577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:07:00.429 [DEBUG] [Thread-51577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:07:00.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:07:00.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:07:00.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:07:00.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:07:00.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:07:00.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:07:00.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.296230 -999.00  +14.10  19.32     43   +2.00 1 1 1 1 1   888    0 13.89 84.57 ----- 19.3 19.3 74.6 21.1 20.8 -24.9 20.4 -23.9 19.1 -23.8 19.5 -24.6
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.296230
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:07:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:06:43', tmtdew=14.73, humidity=36.71, cloud=0.0, wind=14.43, temperature=15.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:06:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:07:00.442 [DEBUG] [Thread-51577] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:07:00.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:07:00.527 [DEBUG] [Thread-51580] [transport.py] [_log()] starting thread (client mode): 0xd07866e0
2025-11-17T09:07:00.527 [DEBUG] [Thread-51580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:07:00.542 [DEBUG] [Thread-51580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:07:00.542 [INFO] [Thread-51580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] client lang: <none>
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] server lang: <none>
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] kex follows: False
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] Compression: none
2025-11-17T09:07:00.550 [DEBUG] [Thread-51580] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:07:00.606 [DEBUG] [Thread-51580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:07:00.606 [DEBUG] [Thread-51580] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:07:00.606 [DEBUG] [Thread-51580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:07:00.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:07:00.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:07:00.663 [DEBUG] [Thread-51580] [transport.py] [_log()] userauth is OK
2025-11-17T09:07:00.663 [DEBUG] [Thread-51580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:07:00.663 [DEBUG] [Thread-51580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:07:00.663 [DEBUG] [Thread-51580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:07:00.663 [DEBUG] [Thread-51580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:07:00.679 [INFO] [Thread-51580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:07:00.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:07:00.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:07:01.554 [DEBUG] [Thread-51580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:07:01.554 [DEBUG] [Thread-51580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:07:01.602 [DEBUG] [Thread-51580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:07:01.602 [DEBUG] [Thread-51580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:07:01.610 [DEBUG] [Thread-51580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:07:01.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:07:01.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:07:01.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:07:01.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:07:01.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:07:01.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:07:01.641 [DEBUG] [Thread-51580] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:07:11.102 [DEBUG] [Thread-51582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:07:14.418 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:07:14.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:07:26.153 [DEBUG] [Thread-51583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:07:31.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:07:31.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:07:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:07:32.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 7, 15), 14.67, 36.86, 0.0, 15.79, 15.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:07:32.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:07:15
2025-11-17T09:07:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:07:32.566 [DEBUG] [Thread-51584] [transport.py] [_log()] starting thread (client mode): 0xd3160790
2025-11-17T09:07:32.567 [DEBUG] [Thread-51584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:07:32.586 [DEBUG] [Thread-51584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:07:32.586 [INFO] [Thread-51584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:07:32.589 [DEBUG] [Thread-51584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] client lang: <none>
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] server lang: <none>
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] kex follows: False
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] Compression: none
2025-11-17T09:07:32.590 [DEBUG] [Thread-51584] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:07:32.609 [DEBUG] [Thread-51584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:07:32.609 [DEBUG] [Thread-51584] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:07:32.610 [DEBUG] [Thread-51584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:07:32.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:07:32.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:07:32.612 [DEBUG] [Thread-51584] [transport.py] [_log()] userauth is OK
2025-11-17T09:07:32.612 [DEBUG] [Thread-51584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:07:32.613 [DEBUG] [Thread-51584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:07:32.613 [DEBUG] [Thread-51584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:07:32.613 [DEBUG] [Thread-51584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:07:32.637 [INFO] [Thread-51584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:07:32.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:07:33.257 [DEBUG] [Thread-51584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:07:33.257 [DEBUG] [Thread-51584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:07:33.257 [DEBUG] [Thread-51584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:07:33.298 [DEBUG] [Thread-51584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:07:33.298 [DEBUG] [Thread-51584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:07:33.301 [DEBUG] [Thread-51584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:07:33.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:07:33.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:07:33.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:07:33.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:07:33.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:07:33.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:07:33.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:07:33.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:07:33.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:07:33.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.296577 -999.00  +14.30  14.34     43   +2.10 1 1 1 1 1   888    0 13.86 84.84 ----- 14.3 14.3 79.3 18.9 20.8 -24.9 20.5 -23.6 19.1 -23.2 19.6 -23.8
2025-11-17T09:07:33.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:07:33.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:07:33.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.296577
2025-11-17T09:07:33.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:07:33.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:07:33.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:07:33.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:07:33.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:07:33.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:07:15', tmtdew=14.67, humidity=36.86, cloud=0.0, wind=15.79, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:07:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:07:33.327 [DEBUG] [Thread-51584] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:07:33.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:07:33.433 [DEBUG] [Thread-51587] [transport.py] [_log()] starting thread (client mode): 0xd0719810
2025-11-17T09:07:33.433 [DEBUG] [Thread-51587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:07:33.449 [DEBUG] [Thread-51587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:07:33.449 [INFO] [Thread-51587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:07:33.457 [DEBUG] [Thread-51587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:07:33.457 [DEBUG] [Thread-51587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:07:33.457 [DEBUG] [Thread-51587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:07:33.457 [DEBUG] [Thread-51587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:07:33.457 [DEBUG] [Thread-51587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] client lang: <none>
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] server lang: <none>
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] kex follows: False
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:07:33.458 [DEBUG] [Thread-51587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:07:33.459 [DEBUG] [Thread-51587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:07:33.459 [DEBUG] [Thread-51587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:07:33.459 [DEBUG] [Thread-51587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:07:33.459 [DEBUG] [Thread-51587] [transport.py] [_log()] Compression: none
2025-11-17T09:07:33.459 [DEBUG] [Thread-51587] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:07:33.519 [DEBUG] [Thread-51587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:07:33.519 [DEBUG] [Thread-51587] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:07:33.520 [DEBUG] [Thread-51587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:07:33.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:07:33.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:07:33.576 [DEBUG] [Thread-51587] [transport.py] [_log()] userauth is OK
2025-11-17T09:07:33.576 [DEBUG] [Thread-51587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:07:33.576 [DEBUG] [Thread-51587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:07:33.576 [DEBUG] [Thread-51587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:07:33.577 [DEBUG] [Thread-51587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:07:33.596 [INFO] [Thread-51587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:07:33.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:07:33.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:07:34.446 [DEBUG] [Thread-51587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:07:34.446 [DEBUG] [Thread-51587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:07:34.494 [DEBUG] [Thread-51587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:07:34.494 [DEBUG] [Thread-51587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:07:34.503 [DEBUG] [Thread-51587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:07:34.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:07:34.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:07:34.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:07:34.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:07:34.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:07:34.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:07:34.536 [DEBUG] [Thread-51587] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:07:41.184 [DEBUG] [Thread-51589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:07:56.232 [DEBUG] [Thread-51590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:07:59.366 [DEBUG] [Thread-51591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:08:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:08:04.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:08:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:08:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 7, 47), 14.86, 36.54, 0.0, 18.39, 15.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:08:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:07:47
2025-11-17T09:08:05.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:08:05.487 [DEBUG] [Thread-51592] [transport.py] [_log()] starting thread (client mode): 0xd07195a0
2025-11-17T09:08:05.487 [DEBUG] [Thread-51592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:08:05.507 [DEBUG] [Thread-51592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:08:05.507 [INFO] [Thread-51592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:08:05.510 [DEBUG] [Thread-51592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:08:05.510 [DEBUG] [Thread-51592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:08:05.510 [DEBUG] [Thread-51592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] client lang: <none>
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] server lang: <none>
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] kex follows: False
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:08:05.511 [DEBUG] [Thread-51592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:08:05.512 [DEBUG] [Thread-51592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:08:05.512 [DEBUG] [Thread-51592] [transport.py] [_log()] Compression: none
2025-11-17T09:08:05.512 [DEBUG] [Thread-51592] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:08:05.532 [DEBUG] [Thread-51592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:08:05.532 [DEBUG] [Thread-51592] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:08:05.532 [DEBUG] [Thread-51592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:08:05.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:08:05.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:08:05.533 [DEBUG] [Thread-51592] [transport.py] [_log()] userauth is OK
2025-11-17T09:08:05.533 [DEBUG] [Thread-51592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:08:05.533 [DEBUG] [Thread-51592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:08:05.534 [DEBUG] [Thread-51592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:08:05.534 [DEBUG] [Thread-51592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:08:05.557 [INFO] [Thread-51592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:08:05.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:08:06.177 [DEBUG] [Thread-51592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:08:06.177 [DEBUG] [Thread-51592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:08:06.178 [DEBUG] [Thread-51592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:08:06.219 [DEBUG] [Thread-51592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:08:06.219 [DEBUG] [Thread-51592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:08:06.222 [DEBUG] [Thread-51592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:08:06.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:08:06.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:08:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:08:06.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:08:06.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:08:06.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:08:06.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:08:06.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:08:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:08:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.296925 -999.00  +14.40  12.59     43   +2.20 1 1 1 1 1   888    0 14.10 89.92 ----- 12.6 12.6 113.8 18.4 20.8 -24.8 20.6 -22.9 19.2 -23.9 19.6 -24.2
2025-11-17T09:08:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:08:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:08:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.296925
2025-11-17T09:08:06.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:08:06.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:08:06.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:08:06.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:08:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:08:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:07:47', tmtdew=14.86, humidity=36.54, cloud=0.0, wind=18.39, temperature=15.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:07:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:08:06.249 [DEBUG] [Thread-51592] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:08:06.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:08:06.354 [DEBUG] [Thread-51595] [transport.py] [_log()] starting thread (client mode): 0xd3153520
2025-11-17T09:08:06.355 [DEBUG] [Thread-51595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:08:06.370 [DEBUG] [Thread-51595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:08:06.370 [INFO] [Thread-51595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:08:06.381 [DEBUG] [Thread-51595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:08:06.382 [DEBUG] [Thread-51595] [transport.py] [_log()] client lang: <none>
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] server lang: <none>
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] kex follows: False
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] Compression: none
2025-11-17T09:08:06.383 [DEBUG] [Thread-51595] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:08:06.443 [DEBUG] [Thread-51595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:08:06.443 [DEBUG] [Thread-51595] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:08:06.444 [DEBUG] [Thread-51595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:08:06.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:08:06.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:08:06.506 [DEBUG] [Thread-51595] [transport.py] [_log()] userauth is OK
2025-11-17T09:08:06.507 [DEBUG] [Thread-51595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:08:06.507 [DEBUG] [Thread-51595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:08:06.507 [DEBUG] [Thread-51595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:08:06.507 [DEBUG] [Thread-51595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:08:06.526 [INFO] [Thread-51595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:08:06.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:08:06.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:08:07.466 [DEBUG] [Thread-51595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:08:07.467 [DEBUG] [Thread-51595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:08:07.515 [DEBUG] [Thread-51595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:08:07.515 [DEBUG] [Thread-51595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:08:07.525 [DEBUG] [Thread-51595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:08:07.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:08:07.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:08:07.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:08:07.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:08:07.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:08:07.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:08:07.566 [DEBUG] [Thread-51595] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:08:11.272 [DEBUG] [Thread-51597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:08:14.561 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:08:14.562 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:08:26.322 [DEBUG] [Thread-51598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:08:37.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:08:37.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:08:37.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:08:38.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 8, 19), 14.83, 36.59, 0.0, 19.36, 15.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:08:38.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:08:19
2025-11-17T09:08:38.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:08:38.531 [DEBUG] [Thread-51599] [transport.py] [_log()] starting thread (client mode): 0xd317c610
2025-11-17T09:08:38.531 [DEBUG] [Thread-51599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:08:38.544 [DEBUG] [Thread-51599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:08:38.544 [INFO] [Thread-51599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] client lang: <none>
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] server lang: <none>
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] kex follows: False
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:08:38.545 [DEBUG] [Thread-51599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:08:38.546 [DEBUG] [Thread-51599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:08:38.546 [DEBUG] [Thread-51599] [transport.py] [_log()] Compression: none
2025-11-17T09:08:38.546 [DEBUG] [Thread-51599] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:08:38.554 [DEBUG] [Thread-51599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:08:38.554 [DEBUG] [Thread-51599] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:08:38.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:08:38.554 [DEBUG] [Thread-51599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:08:38.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:08:38.555 [DEBUG] [Thread-51599] [transport.py] [_log()] userauth is OK
2025-11-17T09:08:38.556 [DEBUG] [Thread-51599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:08:38.556 [DEBUG] [Thread-51599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:08:38.556 [DEBUG] [Thread-51599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:08:38.556 [DEBUG] [Thread-51599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:08:38.567 [INFO] [Thread-51599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:08:38.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:08:39.132 [DEBUG] [Thread-51599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:08:39.132 [DEBUG] [Thread-51599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:08:39.132 [DEBUG] [Thread-51599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:08:39.173 [DEBUG] [Thread-51599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:08:39.173 [DEBUG] [Thread-51599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:08:39.176 [DEBUG] [Thread-51599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:08:39.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:08:39.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:08:39.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:08:39.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:08:39.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:08:39.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:08:39.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:08:39.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:08:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:08:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.297272 -999.00  +14.50  11.21     43   +2.10 1 1 1 1 1   888    0 14.26 88.79 ----- 11.2 11.2 118.9 23.8 20.8 -28.1 20.6 -23.9 19.2 -23.9 19.7 -24.6
2025-11-17T09:08:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:08:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:08:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.297272
2025-11-17T09:08:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:08:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:08:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:08:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:08:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:08:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:08:19', tmtdew=14.83, humidity=36.59, cloud=0.0, wind=19.36, temperature=15.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:08:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:08:39.198 [DEBUG] [Thread-51599] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:08:39.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:08:39.292 [DEBUG] [Thread-51602] [transport.py] [_log()] starting thread (client mode): 0xd0785ff0
2025-11-17T09:08:39.292 [DEBUG] [Thread-51602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:08:39.312 [DEBUG] [Thread-51602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:08:39.313 [INFO] [Thread-51602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:08:39.320 [DEBUG] [Thread-51602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:08:39.320 [DEBUG] [Thread-51602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:08:39.320 [DEBUG] [Thread-51602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:08:39.320 [DEBUG] [Thread-51602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:08:39.320 [DEBUG] [Thread-51602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] client lang: <none>
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] server lang: <none>
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] kex follows: False
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:08:39.321 [DEBUG] [Thread-51602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:08:39.322 [DEBUG] [Thread-51602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:08:39.322 [DEBUG] [Thread-51602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:08:39.322 [DEBUG] [Thread-51602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:08:39.322 [DEBUG] [Thread-51602] [transport.py] [_log()] Compression: none
2025-11-17T09:08:39.322 [DEBUG] [Thread-51602] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:08:39.380 [DEBUG] [Thread-51602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:08:39.380 [DEBUG] [Thread-51602] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:08:39.381 [DEBUG] [Thread-51602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:08:39.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:08:39.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:08:39.435 [DEBUG] [Thread-51602] [transport.py] [_log()] userauth is OK
2025-11-17T09:08:39.435 [DEBUG] [Thread-51602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:08:39.435 [DEBUG] [Thread-51602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:08:39.435 [DEBUG] [Thread-51602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:08:39.435 [DEBUG] [Thread-51602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:08:39.456 [INFO] [Thread-51602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:08:39.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:08:39.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:08:40.311 [DEBUG] [Thread-51602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:08:40.312 [DEBUG] [Thread-51602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:08:40.359 [DEBUG] [Thread-51602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:08:40.359 [DEBUG] [Thread-51602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:08:40.368 [DEBUG] [Thread-51602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:08:40.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:08:40.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:08:40.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:08:40.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:08:40.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:08:40.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:08:40.401 [DEBUG] [Thread-51602] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:08:41.356 [DEBUG] [Thread-51604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:08:56.402 [DEBUG] [Thread-51605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:08:59.421 [DEBUG] [Thread-51606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:09:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:09:10.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:09:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:09:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 8, 51), 14.96, 36.16, 0.0, 14.4, 15.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:09:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:08:51
2025-11-17T09:09:11.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:09:11.333 [DEBUG] [Thread-51607] [transport.py] [_log()] starting thread (client mode): 0xd317dcc0
2025-11-17T09:09:11.334 [DEBUG] [Thread-51607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:09:11.345 [DEBUG] [Thread-51607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:09:11.345 [INFO] [Thread-51607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] client lang: <none>
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] server lang: <none>
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] kex follows: False
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] Compression: none
2025-11-17T09:09:11.348 [DEBUG] [Thread-51607] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:09:11.358 [DEBUG] [Thread-51607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:09:11.358 [DEBUG] [Thread-51607] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:09:11.359 [DEBUG] [Thread-51607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:09:11.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:09:11.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:09:11.360 [DEBUG] [Thread-51607] [transport.py] [_log()] userauth is OK
2025-11-17T09:09:11.360 [DEBUG] [Thread-51607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:09:11.360 [DEBUG] [Thread-51607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:09:11.360 [DEBUG] [Thread-51607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:09:11.360 [DEBUG] [Thread-51607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:09:11.375 [INFO] [Thread-51607] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:09:11.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:09:11.434 [DEBUG] [Thread-51609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:09:12.002 [DEBUG] [Thread-51607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:09:12.002 [DEBUG] [Thread-51607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:09:12.003 [DEBUG] [Thread-51607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:09:12.044 [DEBUG] [Thread-51607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:09:12.044 [DEBUG] [Thread-51607] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:09:12.047 [DEBUG] [Thread-51607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:09:12.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:09:12.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:09:12.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:09:12.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:09:12.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:09:12.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:09:12.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:09:12.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:09:12.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:09:12.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.297966 -999.00  +14.30  17.26     43   +2.00 1 1 1 1 1   888    0 13.97 77.17 ----- 17.3 17.3 103.5 22.1 20.9 -28.4 20.8 -24.1 19.3 -24.1 19.7 -24.5
2025-11-17T09:09:12.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:09:12.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:09:12.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.297966
2025-11-17T09:09:12.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:09:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:09:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:09:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:09:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:09:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:08:51', tmtdew=14.96, humidity=36.16, cloud=0.0, wind=14.4, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:09:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:09:12.073 [DEBUG] [Thread-51607] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:09:12.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:09:12.166 [DEBUG] [Thread-51611] [transport.py] [_log()] starting thread (client mode): 0xd07cf610
2025-11-17T09:09:12.167 [DEBUG] [Thread-51611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:09:12.182 [DEBUG] [Thread-51611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:09:12.183 [INFO] [Thread-51611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] client lang: <none>
2025-11-17T09:09:12.191 [DEBUG] [Thread-51611] [transport.py] [_log()] server lang: <none>
2025-11-17T09:09:12.192 [DEBUG] [Thread-51611] [transport.py] [_log()] kex follows: False
2025-11-17T09:09:12.192 [DEBUG] [Thread-51611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:09:12.192 [DEBUG] [Thread-51611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:09:12.192 [DEBUG] [Thread-51611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:09:12.192 [DEBUG] [Thread-51611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:09:12.192 [DEBUG] [Thread-51611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:09:12.192 [DEBUG] [Thread-51611] [transport.py] [_log()] Compression: none
2025-11-17T09:09:12.192 [DEBUG] [Thread-51611] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:09:12.252 [DEBUG] [Thread-51611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:09:12.252 [DEBUG] [Thread-51611] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:09:12.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:09:12.253 [DEBUG] [Thread-51611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:09:12.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:09:12.307 [DEBUG] [Thread-51611] [transport.py] [_log()] userauth is OK
2025-11-17T09:09:12.308 [DEBUG] [Thread-51611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:09:12.308 [DEBUG] [Thread-51611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:09:12.308 [DEBUG] [Thread-51611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:09:12.308 [DEBUG] [Thread-51611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:09:12.327 [INFO] [Thread-51611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:09:12.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:09:12.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:09:13.170 [DEBUG] [Thread-51611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:09:13.170 [DEBUG] [Thread-51611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:09:13.217 [DEBUG] [Thread-51611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:09:13.218 [DEBUG] [Thread-51611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:09:13.227 [DEBUG] [Thread-51611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:09:13.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:09:13.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:09:13.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:09:13.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:09:13.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:09:13.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:09:13.264 [DEBUG] [Thread-51611] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:09:14.704 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:09:14.705 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:09:26.473 [DEBUG] [Thread-51613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:09:41.520 [DEBUG] [Thread-51614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:09:43.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:09:43.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:09:43.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:09:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 9, 23), 14.99, 36.03, 0.0, 15.03, 15.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:09:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:09:23
2025-11-17T09:09:44.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:09:44.188 [DEBUG] [Thread-51615] [transport.py] [_log()] starting thread (client mode): 0xd0785150
2025-11-17T09:09:44.188 [DEBUG] [Thread-51615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:09:44.210 [DEBUG] [Thread-51615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:09:44.210 [INFO] [Thread-51615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:09:44.211 [DEBUG] [Thread-51615] [transport.py] [_log()] client lang: <none>
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] server lang: <none>
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] kex follows: False
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] Compression: none
2025-11-17T09:09:44.212 [DEBUG] [Thread-51615] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:09:44.222 [DEBUG] [Thread-51615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:09:44.223 [DEBUG] [Thread-51615] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:09:44.224 [DEBUG] [Thread-51615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:09:44.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:09:44.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:09:44.226 [DEBUG] [Thread-51615] [transport.py] [_log()] userauth is OK
2025-11-17T09:09:44.226 [DEBUG] [Thread-51615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:09:44.227 [DEBUG] [Thread-51615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:09:44.227 [DEBUG] [Thread-51615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:09:44.227 [DEBUG] [Thread-51615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:09:44.247 [INFO] [Thread-51615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:09:44.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:09:44.848 [DEBUG] [Thread-51615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:09:44.848 [DEBUG] [Thread-51615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:09:44.849 [DEBUG] [Thread-51615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:09:44.888 [DEBUG] [Thread-51615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:09:44.889 [DEBUG] [Thread-51615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:09:44.892 [DEBUG] [Thread-51615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:09:44.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:09:44.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:09:44.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:09:44.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:09:44.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:09:44.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:09:44.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:09:44.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:09:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:09:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.298313 -999.00  +14.20  13.85     43   +1.80 1 1 1 1 1   888    0 13.90 77.56 ----- 13.8 13.8 104.1 19.8 20.9 -25.4 20.7 -24.3 19.3 -23.7 19.8 -24.5
2025-11-17T09:09:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:09:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:09:44.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.298313
2025-11-17T09:09:44.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:09:44.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:09:44.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:09:44.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:09:44.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:09:44.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:09:23', tmtdew=14.99, humidity=36.03, cloud=0.0, wind=15.03, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:09:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:09:44.914 [DEBUG] [Thread-51615] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:09:44.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:09:45.013 [DEBUG] [Thread-51618] [transport.py] [_log()] starting thread (client mode): 0xd0785690
2025-11-17T09:09:45.013 [DEBUG] [Thread-51618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:09:45.030 [DEBUG] [Thread-51618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:09:45.030 [INFO] [Thread-51618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:09:45.037 [DEBUG] [Thread-51618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:09:45.037 [DEBUG] [Thread-51618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:09:45.037 [DEBUG] [Thread-51618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:09:45.037 [DEBUG] [Thread-51618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] client lang: <none>
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] server lang: <none>
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] kex follows: False
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] Compression: none
2025-11-17T09:09:45.038 [DEBUG] [Thread-51618] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:09:45.104 [DEBUG] [Thread-51618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:09:45.105 [DEBUG] [Thread-51618] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:09:45.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:09:45.106 [DEBUG] [Thread-51618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:09:45.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:09:45.164 [DEBUG] [Thread-51618] [transport.py] [_log()] userauth is OK
2025-11-17T09:09:45.164 [DEBUG] [Thread-51618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:09:45.164 [DEBUG] [Thread-51618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:09:45.173 [DEBUG] [Thread-51618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:09:45.173 [DEBUG] [Thread-51618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:09:45.194 [INFO] [Thread-51618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:09:45.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:09:45.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:09:46.085 [DEBUG] [Thread-51618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:09:46.086 [DEBUG] [Thread-51618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:09:46.134 [DEBUG] [Thread-51618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:09:46.134 [DEBUG] [Thread-51618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:09:46.143 [DEBUG] [Thread-51618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:09:46.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:09:46.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:09:46.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:09:46.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:09:46.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:09:46.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:09:46.180 [DEBUG] [Thread-51618] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:09:56.553 [DEBUG] [Thread-51620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:09:59.472 [DEBUG] [Thread-51621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:10:11.589 [DEBUG] [Thread-51622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:10:14.847 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:10:14.848 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:10:16.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:10:16.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:10:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:10:16.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 9, 55), 14.9, 36.37, 0.0, 17.72, 14.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:10:16.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:09:55
2025-11-17T09:10:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:10:17.115 [DEBUG] [Thread-51623] [transport.py] [_log()] starting thread (client mode): 0xd317de40
2025-11-17T09:10:17.115 [DEBUG] [Thread-51623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:10:17.145 [DEBUG] [Thread-51623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:10:17.145 [INFO] [Thread-51623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:10:17.148 [DEBUG] [Thread-51623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:10:17.148 [DEBUG] [Thread-51623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:10:17.148 [DEBUG] [Thread-51623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:10:17.148 [DEBUG] [Thread-51623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:10:17.148 [DEBUG] [Thread-51623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:10:17.148 [DEBUG] [Thread-51623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] client lang: <none>
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] server lang: <none>
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] kex follows: False
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] Compression: none
2025-11-17T09:10:17.149 [DEBUG] [Thread-51623] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:10:17.167 [DEBUG] [Thread-51623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:10:17.168 [DEBUG] [Thread-51623] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:10:17.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:10:17.168 [DEBUG] [Thread-51623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:10:17.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:10:17.171 [DEBUG] [Thread-51623] [transport.py] [_log()] userauth is OK
2025-11-17T09:10:17.171 [DEBUG] [Thread-51623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:10:17.171 [DEBUG] [Thread-51623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:10:17.171 [DEBUG] [Thread-51623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:10:17.171 [DEBUG] [Thread-51623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:10:17.192 [INFO] [Thread-51623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:10:17.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:10:18.948 [DEBUG] [Thread-51623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:10:18.948 [DEBUG] [Thread-51623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:10:18.948 [DEBUG] [Thread-51623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:10:18.989 [DEBUG] [Thread-51623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:10:18.989 [DEBUG] [Thread-51623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:10:18.992 [DEBUG] [Thread-51623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:10:19.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:10:19.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:10:19.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:10:19.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:10:19.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:10:19.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:10:19.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:10:19.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:10:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:10:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.298313 -999.00  +14.20  13.85     43   +1.80 1 1 1 1 1   888    0 13.90 77.56 ----- 13.8 13.8 104.1 19.8 20.9 -25.4 20.7 -24.3 19.3 -23.7 19.8 -24.5
2025-11-17T09:10:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:10:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:10:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.298313
2025-11-17T09:10:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:10:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:10:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:10:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:10:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:10:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:09:55', tmtdew=14.9, humidity=36.37, cloud=0.0, wind=17.72, temperature=14.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:09:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:10:19.025 [DEBUG] [Thread-51623] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:10:19.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:10:19.116 [DEBUG] [Thread-51626] [transport.py] [_log()] starting thread (client mode): 0xd317f1c0
2025-11-17T09:10:19.116 [DEBUG] [Thread-51626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:10:19.133 [DEBUG] [Thread-51626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:10:19.134 [INFO] [Thread-51626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:10:19.141 [DEBUG] [Thread-51626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] client lang: <none>
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] server lang: <none>
2025-11-17T09:10:19.142 [DEBUG] [Thread-51626] [transport.py] [_log()] kex follows: False
2025-11-17T09:10:19.143 [DEBUG] [Thread-51626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:10:19.143 [DEBUG] [Thread-51626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:10:19.143 [DEBUG] [Thread-51626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:10:19.143 [DEBUG] [Thread-51626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:10:19.143 [DEBUG] [Thread-51626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:10:19.143 [DEBUG] [Thread-51626] [transport.py] [_log()] Compression: none
2025-11-17T09:10:19.143 [DEBUG] [Thread-51626] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:10:19.199 [DEBUG] [Thread-51626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:10:19.200 [DEBUG] [Thread-51626] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:10:19.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:10:19.201 [DEBUG] [Thread-51626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:10:19.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:10:19.255 [DEBUG] [Thread-51626] [transport.py] [_log()] userauth is OK
2025-11-17T09:10:19.256 [DEBUG] [Thread-51626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:10:19.256 [DEBUG] [Thread-51626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:10:19.256 [DEBUG] [Thread-51626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:10:19.256 [DEBUG] [Thread-51626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:10:19.274 [INFO] [Thread-51626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:10:19.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:10:19.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:10:20.098 [DEBUG] [Thread-51626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:10:20.098 [DEBUG] [Thread-51626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:10:20.147 [DEBUG] [Thread-51626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:10:20.147 [DEBUG] [Thread-51626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:10:20.160 [DEBUG] [Thread-51626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:10:20.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:10:20.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:10: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
2025-11-17T09:10:20.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:10:20.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:10:20.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:10:20.196 [DEBUG] [Thread-51626] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:10:26.622 [DEBUG] [Thread-51628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:10:41.664 [DEBUG] [Thread-51629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:10:50.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:10:50.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:10:50.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:10:50.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 10, 27), 15.08, 35.98, 0.0, 20.03, 15.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:10:50.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:10:27
2025-11-17T09:10:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:10:51.199 [DEBUG] [Thread-51630] [transport.py] [_log()] starting thread (client mode): 0xd31cf670
2025-11-17T09:10:51.199 [DEBUG] [Thread-51630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:10:51.222 [DEBUG] [Thread-51630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:10:51.222 [INFO] [Thread-51630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:10:51.225 [DEBUG] [Thread-51630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:10:51.225 [DEBUG] [Thread-51630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:10:51.225 [DEBUG] [Thread-51630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:10:51.225 [DEBUG] [Thread-51630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:10:51.225 [DEBUG] [Thread-51630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:10:51.225 [DEBUG] [Thread-51630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:10:51.225 [DEBUG] [Thread-51630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] client lang: <none>
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] server lang: <none>
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] kex follows: False
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] Compression: none
2025-11-17T09:10:51.226 [DEBUG] [Thread-51630] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:10:51.241 [DEBUG] [Thread-51630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:10:51.241 [DEBUG] [Thread-51630] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:10:51.241 [DEBUG] [Thread-51630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:10:51.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:10:51.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:10:51.243 [DEBUG] [Thread-51630] [transport.py] [_log()] userauth is OK
2025-11-17T09:10:51.243 [DEBUG] [Thread-51630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:10:51.243 [DEBUG] [Thread-51630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:10:51.243 [DEBUG] [Thread-51630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:10:51.243 [DEBUG] [Thread-51630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:10:51.263 [INFO] [Thread-51630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:10:51.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:10:51.906 [DEBUG] [Thread-51630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:10:51.906 [DEBUG] [Thread-51630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:10:51.906 [DEBUG] [Thread-51630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:10:51.947 [DEBUG] [Thread-51630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:10:51.947 [DEBUG] [Thread-51630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:10:51.949 [DEBUG] [Thread-51630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:10:51.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:10:51.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:10:51.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:10:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:10:51.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:10:51.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:10:51.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.298661 -999.00  +14.10  17.54     43   +1.80 1 1 1 1 1   888    0 14.17 83.07 ----- 17.5 17.5 117.6 20.8 20.9 -26.1 20.7 -24.0 19.4 -24.2 19.8 -24.6
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.298661
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:10:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:10:27', tmtdew=15.08, humidity=35.98, cloud=0.0, wind=20.03, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:10:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:10:51.967 [DEBUG] [Thread-51630] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:10:52.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:10:52.053 [DEBUG] [Thread-51633] [transport.py] [_log()] starting thread (client mode): 0xd3153c40
2025-11-17T09:10:52.053 [DEBUG] [Thread-51633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:10:52.067 [DEBUG] [Thread-51633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:10:52.067 [INFO] [Thread-51633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:10:52.074 [DEBUG] [Thread-51633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:10:52.074 [DEBUG] [Thread-51633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:10:52.074 [DEBUG] [Thread-51633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] client lang: <none>
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] server lang: <none>
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] kex follows: False
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] Compression: none
2025-11-17T09:10:52.075 [DEBUG] [Thread-51633] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:10:52.130 [DEBUG] [Thread-51633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:10:52.130 [DEBUG] [Thread-51633] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:10:52.130 [DEBUG] [Thread-51633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:10:52.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:10:52.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:10:52.187 [DEBUG] [Thread-51633] [transport.py] [_log()] userauth is OK
2025-11-17T09:10:52.187 [DEBUG] [Thread-51633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:10:52.187 [DEBUG] [Thread-51633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:10:52.187 [DEBUG] [Thread-51633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:10:52.187 [DEBUG] [Thread-51633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:10:52.204 [INFO] [Thread-51633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:10:52.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:10:52.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:10:53.097 [DEBUG] [Thread-51633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:10:53.097 [DEBUG] [Thread-51633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:10:53.145 [DEBUG] [Thread-51633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:10:53.145 [DEBUG] [Thread-51633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:10:53.153 [DEBUG] [Thread-51633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:10:53.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:10:53.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:10:53.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:10:53.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:10:53.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:10:53.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:10:53.185 [DEBUG] [Thread-51633] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:10:56.696 [DEBUG] [Thread-51635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:10:59.521 [DEBUG] [Thread-51636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:11:11.745 [DEBUG] [Thread-51637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:11:14.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:11:14.989 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:11:23.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:11:23.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:11:23.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:11:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 10, 59), 15.02, 35.91, 0.0, 17.59, 15.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:11:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:10:59
2025-11-17T09:11:23.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:11:24.138 [DEBUG] [Thread-51638] [transport.py] [_log()] starting thread (client mode): 0xd3150d00
2025-11-17T09:11:24.138 [DEBUG] [Thread-51638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:11:24.157 [DEBUG] [Thread-51638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:11:24.157 [INFO] [Thread-51638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:11:24.160 [DEBUG] [Thread-51638] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] client lang: <none>
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] server lang: <none>
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] kex follows: False
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:11:24.161 [DEBUG] [Thread-51638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:11:24.162 [DEBUG] [Thread-51638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:11:24.162 [DEBUG] [Thread-51638] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:11:24.162 [DEBUG] [Thread-51638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:11:24.162 [DEBUG] [Thread-51638] [transport.py] [_log()] Compression: none
2025-11-17T09:11:24.162 [DEBUG] [Thread-51638] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:11:24.178 [DEBUG] [Thread-51638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:11:24.179 [DEBUG] [Thread-51638] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:11:24.179 [DEBUG] [Thread-51638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:11:24.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:11:24.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:11:24.181 [DEBUG] [Thread-51638] [transport.py] [_log()] userauth is OK
2025-11-17T09:11:24.181 [DEBUG] [Thread-51638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:11:24.182 [DEBUG] [Thread-51638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:11:24.182 [DEBUG] [Thread-51638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:11:24.182 [DEBUG] [Thread-51638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:11:24.206 [INFO] [Thread-51638] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:11:24.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:11:25.011 [DEBUG] [Thread-51638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:11:25.021 [DEBUG] [Thread-51638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:11:25.021 [DEBUG] [Thread-51638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:11:25.053 [DEBUG] [Thread-51638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:11:25.053 [DEBUG] [Thread-51638] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:11:25.056 [DEBUG] [Thread-51638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:11:25.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:11:25.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:11:25.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:11:25.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:11:25.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:11:25.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:11:25.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:11:25.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:11:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:11:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.299008 -999.00  +14.40  20.22     42   +2.00 1 1 1 1 1   888    0 13.90 79.89 ----- 20.2 20.2 106.4 25.3 21.0 -27.3 20.8 -23.6 19.4 -24.2 19.7 -25.0
2025-11-17T09:11:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:11:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:11:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.299008
2025-11-17T09:11:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:11:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:11:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:11:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:11:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:11:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:10:59', tmtdew=15.02, humidity=35.91, cloud=0.0, wind=17.59, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:10:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:11:25.081 [DEBUG] [Thread-51638] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:11:25.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:11:25.175 [DEBUG] [Thread-51641] [transport.py] [_log()] starting thread (client mode): 0xd07192a0
2025-11-17T09:11:25.175 [DEBUG] [Thread-51641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:11:25.191 [DEBUG] [Thread-51641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:11:25.191 [INFO] [Thread-51641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:11:25.199 [DEBUG] [Thread-51641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:11:25.199 [DEBUG] [Thread-51641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:11:25.199 [DEBUG] [Thread-51641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:11:25.199 [DEBUG] [Thread-51641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:11:25.199 [DEBUG] [Thread-51641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:11:25.200 [DEBUG] [Thread-51641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:11:25.200 [DEBUG] [Thread-51641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:11:25.200 [DEBUG] [Thread-51641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:11:25.200 [DEBUG] [Thread-51641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:11:25.200 [DEBUG] [Thread-51641] [transport.py] [_log()] client lang: <none>
2025-11-17T09:11:25.200 [DEBUG] [Thread-51641] [transport.py] [_log()] server lang: <none>
2025-11-17T09:11:25.200 [DEBUG] [Thread-51641] [transport.py] [_log()] kex follows: False
2025-11-17T09:11:25.200 [DEBUG] [Thread-51641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:11:25.201 [DEBUG] [Thread-51641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:11:25.201 [DEBUG] [Thread-51641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:11:25.201 [DEBUG] [Thread-51641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:11:25.201 [DEBUG] [Thread-51641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:11:25.201 [DEBUG] [Thread-51641] [transport.py] [_log()] Compression: none
2025-11-17T09:11:25.201 [DEBUG] [Thread-51641] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:11:25.264 [DEBUG] [Thread-51641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:11:25.265 [DEBUG] [Thread-51641] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:11:25.265 [DEBUG] [Thread-51641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:11:25.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:11:25.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:11:25.327 [DEBUG] [Thread-51641] [transport.py] [_log()] userauth is OK
2025-11-17T09:11:25.328 [DEBUG] [Thread-51641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:11:25.328 [DEBUG] [Thread-51641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:11:25.328 [DEBUG] [Thread-51641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:11:25.328 [DEBUG] [Thread-51641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:11:25.346 [INFO] [Thread-51641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:11:25.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:11:25.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:11:26.187 [DEBUG] [Thread-51641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:11:26.187 [DEBUG] [Thread-51641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:11:26.235 [DEBUG] [Thread-51641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:11:26.235 [DEBUG] [Thread-51641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:11:26.244 [DEBUG] [Thread-51641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:11:26.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:11:26.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:11:26.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:11:26.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:11:26.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:11:26.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:11:26.280 [DEBUG] [Thread-51641] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:11:26.785 [DEBUG] [Thread-51643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:11:41.835 [DEBUG] [Thread-51644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:11:56.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:11:56.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:11:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:11:56.872 [DEBUG] [Thread-51645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:11:56.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 11, 31), 15.11, 35.69, 0.0, 15.3, 15.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:11:56.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:11:31
2025-11-17T09:11:57.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:11:57.222 [DEBUG] [Thread-51646] [transport.py] [_log()] starting thread (client mode): 0xd31cddb0
2025-11-17T09:11:57.222 [DEBUG] [Thread-51646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:11:57.240 [DEBUG] [Thread-51646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:11:57.241 [INFO] [Thread-51646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:11:57.243 [DEBUG] [Thread-51646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] client lang: <none>
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] server lang: <none>
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] kex follows: False
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] Compression: none
2025-11-17T09:11:57.244 [DEBUG] [Thread-51646] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:11:57.252 [DEBUG] [Thread-51646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:11:57.253 [DEBUG] [Thread-51646] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:11:57.253 [DEBUG] [Thread-51646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:11:57.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:11:57.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:11:57.255 [DEBUG] [Thread-51646] [transport.py] [_log()] userauth is OK
2025-11-17T09:11:57.256 [DEBUG] [Thread-51646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:11:57.256 [DEBUG] [Thread-51646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:11:57.256 [DEBUG] [Thread-51646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:11:57.256 [DEBUG] [Thread-51646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:11:57.274 [INFO] [Thread-51646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:11:57.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:11:57.924 [DEBUG] [Thread-51646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:11:57.925 [DEBUG] [Thread-51646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:11:57.925 [DEBUG] [Thread-51646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:11:57.966 [DEBUG] [Thread-51646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:11:57.966 [DEBUG] [Thread-51646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:11:57.969 [DEBUG] [Thread-51646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:11:57.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:11:57.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:11:57.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:11:57.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:11:57.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:11:57.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:11:57.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:11:57.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:11:57.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:11:57.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.299355 -999.00  +14.40  12.83     42   +1.70 1 1 1 1 1   888    0 14.39 87.63 ----- 12.8 12.8 123.3 23.1 20.9 -26.0 20.7 -24.3 19.4 -24.5 19.8 -25.3
2025-11-17T09:11:57.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:11:57.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:11:57.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.299355
2025-11-17T09:11:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:11:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:11:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:11:57.994 [DEBUG] [Thread-51646] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:11:57.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:11:57.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:11:57.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:11:31', tmtdew=15.11, humidity=35.69, cloud=0.0, wind=15.3, temperature=15.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:11:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:11:58.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:11:58.087 [DEBUG] [Thread-51649] [transport.py] [_log()] starting thread (client mode): 0xd07cea10
2025-11-17T09:11:58.087 [DEBUG] [Thread-51649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:11:58.101 [DEBUG] [Thread-51649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:11:58.102 [INFO] [Thread-51649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:11:58.109 [DEBUG] [Thread-51649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:11:58.109 [DEBUG] [Thread-51649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:11:58.109 [DEBUG] [Thread-51649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:11:58.109 [DEBUG] [Thread-51649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:11:58.109 [DEBUG] [Thread-51649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:11:58.109 [DEBUG] [Thread-51649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] client lang: <none>
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] server lang: <none>
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] kex follows: False
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] Compression: none
2025-11-17T09:11:58.110 [DEBUG] [Thread-51649] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:11:58.167 [DEBUG] [Thread-51649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:11:58.167 [DEBUG] [Thread-51649] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:11:58.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:11:58.169 [DEBUG] [Thread-51649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:11:58.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:11:58.227 [DEBUG] [Thread-51649] [transport.py] [_log()] userauth is OK
2025-11-17T09:11:58.228 [DEBUG] [Thread-51649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:11:58.228 [DEBUG] [Thread-51649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:11:58.228 [DEBUG] [Thread-51649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:11:58.228 [DEBUG] [Thread-51649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:11:58.247 [INFO] [Thread-51649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:11:58.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:11:58.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:11:59.163 [DEBUG] [Thread-51649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:11:59.163 [DEBUG] [Thread-51649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:11:59.210 [DEBUG] [Thread-51649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:11:59.210 [DEBUG] [Thread-51649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:11:59.219 [DEBUG] [Thread-51649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:11:59.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:11:59.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:11:59.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:11:59.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:11:59.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:11:59.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:11:59.253 [DEBUG] [Thread-51649] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:11:59.573 [DEBUG] [Thread-51651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:12:11.903 [DEBUG] [Thread-51652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:12:15.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:12:15.132 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:12:26.954 [DEBUG] [Thread-51653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:12:29.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:12:29.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:12:29.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:12:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 12, 3), 15.04, 35.84, 0.0, 18.74, 15.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:12:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:12:03
2025-11-17T09:12:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:12:30.201 [DEBUG] [Thread-51654] [transport.py] [_log()] starting thread (client mode): 0xd31cdf00
2025-11-17T09:12:30.201 [DEBUG] [Thread-51654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:12:30.222 [DEBUG] [Thread-51654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:12:30.222 [INFO] [Thread-51654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:12:30.225 [DEBUG] [Thread-51654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:12:30.225 [DEBUG] [Thread-51654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:12:30.225 [DEBUG] [Thread-51654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:12:30.225 [DEBUG] [Thread-51654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] client lang: <none>
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] server lang: <none>
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] kex follows: False
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:12:30.226 [DEBUG] [Thread-51654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:12:30.227 [DEBUG] [Thread-51654] [transport.py] [_log()] Compression: none
2025-11-17T09:12:30.227 [DEBUG] [Thread-51654] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:12:30.245 [DEBUG] [Thread-51654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:12:30.246 [DEBUG] [Thread-51654] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:12:30.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:12:30.247 [DEBUG] [Thread-51654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:12:30.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:12:30.249 [DEBUG] [Thread-51654] [transport.py] [_log()] userauth is OK
2025-11-17T09:12:30.250 [DEBUG] [Thread-51654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:12:30.250 [DEBUG] [Thread-51654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:12:30.250 [DEBUG] [Thread-51654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:12:30.250 [DEBUG] [Thread-51654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:12:30.276 [INFO] [Thread-51654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:12:30.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:12:31.034 [DEBUG] [Thread-51654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:12:31.034 [DEBUG] [Thread-51654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:12:31.034 [DEBUG] [Thread-51654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:12:31.075 [DEBUG] [Thread-51654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:12:31.075 [DEBUG] [Thread-51654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:12:31.078 [DEBUG] [Thread-51654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:12:31.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:12:31.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:12:31.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:12:31.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:12:31.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:12:31.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:12:31.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:12:31.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:12:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:12:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.299702 -999.00  +14.30  15.00     42   +1.70 1 1 1 1 1   888    0 14.28 85.71 ----- 15.0 15.0 76.6 19.0 20.9 -28.1 20.8 -24.5 19.4 -23.4 19.8 -24.4
2025-11-17T09:12:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:12:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:12:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.299702
2025-11-17T09:12:31.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:12:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:12:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:12:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:12:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:12:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:12:03', tmtdew=15.04, humidity=35.84, cloud=0.0, wind=18.74, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:11:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:12:31.097 [DEBUG] [Thread-51654] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:12:31.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:12:31.189 [DEBUG] [Thread-51657] [transport.py] [_log()] starting thread (client mode): 0xd071aaa0
2025-11-17T09:12:31.189 [DEBUG] [Thread-51657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:12:31.204 [DEBUG] [Thread-51657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:12:31.204 [INFO] [Thread-51657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] client lang: <none>
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] server lang: <none>
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] kex follows: False
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:12:31.212 [DEBUG] [Thread-51657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:12:31.213 [DEBUG] [Thread-51657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:12:31.213 [DEBUG] [Thread-51657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:12:31.213 [DEBUG] [Thread-51657] [transport.py] [_log()] Compression: none
2025-11-17T09:12:31.213 [DEBUG] [Thread-51657] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:12:31.272 [DEBUG] [Thread-51657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:12:31.272 [DEBUG] [Thread-51657] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:12:31.273 [DEBUG] [Thread-51657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:12:31.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:12:31.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:12:31.328 [DEBUG] [Thread-51657] [transport.py] [_log()] userauth is OK
2025-11-17T09:12:31.328 [DEBUG] [Thread-51657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:12:31.328 [DEBUG] [Thread-51657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:12:31.328 [DEBUG] [Thread-51657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:12:31.329 [DEBUG] [Thread-51657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:12:31.349 [INFO] [Thread-51657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:12:31.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:12:31.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:12:32.268 [DEBUG] [Thread-51657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:12:32.268 [DEBUG] [Thread-51657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:12:32.315 [DEBUG] [Thread-51657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:12:32.315 [DEBUG] [Thread-51657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:12:32.324 [DEBUG] [Thread-51657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:12:32.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:12:32.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:12:32.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:12:32.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:12:32.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:12:32.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:12:32.362 [DEBUG] [Thread-51657] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:12:41.991 [DEBUG] [Thread-51659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:12:57.038 [DEBUG] [Thread-51660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:12:59.623 [DEBUG] [Thread-51661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:13:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:13:02.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:13:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:13:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 12, 35), 15.11, 36.06, 0.0, 18.33, 15.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:13:03.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:12:35
2025-11-17T09:13:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:13:03.328 [DEBUG] [Thread-51662] [transport.py] [_log()] starting thread (client mode): 0xd0786aa0
2025-11-17T09:13:03.328 [DEBUG] [Thread-51662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:13:03.348 [DEBUG] [Thread-51662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:13:03.349 [INFO] [Thread-51662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] client lang: <none>
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] server lang: <none>
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] kex follows: False
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] Compression: none
2025-11-17T09:13:03.352 [DEBUG] [Thread-51662] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:13:03.370 [DEBUG] [Thread-51662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:13:03.370 [DEBUG] [Thread-51662] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:13:03.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:13:03.371 [DEBUG] [Thread-51662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:13:03.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:13:03.373 [DEBUG] [Thread-51662] [transport.py] [_log()] userauth is OK
2025-11-17T09:13:03.373 [DEBUG] [Thread-51662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:13:03.373 [DEBUG] [Thread-51662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:13:03.373 [DEBUG] [Thread-51662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:13:03.373 [DEBUG] [Thread-51662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:13:03.390 [INFO] [Thread-51662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:13:03.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:13:03.995 [DEBUG] [Thread-51662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:13:03.995 [DEBUG] [Thread-51662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:13:03.995 [DEBUG] [Thread-51662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:13:04.037 [DEBUG] [Thread-51662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:13:04.037 [DEBUG] [Thread-51662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:13:04.040 [DEBUG] [Thread-51662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:13:04.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:13:04.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:13:04.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:13:04.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:13:04.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:13:04.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:13:04.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:13:04.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:13:04.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:13:04.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.300050 -999.00  +14.20  17.44     43   +1.80 1 1 1 1 1   888    0 14.36 87.31 ----- 17.4 17.4 77.6 21.3 20.9 -27.8 20.8 -23.1 19.3 -25.0 19.8 -25.1
2025-11-17T09:13:04.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:13:04.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:13:04.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.300050
2025-11-17T09:13:04.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:13:04.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:13:04.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:13:04.067 [DEBUG] [Thread-51662] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:13:04.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:13:04.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:13:04.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:12:35', tmtdew=15.11, humidity=36.06, cloud=0.0, wind=18.33, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:12:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:13:04.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:13:04.165 [DEBUG] [Thread-51665] [transport.py] [_log()] starting thread (client mode): 0xd07cea10
2025-11-17T09:13:04.165 [DEBUG] [Thread-51665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:13:04.181 [DEBUG] [Thread-51665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:13:04.182 [INFO] [Thread-51665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:13:04.189 [DEBUG] [Thread-51665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:13:04.189 [DEBUG] [Thread-51665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:13:04.189 [DEBUG] [Thread-51665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] client lang: <none>
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] server lang: <none>
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] kex follows: False
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:13:04.190 [DEBUG] [Thread-51665] [transport.py] [_log()] Compression: none
2025-11-17T09:13:04.191 [DEBUG] [Thread-51665] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:13:04.247 [DEBUG] [Thread-51665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:13:04.247 [DEBUG] [Thread-51665] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:13:04.248 [DEBUG] [Thread-51665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:13:04.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:13:04.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:13:04.303 [DEBUG] [Thread-51665] [transport.py] [_log()] userauth is OK
2025-11-17T09:13:04.303 [DEBUG] [Thread-51665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:13:04.303 [DEBUG] [Thread-51665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:13:04.303 [DEBUG] [Thread-51665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:13:04.303 [DEBUG] [Thread-51665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:13:04.322 [INFO] [Thread-51665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:13:04.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:13:04.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:13:05.235 [DEBUG] [Thread-51665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:13:05.236 [DEBUG] [Thread-51665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:13:05.284 [DEBUG] [Thread-51665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:13:05.284 [DEBUG] [Thread-51665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:13:05.296 [DEBUG] [Thread-51665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:13:05.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:13:05.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:13:05.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:13:05.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:13:05.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:13:05.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:13:05.342 [DEBUG] [Thread-51665] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:13:12.077 [DEBUG] [Thread-51667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:13:15.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:13:15.275 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:13:27.129 [DEBUG] [Thread-51668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:13:35.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:13:35.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:13:35.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
2025-11-17T09:13:36.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 13, 7), 14.98, 36.29, 0.0, 16.62, 14.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:13:36.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:13:07
2025-11-17T09:13:36.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:13:36.287 [DEBUG] [Thread-51669] [transport.py] [_log()] starting thread (client mode): 0xd07871c0
2025-11-17T09:13:36.287 [DEBUG] [Thread-51669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:13:36.307 [DEBUG] [Thread-51669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:13:36.307 [INFO] [Thread-51669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:13:36.310 [DEBUG] [Thread-51669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:13:36.310 [DEBUG] [Thread-51669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:13:36.310 [DEBUG] [Thread-51669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:13:36.310 [DEBUG] [Thread-51669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:13:36.310 [DEBUG] [Thread-51669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] client lang: <none>
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] server lang: <none>
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] kex follows: False
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:13:36.311 [DEBUG] [Thread-51669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:13:36.312 [DEBUG] [Thread-51669] [transport.py] [_log()] Compression: none
2025-11-17T09:13:36.312 [DEBUG] [Thread-51669] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:13:36.330 [DEBUG] [Thread-51669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:13:36.331 [DEBUG] [Thread-51669] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:13:36.332 [DEBUG] [Thread-51669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:13:36.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:13:36.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:13:36.372 [DEBUG] [Thread-51669] [transport.py] [_log()] userauth is OK
2025-11-17T09:13:36.373 [DEBUG] [Thread-51669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:13:36.373 [DEBUG] [Thread-51669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:13:36.373 [DEBUG] [Thread-51669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:13:36.373 [DEBUG] [Thread-51669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:13:36.405 [INFO] [Thread-51669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:13:36.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:13:37.213 [DEBUG] [Thread-51669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:13:37.213 [DEBUG] [Thread-51669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:13:37.214 [DEBUG] [Thread-51669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:13:37.254 [DEBUG] [Thread-51669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:13:37.254 [DEBUG] [Thread-51669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:13:37.257 [DEBUG] [Thread-51669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:13:37.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:13:37.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:13:37.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:13:37.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:13:37.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:13:37.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:13:37.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.300397 -999.00  +14.30   9.94     42   +1.90 1 1 1 1 1   888    0 14.67 94.86 ----- 9.9 9.9 105.6 23.5 21.0 -27.2 20.8 -24.3 19.4 -24.1 19.8 -24.4
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.300397
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:13:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:13:07', tmtdew=14.98, humidity=36.29, cloud=0.0, wind=16.62, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:12:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:13:37.277 [DEBUG] [Thread-51669] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:13:37.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:13:37.367 [DEBUG] [Thread-51672] [transport.py] [_log()] starting thread (client mode): 0xd3151510
2025-11-17T09:13:37.367 [DEBUG] [Thread-51672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:13:37.382 [DEBUG] [Thread-51672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:13:37.382 [INFO] [Thread-51672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:13:37.389 [DEBUG] [Thread-51672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:13:37.390 [DEBUG] [Thread-51672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:13:37.390 [DEBUG] [Thread-51672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:13:37.390 [DEBUG] [Thread-51672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:13:37.390 [DEBUG] [Thread-51672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:13:37.390 [DEBUG] [Thread-51672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:13:37.390 [DEBUG] [Thread-51672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:13:37.390 [DEBUG] [Thread-51672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:13:37.390 [DEBUG] [Thread-51672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] client lang: <none>
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] server lang: <none>
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] kex follows: False
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:13:37.391 [DEBUG] [Thread-51672] [transport.py] [_log()] Compression: none
2025-11-17T09:13:37.392 [DEBUG] [Thread-51672] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:13:37.453 [DEBUG] [Thread-51672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:13:37.453 [DEBUG] [Thread-51672] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:13:37.454 [DEBUG] [Thread-51672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:13:37.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:13:37.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:13:37.515 [DEBUG] [Thread-51672] [transport.py] [_log()] userauth is OK
2025-11-17T09:13:37.515 [DEBUG] [Thread-51672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:13:37.516 [DEBUG] [Thread-51672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:13:37.516 [DEBUG] [Thread-51672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:13:37.516 [DEBUG] [Thread-51672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:13:37.535 [INFO] [Thread-51672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:13:37.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:13:37.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:13:38.403 [DEBUG] [Thread-51672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:13:38.404 [DEBUG] [Thread-51672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:13:38.452 [DEBUG] [Thread-51672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:13:38.452 [DEBUG] [Thread-51672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:13:38.461 [DEBUG] [Thread-51672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:13:38.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:13: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')
2025-11-17T09:13:38.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:13:38.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:13:38.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:13:38.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:13:38.498 [DEBUG] [Thread-51672] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:13:42.163 [DEBUG] [Thread-51674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:13:57.215 [DEBUG] [Thread-51675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:13:59.675 [DEBUG] [Thread-51676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:14:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:14:08.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:14:08.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:14:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 13, 39), 15.17, 35.53, 0.0, 19.41, 14.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:14:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:13:39
2025-11-17T09:14:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:14:09.433 [DEBUG] [Thread-51677] [transport.py] [_log()] starting thread (client mode): 0xd3137d60
2025-11-17T09:14:09.433 [DEBUG] [Thread-51677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:14:09.453 [DEBUG] [Thread-51677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:14:09.453 [INFO] [Thread-51677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:14:09.456 [DEBUG] [Thread-51677] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] client lang: <none>
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] server lang: <none>
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] kex follows: False
2025-11-17T09:14:09.457 [DEBUG] [Thread-51677] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:14:09.458 [DEBUG] [Thread-51677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:14:09.458 [DEBUG] [Thread-51677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:14:09.458 [DEBUG] [Thread-51677] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:14:09.458 [DEBUG] [Thread-51677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:14:09.458 [DEBUG] [Thread-51677] [transport.py] [_log()] Compression: none
2025-11-17T09:14:09.458 [DEBUG] [Thread-51677] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:14:09.476 [DEBUG] [Thread-51677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:14:09.477 [DEBUG] [Thread-51677] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:14:09.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:14:09.478 [DEBUG] [Thread-51677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:14:09.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:14:09.481 [DEBUG] [Thread-51677] [transport.py] [_log()] userauth is OK
2025-11-17T09:14:09.481 [DEBUG] [Thread-51677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:14:09.481 [DEBUG] [Thread-51677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:14:09.481 [DEBUG] [Thread-51677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:14:09.481 [DEBUG] [Thread-51677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:14:09.505 [INFO] [Thread-51677] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:14:09.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:14:10.143 [DEBUG] [Thread-51677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:14:10.144 [DEBUG] [Thread-51677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:14:10.144 [DEBUG] [Thread-51677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:14:10.185 [DEBUG] [Thread-51677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:14:10.185 [DEBUG] [Thread-51677] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:14:10.188 [DEBUG] [Thread-51677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:14:10.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:14:10.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:14:10.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:14:10.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:14:10.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:14:10.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:14:10.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:14:10.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:14:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:14:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.301091 -999.00  +14.50  15.60     42   +1.80 1 2 1 1 1   888    0 14.80 94.15 ----- 15.6 15.6 111.0 23.1 20.9 -25.5 20.8 -22.8 19.4 -23.2 19.9 -24.6
2025-11-17T09:14:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:14:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:14:10.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.301091
2025-11-17T09:14:10.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:14:10.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:14:10.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:14:10.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:14:10.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T09:14:10.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:13:39', tmtdew=15.17, humidity=35.53, cloud=0.0, wind=19.41, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:13:34.262', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:14:10.214 [DEBUG] [Thread-51677] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:14:10.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:14:10.310 [DEBUG] [Thread-51680] [transport.py] [_log()] starting thread (client mode): 0xd3137400
2025-11-17T09:14:10.310 [DEBUG] [Thread-51680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:14:10.326 [DEBUG] [Thread-51680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:14:10.326 [INFO] [Thread-51680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:14:10.333 [DEBUG] [Thread-51680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:14:10.333 [DEBUG] [Thread-51680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] client lang: <none>
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] server lang: <none>
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] kex follows: False
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] Compression: none
2025-11-17T09:14:10.334 [DEBUG] [Thread-51680] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:14:10.392 [DEBUG] [Thread-51680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:14:10.392 [DEBUG] [Thread-51680] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:14:10.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:14:10.393 [DEBUG] [Thread-51680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:14:10.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:14:10.447 [DEBUG] [Thread-51680] [transport.py] [_log()] userauth is OK
2025-11-17T09:14:10.447 [DEBUG] [Thread-51680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:14:10.448 [DEBUG] [Thread-51680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:14:10.448 [DEBUG] [Thread-51680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:14:10.448 [DEBUG] [Thread-51680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:14:10.466 [INFO] [Thread-51680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:14:10.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:14:10.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:14:11.322 [DEBUG] [Thread-51680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:14:11.322 [DEBUG] [Thread-51680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:14:11.370 [DEBUG] [Thread-51680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:14:11.370 [DEBUG] [Thread-51680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:14:11.379 [DEBUG] [Thread-51680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:14:11.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:14:11.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:14:11.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:14:11.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:14:11.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:14:11.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:14:11.417 [DEBUG] [Thread-51680] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:14:12.252 [DEBUG] [Thread-51682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:14:15.416 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:14:15.417 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:14:27.301 [DEBUG] [Thread-51683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:14:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:14:41.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:14:41.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:14:42.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 14, 11), 15.01, 35.87, 0.0, 21.76, 14.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:14:42.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:14:11
2025-11-17T09:14:42.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:14:42.336 [DEBUG] [Thread-51684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:14:42.360 [DEBUG] [Thread-51685] [transport.py] [_log()] starting thread (client mode): 0xd3134c40
2025-11-17T09:14:42.360 [DEBUG] [Thread-51685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:14:42.381 [DEBUG] [Thread-51685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:14:42.381 [INFO] [Thread-51685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:14:42.385 [DEBUG] [Thread-51685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:14:42.385 [DEBUG] [Thread-51685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:14:42.385 [DEBUG] [Thread-51685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:14:42.385 [DEBUG] [Thread-51685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:14:42.385 [DEBUG] [Thread-51685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:14:42.385 [DEBUG] [Thread-51685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:14:42.385 [DEBUG] [Thread-51685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] client lang: <none>
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] server lang: <none>
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] kex follows: False
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] Compression: none
2025-11-17T09:14:42.386 [DEBUG] [Thread-51685] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:14:42.403 [DEBUG] [Thread-51685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:14:42.403 [DEBUG] [Thread-51685] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:14:42.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:14:42.404 [DEBUG] [Thread-51685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:14:42.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:14:42.406 [DEBUG] [Thread-51685] [transport.py] [_log()] userauth is OK
2025-11-17T09:14:42.407 [DEBUG] [Thread-51685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:14:42.407 [DEBUG] [Thread-51685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:14:42.407 [DEBUG] [Thread-51685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:14:42.407 [DEBUG] [Thread-51685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:14:42.432 [INFO] [Thread-51685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:14:42.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:14:43.196 [DEBUG] [Thread-51685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:14:43.197 [DEBUG] [Thread-51685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:14:43.197 [DEBUG] [Thread-51685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:14:43.238 [DEBUG] [Thread-51685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:14:43.238 [DEBUG] [Thread-51685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:14:43.241 [DEBUG] [Thread-51685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:14:43.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:14:43.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:14:43.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:14:43.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:14:43.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:14:43.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:14:43.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:14:43.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:14:43.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:14:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.301438 -999.00  +14.40  10.91     41   +1.60 1 1 1 1 1   888    0 14.80 97.80 ----- 10.9 10.9 119.4 16.7 21.1 -27.5 20.9 -23.9 19.4 -24.3 19.9 -25.1
2025-11-17T09:14:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:14:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:14:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.301438
2025-11-17T09:14:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:14:43.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:14:43.264 [DEBUG] [Thread-51685] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:14:43.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:14:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:14:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:14:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:14:11', tmtdew=15.01, humidity=35.87, cloud=0.0, wind=21.76, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:14:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:14:43.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:14:43.359 [DEBUG] [Thread-51688] [transport.py] [_log()] starting thread (client mode): 0xd3135ab0
2025-11-17T09:14:43.359 [DEBUG] [Thread-51688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:14:43.375 [DEBUG] [Thread-51688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:14:43.376 [INFO] [Thread-51688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:14:43.383 [DEBUG] [Thread-51688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:14:43.383 [DEBUG] [Thread-51688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:14:43.383 [DEBUG] [Thread-51688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:14:43.383 [DEBUG] [Thread-51688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:14:43.383 [DEBUG] [Thread-51688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] client lang: <none>
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] server lang: <none>
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] kex follows: False
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] Compression: none
2025-11-17T09:14:43.384 [DEBUG] [Thread-51688] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:14:43.446 [DEBUG] [Thread-51688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:14:43.446 [DEBUG] [Thread-51688] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:14:43.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:14:43.447 [DEBUG] [Thread-51688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:14:43.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:14:43.502 [DEBUG] [Thread-51688] [transport.py] [_log()] userauth is OK
2025-11-17T09:14:43.502 [DEBUG] [Thread-51688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:14:43.503 [DEBUG] [Thread-51688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:14:43.503 [DEBUG] [Thread-51688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:14:43.503 [DEBUG] [Thread-51688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:14:43.517 [INFO] [Thread-51688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:14:43.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:14:43.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:14:44.380 [DEBUG] [Thread-51688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:14:44.380 [DEBUG] [Thread-51688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:14:44.428 [DEBUG] [Thread-51688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:14:44.428 [DEBUG] [Thread-51688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:14:44.436 [DEBUG] [Thread-51688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:14:44.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:14:44.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:14:44.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:14:44.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:14:44.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:14:44.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:14:44.468 [DEBUG] [Thread-51688] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:14:57.369 [DEBUG] [Thread-51690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:14:59.736 [DEBUG] [Thread-51691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:15:12.425 [DEBUG] [Thread-51692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:15:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:15:14.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:15:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:15:15.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 14, 43), 15.12, 35.76, 0.0, 15.76, 14.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:15:15.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:14:43
2025-11-17T09:15:15.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:15:15.403 [DEBUG] [Thread-51693] [transport.py] [_log()] starting thread (client mode): 0xd3134a30
2025-11-17T09:15:15.403 [DEBUG] [Thread-51693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:15:15.423 [DEBUG] [Thread-51693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:15:15.423 [INFO] [Thread-51693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:15:15.426 [DEBUG] [Thread-51693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:15:15.426 [DEBUG] [Thread-51693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] client lang: <none>
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] server lang: <none>
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] kex follows: False
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:15:15.427 [DEBUG] [Thread-51693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:15:15.428 [DEBUG] [Thread-51693] [transport.py] [_log()] Compression: none
2025-11-17T09:15:15.428 [DEBUG] [Thread-51693] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:15:15.443 [DEBUG] [Thread-51693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:15:15.444 [DEBUG] [Thread-51693] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:15:15.444 [DEBUG] [Thread-51693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:15:15.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:15:15.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:15:15.488 [DEBUG] [Thread-51693] [transport.py] [_log()] userauth is OK
2025-11-17T09:15:15.488 [DEBUG] [Thread-51693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:15:15.488 [DEBUG] [Thread-51693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:15:15.488 [DEBUG] [Thread-51693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:15:15.488 [DEBUG] [Thread-51693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:15:15.515 [INFO] [Thread-51693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:15:15.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:15:15.559 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:15:15.560 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:15:16.160 [DEBUG] [Thread-51693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:15:16.160 [DEBUG] [Thread-51693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:15:16.160 [DEBUG] [Thread-51693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:15:16.201 [DEBUG] [Thread-51693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:15:16.201 [DEBUG] [Thread-51693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:15:16.204 [DEBUG] [Thread-51693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:15:16.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:15:16.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:15:16.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:15:16.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:15:16.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:15:16.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:15:16.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:15:16.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:15:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:15:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.301786 -999.00  +14.30   9.60     42   +1.60 1 1 1 1 1   888    0 14.69 89.47 ----- 9.6 9.6 91.6 15.2 21.0 -28.0 20.9 -23.8 19.5 -24.6 19.9 -24.2
2025-11-17T09:15:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:15:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:15:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.301786
2025-11-17T09:15:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:15:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:15:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:15:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:15:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:15:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:14:43', tmtdew=15.12, humidity=35.76, cloud=0.0, wind=15.76, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:14:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:15:16.223 [DEBUG] [Thread-51693] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:15:16.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:15:16.308 [DEBUG] [Thread-51696] [transport.py] [_log()] starting thread (client mode): 0xd317e6b0
2025-11-17T09:15:16.309 [DEBUG] [Thread-51696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:15:16.324 [DEBUG] [Thread-51696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:15:16.324 [INFO] [Thread-51696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:15:16.331 [DEBUG] [Thread-51696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] client lang: <none>
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] server lang: <none>
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] kex follows: False
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] Compression: none
2025-11-17T09:15:16.332 [DEBUG] [Thread-51696] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:15:16.393 [DEBUG] [Thread-51696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:15:16.393 [DEBUG] [Thread-51696] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:15:16.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:15:16.393 [DEBUG] [Thread-51696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:15:16.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:15:16.451 [DEBUG] [Thread-51696] [transport.py] [_log()] userauth is OK
2025-11-17T09:15:16.451 [DEBUG] [Thread-51696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:15:16.451 [DEBUG] [Thread-51696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:15:16.451 [DEBUG] [Thread-51696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:15:16.451 [DEBUG] [Thread-51696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:15:16.469 [INFO] [Thread-51696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:15:16.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:15:16.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:15:17.365 [DEBUG] [Thread-51696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:15:17.365 [DEBUG] [Thread-51696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:15:17.415 [DEBUG] [Thread-51696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:15:17.416 [DEBUG] [Thread-51696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:15:17.425 [DEBUG] [Thread-51696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:15:17.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:15:17.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:15:17.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:15:17.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:15:17.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:15:17.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:15:17.465 [DEBUG] [Thread-51696] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:15:27.461 [DEBUG] [Thread-51698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:15:42.514 [DEBUG] [Thread-51699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:15:47.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:15:47.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:15:47.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:15:48.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 15, 15), 15.18, 35.64, 0.0, 16.13, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:15:48.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:15:15
2025-11-17T09:15:48.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:15:48.522 [DEBUG] [Thread-51700] [transport.py] [_log()] starting thread (client mode): 0xd317fd60
2025-11-17T09:15:48.522 [DEBUG] [Thread-51700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:15:48.543 [DEBUG] [Thread-51700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:15:48.544 [INFO] [Thread-51700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] client lang: <none>
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] server lang: <none>
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] kex follows: False
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] Compression: none
2025-11-17T09:15:48.547 [DEBUG] [Thread-51700] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:15:48.563 [DEBUG] [Thread-51700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:15:48.563 [DEBUG] [Thread-51700] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:15:48.563 [DEBUG] [Thread-51700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:15:48.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:15:48.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:15:48.563 [DEBUG] [Thread-51700] [transport.py] [_log()] userauth is OK
2025-11-17T09:15:48.563 [DEBUG] [Thread-51700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:15:48.563 [DEBUG] [Thread-51700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:15:48.564 [DEBUG] [Thread-51700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:15:48.564 [DEBUG] [Thread-51700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:15:48.573 [INFO] [Thread-51700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:15:48.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:15:49.215 [DEBUG] [Thread-51700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:15:49.215 [DEBUG] [Thread-51700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:15:49.215 [DEBUG] [Thread-51700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:15:49.256 [DEBUG] [Thread-51700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:15:49.256 [DEBUG] [Thread-51700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:15:49.259 [DEBUG] [Thread-51700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:15:49.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:15:49.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:15:49.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:15:49.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:15:49.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:15:49.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:15:49.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.302133 -999.00  +14.60  13.11     42   +1.80 1 1 1 1 1   888    0 14.51 82.33 ----- 13.1 13.1 110.6 19.9 21.1 -24.1 20.9 -23.8 19.6 -24.3 20.0 -24.7
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.302133
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:15:15', tmtdew=15.18, humidity=35.64, cloud=0.0, wind=16.13, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:15:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:15:49.278 [DEBUG] [Thread-51700] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:15:49.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:15:49.367 [DEBUG] [Thread-51703] [transport.py] [_log()] starting thread (client mode): 0xd3137280
2025-11-17T09:15:49.367 [DEBUG] [Thread-51703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:15:49.382 [DEBUG] [Thread-51703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:15:49.382 [INFO] [Thread-51703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:15:49.389 [DEBUG] [Thread-51703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] client lang: <none>
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] server lang: <none>
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] kex follows: False
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] Compression: none
2025-11-17T09:15:49.390 [DEBUG] [Thread-51703] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:15:49.447 [DEBUG] [Thread-51703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:15:49.447 [DEBUG] [Thread-51703] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:15:49.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:15:49.448 [DEBUG] [Thread-51703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:15:49.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:15:49.507 [DEBUG] [Thread-51703] [transport.py] [_log()] userauth is OK
2025-11-17T09:15:49.507 [DEBUG] [Thread-51703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:15:49.508 [DEBUG] [Thread-51703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:15:49.508 [DEBUG] [Thread-51703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:15:49.508 [DEBUG] [Thread-51703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:15:49.526 [INFO] [Thread-51703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:15:49.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:15:49.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:15:50.434 [DEBUG] [Thread-51703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:15:50.434 [DEBUG] [Thread-51703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:15:50.482 [DEBUG] [Thread-51703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:15:50.483 [DEBUG] [Thread-51703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:15:50.492 [DEBUG] [Thread-51703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:15:50.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:15:50.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:15:50.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:15:50.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:15:50.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:15:50.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:15:50.533 [DEBUG] [Thread-51703] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:15:57.552 [DEBUG] [Thread-51705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:15:59.787 [DEBUG] [Thread-51706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:16:12.600 [DEBUG] [Thread-51707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:16:15.700 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:16:15.702 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:16:20.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:16:20.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:16:20.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:16:21.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 15, 47), 15.48, 34.73, 0.0, 20.04, 15.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:16:21.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:15:47
2025-11-17T09:16:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:16:21.516 [DEBUG] [Thread-51708] [transport.py] [_log()] starting thread (client mode): 0xd3137af0
2025-11-17T09:16:21.516 [DEBUG] [Thread-51708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:16:21.538 [DEBUG] [Thread-51708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:16:21.538 [INFO] [Thread-51708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:16:21.540 [DEBUG] [Thread-51708] [transport.py] [_log()] client lang: <none>
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] server lang: <none>
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] kex follows: False
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] Compression: none
2025-11-17T09:16:21.541 [DEBUG] [Thread-51708] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:16:21.551 [DEBUG] [Thread-51708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:16:21.552 [DEBUG] [Thread-51708] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:16:21.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:16:21.552 [DEBUG] [Thread-51708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:16:21.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:16:21.555 [DEBUG] [Thread-51708] [transport.py] [_log()] userauth is OK
2025-11-17T09:16:21.555 [DEBUG] [Thread-51708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:16:21.555 [DEBUG] [Thread-51708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:16:21.555 [DEBUG] [Thread-51708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:16:21.556 [DEBUG] [Thread-51708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:16:21.592 [INFO] [Thread-51708] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:16:21.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:16:22.216 [DEBUG] [Thread-51708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:16:22.217 [DEBUG] [Thread-51708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:16:22.217 [DEBUG] [Thread-51708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:16:22.258 [DEBUG] [Thread-51708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:16:22.258 [DEBUG] [Thread-51708] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:16:22.262 [DEBUG] [Thread-51708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:16:22.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:16:22.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:16:22.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:16:22.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:16:22.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:16:22.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:16:22.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:16:22.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:16:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:16:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.302480 -999.00  +15.10  11.28     41   +2.00 1 1 1 1 1   888    0 14.48 82.46 ----- 11.3 11.3 112.0 22.0 21.2 -24.2 21.1 -22.8 19.6 -23.4 20.1 -24.6
2025-11-17T09:16:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:16:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:16:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.302480
2025-11-17T09:16:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:16:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:16:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:16:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:16:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:16:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:15:47', tmtdew=15.48, humidity=34.73, cloud=0.0, wind=20.04, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:15:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:16:22.291 [DEBUG] [Thread-51708] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:16:22.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:16:22.395 [DEBUG] [Thread-51711] [transport.py] [_log()] starting thread (client mode): 0xd07cfdf0
2025-11-17T09:16:22.395 [DEBUG] [Thread-51711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:16:22.413 [DEBUG] [Thread-51711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:16:22.413 [INFO] [Thread-51711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:16:22.420 [DEBUG] [Thread-51711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:16:22.421 [DEBUG] [Thread-51711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:16:22.421 [DEBUG] [Thread-51711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:16:22.421 [DEBUG] [Thread-51711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:16:22.421 [DEBUG] [Thread-51711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:16:22.421 [DEBUG] [Thread-51711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:16:22.421 [DEBUG] [Thread-51711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:16:22.421 [DEBUG] [Thread-51711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:16:22.422 [DEBUG] [Thread-51711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:16:22.422 [DEBUG] [Thread-51711] [transport.py] [_log()] client lang: <none>
2025-11-17T09:16:22.422 [DEBUG] [Thread-51711] [transport.py] [_log()] server lang: <none>
2025-11-17T09:16:22.422 [DEBUG] [Thread-51711] [transport.py] [_log()] kex follows: False
2025-11-17T09:16:22.422 [DEBUG] [Thread-51711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:16:22.422 [DEBUG] [Thread-51711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:16:22.422 [DEBUG] [Thread-51711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:16:22.422 [DEBUG] [Thread-51711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:16:22.423 [DEBUG] [Thread-51711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:16:22.423 [DEBUG] [Thread-51711] [transport.py] [_log()] Compression: none
2025-11-17T09:16:22.423 [DEBUG] [Thread-51711] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:16:22.481 [DEBUG] [Thread-51711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:16:22.481 [DEBUG] [Thread-51711] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:16:22.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:16:22.483 [DEBUG] [Thread-51711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:16:22.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:16:22.539 [DEBUG] [Thread-51711] [transport.py] [_log()] userauth is OK
2025-11-17T09:16:22.540 [DEBUG] [Thread-51711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:16:22.540 [DEBUG] [Thread-51711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:16:22.540 [DEBUG] [Thread-51711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:16:22.540 [DEBUG] [Thread-51711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:16:22.559 [INFO] [Thread-51711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:16:22.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:16:22.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:16:23.450 [DEBUG] [Thread-51711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:16:23.450 [DEBUG] [Thread-51711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:16:23.499 [DEBUG] [Thread-51711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:16:23.499 [DEBUG] [Thread-51711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:16:23.508 [DEBUG] [Thread-51711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:16:23.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:16:23.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:16:23.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:16:23.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:16:23.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:16:23.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:16:23.545 [DEBUG] [Thread-51711] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:16:27.638 [DEBUG] [Thread-51713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:16:42.697 [DEBUG] [Thread-51714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:16:53.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:16:53.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:16:53.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
2025-11-17T09:16:54.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 16, 51), 15.62, 34.69, 0.0, 18.4, 15.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:16:54.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:16:51
2025-11-17T09:16:54.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:16:54.499 [DEBUG] [Thread-51715] [transport.py] [_log()] starting thread (client mode): 0xd317cca0
2025-11-17T09:16:54.499 [DEBUG] [Thread-51715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:16:54.519 [DEBUG] [Thread-51715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:16:54.519 [INFO] [Thread-51715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] client lang: <none>
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] server lang: <none>
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] kex follows: False
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] Compression: none
2025-11-17T09:16:54.523 [DEBUG] [Thread-51715] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:16:54.540 [DEBUG] [Thread-51715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:16:54.541 [DEBUG] [Thread-51715] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:16:54.542 [DEBUG] [Thread-51715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:16:54.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:16:54.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:16:54.585 [DEBUG] [Thread-51715] [transport.py] [_log()] userauth is OK
2025-11-17T09:16:54.585 [DEBUG] [Thread-51715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:16:54.585 [DEBUG] [Thread-51715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:16:54.585 [DEBUG] [Thread-51715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:16:54.585 [DEBUG] [Thread-51715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:16:54.618 [INFO] [Thread-51715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:16:54.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:16:55.386 [DEBUG] [Thread-51715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:16:55.386 [DEBUG] [Thread-51715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:16:55.387 [DEBUG] [Thread-51715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:16:55.428 [DEBUG] [Thread-51715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:16:55.428 [DEBUG] [Thread-51715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:16:55.432 [DEBUG] [Thread-51715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:16:55.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:16:55.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:16:55.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:16:55.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:16:55.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:16:55.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:16:55.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:16:55.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:16:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:16:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.302827 -999.00  +15.10  12.63     40   +1.80 1 1 1 1 1   888    0 14.68 83.52 ----- 12.6 12.6 113.0 19.2 21.4 -27.8 21.1 -23.4 19.7 -24.2 20.2 -24.6
2025-11-17T09:16:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:16:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:16:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.302827
2025-11-17T09:16:55.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:16:55.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:16:55.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:16:55.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:16:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:16:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:16:51', tmtdew=15.62, humidity=34.69, cloud=0.0, wind=18.4, temperature=15.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:16:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:16:55.459 [DEBUG] [Thread-51715] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:16:55.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:16:55.555 [DEBUG] [Thread-51718] [transport.py] [_log()] starting thread (client mode): 0xd3137b50
2025-11-17T09:16:55.556 [DEBUG] [Thread-51718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:16:55.572 [DEBUG] [Thread-51718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:16:55.572 [INFO] [Thread-51718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] client lang: <none>
2025-11-17T09:16:55.580 [DEBUG] [Thread-51718] [transport.py] [_log()] server lang: <none>
2025-11-17T09:16:55.581 [DEBUG] [Thread-51718] [transport.py] [_log()] kex follows: False
2025-11-17T09:16:55.581 [DEBUG] [Thread-51718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:16:55.581 [DEBUG] [Thread-51718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:16:55.581 [DEBUG] [Thread-51718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:16:55.581 [DEBUG] [Thread-51718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:16:55.581 [DEBUG] [Thread-51718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:16:55.581 [DEBUG] [Thread-51718] [transport.py] [_log()] Compression: none
2025-11-17T09:16:55.581 [DEBUG] [Thread-51718] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:16:55.640 [DEBUG] [Thread-51718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:16:55.640 [DEBUG] [Thread-51718] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:16:55.641 [DEBUG] [Thread-51718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:16:55.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:16:55.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:16:55.697 [DEBUG] [Thread-51718] [transport.py] [_log()] userauth is OK
2025-11-17T09:16:55.697 [DEBUG] [Thread-51718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:16:55.697 [DEBUG] [Thread-51718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:16:55.697 [DEBUG] [Thread-51718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:16:55.697 [DEBUG] [Thread-51718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:16:55.716 [INFO] [Thread-51718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:16:55.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:16:55.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:16:56.579 [DEBUG] [Thread-51718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:16:56.579 [DEBUG] [Thread-51718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:16:56.628 [DEBUG] [Thread-51718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:16:56.628 [DEBUG] [Thread-51718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:16:56.638 [DEBUG] [Thread-51718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:16:56.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:16:56.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:16:56.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:16:56.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:16:56.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:16:56.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:16:56.675 [DEBUG] [Thread-51718] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:16:57.733 [DEBUG] [Thread-51720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:16:59.847 [DEBUG] [Thread-51721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:17:12.782 [DEBUG] [Thread-51722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:17:15.844 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:17:15.845 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:17:26.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:17:26.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:17:26.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:17:27.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 17, 23), 15.78, 34.3, 0.0, 16.0, 15.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:17:27.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:17:23
2025-11-17T09:17:27.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:17:27.645 [DEBUG] [Thread-51723] [transport.py] [_log()] starting thread (client mode): 0xd3134ac0
2025-11-17T09:17:27.645 [DEBUG] [Thread-51723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:17:27.669 [DEBUG] [Thread-51723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:17:27.669 [INFO] [Thread-51723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:17:27.672 [DEBUG] [Thread-51723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] client lang: <none>
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] server lang: <none>
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] kex follows: False
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] Compression: none
2025-11-17T09:17:27.673 [DEBUG] [Thread-51723] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:17:27.692 [DEBUG] [Thread-51723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:17:27.693 [DEBUG] [Thread-51723] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:17:27.694 [DEBUG] [Thread-51723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:17:27.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:17:27.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:17:27.696 [DEBUG] [Thread-51723] [transport.py] [_log()] userauth is OK
2025-11-17T09:17:27.696 [DEBUG] [Thread-51723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:17:27.696 [DEBUG] [Thread-51723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:17:27.696 [DEBUG] [Thread-51723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:17:27.696 [DEBUG] [Thread-51723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:17:27.731 [INFO] [Thread-51723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:17:27.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:17:27.819 [DEBUG] [Thread-51725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:17:28.356 [DEBUG] [Thread-51723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:17:28.357 [DEBUG] [Thread-51723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:17:28.357 [DEBUG] [Thread-51723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:17:28.398 [DEBUG] [Thread-51723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:17:28.398 [DEBUG] [Thread-51723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:17:28.401 [DEBUG] [Thread-51723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:17:28.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:17:28.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:17:28.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:17:28.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:17:28.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:17:28.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:17:28.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:17:28.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:17:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:17:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.303175 -999.00  +15.00  15.69     41   +1.90 1 1 1 1 1   888    0 14.96 86.99 ----- 15.7 15.7 117.6 19.6 21.4 -27.9 21.2 -22.8 19.8 -23.3 20.2 -24.1
2025-11-17T09:17:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:17:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:17:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.303175
2025-11-17T09:17:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:17:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:17:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:17:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:17:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:17:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:17:23', tmtdew=15.78, humidity=34.3, cloud=0.0, wind=16.0, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:16:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:17:28.432 [DEBUG] [Thread-51723] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:17:28.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:17:28.527 [DEBUG] [Thread-51727] [transport.py] [_log()] starting thread (client mode): 0xd31cc0a0
2025-11-17T09:17:28.527 [DEBUG] [Thread-51727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:17:28.542 [DEBUG] [Thread-51727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:17:28.543 [INFO] [Thread-51727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:17:28.550 [DEBUG] [Thread-51727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:17:28.550 [DEBUG] [Thread-51727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:17:28.550 [DEBUG] [Thread-51727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:17:28.550 [DEBUG] [Thread-51727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:17:28.550 [DEBUG] [Thread-51727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:17:28.550 [DEBUG] [Thread-51727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] client lang: <none>
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] server lang: <none>
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] kex follows: False
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] Compression: none
2025-11-17T09:17:28.551 [DEBUG] [Thread-51727] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:17:28.609 [DEBUG] [Thread-51727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:17:28.609 [DEBUG] [Thread-51727] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:17:28.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:17:28.610 [DEBUG] [Thread-51727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:17:28.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:17:28.664 [DEBUG] [Thread-51727] [transport.py] [_log()] userauth is OK
2025-11-17T09:17:28.665 [DEBUG] [Thread-51727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:17:28.665 [DEBUG] [Thread-51727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:17:28.665 [DEBUG] [Thread-51727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:17:28.665 [DEBUG] [Thread-51727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:17:28.684 [INFO] [Thread-51727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:17:28.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:17:28.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:17:29.556 [DEBUG] [Thread-51727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:17:29.556 [DEBUG] [Thread-51727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:17:29.606 [DEBUG] [Thread-51727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:17:29.606 [DEBUG] [Thread-51727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:17:29.615 [DEBUG] [Thread-51727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:17:29.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:17:29.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:17:29.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:17:29.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:17:29.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:17:29.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:17:29.654 [DEBUG] [Thread-51727] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:17:42.855 [DEBUG] [Thread-51729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:17:57.900 [DEBUG] [Thread-51730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:17:59.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:17:59.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:17:59.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:17:59.897 [DEBUG] [Thread-51731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:18:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 17, 55), 15.58, 34.61, 0.0, 17.12, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:18:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:17:55
2025-11-17T09:18:00.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:18:00.630 [DEBUG] [Thread-51732] [transport.py] [_log()] starting thread (client mode): 0xd31cdb70
2025-11-17T09:18:00.630 [DEBUG] [Thread-51732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:18:00.651 [DEBUG] [Thread-51732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:18:00.651 [INFO] [Thread-51732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:18:00.654 [DEBUG] [Thread-51732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] client lang: <none>
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] server lang: <none>
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] kex follows: False
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:18:00.655 [DEBUG] [Thread-51732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:18:00.656 [DEBUG] [Thread-51732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:18:00.656 [DEBUG] [Thread-51732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:18:00.656 [DEBUG] [Thread-51732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:18:00.656 [DEBUG] [Thread-51732] [transport.py] [_log()] Compression: none
2025-11-17T09:18:00.656 [DEBUG] [Thread-51732] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:18:00.673 [DEBUG] [Thread-51732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:18:00.674 [DEBUG] [Thread-51732] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:18:00.674 [DEBUG] [Thread-51732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:18:00.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:18:00.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:18:00.676 [DEBUG] [Thread-51732] [transport.py] [_log()] userauth is OK
2025-11-17T09:18:00.676 [DEBUG] [Thread-51732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:18:00.677 [DEBUG] [Thread-51732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:18:00.677 [DEBUG] [Thread-51732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:18:00.677 [DEBUG] [Thread-51732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:18:00.711 [INFO] [Thread-51732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:18:00.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:18:01.518 [DEBUG] [Thread-51732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:18:01.519 [DEBUG] [Thread-51732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:18:01.519 [DEBUG] [Thread-51732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:18:01.559 [DEBUG] [Thread-51732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:18:01.560 [DEBUG] [Thread-51732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:18:01.563 [DEBUG] [Thread-51732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:18:01.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:18:01.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:18:01.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:18:01.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:18:01.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:18:01.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:18:01.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.303869 -999.00  +15.10  11.89     41   +2.00 1 1 1 1 1   888    0 14.79 84.39 ----- 11.9 11.9 108.4 19.3 21.3 -27.9 21.2 -23.3 19.8 -23.5 20.3 -23.8
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.303869
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:18:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:17:55', tmtdew=15.58, humidity=34.61, cloud=0.0, wind=17.12, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:17:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:18:01.581 [DEBUG] [Thread-51732] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:18:01.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:18:01.667 [DEBUG] [Thread-51735] [transport.py] [_log()] starting thread (client mode): 0xd3137310
2025-11-17T09:18:01.667 [DEBUG] [Thread-51735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:18:01.681 [DEBUG] [Thread-51735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:18:01.682 [INFO] [Thread-51735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:18:01.689 [DEBUG] [Thread-51735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:18:01.689 [DEBUG] [Thread-51735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:18:01.689 [DEBUG] [Thread-51735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:18:01.689 [DEBUG] [Thread-51735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] client lang: <none>
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] server lang: <none>
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] kex follows: False
2025-11-17T09:18:01.690 [DEBUG] [Thread-51735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:18:01.691 [DEBUG] [Thread-51735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:18:01.691 [DEBUG] [Thread-51735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:18:01.691 [DEBUG] [Thread-51735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:18:01.691 [DEBUG] [Thread-51735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:18:01.691 [DEBUG] [Thread-51735] [transport.py] [_log()] Compression: none
2025-11-17T09:18:01.691 [DEBUG] [Thread-51735] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:18:01.747 [DEBUG] [Thread-51735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:18:01.748 [DEBUG] [Thread-51735] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:18:01.748 [DEBUG] [Thread-51735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:18:01.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:18:01.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:18:01.808 [DEBUG] [Thread-51735] [transport.py] [_log()] userauth is OK
2025-11-17T09:18:01.808 [DEBUG] [Thread-51735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:18:01.808 [DEBUG] [Thread-51735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:18:01.808 [DEBUG] [Thread-51735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:18:01.808 [DEBUG] [Thread-51735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:18:01.827 [INFO] [Thread-51735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:18:01.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:18:01.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:18:02.709 [DEBUG] [Thread-51735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:18:02.710 [DEBUG] [Thread-51735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:18:02.758 [DEBUG] [Thread-51735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:18:02.758 [DEBUG] [Thread-51735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:18:02.767 [DEBUG] [Thread-51735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:18:02.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:18:02.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:18:02.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:18:02.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:18:02.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:18:02.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:18:02.811 [DEBUG] [Thread-51735] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:18:12.944 [DEBUG] [Thread-51737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:18:15.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:18:15.990 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:18:28.000 [DEBUG] [Thread-51738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:18:32.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:18:32.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:18:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:18:33.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 18, 27), 15.4, 34.99, 0.0, 19.37, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:18:33.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:18:27
2025-11-17T09:18:33.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:18:33.782 [DEBUG] [Thread-51739] [transport.py] [_log()] starting thread (client mode): 0xd3153940
2025-11-17T09:18:33.782 [DEBUG] [Thread-51739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:18:33.803 [DEBUG] [Thread-51739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:18:33.803 [INFO] [Thread-51739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] client lang: <none>
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] server lang: <none>
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] kex follows: False
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] Compression: none
2025-11-17T09:18:33.806 [DEBUG] [Thread-51739] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:18:33.824 [DEBUG] [Thread-51739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:18:33.825 [DEBUG] [Thread-51739] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:18:33.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:18:33.826 [DEBUG] [Thread-51739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:18:33.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:18:33.828 [DEBUG] [Thread-51739] [transport.py] [_log()] userauth is OK
2025-11-17T09:18:33.829 [DEBUG] [Thread-51739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:18:33.829 [DEBUG] [Thread-51739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:18:33.829 [DEBUG] [Thread-51739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:18:33.829 [DEBUG] [Thread-51739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:18:33.854 [INFO] [Thread-51739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:18:33.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:18:34.521 [DEBUG] [Thread-51739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:18:34.521 [DEBUG] [Thread-51739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:18:34.521 [DEBUG] [Thread-51739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:18:34.561 [DEBUG] [Thread-51739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:18:34.561 [DEBUG] [Thread-51739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:18:34.564 [DEBUG] [Thread-51739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:18:34.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:18:34.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:18:34.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:18:34.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:18:34.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:18:34.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:18:34.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:18:34.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:18:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:18:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.304216 -999.00  +15.10  15.85     41   +2.00 1 1 1 1 1   888    0 14.67 87.47 ----- 15.8 15.8 107.4 18.1 21.6 -27.0 21.2 -23.7 19.8 -23.7 20.3 -24.4
2025-11-17T09:18:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:18:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:18:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.304216
2025-11-17T09:18:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:18:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:18:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:18:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:18:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:18:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:18:27', tmtdew=15.4, humidity=34.99, cloud=0.0, wind=19.37, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:18:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:18:34.588 [DEBUG] [Thread-51739] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:18:34.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:18:34.695 [DEBUG] [Thread-51742] [transport.py] [_log()] starting thread (client mode): 0xd07ce7a0
2025-11-17T09:18:34.695 [DEBUG] [Thread-51742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:18:34.710 [DEBUG] [Thread-51742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:18:34.710 [INFO] [Thread-51742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] client lang: <none>
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] server lang: <none>
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] kex follows: False
2025-11-17T09:18:34.718 [DEBUG] [Thread-51742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:18:34.719 [DEBUG] [Thread-51742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:18:34.719 [DEBUG] [Thread-51742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:18:34.719 [DEBUG] [Thread-51742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:18:34.719 [DEBUG] [Thread-51742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:18:34.719 [DEBUG] [Thread-51742] [transport.py] [_log()] Compression: none
2025-11-17T09:18:34.719 [DEBUG] [Thread-51742] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:18:34.777 [DEBUG] [Thread-51742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:18:34.778 [DEBUG] [Thread-51742] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:18:34.778 [DEBUG] [Thread-51742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:18:34.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:18:34.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:18:34.836 [DEBUG] [Thread-51742] [transport.py] [_log()] userauth is OK
2025-11-17T09:18:34.837 [DEBUG] [Thread-51742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:18:34.837 [DEBUG] [Thread-51742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:18:34.837 [DEBUG] [Thread-51742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:18:34.837 [DEBUG] [Thread-51742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:18:34.856 [INFO] [Thread-51742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:18:34.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:18:34.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:18:35.705 [DEBUG] [Thread-51742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:18:35.705 [DEBUG] [Thread-51742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:18:35.754 [DEBUG] [Thread-51742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:18:35.754 [DEBUG] [Thread-51742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:18:35.763 [DEBUG] [Thread-51742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:18:35.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:18:35.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:18:35.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:18:35.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:18:35.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:18:35.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:18:35.800 [DEBUG] [Thread-51742] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:18:43.033 [DEBUG] [Thread-51744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:18:58.080 [DEBUG] [Thread-51745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:18:59.944 [DEBUG] [Thread-51746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:19:05.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:19:05.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:19:05.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:19:06.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 18, 59), 15.49, 34.71, 0.0, 18.74, 15.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:19:06.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:18:59
2025-11-17T09:19:06.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:19:06.756 [DEBUG] [Thread-51747] [transport.py] [_log()] starting thread (client mode): 0xd31ceda0
2025-11-17T09:19:06.756 [DEBUG] [Thread-51747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:19:06.771 [DEBUG] [Thread-51747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:19:06.771 [INFO] [Thread-51747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] client lang: <none>
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] server lang: <none>
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] kex follows: False
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] Compression: none
2025-11-17T09:19:06.775 [DEBUG] [Thread-51747] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:19:06.799 [DEBUG] [Thread-51747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:19:06.800 [DEBUG] [Thread-51747] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:19:06.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:19:06.801 [DEBUG] [Thread-51747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:19:06.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:19:06.803 [DEBUG] [Thread-51747] [transport.py] [_log()] userauth is OK
2025-11-17T09:19:06.804 [DEBUG] [Thread-51747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:19:06.804 [DEBUG] [Thread-51747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:19:06.804 [DEBUG] [Thread-51747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:19:06.804 [DEBUG] [Thread-51747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:19:06.829 [INFO] [Thread-51747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:19:06.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:19:07.624 [DEBUG] [Thread-51747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:19:07.625 [DEBUG] [Thread-51747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:19:07.625 [DEBUG] [Thread-51747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:19:07.665 [DEBUG] [Thread-51747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:19:07.666 [DEBUG] [Thread-51747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:19:07.668 [DEBUG] [Thread-51747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:19:07.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:19:07.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:19:07.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:19:07.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:19:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:19:07.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:19:07.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:19:07.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:19:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:19:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.304563 -999.00  +15.30  11.36     40   +2.10 1 1 1 1 1   888    0 14.74 89.47 ----- 11.4 11.4 99.7 18.7 21.7 -24.6 21.4 -23.3 19.9 -23.8 20.4 -24.2
2025-11-17T09:19:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:19:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:19:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.304563
2025-11-17T09:19:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:19:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:19:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:19:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:19:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:19:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:18:59', tmtdew=15.49, humidity=34.71, cloud=0.0, wind=18.74, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:18:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:19:07.693 [DEBUG] [Thread-51747] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:19:07.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:19:07.787 [DEBUG] [Thread-51750] [transport.py] [_log()] starting thread (client mode): 0xd3160c10
2025-11-17T09:19:07.787 [DEBUG] [Thread-51750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:19:07.802 [DEBUG] [Thread-51750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:19:07.802 [INFO] [Thread-51750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:19:07.813 [DEBUG] [Thread-51750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:19:07.813 [DEBUG] [Thread-51750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:19:07.813 [DEBUG] [Thread-51750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:19:07.813 [DEBUG] [Thread-51750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:19:07.813 [DEBUG] [Thread-51750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:19:07.813 [DEBUG] [Thread-51750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:19:07.813 [DEBUG] [Thread-51750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:19:07.813 [DEBUG] [Thread-51750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:19:07.814 [DEBUG] [Thread-51750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:19:07.814 [DEBUG] [Thread-51750] [transport.py] [_log()] client lang: <none>
2025-11-17T09:19:07.814 [DEBUG] [Thread-51750] [transport.py] [_log()] server lang: <none>
2025-11-17T09:19:07.814 [DEBUG] [Thread-51750] [transport.py] [_log()] kex follows: False
2025-11-17T09:19:07.814 [DEBUG] [Thread-51750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:19:07.814 [DEBUG] [Thread-51750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:19:07.814 [DEBUG] [Thread-51750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:19:07.814 [DEBUG] [Thread-51750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:19:07.815 [DEBUG] [Thread-51750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:19:07.815 [DEBUG] [Thread-51750] [transport.py] [_log()] Compression: none
2025-11-17T09:19:07.815 [DEBUG] [Thread-51750] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:19:07.873 [DEBUG] [Thread-51750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:19:07.874 [DEBUG] [Thread-51750] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:19:07.875 [DEBUG] [Thread-51750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:19:07.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:19:07.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:19:07.933 [DEBUG] [Thread-51750] [transport.py] [_log()] userauth is OK
2025-11-17T09:19:07.934 [DEBUG] [Thread-51750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:19:07.934 [DEBUG] [Thread-51750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:19:07.934 [DEBUG] [Thread-51750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:19:07.934 [DEBUG] [Thread-51750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:19:07.959 [INFO] [Thread-51750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:19:07.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:19:07.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:19:08.836 [DEBUG] [Thread-51750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:19:08.836 [DEBUG] [Thread-51750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:19:08.884 [DEBUG] [Thread-51750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:19:08.885 [DEBUG] [Thread-51750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:19:08.894 [DEBUG] [Thread-51750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:19:08.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:19:08.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:19:08.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:19:08.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:19:08.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:19:08.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:19:08.931 [DEBUG] [Thread-51750] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:19:13.114 [DEBUG] [Thread-51752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:19:16.131 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:19:16.132 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:19:28.167 [DEBUG] [Thread-51753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:19:38.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:19:38.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:19:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:19:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 19, 31), 15.85, 33.91, 0.0, 15.92, 15.58, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:19:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:19:31
2025-11-17T09:19:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:19:39.880 [DEBUG] [Thread-51754] [transport.py] [_log()] starting thread (client mode): 0xd7bc7f40
2025-11-17T09:19:39.880 [DEBUG] [Thread-51754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:19:39.899 [DEBUG] [Thread-51754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:19:39.900 [INFO] [Thread-51754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] client lang: <none>
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] server lang: <none>
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] kex follows: False
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] Compression: none
2025-11-17T09:19:39.903 [DEBUG] [Thread-51754] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:19:39.919 [DEBUG] [Thread-51754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:19:39.920 [DEBUG] [Thread-51754] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:19:39.920 [DEBUG] [Thread-51754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:19:39.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:19:39.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:19:39.922 [DEBUG] [Thread-51754] [transport.py] [_log()] userauth is OK
2025-11-17T09:19:39.922 [DEBUG] [Thread-51754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:19:39.923 [DEBUG] [Thread-51754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:19:39.923 [DEBUG] [Thread-51754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:19:39.923 [DEBUG] [Thread-51754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:19:39.947 [INFO] [Thread-51754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:19:39.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:19:40.582 [DEBUG] [Thread-51754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:19:40.583 [DEBUG] [Thread-51754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:19:40.583 [DEBUG] [Thread-51754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:19:40.623 [DEBUG] [Thread-51754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:19:40.623 [DEBUG] [Thread-51754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:19:40.626 [DEBUG] [Thread-51754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:19:40.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:19:40.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:19:40.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:19:40.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:19:40.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:19:40.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:19:40.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:19:40.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:19:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:19:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.304911 -999.00  +15.30  16.30     40   +1.90 1 1 1 1 1   888    0 15.28 93.21 ----- 16.3 16.3 69.2 18.2 21.9 -24.1 21.4 -23.2 20.0 -23.8 20.5 -24.3
2025-11-17T09:19:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:19:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:19:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.304911
2025-11-17T09:19:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:19:40.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:19:40.655 [DEBUG] [Thread-51754] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:19:40.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:19:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:19:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:19:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:19:31', tmtdew=15.85, humidity=33.91, cloud=0.0, wind=15.92, temperature=15.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:19:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:19:40.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:19:40.755 [DEBUG] [Thread-51757] [transport.py] [_log()] starting thread (client mode): 0xd07cf760
2025-11-17T09:19:40.755 [DEBUG] [Thread-51757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:19:40.773 [DEBUG] [Thread-51757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:19:40.773 [INFO] [Thread-51757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:19:40.782 [DEBUG] [Thread-51757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:19:40.782 [DEBUG] [Thread-51757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:19:40.782 [DEBUG] [Thread-51757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] client lang: <none>
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] server lang: <none>
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] kex follows: False
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:19:40.783 [DEBUG] [Thread-51757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:19:40.784 [DEBUG] [Thread-51757] [transport.py] [_log()] Compression: none
2025-11-17T09:19:40.784 [DEBUG] [Thread-51757] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:19:40.849 [DEBUG] [Thread-51757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:19:40.849 [DEBUG] [Thread-51757] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:19:40.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:19:40.851 [DEBUG] [Thread-51757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:19:40.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:19:40.905 [DEBUG] [Thread-51757] [transport.py] [_log()] userauth is OK
2025-11-17T09:19:40.906 [DEBUG] [Thread-51757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:19:40.906 [DEBUG] [Thread-51757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:19:40.906 [DEBUG] [Thread-51757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:19:40.906 [DEBUG] [Thread-51757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:19:40.931 [INFO] [Thread-51757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:19:40.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:19:40.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:19:41.816 [DEBUG] [Thread-51757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:19:41.816 [DEBUG] [Thread-51757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:19:41.865 [DEBUG] [Thread-51757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:19:41.865 [DEBUG] [Thread-51757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:19:41.874 [DEBUG] [Thread-51757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:19:41.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:19:41.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:19:41.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:19:41.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:19:41.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:19:41.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:19:41.910 [DEBUG] [Thread-51757] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:19:43.202 [DEBUG] [Thread-51759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:19:58.252 [DEBUG] [Thread-51760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:20:00.003 [DEBUG] [Thread-51761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:20:11.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:20:11.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:20:11.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
2025-11-17T09:20:12.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 20, 3), 15.91, 33.83, 0.0, 15.42, 15.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:20:12.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:20:03
2025-11-17T09:20:12.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:20:12.849 [DEBUG] [Thread-51762] [transport.py] [_log()] starting thread (client mode): 0xd3163c70
2025-11-17T09:20:12.850 [DEBUG] [Thread-51762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:20:12.870 [DEBUG] [Thread-51762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:20:12.870 [INFO] [Thread-51762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] client lang: <none>
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] server lang: <none>
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] kex follows: False
2025-11-17T09:20:12.873 [DEBUG] [Thread-51762] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:20:12.874 [DEBUG] [Thread-51762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:20:12.874 [DEBUG] [Thread-51762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:20:12.874 [DEBUG] [Thread-51762] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:20:12.874 [DEBUG] [Thread-51762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:20:12.874 [DEBUG] [Thread-51762] [transport.py] [_log()] Compression: none
2025-11-17T09:20:12.874 [DEBUG] [Thread-51762] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:20:12.890 [DEBUG] [Thread-51762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:20:12.891 [DEBUG] [Thread-51762] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:20:12.892 [DEBUG] [Thread-51762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:20:12.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:20:12.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:20:12.894 [DEBUG] [Thread-51762] [transport.py] [_log()] userauth is OK
2025-11-17T09:20:12.894 [DEBUG] [Thread-51762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:20:12.894 [DEBUG] [Thread-51762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:20:12.894 [DEBUG] [Thread-51762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:20:12.894 [DEBUG] [Thread-51762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:20:12.911 [INFO] [Thread-51762] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:20:12.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:20:13.290 [DEBUG] [Thread-51764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:20:16.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:20:16.274 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:20:20.004 [DEBUG] [Thread-51762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:20:20.005 [DEBUG] [Thread-51762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:20:20.005 [DEBUG] [Thread-51762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:20:20.046 [DEBUG] [Thread-51762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:20:20.046 [DEBUG] [Thread-51762] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:20:20.049 [DEBUG] [Thread-51762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:20:20.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:20:20.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:20:20.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:20:20.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:20:20.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:20:20.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:20:20.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:20:20.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.305258 -999.00  +15.10  18.17     40   +1.80 1 1 1 1 1   888    0 15.05 94.15 ----- 18.2 18.2 111.4 23.5 21.8 -26.9 21.4 -24.6 19.9 -24.7 20.5 -25.0
2025-11-17T09:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.305258
2025-11-17T09:20:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:20:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:20:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:20:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:20:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:20:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:20:03', tmtdew=15.91, humidity=33.83, cloud=0.0, wind=15.42, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:19:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:20:20.077 [DEBUG] [Thread-51762] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:20:20.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:20:20.181 [DEBUG] [Thread-51766] [transport.py] [_log()] starting thread (client mode): 0xd3137880
2025-11-17T09:20:20.181 [DEBUG] [Thread-51766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:20:20.197 [DEBUG] [Thread-51766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:20:20.197 [INFO] [Thread-51766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:20:20.204 [DEBUG] [Thread-51766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] client lang: <none>
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] server lang: <none>
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] kex follows: False
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] Compression: none
2025-11-17T09:20:20.205 [DEBUG] [Thread-51766] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:20:20.264 [DEBUG] [Thread-51766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:20:20.265 [DEBUG] [Thread-51766] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:20:20.265 [DEBUG] [Thread-51766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:20:20.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:20:20.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:20:20.321 [DEBUG] [Thread-51766] [transport.py] [_log()] userauth is OK
2025-11-17T09:20:20.322 [DEBUG] [Thread-51766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:20:20.322 [DEBUG] [Thread-51766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:20:20.322 [DEBUG] [Thread-51766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:20:20.322 [DEBUG] [Thread-51766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:20:20.341 [INFO] [Thread-51766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:20:20.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:20:20.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:20:21.213 [DEBUG] [Thread-51766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:20:21.214 [DEBUG] [Thread-51766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:20:21.262 [DEBUG] [Thread-51766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:20:21.262 [DEBUG] [Thread-51766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:20:21.271 [DEBUG] [Thread-51766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:20:21.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:20:21.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:20:21.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:20:21.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:20:21.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:20:21.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:20:21.310 [DEBUG] [Thread-51766] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:20:28.330 [DEBUG] [Thread-51768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:20:43.377 [DEBUG] [Thread-51769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:20:51.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:20:51.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:20:51.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:20:52.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 20, 35), 16.31, 33.22, 0.0, 16.94, 16.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:20:52.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:20:35
2025-11-17T09:20:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:20:52.276 [DEBUG] [Thread-51770] [transport.py] [_log()] starting thread (client mode): 0xd31cdb70
2025-11-17T09:20:52.276 [DEBUG] [Thread-51770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:20:52.296 [DEBUG] [Thread-51770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:20:52.296 [INFO] [Thread-51770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:20:52.298 [DEBUG] [Thread-51770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:20:52.298 [DEBUG] [Thread-51770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] client lang: <none>
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] server lang: <none>
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] kex follows: False
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] Compression: none
2025-11-17T09:20:52.299 [DEBUG] [Thread-51770] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:20:52.315 [DEBUG] [Thread-51770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:20:52.316 [DEBUG] [Thread-51770] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:20:52.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:20:52.316 [DEBUG] [Thread-51770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:20:52.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:20:52.317 [DEBUG] [Thread-51770] [transport.py] [_log()] userauth is OK
2025-11-17T09:20:52.317 [DEBUG] [Thread-51770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:20:52.317 [DEBUG] [Thread-51770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:20:52.317 [DEBUG] [Thread-51770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:20:52.317 [DEBUG] [Thread-51770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:20:52.332 [INFO] [Thread-51770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:20:52.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:20:52.960 [DEBUG] [Thread-51770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:20:52.960 [DEBUG] [Thread-51770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:20:52.960 [DEBUG] [Thread-51770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:20:53.001 [DEBUG] [Thread-51770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:20:53.001 [DEBUG] [Thread-51770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:20:53.003 [DEBUG] [Thread-51770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:20:53.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:20:53.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:20:53.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:20:53.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:20:53.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:20:53.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:20:53.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.305605 -999.00  +15.20  11.68     40   +2.00 1 1 1 1 1   888    0 14.89 89.63 ----- 11.7 11.7 90.6 17.5 21.8 -26.6 21.4 -23.8 20.0 -23.6 20.5 -24.1
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.305605
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:20:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:20:35', tmtdew=16.31, humidity=33.22, cloud=0.0, wind=16.94, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:20:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:20:53.021 [DEBUG] [Thread-51770] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:20:53.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:20:53.107 [DEBUG] [Thread-51773] [transport.py] [_log()] starting thread (client mode): 0xd317e890
2025-11-17T09:20:53.107 [DEBUG] [Thread-51773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:20:53.121 [DEBUG] [Thread-51773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:20:53.121 [INFO] [Thread-51773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] client lang: <none>
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] server lang: <none>
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] kex follows: False
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:20:53.129 [DEBUG] [Thread-51773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:20:53.130 [DEBUG] [Thread-51773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:20:53.130 [DEBUG] [Thread-51773] [transport.py] [_log()] Compression: none
2025-11-17T09:20:53.130 [DEBUG] [Thread-51773] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:20:53.183 [DEBUG] [Thread-51773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:20:53.184 [DEBUG] [Thread-51773] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:20:53.184 [DEBUG] [Thread-51773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:20:53.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:20:53.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:20:53.245 [DEBUG] [Thread-51773] [transport.py] [_log()] userauth is OK
2025-11-17T09:20:53.245 [DEBUG] [Thread-51773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:20:53.245 [DEBUG] [Thread-51773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:20:53.245 [DEBUG] [Thread-51773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:20:53.245 [DEBUG] [Thread-51773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:20:53.259 [INFO] [Thread-51773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:20:53.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:20:53.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:20:54.122 [DEBUG] [Thread-51773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:20:54.122 [DEBUG] [Thread-51773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:20:54.170 [DEBUG] [Thread-51773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:20:54.170 [DEBUG] [Thread-51773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:20:54.178 [DEBUG] [Thread-51773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:20:54.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:20:54.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:20:54.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:20:54.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:20:54.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:20:54.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:20:54.210 [DEBUG] [Thread-51773] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:20:58.411 [DEBUG] [Thread-51775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:21:00.048 [DEBUG] [Thread-51776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:21:13.455 [DEBUG] [Thread-51777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:21:16.415 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:21:16.416 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:21:24.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:21:24.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:21:24.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:21:24.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 21, 8), 16.25, 33.33, 0.0, 16.34, 16.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:21:24.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:21:08
2025-11-17T09:21:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:21:25.174 [DEBUG] [Thread-51778] [transport.py] [_log()] starting thread (client mode): 0xd3160790
2025-11-17T09:21:25.175 [DEBUG] [Thread-51778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:21:25.195 [DEBUG] [Thread-51778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:21:25.195 [INFO] [Thread-51778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] client lang: <none>
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] server lang: <none>
2025-11-17T09:21:25.199 [DEBUG] [Thread-51778] [transport.py] [_log()] kex follows: False
2025-11-17T09:21:25.200 [DEBUG] [Thread-51778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:21:25.200 [DEBUG] [Thread-51778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:21:25.200 [DEBUG] [Thread-51778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:21:25.200 [DEBUG] [Thread-51778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:21:25.200 [DEBUG] [Thread-51778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:21:25.200 [DEBUG] [Thread-51778] [transport.py] [_log()] Compression: none
2025-11-17T09:21:25.200 [DEBUG] [Thread-51778] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:21:25.217 [DEBUG] [Thread-51778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:21:25.218 [DEBUG] [Thread-51778] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:21:25.219 [DEBUG] [Thread-51778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:21:25.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:21:25.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:21:25.221 [DEBUG] [Thread-51778] [transport.py] [_log()] userauth is OK
2025-11-17T09:21:25.221 [DEBUG] [Thread-51778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:21:25.221 [DEBUG] [Thread-51778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:21:25.221 [DEBUG] [Thread-51778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:21:25.221 [DEBUG] [Thread-51778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:21:25.240 [INFO] [Thread-51778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:21:25.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:21:25.945 [DEBUG] [Thread-51778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:21:25.946 [DEBUG] [Thread-51778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:21:25.946 [DEBUG] [Thread-51778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:21:25.987 [DEBUG] [Thread-51778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:21:25.988 [DEBUG] [Thread-51778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:21:25.991 [DEBUG] [Thread-51778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:21:26.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:21:26.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:21:26.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:21:26.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:21:26.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:21:26.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:21:26.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:21:26.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:21:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:21:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.305952 -999.00  +15.40  12.33     40   +2.00 1 1 1 1 1   888    0 15.39 91.11 ----- 12.3 12.3 96.8 16.1 21.8 -25.8 21.5 -24.3 20.1 -23.8 20.6 -24.2
2025-11-17T09:21:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:21:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:21:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.305952
2025-11-17T09:21:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:21:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:21:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:21:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:21:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:21:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:21:08', tmtdew=16.25, humidity=33.33, cloud=0.0, wind=16.34, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:20:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:21:26.016 [DEBUG] [Thread-51778] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:21:26.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:21:26.118 [DEBUG] [Thread-51781] [transport.py] [_log()] starting thread (client mode): 0xd317e080
2025-11-17T09:21:26.118 [DEBUG] [Thread-51781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:21:26.132 [DEBUG] [Thread-51781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:21:26.132 [INFO] [Thread-51781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] client lang: <none>
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] server lang: <none>
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] kex follows: False
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:21:26.140 [DEBUG] [Thread-51781] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:21:26.141 [DEBUG] [Thread-51781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:21:26.141 [DEBUG] [Thread-51781] [transport.py] [_log()] Compression: none
2025-11-17T09:21:26.141 [DEBUG] [Thread-51781] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:21:26.197 [DEBUG] [Thread-51781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:21:26.197 [DEBUG] [Thread-51781] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:21:26.197 [DEBUG] [Thread-51781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:21:26.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:21:26.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:21:26.254 [DEBUG] [Thread-51781] [transport.py] [_log()] userauth is OK
2025-11-17T09:21:26.254 [DEBUG] [Thread-51781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:21:26.254 [DEBUG] [Thread-51781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:21:26.254 [DEBUG] [Thread-51781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:21:26.254 [DEBUG] [Thread-51781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:21:26.274 [INFO] [Thread-51781] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:21:26.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:21:26.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:21:27.188 [DEBUG] [Thread-51781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:21:27.188 [DEBUG] [Thread-51781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:21:27.236 [DEBUG] [Thread-51781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:21:27.236 [DEBUG] [Thread-51781] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:21:27.244 [DEBUG] [Thread-51781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:21:27.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:21:27.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:21:27.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:21:27.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:21:27.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:21:27.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:21:27.277 [DEBUG] [Thread-51781] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:21:28.495 [DEBUG] [Thread-51783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:21:43.536 [DEBUG] [Thread-51784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:21:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:21:57.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:21:57.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:21:57.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 21, 40), 16.4, 32.83, 0.0, 17.96, 15.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:21:57.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:21:40
2025-11-17T09:21:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:21:58.217 [DEBUG] [Thread-51785] [transport.py] [_log()] starting thread (client mode): 0xd3160970
2025-11-17T09:21:58.218 [DEBUG] [Thread-51785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:21:58.238 [DEBUG] [Thread-51785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:21:58.238 [INFO] [Thread-51785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] client lang: <none>
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] server lang: <none>
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] kex follows: False
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:21:58.241 [DEBUG] [Thread-51785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:21:58.242 [DEBUG] [Thread-51785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:21:58.242 [DEBUG] [Thread-51785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:21:58.242 [DEBUG] [Thread-51785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:21:58.242 [DEBUG] [Thread-51785] [transport.py] [_log()] Compression: none
2025-11-17T09:21:58.242 [DEBUG] [Thread-51785] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:21:58.259 [DEBUG] [Thread-51785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:21:58.260 [DEBUG] [Thread-51785] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:21:58.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:21:58.261 [DEBUG] [Thread-51785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:21:58.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:21:58.263 [DEBUG] [Thread-51785] [transport.py] [_log()] userauth is OK
2025-11-17T09:21:58.263 [DEBUG] [Thread-51785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:21:58.264 [DEBUG] [Thread-51785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:21:58.264 [DEBUG] [Thread-51785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:21:58.264 [DEBUG] [Thread-51785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:21:58.291 [INFO] [Thread-51785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:21:58.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:21:58.576 [DEBUG] [Thread-51787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:21:58.942 [DEBUG] [Thread-51785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:21:58.943 [DEBUG] [Thread-51785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:21:58.943 [DEBUG] [Thread-51785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:21:58.983 [DEBUG] [Thread-51785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:21:58.984 [DEBUG] [Thread-51785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:21:58.987 [DEBUG] [Thread-51785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:21:58.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:21:58.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:21:59.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:21:59.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:21:59.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:21:59.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:21:59.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:21:59.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:21:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:21:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.306299 -999.00  +15.60  10.91     40   +2.10 1 1 1 1 1   888    0 15.27 94.45 ----- 10.9 10.9 80.7 20.7 22.0 -23.9 21.6 -23.0 20.2 -23.3 20.8 -23.7
2025-11-17T09:21:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:21:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:21:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.306299
2025-11-17T09:21:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:21:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:21:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:21:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:21:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:21:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:21:40', tmtdew=16.4, humidity=32.83, cloud=0.0, wind=17.96, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:21:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:21:59.012 [DEBUG] [Thread-51785] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:21:59.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:21:59.108 [DEBUG] [Thread-51789] [transport.py] [_log()] starting thread (client mode): 0xd7bc7f10
2025-11-17T09:21:59.108 [DEBUG] [Thread-51789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:21:59.122 [DEBUG] [Thread-51789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:21:59.123 [INFO] [Thread-51789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:21:59.130 [DEBUG] [Thread-51789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] client lang: <none>
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] server lang: <none>
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] kex follows: False
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] Compression: none
2025-11-17T09:21:59.131 [DEBUG] [Thread-51789] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:21:59.198 [DEBUG] [Thread-51789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:21:59.199 [DEBUG] [Thread-51789] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:21:59.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:21:59.200 [DEBUG] [Thread-51789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:21:59.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:21:59.258 [DEBUG] [Thread-51789] [transport.py] [_log()] userauth is OK
2025-11-17T09:21:59.258 [DEBUG] [Thread-51789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:21:59.258 [DEBUG] [Thread-51789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:21:59.258 [DEBUG] [Thread-51789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:21:59.258 [DEBUG] [Thread-51789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:21:59.278 [INFO] [Thread-51789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:21:59.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:21:59.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:22:00.104 [DEBUG] [Thread-51791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:22:00.159 [DEBUG] [Thread-51789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:22:00.160 [DEBUG] [Thread-51789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:22:00.208 [DEBUG] [Thread-51789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:22:00.208 [DEBUG] [Thread-51789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:22:00.217 [DEBUG] [Thread-51789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:22:00.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:22:00.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:22:00.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:22:00.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:22:00.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:22:00.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:22:00.254 [DEBUG] [Thread-51789] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:22:13.610 [DEBUG] [Thread-51792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:22:16.559 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:22:16.560 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:22:28.648 [DEBUG] [Thread-51793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:22:30.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:22:30.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:22:30.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:22:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 22, 12), 16.33, 32.98, 0.0, 17.43, 15.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:22:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:22:12
2025-11-17T09:22:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:22:31.197 [DEBUG] [Thread-51794] [transport.py] [_log()] starting thread (client mode): 0xd0787be0
2025-11-17T09:22:31.197 [DEBUG] [Thread-51794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:22:31.217 [DEBUG] [Thread-51794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:22:31.218 [INFO] [Thread-51794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:22:31.220 [DEBUG] [Thread-51794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] client lang: <none>
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] server lang: <none>
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] kex follows: False
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] Compression: none
2025-11-17T09:22:31.221 [DEBUG] [Thread-51794] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:22:31.239 [DEBUG] [Thread-51794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:22:31.239 [DEBUG] [Thread-51794] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:22:31.240 [DEBUG] [Thread-51794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:22:31.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:22:31.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:22:31.242 [DEBUG] [Thread-51794] [transport.py] [_log()] userauth is OK
2025-11-17T09:22:31.242 [DEBUG] [Thread-51794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:22:31.242 [DEBUG] [Thread-51794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:22:31.242 [DEBUG] [Thread-51794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:22:31.242 [DEBUG] [Thread-51794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:22:31.266 [INFO] [Thread-51794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:22:31.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:22:31.894 [DEBUG] [Thread-51794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:22:31.894 [DEBUG] [Thread-51794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:22:31.895 [DEBUG] [Thread-51794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:22:31.935 [DEBUG] [Thread-51794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:22:31.936 [DEBUG] [Thread-51794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:22:31.938 [DEBUG] [Thread-51794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:22:31.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:22:31.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:22:31.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:22:31.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:22:31.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:22:31.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:22:31.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:22:31.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:22:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:22:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.306994 -999.00  +15.10  12.07     39   +1.50 1 1 1 1 1   888    0 15.02 85.61 ----- 12.1 12.1 62.0 15.6 21.6 -27.7 21.5 -24.5 20.1 -24.8 20.6 -25.1
2025-11-17T09:22:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:22:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:22:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.306994
2025-11-17T09:22:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:22:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:22:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:22:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:22:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:22:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:22:12', tmtdew=16.33, humidity=32.98, cloud=0.0, wind=17.43, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:22:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:22:31.963 [DEBUG] [Thread-51794] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:22:32.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:22:32.058 [DEBUG] [Thread-51797] [transport.py] [_log()] starting thread (client mode): 0xd07860e0
2025-11-17T09:22:32.058 [DEBUG] [Thread-51797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:22:32.072 [DEBUG] [Thread-51797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:22:32.072 [INFO] [Thread-51797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] client lang: <none>
2025-11-17T09:22:32.080 [DEBUG] [Thread-51797] [transport.py] [_log()] server lang: <none>
2025-11-17T09:22:32.081 [DEBUG] [Thread-51797] [transport.py] [_log()] kex follows: False
2025-11-17T09:22:32.081 [DEBUG] [Thread-51797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:22:32.081 [DEBUG] [Thread-51797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:22:32.081 [DEBUG] [Thread-51797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:22:32.081 [DEBUG] [Thread-51797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:22:32.081 [DEBUG] [Thread-51797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:22:32.081 [DEBUG] [Thread-51797] [transport.py] [_log()] Compression: none
2025-11-17T09:22:32.081 [DEBUG] [Thread-51797] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:22:32.138 [DEBUG] [Thread-51797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:22:32.138 [DEBUG] [Thread-51797] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:22:32.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:22:32.139 [DEBUG] [Thread-51797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:22:32.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:22:32.198 [DEBUG] [Thread-51797] [transport.py] [_log()] userauth is OK
2025-11-17T09:22:32.198 [DEBUG] [Thread-51797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:22:32.198 [DEBUG] [Thread-51797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:22:32.199 [DEBUG] [Thread-51797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:22:32.199 [DEBUG] [Thread-51797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:22:32.217 [INFO] [Thread-51797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:22:32.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:22:32.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:22:33.041 [DEBUG] [Thread-51797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:22:33.042 [DEBUG] [Thread-51797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:22:33.089 [DEBUG] [Thread-51797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:22:33.089 [DEBUG] [Thread-51797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:22:33.098 [DEBUG] [Thread-51797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:22:33.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:22:33.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:22:33.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:22:33.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:22:33.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:22:33.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:22:33.132 [DEBUG] [Thread-51797] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:22:43.687 [DEBUG] [Thread-51799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:22:58.735 [DEBUG] [Thread-51800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:23:00.149 [DEBUG] [Thread-51801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:23:03.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:23:03.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:23:03.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:23:03.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 22, 44), 15.9, 33.7, 0.0, 13.78, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:23:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:22:44
2025-11-17T09:23:03.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:23:04.075 [DEBUG] [Thread-51802] [transport.py] [_log()] starting thread (client mode): 0xd07844f0
2025-11-17T09:23:04.075 [DEBUG] [Thread-51802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:23:04.095 [DEBUG] [Thread-51802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:23:04.096 [INFO] [Thread-51802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:23:04.098 [DEBUG] [Thread-51802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] client lang: <none>
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] server lang: <none>
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] kex follows: False
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] Compression: none
2025-11-17T09:23:04.099 [DEBUG] [Thread-51802] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:23:04.119 [DEBUG] [Thread-51802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:23:04.120 [DEBUG] [Thread-51802] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:23:04.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:23:04.121 [DEBUG] [Thread-51802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:23:04.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:23:04.165 [DEBUG] [Thread-51802] [transport.py] [_log()] userauth is OK
2025-11-17T09:23:04.165 [DEBUG] [Thread-51802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:23:04.165 [DEBUG] [Thread-51802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:23:04.165 [DEBUG] [Thread-51802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:23:04.165 [DEBUG] [Thread-51802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:23:04.199 [INFO] [Thread-51802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:23:04.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:23:04.839 [DEBUG] [Thread-51802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:23:04.839 [DEBUG] [Thread-51802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:23:04.840 [DEBUG] [Thread-51802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:23:04.881 [DEBUG] [Thread-51802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:23:04.881 [DEBUG] [Thread-51802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:23:04.885 [DEBUG] [Thread-51802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:23:04.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:23:04.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:23:04.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:23:04.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:23:04.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:23:04.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:23:04.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:23:04.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:23:04.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:23:04.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.307341 -999.00  +15.10  10.81     40   +1.60 1 1 1 1 1   888    0 15.18 91.68 ----- 10.8 10.8 101.6 18.4 22.1 -28.0 21.6 -24.0 20.1 -24.0 20.7 -24.8
2025-11-17T09:23:04.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:23:04.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:23:04.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.307341
2025-11-17T09:23:04.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:23:04.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:23:04.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:23:04.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:23:04.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:23:04.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:22:44', tmtdew=15.9, humidity=33.7, cloud=0.0, wind=13.78, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:22:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:23:04.912 [DEBUG] [Thread-51802] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:23:04.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:23:05.007 [DEBUG] [Thread-51805] [transport.py] [_log()] starting thread (client mode): 0xd0718940
2025-11-17T09:23:05.007 [DEBUG] [Thread-51805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:23:05.022 [DEBUG] [Thread-51805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:23:05.022 [INFO] [Thread-51805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] client lang: <none>
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] server lang: <none>
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] kex follows: False
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:23:05.030 [DEBUG] [Thread-51805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:23:05.031 [DEBUG] [Thread-51805] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:23:05.031 [DEBUG] [Thread-51805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:23:05.031 [DEBUG] [Thread-51805] [transport.py] [_log()] Compression: none
2025-11-17T09:23:05.031 [DEBUG] [Thread-51805] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:23:05.087 [DEBUG] [Thread-51805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:23:05.087 [DEBUG] [Thread-51805] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:23:05.088 [DEBUG] [Thread-51805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:23:05.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:23:05.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:23:05.148 [DEBUG] [Thread-51805] [transport.py] [_log()] userauth is OK
2025-11-17T09:23:05.148 [DEBUG] [Thread-51805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:23:05.149 [DEBUG] [Thread-51805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:23:05.149 [DEBUG] [Thread-51805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:23:05.149 [DEBUG] [Thread-51805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:23:05.168 [INFO] [Thread-51805] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:23:05.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:23:05.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:23:06.064 [DEBUG] [Thread-51805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:23:06.065 [DEBUG] [Thread-51805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:23:06.115 [DEBUG] [Thread-51805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:23:06.116 [DEBUG] [Thread-51805] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:23:06.126 [DEBUG] [Thread-51805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:23:06.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:23:06.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:23:06.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:23:06.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:23:06.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:23:06.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:23:06.164 [DEBUG] [Thread-51805] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:23:13.774 [DEBUG] [Thread-51807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:23:16.701 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:23:16.702 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:23:28.817 [DEBUG] [Thread-51808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:23:36.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:23:36.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:23:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:23:36.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 23, 16), 15.88, 33.76, 0.0, 15.23, 15.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:23:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:23:16
2025-11-17T09:23:36.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:23:37.088 [DEBUG] [Thread-51809] [transport.py] [_log()] starting thread (client mode): 0xd07cc880
2025-11-17T09:23:37.089 [DEBUG] [Thread-51809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:23:37.110 [DEBUG] [Thread-51809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:23:37.111 [INFO] [Thread-51809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] client lang: <none>
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] server lang: <none>
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] kex follows: False
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] Compression: none
2025-11-17T09:23:37.114 [DEBUG] [Thread-51809] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:23:37.130 [DEBUG] [Thread-51809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:23:37.131 [DEBUG] [Thread-51809] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:23:37.131 [DEBUG] [Thread-51809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:23:37.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:23:37.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:23:37.133 [DEBUG] [Thread-51809] [transport.py] [_log()] userauth is OK
2025-11-17T09:23:37.133 [DEBUG] [Thread-51809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:23:37.133 [DEBUG] [Thread-51809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:23:37.134 [DEBUG] [Thread-51809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:23:37.134 [DEBUG] [Thread-51809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:23:37.152 [INFO] [Thread-51809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:23:37.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:23:37.820 [DEBUG] [Thread-51809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:23:37.821 [DEBUG] [Thread-51809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:23:37.821 [DEBUG] [Thread-51809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:23:37.862 [DEBUG] [Thread-51809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:23:37.862 [DEBUG] [Thread-51809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:23:37.865 [DEBUG] [Thread-51809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:23:37.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:23:37.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:23:37.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:23:37.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:23:37.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:23:37.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:23:37.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:23:37.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:23:37.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:23:37.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.307688 -999.00  +15.10  11.19     40   +1.60 1 1 1 1 1   888    0 15.18 92.62 ----- 11.2 11.2 80.2 19.3 22.1 -25.1 21.7 -23.7 20.3 -23.9 20.7 -24.8
2025-11-17T09:23:37.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:23:37.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:23:37.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.307688
2025-11-17T09:23:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:23:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:23:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:23:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:23:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:23:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:23:16', tmtdew=15.88, humidity=33.76, cloud=0.0, wind=15.23, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:23:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:23:37.895 [DEBUG] [Thread-51809] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:23:37.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:23:37.990 [DEBUG] [Thread-51812] [transport.py] [_log()] starting thread (client mode): 0xd07ce4d0
2025-11-17T09:23:37.991 [DEBUG] [Thread-51812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:23:38.005 [DEBUG] [Thread-51812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:23:38.005 [INFO] [Thread-51812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:23:38.012 [DEBUG] [Thread-51812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:23:38.012 [DEBUG] [Thread-51812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] client lang: <none>
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] server lang: <none>
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] kex follows: False
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] Compression: none
2025-11-17T09:23:38.013 [DEBUG] [Thread-51812] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:23:38.070 [DEBUG] [Thread-51812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:23:38.071 [DEBUG] [Thread-51812] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:23:38.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:23:38.072 [DEBUG] [Thread-51812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:23:38.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:23:38.126 [DEBUG] [Thread-51812] [transport.py] [_log()] userauth is OK
2025-11-17T09:23:38.127 [DEBUG] [Thread-51812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:23:38.127 [DEBUG] [Thread-51812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:23:38.127 [DEBUG] [Thread-51812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:23:38.127 [DEBUG] [Thread-51812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:23:38.146 [INFO] [Thread-51812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:23:38.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:23:38.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:23:38.998 [DEBUG] [Thread-51812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:23:38.998 [DEBUG] [Thread-51812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:23:39.047 [DEBUG] [Thread-51812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:23:39.047 [DEBUG] [Thread-51812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:23:39.056 [DEBUG] [Thread-51812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:23:39.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:23:39.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:23: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') -> 00000000
2025-11-17T09:23:39.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:23:39.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:23:39.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:23:39.093 [DEBUG] [Thread-51812] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:23:43.846 [DEBUG] [Thread-51814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:23:58.903 [DEBUG] [Thread-51815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:24:00.211 [DEBUG] [Thread-51816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:24:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:24:09.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:24:09.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
2025-11-17T09:24:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 23, 48), 15.85, 34.13, 0.0, 17.61, 15.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:24:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:23:48
2025-11-17T09:24:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:24:10.028 [DEBUG] [Thread-51817] [transport.py] [_log()] starting thread (client mode): 0xd07ceef0
2025-11-17T09:24:10.028 [DEBUG] [Thread-51817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:24:10.047 [DEBUG] [Thread-51817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:24:10.047 [INFO] [Thread-51817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] client lang: <none>
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] server lang: <none>
2025-11-17T09:24:10.050 [DEBUG] [Thread-51817] [transport.py] [_log()] kex follows: False
2025-11-17T09:24:10.051 [DEBUG] [Thread-51817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:24:10.051 [DEBUG] [Thread-51817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:24:10.051 [DEBUG] [Thread-51817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:24:10.051 [DEBUG] [Thread-51817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:24:10.051 [DEBUG] [Thread-51817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:24:10.051 [DEBUG] [Thread-51817] [transport.py] [_log()] Compression: none
2025-11-17T09:24:10.051 [DEBUG] [Thread-51817] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:24:10.069 [DEBUG] [Thread-51817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:24:10.069 [DEBUG] [Thread-51817] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:24:10.070 [DEBUG] [Thread-51817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:24:10.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:24:10.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:24:10.072 [DEBUG] [Thread-51817] [transport.py] [_log()] userauth is OK
2025-11-17T09:24:10.072 [DEBUG] [Thread-51817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:24:10.072 [DEBUG] [Thread-51817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:24:10.072 [DEBUG] [Thread-51817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:24:10.072 [DEBUG] [Thread-51817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:24:10.096 [INFO] [Thread-51817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:24:10.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:24:10.746 [DEBUG] [Thread-51817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:24:10.747 [DEBUG] [Thread-51817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:24:10.747 [DEBUG] [Thread-51817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:24:10.787 [DEBUG] [Thread-51817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:24:10.788 [DEBUG] [Thread-51817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:24:10.791 [DEBUG] [Thread-51817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:24:10.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:24:10.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:24:10.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:24:10.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:24:10.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:24:10.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:24:10.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:24:10.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:24:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:24:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.308035 -999.00  +15.30  12.36     39   +1.70 1 1 1 1 1   888    0 15.37 89.54 ----- 12.4 12.4 108.4 21.3 22.1 -23.9 21.8 -23.3 20.4 -23.4 20.9 -24.0
2025-11-17T09:24:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:24:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:24:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.308035
2025-11-17T09:24:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:24:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:24:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:24:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:24:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:24:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:23:48', tmtdew=15.85, humidity=34.13, cloud=0.0, wind=17.61, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:23:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:24:10.817 [DEBUG] [Thread-51817] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:24:10.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:24:10.921 [DEBUG] [Thread-51820] [transport.py] [_log()] starting thread (client mode): 0xd31609d0
2025-11-17T09:24:10.921 [DEBUG] [Thread-51820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:24:10.943 [DEBUG] [Thread-51820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:24:10.943 [INFO] [Thread-51820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] client lang: <none>
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] server lang: <none>
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] kex follows: False
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:24:10.956 [DEBUG] [Thread-51820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:24:10.957 [DEBUG] [Thread-51820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:24:10.957 [DEBUG] [Thread-51820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:24:10.957 [DEBUG] [Thread-51820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:24:10.957 [DEBUG] [Thread-51820] [transport.py] [_log()] Compression: none
2025-11-17T09:24:10.957 [DEBUG] [Thread-51820] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:24:11.023 [DEBUG] [Thread-51820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:24:11.023 [DEBUG] [Thread-51820] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:24:11.024 [DEBUG] [Thread-51820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:24:11.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:24:11.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:24:11.093 [DEBUG] [Thread-51820] [transport.py] [_log()] userauth is OK
2025-11-17T09:24:11.093 [DEBUG] [Thread-51820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:24:11.093 [DEBUG] [Thread-51820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:24:11.093 [DEBUG] [Thread-51820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:24:11.093 [DEBUG] [Thread-51820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:24:11.115 [INFO] [Thread-51820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:24:11.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:24:11.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:24:11.948 [DEBUG] [Thread-51820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:24:11.948 [DEBUG] [Thread-51820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:24:11.996 [DEBUG] [Thread-51820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:24:11.996 [DEBUG] [Thread-51820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:24:12.005 [DEBUG] [Thread-51820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:24:12.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:24:12.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:24:12.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:24:12.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:24:12.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:24:12.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:24:12.040 [DEBUG] [Thread-51820] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:24:13.939 [DEBUG] [Thread-51822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:24:16.843 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:24:16.845 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:24:28.989 [DEBUG] [Thread-51823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:24:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:24:42.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:24:42.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:24:42.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 24, 20), 16.01, 33.8, 0.0, 18.84, 15.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:24:42.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:24:20
2025-11-17T09:24:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:24:43.043 [DEBUG] [Thread-51824] [transport.py] [_log()] starting thread (client mode): 0xd0718a30
2025-11-17T09:24:43.043 [DEBUG] [Thread-51824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:24:43.063 [DEBUG] [Thread-51824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:24:43.064 [INFO] [Thread-51824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:24:43.064 [DEBUG] [Thread-51824] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:24:43.064 [DEBUG] [Thread-51824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] client lang: <none>
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] server lang: <none>
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] kex follows: False
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] Compression: none
2025-11-17T09:24:43.065 [DEBUG] [Thread-51824] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:24:43.080 [DEBUG] [Thread-51824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:24:43.080 [DEBUG] [Thread-51824] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:24:43.080 [DEBUG] [Thread-51824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:24:43.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:24:43.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:24:43.081 [DEBUG] [Thread-51824] [transport.py] [_log()] userauth is OK
2025-11-17T09:24:43.081 [DEBUG] [Thread-51824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:24:43.081 [DEBUG] [Thread-51824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:24:43.081 [DEBUG] [Thread-51824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:24:43.081 [DEBUG] [Thread-51824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:24:43.090 [INFO] [Thread-51824] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:24:43.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:24:43.735 [DEBUG] [Thread-51824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:24:43.735 [DEBUG] [Thread-51824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:24:43.735 [DEBUG] [Thread-51824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:24:43.776 [DEBUG] [Thread-51824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:24:43.776 [DEBUG] [Thread-51824] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:24:43.778 [DEBUG] [Thread-51824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:24:43.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:24:43.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:24:43.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:24:43.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:24:43.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:24:43.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:24:43.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.308383 -999.00  +15.30  22.63     39   +1.50 1 1 1 1 1   888    0 15.08 83.12 ----- 22.6 22.6 119.4 23.2 22.0 -26.3 21.7 -24.0 20.3 -23.5 20.9 -23.9
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.308383
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:24:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:24:20', tmtdew=16.01, humidity=33.8, cloud=0.0, wind=18.84, temperature=15.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:24:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:24:43.796 [DEBUG] [Thread-51824] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:24:43.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:24:43.880 [DEBUG] [Thread-51827] [transport.py] [_log()] starting thread (client mode): 0xd0711480
2025-11-17T09:24:43.881 [DEBUG] [Thread-51827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:24:43.900 [DEBUG] [Thread-51827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:24:43.900 [INFO] [Thread-51827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] client lang: <none>
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] server lang: <none>
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] kex follows: False
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] Compression: none
2025-11-17T09:24:43.908 [DEBUG] [Thread-51827] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:24:43.966 [DEBUG] [Thread-51827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:24:43.966 [DEBUG] [Thread-51827] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:24:43.966 [DEBUG] [Thread-51827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:24:43.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:24:43.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:24:44.018 [DEBUG] [Thread-51829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:24:44.022 [DEBUG] [Thread-51827] [transport.py] [_log()] userauth is OK
2025-11-17T09:24:44.022 [DEBUG] [Thread-51827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:24:44.022 [DEBUG] [Thread-51827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:24:44.022 [DEBUG] [Thread-51827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:24:44.022 [DEBUG] [Thread-51827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:24:44.036 [INFO] [Thread-51827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:24:44.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:24:44.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:24:44.876 [DEBUG] [Thread-51827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:24:44.876 [DEBUG] [Thread-51827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:24:44.924 [DEBUG] [Thread-51827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:24:44.924 [DEBUG] [Thread-51827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:24:44.933 [DEBUG] [Thread-51827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:24:44.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:24:44.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:24:44.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:24:44.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:24:44.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:24:44.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:24:44.964 [DEBUG] [Thread-51827] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:24:59.050 [DEBUG] [Thread-51830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:25:00.265 [DEBUG] [Thread-51831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:25:14.086 [DEBUG] [Thread-51832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:25:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:25:14.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:25:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:25:15.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 24, 52), 16.2, 33.12, 0.0, 21.1, 15.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:25:15.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:24:52
2025-11-17T09:25:15.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:25:15.907 [DEBUG] [Thread-51833] [transport.py] [_log()] starting thread (client mode): 0xd0718b20
2025-11-17T09:25:15.907 [DEBUG] [Thread-51833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:25:15.927 [DEBUG] [Thread-51833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:25:15.927 [INFO] [Thread-51833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:25:15.930 [DEBUG] [Thread-51833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:25:15.930 [DEBUG] [Thread-51833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] client lang: <none>
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] server lang: <none>
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] kex follows: False
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] Compression: none
2025-11-17T09:25:15.931 [DEBUG] [Thread-51833] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:25:15.950 [DEBUG] [Thread-51833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:25:15.950 [DEBUG] [Thread-51833] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:25:15.950 [DEBUG] [Thread-51833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:25:15.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:25:15.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:25:15.992 [DEBUG] [Thread-51833] [transport.py] [_log()] userauth is OK
2025-11-17T09:25:15.992 [DEBUG] [Thread-51833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:25:15.993 [DEBUG] [Thread-51833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:25:15.993 [DEBUG] [Thread-51833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:25:15.993 [DEBUG] [Thread-51833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:25:16.024 [INFO] [Thread-51833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:25:16.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:25:16.666 [DEBUG] [Thread-51833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:25:16.667 [DEBUG] [Thread-51833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:25:16.667 [DEBUG] [Thread-51833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:25:16.707 [DEBUG] [Thread-51833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:25:16.708 [DEBUG] [Thread-51833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:25:16.710 [DEBUG] [Thread-51833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:25:16.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:25:16.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:25:16.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:25:16.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:25:16.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:25:16.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:25:16.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:25:16.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:25:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:25:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.308730 -999.00  +15.40  20.56     39   +1.60 1 1 1 1 1   888    0 15.32 88.70 ----- 20.6 20.6 112.4 24.0 22.0 -27.8 21.8 -23.8 20.4 -24.3 20.9 -24.7
2025-11-17T09:25:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:25:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:25:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.308730
2025-11-17T09:25:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:25:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:25:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:25:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:25:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:25:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:24:52', tmtdew=16.2, humidity=33.12, cloud=0.0, wind=21.1, temperature=15.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:24:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:25:16.735 [DEBUG] [Thread-51833] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:25:16.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:25:16.833 [DEBUG] [Thread-51836] [transport.py] [_log()] starting thread (client mode): 0xd071a7d0
2025-11-17T09:25:16.833 [DEBUG] [Thread-51836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:25:16.848 [DEBUG] [Thread-51836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:25:16.848 [INFO] [Thread-51836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:25:16.856 [DEBUG] [Thread-51836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:25:16.856 [DEBUG] [Thread-51836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:25:16.856 [DEBUG] [Thread-51836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:25:16.856 [DEBUG] [Thread-51836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:25:16.856 [DEBUG] [Thread-51836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:25:16.856 [DEBUG] [Thread-51836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:25:16.856 [DEBUG] [Thread-51836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:25:16.856 [DEBUG] [Thread-51836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:25:16.857 [DEBUG] [Thread-51836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:25:16.857 [DEBUG] [Thread-51836] [transport.py] [_log()] client lang: <none>
2025-11-17T09:25:16.857 [DEBUG] [Thread-51836] [transport.py] [_log()] server lang: <none>
2025-11-17T09:25:16.857 [DEBUG] [Thread-51836] [transport.py] [_log()] kex follows: False
2025-11-17T09:25:16.857 [DEBUG] [Thread-51836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:25:16.857 [DEBUG] [Thread-51836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:25:16.857 [DEBUG] [Thread-51836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:25:16.857 [DEBUG] [Thread-51836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:25:16.858 [DEBUG] [Thread-51836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:25:16.858 [DEBUG] [Thread-51836] [transport.py] [_log()] Compression: none
2025-11-17T09:25:16.858 [DEBUG] [Thread-51836] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:25:16.919 [DEBUG] [Thread-51836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:25:16.919 [DEBUG] [Thread-51836] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:25:16.920 [DEBUG] [Thread-51836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:25:16.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:25:16.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:25:16.979 [DEBUG] [Thread-51836] [transport.py] [_log()] userauth is OK
2025-11-17T09:25:16.979 [DEBUG] [Thread-51836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:25:16.979 [DEBUG] [Thread-51836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:25:16.980 [DEBUG] [Thread-51836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:25:16.980 [DEBUG] [Thread-51836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:25:16.986 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:25:16.986 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:25:16.999 [INFO] [Thread-51836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:25:16.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:25:17.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:25:17.857 [DEBUG] [Thread-51836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:25:17.858 [DEBUG] [Thread-51836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:25:17.906 [DEBUG] [Thread-51836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:25:17.907 [DEBUG] [Thread-51836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:25:17.918 [DEBUG] [Thread-51836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:25:17.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:25:17.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:25:17.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:25:17.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:25:17.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:25:17.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:25:17.954 [DEBUG] [Thread-51836] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:25:29.117 [DEBUG] [Thread-51838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:25:44.155 [DEBUG] [Thread-51839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:25:47.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:25:47.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:25:47.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:25:48.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 25, 24), 16.3, 32.92, 0.0, 20.19, 15.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:25:48.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:25:24
2025-11-17T09:25:48.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:25:48.885 [DEBUG] [Thread-51840] [transport.py] [_log()] starting thread (client mode): 0xd0718940
2025-11-17T09:25:48.885 [DEBUG] [Thread-51840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:25:48.906 [DEBUG] [Thread-51840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:25:48.906 [INFO] [Thread-51840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:25:48.909 [DEBUG] [Thread-51840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:25:48.909 [DEBUG] [Thread-51840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:25:48.909 [DEBUG] [Thread-51840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:25:48.909 [DEBUG] [Thread-51840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] client lang: <none>
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] server lang: <none>
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] kex follows: False
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] Compression: none
2025-11-17T09:25:48.910 [DEBUG] [Thread-51840] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:25:48.927 [DEBUG] [Thread-51840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:25:48.927 [DEBUG] [Thread-51840] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:25:48.928 [DEBUG] [Thread-51840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:25:48.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:25:48.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:25:48.929 [DEBUG] [Thread-51840] [transport.py] [_log()] userauth is OK
2025-11-17T09:25:48.930 [DEBUG] [Thread-51840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:25:48.930 [DEBUG] [Thread-51840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:25:48.930 [DEBUG] [Thread-51840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:25:48.930 [DEBUG] [Thread-51840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:25:48.946 [INFO] [Thread-51840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:25:48.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:25:49.572 [DEBUG] [Thread-51840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:25:49.572 [DEBUG] [Thread-51840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:25:49.572 [DEBUG] [Thread-51840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:25:49.614 [DEBUG] [Thread-51840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:25:49.614 [DEBUG] [Thread-51840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:25:49.617 [DEBUG] [Thread-51840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:25:49.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:25:49.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:25:49.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:25:49.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:25:49.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:25:49.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:25:49.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:25:49.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:25:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:25:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.309077 -999.00  +15.10  13.97     39   +1.30 1 1 1 1 1   888    0 15.40 88.26 ----- 14.0 14.0 95.6 20.0 22.1 -27.1 21.8 -23.8 20.4 -23.9 20.9 -24.6
2025-11-17T09:25:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:25:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:25:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.309077
2025-11-17T09:25:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:25:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:25:49.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:25:49.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:25:49.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:25:49.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:25:24', tmtdew=16.3, humidity=32.92, cloud=0.0, wind=20.19, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:25:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:25:49.639 [DEBUG] [Thread-51840] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:25:49.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:25:49.726 [DEBUG] [Thread-51843] [transport.py] [_log()] starting thread (client mode): 0xd0718880
2025-11-17T09:25:49.726 [DEBUG] [Thread-51843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:25:49.744 [DEBUG] [Thread-51843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:25:49.744 [INFO] [Thread-51843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:25:49.751 [DEBUG] [Thread-51843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:25:49.751 [DEBUG] [Thread-51843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:25:49.751 [DEBUG] [Thread-51843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:25:49.751 [DEBUG] [Thread-51843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:25:49.751 [DEBUG] [Thread-51843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] client lang: <none>
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] server lang: <none>
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] kex follows: False
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] Compression: none
2025-11-17T09:25:49.752 [DEBUG] [Thread-51843] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:25:49.815 [DEBUG] [Thread-51843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:25:49.815 [DEBUG] [Thread-51843] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:25:49.816 [DEBUG] [Thread-51843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:25:49.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:25:49.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:25:49.877 [DEBUG] [Thread-51843] [transport.py] [_log()] userauth is OK
2025-11-17T09:25:49.877 [DEBUG] [Thread-51843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:25:49.877 [DEBUG] [Thread-51843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:25:49.877 [DEBUG] [Thread-51843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:25:49.877 [DEBUG] [Thread-51843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:25:49.897 [INFO] [Thread-51843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:25:49.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:25:49.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:25:50.823 [DEBUG] [Thread-51843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:25:50.823 [DEBUG] [Thread-51843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:25:50.872 [DEBUG] [Thread-51843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:25:50.872 [DEBUG] [Thread-51843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:25:50.881 [DEBUG] [Thread-51843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:25:50.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:25:50.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:25:50.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:25:50.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:25:50.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:25:50.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:25:50.915 [DEBUG] [Thread-51843] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:25:59.183 [DEBUG] [Thread-51845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:26:00.293 [DEBUG] [Thread-51846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:26:14.216 [DEBUG] [Thread-51847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:26:17.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:26:17.129 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:26:20.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:26:20.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:26:20.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:26:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 25, 56), 16.45, 32.82, 0.0, 15.05, 15.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:26:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:25:56
2025-11-17T09:26:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:26:21.834 [DEBUG] [Thread-51848] [transport.py] [_log()] starting thread (client mode): 0xd0718220
2025-11-17T09:26:21.834 [DEBUG] [Thread-51848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:26:21.854 [DEBUG] [Thread-51848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:26:21.854 [INFO] [Thread-51848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] client lang: <none>
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] server lang: <none>
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] kex follows: False
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] Compression: none
2025-11-17T09:26:21.857 [DEBUG] [Thread-51848] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:26:21.878 [DEBUG] [Thread-51848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:26:21.879 [DEBUG] [Thread-51848] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:26:21.879 [DEBUG] [Thread-51848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:26:21.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:26:21.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:26:21.881 [DEBUG] [Thread-51848] [transport.py] [_log()] userauth is OK
2025-11-17T09:26:21.881 [DEBUG] [Thread-51848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:26:21.881 [DEBUG] [Thread-51848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:26:21.881 [DEBUG] [Thread-51848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:26:21.881 [DEBUG] [Thread-51848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:26:21.920 [INFO] [Thread-51848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:26:21.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:26:22.533 [DEBUG] [Thread-51848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:26:22.533 [DEBUG] [Thread-51848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:26:22.534 [DEBUG] [Thread-51848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:26:22.575 [DEBUG] [Thread-51848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:26:22.575 [DEBUG] [Thread-51848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:26:22.578 [DEBUG] [Thread-51848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:26:22.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:26:22.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:26:22.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:26:22.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:26:22.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:26:22.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:26:22.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:26:22.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:26:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:26:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.309772 -999.00  +15.10   9.24     39   +1.30 1 1 1 1 1   888    0 15.76 98.68 ----- 9.2 9.2 103.8 23.7 22.2 -24.1 21.6 -25.2 20.3 -25.4 20.9 -25.7
2025-11-17T09:26:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:26:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:26:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.309772
2025-11-17T09:26:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:26:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:26:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:26:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:26:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:26:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:25:56', tmtdew=16.45, humidity=32.82, cloud=0.0, wind=15.05, temperature=15.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:26:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:26:22.605 [DEBUG] [Thread-51848] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:26:22.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:26:22.704 [DEBUG] [Thread-51851] [transport.py] [_log()] starting thread (client mode): 0xd3153280
2025-11-17T09:26:22.704 [DEBUG] [Thread-51851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:26:22.720 [DEBUG] [Thread-51851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:26:22.720 [INFO] [Thread-51851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:26:22.728 [DEBUG] [Thread-51851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:26:22.728 [DEBUG] [Thread-51851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:26:22.728 [DEBUG] [Thread-51851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:26:22.728 [DEBUG] [Thread-51851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:26:22.728 [DEBUG] [Thread-51851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:26:22.728 [DEBUG] [Thread-51851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:26:22.728 [DEBUG] [Thread-51851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] client lang: <none>
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] server lang: <none>
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] kex follows: False
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:26:22.729 [DEBUG] [Thread-51851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:26:22.730 [DEBUG] [Thread-51851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:26:22.730 [DEBUG] [Thread-51851] [transport.py] [_log()] Compression: none
2025-11-17T09:26:22.730 [DEBUG] [Thread-51851] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:26:22.791 [DEBUG] [Thread-51851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:26:22.791 [DEBUG] [Thread-51851] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:26:22.792 [DEBUG] [Thread-51851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:26:22.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:26:22.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:26:22.846 [DEBUG] [Thread-51851] [transport.py] [_log()] userauth is OK
2025-11-17T09:26:22.847 [DEBUG] [Thread-51851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:26:22.847 [DEBUG] [Thread-51851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:26:22.847 [DEBUG] [Thread-51851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:26:22.847 [DEBUG] [Thread-51851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:26:22.866 [INFO] [Thread-51851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:26:22.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:26:22.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:26:23.700 [DEBUG] [Thread-51851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:26:23.701 [DEBUG] [Thread-51851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:26:23.748 [DEBUG] [Thread-51851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:26:23.748 [DEBUG] [Thread-51851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:26:23.757 [DEBUG] [Thread-51851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:26:23.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:26:23.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:26:23.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:26:23.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:26:23.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:26:23.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:26:23.794 [DEBUG] [Thread-51851] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:26:29.249 [DEBUG] [Thread-51853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:26:44.280 [DEBUG] [Thread-51854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:26:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:26:53.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:26:53.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:26:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 26, 28), 16.49, 32.75, 0.0, 14.36, 15.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:26:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:26:28
2025-11-17T09:26:54.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:26:54.700 [DEBUG] [Thread-51855] [transport.py] [_log()] starting thread (client mode): 0xd07181f0
2025-11-17T09:26:54.700 [DEBUG] [Thread-51855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:26:54.719 [DEBUG] [Thread-51855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:26:54.719 [INFO] [Thread-51855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] client lang: <none>
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] server lang: <none>
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] kex follows: False
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] Compression: none
2025-11-17T09:26:54.722 [DEBUG] [Thread-51855] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:26:54.734 [DEBUG] [Thread-51855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:26:54.735 [DEBUG] [Thread-51855] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:26:54.735 [DEBUG] [Thread-51855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:26:54.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:26:54.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:26:54.737 [DEBUG] [Thread-51855] [transport.py] [_log()] userauth is OK
2025-11-17T09:26:54.737 [DEBUG] [Thread-51855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:26:54.737 [DEBUG] [Thread-51855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:26:54.737 [DEBUG] [Thread-51855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:26:54.737 [DEBUG] [Thread-51855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:26:54.761 [INFO] [Thread-51855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:26:54.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:26:55.380 [DEBUG] [Thread-51855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:26:55.380 [DEBUG] [Thread-51855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:26:55.381 [DEBUG] [Thread-51855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:26:55.422 [DEBUG] [Thread-51855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:26:55.422 [DEBUG] [Thread-51855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:26:55.425 [DEBUG] [Thread-51855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:26:55.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:26:55.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:26:55.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:26:55.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:26:55.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:26:55.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:26:55.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:26:55.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:26:55.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:26:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.310119 -999.00  +15.10   6.39     39   +1.30 1 1 1 1 1   888    0 15.77 101.42 ----- 6.4 6.4 79.8 18.8 22.1 -25.4 21.7 -24.1 20.4 -24.1 20.9 -25.0
2025-11-17T09:26:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:26:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:26:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.310119
2025-11-17T09:26:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:26:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:26:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:26:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:26:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:26:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:26:28', tmtdew=16.49, humidity=32.75, cloud=0.0, wind=14.36, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:26:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:26:55.449 [DEBUG] [Thread-51855] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:26:55.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:26:55.546 [DEBUG] [Thread-51858] [transport.py] [_log()] starting thread (client mode): 0xd0718460
2025-11-17T09:26:55.546 [DEBUG] [Thread-51858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:26:55.561 [DEBUG] [Thread-51858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:26:55.561 [INFO] [Thread-51858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:26:55.569 [DEBUG] [Thread-51858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:26:55.569 [DEBUG] [Thread-51858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] client lang: <none>
2025-11-17T09:26:55.570 [DEBUG] [Thread-51858] [transport.py] [_log()] server lang: <none>
2025-11-17T09:26:55.571 [DEBUG] [Thread-51858] [transport.py] [_log()] kex follows: False
2025-11-17T09:26:55.571 [DEBUG] [Thread-51858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:26:55.571 [DEBUG] [Thread-51858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:26:55.571 [DEBUG] [Thread-51858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:26:55.571 [DEBUG] [Thread-51858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:26:55.571 [DEBUG] [Thread-51858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:26:55.571 [DEBUG] [Thread-51858] [transport.py] [_log()] Compression: none
2025-11-17T09:26:55.571 [DEBUG] [Thread-51858] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:26:55.631 [DEBUG] [Thread-51858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:26:55.631 [DEBUG] [Thread-51858] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:26:55.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:26:55.632 [DEBUG] [Thread-51858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:26:55.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:26:55.687 [DEBUG] [Thread-51858] [transport.py] [_log()] userauth is OK
2025-11-17T09:26:55.687 [DEBUG] [Thread-51858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:26:55.687 [DEBUG] [Thread-51858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:26:55.687 [DEBUG] [Thread-51858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:26:55.687 [DEBUG] [Thread-51858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:26:55.706 [INFO] [Thread-51858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:26:55.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:26:55.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:26:56.543 [DEBUG] [Thread-51858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:26:56.543 [DEBUG] [Thread-51858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:26:56.591 [DEBUG] [Thread-51858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:26:56.591 [DEBUG] [Thread-51858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:26:56.600 [DEBUG] [Thread-51858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:26:56.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:26:56.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:26:56.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:26:56.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:26:56.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:26:56.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:26:56.635 [DEBUG] [Thread-51858] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:26:59.308 [DEBUG] [Thread-51860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:27:00.340 [DEBUG] [Thread-51861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:27:14.353 [DEBUG] [Thread-51862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:27:17.270 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:27:17.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:27:26.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:27:26.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:27:26.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:27:27.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 26, 28), 16.74, 31.75, 0.0, 14.36, 15.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:27:27.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:26:28
2025-11-17T09:27:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:27:27.585 [DEBUG] [Thread-51863] [transport.py] [_log()] starting thread (client mode): 0xd071a4d0
2025-11-17T09:27:27.585 [DEBUG] [Thread-51863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:27:27.604 [DEBUG] [Thread-51863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:27:27.605 [INFO] [Thread-51863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:27:27.607 [DEBUG] [Thread-51863] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] client lang: <none>
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] server lang: <none>
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] kex follows: False
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] Compression: none
2025-11-17T09:27:27.608 [DEBUG] [Thread-51863] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:27:27.626 [DEBUG] [Thread-51863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:27:27.627 [DEBUG] [Thread-51863] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:27:27.627 [DEBUG] [Thread-51863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:27:27.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:27:27.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:27:27.629 [DEBUG] [Thread-51863] [transport.py] [_log()] userauth is OK
2025-11-17T09:27:27.630 [DEBUG] [Thread-51863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:27:27.630 [DEBUG] [Thread-51863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:27:27.630 [DEBUG] [Thread-51863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:27:27.630 [DEBUG] [Thread-51863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:27:27.653 [INFO] [Thread-51863] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:27:27.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:27:28.269 [DEBUG] [Thread-51863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:27:28.269 [DEBUG] [Thread-51863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:27:28.269 [DEBUG] [Thread-51863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:27:28.310 [DEBUG] [Thread-51863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:27:28.311 [DEBUG] [Thread-51863] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:27:28.313 [DEBUG] [Thread-51863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:27:28.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:27:28.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:27:28.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:27:28.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:27:28.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:27:28.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:27:28.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:27:28.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:27:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:27:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.310466 -999.00  +15.20  12.54     39   +1.40 1 1 1 1 1   888    0 15.93 102.26 ----- 12.5 12.5 76.0 19.7 22.2 -24.7 21.8 -24.2 20.5 -24.8 21.0 -24.9
2025-11-17T09:27:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:27:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:27:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.310466
2025-11-17T09:27:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:27:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:27:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:27:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:27:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:27:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:26:28', tmtdew=16.74, humidity=31.75, cloud=0.0, wind=14.36, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:27:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:27:28.338 [DEBUG] [Thread-51863] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:27:28.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:27:28.433 [DEBUG] [Thread-51866] [transport.py] [_log()] starting thread (client mode): 0xd3160160
2025-11-17T09:27:28.433 [DEBUG] [Thread-51866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:27:28.448 [DEBUG] [Thread-51866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:27:28.448 [INFO] [Thread-51866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:27:28.456 [DEBUG] [Thread-51866] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] client lang: <none>
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] server lang: <none>
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] kex follows: False
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] Compression: none
2025-11-17T09:27:28.457 [DEBUG] [Thread-51866] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:27:28.521 [DEBUG] [Thread-51866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:27:28.522 [DEBUG] [Thread-51866] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:27:28.522 [DEBUG] [Thread-51866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:27:28.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:27:28.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:27:28.579 [DEBUG] [Thread-51866] [transport.py] [_log()] userauth is OK
2025-11-17T09:27:28.579 [DEBUG] [Thread-51866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:27:28.579 [DEBUG] [Thread-51866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:27:28.580 [DEBUG] [Thread-51866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:27:28.580 [DEBUG] [Thread-51866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:27:28.599 [INFO] [Thread-51866] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:27:28.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:27:28.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:27:29.381 [DEBUG] [Thread-51868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:27:29.537 [DEBUG] [Thread-51866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:27:29.537 [DEBUG] [Thread-51866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:27:29.585 [DEBUG] [Thread-51866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:27:29.585 [DEBUG] [Thread-51866] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:27:29.594 [DEBUG] [Thread-51866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:27:29.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:27:29.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:27:29.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:27:29.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:27:29.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:27:29.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:27:29.629 [DEBUG] [Thread-51866] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:27:44.420 [DEBUG] [Thread-51869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:27:59.449 [DEBUG] [Thread-51870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:27:59.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:27:59.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:27:59.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:28:00.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 27, 32), 16.72, 31.8, 0.0, 18.44, 15.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:28:00.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:27:32
2025-11-17T09:28:00.389 [DEBUG] [Thread-51871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:28:00.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:28:00.605 [DEBUG] [Thread-51872] [transport.py] [_log()] starting thread (client mode): 0xd3152f80
2025-11-17T09:28:00.605 [DEBUG] [Thread-51872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:28:00.622 [DEBUG] [Thread-51872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:28:00.622 [INFO] [Thread-51872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] client lang: <none>
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] server lang: <none>
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] kex follows: False
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] Compression: none
2025-11-17T09:28:00.625 [DEBUG] [Thread-51872] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:28:00.642 [DEBUG] [Thread-51872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:28:00.642 [DEBUG] [Thread-51872] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:28:00.643 [DEBUG] [Thread-51872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:28:00.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:28:00.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:28:00.643 [DEBUG] [Thread-51872] [transport.py] [_log()] userauth is OK
2025-11-17T09:28:00.643 [DEBUG] [Thread-51872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:28:00.643 [DEBUG] [Thread-51872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:28:00.643 [DEBUG] [Thread-51872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:28:00.643 [DEBUG] [Thread-51872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:28:00.652 [INFO] [Thread-51872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:28:00.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:28:01.304 [DEBUG] [Thread-51872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:28:01.304 [DEBUG] [Thread-51872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:28:01.304 [DEBUG] [Thread-51872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:28:01.345 [DEBUG] [Thread-51872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:28:01.345 [DEBUG] [Thread-51872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:28:01.347 [DEBUG] [Thread-51872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:28:01.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:28:01.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:28:01.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:28:01.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:28:01.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:28:01.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:28:01.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:28:01.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:28:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:28:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.310813 -999.00  +15.40  10.33     39   +1.60 1 1 1 1 1   888    0 16.01 101.21 ----- 10.3 10.3 84.4 17.4 22.2 -24.0 21.8 -23.2 20.4 -23.9 21.1 -24.1
2025-11-17T09:28:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:28:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:28:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.310813
2025-11-17T09:28:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:28:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:28:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:28:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:28:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:28:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:27:32', tmtdew=16.72, humidity=31.8, cloud=0.0, wind=18.44, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:27:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:28:01.368 [DEBUG] [Thread-51872] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:28:01.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:28:01.453 [DEBUG] [Thread-51875] [transport.py] [_log()] starting thread (client mode): 0xd0786c80
2025-11-17T09:28:01.453 [DEBUG] [Thread-51875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:28:01.468 [DEBUG] [Thread-51875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:28:01.468 [INFO] [Thread-51875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:28:01.475 [DEBUG] [Thread-51875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:28:01.475 [DEBUG] [Thread-51875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] client lang: <none>
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] server lang: <none>
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] kex follows: False
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] Compression: none
2025-11-17T09:28:01.476 [DEBUG] [Thread-51875] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:28:01.533 [DEBUG] [Thread-51875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:28:01.534 [DEBUG] [Thread-51875] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:28:01.534 [DEBUG] [Thread-51875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:28:01.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:28:01.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:28:01.591 [DEBUG] [Thread-51875] [transport.py] [_log()] userauth is OK
2025-11-17T09:28:01.591 [DEBUG] [Thread-51875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:28:01.591 [DEBUG] [Thread-51875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:28:01.591 [DEBUG] [Thread-51875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:28:01.591 [DEBUG] [Thread-51875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:28:01.614 [INFO] [Thread-51875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:28:01.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:28:01.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:28:02.475 [DEBUG] [Thread-51875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:28:02.476 [DEBUG] [Thread-51875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:28:02.523 [DEBUG] [Thread-51875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:28:02.523 [DEBUG] [Thread-51875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:28:02.532 [DEBUG] [Thread-51875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:28:02.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:28:02.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:28:02.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:28:02.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:28:02.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:28:02.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:28:02.570 [DEBUG] [Thread-51875] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:28:14.480 [DEBUG] [Thread-51877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:28:17.422 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:28:17.423 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:28:29.531 [DEBUG] [Thread-51878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:28:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:28:32.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:28:32.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:28:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 28, 4), 16.82, 31.59, 0.0, 16.46, 15.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:28:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:28:04
2025-11-17T09:28:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:28:33.528 [DEBUG] [Thread-51879] [transport.py] [_log()] starting thread (client mode): 0xd0787310
2025-11-17T09:28:33.528 [DEBUG] [Thread-51879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:28:33.547 [DEBUG] [Thread-51879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:28:33.548 [INFO] [Thread-51879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:28:33.551 [DEBUG] [Thread-51879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] client lang: <none>
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] server lang: <none>
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] kex follows: False
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] Compression: none
2025-11-17T09:28:33.552 [DEBUG] [Thread-51879] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:28:33.571 [DEBUG] [Thread-51879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:28:33.572 [DEBUG] [Thread-51879] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:28:33.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:28:33.573 [DEBUG] [Thread-51879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:28:33.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:28:33.575 [DEBUG] [Thread-51879] [transport.py] [_log()] userauth is OK
2025-11-17T09:28:33.575 [DEBUG] [Thread-51879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:28:33.575 [DEBUG] [Thread-51879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:28:33.575 [DEBUG] [Thread-51879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:28:33.575 [DEBUG] [Thread-51879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:28:33.610 [INFO] [Thread-51879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:28:33.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:28:34.247 [DEBUG] [Thread-51879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:28:34.247 [DEBUG] [Thread-51879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:28:34.248 [DEBUG] [Thread-51879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:28:34.288 [DEBUG] [Thread-51879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:28:34.288 [DEBUG] [Thread-51879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:28:34.290 [DEBUG] [Thread-51879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:28:34.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:28:34.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:28:34.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:28:34.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:28:34.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:28:34.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:28:34.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.311160 -999.00  +15.60  25.15     38   +1.40 1 1 1 1 1   888    0 16.39 112.25 ----- 25.1 25.1 57.4 27.0 22.4 -25.0 21.9 -24.2 20.5 -24.4 21.1 -25.3
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.311160
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:28:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:28:34.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:28:04', tmtdew=16.82, humidity=31.59, cloud=0.0, wind=16.46, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:28:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:28:34.310 [DEBUG] [Thread-51879] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:28:34.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:28:34.395 [DEBUG] [Thread-51882] [transport.py] [_log()] starting thread (client mode): 0xd7bc6380
2025-11-17T09:28:34.395 [DEBUG] [Thread-51882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:28:34.412 [DEBUG] [Thread-51882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:28:34.412 [INFO] [Thread-51882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:28:34.419 [DEBUG] [Thread-51882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:28:34.419 [DEBUG] [Thread-51882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:28:34.419 [DEBUG] [Thread-51882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:28:34.419 [DEBUG] [Thread-51882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] client lang: <none>
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] server lang: <none>
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] kex follows: False
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] Compression: none
2025-11-17T09:28:34.420 [DEBUG] [Thread-51882] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:28:34.477 [DEBUG] [Thread-51882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:28:34.478 [DEBUG] [Thread-51882] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:28:34.478 [DEBUG] [Thread-51882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:28:34.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:28:34.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:28:34.535 [DEBUG] [Thread-51882] [transport.py] [_log()] userauth is OK
2025-11-17T09:28:34.535 [DEBUG] [Thread-51882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:28:34.535 [DEBUG] [Thread-51882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:28:34.535 [DEBUG] [Thread-51882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:28:34.535 [DEBUG] [Thread-51882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:28:34.549 [INFO] [Thread-51882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:28:34.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:28:34.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:28:35.487 [DEBUG] [Thread-51882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:28:35.487 [DEBUG] [Thread-51882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:28:35.538 [DEBUG] [Thread-51882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:28:35.538 [DEBUG] [Thread-51882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:28:35.548 [DEBUG] [Thread-51882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:28:35.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:28:35.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:28:35.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:28:35.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:28:35.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:28:35.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:28:35.586 [DEBUG] [Thread-51882] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:28:44.560 [DEBUG] [Thread-51884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:28:59.612 [DEBUG] [Thread-51885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:29:00.441 [DEBUG] [Thread-51886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:29:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:29:05.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:29:05.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:29:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 28, 36), 16.71, 31.72, 0.0, 19.27, 15.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:29:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:28:36
2025-11-17T09:29:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:29:06.528 [DEBUG] [Thread-51887] [transport.py] [_log()] starting thread (client mode): 0xd0787c70
2025-11-17T09:29:06.528 [DEBUG] [Thread-51887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:29:06.548 [DEBUG] [Thread-51887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:29:06.548 [INFO] [Thread-51887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:29:06.551 [DEBUG] [Thread-51887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:29:06.551 [DEBUG] [Thread-51887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:29:06.551 [DEBUG] [Thread-51887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:29:06.551 [DEBUG] [Thread-51887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:29:06.551 [DEBUG] [Thread-51887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:29:06.551 [DEBUG] [Thread-51887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:29:06.551 [DEBUG] [Thread-51887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:29:06.551 [DEBUG] [Thread-51887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] client lang: <none>
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] server lang: <none>
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] kex follows: False
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] Compression: none
2025-11-17T09:29:06.552 [DEBUG] [Thread-51887] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:29:06.570 [DEBUG] [Thread-51887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:29:06.571 [DEBUG] [Thread-51887] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:29:06.571 [DEBUG] [Thread-51887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:29:06.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:29:06.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:29:06.573 [DEBUG] [Thread-51887] [transport.py] [_log()] userauth is OK
2025-11-17T09:29:06.573 [DEBUG] [Thread-51887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:29:06.573 [DEBUG] [Thread-51887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:29:06.573 [DEBUG] [Thread-51887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:29:06.573 [DEBUG] [Thread-51887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:29:06.597 [INFO] [Thread-51887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:29:06.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:29:07.234 [DEBUG] [Thread-51887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:29:07.234 [DEBUG] [Thread-51887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:29:07.235 [DEBUG] [Thread-51887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:29:07.275 [DEBUG] [Thread-51887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:29:07.275 [DEBUG] [Thread-51887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:29:07.278 [DEBUG] [Thread-51887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:29:07.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:29:07.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:29:07.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:29:07.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:29:07.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:29:07.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:29:07.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:29:07.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:29:07.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:29:07.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.311508 -999.00  +15.10  24.07     39   +1.20 1 1 1 1 1   888    0 16.20 109.67 ----- 24.1 24.1 53.8 26.6 22.4 -24.3 21.6 -25.8 20.2 -26.3 21.0 -25.0
2025-11-17T09:29:07.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:29:07.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:29:07.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.311508
2025-11-17T09:29:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:29:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:29:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:29:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:29:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:29:07.304 [DEBUG] [Thread-51887] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:29:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:28:36', tmtdew=16.71, humidity=31.72, cloud=0.0, wind=19.27, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:28:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:29:07.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:29:07.401 [DEBUG] [Thread-51890] [transport.py] [_log()] starting thread (client mode): 0xd0786710
2025-11-17T09:29:07.401 [DEBUG] [Thread-51890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:29:07.416 [DEBUG] [Thread-51890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:29:07.417 [INFO] [Thread-51890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] client lang: <none>
2025-11-17T09:29:07.424 [DEBUG] [Thread-51890] [transport.py] [_log()] server lang: <none>
2025-11-17T09:29:07.425 [DEBUG] [Thread-51890] [transport.py] [_log()] kex follows: False
2025-11-17T09:29:07.425 [DEBUG] [Thread-51890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:29:07.425 [DEBUG] [Thread-51890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:29:07.425 [DEBUG] [Thread-51890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:29:07.425 [DEBUG] [Thread-51890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:29:07.425 [DEBUG] [Thread-51890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:29:07.425 [DEBUG] [Thread-51890] [transport.py] [_log()] Compression: none
2025-11-17T09:29:07.425 [DEBUG] [Thread-51890] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:29:07.487 [DEBUG] [Thread-51890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:29:07.487 [DEBUG] [Thread-51890] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:29:07.488 [DEBUG] [Thread-51890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:29:07.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:29:07.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:29:07.547 [DEBUG] [Thread-51890] [transport.py] [_log()] userauth is OK
2025-11-17T09:29:07.547 [DEBUG] [Thread-51890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:29:07.547 [DEBUG] [Thread-51890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:29:07.547 [DEBUG] [Thread-51890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:29:07.547 [DEBUG] [Thread-51890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:29:07.567 [INFO] [Thread-51890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:29:07.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:29:07.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:29:08.448 [DEBUG] [Thread-51890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:29:08.448 [DEBUG] [Thread-51890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:29:08.496 [DEBUG] [Thread-51890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:29:08.496 [DEBUG] [Thread-51890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:29:08.504 [DEBUG] [Thread-51890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:29:08.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:29:08.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:29:08.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:29:08.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:29:08.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:29:08.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:29:08.535 [DEBUG] [Thread-51890] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:29:14.647 [DEBUG] [Thread-51892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:29:17.565 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:29:17.566 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:29:29.681 [DEBUG] [Thread-51893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:29:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:29:38.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:29:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:29:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 29, 8), 16.7, 31.75, 0.0, 17.8, 15.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:29:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:29:08
2025-11-17T09:29:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:29:39.476 [DEBUG] [Thread-51894] [transport.py] [_log()] starting thread (client mode): 0xd0784eb0
2025-11-17T09:29:39.476 [DEBUG] [Thread-51894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:29:39.492 [DEBUG] [Thread-51894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:29:39.492 [INFO] [Thread-51894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] client lang: <none>
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] server lang: <none>
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] kex follows: False
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:29:39.493 [DEBUG] [Thread-51894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:29:39.494 [DEBUG] [Thread-51894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:29:39.494 [DEBUG] [Thread-51894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:29:39.494 [DEBUG] [Thread-51894] [transport.py] [_log()] Compression: none
2025-11-17T09:29:39.494 [DEBUG] [Thread-51894] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:29:39.515 [DEBUG] [Thread-51894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:29:39.516 [DEBUG] [Thread-51894] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:29:39.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:29:39.517 [DEBUG] [Thread-51894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:29:39.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:29:39.519 [DEBUG] [Thread-51894] [transport.py] [_log()] userauth is OK
2025-11-17T09:29:39.520 [DEBUG] [Thread-51894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:29:39.520 [DEBUG] [Thread-51894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:29:39.520 [DEBUG] [Thread-51894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:29:39.520 [DEBUG] [Thread-51894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:29:39.552 [INFO] [Thread-51894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:29:39.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:29:40.158 [DEBUG] [Thread-51894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:29:40.158 [DEBUG] [Thread-51894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:29:40.159 [DEBUG] [Thread-51894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:29:40.199 [DEBUG] [Thread-51894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:29:40.200 [DEBUG] [Thread-51894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:29:40.203 [DEBUG] [Thread-51894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:29:40.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:29:40.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:29:40.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:29:40.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:29:40.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:29:40.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:29:40.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.311855 -999.00  +15.10  16.38     39   +1.30 1 1 1 1 1   888    0 16.87 122.51 ----- 16.4 16.4 104.3 24.9 22.2 -25.4 21.6 -24.2 20.3 -24.2 21.0 -25.1
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.311855
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:29:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:29:40.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:29:08', tmtdew=16.7, humidity=31.75, cloud=0.0, wind=17.8, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:29:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:29:40.224 [DEBUG] [Thread-51894] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:29:40.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:29:40.316 [DEBUG] [Thread-51897] [transport.py] [_log()] starting thread (client mode): 0xd0784a60
2025-11-17T09:29:40.316 [DEBUG] [Thread-51897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:29:40.331 [DEBUG] [Thread-51897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:29:40.331 [INFO] [Thread-51897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] client lang: <none>
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] server lang: <none>
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] kex follows: False
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] Compression: none
2025-11-17T09:29:40.339 [DEBUG] [Thread-51897] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:29:40.397 [DEBUG] [Thread-51897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:29:40.397 [DEBUG] [Thread-51897] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:29:40.397 [DEBUG] [Thread-51897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:29:40.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:29:40.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:29:40.463 [DEBUG] [Thread-51897] [transport.py] [_log()] userauth is OK
2025-11-17T09:29:40.463 [DEBUG] [Thread-51897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:29:40.463 [DEBUG] [Thread-51897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:29:40.463 [DEBUG] [Thread-51897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:29:40.463 [DEBUG] [Thread-51897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:29:40.485 [INFO] [Thread-51897] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:29:40.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:29:40.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:29:41.389 [DEBUG] [Thread-51897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:29:41.389 [DEBUG] [Thread-51897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:29:41.437 [DEBUG] [Thread-51897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:29:41.437 [DEBUG] [Thread-51897] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:29:41.445 [DEBUG] [Thread-51897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:29:41.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:29:41.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:29:41.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:29:41.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:29:41.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:29:41.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:29:41.477 [DEBUG] [Thread-51897] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:29:44.712 [DEBUG] [Thread-51899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:29:59.750 [DEBUG] [Thread-51900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:30:00.493 [DEBUG] [Thread-51901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:30:11.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:30:11.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:30:11.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:30:12.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 29, 40), 16.69, 32.32, 0.0, 17.42, 16.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:30:12.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:29:40
2025-11-17T09:30:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:30:12.480 [DEBUG] [Thread-51902] [transport.py] [_log()] starting thread (client mode): 0xd0787a30
2025-11-17T09:30:12.481 [DEBUG] [Thread-51902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:30:12.494 [DEBUG] [Thread-51902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:30:12.494 [INFO] [Thread-51902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] client lang: <none>
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] server lang: <none>
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] kex follows: False
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] Compression: none
2025-11-17T09:30:12.497 [DEBUG] [Thread-51902] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:30:12.505 [DEBUG] [Thread-51902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:30:12.505 [DEBUG] [Thread-51902] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:30:12.505 [DEBUG] [Thread-51902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:30:12.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:30:12.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:30:12.506 [DEBUG] [Thread-51902] [transport.py] [_log()] userauth is OK
2025-11-17T09:30:12.506 [DEBUG] [Thread-51902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:30:12.506 [DEBUG] [Thread-51902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:30:12.506 [DEBUG] [Thread-51902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:30:12.506 [DEBUG] [Thread-51902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:30:12.515 [INFO] [Thread-51902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:30:12.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:30:13.120 [DEBUG] [Thread-51902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:30:13.121 [DEBUG] [Thread-51902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:30:13.121 [DEBUG] [Thread-51902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:30:13.163 [DEBUG] [Thread-51902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:30:13.163 [DEBUG] [Thread-51902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:30:13.164 [DEBUG] [Thread-51902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:30:13.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:30:13.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:30:13.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:30:13.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:30:13.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:30:13.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:30:13.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.312202 -999.00  +14.90  12.28     39   +1.30 1 1 1 1 1   888    0 16.57 117.13 ----- 12.3 12.3 112.2 18.8 22.1 -29.1 21.8 -23.7 20.3 -24.2 21.0 -24.6
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.312202
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:30:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:29:40', tmtdew=16.69, humidity=32.32, cloud=0.0, wind=17.42, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:29:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:30:13.177 [DEBUG] [Thread-51902] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:30:13.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:30:13.264 [DEBUG] [Thread-51905] [transport.py] [_log()] starting thread (client mode): 0xd07cf670
2025-11-17T09:30:13.264 [DEBUG] [Thread-51905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:30:13.279 [DEBUG] [Thread-51905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:30:13.279 [INFO] [Thread-51905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] client lang: <none>
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] server lang: <none>
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] kex follows: False
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] Compression: none
2025-11-17T09:30:13.290 [DEBUG] [Thread-51905] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:30:13.350 [DEBUG] [Thread-51905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:30:13.350 [DEBUG] [Thread-51905] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:30:13.350 [DEBUG] [Thread-51905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:30:13.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:30:13.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:30:13.411 [DEBUG] [Thread-51905] [transport.py] [_log()] userauth is OK
2025-11-17T09:30:13.411 [DEBUG] [Thread-51905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:30:13.411 [DEBUG] [Thread-51905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:30:13.411 [DEBUG] [Thread-51905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:30:13.411 [DEBUG] [Thread-51905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:30:13.425 [INFO] [Thread-51905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:30:13.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:30:13.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:30:14.277 [DEBUG] [Thread-51905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:30:14.277 [DEBUG] [Thread-51905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:30:14.325 [DEBUG] [Thread-51905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:30:14.326 [DEBUG] [Thread-51905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:30:14.334 [DEBUG] [Thread-51905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:30:14.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:30:14.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:30:14.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:30:14.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:30:14.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:30:14.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:30:14.370 [DEBUG] [Thread-51905] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:30:14.776 [DEBUG] [Thread-51907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:30:17.707 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:30:17.708 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:30:29.814 [DEBUG] [Thread-51908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:30:44.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:30:44.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:30:44.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:30:44.846 [DEBUG] [Thread-51909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:30:45.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 30, 12), 16.81, 32.05, 0.0, 18.54, 16.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:30:45.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:30:12
2025-11-17T09:30:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:30:45.376 [DEBUG] [Thread-51910] [transport.py] [_log()] starting thread (client mode): 0xd3153c40
2025-11-17T09:30:45.376 [DEBUG] [Thread-51910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:30:45.397 [DEBUG] [Thread-51910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:30:45.397 [INFO] [Thread-51910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] client lang: <none>
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] server lang: <none>
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] kex follows: False
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] Compression: none
2025-11-17T09:30:45.400 [DEBUG] [Thread-51910] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:30:45.416 [DEBUG] [Thread-51910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:30:45.416 [DEBUG] [Thread-51910] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:30:45.416 [DEBUG] [Thread-51910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:30:45.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:30:45.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:30:45.417 [DEBUG] [Thread-51910] [transport.py] [_log()] userauth is OK
2025-11-17T09:30:45.417 [DEBUG] [Thread-51910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:30:45.417 [DEBUG] [Thread-51910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:30:45.417 [DEBUG] [Thread-51910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:30:45.417 [DEBUG] [Thread-51910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:30:45.432 [INFO] [Thread-51910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:30:45.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:30:46.031 [DEBUG] [Thread-51910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:30:46.031 [DEBUG] [Thread-51910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:30:46.032 [DEBUG] [Thread-51910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:30:46.072 [DEBUG] [Thread-51910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:30:46.072 [DEBUG] [Thread-51910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:30:46.074 [DEBUG] [Thread-51910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:30:46.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:30:46.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:30:46.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:30:46.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:30:46.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:30:46.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:30:46.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:30:46.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:30:46.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:30:46.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.312202 -999.00  +14.90  12.28     39   +1.30 1 1 1 1 1   888    0 16.57 117.13 ----- 12.3 12.3 112.2 18.8 22.1 -29.1 21.8 -23.7 20.3 -24.2 21.0 -24.6
2025-11-17T09:30:46.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:30:46.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:30:46.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.312202
2025-11-17T09:30:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:30:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:30:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:30:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:30:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:30:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:30:12', tmtdew=16.81, humidity=32.05, cloud=0.0, wind=18.54, temperature=16.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:29:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:30:46.086 [DEBUG] [Thread-51910] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:30:46.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:30:46.173 [DEBUG] [Thread-51913] [transport.py] [_log()] starting thread (client mode): 0xd3150310
2025-11-17T09:30:46.173 [DEBUG] [Thread-51913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:30:46.188 [DEBUG] [Thread-51913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:30:46.188 [INFO] [Thread-51913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] client lang: <none>
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] server lang: <none>
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] kex follows: False
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] Compression: none
2025-11-17T09:30:46.196 [DEBUG] [Thread-51913] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:30:46.260 [DEBUG] [Thread-51913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:30:46.260 [DEBUG] [Thread-51913] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:30:46.261 [DEBUG] [Thread-51913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:30:46.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:30:46.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:30:46.315 [DEBUG] [Thread-51913] [transport.py] [_log()] userauth is OK
2025-11-17T09:30:46.315 [DEBUG] [Thread-51913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:30:46.315 [DEBUG] [Thread-51913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:30:46.315 [DEBUG] [Thread-51913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:30:46.315 [DEBUG] [Thread-51913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:30:46.335 [INFO] [Thread-51913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:30:46.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:30:46.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:30:47.206 [DEBUG] [Thread-51913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:30:47.207 [DEBUG] [Thread-51913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:30:47.254 [DEBUG] [Thread-51913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:30:47.254 [DEBUG] [Thread-51913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:30:47.263 [DEBUG] [Thread-51913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:30:47.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:30:47.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:30:47.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:30:47.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:30:47.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:30:47.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:30:47.296 [DEBUG] [Thread-51913] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:30:59.874 [DEBUG] [Thread-51915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:31:00.542 [DEBUG] [Thread-51916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:31:14.912 [DEBUG] [Thread-51917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:31:17.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:31:17.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:31:17.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:31:17.849 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:31:17.849 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:31:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 30, 44), 16.58, 32.27, 0.0, 19.2, 16.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:31:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:30:44
2025-11-17T09:31:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:31:18.302 [DEBUG] [Thread-51918] [transport.py] [_log()] starting thread (client mode): 0xd0784820
2025-11-17T09:31:18.302 [DEBUG] [Thread-51918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:31:18.322 [DEBUG] [Thread-51918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:31:18.322 [INFO] [Thread-51918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:31:18.323 [DEBUG] [Thread-51918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:31:18.323 [DEBUG] [Thread-51918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] client lang: <none>
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] server lang: <none>
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] kex follows: False
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] Compression: none
2025-11-17T09:31:18.324 [DEBUG] [Thread-51918] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:31:18.333 [DEBUG] [Thread-51918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:31:18.333 [DEBUG] [Thread-51918] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:31:18.333 [DEBUG] [Thread-51918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:31:18.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:31:18.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:31:18.334 [DEBUG] [Thread-51918] [transport.py] [_log()] userauth is OK
2025-11-17T09:31:18.335 [DEBUG] [Thread-51918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:31:18.335 [DEBUG] [Thread-51918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:31:18.335 [DEBUG] [Thread-51918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:31:18.335 [DEBUG] [Thread-51918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:31:18.347 [INFO] [Thread-51918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:31:18.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:31:18.993 [DEBUG] [Thread-51918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:31:18.994 [DEBUG] [Thread-51918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:31:18.994 [DEBUG] [Thread-51918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:31:19.036 [DEBUG] [Thread-51918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:31:19.036 [DEBUG] [Thread-51918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:31:19.039 [DEBUG] [Thread-51918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:31:19.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:31:19.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:31:19.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:31:19.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:31:19.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:31:19.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:31:19.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:31:19.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:31:19.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:31:19.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.312897 -999.00  +15.10  16.53     39   +1.60 1 1 1 1 1   888    0 16.04 92.62 ----- 16.5 16.5 106.5 23.7 21.9 -26.9 21.7 -24.5 20.4 -24.1 20.9 -24.8
2025-11-17T09:31:19.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:31:19.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:31:19.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.312897
2025-11-17T09:31:19.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:31:19.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:31:19.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:31:19.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:31:19.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:31:19.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:30:44', tmtdew=16.58, humidity=32.27, cloud=0.0, wind=19.2, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:30:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:31:19.063 [DEBUG] [Thread-51918] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:31:19.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:31:29.940 [DEBUG] [Thread-51921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:31:44.984 [DEBUG] [Thread-51922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:32:00.011 [DEBUG] [Thread-51923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:32:00.603 [DEBUG] [Thread-51924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:32:15.044 [DEBUG] [Thread-51925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:32:17.989 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:32:17.991 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:32:30.075 [DEBUG] [Thread-51926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:32:45.103 [DEBUG] [Thread-51927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:33:00.137 [DEBUG] [Thread-51928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:33:00.657 [DEBUG] [Thread-51929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:33:15.164 [DEBUG] [Thread-51930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:33:18.132 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:33:18.134 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:33:30.192 [DEBUG] [Thread-51931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:33:31.451 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T09:33:45.224 [DEBUG] [Thread-51932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:34:00.252 [DEBUG] [Thread-51933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:34:00.710 [DEBUG] [Thread-51934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:34:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:34:01.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:34:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:34:02.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 33, 56), 16.52, 32.15, 0.0, 21.47, 15.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:34:02.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:33:56
2025-11-17T09:34:02.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:34:02.433 [DEBUG] [Thread-51935] [transport.py] [_log()] starting thread (client mode): 0xd0718b50
2025-11-17T09:34:02.433 [DEBUG] [Thread-51935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:34:02.448 [DEBUG] [Thread-51935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:34:02.448 [INFO] [Thread-51935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:34:02.451 [DEBUG] [Thread-51935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:34:02.451 [DEBUG] [Thread-51935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:34:02.451 [DEBUG] [Thread-51935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:34:02.451 [DEBUG] [Thread-51935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] client lang: <none>
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] server lang: <none>
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] kex follows: False
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] Compression: none
2025-11-17T09:34:02.452 [DEBUG] [Thread-51935] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:34:02.469 [DEBUG] [Thread-51935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:34:02.470 [DEBUG] [Thread-51935] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:34:02.470 [DEBUG] [Thread-51935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:34:02.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:34:02.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:34:02.472 [DEBUG] [Thread-51935] [transport.py] [_log()] userauth is OK
2025-11-17T09:34:02.472 [DEBUG] [Thread-51935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:34:02.472 [DEBUG] [Thread-51935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:34:02.472 [DEBUG] [Thread-51935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:34:02.472 [DEBUG] [Thread-51935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:34:02.496 [INFO] [Thread-51935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:34:02.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:34:03.096 [DEBUG] [Thread-51935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:34:03.096 [DEBUG] [Thread-51935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:34:03.096 [DEBUG] [Thread-51935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:34:03.138 [DEBUG] [Thread-51935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:34:03.138 [DEBUG] [Thread-51935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:34:03.140 [DEBUG] [Thread-51935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:34:03.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:34:03.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:34:03.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:34:03.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:34:03.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:34:03.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:34:03.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:34:03.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:34:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:34:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.314633 -999.00  +15.10  11.60     38   +1.20 1 1 1 1 1   888    0 15.85 88.12 ----- 11.6 11.6 93.6 24.4 21.9 -28.5 21.8 -24.4 20.5 -25.2 20.9 -25.3
2025-11-17T09:34:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:34:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:34:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.314633
2025-11-17T09:34:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:34:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:34:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:34:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:34:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:34:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:33:56', tmtdew=16.52, humidity=32.15, cloud=0.0, wind=21.47, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:33:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:34:03.173 [DEBUG] [Thread-51935] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:34:03.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:34:03.268 [DEBUG] [Thread-51938] [transport.py] [_log()] starting thread (client mode): 0xd0785f30
2025-11-17T09:34:03.269 [DEBUG] [Thread-51938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:34:03.284 [DEBUG] [Thread-51938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:34:03.284 [INFO] [Thread-51938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:34:03.291 [DEBUG] [Thread-51938] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] client lang: <none>
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] server lang: <none>
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] kex follows: False
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:34:03.292 [DEBUG] [Thread-51938] [transport.py] [_log()] Compression: none
2025-11-17T09:34:03.293 [DEBUG] [Thread-51938] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:34:03.352 [DEBUG] [Thread-51938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:34:03.352 [DEBUG] [Thread-51938] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:34:03.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:34:03.353 [DEBUG] [Thread-51938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:34:03.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:34:03.412 [DEBUG] [Thread-51938] [transport.py] [_log()] userauth is OK
2025-11-17T09:34:03.412 [DEBUG] [Thread-51938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:34:03.412 [DEBUG] [Thread-51938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:34:03.412 [DEBUG] [Thread-51938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:34:03.412 [DEBUG] [Thread-51938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:34:03.434 [INFO] [Thread-51938] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:34:03.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:34:03.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:34:04.292 [DEBUG] [Thread-51938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:34:04.292 [DEBUG] [Thread-51938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:34:04.340 [DEBUG] [Thread-51938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:34:04.341 [DEBUG] [Thread-51938] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:34:04.350 [DEBUG] [Thread-51938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:34:04.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:34:04.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:34:04.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:34:04.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:34:04.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:34:04.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:34:04.384 [DEBUG] [Thread-51938] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:34:15.282 [DEBUG] [Thread-51940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:34:18.275 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:34:18.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:34:30.319 [DEBUG] [Thread-51941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:34:34.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:34:34.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:34:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:34:35.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 34, 28), 16.64, 31.97, 0.0, 20.56, 16.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:34:35.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:34:28
2025-11-17T09:34:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:34:35.348 [DEBUG] [Thread-51942] [transport.py] [_log()] starting thread (client mode): 0xd07852d0
2025-11-17T09:34:35.349 [DEBUG] [Thread-51942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:34:35.368 [DEBUG] [Thread-51942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:34:35.368 [INFO] [Thread-51942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] client lang: <none>
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] server lang: <none>
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] kex follows: False
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] Compression: none
2025-11-17T09:34:35.372 [DEBUG] [Thread-51942] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:34:35.388 [DEBUG] [Thread-51942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:34:35.388 [DEBUG] [Thread-51942] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:34:35.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:34:35.389 [DEBUG] [Thread-51942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:34:35.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:34:35.390 [DEBUG] [Thread-51942] [transport.py] [_log()] userauth is OK
2025-11-17T09:34:35.390 [DEBUG] [Thread-51942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:34:35.390 [DEBUG] [Thread-51942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:34:35.390 [DEBUG] [Thread-51942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:34:35.390 [DEBUG] [Thread-51942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:34:35.402 [INFO] [Thread-51942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:34:35.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:34:36.129 [DEBUG] [Thread-51942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:34:36.130 [DEBUG] [Thread-51942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:34:36.130 [DEBUG] [Thread-51942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:34:36.170 [DEBUG] [Thread-51942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:34:36.170 [DEBUG] [Thread-51942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:34:36.172 [DEBUG] [Thread-51942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:34:36.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:34:36.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:34:36.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:34:36.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:34:36.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:34:36.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:34:36.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:34:36.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:34:36.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:34:36.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.315327 -999.00  +15.10  10.35     39   +1.30 1 1 1 1 1   888    0 16.15 90.04 ----- 10.3 10.3 102.8 18.4 22.1 -23.5 21.8 -23.4 20.6 -23.8 21.1 -24.5
2025-11-17T09:34:36.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:34:36.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:34:36.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.315327
2025-11-17T09:34:36.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:34:36.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:34:36.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:34:36.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:34:36.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:34:36.196 [DEBUG] [Thread-51942] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:34:36.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:34:28', tmtdew=16.64, humidity=31.97, cloud=0.0, wind=20.56, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:34:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:34:36.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:34:36.293 [DEBUG] [Thread-51945] [transport.py] [_log()] starting thread (client mode): 0xd07cfb20
2025-11-17T09:34:36.293 [DEBUG] [Thread-51945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:34:36.310 [DEBUG] [Thread-51945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:34:36.310 [INFO] [Thread-51945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] client lang: <none>
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] server lang: <none>
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] kex follows: False
2025-11-17T09:34:36.318 [DEBUG] [Thread-51945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:34:36.319 [DEBUG] [Thread-51945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:34:36.319 [DEBUG] [Thread-51945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:34:36.319 [DEBUG] [Thread-51945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:34:36.319 [DEBUG] [Thread-51945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:34:36.319 [DEBUG] [Thread-51945] [transport.py] [_log()] Compression: none
2025-11-17T09:34:36.319 [DEBUG] [Thread-51945] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:34:36.374 [DEBUG] [Thread-51945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:34:36.374 [DEBUG] [Thread-51945] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:34:36.374 [DEBUG] [Thread-51945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:34:36.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:34:36.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:34:36.432 [DEBUG] [Thread-51945] [transport.py] [_log()] userauth is OK
2025-11-17T09:34:36.432 [DEBUG] [Thread-51945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:34:36.432 [DEBUG] [Thread-51945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:34:36.432 [DEBUG] [Thread-51945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:34:36.432 [DEBUG] [Thread-51945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:34:36.451 [INFO] [Thread-51945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:34:36.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:34:36.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:34:37.289 [DEBUG] [Thread-51945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:34:37.289 [DEBUG] [Thread-51945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:34:37.337 [DEBUG] [Thread-51945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:34:37.337 [DEBUG] [Thread-51945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:34:37.346 [DEBUG] [Thread-51945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:34:37.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:34:37.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:34:37.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:34:37.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:34:37.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:34:37.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:34:37.380 [DEBUG] [Thread-51945] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:34:45.354 [DEBUG] [Thread-51947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:35:00.392 [DEBUG] [Thread-51948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:35:00.759 [DEBUG] [Thread-51949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:35:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:35:07.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:35:07.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:35:08.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 34, 28), 16.64, 31.97, 0.0, 16.96, 15.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:35:08.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:34:28
2025-11-17T09:35:08.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:35:08.306 [DEBUG] [Thread-51950] [transport.py] [_log()] starting thread (client mode): 0xd7bc61d0
2025-11-17T09:35:08.307 [DEBUG] [Thread-51950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:35:08.322 [DEBUG] [Thread-51950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:35:08.322 [INFO] [Thread-51950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] client lang: <none>
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] server lang: <none>
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] kex follows: False
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:35:08.325 [DEBUG] [Thread-51950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:35:08.326 [DEBUG] [Thread-51950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:35:08.326 [DEBUG] [Thread-51950] [transport.py] [_log()] Compression: none
2025-11-17T09:35:08.326 [DEBUG] [Thread-51950] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:35:08.343 [DEBUG] [Thread-51950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:35:08.343 [DEBUG] [Thread-51950] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:35:08.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:35:08.344 [DEBUG] [Thread-51950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:35:08.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:35:08.346 [DEBUG] [Thread-51950] [transport.py] [_log()] userauth is OK
2025-11-17T09:35:08.346 [DEBUG] [Thread-51950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:35:08.346 [DEBUG] [Thread-51950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:35:08.347 [DEBUG] [Thread-51950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:35:08.347 [DEBUG] [Thread-51950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:35:08.370 [INFO] [Thread-51950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:35:08.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:35:14.472 [DEBUG] [Thread-51950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:35:14.472 [DEBUG] [Thread-51950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:35:14.473 [DEBUG] [Thread-51950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:35:14.513 [DEBUG] [Thread-51950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:35:14.514 [DEBUG] [Thread-51950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:35:14.516 [DEBUG] [Thread-51950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:35:14.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:35:14.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:35:14.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:35:14.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:35:14.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:35:14.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:35:14.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:35:14.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:35:14.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:35:14.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.315674 -999.00  +15.30  12.23     38   +1.40 1 1 1 1 1   888    0 15.92 96.87 ----- 12.2 12.2 79.6 17.2 22.3 -26.0 21.9 -24.3 20.7 -24.1 21.1 -24.1
2025-11-17T09:35:14.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:35:14.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:35:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.315674
2025-11-17T09:35:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:35:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:35:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:35:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:35:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:35:14.597 [DEBUG] [Thread-51950] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:35:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:34:28', tmtdew=16.64, humidity=31.97, cloud=0.0, wind=16.96, temperature=15.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:34:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:35:14.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:35:14.701 [DEBUG] [Thread-51953] [transport.py] [_log()] starting thread (client mode): 0xd31cc5b0
2025-11-17T09:35:14.701 [DEBUG] [Thread-51953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:35:14.717 [DEBUG] [Thread-51953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:35:14.717 [INFO] [Thread-51953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:35:14.727 [DEBUG] [Thread-51953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:35:14.727 [DEBUG] [Thread-51953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] client lang: <none>
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] server lang: <none>
2025-11-17T09:35:14.728 [DEBUG] [Thread-51953] [transport.py] [_log()] kex follows: False
2025-11-17T09:35:14.729 [DEBUG] [Thread-51953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:35:14.729 [DEBUG] [Thread-51953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:35:14.729 [DEBUG] [Thread-51953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:35:14.729 [DEBUG] [Thread-51953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:35:14.729 [DEBUG] [Thread-51953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:35:14.729 [DEBUG] [Thread-51953] [transport.py] [_log()] Compression: none
2025-11-17T09:35:14.729 [DEBUG] [Thread-51953] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:35:14.786 [DEBUG] [Thread-51953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:35:14.786 [DEBUG] [Thread-51953] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:35:14.787 [DEBUG] [Thread-51953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:35:14.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:35:14.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:35:14.844 [DEBUG] [Thread-51953] [transport.py] [_log()] userauth is OK
2025-11-17T09:35:14.844 [DEBUG] [Thread-51953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:35:14.844 [DEBUG] [Thread-51953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:35:14.844 [DEBUG] [Thread-51953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:35:14.844 [DEBUG] [Thread-51953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:35:14.873 [INFO] [Thread-51953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:35:14.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:35:14.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:35:15.424 [DEBUG] [Thread-51955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:35:15.726 [DEBUG] [Thread-51953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:35:15.727 [DEBUG] [Thread-51953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:35:15.774 [DEBUG] [Thread-51953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:35:15.774 [DEBUG] [Thread-51953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:35:15.783 [DEBUG] [Thread-51953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:35:15.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:35:15.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:35:15.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:35:15.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:35:15.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:35:15.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:35:15.817 [DEBUG] [Thread-51953] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:35:18.418 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:35:18.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:35:30.468 [DEBUG] [Thread-51956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:35:45.502 [DEBUG] [Thread-51957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:35:45.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:35:45.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:35:45.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:35:46.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 35, 32), 16.95, 31.39, 0.0, 17.86, 16.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:35:46.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:35:32
2025-11-17T09:35:46.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:35:46.773 [DEBUG] [Thread-51958] [transport.py] [_log()] starting thread (client mode): 0xd31cc970
2025-11-17T09:35:46.773 [DEBUG] [Thread-51958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:35:46.793 [DEBUG] [Thread-51958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:35:46.793 [INFO] [Thread-51958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:35:46.796 [DEBUG] [Thread-51958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:35:46.797 [DEBUG] [Thread-51958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:35:46.797 [DEBUG] [Thread-51958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:35:46.797 [DEBUG] [Thread-51958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:35:46.797 [DEBUG] [Thread-51958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:35:46.797 [DEBUG] [Thread-51958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:35:46.797 [DEBUG] [Thread-51958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:35:46.797 [DEBUG] [Thread-51958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:35:46.797 [DEBUG] [Thread-51958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:35:46.798 [DEBUG] [Thread-51958] [transport.py] [_log()] client lang: <none>
2025-11-17T09:35:46.798 [DEBUG] [Thread-51958] [transport.py] [_log()] server lang: <none>
2025-11-17T09:35:46.798 [DEBUG] [Thread-51958] [transport.py] [_log()] kex follows: False
2025-11-17T09:35:46.798 [DEBUG] [Thread-51958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:35:46.798 [DEBUG] [Thread-51958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:35:46.798 [DEBUG] [Thread-51958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:35:46.798 [DEBUG] [Thread-51958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:35:46.798 [DEBUG] [Thread-51958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:35:46.799 [DEBUG] [Thread-51958] [transport.py] [_log()] Compression: none
2025-11-17T09:35:46.799 [DEBUG] [Thread-51958] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:35:46.816 [DEBUG] [Thread-51958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:35:46.817 [DEBUG] [Thread-51958] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:35:46.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:35:46.818 [DEBUG] [Thread-51958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:35:46.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:35:46.820 [DEBUG] [Thread-51958] [transport.py] [_log()] userauth is OK
2025-11-17T09:35:46.821 [DEBUG] [Thread-51958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:35:46.821 [DEBUG] [Thread-51958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:35:46.821 [DEBUG] [Thread-51958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:35:46.821 [DEBUG] [Thread-51958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:35:46.859 [INFO] [Thread-51958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:35:46.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:35:47.513 [DEBUG] [Thread-51958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:35:47.513 [DEBUG] [Thread-51958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:35:47.513 [DEBUG] [Thread-51958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:35:47.554 [DEBUG] [Thread-51958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:35:47.555 [DEBUG] [Thread-51958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:35:47.557 [DEBUG] [Thread-51958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:35:47.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:35:47.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:35:47.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:35:47.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:35:47.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:35:47.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:35:47.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:35:47.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:35:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.316021 -999.00  +15.70  19.17     38   +1.60 1 1 1 1 1   888    0 15.99 92.06 ----- 19.2 19.2 92.9 25.2 22.3 -25.1 22.0 -23.1 20.7 -23.6 21.2 -24.1
2025-11-17T09:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.316021
2025-11-17T09:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:35:47.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:35:47.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:35:47.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:35:47.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:35:47.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:35:32', tmtdew=16.95, humidity=31.39, cloud=0.0, wind=17.86, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:35:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:35:47.584 [DEBUG] [Thread-51958] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:35:47.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:35:47.680 [DEBUG] [Thread-51961] [transport.py] [_log()] starting thread (client mode): 0xd317e1a0
2025-11-17T09:35:47.681 [DEBUG] [Thread-51961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:35:47.695 [DEBUG] [Thread-51961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:35:47.695 [INFO] [Thread-51961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] client lang: <none>
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] server lang: <none>
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] kex follows: False
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] Compression: none
2025-11-17T09:35:47.703 [DEBUG] [Thread-51961] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:35:47.760 [DEBUG] [Thread-51961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:35:47.760 [DEBUG] [Thread-51961] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:35:47.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:35:47.761 [DEBUG] [Thread-51961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:35:47.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:35:47.816 [DEBUG] [Thread-51961] [transport.py] [_log()] userauth is OK
2025-11-17T09:35:47.816 [DEBUG] [Thread-51961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:35:47.816 [DEBUG] [Thread-51961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:35:47.816 [DEBUG] [Thread-51961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:35:47.816 [DEBUG] [Thread-51961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:35:47.835 [INFO] [Thread-51961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:35:47.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:35:47.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:35:48.699 [DEBUG] [Thread-51961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:35:48.699 [DEBUG] [Thread-51961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:35:48.747 [DEBUG] [Thread-51961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:35:48.747 [DEBUG] [Thread-51961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:35:48.756 [DEBUG] [Thread-51961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:35:48.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:35:48.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:35:48.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:35:48.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:35:48.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:35:48.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:35:48.790 [DEBUG] [Thread-51961] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:36:00.530 [DEBUG] [Thread-51963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:36:00.813 [DEBUG] [Thread-51964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:36:15.573 [DEBUG] [Thread-51965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:36:18.560 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:36:18.560 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:36:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:36:18.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:36:18.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:36:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 36, 4), 17.11, 31.09, 0.0, 17.89, 16.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:36:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:36:04
2025-11-17T09:36:19.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:36:19.783 [DEBUG] [Thread-51966] [transport.py] [_log()] starting thread (client mode): 0xd3137b80
2025-11-17T09:36:19.783 [DEBUG] [Thread-51966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:36:19.803 [DEBUG] [Thread-51966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:36:19.803 [INFO] [Thread-51966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] client lang: <none>
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] server lang: <none>
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] kex follows: False
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:36:19.806 [DEBUG] [Thread-51966] [transport.py] [_log()] Compression: none
2025-11-17T09:36:19.807 [DEBUG] [Thread-51966] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:36:19.825 [DEBUG] [Thread-51966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:36:19.825 [DEBUG] [Thread-51966] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:36:19.825 [DEBUG] [Thread-51966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:36:19.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:36:19.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:36:19.825 [DEBUG] [Thread-51966] [transport.py] [_log()] userauth is OK
2025-11-17T09:36:19.825 [DEBUG] [Thread-51966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:36:19.826 [DEBUG] [Thread-51966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:36:19.826 [DEBUG] [Thread-51966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:36:19.826 [DEBUG] [Thread-51966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:36:19.840 [INFO] [Thread-51966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:36:19.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:36:20.667 [DEBUG] [Thread-51966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:36:20.667 [DEBUG] [Thread-51966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:36:20.667 [DEBUG] [Thread-51966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:36:20.708 [DEBUG] [Thread-51966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:36:20.709 [DEBUG] [Thread-51966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:36:20.711 [DEBUG] [Thread-51966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:36:20.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:36:20.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:36:20.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:36:20.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:36:20.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:36:20.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:36:20.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:36:20.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:36:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:36:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.316369 -999.00  +15.80  11.98     38   +1.50 1 1 1 1 1   888    0 15.98 94.96 ----- 12.0 12.0 80.8 20.7 22.3 -27.1 22.0 -23.8 20.8 -24.1 21.2 -24.6
2025-11-17T09:36:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:36:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:36:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.316369
2025-11-17T09:36:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:36:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:36:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:36:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:36:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:36:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:36:04', tmtdew=17.11, humidity=31.09, cloud=0.0, wind=17.89, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:35:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:36:20.730 [DEBUG] [Thread-51966] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:36:20.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:36:20.814 [DEBUG] [Thread-51969] [transport.py] [_log()] starting thread (client mode): 0xd3135a20
2025-11-17T09:36:20.815 [DEBUG] [Thread-51969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:36:20.833 [DEBUG] [Thread-51969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:36:20.833 [INFO] [Thread-51969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] client lang: <none>
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] server lang: <none>
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] kex follows: False
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] Compression: none
2025-11-17T09:36:20.841 [DEBUG] [Thread-51969] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:36:20.898 [DEBUG] [Thread-51969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:36:20.899 [DEBUG] [Thread-51969] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:36:20.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:36:20.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:36:20.899 [DEBUG] [Thread-51969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:36:20.956 [DEBUG] [Thread-51969] [transport.py] [_log()] userauth is OK
2025-11-17T09:36:20.956 [DEBUG] [Thread-51969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:36:20.956 [DEBUG] [Thread-51969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:36:20.956 [DEBUG] [Thread-51969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:36:20.956 [DEBUG] [Thread-51969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:36:20.971 [INFO] [Thread-51969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:36:20.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:36:20.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:36:21.814 [DEBUG] [Thread-51969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:36:21.814 [DEBUG] [Thread-51969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:36:21.862 [DEBUG] [Thread-51969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:36:21.863 [DEBUG] [Thread-51969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:36:21.872 [DEBUG] [Thread-51969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:36:21.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:36:21.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:36:21.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:36:21.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:36:21.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:36:21.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:36:21.906 [DEBUG] [Thread-51969] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:36:30.599 [DEBUG] [Thread-51971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:36:45.645 [DEBUG] [Thread-51972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:36:51.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:36:51.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:36:51.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:36:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 36, 36), 17.32, 30.87, 0.0, 18.26, 16.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:36:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:36:36
2025-11-17T09:36:52.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:36:52.861 [DEBUG] [Thread-51973] [transport.py] [_log()] starting thread (client mode): 0xd07cfd90
2025-11-17T09:36:52.861 [DEBUG] [Thread-51973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:36:52.883 [DEBUG] [Thread-51973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:36:52.883 [INFO] [Thread-51973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:36:52.886 [DEBUG] [Thread-51973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] client lang: <none>
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] server lang: <none>
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] kex follows: False
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] Compression: none
2025-11-17T09:36:52.887 [DEBUG] [Thread-51973] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:36:52.898 [DEBUG] [Thread-51973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:36:52.898 [DEBUG] [Thread-51973] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:36:52.899 [DEBUG] [Thread-51973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:36:52.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:36:52.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:36:52.901 [DEBUG] [Thread-51973] [transport.py] [_log()] userauth is OK
2025-11-17T09:36:52.901 [DEBUG] [Thread-51973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:36:52.901 [DEBUG] [Thread-51973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:36:52.901 [DEBUG] [Thread-51973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:36:52.901 [DEBUG] [Thread-51973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:36:52.937 [INFO] [Thread-51973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:36:52.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:36:53.579 [DEBUG] [Thread-51973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:36:53.579 [DEBUG] [Thread-51973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:36:53.579 [DEBUG] [Thread-51973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:36:53.619 [DEBUG] [Thread-51973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:36:53.619 [DEBUG] [Thread-51973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:36:53.622 [DEBUG] [Thread-51973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:36:53.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:36:53.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:36:53.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:36:53.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:36:53.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:36:53.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:36:53.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:36:53.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:36:53.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:36:53.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.316716 -999.00  +15.70  11.91     37   +1.40 1 1 1 1 1   888    0 16.15 96.11 ----- 11.9 11.9 100.8 18.8 22.2 -29.7 22.1 -23.5 20.7 -24.2 21.3 -24.1
2025-11-17T09:36:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:36:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:36:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.316716
2025-11-17T09:36:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:36:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:36:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:36:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:36:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:36:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:36:36', tmtdew=17.32, humidity=30.87, cloud=0.0, wind=18.26, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:36:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:36:53.648 [DEBUG] [Thread-51973] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:36:53.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:36:53.743 [DEBUG] [Thread-51976] [transport.py] [_log()] starting thread (client mode): 0xd07866b0
2025-11-17T09:36:53.743 [DEBUG] [Thread-51976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:36:53.758 [DEBUG] [Thread-51976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:36:53.758 [INFO] [Thread-51976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:36:53.766 [DEBUG] [Thread-51976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:36:53.766 [DEBUG] [Thread-51976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:36:53.766 [DEBUG] [Thread-51976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:36:53.766 [DEBUG] [Thread-51976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:36:53.766 [DEBUG] [Thread-51976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] client lang: <none>
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] server lang: <none>
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] kex follows: False
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] Compression: none
2025-11-17T09:36:53.767 [DEBUG] [Thread-51976] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:36:53.830 [DEBUG] [Thread-51976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:36:53.831 [DEBUG] [Thread-51976] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:36:53.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:36:53.832 [DEBUG] [Thread-51976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:36:53.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:36:53.888 [DEBUG] [Thread-51976] [transport.py] [_log()] userauth is OK
2025-11-17T09:36:53.888 [DEBUG] [Thread-51976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:36:53.888 [DEBUG] [Thread-51976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:36:53.889 [DEBUG] [Thread-51976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:36:53.889 [DEBUG] [Thread-51976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:36:53.910 [INFO] [Thread-51976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:36:53.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:36:53.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:36:54.769 [DEBUG] [Thread-51976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:36:54.770 [DEBUG] [Thread-51976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:36:54.817 [DEBUG] [Thread-51976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:36:54.817 [DEBUG] [Thread-51976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:36:54.825 [DEBUG] [Thread-51976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:36:54.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:36:54.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:36:54.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:36:54.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:36:54.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:36:54.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:36:54.856 [DEBUG] [Thread-51976] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:37:00.672 [DEBUG] [Thread-51978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:37:00.868 [DEBUG] [Thread-51979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:37:15.712 [DEBUG] [Thread-51980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:37:18.702 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:37:18.703 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:37:24.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:37:24.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:37:24.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:37:25.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 37, 8), 17.3, 30.9, 0.0, 15.62, 16.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:37:25.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:37:08
2025-11-17T09:37:25.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:37:25.776 [DEBUG] [Thread-51981] [transport.py] [_log()] starting thread (client mode): 0xd317cdc0
2025-11-17T09:37:25.776 [DEBUG] [Thread-51981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:37:25.796 [DEBUG] [Thread-51981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:37:25.797 [INFO] [Thread-51981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:37:25.800 [DEBUG] [Thread-51981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:37:25.800 [DEBUG] [Thread-51981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:37:25.800 [DEBUG] [Thread-51981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:37:25.800 [DEBUG] [Thread-51981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:37:25.800 [DEBUG] [Thread-51981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:37:25.800 [DEBUG] [Thread-51981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:37:25.800 [DEBUG] [Thread-51981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] client lang: <none>
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] server lang: <none>
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] kex follows: False
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] Compression: none
2025-11-17T09:37:25.801 [DEBUG] [Thread-51981] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:37:25.822 [DEBUG] [Thread-51981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:37:25.822 [DEBUG] [Thread-51981] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:37:25.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:37:25.823 [DEBUG] [Thread-51981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:37:25.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:37:25.825 [DEBUG] [Thread-51981] [transport.py] [_log()] userauth is OK
2025-11-17T09:37:25.825 [DEBUG] [Thread-51981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:37:25.825 [DEBUG] [Thread-51981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:37:25.825 [DEBUG] [Thread-51981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:37:25.825 [DEBUG] [Thread-51981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:37:25.857 [INFO] [Thread-51981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:37:25.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:37:26.649 [DEBUG] [Thread-51981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:37:26.649 [DEBUG] [Thread-51981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:37:26.650 [DEBUG] [Thread-51981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:37:26.690 [DEBUG] [Thread-51981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:37:26.690 [DEBUG] [Thread-51981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:37:26.693 [DEBUG] [Thread-51981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:37:26.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:37:26.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:37:26.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:37:26.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:37:26.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:37:26.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:37:26.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:37:26.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:37:26.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:37:26.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.317063 -999.00  +15.80  25.05     38   +1.60 1 1 1 1 1   888    0 16.56 103.86 ----- 25.1 25.1 116.6 28.0 22.4 -23.9 22.1 -23.3 20.9 -23.9 21.3 -24.3
2025-11-17T09:37:26.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:37:26.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:37:26.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.317063
2025-11-17T09:37:26.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:37:26.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:37:26.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:37:26.715 [DEBUG] [Thread-51981] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:37:26.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:37:26.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:37:26.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:37:08', tmtdew=17.3, humidity=30.9, cloud=0.0, wind=15.62, temperature=16.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:36:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:37:26.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:37:26.815 [DEBUG] [Thread-51984] [transport.py] [_log()] starting thread (client mode): 0xd07bec20
2025-11-17T09:37:26.815 [DEBUG] [Thread-51984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:37:26.831 [DEBUG] [Thread-51984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:37:26.831 [INFO] [Thread-51984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] client lang: <none>
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] server lang: <none>
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] kex follows: False
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:37:26.839 [DEBUG] [Thread-51984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:37:26.840 [DEBUG] [Thread-51984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:37:26.840 [DEBUG] [Thread-51984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:37:26.840 [DEBUG] [Thread-51984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:37:26.840 [DEBUG] [Thread-51984] [transport.py] [_log()] Compression: none
2025-11-17T09:37:26.840 [DEBUG] [Thread-51984] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:37:26.902 [DEBUG] [Thread-51984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:37:26.902 [DEBUG] [Thread-51984] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:37:26.903 [DEBUG] [Thread-51984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:37:26.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:37:26.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:37:26.960 [DEBUG] [Thread-51984] [transport.py] [_log()] userauth is OK
2025-11-17T09:37:26.960 [DEBUG] [Thread-51984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:37:26.960 [DEBUG] [Thread-51984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:37:26.960 [DEBUG] [Thread-51984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:37:26.960 [DEBUG] [Thread-51984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:37:26.979 [INFO] [Thread-51984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:37:26.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:37:26.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:37:27.895 [DEBUG] [Thread-51984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:37:27.895 [DEBUG] [Thread-51984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:37:27.943 [DEBUG] [Thread-51984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:37:27.943 [DEBUG] [Thread-51984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:37:27.952 [DEBUG] [Thread-51984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:37:27.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:37:27.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:37:27.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:37:27.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:37:27.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:37:27.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:37:27.988 [DEBUG] [Thread-51984] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:37:30.745 [DEBUG] [Thread-51986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:37:45.787 [DEBUG] [Thread-51987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:37:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:37:58.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:37:58.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:37:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 37, 40), 17.41, 30.95, 0.0, 17.33, 16.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:37:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:37:40
2025-11-17T09:37:58.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:37:58.939 [DEBUG] [Thread-51988] [transport.py] [_log()] starting thread (client mode): 0xd317e5f0
2025-11-17T09:37:58.939 [DEBUG] [Thread-51988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:37:58.959 [DEBUG] [Thread-51988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:37:58.959 [INFO] [Thread-51988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] client lang: <none>
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] server lang: <none>
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] kex follows: False
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] Compression: none
2025-11-17T09:37:58.963 [DEBUG] [Thread-51988] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:37:58.979 [DEBUG] [Thread-51988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:37:58.980 [DEBUG] [Thread-51988] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:37:58.980 [DEBUG] [Thread-51988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:37:58.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:37:58.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:37:58.982 [DEBUG] [Thread-51988] [transport.py] [_log()] userauth is OK
2025-11-17T09:37:58.982 [DEBUG] [Thread-51988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:37:58.982 [DEBUG] [Thread-51988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:37:58.982 [DEBUG] [Thread-51988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:37:58.982 [DEBUG] [Thread-51988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:37:59.004 [INFO] [Thread-51988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:37:59.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:37:59.623 [DEBUG] [Thread-51988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:37:59.624 [DEBUG] [Thread-51988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:37:59.624 [DEBUG] [Thread-51988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:37:59.664 [DEBUG] [Thread-51988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:37:59.665 [DEBUG] [Thread-51988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:37:59.667 [DEBUG] [Thread-51988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:37:59.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:37:59.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:37:59.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:37:59.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:37:59.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:37:59.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:37:59.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:37:59.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:37:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:37:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.317410 -999.00  +15.70  15.27     38   +1.40 1 1 1 1 1   888    0 16.61 108.93 ----- 15.3 15.3 113.0 23.6 22.2 -29.0 22.1 -24.0 20.8 -23.9 21.3 -23.9
2025-11-17T09:37:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:37:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:37:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.317410
2025-11-17T09:37:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:37:59.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:37:59.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:37:59.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:37:59.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:37:59.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:37:40', tmtdew=17.41, humidity=30.95, cloud=0.0, wind=17.33, temperature=16.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:37:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:37:59.691 [DEBUG] [Thread-51988] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:37:59.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:38:00.817 [DEBUG] [Thread-51991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:38:00.922 [DEBUG] [Thread-51992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:38:15.856 [DEBUG] [Thread-51993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:38:18.844 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:38:18.845 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:38:30.884 [DEBUG] [Thread-51994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:38:45.914 [DEBUG] [Thread-51995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:39:00.941 [DEBUG] [Thread-51996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:39:00.972 [DEBUG] [Thread-51997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:39:15.976 [DEBUG] [Thread-51998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:39:18.987 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:39:18.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:39:31.003 [DEBUG] [Thread-51999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:39:46.033 [DEBUG] [Thread-52000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:40:01.021 [DEBUG] [Thread-52001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:40:01.065 [DEBUG] [Thread-52002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:40:12.859 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T09:40:16.096 [DEBUG] [Thread-52003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:40:19.128 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:40:19.129 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:40:31.125 [DEBUG] [Thread-52004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:40:42.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:40:42.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:40:42.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:40:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 40, 20), 17.34, 30.95, 0.0, 14.42, 16.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:40:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:40:20
2025-11-17T09:40:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:40:43.823 [DEBUG] [Thread-52005] [transport.py] [_log()] starting thread (client mode): 0xd317d300
2025-11-17T09:40:43.823 [DEBUG] [Thread-52005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:40:43.845 [DEBUG] [Thread-52005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:40:43.845 [INFO] [Thread-52005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:40:43.855 [DEBUG] [Thread-52005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:40:43.855 [DEBUG] [Thread-52005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:40:43.855 [DEBUG] [Thread-52005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] client lang: <none>
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] server lang: <none>
2025-11-17T09:40:43.856 [DEBUG] [Thread-52005] [transport.py] [_log()] kex follows: False
2025-11-17T09:40:43.857 [DEBUG] [Thread-52005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:40:43.857 [DEBUG] [Thread-52005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:40:43.857 [DEBUG] [Thread-52005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:40:43.857 [DEBUG] [Thread-52005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:40:43.857 [DEBUG] [Thread-52005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:40:43.857 [DEBUG] [Thread-52005] [transport.py] [_log()] Compression: none
2025-11-17T09:40:43.857 [DEBUG] [Thread-52005] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:40:43.876 [DEBUG] [Thread-52005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:40:43.877 [DEBUG] [Thread-52005] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:40:43.877 [DEBUG] [Thread-52005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:40:43.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:40:43.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:40:43.879 [DEBUG] [Thread-52005] [transport.py] [_log()] userauth is OK
2025-11-17T09:40:43.880 [DEBUG] [Thread-52005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:40:43.880 [DEBUG] [Thread-52005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:40:43.880 [DEBUG] [Thread-52005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:40:43.880 [DEBUG] [Thread-52005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:40:43.916 [INFO] [Thread-52005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:40:43.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:40:44.549 [DEBUG] [Thread-52005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:40:44.549 [DEBUG] [Thread-52005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:40:44.549 [DEBUG] [Thread-52005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:40:44.589 [DEBUG] [Thread-52005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:40:44.589 [DEBUG] [Thread-52005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:40:44.591 [DEBUG] [Thread-52005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:40:44.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:40:44.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:40:44.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:40:44.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:40:44.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:40:44.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:40:44.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.319494 -999.00  +15.70  13.94     38   +1.40 1 1 1 1 1   888    0 16.61 95.12 ----- 13.9 13.9 119.6 20.7 22.5 -27.1 22.1 -23.6 20.9 -24.6 21.4 -24.7
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.319494
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:40:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:40:20', tmtdew=17.34, humidity=30.95, cloud=0.0, wind=14.42, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:40:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:40:44.608 [DEBUG] [Thread-52005] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:40:44.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:40:44.697 [DEBUG] [Thread-52008] [transport.py] [_log()] starting thread (client mode): 0xd7bc77c0
2025-11-17T09:40:44.697 [DEBUG] [Thread-52008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:40:44.712 [DEBUG] [Thread-52008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:40:44.712 [INFO] [Thread-52008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:40:44.719 [DEBUG] [Thread-52008] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:40:44.719 [DEBUG] [Thread-52008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:40:44.719 [DEBUG] [Thread-52008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:40:44.719 [DEBUG] [Thread-52008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:40:44.719 [DEBUG] [Thread-52008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:40:44.719 [DEBUG] [Thread-52008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:40:44.719 [DEBUG] [Thread-52008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:40:44.719 [DEBUG] [Thread-52008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] client lang: <none>
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] server lang: <none>
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] kex follows: False
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] Compression: none
2025-11-17T09:40:44.720 [DEBUG] [Thread-52008] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:40:44.775 [DEBUG] [Thread-52008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:40:44.775 [DEBUG] [Thread-52008] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:40:44.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:40:44.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:40:44.776 [DEBUG] [Thread-52008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:40:44.832 [DEBUG] [Thread-52008] [transport.py] [_log()] userauth is OK
2025-11-17T09:40:44.832 [DEBUG] [Thread-52008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:40:44.832 [DEBUG] [Thread-52008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:40:44.832 [DEBUG] [Thread-52008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:40:44.832 [DEBUG] [Thread-52008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:40:44.846 [INFO] [Thread-52008] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:40:44.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:40:44.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:40:45.773 [DEBUG] [Thread-52008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:40:45.773 [DEBUG] [Thread-52008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:40:45.821 [DEBUG] [Thread-52008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:40:45.821 [DEBUG] [Thread-52008] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:40:45.829 [DEBUG] [Thread-52008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:40:45.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:40:45.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:40:45.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:40:45.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:40:45.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:40:45.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:40:45.861 [DEBUG] [Thread-52008] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:40:46.155 [DEBUG] [Thread-52010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:41:01.072 [DEBUG] [Thread-52011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:41:01.190 [DEBUG] [Thread-52012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:41:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:41:15.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:41:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:41:16.220 [DEBUG] [Thread-52013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:41:16.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 40, 52), 17.31, 30.8, 0.0, 19.53, 16.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:41:16.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:40:52
2025-11-17T09:41:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:41:16.814 [DEBUG] [Thread-52014] [transport.py] [_log()] starting thread (client mode): 0xd7bc7a30
2025-11-17T09:41:16.814 [DEBUG] [Thread-52014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:41:16.835 [DEBUG] [Thread-52014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:41:16.835 [INFO] [Thread-52014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:41:16.838 [DEBUG] [Thread-52014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] client lang: <none>
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] server lang: <none>
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] kex follows: False
2025-11-17T09:41:16.839 [DEBUG] [Thread-52014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:41:16.840 [DEBUG] [Thread-52014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:41:16.840 [DEBUG] [Thread-52014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:41:16.840 [DEBUG] [Thread-52014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:41:16.840 [DEBUG] [Thread-52014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:41:16.840 [DEBUG] [Thread-52014] [transport.py] [_log()] Compression: none
2025-11-17T09:41:16.840 [DEBUG] [Thread-52014] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:41:16.858 [DEBUG] [Thread-52014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:41:16.859 [DEBUG] [Thread-52014] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:41:16.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:41:16.860 [DEBUG] [Thread-52014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:41:16.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:41:16.863 [DEBUG] [Thread-52014] [transport.py] [_log()] userauth is OK
2025-11-17T09:41:16.863 [DEBUG] [Thread-52014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:41:16.863 [DEBUG] [Thread-52014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:41:16.863 [DEBUG] [Thread-52014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:41:16.863 [DEBUG] [Thread-52014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:41:16.883 [INFO] [Thread-52014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:41:16.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:41:17.535 [DEBUG] [Thread-52014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:41:17.536 [DEBUG] [Thread-52014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:41:17.536 [DEBUG] [Thread-52014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:41:17.577 [DEBUG] [Thread-52014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:41:17.577 [DEBUG] [Thread-52014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:41:17.580 [DEBUG] [Thread-52014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:41:17.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:41:17.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:41:17.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:41:17.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:41:17.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:41:17.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:41:17.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:41:17.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:41:17.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:41:17.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.319841 -999.00  +15.60  12.36     38   +1.40 1 1 1 1 1   888    0 16.73 96.66 ----- 12.4 12.4 94.6 17.9 22.5 -28.2 22.1 -24.4 20.8 -24.8 21.4 -25.0
2025-11-17T09:41:17.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:41:17.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:41:17.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.319841
2025-11-17T09:41:17.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:41:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:41:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:41:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:41:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:41:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:40:52', tmtdew=17.31, humidity=30.8, cloud=0.0, wind=19.53, temperature=16.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:40:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:41:17.606 [DEBUG] [Thread-52014] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:41:17.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:41:17.703 [DEBUG] [Thread-52017] [transport.py] [_log()] starting thread (client mode): 0xd317e350
2025-11-17T09:41:17.703 [DEBUG] [Thread-52017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:41:17.721 [DEBUG] [Thread-52017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:41:17.722 [INFO] [Thread-52017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:41:17.729 [DEBUG] [Thread-52017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:41:17.729 [DEBUG] [Thread-52017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:41:17.729 [DEBUG] [Thread-52017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:41:17.729 [DEBUG] [Thread-52017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:41:17.729 [DEBUG] [Thread-52017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:41:17.729 [DEBUG] [Thread-52017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:41:17.729 [DEBUG] [Thread-52017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] client lang: <none>
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] server lang: <none>
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] kex follows: False
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] Compression: none
2025-11-17T09:41:17.730 [DEBUG] [Thread-52017] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:41:17.788 [DEBUG] [Thread-52017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:41:17.789 [DEBUG] [Thread-52017] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:41:17.789 [DEBUG] [Thread-52017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:41:17.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:41:17.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:41:17.844 [DEBUG] [Thread-52017] [transport.py] [_log()] userauth is OK
2025-11-17T09:41:17.845 [DEBUG] [Thread-52017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:41:17.845 [DEBUG] [Thread-52017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:41:17.845 [DEBUG] [Thread-52017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:41:17.845 [DEBUG] [Thread-52017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:41:17.865 [INFO] [Thread-52017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:41:17.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:41:17.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:41:18.740 [DEBUG] [Thread-52017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:41:18.740 [DEBUG] [Thread-52017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:41:18.788 [DEBUG] [Thread-52017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:41:18.788 [DEBUG] [Thread-52017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:41:18.797 [DEBUG] [Thread-52017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:41:18.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:41:18.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:41:18.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:41:18.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:41:18.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:41:18.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:41:18.832 [DEBUG] [Thread-52017] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:41:19.272 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:41:19.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:41:31.246 [DEBUG] [Thread-52019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:41:46.291 [DEBUG] [Thread-52020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:41:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:41:48.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:41:48.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:41:49.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 41, 24), 17.29, 30.82, 0.0, 16.55, 16.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:41:49.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:41:24
2025-11-17T09:41:49.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:41:49.756 [DEBUG] [Thread-52021] [transport.py] [_log()] starting thread (client mode): 0xd7bc7b80
2025-11-17T09:41:49.756 [DEBUG] [Thread-52021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:41:49.776 [DEBUG] [Thread-52021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:41:49.776 [INFO] [Thread-52021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] client lang: <none>
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] server lang: <none>
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] kex follows: False
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] Compression: none
2025-11-17T09:41:49.780 [DEBUG] [Thread-52021] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:41:49.797 [DEBUG] [Thread-52021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:41:49.797 [DEBUG] [Thread-52021] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:41:49.798 [DEBUG] [Thread-52021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:41:49.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:41:49.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:41:49.800 [DEBUG] [Thread-52021] [transport.py] [_log()] userauth is OK
2025-11-17T09:41:49.800 [DEBUG] [Thread-52021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:41:49.800 [DEBUG] [Thread-52021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:41:49.800 [DEBUG] [Thread-52021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:41:49.800 [DEBUG] [Thread-52021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:41:49.819 [INFO] [Thread-52021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:41:49.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:41:50.456 [DEBUG] [Thread-52021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:41:50.456 [DEBUG] [Thread-52021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:41:50.457 [DEBUG] [Thread-52021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:41:50.497 [DEBUG] [Thread-52021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:41:50.498 [DEBUG] [Thread-52021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:41:50.501 [DEBUG] [Thread-52021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:41:50.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:41:50.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:41:50.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:41:50.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:41:50.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:41:50.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:41:50.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:41:50.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:41:50.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:41:50.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.320188 -999.00  +15.80  14.36     38   +1.50 1 1 1 1 1   888    0 16.28 92.91 ----- 14.4 14.4 122.9 21.2 22.5 -25.7 22.1 -24.6 20.9 -23.5 21.5 -23.8
2025-11-17T09:41:50.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:41:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:41:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.320188
2025-11-17T09:41:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:41:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:41:50.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:41:50.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:41:50.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:41:50.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:41:24', tmtdew=17.29, humidity=30.82, cloud=0.0, wind=16.55, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:41:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:41:50.525 [DEBUG] [Thread-52021] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:41:50.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:41:50.621 [DEBUG] [Thread-52024] [transport.py] [_log()] starting thread (client mode): 0xd07bf0d0
2025-11-17T09:41:50.621 [DEBUG] [Thread-52024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:41:50.637 [DEBUG] [Thread-52024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:41:50.637 [INFO] [Thread-52024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:41:50.644 [DEBUG] [Thread-52024] [transport.py] [_log()] client lang: <none>
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] server lang: <none>
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] kex follows: False
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] Compression: none
2025-11-17T09:41:50.645 [DEBUG] [Thread-52024] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:41:50.708 [DEBUG] [Thread-52024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:41:50.709 [DEBUG] [Thread-52024] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:41:50.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:41:50.710 [DEBUG] [Thread-52024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:41:50.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:41:50.764 [DEBUG] [Thread-52024] [transport.py] [_log()] userauth is OK
2025-11-17T09:41:50.765 [DEBUG] [Thread-52024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:41:50.765 [DEBUG] [Thread-52024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:41:50.765 [DEBUG] [Thread-52024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:41:50.765 [DEBUG] [Thread-52024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:41:50.784 [INFO] [Thread-52024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:41:50.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:41:50.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:41:51.674 [DEBUG] [Thread-52024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:41:51.674 [DEBUG] [Thread-52024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:41:51.725 [DEBUG] [Thread-52024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:41:51.725 [DEBUG] [Thread-52024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:41:51.736 [DEBUG] [Thread-52024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:41:51.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:41:51.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:41:51.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:41:51.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:41:51.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:41:51.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:41:51.775 [DEBUG] [Thread-52024] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:42:01.121 [DEBUG] [Thread-52026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:42:01.323 [DEBUG] [Thread-52027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:42:16.365 [DEBUG] [Thread-52028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:42:19.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:42:19.415 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:42:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:42:21.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:42:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:42:22.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 41, 56), 17.08, 31.12, 0.0, 11.98, 16.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:42:22.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:41:56
2025-11-17T09:42:22.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:42:22.716 [DEBUG] [Thread-52029] [transport.py] [_log()] starting thread (client mode): 0xd7bc5a80
2025-11-17T09:42:22.717 [DEBUG] [Thread-52029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:42:22.739 [DEBUG] [Thread-52029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:42:22.739 [INFO] [Thread-52029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] client lang: <none>
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] server lang: <none>
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] kex follows: False
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] Compression: none
2025-11-17T09:42:22.742 [DEBUG] [Thread-52029] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:42:22.751 [DEBUG] [Thread-52029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:42:22.752 [DEBUG] [Thread-52029] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:42:22.752 [DEBUG] [Thread-52029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:42:22.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:42:22.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:42:22.754 [DEBUG] [Thread-52029] [transport.py] [_log()] userauth is OK
2025-11-17T09:42:22.754 [DEBUG] [Thread-52029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:42:22.754 [DEBUG] [Thread-52029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:42:22.754 [DEBUG] [Thread-52029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:42:22.754 [DEBUG] [Thread-52029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:42:22.775 [INFO] [Thread-52029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:42:22.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:42:23.439 [DEBUG] [Thread-52029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:42:23.439 [DEBUG] [Thread-52029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:42:23.440 [DEBUG] [Thread-52029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:42:23.480 [DEBUG] [Thread-52029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:42:23.481 [DEBUG] [Thread-52029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:42:23.484 [DEBUG] [Thread-52029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:42:23.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:42:23.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:42:23.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:42:23.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:42:23.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:42:23.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:42:23.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:42:23.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:42:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:42:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.320535 -999.00  +15.80  10.71     37   +1.40 1 1 1 1 1   888    0 16.56 90.24 ----- 10.7 10.7 112.3 22.7 22.5 -24.6 22.1 -23.8 20.9 -24.0 21.5 -24.3
2025-11-17T09:42:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:42:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:42:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.320535
2025-11-17T09:42:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:42:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:42:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:42:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:42:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:42:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:41:56', tmtdew=17.08, humidity=31.12, cloud=0.0, wind=11.98, temperature=16.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:41:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:42:23.512 [DEBUG] [Thread-52029] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:42:23.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:42:23.610 [DEBUG] [Thread-52032] [transport.py] [_log()] starting thread (client mode): 0xd07be1a0
2025-11-17T09:42:23.610 [DEBUG] [Thread-52032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:42:23.625 [DEBUG] [Thread-52032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:42:23.625 [INFO] [Thread-52032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:42:23.632 [DEBUG] [Thread-52032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:42:23.632 [DEBUG] [Thread-52032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] client lang: <none>
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] server lang: <none>
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] kex follows: False
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] Compression: none
2025-11-17T09:42:23.633 [DEBUG] [Thread-52032] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:42:23.692 [DEBUG] [Thread-52032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:42:23.693 [DEBUG] [Thread-52032] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:42:23.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:42:23.694 [DEBUG] [Thread-52032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:42:23.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:42:23.752 [DEBUG] [Thread-52032] [transport.py] [_log()] userauth is OK
2025-11-17T09:42:23.753 [DEBUG] [Thread-52032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:42:23.753 [DEBUG] [Thread-52032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:42:23.753 [DEBUG] [Thread-52032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:42:23.753 [DEBUG] [Thread-52032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:42:23.772 [INFO] [Thread-52032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:42:23.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:42:23.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:42:24.633 [DEBUG] [Thread-52032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:42:24.633 [DEBUG] [Thread-52032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:42:24.681 [DEBUG] [Thread-52032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:42:24.682 [DEBUG] [Thread-52032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:42:24.690 [DEBUG] [Thread-52032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:42:24.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:42:24.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:42:24.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:42:24.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:42:24.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:42:24.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:42:24.725 [DEBUG] [Thread-52032] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:42:31.396 [DEBUG] [Thread-52034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:42:46.441 [DEBUG] [Thread-52035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:42:54.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:42:54.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:42:54.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:42:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 42, 28), 17.01, 31.27, 0.0, 12.35, 16.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:42:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:42:28
2025-11-17T09:42:55.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:42:55.672 [DEBUG] [Thread-52036] [transport.py] [_log()] starting thread (client mode): 0xd317ccd0
2025-11-17T09:42:55.672 [DEBUG] [Thread-52036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:42:55.692 [DEBUG] [Thread-52036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:42:55.692 [INFO] [Thread-52036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:42:55.695 [DEBUG] [Thread-52036] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] client lang: <none>
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] server lang: <none>
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] kex follows: False
2025-11-17T09:42:55.696 [DEBUG] [Thread-52036] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:42:55.697 [DEBUG] [Thread-52036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:42:55.697 [DEBUG] [Thread-52036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:42:55.697 [DEBUG] [Thread-52036] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:42:55.697 [DEBUG] [Thread-52036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:42:55.697 [DEBUG] [Thread-52036] [transport.py] [_log()] Compression: none
2025-11-17T09:42:55.697 [DEBUG] [Thread-52036] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:42:55.715 [DEBUG] [Thread-52036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:42:55.716 [DEBUG] [Thread-52036] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:42:55.716 [DEBUG] [Thread-52036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:42:55.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:42:55.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:42:55.718 [DEBUG] [Thread-52036] [transport.py] [_log()] userauth is OK
2025-11-17T09:42:55.719 [DEBUG] [Thread-52036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:42:55.719 [DEBUG] [Thread-52036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:42:55.719 [DEBUG] [Thread-52036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:42:55.719 [DEBUG] [Thread-52036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:42:55.756 [INFO] [Thread-52036] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:42:55.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:42:56.328 [DEBUG] [Thread-52036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:42:56.328 [DEBUG] [Thread-52036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:42:56.328 [DEBUG] [Thread-52036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:42:56.369 [DEBUG] [Thread-52036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:42:56.369 [DEBUG] [Thread-52036] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:42:56.372 [DEBUG] [Thread-52036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:42:56.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:42:56.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:42:56.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:42:56.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:42:56.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:42:56.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:42:56.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:42:56.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:42:56.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:42:56.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.320883 -999.00  +16.20  16.28     37   +1.70 1 1 1 1 1   888    0 16.22 83.74 ----- 16.3 16.3 116.8 24.8 22.8 -26.7 22.2 -23.4 21.0 -23.9 21.5 -24.4
2025-11-17T09:42:56.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:42:56.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:42:56.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.320883
2025-11-17T09:42:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:42:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:42:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:42:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:42:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:42:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:42:28', tmtdew=17.01, humidity=31.27, cloud=0.0, wind=12.35, temperature=16.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:42:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:42:56.396 [DEBUG] [Thread-52036] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:42:56.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:42:56.492 [DEBUG] [Thread-52039] [transport.py] [_log()] starting thread (client mode): 0xd317c790
2025-11-17T09:42:56.493 [DEBUG] [Thread-52039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:42:56.507 [DEBUG] [Thread-52039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:42:56.508 [INFO] [Thread-52039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:42:56.515 [DEBUG] [Thread-52039] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:42:56.515 [DEBUG] [Thread-52039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] client lang: <none>
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] server lang: <none>
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] kex follows: False
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:42:56.516 [DEBUG] [Thread-52039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:42:56.517 [DEBUG] [Thread-52039] [transport.py] [_log()] Compression: none
2025-11-17T09:42:56.517 [DEBUG] [Thread-52039] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:42:56.573 [DEBUG] [Thread-52039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:42:56.573 [DEBUG] [Thread-52039] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:42:56.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:42:56.575 [DEBUG] [Thread-52039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:42:56.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:42:56.628 [DEBUG] [Thread-52039] [transport.py] [_log()] userauth is OK
2025-11-17T09:42:56.629 [DEBUG] [Thread-52039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:42:56.629 [DEBUG] [Thread-52039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:42:56.629 [DEBUG] [Thread-52039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:42:56.629 [DEBUG] [Thread-52039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:42:56.648 [INFO] [Thread-52039] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:42:56.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:42:56.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:42:57.525 [DEBUG] [Thread-52039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:42:57.525 [DEBUG] [Thread-52039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:42:57.573 [DEBUG] [Thread-52039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:42:57.573 [DEBUG] [Thread-52039] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:42:57.582 [DEBUG] [Thread-52039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:42:57.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:42:57.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:42:57.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:42:57.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:42:57.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:42:57.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:42:57.617 [DEBUG] [Thread-52039] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:43:01.169 [DEBUG] [Thread-52041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:43:01.467 [DEBUG] [Thread-52042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:43:16.502 [DEBUG] [Thread-52043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:43:19.556 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:43:19.557 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:43:27.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:43:27.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:43:27.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:43:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 42, 28), 17.26, 30.77, 0.0, 17.75, 16.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:43:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:42:28
2025-11-17T09:43:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:43:28.531 [DEBUG] [Thread-52044] [transport.py] [_log()] starting thread (client mode): 0xd317e6b0
2025-11-17T09:43:28.532 [DEBUG] [Thread-52044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:43:28.552 [DEBUG] [Thread-52044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:43:28.553 [INFO] [Thread-52044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:43:28.556 [DEBUG] [Thread-52044] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:43:28.556 [DEBUG] [Thread-52044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:43:28.556 [DEBUG] [Thread-52044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:43:28.556 [DEBUG] [Thread-52044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:43:28.556 [DEBUG] [Thread-52044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:43:28.556 [DEBUG] [Thread-52044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:43:28.556 [DEBUG] [Thread-52044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:43:28.556 [DEBUG] [Thread-52044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] client lang: <none>
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] server lang: <none>
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] kex follows: False
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] Compression: none
2025-11-17T09:43:28.557 [DEBUG] [Thread-52044] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:43:28.576 [DEBUG] [Thread-52044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:43:28.577 [DEBUG] [Thread-52044] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:43:28.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:43:28.578 [DEBUG] [Thread-52044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:43:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:43:28.580 [DEBUG] [Thread-52044] [transport.py] [_log()] userauth is OK
2025-11-17T09:43:28.580 [DEBUG] [Thread-52044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:43:28.580 [DEBUG] [Thread-52044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:43:28.580 [DEBUG] [Thread-52044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:43:28.580 [DEBUG] [Thread-52044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:43:28.607 [INFO] [Thread-52044] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:43:28.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:43:29.234 [DEBUG] [Thread-52044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:43:29.234 [DEBUG] [Thread-52044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:43:29.235 [DEBUG] [Thread-52044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:43:29.275 [DEBUG] [Thread-52044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:43:29.276 [DEBUG] [Thread-52044] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:43:29.278 [DEBUG] [Thread-52044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:43:29.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:43:29.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:43:29.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:43:29.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:43:29.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:43:29.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:43:29.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:43:29.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:43:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:43:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.321577 -999.00  +16.10  19.26     37   +1.50 1 1 1 1 1   888    0 16.02 78.84 ----- 19.3 19.3 115.8 22.4 22.8 -26.8 22.2 -24.2 20.9 -24.6 21.6 -24.7
2025-11-17T09:43:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:43:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:43:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.321577
2025-11-17T09:43:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:43:29.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:43:29.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:43:29.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:43:29.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:43:29.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:42:28', tmtdew=17.26, humidity=30.77, cloud=0.0, wind=17.75, temperature=16.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:43:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:43:29.306 [DEBUG] [Thread-52044] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:43:29.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:43:29.402 [DEBUG] [Thread-52047] [transport.py] [_log()] starting thread (client mode): 0xd07cca60
2025-11-17T09:43:29.402 [DEBUG] [Thread-52047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:43:29.419 [DEBUG] [Thread-52047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:43:29.419 [INFO] [Thread-52047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:43:29.429 [DEBUG] [Thread-52047] [transport.py] [_log()] client lang: <none>
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] server lang: <none>
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] kex follows: False
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] Compression: none
2025-11-17T09:43:29.430 [DEBUG] [Thread-52047] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:43:29.492 [DEBUG] [Thread-52047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:43:29.493 [DEBUG] [Thread-52047] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:43:29.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:43:29.494 [DEBUG] [Thread-52047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:43:29.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:43:29.553 [DEBUG] [Thread-52047] [transport.py] [_log()] userauth is OK
2025-11-17T09:43:29.554 [DEBUG] [Thread-52047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:43:29.554 [DEBUG] [Thread-52047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:43:29.554 [DEBUG] [Thread-52047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:43:29.554 [DEBUG] [Thread-52047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:43:29.573 [INFO] [Thread-52047] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:43:29.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:43:29.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:43:30.528 [DEBUG] [Thread-52047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:43:30.529 [DEBUG] [Thread-52047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:43:30.576 [DEBUG] [Thread-52047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:43:30.576 [DEBUG] [Thread-52047] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:43:30.585 [DEBUG] [Thread-52047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:43:30.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:43:30.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:43: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') -> 00000000
2025-11-17T09:43:30.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:43:30.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:43:30.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:43:30.621 [DEBUG] [Thread-52047] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:43:31.526 [DEBUG] [Thread-52049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:43:46.578 [DEBUG] [Thread-52050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:44:00.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:44:00.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:44:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:44:01.219 [DEBUG] [Thread-52051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:44:01.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 43, 32), 17.41, 30.49, 0.0, 21.1, 16.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:44:01.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:43:32
2025-11-17T09:44:01.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:44:01.598 [DEBUG] [Thread-52052] [transport.py] [_log()] starting thread (client mode): 0xd07cc520
2025-11-17T09:44:01.598 [DEBUG] [Thread-52052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:44:01.611 [DEBUG] [Thread-52053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:44:01.617 [DEBUG] [Thread-52052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:44:01.618 [INFO] [Thread-52052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:44:01.620 [DEBUG] [Thread-52052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:44:01.620 [DEBUG] [Thread-52052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] client lang: <none>
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] server lang: <none>
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] kex follows: False
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] Compression: none
2025-11-17T09:44:01.621 [DEBUG] [Thread-52052] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:44:01.635 [DEBUG] [Thread-52052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:44:01.635 [DEBUG] [Thread-52052] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:44:01.635 [DEBUG] [Thread-52052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:44:01.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:44:01.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:44:01.636 [DEBUG] [Thread-52052] [transport.py] [_log()] userauth is OK
2025-11-17T09:44:01.636 [DEBUG] [Thread-52052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:44:01.636 [DEBUG] [Thread-52052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:44:01.636 [DEBUG] [Thread-52052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:44:01.636 [DEBUG] [Thread-52052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:44:01.651 [INFO] [Thread-52052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:44:01.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:44:02.267 [DEBUG] [Thread-52052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:44:02.267 [DEBUG] [Thread-52052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:44:02.267 [DEBUG] [Thread-52052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:44:02.308 [DEBUG] [Thread-52052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:44:02.308 [DEBUG] [Thread-52052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:44:02.310 [DEBUG] [Thread-52052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:44:02.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:44:02.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:44:02.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:44:02.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:44:02.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:44:02.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:44:02.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:44:02.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.321924 -999.00  +16.10  14.29     37   +1.60 1 1 1 1 1   888    0 16.31 82.05 ----- 14.3 14.3 84.1 28.3 22.7 -24.4 22.1 -24.0 21.0 -24.0 21.6 -24.6
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.321924
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:44:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:43:32', tmtdew=17.41, humidity=30.49, cloud=0.0, wind=21.1, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:43:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:44:02.323 [DEBUG] [Thread-52052] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:44:02.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:44:02.412 [DEBUG] [Thread-52056] [transport.py] [_log()] starting thread (client mode): 0xd31376a0
2025-11-17T09:44:02.412 [DEBUG] [Thread-52056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:44:02.426 [DEBUG] [Thread-52056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:44:02.427 [INFO] [Thread-52056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:44:02.434 [DEBUG] [Thread-52056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:44:02.434 [DEBUG] [Thread-52056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:44:02.434 [DEBUG] [Thread-52056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:44:02.434 [DEBUG] [Thread-52056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:44:02.434 [DEBUG] [Thread-52056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:44:02.434 [DEBUG] [Thread-52056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:44:02.434 [DEBUG] [Thread-52056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] client lang: <none>
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] server lang: <none>
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] kex follows: False
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] Compression: none
2025-11-17T09:44:02.435 [DEBUG] [Thread-52056] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:44:02.491 [DEBUG] [Thread-52056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:44:02.491 [DEBUG] [Thread-52056] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:44:02.491 [DEBUG] [Thread-52056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:44:02.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:44:02.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:44:02.548 [DEBUG] [Thread-52056] [transport.py] [_log()] userauth is OK
2025-11-17T09:44:02.548 [DEBUG] [Thread-52056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:44:02.548 [DEBUG] [Thread-52056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:44:02.548 [DEBUG] [Thread-52056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:44:02.548 [DEBUG] [Thread-52056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:44:02.563 [INFO] [Thread-52056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:44:02.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:44:02.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:44:03.418 [DEBUG] [Thread-52056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:44:03.419 [DEBUG] [Thread-52056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:44:03.466 [DEBUG] [Thread-52056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:44:03.466 [DEBUG] [Thread-52056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:44:03.475 [DEBUG] [Thread-52056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:44:03.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:44:03.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:44:03.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:44:03.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:44:03.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:44:03.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:44:03.513 [DEBUG] [Thread-52056] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:44:16.639 [DEBUG] [Thread-52058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:44:19.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:44:19.700 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:44:31.682 [DEBUG] [Thread-52059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:44:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:44:33.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:44:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:44:34.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 44, 4), 17.58, 30.17, 0.0, 19.32, 16.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:44:34.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:44:04
2025-11-17T09:44:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:44:34.440 [DEBUG] [Thread-52060] [transport.py] [_log()] starting thread (client mode): 0xd07cde70
2025-11-17T09:44:34.440 [DEBUG] [Thread-52060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:44:34.462 [DEBUG] [Thread-52060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:44:34.462 [INFO] [Thread-52060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:44:34.465 [DEBUG] [Thread-52060] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] client lang: <none>
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] server lang: <none>
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] kex follows: False
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] Compression: none
2025-11-17T09:44:34.466 [DEBUG] [Thread-52060] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:44:34.483 [DEBUG] [Thread-52060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:44:34.483 [DEBUG] [Thread-52060] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:44:34.484 [DEBUG] [Thread-52060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:44:34.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:44:34.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:44:34.485 [DEBUG] [Thread-52060] [transport.py] [_log()] userauth is OK
2025-11-17T09:44:34.486 [DEBUG] [Thread-52060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:44:34.486 [DEBUG] [Thread-52060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:44:34.486 [DEBUG] [Thread-52060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:44:34.486 [DEBUG] [Thread-52060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:44:34.509 [INFO] [Thread-52060] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:44:34.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:44:35.111 [DEBUG] [Thread-52060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:44:35.111 [DEBUG] [Thread-52060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:44:35.111 [DEBUG] [Thread-52060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:44:35.152 [DEBUG] [Thread-52060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:44:35.152 [DEBUG] [Thread-52060] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:44:35.155 [DEBUG] [Thread-52060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:44:35.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:44:35.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:44:35.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:44:35.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:44:35.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:44:35.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:44:35.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:44:35.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:44:35.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:44:35.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.322271 -999.00  +16.20  15.24     37   +1.50 1 1 1 1 1   888    0 16.47 87.65 ----- 15.2 15.2 119.7 21.9 22.6 -25.1 22.3 -23.6 21.1 -24.0 21.7 -24.7
2025-11-17T09:44:35.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:44:35.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:44:35.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.322271
2025-11-17T09:44:35.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:44:35.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:44:35.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:44:35.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:44:35.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:44:35.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:44:04', tmtdew=17.58, humidity=30.17, cloud=0.0, wind=19.32, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:44:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:44:35.181 [DEBUG] [Thread-52060] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:44:35.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:44:35.279 [DEBUG] [Thread-52063] [transport.py] [_log()] starting thread (client mode): 0xd07bcc70
2025-11-17T09:44:35.280 [DEBUG] [Thread-52063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:44:35.296 [DEBUG] [Thread-52063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:44:35.296 [INFO] [Thread-52063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:44:35.304 [DEBUG] [Thread-52063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:44:35.304 [DEBUG] [Thread-52063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:44:35.304 [DEBUG] [Thread-52063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] client lang: <none>
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] server lang: <none>
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] kex follows: False
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] Compression: none
2025-11-17T09:44:35.305 [DEBUG] [Thread-52063] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:44:35.363 [DEBUG] [Thread-52063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:44:35.364 [DEBUG] [Thread-52063] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:44:35.364 [DEBUG] [Thread-52063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:44:35.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:44:35.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:44:35.421 [DEBUG] [Thread-52063] [transport.py] [_log()] userauth is OK
2025-11-17T09:44:35.421 [DEBUG] [Thread-52063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:44:35.421 [DEBUG] [Thread-52063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:44:35.421 [DEBUG] [Thread-52063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:44:35.421 [DEBUG] [Thread-52063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:44:35.440 [INFO] [Thread-52063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:44:35.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:44:35.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:44:36.280 [DEBUG] [Thread-52063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:44:36.280 [DEBUG] [Thread-52063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:44:36.329 [DEBUG] [Thread-52063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:44:36.329 [DEBUG] [Thread-52063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:44:36.337 [DEBUG] [Thread-52063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:44:36.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:44: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')
2025-11-17T09:44: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') -> 00000000
2025-11-17T09:44:36.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:44:36.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:44:36.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:44:36.368 [DEBUG] [Thread-52063] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:44:46.712 [DEBUG] [Thread-52065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:45:01.287 [DEBUG] [Thread-52066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:45:01.763 [DEBUG] [Thread-52067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:45:06.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:45:06.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:45:06.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:45:07.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 44, 36), 17.78, 30.07, 0.0, 15.81, 16.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:45:07.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:44:36
2025-11-17T09:45:07.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:45:07.270 [DEBUG] [Thread-52068] [transport.py] [_log()] starting thread (client mode): 0xd3137250
2025-11-17T09:45:07.271 [DEBUG] [Thread-52068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:45:07.291 [DEBUG] [Thread-52068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:45:07.291 [INFO] [Thread-52068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:45:07.294 [DEBUG] [Thread-52068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:45:07.294 [DEBUG] [Thread-52068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] client lang: <none>
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] server lang: <none>
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] kex follows: False
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:45:07.295 [DEBUG] [Thread-52068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:45:07.296 [DEBUG] [Thread-52068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:45:07.296 [DEBUG] [Thread-52068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:45:07.296 [DEBUG] [Thread-52068] [transport.py] [_log()] Compression: none
2025-11-17T09:45:07.296 [DEBUG] [Thread-52068] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:45:07.314 [DEBUG] [Thread-52068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:45:07.315 [DEBUG] [Thread-52068] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:45:07.316 [DEBUG] [Thread-52068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:45:07.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:45:07.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:45:07.356 [DEBUG] [Thread-52068] [transport.py] [_log()] userauth is OK
2025-11-17T09:45:07.356 [DEBUG] [Thread-52068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:45:07.356 [DEBUG] [Thread-52068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:45:07.356 [DEBUG] [Thread-52068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:45:07.357 [DEBUG] [Thread-52068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:45:07.388 [INFO] [Thread-52068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:45:07.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:45:09.867 [DEBUG] [Thread-52068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:45:09.867 [DEBUG] [Thread-52068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:45:09.868 [DEBUG] [Thread-52068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:45:09.908 [DEBUG] [Thread-52068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:45:09.908 [DEBUG] [Thread-52068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:45:09.911 [DEBUG] [Thread-52068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:45:09.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:45:09.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:45:09.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:45:09.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:45:09.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:45:09.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:45:09.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:45:09.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.322619 -999.00  +16.10  17.44     36   +1.40 1 1 1 1 1   888    0 16.38 81.95 ----- 17.4 17.4 111.3 21.4 22.7 -27.1 22.3 -23.7 21.1 -23.9 21.7 -24.8
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.322619
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:45:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:44:36', tmtdew=17.78, humidity=30.07, cloud=0.0, wind=15.81, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:44:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:45:09.984 [DEBUG] [Thread-52068] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:45:10.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:45:10.071 [DEBUG] [Thread-52071] [transport.py] [_log()] starting thread (client mode): 0xd317c2b0
2025-11-17T09:45:10.071 [DEBUG] [Thread-52071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:45:10.087 [DEBUG] [Thread-52071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:45:10.087 [INFO] [Thread-52071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] client lang: <none>
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] server lang: <none>
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] kex follows: False
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] Compression: none
2025-11-17T09:45:10.095 [DEBUG] [Thread-52071] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:45:10.156 [DEBUG] [Thread-52071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:45:10.156 [DEBUG] [Thread-52071] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:45:10.156 [DEBUG] [Thread-52071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:45:10.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:45:10.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:45:10.212 [DEBUG] [Thread-52071] [transport.py] [_log()] userauth is OK
2025-11-17T09:45:10.212 [DEBUG] [Thread-52071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:45:10.212 [DEBUG] [Thread-52071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:45:10.212 [DEBUG] [Thread-52071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:45:10.212 [DEBUG] [Thread-52071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:45:10.227 [INFO] [Thread-52071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:45:10.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:45:10.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:45:11.060 [DEBUG] [Thread-52071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:45:11.060 [DEBUG] [Thread-52071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:45:11.107 [DEBUG] [Thread-52071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:45:11.107 [DEBUG] [Thread-52071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:45:11.116 [DEBUG] [Thread-52071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:45:11.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:45:11.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:45:11.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:45:11.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:45:11.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:45:11.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:45:11.150 [DEBUG] [Thread-52071] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:45:16.792 [DEBUG] [Thread-52073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:45:19.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:45:19.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:45:31.831 [DEBUG] [Thread-52074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:45:41.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:45:41.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:45:41.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:45:41.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 45, 8), 17.72, 30.19, 0.0, 17.96, 16.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:45:41.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:45:08
2025-11-17T09:45:41.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:45:42.153 [DEBUG] [Thread-52075] [transport.py] [_log()] starting thread (client mode): 0xd317ed70
2025-11-17T09:45:42.153 [DEBUG] [Thread-52075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:45:42.173 [DEBUG] [Thread-52075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:45:42.173 [INFO] [Thread-52075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] client lang: <none>
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] server lang: <none>
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] kex follows: False
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] Compression: none
2025-11-17T09:45:42.176 [DEBUG] [Thread-52075] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:45:42.192 [DEBUG] [Thread-52075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:45:42.192 [DEBUG] [Thread-52075] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:45:42.192 [DEBUG] [Thread-52075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:45:42.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:45:42.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:45:42.193 [DEBUG] [Thread-52075] [transport.py] [_log()] userauth is OK
2025-11-17T09:45:42.193 [DEBUG] [Thread-52075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:45:42.193 [DEBUG] [Thread-52075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:45:42.193 [DEBUG] [Thread-52075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:45:42.193 [DEBUG] [Thread-52075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:45:42.208 [INFO] [Thread-52075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:45:42.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:45:42.856 [DEBUG] [Thread-52075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:45:42.857 [DEBUG] [Thread-52075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:45:42.857 [DEBUG] [Thread-52075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:45:42.897 [DEBUG] [Thread-52075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:45:42.898 [DEBUG] [Thread-52075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:45:42.901 [DEBUG] [Thread-52075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:45:42.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:45:42.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:45:42.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:45:42.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:45:42.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:45:42.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:45:42.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:45:42.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:45:42.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:45:42.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.322966 -999.00  +15.90  17.09     36   +1.20 1 1 1 1 1   888    0 16.11 69.96 ----- 17.1 17.1 54.0 19.2 22.6 -24.6 22.3 -24.1 21.1 -25.2 21.7 -24.3
2025-11-17T09:45:42.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:45:42.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:45:42.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.322966
2025-11-17T09:45:42.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:45:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:45:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:45:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:45:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:45:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:45:08', tmtdew=17.72, humidity=30.19, cloud=0.0, wind=17.96, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:45:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:45:42.924 [DEBUG] [Thread-52075] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:45:43.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:45:43.022 [DEBUG] [Thread-52078] [transport.py] [_log()] starting thread (client mode): 0xd07cd6c0
2025-11-17T09:45:43.022 [DEBUG] [Thread-52078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:45:43.037 [DEBUG] [Thread-52078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:45:43.037 [INFO] [Thread-52078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:45:43.044 [DEBUG] [Thread-52078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] client lang: <none>
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] server lang: <none>
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] kex follows: False
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] Compression: none
2025-11-17T09:45:43.045 [DEBUG] [Thread-52078] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:45:43.106 [DEBUG] [Thread-52078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:45:43.107 [DEBUG] [Thread-52078] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:45:43.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:45:43.107 [DEBUG] [Thread-52078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:45:43.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:45:43.165 [DEBUG] [Thread-52078] [transport.py] [_log()] userauth is OK
2025-11-17T09:45:43.165 [DEBUG] [Thread-52078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:45:43.165 [DEBUG] [Thread-52078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:45:43.165 [DEBUG] [Thread-52078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:45:43.165 [DEBUG] [Thread-52078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:45:43.186 [INFO] [Thread-52078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:45:43.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:45:43.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:45:44.044 [DEBUG] [Thread-52078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:45:44.044 [DEBUG] [Thread-52078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:45:44.093 [DEBUG] [Thread-52078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:45:44.093 [DEBUG] [Thread-52078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:45:44.103 [DEBUG] [Thread-52078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:45:44.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:45:44.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:45:44.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:45:44.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:45:44.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:45:44.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:45:44.143 [DEBUG] [Thread-52078] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:45:46.865 [DEBUG] [Thread-52080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:46:01.340 [DEBUG] [Thread-52081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:46:01.906 [DEBUG] [Thread-52082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:46:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:46:14.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:46:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:46:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 45, 40), 17.58, 30.57, 0.0, 13.23, 16.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:46:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:45:40
2025-11-17T09:46:14.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:46:15.077 [DEBUG] [Thread-52083] [transport.py] [_log()] starting thread (client mode): 0xd3163d90
2025-11-17T09:46:15.077 [DEBUG] [Thread-52083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:46:15.095 [DEBUG] [Thread-52083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:46:15.095 [INFO] [Thread-52083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:46:15.098 [DEBUG] [Thread-52083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:46:15.098 [DEBUG] [Thread-52083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] client lang: <none>
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] server lang: <none>
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] kex follows: False
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] Compression: none
2025-11-17T09:46:15.099 [DEBUG] [Thread-52083] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:46:15.117 [DEBUG] [Thread-52083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:46:15.118 [DEBUG] [Thread-52083] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:46:15.118 [DEBUG] [Thread-52083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:46:15.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:46:15.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:46:15.120 [DEBUG] [Thread-52083] [transport.py] [_log()] userauth is OK
2025-11-17T09:46:15.120 [DEBUG] [Thread-52083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:46:15.120 [DEBUG] [Thread-52083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:46:15.120 [DEBUG] [Thread-52083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:46:15.120 [DEBUG] [Thread-52083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:46:15.138 [INFO] [Thread-52083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:46:15.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:46:15.738 [DEBUG] [Thread-52083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:46:15.738 [DEBUG] [Thread-52083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:46:15.738 [DEBUG] [Thread-52083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:46:15.778 [DEBUG] [Thread-52083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:46:15.778 [DEBUG] [Thread-52083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:46:15.781 [DEBUG] [Thread-52083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:46:15.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:46:15.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:46:15.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:46:15.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:46:15.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:46:15.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:46:15.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:46:15.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:46:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:46:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.323313 -999.00  +15.90  14.77     37   +1.40 1 1 1 1 1   888    0 15.81 67.59 ----- 14.8 14.8 104.5 22.6 22.9 -24.2 22.3 -23.3 21.1 -24.3 21.7 -24.7
2025-11-17T09:46:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:46:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:46:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.323313
2025-11-17T09:46:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:46:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:46:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:46:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:46:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:46:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:45:40', tmtdew=17.58, humidity=30.57, cloud=0.0, wind=13.23, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:45:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:46:15.804 [DEBUG] [Thread-52083] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:46:15.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:46:15.898 [DEBUG] [Thread-52086] [transport.py] [_log()] starting thread (client mode): 0xd3163880
2025-11-17T09:46:15.898 [DEBUG] [Thread-52086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:46:15.914 [DEBUG] [Thread-52086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:46:15.915 [INFO] [Thread-52086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] client lang: <none>
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] server lang: <none>
2025-11-17T09:46:15.922 [DEBUG] [Thread-52086] [transport.py] [_log()] kex follows: False
2025-11-17T09:46:15.923 [DEBUG] [Thread-52086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:46:15.923 [DEBUG] [Thread-52086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:46:15.923 [DEBUG] [Thread-52086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:46:15.923 [DEBUG] [Thread-52086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:46:15.923 [DEBUG] [Thread-52086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:46:15.923 [DEBUG] [Thread-52086] [transport.py] [_log()] Compression: none
2025-11-17T09:46:15.923 [DEBUG] [Thread-52086] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:46:15.984 [DEBUG] [Thread-52086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:46:15.985 [DEBUG] [Thread-52086] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:46:15.985 [DEBUG] [Thread-52086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:46:15.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:46:15.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:46:16.041 [DEBUG] [Thread-52086] [transport.py] [_log()] userauth is OK
2025-11-17T09:46:16.041 [DEBUG] [Thread-52086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:46:16.041 [DEBUG] [Thread-52086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:46:16.041 [DEBUG] [Thread-52086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:46:16.041 [DEBUG] [Thread-52086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:46:16.060 [INFO] [Thread-52086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:46:16.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:46:16.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:46:16.935 [DEBUG] [Thread-52088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:46:16.945 [DEBUG] [Thread-52086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:46:16.945 [DEBUG] [Thread-52086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:46:16.992 [DEBUG] [Thread-52086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:46:16.992 [DEBUG] [Thread-52086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:46:17.001 [DEBUG] [Thread-52086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:46:17.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:46:17.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:46:17.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:46:17.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:46:17.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:46:17.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:46:17.035 [DEBUG] [Thread-52086] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:46:19.982 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:46:19.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:46:31.983 [DEBUG] [Thread-52089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:46:47.013 [DEBUG] [Thread-52090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:46:47.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:46:47.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:46:47.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:46:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 46, 44), 17.63, 30.16, 0.0, 19.55, 16.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:46:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:46:44
2025-11-17T09:46:47.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:46:47.937 [DEBUG] [Thread-52091] [transport.py] [_log()] starting thread (client mode): 0xd31ccf40
2025-11-17T09:46:47.937 [DEBUG] [Thread-52091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:46:47.957 [DEBUG] [Thread-52091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:46:47.957 [INFO] [Thread-52091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:46:47.960 [DEBUG] [Thread-52091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] client lang: <none>
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] server lang: <none>
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] kex follows: False
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] Compression: none
2025-11-17T09:46:47.961 [DEBUG] [Thread-52091] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:46:47.979 [DEBUG] [Thread-52091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:46:47.979 [DEBUG] [Thread-52091] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:46:47.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:46:47.980 [DEBUG] [Thread-52091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:46:47.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:46:47.982 [DEBUG] [Thread-52091] [transport.py] [_log()] userauth is OK
2025-11-17T09:46:47.982 [DEBUG] [Thread-52091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:46:47.982 [DEBUG] [Thread-52091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:46:47.982 [DEBUG] [Thread-52091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:46:47.982 [DEBUG] [Thread-52091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:46:48.018 [INFO] [Thread-52091] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:46:48.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:46:48.658 [DEBUG] [Thread-52091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:46:48.659 [DEBUG] [Thread-52091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:46:48.659 [DEBUG] [Thread-52091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:46:48.699 [DEBUG] [Thread-52091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:46:48.700 [DEBUG] [Thread-52091] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:46:48.703 [DEBUG] [Thread-52091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:46:48.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:46:48.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:46:48.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:46:48.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:46:48.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:46:48.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:46:48.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:46:48.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:46:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:46:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.323660 -999.00  +15.80  11.96     37   +1.40 1 1 1 1 1   888    0 15.65 61.40 ----- 12.0 12.0 112.6 20.9 22.8 -25.4 22.4 -23.8 21.2 -24.1 21.7 -24.5
2025-11-17T09:46:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:46:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:46:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.323660
2025-11-17T09:46:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:46:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:46:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:46:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:46:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:46:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:46:44', tmtdew=17.63, humidity=30.16, cloud=0.0, wind=19.55, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:46:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:46:48.730 [DEBUG] [Thread-52091] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:46:48.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:46:48.827 [DEBUG] [Thread-52094] [transport.py] [_log()] starting thread (client mode): 0xd31cd540
2025-11-17T09:46:48.828 [DEBUG] [Thread-52094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:46:48.842 [DEBUG] [Thread-52094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:46:48.842 [INFO] [Thread-52094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:46:48.849 [DEBUG] [Thread-52094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] client lang: <none>
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] server lang: <none>
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] kex follows: False
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] Compression: none
2025-11-17T09:46:48.850 [DEBUG] [Thread-52094] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:46:48.912 [DEBUG] [Thread-52094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:46:48.912 [DEBUG] [Thread-52094] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:46:48.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:46:48.913 [DEBUG] [Thread-52094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:46:48.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:46:48.969 [DEBUG] [Thread-52094] [transport.py] [_log()] userauth is OK
2025-11-17T09:46:48.969 [DEBUG] [Thread-52094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:46:48.969 [DEBUG] [Thread-52094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:46:48.969 [DEBUG] [Thread-52094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:46:48.969 [DEBUG] [Thread-52094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:46:48.988 [INFO] [Thread-52094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:46:48.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:46:48.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:46:49.886 [DEBUG] [Thread-52094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:46:49.887 [DEBUG] [Thread-52094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:46:49.936 [DEBUG] [Thread-52094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:46:49.936 [DEBUG] [Thread-52094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:46:49.944 [DEBUG] [Thread-52094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:46:49.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:46:49.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:46:49.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:46:49.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:46:49.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:46:49.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:46:49.980 [DEBUG] [Thread-52094] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:47:01.394 [DEBUG] [Thread-52096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:47:02.042 [DEBUG] [Thread-52097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:47:17.080 [DEBUG] [Thread-52098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:47:19.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:47:19.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:47:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:47:20.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:47:20.126 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:47:20.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 47, 16), 17.76, 29.91, 0.0, 20.52, 16.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:47:20.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:47:16
2025-11-17T09:47:20.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:47:20.908 [DEBUG] [Thread-52099] [transport.py] [_log()] starting thread (client mode): 0xd3134880
2025-11-17T09:47:20.908 [DEBUG] [Thread-52099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:47:20.928 [DEBUG] [Thread-52099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:47:20.929 [INFO] [Thread-52099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:47:20.932 [DEBUG] [Thread-52099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] client lang: <none>
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] server lang: <none>
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] kex follows: False
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] Compression: none
2025-11-17T09:47:20.933 [DEBUG] [Thread-52099] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:47:20.950 [DEBUG] [Thread-52099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:47:20.950 [DEBUG] [Thread-52099] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:47:20.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:47:20.951 [DEBUG] [Thread-52099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:47:20.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:47:20.953 [DEBUG] [Thread-52099] [transport.py] [_log()] userauth is OK
2025-11-17T09:47:20.953 [DEBUG] [Thread-52099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:47:20.953 [DEBUG] [Thread-52099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:47:20.953 [DEBUG] [Thread-52099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:47:20.953 [DEBUG] [Thread-52099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:47:20.971 [INFO] [Thread-52099] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:47:20.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:47:21.589 [DEBUG] [Thread-52099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:47:21.589 [DEBUG] [Thread-52099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:47:21.589 [DEBUG] [Thread-52099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:47:21.629 [DEBUG] [Thread-52099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:47:21.630 [DEBUG] [Thread-52099] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:47:21.632 [DEBUG] [Thread-52099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:47:21.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:47:21.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:47:21.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:47:21.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:47:21.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:47:21.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:47:21.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:47:21.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:47:21.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:47:21.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.324355 -999.00  +16.10  13.22     37   +1.40 1 1 1 1 1   888    0 16.00 65.80 ----- 13.2 13.2 69.3 20.4 22.8 -27.9 22.5 -23.2 21.3 -23.4 21.9 -23.6
2025-11-17T09:47:21.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:47:21.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:47:21.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.324355
2025-11-17T09:47:21.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:47:21.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:47:21.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:47:21.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:47:21.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:47:21.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:47:16', tmtdew=17.76, humidity=29.91, cloud=0.0, wind=20.52, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:47:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:47:21.657 [DEBUG] [Thread-52099] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:47:21.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:47:21.754 [DEBUG] [Thread-52102] [transport.py] [_log()] starting thread (client mode): 0xd31cf070
2025-11-17T09:47:21.754 [DEBUG] [Thread-52102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:47:21.769 [DEBUG] [Thread-52102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:47:21.770 [INFO] [Thread-52102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:47:21.777 [DEBUG] [Thread-52102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:47:21.777 [DEBUG] [Thread-52102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:47:21.777 [DEBUG] [Thread-52102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:47:21.777 [DEBUG] [Thread-52102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] client lang: <none>
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] server lang: <none>
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] kex follows: False
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:47:21.778 [DEBUG] [Thread-52102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:47:21.779 [DEBUG] [Thread-52102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:47:21.779 [DEBUG] [Thread-52102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:47:21.779 [DEBUG] [Thread-52102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:47:21.779 [DEBUG] [Thread-52102] [transport.py] [_log()] Compression: none
2025-11-17T09:47:21.779 [DEBUG] [Thread-52102] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:47:21.837 [DEBUG] [Thread-52102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:47:21.838 [DEBUG] [Thread-52102] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:47:21.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:47:21.839 [DEBUG] [Thread-52102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:47:21.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:47:21.893 [DEBUG] [Thread-52102] [transport.py] [_log()] userauth is OK
2025-11-17T09:47:21.893 [DEBUG] [Thread-52102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:47:21.893 [DEBUG] [Thread-52102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:47:21.894 [DEBUG] [Thread-52102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:47:21.894 [DEBUG] [Thread-52102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:47:21.918 [INFO] [Thread-52102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:47:21.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:47:21.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:47:22.751 [DEBUG] [Thread-52102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:47:22.751 [DEBUG] [Thread-52102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:47:22.799 [DEBUG] [Thread-52102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:47:22.799 [DEBUG] [Thread-52102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:47:22.808 [DEBUG] [Thread-52102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:47:22.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:47:22.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:47:22.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:47:22.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:47:22.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:47:22.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:47:22.842 [DEBUG] [Thread-52102] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:47:32.109 [DEBUG] [Thread-52104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:47:47.152 [DEBUG] [Thread-52105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:47:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:47:52.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:47:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:47:53.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 47, 48), 17.76, 29.84, 0.0, 23.01, 16.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:47:53.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:47:48
2025-11-17T09:47:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:47:53.800 [DEBUG] [Thread-52106] [transport.py] [_log()] starting thread (client mode): 0xd7bc77c0
2025-11-17T09:47:53.800 [DEBUG] [Thread-52106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:47:53.820 [DEBUG] [Thread-52106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:47:53.820 [INFO] [Thread-52106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] client lang: <none>
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] server lang: <none>
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] kex follows: False
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:47:53.823 [DEBUG] [Thread-52106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:47:53.824 [DEBUG] [Thread-52106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:47:53.824 [DEBUG] [Thread-52106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:47:53.824 [DEBUG] [Thread-52106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:47:53.824 [DEBUG] [Thread-52106] [transport.py] [_log()] Compression: none
2025-11-17T09:47:53.824 [DEBUG] [Thread-52106] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:47:53.839 [DEBUG] [Thread-52106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:47:53.839 [DEBUG] [Thread-52106] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:47:53.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:47:53.839 [DEBUG] [Thread-52106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:47:53.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:47:53.840 [DEBUG] [Thread-52106] [transport.py] [_log()] userauth is OK
2025-11-17T09:47:53.840 [DEBUG] [Thread-52106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:47:53.840 [DEBUG] [Thread-52106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:47:53.840 [DEBUG] [Thread-52106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:47:53.840 [DEBUG] [Thread-52106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:47:53.856 [INFO] [Thread-52106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:47:53.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:47:54.492 [DEBUG] [Thread-52106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:47:54.493 [DEBUG] [Thread-52106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:47:54.493 [DEBUG] [Thread-52106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:47:54.533 [DEBUG] [Thread-52106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:47:54.534 [DEBUG] [Thread-52106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:47:54.536 [DEBUG] [Thread-52106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:47:54.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:47:54.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:47:54.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:47:54.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:47:54.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:47:54.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:47:54.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.324702 -999.00  +16.30  21.62     36   +1.40 1 1 1 1 1   888    0 15.83 64.40 ----- 21.6 21.6 111.2 27.6 22.9 -23.7 22.5 -23.5 21.4 -23.5 21.9 -23.9
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.324702
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:47:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:47:48', tmtdew=17.76, humidity=29.84, cloud=0.0, wind=23.01, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:47:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:47:54.558 [DEBUG] [Thread-52106] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:47:54.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:47:54.645 [DEBUG] [Thread-52109] [transport.py] [_log()] starting thread (client mode): 0xd31cc970
2025-11-17T09:47:54.645 [DEBUG] [Thread-52109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:47:54.660 [DEBUG] [Thread-52109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:47:54.660 [INFO] [Thread-52109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:47:54.667 [DEBUG] [Thread-52109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] client lang: <none>
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] server lang: <none>
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] kex follows: False
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] Compression: none
2025-11-17T09:47:54.668 [DEBUG] [Thread-52109] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:47:54.724 [DEBUG] [Thread-52109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:47:54.725 [DEBUG] [Thread-52109] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:47:54.725 [DEBUG] [Thread-52109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:47:54.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:47:54.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:47:54.785 [DEBUG] [Thread-52109] [transport.py] [_log()] userauth is OK
2025-11-17T09:47:54.785 [DEBUG] [Thread-52109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:47:54.785 [DEBUG] [Thread-52109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:47:54.785 [DEBUG] [Thread-52109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:47:54.785 [DEBUG] [Thread-52109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:47:54.805 [INFO] [Thread-52109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:47:54.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:47:54.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:47:55.652 [DEBUG] [Thread-52109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:47:55.652 [DEBUG] [Thread-52109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:47:55.703 [DEBUG] [Thread-52109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:47:55.704 [DEBUG] [Thread-52109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:47:55.712 [DEBUG] [Thread-52109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:47:55.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:47:55.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:47:55.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:47:55.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:47:55.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:47:55.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:47:55.746 [DEBUG] [Thread-52109] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:48:01.422 [DEBUG] [Thread-52111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:48:02.185 [DEBUG] [Thread-52112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:48:17.228 [DEBUG] [Thread-52113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:48:20.266 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:48:20.267 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:48:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:48:25.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:48:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:48:26.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 48, 20), 17.69, 29.94, 0.0, 20.93, 16.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:48:26.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:48:20
2025-11-17T09:48:26.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:48:26.680 [DEBUG] [Thread-52114] [transport.py] [_log()] starting thread (client mode): 0xd3160a60
2025-11-17T09:48:26.680 [DEBUG] [Thread-52114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:48:26.700 [DEBUG] [Thread-52114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:48:26.700 [INFO] [Thread-52114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:48:26.701 [DEBUG] [Thread-52114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:48:26.701 [DEBUG] [Thread-52114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:48:26.701 [DEBUG] [Thread-52114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:48:26.701 [DEBUG] [Thread-52114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:48:26.701 [DEBUG] [Thread-52114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] client lang: <none>
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] server lang: <none>
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] kex follows: False
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] Compression: none
2025-11-17T09:48:26.702 [DEBUG] [Thread-52114] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:48:26.719 [DEBUG] [Thread-52114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:48:26.719 [DEBUG] [Thread-52114] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:48:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:48:26.720 [DEBUG] [Thread-52114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:48:26.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:48:26.721 [DEBUG] [Thread-52114] [transport.py] [_log()] userauth is OK
2025-11-17T09:48:26.722 [DEBUG] [Thread-52114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:48:26.722 [DEBUG] [Thread-52114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:48:26.722 [DEBUG] [Thread-52114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:48:26.722 [DEBUG] [Thread-52114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:48:26.743 [INFO] [Thread-52114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:48:26.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:48:27.364 [DEBUG] [Thread-52114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:48:27.364 [DEBUG] [Thread-52114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:48:27.364 [DEBUG] [Thread-52114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:48:27.405 [DEBUG] [Thread-52114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:48:27.405 [DEBUG] [Thread-52114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:48:27.408 [DEBUG] [Thread-52114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:48:27.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:48:27.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:48:27.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:48:27.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:48:27.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:48:27.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:48:27.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.325049 -999.00  +15.90  18.17     36   +1.10 1 1 1 1 1   888    0 15.75 57.95 ----- 18.2 18.2 107.1 28.4 22.7 -26.4 22.5 -24.7 21.2 -24.8 21.7 -25.2
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.325049
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:48:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:48:20', tmtdew=17.69, humidity=29.94, cloud=0.0, wind=20.93, temperature=16.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:48:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:48:27.427 [DEBUG] [Thread-52114] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:48:27.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:48:27.513 [DEBUG] [Thread-52117] [transport.py] [_log()] starting thread (client mode): 0xd31377f0
2025-11-17T09:48:27.513 [DEBUG] [Thread-52117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:48:27.529 [DEBUG] [Thread-52117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:48:27.529 [INFO] [Thread-52117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] client lang: <none>
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] server lang: <none>
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] kex follows: False
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:48:27.536 [DEBUG] [Thread-52117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:48:27.537 [DEBUG] [Thread-52117] [transport.py] [_log()] Compression: none
2025-11-17T09:48:27.537 [DEBUG] [Thread-52117] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:48:27.592 [DEBUG] [Thread-52117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:48:27.592 [DEBUG] [Thread-52117] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:48:27.592 [DEBUG] [Thread-52117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:48:27.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:48:27.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:48:27.649 [DEBUG] [Thread-52117] [transport.py] [_log()] userauth is OK
2025-11-17T09:48:27.649 [DEBUG] [Thread-52117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:48:27.649 [DEBUG] [Thread-52117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:48:27.649 [DEBUG] [Thread-52117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:48:27.649 [DEBUG] [Thread-52117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:48:27.663 [INFO] [Thread-52117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:48:27.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:48:27.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:48:28.533 [DEBUG] [Thread-52117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:48:28.533 [DEBUG] [Thread-52117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:48:28.581 [DEBUG] [Thread-52117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:48:28.581 [DEBUG] [Thread-52117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:48:28.591 [DEBUG] [Thread-52117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:48:28.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:48:28.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:48:28.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:48:28.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:48:28.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:48:28.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:48:28.623 [DEBUG] [Thread-52117] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:48:32.261 [DEBUG] [Thread-52119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:48:47.295 [DEBUG] [Thread-52120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:48:58.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:48:58.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:48:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:48:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 48, 52), 18.11, 29.24, 0.0, 16.59, 16.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:48:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:48:52
2025-11-17T09:48:59.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:48:59.553 [DEBUG] [Thread-52121] [transport.py] [_log()] starting thread (client mode): 0xd31352d0
2025-11-17T09:48:59.553 [DEBUG] [Thread-52121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:48:59.573 [DEBUG] [Thread-52121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:48:59.573 [INFO] [Thread-52121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:48:59.576 [DEBUG] [Thread-52121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:48:59.576 [DEBUG] [Thread-52121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:48:59.576 [DEBUG] [Thread-52121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:48:59.576 [DEBUG] [Thread-52121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] client lang: <none>
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] server lang: <none>
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] kex follows: False
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:48:59.577 [DEBUG] [Thread-52121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:48:59.578 [DEBUG] [Thread-52121] [transport.py] [_log()] Compression: none
2025-11-17T09:48:59.578 [DEBUG] [Thread-52121] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:48:59.595 [DEBUG] [Thread-52121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:48:59.596 [DEBUG] [Thread-52121] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:48:59.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:48:59.597 [DEBUG] [Thread-52121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:48:59.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:48:59.598 [DEBUG] [Thread-52121] [transport.py] [_log()] userauth is OK
2025-11-17T09:48:59.598 [DEBUG] [Thread-52121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:48:59.598 [DEBUG] [Thread-52121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:48:59.598 [DEBUG] [Thread-52121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:48:59.598 [DEBUG] [Thread-52121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:48:59.616 [INFO] [Thread-52121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:48:59.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:49:00.254 [DEBUG] [Thread-52121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:49:00.254 [DEBUG] [Thread-52121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:49:00.255 [DEBUG] [Thread-52121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:49:00.295 [DEBUG] [Thread-52121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:49:00.295 [DEBUG] [Thread-52121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:49:00.298 [DEBUG] [Thread-52121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:49:00.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:49:00.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:49:00.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:49:00.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:49:00.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:49:00.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:49:00.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:49:00.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:49:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:49:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.325396 -999.00  +15.70  14.29     36   +0.90 1 1 1 1 1   888    0 15.94 56.21 ----- 14.3 14.3 84.7 27.7 22.6 -25.0 22.4 -24.2 21.2 -24.1 21.7 -25.1
2025-11-17T09:49:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:49:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:49:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.325396
2025-11-17T09:49:00.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:49:00.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:49:00.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:49:00.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:49:00.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:49:00.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:48:52', tmtdew=18.11, humidity=29.24, cloud=0.0, wind=16.59, temperature=16.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:48:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:49:00.321 [DEBUG] [Thread-52121] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:49:00.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:49:00.419 [DEBUG] [Thread-52124] [transport.py] [_log()] starting thread (client mode): 0xd31ceef0
2025-11-17T09:49:00.419 [DEBUG] [Thread-52124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:49:00.441 [DEBUG] [Thread-52124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:49:00.441 [INFO] [Thread-52124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:49:00.448 [DEBUG] [Thread-52124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:49:00.448 [DEBUG] [Thread-52124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:49:00.448 [DEBUG] [Thread-52124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] client lang: <none>
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] server lang: <none>
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] kex follows: False
2025-11-17T09:49:00.449 [DEBUG] [Thread-52124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:49:00.450 [DEBUG] [Thread-52124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:49:00.450 [DEBUG] [Thread-52124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:49:00.450 [DEBUG] [Thread-52124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:49:00.450 [DEBUG] [Thread-52124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:49:00.450 [DEBUG] [Thread-52124] [transport.py] [_log()] Compression: none
2025-11-17T09:49:00.450 [DEBUG] [Thread-52124] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:49:00.509 [DEBUG] [Thread-52124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:49:00.509 [DEBUG] [Thread-52124] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:49:00.510 [DEBUG] [Thread-52124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:49:00.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:49:00.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:49:00.565 [DEBUG] [Thread-52124] [transport.py] [_log()] userauth is OK
2025-11-17T09:49:00.565 [DEBUG] [Thread-52124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:49:00.565 [DEBUG] [Thread-52124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:49:00.565 [DEBUG] [Thread-52124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:49:00.565 [DEBUG] [Thread-52124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:49:00.584 [INFO] [Thread-52124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:49:00.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:49:00.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:49:01.464 [DEBUG] [Thread-52124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:49:01.464 [DEBUG] [Thread-52124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:49:01.472 [DEBUG] [Thread-52126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:49:01.513 [DEBUG] [Thread-52124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:49:01.513 [DEBUG] [Thread-52124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:49:01.521 [DEBUG] [Thread-52124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:49:01.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:49:01.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:49:01.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:49:01.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:49:01.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:49:01.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:49:01.558 [DEBUG] [Thread-52124] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:49:02.324 [DEBUG] [Thread-52127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:49:17.371 [DEBUG] [Thread-52128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:49:20.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:49:20.409 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:49:31.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:49:31.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:49:31.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:49:32.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 49, 24), 18.06, 29.32, 0.0, 16.32, 16.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:49:32.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:49:24
2025-11-17T09:49:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:49:32.401 [DEBUG] [Thread-52129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:49:32.501 [DEBUG] [Thread-52130] [transport.py] [_log()] starting thread (client mode): 0xd07bcaf0
2025-11-17T09:49:32.501 [DEBUG] [Thread-52130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:49:32.522 [DEBUG] [Thread-52130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:49:32.522 [INFO] [Thread-52130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:49:32.523 [DEBUG] [Thread-52130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:49:32.523 [DEBUG] [Thread-52130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] client lang: <none>
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] server lang: <none>
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] kex follows: False
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] Compression: none
2025-11-17T09:49:32.524 [DEBUG] [Thread-52130] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:49:32.537 [DEBUG] [Thread-52130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:49:32.538 [DEBUG] [Thread-52130] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:49:32.538 [DEBUG] [Thread-52130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:49:32.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:49:32.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:49:32.540 [DEBUG] [Thread-52130] [transport.py] [_log()] userauth is OK
2025-11-17T09:49:32.540 [DEBUG] [Thread-52130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:49:32.540 [DEBUG] [Thread-52130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:49:32.540 [DEBUG] [Thread-52130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:49:32.540 [DEBUG] [Thread-52130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:49:32.571 [INFO] [Thread-52130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:49:32.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:49:33.236 [DEBUG] [Thread-52130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:49:33.236 [DEBUG] [Thread-52130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:49:33.236 [DEBUG] [Thread-52130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:49:33.276 [DEBUG] [Thread-52130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:49:33.276 [DEBUG] [Thread-52130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:49:33.279 [DEBUG] [Thread-52130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:49:33.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:49:33.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:49:33.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:49:33.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:49:33.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:49:33.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:49:33.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:49:33.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:49:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:49:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.325743 -999.00  +15.60  12.59     36   +0.90 1 1 1 1 1   888    0 16.27 64.54 ----- 12.6 12.6 124.2 21.9 22.5 -28.4 22.4 -24.2 21.2 -24.9 21.6 -25.0
2025-11-17T09:49:33.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:49:33.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:49:33.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.325743
2025-11-17T09:49:33.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:49:33.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:49:33.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:49:33.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:49:33.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:49:33.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:49:24', tmtdew=18.06, humidity=29.32, cloud=0.0, wind=16.32, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:49:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:49:33.303 [DEBUG] [Thread-52130] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:49:33.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:49:33.399 [DEBUG] [Thread-52133] [transport.py] [_log()] starting thread (client mode): 0xd31cc790
2025-11-17T09:49:33.399 [DEBUG] [Thread-52133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:49:33.421 [DEBUG] [Thread-52133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:49:33.422 [INFO] [Thread-52133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:49:33.429 [DEBUG] [Thread-52133] [transport.py] [_log()] client lang: <none>
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] server lang: <none>
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] kex follows: False
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] Compression: none
2025-11-17T09:49:33.430 [DEBUG] [Thread-52133] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:49:33.488 [DEBUG] [Thread-52133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:49:33.489 [DEBUG] [Thread-52133] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:49:33.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:49:33.490 [DEBUG] [Thread-52133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:49:33.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:49:33.545 [DEBUG] [Thread-52133] [transport.py] [_log()] userauth is OK
2025-11-17T09:49:33.545 [DEBUG] [Thread-52133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:49:33.545 [DEBUG] [Thread-52133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:49:33.545 [DEBUG] [Thread-52133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:49:33.545 [DEBUG] [Thread-52133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:49:33.566 [INFO] [Thread-52133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:49:33.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:49:33.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:49:34.451 [DEBUG] [Thread-52133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:49:34.451 [DEBUG] [Thread-52133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:49:34.499 [DEBUG] [Thread-52133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:49:34.499 [DEBUG] [Thread-52133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:49:34.508 [DEBUG] [Thread-52133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:49:34.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:49:34.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:49:34.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
2025-11-17T09:49:34.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:49:34.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:49:34.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:49:34.542 [DEBUG] [Thread-52133] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:49:47.428 [DEBUG] [Thread-52135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:50:01.531 [DEBUG] [Thread-52136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:50:02.460 [DEBUG] [Thread-52137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:50:04.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:50:04.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:50:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:50:05.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 49, 56), 18.06, 29.26, 0.0, 17.12, 16.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:50:05.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:49:56
2025-11-17T09:50:05.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:50:05.469 [DEBUG] [Thread-52138] [transport.py] [_log()] starting thread (client mode): 0xd0718640
2025-11-17T09:50:05.470 [DEBUG] [Thread-52138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:50:05.489 [DEBUG] [Thread-52138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:50:05.490 [INFO] [Thread-52138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] client lang: <none>
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] server lang: <none>
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] kex follows: False
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] Compression: none
2025-11-17T09:50:05.493 [DEBUG] [Thread-52138] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:50:05.510 [DEBUG] [Thread-52138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:50:05.510 [DEBUG] [Thread-52138] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:50:05.511 [DEBUG] [Thread-52138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:50:05.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:50:05.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:50:05.513 [DEBUG] [Thread-52138] [transport.py] [_log()] userauth is OK
2025-11-17T09:50:05.513 [DEBUG] [Thread-52138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:50:05.513 [DEBUG] [Thread-52138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:50:05.513 [DEBUG] [Thread-52138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:50:05.513 [DEBUG] [Thread-52138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:50:05.527 [INFO] [Thread-52138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:50:05.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:50:11.669 [DEBUG] [Thread-52138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:50:11.670 [DEBUG] [Thread-52138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:50:11.670 [DEBUG] [Thread-52138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:50:11.710 [DEBUG] [Thread-52138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:50:11.711 [DEBUG] [Thread-52138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:50:11.714 [DEBUG] [Thread-52138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:50:11.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:50:11.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:50:11.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:50:11.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:50:11.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:50:11.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:50:11.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:50:11.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:50:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:50:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.326091 -999.00  +15.50   9.40     37   +0.90 1 1 1 1 1   888    0 16.09 60.97 ----- 9.4 9.4 86.4 18.1 22.5 -28.2 22.4 -23.8 21.2 -24.1 21.7 -24.4
2025-11-17T09:50:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:50:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:50:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.326091
2025-11-17T09:50:11.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:50:11.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:50:11.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:50:11.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:50:11.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:50:11.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:49:56', tmtdew=18.06, humidity=29.26, cloud=0.0, wind=17.12, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:49:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:50:11.738 [DEBUG] [Thread-52138] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:50:11.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:50:11.834 [DEBUG] [Thread-52141] [transport.py] [_log()] starting thread (client mode): 0xd3134760
2025-11-17T09:50:11.834 [DEBUG] [Thread-52141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:50:11.854 [DEBUG] [Thread-52141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:50:11.854 [INFO] [Thread-52141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:50:11.861 [DEBUG] [Thread-52141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:50:11.861 [DEBUG] [Thread-52141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] client lang: <none>
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] server lang: <none>
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] kex follows: False
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] Compression: none
2025-11-17T09:50:11.862 [DEBUG] [Thread-52141] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:50:11.920 [DEBUG] [Thread-52141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:50:11.921 [DEBUG] [Thread-52141] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:50:11.921 [DEBUG] [Thread-52141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:50:11.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:50:11.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:50:11.977 [DEBUG] [Thread-52141] [transport.py] [_log()] userauth is OK
2025-11-17T09:50:11.977 [DEBUG] [Thread-52141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:50:11.977 [DEBUG] [Thread-52141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:50:11.977 [DEBUG] [Thread-52141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:50:11.977 [DEBUG] [Thread-52141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:50:11.996 [INFO] [Thread-52141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:50:11.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:50:11.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:50:12.854 [DEBUG] [Thread-52141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:50:12.854 [DEBUG] [Thread-52141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:50:12.902 [DEBUG] [Thread-52141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:50:12.902 [DEBUG] [Thread-52141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:50:12.911 [DEBUG] [Thread-52141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:50:12.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:50:12.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:50:12.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:50:12.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:50:12.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:50:12.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:50:12.951 [DEBUG] [Thread-52141] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:50:17.495 [DEBUG] [Thread-52143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:50:20.550 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:50:20.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:50:32.544 [DEBUG] [Thread-52144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:50:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:50:42.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:50:42.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:50:43.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 50, 28), 18.24, 28.88, 0.0, 17.38, 16.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:50:43.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:50:28
2025-11-17T09:50:43.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:50:43.891 [DEBUG] [Thread-52145] [transport.py] [_log()] starting thread (client mode): 0xd0719900
2025-11-17T09:50:43.892 [DEBUG] [Thread-52145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:50:43.911 [DEBUG] [Thread-52145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:50:43.912 [INFO] [Thread-52145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:50:43.914 [DEBUG] [Thread-52145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] client lang: <none>
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] server lang: <none>
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] kex follows: False
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] Compression: none
2025-11-17T09:50:43.915 [DEBUG] [Thread-52145] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:50:43.933 [DEBUG] [Thread-52145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:50:43.933 [DEBUG] [Thread-52145] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:50:43.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:50:43.933 [DEBUG] [Thread-52145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:50:43.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:50:43.934 [DEBUG] [Thread-52145] [transport.py] [_log()] userauth is OK
2025-11-17T09:50:43.934 [DEBUG] [Thread-52145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:50:43.934 [DEBUG] [Thread-52145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:50:43.934 [DEBUG] [Thread-52145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:50:43.934 [DEBUG] [Thread-52145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:50:43.945 [INFO] [Thread-52145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:50:43.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:50:44.586 [DEBUG] [Thread-52145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:50:44.586 [DEBUG] [Thread-52145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:50:44.587 [DEBUG] [Thread-52145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:50:44.628 [DEBUG] [Thread-52145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:50:44.628 [DEBUG] [Thread-52145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:50:44.631 [DEBUG] [Thread-52145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:50:44.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:50:44.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:50:44.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:50:44.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:50:44.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:50:44.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:50:44.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:50:44.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:50:44.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:50:44.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.326438 -999.00  +15.80  13.77     36   +1.00 1 1 1 1 1   888    0 15.74 53.55 ----- 13.8 13.8 104.0 19.0 22.7 -25.7 22.4 -24.0 21.3 -23.4 21.8 -23.8
2025-11-17T09:50:44.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:50:44.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:50:44.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.326438
2025-11-17T09:50:44.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:50:44.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:50:44.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:50:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:50:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:50:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:50:28', tmtdew=18.24, humidity=28.88, cloud=0.0, wind=17.38, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:50:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:50:44.658 [DEBUG] [Thread-52145] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:50:44.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:50:44.753 [DEBUG] [Thread-52148] [transport.py] [_log()] starting thread (client mode): 0xd31cf2e0
2025-11-17T09:50:44.754 [DEBUG] [Thread-52148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:50:44.768 [DEBUG] [Thread-52148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:50:44.768 [INFO] [Thread-52148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:50:44.776 [DEBUG] [Thread-52148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:50:44.776 [DEBUG] [Thread-52148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:50:44.776 [DEBUG] [Thread-52148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:50:44.776 [DEBUG] [Thread-52148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:50:44.776 [DEBUG] [Thread-52148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:50:44.776 [DEBUG] [Thread-52148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:50:44.776 [DEBUG] [Thread-52148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] client lang: <none>
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] server lang: <none>
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] kex follows: False
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] Compression: none
2025-11-17T09:50:44.777 [DEBUG] [Thread-52148] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:50:44.837 [DEBUG] [Thread-52148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:50:44.838 [DEBUG] [Thread-52148] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:50:44.838 [DEBUG] [Thread-52148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:50:44.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:50:44.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:50:44.893 [DEBUG] [Thread-52148] [transport.py] [_log()] userauth is OK
2025-11-17T09:50:44.893 [DEBUG] [Thread-52148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:50:44.894 [DEBUG] [Thread-52148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:50:44.894 [DEBUG] [Thread-52148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:50:44.894 [DEBUG] [Thread-52148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:50:44.913 [INFO] [Thread-52148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:50:44.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:50:44.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:50:45.821 [DEBUG] [Thread-52148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:50:45.821 [DEBUG] [Thread-52148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:50:45.869 [DEBUG] [Thread-52148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:50:45.869 [DEBUG] [Thread-52148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:50:45.878 [DEBUG] [Thread-52148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:50:45.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:50:45.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:50:45.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:50:45.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:50:45.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:50:45.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:50:45.912 [DEBUG] [Thread-52148] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:50:47.578 [DEBUG] [Thread-52150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:51:01.583 [DEBUG] [Thread-52151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:51:02.622 [DEBUG] [Thread-52152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:51:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:51:15.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:51:15.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:51:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 50, 28), 18.14, 28.88, 0.0, 15.58, 16.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:51:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:50:28
2025-11-17T09:51:16.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:51:16.843 [DEBUG] [Thread-52153] [transport.py] [_log()] starting thread (client mode): 0xd31cf6d0
2025-11-17T09:51:16.843 [DEBUG] [Thread-52153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:51:16.863 [DEBUG] [Thread-52153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:51:16.864 [INFO] [Thread-52153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:51:16.867 [DEBUG] [Thread-52153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:51:16.867 [DEBUG] [Thread-52153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:51:16.867 [DEBUG] [Thread-52153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:51:16.867 [DEBUG] [Thread-52153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:51:16.867 [DEBUG] [Thread-52153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:51:16.867 [DEBUG] [Thread-52153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:51:16.867 [DEBUG] [Thread-52153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:51:16.867 [DEBUG] [Thread-52153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] client lang: <none>
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] server lang: <none>
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] kex follows: False
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] Compression: none
2025-11-17T09:51:16.868 [DEBUG] [Thread-52153] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:51:16.885 [DEBUG] [Thread-52153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:51:16.886 [DEBUG] [Thread-52153] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:51:16.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:51:16.887 [DEBUG] [Thread-52153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:51:16.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:51:16.889 [DEBUG] [Thread-52153] [transport.py] [_log()] userauth is OK
2025-11-17T09:51:16.889 [DEBUG] [Thread-52153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:51:16.889 [DEBUG] [Thread-52153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:51:16.889 [DEBUG] [Thread-52153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:51:16.889 [DEBUG] [Thread-52153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:51:16.922 [INFO] [Thread-52153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:51:16.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:51:17.597 [DEBUG] [Thread-52153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:51:17.597 [DEBUG] [Thread-52153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:51:17.597 [DEBUG] [Thread-52153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:51:17.638 [DEBUG] [Thread-52153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:51:17.639 [DEBUG] [Thread-52153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:51:17.642 [DEBUG] [Thread-52153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:51:17.650 [DEBUG] [Thread-52155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:51:17.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:51:17.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:51:17.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:51:17.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:51:17.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:51:17.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:51:17.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:51:17.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:51:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:51:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.326785 -999.00  +16.00   6.60     36   +1.00 1 1 1 1 1   888    0 15.58 48.14 ----- 6.6 6.6 94.3 22.1 22.7 -24.9 22.5 -23.9 21.3 -24.5 21.9 -24.6
2025-11-17T09:51:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:51:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:51:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.326785
2025-11-17T09:51:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:51:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:51:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:51:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:51:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:51:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:50:28', tmtdew=18.14, humidity=28.88, cloud=0.0, wind=15.58, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:50:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:51:17.669 [DEBUG] [Thread-52153] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:51:17.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:51:17.768 [DEBUG] [Thread-52157] [transport.py] [_log()] starting thread (client mode): 0xd07197e0
2025-11-17T09:51:17.768 [DEBUG] [Thread-52157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:51:17.784 [DEBUG] [Thread-52157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:51:17.784 [INFO] [Thread-52157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:51:17.791 [DEBUG] [Thread-52157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:51:17.792 [DEBUG] [Thread-52157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:51:17.792 [DEBUG] [Thread-52157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:51:17.792 [DEBUG] [Thread-52157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:51:17.792 [DEBUG] [Thread-52157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:51:17.792 [DEBUG] [Thread-52157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:51:17.792 [DEBUG] [Thread-52157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:51:17.792 [DEBUG] [Thread-52157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:51:17.792 [DEBUG] [Thread-52157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] client lang: <none>
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] server lang: <none>
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] kex follows: False
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] Compression: none
2025-11-17T09:51:17.793 [DEBUG] [Thread-52157] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:51:17.849 [DEBUG] [Thread-52157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:51:17.849 [DEBUG] [Thread-52157] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:51:17.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:51:17.850 [DEBUG] [Thread-52157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:51:17.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:51:17.905 [DEBUG] [Thread-52157] [transport.py] [_log()] userauth is OK
2025-11-17T09:51:17.905 [DEBUG] [Thread-52157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:51:17.905 [DEBUG] [Thread-52157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:51:17.906 [DEBUG] [Thread-52157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:51:17.906 [DEBUG] [Thread-52157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:51:17.926 [INFO] [Thread-52157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:51:17.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:51:17.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:51:18.816 [DEBUG] [Thread-52157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:51:18.816 [DEBUG] [Thread-52157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:51:18.865 [DEBUG] [Thread-52157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:51:18.865 [DEBUG] [Thread-52157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:51:18.874 [DEBUG] [Thread-52157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:51:18.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:51:18.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:51:18.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:51:18.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:51:18.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:51:18.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:51:18.909 [DEBUG] [Thread-52157] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:51:20.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:51:20.695 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:51:32.679 [DEBUG] [Thread-52159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:51:47.709 [DEBUG] [Thread-52160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:51:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:51:48.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:51:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:51:49.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 51, 32), 18.02, 29.08, 0.0, 15.51, 16.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:51:49.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:51:32
2025-11-17T09:51:49.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:51:49.843 [DEBUG] [Thread-52161] [transport.py] [_log()] starting thread (client mode): 0xd0786680
2025-11-17T09:51:49.843 [DEBUG] [Thread-52161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:51:49.863 [DEBUG] [Thread-52161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:51:49.863 [INFO] [Thread-52161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] client lang: <none>
2025-11-17T09:51:49.866 [DEBUG] [Thread-52161] [transport.py] [_log()] server lang: <none>
2025-11-17T09:51:49.867 [DEBUG] [Thread-52161] [transport.py] [_log()] kex follows: False
2025-11-17T09:51:49.867 [DEBUG] [Thread-52161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:51:49.867 [DEBUG] [Thread-52161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:51:49.867 [DEBUG] [Thread-52161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:51:49.867 [DEBUG] [Thread-52161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:51:49.867 [DEBUG] [Thread-52161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:51:49.867 [DEBUG] [Thread-52161] [transport.py] [_log()] Compression: none
2025-11-17T09:51:49.867 [DEBUG] [Thread-52161] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:51:49.886 [DEBUG] [Thread-52161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:51:49.886 [DEBUG] [Thread-52161] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:51:49.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:51:49.887 [DEBUG] [Thread-52161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:51:49.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:51:49.889 [DEBUG] [Thread-52161] [transport.py] [_log()] userauth is OK
2025-11-17T09:51:49.889 [DEBUG] [Thread-52161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:51:49.889 [DEBUG] [Thread-52161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:51:49.889 [DEBUG] [Thread-52161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:51:49.890 [DEBUG] [Thread-52161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:51:49.924 [INFO] [Thread-52161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:51:49.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:51:50.565 [DEBUG] [Thread-52161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:51:50.565 [DEBUG] [Thread-52161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:51:50.565 [DEBUG] [Thread-52161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:51:50.605 [DEBUG] [Thread-52161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:51:50.606 [DEBUG] [Thread-52161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:51:50.608 [DEBUG] [Thread-52161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:51:50.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:51:50.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:51:50.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:51:50.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:51:50.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:51:50.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:51:50.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:51:50.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:51:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:51:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.327480 -999.00  +16.30   8.04     35   +1.10 1 1 1 1 1   888    0 15.64 51.81 ----- 8.0 8.0 112.3 19.4 23.1 -25.4 22.7 -23.3 21.6 -23.0 22.1 -23.5
2025-11-17T09:51:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:51:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:51:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.327480
2025-11-17T09:51:50.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:51:50.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:51:50.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:51:50.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:51:50.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:51:50.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:51:32', tmtdew=18.02, humidity=29.08, cloud=0.0, wind=15.51, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:51:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:51:50.634 [DEBUG] [Thread-52161] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:51:50.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:51:50.730 [DEBUG] [Thread-52164] [transport.py] [_log()] starting thread (client mode): 0xd3153940
2025-11-17T09:51:50.730 [DEBUG] [Thread-52164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:51:50.744 [DEBUG] [Thread-52164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:51:50.744 [INFO] [Thread-52164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] client lang: <none>
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] server lang: <none>
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] kex follows: False
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:51:50.752 [DEBUG] [Thread-52164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:51:50.753 [DEBUG] [Thread-52164] [transport.py] [_log()] Compression: none
2025-11-17T09:51:50.753 [DEBUG] [Thread-52164] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:51:50.811 [DEBUG] [Thread-52164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:51:50.812 [DEBUG] [Thread-52164] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:51:50.812 [DEBUG] [Thread-52164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:51:50.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:51:50.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:51:50.868 [DEBUG] [Thread-52164] [transport.py] [_log()] userauth is OK
2025-11-17T09:51:50.869 [DEBUG] [Thread-52164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:51:50.869 [DEBUG] [Thread-52164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:51:50.869 [DEBUG] [Thread-52164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:51:50.869 [DEBUG] [Thread-52164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:51:50.888 [INFO] [Thread-52164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:51:50.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:51:50.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:51:51.721 [DEBUG] [Thread-52164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:51:51.721 [DEBUG] [Thread-52164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:51:51.769 [DEBUG] [Thread-52164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:51:51.769 [DEBUG] [Thread-52164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:51:51.778 [DEBUG] [Thread-52164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:51:51.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:51:51.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:51:51.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:51:51.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:51:51.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:51:51.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:51:51.812 [DEBUG] [Thread-52164] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:52:01.644 [DEBUG] [Thread-52166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:52:02.742 [DEBUG] [Thread-52167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:52:17.786 [DEBUG] [Thread-52168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:52:20.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:52:20.837 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:52:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:52:21.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:52:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:52:22.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 52, 4), 18.01, 29.12, 0.0, 17.31, 16.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:52:22.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:52:04
2025-11-17T09:52:22.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:52:22.780 [DEBUG] [Thread-52169] [transport.py] [_log()] starting thread (client mode): 0xd07844c0
2025-11-17T09:52:22.780 [DEBUG] [Thread-52169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:52:22.799 [DEBUG] [Thread-52169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:52:22.799 [INFO] [Thread-52169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:52:22.802 [DEBUG] [Thread-52169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:52:22.802 [DEBUG] [Thread-52169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:52:22.802 [DEBUG] [Thread-52169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:52:22.802 [DEBUG] [Thread-52169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:52:22.802 [DEBUG] [Thread-52169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] client lang: <none>
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] server lang: <none>
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] kex follows: False
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] Compression: none
2025-11-17T09:52:22.803 [DEBUG] [Thread-52169] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:52:22.818 [DEBUG] [Thread-52169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:52:22.818 [DEBUG] [Thread-52169] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:52:22.818 [DEBUG] [Thread-52169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:52:22.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:52:22.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:52:22.819 [DEBUG] [Thread-52169] [transport.py] [_log()] userauth is OK
2025-11-17T09:52:22.819 [DEBUG] [Thread-52169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:52:22.819 [DEBUG] [Thread-52169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:52:22.819 [DEBUG] [Thread-52169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:52:22.819 [DEBUG] [Thread-52169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:52:22.835 [INFO] [Thread-52169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:52:22.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:52:23.497 [DEBUG] [Thread-52169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:52:23.497 [DEBUG] [Thread-52169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:52:23.497 [DEBUG] [Thread-52169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:52:23.538 [DEBUG] [Thread-52169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:52:23.538 [DEBUG] [Thread-52169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:52:23.540 [DEBUG] [Thread-52169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:52:23.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:52:23.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:52:23.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:52:23.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:52:23.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:52:23.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:52:23.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:52:23.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.327827 -999.00  +16.60  17.94     35   +1.20 1 1 1 1 1   888    0 15.89 55.49 ----- 17.9 17.9 63.6 22.5 23.4 -25.0 22.9 -23.2 21.7 -23.0 22.2 -23.7
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.327827
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:52:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:52:04', tmtdew=18.01, humidity=29.12, cloud=0.0, wind=17.31, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:52:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:52:23.559 [DEBUG] [Thread-52169] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:52:23.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:52:23.644 [DEBUG] [Thread-52172] [transport.py] [_log()] starting thread (client mode): 0xd07840d0
2025-11-17T09:52:23.644 [DEBUG] [Thread-52172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:52:23.658 [DEBUG] [Thread-52172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:52:23.658 [INFO] [Thread-52172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:52:23.665 [DEBUG] [Thread-52172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:52:23.665 [DEBUG] [Thread-52172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:52:23.665 [DEBUG] [Thread-52172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:52:23.665 [DEBUG] [Thread-52172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:52:23.665 [DEBUG] [Thread-52172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:52:23.665 [DEBUG] [Thread-52172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] client lang: <none>
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] server lang: <none>
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] kex follows: False
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] Compression: none
2025-11-17T09:52:23.666 [DEBUG] [Thread-52172] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:52:23.723 [DEBUG] [Thread-52172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:52:23.723 [DEBUG] [Thread-52172] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:52:23.723 [DEBUG] [Thread-52172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:52:23.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:52:23.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:52:23.780 [DEBUG] [Thread-52172] [transport.py] [_log()] userauth is OK
2025-11-17T09:52:23.780 [DEBUG] [Thread-52172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:52:23.780 [DEBUG] [Thread-52172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:52:23.780 [DEBUG] [Thread-52172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:52:23.780 [DEBUG] [Thread-52172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:52:23.793 [INFO] [Thread-52172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:52:23.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:52:23.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:52:24.655 [DEBUG] [Thread-52172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:52:24.656 [DEBUG] [Thread-52172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:52:24.703 [DEBUG] [Thread-52172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:52:24.703 [DEBUG] [Thread-52172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:52:24.712 [DEBUG] [Thread-52172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:52:24.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:52:24.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:52:24.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:52:24.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:52:24.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:52:24.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:52:24.747 [DEBUG] [Thread-52172] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:52:32.819 [DEBUG] [Thread-52174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:52:47.861 [DEBUG] [Thread-52175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:52:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:52:54.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:52:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:52:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 52, 36), 18.54, 28.39, 0.0, 17.24, 17.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:52:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:52:36
2025-11-17T09:52:55.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:52:55.674 [DEBUG] [Thread-52176] [transport.py] [_log()] starting thread (client mode): 0xd0785ab0
2025-11-17T09:52:55.674 [DEBUG] [Thread-52176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:52:55.695 [DEBUG] [Thread-52176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:52:55.695 [INFO] [Thread-52176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:52:55.698 [DEBUG] [Thread-52176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:52:55.698 [DEBUG] [Thread-52176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:52:55.698 [DEBUG] [Thread-52176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:52:55.698 [DEBUG] [Thread-52176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:52:55.698 [DEBUG] [Thread-52176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:52:55.698 [DEBUG] [Thread-52176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:52:55.698 [DEBUG] [Thread-52176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] client lang: <none>
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] server lang: <none>
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] kex follows: False
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] Compression: none
2025-11-17T09:52:55.699 [DEBUG] [Thread-52176] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:52:55.719 [DEBUG] [Thread-52176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:52:55.720 [DEBUG] [Thread-52176] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:52:55.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:52:55.721 [DEBUG] [Thread-52176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:52:55.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:52:55.723 [DEBUG] [Thread-52176] [transport.py] [_log()] userauth is OK
2025-11-17T09:52:55.724 [DEBUG] [Thread-52176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:52:55.724 [DEBUG] [Thread-52176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:52:55.724 [DEBUG] [Thread-52176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:52:55.724 [DEBUG] [Thread-52176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:52:55.746 [INFO] [Thread-52176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:52:55.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:52:56.376 [DEBUG] [Thread-52176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:52:56.377 [DEBUG] [Thread-52176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:52:56.377 [DEBUG] [Thread-52176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:52:56.418 [DEBUG] [Thread-52176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:52:56.418 [DEBUG] [Thread-52176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:52:56.421 [DEBUG] [Thread-52176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:52:56.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:52:56.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:52:56.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:52:56.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:52:56.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:52:56.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:52:56.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:52:56.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:52:56.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:52:56.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.328174 -999.00  +16.70  13.51     35   +1.10 1 1 1 1 1   888    0 16.09 56.10 ----- 13.5 13.5 66.1 17.1 23.3 -25.1 22.9 -23.2 21.6 -23.7 22.3 -23.5
2025-11-17T09:52:56.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:52:56.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:52:56.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.328174
2025-11-17T09:52:56.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:52:56.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:52:56.445 [DEBUG] [Thread-52176] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:52:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:52:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:52:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:52:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:52:36', tmtdew=18.54, humidity=28.39, cloud=0.0, wind=17.24, temperature=17.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:52:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:52:56.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:52:56.545 [DEBUG] [Thread-52179] [transport.py] [_log()] starting thread (client mode): 0xd0784130
2025-11-17T09:52:56.545 [DEBUG] [Thread-52179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:52:56.560 [DEBUG] [Thread-52179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:52:56.560 [INFO] [Thread-52179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] client lang: <none>
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] server lang: <none>
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] kex follows: False
2025-11-17T09:52:56.573 [DEBUG] [Thread-52179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:52:56.574 [DEBUG] [Thread-52179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:52:56.574 [DEBUG] [Thread-52179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:52:56.574 [DEBUG] [Thread-52179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:52:56.574 [DEBUG] [Thread-52179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:52:56.574 [DEBUG] [Thread-52179] [transport.py] [_log()] Compression: none
2025-11-17T09:52:56.574 [DEBUG] [Thread-52179] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:52:56.632 [DEBUG] [Thread-52179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:52:56.632 [DEBUG] [Thread-52179] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:52:56.632 [DEBUG] [Thread-52179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:52:56.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:52:56.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:52:56.688 [DEBUG] [Thread-52179] [transport.py] [_log()] userauth is OK
2025-11-17T09:52:56.688 [DEBUG] [Thread-52179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:52:56.688 [DEBUG] [Thread-52179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:52:56.688 [DEBUG] [Thread-52179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:52:56.688 [DEBUG] [Thread-52179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:52:56.707 [INFO] [Thread-52179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:52:56.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:52:56.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:52:57.531 [DEBUG] [Thread-52179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:52:57.531 [DEBUG] [Thread-52179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:52:57.579 [DEBUG] [Thread-52179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:52:57.579 [DEBUG] [Thread-52179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:52:57.587 [DEBUG] [Thread-52179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:52:57.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:52:57.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:52:57.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:52:57.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:52:57.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:52:57.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:52:57.622 [DEBUG] [Thread-52179] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:53:01.703 [DEBUG] [Thread-52181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:53:02.889 [DEBUG] [Thread-52182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:53:17.936 [DEBUG] [Thread-52183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:53:20.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:53:20.980 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:53:27.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:53:27.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:53:27.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:53:28.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 53, 8), 18.8, 27.95, 0.0, 17.36, 17.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:53:28.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:53:08
2025-11-17T09:53:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:53:28.543 [DEBUG] [Thread-52184] [transport.py] [_log()] starting thread (client mode): 0xd0785b70
2025-11-17T09:53:28.543 [DEBUG] [Thread-52184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:53:28.562 [DEBUG] [Thread-52184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:53:28.562 [INFO] [Thread-52184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] client lang: <none>
2025-11-17T09:53:28.566 [DEBUG] [Thread-52184] [transport.py] [_log()] server lang: <none>
2025-11-17T09:53:28.567 [DEBUG] [Thread-52184] [transport.py] [_log()] kex follows: False
2025-11-17T09:53:28.567 [DEBUG] [Thread-52184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:53:28.567 [DEBUG] [Thread-52184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:53:28.567 [DEBUG] [Thread-52184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:53:28.567 [DEBUG] [Thread-52184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:53:28.567 [DEBUG] [Thread-52184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:53:28.567 [DEBUG] [Thread-52184] [transport.py] [_log()] Compression: none
2025-11-17T09:53:28.567 [DEBUG] [Thread-52184] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:53:28.587 [DEBUG] [Thread-52184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:53:28.587 [DEBUG] [Thread-52184] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:53:28.588 [DEBUG] [Thread-52184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:53:28.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:53:28.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:53:28.590 [DEBUG] [Thread-52184] [transport.py] [_log()] userauth is OK
2025-11-17T09:53:28.590 [DEBUG] [Thread-52184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:53:28.590 [DEBUG] [Thread-52184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:53:28.590 [DEBUG] [Thread-52184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:53:28.590 [DEBUG] [Thread-52184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:53:28.612 [INFO] [Thread-52184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:53:28.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:53:29.243 [DEBUG] [Thread-52184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:53:29.243 [DEBUG] [Thread-52184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:53:29.243 [DEBUG] [Thread-52184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:53:29.283 [DEBUG] [Thread-52184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:53:29.284 [DEBUG] [Thread-52184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:53:29.287 [DEBUG] [Thread-52184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:53:29.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:53:29.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:53:29.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:53:29.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:53:29.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:53:29.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:53:29.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:53:29.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:53:29.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:53:29.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.328521 -999.00  +17.10  12.59     34   +1.30 1 1 1 1 1   888    0 16.21 57.23 ----- 12.6 12.6 113.4 17.2 23.7 -24.4 23.1 -23.1 21.8 -23.8 22.4 -24.5
2025-11-17T09:53:29.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:53:29.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:53:29.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.328521
2025-11-17T09:53:29.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:53:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:53:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:53:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:53:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:53:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:53:08', tmtdew=18.8, humidity=27.95, cloud=0.0, wind=17.36, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:53:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:53:29.313 [DEBUG] [Thread-52184] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:53:29.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:53:29.411 [DEBUG] [Thread-52187] [transport.py] [_log()] starting thread (client mode): 0xd31520e0
2025-11-17T09:53:29.411 [DEBUG] [Thread-52187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:53:29.427 [DEBUG] [Thread-52187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:53:29.427 [INFO] [Thread-52187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] client lang: <none>
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] server lang: <none>
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] kex follows: False
2025-11-17T09:53:29.435 [DEBUG] [Thread-52187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:53:29.436 [DEBUG] [Thread-52187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:53:29.436 [DEBUG] [Thread-52187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:53:29.436 [DEBUG] [Thread-52187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:53:29.436 [DEBUG] [Thread-52187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:53:29.436 [DEBUG] [Thread-52187] [transport.py] [_log()] Compression: none
2025-11-17T09:53:29.436 [DEBUG] [Thread-52187] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:53:29.491 [DEBUG] [Thread-52187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:53:29.492 [DEBUG] [Thread-52187] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:53:29.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:53:29.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:53:29.493 [DEBUG] [Thread-52187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:53:29.547 [DEBUG] [Thread-52187] [transport.py] [_log()] userauth is OK
2025-11-17T09:53:29.548 [DEBUG] [Thread-52187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:53:29.548 [DEBUG] [Thread-52187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:53:29.548 [DEBUG] [Thread-52187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:53:29.548 [DEBUG] [Thread-52187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:53:29.567 [INFO] [Thread-52187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:53:29.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:53:29.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:53:30.507 [DEBUG] [Thread-52187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:53:30.507 [DEBUG] [Thread-52187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:53:30.554 [DEBUG] [Thread-52187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:53:30.554 [DEBUG] [Thread-52187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:53:30.563 [DEBUG] [Thread-52187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:53:30.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:53:30.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:53:30.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:53:30.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:53:30.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:53:30.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:53:30.597 [DEBUG] [Thread-52187] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:53:32.965 [DEBUG] [Thread-52189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:53:48.005 [DEBUG] [Thread-52190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:54:00.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:54:00.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:54:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:54:01.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 53, 40), 19.12, 27.41, 0.0, 18.93, 17.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:54:01.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:53:40
2025-11-17T09:54:01.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:54:01.530 [DEBUG] [Thread-52191] [transport.py] [_log()] starting thread (client mode): 0xd07859f0
2025-11-17T09:54:01.530 [DEBUG] [Thread-52191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:54:01.550 [DEBUG] [Thread-52191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:54:01.550 [INFO] [Thread-52191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:54:01.553 [DEBUG] [Thread-52191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:54:01.553 [DEBUG] [Thread-52191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:54:01.553 [DEBUG] [Thread-52191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:54:01.553 [DEBUG] [Thread-52191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] client lang: <none>
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] server lang: <none>
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] kex follows: False
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] Compression: none
2025-11-17T09:54:01.554 [DEBUG] [Thread-52191] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:54:01.571 [DEBUG] [Thread-52191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:54:01.572 [DEBUG] [Thread-52191] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:54:01.572 [DEBUG] [Thread-52191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:54:01.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:54:01.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:54:01.574 [DEBUG] [Thread-52191] [transport.py] [_log()] userauth is OK
2025-11-17T09:54:01.574 [DEBUG] [Thread-52191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:54:01.575 [DEBUG] [Thread-52191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:54:01.575 [DEBUG] [Thread-52191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:54:01.575 [DEBUG] [Thread-52191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:54:01.599 [INFO] [Thread-52191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:54:01.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:54:01.757 [DEBUG] [Thread-52193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:54:02.219 [DEBUG] [Thread-52191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:54:02.219 [DEBUG] [Thread-52191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:54:02.219 [DEBUG] [Thread-52191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:54:02.259 [DEBUG] [Thread-52191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:54:02.259 [DEBUG] [Thread-52191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:54:02.262 [DEBUG] [Thread-52191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:54:02.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:54:02.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:54:02.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:54:02.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:54:02.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:54:02.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:54:02.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:54:02.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:54:02.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:54:02.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.328868 -999.00  +16.80  15.88     34   +1.10 1 1 1 1 1   888    0 16.02 59.86 ----- 15.9 15.9 102.4 20.2 23.4 -29.1 23.1 -24.0 21.8 -23.9 22.4 -24.7
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.328868
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:54:02.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:53:40', tmtdew=19.12, humidity=27.41, cloud=0.0, wind=18.93, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:53:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:54:02.284 [DEBUG] [Thread-52191] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:54:02.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:54:02.370 [DEBUG] [Thread-52195] [transport.py] [_log()] starting thread (client mode): 0xd0786470
2025-11-17T09:54:02.370 [DEBUG] [Thread-52195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:54:02.384 [DEBUG] [Thread-52195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:54:02.384 [INFO] [Thread-52195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:54:02.391 [DEBUG] [Thread-52195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] client lang: <none>
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] server lang: <none>
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] kex follows: False
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] Compression: none
2025-11-17T09:54:02.392 [DEBUG] [Thread-52195] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:54:02.451 [DEBUG] [Thread-52195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:54:02.452 [DEBUG] [Thread-52195] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:54:02.452 [DEBUG] [Thread-52195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:54:02.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:54:02.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:54:02.507 [DEBUG] [Thread-52195] [transport.py] [_log()] userauth is OK
2025-11-17T09:54:02.507 [DEBUG] [Thread-52195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:54:02.508 [DEBUG] [Thread-52195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:54:02.508 [DEBUG] [Thread-52195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:54:02.508 [DEBUG] [Thread-52195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:54:02.527 [INFO] [Thread-52195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:54:02.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:54:02.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:54:03.036 [DEBUG] [Thread-52197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:54:03.388 [DEBUG] [Thread-52195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:54:03.388 [DEBUG] [Thread-52195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:54:03.436 [DEBUG] [Thread-52195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:54:03.436 [DEBUG] [Thread-52195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:54:03.445 [DEBUG] [Thread-52195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:54:03.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:54:03.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:54:03.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:54:03.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:54:03.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:54:03.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:54:03.483 [DEBUG] [Thread-52195] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:54:18.080 [DEBUG] [Thread-52198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:54:21.119 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:54:21.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:54:33.109 [DEBUG] [Thread-52199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:54:33.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:54:33.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:54:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:54:34.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 54, 12), 19.04, 27.56, 0.0, 18.26, 17.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:54:34.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:54:12
2025-11-17T09:54:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:54:34.400 [DEBUG] [Thread-52200] [transport.py] [_log()] starting thread (client mode): 0xd0786770
2025-11-17T09:54:34.400 [DEBUG] [Thread-52200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:54:34.414 [DEBUG] [Thread-52200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:54:34.414 [INFO] [Thread-52200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:54:34.417 [DEBUG] [Thread-52200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:54:34.417 [DEBUG] [Thread-52200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:54:34.417 [DEBUG] [Thread-52200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:54:34.417 [DEBUG] [Thread-52200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:54:34.417 [DEBUG] [Thread-52200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:54:34.417 [DEBUG] [Thread-52200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:54:34.417 [DEBUG] [Thread-52200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] client lang: <none>
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] server lang: <none>
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] kex follows: False
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] Compression: none
2025-11-17T09:54:34.418 [DEBUG] [Thread-52200] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:54:34.442 [DEBUG] [Thread-52200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:54:34.443 [DEBUG] [Thread-52200] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:54:34.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:54:34.443 [DEBUG] [Thread-52200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:54:34.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:54:34.446 [DEBUG] [Thread-52200] [transport.py] [_log()] userauth is OK
2025-11-17T09:54:34.446 [DEBUG] [Thread-52200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:54:34.446 [DEBUG] [Thread-52200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:54:34.446 [DEBUG] [Thread-52200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:54:34.446 [DEBUG] [Thread-52200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:54:34.468 [INFO] [Thread-52200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:54:34.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:54:35.118 [DEBUG] [Thread-52200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:54:35.118 [DEBUG] [Thread-52200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:54:35.119 [DEBUG] [Thread-52200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:54:35.159 [DEBUG] [Thread-52200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:54:35.159 [DEBUG] [Thread-52200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:54:35.162 [DEBUG] [Thread-52200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:54:35.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:54:35.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:54:35.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:54:35.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:54:35.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:54:35.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:54:35.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:54:35.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:54:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:54:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.329216 -999.00  +16.90  17.41     34   +1.20 1 1 1 1 1   888    0 16.29 65.90 ----- 17.4 17.4 96.7 25.6 23.5 -26.0 23.1 -23.7 21.9 -23.7 22.4 -24.1
2025-11-17T09:54:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:54:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:54:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.329216
2025-11-17T09:54:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:54:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:54:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:54:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:54:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:54:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:54:12', tmtdew=19.04, humidity=27.56, cloud=0.0, wind=18.26, temperature=17.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:54:35.185 [DEBUG] [Thread-52200] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:54:35.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:54:35.283 [DEBUG] [Thread-52203] [transport.py] [_log()] starting thread (client mode): 0xd317da50
2025-11-17T09:54:35.283 [DEBUG] [Thread-52203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:54:35.298 [DEBUG] [Thread-52203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:54:35.298 [INFO] [Thread-52203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:54:35.305 [DEBUG] [Thread-52203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] client lang: <none>
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] server lang: <none>
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] kex follows: False
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] Compression: none
2025-11-17T09:54:35.306 [DEBUG] [Thread-52203] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:54:35.363 [DEBUG] [Thread-52203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:54:35.363 [DEBUG] [Thread-52203] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:54:35.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:54:35.364 [DEBUG] [Thread-52203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:54:35.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:54:35.426 [DEBUG] [Thread-52203] [transport.py] [_log()] userauth is OK
2025-11-17T09:54:35.427 [DEBUG] [Thread-52203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:54:35.427 [DEBUG] [Thread-52203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:54:35.427 [DEBUG] [Thread-52203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:54:35.427 [DEBUG] [Thread-52203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:54:35.445 [INFO] [Thread-52203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:54:35.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:54:35.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:54:36.324 [DEBUG] [Thread-52203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:54:36.324 [DEBUG] [Thread-52203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:54:36.373 [DEBUG] [Thread-52203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:54:36.373 [DEBUG] [Thread-52203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:54:36.382 [DEBUG] [Thread-52203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:54:36.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:54:36.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:54:36.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:54:36.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:54:36.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:54:36.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:54:36.417 [DEBUG] [Thread-52203] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:54:48.151 [DEBUG] [Thread-52205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:55:01.818 [DEBUG] [Thread-52206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:55:03.191 [DEBUG] [Thread-52207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:55:06.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:55:06.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:55:06.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:55:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 54, 44), 19.23, 27.31, 0.0, 18.35, 17.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:55:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:54:44
2025-11-17T09:55:07.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:55:07.345 [DEBUG] [Thread-52208] [transport.py] [_log()] starting thread (client mode): 0xd0718c70
2025-11-17T09:55:07.346 [DEBUG] [Thread-52208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:55:07.360 [DEBUG] [Thread-52208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:55:07.360 [INFO] [Thread-52208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:55:07.362 [DEBUG] [Thread-52208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:55:07.362 [DEBUG] [Thread-52208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:55:07.362 [DEBUG] [Thread-52208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:55:07.362 [DEBUG] [Thread-52208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] client lang: <none>
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] server lang: <none>
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] kex follows: False
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] Compression: none
2025-11-17T09:55:07.363 [DEBUG] [Thread-52208] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:55:07.371 [DEBUG] [Thread-52208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:55:07.371 [DEBUG] [Thread-52208] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:55:07.371 [DEBUG] [Thread-52208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:55:07.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:55:07.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:55:07.372 [DEBUG] [Thread-52208] [transport.py] [_log()] userauth is OK
2025-11-17T09:55:07.373 [DEBUG] [Thread-52208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:55:07.373 [DEBUG] [Thread-52208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:55:07.373 [DEBUG] [Thread-52208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:55:07.373 [DEBUG] [Thread-52208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:55:07.395 [INFO] [Thread-52208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:55:07.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:55:08.343 [DEBUG] [Thread-52208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:55:08.343 [DEBUG] [Thread-52208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:55:08.343 [DEBUG] [Thread-52208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:55:08.384 [DEBUG] [Thread-52208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:55:08.384 [DEBUG] [Thread-52208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:55:08.387 [DEBUG] [Thread-52208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:55:08.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:55:08.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:55:08.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:55:08.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:55:08.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:55:08.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:55:08.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:55:08.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:55:08.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:55:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.329563 -999.00  +17.10  21.92     34   +1.20 1 1 1 1 1   888    0 16.69 70.92 ----- 21.9 21.9 68.0 29.3 23.7 -24.5 23.0 -23.6 21.8 -23.7 22.4 -24.8
2025-11-17T09:55:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:55:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:55:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.329563
2025-11-17T09:55:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:55:08.415 [DEBUG] [Thread-52208] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:55:08.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:55:08.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:55:08.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:55:08.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:55:08.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:54:44', tmtdew=19.23, humidity=27.31, cloud=0.0, wind=18.35, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:54:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:55:08.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:55:08.518 [DEBUG] [Thread-52211] [transport.py] [_log()] starting thread (client mode): 0xd0719030
2025-11-17T09:55:08.518 [DEBUG] [Thread-52211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:55:08.533 [DEBUG] [Thread-52211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:55:08.533 [INFO] [Thread-52211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:55:08.540 [DEBUG] [Thread-52211] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:55:08.540 [DEBUG] [Thread-52211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] client lang: <none>
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] server lang: <none>
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] kex follows: False
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] Compression: none
2025-11-17T09:55:08.541 [DEBUG] [Thread-52211] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:55:08.599 [DEBUG] [Thread-52211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:55:08.599 [DEBUG] [Thread-52211] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:55:08.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:55:08.600 [DEBUG] [Thread-52211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:55:08.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:55:08.655 [DEBUG] [Thread-52211] [transport.py] [_log()] userauth is OK
2025-11-17T09:55:08.655 [DEBUG] [Thread-52211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:55:08.655 [DEBUG] [Thread-52211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:55:08.655 [DEBUG] [Thread-52211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:55:08.656 [DEBUG] [Thread-52211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:55:08.675 [INFO] [Thread-52211] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:55:08.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:55:08.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:55:09.549 [DEBUG] [Thread-52211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:55:09.549 [DEBUG] [Thread-52211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:55:09.600 [DEBUG] [Thread-52211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:55:09.600 [DEBUG] [Thread-52211] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:55:09.610 [DEBUG] [Thread-52211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:55:09.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:55:09.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:55:09.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:55:09.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:55:09.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:55:09.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:55:09.648 [DEBUG] [Thread-52211] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:55:18.221 [DEBUG] [Thread-52213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:55:21.263 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:55:21.264 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:55:33.252 [DEBUG] [Thread-52214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:55:39.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:55:39.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:55:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:55:40.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 55, 16), 19.21, 27.36, 0.0, 20.59, 17.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:55:40.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:55:16
2025-11-17T09:55:40.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:55:40.559 [DEBUG] [Thread-52215] [transport.py] [_log()] starting thread (client mode): 0xd071baf0
2025-11-17T09:55:40.559 [DEBUG] [Thread-52215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:55:40.579 [DEBUG] [Thread-52215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:55:40.579 [INFO] [Thread-52215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] client lang: <none>
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] server lang: <none>
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] kex follows: False
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:55:40.582 [DEBUG] [Thread-52215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:55:40.583 [DEBUG] [Thread-52215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:55:40.583 [DEBUG] [Thread-52215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:55:40.583 [DEBUG] [Thread-52215] [transport.py] [_log()] Compression: none
2025-11-17T09:55:40.583 [DEBUG] [Thread-52215] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:55:40.596 [DEBUG] [Thread-52215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:55:40.596 [DEBUG] [Thread-52215] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:55:40.597 [DEBUG] [Thread-52215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:55:40.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:55:40.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:55:40.640 [DEBUG] [Thread-52215] [transport.py] [_log()] userauth is OK
2025-11-17T09:55:40.641 [DEBUG] [Thread-52215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:55:40.641 [DEBUG] [Thread-52215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:55:40.641 [DEBUG] [Thread-52215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:55:40.641 [DEBUG] [Thread-52215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:55:40.661 [INFO] [Thread-52215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:55:40.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:55:41.201 [DEBUG] [Thread-52215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:55:41.201 [DEBUG] [Thread-52215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:55:41.202 [DEBUG] [Thread-52215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:55:41.242 [DEBUG] [Thread-52215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:55:41.242 [DEBUG] [Thread-52215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:55:41.245 [DEBUG] [Thread-52215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:55:41.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:55:41.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:55:41.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:55:41.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:55:41.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:55:41.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:55:41.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:55:41.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:55:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:55:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.329563 -999.00  +17.10  21.92     34   +1.20 1 1 1 1 1   888    0 16.69 70.92 ----- 21.9 21.9 68.0 29.3 23.7 -24.5 23.0 -23.6 21.8 -23.7 22.4 -24.8
2025-11-17T09:55:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:55:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:55:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.329563
2025-11-17T09:55:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:55:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:55:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:55:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:55:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:55:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:55:16', tmtdew=19.21, humidity=27.36, cloud=0.0, wind=20.59, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:54:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:55:41.273 [DEBUG] [Thread-52215] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:55:41.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:55:41.368 [DEBUG] [Thread-52218] [transport.py] [_log()] starting thread (client mode): 0xd31610f0
2025-11-17T09:55:41.368 [DEBUG] [Thread-52218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:55:41.387 [DEBUG] [Thread-52218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:55:41.387 [INFO] [Thread-52218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:55:41.394 [DEBUG] [Thread-52218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:55:41.394 [DEBUG] [Thread-52218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] client lang: <none>
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] server lang: <none>
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] kex follows: False
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] Compression: none
2025-11-17T09:55:41.395 [DEBUG] [Thread-52218] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:55:41.455 [DEBUG] [Thread-52218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:55:41.456 [DEBUG] [Thread-52218] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:55:41.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:55:41.456 [DEBUG] [Thread-52218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:55:41.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:55:41.511 [DEBUG] [Thread-52218] [transport.py] [_log()] userauth is OK
2025-11-17T09:55:41.511 [DEBUG] [Thread-52218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:55:41.511 [DEBUG] [Thread-52218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:55:41.511 [DEBUG] [Thread-52218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:55:41.511 [DEBUG] [Thread-52218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:55:41.533 [INFO] [Thread-52218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:55:41.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:55:41.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:55:42.444 [DEBUG] [Thread-52218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:55:42.445 [DEBUG] [Thread-52218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:55:42.492 [DEBUG] [Thread-52218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:55:42.492 [DEBUG] [Thread-52218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:55:42.501 [DEBUG] [Thread-52218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:55:42.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:55:42.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:55:42.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:55:42.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:55:42.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:55:42.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:55:42.537 [DEBUG] [Thread-52218] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:55:48.281 [DEBUG] [Thread-52220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:56:01.879 [DEBUG] [Thread-52221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:56:03.330 [DEBUG] [Thread-52222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:56:12.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:56:12.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:56: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
2025-11-17T09:56:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 55, 48), 19.57, 26.43, 0.0, 16.3, 17.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:56:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:55:48
2025-11-17T09:56:13.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:56:13.474 [DEBUG] [Thread-52223] [transport.py] [_log()] starting thread (client mode): 0xd3151510
2025-11-17T09:56:13.474 [DEBUG] [Thread-52223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:56:13.498 [DEBUG] [Thread-52223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:56:13.498 [INFO] [Thread-52223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] client lang: <none>
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] server lang: <none>
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] kex follows: False
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] Compression: none
2025-11-17T09:56:13.501 [DEBUG] [Thread-52223] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:56:13.511 [DEBUG] [Thread-52223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:56:13.512 [DEBUG] [Thread-52223] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:56:13.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:56:13.512 [DEBUG] [Thread-52223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:56:13.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:56:13.512 [DEBUG] [Thread-52223] [transport.py] [_log()] userauth is OK
2025-11-17T09:56:13.513 [DEBUG] [Thread-52223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:56:13.513 [DEBUG] [Thread-52223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:56:13.513 [DEBUG] [Thread-52223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:56:13.513 [DEBUG] [Thread-52223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:56:13.528 [INFO] [Thread-52223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:56:13.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:56:14.172 [DEBUG] [Thread-52223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:56:14.173 [DEBUG] [Thread-52223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:56:14.173 [DEBUG] [Thread-52223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:56:14.213 [DEBUG] [Thread-52223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:56:14.213 [DEBUG] [Thread-52223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:56:14.215 [DEBUG] [Thread-52223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:56:14.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:56:14.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:56:14.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:56:14.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:56:14.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:56:14.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:56:14.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.330257 -999.00  +17.10  14.14     33   +1.00 1 1 1 1 1   888    0 16.99 81.36 ----- 14.1 14.1 90.7 19.9 23.7 -24.9 23.1 -24.2 21.9 -24.3 22.6 -24.6
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.330257
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:56:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:55:48', tmtdew=19.57, humidity=26.43, cloud=0.0, wind=16.3, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:55:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:56:14.233 [DEBUG] [Thread-52223] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:56:14.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:56:14.322 [DEBUG] [Thread-52226] [transport.py] [_log()] starting thread (client mode): 0xd071a980
2025-11-17T09:56:14.322 [DEBUG] [Thread-52226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:56:14.343 [DEBUG] [Thread-52226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:56:14.343 [INFO] [Thread-52226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:56:14.350 [DEBUG] [Thread-52226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:56:14.350 [DEBUG] [Thread-52226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:56:14.350 [DEBUG] [Thread-52226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:56:14.350 [DEBUG] [Thread-52226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:56:14.350 [DEBUG] [Thread-52226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:56:14.350 [DEBUG] [Thread-52226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:56:14.350 [DEBUG] [Thread-52226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] client lang: <none>
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] server lang: <none>
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] kex follows: False
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] Compression: none
2025-11-17T09:56:14.351 [DEBUG] [Thread-52226] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:56:14.405 [DEBUG] [Thread-52226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:56:14.405 [DEBUG] [Thread-52226] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:56:14.405 [DEBUG] [Thread-52226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:56:14.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:56:14.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:56:14.463 [DEBUG] [Thread-52226] [transport.py] [_log()] userauth is OK
2025-11-17T09:56:14.463 [DEBUG] [Thread-52226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:56:14.463 [DEBUG] [Thread-52226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:56:14.463 [DEBUG] [Thread-52226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:56:14.463 [DEBUG] [Thread-52226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:56:14.477 [INFO] [Thread-52226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:56:14.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:56:14.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:56:15.335 [DEBUG] [Thread-52226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:56:15.335 [DEBUG] [Thread-52226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:56:15.383 [DEBUG] [Thread-52226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:56:15.383 [DEBUG] [Thread-52226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:56:15.393 [DEBUG] [Thread-52226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:56:15.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:56:15.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:56:15.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:56:15.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:56:15.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:56:15.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:56:15.428 [DEBUG] [Thread-52226] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:56:18.360 [DEBUG] [Thread-52228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:56:21.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:56:21.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:56:33.401 [DEBUG] [Thread-52229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:56:45.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:56:45.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:56:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:56:46.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 56, 20), 19.63, 26.31, 0.0, 16.44, 17.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:56:46.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:56:20
2025-11-17T09:56:46.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:56:46.369 [DEBUG] [Thread-52230] [transport.py] [_log()] starting thread (client mode): 0xd07857e0
2025-11-17T09:56:46.369 [DEBUG] [Thread-52230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:56:46.389 [DEBUG] [Thread-52230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:56:46.389 [INFO] [Thread-52230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] client lang: <none>
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] server lang: <none>
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] kex follows: False
2025-11-17T09:56:46.392 [DEBUG] [Thread-52230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:56:46.393 [DEBUG] [Thread-52230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:56:46.393 [DEBUG] [Thread-52230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:56:46.393 [DEBUG] [Thread-52230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:56:46.393 [DEBUG] [Thread-52230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:56:46.393 [DEBUG] [Thread-52230] [transport.py] [_log()] Compression: none
2025-11-17T09:56:46.393 [DEBUG] [Thread-52230] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:56:46.410 [DEBUG] [Thread-52230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:56:46.410 [DEBUG] [Thread-52230] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:56:46.411 [DEBUG] [Thread-52230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:56:46.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:56:46.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:56:46.413 [DEBUG] [Thread-52230] [transport.py] [_log()] userauth is OK
2025-11-17T09:56:46.413 [DEBUG] [Thread-52230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:56:46.413 [DEBUG] [Thread-52230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:56:46.413 [DEBUG] [Thread-52230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:56:46.413 [DEBUG] [Thread-52230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:56:46.438 [INFO] [Thread-52230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:56:46.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:56:47.062 [DEBUG] [Thread-52230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:56:47.062 [DEBUG] [Thread-52230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:56:47.062 [DEBUG] [Thread-52230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:56:47.102 [DEBUG] [Thread-52230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:56:47.103 [DEBUG] [Thread-52230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:56:47.106 [DEBUG] [Thread-52230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:56:47.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:56:47.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:56:47.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:56:47.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:56:47.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:56:47.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:56:47.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:56:47.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:56:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:56:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.330605 -999.00  +17.00  12.35     33   +0.90 1 1 1 1 1   888    0 17.53 90.24 ----- 12.3 12.3 109.3 22.2 23.6 -25.4 23.1 -23.8 22.0 -24.2 22.6 -24.6
2025-11-17T09:56:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:56:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:56:47.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.330605
2025-11-17T09:56:47.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:56:47.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:56:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:56:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:56:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:56:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:56:20', tmtdew=19.63, humidity=26.31, cloud=0.0, wind=16.44, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:56:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:56:47.131 [DEBUG] [Thread-52230] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:56:47.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:56:47.229 [DEBUG] [Thread-52233] [transport.py] [_log()] starting thread (client mode): 0xd0785b40
2025-11-17T09:56:47.229 [DEBUG] [Thread-52233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:56:47.244 [DEBUG] [Thread-52233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:56:47.244 [INFO] [Thread-52233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:56:47.251 [DEBUG] [Thread-52233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] client lang: <none>
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] server lang: <none>
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] kex follows: False
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:56:47.252 [DEBUG] [Thread-52233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:56:47.253 [DEBUG] [Thread-52233] [transport.py] [_log()] Compression: none
2025-11-17T09:56:47.253 [DEBUG] [Thread-52233] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:56:47.311 [DEBUG] [Thread-52233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:56:47.311 [DEBUG] [Thread-52233] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:56:47.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:56:47.312 [DEBUG] [Thread-52233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:56:47.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:56:47.367 [DEBUG] [Thread-52233] [transport.py] [_log()] userauth is OK
2025-11-17T09:56:47.367 [DEBUG] [Thread-52233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:56:47.367 [DEBUG] [Thread-52233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:56:47.367 [DEBUG] [Thread-52233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:56:47.367 [DEBUG] [Thread-52233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:56:47.386 [INFO] [Thread-52233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:56:47.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:56:47.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:56:48.271 [DEBUG] [Thread-52233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:56:48.271 [DEBUG] [Thread-52233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:56:48.319 [DEBUG] [Thread-52233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:56:48.319 [DEBUG] [Thread-52233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:56:48.327 [DEBUG] [Thread-52233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:56:48.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:56:48.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:56:48.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:56:48.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:56:48.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:56:48.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:56:48.359 [DEBUG] [Thread-52233] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:56:48.430 [DEBUG] [Thread-52235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:57:01.933 [DEBUG] [Thread-52236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:57:03.463 [DEBUG] [Thread-52237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:57:18.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:57:18.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:57:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:57:18.492 [DEBUG] [Thread-52238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:57:19.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 56, 52), 19.3, 27.23, 0.0, 16.76, 17.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:57:19.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:56:52
2025-11-17T09:57:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:57:19.288 [DEBUG] [Thread-52239] [transport.py] [_log()] starting thread (client mode): 0xd071a140
2025-11-17T09:57:19.289 [DEBUG] [Thread-52239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:57:19.308 [DEBUG] [Thread-52239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:57:19.308 [INFO] [Thread-52239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:57:19.311 [DEBUG] [Thread-52239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:57:19.311 [DEBUG] [Thread-52239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] client lang: <none>
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] server lang: <none>
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] kex follows: False
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:57:19.312 [DEBUG] [Thread-52239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:57:19.313 [DEBUG] [Thread-52239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:57:19.313 [DEBUG] [Thread-52239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:57:19.313 [DEBUG] [Thread-52239] [transport.py] [_log()] Compression: none
2025-11-17T09:57:19.313 [DEBUG] [Thread-52239] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:57:19.336 [DEBUG] [Thread-52239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:57:19.336 [DEBUG] [Thread-52239] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:57:19.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:57:19.337 [DEBUG] [Thread-52239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:57:19.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:57:19.339 [DEBUG] [Thread-52239] [transport.py] [_log()] userauth is OK
2025-11-17T09:57:19.340 [DEBUG] [Thread-52239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:57:19.340 [DEBUG] [Thread-52239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:57:19.340 [DEBUG] [Thread-52239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:57:19.340 [DEBUG] [Thread-52239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:57:19.375 [INFO] [Thread-52239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:57:19.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:57:19.989 [DEBUG] [Thread-52239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:57:19.989 [DEBUG] [Thread-52239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:57:19.990 [DEBUG] [Thread-52239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:57:20.030 [DEBUG] [Thread-52239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:57:20.030 [DEBUG] [Thread-52239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:57:20.033 [DEBUG] [Thread-52239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:57:20.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:57:20.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:57:20.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:57:20.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:57:20.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:57:20.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:57:20.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:57:20.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:57:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:57:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.330952 -999.00  +16.80  15.18     34   +0.90 1 1 1 1 1   888    0 17.51 98.08 ----- 15.2 15.2 83.8 19.5 23.6 -25.1 23.1 -23.8 21.9 -25.1 22.6 -25.0
2025-11-17T09:57:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:57:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:57:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.330952
2025-11-17T09:57:20.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:57:20.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:57:20.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:57:20.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:57:20.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:57:20.057 [DEBUG] [Thread-52239] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:57:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:56:52', tmtdew=19.3, humidity=27.23, cloud=0.0, wind=16.76, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:56:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:57:20.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:57:20.165 [DEBUG] [Thread-52242] [transport.py] [_log()] starting thread (client mode): 0xd317de40
2025-11-17T09:57:20.165 [DEBUG] [Thread-52242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:57:20.180 [DEBUG] [Thread-52242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:57:20.181 [INFO] [Thread-52242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:57:20.190 [DEBUG] [Thread-52242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] client lang: <none>
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] server lang: <none>
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] kex follows: False
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:57:20.191 [DEBUG] [Thread-52242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:57:20.192 [DEBUG] [Thread-52242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:57:20.192 [DEBUG] [Thread-52242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:57:20.192 [DEBUG] [Thread-52242] [transport.py] [_log()] Compression: none
2025-11-17T09:57:20.192 [DEBUG] [Thread-52242] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:57:20.245 [DEBUG] [Thread-52242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:57:20.245 [DEBUG] [Thread-52242] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:57:20.245 [DEBUG] [Thread-52242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:57:20.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:57:20.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:57:20.309 [DEBUG] [Thread-52242] [transport.py] [_log()] userauth is OK
2025-11-17T09:57:20.309 [DEBUG] [Thread-52242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:57:20.309 [DEBUG] [Thread-52242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:57:20.309 [DEBUG] [Thread-52242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:57:20.309 [DEBUG] [Thread-52242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:57:20.335 [INFO] [Thread-52242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:57:20.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:57:20.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:57:21.223 [DEBUG] [Thread-52242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:57:21.223 [DEBUG] [Thread-52242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:57:21.271 [DEBUG] [Thread-52242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:57:21.272 [DEBUG] [Thread-52242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:57:21.280 [DEBUG] [Thread-52242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:57:21.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:57:21.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:57:21.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:57:21.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:57:21.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:57:21.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:57:21.319 [DEBUG] [Thread-52242] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:57:21.547 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:57:21.549 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:57:33.518 [DEBUG] [Thread-52244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:57:48.559 [DEBUG] [Thread-52245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:57:51.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:57:51.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:57: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
2025-11-17T09:57:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 57, 24), 19.44, 27.0, 0.0, 14.88, 17.53, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:57:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:57:24
2025-11-17T09:57:52.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:57:52.232 [DEBUG] [Thread-52246] [transport.py] [_log()] starting thread (client mode): 0xd0784130
2025-11-17T09:57:52.232 [DEBUG] [Thread-52246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:57:52.254 [DEBUG] [Thread-52246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:57:52.254 [INFO] [Thread-52246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] client lang: <none>
2025-11-17T09:57:52.257 [DEBUG] [Thread-52246] [transport.py] [_log()] server lang: <none>
2025-11-17T09:57:52.258 [DEBUG] [Thread-52246] [transport.py] [_log()] kex follows: False
2025-11-17T09:57:52.258 [DEBUG] [Thread-52246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:57:52.258 [DEBUG] [Thread-52246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:57:52.258 [DEBUG] [Thread-52246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:57:52.258 [DEBUG] [Thread-52246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:57:52.258 [DEBUG] [Thread-52246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:57:52.258 [DEBUG] [Thread-52246] [transport.py] [_log()] Compression: none
2025-11-17T09:57:52.258 [DEBUG] [Thread-52246] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:57:52.275 [DEBUG] [Thread-52246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:57:52.275 [DEBUG] [Thread-52246] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:57:52.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:57:52.276 [DEBUG] [Thread-52246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:57:52.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:57:52.278 [DEBUG] [Thread-52246] [transport.py] [_log()] userauth is OK
2025-11-17T09:57:52.278 [DEBUG] [Thread-52246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:57:52.278 [DEBUG] [Thread-52246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:57:52.278 [DEBUG] [Thread-52246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:57:52.279 [DEBUG] [Thread-52246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:57:52.302 [INFO] [Thread-52246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:57:52.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:57:52.929 [DEBUG] [Thread-52246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:57:52.930 [DEBUG] [Thread-52246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:57:52.930 [DEBUG] [Thread-52246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:57:52.970 [DEBUG] [Thread-52246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:57:52.971 [DEBUG] [Thread-52246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:57:52.973 [DEBUG] [Thread-52246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:57:52.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:57:52.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:57:52.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:57:52.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:57:52.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:57:52.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:57:52.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:57:52.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:57:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:57:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.331299 -999.00  +16.80  15.63     34   +0.90 1 1 1 1 1   888    0 17.72 100.69 ----- 15.6 15.6 76.8 20.5 23.6 -27.4 23.2 -24.5 22.0 -23.4 22.6 -25.2
2025-11-17T09:57:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:57:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:57:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.331299
2025-11-17T09:57:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:57:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:57:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:57:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:57:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:57:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:57:24', tmtdew=19.44, humidity=27.0, cloud=0.0, wind=14.88, temperature=17.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:57:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:57:52.995 [DEBUG] [Thread-52246] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:57:53.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:57:53.093 [DEBUG] [Thread-52249] [transport.py] [_log()] starting thread (client mode): 0xd3160b80
2025-11-17T09:57:53.093 [DEBUG] [Thread-52249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:57:53.108 [DEBUG] [Thread-52249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:57:53.108 [INFO] [Thread-52249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:57:53.119 [DEBUG] [Thread-52249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:57:53.119 [DEBUG] [Thread-52249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:57:53.119 [DEBUG] [Thread-52249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:57:53.119 [DEBUG] [Thread-52249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:57:53.119 [DEBUG] [Thread-52249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] client lang: <none>
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] server lang: <none>
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] kex follows: False
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] Compression: none
2025-11-17T09:57:53.120 [DEBUG] [Thread-52249] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:57:53.174 [DEBUG] [Thread-52249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:57:53.174 [DEBUG] [Thread-52249] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:57:53.175 [DEBUG] [Thread-52249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:57:53.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:57:53.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:57:53.235 [DEBUG] [Thread-52249] [transport.py] [_log()] userauth is OK
2025-11-17T09:57:53.235 [DEBUG] [Thread-52249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:57:53.235 [DEBUG] [Thread-52249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:57:53.235 [DEBUG] [Thread-52249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:57:53.235 [DEBUG] [Thread-52249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:57:53.254 [INFO] [Thread-52249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:57:53.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:57:53.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:57:54.176 [DEBUG] [Thread-52249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:57:54.177 [DEBUG] [Thread-52249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:57:54.224 [DEBUG] [Thread-52249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:57:54.224 [DEBUG] [Thread-52249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:57:54.233 [DEBUG] [Thread-52249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:57:54.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:57:54.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:57:54.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:57:54.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:57:54.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:57:54.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:57:54.266 [DEBUG] [Thread-52249] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:58:01.990 [DEBUG] [Thread-52251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:58:03.593 [DEBUG] [Thread-52252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:58:18.632 [DEBUG] [Thread-52253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:58:21.691 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:58:21.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:58:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:58:24.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:58:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:58:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 57, 56), 19.13, 27.08, 0.0, 13.01, 17.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:58:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:57:56
2025-11-17T09:58:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:58:25.178 [DEBUG] [Thread-52254] [transport.py] [_log()] starting thread (client mode): 0xd0786290
2025-11-17T09:58:25.178 [DEBUG] [Thread-52254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:58:25.198 [DEBUG] [Thread-52254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:58:25.198 [INFO] [Thread-52254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:58:25.200 [DEBUG] [Thread-52254] [transport.py] [_log()] client lang: <none>
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] server lang: <none>
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] kex follows: False
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] Compression: none
2025-11-17T09:58:25.201 [DEBUG] [Thread-52254] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:58:25.213 [DEBUG] [Thread-52254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:58:25.213 [DEBUG] [Thread-52254] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:58:25.214 [DEBUG] [Thread-52254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:58:25.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:58:25.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:58:25.216 [DEBUG] [Thread-52254] [transport.py] [_log()] userauth is OK
2025-11-17T09:58:25.216 [DEBUG] [Thread-52254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:58:25.216 [DEBUG] [Thread-52254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:58:25.216 [DEBUG] [Thread-52254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:58:25.216 [DEBUG] [Thread-52254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:58:25.240 [INFO] [Thread-52254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:58:25.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:58:25.898 [DEBUG] [Thread-52254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:58:25.898 [DEBUG] [Thread-52254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:58:25.898 [DEBUG] [Thread-52254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:58:25.940 [DEBUG] [Thread-52254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:58:25.940 [DEBUG] [Thread-52254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:58:25.943 [DEBUG] [Thread-52254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:58:25.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:58:25.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:58:25.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:58:25.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:58:25.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:58:25.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:58:25.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:58:25.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:58:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:58:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.331646 -999.00  +16.80  11.84     34   +0.80 1 1 1 1 1   888    0 17.91 108.58 ----- 11.8 11.8 107.9 13.6 23.7 -25.1 23.2 -24.5 22.0 -24.6 22.6 -24.5
2025-11-17T09:58:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:58:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:58:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.331646
2025-11-17T09:58:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:58:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:58:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:58:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:58:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:58:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:57:56', tmtdew=19.13, humidity=27.08, cloud=0.0, wind=13.01, temperature=17.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:57:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:58:25.968 [DEBUG] [Thread-52254] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:58:26.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:58:26.064 [DEBUG] [Thread-52257] [transport.py] [_log()] starting thread (client mode): 0xd7bc7e20
2025-11-17T09:58:26.064 [DEBUG] [Thread-52257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:58:26.080 [DEBUG] [Thread-52257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:58:26.080 [INFO] [Thread-52257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:58:26.087 [DEBUG] [Thread-52257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:58:26.087 [DEBUG] [Thread-52257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:58:26.087 [DEBUG] [Thread-52257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:58:26.087 [DEBUG] [Thread-52257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:58:26.087 [DEBUG] [Thread-52257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:58:26.087 [DEBUG] [Thread-52257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:58:26.087 [DEBUG] [Thread-52257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] client lang: <none>
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] server lang: <none>
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] kex follows: False
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] Compression: none
2025-11-17T09:58:26.088 [DEBUG] [Thread-52257] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:58:26.150 [DEBUG] [Thread-52257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:58:26.150 [DEBUG] [Thread-52257] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:58:26.151 [DEBUG] [Thread-52257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:58:26.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:58:26.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:58:26.210 [DEBUG] [Thread-52257] [transport.py] [_log()] userauth is OK
2025-11-17T09:58:26.210 [DEBUG] [Thread-52257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:58:26.210 [DEBUG] [Thread-52257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:58:26.211 [DEBUG] [Thread-52257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:58:26.211 [DEBUG] [Thread-52257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:58:26.230 [INFO] [Thread-52257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:58:26.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:58:26.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:58:27.103 [DEBUG] [Thread-52257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:58:27.104 [DEBUG] [Thread-52257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:58:27.151 [DEBUG] [Thread-52257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:58:27.151 [DEBUG] [Thread-52257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:58:27.160 [DEBUG] [Thread-52257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:58:27.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:58:27.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:58:27.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:58:27.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:58:27.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:58:27.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:58:27.198 [DEBUG] [Thread-52257] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:58:33.663 [DEBUG] [Thread-52259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:58:48.701 [DEBUG] [Thread-52260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:58:57.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:58:57.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:58:57.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:58:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 58, 28), 19.07, 27.18, 0.0, 12.14, 17.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:58:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:58:28
2025-11-17T09:58:57.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:58:58.125 [DEBUG] [Thread-52261] [transport.py] [_log()] starting thread (client mode): 0xd7bc59c0
2025-11-17T09:58:58.126 [DEBUG] [Thread-52261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:58:58.145 [DEBUG] [Thread-52261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:58:58.145 [INFO] [Thread-52261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] client lang: <none>
2025-11-17T09:58:58.148 [DEBUG] [Thread-52261] [transport.py] [_log()] server lang: <none>
2025-11-17T09:58:58.149 [DEBUG] [Thread-52261] [transport.py] [_log()] kex follows: False
2025-11-17T09:58:58.149 [DEBUG] [Thread-52261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:58:58.149 [DEBUG] [Thread-52261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:58:58.149 [DEBUG] [Thread-52261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:58:58.149 [DEBUG] [Thread-52261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:58:58.149 [DEBUG] [Thread-52261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:58:58.149 [DEBUG] [Thread-52261] [transport.py] [_log()] Compression: none
2025-11-17T09:58:58.149 [DEBUG] [Thread-52261] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:58:58.166 [DEBUG] [Thread-52261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:58:58.167 [DEBUG] [Thread-52261] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:58:58.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:58:58.168 [DEBUG] [Thread-52261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:58:58.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:58:58.169 [DEBUG] [Thread-52261] [transport.py] [_log()] userauth is OK
2025-11-17T09:58:58.170 [DEBUG] [Thread-52261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:58:58.170 [DEBUG] [Thread-52261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:58:58.170 [DEBUG] [Thread-52261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:58:58.170 [DEBUG] [Thread-52261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:58:58.188 [INFO] [Thread-52261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:58:58.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:58:58.809 [DEBUG] [Thread-52261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:58:58.809 [DEBUG] [Thread-52261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:58:58.810 [DEBUG] [Thread-52261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:58:58.850 [DEBUG] [Thread-52261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:58:58.851 [DEBUG] [Thread-52261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:58:58.853 [DEBUG] [Thread-52261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:58:58.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:58:58.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:58:58.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:58:58.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:58:58.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:58:58.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:58:58.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:58:58.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:58:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:58:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.331994 -999.00  +16.80  14.06     34   +0.80 1 1 1 1 1   888    0 18.36 114.47 ----- 14.1 14.1 60.8 16.2 23.8 -28.0 23.3 -23.8 22.1 -24.3 22.7 -24.6
2025-11-17T09:58:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:58:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:58:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.331994
2025-11-17T09:58:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:58:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:58:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:58:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:58:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:58:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:58:28', tmtdew=19.07, humidity=27.18, cloud=0.0, wind=12.14, temperature=17.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:58:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:58:58.878 [DEBUG] [Thread-52261] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:58:58.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:58:58.975 [DEBUG] [Thread-52264] [transport.py] [_log()] starting thread (client mode): 0xd07850f0
2025-11-17T09:58:58.975 [DEBUG] [Thread-52264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:58:58.989 [DEBUG] [Thread-52264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:58:58.989 [INFO] [Thread-52264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] client lang: <none>
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] server lang: <none>
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] kex follows: False
2025-11-17T09:58:58.997 [DEBUG] [Thread-52264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:58:58.998 [DEBUG] [Thread-52264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:58:58.998 [DEBUG] [Thread-52264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:58:58.998 [DEBUG] [Thread-52264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:58:58.998 [DEBUG] [Thread-52264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:58:58.998 [DEBUG] [Thread-52264] [transport.py] [_log()] Compression: none
2025-11-17T09:58:58.998 [DEBUG] [Thread-52264] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:58:59.054 [DEBUG] [Thread-52264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:58:59.054 [DEBUG] [Thread-52264] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:58:59.055 [DEBUG] [Thread-52264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:58:59.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:58:59.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:58:59.114 [DEBUG] [Thread-52264] [transport.py] [_log()] userauth is OK
2025-11-17T09:58:59.114 [DEBUG] [Thread-52264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:58:59.115 [DEBUG] [Thread-52264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:58:59.115 [DEBUG] [Thread-52264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:58:59.115 [DEBUG] [Thread-52264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:58:59.135 [INFO] [Thread-52264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:58:59.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:58:59.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:58:59.998 [DEBUG] [Thread-52264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:58:59.998 [DEBUG] [Thread-52264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:59:00.046 [DEBUG] [Thread-52264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:59:00.046 [DEBUG] [Thread-52264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:59:00.055 [DEBUG] [Thread-52264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:59:00.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:59: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')
2025-11-17T09:59:00.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:59:00.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:59:00.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:59:00.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:59:00.089 [DEBUG] [Thread-52264] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:59:02.042 [DEBUG] [Thread-52266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:59:03.730 [DEBUG] [Thread-52267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:59:18.774 [DEBUG] [Thread-52268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:59:21.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:59:21.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:59:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T09:59:30.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T09:59:30.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T09:59:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 58, 28), 19.12, 27.18, 0.0, 12.14, 17.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T09:59:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:58:28
2025-11-17T09:59:30.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T09:59:31.027 [DEBUG] [Thread-52269] [transport.py] [_log()] starting thread (client mode): 0xd07ce800
2025-11-17T09:59:31.027 [DEBUG] [Thread-52269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:59:31.047 [DEBUG] [Thread-52269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T09:59:31.047 [INFO] [Thread-52269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T09:59:31.050 [DEBUG] [Thread-52269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:59:31.050 [DEBUG] [Thread-52269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T09:59:31.050 [DEBUG] [Thread-52269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] client lang: <none>
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] server lang: <none>
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] kex follows: False
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:59:31.051 [DEBUG] [Thread-52269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:59:31.052 [DEBUG] [Thread-52269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:59:31.052 [DEBUG] [Thread-52269] [transport.py] [_log()] Compression: none
2025-11-17T09:59:31.052 [DEBUG] [Thread-52269] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:59:31.069 [DEBUG] [Thread-52269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:59:31.069 [DEBUG] [Thread-52269] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:59:31.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T09:59:31.070 [DEBUG] [Thread-52269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T09:59:31.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:59:31.112 [DEBUG] [Thread-52269] [transport.py] [_log()] userauth is OK
2025-11-17T09:59:31.112 [DEBUG] [Thread-52269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:59:31.112 [DEBUG] [Thread-52269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:59:31.112 [DEBUG] [Thread-52269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T09:59:31.113 [DEBUG] [Thread-52269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:59:31.149 [INFO] [Thread-52269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:59:31.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:59:31.721 [DEBUG] [Thread-52269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:59:31.721 [DEBUG] [Thread-52269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:59:31.722 [DEBUG] [Thread-52269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T09:59:31.762 [DEBUG] [Thread-52269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:59:31.763 [DEBUG] [Thread-52269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:59:31.765 [DEBUG] [Thread-52269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:59:31.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:59:31.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T09:59:31.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T09:59:31.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T09:59:31.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:59:31.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T09:59:31.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:59:31.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:59:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T09:59:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.332341 -999.00  +16.80   8.68     33   +0.80 1 1 1 1 1   888    0 18.08 106.91 ----- 8.7 8.7 72.4 12.7 24.1 -24.8 23.4 -24.1 22.1 -24.7 22.8 -24.7
2025-11-17T09:59:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T09:59:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T09:59:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.332341
2025-11-17T09:59:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T09:59:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T09:59:31.789 [DEBUG] [Thread-52269] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:58:28', tmtdew=19.12, humidity=27.18, cloud=0.0, wind=12.14, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:58:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T09:59:31.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T09:59:31.884 [DEBUG] [Thread-52272] [transport.py] [_log()] starting thread (client mode): 0xd31cc730
2025-11-17T09:59:31.885 [DEBUG] [Thread-52272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T09:59:31.900 [DEBUG] [Thread-52272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T09:59:31.900 [INFO] [Thread-52272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T09:59:31.907 [DEBUG] [Thread-52272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] client lang: <none>
2025-11-17T09:59:31.908 [DEBUG] [Thread-52272] [transport.py] [_log()] server lang: <none>
2025-11-17T09:59:31.909 [DEBUG] [Thread-52272] [transport.py] [_log()] kex follows: False
2025-11-17T09:59:31.909 [DEBUG] [Thread-52272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T09:59:31.909 [DEBUG] [Thread-52272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T09:59:31.909 [DEBUG] [Thread-52272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T09:59:31.909 [DEBUG] [Thread-52272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T09:59:31.909 [DEBUG] [Thread-52272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T09:59:31.909 [DEBUG] [Thread-52272] [transport.py] [_log()] Compression: none
2025-11-17T09:59:31.910 [DEBUG] [Thread-52272] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T09:59:31.966 [DEBUG] [Thread-52272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T09:59:31.967 [DEBUG] [Thread-52272] [transport.py] [_log()] Switch to new keys ...
2025-11-17T09:59:31.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T09:59:31.968 [DEBUG] [Thread-52272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T09:59:31.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T09:59:32.022 [DEBUG] [Thread-52272] [transport.py] [_log()] userauth is OK
2025-11-17T09:59:32.022 [DEBUG] [Thread-52272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T09:59:32.023 [DEBUG] [Thread-52272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T09:59:32.023 [DEBUG] [Thread-52272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T09:59:32.023 [DEBUG] [Thread-52272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T09:59:32.042 [INFO] [Thread-52272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T09:59:32.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T09:59:32.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T09:59:32.908 [DEBUG] [Thread-52272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T09:59:32.908 [DEBUG] [Thread-52272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T09:59:32.957 [DEBUG] [Thread-52272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T09:59:32.957 [DEBUG] [Thread-52272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T09:59:32.965 [DEBUG] [Thread-52272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T09:59:32.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T09:59:32.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T09:59:32.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T09:59:32.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T09:59:32.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T09:59:32.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T09:59:32.996 [DEBUG] [Thread-52272] [transport.py] [_log()] EOF in transport thread
2025-11-17T09:59:33.802 [DEBUG] [Thread-52274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T09:59:48.837 [DEBUG] [Thread-52275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:00:02.092 [DEBUG] [Thread-52276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:00:03.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:00:03.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:00:03.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:00:03.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 9, 59, 32), 19.18, 27.1, 0.0, 19.02, 17.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:00:03.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 09:59:32
2025-11-17T10:00:03.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:00:03.868 [DEBUG] [Thread-52277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:00:03.982 [DEBUG] [Thread-52278] [transport.py] [_log()] starting thread (client mode): 0xd317da50
2025-11-17T10:00:03.983 [DEBUG] [Thread-52278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:00:04.004 [DEBUG] [Thread-52278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:00:04.005 [INFO] [Thread-52278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:00:04.008 [DEBUG] [Thread-52278] [transport.py] [_log()] client lang: <none>
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] server lang: <none>
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] kex follows: False
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] Compression: none
2025-11-17T10:00:04.009 [DEBUG] [Thread-52278] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:00:04.024 [DEBUG] [Thread-52278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:00:04.024 [DEBUG] [Thread-52278] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:00:04.024 [DEBUG] [Thread-52278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:00:04.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:00:04.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:00:04.025 [DEBUG] [Thread-52278] [transport.py] [_log()] userauth is OK
2025-11-17T10:00:04.025 [DEBUG] [Thread-52278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:00:04.026 [DEBUG] [Thread-52278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:00:04.026 [DEBUG] [Thread-52278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:00:04.026 [DEBUG] [Thread-52278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:00:04.036 [INFO] [Thread-52278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:00:04.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:00:06.957 [DEBUG] [Thread-52278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:00:06.958 [DEBUG] [Thread-52278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:00:06.958 [DEBUG] [Thread-52278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:00:06.998 [DEBUG] [Thread-52278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:00:06.998 [DEBUG] [Thread-52278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:00:07.001 [DEBUG] [Thread-52278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:00:07.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:00:07.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:00:07.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:00:07.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:00:07.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:00:07.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:00:07.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:00:07.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:00:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:00:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.332688 -999.00  +16.80   9.42     34   +0.80 1 1 1 1 1   888    0 18.60 121.40 ----- 9.4 9.4 69.7 15.6 24.1 -24.7 23.4 -24.0 22.2 -24.3 22.9 -24.7
2025-11-17T10:00:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:00:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:00:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.332688
2025-11-17T10:00:07.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:00:07.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:00:07.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:00:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:00:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:00:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T09:59:32', tmtdew=19.18, humidity=27.1, cloud=0.0, wind=19.02, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T07:59:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:00:07.028 [DEBUG] [Thread-52278] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:00:07.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:00:07.125 [DEBUG] [Thread-52281] [transport.py] [_log()] starting thread (client mode): 0xd3162ad0
2025-11-17T10:00:07.125 [DEBUG] [Thread-52281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:00:07.140 [DEBUG] [Thread-52281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:00:07.140 [INFO] [Thread-52281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:00:07.147 [DEBUG] [Thread-52281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:00:07.147 [DEBUG] [Thread-52281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:00:07.147 [DEBUG] [Thread-52281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] client lang: <none>
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] server lang: <none>
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] kex follows: False
2025-11-17T10:00:07.148 [DEBUG] [Thread-52281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:00:07.149 [DEBUG] [Thread-52281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:00:07.149 [DEBUG] [Thread-52281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:00:07.149 [DEBUG] [Thread-52281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:00:07.149 [DEBUG] [Thread-52281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:00:07.149 [DEBUG] [Thread-52281] [transport.py] [_log()] Compression: none
2025-11-17T10:00:07.149 [DEBUG] [Thread-52281] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:00:07.206 [DEBUG] [Thread-52281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:00:07.207 [DEBUG] [Thread-52281] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:00:07.208 [DEBUG] [Thread-52281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:00:07.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:00:07.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:00:07.263 [DEBUG] [Thread-52281] [transport.py] [_log()] userauth is OK
2025-11-17T10:00:07.263 [DEBUG] [Thread-52281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:00:07.263 [DEBUG] [Thread-52281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:00:07.263 [DEBUG] [Thread-52281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:00:07.263 [DEBUG] [Thread-52281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:00:07.283 [INFO] [Thread-52281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:00:07.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:00:07.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:00:08.231 [DEBUG] [Thread-52281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:00:08.231 [DEBUG] [Thread-52281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:00:08.279 [DEBUG] [Thread-52281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:00:08.279 [DEBUG] [Thread-52281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:00:08.289 [DEBUG] [Thread-52281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:00:08.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:00:08.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:00:08.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:00:08.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:00:08.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:00:08.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:00:08.324 [DEBUG] [Thread-52281] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:00:18.899 [DEBUG] [Thread-52283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:00:21.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:00:21.977 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:00:33.950 [DEBUG] [Thread-52284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:00:38.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:00:38.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:00:38.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:00:39.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 0, 4), 19.2, 27.03, 0.0, 17.77, 17.3, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:00:39.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:00:04
2025-11-17T10:00:39.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:00:39.274 [DEBUG] [Thread-52285] [transport.py] [_log()] starting thread (client mode): 0xd07cfaf0
2025-11-17T10:00:39.274 [DEBUG] [Thread-52285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:00:39.294 [DEBUG] [Thread-52285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:00:39.294 [INFO] [Thread-52285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] client lang: <none>
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] server lang: <none>
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] kex follows: False
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] Compression: none
2025-11-17T10:00:39.297 [DEBUG] [Thread-52285] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:00:39.312 [DEBUG] [Thread-52285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:00:39.312 [DEBUG] [Thread-52285] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:00:39.312 [DEBUG] [Thread-52285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:00:39.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:00:39.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:00:39.313 [DEBUG] [Thread-52285] [transport.py] [_log()] userauth is OK
2025-11-17T10:00:39.313 [DEBUG] [Thread-52285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:00:39.313 [DEBUG] [Thread-52285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:00:39.313 [DEBUG] [Thread-52285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:00:39.313 [DEBUG] [Thread-52285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:00:39.324 [INFO] [Thread-52285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:00:39.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:00:39.976 [DEBUG] [Thread-52285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:00:39.976 [DEBUG] [Thread-52285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:00:39.976 [DEBUG] [Thread-52285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:00:40.017 [DEBUG] [Thread-52285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:00:40.017 [DEBUG] [Thread-52285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:00:40.019 [DEBUG] [Thread-52285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:00:40.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:00:40.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:00:40.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:00:40.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:00:40.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:00:40.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:00:40.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:00:40.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:00:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:00:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.333382 -999.00  +16.80  13.71     33   +0.80 1 1 1 1 1   888    0 18.02 112.25 ----- 13.7 13.7 114.3 22.2 23.8 -28.2 23.5 -24.4 22.3 -24.0 22.9 -24.2
2025-11-17T10:00:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:00:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:00:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.333382
2025-11-17T10:00:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:00:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:00:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:00:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:00:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:00:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:00:04', tmtdew=19.2, humidity=27.03, cloud=0.0, wind=17.77, temperature=17.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:00:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:00:40.038 [DEBUG] [Thread-52285] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:00:40.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:00:40.124 [DEBUG] [Thread-52288] [transport.py] [_log()] starting thread (client mode): 0xd31cf460
2025-11-17T10:00:40.124 [DEBUG] [Thread-52288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:00:40.139 [DEBUG] [Thread-52288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:00:40.140 [INFO] [Thread-52288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] client lang: <none>
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] server lang: <none>
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] kex follows: False
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:00:40.147 [DEBUG] [Thread-52288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:00:40.148 [DEBUG] [Thread-52288] [transport.py] [_log()] Compression: none
2025-11-17T10:00:40.148 [DEBUG] [Thread-52288] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:00:40.208 [DEBUG] [Thread-52288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:00:40.208 [DEBUG] [Thread-52288] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:00:40.208 [DEBUG] [Thread-52288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:00:40.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:00:40.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:00:40.267 [DEBUG] [Thread-52288] [transport.py] [_log()] userauth is OK
2025-11-17T10:00:40.267 [DEBUG] [Thread-52288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:00:40.267 [DEBUG] [Thread-52288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:00:40.267 [DEBUG] [Thread-52288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:00:40.267 [DEBUG] [Thread-52288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:00:40.282 [INFO] [Thread-52288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:00:40.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:00:40.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:00:41.172 [DEBUG] [Thread-52288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:00:41.172 [DEBUG] [Thread-52288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:00:41.219 [DEBUG] [Thread-52288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:00:41.220 [DEBUG] [Thread-52288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:00:41.228 [DEBUG] [Thread-52288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:00:41.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:00:41.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:00:41.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:00:41.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:00:41.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:00:41.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:00:41.259 [DEBUG] [Thread-52288] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:00:48.986 [DEBUG] [Thread-52290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:01:02.152 [DEBUG] [Thread-52291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:01:04.024 [DEBUG] [Thread-52292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:01:11.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:01:11.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:01:11.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:01:11.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 1, 8), 19.26, 26.75, 0.0, 21.17, 17.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:01:11.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:01:08
2025-11-17T10:01:12.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:01:12.208 [DEBUG] [Thread-52293] [transport.py] [_log()] starting thread (client mode): 0xd07cf160
2025-11-17T10:01:12.208 [DEBUG] [Thread-52293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:01:12.228 [DEBUG] [Thread-52293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:01:12.228 [INFO] [Thread-52293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:01:12.231 [DEBUG] [Thread-52293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:01:12.231 [DEBUG] [Thread-52293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:01:12.231 [DEBUG] [Thread-52293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:01:12.231 [DEBUG] [Thread-52293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:01:12.231 [DEBUG] [Thread-52293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] client lang: <none>
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] server lang: <none>
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] kex follows: False
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] Compression: none
2025-11-17T10:01:12.232 [DEBUG] [Thread-52293] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:01:12.249 [DEBUG] [Thread-52293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:01:12.249 [DEBUG] [Thread-52293] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:01:12.250 [DEBUG] [Thread-52293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:01:12.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:01:12.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:01:12.252 [DEBUG] [Thread-52293] [transport.py] [_log()] userauth is OK
2025-11-17T10:01:12.252 [DEBUG] [Thread-52293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:01:12.252 [DEBUG] [Thread-52293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:01:12.252 [DEBUG] [Thread-52293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:01:12.252 [DEBUG] [Thread-52293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:01:12.269 [INFO] [Thread-52293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:01:12.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:01:12.907 [DEBUG] [Thread-52293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:01:12.908 [DEBUG] [Thread-52293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:01:12.908 [DEBUG] [Thread-52293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:01:12.948 [DEBUG] [Thread-52293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:01:12.949 [DEBUG] [Thread-52293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:01:12.952 [DEBUG] [Thread-52293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:01:12.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:01:12.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:01:12.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:01:12.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:01:12.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:01:12.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:01:12.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:01:12.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:01:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:01:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.333730 -999.00  +17.20  19.18     33   +1.10 1 1 1 1 1   888    0 18.48 113.22 ----- 19.2 19.2 109.7 24.3 24.0 -25.0 23.6 -23.9 22.4 -24.3 23.0 -24.0
2025-11-17T10:01:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:01:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:01:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.333730
2025-11-17T10:01:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:01:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:01:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:01:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:01:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:01:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:01:08', tmtdew=19.26, humidity=26.75, cloud=0.0, wind=21.17, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:00:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:01:12.976 [DEBUG] [Thread-52293] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:01:13.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:01:13.073 [DEBUG] [Thread-52296] [transport.py] [_log()] starting thread (client mode): 0xd07ce4d0
2025-11-17T10:01:13.073 [DEBUG] [Thread-52296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:01:13.088 [DEBUG] [Thread-52296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:01:13.088 [INFO] [Thread-52296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] client lang: <none>
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] server lang: <none>
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] kex follows: False
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:01:13.096 [DEBUG] [Thread-52296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:01:13.097 [DEBUG] [Thread-52296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:01:13.097 [DEBUG] [Thread-52296] [transport.py] [_log()] Compression: none
2025-11-17T10:01:13.097 [DEBUG] [Thread-52296] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:01:13.154 [DEBUG] [Thread-52296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:01:13.155 [DEBUG] [Thread-52296] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:01:13.155 [DEBUG] [Thread-52296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:01:13.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:01:13.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:01:13.211 [DEBUG] [Thread-52296] [transport.py] [_log()] userauth is OK
2025-11-17T10:01:13.211 [DEBUG] [Thread-52296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:01:13.211 [DEBUG] [Thread-52296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:01:13.211 [DEBUG] [Thread-52296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:01:13.211 [DEBUG] [Thread-52296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:01:13.234 [INFO] [Thread-52296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:01:13.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:01:13.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:01:14.076 [DEBUG] [Thread-52296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:01:14.076 [DEBUG] [Thread-52296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:01:14.124 [DEBUG] [Thread-52296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:01:14.124 [DEBUG] [Thread-52296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:01:14.134 [DEBUG] [Thread-52296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:01:14.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:01:14.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:01:14.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:01:14.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:01:14.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:01:14.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:01:14.174 [DEBUG] [Thread-52296] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:01:19.048 [DEBUG] [Thread-52298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:01:22.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:01:22.119 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:01:34.076 [DEBUG] [Thread-52299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:01:44.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:01:44.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:01:44.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:01:44.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 1, 40), 19.35, 26.49, 0.0, 21.42, 17.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:01:44.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:01:40
2025-11-17T10:01:44.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:01:45.098 [DEBUG] [Thread-52300] [transport.py] [_log()] starting thread (client mode): 0xd07bdd20
2025-11-17T10:01:45.099 [DEBUG] [Thread-52300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:01:45.119 [DEBUG] [Thread-52300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:01:45.119 [INFO] [Thread-52300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] client lang: <none>
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] server lang: <none>
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] kex follows: False
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:01:45.122 [DEBUG] [Thread-52300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:01:45.123 [DEBUG] [Thread-52300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:01:45.123 [DEBUG] [Thread-52300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:01:45.123 [DEBUG] [Thread-52300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:01:45.123 [DEBUG] [Thread-52300] [transport.py] [_log()] Compression: none
2025-11-17T10:01:45.123 [DEBUG] [Thread-52300] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:01:45.139 [DEBUG] [Thread-52300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:01:45.139 [DEBUG] [Thread-52300] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:01:45.139 [DEBUG] [Thread-52300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:01:45.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:01:45.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:01:45.184 [DEBUG] [Thread-52300] [transport.py] [_log()] userauth is OK
2025-11-17T10:01:45.184 [DEBUG] [Thread-52300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:01:45.185 [DEBUG] [Thread-52300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:01:45.185 [DEBUG] [Thread-52300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:01:45.185 [DEBUG] [Thread-52300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:01:45.209 [INFO] [Thread-52300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:01:45.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:01:45.863 [DEBUG] [Thread-52300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:01:45.864 [DEBUG] [Thread-52300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:01:45.864 [DEBUG] [Thread-52300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:01:45.904 [DEBUG] [Thread-52300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:01:45.905 [DEBUG] [Thread-52300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:01:45.907 [DEBUG] [Thread-52300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:01:45.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:01:45.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:01:45.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:01:45.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:01:45.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:01:45.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:01:45.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:01:45.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:01:45.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:01:45.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.334077 -999.00  +17.60  23.15     32   +1.00 1 1 1 1 1   888    0 18.75 118.60 ----- 23.1 23.1 117.7 28.3 24.1 -29.0 23.6 -24.4 22.5 -24.3 23.0 -24.4
2025-11-17T10:01:45.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:01:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:01:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.334077
2025-11-17T10:01:45.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:01:45.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:01:45.933 [DEBUG] [Thread-52300] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:01:45.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:01:45.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:01:45.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:01:45.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:01:40', tmtdew=19.35, humidity=26.49, cloud=0.0, wind=21.42, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:01:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:01:46.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:01:46.033 [DEBUG] [Thread-52303] [transport.py] [_log()] starting thread (client mode): 0xd07bd8a0
2025-11-17T10:01:46.033 [DEBUG] [Thread-52303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:01:46.049 [DEBUG] [Thread-52303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:01:46.049 [INFO] [Thread-52303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:01:46.056 [DEBUG] [Thread-52303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:01:46.056 [DEBUG] [Thread-52303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:01:46.056 [DEBUG] [Thread-52303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:01:46.056 [DEBUG] [Thread-52303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:01:46.056 [DEBUG] [Thread-52303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:01:46.056 [DEBUG] [Thread-52303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] client lang: <none>
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] server lang: <none>
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] kex follows: False
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] Compression: none
2025-11-17T10:01:46.057 [DEBUG] [Thread-52303] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:01:46.113 [DEBUG] [Thread-52303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:01:46.113 [DEBUG] [Thread-52303] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:01:46.114 [DEBUG] [Thread-52303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:01:46.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:01:46.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:01:46.169 [DEBUG] [Thread-52303] [transport.py] [_log()] userauth is OK
2025-11-17T10:01:46.170 [DEBUG] [Thread-52303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:01:46.170 [DEBUG] [Thread-52303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:01:46.170 [DEBUG] [Thread-52303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:01:46.170 [DEBUG] [Thread-52303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:01:46.194 [INFO] [Thread-52303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:01:46.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:01:46.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:01:47.130 [DEBUG] [Thread-52303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:01:47.130 [DEBUG] [Thread-52303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:01:47.178 [DEBUG] [Thread-52303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:01:47.178 [DEBUG] [Thread-52303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:01:47.187 [DEBUG] [Thread-52303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:01:47.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:01:47.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:01:47.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:01:47.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:01:47.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:01:47.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:01:47.221 [DEBUG] [Thread-52303] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:01:49.101 [DEBUG] [Thread-52305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:02:02.226 [DEBUG] [Thread-52306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:02:04.151 [DEBUG] [Thread-52307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:02:17.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:02:17.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:02:17.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:02:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 2, 12), 19.34, 26.56, 0.0, 22.5, 17.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:02:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:02:12
2025-11-17T10:02:18.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:02:18.166 [DEBUG] [Thread-52308] [transport.py] [_log()] starting thread (client mode): 0xd07cec50
2025-11-17T10:02:18.166 [DEBUG] [Thread-52308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:02:18.187 [DEBUG] [Thread-52308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:02:18.187 [INFO] [Thread-52308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] client lang: <none>
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] server lang: <none>
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] kex follows: False
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:02:18.190 [DEBUG] [Thread-52308] [transport.py] [_log()] Compression: none
2025-11-17T10:02:18.191 [DEBUG] [Thread-52308] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:02:18.207 [DEBUG] [Thread-52308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:02:18.208 [DEBUG] [Thread-52308] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:02:18.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:02:18.209 [DEBUG] [Thread-52308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:02:18.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:02:18.210 [DEBUG] [Thread-52308] [transport.py] [_log()] userauth is OK
2025-11-17T10:02:18.211 [DEBUG] [Thread-52308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:02:18.211 [DEBUG] [Thread-52308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:02:18.211 [DEBUG] [Thread-52308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:02:18.211 [DEBUG] [Thread-52308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:02:18.243 [INFO] [Thread-52308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:02:18.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:02:18.878 [DEBUG] [Thread-52308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:02:18.879 [DEBUG] [Thread-52308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:02:18.879 [DEBUG] [Thread-52308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:02:18.919 [DEBUG] [Thread-52308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:02:18.919 [DEBUG] [Thread-52308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:02:18.922 [DEBUG] [Thread-52308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:02:18.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:02:18.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:02:18.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:02:18.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:02:18.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:02:18.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:02:18.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:02:18.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:02:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:02:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.334424 -999.00  +17.20  19.42     33   +0.80 1 1 1 1 1   888    0 18.54 117.04 ----- 19.4 19.4 116.0 27.0 24.0 -25.5 23.7 -24.2 22.5 -24.8 23.0 -25.9
2025-11-17T10:02:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:02:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:02:18.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.334424
2025-11-17T10:02:18.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:02:18.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:02:18.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:02:18.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:02:18.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:02:18.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:02:12', tmtdew=19.34, humidity=26.56, cloud=0.0, wind=22.5, temperature=17.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:01:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:02:18.951 [DEBUG] [Thread-52308] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:02:19.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:02:19.049 [DEBUG] [Thread-52311] [transport.py] [_log()] starting thread (client mode): 0xd31cee90
2025-11-17T10:02:19.049 [DEBUG] [Thread-52311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:02:19.064 [DEBUG] [Thread-52311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:02:19.064 [INFO] [Thread-52311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:02:19.071 [DEBUG] [Thread-52311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:02:19.071 [DEBUG] [Thread-52311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:02:19.071 [DEBUG] [Thread-52311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:02:19.071 [DEBUG] [Thread-52311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] client lang: <none>
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] server lang: <none>
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] kex follows: False
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] Compression: none
2025-11-17T10:02:19.072 [DEBUG] [Thread-52311] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:02:19.130 [DEBUG] [Thread-52311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:02:19.130 [DEBUG] [Thread-52311] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:02:19.131 [DEBUG] [Thread-52311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:02:19.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:02:19.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:02:19.181 [DEBUG] [Thread-52313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:02:19.187 [DEBUG] [Thread-52311] [transport.py] [_log()] userauth is OK
2025-11-17T10:02:19.187 [DEBUG] [Thread-52311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:02:19.187 [DEBUG] [Thread-52311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:02:19.187 [DEBUG] [Thread-52311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:02:19.188 [DEBUG] [Thread-52311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:02:19.209 [INFO] [Thread-52311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:02:19.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:02:19.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:02:20.100 [DEBUG] [Thread-52311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:02:20.108 [DEBUG] [Thread-52311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:02:20.147 [DEBUG] [Thread-52311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:02:20.148 [DEBUG] [Thread-52311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:02:20.156 [DEBUG] [Thread-52311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:02:20.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:02:20.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:02:20.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:02:20.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:02:20.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:02:20.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:02:20.190 [DEBUG] [Thread-52311] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:02:22.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:02:22.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:02:34.227 [DEBUG] [Thread-52314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:02:49.262 [DEBUG] [Thread-52315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:02:50.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:02:50.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:02:50.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:02:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 2, 44), 19.58, 26.18, 0.0, 20.91, 17.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:02:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:02:44
2025-11-17T10:02:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:02:51.131 [DEBUG] [Thread-52316] [transport.py] [_log()] starting thread (client mode): 0xd31365f0
2025-11-17T10:02:51.132 [DEBUG] [Thread-52316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:02:51.152 [DEBUG] [Thread-52316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:02:51.152 [INFO] [Thread-52316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] client lang: <none>
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] server lang: <none>
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] kex follows: False
2025-11-17T10:02:51.155 [DEBUG] [Thread-52316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:02:51.156 [DEBUG] [Thread-52316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:02:51.156 [DEBUG] [Thread-52316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:02:51.156 [DEBUG] [Thread-52316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:02:51.156 [DEBUG] [Thread-52316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:02:51.156 [DEBUG] [Thread-52316] [transport.py] [_log()] Compression: none
2025-11-17T10:02:51.156 [DEBUG] [Thread-52316] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:02:51.165 [DEBUG] [Thread-52316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:02:51.165 [DEBUG] [Thread-52316] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:02:51.166 [DEBUG] [Thread-52316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:02:51.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:02:51.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:02:51.167 [DEBUG] [Thread-52316] [transport.py] [_log()] userauth is OK
2025-11-17T10:02:51.168 [DEBUG] [Thread-52316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:02:51.168 [DEBUG] [Thread-52316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:02:51.168 [DEBUG] [Thread-52316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:02:51.168 [DEBUG] [Thread-52316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:02:51.203 [INFO] [Thread-52316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:02:51.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:02:51.842 [DEBUG] [Thread-52316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:02:51.842 [DEBUG] [Thread-52316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:02:51.842 [DEBUG] [Thread-52316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:02:51.882 [DEBUG] [Thread-52316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:02:51.882 [DEBUG] [Thread-52316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:02:51.885 [DEBUG] [Thread-52316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:02:51.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:02:51.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:02:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:02:51.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:02:51.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:02:51.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:02:51.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:02:51.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:02:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:02:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.334771 -999.00  +17.40  10.50     33   +1.00 1 1 1 1 1   888    0 18.84 115.24 ----- 10.5 10.5 95.3 20.9 24.1 -24.9 23.7 -24.0 22.5 -24.6 23.1 -24.1
2025-11-17T10:02:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:02:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:02:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.334771
2025-11-17T10:02:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:02:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:02:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:02:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:02:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:02:51.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:02:44', tmtdew=19.58, humidity=26.18, cloud=0.0, wind=20.91, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:02:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:02:51.910 [DEBUG] [Thread-52316] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:02:51.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:02:52.006 [DEBUG] [Thread-52319] [transport.py] [_log()] starting thread (client mode): 0xd7bc7160
2025-11-17T10:02:52.006 [DEBUG] [Thread-52319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:02:52.020 [DEBUG] [Thread-52319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:02:52.021 [INFO] [Thread-52319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] client lang: <none>
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] server lang: <none>
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] kex follows: False
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:02:52.028 [DEBUG] [Thread-52319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:02:52.029 [DEBUG] [Thread-52319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:02:52.029 [DEBUG] [Thread-52319] [transport.py] [_log()] Compression: none
2025-11-17T10:02:52.029 [DEBUG] [Thread-52319] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:02:52.085 [DEBUG] [Thread-52319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:02:52.086 [DEBUG] [Thread-52319] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:02:52.086 [DEBUG] [Thread-52319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:02:52.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:02:52.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:02:52.142 [DEBUG] [Thread-52319] [transport.py] [_log()] userauth is OK
2025-11-17T10:02:52.142 [DEBUG] [Thread-52319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:02:52.143 [DEBUG] [Thread-52319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:02:52.143 [DEBUG] [Thread-52319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:02:52.143 [DEBUG] [Thread-52319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:02:52.163 [INFO] [Thread-52319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:02:52.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:02:52.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:02:53.158 [DEBUG] [Thread-52319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:02:53.158 [DEBUG] [Thread-52319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:02:53.205 [DEBUG] [Thread-52319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:02:53.205 [DEBUG] [Thread-52319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:02:53.214 [DEBUG] [Thread-52319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:02:53.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:02:53.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:02:53.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:02:53.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:02:53.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:02:53.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:02:53.248 [DEBUG] [Thread-52319] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:03:02.276 [DEBUG] [Thread-52321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:03:04.294 [DEBUG] [Thread-52322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:03:19.332 [DEBUG] [Thread-52323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:03:22.401 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:03:22.402 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:03:23.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:03:23.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:03:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:03:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 3, 16), 19.69, 26.0, 0.0, 21.4, 17.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:03:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:03:16
2025-11-17T10:03:24.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:03:24.170 [DEBUG] [Thread-52324] [transport.py] [_log()] starting thread (client mode): 0xd3135360
2025-11-17T10:03:24.170 [DEBUG] [Thread-52324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:03:24.190 [DEBUG] [Thread-52324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:03:24.190 [INFO] [Thread-52324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:03:24.193 [DEBUG] [Thread-52324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:03:24.193 [DEBUG] [Thread-52324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:03:24.193 [DEBUG] [Thread-52324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:03:24.193 [DEBUG] [Thread-52324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] client lang: <none>
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] server lang: <none>
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] kex follows: False
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:03:24.194 [DEBUG] [Thread-52324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:03:24.195 [DEBUG] [Thread-52324] [transport.py] [_log()] Compression: none
2025-11-17T10:03:24.195 [DEBUG] [Thread-52324] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:03:24.215 [DEBUG] [Thread-52324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:03:24.215 [DEBUG] [Thread-52324] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:03:24.216 [DEBUG] [Thread-52324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:03:24.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:03:24.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:03:24.218 [DEBUG] [Thread-52324] [transport.py] [_log()] userauth is OK
2025-11-17T10:03:24.218 [DEBUG] [Thread-52324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:03:24.218 [DEBUG] [Thread-52324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:03:24.218 [DEBUG] [Thread-52324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:03:24.218 [DEBUG] [Thread-52324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:03:24.250 [INFO] [Thread-52324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:03:24.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:03:24.898 [DEBUG] [Thread-52324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:03:24.898 [DEBUG] [Thread-52324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:03:24.898 [DEBUG] [Thread-52324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:03:24.939 [DEBUG] [Thread-52324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:03:24.940 [DEBUG] [Thread-52324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:03:24.942 [DEBUG] [Thread-52324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:03:24.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:03:24.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:03:24.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:03:24.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:03:24.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:03:24.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:03:24.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:03:24.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:03:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:03:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.335118 -999.00  +17.50  20.53     33   +1.10 1 1 1 1 1   888    0 18.75 121.48 ----- 20.5 20.5 117.0 24.2 24.1 -23.9 23.7 -23.8 22.6 -23.4 23.2 -24.0
2025-11-17T10:03:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:03:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:03:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.335118
2025-11-17T10:03:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:03:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:03:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:03:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:03:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:03:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:03:16', tmtdew=19.69, humidity=26.0, cloud=0.0, wind=21.4, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:02:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:03:24.969 [DEBUG] [Thread-52324] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:03:25.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:03:25.065 [DEBUG] [Thread-52327] [transport.py] [_log()] starting thread (client mode): 0xd3135a80
2025-11-17T10:03:25.065 [DEBUG] [Thread-52327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:03:25.080 [DEBUG] [Thread-52327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:03:25.081 [INFO] [Thread-52327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:03:25.088 [DEBUG] [Thread-52327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] client lang: <none>
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] server lang: <none>
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] kex follows: False
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:03:25.089 [DEBUG] [Thread-52327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:03:25.090 [DEBUG] [Thread-52327] [transport.py] [_log()] Compression: none
2025-11-17T10:03:25.090 [DEBUG] [Thread-52327] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:03:25.153 [DEBUG] [Thread-52327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:03:25.154 [DEBUG] [Thread-52327] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:03:25.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:03:25.154 [DEBUG] [Thread-52327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:03:25.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:03:25.214 [DEBUG] [Thread-52327] [transport.py] [_log()] userauth is OK
2025-11-17T10:03:25.214 [DEBUG] [Thread-52327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:03:25.214 [DEBUG] [Thread-52327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:03:25.214 [DEBUG] [Thread-52327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:03:25.214 [DEBUG] [Thread-52327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:03:25.236 [INFO] [Thread-52327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:03:25.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:03:25.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:03:26.090 [DEBUG] [Thread-52327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:03:26.090 [DEBUG] [Thread-52327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:03:26.138 [DEBUG] [Thread-52327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:03:26.138 [DEBUG] [Thread-52327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:03:26.146 [DEBUG] [Thread-52327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:03:26.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:03:26.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:03:26.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:03:26.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:03:26.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:03:26.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:03:26.179 [DEBUG] [Thread-52327] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:03:34.367 [DEBUG] [Thread-52329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:03:49.405 [DEBUG] [Thread-52330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:03:56.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:03:56.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:03:56.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:03:56.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 3, 48), 19.77, 26.03, 0.0, 21.93, 17.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:03:56.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:03:48
2025-11-17T10:03:56.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:03:57.145 [DEBUG] [Thread-52331] [transport.py] [_log()] starting thread (client mode): 0xd3136d10
2025-11-17T10:03:57.145 [DEBUG] [Thread-52331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:03:57.165 [DEBUG] [Thread-52331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:03:57.165 [INFO] [Thread-52331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] client lang: <none>
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] server lang: <none>
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] kex follows: False
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] Compression: none
2025-11-17T10:03:57.168 [DEBUG] [Thread-52331] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:03:57.186 [DEBUG] [Thread-52331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:03:57.186 [DEBUG] [Thread-52331] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:03:57.186 [DEBUG] [Thread-52331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:03:57.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:03:57.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:03:57.187 [DEBUG] [Thread-52331] [transport.py] [_log()] userauth is OK
2025-11-17T10:03:57.187 [DEBUG] [Thread-52331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:03:57.187 [DEBUG] [Thread-52331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:03:57.187 [DEBUG] [Thread-52331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:03:57.187 [DEBUG] [Thread-52331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:03:57.207 [INFO] [Thread-52331] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:03:57.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:03:57.843 [DEBUG] [Thread-52331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:03:57.843 [DEBUG] [Thread-52331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:03:57.844 [DEBUG] [Thread-52331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:03:57.885 [DEBUG] [Thread-52331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:03:57.885 [DEBUG] [Thread-52331] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:03:57.889 [DEBUG] [Thread-52331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:03:57.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:03:57.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:03:57.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:03:57.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:03:57.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:03:57.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:03:57.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:03:57.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:03:57.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:03:57.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.335466 -999.00  +17.90  16.90     32   +1.30 1 1 1 1 1   888    0 18.77 120.46 ----- 16.9 16.9 95.5 31.5 24.3 -26.0 23.9 -23.6 22.7 -24.2 23.2 -25.1
2025-11-17T10:03:57.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:03:57.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:03:57.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.335466
2025-11-17T10:03:57.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:03:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:03:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:03:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:03:57.911 [DEBUG] [Thread-52331] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:03:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:03:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:03:48', tmtdew=19.77, humidity=26.03, cloud=0.0, wind=21.93, temperature=17.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:03:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:03:57.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:03:58.007 [DEBUG] [Thread-52334] [transport.py] [_log()] starting thread (client mode): 0xd07bc3d0
2025-11-17T10:03:58.007 [DEBUG] [Thread-52334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:03:58.021 [DEBUG] [Thread-52334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:03:58.021 [INFO] [Thread-52334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:03:58.028 [DEBUG] [Thread-52334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] client lang: <none>
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] server lang: <none>
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] kex follows: False
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] Compression: none
2025-11-17T10:03:58.029 [DEBUG] [Thread-52334] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:03:58.085 [DEBUG] [Thread-52334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:03:58.085 [DEBUG] [Thread-52334] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:03:58.086 [DEBUG] [Thread-52334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:03:58.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:03:58.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:03:58.142 [DEBUG] [Thread-52334] [transport.py] [_log()] userauth is OK
2025-11-17T10:03:58.142 [DEBUG] [Thread-52334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:03:58.142 [DEBUG] [Thread-52334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:03:58.142 [DEBUG] [Thread-52334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:03:58.142 [DEBUG] [Thread-52334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:03:58.165 [INFO] [Thread-52334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:03:58.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:03:58.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:03:59.013 [DEBUG] [Thread-52334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:03:59.013 [DEBUG] [Thread-52334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:03:59.063 [DEBUG] [Thread-52334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:03:59.063 [DEBUG] [Thread-52334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:03:59.075 [DEBUG] [Thread-52334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:03:59.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:03:59.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:03:59.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:03:59.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:03:59.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:03:59.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:03:59.112 [DEBUG] [Thread-52334] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:04:02.324 [DEBUG] [Thread-52336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:04:04.434 [DEBUG] [Thread-52337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:04:19.475 [DEBUG] [Thread-52338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:04:22.543 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:04:22.544 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:04:29.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:04:29.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:04:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:04:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 4, 20), 19.79, 26.0, 0.0, 21.14, 17.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:04:29.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:04:20
2025-11-17T10:04:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:04:30.036 [DEBUG] [Thread-52339] [transport.py] [_log()] starting thread (client mode): 0xd3137490
2025-11-17T10:04:30.037 [DEBUG] [Thread-52339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:04:30.057 [DEBUG] [Thread-52339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:04:30.057 [INFO] [Thread-52339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] client lang: <none>
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] server lang: <none>
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] kex follows: False
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] Compression: none
2025-11-17T10:04:30.060 [DEBUG] [Thread-52339] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:04:30.075 [DEBUG] [Thread-52339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:04:30.075 [DEBUG] [Thread-52339] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:04:30.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:04:30.075 [DEBUG] [Thread-52339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:04:30.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:04:30.076 [DEBUG] [Thread-52339] [transport.py] [_log()] userauth is OK
2025-11-17T10:04:30.076 [DEBUG] [Thread-52339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:04:30.076 [DEBUG] [Thread-52339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:04:30.076 [DEBUG] [Thread-52339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:04:30.076 [DEBUG] [Thread-52339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:04:30.091 [INFO] [Thread-52339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:04:30.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:04:30.717 [DEBUG] [Thread-52339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:04:30.717 [DEBUG] [Thread-52339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:04:30.717 [DEBUG] [Thread-52339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:04:30.758 [DEBUG] [Thread-52339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:04:30.758 [DEBUG] [Thread-52339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:04:30.761 [DEBUG] [Thread-52339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:04:30.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:04:30.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:04:30.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:04:30.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:04:30.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:04:30.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:04:30.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:04:30.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.336160 -999.00  +17.10  20.63     33   +0.80 1 1 1 1 1   888    0 18.96 122.12 ----- 20.6 20.6 123.0 24.8 24.2 -24.9 23.8 -25.1 22.7 -24.8 23.1 -25.5
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.336160
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:04:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:04:20', tmtdew=19.79, humidity=26.0, cloud=0.0, wind=21.14, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:04:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:04:30.779 [DEBUG] [Thread-52339] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:04:30.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:04:30.864 [DEBUG] [Thread-52342] [transport.py] [_log()] starting thread (client mode): 0xd3134d90
2025-11-17T10:04:30.864 [DEBUG] [Thread-52342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:04:30.879 [DEBUG] [Thread-52342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:04:30.879 [INFO] [Thread-52342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:04:30.886 [DEBUG] [Thread-52342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] client lang: <none>
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] server lang: <none>
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] kex follows: False
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] Compression: none
2025-11-17T10:04:30.887 [DEBUG] [Thread-52342] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:04:30.948 [DEBUG] [Thread-52342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:04:30.948 [DEBUG] [Thread-52342] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:04:30.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:04:30.948 [DEBUG] [Thread-52342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:04:30.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:04:31.005 [DEBUG] [Thread-52342] [transport.py] [_log()] userauth is OK
2025-11-17T10:04:31.006 [DEBUG] [Thread-52342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:04:31.006 [DEBUG] [Thread-52342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:04:31.006 [DEBUG] [Thread-52342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:04:31.006 [DEBUG] [Thread-52342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:04:31.020 [INFO] [Thread-52342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:04:31.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:04:31.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:04:31.903 [DEBUG] [Thread-52342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:04:31.903 [DEBUG] [Thread-52342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:04:31.951 [DEBUG] [Thread-52342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:04:31.951 [DEBUG] [Thread-52342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:04:31.959 [DEBUG] [Thread-52342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:04:31.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:04:31.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:04:31.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:04:31.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:04:31.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:04:31.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:04:31.991 [DEBUG] [Thread-52342] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:04:34.505 [DEBUG] [Thread-52344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:04:49.543 [DEBUG] [Thread-52345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:05:02.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:05:02.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:05:02.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:05:02.383 [DEBUG] [Thread-52346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:05:02.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 4, 52), 19.44, 26.5, 0.0, 15.81, 17.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:05:02.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:04:52
2025-11-17T10:05:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:05:02.924 [DEBUG] [Thread-52347] [transport.py] [_log()] starting thread (client mode): 0xd7bc7760
2025-11-17T10:05:02.924 [DEBUG] [Thread-52347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:05:02.946 [DEBUG] [Thread-52347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:05:02.947 [INFO] [Thread-52347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] client lang: <none>
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] server lang: <none>
2025-11-17T10:05:02.950 [DEBUG] [Thread-52347] [transport.py] [_log()] kex follows: False
2025-11-17T10:05:02.951 [DEBUG] [Thread-52347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:05:02.951 [DEBUG] [Thread-52347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:05:02.951 [DEBUG] [Thread-52347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:05:02.951 [DEBUG] [Thread-52347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:05:02.951 [DEBUG] [Thread-52347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:05:02.951 [DEBUG] [Thread-52347] [transport.py] [_log()] Compression: none
2025-11-17T10:05:02.951 [DEBUG] [Thread-52347] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:05:02.967 [DEBUG] [Thread-52347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:05:02.967 [DEBUG] [Thread-52347] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:05:02.968 [DEBUG] [Thread-52347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:05:02.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:05:02.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:05:02.970 [DEBUG] [Thread-52347] [transport.py] [_log()] userauth is OK
2025-11-17T10:05:02.970 [DEBUG] [Thread-52347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:05:02.970 [DEBUG] [Thread-52347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:05:02.970 [DEBUG] [Thread-52347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:05:02.970 [DEBUG] [Thread-52347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:05:02.991 [INFO] [Thread-52347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:05:02.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:05:04.577 [DEBUG] [Thread-52349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:05:07.026 [DEBUG] [Thread-52347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:05:07.026 [DEBUG] [Thread-52347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:05:07.027 [DEBUG] [Thread-52347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:05:07.067 [DEBUG] [Thread-52347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:05:07.068 [DEBUG] [Thread-52347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:05:07.070 [DEBUG] [Thread-52347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:05:07.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:05:07.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:05:07.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:05:07.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:05:07.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:05:07.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:05:07.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:05:07.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:05:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:05:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.336507 -999.00  +17.00  24.16     33   +1.00 1 1 1 1 1   888    0 19.14 123.55 ----- 24.2 24.2 54.2 25.6 24.1 -25.6 23.8 -23.9 22.7 -24.2 23.2 -24.0
2025-11-17T10:05:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:05:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:05:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.336507
2025-11-17T10:05:07.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:05:07.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:05:07.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:05:07.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:05:07.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:05:07.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:04:52', tmtdew=19.44, humidity=26.5, cloud=0.0, wind=15.81, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:04:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:05:07.120 [DEBUG] [Thread-52347] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:05:07.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:05:07.218 [DEBUG] [Thread-52351] [transport.py] [_log()] starting thread (client mode): 0xd7bc7220
2025-11-17T10:05:07.218 [DEBUG] [Thread-52351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:05:07.234 [DEBUG] [Thread-52351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:05:07.234 [INFO] [Thread-52351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:05:07.241 [DEBUG] [Thread-52351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:05:07.241 [DEBUG] [Thread-52351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:05:07.241 [DEBUG] [Thread-52351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] client lang: <none>
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] server lang: <none>
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] kex follows: False
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] Compression: none
2025-11-17T10:05:07.242 [DEBUG] [Thread-52351] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:05:07.306 [DEBUG] [Thread-52351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:05:07.306 [DEBUG] [Thread-52351] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:05:07.307 [DEBUG] [Thread-52351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:05:07.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:05:07.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:05:07.365 [DEBUG] [Thread-52351] [transport.py] [_log()] userauth is OK
2025-11-17T10:05:07.365 [DEBUG] [Thread-52351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:05:07.366 [DEBUG] [Thread-52351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:05:07.366 [DEBUG] [Thread-52351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:05:07.366 [DEBUG] [Thread-52351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:05:07.384 [INFO] [Thread-52351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:05:07.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:05:07.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:05:08.241 [DEBUG] [Thread-52351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:05:08.241 [DEBUG] [Thread-52351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:05:08.288 [DEBUG] [Thread-52351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:05:08.288 [DEBUG] [Thread-52351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:05:08.297 [DEBUG] [Thread-52351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:05:08.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:05: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')
2025-11-17T10:05: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
2025-11-17T10:05:08.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:05:08.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:05:08.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:05:08.336 [DEBUG] [Thread-52351] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:05:19.612 [DEBUG] [Thread-52353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:05:22.687 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:05:22.688 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:05:34.656 [DEBUG] [Thread-52354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:05:38.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:05:38.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:05:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:05:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 5, 24), 19.45, 26.5, 0.0, 16.94, 17.58, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:05:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:05:24
2025-11-17T10:05:39.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:05:39.257 [DEBUG] [Thread-52355] [transport.py] [_log()] starting thread (client mode): 0xd07bd720
2025-11-17T10:05:39.257 [DEBUG] [Thread-52355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:05:39.277 [DEBUG] [Thread-52355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:05:39.277 [INFO] [Thread-52355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:05:39.280 [DEBUG] [Thread-52355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] client lang: <none>
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] server lang: <none>
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] kex follows: False
2025-11-17T10:05:39.281 [DEBUG] [Thread-52355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:05:39.282 [DEBUG] [Thread-52355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:05:39.282 [DEBUG] [Thread-52355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:05:39.282 [DEBUG] [Thread-52355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:05:39.282 [DEBUG] [Thread-52355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:05:39.282 [DEBUG] [Thread-52355] [transport.py] [_log()] Compression: none
2025-11-17T10:05:39.282 [DEBUG] [Thread-52355] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:05:39.300 [DEBUG] [Thread-52355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:05:39.300 [DEBUG] [Thread-52355] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:05:39.301 [DEBUG] [Thread-52355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:05:39.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:05:39.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:05:39.303 [DEBUG] [Thread-52355] [transport.py] [_log()] userauth is OK
2025-11-17T10:05:39.303 [DEBUG] [Thread-52355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:05:39.303 [DEBUG] [Thread-52355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:05:39.303 [DEBUG] [Thread-52355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:05:39.303 [DEBUG] [Thread-52355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:05:39.321 [INFO] [Thread-52355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:05:39.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:05:39.948 [DEBUG] [Thread-52355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:05:39.949 [DEBUG] [Thread-52355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:05:39.949 [DEBUG] [Thread-52355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:05:39.989 [DEBUG] [Thread-52355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:05:39.989 [DEBUG] [Thread-52355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:05:39.992 [DEBUG] [Thread-52355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:05:40.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:05:40.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:05:40.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:05:40.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:05:40.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:05:40.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:05:40.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:05:40.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:05:40.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:05:40.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.336854 -999.00  +17.20  21.57     33   +0.80 1 1 1 1 1   888    0 19.28 121.17 ----- 21.6 21.6 60.2 25.2 24.3 -25.6 23.6 -27.6 22.5 -26.9 23.2 -26.1
2025-11-17T10:05:40.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:05:40.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:05:40.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.336854
2025-11-17T10:05:40.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:05:40.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:05:40.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:05:40.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:05:40.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:05:40.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:05:24', tmtdew=19.45, humidity=26.5, cloud=0.0, wind=16.94, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:05:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:05:40.017 [DEBUG] [Thread-52355] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:05:40.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:05:40.112 [DEBUG] [Thread-52358] [transport.py] [_log()] starting thread (client mode): 0xd07cea70
2025-11-17T10:05:40.112 [DEBUG] [Thread-52358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:05:40.127 [DEBUG] [Thread-52358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:05:40.128 [INFO] [Thread-52358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] client lang: <none>
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] server lang: <none>
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] kex follows: False
2025-11-17T10:05:40.135 [DEBUG] [Thread-52358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:05:40.136 [DEBUG] [Thread-52358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:05:40.136 [DEBUG] [Thread-52358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:05:40.136 [DEBUG] [Thread-52358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:05:40.136 [DEBUG] [Thread-52358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:05:40.136 [DEBUG] [Thread-52358] [transport.py] [_log()] Compression: none
2025-11-17T10:05:40.136 [DEBUG] [Thread-52358] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:05:40.193 [DEBUG] [Thread-52358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:05:40.193 [DEBUG] [Thread-52358] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:05:40.194 [DEBUG] [Thread-52358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:05:40.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:05:40.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:05:40.250 [DEBUG] [Thread-52358] [transport.py] [_log()] userauth is OK
2025-11-17T10:05:40.250 [DEBUG] [Thread-52358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:05:40.250 [DEBUG] [Thread-52358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:05:40.250 [DEBUG] [Thread-52358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:05:40.250 [DEBUG] [Thread-52358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:05:40.271 [INFO] [Thread-52358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:05:40.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:05:40.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:05:41.125 [DEBUG] [Thread-52358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:05:41.125 [DEBUG] [Thread-52358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:05:41.173 [DEBUG] [Thread-52358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:05:41.173 [DEBUG] [Thread-52358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:05:41.184 [DEBUG] [Thread-52358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:05:41.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:05:41.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:05:41.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:05:41.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:05:41.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:05:41.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:05:41.223 [DEBUG] [Thread-52358] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:05:49.693 [DEBUG] [Thread-52360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:06:02.437 [DEBUG] [Thread-52361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:06:04.740 [DEBUG] [Thread-52362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:06:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:06:11.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:06:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:06:11.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 5, 56), 19.61, 26.36, 0.0, 10.62, 17.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:06:11.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:05:56
2025-11-17T10:06:11.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:06:12.143 [DEBUG] [Thread-52363] [transport.py] [_log()] starting thread (client mode): 0xd07bcca0
2025-11-17T10:06:12.144 [DEBUG] [Thread-52363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:06:12.164 [DEBUG] [Thread-52363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:06:12.164 [INFO] [Thread-52363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:06:12.166 [DEBUG] [Thread-52363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] client lang: <none>
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] server lang: <none>
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] kex follows: False
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] Compression: none
2025-11-17T10:06:12.167 [DEBUG] [Thread-52363] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:06:12.175 [DEBUG] [Thread-52363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:06:12.176 [DEBUG] [Thread-52363] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:06:12.176 [DEBUG] [Thread-52363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:06:12.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:06:12.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:06:12.178 [DEBUG] [Thread-52363] [transport.py] [_log()] userauth is OK
2025-11-17T10:06:12.178 [DEBUG] [Thread-52363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:06:12.179 [DEBUG] [Thread-52363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:06:12.179 [DEBUG] [Thread-52363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:06:12.179 [DEBUG] [Thread-52363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:06:12.196 [INFO] [Thread-52363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:06:12.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:06:12.823 [DEBUG] [Thread-52363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:06:12.823 [DEBUG] [Thread-52363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:06:12.823 [DEBUG] [Thread-52363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:06:12.864 [DEBUG] [Thread-52363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:06:12.864 [DEBUG] [Thread-52363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:06:12.867 [DEBUG] [Thread-52363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:06:12.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:06:12.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:06:12.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:06:12.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:06:12.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:06:12.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:06:12.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:06:12.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:06:12.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:06:12.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.337202 -999.00  +16.80  15.68     33   +0.70 1 1 1 1 1   888    0 19.59 130.96 ----- 15.7 15.7 67.6 19.9 24.3 -25.3 23.5 -24.9 22.4 -25.5 23.2 -25.1
2025-11-17T10:06:12.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:06:12.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:06:12.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.337202
2025-11-17T10:06:12.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:06:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:06:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:06:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:06:12.892 [DEBUG] [Thread-52363] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:06:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:06:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:05:56', tmtdew=19.61, humidity=26.36, cloud=0.0, wind=10.62, temperature=17.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:05:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:06:12.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:06:12.990 [DEBUG] [Thread-52366] [transport.py] [_log()] starting thread (client mode): 0xd07bd030
2025-11-17T10:06:12.990 [DEBUG] [Thread-52366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:06:13.006 [DEBUG] [Thread-52366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:06:13.006 [INFO] [Thread-52366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:06:13.013 [DEBUG] [Thread-52366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:06:13.013 [DEBUG] [Thread-52366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:06:13.013 [DEBUG] [Thread-52366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] client lang: <none>
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] server lang: <none>
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] kex follows: False
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] Compression: none
2025-11-17T10:06:13.014 [DEBUG] [Thread-52366] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:06:13.073 [DEBUG] [Thread-52366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:06:13.073 [DEBUG] [Thread-52366] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:06:13.074 [DEBUG] [Thread-52366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:06:13.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:06:13.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:06:13.129 [DEBUG] [Thread-52366] [transport.py] [_log()] userauth is OK
2025-11-17T10:06:13.129 [DEBUG] [Thread-52366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:06:13.129 [DEBUG] [Thread-52366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:06:13.129 [DEBUG] [Thread-52366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:06:13.130 [DEBUG] [Thread-52366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:06:13.148 [INFO] [Thread-52366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:06:13.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:06:13.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:06:13.978 [DEBUG] [Thread-52366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:06:13.978 [DEBUG] [Thread-52366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:06:14.030 [DEBUG] [Thread-52366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:06:14.030 [DEBUG] [Thread-52366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:06:14.039 [DEBUG] [Thread-52366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:06:14.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:06:14.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:06:14.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
2025-11-17T10:06:14.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:06:14.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:06:14.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:06:14.075 [DEBUG] [Thread-52366] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:06:19.773 [DEBUG] [Thread-52368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:06:22.829 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:06:22.831 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:06:34.824 [DEBUG] [Thread-52369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:06:44.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:06:44.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:06:44.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:06:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 6, 33), 21.08, 23.93, 0.0, 13.83, 19.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:06:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:06:33
2025-11-17T10:06:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:06:45.063 [DEBUG] [Thread-52370] [transport.py] [_log()] starting thread (client mode): 0xd07be5c0
2025-11-17T10:06:45.063 [DEBUG] [Thread-52370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:06:45.083 [DEBUG] [Thread-52370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:06:45.083 [INFO] [Thread-52370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:06:45.086 [DEBUG] [Thread-52370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:06:45.086 [DEBUG] [Thread-52370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:06:45.086 [DEBUG] [Thread-52370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:06:45.086 [DEBUG] [Thread-52370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:06:45.086 [DEBUG] [Thread-52370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:06:45.086 [DEBUG] [Thread-52370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:06:45.086 [DEBUG] [Thread-52370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:06:45.086 [DEBUG] [Thread-52370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] client lang: <none>
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] server lang: <none>
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] kex follows: False
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] Compression: none
2025-11-17T10:06:45.087 [DEBUG] [Thread-52370] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:06:45.104 [DEBUG] [Thread-52370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:06:45.104 [DEBUG] [Thread-52370] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:06:45.104 [DEBUG] [Thread-52370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:06:45.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:06:45.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:06:45.105 [DEBUG] [Thread-52370] [transport.py] [_log()] userauth is OK
2025-11-17T10:06:45.105 [DEBUG] [Thread-52370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:06:45.105 [DEBUG] [Thread-52370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:06:45.105 [DEBUG] [Thread-52370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:06:45.105 [DEBUG] [Thread-52370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:06:45.114 [INFO] [Thread-52370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:06:45.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:06:45.730 [DEBUG] [Thread-52370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:06:45.731 [DEBUG] [Thread-52370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:06:45.731 [DEBUG] [Thread-52370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:06:45.773 [DEBUG] [Thread-52370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:06:45.773 [DEBUG] [Thread-52370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:06:45.775 [DEBUG] [Thread-52370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:06:45.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:06:45.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:06:45.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:06:45.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:06:45.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:06:45.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:06:45.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:06:45.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.337549 -999.00  +17.00  16.63     33   +0.90 1 1 1 1 1   888    0 18.83 118.82 ----- 16.6 16.6 99.1 20.9 24.1 -28.7 23.6 -24.1 22.6 -24.6 23.2 -25.8
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.337549
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:06:45.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:06:33', tmtdew=21.08, humidity=23.93, cloud=0.0, wind=13.83, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:06:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:06:45.788 [DEBUG] [Thread-52370] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:06:45.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:06:45.873 [DEBUG] [Thread-52373] [transport.py] [_log()] starting thread (client mode): 0xd31cd780
2025-11-17T10:06:45.873 [DEBUG] [Thread-52373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:06:45.894 [DEBUG] [Thread-52373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:06:45.894 [INFO] [Thread-52373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:06:45.901 [DEBUG] [Thread-52373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] client lang: <none>
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] server lang: <none>
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] kex follows: False
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] Compression: none
2025-11-17T10:06:45.902 [DEBUG] [Thread-52373] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:06:45.964 [DEBUG] [Thread-52373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:06:45.964 [DEBUG] [Thread-52373] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:06:45.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:06:45.965 [DEBUG] [Thread-52373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:06:45.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:06:46.024 [DEBUG] [Thread-52373] [transport.py] [_log()] userauth is OK
2025-11-17T10:06:46.024 [DEBUG] [Thread-52373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:06:46.024 [DEBUG] [Thread-52373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:06:46.024 [DEBUG] [Thread-52373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:06:46.024 [DEBUG] [Thread-52373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:06:46.042 [INFO] [Thread-52373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:06:46.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:06:46.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:06:46.915 [DEBUG] [Thread-52373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:06:46.915 [DEBUG] [Thread-52373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:06:46.963 [DEBUG] [Thread-52373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:06:46.963 [DEBUG] [Thread-52373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:06:46.971 [DEBUG] [Thread-52373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:06:46.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:06:46.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:06:46.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:06:46.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:06:46.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:06:46.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:06:47.002 [DEBUG] [Thread-52373] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:06:49.849 [DEBUG] [Thread-52375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:07:02.492 [DEBUG] [Thread-52376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:07:04.888 [DEBUG] [Thread-52377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:07:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:07:17.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:07:17.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:07:17.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 7, 5), 19.62, 26.15, 0.0, 14.63, 17.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:07:17.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:07:05
2025-11-17T10:07:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:07:17.925 [DEBUG] [Thread-52378] [transport.py] [_log()] starting thread (client mode): 0xd31372b0
2025-11-17T10:07:17.925 [DEBUG] [Thread-52378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:07:17.946 [DEBUG] [Thread-52378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:07:17.946 [INFO] [Thread-52378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:07:17.950 [DEBUG] [Thread-52378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] client lang: <none>
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] server lang: <none>
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] kex follows: False
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] Compression: none
2025-11-17T10:07:17.951 [DEBUG] [Thread-52378] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:07:17.971 [DEBUG] [Thread-52378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:07:17.971 [DEBUG] [Thread-52378] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:07:17.972 [DEBUG] [Thread-52378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:07:17.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:07:17.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:07:17.974 [DEBUG] [Thread-52378] [transport.py] [_log()] userauth is OK
2025-11-17T10:07:17.974 [DEBUG] [Thread-52378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:07:17.974 [DEBUG] [Thread-52378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:07:17.974 [DEBUG] [Thread-52378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:07:17.974 [DEBUG] [Thread-52378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:07:17.998 [INFO] [Thread-52378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:07:17.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:07:18.647 [DEBUG] [Thread-52378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:07:18.647 [DEBUG] [Thread-52378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:07:18.647 [DEBUG] [Thread-52378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:07:18.688 [DEBUG] [Thread-52378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:07:18.689 [DEBUG] [Thread-52378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:07:18.692 [DEBUG] [Thread-52378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:07:18.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:07:18.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:07:18.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:07:18.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:07:18.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:07:18.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:07:18.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:07:18.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:07:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:07:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.337896 -999.00  +17.00   9.31     33   +0.90 1 1 1 1 1   888    0 18.82 109.84 ----- 9.3 9.3 92.0 17.3 24.2 -25.2 23.8 -24.8 22.6 -24.3 23.3 -24.6
2025-11-17T10:07:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:07:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:07:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.337896
2025-11-17T10:07:18.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:07:18.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:07:18.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:07:18.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:07:18.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:07:18.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:07:05', tmtdew=19.62, humidity=26.15, cloud=0.0, wind=14.63, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:06:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:07:18.717 [DEBUG] [Thread-52378] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:07:18.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:07:18.814 [DEBUG] [Thread-52381] [transport.py] [_log()] starting thread (client mode): 0xd3136ce0
2025-11-17T10:07:18.814 [DEBUG] [Thread-52381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:07:18.830 [DEBUG] [Thread-52381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:07:18.830 [INFO] [Thread-52381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:07:18.838 [DEBUG] [Thread-52381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:07:18.838 [DEBUG] [Thread-52381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:07:18.838 [DEBUG] [Thread-52381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:07:18.838 [DEBUG] [Thread-52381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:07:18.838 [DEBUG] [Thread-52381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:07:18.838 [DEBUG] [Thread-52381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] client lang: <none>
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] server lang: <none>
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] kex follows: False
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:07:18.839 [DEBUG] [Thread-52381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:07:18.840 [DEBUG] [Thread-52381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:07:18.840 [DEBUG] [Thread-52381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:07:18.840 [DEBUG] [Thread-52381] [transport.py] [_log()] Compression: none
2025-11-17T10:07:18.840 [DEBUG] [Thread-52381] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:07:18.898 [DEBUG] [Thread-52381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:07:18.898 [DEBUG] [Thread-52381] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:07:18.899 [DEBUG] [Thread-52381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:07:18.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:07:18.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:07:18.953 [DEBUG] [Thread-52381] [transport.py] [_log()] userauth is OK
2025-11-17T10:07:18.953 [DEBUG] [Thread-52381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:07:18.953 [DEBUG] [Thread-52381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:07:18.953 [DEBUG] [Thread-52381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:07:18.953 [DEBUG] [Thread-52381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:07:18.970 [INFO] [Thread-52381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:07:18.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:07:18.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:07:19.819 [DEBUG] [Thread-52381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:07:19.820 [DEBUG] [Thread-52381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:07:19.867 [DEBUG] [Thread-52381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:07:19.867 [DEBUG] [Thread-52381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:07:19.876 [DEBUG] [Thread-52381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:07:19.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:07:19.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')
2025-11-17T10:07: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') -> 00000000
2025-11-17T10:07:19.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:07:19.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:07:19.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:07:19.911 [DEBUG] [Thread-52381] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:07:19.921 [DEBUG] [Thread-52383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:07:22.971 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:07:22.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:07:34.974 [DEBUG] [Thread-52384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:07:49.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:07:49.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:07:49.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:07:50.013 [DEBUG] [Thread-52385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:07:50.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 7, 37), 19.39, 26.88, 0.0, 19.32, 17.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:07:50.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:07:37
2025-11-17T10:07:50.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:07:50.844 [DEBUG] [Thread-52386] [transport.py] [_log()] starting thread (client mode): 0xd7bc5930
2025-11-17T10:07:50.844 [DEBUG] [Thread-52386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:07:50.865 [DEBUG] [Thread-52386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:07:50.866 [INFO] [Thread-52386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:07:50.868 [DEBUG] [Thread-52386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:07:50.868 [DEBUG] [Thread-52386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] client lang: <none>
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] server lang: <none>
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] kex follows: False
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] Compression: none
2025-11-17T10:07:50.869 [DEBUG] [Thread-52386] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:07:50.887 [DEBUG] [Thread-52386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:07:50.887 [DEBUG] [Thread-52386] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:07:50.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:07:50.888 [DEBUG] [Thread-52386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:07:50.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:07:50.891 [DEBUG] [Thread-52386] [transport.py] [_log()] userauth is OK
2025-11-17T10:07:50.891 [DEBUG] [Thread-52386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:07:50.891 [DEBUG] [Thread-52386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:07:50.891 [DEBUG] [Thread-52386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:07:50.891 [DEBUG] [Thread-52386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:07:50.912 [INFO] [Thread-52386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:07:50.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:07:51.512 [DEBUG] [Thread-52386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:07:51.512 [DEBUG] [Thread-52386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:07:51.513 [DEBUG] [Thread-52386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:07:51.554 [DEBUG] [Thread-52386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:07:51.554 [DEBUG] [Thread-52386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:07:51.557 [DEBUG] [Thread-52386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:07:51.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:07:51.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:07:51.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:07:51.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:07:51.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:07:51.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:07:51.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:07:51.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:07:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:07:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.338243 -999.00  +16.90  14.67     33   +0.80 1 1 1 1 1   888    0 18.76 110.06 ----- 14.7 14.7 111.8 15.9 24.3 -27.4 23.9 -24.2 22.8 -24.0 23.4 -24.4
2025-11-17T10:07:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:07:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:07:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.338243
2025-11-17T10:07:51.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:07:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:07:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:07:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:07:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:07:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:07:37', tmtdew=19.39, humidity=26.88, cloud=0.0, wind=19.32, temperature=17.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:07:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:07:51.583 [DEBUG] [Thread-52386] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:07:51.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:07:51.679 [DEBUG] [Thread-52389] [transport.py] [_log()] starting thread (client mode): 0xd317f5e0
2025-11-17T10:07:51.679 [DEBUG] [Thread-52389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:07:51.693 [DEBUG] [Thread-52389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:07:51.694 [INFO] [Thread-52389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:07:51.703 [DEBUG] [Thread-52389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:07:51.703 [DEBUG] [Thread-52389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:07:51.703 [DEBUG] [Thread-52389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] client lang: <none>
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] server lang: <none>
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] kex follows: False
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] Compression: none
2025-11-17T10:07:51.704 [DEBUG] [Thread-52389] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:07:51.764 [DEBUG] [Thread-52389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:07:51.764 [DEBUG] [Thread-52389] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:07:51.765 [DEBUG] [Thread-52389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:07:51.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:07:51.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:07:51.822 [DEBUG] [Thread-52389] [transport.py] [_log()] userauth is OK
2025-11-17T10:07:51.822 [DEBUG] [Thread-52389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:07:51.822 [DEBUG] [Thread-52389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:07:51.822 [DEBUG] [Thread-52389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:07:51.822 [DEBUG] [Thread-52389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:07:51.847 [INFO] [Thread-52389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:07:51.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:07:51.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:07:52.700 [DEBUG] [Thread-52389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:07:52.701 [DEBUG] [Thread-52389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:07:52.751 [DEBUG] [Thread-52389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:07:52.751 [DEBUG] [Thread-52389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:07:52.760 [DEBUG] [Thread-52389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:07:52.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:07:52.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:07:52.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:07:52.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:07:52.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:07:52.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:07:52.794 [DEBUG] [Thread-52389] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:08:02.544 [DEBUG] [Thread-52391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:08:05.041 [DEBUG] [Thread-52392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:08:20.073 [DEBUG] [Thread-52393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:08:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:08:22.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:08:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:08:23.112 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:08:23.113 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:08:23.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 8, 9), 19.52, 26.7, 0.0, 16.87, 17.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:08:23.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:08:09
2025-11-17T10:08:23.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:08:23.717 [DEBUG] [Thread-52394] [transport.py] [_log()] starting thread (client mode): 0xd31ccf70
2025-11-17T10:08:23.717 [DEBUG] [Thread-52394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:08:23.737 [DEBUG] [Thread-52394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:08:23.737 [INFO] [Thread-52394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:08:23.740 [DEBUG] [Thread-52394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] client lang: <none>
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] server lang: <none>
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] kex follows: False
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] Compression: none
2025-11-17T10:08:23.741 [DEBUG] [Thread-52394] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:08:23.758 [DEBUG] [Thread-52394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:08:23.758 [DEBUG] [Thread-52394] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:08:23.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:08:23.759 [DEBUG] [Thread-52394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:08:23.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:08:23.761 [DEBUG] [Thread-52394] [transport.py] [_log()] userauth is OK
2025-11-17T10:08:23.761 [DEBUG] [Thread-52394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:08:23.762 [DEBUG] [Thread-52394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:08:23.762 [DEBUG] [Thread-52394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:08:23.762 [DEBUG] [Thread-52394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:08:23.786 [INFO] [Thread-52394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:08:23.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:08:24.442 [DEBUG] [Thread-52394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:08:24.442 [DEBUG] [Thread-52394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:08:24.442 [DEBUG] [Thread-52394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:08:24.482 [DEBUG] [Thread-52394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:08:24.483 [DEBUG] [Thread-52394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:08:24.486 [DEBUG] [Thread-52394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:08:24.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:08:24.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:08:24.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:08:24.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:08:24.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:08:24.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:08:24.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:08:24.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:08:24.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:08:24.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.338591 -999.00  +17.10  14.45     33   +0.90 1 1 1 1 1   888    0 18.72 108.68 ----- 14.4 14.4 107.6 15.7 24.4 -28.9 23.9 -23.9 22.8 -24.5 23.4 -24.4
2025-11-17T10:08:24.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:08:24.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:08:24.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.338591
2025-11-17T10:08:24.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:08:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:08:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:08:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:08:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:08:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:08:09', tmtdew=19.52, humidity=26.7, cloud=0.0, wind=16.87, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:07:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:08:24.510 [DEBUG] [Thread-52394] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:08:24.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:08:24.605 [DEBUG] [Thread-52397] [transport.py] [_log()] starting thread (client mode): 0xd3160160
2025-11-17T10:08:24.605 [DEBUG] [Thread-52397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:08:24.624 [DEBUG] [Thread-52397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:08:24.624 [INFO] [Thread-52397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:08:24.631 [DEBUG] [Thread-52397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:08:24.632 [DEBUG] [Thread-52397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:08:24.632 [DEBUG] [Thread-52397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:08:24.632 [DEBUG] [Thread-52397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:08:24.632 [DEBUG] [Thread-52397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:08:24.632 [DEBUG] [Thread-52397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:08:24.632 [DEBUG] [Thread-52397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:08:24.632 [DEBUG] [Thread-52397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:08:24.632 [DEBUG] [Thread-52397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:08:24.633 [DEBUG] [Thread-52397] [transport.py] [_log()] client lang: <none>
2025-11-17T10:08:24.633 [DEBUG] [Thread-52397] [transport.py] [_log()] server lang: <none>
2025-11-17T10:08:24.633 [DEBUG] [Thread-52397] [transport.py] [_log()] kex follows: False
2025-11-17T10:08:24.633 [DEBUG] [Thread-52397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:08:24.633 [DEBUG] [Thread-52397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:08:24.633 [DEBUG] [Thread-52397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:08:24.633 [DEBUG] [Thread-52397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:08:24.633 [DEBUG] [Thread-52397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:08:24.634 [DEBUG] [Thread-52397] [transport.py] [_log()] Compression: none
2025-11-17T10:08:24.634 [DEBUG] [Thread-52397] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:08:24.689 [DEBUG] [Thread-52397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:08:24.690 [DEBUG] [Thread-52397] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:08:24.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:08:24.691 [DEBUG] [Thread-52397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:08:24.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:08:24.745 [DEBUG] [Thread-52397] [transport.py] [_log()] userauth is OK
2025-11-17T10:08:24.745 [DEBUG] [Thread-52397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:08:24.746 [DEBUG] [Thread-52397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:08:24.746 [DEBUG] [Thread-52397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:08:24.746 [DEBUG] [Thread-52397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:08:24.766 [INFO] [Thread-52397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:08:24.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:08:24.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:08:25.639 [DEBUG] [Thread-52397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:08:25.640 [DEBUG] [Thread-52397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:08:25.687 [DEBUG] [Thread-52397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:08:25.687 [DEBUG] [Thread-52397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:08:25.698 [DEBUG] [Thread-52397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:08:25.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:08: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')
2025-11-17T10:08:25.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:08:25.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:08:25.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:08:25.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:08:25.733 [DEBUG] [Thread-52397] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:08:35.102 [DEBUG] [Thread-52399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:08:50.135 [DEBUG] [Thread-52400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:08:55.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:08:55.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:08:55.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:08:56.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 8, 41), 19.71, 26.06, 0.0, 17.03, 17.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:08:56.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:08:41
2025-11-17T10:08:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:08:56.662 [DEBUG] [Thread-52401] [transport.py] [_log()] starting thread (client mode): 0xd07cceb0
2025-11-17T10:08:56.662 [DEBUG] [Thread-52401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:08:56.681 [DEBUG] [Thread-52401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:08:56.681 [INFO] [Thread-52401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:08:56.684 [DEBUG] [Thread-52401] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:08:56.684 [DEBUG] [Thread-52401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:08:56.684 [DEBUG] [Thread-52401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:08:56.684 [DEBUG] [Thread-52401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:08:56.684 [DEBUG] [Thread-52401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:08:56.684 [DEBUG] [Thread-52401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:08:56.684 [DEBUG] [Thread-52401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] client lang: <none>
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] server lang: <none>
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] kex follows: False
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] Compression: none
2025-11-17T10:08:56.685 [DEBUG] [Thread-52401] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:08:56.703 [DEBUG] [Thread-52401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:08:56.703 [DEBUG] [Thread-52401] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:08:56.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:08:56.704 [DEBUG] [Thread-52401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:08:56.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:08:56.706 [DEBUG] [Thread-52401] [transport.py] [_log()] userauth is OK
2025-11-17T10:08:56.706 [DEBUG] [Thread-52401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:08:56.707 [DEBUG] [Thread-52401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:08:56.707 [DEBUG] [Thread-52401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:08:56.707 [DEBUG] [Thread-52401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:08:56.743 [INFO] [Thread-52401] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:08:56.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:08:57.363 [DEBUG] [Thread-52401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:08:57.363 [DEBUG] [Thread-52401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:08:57.364 [DEBUG] [Thread-52401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:08:57.404 [DEBUG] [Thread-52401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:08:57.404 [DEBUG] [Thread-52401] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:08:57.407 [DEBUG] [Thread-52401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:08:57.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:08:57.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:08:57.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:08:57.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:08:57.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:08:57.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:08:57.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:08:57.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:08:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:08:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.339285 -999.00  +17.30  15.31     33   +1.10 1 1 1 1 1   888    0 19.23 112.57 ----- 15.3 15.3 95.2 23.1 24.5 -24.6 24.0 -24.3 22.9 -24.3 23.5 -24.4
2025-11-17T10:08:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:08:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:08:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.339285
2025-11-17T10:08:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:08:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:08:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:08:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:08:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:08:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:08:41', tmtdew=19.71, humidity=26.06, cloud=0.0, wind=17.03, temperature=17.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:08:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:08:57.431 [DEBUG] [Thread-52401] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:08:57.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:08:57.527 [DEBUG] [Thread-52404] [transport.py] [_log()] starting thread (client mode): 0xd7bc4ac0
2025-11-17T10:08:57.527 [DEBUG] [Thread-52404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:08:57.542 [DEBUG] [Thread-52404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:08:57.542 [INFO] [Thread-52404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:08:57.551 [DEBUG] [Thread-52404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:08:57.551 [DEBUG] [Thread-52404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:08:57.551 [DEBUG] [Thread-52404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:08:57.551 [DEBUG] [Thread-52404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:08:57.551 [DEBUG] [Thread-52404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:08:57.551 [DEBUG] [Thread-52404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:08:57.551 [DEBUG] [Thread-52404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:08:57.552 [DEBUG] [Thread-52404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:08:57.552 [DEBUG] [Thread-52404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:08:57.552 [DEBUG] [Thread-52404] [transport.py] [_log()] client lang: <none>
2025-11-17T10:08:57.552 [DEBUG] [Thread-52404] [transport.py] [_log()] server lang: <none>
2025-11-17T10:08:57.552 [DEBUG] [Thread-52404] [transport.py] [_log()] kex follows: False
2025-11-17T10:08:57.553 [DEBUG] [Thread-52404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:08:57.553 [DEBUG] [Thread-52404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:08:57.553 [DEBUG] [Thread-52404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:08:57.553 [DEBUG] [Thread-52404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:08:57.553 [DEBUG] [Thread-52404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:08:57.553 [DEBUG] [Thread-52404] [transport.py] [_log()] Compression: none
2025-11-17T10:08:57.553 [DEBUG] [Thread-52404] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:08:57.611 [DEBUG] [Thread-52404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:08:57.612 [DEBUG] [Thread-52404] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:08:57.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:08:57.613 [DEBUG] [Thread-52404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:08:57.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:08:57.669 [DEBUG] [Thread-52404] [transport.py] [_log()] userauth is OK
2025-11-17T10:08:57.669 [DEBUG] [Thread-52404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:08:57.670 [DEBUG] [Thread-52404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:08:57.670 [DEBUG] [Thread-52404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:08:57.670 [DEBUG] [Thread-52404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:08:57.696 [INFO] [Thread-52404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:08:57.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:08:57.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:08:58.598 [DEBUG] [Thread-52404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:08:58.598 [DEBUG] [Thread-52404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:08:58.646 [DEBUG] [Thread-52404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:08:58.646 [DEBUG] [Thread-52404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:08:58.655 [DEBUG] [Thread-52404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:08:58.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:08:58.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:08:58.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:08:58.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:08:58.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:08:58.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:08:58.689 [DEBUG] [Thread-52404] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:09:02.597 [DEBUG] [Thread-52406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:09:05.167 [DEBUG] [Thread-52407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:09:20.200 [DEBUG] [Thread-52408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:09:23.256 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:09:23.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:09:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:09:28.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:09:28.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
2025-11-17T10:09:29.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 9, 13), 19.84, 25.86, 0.0, 15.79, 18.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:09:29.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:09:13
2025-11-17T10:09:29.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:09:29.612 [DEBUG] [Thread-52409] [transport.py] [_log()] starting thread (client mode): 0xd07cd240
2025-11-17T10:09:29.612 [DEBUG] [Thread-52409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:09:29.631 [DEBUG] [Thread-52409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:09:29.631 [INFO] [Thread-52409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:09:29.634 [DEBUG] [Thread-52409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] client lang: <none>
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] server lang: <none>
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] kex follows: False
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] Compression: none
2025-11-17T10:09:29.635 [DEBUG] [Thread-52409] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:09:29.653 [DEBUG] [Thread-52409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:09:29.653 [DEBUG] [Thread-52409] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:09:29.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:09:29.654 [DEBUG] [Thread-52409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:09:29.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:09:29.656 [DEBUG] [Thread-52409] [transport.py] [_log()] userauth is OK
2025-11-17T10:09:29.656 [DEBUG] [Thread-52409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:09:29.656 [DEBUG] [Thread-52409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:09:29.656 [DEBUG] [Thread-52409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:09:29.656 [DEBUG] [Thread-52409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:09:29.679 [INFO] [Thread-52409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:09:29.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:09:30.323 [DEBUG] [Thread-52409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:09:30.323 [DEBUG] [Thread-52409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:09:30.323 [DEBUG] [Thread-52409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:09:30.364 [DEBUG] [Thread-52409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:09:30.365 [DEBUG] [Thread-52409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:09:30.367 [DEBUG] [Thread-52409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:09:30.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:09:30.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:09:30.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:09:30.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:09:30.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:09:30.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:09:30.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:09:30.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:09:30.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:09:30.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.339632 -999.00  +17.30  17.79     33   +1.00 1 1 1 1 1   888    0 18.59 103.83 ----- 17.8 17.8 69.7 22.8 24.4 -27.3 24.0 -24.4 22.8 -23.9 23.5 -24.4
2025-11-17T10:09:30.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:09:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:09:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.339632
2025-11-17T10:09:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:09:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:09:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:09:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:09:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:09:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:09:13', tmtdew=19.84, humidity=25.86, cloud=0.0, wind=15.79, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:09:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:09:30.393 [DEBUG] [Thread-52409] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:09:30.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:09:30.492 [DEBUG] [Thread-52412] [transport.py] [_log()] starting thread (client mode): 0xd07cc1f0
2025-11-17T10:09:30.492 [DEBUG] [Thread-52412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:09:30.508 [DEBUG] [Thread-52412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:09:30.508 [INFO] [Thread-52412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:09:30.516 [DEBUG] [Thread-52412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:09:30.516 [DEBUG] [Thread-52412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:09:30.516 [DEBUG] [Thread-52412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:09:30.516 [DEBUG] [Thread-52412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:09:30.516 [DEBUG] [Thread-52412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] client lang: <none>
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] server lang: <none>
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] kex follows: False
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:09:30.517 [DEBUG] [Thread-52412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:09:30.518 [DEBUG] [Thread-52412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:09:30.518 [DEBUG] [Thread-52412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:09:30.518 [DEBUG] [Thread-52412] [transport.py] [_log()] Compression: none
2025-11-17T10:09:30.518 [DEBUG] [Thread-52412] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:09:30.577 [DEBUG] [Thread-52412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:09:30.578 [DEBUG] [Thread-52412] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:09:30.578 [DEBUG] [Thread-52412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:09:30.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:09:30.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:09:30.634 [DEBUG] [Thread-52412] [transport.py] [_log()] userauth is OK
2025-11-17T10:09:30.634 [DEBUG] [Thread-52412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:09:30.634 [DEBUG] [Thread-52412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:09:30.634 [DEBUG] [Thread-52412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:09:30.634 [DEBUG] [Thread-52412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:09:30.653 [INFO] [Thread-52412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:09:30.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:09:30.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:09:31.517 [DEBUG] [Thread-52412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:09:31.517 [DEBUG] [Thread-52412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:09:31.566 [DEBUG] [Thread-52412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:09:31.566 [DEBUG] [Thread-52412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:09:31.575 [DEBUG] [Thread-52412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:09:31.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:09:31.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:09:31.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:09:31.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:09:31.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:09:31.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:09:31.609 [DEBUG] [Thread-52412] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:09:35.232 [DEBUG] [Thread-52414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:09:50.279 [DEBUG] [Thread-52415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:10:01.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:10:01.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:10:01.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:10:02.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 9, 45), 19.72, 26.35, 0.0, 16.15, 18.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:10:02.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:09:45
2025-11-17T10:10:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:10:02.566 [DEBUG] [Thread-52416] [transport.py] [_log()] starting thread (client mode): 0xd317ca90
2025-11-17T10:10:02.566 [DEBUG] [Thread-52416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:10:02.585 [DEBUG] [Thread-52416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:10:02.585 [INFO] [Thread-52416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:10:02.588 [DEBUG] [Thread-52416] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:10:02.588 [DEBUG] [Thread-52416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:10:02.588 [DEBUG] [Thread-52416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:10:02.588 [DEBUG] [Thread-52416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] client lang: <none>
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] server lang: <none>
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] kex follows: False
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] Compression: none
2025-11-17T10:10:02.589 [DEBUG] [Thread-52416] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:10:02.604 [DEBUG] [Thread-52416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:10:02.604 [DEBUG] [Thread-52416] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:10:02.604 [DEBUG] [Thread-52416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:10:02.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:10:02.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:10:02.605 [DEBUG] [Thread-52416] [transport.py] [_log()] userauth is OK
2025-11-17T10:10:02.605 [DEBUG] [Thread-52416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:10:02.605 [DEBUG] [Thread-52416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:10:02.605 [DEBUG] [Thread-52416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:10:02.605 [DEBUG] [Thread-52416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:10:02.615 [INFO] [Thread-52416] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:10:02.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:10:02.649 [DEBUG] [Thread-52418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:10:03.486 [DEBUG] [Thread-52416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:10:03.487 [DEBUG] [Thread-52416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:10:03.487 [DEBUG] [Thread-52416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:10:03.527 [DEBUG] [Thread-52416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:10:03.527 [DEBUG] [Thread-52416] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:10:03.529 [DEBUG] [Thread-52416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:10:03.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:10:03.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:10:03.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:10:03.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:10:03.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:10:03.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:10:03.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.339979 -999.00  +17.10  10.05     33   +0.90 1 1 1 1 1   888    0 18.72 106.71 ----- 10.1 10.1 122.0 22.6 24.3 -27.6 23.9 -24.4 22.7 -25.5 23.4 -25.2
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.339979
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:10:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:09:45', tmtdew=19.72, humidity=26.35, cloud=0.0, wind=16.15, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:09:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:10:03.561 [DEBUG] [Thread-52416] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:10:03.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:10:03.653 [DEBUG] [Thread-52420] [transport.py] [_log()] starting thread (client mode): 0xd31cd480
2025-11-17T10:10:03.653 [DEBUG] [Thread-52420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:10:03.668 [DEBUG] [Thread-52420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:10:03.668 [INFO] [Thread-52420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:10:03.675 [DEBUG] [Thread-52420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:10:03.675 [DEBUG] [Thread-52420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:10:03.675 [DEBUG] [Thread-52420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:10:03.675 [DEBUG] [Thread-52420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:10:03.675 [DEBUG] [Thread-52420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:10:03.675 [DEBUG] [Thread-52420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:10:03.675 [DEBUG] [Thread-52420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] client lang: <none>
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] server lang: <none>
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] kex follows: False
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] Compression: none
2025-11-17T10:10:03.676 [DEBUG] [Thread-52420] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:10:03.737 [DEBUG] [Thread-52420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:10:03.737 [DEBUG] [Thread-52420] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:10:03.738 [DEBUG] [Thread-52420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:10:03.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:10:03.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:10:03.793 [DEBUG] [Thread-52420] [transport.py] [_log()] userauth is OK
2025-11-17T10:10:03.793 [DEBUG] [Thread-52420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:10:03.793 [DEBUG] [Thread-52420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:10:03.793 [DEBUG] [Thread-52420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:10:03.793 [DEBUG] [Thread-52420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:10:03.811 [INFO] [Thread-52420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:10:03.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:10:03.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:10:04.665 [DEBUG] [Thread-52420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:10:04.665 [DEBUG] [Thread-52420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:10:04.713 [DEBUG] [Thread-52420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:10:04.714 [DEBUG] [Thread-52420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:10:04.723 [DEBUG] [Thread-52420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:10:04.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:10:04.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:10:04.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:10:04.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:10:04.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:10:04.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:10:04.755 [DEBUG] [Thread-52420] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:10:05.308 [DEBUG] [Thread-52422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:10:20.341 [DEBUG] [Thread-52423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:10:23.399 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:10:23.400 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:10:34.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:10:34.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:10:34.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:10:35.372 [DEBUG] [Thread-52424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:10:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 10, 17), 19.83, 26.16, 0.0, 17.36, 18.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:10:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:10:17
2025-11-17T10:10:35.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:10:35.753 [DEBUG] [Thread-52425] [transport.py] [_log()] starting thread (client mode): 0xd07bf130
2025-11-17T10:10:35.753 [DEBUG] [Thread-52425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:10:35.773 [DEBUG] [Thread-52425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:10:35.773 [INFO] [Thread-52425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:10:35.776 [DEBUG] [Thread-52425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:10:35.776 [DEBUG] [Thread-52425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:10:35.776 [DEBUG] [Thread-52425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:10:35.776 [DEBUG] [Thread-52425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:10:35.776 [DEBUG] [Thread-52425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:10:35.776 [DEBUG] [Thread-52425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:10:35.776 [DEBUG] [Thread-52425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] client lang: <none>
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] server lang: <none>
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] kex follows: False
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] Compression: none
2025-11-17T10:10:35.777 [DEBUG] [Thread-52425] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:10:35.794 [DEBUG] [Thread-52425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:10:35.794 [DEBUG] [Thread-52425] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:10:35.794 [DEBUG] [Thread-52425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:10:35.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:10:35.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:10:35.795 [DEBUG] [Thread-52425] [transport.py] [_log()] userauth is OK
2025-11-17T10:10:35.795 [DEBUG] [Thread-52425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:10:35.795 [DEBUG] [Thread-52425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:10:35.795 [DEBUG] [Thread-52425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:10:35.795 [DEBUG] [Thread-52425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:10:35.805 [INFO] [Thread-52425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:10:35.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:10:36.397 [DEBUG] [Thread-52425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:10:36.397 [DEBUG] [Thread-52425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:10:36.397 [DEBUG] [Thread-52425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:10:36.438 [DEBUG] [Thread-52425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:10:36.438 [DEBUG] [Thread-52425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:10:36.440 [DEBUG] [Thread-52425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:10:36.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:10:36.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:10:36.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:10:36.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:10:36.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:10:36.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:10:36.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.340326 -999.00  +17.20  15.29     33   +1.00 1 1 1 1 1   888    0 18.55 96.86 ----- 15.3 15.3 55.6 17.7 24.4 -24.9 23.9 -24.8 22.8 -23.4 23.5 -24.0
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.340326
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:10:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:10:17', tmtdew=19.83, humidity=26.16, cloud=0.0, wind=17.36, temperature=18.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:10:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:10:36.459 [DEBUG] [Thread-52425] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:10:36.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:10:36.545 [DEBUG] [Thread-52428] [transport.py] [_log()] starting thread (client mode): 0xd3163310
2025-11-17T10:10:36.545 [DEBUG] [Thread-52428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:10:36.560 [DEBUG] [Thread-52428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:10:36.560 [INFO] [Thread-52428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] client lang: <none>
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] server lang: <none>
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] kex follows: False
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:10:36.567 [DEBUG] [Thread-52428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:10:36.568 [DEBUG] [Thread-52428] [transport.py] [_log()] Compression: none
2025-11-17T10:10:36.568 [DEBUG] [Thread-52428] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:10:36.627 [DEBUG] [Thread-52428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:10:36.627 [DEBUG] [Thread-52428] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:10:36.627 [DEBUG] [Thread-52428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:10:36.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:10:36.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:10:36.684 [DEBUG] [Thread-52428] [transport.py] [_log()] userauth is OK
2025-11-17T10:10:36.684 [DEBUG] [Thread-52428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:10:36.684 [DEBUG] [Thread-52428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:10:36.684 [DEBUG] [Thread-52428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:10:36.684 [DEBUG] [Thread-52428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:10:36.698 [INFO] [Thread-52428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:10:36.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:10:36.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:10:37.561 [DEBUG] [Thread-52428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:10:37.561 [DEBUG] [Thread-52428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:10:37.609 [DEBUG] [Thread-52428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:10:37.609 [DEBUG] [Thread-52428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:10:37.617 [DEBUG] [Thread-52428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:10:37.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:10:37.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:10: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') -> 00000000
2025-11-17T10:10:37.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:10:37.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:10:37.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:10:37.650 [DEBUG] [Thread-52428] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:10:50.403 [DEBUG] [Thread-52430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:11:02.725 [DEBUG] [Thread-52431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:11:05.437 [DEBUG] [Thread-52432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:11:07.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:11:07.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:11:07.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:11:08.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 10, 49), 19.87, 26.0, 0.0, 17.43, 17.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:11:08.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:10:49
2025-11-17T10:11:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:11:08.600 [DEBUG] [Thread-52433] [transport.py] [_log()] starting thread (client mode): 0xd3161600
2025-11-17T10:11:08.600 [DEBUG] [Thread-52433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:11:08.620 [DEBUG] [Thread-52433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:11:08.621 [INFO] [Thread-52433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:11:08.623 [DEBUG] [Thread-52433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:11:08.623 [DEBUG] [Thread-52433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:11:08.623 [DEBUG] [Thread-52433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:11:08.623 [DEBUG] [Thread-52433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:11:08.623 [DEBUG] [Thread-52433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:11:08.623 [DEBUG] [Thread-52433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:11:08.623 [DEBUG] [Thread-52433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] client lang: <none>
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] server lang: <none>
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] kex follows: False
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] Compression: none
2025-11-17T10:11:08.624 [DEBUG] [Thread-52433] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:11:08.641 [DEBUG] [Thread-52433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:11:08.642 [DEBUG] [Thread-52433] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:11:08.642 [DEBUG] [Thread-52433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:11:08.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:11:08.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:11:08.644 [DEBUG] [Thread-52433] [transport.py] [_log()] userauth is OK
2025-11-17T10:11:08.644 [DEBUG] [Thread-52433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:11:08.645 [DEBUG] [Thread-52433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:11:08.645 [DEBUG] [Thread-52433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:11:08.645 [DEBUG] [Thread-52433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:11:08.662 [INFO] [Thread-52433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:11:08.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:11:09.281 [DEBUG] [Thread-52433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:11:09.281 [DEBUG] [Thread-52433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:11:09.281 [DEBUG] [Thread-52433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:11:09.322 [DEBUG] [Thread-52433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:11:09.323 [DEBUG] [Thread-52433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:11:09.325 [DEBUG] [Thread-52433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:11:09.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:11:09.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:11:09.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:11:09.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:11:09.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:11:09.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:11:09.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:11:09.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:11:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:11:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.340674 -999.00  +17.10  14.59     33   +0.90 1 1 1 1 1   888    0 18.38 92.46 ----- 14.6 14.6 93.3 24.9 24.3 -29.5 23.8 -26.1 22.7 -24.5 23.4 -24.9
2025-11-17T10:11:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:11:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:11:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.340674
2025-11-17T10:11:09.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:11:09.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:11:09.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:11:09.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:11:09.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:11:09.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:10:49', tmtdew=19.87, humidity=26.0, cloud=0.0, wind=17.43, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:10:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:11:09.352 [DEBUG] [Thread-52433] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:11:09.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:11:09.450 [DEBUG] [Thread-52436] [transport.py] [_log()] starting thread (client mode): 0xd31cd900
2025-11-17T10:11:09.451 [DEBUG] [Thread-52436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:11:09.466 [DEBUG] [Thread-52436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:11:09.467 [INFO] [Thread-52436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] client lang: <none>
2025-11-17T10:11:09.474 [DEBUG] [Thread-52436] [transport.py] [_log()] server lang: <none>
2025-11-17T10:11:09.475 [DEBUG] [Thread-52436] [transport.py] [_log()] kex follows: False
2025-11-17T10:11:09.475 [DEBUG] [Thread-52436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:11:09.475 [DEBUG] [Thread-52436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:11:09.475 [DEBUG] [Thread-52436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:11:09.475 [DEBUG] [Thread-52436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:11:09.475 [DEBUG] [Thread-52436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:11:09.475 [DEBUG] [Thread-52436] [transport.py] [_log()] Compression: none
2025-11-17T10:11:09.475 [DEBUG] [Thread-52436] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:11:09.537 [DEBUG] [Thread-52436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:11:09.538 [DEBUG] [Thread-52436] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:11:09.538 [DEBUG] [Thread-52436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:11:09.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:11:09.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:11:09.593 [DEBUG] [Thread-52436] [transport.py] [_log()] userauth is OK
2025-11-17T10:11:09.593 [DEBUG] [Thread-52436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:11:09.593 [DEBUG] [Thread-52436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:11:09.593 [DEBUG] [Thread-52436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:11:09.593 [DEBUG] [Thread-52436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:11:09.614 [INFO] [Thread-52436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:11:09.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:11:09.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:11:10.477 [DEBUG] [Thread-52436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:11:10.477 [DEBUG] [Thread-52436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:11:10.525 [DEBUG] [Thread-52436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:11:10.525 [DEBUG] [Thread-52436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:11:10.534 [DEBUG] [Thread-52436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:11:10.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:11:10.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:11:10.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:11:10.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:11:10.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:11:10.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:11:10.568 [DEBUG] [Thread-52436] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:11:20.468 [DEBUG] [Thread-52438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:11:23.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:11:23.542 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:11:35.511 [DEBUG] [Thread-52439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:11:40.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:11:40.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:11:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:11:41.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 11, 21), 19.58, 26.45, 0.0, 11.88, 17.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:11:41.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:11:21
2025-11-17T10:11:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:11:41.497 [DEBUG] [Thread-52440] [transport.py] [_log()] starting thread (client mode): 0xd3161a80
2025-11-17T10:11:41.497 [DEBUG] [Thread-52440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:11:41.517 [DEBUG] [Thread-52440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:11:41.517 [INFO] [Thread-52440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:11:41.520 [DEBUG] [Thread-52440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:11:41.520 [DEBUG] [Thread-52440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:11:41.520 [DEBUG] [Thread-52440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:11:41.520 [DEBUG] [Thread-52440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:11:41.520 [DEBUG] [Thread-52440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] client lang: <none>
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] server lang: <none>
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] kex follows: False
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] Compression: none
2025-11-17T10:11:41.521 [DEBUG] [Thread-52440] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:11:41.538 [DEBUG] [Thread-52440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:11:41.538 [DEBUG] [Thread-52440] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:11:41.539 [DEBUG] [Thread-52440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:11:41.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:11:41.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:11:41.540 [DEBUG] [Thread-52440] [transport.py] [_log()] userauth is OK
2025-11-17T10:11:41.540 [DEBUG] [Thread-52440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:11:41.541 [DEBUG] [Thread-52440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:11:41.541 [DEBUG] [Thread-52440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:11:41.541 [DEBUG] [Thread-52440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:11:41.556 [INFO] [Thread-52440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:11:41.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:11:42.184 [DEBUG] [Thread-52440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:11:42.184 [DEBUG] [Thread-52440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:11:42.185 [DEBUG] [Thread-52440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:11:42.226 [DEBUG] [Thread-52440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:11:42.226 [DEBUG] [Thread-52440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:11:42.229 [DEBUG] [Thread-52440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:11:42.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:11:42.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:11:42.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:11:42.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:11:42.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:11:42.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:11:42.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:11:42.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:11:42.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:11:42.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.341021 -999.00  +17.20  11.02     33   +1.00 1 1 1 1 1   888    0 18.35 90.37 ----- 11.0 11.0 109.8 19.1 24.4 -26.7 23.8 -24.8 22.8 -24.0 23.4 -24.5
2025-11-17T10:11:42.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:11:42.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:11:42.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.341021
2025-11-17T10:11:42.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:11:42.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:11:42.254 [DEBUG] [Thread-52440] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:11:42.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:11:42.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:11:42.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:11:42.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:11:21', tmtdew=19.58, humidity=26.45, cloud=0.0, wind=11.88, temperature=17.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:11:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:11:42.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:11:42.354 [DEBUG] [Thread-52443] [transport.py] [_log()] starting thread (client mode): 0xd31cff70
2025-11-17T10:11:42.354 [DEBUG] [Thread-52443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:11:42.369 [DEBUG] [Thread-52443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:11:42.369 [INFO] [Thread-52443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:11:42.379 [DEBUG] [Thread-52443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:11:42.379 [DEBUG] [Thread-52443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:11:42.379 [DEBUG] [Thread-52443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:11:42.379 [DEBUG] [Thread-52443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] client lang: <none>
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] server lang: <none>
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] kex follows: False
2025-11-17T10:11:42.380 [DEBUG] [Thread-52443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:11:42.381 [DEBUG] [Thread-52443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:11:42.381 [DEBUG] [Thread-52443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:11:42.381 [DEBUG] [Thread-52443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:11:42.381 [DEBUG] [Thread-52443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:11:42.381 [DEBUG] [Thread-52443] [transport.py] [_log()] Compression: none
2025-11-17T10:11:42.381 [DEBUG] [Thread-52443] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:11:42.436 [DEBUG] [Thread-52443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:11:42.436 [DEBUG] [Thread-52443] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:11:42.436 [DEBUG] [Thread-52443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:11:42.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:11:42.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:11:42.495 [DEBUG] [Thread-52443] [transport.py] [_log()] userauth is OK
2025-11-17T10:11:42.495 [DEBUG] [Thread-52443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:11:42.495 [DEBUG] [Thread-52443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:11:42.495 [DEBUG] [Thread-52443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:11:42.495 [DEBUG] [Thread-52443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:11:42.518 [INFO] [Thread-52443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:11:42.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:11:42.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:11:43.384 [DEBUG] [Thread-52443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:11:43.385 [DEBUG] [Thread-52443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:11:43.432 [DEBUG] [Thread-52443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:11:43.432 [DEBUG] [Thread-52443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:11:43.446 [DEBUG] [Thread-52443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:11:43.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:11:43.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:11:43.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:11:43.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:11:43.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:11:43.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:11:43.481 [DEBUG] [Thread-52443] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:11:50.546 [DEBUG] [Thread-52445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:12:02.776 [DEBUG] [Thread-52446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:12:05.594 [DEBUG] [Thread-52447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:12:13.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:12:13.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:12:13.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:12:14.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 11, 53), 19.6, 26.43, 0.0, 14.27, 17.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:12:14.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:11:53
2025-11-17T10:12:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:12:14.398 [DEBUG] [Thread-52448] [transport.py] [_log()] starting thread (client mode): 0xd0712f50
2025-11-17T10:12:14.398 [DEBUG] [Thread-52448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:12:14.418 [DEBUG] [Thread-52448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:12:14.418 [INFO] [Thread-52448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:12:14.421 [DEBUG] [Thread-52448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] client lang: <none>
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] server lang: <none>
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] kex follows: False
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] Compression: none
2025-11-17T10:12:14.422 [DEBUG] [Thread-52448] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:12:14.439 [DEBUG] [Thread-52448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:12:14.440 [DEBUG] [Thread-52448] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:12:14.440 [DEBUG] [Thread-52448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:12:14.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:12:14.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:12:14.442 [DEBUG] [Thread-52448] [transport.py] [_log()] userauth is OK
2025-11-17T10:12:14.443 [DEBUG] [Thread-52448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:12:14.443 [DEBUG] [Thread-52448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:12:14.443 [DEBUG] [Thread-52448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:12:14.443 [DEBUG] [Thread-52448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:12:14.459 [INFO] [Thread-52448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:12:14.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:12:15.089 [DEBUG] [Thread-52448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:12:15.090 [DEBUG] [Thread-52448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:12:15.090 [DEBUG] [Thread-52448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:12:15.130 [DEBUG] [Thread-52448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:12:15.131 [DEBUG] [Thread-52448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:12:15.133 [DEBUG] [Thread-52448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:12:15.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:12:15.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:12:15.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:12:15.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:12:15.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:12:15.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:12:15.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:12:15.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:12:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:12:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.341368 -999.00  +17.10  14.72     33   +0.80 1 1 1 1 1   888    0 18.53 93.84 ----- 14.7 14.7 67.0 23.4 24.5 -24.4 23.8 -25.2 22.7 -25.4 23.4 -25.5
2025-11-17T10:12:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:12:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:12:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.341368
2025-11-17T10:12:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:12:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:12:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:12:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:12:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:12:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:11:53', tmtdew=19.6, humidity=26.43, cloud=0.0, wind=14.27, temperature=17.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:11:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:12:15.159 [DEBUG] [Thread-52448] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:12:15.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:12:15.256 [DEBUG] [Thread-52451] [transport.py] [_log()] starting thread (client mode): 0xd3135e40
2025-11-17T10:12:15.257 [DEBUG] [Thread-52451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:12:15.271 [DEBUG] [Thread-52451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:12:15.271 [INFO] [Thread-52451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] client lang: <none>
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] server lang: <none>
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] kex follows: False
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:12:15.281 [DEBUG] [Thread-52451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:12:15.282 [DEBUG] [Thread-52451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:12:15.282 [DEBUG] [Thread-52451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:12:15.282 [DEBUG] [Thread-52451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:12:15.282 [DEBUG] [Thread-52451] [transport.py] [_log()] Compression: none
2025-11-17T10:12:15.282 [DEBUG] [Thread-52451] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:12:15.337 [DEBUG] [Thread-52451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:12:15.337 [DEBUG] [Thread-52451] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:12:15.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:12:15.338 [DEBUG] [Thread-52451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:12:15.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:12:15.394 [DEBUG] [Thread-52451] [transport.py] [_log()] userauth is OK
2025-11-17T10:12:15.395 [DEBUG] [Thread-52451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:12:15.395 [DEBUG] [Thread-52451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:12:15.395 [DEBUG] [Thread-52451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:12:15.395 [DEBUG] [Thread-52451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:12:15.413 [INFO] [Thread-52451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:12:15.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:12:15.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:12:16.281 [DEBUG] [Thread-52451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:12:16.281 [DEBUG] [Thread-52451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:12:16.329 [DEBUG] [Thread-52451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:12:16.329 [DEBUG] [Thread-52451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:12:16.338 [DEBUG] [Thread-52451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:12:16.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:12:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:12: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
2025-11-17T10:12:16.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:12:16.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:12:16.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:12:16.383 [DEBUG] [Thread-52451] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:12:20.622 [DEBUG] [Thread-52453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:12:23.687 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:12:23.688 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:12:35.668 [DEBUG] [Thread-52454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:12:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:12:46.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:12:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:12:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 12, 25), 19.72, 26.23, 0.0, 18.72, 17.86, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:12:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:12:25
2025-11-17T10:12:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:12:47.317 [DEBUG] [Thread-52455] [transport.py] [_log()] starting thread (client mode): 0xd0784a60
2025-11-17T10:12:47.318 [DEBUG] [Thread-52455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:12:47.337 [DEBUG] [Thread-52455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:12:47.337 [INFO] [Thread-52455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:12:47.338 [DEBUG] [Thread-52455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] client lang: <none>
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] server lang: <none>
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] kex follows: False
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] Compression: none
2025-11-17T10:12:47.339 [DEBUG] [Thread-52455] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:12:47.351 [DEBUG] [Thread-52455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:12:47.351 [DEBUG] [Thread-52455] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:12:47.351 [DEBUG] [Thread-52455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:12:47.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:12:47.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:12:47.353 [DEBUG] [Thread-52455] [transport.py] [_log()] userauth is OK
2025-11-17T10:12:47.354 [DEBUG] [Thread-52455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:12:47.354 [DEBUG] [Thread-52455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:12:47.354 [DEBUG] [Thread-52455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:12:47.354 [DEBUG] [Thread-52455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:12:47.378 [INFO] [Thread-52455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:12:47.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:12:48.036 [DEBUG] [Thread-52455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:12:48.036 [DEBUG] [Thread-52455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:12:48.036 [DEBUG] [Thread-52455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:12:48.077 [DEBUG] [Thread-52455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:12:48.077 [DEBUG] [Thread-52455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:12:48.079 [DEBUG] [Thread-52455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:12:48.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:12:48.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:12:48.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:12:48.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:12:48.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:12:48.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:12:48.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:12:48.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:12:48.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:12:48.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.341716 -999.00  +17.10   8.59     33   +1.00 1 1 1 1 1   888    0 18.64 93.68 ----- 8.6 8.6 90.9 16.7 24.4 -25.7 23.9 -24.3 22.8 -23.9 23.5 -23.7
2025-11-17T10:12:48.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:12:48.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:12:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.341716
2025-11-17T10:12:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:12:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:12:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:12:48.104 [DEBUG] [Thread-52455] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:12:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:12:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:12:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:12:25', tmtdew=19.72, humidity=26.23, cloud=0.0, wind=18.72, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:12:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:12:48.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:12:48.204 [DEBUG] [Thread-52458] [transport.py] [_log()] starting thread (client mode): 0xd07bf130
2025-11-17T10:12:48.204 [DEBUG] [Thread-52458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:12:48.221 [DEBUG] [Thread-52458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:12:48.221 [INFO] [Thread-52458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:12:48.228 [DEBUG] [Thread-52458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] client lang: <none>
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] server lang: <none>
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] kex follows: False
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:12:48.229 [DEBUG] [Thread-52458] [transport.py] [_log()] Compression: none
2025-11-17T10:12:48.230 [DEBUG] [Thread-52458] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:12:48.294 [DEBUG] [Thread-52458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:12:48.295 [DEBUG] [Thread-52458] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:12:48.295 [DEBUG] [Thread-52458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:12:48.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:12:48.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:12:48.357 [DEBUG] [Thread-52458] [transport.py] [_log()] userauth is OK
2025-11-17T10:12:48.357 [DEBUG] [Thread-52458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:12:48.357 [DEBUG] [Thread-52458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:12:48.357 [DEBUG] [Thread-52458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:12:48.357 [DEBUG] [Thread-52458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:12:48.377 [INFO] [Thread-52458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:12:48.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:12:48.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:12:49.273 [DEBUG] [Thread-52458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:12:49.273 [DEBUG] [Thread-52458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:12:49.320 [DEBUG] [Thread-52458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:12:49.320 [DEBUG] [Thread-52458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:12:49.330 [DEBUG] [Thread-52458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:12:49.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:12:49.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:12:49.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:12:49.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:12:49.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:12:49.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:12:49.365 [DEBUG] [Thread-52458] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:12:50.705 [DEBUG] [Thread-52460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:13:02.819 [DEBUG] [Thread-52461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:13:05.751 [DEBUG] [Thread-52462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:13:19.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:13:19.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:13:19.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
2025-11-17T10:13:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 12, 57), 19.67, 26.25, 0.0, 17.15, 18.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:13:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:12:57
2025-11-17T10:13:20.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:13:20.287 [DEBUG] [Thread-52463] [transport.py] [_log()] starting thread (client mode): 0xd317d9c0
2025-11-17T10:13:20.287 [DEBUG] [Thread-52463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:13:20.306 [DEBUG] [Thread-52463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:13:20.306 [INFO] [Thread-52463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:13:20.309 [DEBUG] [Thread-52463] [transport.py] [_log()] client lang: <none>
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] server lang: <none>
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] kex follows: False
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] Compression: none
2025-11-17T10:13:20.310 [DEBUG] [Thread-52463] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:13:20.326 [DEBUG] [Thread-52463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:13:20.326 [DEBUG] [Thread-52463] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:13:20.327 [DEBUG] [Thread-52463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:13:20.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:13:20.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:13:20.328 [DEBUG] [Thread-52463] [transport.py] [_log()] userauth is OK
2025-11-17T10:13:20.329 [DEBUG] [Thread-52463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:13:20.329 [DEBUG] [Thread-52463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:13:20.329 [DEBUG] [Thread-52463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:13:20.329 [DEBUG] [Thread-52463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:13:20.350 [INFO] [Thread-52463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:13:20.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:13:20.778 [DEBUG] [Thread-52465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:13:21.001 [DEBUG] [Thread-52463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:13:21.001 [DEBUG] [Thread-52463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:13:21.001 [DEBUG] [Thread-52463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:13:21.041 [DEBUG] [Thread-52463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:13:21.042 [DEBUG] [Thread-52463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:13:21.045 [DEBUG] [Thread-52463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:13:21.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:13:21.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:13:21.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:13:21.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:13:21.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:13:21.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:13:21.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:13:21.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:13:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:13:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.342410 -999.00  +17.70  12.84     32   +1.10 1 1 1 1 1   888    0 18.44 84.84 ----- 12.8 12.8 73.2 19.9 24.4 -29.3 24.0 -24.4 22.9 -24.3 23.6 -24.4
2025-11-17T10:13:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:13:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:13:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.342410
2025-11-17T10:13:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:13:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:13:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:13:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:13:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:13:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:12:57', tmtdew=19.67, humidity=26.25, cloud=0.0, wind=17.15, temperature=18.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:13:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:13:21.068 [DEBUG] [Thread-52463] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:13:21.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:13:21.166 [DEBUG] [Thread-52467] [transport.py] [_log()] starting thread (client mode): 0xd0787c70
2025-11-17T10:13:21.166 [DEBUG] [Thread-52467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:13:21.181 [DEBUG] [Thread-52467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:13:21.182 [INFO] [Thread-52467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:13:21.189 [DEBUG] [Thread-52467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:13:21.189 [DEBUG] [Thread-52467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] client lang: <none>
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] server lang: <none>
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] kex follows: False
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:13:21.190 [DEBUG] [Thread-52467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:13:21.191 [DEBUG] [Thread-52467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:13:21.191 [DEBUG] [Thread-52467] [transport.py] [_log()] Compression: none
2025-11-17T10:13:21.191 [DEBUG] [Thread-52467] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:13:21.253 [DEBUG] [Thread-52467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:13:21.253 [DEBUG] [Thread-52467] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:13:21.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:13:21.254 [DEBUG] [Thread-52467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:13:21.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:13:21.309 [DEBUG] [Thread-52467] [transport.py] [_log()] userauth is OK
2025-11-17T10:13:21.309 [DEBUG] [Thread-52467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:13:21.309 [DEBUG] [Thread-52467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:13:21.309 [DEBUG] [Thread-52467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:13:21.309 [DEBUG] [Thread-52467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:13:21.329 [INFO] [Thread-52467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:13:21.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:13:21.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:13:22.205 [DEBUG] [Thread-52467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:13:22.205 [DEBUG] [Thread-52467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:13:22.253 [DEBUG] [Thread-52467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:13:22.253 [DEBUG] [Thread-52467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:13:22.262 [DEBUG] [Thread-52467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:13:22.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:13:22.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:13:22.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:13:22.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:13:22.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:13:22.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:13:22.297 [DEBUG] [Thread-52467] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:13:23.830 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:13:23.831 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:13:35.810 [DEBUG] [Thread-52469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:13:50.859 [DEBUG] [Thread-52470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:13:52.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:13:52.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:13:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:13:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 13, 30), 19.84, 26.0, 0.0, 17.75, 18.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:13:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:13:30
2025-11-17T10:13:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:13:53.250 [DEBUG] [Thread-52471] [transport.py] [_log()] starting thread (client mode): 0xd071bf10
2025-11-17T10:13:53.251 [DEBUG] [Thread-52471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:13:53.271 [DEBUG] [Thread-52471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:13:53.271 [INFO] [Thread-52471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:13:53.274 [DEBUG] [Thread-52471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:13:53.274 [DEBUG] [Thread-52471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:13:53.274 [DEBUG] [Thread-52471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] client lang: <none>
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] server lang: <none>
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] kex follows: False
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] Compression: none
2025-11-17T10:13:53.275 [DEBUG] [Thread-52471] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:13:53.292 [DEBUG] [Thread-52471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:13:53.293 [DEBUG] [Thread-52471] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:13:53.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:13:53.294 [DEBUG] [Thread-52471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:13:53.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:13:53.295 [DEBUG] [Thread-52471] [transport.py] [_log()] userauth is OK
2025-11-17T10:13:53.296 [DEBUG] [Thread-52471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:13:53.296 [DEBUG] [Thread-52471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:13:53.296 [DEBUG] [Thread-52471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:13:53.296 [DEBUG] [Thread-52471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:13:53.319 [INFO] [Thread-52471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:13:53.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:13:53.958 [DEBUG] [Thread-52471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:13:53.958 [DEBUG] [Thread-52471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:13:53.959 [DEBUG] [Thread-52471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:13:53.999 [DEBUG] [Thread-52471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:13:54.000 [DEBUG] [Thread-52471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:13:54.003 [DEBUG] [Thread-52471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:13:54.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:13:54.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:13:54.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:13:54.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:13:54.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:13:54.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:13:54.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:13:54.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:13:54.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:13:54.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.342757 -999.00  +17.90  21.52     32   +1.10 1 1 1 1 1   888    0 18.73 88.81 ----- 21.5 21.5 119.0 24.8 24.6 -25.9 24.1 -24.0 23.0 -24.0 23.6 -25.3
2025-11-17T10:13:54.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:13:54.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:13:54.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.342757
2025-11-17T10:13:54.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:13:54.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:13:54.029 [DEBUG] [Thread-52471] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:13:54.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:13:54.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:13:54.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:13:54.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:13:30', tmtdew=19.84, humidity=26.0, cloud=0.0, wind=17.75, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:13:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:13:54.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:13:54.127 [DEBUG] [Thread-52474] [transport.py] [_log()] starting thread (client mode): 0xd0759ea0
2025-11-17T10:13:54.127 [DEBUG] [Thread-52474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:13:54.143 [DEBUG] [Thread-52474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:13:54.143 [INFO] [Thread-52474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:13:54.150 [DEBUG] [Thread-52474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:13:54.150 [DEBUG] [Thread-52474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:13:54.150 [DEBUG] [Thread-52474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:13:54.150 [DEBUG] [Thread-52474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:13:54.150 [DEBUG] [Thread-52474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] client lang: <none>
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] server lang: <none>
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] kex follows: False
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] Compression: none
2025-11-17T10:13:54.151 [DEBUG] [Thread-52474] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:13:54.208 [DEBUG] [Thread-52474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:13:54.209 [DEBUG] [Thread-52474] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:13:54.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:13:54.209 [DEBUG] [Thread-52474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:13:54.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:13:54.265 [DEBUG] [Thread-52474] [transport.py] [_log()] userauth is OK
2025-11-17T10:13:54.265 [DEBUG] [Thread-52474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:13:54.265 [DEBUG] [Thread-52474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:13:54.265 [DEBUG] [Thread-52474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:13:54.265 [DEBUG] [Thread-52474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:13:54.284 [INFO] [Thread-52474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:13:54.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:13:54.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:13:55.186 [DEBUG] [Thread-52474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:13:55.186 [DEBUG] [Thread-52474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:13:55.234 [DEBUG] [Thread-52474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:13:55.234 [DEBUG] [Thread-52474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:13:55.245 [DEBUG] [Thread-52474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:13:55.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:13:55.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:13:55.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:13:55.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:13:55.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:13:55.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:13:55.279 [DEBUG] [Thread-52474] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:14:02.873 [DEBUG] [Thread-52476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:14:05.883 [DEBUG] [Thread-52477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:14:20.923 [DEBUG] [Thread-52478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:14:23.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:14:23.973 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:14:25.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:14:25.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:14:25.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:14:26.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 14, 1), 19.77, 26.1, 0.0, 18.77, 18.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:14:26.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:14:01
2025-11-17T10:14:26.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:14:26.288 [DEBUG] [Thread-52479] [transport.py] [_log()] starting thread (client mode): 0xd0718190
2025-11-17T10:14:26.288 [DEBUG] [Thread-52479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:14:26.310 [DEBUG] [Thread-52479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:14:26.310 [INFO] [Thread-52479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] client lang: <none>
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] server lang: <none>
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] kex follows: False
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] Compression: none
2025-11-17T10:14:26.312 [DEBUG] [Thread-52479] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:14:26.329 [DEBUG] [Thread-52479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:14:26.329 [DEBUG] [Thread-52479] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:14:26.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:14:26.329 [DEBUG] [Thread-52479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:14:26.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:14:26.330 [DEBUG] [Thread-52479] [transport.py] [_log()] userauth is OK
2025-11-17T10:14:26.330 [DEBUG] [Thread-52479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:14:26.330 [DEBUG] [Thread-52479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:14:26.330 [DEBUG] [Thread-52479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:14:26.330 [DEBUG] [Thread-52479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:14:26.345 [INFO] [Thread-52479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:14:26.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:14:26.958 [DEBUG] [Thread-52479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:14:26.958 [DEBUG] [Thread-52479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:14:26.958 [DEBUG] [Thread-52479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:14:26.999 [DEBUG] [Thread-52479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:14:26.999 [DEBUG] [Thread-52479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:14:27.001 [DEBUG] [Thread-52479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:14:27.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:14:27.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:14:27.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:14:27.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:14:27.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:14:27.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:14:27.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:14:27.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.343104 -999.00  +17.80   9.76     32   +1.10 1 1 1 1 1   888    0 18.33 81.82 ----- 9.8 9.8 111.9 22.4 24.6 -26.0 24.0 -25.0 23.0 -24.3 23.7 -24.6
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.343104
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:14:27.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:14:01', tmtdew=19.77, humidity=26.1, cloud=0.0, wind=18.77, temperature=18.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:14:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:14:27.020 [DEBUG] [Thread-52479] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:14:27.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:14:27.105 [DEBUG] [Thread-52482] [transport.py] [_log()] starting thread (client mode): 0xd071bee0
2025-11-17T10:14:27.105 [DEBUG] [Thread-52482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:14:27.119 [DEBUG] [Thread-52482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:14:27.119 [INFO] [Thread-52482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] client lang: <none>
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] server lang: <none>
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] kex follows: False
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] Compression: none
2025-11-17T10:14:27.127 [DEBUG] [Thread-52482] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:14:27.187 [DEBUG] [Thread-52482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:14:27.188 [DEBUG] [Thread-52482] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:14:27.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:14:27.188 [DEBUG] [Thread-52482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:14:27.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:14:27.247 [DEBUG] [Thread-52482] [transport.py] [_log()] userauth is OK
2025-11-17T10:14:27.247 [DEBUG] [Thread-52482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:14:27.247 [DEBUG] [Thread-52482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:14:27.247 [DEBUG] [Thread-52482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:14:27.247 [DEBUG] [Thread-52482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:14:27.264 [INFO] [Thread-52482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:14:27.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:14:27.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:14:28.102 [DEBUG] [Thread-52482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:14:28.102 [DEBUG] [Thread-52482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:14:28.150 [DEBUG] [Thread-52482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:14:28.150 [DEBUG] [Thread-52482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:14:28.158 [DEBUG] [Thread-52482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:14:28.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:14:28.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:14:28.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:14:28.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:14:28.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:14:28.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:14:28.192 [DEBUG] [Thread-52482] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:14:35.950 [DEBUG] [Thread-52484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:14:50.989 [DEBUG] [Thread-52485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:14:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:14:58.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:14:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:14:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 14, 33), 21.66, 23.16, 0.0, 23.68, 20.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:14:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:14:33
2025-11-17T10:14:59.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:14:59.151 [DEBUG] [Thread-52486] [transport.py] [_log()] starting thread (client mode): 0xd07198a0
2025-11-17T10:14:59.151 [DEBUG] [Thread-52486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:14:59.170 [DEBUG] [Thread-52486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:14:59.170 [INFO] [Thread-52486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:14:59.173 [DEBUG] [Thread-52486] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:14:59.173 [DEBUG] [Thread-52486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:14:59.173 [DEBUG] [Thread-52486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:14:59.173 [DEBUG] [Thread-52486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:14:59.173 [DEBUG] [Thread-52486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] client lang: <none>
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] server lang: <none>
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] kex follows: False
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] Compression: none
2025-11-17T10:14:59.174 [DEBUG] [Thread-52486] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:14:59.190 [DEBUG] [Thread-52486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:14:59.191 [DEBUG] [Thread-52486] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:14:59.191 [DEBUG] [Thread-52486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:14:59.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:14:59.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:14:59.193 [DEBUG] [Thread-52486] [transport.py] [_log()] userauth is OK
2025-11-17T10:14:59.194 [DEBUG] [Thread-52486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:14:59.194 [DEBUG] [Thread-52486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:14:59.194 [DEBUG] [Thread-52486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:14:59.194 [DEBUG] [Thread-52486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:14:59.218 [INFO] [Thread-52486] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:14:59.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:14:59.849 [DEBUG] [Thread-52486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:14:59.849 [DEBUG] [Thread-52486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:14:59.849 [DEBUG] [Thread-52486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:14:59.889 [DEBUG] [Thread-52486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:14:59.889 [DEBUG] [Thread-52486] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:14:59.892 [DEBUG] [Thread-52486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:14:59.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:14:59.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:14:59.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:14:59.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:14:59.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:14:59.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:14:59.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:14:59.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:14:59.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:14:59.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.343452 -999.00  +17.70  19.23     32   +0.90 1 1 1 1 1   888    0 18.64 87.30 ----- 19.2 19.2 52.6 22.5 24.8 -25.3 24.1 -25.2 23.0 -25.4 23.7 -24.4
2025-11-17T10:14:59.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:14:59.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:14:59.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.343452
2025-11-17T10:14:59.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:14:59.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:14:59.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:14:59.916 [DEBUG] [Thread-52486] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:14:59.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:14:59.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:14:59.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:14:33', tmtdew=21.66, humidity=23.16, cloud=0.0, wind=23.68, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:14:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:15:00.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:15:00.013 [DEBUG] [Thread-52489] [transport.py] [_log()] starting thread (client mode): 0xd0718070
2025-11-17T10:15:00.013 [DEBUG] [Thread-52489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:15:00.027 [DEBUG] [Thread-52489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:15:00.028 [INFO] [Thread-52489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:15:00.035 [DEBUG] [Thread-52489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:15:00.035 [DEBUG] [Thread-52489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:15:00.035 [DEBUG] [Thread-52489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] client lang: <none>
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] server lang: <none>
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] kex follows: False
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] Compression: none
2025-11-17T10:15:00.036 [DEBUG] [Thread-52489] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:15:00.093 [DEBUG] [Thread-52489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:15:00.093 [DEBUG] [Thread-52489] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:15:00.094 [DEBUG] [Thread-52489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:15:00.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:15:00.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:15:00.149 [DEBUG] [Thread-52489] [transport.py] [_log()] userauth is OK
2025-11-17T10:15:00.149 [DEBUG] [Thread-52489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:15:00.149 [DEBUG] [Thread-52489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:15:00.149 [DEBUG] [Thread-52489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:15:00.149 [DEBUG] [Thread-52489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:15:00.168 [INFO] [Thread-52489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:15:00.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:15:00.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:15:01.018 [DEBUG] [Thread-52489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:15:01.019 [DEBUG] [Thread-52489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:15:01.067 [DEBUG] [Thread-52489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:15:01.067 [DEBUG] [Thread-52489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:15:01.076 [DEBUG] [Thread-52489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:15:01.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:15:01.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:15:01.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:15:01.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:15:01.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:15:01.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:15:01.110 [DEBUG] [Thread-52489] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:15:02.930 [DEBUG] [Thread-52491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:15:06.018 [DEBUG] [Thread-52492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:15:21.048 [DEBUG] [Thread-52493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:15:24.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:15:24.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:15:31.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:15:31.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:15:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:15:31.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 15, 5), 20.4, 25.05, 0.0, 13.59, 18.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:15:31.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:15:05
2025-11-17T10:15:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:15:32.060 [DEBUG] [Thread-52494] [transport.py] [_log()] starting thread (client mode): 0xd071ad40
2025-11-17T10:15:32.060 [DEBUG] [Thread-52494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:15:32.080 [DEBUG] [Thread-52494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:15:32.081 [INFO] [Thread-52494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] client lang: <none>
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] server lang: <none>
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] kex follows: False
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] Compression: none
2025-11-17T10:15:32.084 [DEBUG] [Thread-52494] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:15:32.101 [DEBUG] [Thread-52494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:15:32.101 [DEBUG] [Thread-52494] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:15:32.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:15:32.102 [DEBUG] [Thread-52494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:15:32.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:15:32.104 [DEBUG] [Thread-52494] [transport.py] [_log()] userauth is OK
2025-11-17T10:15:32.105 [DEBUG] [Thread-52494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:15:32.105 [DEBUG] [Thread-52494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:15:32.105 [DEBUG] [Thread-52494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:15:32.105 [DEBUG] [Thread-52494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:15:32.128 [INFO] [Thread-52494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:15:32.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:15:32.748 [DEBUG] [Thread-52494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:15:32.748 [DEBUG] [Thread-52494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:15:32.748 [DEBUG] [Thread-52494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:15:32.789 [DEBUG] [Thread-52494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:15:32.789 [DEBUG] [Thread-52494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:15:32.792 [DEBUG] [Thread-52494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:15:32.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:15:32.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:15:32.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:15:32.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:15:32.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:15:32.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:15:32.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:15:32.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:15:32.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:15:32.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.343799 -999.00  +17.90  18.70     32   +1.30 1 1 1 1 1   888    0 19.04 87.77 ----- 18.7 18.7 61.6 29.6 24.7 -25.9 24.1 -23.9 23.1 -23.3 23.8 -23.7
2025-11-17T10:15:32.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:15:32.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:15:32.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.343799
2025-11-17T10:15:32.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:15:32.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:15:32.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:15:32.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:15:32.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:15:32.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:15:05', tmtdew=20.4, humidity=25.05, cloud=0.0, wind=13.59, temperature=18.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:15:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:15:32.817 [DEBUG] [Thread-52494] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:15:32.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:15:32.913 [DEBUG] [Thread-52497] [transport.py] [_log()] starting thread (client mode): 0xd0758ac0
2025-11-17T10:15:32.913 [DEBUG] [Thread-52497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:15:32.928 [DEBUG] [Thread-52497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:15:32.928 [INFO] [Thread-52497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:15:32.935 [DEBUG] [Thread-52497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:15:32.935 [DEBUG] [Thread-52497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] client lang: <none>
2025-11-17T10:15:32.936 [DEBUG] [Thread-52497] [transport.py] [_log()] server lang: <none>
2025-11-17T10:15:32.937 [DEBUG] [Thread-52497] [transport.py] [_log()] kex follows: False
2025-11-17T10:15:32.937 [DEBUG] [Thread-52497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:15:32.937 [DEBUG] [Thread-52497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:15:32.937 [DEBUG] [Thread-52497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:15:32.937 [DEBUG] [Thread-52497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:15:32.937 [DEBUG] [Thread-52497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:15:32.937 [DEBUG] [Thread-52497] [transport.py] [_log()] Compression: none
2025-11-17T10:15:32.937 [DEBUG] [Thread-52497] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:15:32.993 [DEBUG] [Thread-52497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:15:32.993 [DEBUG] [Thread-52497] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:15:32.994 [DEBUG] [Thread-52497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:15:32.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:15:32.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:15:33.049 [DEBUG] [Thread-52497] [transport.py] [_log()] userauth is OK
2025-11-17T10:15:33.050 [DEBUG] [Thread-52497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:15:33.050 [DEBUG] [Thread-52497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:15:33.050 [DEBUG] [Thread-52497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:15:33.050 [DEBUG] [Thread-52497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:15:33.068 [INFO] [Thread-52497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:15:33.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:15:33.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:15:33.914 [DEBUG] [Thread-52497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:15:33.914 [DEBUG] [Thread-52497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:15:33.962 [DEBUG] [Thread-52497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:15:33.962 [DEBUG] [Thread-52497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:15:33.971 [DEBUG] [Thread-52497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:15:33.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:15:33.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:15:33.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:15:33.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:15:33.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:15:33.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:15:34.005 [DEBUG] [Thread-52497] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:15:36.080 [DEBUG] [Thread-52499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:15:51.122 [DEBUG] [Thread-52500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:16:02.963 [DEBUG] [Thread-52501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:16:04.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:16:04.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:16:04.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:16:04.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 15, 38), 20.48, 24.98, 0.0, 16.02, 18.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:16:04.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:15:38
2025-11-17T10:16:04.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:16:04.961 [DEBUG] [Thread-52502] [transport.py] [_log()] starting thread (client mode): 0xd0759840
2025-11-17T10:16:04.962 [DEBUG] [Thread-52502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:16:04.977 [DEBUG] [Thread-52502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:16:04.978 [INFO] [Thread-52502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:16:04.979 [DEBUG] [Thread-52502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] client lang: <none>
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] server lang: <none>
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] kex follows: False
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] Compression: none
2025-11-17T10:16:04.980 [DEBUG] [Thread-52502] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:16:04.993 [DEBUG] [Thread-52502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:16:04.993 [DEBUG] [Thread-52502] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:16:04.994 [DEBUG] [Thread-52502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:16:04.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:16:04.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:16:04.995 [DEBUG] [Thread-52502] [transport.py] [_log()] userauth is OK
2025-11-17T10:16:04.996 [DEBUG] [Thread-52502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:16:04.996 [DEBUG] [Thread-52502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:16:04.996 [DEBUG] [Thread-52502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:16:04.996 [DEBUG] [Thread-52502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:16:05.013 [INFO] [Thread-52502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:16:05.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:16:05.688 [DEBUG] [Thread-52502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:16:05.688 [DEBUG] [Thread-52502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:16:05.689 [DEBUG] [Thread-52502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:16:05.729 [DEBUG] [Thread-52502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:16:05.729 [DEBUG] [Thread-52502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:16:05.732 [DEBUG] [Thread-52502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:16:05.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:16:05.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:16:05.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:16:05.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:16:05.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:16:05.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:16:05.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:16:05.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:16:05.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:16:05.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.344146 -999.00  +18.20  17.22     31   +1.20 1 1 1 1 1   888    0 18.39 81.29 ----- 17.2 17.2 79.8 22.8 24.9 -24.7 24.2 -24.4 23.2 -23.4 23.9 -24.1
2025-11-17T10:16:05.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:16:05.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:16:05.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.344146
2025-11-17T10:16:05.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:16:05.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:16:05.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:16:05.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:16:05.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:16:05.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:15:38', tmtdew=20.48, humidity=24.98, cloud=0.0, wind=16.02, temperature=18.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:15:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:16:05.756 [DEBUG] [Thread-52502] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:16:05.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:16:05.847 [DEBUG] [Thread-52505] [transport.py] [_log()] starting thread (client mode): 0xd07587c0
2025-11-17T10:16:05.847 [DEBUG] [Thread-52505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:16:05.862 [DEBUG] [Thread-52505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:16:05.862 [INFO] [Thread-52505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:16:05.869 [DEBUG] [Thread-52505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] client lang: <none>
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] server lang: <none>
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] kex follows: False
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:16:05.870 [DEBUG] [Thread-52505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:16:05.871 [DEBUG] [Thread-52505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:16:05.871 [DEBUG] [Thread-52505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:16:05.871 [DEBUG] [Thread-52505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:16:05.871 [DEBUG] [Thread-52505] [transport.py] [_log()] Compression: none
2025-11-17T10:16:05.871 [DEBUG] [Thread-52505] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:16:05.934 [DEBUG] [Thread-52505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:16:05.934 [DEBUG] [Thread-52505] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:16:05.935 [DEBUG] [Thread-52505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:16:05.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:16:05.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:16:05.993 [DEBUG] [Thread-52505] [transport.py] [_log()] userauth is OK
2025-11-17T10:16:05.993 [DEBUG] [Thread-52505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:16:05.993 [DEBUG] [Thread-52505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:16:05.993 [DEBUG] [Thread-52505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:16:05.993 [DEBUG] [Thread-52505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:16:06.012 [INFO] [Thread-52505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:16:06.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:16:06.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:16:06.153 [DEBUG] [Thread-52507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:16:06.897 [DEBUG] [Thread-52505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:16:06.897 [DEBUG] [Thread-52505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:16:06.945 [DEBUG] [Thread-52505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:16:06.945 [DEBUG] [Thread-52505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:16:06.954 [DEBUG] [Thread-52505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:16:06.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:16:06.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:16:06.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:16:06.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:16:06.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:16:06.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:16:06.999 [DEBUG] [Thread-52505] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:16:21.193 [DEBUG] [Thread-52508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:16:24.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:16:24.262 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:16:36.222 [DEBUG] [Thread-52509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:16:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:16:37.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:16:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:16:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 16, 10), 20.38, 25.15, 0.0, 18.33, 18.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:16:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:16:10
2025-11-17T10:16:37.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:16:37.966 [DEBUG] [Thread-52510] [transport.py] [_log()] starting thread (client mode): 0xd0719000
2025-11-17T10:16:37.966 [DEBUG] [Thread-52510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:16:37.986 [DEBUG] [Thread-52510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:16:37.986 [INFO] [Thread-52510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] client lang: <none>
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] server lang: <none>
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] kex follows: False
2025-11-17T10:16:37.988 [DEBUG] [Thread-52510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:16:37.989 [DEBUG] [Thread-52510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:16:37.989 [DEBUG] [Thread-52510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:16:37.989 [DEBUG] [Thread-52510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:16:37.989 [DEBUG] [Thread-52510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:16:37.989 [DEBUG] [Thread-52510] [transport.py] [_log()] Compression: none
2025-11-17T10:16:37.989 [DEBUG] [Thread-52510] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:16:38.005 [DEBUG] [Thread-52510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:16:38.005 [DEBUG] [Thread-52510] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:16:38.006 [DEBUG] [Thread-52510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:16:38.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:16:38.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:16:38.007 [DEBUG] [Thread-52510] [transport.py] [_log()] userauth is OK
2025-11-17T10:16:38.007 [DEBUG] [Thread-52510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:16:38.008 [DEBUG] [Thread-52510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:16:38.008 [DEBUG] [Thread-52510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:16:38.008 [DEBUG] [Thread-52510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:16:38.023 [INFO] [Thread-52510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:16:38.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:16:38.658 [DEBUG] [Thread-52510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:16:38.659 [DEBUG] [Thread-52510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:16:38.659 [DEBUG] [Thread-52510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:16:38.699 [DEBUG] [Thread-52510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:16:38.699 [DEBUG] [Thread-52510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:16:38.702 [DEBUG] [Thread-52510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:16:38.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:16:38.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:16:38.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:16:38.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:16:38.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:16:38.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:16:38.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:16:38.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:16:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:16:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.344493 -999.00  +17.80  20.17     32   +0.90 1 1 1 1 1   888    0 18.34 77.10 ----- 20.2 20.2 72.6 23.6 24.8 -33.4 24.1 -25.3 22.9 -25.5 23.7 -26.4
2025-11-17T10:16:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:16:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:16:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.344493
2025-11-17T10:16:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:16:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:16:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:16:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:16:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:16:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:16:10', tmtdew=20.38, humidity=25.15, cloud=0.0, wind=18.33, temperature=18.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:16:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:16:38.719 [DEBUG] [Thread-52510] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:16:38.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:16:38.821 [DEBUG] [Thread-52513] [transport.py] [_log()] starting thread (client mode): 0xd075bd00
2025-11-17T10:16:38.821 [DEBUG] [Thread-52513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:16:38.836 [DEBUG] [Thread-52513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:16:38.837 [INFO] [Thread-52513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:16:38.846 [DEBUG] [Thread-52513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:16:38.847 [DEBUG] [Thread-52513] [transport.py] [_log()] client lang: <none>
2025-11-17T10:16:38.848 [DEBUG] [Thread-52513] [transport.py] [_log()] server lang: <none>
2025-11-17T10:16:38.848 [DEBUG] [Thread-52513] [transport.py] [_log()] kex follows: False
2025-11-17T10:16:38.848 [DEBUG] [Thread-52513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:16:38.848 [DEBUG] [Thread-52513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:16:38.848 [DEBUG] [Thread-52513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:16:38.848 [DEBUG] [Thread-52513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:16:38.848 [DEBUG] [Thread-52513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:16:38.848 [DEBUG] [Thread-52513] [transport.py] [_log()] Compression: none
2025-11-17T10:16:38.849 [DEBUG] [Thread-52513] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:16:38.904 [DEBUG] [Thread-52513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:16:38.904 [DEBUG] [Thread-52513] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:16:38.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:16:38.905 [DEBUG] [Thread-52513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:16:38.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:16:38.960 [DEBUG] [Thread-52513] [transport.py] [_log()] userauth is OK
2025-11-17T10:16:38.961 [DEBUG] [Thread-52513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:16:38.961 [DEBUG] [Thread-52513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:16:38.961 [DEBUG] [Thread-52513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:16:38.961 [DEBUG] [Thread-52513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:16:38.984 [INFO] [Thread-52513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:16:38.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:16:38.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:16:39.833 [DEBUG] [Thread-52513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:16:39.833 [DEBUG] [Thread-52513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:16:39.884 [DEBUG] [Thread-52513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:16:39.884 [DEBUG] [Thread-52513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:16:39.895 [DEBUG] [Thread-52513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:16:39.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:16: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')
2025-11-17T10:16:39.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:16:39.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:16:39.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:16:39.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:16:39.928 [DEBUG] [Thread-52513] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:16:51.251 [DEBUG] [Thread-52515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:17:03.013 [DEBUG] [Thread-52516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:17:06.301 [DEBUG] [Thread-52517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:17:09.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:17:09.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:17:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:17:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 16, 41), 20.18, 25.68, 0.0, 19.23, 18.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:17:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:16:41
2025-11-17T10:17:10.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:17:10.886 [DEBUG] [Thread-52518] [transport.py] [_log()] starting thread (client mode): 0xd075a770
2025-11-17T10:17:10.886 [DEBUG] [Thread-52518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:17:10.906 [DEBUG] [Thread-52518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:17:10.906 [INFO] [Thread-52518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:17:10.907 [DEBUG] [Thread-52518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] client lang: <none>
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] server lang: <none>
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] kex follows: False
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] Compression: none
2025-11-17T10:17:10.908 [DEBUG] [Thread-52518] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:17:10.922 [DEBUG] [Thread-52518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:17:10.923 [DEBUG] [Thread-52518] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:17:10.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:17:10.923 [DEBUG] [Thread-52518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:17:10.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:17:10.925 [DEBUG] [Thread-52518] [transport.py] [_log()] userauth is OK
2025-11-17T10:17:10.925 [DEBUG] [Thread-52518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:17:10.925 [DEBUG] [Thread-52518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:17:10.925 [DEBUG] [Thread-52518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:17:10.925 [DEBUG] [Thread-52518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:17:10.949 [INFO] [Thread-52518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:17:10.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:17:11.598 [DEBUG] [Thread-52518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:17:11.599 [DEBUG] [Thread-52518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:17:11.599 [DEBUG] [Thread-52518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:17:11.639 [DEBUG] [Thread-52518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:17:11.639 [DEBUG] [Thread-52518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:17:11.641 [DEBUG] [Thread-52518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:17:11.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:17:11.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:17:11.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:17:11.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:17:11.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:17:11.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:17:11.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:17:11.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:17:11.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:17:11.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.345188 -999.00  +17.60  13.01     33   +1.10 1 1 1 1 1   888    0 17.92 64.90 ----- 13.0 13.0 102.4 25.3 24.5 -27.9 24.1 -24.3 23.0 -24.3 23.6 -24.3
2025-11-17T10:17:11.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:17:11.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:17:11.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.345188
2025-11-17T10:17:11.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:17:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:17:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:17:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:17:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:17:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:16:41', tmtdew=20.18, humidity=25.68, cloud=0.0, wind=19.23, temperature=18.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:17:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:17:11.664 [DEBUG] [Thread-52518] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:17:11.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:17:11.762 [DEBUG] [Thread-52521] [transport.py] [_log()] starting thread (client mode): 0xd07840d0
2025-11-17T10:17:11.762 [DEBUG] [Thread-52521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:17:11.780 [DEBUG] [Thread-52521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:17:11.780 [INFO] [Thread-52521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:17:11.788 [DEBUG] [Thread-52521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:17:11.788 [DEBUG] [Thread-52521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:17:11.788 [DEBUG] [Thread-52521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:17:11.788 [DEBUG] [Thread-52521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:17:11.788 [DEBUG] [Thread-52521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:17:11.788 [DEBUG] [Thread-52521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] client lang: <none>
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] server lang: <none>
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] kex follows: False
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:17:11.789 [DEBUG] [Thread-52521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:17:11.790 [DEBUG] [Thread-52521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:17:11.790 [DEBUG] [Thread-52521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:17:11.790 [DEBUG] [Thread-52521] [transport.py] [_log()] Compression: none
2025-11-17T10:17:11.790 [DEBUG] [Thread-52521] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:17:11.844 [DEBUG] [Thread-52521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:17:11.845 [DEBUG] [Thread-52521] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:17:11.846 [DEBUG] [Thread-52521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:17:11.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:17:11.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:17:11.901 [DEBUG] [Thread-52521] [transport.py] [_log()] userauth is OK
2025-11-17T10:17:11.901 [DEBUG] [Thread-52521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:17:11.901 [DEBUG] [Thread-52521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:17:11.901 [DEBUG] [Thread-52521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:17:11.901 [DEBUG] [Thread-52521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:17:11.926 [INFO] [Thread-52521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:17:11.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:17:11.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:17:12.804 [DEBUG] [Thread-52521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:17:12.805 [DEBUG] [Thread-52521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:17:12.852 [DEBUG] [Thread-52521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:17:12.852 [DEBUG] [Thread-52521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:17:12.861 [DEBUG] [Thread-52521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:17:12.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:17: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')
2025-11-17T10:17:12.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:17:12.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:17:12.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:17:12.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:17:12.895 [DEBUG] [Thread-52521] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:17:21.330 [DEBUG] [Thread-52523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:17:24.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:17:24.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:17:36.375 [DEBUG] [Thread-52524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:17:42.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:17:42.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:17: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
2025-11-17T10:17:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 17, 14), 20.3, 25.48, 0.0, 17.26, 18.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:17:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:17:14
2025-11-17T10:17:43.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:17:43.873 [DEBUG] [Thread-52525] [transport.py] [_log()] starting thread (client mode): 0xd07591e0
2025-11-17T10:17:43.873 [DEBUG] [Thread-52525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:17:43.891 [DEBUG] [Thread-52525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:17:43.891 [INFO] [Thread-52525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] client lang: <none>
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] server lang: <none>
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] kex follows: False
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:17:43.894 [DEBUG] [Thread-52525] [transport.py] [_log()] Compression: none
2025-11-17T10:17:43.895 [DEBUG] [Thread-52525] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:17:43.910 [DEBUG] [Thread-52525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:17:43.910 [DEBUG] [Thread-52525] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:17:43.911 [DEBUG] [Thread-52525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:17:43.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:17:43.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:17:43.913 [DEBUG] [Thread-52525] [transport.py] [_log()] userauth is OK
2025-11-17T10:17:43.913 [DEBUG] [Thread-52525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:17:43.913 [DEBUG] [Thread-52525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:17:43.913 [DEBUG] [Thread-52525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:17:43.913 [DEBUG] [Thread-52525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:17:43.926 [INFO] [Thread-52525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:17:43.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:17:44.545 [DEBUG] [Thread-52525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:17:44.545 [DEBUG] [Thread-52525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:17:44.545 [DEBUG] [Thread-52525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:17:44.586 [DEBUG] [Thread-52525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:17:44.587 [DEBUG] [Thread-52525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:17:44.590 [DEBUG] [Thread-52525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:17:44.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:17:44.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:17:44.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:17:44.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:17:44.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:17:44.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:17:44.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:17:44.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:17:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:17:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.345535 -999.00  +17.60  11.28     32   +1.00 1 1 1 1 1   888    0 18.15 62.15 ----- 11.3 11.3 121.8 20.8 24.6 -25.3 24.1 -25.0 23.1 -23.4 23.7 -25.1
2025-11-17T10:17:44.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:17:44.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:17:44.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.345535
2025-11-17T10:17:44.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:17:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:17:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:17:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:17:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:17:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:17:14', tmtdew=20.3, humidity=25.48, cloud=0.0, wind=17.26, temperature=18.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:17:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:17:44.610 [DEBUG] [Thread-52525] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:17:44.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:17:44.707 [DEBUG] [Thread-52528] [transport.py] [_log()] starting thread (client mode): 0xd31609d0
2025-11-17T10:17:44.707 [DEBUG] [Thread-52528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:17:44.727 [DEBUG] [Thread-52528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:17:44.727 [INFO] [Thread-52528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:17:44.734 [DEBUG] [Thread-52528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:17:44.734 [DEBUG] [Thread-52528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] client lang: <none>
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] server lang: <none>
2025-11-17T10:17:44.735 [DEBUG] [Thread-52528] [transport.py] [_log()] kex follows: False
2025-11-17T10:17:44.736 [DEBUG] [Thread-52528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:17:44.736 [DEBUG] [Thread-52528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:17:44.736 [DEBUG] [Thread-52528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:17:44.736 [DEBUG] [Thread-52528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:17:44.736 [DEBUG] [Thread-52528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:17:44.736 [DEBUG] [Thread-52528] [transport.py] [_log()] Compression: none
2025-11-17T10:17:44.736 [DEBUG] [Thread-52528] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:17:44.796 [DEBUG] [Thread-52528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:17:44.796 [DEBUG] [Thread-52528] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:17:44.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:17:44.797 [DEBUG] [Thread-52528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:17:44.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:17:44.853 [DEBUG] [Thread-52528] [transport.py] [_log()] userauth is OK
2025-11-17T10:17:44.853 [DEBUG] [Thread-52528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:17:44.853 [DEBUG] [Thread-52528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:17:44.853 [DEBUG] [Thread-52528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:17:44.854 [DEBUG] [Thread-52528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:17:44.873 [INFO] [Thread-52528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:17:44.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:17:44.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:17:45.737 [DEBUG] [Thread-52528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:17:45.737 [DEBUG] [Thread-52528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:17:45.784 [DEBUG] [Thread-52528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:17:45.784 [DEBUG] [Thread-52528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:17:45.793 [DEBUG] [Thread-52528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:17:45.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:17:45.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')
2025-11-17T10:17:45.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:17:45.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:17:45.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:17:45.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:17:45.833 [DEBUG] [Thread-52528] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:17:51.404 [DEBUG] [Thread-52530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:18:03.066 [DEBUG] [Thread-52531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:18:06.449 [DEBUG] [Thread-52532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:18:15.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:18:15.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:18:15.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
2025-11-17T10:18:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 17, 45), 20.36, 25.38, 0.0, 9.18, 18.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:18:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:17:45
2025-11-17T10:18:16.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:18:16.800 [DEBUG] [Thread-52533] [transport.py] [_log()] starting thread (client mode): 0xd071a950
2025-11-17T10:18:16.800 [DEBUG] [Thread-52533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:18:16.821 [DEBUG] [Thread-52533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:18:16.821 [INFO] [Thread-52533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:18:16.824 [DEBUG] [Thread-52533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:18:16.824 [DEBUG] [Thread-52533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:18:16.824 [DEBUG] [Thread-52533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:18:16.824 [DEBUG] [Thread-52533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:18:16.824 [DEBUG] [Thread-52533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] client lang: <none>
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] server lang: <none>
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] kex follows: False
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] Compression: none
2025-11-17T10:18:16.825 [DEBUG] [Thread-52533] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:18:16.841 [DEBUG] [Thread-52533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:18:16.841 [DEBUG] [Thread-52533] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:18:16.841 [DEBUG] [Thread-52533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:18:16.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:18:16.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:18:16.842 [DEBUG] [Thread-52533] [transport.py] [_log()] userauth is OK
2025-11-17T10:18:16.842 [DEBUG] [Thread-52533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:18:16.842 [DEBUG] [Thread-52533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:18:16.842 [DEBUG] [Thread-52533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:18:16.842 [DEBUG] [Thread-52533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:18:16.852 [INFO] [Thread-52533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:18:16.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:18:17.473 [DEBUG] [Thread-52533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:18:17.473 [DEBUG] [Thread-52533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:18:17.473 [DEBUG] [Thread-52533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:18:17.514 [DEBUG] [Thread-52533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:18:17.514 [DEBUG] [Thread-52533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:18:17.516 [DEBUG] [Thread-52533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:18:17.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:18:17.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:18:17.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:18:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:18:17.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:18:17.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:18:17.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:18:17.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.345535 -999.00  +17.60  11.28     32   +1.00 1 1 1 1 1   888    0 18.15 62.15 ----- 11.3 11.3 121.8 20.8 24.6 -25.3 24.1 -25.0 23.1 -23.4 23.7 -25.1
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.345535
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:18:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:17:45', tmtdew=20.36, humidity=25.38, cloud=0.0, wind=9.18, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:17:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:18:17.534 [DEBUG] [Thread-52533] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:18:17.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:18:17.621 [DEBUG] [Thread-52536] [transport.py] [_log()] starting thread (client mode): 0xd0719810
2025-11-17T10:18:17.621 [DEBUG] [Thread-52536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:18:17.636 [DEBUG] [Thread-52536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:18:17.636 [INFO] [Thread-52536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] client lang: <none>
2025-11-17T10:18:17.643 [DEBUG] [Thread-52536] [transport.py] [_log()] server lang: <none>
2025-11-17T10:18:17.644 [DEBUG] [Thread-52536] [transport.py] [_log()] kex follows: False
2025-11-17T10:18:17.644 [DEBUG] [Thread-52536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:18:17.644 [DEBUG] [Thread-52536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:18:17.644 [DEBUG] [Thread-52536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:18:17.644 [DEBUG] [Thread-52536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:18:17.644 [DEBUG] [Thread-52536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:18:17.644 [DEBUG] [Thread-52536] [transport.py] [_log()] Compression: none
2025-11-17T10:18:17.644 [DEBUG] [Thread-52536] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:18:17.699 [DEBUG] [Thread-52536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:18:17.699 [DEBUG] [Thread-52536] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:18:17.700 [DEBUG] [Thread-52536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:18:17.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:18:17.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:18:17.759 [DEBUG] [Thread-52536] [transport.py] [_log()] userauth is OK
2025-11-17T10:18:17.759 [DEBUG] [Thread-52536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:18:17.759 [DEBUG] [Thread-52536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:18:17.759 [DEBUG] [Thread-52536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:18:17.759 [DEBUG] [Thread-52536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:18:17.773 [INFO] [Thread-52536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:18:17.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:18:17.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:18:18.701 [DEBUG] [Thread-52536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:18:18.701 [DEBUG] [Thread-52536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:18:18.750 [DEBUG] [Thread-52536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:18:18.750 [DEBUG] [Thread-52536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:18:18.758 [DEBUG] [Thread-52536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:18:18.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:18:18.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:18:18.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:18:18.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:18:18.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:18:18.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:18:18.789 [DEBUG] [Thread-52536] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:18:21.476 [DEBUG] [Thread-52538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:18:24.547 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:18:24.548 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:18:36.508 [DEBUG] [Thread-52539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:18:48.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:18:48.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:18:48.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:18:49.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 18, 17), 20.39, 25.33, 0.0, 9.81, 18.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:18:49.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:18:17
2025-11-17T10:18:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:18:49.722 [DEBUG] [Thread-52540] [transport.py] [_log()] starting thread (client mode): 0xd0759ab0
2025-11-17T10:18:49.722 [DEBUG] [Thread-52540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:18:49.742 [DEBUG] [Thread-52540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:18:49.742 [INFO] [Thread-52540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:18:49.745 [DEBUG] [Thread-52540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:18:49.745 [DEBUG] [Thread-52540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] client lang: <none>
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] server lang: <none>
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] kex follows: False
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:18:49.746 [DEBUG] [Thread-52540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:18:49.747 [DEBUG] [Thread-52540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:18:49.747 [DEBUG] [Thread-52540] [transport.py] [_log()] Compression: none
2025-11-17T10:18:49.747 [DEBUG] [Thread-52540] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:18:49.759 [DEBUG] [Thread-52540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:18:49.760 [DEBUG] [Thread-52540] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:18:49.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:18:49.761 [DEBUG] [Thread-52540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:18:49.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:18:49.763 [DEBUG] [Thread-52540] [transport.py] [_log()] userauth is OK
2025-11-17T10:18:49.763 [DEBUG] [Thread-52540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:18:49.764 [DEBUG] [Thread-52540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:18:49.764 [DEBUG] [Thread-52540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:18:49.764 [DEBUG] [Thread-52540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:18:49.788 [INFO] [Thread-52540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:18:49.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:18:50.408 [DEBUG] [Thread-52540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:18:50.408 [DEBUG] [Thread-52540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:18:50.409 [DEBUG] [Thread-52540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:18:50.449 [DEBUG] [Thread-52540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:18:50.449 [DEBUG] [Thread-52540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:18:50.451 [DEBUG] [Thread-52540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:18:50.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:18:50.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:18:50.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:18:50.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:18:50.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:18:50.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:18:50.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.345882 -999.00  +17.60  14.41     32   +1.00 1 1 1 1 1   888    0 18.04 62.68 ----- 14.4 14.4 54.6 17.4 24.8 -24.4 24.2 -25.4 23.1 -25.3 23.8 -24.3
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.345882
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:18:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:18:17', tmtdew=20.39, humidity=25.33, cloud=0.0, wind=9.81, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:18:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:18:50.468 [DEBUG] [Thread-52540] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:18:50.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:18:50.553 [DEBUG] [Thread-52543] [transport.py] [_log()] starting thread (client mode): 0xd0785180
2025-11-17T10:18:50.553 [DEBUG] [Thread-52543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:18:50.568 [DEBUG] [Thread-52543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:18:50.568 [INFO] [Thread-52543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] client lang: <none>
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] server lang: <none>
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] kex follows: False
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] Compression: none
2025-11-17T10:18:50.576 [DEBUG] [Thread-52543] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:18:50.635 [DEBUG] [Thread-52543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:18:50.635 [DEBUG] [Thread-52543] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:18:50.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:18:50.636 [DEBUG] [Thread-52543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:18:50.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:18:50.692 [DEBUG] [Thread-52543] [transport.py] [_log()] userauth is OK
2025-11-17T10:18:50.692 [DEBUG] [Thread-52543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:18:50.692 [DEBUG] [Thread-52543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:18:50.692 [DEBUG] [Thread-52543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:18:50.692 [DEBUG] [Thread-52543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:18:50.710 [INFO] [Thread-52543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:18:50.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:18:50.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:18:51.539 [DEBUG] [Thread-52543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:18:51.539 [DEBUG] [Thread-52543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:18:51.542 [DEBUG] [Thread-52545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:18:51.587 [DEBUG] [Thread-52543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:18:51.587 [DEBUG] [Thread-52543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:18:51.595 [DEBUG] [Thread-52543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:18:51.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:18:51.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:18:51.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:18:51.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:18:51.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:18:51.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:18:51.626 [DEBUG] [Thread-52543] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:19:03.117 [DEBUG] [Thread-52546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:19:06.572 [DEBUG] [Thread-52547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:19:21.607 [DEBUG] [Thread-52548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:19:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:19:21.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:19:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:19:22.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 18, 50), 20.03, 26.0, 0.0, 13.38, 18.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:19:22.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:18:50
2025-11-17T10:19:22.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:19:22.622 [DEBUG] [Thread-52549] [transport.py] [_log()] starting thread (client mode): 0xd317f760
2025-11-17T10:19:22.622 [DEBUG] [Thread-52549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:19:22.642 [DEBUG] [Thread-52549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:19:22.642 [INFO] [Thread-52549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:19:22.645 [DEBUG] [Thread-52549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:19:22.645 [DEBUG] [Thread-52549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:19:22.645 [DEBUG] [Thread-52549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:19:22.645 [DEBUG] [Thread-52549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:19:22.645 [DEBUG] [Thread-52549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:19:22.645 [DEBUG] [Thread-52549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] client lang: <none>
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] server lang: <none>
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] kex follows: False
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] Compression: none
2025-11-17T10:19:22.646 [DEBUG] [Thread-52549] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:19:22.661 [DEBUG] [Thread-52549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:19:22.661 [DEBUG] [Thread-52549] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:19:22.662 [DEBUG] [Thread-52549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:19:22.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:19:22.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:19:22.662 [DEBUG] [Thread-52549] [transport.py] [_log()] userauth is OK
2025-11-17T10:19:22.662 [DEBUG] [Thread-52549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:19:22.662 [DEBUG] [Thread-52549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:19:22.662 [DEBUG] [Thread-52549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:19:22.662 [DEBUG] [Thread-52549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:19:22.675 [INFO] [Thread-52549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:19:22.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:19:23.293 [DEBUG] [Thread-52549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:19:23.293 [DEBUG] [Thread-52549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:19:23.293 [DEBUG] [Thread-52549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:19:23.334 [DEBUG] [Thread-52549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:19:23.334 [DEBUG] [Thread-52549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:19:23.335 [DEBUG] [Thread-52549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:19:23.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:19:23.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:19:23.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:19:23.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:19:23.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:19:23.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:19:23.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:19:23.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:19:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:19:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.346229 -999.00  +17.50  11.26     32   +0.90 1 1 1 1 1   888    0 17.96 60.17 ----- 11.3 11.3 50.8 13.3 24.9 -25.1 24.2 -24.8 23.1 -23.9 23.9 -24.4
2025-11-17T10:19:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:19:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:19:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.346229
2025-11-17T10:19:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:19:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:19:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:19:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:19:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:19:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:18:50', tmtdew=20.03, humidity=26.0, cloud=0.0, wind=13.38, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:18:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:19:23.352 [DEBUG] [Thread-52549] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:19:23.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:19:23.442 [DEBUG] [Thread-52552] [transport.py] [_log()] starting thread (client mode): 0xd317d9c0
2025-11-17T10:19:23.442 [DEBUG] [Thread-52552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:19:23.458 [DEBUG] [Thread-52552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:19:23.458 [INFO] [Thread-52552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:19:23.465 [DEBUG] [Thread-52552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:19:23.465 [DEBUG] [Thread-52552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:19:23.465 [DEBUG] [Thread-52552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] client lang: <none>
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] server lang: <none>
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] kex follows: False
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] Compression: none
2025-11-17T10:19:23.466 [DEBUG] [Thread-52552] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:19:23.523 [DEBUG] [Thread-52552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:19:23.523 [DEBUG] [Thread-52552] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:19:23.524 [DEBUG] [Thread-52552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:19:23.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:19:23.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:19:23.584 [DEBUG] [Thread-52552] [transport.py] [_log()] userauth is OK
2025-11-17T10:19:23.584 [DEBUG] [Thread-52552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:19:23.584 [DEBUG] [Thread-52552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:19:23.584 [DEBUG] [Thread-52552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:19:23.584 [DEBUG] [Thread-52552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:19:23.598 [INFO] [Thread-52552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:19:23.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:19:23.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:19:24.440 [DEBUG] [Thread-52552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:19:24.440 [DEBUG] [Thread-52552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:19:24.488 [DEBUG] [Thread-52552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:19:24.489 [DEBUG] [Thread-52552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:19:24.497 [DEBUG] [Thread-52552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:19:24.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:19:24.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:19:24.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:19:24.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:19:24.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:19:24.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:19:24.531 [DEBUG] [Thread-52552] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:19:24.688 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:19:24.690 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:19:36.640 [DEBUG] [Thread-52554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:19:51.683 [DEBUG] [Thread-52555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:19:54.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:19:54.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:19:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:19:55.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 19, 22), 19.9, 26.23, 0.0, 15.67, 18.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:19:55.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:19:22
2025-11-17T10:19:55.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:19:55.547 [DEBUG] [Thread-52556] [transport.py] [_log()] starting thread (client mode): 0xd0784a90
2025-11-17T10:19:55.547 [DEBUG] [Thread-52556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:19:55.568 [DEBUG] [Thread-52556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:19:55.568 [INFO] [Thread-52556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] client lang: <none>
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] server lang: <none>
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] kex follows: False
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:19:55.572 [DEBUG] [Thread-52556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:19:55.573 [DEBUG] [Thread-52556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:19:55.573 [DEBUG] [Thread-52556] [transport.py] [_log()] Compression: none
2025-11-17T10:19:55.573 [DEBUG] [Thread-52556] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:19:55.590 [DEBUG] [Thread-52556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:19:55.590 [DEBUG] [Thread-52556] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:19:55.590 [DEBUG] [Thread-52556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:19:55.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:19:55.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:19:55.591 [DEBUG] [Thread-52556] [transport.py] [_log()] userauth is OK
2025-11-17T10:19:55.591 [DEBUG] [Thread-52556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:19:55.591 [DEBUG] [Thread-52556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:19:55.591 [DEBUG] [Thread-52556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:19:55.591 [DEBUG] [Thread-52556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:19:55.606 [INFO] [Thread-52556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:19:55.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:19:56.242 [DEBUG] [Thread-52556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:19:56.242 [DEBUG] [Thread-52556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:19:56.242 [DEBUG] [Thread-52556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:19:56.282 [DEBUG] [Thread-52556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:19:56.282 [DEBUG] [Thread-52556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:19:56.285 [DEBUG] [Thread-52556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:19:56.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:19:56.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:19:56.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:19:56.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:19:56.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:19:56.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:19:56.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:19:56.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:19:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:19:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.346577 -999.00  +17.30  10.40     33   +1.00 1 1 1 1 1   888    0 17.76 60.74 ----- 10.4 10.4 76.2 13.6 25.1 -25.1 24.2 -24.1 23.1 -24.6 23.9 -25.4
2025-11-17T10:19:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:19:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:19:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.346577
2025-11-17T10:19:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:19:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:19:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:19:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:19:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:19:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:19:22', tmtdew=19.9, humidity=26.23, cloud=0.0, wind=15.67, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:19:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:19:56.311 [DEBUG] [Thread-52556] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:19:56.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:19:56.412 [DEBUG] [Thread-52559] [transport.py] [_log()] starting thread (client mode): 0xd0785c30
2025-11-17T10:19:56.412 [DEBUG] [Thread-52559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:19:56.431 [DEBUG] [Thread-52559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:19:56.431 [INFO] [Thread-52559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:19:56.438 [DEBUG] [Thread-52559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:19:56.439 [DEBUG] [Thread-52559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:19:56.439 [DEBUG] [Thread-52559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:19:56.439 [DEBUG] [Thread-52559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:19:56.439 [DEBUG] [Thread-52559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:19:56.439 [DEBUG] [Thread-52559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:19:56.439 [DEBUG] [Thread-52559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:19:56.440 [DEBUG] [Thread-52559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:19:56.440 [DEBUG] [Thread-52559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:19:56.440 [DEBUG] [Thread-52559] [transport.py] [_log()] client lang: <none>
2025-11-17T10:19:56.440 [DEBUG] [Thread-52559] [transport.py] [_log()] server lang: <none>
2025-11-17T10:19:56.440 [DEBUG] [Thread-52559] [transport.py] [_log()] kex follows: False
2025-11-17T10:19:56.440 [DEBUG] [Thread-52559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:19:56.440 [DEBUG] [Thread-52559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:19:56.440 [DEBUG] [Thread-52559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:19:56.441 [DEBUG] [Thread-52559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:19:56.441 [DEBUG] [Thread-52559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:19:56.441 [DEBUG] [Thread-52559] [transport.py] [_log()] Compression: none
2025-11-17T10:19:56.441 [DEBUG] [Thread-52559] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:19:56.496 [DEBUG] [Thread-52559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:19:56.497 [DEBUG] [Thread-52559] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:19:56.497 [DEBUG] [Thread-52559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:19:56.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:19:56.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:19:56.555 [DEBUG] [Thread-52559] [transport.py] [_log()] userauth is OK
2025-11-17T10:19:56.555 [DEBUG] [Thread-52559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:19:56.555 [DEBUG] [Thread-52559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:19:56.555 [DEBUG] [Thread-52559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:19:56.555 [DEBUG] [Thread-52559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:19:56.573 [INFO] [Thread-52559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:19:56.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:19:56.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:19:57.416 [DEBUG] [Thread-52559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:19:57.416 [DEBUG] [Thread-52559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:19:57.465 [DEBUG] [Thread-52559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:19:57.465 [DEBUG] [Thread-52559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:19:57.473 [DEBUG] [Thread-52559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:19:57.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:19:57.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:19:57.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:19:57.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:19:57.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:19:57.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:19:57.508 [DEBUG] [Thread-52559] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:20:03.172 [DEBUG] [Thread-52561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:20:06.712 [DEBUG] [Thread-52562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:20:21.749 [DEBUG] [Thread-52563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:20:24.830 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:20:24.831 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:20:27.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:20:27.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:20: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
2025-11-17T10:20:28.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 19, 54), 19.89, 26.16, 0.0, 16.57, 18.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:20:28.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:19:54
2025-11-17T10:20:28.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:20:28.508 [DEBUG] [Thread-52564] [transport.py] [_log()] starting thread (client mode): 0xd31cf880
2025-11-17T10:20:28.508 [DEBUG] [Thread-52564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:20:28.529 [DEBUG] [Thread-52564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:20:28.529 [INFO] [Thread-52564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] client lang: <none>
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] server lang: <none>
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] kex follows: False
2025-11-17T10:20:28.532 [DEBUG] [Thread-52564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:20:28.533 [DEBUG] [Thread-52564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:20:28.533 [DEBUG] [Thread-52564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:20:28.533 [DEBUG] [Thread-52564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:20:28.533 [DEBUG] [Thread-52564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:20:28.533 [DEBUG] [Thread-52564] [transport.py] [_log()] Compression: none
2025-11-17T10:20:28.533 [DEBUG] [Thread-52564] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:20:28.550 [DEBUG] [Thread-52564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:20:28.550 [DEBUG] [Thread-52564] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:20:28.551 [DEBUG] [Thread-52564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:20:28.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:20:28.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:20:28.553 [DEBUG] [Thread-52564] [transport.py] [_log()] userauth is OK
2025-11-17T10:20:28.553 [DEBUG] [Thread-52564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:20:28.553 [DEBUG] [Thread-52564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:20:28.553 [DEBUG] [Thread-52564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:20:28.553 [DEBUG] [Thread-52564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:20:28.578 [INFO] [Thread-52564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:20:28.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:20:29.220 [DEBUG] [Thread-52564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:20:29.220 [DEBUG] [Thread-52564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:20:29.220 [DEBUG] [Thread-52564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:20:29.261 [DEBUG] [Thread-52564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:20:29.262 [DEBUG] [Thread-52564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:20:29.265 [DEBUG] [Thread-52564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:20:29.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:20:29.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:20:29.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:20:29.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:20:29.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:20:29.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:20:29.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:20:29.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:20:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:20:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.346924 -999.00  +17.30   9.20     33   +1.00 1 1 1 1 1   888    0 17.64 52.78 ----- 9.2 9.2 86.9 12.2 25.1 -24.8 24.4 -23.3 23.2 -23.6 24.0 -24.2
2025-11-17T10:20:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:20:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:20:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.346924
2025-11-17T10:20:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:20:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:20:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:20:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:20:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:20:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:19:54', tmtdew=19.89, humidity=26.16, cloud=0.0, wind=16.57, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:19:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:20:29.291 [DEBUG] [Thread-52564] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:20:29.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:20:29.386 [DEBUG] [Thread-52567] [transport.py] [_log()] starting thread (client mode): 0xd0784280
2025-11-17T10:20:29.386 [DEBUG] [Thread-52567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:20:29.401 [DEBUG] [Thread-52567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:20:29.402 [INFO] [Thread-52567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:20:29.409 [DEBUG] [Thread-52567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] client lang: <none>
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] server lang: <none>
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] kex follows: False
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:20:29.410 [DEBUG] [Thread-52567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:20:29.411 [DEBUG] [Thread-52567] [transport.py] [_log()] Compression: none
2025-11-17T10:20:29.411 [DEBUG] [Thread-52567] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:20:29.468 [DEBUG] [Thread-52567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:20:29.469 [DEBUG] [Thread-52567] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:20:29.469 [DEBUG] [Thread-52567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:20:29.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:20:29.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:20:29.525 [DEBUG] [Thread-52567] [transport.py] [_log()] userauth is OK
2025-11-17T10:20:29.525 [DEBUG] [Thread-52567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:20:29.525 [DEBUG] [Thread-52567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:20:29.525 [DEBUG] [Thread-52567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:20:29.525 [DEBUG] [Thread-52567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:20:29.545 [INFO] [Thread-52567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:20:29.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:20:29.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:20:30.477 [DEBUG] [Thread-52567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:20:30.477 [DEBUG] [Thread-52567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:20:30.524 [DEBUG] [Thread-52567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:20:30.524 [DEBUG] [Thread-52567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:20:30.536 [DEBUG] [Thread-52567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:20:30.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:20:30.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:20:30.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:20:30.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:20:30.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:20:30.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:20:30.570 [DEBUG] [Thread-52567] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:20:36.780 [DEBUG] [Thread-52569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:20:51.823 [DEBUG] [Thread-52570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:21:00.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:21:00.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:21:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:21:01.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 20, 58), 20.21, 25.7, 0.0, 16.18, 18.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:21:01.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:20:58
2025-11-17T10:21:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:21:01.547 [DEBUG] [Thread-52571] [transport.py] [_log()] starting thread (client mode): 0xd07598a0
2025-11-17T10:21:01.548 [DEBUG] [Thread-52571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:21:01.567 [DEBUG] [Thread-52571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:21:01.568 [INFO] [Thread-52571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:21:01.569 [DEBUG] [Thread-52571] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] client lang: <none>
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] server lang: <none>
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] kex follows: False
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] Compression: none
2025-11-17T10:21:01.570 [DEBUG] [Thread-52571] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:21:01.586 [DEBUG] [Thread-52571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:21:01.587 [DEBUG] [Thread-52571] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:21:01.587 [DEBUG] [Thread-52571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:21:01.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:21:01.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:21:01.589 [DEBUG] [Thread-52571] [transport.py] [_log()] userauth is OK
2025-11-17T10:21:01.589 [DEBUG] [Thread-52571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:21:01.589 [DEBUG] [Thread-52571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:21:01.589 [DEBUG] [Thread-52571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:21:01.589 [DEBUG] [Thread-52571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:21:01.613 [INFO] [Thread-52571] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:21:01.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:21:02.259 [DEBUG] [Thread-52571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:21:02.260 [DEBUG] [Thread-52571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:21:02.260 [DEBUG] [Thread-52571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:21:02.300 [DEBUG] [Thread-52571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:21:02.300 [DEBUG] [Thread-52571] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:21:02.304 [DEBUG] [Thread-52571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:21:02.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:21:02.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:21:02.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:21:02.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:21:02.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:21:02.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:21:02.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:21:02.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:21:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:21:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.347271 -999.00  +17.70  11.11     33   +1.40 1 1 1 1 1   888    0 17.74 45.51 ----- 11.1 11.1 92.4 13.2 25.3 -25.8 24.4 -23.5 23.4 -23.5 24.1 -24.1
2025-11-17T10:21:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:21:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:21:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.347271
2025-11-17T10:21:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:21:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:21:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:21:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:21:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:21:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:20:58', tmtdew=20.21, humidity=25.7, cloud=0.0, wind=16.18, temperature=18.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:20:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:21:02.331 [DEBUG] [Thread-52571] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:21:02.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:21:02.428 [DEBUG] [Thread-52574] [transport.py] [_log()] starting thread (client mode): 0xd0712aa0
2025-11-17T10:21:02.428 [DEBUG] [Thread-52574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:21:02.444 [DEBUG] [Thread-52574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:21:02.444 [INFO] [Thread-52574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] client lang: <none>
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] server lang: <none>
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] kex follows: False
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:21:02.455 [DEBUG] [Thread-52574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:21:02.456 [DEBUG] [Thread-52574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:21:02.456 [DEBUG] [Thread-52574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:21:02.456 [DEBUG] [Thread-52574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:21:02.456 [DEBUG] [Thread-52574] [transport.py] [_log()] Compression: none
2025-11-17T10:21:02.456 [DEBUG] [Thread-52574] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:21:02.509 [DEBUG] [Thread-52574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:21:02.509 [DEBUG] [Thread-52574] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:21:02.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:21:02.510 [DEBUG] [Thread-52574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:21:02.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:21:02.567 [DEBUG] [Thread-52574] [transport.py] [_log()] userauth is OK
2025-11-17T10:21:02.567 [DEBUG] [Thread-52574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:21:02.567 [DEBUG] [Thread-52574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:21:02.567 [DEBUG] [Thread-52574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:21:02.568 [DEBUG] [Thread-52574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:21:02.587 [INFO] [Thread-52574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:21:02.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:21:02.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:21:03.222 [DEBUG] [Thread-52576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:21:03.441 [DEBUG] [Thread-52574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:21:03.441 [DEBUG] [Thread-52574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:21:03.488 [DEBUG] [Thread-52574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:21:03.488 [DEBUG] [Thread-52574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:21:03.497 [DEBUG] [Thread-52574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:21:03.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:21:03.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:21:03.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:21:03.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:21:03.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:21:03.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:21:03.533 [DEBUG] [Thread-52574] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:21:06.847 [DEBUG] [Thread-52577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:21:21.895 [DEBUG] [Thread-52578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:21:24.974 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:21:24.975 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:21:33.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:21:33.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:21:33.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:21:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 21, 30), 20.08, 25.83, 0.0, 13.23, 18.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:21:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:21:30
2025-11-17T10:21:34.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:21:34.495 [DEBUG] [Thread-52579] [transport.py] [_log()] starting thread (client mode): 0xd3160580
2025-11-17T10:21:34.496 [DEBUG] [Thread-52579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:21:34.516 [DEBUG] [Thread-52579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:21:34.516 [INFO] [Thread-52579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:21:34.519 [DEBUG] [Thread-52579] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] client lang: <none>
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] server lang: <none>
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] kex follows: False
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] Compression: none
2025-11-17T10:21:34.520 [DEBUG] [Thread-52579] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:21:34.535 [DEBUG] [Thread-52579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:21:34.535 [DEBUG] [Thread-52579] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:21:34.535 [DEBUG] [Thread-52579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:21:34.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:21:34.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:21:34.536 [DEBUG] [Thread-52579] [transport.py] [_log()] userauth is OK
2025-11-17T10:21:34.536 [DEBUG] [Thread-52579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:21:34.536 [DEBUG] [Thread-52579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:21:34.536 [DEBUG] [Thread-52579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:21:34.536 [DEBUG] [Thread-52579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:21:34.545 [INFO] [Thread-52579] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:21:34.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:21:35.238 [DEBUG] [Thread-52579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:21:35.239 [DEBUG] [Thread-52579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:21:35.239 [DEBUG] [Thread-52579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:21:35.279 [DEBUG] [Thread-52579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:21:35.279 [DEBUG] [Thread-52579] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:21:35.282 [DEBUG] [Thread-52579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:21:35.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:21:35.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:21:35.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:21:35.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:21:35.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:21:35.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:21:35.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.347618 -999.00  +18.00  20.81     32   +1.20 1 1 1 1 1   888    0 17.72 42.49 ----- 20.8 20.8 64.8 22.2 25.1 -25.2 24.5 -24.5 23.4 -25.0 24.1 -24.6
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.347618
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:21:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:21:30', tmtdew=20.08, humidity=25.83, cloud=0.0, wind=13.23, temperature=18.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:20:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:21:35.300 [DEBUG] [Thread-52579] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:21:35.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:21:35.385 [DEBUG] [Thread-52582] [transport.py] [_log()] starting thread (client mode): 0xd31cd900
2025-11-17T10:21:35.385 [DEBUG] [Thread-52582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:21:35.408 [DEBUG] [Thread-52582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:21:35.409 [INFO] [Thread-52582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] client lang: <none>
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] server lang: <none>
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] kex follows: False
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] Compression: none
2025-11-17T10:21:35.416 [DEBUG] [Thread-52582] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:21:35.476 [DEBUG] [Thread-52582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:21:35.476 [DEBUG] [Thread-52582] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:21:35.476 [DEBUG] [Thread-52582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:21:35.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:21:35.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:21:35.537 [DEBUG] [Thread-52582] [transport.py] [_log()] userauth is OK
2025-11-17T10:21:35.537 [DEBUG] [Thread-52582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:21:35.537 [DEBUG] [Thread-52582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:21:35.537 [DEBUG] [Thread-52582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:21:35.537 [DEBUG] [Thread-52582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:21:35.557 [INFO] [Thread-52582] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:21:35.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:21:35.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:21:36.534 [DEBUG] [Thread-52582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:21:36.535 [DEBUG] [Thread-52582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:21:36.582 [DEBUG] [Thread-52582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:21:36.582 [DEBUG] [Thread-52582] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:21:36.593 [DEBUG] [Thread-52582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:21:36.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:21:36.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:21:36.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:21:36.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:21:36.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:21:36.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:21:36.629 [DEBUG] [Thread-52582] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:21:36.925 [DEBUG] [Thread-52584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:21:51.963 [DEBUG] [Thread-52585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:22:03.268 [DEBUG] [Thread-52586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:22:06.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:22:06.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:22:06.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:22:06.993 [DEBUG] [Thread-52587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:22:07.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 22, 2), 19.92, 26.06, 0.0, 19.0, 18.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:22:07.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:22:02
2025-11-17T10:22:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:22:07.584 [DEBUG] [Thread-52588] [transport.py] [_log()] starting thread (client mode): 0xd31ce350
2025-11-17T10:22:07.584 [DEBUG] [Thread-52588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:22:07.600 [DEBUG] [Thread-52588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:22:07.600 [INFO] [Thread-52588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] client lang: <none>
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] server lang: <none>
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] kex follows: False
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] Compression: none
2025-11-17T10:22:07.603 [DEBUG] [Thread-52588] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:22:07.622 [DEBUG] [Thread-52588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:22:07.623 [DEBUG] [Thread-52588] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:22:07.623 [DEBUG] [Thread-52588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:22:07.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:22:07.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:22:07.625 [DEBUG] [Thread-52588] [transport.py] [_log()] userauth is OK
2025-11-17T10:22:07.625 [DEBUG] [Thread-52588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:22:07.626 [DEBUG] [Thread-52588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:22:07.626 [DEBUG] [Thread-52588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:22:07.626 [DEBUG] [Thread-52588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:22:07.644 [INFO] [Thread-52588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:22:07.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:22:08.321 [DEBUG] [Thread-52588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:22:08.321 [DEBUG] [Thread-52588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:22:08.321 [DEBUG] [Thread-52588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:22:08.362 [DEBUG] [Thread-52588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:22:08.362 [DEBUG] [Thread-52588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:22:08.364 [DEBUG] [Thread-52588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:22:08.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:22:08.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:22:08.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:22:08.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:22:08.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:22:08.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:22:08.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.348313 -999.00  +17.90  12.79     32   +1.20 1 1 1 1 1   888    0 17.25 39.23 ----- 12.8 12.8 70.9 18.8 25.2 -24.8 24.6 -23.9 23.4 -23.7 24.2 -23.7
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.348313
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:22:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:22:02', tmtdew=19.92, humidity=26.06, cloud=0.0, wind=19.0, temperature=18.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:21:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:22:08.383 [DEBUG] [Thread-52588] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:22:08.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:22:08.468 [DEBUG] [Thread-52591] [transport.py] [_log()] starting thread (client mode): 0xd07598a0
2025-11-17T10:22:08.468 [DEBUG] [Thread-52591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:22:08.483 [DEBUG] [Thread-52591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:22:08.483 [INFO] [Thread-52591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] client lang: <none>
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] server lang: <none>
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] kex follows: False
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] Compression: none
2025-11-17T10:22:08.490 [DEBUG] [Thread-52591] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:22:08.547 [DEBUG] [Thread-52591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:22:08.547 [DEBUG] [Thread-52591] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:22:08.547 [DEBUG] [Thread-52591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:22:08.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:22:08.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:22:08.608 [DEBUG] [Thread-52591] [transport.py] [_log()] userauth is OK
2025-11-17T10:22:08.608 [DEBUG] [Thread-52591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:22:08.608 [DEBUG] [Thread-52591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:22:08.608 [DEBUG] [Thread-52591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:22:08.608 [DEBUG] [Thread-52591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:22:08.624 [INFO] [Thread-52591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:22:08.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:22:08.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:22:09.493 [DEBUG] [Thread-52591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:22:09.493 [DEBUG] [Thread-52591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:22:09.541 [DEBUG] [Thread-52591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:22:09.541 [DEBUG] [Thread-52591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:22:09.549 [DEBUG] [Thread-52591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:22:09.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:22:09.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:22:09.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:22:09.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:22:09.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:22:09.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:22:09.583 [DEBUG] [Thread-52591] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:22:22.020 [DEBUG] [Thread-52593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:22:25.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:22:25.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:22:37.065 [DEBUG] [Thread-52594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:22:39.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:22:39.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:22:39.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:22:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 22, 34), 21.43, 23.46, 0.0, 18.21, 19.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:22:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:22:34
2025-11-17T10:22:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:22:40.539 [DEBUG] [Thread-52595] [transport.py] [_log()] starting thread (client mode): 0xd31cce20
2025-11-17T10:22:40.539 [DEBUG] [Thread-52595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:22:40.559 [DEBUG] [Thread-52595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:22:40.559 [INFO] [Thread-52595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:22:40.562 [DEBUG] [Thread-52595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:22:40.562 [DEBUG] [Thread-52595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:22:40.562 [DEBUG] [Thread-52595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:22:40.562 [DEBUG] [Thread-52595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:22:40.562 [DEBUG] [Thread-52595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:22:40.562 [DEBUG] [Thread-52595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:22:40.562 [DEBUG] [Thread-52595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] client lang: <none>
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] server lang: <none>
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] kex follows: False
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] Compression: none
2025-11-17T10:22:40.563 [DEBUG] [Thread-52595] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:22:40.582 [DEBUG] [Thread-52595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:22:40.583 [DEBUG] [Thread-52595] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:22:40.584 [DEBUG] [Thread-52595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:22:40.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:22:40.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:22:40.624 [DEBUG] [Thread-52595] [transport.py] [_log()] userauth is OK
2025-11-17T10:22:40.625 [DEBUG] [Thread-52595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:22:40.625 [DEBUG] [Thread-52595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:22:40.625 [DEBUG] [Thread-52595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:22:40.625 [DEBUG] [Thread-52595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:22:40.662 [INFO] [Thread-52595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:22:40.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:22:41.294 [DEBUG] [Thread-52595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:22:41.294 [DEBUG] [Thread-52595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:22:41.295 [DEBUG] [Thread-52595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:22:41.335 [DEBUG] [Thread-52595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:22:41.335 [DEBUG] [Thread-52595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:22:41.337 [DEBUG] [Thread-52595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:22:41.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:22:41.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:22:41.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:22:41.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:22:41.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:22:41.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:22:41.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:22:41.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:22:41.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:22:41.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.348660 -999.00  +18.00  10.87     32   +1.10 1 1 1 1 1   888    0 17.46 39.52 ----- 10.9 10.9 69.1 16.6 25.4 -24.8 24.5 -25.3 23.5 -24.7 24.2 -24.4
2025-11-17T10:22:41.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:22:41.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:22:41.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.348660
2025-11-17T10:22:41.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:22:41.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:22:41.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:22:41.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:22:41.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:22:41.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:22:34', tmtdew=21.43, humidity=23.46, cloud=0.0, wind=18.21, temperature=19.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:22:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:22:41.361 [DEBUG] [Thread-52595] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:22:41.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:22:41.457 [DEBUG] [Thread-52598] [transport.py] [_log()] starting thread (client mode): 0xd31609d0
2025-11-17T10:22:41.457 [DEBUG] [Thread-52598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:22:41.477 [DEBUG] [Thread-52598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:22:41.477 [INFO] [Thread-52598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:22:41.484 [DEBUG] [Thread-52598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] client lang: <none>
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] server lang: <none>
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] kex follows: False
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:22:41.485 [DEBUG] [Thread-52598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:22:41.486 [DEBUG] [Thread-52598] [transport.py] [_log()] Compression: none
2025-11-17T10:22:41.486 [DEBUG] [Thread-52598] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:22:41.544 [DEBUG] [Thread-52598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:22:41.544 [DEBUG] [Thread-52598] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:22:41.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:22:41.545 [DEBUG] [Thread-52598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:22:41.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:22:41.600 [DEBUG] [Thread-52598] [transport.py] [_log()] userauth is OK
2025-11-17T10:22:41.600 [DEBUG] [Thread-52598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:22:41.600 [DEBUG] [Thread-52598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:22:41.601 [DEBUG] [Thread-52598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:22:41.601 [DEBUG] [Thread-52598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:22:41.622 [INFO] [Thread-52598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:22:41.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:22:41.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:22:42.536 [DEBUG] [Thread-52598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:22:42.536 [DEBUG] [Thread-52598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:22:42.584 [DEBUG] [Thread-52598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:22:42.584 [DEBUG] [Thread-52598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:22:42.594 [DEBUG] [Thread-52598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:22:42.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:22:42.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:22:42.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:22:42.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:22:42.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:22:42.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:22:42.628 [DEBUG] [Thread-52598] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:22:52.095 [DEBUG] [Thread-52600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:23:03.327 [DEBUG] [Thread-52601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:23:07.133 [DEBUG] [Thread-52602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:23:12.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:23:12.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:23:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:23:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 23, 6), 20.12, 25.83, 0.0, 16.0, 18.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:23:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:23:06
2025-11-17T10:23:13.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:23:13.580 [DEBUG] [Thread-52603] [transport.py] [_log()] starting thread (client mode): 0xd31cfac0
2025-11-17T10:23:13.580 [DEBUG] [Thread-52603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:23:13.603 [DEBUG] [Thread-52603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:23:13.603 [INFO] [Thread-52603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:23:13.605 [DEBUG] [Thread-52603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:23:13.605 [DEBUG] [Thread-52603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:23:13.605 [DEBUG] [Thread-52603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:23:13.605 [DEBUG] [Thread-52603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:23:13.605 [DEBUG] [Thread-52603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:23:13.605 [DEBUG] [Thread-52603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:23:13.605 [DEBUG] [Thread-52603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] client lang: <none>
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] server lang: <none>
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] kex follows: False
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:23:13.606 [DEBUG] [Thread-52603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:23:13.607 [DEBUG] [Thread-52603] [transport.py] [_log()] Compression: none
2025-11-17T10:23:13.607 [DEBUG] [Thread-52603] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:23:13.619 [DEBUG] [Thread-52603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:23:13.619 [DEBUG] [Thread-52603] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:23:13.620 [DEBUG] [Thread-52603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:23:13.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:23:13.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:23:13.622 [DEBUG] [Thread-52603] [transport.py] [_log()] userauth is OK
2025-11-17T10:23:13.622 [DEBUG] [Thread-52603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:23:13.623 [DEBUG] [Thread-52603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:23:13.623 [DEBUG] [Thread-52603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:23:13.623 [DEBUG] [Thread-52603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:23:13.644 [INFO] [Thread-52603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:23:13.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:23:14.288 [DEBUG] [Thread-52603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:23:14.288 [DEBUG] [Thread-52603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:23:14.288 [DEBUG] [Thread-52603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:23:14.329 [DEBUG] [Thread-52603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:23:14.330 [DEBUG] [Thread-52603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:23:14.332 [DEBUG] [Thread-52603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:23:14.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:23:14.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:23:14.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:23:14.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:23:14.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:23:14.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:23:14.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:23:14.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:23:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:23:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.349007 -999.00  +18.00  15.46     32   +1.30 1 1 1 1 1   888    0 17.60 40.80 ----- 15.5 15.5 117.2 21.4 25.2 -25.5 24.6 -24.5 23.6 -24.4 24.2 -24.5
2025-11-17T10:23:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:23:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:23:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.349007
2025-11-17T10:23:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:23:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:23:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:23:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:23:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:23:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:23:06', tmtdew=20.12, humidity=25.83, cloud=0.0, wind=16.0, temperature=18.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:22:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:23:14.367 [DEBUG] [Thread-52603] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:23:14.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:23:14.468 [DEBUG] [Thread-52606] [transport.py] [_log()] starting thread (client mode): 0xd07bf0d0
2025-11-17T10:23:14.468 [DEBUG] [Thread-52606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:23:14.485 [DEBUG] [Thread-52606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:23:14.485 [INFO] [Thread-52606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:23:14.495 [DEBUG] [Thread-52606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:23:14.495 [DEBUG] [Thread-52606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:23:14.495 [DEBUG] [Thread-52606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] client lang: <none>
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] server lang: <none>
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] kex follows: False
2025-11-17T10:23:14.496 [DEBUG] [Thread-52606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:23:14.497 [DEBUG] [Thread-52606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:23:14.497 [DEBUG] [Thread-52606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:23:14.497 [DEBUG] [Thread-52606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:23:14.497 [DEBUG] [Thread-52606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:23:14.497 [DEBUG] [Thread-52606] [transport.py] [_log()] Compression: none
2025-11-17T10:23:14.497 [DEBUG] [Thread-52606] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:23:14.552 [DEBUG] [Thread-52606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:23:14.552 [DEBUG] [Thread-52606] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:23:14.553 [DEBUG] [Thread-52606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:23:14.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:23:14.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:23:14.617 [DEBUG] [Thread-52606] [transport.py] [_log()] userauth is OK
2025-11-17T10:23:14.618 [DEBUG] [Thread-52606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:23:14.618 [DEBUG] [Thread-52606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:23:14.618 [DEBUG] [Thread-52606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:23:14.618 [DEBUG] [Thread-52606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:23:14.639 [INFO] [Thread-52606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:23:14.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:23:14.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:23:15.485 [DEBUG] [Thread-52606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:23:15.486 [DEBUG] [Thread-52606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:23:15.534 [DEBUG] [Thread-52606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:23:15.534 [DEBUG] [Thread-52606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:23:15.543 [DEBUG] [Thread-52606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:23:15.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:23:15.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:23:15.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:23:15.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:23:15.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:23:15.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:23:15.581 [DEBUG] [Thread-52606] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:23:22.162 [DEBUG] [Thread-52608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:23:25.259 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:23:25.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:23:37.206 [DEBUG] [Thread-52609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:23:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:23:45.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:23:45.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:23:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 23, 38), 20.11, 25.68, 0.0, 17.17, 18.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:23:46.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:23:38
2025-11-17T10:23:46.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:23:46.540 [DEBUG] [Thread-52610] [transport.py] [_log()] starting thread (client mode): 0xd3134190
2025-11-17T10:23:46.540 [DEBUG] [Thread-52610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:23:46.565 [DEBUG] [Thread-52610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:23:46.565 [INFO] [Thread-52610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:23:46.569 [DEBUG] [Thread-52610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:23:46.569 [DEBUG] [Thread-52610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:23:46.569 [DEBUG] [Thread-52610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:23:46.569 [DEBUG] [Thread-52610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:23:46.569 [DEBUG] [Thread-52610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:23:46.569 [DEBUG] [Thread-52610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:23:46.570 [DEBUG] [Thread-52610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:23:46.570 [DEBUG] [Thread-52610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:23:46.570 [DEBUG] [Thread-52610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:23:46.570 [DEBUG] [Thread-52610] [transport.py] [_log()] client lang: <none>
2025-11-17T10:23:46.570 [DEBUG] [Thread-52610] [transport.py] [_log()] server lang: <none>
2025-11-17T10:23:46.570 [DEBUG] [Thread-52610] [transport.py] [_log()] kex follows: False
2025-11-17T10:23:46.570 [DEBUG] [Thread-52610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:23:46.570 [DEBUG] [Thread-52610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:23:46.571 [DEBUG] [Thread-52610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:23:46.571 [DEBUG] [Thread-52610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:23:46.571 [DEBUG] [Thread-52610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:23:46.571 [DEBUG] [Thread-52610] [transport.py] [_log()] Compression: none
2025-11-17T10:23:46.571 [DEBUG] [Thread-52610] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:23:46.589 [DEBUG] [Thread-52610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:23:46.590 [DEBUG] [Thread-52610] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:23:46.590 [DEBUG] [Thread-52610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:23:46.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:23:46.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:23:46.593 [DEBUG] [Thread-52610] [transport.py] [_log()] userauth is OK
2025-11-17T10:23:46.593 [DEBUG] [Thread-52610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:23:46.593 [DEBUG] [Thread-52610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:23:46.593 [DEBUG] [Thread-52610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:23:46.593 [DEBUG] [Thread-52610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:23:46.616 [INFO] [Thread-52610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:23:46.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:23:47.213 [DEBUG] [Thread-52610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:23:47.213 [DEBUG] [Thread-52610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:23:47.214 [DEBUG] [Thread-52610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:23:47.254 [DEBUG] [Thread-52610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:23:47.254 [DEBUG] [Thread-52610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:23:47.257 [DEBUG] [Thread-52610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:23:47.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:23:47.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:23:47.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:23:47.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:23:47.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:23:47.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:23:47.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:23:47.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:23:47.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:23:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.349354 -999.00  +18.10  12.28     32   +1.30 1 1 1 1 1   888    0 17.46 39.28 ----- 12.3 12.3 114.1 24.0 25.2 -24.6 24.6 -24.4 23.6 -23.9 24.3 -24.3
2025-11-17T10:23:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:23:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:23:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.349354
2025-11-17T10:23:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:23:47.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:23:47.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:23:47.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:23:47.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:23:47.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:23:38', tmtdew=20.11, humidity=25.68, cloud=0.0, wind=17.17, temperature=18.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:23:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:23:47.292 [DEBUG] [Thread-52610] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:23:47.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:23:47.389 [DEBUG] [Thread-52613] [transport.py] [_log()] starting thread (client mode): 0xd317c490
2025-11-17T10:23:47.389 [DEBUG] [Thread-52613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:23:47.405 [DEBUG] [Thread-52613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:23:47.405 [INFO] [Thread-52613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:23:47.412 [DEBUG] [Thread-52613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] client lang: <none>
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] server lang: <none>
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] kex follows: False
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:23:47.413 [DEBUG] [Thread-52613] [transport.py] [_log()] Compression: none
2025-11-17T10:23:47.414 [DEBUG] [Thread-52613] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:23:47.471 [DEBUG] [Thread-52613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:23:47.471 [DEBUG] [Thread-52613] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:23:47.471 [DEBUG] [Thread-52613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:23:47.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:23:47.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:23:47.528 [DEBUG] [Thread-52613] [transport.py] [_log()] userauth is OK
2025-11-17T10:23:47.528 [DEBUG] [Thread-52613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:23:47.528 [DEBUG] [Thread-52613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:23:47.528 [DEBUG] [Thread-52613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:23:47.528 [DEBUG] [Thread-52613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:23:47.546 [INFO] [Thread-52613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:23:47.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:23:47.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:23:48.403 [DEBUG] [Thread-52613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:23:48.403 [DEBUG] [Thread-52613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:23:48.450 [DEBUG] [Thread-52613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:23:48.450 [DEBUG] [Thread-52613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:23:48.459 [DEBUG] [Thread-52613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:23:48.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:23:48.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:23:48.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:23:48.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:23:48.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:23:48.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:23:48.493 [DEBUG] [Thread-52613] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:23:52.240 [DEBUG] [Thread-52615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:24:03.375 [DEBUG] [Thread-52616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:24:07.283 [DEBUG] [Thread-52617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:24:18.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:24:18.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:24:18.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:24:19.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 24, 10), 20.14, 25.65, 0.0, 14.95, 18.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:24:19.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:24:10
2025-11-17T10:24:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:24:19.446 [DEBUG] [Thread-52618] [transport.py] [_log()] starting thread (client mode): 0xd071bd00
2025-11-17T10:24:19.446 [DEBUG] [Thread-52618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:24:19.467 [DEBUG] [Thread-52618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:24:19.467 [INFO] [Thread-52618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] client lang: <none>
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] server lang: <none>
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] kex follows: False
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] Compression: none
2025-11-17T10:24:19.469 [DEBUG] [Thread-52618] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:24:19.479 [DEBUG] [Thread-52618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:24:19.480 [DEBUG] [Thread-52618] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:24:19.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:24:19.481 [DEBUG] [Thread-52618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:24:19.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:24:19.482 [DEBUG] [Thread-52618] [transport.py] [_log()] userauth is OK
2025-11-17T10:24:19.482 [DEBUG] [Thread-52618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:24:19.482 [DEBUG] [Thread-52618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:24:19.482 [DEBUG] [Thread-52618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:24:19.482 [DEBUG] [Thread-52618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:24:19.496 [INFO] [Thread-52618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:24:19.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:24:20.129 [DEBUG] [Thread-52618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:24:20.129 [DEBUG] [Thread-52618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:24:20.130 [DEBUG] [Thread-52618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:24:20.170 [DEBUG] [Thread-52618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:24:20.170 [DEBUG] [Thread-52618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:24:20.173 [DEBUG] [Thread-52618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:24:20.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:24:20.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:24:20.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:24:20.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:24:20.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:24:20.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:24:20.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:24:20.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:24:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:24:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.349702 -999.00  +18.20  10.74     32   +1.30 1 1 1 1 1   888    0 17.40 39.59 ----- 10.7 10.7 108.7 23.1 25.2 -26.4 24.8 -24.3 23.7 -24.2 24.4 -24.4
2025-11-17T10:24:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:24:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:24:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.349702
2025-11-17T10:24:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:24:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:24:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:24:20.196 [DEBUG] [Thread-52618] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:24:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:24:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:24:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:24:10', tmtdew=20.14, humidity=25.65, cloud=0.0, wind=14.95, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:23:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:24:20.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:24:20.290 [DEBUG] [Thread-52621] [transport.py] [_log()] starting thread (client mode): 0xd31606d0
2025-11-17T10:24:20.290 [DEBUG] [Thread-52621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:24:20.305 [DEBUG] [Thread-52621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:24:20.305 [INFO] [Thread-52621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:24:20.312 [DEBUG] [Thread-52621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:24:20.312 [DEBUG] [Thread-52621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:24:20.312 [DEBUG] [Thread-52621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:24:20.312 [DEBUG] [Thread-52621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] client lang: <none>
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] server lang: <none>
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] kex follows: False
2025-11-17T10:24:20.313 [DEBUG] [Thread-52621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:24:20.314 [DEBUG] [Thread-52621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:24:20.314 [DEBUG] [Thread-52621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:24:20.314 [DEBUG] [Thread-52621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:24:20.314 [DEBUG] [Thread-52621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:24:20.314 [DEBUG] [Thread-52621] [transport.py] [_log()] Compression: none
2025-11-17T10:24:20.314 [DEBUG] [Thread-52621] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:24:20.370 [DEBUG] [Thread-52621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:24:20.371 [DEBUG] [Thread-52621] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:24:20.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:24:20.372 [DEBUG] [Thread-52621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:24:20.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:24:20.429 [DEBUG] [Thread-52621] [transport.py] [_log()] userauth is OK
2025-11-17T10:24:20.429 [DEBUG] [Thread-52621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:24:20.429 [DEBUG] [Thread-52621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:24:20.430 [DEBUG] [Thread-52621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:24:20.430 [DEBUG] [Thread-52621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:24:20.453 [INFO] [Thread-52621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:24:20.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:24:20.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:24:21.327 [DEBUG] [Thread-52621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:24:21.327 [DEBUG] [Thread-52621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:24:21.374 [DEBUG] [Thread-52621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:24:21.374 [DEBUG] [Thread-52621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:24:21.383 [DEBUG] [Thread-52621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:24:21.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:24:21.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:24:21.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:24:21.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:24:21.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:24:21.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:24:21.418 [DEBUG] [Thread-52621] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:24:22.314 [DEBUG] [Thread-52623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:24:25.401 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:24:25.402 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:24:37.361 [DEBUG] [Thread-52624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:24:51.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:24:51.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:24:51.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:24:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 24, 42), 20.33, 25.03, 0.0, 19.48, 18.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:24:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:24:42
2025-11-17T10:24:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:24:52.353 [DEBUG] [Thread-52625] [transport.py] [_log()] starting thread (client mode): 0xd07ce5c0
2025-11-17T10:24:52.353 [DEBUG] [Thread-52625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:24:52.373 [DEBUG] [Thread-52625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:24:52.373 [INFO] [Thread-52625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:24:52.376 [DEBUG] [Thread-52625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] client lang: <none>
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] server lang: <none>
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] kex follows: False
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] Compression: none
2025-11-17T10:24:52.377 [DEBUG] [Thread-52625] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:24:52.390 [DEBUG] [Thread-52627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:24:52.396 [DEBUG] [Thread-52625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:24:52.396 [DEBUG] [Thread-52625] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:24:52.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:24:52.397 [DEBUG] [Thread-52625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:24:52.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:24:52.400 [DEBUG] [Thread-52625] [transport.py] [_log()] userauth is OK
2025-11-17T10:24:52.400 [DEBUG] [Thread-52625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:24:52.400 [DEBUG] [Thread-52625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:24:52.400 [DEBUG] [Thread-52625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:24:52.400 [DEBUG] [Thread-52625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:24:52.444 [INFO] [Thread-52625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:24:52.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:24:53.088 [DEBUG] [Thread-52625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:24:53.088 [DEBUG] [Thread-52625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:24:53.088 [DEBUG] [Thread-52625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:24:53.128 [DEBUG] [Thread-52625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:24:53.129 [DEBUG] [Thread-52625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:24:53.132 [DEBUG] [Thread-52625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:24:53.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:24:53.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:24:53.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:24:53.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:24:53.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:24:53.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:24:53.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:24:53.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:24:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:24:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.350049 -999.00  +18.10  19.16     31   +1.10 1 1 1 1 1   888    0 17.56 39.00 ----- 19.2 19.2 114.0 25.3 25.0 -27.8 24.7 -25.0 23.6 -25.9 24.2 -25.7
2025-11-17T10:24:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:24:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:24:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.350049
2025-11-17T10:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:24:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:24:42', tmtdew=20.33, humidity=25.03, cloud=0.0, wind=19.48, temperature=18.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:24:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:24:53.155 [DEBUG] [Thread-52625] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:24:53.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:24:53.252 [DEBUG] [Thread-52629] [transport.py] [_log()] starting thread (client mode): 0xd0712f50
2025-11-17T10:24:53.253 [DEBUG] [Thread-52629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:24:53.269 [DEBUG] [Thread-52629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:24:53.269 [INFO] [Thread-52629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:24:53.276 [DEBUG] [Thread-52629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] client lang: <none>
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] server lang: <none>
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] kex follows: False
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:24:53.277 [DEBUG] [Thread-52629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:24:53.278 [DEBUG] [Thread-52629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:24:53.278 [DEBUG] [Thread-52629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:24:53.278 [DEBUG] [Thread-52629] [transport.py] [_log()] Compression: none
2025-11-17T10:24:53.278 [DEBUG] [Thread-52629] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:24:53.336 [DEBUG] [Thread-52629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:24:53.336 [DEBUG] [Thread-52629] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:24:53.337 [DEBUG] [Thread-52629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:24:53.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:24:53.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:24:53.392 [DEBUG] [Thread-52629] [transport.py] [_log()] userauth is OK
2025-11-17T10:24:53.392 [DEBUG] [Thread-52629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:24:53.393 [DEBUG] [Thread-52629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:24:53.393 [DEBUG] [Thread-52629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:24:53.393 [DEBUG] [Thread-52629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:24:53.412 [INFO] [Thread-52629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:24:53.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:24:53.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:24:54.294 [DEBUG] [Thread-52629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:24:54.294 [DEBUG] [Thread-52629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:24:54.342 [DEBUG] [Thread-52629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:24:54.342 [DEBUG] [Thread-52629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:24:54.351 [DEBUG] [Thread-52629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:24:54.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:24:54.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')
2025-11-17T10:24: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') -> 00000000
2025-11-17T10:24:54.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:24:54.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:24:54.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:24:54.388 [DEBUG] [Thread-52629] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:25:03.432 [DEBUG] [Thread-52631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:25:07.423 [DEBUG] [Thread-52632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:25:22.466 [DEBUG] [Thread-52633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:25:24.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:25:24.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:25:24.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
2025-11-17T10:25:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 25, 14), 20.39, 24.95, 0.0, 22.9, 18.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:25:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:25:14
2025-11-17T10:25:25.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:25:25.381 [DEBUG] [Thread-52634] [transport.py] [_log()] starting thread (client mode): 0xd3163c70
2025-11-17T10:25:25.381 [DEBUG] [Thread-52634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:25:25.401 [DEBUG] [Thread-52634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:25:25.401 [INFO] [Thread-52634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:25:25.404 [DEBUG] [Thread-52634] [transport.py] [_log()] client lang: <none>
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] server lang: <none>
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] kex follows: False
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] Compression: none
2025-11-17T10:25:25.405 [DEBUG] [Thread-52634] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:25:25.412 [DEBUG] [Thread-52634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:25:25.412 [DEBUG] [Thread-52634] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:25:25.412 [DEBUG] [Thread-52634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:25:25.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:25:25.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:25:25.413 [DEBUG] [Thread-52634] [transport.py] [_log()] userauth is OK
2025-11-17T10:25:25.413 [DEBUG] [Thread-52634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:25:25.413 [DEBUG] [Thread-52634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:25:25.413 [DEBUG] [Thread-52634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:25:25.413 [DEBUG] [Thread-52634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:25:25.427 [INFO] [Thread-52634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:25:25.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:25:25.545 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:25:25.546 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:25:26.002 [DEBUG] [Thread-52634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:25:26.002 [DEBUG] [Thread-52634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:25:26.002 [DEBUG] [Thread-52634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:25:26.043 [DEBUG] [Thread-52634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:25:26.043 [DEBUG] [Thread-52634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:25:26.045 [DEBUG] [Thread-52634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:25:26.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:25:26.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:25:26.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:25:26.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:25:26.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:25:26.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:25:26.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:25:26.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:25:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:25:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.350396 -999.00  +18.00  15.61     32   +1.20 1 1 1 1 1   888    0 17.74 43.07 ----- 15.6 15.6 109.2 22.6 25.1 -28.6 24.7 -24.8 23.6 -25.8 24.2 -25.3
2025-11-17T10:25:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:25:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:25:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.350396
2025-11-17T10:25:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:25:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:25:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:25:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:25:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:25:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:25:14', tmtdew=20.39, humidity=24.95, cloud=0.0, wind=22.9, temperature=18.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:24:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:25:26.066 [DEBUG] [Thread-52634] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:25:26.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:25:26.151 [DEBUG] [Thread-52637] [transport.py] [_log()] starting thread (client mode): 0xd07cc760
2025-11-17T10:25:26.151 [DEBUG] [Thread-52637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:25:26.166 [DEBUG] [Thread-52637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:25:26.166 [INFO] [Thread-52637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:25:26.173 [DEBUG] [Thread-52637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] client lang: <none>
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] server lang: <none>
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] kex follows: False
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] Compression: none
2025-11-17T10:25:26.174 [DEBUG] [Thread-52637] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:25:26.232 [DEBUG] [Thread-52637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:25:26.232 [DEBUG] [Thread-52637] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:25:26.232 [DEBUG] [Thread-52637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:25:26.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:25:26.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:25:26.289 [DEBUG] [Thread-52637] [transport.py] [_log()] userauth is OK
2025-11-17T10:25:26.289 [DEBUG] [Thread-52637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:25:26.289 [DEBUG] [Thread-52637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:25:26.289 [DEBUG] [Thread-52637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:25:26.289 [DEBUG] [Thread-52637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:25:26.307 [INFO] [Thread-52637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:25:26.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:25:26.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:25:27.178 [DEBUG] [Thread-52637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:25:27.178 [DEBUG] [Thread-52637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:25:27.225 [DEBUG] [Thread-52637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:25:27.226 [DEBUG] [Thread-52637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:25:27.236 [DEBUG] [Thread-52637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:25:27.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:25:27.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:25:27.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:25:27.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:25:27.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:25:27.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:25:27.274 [DEBUG] [Thread-52637] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:25:37.499 [DEBUG] [Thread-52639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:25:52.542 [DEBUG] [Thread-52640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:25:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:25:57.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:25:57.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:25:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 25, 46), 20.39, 25.28, 0.0, 13.29, 18.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:25:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:25:46
2025-11-17T10:25:58.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:25:58.240 [DEBUG] [Thread-52641] [transport.py] [_log()] starting thread (client mode): 0xd07cf5b0
2025-11-17T10:25:58.240 [DEBUG] [Thread-52641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:25:58.260 [DEBUG] [Thread-52641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:25:58.260 [INFO] [Thread-52641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:25:58.263 [DEBUG] [Thread-52641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] client lang: <none>
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] server lang: <none>
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] kex follows: False
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] Compression: none
2025-11-17T10:25:58.264 [DEBUG] [Thread-52641] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:25:58.283 [DEBUG] [Thread-52641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:25:58.283 [DEBUG] [Thread-52641] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:25:58.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:25:58.284 [DEBUG] [Thread-52641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:25:58.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:25:58.286 [DEBUG] [Thread-52641] [transport.py] [_log()] userauth is OK
2025-11-17T10:25:58.286 [DEBUG] [Thread-52641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:25:58.286 [DEBUG] [Thread-52641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:25:58.287 [DEBUG] [Thread-52641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:25:58.287 [DEBUG] [Thread-52641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:25:58.322 [INFO] [Thread-52641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:25:58.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:25:58.964 [DEBUG] [Thread-52641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:25:58.964 [DEBUG] [Thread-52641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:25:58.965 [DEBUG] [Thread-52641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:25:59.005 [DEBUG] [Thread-52641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:25:59.006 [DEBUG] [Thread-52641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:25:59.009 [DEBUG] [Thread-52641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:25:59.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:25:59.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:25:59.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:25:59.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:25:59.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:25:59.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:25:59.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:25:59.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:25:59.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:25:59.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.351090 -999.00  +17.60  13.65     32   +1.10 1 1 1 1 1   888    0 17.72 40.03 ----- 13.7 13.7 115.8 20.0 -999.0 -999.0 24.6 -24.6 23.6 -25.2 24.2 -24.5
2025-11-17T10:25:59.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:25:59.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:25:59.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.351090
2025-11-17T10:25:59.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:25:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:25:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:25:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:25:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:25:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:25:46', tmtdew=20.39, humidity=25.28, cloud=0.0, wind=13.29, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:25:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:25:59.036 [DEBUG] [Thread-52641] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:25:59.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:25:59.133 [DEBUG] [Thread-52644] [transport.py] [_log()] starting thread (client mode): 0xd07bf0a0
2025-11-17T10:25:59.133 [DEBUG] [Thread-52644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:25:59.148 [DEBUG] [Thread-52644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:25:59.149 [INFO] [Thread-52644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] client lang: <none>
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] server lang: <none>
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] kex follows: False
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:25:59.156 [DEBUG] [Thread-52644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:25:59.157 [DEBUG] [Thread-52644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:25:59.157 [DEBUG] [Thread-52644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:25:59.157 [DEBUG] [Thread-52644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:25:59.157 [DEBUG] [Thread-52644] [transport.py] [_log()] Compression: none
2025-11-17T10:25:59.157 [DEBUG] [Thread-52644] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:25:59.217 [DEBUG] [Thread-52644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:25:59.217 [DEBUG] [Thread-52644] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:25:59.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:25:59.218 [DEBUG] [Thread-52644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:25:59.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:25:59.272 [DEBUG] [Thread-52644] [transport.py] [_log()] userauth is OK
2025-11-17T10:25:59.273 [DEBUG] [Thread-52644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:25:59.273 [DEBUG] [Thread-52644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:25:59.273 [DEBUG] [Thread-52644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:25:59.273 [DEBUG] [Thread-52644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:25:59.297 [INFO] [Thread-52644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:25:59.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:25:59.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:26:00.155 [DEBUG] [Thread-52644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:26:00.155 [DEBUG] [Thread-52644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:26:00.203 [DEBUG] [Thread-52644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:26:00.203 [DEBUG] [Thread-52644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:26:00.211 [DEBUG] [Thread-52644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:26:00.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:26:00.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:26:00.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:26:00.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:26:00.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:26:00.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:26:00.242 [DEBUG] [Thread-52644] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:26:03.480 [DEBUG] [Thread-52646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:26:07.572 [DEBUG] [Thread-52647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:26:22.605 [DEBUG] [Thread-52648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:26:25.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:26:25.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:26:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:26:30.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:26:30.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:26:30.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 26, 18), 20.39, 25.27, 0.0, 10.76, 18.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:26:30.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:26:18
2025-11-17T10:26:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:26:31.165 [DEBUG] [Thread-52649] [transport.py] [_log()] starting thread (client mode): 0xd07cec50
2025-11-17T10:26:31.165 [DEBUG] [Thread-52649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:26:31.186 [DEBUG] [Thread-52649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:26:31.186 [INFO] [Thread-52649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] client lang: <none>
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] server lang: <none>
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] kex follows: False
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:26:31.189 [DEBUG] [Thread-52649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:26:31.190 [DEBUG] [Thread-52649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:26:31.190 [DEBUG] [Thread-52649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:26:31.190 [DEBUG] [Thread-52649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:26:31.190 [DEBUG] [Thread-52649] [transport.py] [_log()] Compression: none
2025-11-17T10:26:31.190 [DEBUG] [Thread-52649] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:26:31.206 [DEBUG] [Thread-52649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:26:31.207 [DEBUG] [Thread-52649] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:26:31.207 [DEBUG] [Thread-52649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:26:31.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:26:31.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:26:31.209 [DEBUG] [Thread-52649] [transport.py] [_log()] userauth is OK
2025-11-17T10:26:31.209 [DEBUG] [Thread-52649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:26:31.209 [DEBUG] [Thread-52649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:26:31.209 [DEBUG] [Thread-52649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:26:31.209 [DEBUG] [Thread-52649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:26:31.224 [INFO] [Thread-52649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:26:31.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:26:31.828 [DEBUG] [Thread-52649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:26:31.829 [DEBUG] [Thread-52649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:26:31.829 [DEBUG] [Thread-52649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:26:31.869 [DEBUG] [Thread-52649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:26:31.869 [DEBUG] [Thread-52649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:26:31.872 [DEBUG] [Thread-52649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:26:31.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:26:31.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:26:31.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:26:31.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:26:31.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:26:31.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:26:31.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:26:31.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:26:31.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:26:31.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.351438 -999.00  +17.60  12.17     32   +1.10 1 1 1 1 1   888    0 17.79 37.44 ----- 12.2 12.2 113.8 19.4 24.8 -28.9 24.6 -24.8 23.6 -24.4 24.2 -25.0
2025-11-17T10:26:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:26:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:26:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.351438
2025-11-17T10:26:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:26:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:26:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:26:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:26:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:26:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:26:18', tmtdew=20.39, humidity=25.27, cloud=0.0, wind=10.76, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:26:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:26:31.897 [DEBUG] [Thread-52649] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:26:31.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:26:31.995 [DEBUG] [Thread-52652] [transport.py] [_log()] starting thread (client mode): 0xd07cc2b0
2025-11-17T10:26:31.996 [DEBUG] [Thread-52652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:26:32.014 [DEBUG] [Thread-52652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:26:32.014 [INFO] [Thread-52652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] client lang: <none>
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] server lang: <none>
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] kex follows: False
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:26:32.024 [DEBUG] [Thread-52652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:26:32.025 [DEBUG] [Thread-52652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:26:32.025 [DEBUG] [Thread-52652] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:26:32.025 [DEBUG] [Thread-52652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:26:32.025 [DEBUG] [Thread-52652] [transport.py] [_log()] Compression: none
2025-11-17T10:26:32.025 [DEBUG] [Thread-52652] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:26:32.087 [DEBUG] [Thread-52652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:26:32.087 [DEBUG] [Thread-52652] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:26:32.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:26:32.088 [DEBUG] [Thread-52652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:26:32.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:26:32.150 [DEBUG] [Thread-52652] [transport.py] [_log()] userauth is OK
2025-11-17T10:26:32.150 [DEBUG] [Thread-52652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:26:32.150 [DEBUG] [Thread-52652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:26:32.150 [DEBUG] [Thread-52652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:26:32.150 [DEBUG] [Thread-52652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:26:32.173 [INFO] [Thread-52652] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:26:32.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:26:32.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:26:33.033 [DEBUG] [Thread-52652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:26:33.033 [DEBUG] [Thread-52652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:26:33.081 [DEBUG] [Thread-52652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:26:33.081 [DEBUG] [Thread-52652] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:26:33.091 [DEBUG] [Thread-52652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:26:33.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:26:33.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:26:33.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:26:33.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:26:33.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:26:33.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:26:33.131 [DEBUG] [Thread-52652] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:26:37.638 [DEBUG] [Thread-52654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:26:52.689 [DEBUG] [Thread-52655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:27:03.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:27:03.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:27:03.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:27:03.531 [DEBUG] [Thread-52656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:27:03.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 26, 50), 19.89, 26.13, 0.0, 9.32, 18.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:27:03.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:26:50
2025-11-17T10:27:03.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:27:04.090 [DEBUG] [Thread-52657] [transport.py] [_log()] starting thread (client mode): 0xd7bc7a30
2025-11-17T10:27:04.090 [DEBUG] [Thread-52657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:27:04.110 [DEBUG] [Thread-52657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:27:04.110 [INFO] [Thread-52657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:27:04.113 [DEBUG] [Thread-52657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:27:04.113 [DEBUG] [Thread-52657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:27:04.113 [DEBUG] [Thread-52657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] client lang: <none>
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] server lang: <none>
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] kex follows: False
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] Compression: none
2025-11-17T10:27:04.114 [DEBUG] [Thread-52657] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:27:04.133 [DEBUG] [Thread-52657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:27:04.134 [DEBUG] [Thread-52657] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:27:04.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:27:04.135 [DEBUG] [Thread-52657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:27:04.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:27:04.137 [DEBUG] [Thread-52657] [transport.py] [_log()] userauth is OK
2025-11-17T10:27:04.137 [DEBUG] [Thread-52657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:27:04.137 [DEBUG] [Thread-52657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:27:04.137 [DEBUG] [Thread-52657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:27:04.137 [DEBUG] [Thread-52657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:27:04.161 [INFO] [Thread-52657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:27:04.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:27:04.806 [DEBUG] [Thread-52657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:27:04.807 [DEBUG] [Thread-52657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:27:04.807 [DEBUG] [Thread-52657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:27:04.847 [DEBUG] [Thread-52657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:27:04.847 [DEBUG] [Thread-52657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:27:04.850 [DEBUG] [Thread-52657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:27:04.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:27:04.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:27:04.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:27:04.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:27:04.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:27:04.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:27:04.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:27:04.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:27:04.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:27:04.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.351785 -999.00  +17.60  11.12     33   +1.20 1 1 1 1 1   888    0 17.36 35.32 ----- 11.1 11.1 88.3 16.6 25.1 -25.9 24.6 -25.4 23.7 -24.0 24.4 -24.4
2025-11-17T10:27:04.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:27:04.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:27:04.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.351785
2025-11-17T10:27:04.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:27:04.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:27:04.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:27:04.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:27:04.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:27:04.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:26:50', tmtdew=19.89, humidity=26.13, cloud=0.0, wind=9.32, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:26:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:27:04.875 [DEBUG] [Thread-52657] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:27:04.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:27:04.971 [DEBUG] [Thread-52660] [transport.py] [_log()] starting thread (client mode): 0xd3161f30
2025-11-17T10:27:04.971 [DEBUG] [Thread-52660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:27:04.986 [DEBUG] [Thread-52660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:27:04.987 [INFO] [Thread-52660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:27:04.994 [DEBUG] [Thread-52660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:27:04.994 [DEBUG] [Thread-52660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] client lang: <none>
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] server lang: <none>
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] kex follows: False
2025-11-17T10:27:04.995 [DEBUG] [Thread-52660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:27:04.996 [DEBUG] [Thread-52660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:27:04.996 [DEBUG] [Thread-52660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:27:04.996 [DEBUG] [Thread-52660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:27:04.996 [DEBUG] [Thread-52660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:27:04.996 [DEBUG] [Thread-52660] [transport.py] [_log()] Compression: none
2025-11-17T10:27:04.996 [DEBUG] [Thread-52660] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:27:05.053 [DEBUG] [Thread-52660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:27:05.054 [DEBUG] [Thread-52660] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:27:05.054 [DEBUG] [Thread-52660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:27:05.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:27:05.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:27:05.109 [DEBUG] [Thread-52660] [transport.py] [_log()] userauth is OK
2025-11-17T10:27:05.109 [DEBUG] [Thread-52660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:27:05.109 [DEBUG] [Thread-52660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:27:05.110 [DEBUG] [Thread-52660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:27:05.110 [DEBUG] [Thread-52660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:27:05.131 [INFO] [Thread-52660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:27:05.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:27:05.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:27:06.001 [DEBUG] [Thread-52660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:27:06.001 [DEBUG] [Thread-52660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:27:06.049 [DEBUG] [Thread-52660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:27:06.049 [DEBUG] [Thread-52660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:27:06.058 [DEBUG] [Thread-52660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:27:06.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:27:06.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:27:06.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:27:06.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:27:06.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:27:06.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:27:06.092 [DEBUG] [Thread-52660] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:27:07.717 [DEBUG] [Thread-52662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:27:22.753 [DEBUG] [Thread-52663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:27:25.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:27:25.829 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:27:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:27:36.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:27:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:27:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 27, 22), 19.9, 26.16, 0.0, 10.94, 18.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:27:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:27:22
2025-11-17T10:27:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:27:37.010 [DEBUG] [Thread-52664] [transport.py] [_log()] starting thread (client mode): 0xd3161f90
2025-11-17T10:27:37.010 [DEBUG] [Thread-52664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:27:37.029 [DEBUG] [Thread-52664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:27:37.029 [INFO] [Thread-52664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:27:37.032 [DEBUG] [Thread-52664] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:27:37.032 [DEBUG] [Thread-52664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] client lang: <none>
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] server lang: <none>
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] kex follows: False
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:27:37.033 [DEBUG] [Thread-52664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:27:37.034 [DEBUG] [Thread-52664] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:27:37.034 [DEBUG] [Thread-52664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:27:37.034 [DEBUG] [Thread-52664] [transport.py] [_log()] Compression: none
2025-11-17T10:27:37.034 [DEBUG] [Thread-52664] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:27:37.043 [DEBUG] [Thread-52664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:27:37.044 [DEBUG] [Thread-52664] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:27:37.045 [DEBUG] [Thread-52664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:27:37.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:27:37.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:27:37.047 [DEBUG] [Thread-52664] [transport.py] [_log()] userauth is OK
2025-11-17T10:27:37.047 [DEBUG] [Thread-52664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:27:37.047 [DEBUG] [Thread-52664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:27:37.047 [DEBUG] [Thread-52664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:27:37.047 [DEBUG] [Thread-52664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:27:37.064 [INFO] [Thread-52664] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:27:37.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:27:37.692 [DEBUG] [Thread-52664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:27:37.692 [DEBUG] [Thread-52664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:27:37.693 [DEBUG] [Thread-52664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:27:37.734 [DEBUG] [Thread-52664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:27:37.734 [DEBUG] [Thread-52664] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:27:37.737 [DEBUG] [Thread-52664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:27:37.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:27:37.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:27:37.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:27:37.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:27:37.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:27:37.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:27:37.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:27:37.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:27:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:27:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.352132 -999.00  +17.60  12.27     32   +1.00 1 1 1 1 1   888    0 17.36 33.89 ----- 12.3 12.3 116.8 22.4 25.1 -26.3 24.7 -24.6 23.7 -24.8 24.3 -24.7
2025-11-17T10:27:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:27:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:27:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.352132
2025-11-17T10:27:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:27:37.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:27:37.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:27:37.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:27:37.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:27:37.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:27:22', tmtdew=19.9, humidity=26.16, cloud=0.0, wind=10.94, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:27:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:27:37.765 [DEBUG] [Thread-52664] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:27:37.781 [DEBUG] [Thread-52667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:27:37.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:27:52.819 [DEBUG] [Thread-52668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:28:03.583 [DEBUG] [Thread-52669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:28:07.846 [DEBUG] [Thread-52670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:28:22.876 [DEBUG] [Thread-52671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:28:25.969 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:28:25.970 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:28:37.902 [DEBUG] [Thread-52672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:28:52.930 [DEBUG] [Thread-52673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:29:03.623 [DEBUG] [Thread-52674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:29:07.962 [DEBUG] [Thread-52675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:29:22.992 [DEBUG] [Thread-52676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:29:26.111 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:29:26.112 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:29:38.023 [DEBUG] [Thread-52677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:29:50.651 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T10:29:53.053 [DEBUG] [Thread-52678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:30:03.675 [DEBUG] [Thread-52679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:30:08.078 [DEBUG] [Thread-52680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:30:20.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:30:20.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:30:20.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:30:21.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 30, 2), 20.05, 25.78, 0.0, 11.19, 18.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:30:21.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:30:02
2025-11-17T10:30:21.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:30:21.602 [DEBUG] [Thread-52681] [transport.py] [_log()] starting thread (client mode): 0xd7bc78b0
2025-11-17T10:30:21.602 [DEBUG] [Thread-52681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:30:21.622 [DEBUG] [Thread-52681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:30:21.622 [INFO] [Thread-52681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] client lang: <none>
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] server lang: <none>
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] kex follows: False
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] Compression: none
2025-11-17T10:30:21.625 [DEBUG] [Thread-52681] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:30:21.643 [DEBUG] [Thread-52681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:30:21.643 [DEBUG] [Thread-52681] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:30:21.644 [DEBUG] [Thread-52681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:30:21.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:30:21.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:30:21.646 [DEBUG] [Thread-52681] [transport.py] [_log()] userauth is OK
2025-11-17T10:30:21.646 [DEBUG] [Thread-52681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:30:21.646 [DEBUG] [Thread-52681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:30:21.646 [DEBUG] [Thread-52681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:30:21.646 [DEBUG] [Thread-52681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:30:21.670 [INFO] [Thread-52681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:30:21.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:30:22.324 [DEBUG] [Thread-52681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:30:22.325 [DEBUG] [Thread-52681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:30:22.325 [DEBUG] [Thread-52681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:30:22.365 [DEBUG] [Thread-52681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:30:22.365 [DEBUG] [Thread-52681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:30:22.368 [DEBUG] [Thread-52681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:30:22.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:30:22.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:30:22.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:30:22.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:30:22.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:30:22.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:30:22.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:30:22.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:30:22.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:30:22.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.354215 -999.00  +17.60  20.54     32   +1.10 1 1 1 1 1   888    0 16.90 17.98 ----- 20.5 20.5 58.2 26.0 25.1 -25.3 24.8 -25.3 23.8 -27.0 24.4 -25.5
2025-11-17T10:30:22.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:30:22.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:30:22.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.354215
2025-11-17T10:30:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:30:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:30:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:30:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:30:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:30:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:30:02', tmtdew=20.05, humidity=25.78, cloud=0.0, wind=11.19, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:30:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:30:22.394 [DEBUG] [Thread-52681] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:30:22.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:30:22.493 [DEBUG] [Thread-52684] [transport.py] [_log()] starting thread (client mode): 0xd3161060
2025-11-17T10:30:22.494 [DEBUG] [Thread-52684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:30:22.509 [DEBUG] [Thread-52684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:30:22.509 [INFO] [Thread-52684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:30:22.516 [DEBUG] [Thread-52684] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:30:22.516 [DEBUG] [Thread-52684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:30:22.516 [DEBUG] [Thread-52684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:30:22.516 [DEBUG] [Thread-52684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] client lang: <none>
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] server lang: <none>
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] kex follows: False
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] Compression: none
2025-11-17T10:30:22.517 [DEBUG] [Thread-52684] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:30:22.577 [DEBUG] [Thread-52684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:30:22.578 [DEBUG] [Thread-52684] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:30:22.578 [DEBUG] [Thread-52684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:30:22.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:30:22.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:30:22.638 [DEBUG] [Thread-52684] [transport.py] [_log()] userauth is OK
2025-11-17T10:30:22.638 [DEBUG] [Thread-52684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:30:22.638 [DEBUG] [Thread-52684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:30:22.638 [DEBUG] [Thread-52684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:30:22.638 [DEBUG] [Thread-52684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:30:22.661 [INFO] [Thread-52684] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:30:22.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:30:22.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:30:23.110 [DEBUG] [Thread-52686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:30:23.531 [DEBUG] [Thread-52684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:30:23.531 [DEBUG] [Thread-52684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:30:23.579 [DEBUG] [Thread-52684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:30:23.579 [DEBUG] [Thread-52684] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:30:23.591 [DEBUG] [Thread-52684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:30:23.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:30:23.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:30:23.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:30:23.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:30:23.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:30:23.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:30:23.626 [DEBUG] [Thread-52684] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:30:26.253 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:30:26.254 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:30:38.153 [DEBUG] [Thread-52687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:30:53.184 [DEBUG] [Thread-52688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:30:53.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:30:53.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:30:53.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:30:54.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 30, 34), 22.16, 22.46, 0.0, 9.46, 20.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:30:54.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:30:34
2025-11-17T10:30:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:30:54.554 [DEBUG] [Thread-52689] [transport.py] [_log()] starting thread (client mode): 0xd0713280
2025-11-17T10:30:54.554 [DEBUG] [Thread-52689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:30:54.567 [DEBUG] [Thread-52689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:30:54.567 [INFO] [Thread-52689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] client lang: <none>
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] server lang: <none>
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] kex follows: False
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] Compression: none
2025-11-17T10:30:54.571 [DEBUG] [Thread-52689] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:30:54.585 [DEBUG] [Thread-52689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:30:54.586 [DEBUG] [Thread-52689] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:30:54.586 [DEBUG] [Thread-52689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:30:54.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:30:54.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:30:54.587 [DEBUG] [Thread-52689] [transport.py] [_log()] userauth is OK
2025-11-17T10:30:54.587 [DEBUG] [Thread-52689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:30:54.587 [DEBUG] [Thread-52689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:30:54.587 [DEBUG] [Thread-52689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:30:54.587 [DEBUG] [Thread-52689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:30:54.601 [INFO] [Thread-52689] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:30:54.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:30:55.285 [DEBUG] [Thread-52689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:30:55.285 [DEBUG] [Thread-52689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:30:55.285 [DEBUG] [Thread-52689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:30:55.326 [DEBUG] [Thread-52689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:30:55.327 [DEBUG] [Thread-52689] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:30:55.330 [DEBUG] [Thread-52689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:30:55.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:30:55.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:30:55.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:30:55.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:30:55.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:30:55.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:30:55.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:30:55.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:30:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:30:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.354563 -999.00  +17.40   9.62     33   +1.10 1 1 1 1 1   888    0 16.92 17.01 ----- 9.6 9.6 26.6 15.7 25.3 -24.9 24.7 -25.3 23.8 -23.5 24.5 -24.2
2025-11-17T10:30:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:30:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:30:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.354563
2025-11-17T10:30:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:30:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:30:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:30:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:30:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:30:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:30:34', tmtdew=22.16, humidity=22.46, cloud=0.0, wind=9.46, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:30:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:30:55.357 [DEBUG] [Thread-52689] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:30:55.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:30:55.453 [DEBUG] [Thread-52692] [transport.py] [_log()] starting thread (client mode): 0xd31378e0
2025-11-17T10:30:55.453 [DEBUG] [Thread-52692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:30:55.468 [DEBUG] [Thread-52692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:30:55.468 [INFO] [Thread-52692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] client lang: <none>
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] server lang: <none>
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] kex follows: False
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:30:55.476 [DEBUG] [Thread-52692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:30:55.477 [DEBUG] [Thread-52692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:30:55.477 [DEBUG] [Thread-52692] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:30:55.477 [DEBUG] [Thread-52692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:30:55.477 [DEBUG] [Thread-52692] [transport.py] [_log()] Compression: none
2025-11-17T10:30:55.477 [DEBUG] [Thread-52692] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:30:55.539 [DEBUG] [Thread-52692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:30:55.539 [DEBUG] [Thread-52692] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:30:55.540 [DEBUG] [Thread-52692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:30:55.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:30:55.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:30:55.598 [DEBUG] [Thread-52692] [transport.py] [_log()] userauth is OK
2025-11-17T10:30:55.598 [DEBUG] [Thread-52692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:30:55.598 [DEBUG] [Thread-52692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:30:55.598 [DEBUG] [Thread-52692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:30:55.598 [DEBUG] [Thread-52692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:30:55.617 [INFO] [Thread-52692] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:30:55.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:30:55.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:30:56.458 [DEBUG] [Thread-52692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:30:56.459 [DEBUG] [Thread-52692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:30:56.509 [DEBUG] [Thread-52692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:30:56.509 [DEBUG] [Thread-52692] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:30:56.518 [DEBUG] [Thread-52692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:30:56.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:30:56.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:30: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') -> 00000000
2025-11-17T10:30:56.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:30:56.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:30:56.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:30:56.554 [DEBUG] [Thread-52692] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:31:03.726 [DEBUG] [Thread-52694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:31:08.218 [DEBUG] [Thread-52695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:31:23.255 [DEBUG] [Thread-52696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:31:26.396 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:31:26.397 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:31:26.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:31:26.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:31:26.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:31:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 31, 6), 20.18, 25.4, 0.0, 14.03, 18.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:31:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:31:06
2025-11-17T10:31:27.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:31:27.510 [DEBUG] [Thread-52697] [transport.py] [_log()] starting thread (client mode): 0xd3160160
2025-11-17T10:31:27.510 [DEBUG] [Thread-52697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:31:27.531 [DEBUG] [Thread-52697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:31:27.531 [INFO] [Thread-52697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] client lang: <none>
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] server lang: <none>
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] kex follows: False
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:31:27.534 [DEBUG] [Thread-52697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:31:27.535 [DEBUG] [Thread-52697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:31:27.535 [DEBUG] [Thread-52697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:31:27.535 [DEBUG] [Thread-52697] [transport.py] [_log()] Compression: none
2025-11-17T10:31:27.535 [DEBUG] [Thread-52697] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:31:27.551 [DEBUG] [Thread-52697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:31:27.551 [DEBUG] [Thread-52697] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:31:27.552 [DEBUG] [Thread-52697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:31:27.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:31:27.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:31:27.554 [DEBUG] [Thread-52697] [transport.py] [_log()] userauth is OK
2025-11-17T10:31:27.554 [DEBUG] [Thread-52697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:31:27.554 [DEBUG] [Thread-52697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:31:27.554 [DEBUG] [Thread-52697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:31:27.554 [DEBUG] [Thread-52697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:31:27.580 [INFO] [Thread-52697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:31:27.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:31:28.183 [DEBUG] [Thread-52697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:31:28.184 [DEBUG] [Thread-52697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:31:28.184 [DEBUG] [Thread-52697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:31:28.224 [DEBUG] [Thread-52697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:31:28.224 [DEBUG] [Thread-52697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:31:28.226 [DEBUG] [Thread-52697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:31:28.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:31:28.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:31:28.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:31:28.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:31:28.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:31:28.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:31:28.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:31:28.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:31:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:31:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.354910 -999.00  +17.30   6.31     33   +1.00 1 1 1 1 1   888    0 17.00 16.53 ----- 6.3 6.3 360.0 12.0 25.6 -24.5 24.8 -25.2 24.0 -24.1 24.6 -23.6
2025-11-17T10:31:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:31:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:31:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.354910
2025-11-17T10:31:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:31:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:31:28.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:31:28.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:31:28.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:31:28.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:31:06', tmtdew=20.18, humidity=25.4, cloud=0.0, wind=14.03, temperature=18.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:31:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:31:28.251 [DEBUG] [Thread-52697] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:31:28.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:31:28.366 [DEBUG] [Thread-52700] [transport.py] [_log()] starting thread (client mode): 0xd07cfb20
2025-11-17T10:31:28.367 [DEBUG] [Thread-52700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:31:28.389 [DEBUG] [Thread-52700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:31:28.389 [INFO] [Thread-52700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:31:28.397 [DEBUG] [Thread-52700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] client lang: <none>
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] server lang: <none>
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] kex follows: False
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] Compression: none
2025-11-17T10:31:28.398 [DEBUG] [Thread-52700] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:31:28.464 [DEBUG] [Thread-52700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:31:28.465 [DEBUG] [Thread-52700] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:31:28.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:31:28.465 [DEBUG] [Thread-52700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:31:28.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:31:28.526 [DEBUG] [Thread-52700] [transport.py] [_log()] userauth is OK
2025-11-17T10:31:28.526 [DEBUG] [Thread-52700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:31:28.526 [DEBUG] [Thread-52700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:31:28.526 [DEBUG] [Thread-52700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:31:28.526 [DEBUG] [Thread-52700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:31:28.766 [INFO] [Thread-52700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:31:28.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:31:28.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:31:29.470 [DEBUG] [Thread-52700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:31:29.471 [DEBUG] [Thread-52700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:31:29.518 [DEBUG] [Thread-52700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:31:29.518 [DEBUG] [Thread-52700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:31:29.527 [DEBUG] [Thread-52700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:31:29.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:31:29.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:31:29.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:31:29.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:31:29.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:31:29.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:31:29.564 [DEBUG] [Thread-52700] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:31:38.284 [DEBUG] [Thread-52702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:31:53.322 [DEBUG] [Thread-52703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:31:59.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:31:59.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:31: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
2025-11-17T10:32:00.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 31, 38), 19.95, 25.95, 0.0, 10.0, 18.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:32:00.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:31:38
2025-11-17T10:32:00.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:32:00.523 [DEBUG] [Thread-52704] [transport.py] [_log()] starting thread (client mode): 0xd0712b60
2025-11-17T10:32:00.523 [DEBUG] [Thread-52704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:32:00.542 [DEBUG] [Thread-52704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:32:00.542 [INFO] [Thread-52704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] client lang: <none>
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] server lang: <none>
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] kex follows: False
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:32:00.545 [DEBUG] [Thread-52704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:32:00.546 [DEBUG] [Thread-52704] [transport.py] [_log()] Compression: none
2025-11-17T10:32:00.546 [DEBUG] [Thread-52704] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:32:00.554 [DEBUG] [Thread-52704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:32:00.554 [DEBUG] [Thread-52704] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:32:00.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:32:00.556 [DEBUG] [Thread-52704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:32:00.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:32:00.557 [DEBUG] [Thread-52704] [transport.py] [_log()] userauth is OK
2025-11-17T10:32:00.557 [DEBUG] [Thread-52704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:32:00.557 [DEBUG] [Thread-52704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:32:00.557 [DEBUG] [Thread-52704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:32:00.558 [DEBUG] [Thread-52704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:32:00.577 [INFO] [Thread-52704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:32:00.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:32:01.203 [DEBUG] [Thread-52704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:32:01.204 [DEBUG] [Thread-52704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:32:01.204 [DEBUG] [Thread-52704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:32:01.244 [DEBUG] [Thread-52704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:32:01.244 [DEBUG] [Thread-52704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:32:01.247 [DEBUG] [Thread-52704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:32:01.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:32:01.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:32:01.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:32:01.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:32:01.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:32:01.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:32:01.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:32:01.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:32:01.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:32:01.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.355257 -999.00  +17.40   8.23     33   +1.20 1 1 1 1 1   888    0 16.99 14.89 ----- 8.2 8.2 118.8 12.9 25.8 -24.3 24.9 -23.7 24.1 -23.6 24.7 -24.0
2025-11-17T10:32:01.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:32:01.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:32:01.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.355257
2025-11-17T10:32:01.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:32:01.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:32:01.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:32:01.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:32:01.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:32:01.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:31:38', tmtdew=19.95, humidity=25.95, cloud=0.0, wind=10.0, temperature=18.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:31:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:32:01.272 [DEBUG] [Thread-52704] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:32:01.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:32:01.372 [DEBUG] [Thread-52707] [transport.py] [_log()] starting thread (client mode): 0xd317efb0
2025-11-17T10:32:01.372 [DEBUG] [Thread-52707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:32:01.387 [DEBUG] [Thread-52707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:32:01.388 [INFO] [Thread-52707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] client lang: <none>
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] server lang: <none>
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] kex follows: False
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] Compression: none
2025-11-17T10:32:01.396 [DEBUG] [Thread-52707] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:32:01.463 [DEBUG] [Thread-52707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:32:01.463 [DEBUG] [Thread-52707] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:32:01.463 [DEBUG] [Thread-52707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:32:01.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:32:01.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:32:01.526 [DEBUG] [Thread-52707] [transport.py] [_log()] userauth is OK
2025-11-17T10:32:01.526 [DEBUG] [Thread-52707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:32:01.526 [DEBUG] [Thread-52707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:32:01.526 [DEBUG] [Thread-52707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:32:01.526 [DEBUG] [Thread-52707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:32:01.545 [INFO] [Thread-52707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:32:01.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:32:01.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:32:02.429 [DEBUG] [Thread-52707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:32:02.429 [DEBUG] [Thread-52707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:32:02.476 [DEBUG] [Thread-52707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:32:02.476 [DEBUG] [Thread-52707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:32:02.485 [DEBUG] [Thread-52707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:32:02.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:32:02.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:32:02.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:32:02.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:32:02.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:32:02.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:32:02.524 [DEBUG] [Thread-52707] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:32:03.788 [DEBUG] [Thread-52709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:32:08.353 [DEBUG] [Thread-52710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:32:23.403 [DEBUG] [Thread-52711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:32:26.537 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:32:26.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:32:32.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:32:32.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:32:32.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:32:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 32, 10), 19.72, 26.25, 0.0, 12.14, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:32:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:32:10
2025-11-17T10:32:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:32:33.466 [DEBUG] [Thread-52712] [transport.py] [_log()] starting thread (client mode): 0xd07be6b0
2025-11-17T10:32:33.466 [DEBUG] [Thread-52712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:32:33.487 [DEBUG] [Thread-52712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:32:33.488 [INFO] [Thread-52712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] client lang: <none>
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] server lang: <none>
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] kex follows: False
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] Compression: none
2025-11-17T10:32:33.489 [DEBUG] [Thread-52712] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:32:33.498 [DEBUG] [Thread-52712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:32:33.498 [DEBUG] [Thread-52712] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:32:33.499 [DEBUG] [Thread-52712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:32:33.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:32:33.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:32:33.500 [DEBUG] [Thread-52712] [transport.py] [_log()] userauth is OK
2025-11-17T10:32:33.500 [DEBUG] [Thread-52712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:32:33.500 [DEBUG] [Thread-52712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:32:33.500 [DEBUG] [Thread-52712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:32:33.500 [DEBUG] [Thread-52712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:32:33.523 [INFO] [Thread-52712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:32:33.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:32:34.111 [DEBUG] [Thread-52712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:32:34.111 [DEBUG] [Thread-52712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:32:34.111 [DEBUG] [Thread-52712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:32:34.151 [DEBUG] [Thread-52712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:32:34.151 [DEBUG] [Thread-52712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:32:34.156 [DEBUG] [Thread-52712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:32:34.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:32:34.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:32:34.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:32:34.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:32:34.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:32:34.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:32:34.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:32:34.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:32:34.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:32:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.355604 -999.00  +17.80  10.65     33   +1.30 1 1 1 1 1   888    0 16.92 14.16 ----- 10.7 10.7 122.8 16.2 25.8 -24.7 25.1 -24.4 24.1 -23.8 24.8 -24.6
2025-11-17T10:32:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:32:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:32:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.355604
2025-11-17T10:32:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:32:34.179 [DEBUG] [Thread-52712] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:32:34.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:32:34.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:32:34.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:32:34.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:32:34.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:32:10', tmtdew=19.72, humidity=26.25, cloud=0.0, wind=12.14, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:32:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:32:34.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:32:34.276 [DEBUG] [Thread-52715] [transport.py] [_log()] starting thread (client mode): 0xd07cf2e0
2025-11-17T10:32:34.276 [DEBUG] [Thread-52715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:32:34.292 [DEBUG] [Thread-52715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:32:34.292 [INFO] [Thread-52715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:32:34.299 [DEBUG] [Thread-52715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] client lang: <none>
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] server lang: <none>
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] kex follows: False
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:32:34.300 [DEBUG] [Thread-52715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:32:34.301 [DEBUG] [Thread-52715] [transport.py] [_log()] Compression: none
2025-11-17T10:32:34.301 [DEBUG] [Thread-52715] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:32:34.357 [DEBUG] [Thread-52715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:32:34.358 [DEBUG] [Thread-52715] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:32:34.358 [DEBUG] [Thread-52715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:32:34.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:32:34.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:32:34.414 [DEBUG] [Thread-52715] [transport.py] [_log()] userauth is OK
2025-11-17T10:32:34.414 [DEBUG] [Thread-52715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:32:34.414 [DEBUG] [Thread-52715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:32:34.414 [DEBUG] [Thread-52715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:32:34.414 [DEBUG] [Thread-52715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:32:34.437 [INFO] [Thread-52715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:32:34.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:32:34.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:32:35.319 [DEBUG] [Thread-52715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:32:35.319 [DEBUG] [Thread-52715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:32:35.367 [DEBUG] [Thread-52715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:32:35.367 [DEBUG] [Thread-52715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:32:35.376 [DEBUG] [Thread-52715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:32:35.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:32:35.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:32:35.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:32:35.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:32:35.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:32:35.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:32:35.411 [DEBUG] [Thread-52715] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:32:38.437 [DEBUG] [Thread-52717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:32:53.491 [DEBUG] [Thread-52718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:33:03.837 [DEBUG] [Thread-52719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:33:05.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:33:05.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:33:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:33:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 32, 42), 20.0, 25.58, 0.0, 18.44, 18.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:33:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:32:42
2025-11-17T10:33:06.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:33:06.432 [DEBUG] [Thread-52720] [transport.py] [_log()] starting thread (client mode): 0xd07bfeb0
2025-11-17T10:33:06.433 [DEBUG] [Thread-52720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:33:06.448 [DEBUG] [Thread-52720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:33:06.448 [INFO] [Thread-52720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] client lang: <none>
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] server lang: <none>
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] kex follows: False
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] Compression: none
2025-11-17T10:33:06.450 [DEBUG] [Thread-52720] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:33:06.462 [DEBUG] [Thread-52720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:33:06.463 [DEBUG] [Thread-52720] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:33:06.463 [DEBUG] [Thread-52720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:33:06.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:33:06.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:33:06.463 [DEBUG] [Thread-52720] [transport.py] [_log()] userauth is OK
2025-11-17T10:33:06.464 [DEBUG] [Thread-52720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:33:06.464 [DEBUG] [Thread-52720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:33:06.464 [DEBUG] [Thread-52720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:33:06.464 [DEBUG] [Thread-52720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:33:06.476 [INFO] [Thread-52720] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:33:06.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:33:07.143 [DEBUG] [Thread-52720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:33:07.143 [DEBUG] [Thread-52720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:33:07.143 [DEBUG] [Thread-52720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:33:07.184 [DEBUG] [Thread-52720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:33:07.184 [DEBUG] [Thread-52720] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:33:07.187 [DEBUG] [Thread-52720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:33:07.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:33:07.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:33:07.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:33:07.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:33:07.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:33:07.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:33:07.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.355951 -999.00  +18.00   7.62     32   +1.20 1 1 1 1 1   888    0 16.97 14.28 ----- 7.6 7.6 101.6 12.8 25.9 -25.2 25.2 -23.7 24.3 -22.7 24.9 -23.8
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.355951
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:33:07.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:33:07.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:32:42', tmtdew=20.0, humidity=25.58, cloud=0.0, wind=18.44, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:32:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:33:07.207 [DEBUG] [Thread-52720] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:33:07.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:33:07.293 [DEBUG] [Thread-52723] [transport.py] [_log()] starting thread (client mode): 0xd3137970
2025-11-17T10:33:07.294 [DEBUG] [Thread-52723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:33:07.308 [DEBUG] [Thread-52723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:33:07.308 [INFO] [Thread-52723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] client lang: <none>
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] server lang: <none>
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] kex follows: False
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] Compression: none
2025-11-17T10:33:07.316 [DEBUG] [Thread-52723] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:33:07.372 [DEBUG] [Thread-52723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:33:07.372 [DEBUG] [Thread-52723] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:33:07.373 [DEBUG] [Thread-52723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:33:07.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:33:07.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:33:07.429 [DEBUG] [Thread-52723] [transport.py] [_log()] userauth is OK
2025-11-17T10:33:07.430 [DEBUG] [Thread-52723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:33:07.430 [DEBUG] [Thread-52723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:33:07.430 [DEBUG] [Thread-52723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:33:07.430 [DEBUG] [Thread-52723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:33:07.444 [INFO] [Thread-52723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:33:07.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:33:07.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:33:08.366 [DEBUG] [Thread-52723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:33:08.366 [DEBUG] [Thread-52723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:33:08.414 [DEBUG] [Thread-52723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:33:08.414 [DEBUG] [Thread-52723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:33:08.427 [DEBUG] [Thread-52723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:33:08.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:33:08.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:33:08.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:33:08.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:33:08.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:33:08.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:33:08.459 [DEBUG] [Thread-52723] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:33:08.519 [DEBUG] [Thread-52725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:33:23.561 [DEBUG] [Thread-52726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:33:26.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:33:26.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:33:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:33:38.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:33:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:33:38.593 [DEBUG] [Thread-52727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:33:39.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 33, 14), 20.11, 25.41, 0.0, 17.22, 18.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:33:39.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:33:14
2025-11-17T10:33:39.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:33:39.422 [DEBUG] [Thread-52728] [transport.py] [_log()] starting thread (client mode): 0xd317c2e0
2025-11-17T10:33:39.422 [DEBUG] [Thread-52728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:33:39.443 [DEBUG] [Thread-52728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:33:39.443 [INFO] [Thread-52728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:33:39.446 [DEBUG] [Thread-52728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:33:39.446 [DEBUG] [Thread-52728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:33:39.446 [DEBUG] [Thread-52728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:33:39.446 [DEBUG] [Thread-52728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:33:39.446 [DEBUG] [Thread-52728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] client lang: <none>
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] server lang: <none>
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] kex follows: False
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:33:39.447 [DEBUG] [Thread-52728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:33:39.448 [DEBUG] [Thread-52728] [transport.py] [_log()] Compression: none
2025-11-17T10:33:39.448 [DEBUG] [Thread-52728] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:33:39.466 [DEBUG] [Thread-52728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:33:39.466 [DEBUG] [Thread-52728] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:33:39.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:33:39.467 [DEBUG] [Thread-52728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:33:39.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:33:39.469 [DEBUG] [Thread-52728] [transport.py] [_log()] userauth is OK
2025-11-17T10:33:39.469 [DEBUG] [Thread-52728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:33:39.469 [DEBUG] [Thread-52728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:33:39.470 [DEBUG] [Thread-52728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:33:39.470 [DEBUG] [Thread-52728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:33:39.494 [INFO] [Thread-52728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:33:39.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:33:40.126 [DEBUG] [Thread-52728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:33:40.126 [DEBUG] [Thread-52728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:33:40.126 [DEBUG] [Thread-52728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:33:40.167 [DEBUG] [Thread-52728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:33:40.167 [DEBUG] [Thread-52728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:33:40.170 [DEBUG] [Thread-52728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:33:40.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:33:40.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:33:40.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:33:40.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:33:40.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:33:40.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:33:40.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:33:40.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:33:40.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:33:40.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.355951 -999.00  +18.00   7.62     32   +1.20 1 1 1 1 1   888    0 16.97 14.28 ----- 7.6 7.6 101.6 12.8 25.9 -25.2 25.2 -23.7 24.3 -22.7 24.9 -23.8
2025-11-17T10:33:40.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:33:40.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:33:40.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.355951
2025-11-17T10:33:40.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:33:40.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:33:40.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:33:40.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:33:40.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:33:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:33:14', tmtdew=20.11, humidity=25.41, cloud=0.0, wind=17.22, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:32:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:33:40.194 [DEBUG] [Thread-52728] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:33:40.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:33:40.290 [DEBUG] [Thread-52731] [transport.py] [_log()] starting thread (client mode): 0xd075a080
2025-11-17T10:33:40.290 [DEBUG] [Thread-52731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:33:40.306 [DEBUG] [Thread-52731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:33:40.306 [INFO] [Thread-52731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] client lang: <none>
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] server lang: <none>
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] kex follows: False
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:33:40.318 [DEBUG] [Thread-52731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:33:40.319 [DEBUG] [Thread-52731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:33:40.319 [DEBUG] [Thread-52731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:33:40.319 [DEBUG] [Thread-52731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:33:40.319 [DEBUG] [Thread-52731] [transport.py] [_log()] Compression: none
2025-11-17T10:33:40.319 [DEBUG] [Thread-52731] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:33:40.386 [DEBUG] [Thread-52731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:33:40.387 [DEBUG] [Thread-52731] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:33:40.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:33:40.388 [DEBUG] [Thread-52731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:33:40.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:33:40.456 [DEBUG] [Thread-52731] [transport.py] [_log()] userauth is OK
2025-11-17T10:33:40.456 [DEBUG] [Thread-52731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:33:40.457 [DEBUG] [Thread-52731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:33:40.457 [DEBUG] [Thread-52731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:33:40.457 [DEBUG] [Thread-52731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:33:40.482 [INFO] [Thread-52731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:33:40.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:33:40.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:33:41.308 [DEBUG] [Thread-52731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:33:41.308 [DEBUG] [Thread-52731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:33:41.355 [DEBUG] [Thread-52731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:33:41.355 [DEBUG] [Thread-52731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:33:41.364 [DEBUG] [Thread-52731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:33:41.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:33:41.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:33:41.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:33:41.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:33:41.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:33:41.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:33:41.397 [DEBUG] [Thread-52731] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:33:53.619 [DEBUG] [Thread-52733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:34:03.890 [DEBUG] [Thread-52734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:34:08.656 [DEBUG] [Thread-52735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:34:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:34:11.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:34:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:34:12.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 33, 46), 20.79, 24.72, 0.0, 17.04, 19.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:34:12.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:33:46
2025-11-17T10:34:12.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:34:12.346 [DEBUG] [Thread-52736] [transport.py] [_log()] starting thread (client mode): 0xd31cf2e0
2025-11-17T10:34:12.347 [DEBUG] [Thread-52736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:34:12.365 [DEBUG] [Thread-52736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:34:12.366 [INFO] [Thread-52736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] client lang: <none>
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] server lang: <none>
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] kex follows: False
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:34:12.369 [DEBUG] [Thread-52736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:34:12.370 [DEBUG] [Thread-52736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:34:12.370 [DEBUG] [Thread-52736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:34:12.370 [DEBUG] [Thread-52736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:34:12.370 [DEBUG] [Thread-52736] [transport.py] [_log()] Compression: none
2025-11-17T10:34:12.370 [DEBUG] [Thread-52736] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:34:12.385 [DEBUG] [Thread-52736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:34:12.386 [DEBUG] [Thread-52736] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:34:12.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:34:12.387 [DEBUG] [Thread-52736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:34:12.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:34:12.388 [DEBUG] [Thread-52736] [transport.py] [_log()] userauth is OK
2025-11-17T10:34:12.388 [DEBUG] [Thread-52736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:34:12.388 [DEBUG] [Thread-52736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:34:12.389 [DEBUG] [Thread-52736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:34:12.389 [DEBUG] [Thread-52736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:34:12.406 [INFO] [Thread-52736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:34:12.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:34:13.164 [DEBUG] [Thread-52736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:34:13.164 [DEBUG] [Thread-52736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:34:13.165 [DEBUG] [Thread-52736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:34:13.206 [DEBUG] [Thread-52736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:34:13.206 [DEBUG] [Thread-52736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:34:13.209 [DEBUG] [Thread-52736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:34:13.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:34:13.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:34:13.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:34:13.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:34:13.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:34:13.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:34:13.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:34:13.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:34:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:34:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.356646 -999.00  +18.10  19.54     32   +1.20 1 1 1 1 1   888    0 17.04 18.67 ----- 19.5 19.5 112.6 21.2 25.7 -28.1 25.2 -24.3 24.2 -24.6 24.8 -25.0
2025-11-17T10:34:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:34:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:34:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.356646
2025-11-17T10:34:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:34:13.228 [DEBUG] [Thread-52736] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:34:13.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:34:13.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:34:13.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:34:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:34:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:33:46', tmtdew=20.79, humidity=24.72, cloud=0.0, wind=17.04, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:33:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:34:13.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:34:23.684 [DEBUG] [Thread-52739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:34:26.824 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:34:26.825 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:34:38.716 [DEBUG] [Thread-52740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:34:53.745 [DEBUG] [Thread-52741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:35:03.937 [DEBUG] [Thread-52742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:35:08.772 [DEBUG] [Thread-52743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:35:23.806 [DEBUG] [Thread-52744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:35:26.966 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:35:26.967 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:35:38.833 [DEBUG] [Thread-52745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:35:53.861 [DEBUG] [Thread-52746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:36:03.987 [DEBUG] [Thread-52747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:36:08.892 [DEBUG] [Thread-52748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:36:23.922 [DEBUG] [Thread-52749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:36:27.108 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:36:27.109 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:36:27.963 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T10:36:38.953 [DEBUG] [Thread-52750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:36:53.987 [DEBUG] [Thread-52751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:36:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:36:57.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:36:57.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:36:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 35, 22), 20.69, 24.41, 0.0, 18.99, 18.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:36:58.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:35:22
2025-11-17T10:36:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:36:58.976 [DEBUG] [Thread-52752] [transport.py] [_log()] starting thread (client mode): 0xd317d030
2025-11-17T10:36:58.977 [DEBUG] [Thread-52752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:36:58.997 [DEBUG] [Thread-52752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:36:58.997 [INFO] [Thread-52752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] client lang: <none>
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] server lang: <none>
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] kex follows: False
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:36:59.000 [DEBUG] [Thread-52752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:36:59.001 [DEBUG] [Thread-52752] [transport.py] [_log()] Compression: none
2025-11-17T10:36:59.001 [DEBUG] [Thread-52752] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:36:59.015 [DEBUG] [Thread-52752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:36:59.015 [DEBUG] [Thread-52752] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:36:59.015 [DEBUG] [Thread-52752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:36:59.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:36:59.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:36:59.016 [DEBUG] [Thread-52752] [transport.py] [_log()] userauth is OK
2025-11-17T10:36:59.016 [DEBUG] [Thread-52752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:36:59.016 [DEBUG] [Thread-52752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:36:59.016 [DEBUG] [Thread-52752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:36:59.016 [DEBUG] [Thread-52752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:36:59.031 [INFO] [Thread-52752] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:36:59.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:36:59.675 [DEBUG] [Thread-52752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:36:59.675 [DEBUG] [Thread-52752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:36:59.675 [DEBUG] [Thread-52752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:36:59.716 [DEBUG] [Thread-52752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:36:59.716 [DEBUG] [Thread-52752] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:36:59.718 [DEBUG] [Thread-52752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:36:59.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:36:59.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:36:59.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:36:59.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:36:59.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:36:59.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:36:59.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.358382 -999.00  +17.90  19.48     32   +1.10 1 1 1 1 1   888    0 17.18 18.67 ----- 19.5 19.5 51.6 24.1 25.3 -25.1 24.6 -26.0 23.7 -25.5 24.6 -24.3
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.358382
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:36:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:35:22', tmtdew=20.69, humidity=24.41, cloud=0.0, wind=18.99, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:36:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:36:59.738 [DEBUG] [Thread-52752] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:36:59.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:36:59.823 [DEBUG] [Thread-52755] [transport.py] [_log()] starting thread (client mode): 0xd07bdbd0
2025-11-17T10:36:59.823 [DEBUG] [Thread-52755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:36:59.844 [DEBUG] [Thread-52755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:36:59.844 [INFO] [Thread-52755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:36:59.851 [DEBUG] [Thread-52755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] client lang: <none>
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] server lang: <none>
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] kex follows: False
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] Compression: none
2025-11-17T10:36:59.852 [DEBUG] [Thread-52755] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:36:59.909 [DEBUG] [Thread-52755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:36:59.909 [DEBUG] [Thread-52755] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:36:59.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:36:59.909 [DEBUG] [Thread-52755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:36:59.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:36:59.966 [DEBUG] [Thread-52755] [transport.py] [_log()] userauth is OK
2025-11-17T10:36:59.966 [DEBUG] [Thread-52755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:36:59.966 [DEBUG] [Thread-52755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:36:59.966 [DEBUG] [Thread-52755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:36:59.966 [DEBUG] [Thread-52755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:36:59.983 [INFO] [Thread-52755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:36:59.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:36:59.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:37:00.844 [DEBUG] [Thread-52755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:37:00.844 [DEBUG] [Thread-52755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:37:00.894 [DEBUG] [Thread-52755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:37:00.894 [DEBUG] [Thread-52755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:37:00.906 [DEBUG] [Thread-52755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:37:00.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:37:00.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:37:00.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:37:00.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:37:00.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:37:00.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:37:00.937 [DEBUG] [Thread-52755] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:37:04.050 [DEBUG] [Thread-52757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:37:09.014 [DEBUG] [Thread-52758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:37:24.058 [DEBUG] [Thread-52759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:37:27.253 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:37:27.254 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:37:30.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:37:30.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:37:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:37:31.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 37, 1), 20.24, 25.09, 0.0, 18.23, 18.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:37:31.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:37:01
2025-11-17T10:37:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:37:31.903 [DEBUG] [Thread-52760] [transport.py] [_log()] starting thread (client mode): 0xd31cff70
2025-11-17T10:37:31.903 [DEBUG] [Thread-52760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:37:31.924 [DEBUG] [Thread-52760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:37:31.924 [INFO] [Thread-52760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:37:31.925 [DEBUG] [Thread-52760] [transport.py] [_log()] client lang: <none>
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] server lang: <none>
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] kex follows: False
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] Compression: none
2025-11-17T10:37:31.926 [DEBUG] [Thread-52760] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:37:31.942 [DEBUG] [Thread-52760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:37:31.942 [DEBUG] [Thread-52760] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:37:31.942 [DEBUG] [Thread-52760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:37:31.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:37:31.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:37:31.943 [DEBUG] [Thread-52760] [transport.py] [_log()] userauth is OK
2025-11-17T10:37:31.943 [DEBUG] [Thread-52760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:37:31.943 [DEBUG] [Thread-52760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:37:31.943 [DEBUG] [Thread-52760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:37:31.943 [DEBUG] [Thread-52760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:37:31.952 [INFO] [Thread-52760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:37:31.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:37:32.762 [DEBUG] [Thread-52760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:37:32.762 [DEBUG] [Thread-52760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:37:32.762 [DEBUG] [Thread-52760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:37:32.803 [DEBUG] [Thread-52760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:37:32.803 [DEBUG] [Thread-52760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:37:32.806 [DEBUG] [Thread-52760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:37:32.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:37:32.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:37:32.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:37:32.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:37:32.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:37:32.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:37:32.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:37:32.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:37:32.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:37:32.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.358729 -999.00  +17.80  15.92     32   +1.10 1 1 1 1 1   888    0 17.00 18.57 ----- 15.9 15.9 50.2 22.6 25.4 -24.6 24.6 -25.9 23.6 -24.9 24.5 -24.2
2025-11-17T10:37:32.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:37:32.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:37:32.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.358729
2025-11-17T10:37:32.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:37:32.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:37:32.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:37:32.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:37:32.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:37:32.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:37:01', tmtdew=20.24, humidity=25.09, cloud=0.0, wind=18.23, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:36:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:37:32.830 [DEBUG] [Thread-52760] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:37:32.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:37:32.937 [DEBUG] [Thread-52763] [transport.py] [_log()] starting thread (client mode): 0xd31378e0
2025-11-17T10:37:32.938 [DEBUG] [Thread-52763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:37:32.953 [DEBUG] [Thread-52763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:37:32.953 [INFO] [Thread-52763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:37:32.961 [DEBUG] [Thread-52763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:37:32.961 [DEBUG] [Thread-52763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:37:32.961 [DEBUG] [Thread-52763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:37:32.961 [DEBUG] [Thread-52763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:37:32.961 [DEBUG] [Thread-52763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:37:32.961 [DEBUG] [Thread-52763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:37:32.961 [DEBUG] [Thread-52763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] client lang: <none>
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] server lang: <none>
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] kex follows: False
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:37:32.962 [DEBUG] [Thread-52763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:37:32.963 [DEBUG] [Thread-52763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:37:32.963 [DEBUG] [Thread-52763] [transport.py] [_log()] Compression: none
2025-11-17T10:37:32.963 [DEBUG] [Thread-52763] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:37:33.019 [DEBUG] [Thread-52763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:37:33.019 [DEBUG] [Thread-52763] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:37:33.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:37:33.020 [DEBUG] [Thread-52763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:37:33.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:37:33.080 [DEBUG] [Thread-52763] [transport.py] [_log()] userauth is OK
2025-11-17T10:37:33.080 [DEBUG] [Thread-52763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:37:33.081 [DEBUG] [Thread-52763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:37:33.081 [DEBUG] [Thread-52763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:37:33.081 [DEBUG] [Thread-52763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:37:33.099 [INFO] [Thread-52763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:37:33.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:37:33.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:37:33.965 [DEBUG] [Thread-52763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:37:33.965 [DEBUG] [Thread-52763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:37:34.013 [DEBUG] [Thread-52763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:37:34.013 [DEBUG] [Thread-52763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:37:34.021 [DEBUG] [Thread-52763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:37:34.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:37:34.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:37:34.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:37:34.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:37:34.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:37:34.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:37:34.056 [DEBUG] [Thread-52763] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:37:39.087 [DEBUG] [Thread-52765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:37:54.119 [DEBUG] [Thread-52766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:38:04.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:38:04.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:38:04.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:38:04.083 [DEBUG] [Thread-52767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:38:04.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 37, 33), 21.03, 24.09, 0.0, 10.27, 19.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:38:04.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:37:33
2025-11-17T10:38:04.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:38:04.996 [DEBUG] [Thread-52768] [transport.py] [_log()] starting thread (client mode): 0xd317c790
2025-11-17T10:38:04.996 [DEBUG] [Thread-52768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:38:05.016 [DEBUG] [Thread-52768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:38:05.016 [INFO] [Thread-52768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:38:05.019 [DEBUG] [Thread-52768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:38:05.019 [DEBUG] [Thread-52768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:38:05.019 [DEBUG] [Thread-52768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:38:05.019 [DEBUG] [Thread-52768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:38:05.019 [DEBUG] [Thread-52768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:38:05.019 [DEBUG] [Thread-52768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:38:05.019 [DEBUG] [Thread-52768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:38:05.019 [DEBUG] [Thread-52768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] client lang: <none>
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] server lang: <none>
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] kex follows: False
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] Compression: none
2025-11-17T10:38:05.020 [DEBUG] [Thread-52768] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:38:05.036 [DEBUG] [Thread-52768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:38:05.036 [DEBUG] [Thread-52768] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:38:05.037 [DEBUG] [Thread-52768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:38:05.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:38:05.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:38:05.039 [DEBUG] [Thread-52768] [transport.py] [_log()] userauth is OK
2025-11-17T10:38:05.039 [DEBUG] [Thread-52768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:38:05.039 [DEBUG] [Thread-52768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:38:05.039 [DEBUG] [Thread-52768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:38:05.039 [DEBUG] [Thread-52768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:38:05.061 [INFO] [Thread-52768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:38:05.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:38:05.726 [DEBUG] [Thread-52768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:38:05.727 [DEBUG] [Thread-52768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:38:05.727 [DEBUG] [Thread-52768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:38:05.767 [DEBUG] [Thread-52768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:38:05.767 [DEBUG] [Thread-52768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:38:05.770 [DEBUG] [Thread-52768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:38:05.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:38:05.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:38:05.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:38:05.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:38:05.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:38:05.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:38:05.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:38:05.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:38:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:38:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.359076 -999.00  +18.10  13.28     32   +1.30 1 1 1 1 1   888    0 17.30 17.91 ----- 13.3 13.3 26.6 20.1 25.5 -25.0 24.6 -25.5 23.8 -22.9 24.4 -23.9
2025-11-17T10:38:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:38:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:38:05.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.359076
2025-11-17T10:38:05.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:38:05.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:38:05.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:38:05.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:38:05.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:38:05.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:37:33', tmtdew=21.03, humidity=24.09, cloud=0.0, wind=10.27, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:37:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:38:05.797 [DEBUG] [Thread-52768] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:38:05.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:38:05.893 [DEBUG] [Thread-52771] [transport.py] [_log()] starting thread (client mode): 0xd31cc5e0
2025-11-17T10:38:05.893 [DEBUG] [Thread-52771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:38:05.907 [DEBUG] [Thread-52771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:38:05.907 [INFO] [Thread-52771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] client lang: <none>
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] server lang: <none>
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] kex follows: False
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:38:05.915 [DEBUG] [Thread-52771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:38:05.916 [DEBUG] [Thread-52771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:38:05.916 [DEBUG] [Thread-52771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:38:05.916 [DEBUG] [Thread-52771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:38:05.916 [DEBUG] [Thread-52771] [transport.py] [_log()] Compression: none
2025-11-17T10:38:05.916 [DEBUG] [Thread-52771] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:38:05.977 [DEBUG] [Thread-52771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:38:05.977 [DEBUG] [Thread-52771] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:38:05.978 [DEBUG] [Thread-52771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:38:05.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:38:05.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:38:06.034 [DEBUG] [Thread-52771] [transport.py] [_log()] userauth is OK
2025-11-17T10:38:06.034 [DEBUG] [Thread-52771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:38:06.034 [DEBUG] [Thread-52771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:38:06.034 [DEBUG] [Thread-52771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:38:06.035 [DEBUG] [Thread-52771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:38:06.052 [INFO] [Thread-52771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:38:06.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:38:06.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:38:06.955 [DEBUG] [Thread-52771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:38:06.955 [DEBUG] [Thread-52771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:38:07.003 [DEBUG] [Thread-52771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:38:07.003 [DEBUG] [Thread-52771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:38:07.011 [DEBUG] [Thread-52771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:38:07.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:38:07.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:38:07.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
2025-11-17T10:38:07.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:38:07.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:38:07.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:38:07.044 [DEBUG] [Thread-52771] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:38:09.148 [DEBUG] [Thread-52773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:38:24.191 [DEBUG] [Thread-52774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:38:27.394 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:38:27.395 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:38:37.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:38:37.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:38:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:38:37.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 38, 5), 20.14, 25.53, 0.0, 9.32, 18.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:38:37.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:38:05
2025-11-17T10:38:37.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:38:37.995 [DEBUG] [Thread-52775] [transport.py] [_log()] starting thread (client mode): 0xd0718c70
2025-11-17T10:38:37.995 [DEBUG] [Thread-52775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:38:38.016 [DEBUG] [Thread-52775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:38:38.016 [INFO] [Thread-52775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] client lang: <none>
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] server lang: <none>
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] kex follows: False
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:38:38.019 [DEBUG] [Thread-52775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:38:38.020 [DEBUG] [Thread-52775] [transport.py] [_log()] Compression: none
2025-11-17T10:38:38.020 [DEBUG] [Thread-52775] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:38:38.035 [DEBUG] [Thread-52775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:38:38.036 [DEBUG] [Thread-52775] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:38:38.036 [DEBUG] [Thread-52775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:38:38.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:38:38.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:38:38.038 [DEBUG] [Thread-52775] [transport.py] [_log()] userauth is OK
2025-11-17T10:38:38.038 [DEBUG] [Thread-52775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:38:38.039 [DEBUG] [Thread-52775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:38:38.039 [DEBUG] [Thread-52775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:38:38.039 [DEBUG] [Thread-52775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:38:38.055 [INFO] [Thread-52775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:38:38.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:38:38.837 [DEBUG] [Thread-52775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:38:38.837 [DEBUG] [Thread-52775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:38:38.837 [DEBUG] [Thread-52775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:38:38.878 [DEBUG] [Thread-52775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:38:38.878 [DEBUG] [Thread-52775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:38:38.881 [DEBUG] [Thread-52775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:38:38.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:38:38.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:38:38.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:38:38.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:38:38.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:38:38.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:38:38.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.359771 -999.00  +18.80  12.18     31   +1.40 1 1 1 1 1   888    0 17.09 18.36 ----- 12.2 12.2 314.3 15.3 25.8 -24.3 24.8 -23.8 23.9 -23.3 24.4 -24.3
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.359771
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:38:38.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:38:05', tmtdew=20.14, humidity=25.53, cloud=0.0, wind=9.32, temperature=18.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:38:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:38:38.898 [DEBUG] [Thread-52775] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:38:38.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:38:38.983 [DEBUG] [Thread-52778] [transport.py] [_log()] starting thread (client mode): 0xd317d540
2025-11-17T10:38:38.984 [DEBUG] [Thread-52778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:38:38.999 [DEBUG] [Thread-52778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:38:38.999 [INFO] [Thread-52778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] client lang: <none>
2025-11-17T10:38:39.006 [DEBUG] [Thread-52778] [transport.py] [_log()] server lang: <none>
2025-11-17T10:38:39.007 [DEBUG] [Thread-52778] [transport.py] [_log()] kex follows: False
2025-11-17T10:38:39.007 [DEBUG] [Thread-52778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:38:39.007 [DEBUG] [Thread-52778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:38:39.007 [DEBUG] [Thread-52778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:38:39.007 [DEBUG] [Thread-52778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:38:39.007 [DEBUG] [Thread-52778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:38:39.007 [DEBUG] [Thread-52778] [transport.py] [_log()] Compression: none
2025-11-17T10:38:39.007 [DEBUG] [Thread-52778] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:38:39.069 [DEBUG] [Thread-52778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:38:39.069 [DEBUG] [Thread-52778] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:38:39.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:38:39.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:38:39.070 [DEBUG] [Thread-52778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:38:39.126 [DEBUG] [Thread-52778] [transport.py] [_log()] userauth is OK
2025-11-17T10:38:39.126 [DEBUG] [Thread-52778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:38:39.126 [DEBUG] [Thread-52778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:38:39.126 [DEBUG] [Thread-52778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:38:39.126 [DEBUG] [Thread-52778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:38:39.140 [INFO] [Thread-52778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:38:39.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:38:39.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:38:39.218 [DEBUG] [Thread-52780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:38:40.007 [DEBUG] [Thread-52778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:38:40.007 [DEBUG] [Thread-52778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:38:40.055 [DEBUG] [Thread-52778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:38:40.055 [DEBUG] [Thread-52778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:38:40.063 [DEBUG] [Thread-52778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:38:40.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:38:40.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:38:40.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:38:40.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:38:40.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:38:40.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:38:40.095 [DEBUG] [Thread-52778] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:38:54.257 [DEBUG] [Thread-52781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:39:04.138 [DEBUG] [Thread-52782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:39:09.282 [DEBUG] [Thread-52783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:39:10.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:39:10.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:39:10.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:39:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 38, 38), 20.56, 24.91, 0.0, 9.3, 18.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:39:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:38:38
2025-11-17T10:39:10.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:39:11.052 [DEBUG] [Thread-52784] [transport.py] [_log()] starting thread (client mode): 0xd7bc5e10
2025-11-17T10:39:11.052 [DEBUG] [Thread-52784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:39:11.071 [DEBUG] [Thread-52784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:39:11.071 [INFO] [Thread-52784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] client lang: <none>
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] server lang: <none>
2025-11-17T10:39:11.074 [DEBUG] [Thread-52784] [transport.py] [_log()] kex follows: False
2025-11-17T10:39:11.075 [DEBUG] [Thread-52784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:39:11.075 [DEBUG] [Thread-52784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:39:11.075 [DEBUG] [Thread-52784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:39:11.075 [DEBUG] [Thread-52784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:39:11.075 [DEBUG] [Thread-52784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:39:11.075 [DEBUG] [Thread-52784] [transport.py] [_log()] Compression: none
2025-11-17T10:39:11.075 [DEBUG] [Thread-52784] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:39:11.089 [DEBUG] [Thread-52784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:39:11.090 [DEBUG] [Thread-52784] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:39:11.090 [DEBUG] [Thread-52784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:39:11.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:39:11.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:39:11.091 [DEBUG] [Thread-52784] [transport.py] [_log()] userauth is OK
2025-11-17T10:39:11.091 [DEBUG] [Thread-52784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:39:11.091 [DEBUG] [Thread-52784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:39:11.091 [DEBUG] [Thread-52784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:39:11.091 [DEBUG] [Thread-52784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:39:11.109 [INFO] [Thread-52784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:39:11.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:39:11.748 [DEBUG] [Thread-52784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:39:11.749 [DEBUG] [Thread-52784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:39:11.749 [DEBUG] [Thread-52784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:39:11.790 [DEBUG] [Thread-52784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:39:11.790 [DEBUG] [Thread-52784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:39:11.792 [DEBUG] [Thread-52784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:39:11.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:39:11.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:39:11.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:39:11.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:39:11.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:39:11.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:39:11.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:39:11.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:39:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:39:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.360118 -999.00  +18.70  12.10     31   +1.30 1 1 1 1 1   888    0 17.34 22.13 ----- 12.1 12.1 47.2 17.8 25.8 -25.4 24.9 -25.3 23.9 -23.3 24.5 -23.3
2025-11-17T10:39:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:39:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:39:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.360118
2025-11-17T10:39:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:39:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:39:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:39:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:39:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:39:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:38:38', tmtdew=20.56, humidity=24.91, cloud=0.0, wind=9.3, temperature=18.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:38:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:39:11.809 [DEBUG] [Thread-52784] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:39:11.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:39:11.896 [DEBUG] [Thread-52787] [transport.py] [_log()] starting thread (client mode): 0xd07bda80
2025-11-17T10:39:11.896 [DEBUG] [Thread-52787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:39:11.910 [DEBUG] [Thread-52787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:39:11.910 [INFO] [Thread-52787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] client lang: <none>
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] server lang: <none>
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] kex follows: False
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] Compression: none
2025-11-17T10:39:11.918 [DEBUG] [Thread-52787] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:39:11.973 [DEBUG] [Thread-52787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:39:11.973 [DEBUG] [Thread-52787] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:39:11.973 [DEBUG] [Thread-52787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:39:11.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:39:11.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:39:12.030 [DEBUG] [Thread-52787] [transport.py] [_log()] userauth is OK
2025-11-17T10:39:12.030 [DEBUG] [Thread-52787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:39:12.030 [DEBUG] [Thread-52787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:39:12.030 [DEBUG] [Thread-52787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:39:12.030 [DEBUG] [Thread-52787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:39:12.046 [INFO] [Thread-52787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:39:12.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:39:12.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:39:12.883 [DEBUG] [Thread-52787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:39:12.884 [DEBUG] [Thread-52787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:39:12.932 [DEBUG] [Thread-52787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:39:12.933 [DEBUG] [Thread-52787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:39:12.945 [DEBUG] [Thread-52787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:39:12.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:39:12.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:39:12.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:39:12.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:39:12.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:39:12.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:39:12.987 [DEBUG] [Thread-52787] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:39:24.314 [DEBUG] [Thread-52789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:39:27.536 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:39:27.537 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:39:39.355 [DEBUG] [Thread-52790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:39:43.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:39:43.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:39:43.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:39:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 39, 10), 20.64, 24.83, 0.0, 9.19, 18.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:39:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:39:10
2025-11-17T10:39:43.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:39:43.998 [DEBUG] [Thread-52791] [transport.py] [_log()] starting thread (client mode): 0xd071ae30
2025-11-17T10:39:43.998 [DEBUG] [Thread-52791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:39:44.018 [DEBUG] [Thread-52791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:39:44.018 [INFO] [Thread-52791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:39:44.019 [DEBUG] [Thread-52791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:39:44.019 [DEBUG] [Thread-52791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:39:44.019 [DEBUG] [Thread-52791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] client lang: <none>
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] server lang: <none>
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] kex follows: False
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] Compression: none
2025-11-17T10:39:44.020 [DEBUG] [Thread-52791] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:39:44.032 [DEBUG] [Thread-52791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:39:44.032 [DEBUG] [Thread-52791] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:39:44.032 [DEBUG] [Thread-52791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:39:44.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:39:44.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:39:44.033 [DEBUG] [Thread-52791] [transport.py] [_log()] userauth is OK
2025-11-17T10:39:44.033 [DEBUG] [Thread-52791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:39:44.033 [DEBUG] [Thread-52791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:39:44.033 [DEBUG] [Thread-52791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:39:44.033 [DEBUG] [Thread-52791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:39:44.052 [INFO] [Thread-52791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:39:44.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:39:44.808 [DEBUG] [Thread-52791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:39:44.808 [DEBUG] [Thread-52791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:39:44.809 [DEBUG] [Thread-52791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:39:44.850 [DEBUG] [Thread-52791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:39:44.850 [DEBUG] [Thread-52791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:39:44.853 [DEBUG] [Thread-52791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:39:44.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:39:44.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:39:44.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:39:44.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:39:44.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:39:44.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:39:44.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:39:44.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:39:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:39:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.360465 -999.00  +18.80  12.28     31   +1.40 1 1 1 1 1   888    0 17.42 25.98 ----- 12.3 12.3 46.6 14.3 25.9 -24.5 24.9 -24.7 23.9 -23.6 24.5 -23.5
2025-11-17T10:39:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:39:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:39:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.360465
2025-11-17T10:39:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:39:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:39:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:39:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:39:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:39:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:39:10', tmtdew=20.64, humidity=24.83, cloud=0.0, wind=9.19, temperature=18.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:39:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:39:44.875 [DEBUG] [Thread-52791] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:39:44.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:39:44.972 [DEBUG] [Thread-52794] [transport.py] [_log()] starting thread (client mode): 0xd07cffd0
2025-11-17T10:39:44.972 [DEBUG] [Thread-52794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:39:44.987 [DEBUG] [Thread-52794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:39:44.987 [INFO] [Thread-52794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:39:44.995 [DEBUG] [Thread-52794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:39:44.995 [DEBUG] [Thread-52794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:39:44.995 [DEBUG] [Thread-52794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:39:44.995 [DEBUG] [Thread-52794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:39:44.995 [DEBUG] [Thread-52794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:39:44.995 [DEBUG] [Thread-52794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] client lang: <none>
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] server lang: <none>
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] kex follows: False
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] Compression: none
2025-11-17T10:39:44.996 [DEBUG] [Thread-52794] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:39:45.059 [DEBUG] [Thread-52794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:39:45.059 [DEBUG] [Thread-52794] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:39:45.059 [DEBUG] [Thread-52794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:39:45.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:39:45.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:39:45.114 [DEBUG] [Thread-52794] [transport.py] [_log()] userauth is OK
2025-11-17T10:39:45.114 [DEBUG] [Thread-52794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:39:45.115 [DEBUG] [Thread-52794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:39:45.115 [DEBUG] [Thread-52794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:39:45.115 [DEBUG] [Thread-52794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:39:45.134 [INFO] [Thread-52794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:39:45.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:39:45.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:39:46.010 [DEBUG] [Thread-52794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:39:46.011 [DEBUG] [Thread-52794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:39:46.058 [DEBUG] [Thread-52794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:39:46.058 [DEBUG] [Thread-52794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:39:46.067 [DEBUG] [Thread-52794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:39:46.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:39:46.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:39:46.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:39:46.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:39:46.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:39:46.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:39:46.101 [DEBUG] [Thread-52794] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:39:54.393 [DEBUG] [Thread-52796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:40:04.194 [DEBUG] [Thread-52797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:40:09.432 [DEBUG] [Thread-52798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:40:16.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:40:16.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:40:16.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:40:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 39, 42), 20.93, 24.43, 0.0, 16.14, 19.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:40:16.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:39:42
2025-11-17T10:40:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:40:17.055 [DEBUG] [Thread-52799] [transport.py] [_log()] starting thread (client mode): 0xd07bf2e0
2025-11-17T10:40:17.055 [DEBUG] [Thread-52799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:40:17.075 [DEBUG] [Thread-52799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:40:17.075 [INFO] [Thread-52799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] client lang: <none>
2025-11-17T10:40:17.079 [DEBUG] [Thread-52799] [transport.py] [_log()] server lang: <none>
2025-11-17T10:40:17.080 [DEBUG] [Thread-52799] [transport.py] [_log()] kex follows: False
2025-11-17T10:40:17.080 [DEBUG] [Thread-52799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:40:17.080 [DEBUG] [Thread-52799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:40:17.080 [DEBUG] [Thread-52799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:40:17.080 [DEBUG] [Thread-52799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:40:17.080 [DEBUG] [Thread-52799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:40:17.080 [DEBUG] [Thread-52799] [transport.py] [_log()] Compression: none
2025-11-17T10:40:17.080 [DEBUG] [Thread-52799] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:40:17.098 [DEBUG] [Thread-52799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:40:17.099 [DEBUG] [Thread-52799] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:40:17.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:40:17.100 [DEBUG] [Thread-52799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:40:17.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:40:17.102 [DEBUG] [Thread-52799] [transport.py] [_log()] userauth is OK
2025-11-17T10:40:17.102 [DEBUG] [Thread-52799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:40:17.102 [DEBUG] [Thread-52799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:40:17.103 [DEBUG] [Thread-52799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:40:17.103 [DEBUG] [Thread-52799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:40:17.126 [INFO] [Thread-52799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:40:17.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:40:17.768 [DEBUG] [Thread-52799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:40:17.768 [DEBUG] [Thread-52799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:40:17.769 [DEBUG] [Thread-52799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:40:17.809 [DEBUG] [Thread-52799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:40:17.810 [DEBUG] [Thread-52799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:40:17.813 [DEBUG] [Thread-52799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:40:17.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:40:17.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:40:17.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:40:17.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:40:17.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:40:17.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:40:17.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:40:17.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:40:17.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:40:17.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.360813 -999.00  +18.80   5.71     30   +1.20 1 1 1 1 1   888    0 17.21 30.24 ----- 5.7 5.7 52.4 16.7 26.1 -24.3 25.1 -24.6 24.0 -22.9 24.6 -24.0
2025-11-17T10:40:17.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:40:17.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:40:17.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.360813
2025-11-17T10:40:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:40:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:40:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:40:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:40:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:40:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:39:42', tmtdew=20.93, humidity=24.43, cloud=0.0, wind=16.14, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:39:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:40:17.838 [DEBUG] [Thread-52799] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:40:17.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:40:17.933 [DEBUG] [Thread-52802] [transport.py] [_log()] starting thread (client mode): 0xd07bfa60
2025-11-17T10:40:17.933 [DEBUG] [Thread-52802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:40:17.955 [DEBUG] [Thread-52802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:40:17.955 [INFO] [Thread-52802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:40:17.966 [DEBUG] [Thread-52802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:40:17.966 [DEBUG] [Thread-52802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:40:17.966 [DEBUG] [Thread-52802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:40:17.966 [DEBUG] [Thread-52802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:40:17.966 [DEBUG] [Thread-52802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:40:17.966 [DEBUG] [Thread-52802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] client lang: <none>
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] server lang: <none>
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] kex follows: False
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:40:17.967 [DEBUG] [Thread-52802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:40:17.968 [DEBUG] [Thread-52802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:40:17.968 [DEBUG] [Thread-52802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:40:17.968 [DEBUG] [Thread-52802] [transport.py] [_log()] Compression: none
2025-11-17T10:40:17.968 [DEBUG] [Thread-52802] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:40:18.024 [DEBUG] [Thread-52802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:40:18.025 [DEBUG] [Thread-52802] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:40:18.025 [DEBUG] [Thread-52802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:40:18.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:40:18.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:40:18.083 [DEBUG] [Thread-52802] [transport.py] [_log()] userauth is OK
2025-11-17T10:40:18.083 [DEBUG] [Thread-52802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:40:18.083 [DEBUG] [Thread-52802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:40:18.083 [DEBUG] [Thread-52802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:40:18.083 [DEBUG] [Thread-52802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:40:18.107 [INFO] [Thread-52802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:40:18.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:40:18.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:40:19.023 [DEBUG] [Thread-52802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:40:19.023 [DEBUG] [Thread-52802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:40:19.071 [DEBUG] [Thread-52802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:40:19.071 [DEBUG] [Thread-52802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:40:19.084 [DEBUG] [Thread-52802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:40:19.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:40:19.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:40:19.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:40:19.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:40:19.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:40:19.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:40:19.129 [DEBUG] [Thread-52802] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:40:24.457 [DEBUG] [Thread-52804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:40:27.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:40:27.683 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:40:39.502 [DEBUG] [Thread-52805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:40:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:40:49.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:40:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:40:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 40, 46), 20.83, 24.23, 0.0, 16.71, 19.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:40:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:40:46
2025-11-17T10:40:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:40:50.120 [DEBUG] [Thread-52806] [transport.py] [_log()] starting thread (client mode): 0xd0784e50
2025-11-17T10:40:50.120 [DEBUG] [Thread-52806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:40:50.142 [DEBUG] [Thread-52806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:40:50.142 [INFO] [Thread-52806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] client lang: <none>
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] server lang: <none>
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] kex follows: False
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] Compression: none
2025-11-17T10:40:50.145 [DEBUG] [Thread-52806] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:40:50.160 [DEBUG] [Thread-52806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:40:50.160 [DEBUG] [Thread-52806] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:40:50.160 [DEBUG] [Thread-52806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:40:50.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:40:50.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:40:50.161 [DEBUG] [Thread-52806] [transport.py] [_log()] userauth is OK
2025-11-17T10:40:50.161 [DEBUG] [Thread-52806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:40:50.161 [DEBUG] [Thread-52806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:40:50.161 [DEBUG] [Thread-52806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:40:50.161 [DEBUG] [Thread-52806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:40:50.170 [INFO] [Thread-52806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:40:50.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:40:50.819 [DEBUG] [Thread-52806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:40:50.819 [DEBUG] [Thread-52806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:40:50.819 [DEBUG] [Thread-52806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:40:50.860 [DEBUG] [Thread-52806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:40:50.860 [DEBUG] [Thread-52806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:40:50.863 [DEBUG] [Thread-52806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:40:50.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:40:50.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:40:50.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:40:50.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:40:50.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:40:50.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:40:50.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:40:50.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:40:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:40:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.361159 -999.00  +18.70  15.10     31   +1.20 1 1 1 1 1   888    0 18.00 33.53 ----- 15.1 15.1 68.8 21.6 25.8 -28.7 25.1 -24.8 23.9 -24.3 24.8 -23.6
2025-11-17T10:40:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:40:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:40:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.361159
2025-11-17T10:40:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:40:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:40:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:40:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:40:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:40:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:40:46', tmtdew=20.83, humidity=24.23, cloud=0.0, wind=16.71, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:40:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:40:50.881 [DEBUG] [Thread-52806] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:40:50.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:40:50.967 [DEBUG] [Thread-52809] [transport.py] [_log()] starting thread (client mode): 0xd07112d0
2025-11-17T10:40:50.967 [DEBUG] [Thread-52809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:40:50.982 [DEBUG] [Thread-52809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:40:50.982 [INFO] [Thread-52809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] client lang: <none>
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] server lang: <none>
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] kex follows: False
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] Compression: none
2025-11-17T10:40:50.990 [DEBUG] [Thread-52809] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:40:51.045 [DEBUG] [Thread-52809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:40:51.045 [DEBUG] [Thread-52809] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:40:51.045 [DEBUG] [Thread-52809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:40:51.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:40:51.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:40:51.103 [DEBUG] [Thread-52809] [transport.py] [_log()] userauth is OK
2025-11-17T10:40:51.103 [DEBUG] [Thread-52809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:40:51.103 [DEBUG] [Thread-52809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:40:51.103 [DEBUG] [Thread-52809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:40:51.103 [DEBUG] [Thread-52809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:40:51.117 [INFO] [Thread-52809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:40:51.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:40:51.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:40:51.988 [DEBUG] [Thread-52809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:40:51.988 [DEBUG] [Thread-52809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:40:52.036 [DEBUG] [Thread-52809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:40:52.036 [DEBUG] [Thread-52809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:40:52.044 [DEBUG] [Thread-52809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:40:52.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:40:52.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:40:52.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:40:52.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:40:52.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:40:52.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:40:52.076 [DEBUG] [Thread-52809] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:40:54.530 [DEBUG] [Thread-52811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:41:04.238 [DEBUG] [Thread-52812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:41:09.581 [DEBUG] [Thread-52813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:41:22.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:41:22.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:41:22.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:41:22.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 41, 18), 20.9, 24.13, 0.0, 15.49, 19.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:41:22.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:41:18
2025-11-17T10:41:22.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:41:23.034 [DEBUG] [Thread-52814] [transport.py] [_log()] starting thread (client mode): 0xd0784580
2025-11-17T10:41:23.034 [DEBUG] [Thread-52814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:41:23.054 [DEBUG] [Thread-52814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:41:23.054 [INFO] [Thread-52814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:41:23.057 [DEBUG] [Thread-52814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] client lang: <none>
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] server lang: <none>
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] kex follows: False
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] Compression: none
2025-11-17T10:41:23.058 [DEBUG] [Thread-52814] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:41:23.075 [DEBUG] [Thread-52814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:41:23.076 [DEBUG] [Thread-52814] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:41:23.076 [DEBUG] [Thread-52814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:41:23.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:41:23.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:41:23.078 [DEBUG] [Thread-52814] [transport.py] [_log()] userauth is OK
2025-11-17T10:41:23.078 [DEBUG] [Thread-52814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:41:23.078 [DEBUG] [Thread-52814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:41:23.078 [DEBUG] [Thread-52814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:41:23.078 [DEBUG] [Thread-52814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:41:23.102 [INFO] [Thread-52814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:41:23.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:41:23.722 [DEBUG] [Thread-52814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:41:23.722 [DEBUG] [Thread-52814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:41:23.722 [DEBUG] [Thread-52814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:41:23.762 [DEBUG] [Thread-52814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:41:23.763 [DEBUG] [Thread-52814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:41:23.766 [DEBUG] [Thread-52814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:41:23.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:41:23.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:41:23.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:41:23.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:41:23.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:41:23.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:41:23.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:41:23.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:41:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:41:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.361507 -999.00  +18.50  11.86     31   +1.20 1 1 1 1 1   888    0 18.10 35.87 ----- 11.9 11.9 125.0 25.6 25.6 -26.6 25.0 -25.5 23.9 -24.3 24.7 -25.0
2025-11-17T10:41:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:41:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:41:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.361507
2025-11-17T10:41:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:41:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:41:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:41:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:41:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:41:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:41:18', tmtdew=20.9, humidity=24.13, cloud=0.0, wind=15.49, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:40:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:41:23.794 [DEBUG] [Thread-52814] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:41:23.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:41:23.897 [DEBUG] [Thread-52817] [transport.py] [_log()] starting thread (client mode): 0xd0785f30
2025-11-17T10:41:23.897 [DEBUG] [Thread-52817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:41:23.912 [DEBUG] [Thread-52817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:41:23.912 [INFO] [Thread-52817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:41:23.919 [DEBUG] [Thread-52817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:41:23.919 [DEBUG] [Thread-52817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] client lang: <none>
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] server lang: <none>
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] kex follows: False
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] Compression: none
2025-11-17T10:41:23.920 [DEBUG] [Thread-52817] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:41:23.977 [DEBUG] [Thread-52817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:41:23.978 [DEBUG] [Thread-52817] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:41:23.978 [DEBUG] [Thread-52817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:41:23.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:41:23.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:41:24.034 [DEBUG] [Thread-52817] [transport.py] [_log()] userauth is OK
2025-11-17T10:41:24.034 [DEBUG] [Thread-52817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:41:24.035 [DEBUG] [Thread-52817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:41:24.035 [DEBUG] [Thread-52817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:41:24.035 [DEBUG] [Thread-52817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:41:24.057 [INFO] [Thread-52817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:41:24.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:41:24.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:41:24.611 [DEBUG] [Thread-52819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:41:24.917 [DEBUG] [Thread-52817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:41:24.917 [DEBUG] [Thread-52817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:41:24.965 [DEBUG] [Thread-52817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:41:24.965 [DEBUG] [Thread-52817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:41:24.974 [DEBUG] [Thread-52817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:41:24.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:41:24.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:41:24.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:41:25.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:41:25.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:41:25.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:41:25.010 [DEBUG] [Thread-52817] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:41:27.824 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:41:27.825 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:41:39.664 [DEBUG] [Thread-52820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:41:54.694 [DEBUG] [Thread-52821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:41:55.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:41:55.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:41: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
2025-11-17T10:41:55.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 41, 50), 20.6, 24.9, 0.0, 12.9, 18.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:41:55.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:41:50
2025-11-17T10:41:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:41:55.971 [DEBUG] [Thread-52822] [transport.py] [_log()] starting thread (client mode): 0xd07112d0
2025-11-17T10:41:55.971 [DEBUG] [Thread-52822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:41:55.992 [DEBUG] [Thread-52822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:41:55.992 [INFO] [Thread-52822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:41:55.994 [DEBUG] [Thread-52822] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:41:55.994 [DEBUG] [Thread-52822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:41:55.994 [DEBUG] [Thread-52822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:41:55.994 [DEBUG] [Thread-52822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] client lang: <none>
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] server lang: <none>
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] kex follows: False
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] Compression: none
2025-11-17T10:41:55.995 [DEBUG] [Thread-52822] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:41:56.013 [DEBUG] [Thread-52822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:41:56.013 [DEBUG] [Thread-52822] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:41:56.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:41:56.014 [DEBUG] [Thread-52822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:41:56.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:41:56.016 [DEBUG] [Thread-52822] [transport.py] [_log()] userauth is OK
2025-11-17T10:41:56.016 [DEBUG] [Thread-52822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:41:56.016 [DEBUG] [Thread-52822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:41:56.016 [DEBUG] [Thread-52822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:41:56.016 [DEBUG] [Thread-52822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:41:56.041 [INFO] [Thread-52822] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:41:56.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:41:56.683 [DEBUG] [Thread-52822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:41:56.683 [DEBUG] [Thread-52822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:41:56.683 [DEBUG] [Thread-52822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:41:56.724 [DEBUG] [Thread-52822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:41:56.724 [DEBUG] [Thread-52822] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:41:56.727 [DEBUG] [Thread-52822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:41:56.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:41:56.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:41:56.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:41:56.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:41:56.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:41:56.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:41:56.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:41:56.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:41:56.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:41:56.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.361854 -999.00  +18.20  13.95     31   +1.10 1 1 1 1 1   888    0 17.99 41.19 ----- 13.9 13.9 79.0 16.9 25.6 -24.6 25.1 -24.3 24.0 -24.1 24.6 -25.1
2025-11-17T10:41:56.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:41:56.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:41:56.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.361854
2025-11-17T10:41:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:41:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:41:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:41:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:41:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:41:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:41:50', tmtdew=20.6, humidity=24.9, cloud=0.0, wind=12.9, temperature=18.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:41:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:41:56.753 [DEBUG] [Thread-52822] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:41:56.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:41:56.849 [DEBUG] [Thread-52825] [transport.py] [_log()] starting thread (client mode): 0xd0786860
2025-11-17T10:41:56.849 [DEBUG] [Thread-52825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:41:56.866 [DEBUG] [Thread-52825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:41:56.866 [INFO] [Thread-52825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:41:56.874 [DEBUG] [Thread-52825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:41:56.874 [DEBUG] [Thread-52825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] client lang: <none>
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] server lang: <none>
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] kex follows: False
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] Compression: none
2025-11-17T10:41:56.875 [DEBUG] [Thread-52825] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:41:56.932 [DEBUG] [Thread-52825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:41:56.933 [DEBUG] [Thread-52825] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:41:56.933 [DEBUG] [Thread-52825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:41:56.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:41:56.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:41:56.990 [DEBUG] [Thread-52825] [transport.py] [_log()] userauth is OK
2025-11-17T10:41:56.991 [DEBUG] [Thread-52825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:41:56.991 [DEBUG] [Thread-52825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:41:56.991 [DEBUG] [Thread-52825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:41:56.991 [DEBUG] [Thread-52825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:41:57.010 [INFO] [Thread-52825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:41:57.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:41:57.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:41:57.860 [DEBUG] [Thread-52825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:41:57.860 [DEBUG] [Thread-52825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:41:57.908 [DEBUG] [Thread-52825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:41:57.908 [DEBUG] [Thread-52825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:41:57.917 [DEBUG] [Thread-52825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:41:57.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:41:57.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:41:57.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:41:57.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:41:57.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:41:57.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:41:57.951 [DEBUG] [Thread-52825] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:42:04.292 [DEBUG] [Thread-52827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:42:09.719 [DEBUG] [Thread-52828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:42:24.750 [DEBUG] [Thread-52829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:42:27.966 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:42:27.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:42:27.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:42:27.977 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:42:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:42:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 42, 22), 20.61, 24.9, 0.0, 16.36, 18.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:42:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:42:22
2025-11-17T10:42:28.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:42:28.907 [DEBUG] [Thread-52830] [transport.py] [_log()] starting thread (client mode): 0xd0786200
2025-11-17T10:42:28.907 [DEBUG] [Thread-52830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:42:28.928 [DEBUG] [Thread-52830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:42:28.928 [INFO] [Thread-52830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:42:28.931 [DEBUG] [Thread-52830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] client lang: <none>
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] server lang: <none>
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] kex follows: False
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] Compression: none
2025-11-17T10:42:28.932 [DEBUG] [Thread-52830] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:42:28.948 [DEBUG] [Thread-52830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:42:28.948 [DEBUG] [Thread-52830] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:42:28.949 [DEBUG] [Thread-52830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:42:28.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:42:28.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:42:28.951 [DEBUG] [Thread-52830] [transport.py] [_log()] userauth is OK
2025-11-17T10:42:28.951 [DEBUG] [Thread-52830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:42:28.951 [DEBUG] [Thread-52830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:42:28.951 [DEBUG] [Thread-52830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:42:28.951 [DEBUG] [Thread-52830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:42:28.971 [INFO] [Thread-52830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:42:28.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:42:29.628 [DEBUG] [Thread-52830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:42:29.628 [DEBUG] [Thread-52830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:42:29.629 [DEBUG] [Thread-52830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:42:29.669 [DEBUG] [Thread-52830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:42:29.670 [DEBUG] [Thread-52830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:42:29.672 [DEBUG] [Thread-52830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:42:29.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:42:29.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:42:29.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:42:29.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:42:29.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:42:29.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:42:29.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:42:29.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:42:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:42:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.362549 -999.00  +18.40   9.32     31   +1.20 1 1 1 1 1   888    0 17.76 37.01 ----- 9.3 9.3 142.0 22.6 25.8 -25.7 25.0 -24.6 24.0 -24.1 24.8 -23.9
2025-11-17T10:42:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:42:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:42:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.362549
2025-11-17T10:42:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:42:29.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:42:29.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:42:29.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:42:29.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:42:29.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:42:22', tmtdew=20.61, humidity=24.9, cloud=0.0, wind=16.36, temperature=18.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:42:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:42:29.698 [DEBUG] [Thread-52830] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:42:29.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:42:29.796 [DEBUG] [Thread-52833] [transport.py] [_log()] starting thread (client mode): 0xd0719360
2025-11-17T10:42:29.796 [DEBUG] [Thread-52833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:42:29.813 [DEBUG] [Thread-52833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:42:29.813 [INFO] [Thread-52833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:42:29.820 [DEBUG] [Thread-52833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:42:29.820 [DEBUG] [Thread-52833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] client lang: <none>
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] server lang: <none>
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] kex follows: False
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:42:29.821 [DEBUG] [Thread-52833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:42:29.822 [DEBUG] [Thread-52833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:42:29.822 [DEBUG] [Thread-52833] [transport.py] [_log()] Compression: none
2025-11-17T10:42:29.822 [DEBUG] [Thread-52833] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:42:29.878 [DEBUG] [Thread-52833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:42:29.879 [DEBUG] [Thread-52833] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:42:29.879 [DEBUG] [Thread-52833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:42:29.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:42:29.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:42:29.934 [DEBUG] [Thread-52833] [transport.py] [_log()] userauth is OK
2025-11-17T10:42:29.934 [DEBUG] [Thread-52833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:42:29.935 [DEBUG] [Thread-52833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:42:29.935 [DEBUG] [Thread-52833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:42:29.935 [DEBUG] [Thread-52833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:42:29.953 [INFO] [Thread-52833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:42:29.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:42:29.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:42:30.812 [DEBUG] [Thread-52833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:42:30.812 [DEBUG] [Thread-52833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:42:30.862 [DEBUG] [Thread-52833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:42:30.862 [DEBUG] [Thread-52833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:42:30.871 [DEBUG] [Thread-52833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:42:30.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:42:30.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:42:30.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:42:30.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:42:30.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:42:30.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:42:30.905 [DEBUG] [Thread-52833] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:42:39.782 [DEBUG] [Thread-52835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:42:54.831 [DEBUG] [Thread-52836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:43:00.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:43:00.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:43:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:43:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 42, 54), 20.77, 24.68, 0.0, 19.34, 18.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:43:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:42:54
2025-11-17T10:43:01.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:43:01.885 [DEBUG] [Thread-52837] [transport.py] [_log()] starting thread (client mode): 0xd071a3e0
2025-11-17T10:43:01.885 [DEBUG] [Thread-52837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:43:01.906 [DEBUG] [Thread-52837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:43:01.906 [INFO] [Thread-52837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:43:01.908 [DEBUG] [Thread-52837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] client lang: <none>
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] server lang: <none>
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] kex follows: False
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] Compression: none
2025-11-17T10:43:01.909 [DEBUG] [Thread-52837] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:43:01.926 [DEBUG] [Thread-52837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:43:01.926 [DEBUG] [Thread-52837] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:43:01.927 [DEBUG] [Thread-52837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:43:01.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:43:01.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:43:01.929 [DEBUG] [Thread-52837] [transport.py] [_log()] userauth is OK
2025-11-17T10:43:01.929 [DEBUG] [Thread-52837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:43:01.929 [DEBUG] [Thread-52837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:43:01.929 [DEBUG] [Thread-52837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:43:01.929 [DEBUG] [Thread-52837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:43:01.945 [INFO] [Thread-52837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:43:01.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:43:02.585 [DEBUG] [Thread-52837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:43:02.585 [DEBUG] [Thread-52837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:43:02.585 [DEBUG] [Thread-52837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:43:02.625 [DEBUG] [Thread-52837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:43:02.625 [DEBUG] [Thread-52837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:43:02.628 [DEBUG] [Thread-52837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:43:02.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:43:02.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:43:02.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:43:02.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:43:02.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:43:02.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:43:02.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:43:02.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:43:02.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:43:02.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.362896 -999.00  +18.20   8.65     31   +1.00 1 1 1 1 1   888    0 17.97 38.19 ----- 8.7 8.7 127.2 18.4 25.6 -28.1 25.0 -24.0 24.1 -24.1 24.7 -25.5
2025-11-17T10:43:02.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:43:02.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:43:02.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.362896
2025-11-17T10:43:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:43:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:43:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:43:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:43:02.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:43:02.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:42:54', tmtdew=20.77, humidity=24.68, cloud=0.0, wind=19.34, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:42:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:43:02.651 [DEBUG] [Thread-52837] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:43:02.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:43:02.748 [DEBUG] [Thread-52840] [transport.py] [_log()] starting thread (client mode): 0xd071b100
2025-11-17T10:43:02.748 [DEBUG] [Thread-52840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:43:02.763 [DEBUG] [Thread-52840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:43:02.763 [INFO] [Thread-52840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:43:02.770 [DEBUG] [Thread-52840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:43:02.770 [DEBUG] [Thread-52840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] client lang: <none>
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] server lang: <none>
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] kex follows: False
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] Compression: none
2025-11-17T10:43:02.771 [DEBUG] [Thread-52840] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:43:02.834 [DEBUG] [Thread-52840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:43:02.834 [DEBUG] [Thread-52840] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:43:02.835 [DEBUG] [Thread-52840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:43:02.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:43:02.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:43:02.895 [DEBUG] [Thread-52840] [transport.py] [_log()] userauth is OK
2025-11-17T10:43:02.895 [DEBUG] [Thread-52840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:43:02.895 [DEBUG] [Thread-52840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:43:02.895 [DEBUG] [Thread-52840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:43:02.895 [DEBUG] [Thread-52840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:43:02.916 [INFO] [Thread-52840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:43:02.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:43:02.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:43:03.766 [DEBUG] [Thread-52840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:43:03.766 [DEBUG] [Thread-52840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:43:03.814 [DEBUG] [Thread-52840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:43:03.814 [DEBUG] [Thread-52840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:43:03.824 [DEBUG] [Thread-52840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:43:03.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:43:03.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')
2025-11-17T10:43:03.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:43:03.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:43:03.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:43:03.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:43:03.858 [DEBUG] [Thread-52840] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:43:04.350 [DEBUG] [Thread-52842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:43:09.858 [DEBUG] [Thread-52843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:43:24.897 [DEBUG] [Thread-52844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:43:28.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:43:28.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:43:33.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:43:33.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:43:33.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:43:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 43, 26), 20.5, 25.08, 0.0, 13.15, 18.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:43:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:43:26
2025-11-17T10:43:34.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:43:34.778 [DEBUG] [Thread-52845] [transport.py] [_log()] starting thread (client mode): 0xd075a770
2025-11-17T10:43:34.778 [DEBUG] [Thread-52845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:43:34.798 [DEBUG] [Thread-52845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:43:34.798 [INFO] [Thread-52845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:43:34.801 [DEBUG] [Thread-52845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:43:34.801 [DEBUG] [Thread-52845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:43:34.801 [DEBUG] [Thread-52845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:43:34.801 [DEBUG] [Thread-52845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:43:34.801 [DEBUG] [Thread-52845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:43:34.801 [DEBUG] [Thread-52845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] client lang: <none>
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] server lang: <none>
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] kex follows: False
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] Compression: none
2025-11-17T10:43:34.802 [DEBUG] [Thread-52845] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:43:34.820 [DEBUG] [Thread-52845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:43:34.820 [DEBUG] [Thread-52845] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:43:34.821 [DEBUG] [Thread-52845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:43:34.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:43:34.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:43:34.823 [DEBUG] [Thread-52845] [transport.py] [_log()] userauth is OK
2025-11-17T10:43:34.823 [DEBUG] [Thread-52845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:43:34.823 [DEBUG] [Thread-52845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:43:34.823 [DEBUG] [Thread-52845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:43:34.823 [DEBUG] [Thread-52845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:43:34.847 [INFO] [Thread-52845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:43:34.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:43:35.495 [DEBUG] [Thread-52845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:43:35.496 [DEBUG] [Thread-52845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:43:35.496 [DEBUG] [Thread-52845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:43:35.536 [DEBUG] [Thread-52845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:43:35.536 [DEBUG] [Thread-52845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:43:35.539 [DEBUG] [Thread-52845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:43:35.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:43:35.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:43:35.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:43:35.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:43:35.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:43:35.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:43:35.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:43:35.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:43:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:43:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.363243 -999.00  +18.20   8.77     31   +1.10 1 1 1 1 1   888    0 17.68 36.82 ----- 8.8 8.8 58.3 11.7 25.9 -25.0 25.1 -24.5 24.1 -24.1 24.8 -24.3
2025-11-17T10:43:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:43:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:43:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.363243
2025-11-17T10:43:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:43:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:43:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:43:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:43:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:43:35.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:43:26', tmtdew=20.5, humidity=25.08, cloud=0.0, wind=13.15, temperature=18.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:43:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:43:35.564 [DEBUG] [Thread-52845] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:43:35.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:43:35.659 [DEBUG] [Thread-52848] [transport.py] [_log()] starting thread (client mode): 0xd075bbe0
2025-11-17T10:43:35.659 [DEBUG] [Thread-52848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:43:35.678 [DEBUG] [Thread-52848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:43:35.679 [INFO] [Thread-52848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:43:35.686 [DEBUG] [Thread-52848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:43:35.686 [DEBUG] [Thread-52848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:43:35.686 [DEBUG] [Thread-52848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:43:35.686 [DEBUG] [Thread-52848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:43:35.686 [DEBUG] [Thread-52848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:43:35.686 [DEBUG] [Thread-52848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:43:35.686 [DEBUG] [Thread-52848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:43:35.686 [DEBUG] [Thread-52848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] client lang: <none>
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] server lang: <none>
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] kex follows: False
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] Compression: none
2025-11-17T10:43:35.687 [DEBUG] [Thread-52848] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:43:35.746 [DEBUG] [Thread-52848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:43:35.747 [DEBUG] [Thread-52848] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:43:35.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:43:35.748 [DEBUG] [Thread-52848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:43:35.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:43:35.802 [DEBUG] [Thread-52848] [transport.py] [_log()] userauth is OK
2025-11-17T10:43:35.802 [DEBUG] [Thread-52848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:43:35.803 [DEBUG] [Thread-52848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:43:35.803 [DEBUG] [Thread-52848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:43:35.803 [DEBUG] [Thread-52848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:43:35.823 [INFO] [Thread-52848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:43:35.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:43:35.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:43:36.741 [DEBUG] [Thread-52848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:43:36.742 [DEBUG] [Thread-52848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:43:36.789 [DEBUG] [Thread-52848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:43:36.789 [DEBUG] [Thread-52848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:43:36.798 [DEBUG] [Thread-52848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:43:36.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:43:36.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:43:36.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:43:36.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:43:36.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:43:36.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:43:36.833 [DEBUG] [Thread-52848] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:43:39.930 [DEBUG] [Thread-52850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:43:54.983 [DEBUG] [Thread-52851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:44:04.400 [DEBUG] [Thread-52852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:44:06.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:44:06.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:44:06.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:44:07.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 43, 58), 20.2, 25.23, 0.0, 18.76, 18.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:44:07.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:43:58
2025-11-17T10:44:07.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:44:07.764 [DEBUG] [Thread-52853] [transport.py] [_log()] starting thread (client mode): 0xd0786860
2025-11-17T10:44:07.764 [DEBUG] [Thread-52853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:44:07.784 [DEBUG] [Thread-52853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:44:07.784 [INFO] [Thread-52853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:44:07.787 [DEBUG] [Thread-52853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:44:07.787 [DEBUG] [Thread-52853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:44:07.787 [DEBUG] [Thread-52853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:44:07.787 [DEBUG] [Thread-52853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] client lang: <none>
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] server lang: <none>
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] kex follows: False
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] Compression: none
2025-11-17T10:44:07.788 [DEBUG] [Thread-52853] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:44:07.804 [DEBUG] [Thread-52853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:44:07.805 [DEBUG] [Thread-52853] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:44:07.805 [DEBUG] [Thread-52853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:44:07.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:44:07.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:44:07.807 [DEBUG] [Thread-52853] [transport.py] [_log()] userauth is OK
2025-11-17T10:44:07.807 [DEBUG] [Thread-52853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:44:07.807 [DEBUG] [Thread-52853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:44:07.807 [DEBUG] [Thread-52853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:44:07.807 [DEBUG] [Thread-52853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:44:07.842 [INFO] [Thread-52853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:44:07.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:44:08.491 [DEBUG] [Thread-52853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:44:08.491 [DEBUG] [Thread-52853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:44:08.491 [DEBUG] [Thread-52853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:44:08.531 [DEBUG] [Thread-52853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:44:08.531 [DEBUG] [Thread-52853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:44:08.533 [DEBUG] [Thread-52853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:44:08.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:44:08.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:44:08.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:44:08.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:44:08.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:44:08.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:44:08.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:44:08.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:44:08.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:44:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.363590 -999.00  +18.20  20.53     31   +1.10 1 1 1 1 1   888    0 17.80 42.55 ----- 20.5 20.5 45.4 22.4 25.9 -25.7 25.1 -24.5 24.2 -23.7 24.9 -23.7
2025-11-17T10:44:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:44:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:44:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.363590
2025-11-17T10:44:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:44:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:44:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:44:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:44:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:44:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:43:58', tmtdew=20.2, humidity=25.23, cloud=0.0, wind=18.76, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:43:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:44:08.555 [DEBUG] [Thread-52853] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:44:08.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:44:08.655 [DEBUG] [Thread-52856] [transport.py] [_log()] starting thread (client mode): 0xd07876d0
2025-11-17T10:44:08.656 [DEBUG] [Thread-52856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:44:08.673 [DEBUG] [Thread-52856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:44:08.674 [INFO] [Thread-52856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:44:08.681 [DEBUG] [Thread-52856] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:44:08.681 [DEBUG] [Thread-52856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:44:08.681 [DEBUG] [Thread-52856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] client lang: <none>
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] server lang: <none>
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] kex follows: False
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:44:08.682 [DEBUG] [Thread-52856] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:44:08.683 [DEBUG] [Thread-52856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:44:08.683 [DEBUG] [Thread-52856] [transport.py] [_log()] Compression: none
2025-11-17T10:44:08.683 [DEBUG] [Thread-52856] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:44:08.739 [DEBUG] [Thread-52856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:44:08.739 [DEBUG] [Thread-52856] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:44:08.740 [DEBUG] [Thread-52856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:44:08.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:44:08.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:44:08.799 [DEBUG] [Thread-52856] [transport.py] [_log()] userauth is OK
2025-11-17T10:44:08.799 [DEBUG] [Thread-52856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:44:08.799 [DEBUG] [Thread-52856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:44:08.799 [DEBUG] [Thread-52856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:44:08.799 [DEBUG] [Thread-52856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:44:08.818 [INFO] [Thread-52856] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:44:08.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:44:08.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:44:09.682 [DEBUG] [Thread-52856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:44:09.683 [DEBUG] [Thread-52856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:44:09.730 [DEBUG] [Thread-52856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:44:09.730 [DEBUG] [Thread-52856] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:44:09.742 [DEBUG] [Thread-52856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:44:09.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:44:09.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:44:09.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:44:09.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:44:09.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:44:09.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:44:09.781 [DEBUG] [Thread-52856] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:44:10.012 [DEBUG] [Thread-52858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:44:25.062 [DEBUG] [Thread-52859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:44:28.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:44:28.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:44:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:44:39.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:44:39.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:44:40.092 [DEBUG] [Thread-52860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:44:40.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 44, 30), 20.1, 25.38, 0.0, 17.43, 18.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:44:40.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:44:30
2025-11-17T10:44:40.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:44:40.783 [DEBUG] [Thread-52861] [transport.py] [_log()] starting thread (client mode): 0xd3150a60
2025-11-17T10:44:40.784 [DEBUG] [Thread-52861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:44:40.799 [DEBUG] [Thread-52861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:44:40.799 [INFO] [Thread-52861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:44:40.800 [DEBUG] [Thread-52861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:44:40.800 [DEBUG] [Thread-52861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] client lang: <none>
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] server lang: <none>
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] kex follows: False
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] Compression: none
2025-11-17T10:44:40.801 [DEBUG] [Thread-52861] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:44:40.811 [DEBUG] [Thread-52861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:44:40.811 [DEBUG] [Thread-52861] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:44:40.812 [DEBUG] [Thread-52861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:44:40.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:44:40.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:44:40.812 [DEBUG] [Thread-52861] [transport.py] [_log()] userauth is OK
2025-11-17T10:44:40.812 [DEBUG] [Thread-52861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:44:40.813 [DEBUG] [Thread-52861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:44:40.813 [DEBUG] [Thread-52861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:44:40.813 [DEBUG] [Thread-52861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:44:40.835 [INFO] [Thread-52861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:44:40.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:44:41.443 [DEBUG] [Thread-52861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:44:41.443 [DEBUG] [Thread-52861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:44:41.443 [DEBUG] [Thread-52861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:44:41.484 [DEBUG] [Thread-52861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:44:41.484 [DEBUG] [Thread-52861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:44:41.487 [DEBUG] [Thread-52861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:44:41.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:44:41.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:44:41.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:44:41.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:44:41.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:44:41.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:44:41.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:44:41.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:44:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:44:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.363937 -999.00  +18.20  20.24     31   +1.00 1 1 1 1 1   888    0 18.14 37.91 ----- 20.2 20.2 57.0 23.3 25.9 -24.5 25.0 -25.7 24.1 -24.2 24.9 -23.9
2025-11-17T10:44:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:44:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:44:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.363937
2025-11-17T10:44:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:44:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:44:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:44:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:44:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:44:41.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:44:30', tmtdew=20.1, humidity=25.38, cloud=0.0, wind=17.43, temperature=18.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:44:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:44:41.506 [DEBUG] [Thread-52861] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:44:41.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:44:41.591 [DEBUG] [Thread-52864] [transport.py] [_log()] starting thread (client mode): 0xd07195d0
2025-11-17T10:44:41.591 [DEBUG] [Thread-52864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:44:41.607 [DEBUG] [Thread-52864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:44:41.607 [INFO] [Thread-52864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:44:41.614 [DEBUG] [Thread-52864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:44:41.614 [DEBUG] [Thread-52864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] client lang: <none>
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] server lang: <none>
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] kex follows: False
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] Compression: none
2025-11-17T10:44:41.615 [DEBUG] [Thread-52864] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:44:41.673 [DEBUG] [Thread-52864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:44:41.673 [DEBUG] [Thread-52864] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:44:41.673 [DEBUG] [Thread-52864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:44:41.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:44:41.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:44:41.730 [DEBUG] [Thread-52864] [transport.py] [_log()] userauth is OK
2025-11-17T10:44:41.730 [DEBUG] [Thread-52864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:44:41.730 [DEBUG] [Thread-52864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:44:41.730 [DEBUG] [Thread-52864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:44:41.730 [DEBUG] [Thread-52864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:44:41.744 [INFO] [Thread-52864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:44:41.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:44:41.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:44:42.619 [DEBUG] [Thread-52864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:44:42.619 [DEBUG] [Thread-52864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:44:42.670 [DEBUG] [Thread-52864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:44:42.670 [DEBUG] [Thread-52864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:44:42.678 [DEBUG] [Thread-52864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:44:42.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:44:42.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:44:42.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:44:42.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:44:42.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:44:42.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:44:42.712 [DEBUG] [Thread-52864] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:44:55.120 [DEBUG] [Thread-52866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:45:04.455 [DEBUG] [Thread-52867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:45:10.159 [DEBUG] [Thread-52868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:45:12.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:45:12.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:45:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:45:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 45, 2), 20.14, 25.34, 0.0, 18.56, 18.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:45:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:45:02
2025-11-17T10:45:13.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:45:13.676 [DEBUG] [Thread-52869] [transport.py] [_log()] starting thread (client mode): 0xd0719c60
2025-11-17T10:45:13.677 [DEBUG] [Thread-52869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:45:13.697 [DEBUG] [Thread-52869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:45:13.697 [INFO] [Thread-52869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:45:13.700 [DEBUG] [Thread-52869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:45:13.700 [DEBUG] [Thread-52869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:45:13.700 [DEBUG] [Thread-52869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] client lang: <none>
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] server lang: <none>
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] kex follows: False
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] Compression: none
2025-11-17T10:45:13.701 [DEBUG] [Thread-52869] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:45:13.718 [DEBUG] [Thread-52869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:45:13.719 [DEBUG] [Thread-52869] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:45:13.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:45:13.719 [DEBUG] [Thread-52869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:45:13.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:45:13.721 [DEBUG] [Thread-52869] [transport.py] [_log()] userauth is OK
2025-11-17T10:45:13.721 [DEBUG] [Thread-52869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:45:13.721 [DEBUG] [Thread-52869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:45:13.721 [DEBUG] [Thread-52869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:45:13.721 [DEBUG] [Thread-52869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:45:13.756 [INFO] [Thread-52869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:45:13.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:45:15.993 [DEBUG] [Thread-52869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:45:15.994 [DEBUG] [Thread-52869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:45:15.994 [DEBUG] [Thread-52869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:45:16.034 [DEBUG] [Thread-52869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:45:16.034 [DEBUG] [Thread-52869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:45:16.037 [DEBUG] [Thread-52869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:45:16.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:45:16.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:45:16.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:45:16.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:45:16.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:45:16.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:45:16.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:45:16.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:45:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:45:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.364285 -999.00  +18.50  23.72     31   +1.20 1 1 1 1 1   888    0 18.32 37.75 ----- 23.7 23.7 41.6 29.5 25.8 -26.8 25.0 -25.2 23.9 -24.9 24.8 -24.2
2025-11-17T10:45:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:45:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:45:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.364285
2025-11-17T10:45:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:45:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:45:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:45:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:45:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:45:16.062 [DEBUG] [Thread-52869] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:45:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:45:02', tmtdew=20.14, humidity=25.34, cloud=0.0, wind=18.56, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:44:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:45:16.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:45:16.169 [DEBUG] [Thread-52872] [transport.py] [_log()] starting thread (client mode): 0xd3160a60
2025-11-17T10:45:16.169 [DEBUG] [Thread-52872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:45:16.184 [DEBUG] [Thread-52872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:45:16.184 [INFO] [Thread-52872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] client lang: <none>
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] server lang: <none>
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] kex follows: False
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:45:16.193 [DEBUG] [Thread-52872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:45:16.194 [DEBUG] [Thread-52872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:45:16.194 [DEBUG] [Thread-52872] [transport.py] [_log()] Compression: none
2025-11-17T10:45:16.194 [DEBUG] [Thread-52872] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:45:16.250 [DEBUG] [Thread-52872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:45:16.250 [DEBUG] [Thread-52872] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:45:16.251 [DEBUG] [Thread-52872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:45:16.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:45:16.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:45:16.306 [DEBUG] [Thread-52872] [transport.py] [_log()] userauth is OK
2025-11-17T10:45:16.306 [DEBUG] [Thread-52872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:45:16.307 [DEBUG] [Thread-52872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:45:16.307 [DEBUG] [Thread-52872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:45:16.307 [DEBUG] [Thread-52872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:45:16.326 [INFO] [Thread-52872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:45:16.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:45:16.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:45:17.178 [DEBUG] [Thread-52872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:45:17.178 [DEBUG] [Thread-52872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:45:17.226 [DEBUG] [Thread-52872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:45:17.226 [DEBUG] [Thread-52872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:45:17.235 [DEBUG] [Thread-52872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:45:17.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:45:17.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:45:17.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:45:17.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:45:17.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:45:17.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:45:17.269 [DEBUG] [Thread-52872] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:45:25.188 [DEBUG] [Thread-52874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:45:28.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:45:28.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:45:40.230 [DEBUG] [Thread-52875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:45:47.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:45:47.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:45:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:45:47.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 45, 34), 21.48, 23.39, 0.0, 16.9, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:45:47.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:45:34
2025-11-17T10:45:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:45:48.227 [DEBUG] [Thread-52876] [transport.py] [_log()] starting thread (client mode): 0xd31520e0
2025-11-17T10:45:48.227 [DEBUG] [Thread-52876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:45:48.248 [DEBUG] [Thread-52876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:45:48.248 [INFO] [Thread-52876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:45:48.251 [DEBUG] [Thread-52876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:45:48.251 [DEBUG] [Thread-52876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:45:48.251 [DEBUG] [Thread-52876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:45:48.251 [DEBUG] [Thread-52876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:45:48.251 [DEBUG] [Thread-52876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:45:48.251 [DEBUG] [Thread-52876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:45:48.251 [DEBUG] [Thread-52876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:45:48.251 [DEBUG] [Thread-52876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] client lang: <none>
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] server lang: <none>
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] kex follows: False
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:45:48.252 [DEBUG] [Thread-52876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:45:48.253 [DEBUG] [Thread-52876] [transport.py] [_log()] Compression: none
2025-11-17T10:45:48.253 [DEBUG] [Thread-52876] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:45:48.269 [DEBUG] [Thread-52876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:45:48.270 [DEBUG] [Thread-52876] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:45:48.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:45:48.271 [DEBUG] [Thread-52876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:45:48.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:45:48.273 [DEBUG] [Thread-52876] [transport.py] [_log()] userauth is OK
2025-11-17T10:45:48.273 [DEBUG] [Thread-52876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:45:48.273 [DEBUG] [Thread-52876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:45:48.273 [DEBUG] [Thread-52876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:45:48.273 [DEBUG] [Thread-52876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:45:48.311 [INFO] [Thread-52876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:45:48.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:45:48.859 [DEBUG] [Thread-52876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:45:48.859 [DEBUG] [Thread-52876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:45:48.859 [DEBUG] [Thread-52876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:45:48.899 [DEBUG] [Thread-52876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:45:48.899 [DEBUG] [Thread-52876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:45:48.902 [DEBUG] [Thread-52876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:45:48.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:45:48.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:45:48.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:45:48.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:45:48.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:45:48.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:45:48.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:45:48.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:45:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:45:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.364632 -999.00  +18.40  23.20     31   +1.20 1 1 1 1 1   888    0 17.88 38.88 ----- 23.2 23.2 50.4 27.5 25.8 -24.8 24.9 -25.9 23.9 -25.4 24.7 -24.3
2025-11-17T10:45:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:45:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:45:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.364632
2025-11-17T10:45:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:45:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:45:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:45:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:45:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:45:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:45:34', tmtdew=21.48, humidity=23.39, cloud=0.0, wind=16.9, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:45:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:45:48.928 [DEBUG] [Thread-52876] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:45:49.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:45:49.020 [DEBUG] [Thread-52879] [transport.py] [_log()] starting thread (client mode): 0xd31cfc70
2025-11-17T10:45:49.020 [DEBUG] [Thread-52879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:45:49.035 [DEBUG] [Thread-52879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:45:49.035 [INFO] [Thread-52879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:45:49.047 [DEBUG] [Thread-52879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:45:49.047 [DEBUG] [Thread-52879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] client lang: <none>
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] server lang: <none>
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] kex follows: False
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:45:49.048 [DEBUG] [Thread-52879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:45:49.049 [DEBUG] [Thread-52879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:45:49.049 [DEBUG] [Thread-52879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:45:49.049 [DEBUG] [Thread-52879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:45:49.049 [DEBUG] [Thread-52879] [transport.py] [_log()] Compression: none
2025-11-17T10:45:49.049 [DEBUG] [Thread-52879] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:45:49.106 [DEBUG] [Thread-52879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:45:49.106 [DEBUG] [Thread-52879] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:45:49.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:45:49.107 [DEBUG] [Thread-52879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:45:49.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:45:49.162 [DEBUG] [Thread-52879] [transport.py] [_log()] userauth is OK
2025-11-17T10:45:49.162 [DEBUG] [Thread-52879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:45:49.162 [DEBUG] [Thread-52879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:45:49.163 [DEBUG] [Thread-52879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:45:49.163 [DEBUG] [Thread-52879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:45:49.182 [INFO] [Thread-52879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:45:49.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:45:49.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:45:50.033 [DEBUG] [Thread-52879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:45:50.033 [DEBUG] [Thread-52879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:45:50.081 [DEBUG] [Thread-52879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:45:50.081 [DEBUG] [Thread-52879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:45:50.090 [DEBUG] [Thread-52879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:45:50.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:45:50.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:45:50.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:45:50.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:45:50.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:45:50.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:45:50.124 [DEBUG] [Thread-52879] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:45:55.261 [DEBUG] [Thread-52881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:46:04.509 [DEBUG] [Thread-52882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:46:10.303 [DEBUG] [Thread-52883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:46:20.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:46:20.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:46:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:46:20.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 46, 6), 20.63, 24.85, 0.0, 17.82, 18.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:46:20.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:46:06
2025-11-17T10:46:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:46:21.075 [DEBUG] [Thread-52884] [transport.py] [_log()] starting thread (client mode): 0xd0712aa0
2025-11-17T10:46:21.075 [DEBUG] [Thread-52884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:46:21.093 [DEBUG] [Thread-52884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:46:21.093 [INFO] [Thread-52884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:46:21.094 [DEBUG] [Thread-52884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:46:21.094 [DEBUG] [Thread-52884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:46:21.094 [DEBUG] [Thread-52884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:46:21.094 [DEBUG] [Thread-52884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:46:21.094 [DEBUG] [Thread-52884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:46:21.094 [DEBUG] [Thread-52884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] client lang: <none>
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] server lang: <none>
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] kex follows: False
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] Compression: none
2025-11-17T10:46:21.095 [DEBUG] [Thread-52884] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:46:21.103 [DEBUG] [Thread-52884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:46:21.103 [DEBUG] [Thread-52884] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:46:21.103 [DEBUG] [Thread-52884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:46:21.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:46:21.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:46:21.105 [DEBUG] [Thread-52884] [transport.py] [_log()] userauth is OK
2025-11-17T10:46:21.105 [DEBUG] [Thread-52884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:46:21.105 [DEBUG] [Thread-52884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:46:21.105 [DEBUG] [Thread-52884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:46:21.105 [DEBUG] [Thread-52884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:46:21.123 [INFO] [Thread-52884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:46:21.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:46:21.951 [DEBUG] [Thread-52884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:46:21.951 [DEBUG] [Thread-52884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:46:21.951 [DEBUG] [Thread-52884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:46:21.991 [DEBUG] [Thread-52884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:46:21.991 [DEBUG] [Thread-52884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:46:21.994 [DEBUG] [Thread-52884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:46:22.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:46:22.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:46:22.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:46:22.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:46:22.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:46:22.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:46:22.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:46:22.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:46:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:46:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.364979 -999.00  +18.20  20.52     31   +0.90 1 1 1 1 1   888    0 18.13 43.44 ----- 20.5 20.5 63.2 29.4 25.6 -24.5 24.7 -25.4 23.8 -25.8 24.6 -24.9
2025-11-17T10:46:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:46:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:46:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.364979
2025-11-17T10:46:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:46:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:46:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:46:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:46:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:46:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:46:06', tmtdew=20.63, humidity=24.85, cloud=0.0, wind=17.82, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:45:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:46:22.019 [DEBUG] [Thread-52884] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:46:22.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:46:22.116 [DEBUG] [Thread-52887] [transport.py] [_log()] starting thread (client mode): 0xd07ccb50
2025-11-17T10:46:22.116 [DEBUG] [Thread-52887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:46:22.132 [DEBUG] [Thread-52887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:46:22.132 [INFO] [Thread-52887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:46:22.143 [DEBUG] [Thread-52887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:46:22.143 [DEBUG] [Thread-52887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:46:22.143 [DEBUG] [Thread-52887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:46:22.143 [DEBUG] [Thread-52887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:46:22.143 [DEBUG] [Thread-52887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:46:22.143 [DEBUG] [Thread-52887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:46:22.143 [DEBUG] [Thread-52887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:46:22.143 [DEBUG] [Thread-52887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] client lang: <none>
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] server lang: <none>
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] kex follows: False
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:46:22.144 [DEBUG] [Thread-52887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:46:22.145 [DEBUG] [Thread-52887] [transport.py] [_log()] Compression: none
2025-11-17T10:46:22.145 [DEBUG] [Thread-52887] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:46:22.203 [DEBUG] [Thread-52887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:46:22.203 [DEBUG] [Thread-52887] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:46:22.204 [DEBUG] [Thread-52887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:46:22.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:46:22.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:46:22.260 [DEBUG] [Thread-52887] [transport.py] [_log()] userauth is OK
2025-11-17T10:46:22.260 [DEBUG] [Thread-52887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:46:22.260 [DEBUG] [Thread-52887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:46:22.260 [DEBUG] [Thread-52887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:46:22.260 [DEBUG] [Thread-52887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:46:22.280 [INFO] [Thread-52887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:46:22.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:46:22.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:46:23.144 [DEBUG] [Thread-52887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:46:23.144 [DEBUG] [Thread-52887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:46:23.192 [DEBUG] [Thread-52887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:46:23.192 [DEBUG] [Thread-52887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:46:23.204 [DEBUG] [Thread-52887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:46:23.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:46:23.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:46:23.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:46:23.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:46:23.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:46:23.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:46:23.242 [DEBUG] [Thread-52887] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:46:25.331 [DEBUG] [Thread-52889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:46:28.546 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:46:28.547 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:46:40.373 [DEBUG] [Thread-52890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:46:53.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:46:53.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:46:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:46:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 46, 38), 20.9, 24.3, 0.0, 12.07, 18.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:46:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:46:38
2025-11-17T10:46:54.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:46:54.175 [DEBUG] [Thread-52891] [transport.py] [_log()] starting thread (client mode): 0xd0787370
2025-11-17T10:46:54.175 [DEBUG] [Thread-52891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:46:54.195 [DEBUG] [Thread-52891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:46:54.195 [INFO] [Thread-52891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] client lang: <none>
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] server lang: <none>
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] kex follows: False
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] Compression: none
2025-11-17T10:46:54.199 [DEBUG] [Thread-52891] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:46:54.221 [DEBUG] [Thread-52891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:46:54.222 [DEBUG] [Thread-52891] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:46:54.222 [DEBUG] [Thread-52891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:46:54.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:46:54.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:46:54.225 [DEBUG] [Thread-52891] [transport.py] [_log()] userauth is OK
2025-11-17T10:46:54.225 [DEBUG] [Thread-52891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:46:54.225 [DEBUG] [Thread-52891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:46:54.225 [DEBUG] [Thread-52891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:46:54.225 [DEBUG] [Thread-52891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:46:54.250 [INFO] [Thread-52891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:46:54.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:46:54.905 [DEBUG] [Thread-52891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:46:54.905 [DEBUG] [Thread-52891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:46:54.906 [DEBUG] [Thread-52891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:46:54.946 [DEBUG] [Thread-52891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:46:54.947 [DEBUG] [Thread-52891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:46:54.950 [DEBUG] [Thread-52891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:46:54.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:46:54.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:46:54.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:46:54.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:46:54.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:46:54.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:46:54.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:46:54.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:46:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:46:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.365674 -999.00  +18.60  21.96     30   +1.10 1 1 1 1 1   888    0 18.14 41.14 ----- 22.0 22.0 45.8 24.8 25.7 -26.4 24.7 -26.0 23.8 -23.3 24.6 -23.4
2025-11-17T10:46:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:46:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:46:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.365674
2025-11-17T10:46:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:46:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:46:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:46:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:46:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:46:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:46:38', tmtdew=20.9, humidity=24.3, cloud=0.0, wind=12.07, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:46:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:46:54.977 [DEBUG] [Thread-52891] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:46:55.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:46:55.077 [DEBUG] [Thread-52894] [transport.py] [_log()] starting thread (client mode): 0xd071bfd0
2025-11-17T10:46:55.077 [DEBUG] [Thread-52894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:46:55.093 [DEBUG] [Thread-52894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:46:55.093 [INFO] [Thread-52894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:46:55.100 [DEBUG] [Thread-52894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:46:55.101 [DEBUG] [Thread-52894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:46:55.101 [DEBUG] [Thread-52894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:46:55.101 [DEBUG] [Thread-52894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:46:55.101 [DEBUG] [Thread-52894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:46:55.101 [DEBUG] [Thread-52894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:46:55.101 [DEBUG] [Thread-52894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:46:55.101 [DEBUG] [Thread-52894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:46:55.101 [DEBUG] [Thread-52894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] client lang: <none>
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] server lang: <none>
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] kex follows: False
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:46:55.102 [DEBUG] [Thread-52894] [transport.py] [_log()] Compression: none
2025-11-17T10:46:55.103 [DEBUG] [Thread-52894] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:46:55.159 [DEBUG] [Thread-52894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:46:55.160 [DEBUG] [Thread-52894] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:46:55.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:46:55.161 [DEBUG] [Thread-52894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:46:55.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:46:55.222 [DEBUG] [Thread-52894] [transport.py] [_log()] userauth is OK
2025-11-17T10:46:55.223 [DEBUG] [Thread-52894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:46:55.223 [DEBUG] [Thread-52894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:46:55.223 [DEBUG] [Thread-52894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:46:55.223 [DEBUG] [Thread-52894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:46:55.241 [INFO] [Thread-52894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:46:55.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:46:55.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:46:55.402 [DEBUG] [Thread-52896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:46:56.121 [DEBUG] [Thread-52894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:46:56.121 [DEBUG] [Thread-52894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:46:56.170 [DEBUG] [Thread-52894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:46:56.170 [DEBUG] [Thread-52894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:46:56.179 [DEBUG] [Thread-52894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:46:56.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:46:56.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:46:56.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:46:56.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:46:56.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:46:56.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:46:56.214 [DEBUG] [Thread-52894] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:47:04.558 [DEBUG] [Thread-52897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:47:10.447 [DEBUG] [Thread-52898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:47:25.475 [DEBUG] [Thread-52899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:47:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:47:26.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:47:26.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
2025-11-17T10:47:26.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 47, 10), 20.87, 24.38, 0.0, 19.85, 19.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:47:26.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:47:10
2025-11-17T10:47:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:47:27.187 [DEBUG] [Thread-52900] [transport.py] [_log()] starting thread (client mode): 0xd0786530
2025-11-17T10:47:27.187 [DEBUG] [Thread-52900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:47:27.207 [DEBUG] [Thread-52900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:47:27.207 [INFO] [Thread-52900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] client lang: <none>
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] server lang: <none>
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] kex follows: False
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:47:27.210 [DEBUG] [Thread-52900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:47:27.211 [DEBUG] [Thread-52900] [transport.py] [_log()] Compression: none
2025-11-17T10:47:27.211 [DEBUG] [Thread-52900] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:47:27.228 [DEBUG] [Thread-52900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:47:27.228 [DEBUG] [Thread-52900] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:47:27.229 [DEBUG] [Thread-52900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:47:27.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:47:27.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:47:27.231 [DEBUG] [Thread-52900] [transport.py] [_log()] userauth is OK
2025-11-17T10:47:27.231 [DEBUG] [Thread-52900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:47:27.231 [DEBUG] [Thread-52900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:47:27.231 [DEBUG] [Thread-52900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:47:27.231 [DEBUG] [Thread-52900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:47:27.266 [INFO] [Thread-52900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:47:27.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:47:27.908 [DEBUG] [Thread-52900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:47:27.908 [DEBUG] [Thread-52900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:47:27.908 [DEBUG] [Thread-52900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:47:27.949 [DEBUG] [Thread-52900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:47:27.949 [DEBUG] [Thread-52900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:47:27.952 [DEBUG] [Thread-52900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:47:27.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:47:27.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:47:27.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:47:27.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:47:27.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:47:27.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:47:27.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:47:27.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:47:27.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:47:27.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.366021 -999.00  +18.70  15.95     30   +1.10 1 1 1 1 1   888    0 18.14 44.72 ----- 15.9 15.9 63.0 20.9 25.7 -26.4 24.7 -25.2 23.7 -23.6 24.6 -23.9
2025-11-17T10:47:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:47:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:47:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.366021
2025-11-17T10:47:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:47:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:47:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:47:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:47:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:47:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:47:10', tmtdew=20.87, humidity=24.38, cloud=0.0, wind=19.85, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:47:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:47:27.972 [DEBUG] [Thread-52900] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:47:28.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:47:28.070 [DEBUG] [Thread-52903] [transport.py] [_log()] starting thread (client mode): 0xd07859c0
2025-11-17T10:47:28.070 [DEBUG] [Thread-52903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:47:28.085 [DEBUG] [Thread-52903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:47:28.086 [INFO] [Thread-52903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:47:28.093 [DEBUG] [Thread-52903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:47:28.093 [DEBUG] [Thread-52903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:47:28.093 [DEBUG] [Thread-52903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:47:28.093 [DEBUG] [Thread-52903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:47:28.093 [DEBUG] [Thread-52903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:47:28.093 [DEBUG] [Thread-52903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:47:28.093 [DEBUG] [Thread-52903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:47:28.093 [DEBUG] [Thread-52903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] client lang: <none>
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] server lang: <none>
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] kex follows: False
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] Compression: none
2025-11-17T10:47:28.094 [DEBUG] [Thread-52903] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:47:28.150 [DEBUG] [Thread-52903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:47:28.150 [DEBUG] [Thread-52903] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:47:28.151 [DEBUG] [Thread-52903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:47:28.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:47:28.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:47:28.207 [DEBUG] [Thread-52903] [transport.py] [_log()] userauth is OK
2025-11-17T10:47:28.207 [DEBUG] [Thread-52903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:47:28.207 [DEBUG] [Thread-52903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:47:28.207 [DEBUG] [Thread-52903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:47:28.207 [DEBUG] [Thread-52903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:47:28.227 [INFO] [Thread-52903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:47:28.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:47:28.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:47:28.689 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:47:28.690 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:47:29.151 [DEBUG] [Thread-52903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:47:29.151 [DEBUG] [Thread-52903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:47:29.199 [DEBUG] [Thread-52903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:47:29.199 [DEBUG] [Thread-52903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:47:29.208 [DEBUG] [Thread-52903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:47:29.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:47:29.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:47:29.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:47:29.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:47:29.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:47:29.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:47:29.242 [DEBUG] [Thread-52903] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:47:40.507 [DEBUG] [Thread-52905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:47:55.546 [DEBUG] [Thread-52906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:47:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:47:59.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:47:59.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
2025-11-17T10:47:59.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 47, 42), 21.2, 24.0, 0.0, 15.77, 19.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:47:59.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:47:42
2025-11-17T10:48:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:48:00.165 [DEBUG] [Thread-52907] [transport.py] [_log()] starting thread (client mode): 0xd07cd840
2025-11-17T10:48:00.165 [DEBUG] [Thread-52907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:48:00.185 [DEBUG] [Thread-52907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:48:00.185 [INFO] [Thread-52907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:48:00.188 [DEBUG] [Thread-52907] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] client lang: <none>
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] server lang: <none>
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] kex follows: False
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:48:00.189 [DEBUG] [Thread-52907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:48:00.190 [DEBUG] [Thread-52907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:48:00.190 [DEBUG] [Thread-52907] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:48:00.190 [DEBUG] [Thread-52907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:48:00.190 [DEBUG] [Thread-52907] [transport.py] [_log()] Compression: none
2025-11-17T10:48:00.190 [DEBUG] [Thread-52907] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:48:00.199 [DEBUG] [Thread-52907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:48:00.199 [DEBUG] [Thread-52907] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:48:00.200 [DEBUG] [Thread-52907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:48:00.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:48:00.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:48:00.201 [DEBUG] [Thread-52907] [transport.py] [_log()] userauth is OK
2025-11-17T10:48:00.201 [DEBUG] [Thread-52907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:48:00.202 [DEBUG] [Thread-52907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:48:00.202 [DEBUG] [Thread-52907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:48:00.202 [DEBUG] [Thread-52907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:48:00.219 [INFO] [Thread-52907] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:48:00.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:48:00.888 [DEBUG] [Thread-52907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:48:00.888 [DEBUG] [Thread-52907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:48:00.889 [DEBUG] [Thread-52907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:48:00.930 [DEBUG] [Thread-52907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:48:00.930 [DEBUG] [Thread-52907] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:48:00.933 [DEBUG] [Thread-52907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:48:00.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:48:00.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:48:00.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:48:00.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:48:00.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:48:00.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:48:00.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:48:00.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:48:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:48:00.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.366368 -999.00  +18.80  22.01     30   +1.20 1 1 1 1 1   888    0 18.41 48.34 ----- 22.0 22.0 49.8 25.7 25.7 -24.0 24.8 -24.2 23.7 -24.3 24.6 -24.3
2025-11-17T10:48:00.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:48:00.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:48:00.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.366368
2025-11-17T10:48:00.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:48:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:48:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:48:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:48:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:48:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:47:42', tmtdew=21.2, humidity=24.0, cloud=0.0, wind=15.77, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:47:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:48:00.959 [DEBUG] [Thread-52907] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:48:01.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:48:04.610 [DEBUG] [Thread-52910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:48:10.574 [DEBUG] [Thread-52911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:48:25.612 [DEBUG] [Thread-52912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:48:28.830 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:48:28.831 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:48:40.639 [DEBUG] [Thread-52913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:48:55.684 [DEBUG] [Thread-52914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:49:04.665 [DEBUG] [Thread-52915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:49:10.710 [DEBUG] [Thread-52916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:49:25.736 [DEBUG] [Thread-52917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:49:28.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:49:28.973 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:49:40.769 [DEBUG] [Thread-52918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:49:55.802 [DEBUG] [Thread-52919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:50:04.719 [DEBUG] [Thread-52920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:50:10.832 [DEBUG] [Thread-52921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:50:15.355 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T10:50:25.862 [DEBUG] [Thread-52922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:50:29.113 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:50:29.113 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:50:40.896 [DEBUG] [Thread-52923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:50:45.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:50:45.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:50:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:50:46.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 50, 22), 20.94, 24.1, 0.0, 8.88, 18.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:50:46.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:50:22
2025-11-17T10:50:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:50:46.322 [DEBUG] [Thread-52924] [transport.py] [_log()] starting thread (client mode): 0xd07bea10
2025-11-17T10:50:46.323 [DEBUG] [Thread-52924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:50:46.343 [DEBUG] [Thread-52924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:50:46.343 [INFO] [Thread-52924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] client lang: <none>
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] server lang: <none>
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] kex follows: False
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:50:46.347 [DEBUG] [Thread-52924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:50:46.348 [DEBUG] [Thread-52924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:50:46.348 [DEBUG] [Thread-52924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:50:46.348 [DEBUG] [Thread-52924] [transport.py] [_log()] Compression: none
2025-11-17T10:50:46.348 [DEBUG] [Thread-52924] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:50:46.366 [DEBUG] [Thread-52924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:50:46.367 [DEBUG] [Thread-52924] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:50:46.367 [DEBUG] [Thread-52924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:50:46.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:50:46.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:50:46.369 [DEBUG] [Thread-52924] [transport.py] [_log()] userauth is OK
2025-11-17T10:50:46.369 [DEBUG] [Thread-52924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:50:46.369 [DEBUG] [Thread-52924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:50:46.370 [DEBUG] [Thread-52924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:50:46.370 [DEBUG] [Thread-52924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:50:46.394 [INFO] [Thread-52924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:50:46.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:50:46.996 [DEBUG] [Thread-52924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:50:46.996 [DEBUG] [Thread-52924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:50:46.997 [DEBUG] [Thread-52924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:50:47.036 [DEBUG] [Thread-52924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:50:47.037 [DEBUG] [Thread-52924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:50:47.039 [DEBUG] [Thread-52924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:50:47.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:50:47.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:50:47.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:50:47.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:50:47.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:50:47.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:50:47.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:50:47.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:50:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:50:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.368451 -999.00  +18.30   9.02     31   +0.90 1 1 1 1 1   888    0 18.51 47.08 ----- 9.0 9.0 78.0 11.6 25.6 -24.2 24.9 -23.6 23.9 -23.3 24.7 -24.1
2025-11-17T10:50:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:50:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:50:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.368451
2025-11-17T10:50:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:50:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:50:47.062 [DEBUG] [Thread-52924] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:50:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:50:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:50:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:50:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:50:22', tmtdew=20.94, humidity=24.1, cloud=0.0, wind=8.88, temperature=18.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:50:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:50:47.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:50:47.153 [DEBUG] [Thread-52927] [transport.py] [_log()] starting thread (client mode): 0xd3160e80
2025-11-17T10:50:47.154 [DEBUG] [Thread-52927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:50:47.168 [DEBUG] [Thread-52927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:50:47.168 [INFO] [Thread-52927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] client lang: <none>
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] server lang: <none>
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] kex follows: False
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:50:47.176 [DEBUG] [Thread-52927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:50:47.177 [DEBUG] [Thread-52927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:50:47.177 [DEBUG] [Thread-52927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:50:47.177 [DEBUG] [Thread-52927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:50:47.177 [DEBUG] [Thread-52927] [transport.py] [_log()] Compression: none
2025-11-17T10:50:47.177 [DEBUG] [Thread-52927] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:50:47.234 [DEBUG] [Thread-52927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:50:47.235 [DEBUG] [Thread-52927] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:50:47.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:50:47.236 [DEBUG] [Thread-52927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:50:47.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:50:47.290 [DEBUG] [Thread-52927] [transport.py] [_log()] userauth is OK
2025-11-17T10:50:47.290 [DEBUG] [Thread-52927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:50:47.291 [DEBUG] [Thread-52927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:50:47.291 [DEBUG] [Thread-52927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:50:47.291 [DEBUG] [Thread-52927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:50:47.310 [INFO] [Thread-52927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:50:47.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:50:47.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:50:48.202 [DEBUG] [Thread-52927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:50:48.202 [DEBUG] [Thread-52927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:50:48.250 [DEBUG] [Thread-52927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:50:48.250 [DEBUG] [Thread-52927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:50:48.259 [DEBUG] [Thread-52927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:50:48.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:50:48.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:50:48.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:50:48.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:50:48.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:50:48.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:50:48.294 [DEBUG] [Thread-52927] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:50:55.925 [DEBUG] [Thread-52929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:51:04.772 [DEBUG] [Thread-52930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:51:10.953 [DEBUG] [Thread-52931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:51:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:51:18.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:51:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:51:18.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 50, 54), 20.77, 24.21, 0.0, 9.0, 18.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:51:18.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:50:54
2025-11-17T10:51:19.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:51:19.252 [DEBUG] [Thread-52932] [transport.py] [_log()] starting thread (client mode): 0xd071bac0
2025-11-17T10:51:19.253 [DEBUG] [Thread-52932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:51:19.272 [DEBUG] [Thread-52932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:51:19.272 [INFO] [Thread-52932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] client lang: <none>
2025-11-17T10:51:19.276 [DEBUG] [Thread-52932] [transport.py] [_log()] server lang: <none>
2025-11-17T10:51:19.277 [DEBUG] [Thread-52932] [transport.py] [_log()] kex follows: False
2025-11-17T10:51:19.277 [DEBUG] [Thread-52932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:51:19.277 [DEBUG] [Thread-52932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:51:19.277 [DEBUG] [Thread-52932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:51:19.277 [DEBUG] [Thread-52932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:51:19.277 [DEBUG] [Thread-52932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:51:19.277 [DEBUG] [Thread-52932] [transport.py] [_log()] Compression: none
2025-11-17T10:51:19.277 [DEBUG] [Thread-52932] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:51:19.299 [DEBUG] [Thread-52932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:51:19.299 [DEBUG] [Thread-52932] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:51:19.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:51:19.300 [DEBUG] [Thread-52932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:51:19.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:51:19.303 [DEBUG] [Thread-52932] [transport.py] [_log()] userauth is OK
2025-11-17T10:51:19.303 [DEBUG] [Thread-52932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:51:19.303 [DEBUG] [Thread-52932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:51:19.303 [DEBUG] [Thread-52932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:51:19.303 [DEBUG] [Thread-52932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:51:19.337 [INFO] [Thread-52932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:51:19.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:51:19.954 [DEBUG] [Thread-52932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:51:19.954 [DEBUG] [Thread-52932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:51:19.954 [DEBUG] [Thread-52932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:51:19.995 [DEBUG] [Thread-52932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:51:19.996 [DEBUG] [Thread-52932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:51:19.998 [DEBUG] [Thread-52932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:51:20.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:51:20.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:51:20.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:51:20.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:51:20.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:51:20.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:51:20.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:51:20.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:51:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:51:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.368799 -999.00  +18.30  13.10     31   +0.90 1 1 1 1 1   888    0 18.74 48.84 ----- 13.1 13.1 78.2 14.8 25.6 -24.2 25.0 -23.6 24.0 -23.2 24.9 -23.2
2025-11-17T10:51:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:51:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:51:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.368799
2025-11-17T10:51:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:51:20.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:51:20.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:51:20.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:51:20.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:51:20.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:50:54', tmtdew=20.77, humidity=24.21, cloud=0.0, wind=9.0, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:51:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:51:20.024 [DEBUG] [Thread-52932] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:51:20.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:51:20.121 [DEBUG] [Thread-52935] [transport.py] [_log()] starting thread (client mode): 0xd31cc8e0
2025-11-17T10:51:20.121 [DEBUG] [Thread-52935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:51:20.136 [DEBUG] [Thread-52935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:51:20.136 [INFO] [Thread-52935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:51:20.144 [DEBUG] [Thread-52935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:51:20.144 [DEBUG] [Thread-52935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:51:20.144 [DEBUG] [Thread-52935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:51:20.144 [DEBUG] [Thread-52935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:51:20.144 [DEBUG] [Thread-52935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:51:20.144 [DEBUG] [Thread-52935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:51:20.144 [DEBUG] [Thread-52935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:51:20.144 [DEBUG] [Thread-52935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] client lang: <none>
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] server lang: <none>
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] kex follows: False
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:51:20.145 [DEBUG] [Thread-52935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:51:20.146 [DEBUG] [Thread-52935] [transport.py] [_log()] Compression: none
2025-11-17T10:51:20.146 [DEBUG] [Thread-52935] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:51:20.202 [DEBUG] [Thread-52935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:51:20.202 [DEBUG] [Thread-52935] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:51:20.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:51:20.203 [DEBUG] [Thread-52935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:51:20.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:51:20.258 [DEBUG] [Thread-52935] [transport.py] [_log()] userauth is OK
2025-11-17T10:51:20.259 [DEBUG] [Thread-52935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:51:20.259 [DEBUG] [Thread-52935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:51:20.259 [DEBUG] [Thread-52935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:51:20.259 [DEBUG] [Thread-52935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:51:20.278 [INFO] [Thread-52935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:51:20.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:51:20.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:51:21.220 [DEBUG] [Thread-52935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:51:21.220 [DEBUG] [Thread-52935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:51:21.268 [DEBUG] [Thread-52935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:51:21.268 [DEBUG] [Thread-52935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:51:21.277 [DEBUG] [Thread-52935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:51:21.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:51:21.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:51:21.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:51:21.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:51:21.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:51:21.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:51:21.312 [DEBUG] [Thread-52935] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:51:25.980 [DEBUG] [Thread-52937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:51:29.255 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:51:29.256 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:51:41.020 [DEBUG] [Thread-52938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:51:51.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:51:51.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:51:51.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:51:51.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 51, 26), 20.83, 24.16, 0.0, 15.86, 18.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:51:51.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:51:26
2025-11-17T10:51:52.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:51:52.269 [DEBUG] [Thread-52939] [transport.py] [_log()] starting thread (client mode): 0xd07be500
2025-11-17T10:51:52.269 [DEBUG] [Thread-52939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:51:52.294 [DEBUG] [Thread-52939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:51:52.294 [INFO] [Thread-52939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:51:52.298 [DEBUG] [Thread-52939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:51:52.298 [DEBUG] [Thread-52939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:51:52.298 [DEBUG] [Thread-52939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:51:52.298 [DEBUG] [Thread-52939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] client lang: <none>
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] server lang: <none>
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] kex follows: False
2025-11-17T10:51:52.299 [DEBUG] [Thread-52939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:51:52.300 [DEBUG] [Thread-52939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:51:52.300 [DEBUG] [Thread-52939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:51:52.300 [DEBUG] [Thread-52939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:51:52.300 [DEBUG] [Thread-52939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:51:52.300 [DEBUG] [Thread-52939] [transport.py] [_log()] Compression: none
2025-11-17T10:51:52.300 [DEBUG] [Thread-52939] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:51:52.321 [DEBUG] [Thread-52939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:51:52.322 [DEBUG] [Thread-52939] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:51:52.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:51:52.323 [DEBUG] [Thread-52939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:51:52.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:51:52.325 [DEBUG] [Thread-52939] [transport.py] [_log()] userauth is OK
2025-11-17T10:51:52.325 [DEBUG] [Thread-52939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:51:52.325 [DEBUG] [Thread-52939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:51:52.325 [DEBUG] [Thread-52939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:51:52.325 [DEBUG] [Thread-52939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:51:52.349 [INFO] [Thread-52939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:51:52.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:51:52.912 [DEBUG] [Thread-52939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:51:52.912 [DEBUG] [Thread-52939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:51:52.913 [DEBUG] [Thread-52939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:51:52.954 [DEBUG] [Thread-52939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:51:52.954 [DEBUG] [Thread-52939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:51:52.957 [DEBUG] [Thread-52939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:51:52.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:51:52.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:51:52.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:51:52.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:51:52.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:51:52.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:51:52.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:51:52.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:51:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:51:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.369146 -999.00  +18.40  14.85     31   +1.10 1 1 1 1 1   888    0 18.31 48.19 ----- 14.8 14.8 44.1 17.6 25.9 -23.7 25.1 -24.3 24.1 -24.0 24.9 -23.7
2025-11-17T10:51:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:51:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:51:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.369146
2025-11-17T10:51:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:51:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:51:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:51:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:51:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:51:52.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:51:26', tmtdew=20.83, humidity=24.16, cloud=0.0, wind=15.86, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:51:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:51:52.984 [DEBUG] [Thread-52939] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:51:53.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:51:53.080 [DEBUG] [Thread-52942] [transport.py] [_log()] starting thread (client mode): 0xd07bc130
2025-11-17T10:51:53.080 [DEBUG] [Thread-52942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:51:53.095 [DEBUG] [Thread-52942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:51:53.095 [INFO] [Thread-52942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] client lang: <none>
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] server lang: <none>
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] kex follows: False
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:51:53.103 [DEBUG] [Thread-52942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:51:53.104 [DEBUG] [Thread-52942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:51:53.104 [DEBUG] [Thread-52942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:51:53.104 [DEBUG] [Thread-52942] [transport.py] [_log()] Compression: none
2025-11-17T10:51:53.104 [DEBUG] [Thread-52942] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:51:53.162 [DEBUG] [Thread-52942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:51:53.162 [DEBUG] [Thread-52942] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:51:53.163 [DEBUG] [Thread-52942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:51:53.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:51:53.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:51:53.218 [DEBUG] [Thread-52942] [transport.py] [_log()] userauth is OK
2025-11-17T10:51:53.218 [DEBUG] [Thread-52942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:51:53.218 [DEBUG] [Thread-52942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:51:53.219 [DEBUG] [Thread-52942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:51:53.219 [DEBUG] [Thread-52942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:51:53.241 [INFO] [Thread-52942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:51:53.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:51:53.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:51:54.099 [DEBUG] [Thread-52942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:51:54.099 [DEBUG] [Thread-52942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:51:54.147 [DEBUG] [Thread-52942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:51:54.147 [DEBUG] [Thread-52942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:51:54.157 [DEBUG] [Thread-52942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:51:54.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:51:54.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:51:54.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:51:54.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:51:54.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:51:54.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:51:54.191 [DEBUG] [Thread-52942] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:51:56.050 [DEBUG] [Thread-52944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:52:04.823 [DEBUG] [Thread-52945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:52:11.099 [DEBUG] [Thread-52946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:52:24.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:52:24.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:52:24.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:52:24.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 51, 58), 20.84, 24.52, 0.0, 17.86, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:52:24.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:51:58
2025-11-17T10:52:25.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:52:25.194 [DEBUG] [Thread-52947] [transport.py] [_log()] starting thread (client mode): 0xd07bd720
2025-11-17T10:52:25.194 [DEBUG] [Thread-52947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:52:25.213 [DEBUG] [Thread-52947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:52:25.213 [INFO] [Thread-52947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:52:25.216 [DEBUG] [Thread-52947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] client lang: <none>
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] server lang: <none>
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] kex follows: False
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] Compression: none
2025-11-17T10:52:25.217 [DEBUG] [Thread-52947] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:52:25.233 [DEBUG] [Thread-52947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:52:25.233 [DEBUG] [Thread-52947] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:52:25.233 [DEBUG] [Thread-52947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:52:25.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:52:25.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:52:25.234 [DEBUG] [Thread-52947] [transport.py] [_log()] userauth is OK
2025-11-17T10:52:25.234 [DEBUG] [Thread-52947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:52:25.234 [DEBUG] [Thread-52947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:52:25.234 [DEBUG] [Thread-52947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:52:25.234 [DEBUG] [Thread-52947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:52:25.247 [INFO] [Thread-52947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:52:25.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:52:25.893 [DEBUG] [Thread-52947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:52:25.893 [DEBUG] [Thread-52947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:52:25.893 [DEBUG] [Thread-52947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:52:25.934 [DEBUG] [Thread-52947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:52:25.934 [DEBUG] [Thread-52947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:52:25.936 [DEBUG] [Thread-52947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:52:25.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:52:25.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:52:25.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:52:25.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:52:25.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:52:25.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:52:25.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:52:25.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.369493 -999.00  +18.60  11.14     30   +1.10 1 1 1 1 1   888    0 18.75 51.81 ----- 11.1 11.1 77.2 23.5 26.0 -24.3 25.1 -24.3 24.1 -24.1 24.9 -23.4
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.369493
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:52:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:51:58', tmtdew=20.84, humidity=24.52, cloud=0.0, wind=17.86, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:52:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:52:25.957 [DEBUG] [Thread-52947] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:52:26.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:52:26.042 [DEBUG] [Thread-52950] [transport.py] [_log()] starting thread (client mode): 0xd07594e0
2025-11-17T10:52:26.042 [DEBUG] [Thread-52950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:52:26.056 [DEBUG] [Thread-52950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:52:26.057 [INFO] [Thread-52950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] client lang: <none>
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] server lang: <none>
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] kex follows: False
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] Compression: none
2025-11-17T10:52:26.064 [DEBUG] [Thread-52950] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:52:26.125 [DEBUG] [Thread-52950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:52:26.125 [DEBUG] [Thread-52950] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:52:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:52:26.125 [DEBUG] [Thread-52950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:52:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:52:26.126 [DEBUG] [Thread-52952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:52:26.182 [DEBUG] [Thread-52950] [transport.py] [_log()] userauth is OK
2025-11-17T10:52:26.182 [DEBUG] [Thread-52950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:52:26.182 [DEBUG] [Thread-52950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:52:26.182 [DEBUG] [Thread-52950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:52:26.182 [DEBUG] [Thread-52950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:52:26.200 [INFO] [Thread-52950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:52:26.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:52:26.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:52:27.048 [DEBUG] [Thread-52950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:52:27.048 [DEBUG] [Thread-52950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:52:27.098 [DEBUG] [Thread-52950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:52:27.098 [DEBUG] [Thread-52950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:52:27.106 [DEBUG] [Thread-52950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:52:27.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:52:27.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:52:27.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:52:27.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:52:27.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:52:27.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:52:27.142 [DEBUG] [Thread-52950] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:52:29.397 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:52:29.398 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:52:41.159 [DEBUG] [Thread-52953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:52:56.191 [DEBUG] [Thread-52954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:52:57.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:52:57.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:52:57.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:52:57.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 52, 30), 21.07, 24.18, 0.0, 19.09, 19.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:52:57.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:52:30
2025-11-17T10:52:57.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:52:58.079 [DEBUG] [Thread-52955] [transport.py] [_log()] starting thread (client mode): 0xd07875e0
2025-11-17T10:52:58.079 [DEBUG] [Thread-52955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:52:58.097 [DEBUG] [Thread-52955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:52:58.097 [INFO] [Thread-52955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] client lang: <none>
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] server lang: <none>
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] kex follows: False
2025-11-17T10:52:58.099 [DEBUG] [Thread-52955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:52:58.100 [DEBUG] [Thread-52955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:52:58.100 [DEBUG] [Thread-52955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:52:58.100 [DEBUG] [Thread-52955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:52:58.100 [DEBUG] [Thread-52955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:52:58.100 [DEBUG] [Thread-52955] [transport.py] [_log()] Compression: none
2025-11-17T10:52:58.100 [DEBUG] [Thread-52955] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:52:58.116 [DEBUG] [Thread-52955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:52:58.117 [DEBUG] [Thread-52955] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:52:58.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:52:58.118 [DEBUG] [Thread-52955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:52:58.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:52:58.120 [DEBUG] [Thread-52955] [transport.py] [_log()] userauth is OK
2025-11-17T10:52:58.120 [DEBUG] [Thread-52955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:52:58.120 [DEBUG] [Thread-52955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:52:58.120 [DEBUG] [Thread-52955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:52:58.120 [DEBUG] [Thread-52955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:52:58.137 [INFO] [Thread-52955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:52:58.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:52:58.758 [DEBUG] [Thread-52955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:52:58.758 [DEBUG] [Thread-52955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:52:58.758 [DEBUG] [Thread-52955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:52:58.799 [DEBUG] [Thread-52955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:52:58.799 [DEBUG] [Thread-52955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:52:58.801 [DEBUG] [Thread-52955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:52:58.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:52:58.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:52:58.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:52:58.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:52:58.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:52:58.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:52:58.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:52:58.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:52:58.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:52:58.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.369840 -999.00  +18.70  12.41     30   +1.10 1 1 1 1 1   888    0 18.43 46.07 ----- 12.4 12.4 90.1 26.2 25.8 -28.5 25.1 -24.4 24.2 -24.0 24.9 -24.0
2025-11-17T10:52:58.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:52:58.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:52:58.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.369840
2025-11-17T10:52:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:52:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:52:58.822 [DEBUG] [Thread-52955] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:52:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:52:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:52:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:52:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:52:30', tmtdew=21.07, humidity=24.18, cloud=0.0, wind=19.09, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:52:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:52:58.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:52:58.918 [DEBUG] [Thread-52958] [transport.py] [_log()] starting thread (client mode): 0xd31363e0
2025-11-17T10:52:58.918 [DEBUG] [Thread-52958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:52:58.933 [DEBUG] [Thread-52958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:52:58.933 [INFO] [Thread-52958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:52:58.940 [DEBUG] [Thread-52958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] client lang: <none>
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] server lang: <none>
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] kex follows: False
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] Compression: none
2025-11-17T10:52:58.941 [DEBUG] [Thread-52958] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:52:58.998 [DEBUG] [Thread-52958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:52:58.998 [DEBUG] [Thread-52958] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:52:58.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:52:58.999 [DEBUG] [Thread-52958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:52:59.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:52:59.054 [DEBUG] [Thread-52958] [transport.py] [_log()] userauth is OK
2025-11-17T10:52:59.054 [DEBUG] [Thread-52958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:52:59.055 [DEBUG] [Thread-52958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:52:59.055 [DEBUG] [Thread-52958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:52:59.055 [DEBUG] [Thread-52958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:52:59.074 [INFO] [Thread-52958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:52:59.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:52:59.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:52:59.929 [DEBUG] [Thread-52958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:52:59.929 [DEBUG] [Thread-52958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:52:59.980 [DEBUG] [Thread-52958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:52:59.980 [DEBUG] [Thread-52958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:52:59.989 [DEBUG] [Thread-52958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:52:59.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:52:59.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:53:00.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:53:00.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:53:00.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:53:00.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:53:00.024 [DEBUG] [Thread-52958] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:53:04.868 [DEBUG] [Thread-52960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:53:11.219 [DEBUG] [Thread-52961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:53:26.265 [DEBUG] [Thread-52962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:53:29.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:53:29.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:53:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:53:30.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:53:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:53:30.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 53, 2), 21.19, 24.0, 0.0, 16.53, 19.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:53:30.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:53:02
2025-11-17T10:53:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:53:30.968 [DEBUG] [Thread-52963] [transport.py] [_log()] starting thread (client mode): 0xd07859f0
2025-11-17T10:53:30.969 [DEBUG] [Thread-52963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:53:30.991 [DEBUG] [Thread-52963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:53:30.991 [INFO] [Thread-52963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:53:30.992 [DEBUG] [Thread-52963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:53:30.992 [DEBUG] [Thread-52963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:53:30.992 [DEBUG] [Thread-52963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:53:30.992 [DEBUG] [Thread-52963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:53:30.992 [DEBUG] [Thread-52963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] client lang: <none>
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] server lang: <none>
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] kex follows: False
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] Compression: none
2025-11-17T10:53:30.993 [DEBUG] [Thread-52963] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:53:31.002 [DEBUG] [Thread-52963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:53:31.003 [DEBUG] [Thread-52963] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:53:31.003 [DEBUG] [Thread-52963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:53:31.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:53:31.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:53:31.005 [DEBUG] [Thread-52963] [transport.py] [_log()] userauth is OK
2025-11-17T10:53:31.005 [DEBUG] [Thread-52963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:53:31.005 [DEBUG] [Thread-52963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:53:31.005 [DEBUG] [Thread-52963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:53:31.005 [DEBUG] [Thread-52963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:53:31.029 [INFO] [Thread-52963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:53:31.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:53:31.637 [DEBUG] [Thread-52963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:53:31.637 [DEBUG] [Thread-52963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:53:31.638 [DEBUG] [Thread-52963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:53:31.678 [DEBUG] [Thread-52963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:53:31.678 [DEBUG] [Thread-52963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:53:31.681 [DEBUG] [Thread-52963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:53:31.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:53:31.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:53:31.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:53:31.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:53:31.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:53:31.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:53:31.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:53:31.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:53:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:53:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.370187 -999.00  +19.20  22.96     30   +1.20 1 1 1 1 1   888    0 18.20 44.25 ----- 23.0 23.0 63.4 30.0 25.9 -24.5 25.1 -24.1 24.2 -23.5 25.0 -23.9
2025-11-17T10:53:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:53:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:53:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.370187
2025-11-17T10:53:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:53:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:53:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:53:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:53:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:53:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:53:02', tmtdew=21.19, humidity=24.0, cloud=0.0, wind=16.53, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:53:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:53:31.703 [DEBUG] [Thread-52963] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:53:31.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:53:31.799 [DEBUG] [Thread-52966] [transport.py] [_log()] starting thread (client mode): 0xd31cd5a0
2025-11-17T10:53:31.799 [DEBUG] [Thread-52966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:53:31.814 [DEBUG] [Thread-52966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:53:31.814 [INFO] [Thread-52966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] client lang: <none>
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] server lang: <none>
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] kex follows: False
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:53:31.822 [DEBUG] [Thread-52966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:53:31.823 [DEBUG] [Thread-52966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:53:31.823 [DEBUG] [Thread-52966] [transport.py] [_log()] Compression: none
2025-11-17T10:53:31.823 [DEBUG] [Thread-52966] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:53:31.888 [DEBUG] [Thread-52966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:53:31.888 [DEBUG] [Thread-52966] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:53:31.889 [DEBUG] [Thread-52966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:53:31.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:53:31.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:53:31.946 [DEBUG] [Thread-52966] [transport.py] [_log()] userauth is OK
2025-11-17T10:53:31.946 [DEBUG] [Thread-52966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:53:31.946 [DEBUG] [Thread-52966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:53:31.946 [DEBUG] [Thread-52966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:53:31.946 [DEBUG] [Thread-52966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:53:31.965 [INFO] [Thread-52966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:53:31.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:53:31.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:53:32.816 [DEBUG] [Thread-52966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:53:32.816 [DEBUG] [Thread-52966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:53:32.864 [DEBUG] [Thread-52966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:53:32.864 [DEBUG] [Thread-52966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:53:32.873 [DEBUG] [Thread-52966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:53:32.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:53:32.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:53:32.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:53:32.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:53:32.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:53:32.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:53:32.907 [DEBUG] [Thread-52966] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:53:41.298 [DEBUG] [Thread-52968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:53:56.333 [DEBUG] [Thread-52969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:54:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:54:02.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:54:02.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:54:03.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 53, 34), 21.86, 23.07, 0.0, 19.02, 19.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:54:03.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:53:34
2025-11-17T10:54:03.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:54:03.859 [DEBUG] [Thread-52970] [transport.py] [_log()] starting thread (client mode): 0xd31369e0
2025-11-17T10:54:03.859 [DEBUG] [Thread-52970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:54:03.880 [DEBUG] [Thread-52970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:54:03.880 [INFO] [Thread-52970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] client lang: <none>
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] server lang: <none>
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] kex follows: False
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:54:03.890 [DEBUG] [Thread-52970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:54:03.891 [DEBUG] [Thread-52970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:54:03.891 [DEBUG] [Thread-52970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:54:03.891 [DEBUG] [Thread-52970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:54:03.891 [DEBUG] [Thread-52970] [transport.py] [_log()] Compression: none
2025-11-17T10:54:03.891 [DEBUG] [Thread-52970] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:54:03.901 [DEBUG] [Thread-52970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:54:03.902 [DEBUG] [Thread-52970] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:54:03.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:54:03.903 [DEBUG] [Thread-52970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:54:03.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:54:03.904 [DEBUG] [Thread-52970] [transport.py] [_log()] userauth is OK
2025-11-17T10:54:03.905 [DEBUG] [Thread-52970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:54:03.905 [DEBUG] [Thread-52970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:54:03.905 [DEBUG] [Thread-52970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:54:03.905 [DEBUG] [Thread-52970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:54:03.929 [INFO] [Thread-52970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:54:03.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:54:04.517 [DEBUG] [Thread-52970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:54:04.518 [DEBUG] [Thread-52970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:54:04.518 [DEBUG] [Thread-52970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:54:04.558 [DEBUG] [Thread-52970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:54:04.558 [DEBUG] [Thread-52970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:54:04.561 [DEBUG] [Thread-52970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:54:04.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:54:04.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:54:04.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:54:04.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:54:04.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:54:04.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:54:04.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:54:04.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:54:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:54:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.370535 -999.00  +19.50  24.63     29   +1.30 1 1 1 1 1   888    0 18.42 50.94 ----- 24.6 24.6 51.8 31.9 25.9 -24.4 25.1 -25.9 24.2 -24.1 25.0 -23.6
2025-11-17T10:54:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:54:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:54:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.370535
2025-11-17T10:54:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:54:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:54:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:54:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:54:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:54:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:53:34', tmtdew=21.86, humidity=23.07, cloud=0.0, wind=19.02, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:53:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:54:04.587 [DEBUG] [Thread-52970] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:54:04.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:54:04.682 [DEBUG] [Thread-52973] [transport.py] [_log()] starting thread (client mode): 0xd3150d60
2025-11-17T10:54:04.682 [DEBUG] [Thread-52973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:54:04.697 [DEBUG] [Thread-52973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:54:04.698 [INFO] [Thread-52973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:54:04.705 [DEBUG] [Thread-52973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:54:04.705 [DEBUG] [Thread-52973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] client lang: <none>
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] server lang: <none>
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] kex follows: False
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:54:04.706 [DEBUG] [Thread-52973] [transport.py] [_log()] Compression: none
2025-11-17T10:54:04.707 [DEBUG] [Thread-52973] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:54:04.763 [DEBUG] [Thread-52973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:54:04.763 [DEBUG] [Thread-52973] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:54:04.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:54:04.764 [DEBUG] [Thread-52973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:54:04.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:54:04.818 [DEBUG] [Thread-52973] [transport.py] [_log()] userauth is OK
2025-11-17T10:54:04.818 [DEBUG] [Thread-52973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:54:04.818 [DEBUG] [Thread-52973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:54:04.819 [DEBUG] [Thread-52973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:54:04.819 [DEBUG] [Thread-52973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:54:04.839 [INFO] [Thread-52973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:54:04.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:54:04.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:54:04.918 [DEBUG] [Thread-52975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:54:05.696 [DEBUG] [Thread-52973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:54:05.696 [DEBUG] [Thread-52973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:54:05.744 [DEBUG] [Thread-52973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:54:05.744 [DEBUG] [Thread-52973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:54:05.754 [DEBUG] [Thread-52973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:54:05.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:54:05.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:54:05.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:54:05.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:54:05.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:54:05.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:54:05.788 [DEBUG] [Thread-52973] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:54:11.369 [DEBUG] [Thread-52976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:54:26.408 [DEBUG] [Thread-52977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:54:29.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:54:29.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:54:35.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:54:35.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:54:35.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:54:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 54, 6), 21.34, 23.78, 0.0, 19.64, 19.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:54:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:54:06
2025-11-17T10:54:36.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:54:36.730 [DEBUG] [Thread-52978] [transport.py] [_log()] starting thread (client mode): 0xd0712aa0
2025-11-17T10:54:36.730 [DEBUG] [Thread-52978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:54:36.751 [DEBUG] [Thread-52978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:54:36.751 [INFO] [Thread-52978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] client lang: <none>
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] server lang: <none>
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] kex follows: False
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:54:36.752 [DEBUG] [Thread-52978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:54:36.753 [DEBUG] [Thread-52978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:54:36.753 [DEBUG] [Thread-52978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:54:36.753 [DEBUG] [Thread-52978] [transport.py] [_log()] Compression: none
2025-11-17T10:54:36.753 [DEBUG] [Thread-52978] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:54:36.761 [DEBUG] [Thread-52978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:54:36.761 [DEBUG] [Thread-52978] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:54:36.761 [DEBUG] [Thread-52978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:54:36.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:54:36.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:54:36.762 [DEBUG] [Thread-52978] [transport.py] [_log()] userauth is OK
2025-11-17T10:54:36.762 [DEBUG] [Thread-52978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:54:36.762 [DEBUG] [Thread-52978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:54:36.762 [DEBUG] [Thread-52978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:54:36.762 [DEBUG] [Thread-52978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:54:36.775 [INFO] [Thread-52978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:54:36.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:54:37.382 [DEBUG] [Thread-52978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:54:37.382 [DEBUG] [Thread-52978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:54:37.383 [DEBUG] [Thread-52978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:54:37.423 [DEBUG] [Thread-52978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:54:37.423 [DEBUG] [Thread-52978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:54:37.425 [DEBUG] [Thread-52978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:54:37.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:54:37.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:54:37.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:54:37.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:54:37.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:54:37.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:54:37.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:54:37.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:54:37.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:54:37.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.370882 -999.00  +19.00  18.94     29   +0.90 1 1 1 1 1   888    0 18.79 56.43 ----- 18.9 18.9 58.2 28.2 25.9 -25.2 24.9 -25.7 24.1 -23.4 25.0 -23.7
2025-11-17T10:54:37.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:54:37.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:54:37.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.370882
2025-11-17T10:54:37.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:54:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:54:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:54:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:54:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:54:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:54:06', tmtdew=21.34, humidity=23.78, cloud=0.0, wind=19.64, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:54:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:54:37.453 [DEBUG] [Thread-52978] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:54:37.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:54:37.549 [DEBUG] [Thread-52981] [transport.py] [_log()] starting thread (client mode): 0xd3134b80
2025-11-17T10:54:37.549 [DEBUG] [Thread-52981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:54:37.564 [DEBUG] [Thread-52981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:54:37.564 [INFO] [Thread-52981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] client lang: <none>
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] server lang: <none>
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] kex follows: False
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:54:37.572 [DEBUG] [Thread-52981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:54:37.573 [DEBUG] [Thread-52981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:54:37.573 [DEBUG] [Thread-52981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:54:37.573 [DEBUG] [Thread-52981] [transport.py] [_log()] Compression: none
2025-11-17T10:54:37.573 [DEBUG] [Thread-52981] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:54:37.632 [DEBUG] [Thread-52981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:54:37.633 [DEBUG] [Thread-52981] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:54:37.633 [DEBUG] [Thread-52981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:54:37.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:54:37.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:54:37.690 [DEBUG] [Thread-52981] [transport.py] [_log()] userauth is OK
2025-11-17T10:54:37.690 [DEBUG] [Thread-52981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:54:37.690 [DEBUG] [Thread-52981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:54:37.691 [DEBUG] [Thread-52981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:54:37.691 [DEBUG] [Thread-52981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:54:37.713 [INFO] [Thread-52981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:54:37.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:54:37.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:54:38.578 [DEBUG] [Thread-52981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:54:38.578 [DEBUG] [Thread-52981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:54:38.626 [DEBUG] [Thread-52981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:54:38.626 [DEBUG] [Thread-52981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:54:38.635 [DEBUG] [Thread-52981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:54:38.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:54:38.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:54:38.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:54:38.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:54:38.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:54:38.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:54:38.669 [DEBUG] [Thread-52981] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:54:41.443 [DEBUG] [Thread-52983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:54:56.486 [DEBUG] [Thread-52984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:55:04.981 [DEBUG] [Thread-52985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:55:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:55:08.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:55:08.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:55:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 54, 38), 21.05, 24.08, 0.0, 17.68, 18.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:55:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:54:38
2025-11-17T10:55:09.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:55:09.603 [DEBUG] [Thread-52986] [transport.py] [_log()] starting thread (client mode): 0xd3135db0
2025-11-17T10:55:09.604 [DEBUG] [Thread-52986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:55:09.625 [DEBUG] [Thread-52986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:55:09.625 [INFO] [Thread-52986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] client lang: <none>
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] server lang: <none>
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] kex follows: False
2025-11-17T10:55:09.629 [DEBUG] [Thread-52986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:55:09.630 [DEBUG] [Thread-52986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:55:09.630 [DEBUG] [Thread-52986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:55:09.630 [DEBUG] [Thread-52986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:55:09.630 [DEBUG] [Thread-52986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:55:09.630 [DEBUG] [Thread-52986] [transport.py] [_log()] Compression: none
2025-11-17T10:55:09.630 [DEBUG] [Thread-52986] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:55:09.646 [DEBUG] [Thread-52986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:55:09.646 [DEBUG] [Thread-52986] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:55:09.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:55:09.647 [DEBUG] [Thread-52986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:55:09.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:55:09.648 [DEBUG] [Thread-52986] [transport.py] [_log()] userauth is OK
2025-11-17T10:55:09.648 [DEBUG] [Thread-52986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:55:09.648 [DEBUG] [Thread-52986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:55:09.648 [DEBUG] [Thread-52986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:55:09.649 [DEBUG] [Thread-52986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:55:09.673 [INFO] [Thread-52986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:55:09.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:55:11.515 [DEBUG] [Thread-52988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:55:13.551 [DEBUG] [Thread-52986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:55:13.552 [DEBUG] [Thread-52986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:55:13.552 [DEBUG] [Thread-52986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:55:13.592 [DEBUG] [Thread-52986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:55:13.593 [DEBUG] [Thread-52986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:55:13.596 [DEBUG] [Thread-52986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:55:13.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:55:13.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:55:13.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:55:13.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:55:13.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:55:13.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:55:13.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:55:13.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:55:13.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:55:13.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.371576 -999.00  +18.70  15.94     30   +1.00 1 1 1 1 1   888    0 19.04 63.69 ----- 15.9 15.9 31.4 27.6 25.8 -26.0 24.9 -25.4 24.0 -24.6 24.8 -24.7
2025-11-17T10:55:13.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:55:13.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:55:13.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.371576
2025-11-17T10:55:13.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:55:13.720 [DEBUG] [Thread-52986] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:55:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:55:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:55:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:55:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:55:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:54:38', tmtdew=21.05, humidity=24.08, cloud=0.0, wind=17.68, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:55:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:55:13.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:55:13.817 [DEBUG] [Thread-52990] [transport.py] [_log()] starting thread (client mode): 0xd3135a80
2025-11-17T10:55:13.817 [DEBUG] [Thread-52990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:55:13.838 [DEBUG] [Thread-52990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:55:13.839 [INFO] [Thread-52990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] client lang: <none>
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] server lang: <none>
2025-11-17T10:55:13.846 [DEBUG] [Thread-52990] [transport.py] [_log()] kex follows: False
2025-11-17T10:55:13.847 [DEBUG] [Thread-52990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:55:13.847 [DEBUG] [Thread-52990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:55:13.847 [DEBUG] [Thread-52990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:55:13.847 [DEBUG] [Thread-52990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:55:13.847 [DEBUG] [Thread-52990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:55:13.847 [DEBUG] [Thread-52990] [transport.py] [_log()] Compression: none
2025-11-17T10:55:13.847 [DEBUG] [Thread-52990] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:55:13.906 [DEBUG] [Thread-52990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:55:13.906 [DEBUG] [Thread-52990] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:55:13.907 [DEBUG] [Thread-52990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:55:13.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:55:13.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:55:13.962 [DEBUG] [Thread-52990] [transport.py] [_log()] userauth is OK
2025-11-17T10:55:13.962 [DEBUG] [Thread-52990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:55:13.962 [DEBUG] [Thread-52990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:55:13.963 [DEBUG] [Thread-52990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:55:13.963 [DEBUG] [Thread-52990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:55:13.982 [INFO] [Thread-52990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:55:13.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:55:13.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:55:14.868 [DEBUG] [Thread-52990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:55:14.868 [DEBUG] [Thread-52990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:55:14.916 [DEBUG] [Thread-52990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:55:14.916 [DEBUG] [Thread-52990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:55:14.925 [DEBUG] [Thread-52990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:55:14.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:55:14.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:55:14.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:55:14.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:55:14.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:55:14.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:55:14.960 [DEBUG] [Thread-52990] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:55:26.544 [DEBUG] [Thread-52992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:55:29.825 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:55:29.827 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:55:41.584 [DEBUG] [Thread-52993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:55:44.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:55:44.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:55:44.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:55:45.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 55, 42), 20.67, 24.84, 0.0, 10.68, 18.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:55:45.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:55:42
2025-11-17T10:55:45.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:55:45.927 [DEBUG] [Thread-52994] [transport.py] [_log()] starting thread (client mode): 0xd075a6e0
2025-11-17T10:55:45.928 [DEBUG] [Thread-52994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:55:45.947 [DEBUG] [Thread-52994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:55:45.948 [INFO] [Thread-52994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] client lang: <none>
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] server lang: <none>
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] kex follows: False
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] Compression: none
2025-11-17T10:55:45.951 [DEBUG] [Thread-52994] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:55:45.969 [DEBUG] [Thread-52994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:55:45.969 [DEBUG] [Thread-52994] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:55:45.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:55:45.970 [DEBUG] [Thread-52994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:55:45.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:55:45.971 [DEBUG] [Thread-52994] [transport.py] [_log()] userauth is OK
2025-11-17T10:55:45.971 [DEBUG] [Thread-52994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:55:45.971 [DEBUG] [Thread-52994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:55:45.972 [DEBUG] [Thread-52994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:55:45.972 [DEBUG] [Thread-52994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:55:45.993 [INFO] [Thread-52994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:55:45.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:55:46.603 [DEBUG] [Thread-52994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:55:46.603 [DEBUG] [Thread-52994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:55:46.604 [DEBUG] [Thread-52994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:55:46.644 [DEBUG] [Thread-52994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:55:46.644 [DEBUG] [Thread-52994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:55:46.647 [DEBUG] [Thread-52994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:55:46.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:55:46.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:55:46.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:55:46.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:55:46.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:55:46.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:55:46.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:55:46.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:55:46.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:55:46.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.371576 -999.00  +18.70  15.94     30   +1.00 1 1 1 1 1   888    0 19.04 63.69 ----- 15.9 15.9 31.4 27.6 25.8 -26.0 24.9 -25.4 24.0 -24.6 24.8 -24.7
2025-11-17T10:55:46.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:55:46.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:55:46.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.371576
2025-11-17T10:55:46.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:55:46.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:55:46.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:55:46.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:55:46.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:55:46.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:55:42', tmtdew=20.67, humidity=24.84, cloud=0.0, wind=10.68, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:55:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:55:46.671 [DEBUG] [Thread-52994] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:55:46.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:55:46.765 [DEBUG] [Thread-52997] [transport.py] [_log()] starting thread (client mode): 0xd075a4a0
2025-11-17T10:55:46.765 [DEBUG] [Thread-52997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:55:46.780 [DEBUG] [Thread-52997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:55:46.780 [INFO] [Thread-52997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:55:46.787 [DEBUG] [Thread-52997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] client lang: <none>
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] server lang: <none>
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] kex follows: False
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] Compression: none
2025-11-17T10:55:46.788 [DEBUG] [Thread-52997] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:55:46.852 [DEBUG] [Thread-52997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:55:46.852 [DEBUG] [Thread-52997] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:55:46.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:55:46.853 [DEBUG] [Thread-52997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:55:46.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:55:46.910 [DEBUG] [Thread-52997] [transport.py] [_log()] userauth is OK
2025-11-17T10:55:46.910 [DEBUG] [Thread-52997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:55:46.910 [DEBUG] [Thread-52997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:55:46.910 [DEBUG] [Thread-52997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:55:46.910 [DEBUG] [Thread-52997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:55:46.930 [INFO] [Thread-52997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:55:46.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:55:46.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:55:47.845 [DEBUG] [Thread-52997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:55:47.845 [DEBUG] [Thread-52997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:55:47.893 [DEBUG] [Thread-52997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:55:47.893 [DEBUG] [Thread-52997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:55:47.902 [DEBUG] [Thread-52997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:55:47.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:55:47.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:55:47.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:55:47.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:55:47.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:55:47.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:55:47.937 [DEBUG] [Thread-52997] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:55:56.611 [DEBUG] [Thread-52999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:56:05.038 [DEBUG] [Thread-53000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:56:11.654 [DEBUG] [Thread-53001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:56:17.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:56:17.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:56:17.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:56:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 56, 14), 20.57, 25.03, 0.0, 11.51, 18.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:56:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:56:14
2025-11-17T10:56:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:56:18.921 [DEBUG] [Thread-53002] [transport.py] [_log()] starting thread (client mode): 0xd31534f0
2025-11-17T10:56:18.921 [DEBUG] [Thread-53002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:56:18.940 [DEBUG] [Thread-53002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:56:18.940 [INFO] [Thread-53002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:56:18.941 [DEBUG] [Thread-53002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] client lang: <none>
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] server lang: <none>
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] kex follows: False
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] Compression: none
2025-11-17T10:56:18.942 [DEBUG] [Thread-53002] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:56:18.951 [DEBUG] [Thread-53002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:56:18.951 [DEBUG] [Thread-53002] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:56:18.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:56:18.952 [DEBUG] [Thread-53002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:56:18.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:56:18.952 [DEBUG] [Thread-53002] [transport.py] [_log()] userauth is OK
2025-11-17T10:56:18.953 [DEBUG] [Thread-53002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:56:18.953 [DEBUG] [Thread-53002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:56:18.953 [DEBUG] [Thread-53002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:56:18.953 [DEBUG] [Thread-53002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:56:18.966 [INFO] [Thread-53002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:56:18.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:56:19.651 [DEBUG] [Thread-53002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:56:19.651 [DEBUG] [Thread-53002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:56:19.651 [DEBUG] [Thread-53002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:56:19.692 [DEBUG] [Thread-53002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:56:19.692 [DEBUG] [Thread-53002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:56:19.695 [DEBUG] [Thread-53002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:56:19.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:56:19.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:56:19.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:56:19.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:56:19.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:56:19.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:56:19.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.371924 -999.00  +18.50  14.42     30   +0.90 1 1 1 1 1   888    0 18.89 62.80 ----- 14.4 14.4 71.0 16.9 25.8 -24.5 24.9 -24.5 24.0 -22.9 24.8 -23.5
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.371924
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:56:19.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:56:14', tmtdew=20.57, humidity=25.03, cloud=0.0, wind=11.51, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:55:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:56:19.713 [DEBUG] [Thread-53002] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:56:19.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:56:19.798 [DEBUG] [Thread-53005] [transport.py] [_log()] starting thread (client mode): 0xd3137580
2025-11-17T10:56:19.798 [DEBUG] [Thread-53005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:56:19.814 [DEBUG] [Thread-53005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:56:19.814 [INFO] [Thread-53005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] client lang: <none>
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] server lang: <none>
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] kex follows: False
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:56:19.821 [DEBUG] [Thread-53005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:56:19.822 [DEBUG] [Thread-53005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:56:19.822 [DEBUG] [Thread-53005] [transport.py] [_log()] Compression: none
2025-11-17T10:56:19.822 [DEBUG] [Thread-53005] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:56:19.877 [DEBUG] [Thread-53005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:56:19.877 [DEBUG] [Thread-53005] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:56:19.877 [DEBUG] [Thread-53005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:56:19.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:56:19.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:56:19.938 [DEBUG] [Thread-53005] [transport.py] [_log()] userauth is OK
2025-11-17T10:56:19.938 [DEBUG] [Thread-53005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:56:19.938 [DEBUG] [Thread-53005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:56:19.938 [DEBUG] [Thread-53005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:56:19.938 [DEBUG] [Thread-53005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:56:19.956 [INFO] [Thread-53005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:56:19.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:56:19.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:56:20.879 [DEBUG] [Thread-53005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:56:20.879 [DEBUG] [Thread-53005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:56:20.927 [DEBUG] [Thread-53005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:56:20.927 [DEBUG] [Thread-53005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:56:20.935 [DEBUG] [Thread-53005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:56:20.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:56:20.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:56:20.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:56:20.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:56:20.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:56:20.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:56:20.966 [DEBUG] [Thread-53005] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:56:26.684 [DEBUG] [Thread-53007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:56:29.967 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:56:29.968 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:56:41.725 [DEBUG] [Thread-53008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:56:50.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:56:50.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:56:50.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:56:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 56, 46), 20.83, 24.24, 0.0, 9.53, 18.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:56:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:56:46
2025-11-17T10:56:51.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:56:51.886 [DEBUG] [Thread-53009] [transport.py] [_log()] starting thread (client mode): 0xd07be5c0
2025-11-17T10:56:51.887 [DEBUG] [Thread-53009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:56:51.906 [DEBUG] [Thread-53009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:56:51.906 [INFO] [Thread-53009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:56:51.908 [DEBUG] [Thread-53009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:56:51.908 [DEBUG] [Thread-53009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:56:51.908 [DEBUG] [Thread-53009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:56:51.908 [DEBUG] [Thread-53009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:56:51.908 [DEBUG] [Thread-53009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:56:51.908 [DEBUG] [Thread-53009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:56:51.908 [DEBUG] [Thread-53009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:56:51.908 [DEBUG] [Thread-53009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] client lang: <none>
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] server lang: <none>
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] kex follows: False
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] Compression: none
2025-11-17T10:56:51.909 [DEBUG] [Thread-53009] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:56:51.929 [DEBUG] [Thread-53009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:56:51.930 [DEBUG] [Thread-53009] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:56:51.930 [DEBUG] [Thread-53009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:56:51.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:56:51.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:56:51.971 [DEBUG] [Thread-53009] [transport.py] [_log()] userauth is OK
2025-11-17T10:56:51.972 [DEBUG] [Thread-53009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:56:51.972 [DEBUG] [Thread-53009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:56:51.972 [DEBUG] [Thread-53009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:56:51.972 [DEBUG] [Thread-53009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:56:52.007 [INFO] [Thread-53009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:56:52.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:56:52.606 [DEBUG] [Thread-53009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:56:52.606 [DEBUG] [Thread-53009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:56:52.607 [DEBUG] [Thread-53009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:56:52.647 [DEBUG] [Thread-53009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:56:52.647 [DEBUG] [Thread-53009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:56:52.650 [DEBUG] [Thread-53009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:56:52.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:56:52.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:56:52.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:56:52.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:56:52.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:56:52.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:56:52.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:56:52.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.372271 -999.00  +18.70  18.56     31   +1.20 1 1 1 1 1   888    0 19.19 62.63 ----- 18.6 18.6 49.0 21.5 25.8 -24.1 25.0 -23.5 23.9 -23.8 24.8 -23.6
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.372271
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:56:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:56:46', tmtdew=20.83, humidity=24.24, cloud=0.0, wind=9.53, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:56:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:56:52.671 [DEBUG] [Thread-53009] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:56:52.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:56:52.761 [DEBUG] [Thread-53012] [transport.py] [_log()] starting thread (client mode): 0xd3152f80
2025-11-17T10:56:52.761 [DEBUG] [Thread-53012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:56:52.777 [DEBUG] [Thread-53012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:56:52.777 [INFO] [Thread-53012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:56:52.784 [DEBUG] [Thread-53012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:56:52.784 [DEBUG] [Thread-53012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:56:52.784 [DEBUG] [Thread-53012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] client lang: <none>
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] server lang: <none>
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] kex follows: False
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:56:52.785 [DEBUG] [Thread-53012] [transport.py] [_log()] Compression: none
2025-11-17T10:56:52.786 [DEBUG] [Thread-53012] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:56:52.844 [DEBUG] [Thread-53012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:56:52.844 [DEBUG] [Thread-53012] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:56:52.845 [DEBUG] [Thread-53012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:56:52.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:56:52.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:56:52.902 [DEBUG] [Thread-53012] [transport.py] [_log()] userauth is OK
2025-11-17T10:56:52.902 [DEBUG] [Thread-53012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:56:52.902 [DEBUG] [Thread-53012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:56:52.902 [DEBUG] [Thread-53012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:56:52.902 [DEBUG] [Thread-53012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:56:52.922 [INFO] [Thread-53012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:56:52.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:56:52.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:56:53.802 [DEBUG] [Thread-53012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:56:53.802 [DEBUG] [Thread-53012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:56:53.850 [DEBUG] [Thread-53012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:56:53.850 [DEBUG] [Thread-53012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:56:53.859 [DEBUG] [Thread-53012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:56:53.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:56: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')
2025-11-17T10:56:53.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:56:53.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:56:53.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:56:53.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:56:53.893 [DEBUG] [Thread-53012] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:56:56.753 [DEBUG] [Thread-53014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:57:05.099 [DEBUG] [Thread-53015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:57:11.782 [DEBUG] [Thread-53016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:57:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:57:23.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:57:23.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:57:24.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 57, 18), 20.67, 24.51, 0.0, 8.49, 18.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:57:24.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:57:18
2025-11-17T10:57:24.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:57:24.825 [DEBUG] [Thread-53017] [transport.py] [_log()] starting thread (client mode): 0xd075bbe0
2025-11-17T10:57:24.825 [DEBUG] [Thread-53017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:57:24.845 [DEBUG] [Thread-53017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:57:24.846 [INFO] [Thread-53017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:57:24.849 [DEBUG] [Thread-53017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] client lang: <none>
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] server lang: <none>
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] kex follows: False
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] Compression: none
2025-11-17T10:57:24.850 [DEBUG] [Thread-53017] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:57:24.868 [DEBUG] [Thread-53017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:57:24.868 [DEBUG] [Thread-53017] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:57:24.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:57:24.869 [DEBUG] [Thread-53017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:57:24.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:57:24.872 [DEBUG] [Thread-53017] [transport.py] [_log()] userauth is OK
2025-11-17T10:57:24.872 [DEBUG] [Thread-53017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:57:24.872 [DEBUG] [Thread-53017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:57:24.872 [DEBUG] [Thread-53017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:57:24.872 [DEBUG] [Thread-53017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:57:24.888 [INFO] [Thread-53017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:57:24.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:57:25.630 [DEBUG] [Thread-53017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:57:25.630 [DEBUG] [Thread-53017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:57:25.631 [DEBUG] [Thread-53017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:57:25.671 [DEBUG] [Thread-53017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:57:25.671 [DEBUG] [Thread-53017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:57:25.674 [DEBUG] [Thread-53017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:57:25.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:57:25.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:57:25.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:57:25.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:57:25.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:57:25.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:57:25.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:57:25.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:57:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:57:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.372618 -999.00  +18.40   6.53     30   +0.90 1 1 1 1 1   888    0 18.87 63.07 ----- 6.5 6.5 348.4 19.8 25.9 -25.8 24.9 -25.0 24.1 -23.8 24.8 -24.1
2025-11-17T10:57:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:57:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:57:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.372618
2025-11-17T10:57:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:57:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:57:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:57:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:57:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:57:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:57:18', tmtdew=20.67, humidity=24.51, cloud=0.0, wind=8.49, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:56:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:57:25.704 [DEBUG] [Thread-53017] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:57:25.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:57:25.796 [DEBUG] [Thread-53020] [transport.py] [_log()] starting thread (client mode): 0xd07bcfa0
2025-11-17T10:57:25.796 [DEBUG] [Thread-53020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:57:25.814 [DEBUG] [Thread-53020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:57:25.814 [INFO] [Thread-53020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:57:25.821 [DEBUG] [Thread-53020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] client lang: <none>
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] server lang: <none>
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] kex follows: False
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:57:25.822 [DEBUG] [Thread-53020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:57:25.823 [DEBUG] [Thread-53020] [transport.py] [_log()] Compression: none
2025-11-17T10:57:25.823 [DEBUG] [Thread-53020] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:57:25.882 [DEBUG] [Thread-53020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:57:25.883 [DEBUG] [Thread-53020] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:57:25.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:57:25.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:57:25.884 [DEBUG] [Thread-53020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:57:25.942 [DEBUG] [Thread-53020] [transport.py] [_log()] userauth is OK
2025-11-17T10:57:25.943 [DEBUG] [Thread-53020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:57:25.943 [DEBUG] [Thread-53020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:57:25.943 [DEBUG] [Thread-53020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:57:25.943 [DEBUG] [Thread-53020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:57:25.963 [INFO] [Thread-53020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:57:25.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:57:25.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:57:26.811 [DEBUG] [Thread-53022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:57:26.846 [DEBUG] [Thread-53020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:57:26.846 [DEBUG] [Thread-53020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:57:26.894 [DEBUG] [Thread-53020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:57:26.894 [DEBUG] [Thread-53020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:57:26.904 [DEBUG] [Thread-53020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:57:26.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:57:26.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:57:26.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:57:26.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:57:26.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:57:26.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:57:26.939 [DEBUG] [Thread-53020] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:57:30.111 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:57:30.112 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:57:41.853 [DEBUG] [Thread-53023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:57:56.883 [DEBUG] [Thread-53024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:57:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:57:56.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:57:56.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:57:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 57, 50), 20.63, 24.76, 0.0, 14.79, 18.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:57:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:57:50
2025-11-17T10:57:57.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:57:57.871 [DEBUG] [Thread-53025] [transport.py] [_log()] starting thread (client mode): 0xd7bc6860
2025-11-17T10:57:57.871 [DEBUG] [Thread-53025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:57:57.890 [DEBUG] [Thread-53025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:57:57.891 [INFO] [Thread-53025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:57:57.892 [DEBUG] [Thread-53025] [transport.py] [_log()] client lang: <none>
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] server lang: <none>
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] kex follows: False
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] Compression: none
2025-11-17T10:57:57.893 [DEBUG] [Thread-53025] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:57:57.907 [DEBUG] [Thread-53025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:57:57.908 [DEBUG] [Thread-53025] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:57:57.909 [DEBUG] [Thread-53025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:57:57.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:57:57.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:57:57.911 [DEBUG] [Thread-53025] [transport.py] [_log()] userauth is OK
2025-11-17T10:57:57.912 [DEBUG] [Thread-53025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:57:57.912 [DEBUG] [Thread-53025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:57:57.912 [DEBUG] [Thread-53025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:57:57.912 [DEBUG] [Thread-53025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:57:57.945 [INFO] [Thread-53025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:57:57.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:57:58.610 [DEBUG] [Thread-53025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:57:58.610 [DEBUG] [Thread-53025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:57:58.611 [DEBUG] [Thread-53025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:57:58.651 [DEBUG] [Thread-53025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:57:58.652 [DEBUG] [Thread-53025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:57:58.655 [DEBUG] [Thread-53025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:57:58.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:57:58.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:57:58.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:57:58.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:57:58.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:57:58.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:57:58.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:57:58.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:57:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:57:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.372965 -999.00  +18.40   8.44     30   +0.90 1 1 1 1 1   888    0 19.15 61.16 ----- 8.4 8.4 51.7 13.3 26.0 -24.2 25.0 -24.7 24.2 -22.4 24.8 -24.4
2025-11-17T10:57:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:57:58.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:57:58.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.372965
2025-11-17T10:57:58.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:57:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:57:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:57:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:57:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:57:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:57:50', tmtdew=20.63, humidity=24.76, cloud=0.0, wind=14.79, temperature=18.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:57:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:57:58.683 [DEBUG] [Thread-53025] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:57:58.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:57:58.780 [DEBUG] [Thread-53028] [transport.py] [_log()] starting thread (client mode): 0xd3163d90
2025-11-17T10:57:58.780 [DEBUG] [Thread-53028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:57:58.796 [DEBUG] [Thread-53028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:57:58.796 [INFO] [Thread-53028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:57:58.803 [DEBUG] [Thread-53028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] client lang: <none>
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] server lang: <none>
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] kex follows: False
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:57:58.804 [DEBUG] [Thread-53028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:57:58.805 [DEBUG] [Thread-53028] [transport.py] [_log()] Compression: none
2025-11-17T10:57:58.805 [DEBUG] [Thread-53028] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:57:58.862 [DEBUG] [Thread-53028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:57:58.862 [DEBUG] [Thread-53028] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:57:58.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:57:58.863 [DEBUG] [Thread-53028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:57:58.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:57:58.918 [DEBUG] [Thread-53028] [transport.py] [_log()] userauth is OK
2025-11-17T10:57:58.919 [DEBUG] [Thread-53028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:57:58.919 [DEBUG] [Thread-53028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:57:58.919 [DEBUG] [Thread-53028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:57:58.919 [DEBUG] [Thread-53028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:57:58.939 [INFO] [Thread-53028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:57:58.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:57:58.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:57:59.863 [DEBUG] [Thread-53028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:57:59.863 [DEBUG] [Thread-53028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:57:59.910 [DEBUG] [Thread-53028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:57:59.910 [DEBUG] [Thread-53028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:57:59.919 [DEBUG] [Thread-53028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:57:59.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:57:59.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:57:59.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:57:59.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:57:59.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:57:59.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:57:59.953 [DEBUG] [Thread-53028] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:58:05.147 [DEBUG] [Thread-53030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:58:11.913 [DEBUG] [Thread-53031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:58:26.946 [DEBUG] [Thread-53032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:58:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:58:29.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:58:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:58:30.253 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:58:30.254 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:58:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 58, 22), 20.84, 24.45, 0.0, 10.34, 18.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:58:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:58:22
2025-11-17T10:58:30.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:58:30.900 [DEBUG] [Thread-53033] [transport.py] [_log()] starting thread (client mode): 0xd07bfbe0
2025-11-17T10:58:30.900 [DEBUG] [Thread-53033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:58:30.920 [DEBUG] [Thread-53033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:58:30.920 [INFO] [Thread-53033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:58:30.923 [DEBUG] [Thread-53033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] client lang: <none>
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] server lang: <none>
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] kex follows: False
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] Compression: none
2025-11-17T10:58:30.924 [DEBUG] [Thread-53033] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:58:30.949 [DEBUG] [Thread-53033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:58:30.949 [DEBUG] [Thread-53033] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:58:30.950 [DEBUG] [Thread-53033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:58:30.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:58:30.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:58:30.952 [DEBUG] [Thread-53033] [transport.py] [_log()] userauth is OK
2025-11-17T10:58:30.952 [DEBUG] [Thread-53033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:58:30.952 [DEBUG] [Thread-53033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:58:30.952 [DEBUG] [Thread-53033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:58:30.952 [DEBUG] [Thread-53033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:58:30.977 [INFO] [Thread-53033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:58:30.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:58:31.721 [DEBUG] [Thread-53033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:58:31.722 [DEBUG] [Thread-53033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:58:31.722 [DEBUG] [Thread-53033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:58:31.762 [DEBUG] [Thread-53033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:58:31.763 [DEBUG] [Thread-53033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:58:31.765 [DEBUG] [Thread-53033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:58:31.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:58:31.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:58:31.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:58:31.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:58:31.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:58:31.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:58:31.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:58:31.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:58:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:58:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.373312 -999.00  +18.30   7.81     30   +0.70 1 1 1 1 1   888    0 18.92 58.05 ----- 7.8 7.8 16.4 21.5 26.1 -24.3 25.1 -23.9 24.1 -23.9 24.9 -24.1
2025-11-17T10:58:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:58:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:58:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.373312
2025-11-17T10:58:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:58:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:58:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:58:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:58:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:58:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:58:22', tmtdew=20.84, humidity=24.45, cloud=0.0, wind=10.34, temperature=18.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:57:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:58:31.791 [DEBUG] [Thread-53033] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:58:31.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:58:31.890 [DEBUG] [Thread-53036] [transport.py] [_log()] starting thread (client mode): 0xd07bf0a0
2025-11-17T10:58:31.890 [DEBUG] [Thread-53036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:58:31.906 [DEBUG] [Thread-53036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:58:31.906 [INFO] [Thread-53036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] client lang: <none>
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] server lang: <none>
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] kex follows: False
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:58:31.914 [DEBUG] [Thread-53036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:58:31.915 [DEBUG] [Thread-53036] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:58:31.915 [DEBUG] [Thread-53036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:58:31.915 [DEBUG] [Thread-53036] [transport.py] [_log()] Compression: none
2025-11-17T10:58:31.915 [DEBUG] [Thread-53036] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:58:31.970 [DEBUG] [Thread-53036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:58:31.970 [DEBUG] [Thread-53036] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:58:31.971 [DEBUG] [Thread-53036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:58:31.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:58:31.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:58:32.030 [DEBUG] [Thread-53036] [transport.py] [_log()] userauth is OK
2025-11-17T10:58:32.030 [DEBUG] [Thread-53036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:58:32.030 [DEBUG] [Thread-53036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:58:32.030 [DEBUG] [Thread-53036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:58:32.030 [DEBUG] [Thread-53036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:58:32.050 [INFO] [Thread-53036] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:58:32.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:58:32.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:58:32.943 [DEBUG] [Thread-53036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:58:32.944 [DEBUG] [Thread-53036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:58:32.991 [DEBUG] [Thread-53036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:58:32.991 [DEBUG] [Thread-53036] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:58:33.000 [DEBUG] [Thread-53036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:58:33.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:58:33.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:58:33.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:58:33.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:58:33.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:58:33.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:58:33.035 [DEBUG] [Thread-53036] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:58:41.975 [DEBUG] [Thread-53038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:58:57.025 [DEBUG] [Thread-53039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:59:03.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:59:03.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:59:03.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:59:03.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 58, 54), 20.9, 24.36, 0.0, 3.64, 18.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:59:03.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:58:54
2025-11-17T10:59:03.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:59:03.954 [DEBUG] [Thread-53040] [transport.py] [_log()] starting thread (client mode): 0xd07bc4c0
2025-11-17T10:59:03.955 [DEBUG] [Thread-53040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:59:03.974 [DEBUG] [Thread-53040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:59:03.974 [INFO] [Thread-53040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:59:03.977 [DEBUG] [Thread-53040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:59:03.977 [DEBUG] [Thread-53040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:59:03.977 [DEBUG] [Thread-53040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:59:03.977 [DEBUG] [Thread-53040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:59:03.977 [DEBUG] [Thread-53040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:59:03.977 [DEBUG] [Thread-53040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:59:03.977 [DEBUG] [Thread-53040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] client lang: <none>
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] server lang: <none>
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] kex follows: False
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] Compression: none
2025-11-17T10:59:03.978 [DEBUG] [Thread-53040] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:59:03.996 [DEBUG] [Thread-53040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:59:03.997 [DEBUG] [Thread-53040] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:59:03.997 [DEBUG] [Thread-53040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:59:03.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:59:03.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:59:03.999 [DEBUG] [Thread-53040] [transport.py] [_log()] userauth is OK
2025-11-17T10:59:03.999 [DEBUG] [Thread-53040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:59:03.999 [DEBUG] [Thread-53040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:59:04.000 [DEBUG] [Thread-53040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:59:04.000 [DEBUG] [Thread-53040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:59:04.023 [INFO] [Thread-53040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:59:04.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:59:04.662 [DEBUG] [Thread-53040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:59:04.662 [DEBUG] [Thread-53040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:59:04.663 [DEBUG] [Thread-53040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:59:04.703 [DEBUG] [Thread-53040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:59:04.703 [DEBUG] [Thread-53040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:59:04.706 [DEBUG] [Thread-53040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:59:04.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:59:04.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:59:04.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:59:04.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:59:04.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:59:04.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:59:04.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:59:04.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:59:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:59:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.373660 -999.00  +18.10   4.74     31   +0.80 1 1 1 1 1   888    0 19.25 61.72 ----- 4.7 4.7 344.6 9.8 26.1 -24.2 25.2 -24.2 24.2 -22.6 25.0 -23.3
2025-11-17T10:59:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:59:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:59:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.373660
2025-11-17T10:59:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:59:04.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:59:04.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:59:04.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:59:04.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:59:04.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:58:54', tmtdew=20.9, humidity=24.36, cloud=0.0, wind=3.64, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:58:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:59:04.731 [DEBUG] [Thread-53040] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:59:04.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:59:04.827 [DEBUG] [Thread-53043] [transport.py] [_log()] starting thread (client mode): 0xd07cc9a0
2025-11-17T10:59:04.827 [DEBUG] [Thread-53043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:59:04.842 [DEBUG] [Thread-53043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:59:04.842 [INFO] [Thread-53043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] client lang: <none>
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] server lang: <none>
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] kex follows: False
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:59:04.850 [DEBUG] [Thread-53043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:59:04.851 [DEBUG] [Thread-53043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:59:04.851 [DEBUG] [Thread-53043] [transport.py] [_log()] Compression: none
2025-11-17T10:59:04.851 [DEBUG] [Thread-53043] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:59:04.909 [DEBUG] [Thread-53043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:59:04.910 [DEBUG] [Thread-53043] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:59:04.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:59:04.911 [DEBUG] [Thread-53043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:59:04.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:59:04.968 [DEBUG] [Thread-53043] [transport.py] [_log()] userauth is OK
2025-11-17T10:59:04.969 [DEBUG] [Thread-53043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:59:04.969 [DEBUG] [Thread-53043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:59:04.969 [DEBUG] [Thread-53043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:59:04.969 [DEBUG] [Thread-53043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:59:04.988 [INFO] [Thread-53043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:59:04.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:59:04.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:59:05.198 [DEBUG] [Thread-53045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:59:05.885 [DEBUG] [Thread-53043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:59:05.885 [DEBUG] [Thread-53043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:59:05.933 [DEBUG] [Thread-53043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:59:05.933 [DEBUG] [Thread-53043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:59:05.942 [DEBUG] [Thread-53043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:59:05.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:59:05.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:59:05.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:59:05.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:59:05.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:59:05.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:59:05.977 [DEBUG] [Thread-53043] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:59:12.054 [DEBUG] [Thread-53046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:59:27.095 [DEBUG] [Thread-53047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:59:30.395 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:59:30.396 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:59:35.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T10:59:36.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T10:59:36.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T10:59:36.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 59, 26), 20.97, 24.26, 0.0, 5.75, 18.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T10:59:36.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:59:26
2025-11-17T10:59:36.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T10:59:36.916 [DEBUG] [Thread-53048] [transport.py] [_log()] starting thread (client mode): 0xd07ce320
2025-11-17T10:59:36.917 [DEBUG] [Thread-53048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:59:36.928 [DEBUG] [Thread-53048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T10:59:36.928 [INFO] [Thread-53048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:59:36.929 [DEBUG] [Thread-53048] [transport.py] [_log()] client lang: <none>
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] server lang: <none>
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] kex follows: False
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] Compression: none
2025-11-17T10:59:36.930 [DEBUG] [Thread-53048] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:59:36.941 [DEBUG] [Thread-53048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:59:36.941 [DEBUG] [Thread-53048] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:59:36.941 [DEBUG] [Thread-53048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T10:59:36.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T10:59:36.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:59:36.943 [DEBUG] [Thread-53048] [transport.py] [_log()] userauth is OK
2025-11-17T10:59:36.943 [DEBUG] [Thread-53048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:59:36.943 [DEBUG] [Thread-53048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:59:36.943 [DEBUG] [Thread-53048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T10:59:36.943 [DEBUG] [Thread-53048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:59:36.956 [INFO] [Thread-53048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:59:36.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:59:37.539 [DEBUG] [Thread-53048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:59:37.539 [DEBUG] [Thread-53048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:59:37.539 [DEBUG] [Thread-53048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T10:59:37.580 [DEBUG] [Thread-53048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:59:37.580 [DEBUG] [Thread-53048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:59:37.583 [DEBUG] [Thread-53048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:59:37.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:59:37.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T10:59:37.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T10:59:37.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T10:59:37.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:59:37.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T10:59:37.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:59:37.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:59:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T10:59:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.374354 -999.00  +18.40  20.87     31   +1.10 1 1 1 1 1   888    0 19.11 55.37 ----- 20.9 20.9 74.9 24.3 26.4 -24.5 25.3 -24.7 24.3 -23.6 25.1 -23.0
2025-11-17T10:59:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T10:59:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T10:59:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.374354
2025-11-17T10:59:37.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T10:59:37.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T10:59:37.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T10:59:37.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T10:59:37.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T10:59:37.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:59:26', tmtdew=20.97, humidity=24.26, cloud=0.0, wind=5.75, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:59:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T10:59:37.607 [DEBUG] [Thread-53048] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:59:37.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T10:59:37.703 [DEBUG] [Thread-53051] [transport.py] [_log()] starting thread (client mode): 0xd31cc3d0
2025-11-17T10:59:37.703 [DEBUG] [Thread-53051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T10:59:37.721 [DEBUG] [Thread-53051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T10:59:37.721 [INFO] [Thread-53051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T10:59:37.728 [DEBUG] [Thread-53051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T10:59:37.729 [DEBUG] [Thread-53051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T10:59:37.729 [DEBUG] [Thread-53051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T10:59:37.729 [DEBUG] [Thread-53051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:59:37.729 [DEBUG] [Thread-53051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T10:59:37.729 [DEBUG] [Thread-53051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:59:37.729 [DEBUG] [Thread-53051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T10:59:37.729 [DEBUG] [Thread-53051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T10:59:37.729 [DEBUG] [Thread-53051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T10:59:37.730 [DEBUG] [Thread-53051] [transport.py] [_log()] client lang: <none>
2025-11-17T10:59:37.730 [DEBUG] [Thread-53051] [transport.py] [_log()] server lang: <none>
2025-11-17T10:59:37.730 [DEBUG] [Thread-53051] [transport.py] [_log()] kex follows: False
2025-11-17T10:59:37.730 [DEBUG] [Thread-53051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T10:59:37.730 [DEBUG] [Thread-53051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T10:59:37.730 [DEBUG] [Thread-53051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T10:59:37.730 [DEBUG] [Thread-53051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T10:59:37.730 [DEBUG] [Thread-53051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T10:59:37.731 [DEBUG] [Thread-53051] [transport.py] [_log()] Compression: none
2025-11-17T10:59:37.731 [DEBUG] [Thread-53051] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T10:59:37.786 [DEBUG] [Thread-53051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T10:59:37.786 [DEBUG] [Thread-53051] [transport.py] [_log()] Switch to new keys ...
2025-11-17T10:59:37.787 [DEBUG] [Thread-53051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T10:59:37.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T10:59:37.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T10:59:37.842 [DEBUG] [Thread-53051] [transport.py] [_log()] userauth is OK
2025-11-17T10:59:37.842 [DEBUG] [Thread-53051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T10:59:37.842 [DEBUG] [Thread-53051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T10:59:37.842 [DEBUG] [Thread-53051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T10:59:37.843 [DEBUG] [Thread-53051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T10:59:37.863 [INFO] [Thread-53051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T10:59:37.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T10:59:37.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T10:59:38.766 [DEBUG] [Thread-53051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T10:59:38.766 [DEBUG] [Thread-53051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T10:59:38.814 [DEBUG] [Thread-53051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T10:59:38.814 [DEBUG] [Thread-53051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T10:59:38.824 [DEBUG] [Thread-53051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T10:59:38.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T10:59:38.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T10:59:38.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T10:59:38.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T10:59:38.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T10:59:38.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T10:59:38.858 [DEBUG] [Thread-53051] [transport.py] [_log()] EOF in transport thread
2025-11-17T10:59:42.119 [DEBUG] [Thread-53053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T10:59:57.160 [DEBUG] [Thread-53054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:00:05.244 [DEBUG] [Thread-53055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:00:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:00:08.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:00:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:00:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 10, 59, 58), 20.86, 24.21, 0.0, 8.7, 19.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:00:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 10:59:58
2025-11-17T11:00:09.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:00:09.833 [DEBUG] [Thread-53056] [transport.py] [_log()] starting thread (client mode): 0xd07bd330
2025-11-17T11:00:09.834 [DEBUG] [Thread-53056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:00:09.854 [DEBUG] [Thread-53056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:00:09.854 [INFO] [Thread-53056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] client lang: <none>
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] server lang: <none>
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] kex follows: False
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:00:09.857 [DEBUG] [Thread-53056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:00:09.858 [DEBUG] [Thread-53056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:00:09.858 [DEBUG] [Thread-53056] [transport.py] [_log()] Compression: none
2025-11-17T11:00:09.858 [DEBUG] [Thread-53056] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:00:09.878 [DEBUG] [Thread-53056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:00:09.878 [DEBUG] [Thread-53056] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:00:09.878 [DEBUG] [Thread-53056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:00:09.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:00:09.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:00:09.879 [DEBUG] [Thread-53056] [transport.py] [_log()] userauth is OK
2025-11-17T11:00:09.879 [DEBUG] [Thread-53056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:00:09.879 [DEBUG] [Thread-53056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:00:09.879 [DEBUG] [Thread-53056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:00:09.879 [DEBUG] [Thread-53056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:00:09.887 [INFO] [Thread-53056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:00:09.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:00:11.979 [DEBUG] [Thread-53056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:00:11.979 [DEBUG] [Thread-53056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:00:11.979 [DEBUG] [Thread-53056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:00:12.020 [DEBUG] [Thread-53056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:00:12.020 [DEBUG] [Thread-53056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:00:12.023 [DEBUG] [Thread-53056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:00:12.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:00:12.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:00:12.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:00:12.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:00:12.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:00:12.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:00:12.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:00:12.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:00:12.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:00:12.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.374701 -999.00  +18.30  11.56     30   +0.70 1 1 1 1 1   888    0 18.92 58.36 ----- 11.6 11.6 33.4 21.4 26.3 -24.5 25.1 -25.8 24.2 -24.9 25.1 -23.9
2025-11-17T11:00:12.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:00:12.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:00:12.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.374701
2025-11-17T11:00:12.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:00:12.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:00:12.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:00:12.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:00:12.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:00:12.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T10:59:58', tmtdew=20.86, humidity=24.21, cloud=0.0, wind=8.7, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T08:59:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:00:12.050 [DEBUG] [Thread-53056] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:00:12.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:00:12.154 [DEBUG] [Thread-53059] [transport.py] [_log()] starting thread (client mode): 0xd07cceb0
2025-11-17T11:00:12.154 [DEBUG] [Thread-53059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:00:12.172 [DEBUG] [Thread-53059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:00:12.172 [INFO] [Thread-53059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:00:12.179 [DEBUG] [Thread-53059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] client lang: <none>
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] server lang: <none>
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] kex follows: False
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:00:12.180 [DEBUG] [Thread-53059] [transport.py] [_log()] Compression: none
2025-11-17T11:00:12.181 [DEBUG] [Thread-53059] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:00:12.188 [DEBUG] [Thread-53061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:00:12.236 [DEBUG] [Thread-53059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:00:12.237 [DEBUG] [Thread-53059] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:00:12.237 [DEBUG] [Thread-53059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:00:12.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:00:12.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:00:12.294 [DEBUG] [Thread-53059] [transport.py] [_log()] userauth is OK
2025-11-17T11:00:12.294 [DEBUG] [Thread-53059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:00:12.294 [DEBUG] [Thread-53059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:00:12.295 [DEBUG] [Thread-53059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:00:12.295 [DEBUG] [Thread-53059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:00:12.315 [INFO] [Thread-53059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:00:12.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:00:12.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:00:13.211 [DEBUG] [Thread-53059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:00:13.211 [DEBUG] [Thread-53059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:00:13.259 [DEBUG] [Thread-53059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:00:13.259 [DEBUG] [Thread-53059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:00:13.268 [DEBUG] [Thread-53059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:00:13.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:00:13.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:00:13.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:00:13.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:00:13.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:00:13.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:00:13.307 [DEBUG] [Thread-53059] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:00:27.241 [DEBUG] [Thread-53062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:00:30.537 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:00:30.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:00:42.268 [DEBUG] [Thread-53063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:00:43.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:00:43.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:00:43.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:00:43.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 0, 30), 20.88, 24.16, 0.0, 14.57, 18.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:00:43.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:00:30
2025-11-17T11:00:44.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:00:44.251 [DEBUG] [Thread-53064] [transport.py] [_log()] starting thread (client mode): 0xd31630a0
2025-11-17T11:00:44.251 [DEBUG] [Thread-53064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:00:44.271 [DEBUG] [Thread-53064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:00:44.271 [INFO] [Thread-53064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:00:44.274 [DEBUG] [Thread-53064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] client lang: <none>
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] server lang: <none>
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] kex follows: False
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] Compression: none
2025-11-17T11:00:44.275 [DEBUG] [Thread-53064] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:00:44.284 [DEBUG] [Thread-53064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:00:44.284 [DEBUG] [Thread-53064] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:00:44.285 [DEBUG] [Thread-53064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:00:44.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:00:44.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:00:44.287 [DEBUG] [Thread-53064] [transport.py] [_log()] userauth is OK
2025-11-17T11:00:44.287 [DEBUG] [Thread-53064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:00:44.287 [DEBUG] [Thread-53064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:00:44.287 [DEBUG] [Thread-53064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:00:44.287 [DEBUG] [Thread-53064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:00:44.311 [INFO] [Thread-53064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:00:44.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:00:44.945 [DEBUG] [Thread-53064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:00:44.946 [DEBUG] [Thread-53064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:00:44.946 [DEBUG] [Thread-53064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:00:44.987 [DEBUG] [Thread-53064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:00:44.987 [DEBUG] [Thread-53064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:00:44.989 [DEBUG] [Thread-53064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:00:45.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:00:45.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:00:45.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:00:45.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:00:45.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:00:45.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:00:45.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:00:45.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.375048 -999.00  +18.20   7.22     30   +0.70 1 1 1 1 1   888    0 19.21 64.23 ----- 7.2 7.2 66.2 12.6 26.2 -25.6 25.3 -23.9 24.3 -23.6 25.1 -23.2
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.375048
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:00:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:00:30', tmtdew=20.88, humidity=24.16, cloud=0.0, wind=14.57, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:00:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:00:45.008 [DEBUG] [Thread-53064] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:00:45.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:00:45.093 [DEBUG] [Thread-53067] [transport.py] [_log()] starting thread (client mode): 0xd07cf730
2025-11-17T11:00:45.093 [DEBUG] [Thread-53067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:00:45.108 [DEBUG] [Thread-53067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:00:45.108 [INFO] [Thread-53067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] client lang: <none>
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] server lang: <none>
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] kex follows: False
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:00:45.115 [DEBUG] [Thread-53067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:00:45.116 [DEBUG] [Thread-53067] [transport.py] [_log()] Compression: none
2025-11-17T11:00:45.116 [DEBUG] [Thread-53067] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:00:45.172 [DEBUG] [Thread-53067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:00:45.173 [DEBUG] [Thread-53067] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:00:45.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:00:45.173 [DEBUG] [Thread-53067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:00:45.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:00:45.229 [DEBUG] [Thread-53067] [transport.py] [_log()] userauth is OK
2025-11-17T11:00:45.229 [DEBUG] [Thread-53067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:00:45.229 [DEBUG] [Thread-53067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:00:45.229 [DEBUG] [Thread-53067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:00:45.229 [DEBUG] [Thread-53067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:00:45.243 [INFO] [Thread-53067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:00:45.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:00:45.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:00:46.114 [DEBUG] [Thread-53067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:00:46.114 [DEBUG] [Thread-53067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:00:46.162 [DEBUG] [Thread-53067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:00:46.162 [DEBUG] [Thread-53067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:00:46.170 [DEBUG] [Thread-53067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:00:46.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:00:46.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:00:46.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:00:46.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:00:46.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:00:46.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:00:46.201 [DEBUG] [Thread-53067] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:00:57.301 [DEBUG] [Thread-53069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:01:05.318 [DEBUG] [Thread-53070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:01:12.344 [DEBUG] [Thread-53071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:01:16.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:01:16.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:01:16.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:01:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 1, 2), 20.78, 24.28, 0.0, 9.78, 18.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:01:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:01:02
2025-11-17T11:01:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:01:17.141 [DEBUG] [Thread-53072] [transport.py] [_log()] starting thread (client mode): 0xd07be740
2025-11-17T11:01:17.141 [DEBUG] [Thread-53072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:01:17.152 [DEBUG] [Thread-53072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:01:17.152 [INFO] [Thread-53072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] client lang: <none>
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] server lang: <none>
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] kex follows: False
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:01:17.153 [DEBUG] [Thread-53072] [transport.py] [_log()] Compression: none
2025-11-17T11:01:17.154 [DEBUG] [Thread-53072] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:01:17.161 [DEBUG] [Thread-53072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:01:17.161 [DEBUG] [Thread-53072] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:01:17.161 [DEBUG] [Thread-53072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:01:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:01:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:01:17.162 [DEBUG] [Thread-53072] [transport.py] [_log()] userauth is OK
2025-11-17T11:01:17.162 [DEBUG] [Thread-53072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:01:17.162 [DEBUG] [Thread-53072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:01:17.162 [DEBUG] [Thread-53072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:01:17.162 [DEBUG] [Thread-53072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:01:17.175 [INFO] [Thread-53072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:01:17.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:01:17.726 [DEBUG] [Thread-53072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:01:17.726 [DEBUG] [Thread-53072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:01:17.727 [DEBUG] [Thread-53072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:01:17.767 [DEBUG] [Thread-53072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:01:17.767 [DEBUG] [Thread-53072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:01:17.770 [DEBUG] [Thread-53072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:01:17.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:01:17.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:01:17.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:01:17.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:01:17.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:01:17.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:01:17.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:01:17.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:01:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:01:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.375396 -999.00  +18.30   5.77     30   +0.90 1 1 1 1 1   888    0 18.80 58.39 ----- 5.8 5.8 43.6 7.2 26.3 -23.9 25.5 -23.8 24.3 -23.4 25.2 -23.2
2025-11-17T11:01:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:01:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:01:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.375396
2025-11-17T11:01:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:01:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:01:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:01:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:01:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:01:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:01:02', tmtdew=20.78, humidity=24.28, cloud=0.0, wind=9.78, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:00:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:01:17.791 [DEBUG] [Thread-53072] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:01:17.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:01:17.891 [DEBUG] [Thread-53075] [transport.py] [_log()] starting thread (client mode): 0xd31cf220
2025-11-17T11:01:17.891 [DEBUG] [Thread-53075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:01:17.909 [DEBUG] [Thread-53075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:01:17.909 [INFO] [Thread-53075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:01:17.917 [DEBUG] [Thread-53075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:01:17.917 [DEBUG] [Thread-53075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:01:17.917 [DEBUG] [Thread-53075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:01:17.917 [DEBUG] [Thread-53075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:01:17.917 [DEBUG] [Thread-53075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:01:17.917 [DEBUG] [Thread-53075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:01:17.917 [DEBUG] [Thread-53075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:01:17.917 [DEBUG] [Thread-53075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] client lang: <none>
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] server lang: <none>
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] kex follows: False
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:01:17.918 [DEBUG] [Thread-53075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:01:17.919 [DEBUG] [Thread-53075] [transport.py] [_log()] Compression: none
2025-11-17T11:01:17.919 [DEBUG] [Thread-53075] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:01:17.977 [DEBUG] [Thread-53075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:01:17.978 [DEBUG] [Thread-53075] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:01:17.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:01:17.979 [DEBUG] [Thread-53075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:01:17.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:01:18.037 [DEBUG] [Thread-53075] [transport.py] [_log()] userauth is OK
2025-11-17T11:01:18.037 [DEBUG] [Thread-53075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:01:18.037 [DEBUG] [Thread-53075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:01:18.037 [DEBUG] [Thread-53075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:01:18.037 [DEBUG] [Thread-53075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:01:18.056 [INFO] [Thread-53075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:01:18.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:01:18.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:01:18.896 [DEBUG] [Thread-53075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:01:18.896 [DEBUG] [Thread-53075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:01:18.944 [DEBUG] [Thread-53075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:01:18.944 [DEBUG] [Thread-53075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:01:18.953 [DEBUG] [Thread-53075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:01:18.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:01:18.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:01:18.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:01:18.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:01:18.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:01:18.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:01:18.993 [DEBUG] [Thread-53075] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:01:27.373 [DEBUG] [Thread-53077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:01:30.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:01:30.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:01:42.406 [DEBUG] [Thread-53078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:01:48.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:01:48.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:01:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:01:49.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 1, 34), 21.05, 23.85, 0.0, 14.72, 18.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:01:49.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:01:34
2025-11-17T11:01:49.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:01:49.893 [DEBUG] [Thread-53079] [transport.py] [_log()] starting thread (client mode): 0xd31633d0
2025-11-17T11:01:49.893 [DEBUG] [Thread-53079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:01:49.915 [DEBUG] [Thread-53079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:01:49.915 [INFO] [Thread-53079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] client lang: <none>
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] server lang: <none>
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] kex follows: False
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] Compression: none
2025-11-17T11:01:49.918 [DEBUG] [Thread-53079] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:01:49.938 [DEBUG] [Thread-53079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:01:49.939 [DEBUG] [Thread-53079] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:01:49.939 [DEBUG] [Thread-53079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:01:49.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:01:49.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:01:49.941 [DEBUG] [Thread-53079] [transport.py] [_log()] userauth is OK
2025-11-17T11:01:49.941 [DEBUG] [Thread-53079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:01:49.942 [DEBUG] [Thread-53079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:01:49.942 [DEBUG] [Thread-53079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:01:49.942 [DEBUG] [Thread-53079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:01:49.966 [INFO] [Thread-53079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:01:49.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:01:50.616 [DEBUG] [Thread-53079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:01:50.616 [DEBUG] [Thread-53079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:01:50.616 [DEBUG] [Thread-53079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:01:50.656 [DEBUG] [Thread-53079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:01:50.657 [DEBUG] [Thread-53079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:01:50.659 [DEBUG] [Thread-53079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:01:50.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:01:50.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:01:50.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:01:50.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:01:50.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:01:50.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:01:50.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:01:50.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:01:50.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:01:50.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.375743 -999.00  +18.50  11.89     30   +0.90 1 1 1 1 1   888    0 19.12 54.18 ----- 11.9 11.9 32.5 12.9 26.6 -24.4 25.5 -24.7 24.4 -23.1 25.4 -23.5
2025-11-17T11:01:50.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:01:50.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:01:50.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.375743
2025-11-17T11:01:50.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:01:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:01:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:01:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:01:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:01:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:01:34', tmtdew=21.05, humidity=23.85, cloud=0.0, wind=14.72, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:01:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:01:50.684 [DEBUG] [Thread-53079] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:01:50.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:01:50.783 [DEBUG] [Thread-53082] [transport.py] [_log()] starting thread (client mode): 0xd07bd330
2025-11-17T11:01:50.783 [DEBUG] [Thread-53082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:01:50.798 [DEBUG] [Thread-53082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:01:50.798 [INFO] [Thread-53082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] client lang: <none>
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] server lang: <none>
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] kex follows: False
2025-11-17T11:01:50.806 [DEBUG] [Thread-53082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:01:50.807 [DEBUG] [Thread-53082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:01:50.807 [DEBUG] [Thread-53082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:01:50.807 [DEBUG] [Thread-53082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:01:50.807 [DEBUG] [Thread-53082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:01:50.807 [DEBUG] [Thread-53082] [transport.py] [_log()] Compression: none
2025-11-17T11:01:50.807 [DEBUG] [Thread-53082] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:01:50.869 [DEBUG] [Thread-53082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:01:50.870 [DEBUG] [Thread-53082] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:01:50.871 [DEBUG] [Thread-53082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:01:50.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:01:50.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:01:50.925 [DEBUG] [Thread-53082] [transport.py] [_log()] userauth is OK
2025-11-17T11:01:50.925 [DEBUG] [Thread-53082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:01:50.926 [DEBUG] [Thread-53082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:01:50.926 [DEBUG] [Thread-53082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:01:50.926 [DEBUG] [Thread-53082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:01:50.945 [INFO] [Thread-53082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:01:50.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:01:50.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:01:51.821 [DEBUG] [Thread-53082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:01:51.821 [DEBUG] [Thread-53082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:01:51.869 [DEBUG] [Thread-53082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:01:51.869 [DEBUG] [Thread-53082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:01:51.878 [DEBUG] [Thread-53082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:01:51.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:01:51.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:01:51.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:01:51.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:01:51.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:01:51.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:01:51.912 [DEBUG] [Thread-53082] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:01:57.437 [DEBUG] [Thread-53084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:02:05.362 [DEBUG] [Thread-53085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:02:12.476 [DEBUG] [Thread-53086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:02:21.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:02:21.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:02:21.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:02:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 2, 6), 20.97, 23.98, 0.0, 13.41, 18.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:02:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:02:06
2025-11-17T11:02:22.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:02:22.828 [DEBUG] [Thread-53087] [transport.py] [_log()] starting thread (client mode): 0xd0718670
2025-11-17T11:02:22.828 [DEBUG] [Thread-53087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:02:22.847 [DEBUG] [Thread-53087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:02:22.847 [INFO] [Thread-53087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] client lang: <none>
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] server lang: <none>
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] kex follows: False
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:02:22.850 [DEBUG] [Thread-53087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:02:22.851 [DEBUG] [Thread-53087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:02:22.851 [DEBUG] [Thread-53087] [transport.py] [_log()] Compression: none
2025-11-17T11:02:22.851 [DEBUG] [Thread-53087] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:02:22.873 [DEBUG] [Thread-53087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:02:22.873 [DEBUG] [Thread-53087] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:02:22.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:02:22.874 [DEBUG] [Thread-53087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:02:22.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:02:22.876 [DEBUG] [Thread-53087] [transport.py] [_log()] userauth is OK
2025-11-17T11:02:22.876 [DEBUG] [Thread-53087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:02:22.876 [DEBUG] [Thread-53087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:02:22.876 [DEBUG] [Thread-53087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:02:22.876 [DEBUG] [Thread-53087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:02:22.901 [INFO] [Thread-53087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:02:22.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:02:23.618 [DEBUG] [Thread-53087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:02:23.618 [DEBUG] [Thread-53087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:02:23.619 [DEBUG] [Thread-53087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:02:23.659 [DEBUG] [Thread-53087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:02:23.659 [DEBUG] [Thread-53087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:02:23.662 [DEBUG] [Thread-53087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:02:23.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:02:23.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:02:23.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:02:23.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:02:23.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:02:23.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:02:23.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:02:23.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:02:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:02:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.376090 -999.00  +18.60  10.30     30   +0.80 1 2 1 1 1   888    0 19.20 51.49 ----- 10.3 10.3 35.4 17.5 26.6 -24.8 25.6 -23.1 24.6 -22.8 25.3 -29.2
2025-11-17T11:02:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:02:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:02:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.376090
2025-11-17T11:02:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:02:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:02:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:02:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:02:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:02:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:02:06', tmtdew=20.97, humidity=23.98, cloud=0.0, wind=13.41, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:01:34.176', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:02:23.686 [DEBUG] [Thread-53087] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:02:23.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:02:23.782 [DEBUG] [Thread-53090] [transport.py] [_log()] starting thread (client mode): 0xd31cda50
2025-11-17T11:02:23.782 [DEBUG] [Thread-53090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:02:23.797 [DEBUG] [Thread-53090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:02:23.797 [INFO] [Thread-53090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:02:23.805 [DEBUG] [Thread-53090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:02:23.805 [DEBUG] [Thread-53090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:02:23.805 [DEBUG] [Thread-53090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:02:23.805 [DEBUG] [Thread-53090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:02:23.805 [DEBUG] [Thread-53090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:02:23.805 [DEBUG] [Thread-53090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] client lang: <none>
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] server lang: <none>
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] kex follows: False
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] Compression: none
2025-11-17T11:02:23.806 [DEBUG] [Thread-53090] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:02:23.864 [DEBUG] [Thread-53090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:02:23.865 [DEBUG] [Thread-53090] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:02:23.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:02:23.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:02:23.866 [DEBUG] [Thread-53090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:02:23.921 [DEBUG] [Thread-53090] [transport.py] [_log()] userauth is OK
2025-11-17T11:02:23.921 [DEBUG] [Thread-53090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:02:23.921 [DEBUG] [Thread-53090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:02:23.921 [DEBUG] [Thread-53090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:02:23.921 [DEBUG] [Thread-53090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:02:23.945 [INFO] [Thread-53090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:02:23.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:02:23.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:02:24.783 [DEBUG] [Thread-53090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:02:24.783 [DEBUG] [Thread-53090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:02:24.831 [DEBUG] [Thread-53090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:02:24.831 [DEBUG] [Thread-53090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:02:24.842 [DEBUG] [Thread-53090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:02:24.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:02:24.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:02:24.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:02:24.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:02:24.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:02:24.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:02:24.877 [DEBUG] [Thread-53090] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:02:27.507 [DEBUG] [Thread-53092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:02:30.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:02:30.823 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:02:42.547 [DEBUG] [Thread-53093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:02:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:02:54.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:02:54.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:02:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 2, 38), 21.05, 24.23, 0.0, 13.39, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:02:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:02:38
2025-11-17T11:02:55.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:02:55.778 [DEBUG] [Thread-53094] [transport.py] [_log()] starting thread (client mode): 0xd071a560
2025-11-17T11:02:55.778 [DEBUG] [Thread-53094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:02:55.798 [DEBUG] [Thread-53094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:02:55.799 [INFO] [Thread-53094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:02:55.801 [DEBUG] [Thread-53094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] client lang: <none>
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] server lang: <none>
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] kex follows: False
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] Compression: none
2025-11-17T11:02:55.802 [DEBUG] [Thread-53094] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:02:55.821 [DEBUG] [Thread-53094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:02:55.821 [DEBUG] [Thread-53094] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:02:55.822 [DEBUG] [Thread-53094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:02:55.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:02:55.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:02:55.824 [DEBUG] [Thread-53094] [transport.py] [_log()] userauth is OK
2025-11-17T11:02:55.824 [DEBUG] [Thread-53094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:02:55.824 [DEBUG] [Thread-53094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:02:55.824 [DEBUG] [Thread-53094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:02:55.824 [DEBUG] [Thread-53094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:02:55.860 [INFO] [Thread-53094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:02:55.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:02:56.505 [DEBUG] [Thread-53094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:02:56.506 [DEBUG] [Thread-53094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:02:56.506 [DEBUG] [Thread-53094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:02:56.547 [DEBUG] [Thread-53094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:02:56.547 [DEBUG] [Thread-53094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:02:56.550 [DEBUG] [Thread-53094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:02:56.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:02:56.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:02:56.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:02:56.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:02:56.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:02:56.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:02:56.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:02:56.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:02:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:02:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.376437 -999.00  +18.70  18.29     30   +0.80 1 1 1 1 1   888    0 18.22 48.02 ----- 18.3 18.3 18.2 21.9 26.7 -25.0 25.5 -24.9 24.7 -22.7 25.5 -23.4
2025-11-17T11:02:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:02:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:02:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.376437
2025-11-17T11:02:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:02:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:02:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:02:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:02:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:02:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:02:38', tmtdew=21.05, humidity=24.23, cloud=0.0, wind=13.39, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:02:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:02:56.576 [DEBUG] [Thread-53094] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:02:56.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:02:56.671 [DEBUG] [Thread-53097] [transport.py] [_log()] starting thread (client mode): 0xd0719fc0
2025-11-17T11:02:56.671 [DEBUG] [Thread-53097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:02:56.686 [DEBUG] [Thread-53097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:02:56.686 [INFO] [Thread-53097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] client lang: <none>
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] server lang: <none>
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] kex follows: False
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:02:56.694 [DEBUG] [Thread-53097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:02:56.695 [DEBUG] [Thread-53097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:02:56.695 [DEBUG] [Thread-53097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:02:56.695 [DEBUG] [Thread-53097] [transport.py] [_log()] Compression: none
2025-11-17T11:02:56.695 [DEBUG] [Thread-53097] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:02:56.752 [DEBUG] [Thread-53097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:02:56.753 [DEBUG] [Thread-53097] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:02:56.753 [DEBUG] [Thread-53097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:02:56.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:02:56.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:02:56.809 [DEBUG] [Thread-53097] [transport.py] [_log()] userauth is OK
2025-11-17T11:02:56.809 [DEBUG] [Thread-53097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:02:56.809 [DEBUG] [Thread-53097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:02:56.809 [DEBUG] [Thread-53097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:02:56.809 [DEBUG] [Thread-53097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:02:56.828 [INFO] [Thread-53097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:02:56.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:02:56.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:02:57.573 [DEBUG] [Thread-53099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:02:57.679 [DEBUG] [Thread-53097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:02:57.679 [DEBUG] [Thread-53097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:02:57.728 [DEBUG] [Thread-53097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:02:57.728 [DEBUG] [Thread-53097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:02:57.737 [DEBUG] [Thread-53097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:02:57.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:02:57.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:02:57.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:02:57.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:02:57.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:02:57.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:02:57.770 [DEBUG] [Thread-53097] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:03:05.416 [DEBUG] [Thread-53100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:03:12.619 [DEBUG] [Thread-53101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:03:27.642 [DEBUG] [Thread-53102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:03:27.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:03:27.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:03:27.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:03:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 3, 10), 21.29, 23.9, 0.0, 15.67, 19.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:03:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:03:10
2025-11-17T11:03:28.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:03:28.696 [DEBUG] [Thread-53103] [transport.py] [_log()] starting thread (client mode): 0xd07849a0
2025-11-17T11:03:28.696 [DEBUG] [Thread-53103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:03:28.715 [DEBUG] [Thread-53103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:03:28.715 [INFO] [Thread-53103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:03:28.718 [DEBUG] [Thread-53103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] client lang: <none>
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] server lang: <none>
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] kex follows: False
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] Compression: none
2025-11-17T11:03:28.719 [DEBUG] [Thread-53103] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:03:28.737 [DEBUG] [Thread-53103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:03:28.737 [DEBUG] [Thread-53103] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:03:28.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:03:28.738 [DEBUG] [Thread-53103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:03:28.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:03:28.740 [DEBUG] [Thread-53103] [transport.py] [_log()] userauth is OK
2025-11-17T11:03:28.740 [DEBUG] [Thread-53103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:03:28.740 [DEBUG] [Thread-53103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:03:28.740 [DEBUG] [Thread-53103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:03:28.740 [DEBUG] [Thread-53103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:03:28.775 [INFO] [Thread-53103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:03:28.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:03:29.330 [DEBUG] [Thread-53103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:03:29.331 [DEBUG] [Thread-53103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:03:29.331 [DEBUG] [Thread-53103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:03:29.371 [DEBUG] [Thread-53103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:03:29.371 [DEBUG] [Thread-53103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:03:29.374 [DEBUG] [Thread-53103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:03:29.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:03:29.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:03:29.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:03:29.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:03:29.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:03:29.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:03:29.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:03:29.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:03:29.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:03:29.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.376785 -999.00  +18.60  15.71     30   +0.60 1 1 1 1 1   888    0 19.22 46.45 ----- 15.7 15.7 29.8 28.6 26.7 -25.9 25.4 -25.7 24.6 -24.1 25.4 -24.2
2025-11-17T11:03:29.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:03:29.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:03:29.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.376785
2025-11-17T11:03:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:03:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:03:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:03:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:03:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:03:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:03:10', tmtdew=21.29, humidity=23.9, cloud=0.0, wind=15.67, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:02:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:03:29.399 [DEBUG] [Thread-53103] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:03:29.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:03:29.496 [DEBUG] [Thread-53106] [transport.py] [_log()] starting thread (client mode): 0xd0784730
2025-11-17T11:03:29.497 [DEBUG] [Thread-53106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:03:29.512 [DEBUG] [Thread-53106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:03:29.512 [INFO] [Thread-53106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:03:29.519 [DEBUG] [Thread-53106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:03:29.519 [DEBUG] [Thread-53106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] client lang: <none>
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] server lang: <none>
2025-11-17T11:03:29.520 [DEBUG] [Thread-53106] [transport.py] [_log()] kex follows: False
2025-11-17T11:03:29.521 [DEBUG] [Thread-53106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:03:29.521 [DEBUG] [Thread-53106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:03:29.521 [DEBUG] [Thread-53106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:03:29.521 [DEBUG] [Thread-53106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:03:29.521 [DEBUG] [Thread-53106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:03:29.521 [DEBUG] [Thread-53106] [transport.py] [_log()] Compression: none
2025-11-17T11:03:29.521 [DEBUG] [Thread-53106] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:03:29.577 [DEBUG] [Thread-53106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:03:29.577 [DEBUG] [Thread-53106] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:03:29.578 [DEBUG] [Thread-53106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:03:29.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:03:29.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:03:29.632 [DEBUG] [Thread-53106] [transport.py] [_log()] userauth is OK
2025-11-17T11:03:29.632 [DEBUG] [Thread-53106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:03:29.632 [DEBUG] [Thread-53106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:03:29.632 [DEBUG] [Thread-53106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:03:29.632 [DEBUG] [Thread-53106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:03:29.651 [INFO] [Thread-53106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:03:29.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:03:29.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:03:30.541 [DEBUG] [Thread-53106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:03:30.541 [DEBUG] [Thread-53106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:03:30.589 [DEBUG] [Thread-53106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:03:30.589 [DEBUG] [Thread-53106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:03:30.598 [DEBUG] [Thread-53106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:03:30.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:03:30.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:03:30.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:03:30.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:03:30.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:03:30.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:03:30.632 [DEBUG] [Thread-53106] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:03:30.964 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:03:30.965 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:03:42.670 [DEBUG] [Thread-53108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:03:57.713 [DEBUG] [Thread-53109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:04:00.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:04:00.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:04:00.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:04:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 3, 42), 21.33, 23.92, 0.0, 19.62, 19.4, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:04:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:03:42
2025-11-17T11:04:01.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:04:01.571 [DEBUG] [Thread-53110] [transport.py] [_log()] starting thread (client mode): 0xd3135d20
2025-11-17T11:04:01.572 [DEBUG] [Thread-53110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:04:01.591 [DEBUG] [Thread-53110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:04:01.591 [INFO] [Thread-53110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] client lang: <none>
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] server lang: <none>
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] kex follows: False
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:04:01.594 [DEBUG] [Thread-53110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:04:01.595 [DEBUG] [Thread-53110] [transport.py] [_log()] Compression: none
2025-11-17T11:04:01.595 [DEBUG] [Thread-53110] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:04:01.610 [DEBUG] [Thread-53110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:04:01.610 [DEBUG] [Thread-53110] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:04:01.610 [DEBUG] [Thread-53110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:04:01.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:04:01.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:04:01.611 [DEBUG] [Thread-53110] [transport.py] [_log()] userauth is OK
2025-11-17T11:04:01.611 [DEBUG] [Thread-53110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:04:01.611 [DEBUG] [Thread-53110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:04:01.611 [DEBUG] [Thread-53110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:04:01.611 [DEBUG] [Thread-53110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:04:01.622 [INFO] [Thread-53110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:04:01.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:04:02.257 [DEBUG] [Thread-53110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:04:02.257 [DEBUG] [Thread-53110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:04:02.257 [DEBUG] [Thread-53110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:04:02.298 [DEBUG] [Thread-53110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:04:02.298 [DEBUG] [Thread-53110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:04:02.300 [DEBUG] [Thread-53110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:04:02.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:04:02.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:04:02.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:04:02.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:04:02.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:04:02.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:04:02.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:04:02.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:04:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:04:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.377479 -999.00  +19.00  25.59     29   +1.00 1 1 1 1 1   888    0 19.04 46.08 ----- 25.6 25.6 41.8 30.5 26.4 -26.2 25.3 -26.1 24.3 -24.6 25.1 -23.3
2025-11-17T11:04:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:04:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:04:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.377479
2025-11-17T11:04:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:04:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:04:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:04:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:04:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:04:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:03:42', tmtdew=21.33, humidity=23.92, cloud=0.0, wind=19.62, temperature=19.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:03:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:04:02.317 [DEBUG] [Thread-53110] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:04:02.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:04:02.402 [DEBUG] [Thread-53113] [transport.py] [_log()] starting thread (client mode): 0xd07bfc40
2025-11-17T11:04:02.402 [DEBUG] [Thread-53113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:04:02.417 [DEBUG] [Thread-53113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:04:02.417 [INFO] [Thread-53113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:04:02.424 [DEBUG] [Thread-53113] [transport.py] [_log()] client lang: <none>
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] server lang: <none>
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] kex follows: False
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] Compression: none
2025-11-17T11:04:02.425 [DEBUG] [Thread-53113] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:04:02.483 [DEBUG] [Thread-53113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:04:02.483 [DEBUG] [Thread-53113] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:04:02.483 [DEBUG] [Thread-53113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:04:02.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:04:02.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:04:02.540 [DEBUG] [Thread-53113] [transport.py] [_log()] userauth is OK
2025-11-17T11:04:02.540 [DEBUG] [Thread-53113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:04:02.540 [DEBUG] [Thread-53113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:04:02.540 [DEBUG] [Thread-53113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:04:02.540 [DEBUG] [Thread-53113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:04:02.554 [INFO] [Thread-53113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:04:02.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:04:02.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:04:03.391 [DEBUG] [Thread-53113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:04:03.391 [DEBUG] [Thread-53113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:04:03.439 [DEBUG] [Thread-53113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:04:03.439 [DEBUG] [Thread-53113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:04:03.448 [DEBUG] [Thread-53113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:04:03.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:04:03.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:04:03.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:04:03.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:04:03.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:04:03.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:04:03.482 [DEBUG] [Thread-53113] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:04:05.477 [DEBUG] [Thread-53115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:04:12.744 [DEBUG] [Thread-53116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:04:27.786 [DEBUG] [Thread-53117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:04:31.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:04:31.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:04:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:04:33.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:04:33.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:04:34.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 4, 14), 21.33, 23.93, 0.0, 16.48, 19.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:04:34.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:04:14
2025-11-17T11:04:34.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:04:34.410 [DEBUG] [Thread-53118] [transport.py] [_log()] starting thread (client mode): 0xd31cf3a0
2025-11-17T11:04:34.410 [DEBUG] [Thread-53118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:04:34.431 [DEBUG] [Thread-53118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:04:34.431 [INFO] [Thread-53118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:04:34.434 [DEBUG] [Thread-53118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:04:34.434 [DEBUG] [Thread-53118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:04:34.434 [DEBUG] [Thread-53118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:04:34.434 [DEBUG] [Thread-53118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:04:34.434 [DEBUG] [Thread-53118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:04:34.434 [DEBUG] [Thread-53118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] client lang: <none>
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] server lang: <none>
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] kex follows: False
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] Compression: none
2025-11-17T11:04:34.435 [DEBUG] [Thread-53118] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:04:34.445 [DEBUG] [Thread-53118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:04:34.446 [DEBUG] [Thread-53118] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:04:34.446 [DEBUG] [Thread-53118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:04:34.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:04:34.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:04:34.452 [DEBUG] [Thread-53118] [transport.py] [_log()] userauth is OK
2025-11-17T11:04:34.452 [DEBUG] [Thread-53118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:04:34.452 [DEBUG] [Thread-53118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:04:34.452 [DEBUG] [Thread-53118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:04:34.452 [DEBUG] [Thread-53118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:04:34.476 [INFO] [Thread-53118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:04:34.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:04:35.053 [DEBUG] [Thread-53118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:04:35.053 [DEBUG] [Thread-53118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:04:35.053 [DEBUG] [Thread-53118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:04:35.094 [DEBUG] [Thread-53118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:04:35.094 [DEBUG] [Thread-53118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:04:35.097 [DEBUG] [Thread-53118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:04:35.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:04:35.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:04:35.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:04:35.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:04:35.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:04:35.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:04:35.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.377826 -999.00  +18.80  16.74     30   +0.80 1 1 1 1 1   888    0 19.33 57.43 ----- 16.7 16.7 16.0 25.3 26.2 -24.8 25.2 -24.2 24.3 -23.4 25.1 -23.7
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.377826
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:04:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:04:14', tmtdew=21.33, humidity=23.93, cloud=0.0, wind=16.48, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:04:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:04:35.117 [DEBUG] [Thread-53118] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:04:35.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:04:35.200 [DEBUG] [Thread-53121] [transport.py] [_log()] starting thread (client mode): 0xd3163c70
2025-11-17T11:04:35.200 [DEBUG] [Thread-53121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:04:35.218 [DEBUG] [Thread-53121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:04:35.219 [INFO] [Thread-53121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] client lang: <none>
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] server lang: <none>
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] kex follows: False
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:04:35.230 [DEBUG] [Thread-53121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:04:35.231 [DEBUG] [Thread-53121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:04:35.231 [DEBUG] [Thread-53121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:04:35.231 [DEBUG] [Thread-53121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:04:35.231 [DEBUG] [Thread-53121] [transport.py] [_log()] Compression: none
2025-11-17T11:04:35.231 [DEBUG] [Thread-53121] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:04:35.291 [DEBUG] [Thread-53121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:04:35.292 [DEBUG] [Thread-53121] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:04:35.292 [DEBUG] [Thread-53121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:04:35.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:04:35.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:04:35.349 [DEBUG] [Thread-53121] [transport.py] [_log()] userauth is OK
2025-11-17T11:04:35.349 [DEBUG] [Thread-53121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:04:35.349 [DEBUG] [Thread-53121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:04:35.349 [DEBUG] [Thread-53121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:04:35.349 [DEBUG] [Thread-53121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:04:35.369 [INFO] [Thread-53121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:04:35.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:04:35.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:04:36.260 [DEBUG] [Thread-53121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:04:36.260 [DEBUG] [Thread-53121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:04:36.308 [DEBUG] [Thread-53121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:04:36.308 [DEBUG] [Thread-53121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:04:36.316 [DEBUG] [Thread-53121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:04:36.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:04:36.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:04:36.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:04:36.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:04:36.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:04:36.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:04:36.348 [DEBUG] [Thread-53121] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:04:42.816 [DEBUG] [Thread-53123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:04:57.862 [DEBUG] [Thread-53124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:05:05.535 [DEBUG] [Thread-53125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:05:06.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:05:06.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:05:06.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
2025-11-17T11:05:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 4, 46), 22.29, 22.42, 0.0, 15.37, 20.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:05:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:04:46
2025-11-17T11:05:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:05:07.273 [DEBUG] [Thread-53126] [transport.py] [_log()] starting thread (client mode): 0xd0787070
2025-11-17T11:05:07.273 [DEBUG] [Thread-53126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:05:07.293 [DEBUG] [Thread-53126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:05:07.293 [INFO] [Thread-53126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:05:07.296 [DEBUG] [Thread-53126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] client lang: <none>
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] server lang: <none>
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] kex follows: False
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] Compression: none
2025-11-17T11:05:07.297 [DEBUG] [Thread-53126] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:05:07.314 [DEBUG] [Thread-53126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:05:07.315 [DEBUG] [Thread-53126] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:05:07.315 [DEBUG] [Thread-53126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:05:07.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:05:07.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:05:07.317 [DEBUG] [Thread-53126] [transport.py] [_log()] userauth is OK
2025-11-17T11:05:07.318 [DEBUG] [Thread-53126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:05:07.318 [DEBUG] [Thread-53126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:05:07.318 [DEBUG] [Thread-53126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:05:07.318 [DEBUG] [Thread-53126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:05:07.342 [INFO] [Thread-53126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:05:07.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:05:09.197 [DEBUG] [Thread-53126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:05:09.197 [DEBUG] [Thread-53126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:05:09.197 [DEBUG] [Thread-53126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:05:09.237 [DEBUG] [Thread-53126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:05:09.238 [DEBUG] [Thread-53126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:05:09.240 [DEBUG] [Thread-53126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:05:09.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:05:09.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:05:09.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:05:09.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:05:09.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:05:09.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:05:09.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:05:09.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:05:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:05:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.378173 -999.00  +18.80  18.71     29   +0.80 1 1 1 1 1   888    0 19.00 51.05 ----- 18.7 18.7 22.6 24.6 26.3 -25.3 25.1 -25.2 24.4 -23.8 25.1 -23.6
2025-11-17T11:05:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:05:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:05:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.378173
2025-11-17T11:05:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:05:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:05:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:05:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:05:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:05:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:04:46', tmtdew=22.29, humidity=22.42, cloud=0.0, wind=15.37, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:04:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:05:09.334 [DEBUG] [Thread-53126] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:05:09.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:05:12.895 [DEBUG] [Thread-53129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:05:27.940 [DEBUG] [Thread-53130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:05:31.249 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:05:31.249 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:05:42.969 [DEBUG] [Thread-53131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:05:57.995 [DEBUG] [Thread-53132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:06:05.574 [DEBUG] [Thread-53133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:06:13.023 [DEBUG] [Thread-53134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:06:28.053 [DEBUG] [Thread-53135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:06:31.389 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:06:31.390 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:06:43.082 [DEBUG] [Thread-53136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:06:58.114 [DEBUG] [Thread-53137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:07:05.626 [DEBUG] [Thread-53138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:07:13.140 [DEBUG] [Thread-53139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:07:23.451 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T11:07:28.167 [DEBUG] [Thread-53140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:07:31.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:07:31.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:07:43.198 [DEBUG] [Thread-53141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:07:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:07:53.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:07:53.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:07:54.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 7, 26), 21.46, 23.27, 0.0, 14.52, 19.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:07:54.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:07:26
2025-11-17T11:07:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:07:54.459 [DEBUG] [Thread-53142] [transport.py] [_log()] starting thread (client mode): 0xd3162ad0
2025-11-17T11:07:54.459 [DEBUG] [Thread-53142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:07:54.480 [DEBUG] [Thread-53142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:07:54.480 [INFO] [Thread-53142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] client lang: <none>
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] server lang: <none>
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] kex follows: False
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] Compression: none
2025-11-17T11:07:54.483 [DEBUG] [Thread-53142] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:07:54.500 [DEBUG] [Thread-53142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:07:54.500 [DEBUG] [Thread-53142] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:07:54.500 [DEBUG] [Thread-53142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:07:54.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:07:54.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:07:54.501 [DEBUG] [Thread-53142] [transport.py] [_log()] userauth is OK
2025-11-17T11:07:54.501 [DEBUG] [Thread-53142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:07:54.501 [DEBUG] [Thread-53142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:07:54.501 [DEBUG] [Thread-53142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:07:54.501 [DEBUG] [Thread-53142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:07:54.520 [INFO] [Thread-53142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:07:54.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:07:55.166 [DEBUG] [Thread-53142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:07:55.166 [DEBUG] [Thread-53142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:07:55.167 [DEBUG] [Thread-53142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:07:55.207 [DEBUG] [Thread-53142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:07:55.207 [DEBUG] [Thread-53142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:07:55.210 [DEBUG] [Thread-53142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:07:55.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:07:55.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:07:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:07:55.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:07:55.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:07:55.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:07:55.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:07:55.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:07:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:07:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.380257 -999.00  +18.70  10.09     30   +0.70 1 1 1 1 1   888    0 18.65 31.52 ----- 10.1 10.1 34.0 14.9 26.4 -24.8 25.3 -24.0 24.4 -23.5 25.1 -22.9
2025-11-17T11:07:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:07:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:07:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.380257
2025-11-17T11:07:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:07:55.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:07:55.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:07:55.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:07:55.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:07:55.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:07:26', tmtdew=21.46, humidity=23.27, cloud=0.0, wind=14.52, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:07:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:07:55.236 [DEBUG] [Thread-53142] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:07:55.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:07:55.334 [DEBUG] [Thread-53145] [transport.py] [_log()] starting thread (client mode): 0xd31535b0
2025-11-17T11:07:55.335 [DEBUG] [Thread-53145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:07:55.349 [DEBUG] [Thread-53145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:07:55.349 [INFO] [Thread-53145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] client lang: <none>
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] server lang: <none>
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] kex follows: False
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:07:55.357 [DEBUG] [Thread-53145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:07:55.358 [DEBUG] [Thread-53145] [transport.py] [_log()] Compression: none
2025-11-17T11:07:55.358 [DEBUG] [Thread-53145] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:07:55.416 [DEBUG] [Thread-53145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:07:55.417 [DEBUG] [Thread-53145] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:07:55.417 [DEBUG] [Thread-53145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:07:55.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:07:55.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:07:55.472 [DEBUG] [Thread-53145] [transport.py] [_log()] userauth is OK
2025-11-17T11:07:55.472 [DEBUG] [Thread-53145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:07:55.472 [DEBUG] [Thread-53145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:07:55.472 [DEBUG] [Thread-53145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:07:55.472 [DEBUG] [Thread-53145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:07:55.491 [INFO] [Thread-53145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:07:55.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:07:55.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:07:56.332 [DEBUG] [Thread-53145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:07:56.332 [DEBUG] [Thread-53145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:07:56.379 [DEBUG] [Thread-53145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:07:56.379 [DEBUG] [Thread-53145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:07:56.388 [DEBUG] [Thread-53145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:07:56.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:07:56.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:07:56.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:07:56.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:07:56.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:07:56.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:07:56.423 [DEBUG] [Thread-53145] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:07:58.232 [DEBUG] [Thread-53147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:08:05.681 [DEBUG] [Thread-53148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:08:13.275 [DEBUG] [Thread-53149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:08:26.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:08:26.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:08:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:08:27.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 7, 58), 21.81, 22.67, 0.0, 12.44, 19.4, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:08:27.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:07:58
2025-11-17T11:08:27.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:08:27.372 [DEBUG] [Thread-53150] [transport.py] [_log()] starting thread (client mode): 0xd3160790
2025-11-17T11:08:27.372 [DEBUG] [Thread-53150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:08:27.394 [DEBUG] [Thread-53150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:08:27.394 [INFO] [Thread-53150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] client lang: <none>
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] server lang: <none>
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] kex follows: False
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] Compression: none
2025-11-17T11:08:27.398 [DEBUG] [Thread-53150] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:08:27.414 [DEBUG] [Thread-53150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:08:27.415 [DEBUG] [Thread-53150] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:08:27.415 [DEBUG] [Thread-53150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:08:27.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:08:27.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:08:27.417 [DEBUG] [Thread-53150] [transport.py] [_log()] userauth is OK
2025-11-17T11:08:27.417 [DEBUG] [Thread-53150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:08:27.418 [DEBUG] [Thread-53150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:08:27.418 [DEBUG] [Thread-53150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:08:27.418 [DEBUG] [Thread-53150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:08:27.442 [INFO] [Thread-53150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:08:27.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:08:28.064 [DEBUG] [Thread-53150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:08:28.064 [DEBUG] [Thread-53150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:08:28.064 [DEBUG] [Thread-53150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:08:28.105 [DEBUG] [Thread-53150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:08:28.105 [DEBUG] [Thread-53150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:08:28.107 [DEBUG] [Thread-53150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:08:28.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:08:28.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:08:28.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:08:28.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:08:28.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:08:28.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:08:28.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:08:28.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:08:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:08:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.380604 -999.00  +18.80   5.89     30   +1.00 1 2 1 1 1   888    0 18.61 31.25 ----- 5.9 5.9 309.4 9.6 26.4 -25.0 25.4 -23.3 24.4 -22.7 25.1 -22.8
2025-11-17T11:08:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:08:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:08:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.380604
2025-11-17T11:08:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:08:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:08:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:08:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:08:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:08:28.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:07:58', tmtdew=21.81, humidity=22.67, cloud=0.0, wind=12.44, temperature=19.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:08:04.186', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:08:28.128 [DEBUG] [Thread-53150] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:08:28.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:08:28.213 [DEBUG] [Thread-53153] [transport.py] [_log()] starting thread (client mode): 0xd31639a0
2025-11-17T11:08:28.214 [DEBUG] [Thread-53153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:08:28.233 [DEBUG] [Thread-53153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:08:28.233 [INFO] [Thread-53153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] client lang: <none>
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] server lang: <none>
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] kex follows: False
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] Compression: none
2025-11-17T11:08:28.241 [DEBUG] [Thread-53153] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:08:28.303 [DEBUG] [Thread-53153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:08:28.303 [DEBUG] [Thread-53153] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:08:28.303 [DEBUG] [Thread-53153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:08:28.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:08:28.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:08:28.304 [DEBUG] [Thread-53155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:08:28.360 [DEBUG] [Thread-53153] [transport.py] [_log()] userauth is OK
2025-11-17T11:08:28.360 [DEBUG] [Thread-53153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:08:28.360 [DEBUG] [Thread-53153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:08:28.360 [DEBUG] [Thread-53153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:08:28.360 [DEBUG] [Thread-53153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:08:28.375 [INFO] [Thread-53153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:08:28.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:08:28.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:08:29.238 [DEBUG] [Thread-53153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:08:29.238 [DEBUG] [Thread-53153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:08:29.286 [DEBUG] [Thread-53153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:08:29.286 [DEBUG] [Thread-53153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:08:29.295 [DEBUG] [Thread-53153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:08:29.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:08:29.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:08:29.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:08:29.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:08:29.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:08:29.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:08:29.326 [DEBUG] [Thread-53153] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:08:31.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:08:31.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:08:43.335 [DEBUG] [Thread-53156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:08:58.366 [DEBUG] [Thread-53157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:08:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:08:59.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:08:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:09:00.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 8, 30), 21.8, 22.72, 0.0, 17.19, 19.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:09:00.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:08:30
2025-11-17T11:09:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:09:00.272 [DEBUG] [Thread-53158] [transport.py] [_log()] starting thread (client mode): 0xd31ed540
2025-11-17T11:09:00.272 [DEBUG] [Thread-53158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:09:00.292 [DEBUG] [Thread-53158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:09:00.292 [INFO] [Thread-53158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] client lang: <none>
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] server lang: <none>
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] kex follows: False
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:09:00.296 [DEBUG] [Thread-53158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:09:00.297 [DEBUG] [Thread-53158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:09:00.297 [DEBUG] [Thread-53158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:09:00.297 [DEBUG] [Thread-53158] [transport.py] [_log()] Compression: none
2025-11-17T11:09:00.297 [DEBUG] [Thread-53158] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:09:00.313 [DEBUG] [Thread-53158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:09:00.314 [DEBUG] [Thread-53158] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:09:00.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:09:00.315 [DEBUG] [Thread-53158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:09:00.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:09:00.317 [DEBUG] [Thread-53158] [transport.py] [_log()] userauth is OK
2025-11-17T11:09:00.317 [DEBUG] [Thread-53158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:09:00.317 [DEBUG] [Thread-53158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:09:00.317 [DEBUG] [Thread-53158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:09:00.317 [DEBUG] [Thread-53158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:09:00.339 [INFO] [Thread-53158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:09:00.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:09:00.989 [DEBUG] [Thread-53158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:09:00.990 [DEBUG] [Thread-53158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:09:00.990 [DEBUG] [Thread-53158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:09:01.030 [DEBUG] [Thread-53158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:09:01.030 [DEBUG] [Thread-53158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:09:01.034 [DEBUG] [Thread-53158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:09:01.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:09:01.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:09:01.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:09:01.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:09:01.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:09:01.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:09:01.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:09:01.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:09:01.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:09:01.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.380951 -999.00  +18.80  10.25     29   +0.70 1 1 1 1 1   888    0 18.29 32.05 ----- 10.2 10.2 21.2 12.1 26.6 -24.1 25.5 -23.5 24.6 -23.1 25.3 -22.9
2025-11-17T11:09:01.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:09:01.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:09:01.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.380951
2025-11-17T11:09:01.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:09:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:09:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:09:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:09:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:09:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:08:30', tmtdew=21.8, humidity=22.72, cloud=0.0, wind=17.19, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:08:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:09:01.052 [DEBUG] [Thread-53158] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:09:01.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:09:01.153 [DEBUG] [Thread-53161] [transport.py] [_log()] starting thread (client mode): 0xd31ec5e0
2025-11-17T11:09:01.153 [DEBUG] [Thread-53161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:09:01.168 [DEBUG] [Thread-53161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:09:01.168 [INFO] [Thread-53161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] client lang: <none>
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] server lang: <none>
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] kex follows: False
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:09:01.177 [DEBUG] [Thread-53161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:09:01.178 [DEBUG] [Thread-53161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:09:01.178 [DEBUG] [Thread-53161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:09:01.178 [DEBUG] [Thread-53161] [transport.py] [_log()] Compression: none
2025-11-17T11:09:01.178 [DEBUG] [Thread-53161] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:09:01.235 [DEBUG] [Thread-53161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:09:01.236 [DEBUG] [Thread-53161] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:09:01.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:09:01.236 [DEBUG] [Thread-53161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:09:01.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:09:01.292 [DEBUG] [Thread-53161] [transport.py] [_log()] userauth is OK
2025-11-17T11:09:01.292 [DEBUG] [Thread-53161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:09:01.292 [DEBUG] [Thread-53161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:09:01.292 [DEBUG] [Thread-53161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:09:01.292 [DEBUG] [Thread-53161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:09:01.315 [INFO] [Thread-53161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:09:01.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:09:01.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:09:02.202 [DEBUG] [Thread-53161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:09:02.203 [DEBUG] [Thread-53161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:09:02.253 [DEBUG] [Thread-53161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:09:02.253 [DEBUG] [Thread-53161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:09:02.262 [DEBUG] [Thread-53161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:09:02.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:09:02.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:09:02.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:09:02.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:09:02.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:09:02.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:09:02.306 [DEBUG] [Thread-53161] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:09:05.732 [DEBUG] [Thread-53163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:09:13.394 [DEBUG] [Thread-53164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:09:28.445 [DEBUG] [Thread-53165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:09:31.827 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:09:31.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:09:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:09:32.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:09:32.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:09:32.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 9, 2), 21.93, 22.55, 0.0, 15.99, 19.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:09:32.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:09:02
2025-11-17T11:09:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:09:33.247 [DEBUG] [Thread-53166] [transport.py] [_log()] starting thread (client mode): 0xd0786ad0
2025-11-17T11:09:33.247 [DEBUG] [Thread-53166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:09:33.266 [DEBUG] [Thread-53166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:09:33.266 [INFO] [Thread-53166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] client lang: <none>
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] server lang: <none>
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] kex follows: False
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] Compression: none
2025-11-17T11:09:33.269 [DEBUG] [Thread-53166] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:09:33.287 [DEBUG] [Thread-53166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:09:33.287 [DEBUG] [Thread-53166] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:09:33.288 [DEBUG] [Thread-53166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:09:33.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:09:33.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:09:33.290 [DEBUG] [Thread-53166] [transport.py] [_log()] userauth is OK
2025-11-17T11:09:33.290 [DEBUG] [Thread-53166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:09:33.290 [DEBUG] [Thread-53166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:09:33.290 [DEBUG] [Thread-53166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:09:33.290 [DEBUG] [Thread-53166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:09:33.314 [INFO] [Thread-53166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:09:33.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:09:33.953 [DEBUG] [Thread-53166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:09:33.954 [DEBUG] [Thread-53166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:09:33.954 [DEBUG] [Thread-53166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:09:33.994 [DEBUG] [Thread-53166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:09:33.994 [DEBUG] [Thread-53166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:09:33.997 [DEBUG] [Thread-53166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:09:34.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:09:34.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:09:34.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:09:34.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:09:34.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:09:34.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:09:34.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:09:34.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:09:34.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:09:34.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.381298 -999.00  +18.90   5.52     29   +0.80 1 1 1 1 1   888    0 18.60 34.79 ----- 5.5 5.5 65.0 17.2 26.6 -25.0 25.5 -23.4 24.6 -23.1 25.3 -23.5
2025-11-17T11:09:34.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:09:34.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:09:34.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.381298
2025-11-17T11:09:34.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:09:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:09:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:09:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:09:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:09:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:09:02', tmtdew=21.93, humidity=22.55, cloud=0.0, wind=15.99, temperature=19.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:09:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:09:34.020 [DEBUG] [Thread-53166] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:09:34.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:09:34.112 [DEBUG] [Thread-53169] [transport.py] [_log()] starting thread (client mode): 0xd0787190
2025-11-17T11:09:34.112 [DEBUG] [Thread-53169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:09:34.128 [DEBUG] [Thread-53169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:09:34.128 [INFO] [Thread-53169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] client lang: <none>
2025-11-17T11:09:34.136 [DEBUG] [Thread-53169] [transport.py] [_log()] server lang: <none>
2025-11-17T11:09:34.137 [DEBUG] [Thread-53169] [transport.py] [_log()] kex follows: False
2025-11-17T11:09:34.137 [DEBUG] [Thread-53169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:09:34.137 [DEBUG] [Thread-53169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:09:34.137 [DEBUG] [Thread-53169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:09:34.137 [DEBUG] [Thread-53169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:09:34.137 [DEBUG] [Thread-53169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:09:34.137 [DEBUG] [Thread-53169] [transport.py] [_log()] Compression: none
2025-11-17T11:09:34.137 [DEBUG] [Thread-53169] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:09:34.201 [DEBUG] [Thread-53169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:09:34.201 [DEBUG] [Thread-53169] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:09:34.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:09:34.202 [DEBUG] [Thread-53169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:09:34.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:09:34.264 [DEBUG] [Thread-53169] [transport.py] [_log()] userauth is OK
2025-11-17T11:09:34.265 [DEBUG] [Thread-53169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:09:34.265 [DEBUG] [Thread-53169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:09:34.265 [DEBUG] [Thread-53169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:09:34.265 [DEBUG] [Thread-53169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:09:34.287 [INFO] [Thread-53169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:09:34.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:09:34.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:09:35.128 [DEBUG] [Thread-53169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:09:35.128 [DEBUG] [Thread-53169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:09:35.176 [DEBUG] [Thread-53169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:09:35.176 [DEBUG] [Thread-53169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:09:35.184 [DEBUG] [Thread-53169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:09:35.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:09:35.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:09:35.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:09:35.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:09:35.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:09:35.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:09:35.216 [DEBUG] [Thread-53169] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:09:43.474 [DEBUG] [Thread-53171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:09:58.513 [DEBUG] [Thread-53172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:10:05.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:10:05.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:10:05.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:10:05.783 [DEBUG] [Thread-53173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:10:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 9, 34), 21.95, 22.77, 0.0, 11.43, 19.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:10:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:09:34
2025-11-17T11:10:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:10:06.174 [DEBUG] [Thread-53174] [transport.py] [_log()] starting thread (client mode): 0xd0784c10
2025-11-17T11:10:06.174 [DEBUG] [Thread-53174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:10:06.194 [DEBUG] [Thread-53174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:10:06.195 [INFO] [Thread-53174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:10:06.196 [DEBUG] [Thread-53174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] client lang: <none>
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] server lang: <none>
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] kex follows: False
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] Compression: none
2025-11-17T11:10:06.197 [DEBUG] [Thread-53174] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:10:06.214 [DEBUG] [Thread-53174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:10:06.215 [DEBUG] [Thread-53174] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:10:06.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:10:06.216 [DEBUG] [Thread-53174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:10:06.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:10:06.217 [DEBUG] [Thread-53174] [transport.py] [_log()] userauth is OK
2025-11-17T11:10:06.218 [DEBUG] [Thread-53174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:10:06.218 [DEBUG] [Thread-53174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:10:06.218 [DEBUG] [Thread-53174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:10:06.218 [DEBUG] [Thread-53174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:10:06.241 [INFO] [Thread-53174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:10:06.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:10:07.469 [DEBUG] [Thread-53174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:10:07.469 [DEBUG] [Thread-53174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:10:07.469 [DEBUG] [Thread-53174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:10:07.510 [DEBUG] [Thread-53174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:10:07.510 [DEBUG] [Thread-53174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:10:07.513 [DEBUG] [Thread-53174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:10:07.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:10:07.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:10:07.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:10:07.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:10:07.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:10:07.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:10:07.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.381646 -999.00  +19.10  13.72     29   +0.70 1 1 1 1 1   888    0 18.87 37.03 ----- 13.7 13.7 122.4 19.8 26.7 -25.6 25.7 -23.9 24.7 -22.7 25.5 -23.8
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.381646
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:09:34', tmtdew=21.95, humidity=22.77, cloud=0.0, wind=11.43, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:09:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:10:07.531 [DEBUG] [Thread-53174] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:10:07.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:10:07.617 [DEBUG] [Thread-53177] [transport.py] [_log()] starting thread (client mode): 0xd31efbe0
2025-11-17T11:10:07.617 [DEBUG] [Thread-53177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:10:07.633 [DEBUG] [Thread-53177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:10:07.633 [INFO] [Thread-53177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:10:07.640 [DEBUG] [Thread-53177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] client lang: <none>
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] server lang: <none>
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] kex follows: False
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] Compression: none
2025-11-17T11:10:07.641 [DEBUG] [Thread-53177] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:10:07.703 [DEBUG] [Thread-53177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:10:07.703 [DEBUG] [Thread-53177] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:10:07.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:10:07.703 [DEBUG] [Thread-53177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:10:07.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:10:07.763 [DEBUG] [Thread-53177] [transport.py] [_log()] userauth is OK
2025-11-17T11:10:07.763 [DEBUG] [Thread-53177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:10:07.763 [DEBUG] [Thread-53177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:10:07.763 [DEBUG] [Thread-53177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:10:07.764 [DEBUG] [Thread-53177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:10:07.777 [INFO] [Thread-53177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:10:07.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:10:07.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:10:08.640 [DEBUG] [Thread-53177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:10:08.640 [DEBUG] [Thread-53177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:10:08.688 [DEBUG] [Thread-53177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:10:08.688 [DEBUG] [Thread-53177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:10:08.696 [DEBUG] [Thread-53177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:10:08.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:10:08.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:10:08.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:10:08.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:10:08.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:10:08.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:10:08.727 [DEBUG] [Thread-53177] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:10:13.542 [DEBUG] [Thread-53179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:10:28.584 [DEBUG] [Thread-53180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:10:31.971 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:10:31.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:10:38.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:10:38.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:10:38.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:10:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 10, 6), 21.84, 22.92, 0.0, 12.16, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:10:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:10:06
2025-11-17T11:10:39.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:10:39.703 [DEBUG] [Thread-53181] [transport.py] [_log()] starting thread (client mode): 0xd31619f0
2025-11-17T11:10:39.704 [DEBUG] [Thread-53181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:10:39.723 [DEBUG] [Thread-53181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:10:39.723 [INFO] [Thread-53181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] client lang: <none>
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] server lang: <none>
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] kex follows: False
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] Compression: none
2025-11-17T11:10:39.727 [DEBUG] [Thread-53181] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:10:39.740 [DEBUG] [Thread-53181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:10:39.740 [DEBUG] [Thread-53181] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:10:39.740 [DEBUG] [Thread-53181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:10:39.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:10:39.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:10:39.741 [DEBUG] [Thread-53181] [transport.py] [_log()] userauth is OK
2025-11-17T11:10:39.741 [DEBUG] [Thread-53181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:10:39.741 [DEBUG] [Thread-53181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:10:39.741 [DEBUG] [Thread-53181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:10:39.741 [DEBUG] [Thread-53181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:10:39.752 [INFO] [Thread-53181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:10:39.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:10:40.396 [DEBUG] [Thread-53181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:10:40.396 [DEBUG] [Thread-53181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:10:40.396 [DEBUG] [Thread-53181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:10:40.437 [DEBUG] [Thread-53181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:10:40.437 [DEBUG] [Thread-53181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:10:40.439 [DEBUG] [Thread-53181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:10:40.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:10:40.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:10:40.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:10:40.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:10:40.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:10:40.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:10:40.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.381993 -999.00  +19.30   9.88     29   +0.80 1 1 1 1 1   888    0 19.19 41.46 ----- 9.9 9.9 90.8 15.8 26.6 -25.0 25.8 -23.8 24.7 -22.8 25.6 -23.6
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.381993
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:10:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:10:06', tmtdew=21.84, humidity=22.92, cloud=0.0, wind=12.16, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:10:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:10:40.457 [DEBUG] [Thread-53181] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:10:40.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:10:40.544 [DEBUG] [Thread-53184] [transport.py] [_log()] starting thread (client mode): 0xd31ed060
2025-11-17T11:10:40.544 [DEBUG] [Thread-53184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:10:40.565 [DEBUG] [Thread-53184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:10:40.565 [INFO] [Thread-53184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] client lang: <none>
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] server lang: <none>
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] kex follows: False
2025-11-17T11:10:40.572 [DEBUG] [Thread-53184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:10:40.573 [DEBUG] [Thread-53184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:10:40.573 [DEBUG] [Thread-53184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:10:40.573 [DEBUG] [Thread-53184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:10:40.573 [DEBUG] [Thread-53184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:10:40.573 [DEBUG] [Thread-53184] [transport.py] [_log()] Compression: none
2025-11-17T11:10:40.573 [DEBUG] [Thread-53184] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:10:40.635 [DEBUG] [Thread-53184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:10:40.635 [DEBUG] [Thread-53184] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:10:40.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:10:40.636 [DEBUG] [Thread-53184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:10:40.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:10:40.695 [DEBUG] [Thread-53184] [transport.py] [_log()] userauth is OK
2025-11-17T11:10:40.696 [DEBUG] [Thread-53184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:10:40.696 [DEBUG] [Thread-53184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:10:40.696 [DEBUG] [Thread-53184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:10:40.696 [DEBUG] [Thread-53184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:10:40.713 [INFO] [Thread-53184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:10:40.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:10:40.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:10:41.613 [DEBUG] [Thread-53184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:10:41.613 [DEBUG] [Thread-53184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:10:41.661 [DEBUG] [Thread-53184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:10:41.661 [DEBUG] [Thread-53184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:10:41.670 [DEBUG] [Thread-53184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:10:41.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:10:41.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:10:41.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:10:41.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:10:41.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:10:41.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:10:41.704 [DEBUG] [Thread-53184] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:10:43.613 [DEBUG] [Thread-53186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:10:58.654 [DEBUG] [Thread-53187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:11:05.832 [DEBUG] [Thread-53188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:11:11.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:11:11.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:11:11.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:11:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 10, 38), 22.35, 22.2, 0.0, 13.97, 20.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:11:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:10:38
2025-11-17T11:11:12.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:11:12.728 [DEBUG] [Thread-53189] [transport.py] [_log()] starting thread (client mode): 0xd31608b0
2025-11-17T11:11:12.728 [DEBUG] [Thread-53189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:11:12.749 [DEBUG] [Thread-53189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:11:12.749 [INFO] [Thread-53189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] client lang: <none>
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] server lang: <none>
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] kex follows: False
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] Compression: none
2025-11-17T11:11:12.751 [DEBUG] [Thread-53189] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:11:12.764 [DEBUG] [Thread-53189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:11:12.764 [DEBUG] [Thread-53189] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:11:12.764 [DEBUG] [Thread-53189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:11:12.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:11:12.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:11:12.765 [DEBUG] [Thread-53189] [transport.py] [_log()] userauth is OK
2025-11-17T11:11:12.765 [DEBUG] [Thread-53189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:11:12.765 [DEBUG] [Thread-53189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:11:12.765 [DEBUG] [Thread-53189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:11:12.765 [DEBUG] [Thread-53189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:11:12.780 [INFO] [Thread-53189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:11:12.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:11:13.437 [DEBUG] [Thread-53189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:11:13.437 [DEBUG] [Thread-53189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:11:13.438 [DEBUG] [Thread-53189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:11:13.478 [DEBUG] [Thread-53189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:11:13.478 [DEBUG] [Thread-53189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:11:13.481 [DEBUG] [Thread-53189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:11:13.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:11:13.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:11:13.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:11:13.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:11:13.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:11:13.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:11:13.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:11:13.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:11:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:11:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.382340 -999.00  +19.00   9.89     29   +0.60 1 1 1 1 1   888    0 18.84 42.97 ----- 9.9 9.9 113.9 14.7 26.4 -29.9 25.8 -23.6 24.8 -23.9 25.7 -24.0
2025-11-17T11:11:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:11:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:11:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.382340
2025-11-17T11:11:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:11:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:11:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:11:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:11:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:11:13.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:10:38', tmtdew=22.35, humidity=22.2, cloud=0.0, wind=13.97, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:10:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:11:13.505 [DEBUG] [Thread-53189] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:11:13.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:11:13.600 [DEBUG] [Thread-53192] [transport.py] [_log()] starting thread (client mode): 0xd07180d0
2025-11-17T11:11:13.600 [DEBUG] [Thread-53192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:11:13.614 [DEBUG] [Thread-53192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:11:13.615 [INFO] [Thread-53192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] client lang: <none>
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] server lang: <none>
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] kex follows: False
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:11:13.622 [DEBUG] [Thread-53192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:11:13.623 [DEBUG] [Thread-53192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:11:13.623 [DEBUG] [Thread-53192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:11:13.623 [DEBUG] [Thread-53192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:11:13.623 [DEBUG] [Thread-53192] [transport.py] [_log()] Compression: none
2025-11-17T11:11:13.623 [DEBUG] [Thread-53192] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:11:13.683 [DEBUG] [Thread-53192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:11:13.684 [DEBUG] [Thread-53192] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:11:13.684 [DEBUG] [Thread-53192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:11:13.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:11:13.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:11:13.688 [DEBUG] [Thread-53194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:11:13.739 [DEBUG] [Thread-53192] [transport.py] [_log()] userauth is OK
2025-11-17T11:11:13.740 [DEBUG] [Thread-53192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:11:13.740 [DEBUG] [Thread-53192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:11:13.740 [DEBUG] [Thread-53192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:11:13.740 [DEBUG] [Thread-53192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:11:13.759 [INFO] [Thread-53192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:11:13.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:11:13.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:11:14.632 [DEBUG] [Thread-53192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:11:14.632 [DEBUG] [Thread-53192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:11:14.679 [DEBUG] [Thread-53192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:11:14.679 [DEBUG] [Thread-53192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:11:14.688 [DEBUG] [Thread-53192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:11:14.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:11:14.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:11:14.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:11:14.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:11:14.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:11:14.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:11:14.729 [DEBUG] [Thread-53192] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:11:28.729 [DEBUG] [Thread-53195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:11:32.114 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:11:32.115 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:11:43.757 [DEBUG] [Thread-53196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:11:44.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:11:44.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:11:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:11:45.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 11, 10), 22.5, 22.0, 0.0, 12.19, 20.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:11:45.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:11:10
2025-11-17T11:11:45.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:11:45.739 [DEBUG] [Thread-53197] [transport.py] [_log()] starting thread (client mode): 0xd071a7d0
2025-11-17T11:11:45.739 [DEBUG] [Thread-53197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:11:45.760 [DEBUG] [Thread-53197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:11:45.760 [INFO] [Thread-53197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] client lang: <none>
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] server lang: <none>
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] kex follows: False
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] Compression: none
2025-11-17T11:11:45.762 [DEBUG] [Thread-53197] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:11:45.769 [DEBUG] [Thread-53197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:11:45.769 [DEBUG] [Thread-53197] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:11:45.769 [DEBUG] [Thread-53197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:11:45.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:11:45.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:11:45.770 [DEBUG] [Thread-53197] [transport.py] [_log()] userauth is OK
2025-11-17T11:11:45.770 [DEBUG] [Thread-53197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:11:45.770 [DEBUG] [Thread-53197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:11:45.770 [DEBUG] [Thread-53197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:11:45.770 [DEBUG] [Thread-53197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:11:45.779 [INFO] [Thread-53197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:11:45.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:11:46.408 [DEBUG] [Thread-53197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:11:46.408 [DEBUG] [Thread-53197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:11:46.408 [DEBUG] [Thread-53197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:11:46.449 [DEBUG] [Thread-53197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:11:46.449 [DEBUG] [Thread-53197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:11:46.452 [DEBUG] [Thread-53197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:11:46.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:11:46.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:11:46.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:11:46.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:11:46.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:11:46.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:11:46.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:11:46.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:11:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:11:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.382687 -999.00  +19.10  16.44     29   +0.70 1 1 1 1 1   888    0 18.96 43.52 ----- 16.4 16.4 61.2 17.9 26.4 -27.2 25.8 -24.2 24.9 -23.6 25.7 -23.8
2025-11-17T11:11:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:11:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:11:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.382687
2025-11-17T11:11:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:11:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:11:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:11:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:11:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:11:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:11:10', tmtdew=22.5, humidity=22.0, cloud=0.0, wind=12.19, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:11:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:11:46.473 [DEBUG] [Thread-53197] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:11:46.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:11:46.557 [DEBUG] [Thread-53200] [transport.py] [_log()] starting thread (client mode): 0xd3163d90
2025-11-17T11:11:46.558 [DEBUG] [Thread-53200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:11:46.572 [DEBUG] [Thread-53200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:11:46.572 [INFO] [Thread-53200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] client lang: <none>
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] server lang: <none>
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] kex follows: False
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:11:46.580 [DEBUG] [Thread-53200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:11:46.581 [DEBUG] [Thread-53200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:11:46.581 [DEBUG] [Thread-53200] [transport.py] [_log()] Compression: none
2025-11-17T11:11:46.581 [DEBUG] [Thread-53200] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:11:46.642 [DEBUG] [Thread-53200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:11:46.642 [DEBUG] [Thread-53200] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:11:46.642 [DEBUG] [Thread-53200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:11:46.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:11:46.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:11:46.702 [DEBUG] [Thread-53200] [transport.py] [_log()] userauth is OK
2025-11-17T11:11:46.702 [DEBUG] [Thread-53200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:11:46.702 [DEBUG] [Thread-53200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:11:46.702 [DEBUG] [Thread-53200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:11:46.702 [DEBUG] [Thread-53200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:11:46.716 [INFO] [Thread-53200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:11:46.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:11:46.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:11:47.608 [DEBUG] [Thread-53200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:11:47.609 [DEBUG] [Thread-53200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:11:47.656 [DEBUG] [Thread-53200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:11:47.656 [DEBUG] [Thread-53200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:11:47.666 [DEBUG] [Thread-53200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:11:47.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:11:47.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:11:47.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:11:47.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:11:47.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:11:47.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:11:47.701 [DEBUG] [Thread-53200] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:11:58.781 [DEBUG] [Thread-53202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:12:05.886 [DEBUG] [Thread-53203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:12:13.820 [DEBUG] [Thread-53204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:12:17.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:12:17.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:12:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:12:18.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 12, 14), 21.96, 22.8, 0.0, 15.19, 19.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:12:18.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:12:14
2025-11-17T11:12:18.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:12:18.662 [DEBUG] [Thread-53205] [transport.py] [_log()] starting thread (client mode): 0xd07189d0
2025-11-17T11:12:18.662 [DEBUG] [Thread-53205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:12:18.682 [DEBUG] [Thread-53205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:12:18.683 [INFO] [Thread-53205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:12:18.686 [DEBUG] [Thread-53205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] client lang: <none>
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] server lang: <none>
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] kex follows: False
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] Compression: none
2025-11-17T11:12:18.687 [DEBUG] [Thread-53205] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:12:18.703 [DEBUG] [Thread-53205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:12:18.704 [DEBUG] [Thread-53205] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:12:18.704 [DEBUG] [Thread-53205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:12:18.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:12:18.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:12:18.707 [DEBUG] [Thread-53205] [transport.py] [_log()] userauth is OK
2025-11-17T11:12:18.707 [DEBUG] [Thread-53205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:12:18.707 [DEBUG] [Thread-53205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:12:18.707 [DEBUG] [Thread-53205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:12:18.707 [DEBUG] [Thread-53205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:12:18.731 [INFO] [Thread-53205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:12:18.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:12:19.366 [DEBUG] [Thread-53205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:12:19.367 [DEBUG] [Thread-53205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:12:19.367 [DEBUG] [Thread-53205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:12:19.407 [DEBUG] [Thread-53205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:12:19.408 [DEBUG] [Thread-53205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:12:19.410 [DEBUG] [Thread-53205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:12:19.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:12:19.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:12:19.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:12:19.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:12:19.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:12:19.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:12:19.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:12:19.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:12:19.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:12:19.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.383382 -999.00  +19.40  15.33     28   +0.70 1 1 1 1 1   888    0 19.20 48.56 ----- 15.3 15.3 33.8 20.8 26.5 -24.7 25.6 -24.4 24.9 -23.6 25.8 -23.1
2025-11-17T11:12:19.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:12:19.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:12:19.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.383382
2025-11-17T11:12:19.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:12:19.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:12:19.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:12:19.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:12:19.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:12:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:12:14', tmtdew=21.96, humidity=22.8, cloud=0.0, wind=15.19, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:12:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:12:19.437 [DEBUG] [Thread-53205] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:12:19.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:12:19.534 [DEBUG] [Thread-53208] [transport.py] [_log()] starting thread (client mode): 0xd31cdba0
2025-11-17T11:12:19.534 [DEBUG] [Thread-53208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:12:19.549 [DEBUG] [Thread-53208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:12:19.549 [INFO] [Thread-53208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:12:19.556 [DEBUG] [Thread-53208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] client lang: <none>
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] server lang: <none>
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] kex follows: False
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] Compression: none
2025-11-17T11:12:19.557 [DEBUG] [Thread-53208] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:12:19.619 [DEBUG] [Thread-53208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:12:19.620 [DEBUG] [Thread-53208] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:12:19.620 [DEBUG] [Thread-53208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:12:19.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:12:19.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:12:19.676 [DEBUG] [Thread-53208] [transport.py] [_log()] userauth is OK
2025-11-17T11:12:19.676 [DEBUG] [Thread-53208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:12:19.676 [DEBUG] [Thread-53208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:12:19.676 [DEBUG] [Thread-53208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:12:19.676 [DEBUG] [Thread-53208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:12:19.695 [INFO] [Thread-53208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:12:19.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:12:19.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:12:20.539 [DEBUG] [Thread-53208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:12:20.539 [DEBUG] [Thread-53208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:12:20.587 [DEBUG] [Thread-53208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:12:20.587 [DEBUG] [Thread-53208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:12:20.595 [DEBUG] [Thread-53208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:12:20.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:12:20.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:12:20.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:12:20.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:12:20.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:12:20.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:12:20.627 [DEBUG] [Thread-53208] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:12:28.846 [DEBUG] [Thread-53210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:12:32.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:12:32.259 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:12:43.884 [DEBUG] [Thread-53211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:12:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:12:50.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:12:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:12:51.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 12, 47), 22.71, 21.7, 0.0, 20.73, 20.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:12:51.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:12:47
2025-11-17T11:12:51.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:12:51.593 [DEBUG] [Thread-53212] [transport.py] [_log()] starting thread (client mode): 0xd31cc760
2025-11-17T11:12:51.593 [DEBUG] [Thread-53212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:12:51.614 [DEBUG] [Thread-53212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:12:51.615 [INFO] [Thread-53212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] client lang: <none>
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] server lang: <none>
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] kex follows: False
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:12:51.618 [DEBUG] [Thread-53212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:12:51.619 [DEBUG] [Thread-53212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:12:51.619 [DEBUG] [Thread-53212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:12:51.619 [DEBUG] [Thread-53212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:12:51.619 [DEBUG] [Thread-53212] [transport.py] [_log()] Compression: none
2025-11-17T11:12:51.619 [DEBUG] [Thread-53212] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:12:51.637 [DEBUG] [Thread-53212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:12:51.637 [DEBUG] [Thread-53212] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:12:51.638 [DEBUG] [Thread-53212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:12:51.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:12:51.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:12:51.640 [DEBUG] [Thread-53212] [transport.py] [_log()] userauth is OK
2025-11-17T11:12:51.640 [DEBUG] [Thread-53212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:12:51.640 [DEBUG] [Thread-53212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:12:51.640 [DEBUG] [Thread-53212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:12:51.641 [DEBUG] [Thread-53212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:12:51.664 [INFO] [Thread-53212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:12:51.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:12:52.301 [DEBUG] [Thread-53212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:12:52.301 [DEBUG] [Thread-53212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:12:52.302 [DEBUG] [Thread-53212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:12:52.342 [DEBUG] [Thread-53212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:12:52.343 [DEBUG] [Thread-53212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:12:52.345 [DEBUG] [Thread-53212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:12:52.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:12:52.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:12:52.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:12:52.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:12:52.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:12:52.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:12:52.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:12:52.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:12:52.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:12:52.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.383729 -999.00  +19.60  16.51     28   +0.90 1 1 1 1 1   888    0 19.30 50.46 ----- 16.5 16.5 42.0 22.5 26.6 -24.4 25.6 -23.8 25.0 -23.0 25.8 -23.4
2025-11-17T11:12:52.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:12:52.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:12:52.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.383729
2025-11-17T11:12:52.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:12:52.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:12:52.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:12:52.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:12:52.369 [DEBUG] [Thread-53212] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:12:52.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:12:52.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:12:47', tmtdew=22.71, humidity=21.7, cloud=0.0, wind=20.73, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:12:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:12:52.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:12:52.468 [DEBUG] [Thread-53215] [transport.py] [_log()] starting thread (client mode): 0xd0784fd0
2025-11-17T11:12:52.468 [DEBUG] [Thread-53215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:12:52.483 [DEBUG] [Thread-53215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:12:52.483 [INFO] [Thread-53215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:12:52.490 [DEBUG] [Thread-53215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:12:52.490 [DEBUG] [Thread-53215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] client lang: <none>
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] server lang: <none>
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] kex follows: False
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] Compression: none
2025-11-17T11:12:52.491 [DEBUG] [Thread-53215] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:12:52.551 [DEBUG] [Thread-53215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:12:52.551 [DEBUG] [Thread-53215] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:12:52.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:12:52.552 [DEBUG] [Thread-53215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:12:52.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:12:52.611 [DEBUG] [Thread-53215] [transport.py] [_log()] userauth is OK
2025-11-17T11:12:52.612 [DEBUG] [Thread-53215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:12:52.612 [DEBUG] [Thread-53215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:12:52.612 [DEBUG] [Thread-53215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:12:52.612 [DEBUG] [Thread-53215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:12:52.631 [INFO] [Thread-53215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:12:52.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:12:52.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:12:53.510 [DEBUG] [Thread-53215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:12:53.510 [DEBUG] [Thread-53215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:12:53.557 [DEBUG] [Thread-53215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:12:53.557 [DEBUG] [Thread-53215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:12:53.566 [DEBUG] [Thread-53215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:12:53.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:12:53.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:12: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
2025-11-17T11:12:53.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:12:53.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:12:53.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:12:53.601 [DEBUG] [Thread-53215] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:12:58.909 [DEBUG] [Thread-53217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:13:05.942 [DEBUG] [Thread-53218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:13:13.944 [DEBUG] [Thread-53219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:13:23.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:13:23.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:13:23.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:13:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 13, 19), 22.81, 21.55, 0.0, 19.11, 20.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:13:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:13:19
2025-11-17T11:13:24.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:13:24.564 [DEBUG] [Thread-53220] [transport.py] [_log()] starting thread (client mode): 0xd07867d0
2025-11-17T11:13:24.564 [DEBUG] [Thread-53220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:13:24.580 [DEBUG] [Thread-53220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:13:24.580 [INFO] [Thread-53220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:13:24.581 [DEBUG] [Thread-53220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] client lang: <none>
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] server lang: <none>
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] kex follows: False
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] Compression: none
2025-11-17T11:13:24.582 [DEBUG] [Thread-53220] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:13:24.600 [DEBUG] [Thread-53220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:13:24.600 [DEBUG] [Thread-53220] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:13:24.601 [DEBUG] [Thread-53220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:13:24.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:13:24.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:13:24.603 [DEBUG] [Thread-53220] [transport.py] [_log()] userauth is OK
2025-11-17T11:13:24.603 [DEBUG] [Thread-53220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:13:24.603 [DEBUG] [Thread-53220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:13:24.603 [DEBUG] [Thread-53220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:13:24.603 [DEBUG] [Thread-53220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:13:24.617 [INFO] [Thread-53220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:13:24.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:13:25.190 [DEBUG] [Thread-53220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:13:25.190 [DEBUG] [Thread-53220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:13:25.191 [DEBUG] [Thread-53220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:13:25.231 [DEBUG] [Thread-53220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:13:25.232 [DEBUG] [Thread-53220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:13:25.235 [DEBUG] [Thread-53220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:13:25.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:13:25.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:13:25.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:13:25.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:13:25.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:13:25.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:13:25.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:13:25.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:13:25.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:13:25.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.384076 -999.00  +19.80  22.80     28   +0.70 1 1 1 1 1   888    0 19.44 55.22 ----- 22.8 22.8 42.8 25.4 26.7 -25.0 25.6 -25.9 25.0 -23.4 25.8 -23.3
2025-11-17T11:13:25.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:13:25.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:13:25.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.384076
2025-11-17T11:13:25.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:13:25.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:13:25.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:13:25.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:13:25.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:13:25.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:13:19', tmtdew=22.81, humidity=21.55, cloud=0.0, wind=19.11, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:13:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:13:25.261 [DEBUG] [Thread-53220] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:13:25.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:13:25.359 [DEBUG] [Thread-53223] [transport.py] [_log()] starting thread (client mode): 0xd0718d30
2025-11-17T11:13:25.359 [DEBUG] [Thread-53223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:13:25.374 [DEBUG] [Thread-53223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:13:25.374 [INFO] [Thread-53223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:13:25.382 [DEBUG] [Thread-53223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:13:25.382 [DEBUG] [Thread-53223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:13:25.382 [DEBUG] [Thread-53223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:13:25.382 [DEBUG] [Thread-53223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:13:25.382 [DEBUG] [Thread-53223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:13:25.382 [DEBUG] [Thread-53223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] client lang: <none>
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] server lang: <none>
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] kex follows: False
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] Compression: none
2025-11-17T11:13:25.383 [DEBUG] [Thread-53223] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:13:25.444 [DEBUG] [Thread-53223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:13:25.444 [DEBUG] [Thread-53223] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:13:25.444 [DEBUG] [Thread-53223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:13:25.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:13:25.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:13:25.503 [DEBUG] [Thread-53223] [transport.py] [_log()] userauth is OK
2025-11-17T11:13:25.504 [DEBUG] [Thread-53223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:13:25.504 [DEBUG] [Thread-53223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:13:25.504 [DEBUG] [Thread-53223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:13:25.504 [DEBUG] [Thread-53223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:13:25.523 [INFO] [Thread-53223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:13:25.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:13:25.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:13:26.395 [DEBUG] [Thread-53223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:13:26.395 [DEBUG] [Thread-53223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:13:26.443 [DEBUG] [Thread-53223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:13:26.444 [DEBUG] [Thread-53223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:13:26.453 [DEBUG] [Thread-53223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:13:26.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:13:26.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:13:26.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:13:26.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:13:26.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:13:26.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:13:26.487 [DEBUG] [Thread-53223] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:13:28.973 [DEBUG] [Thread-53225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:13:32.401 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:13:32.402 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:13:44.011 [DEBUG] [Thread-53226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:13:56.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:13:56.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:13:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:13:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 13, 51), 22.73, 21.22, 0.0, 13.32, 20.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:13:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:13:51
2025-11-17T11:13:57.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:13:57.470 [DEBUG] [Thread-53227] [transport.py] [_log()] starting thread (client mode): 0xd31cf670
2025-11-17T11:13:57.470 [DEBUG] [Thread-53227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:13:57.490 [DEBUG] [Thread-53227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:13:57.491 [INFO] [Thread-53227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] client lang: <none>
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] server lang: <none>
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] kex follows: False
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] Compression: none
2025-11-17T11:13:57.494 [DEBUG] [Thread-53227] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:13:57.510 [DEBUG] [Thread-53227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:13:57.511 [DEBUG] [Thread-53227] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:13:57.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:13:57.511 [DEBUG] [Thread-53227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:13:57.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:13:57.513 [DEBUG] [Thread-53227] [transport.py] [_log()] userauth is OK
2025-11-17T11:13:57.514 [DEBUG] [Thread-53227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:13:57.514 [DEBUG] [Thread-53227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:13:57.514 [DEBUG] [Thread-53227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:13:57.514 [DEBUG] [Thread-53227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:13:57.538 [INFO] [Thread-53227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:13:57.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:13:58.153 [DEBUG] [Thread-53227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:13:58.154 [DEBUG] [Thread-53227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:13:58.154 [DEBUG] [Thread-53227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:13:58.195 [DEBUG] [Thread-53227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:13:58.195 [DEBUG] [Thread-53227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:13:58.198 [DEBUG] [Thread-53227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:13:58.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:13:58.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:13:58.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:13:58.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:13:58.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:13:58.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:13:58.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:13:58.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:13:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:13:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.384423 -999.00  +19.50  18.58     28   +0.70 1 1 1 1 1   888    0 19.64 55.86 ----- 18.6 18.6 40.2 23.7 26.6 -25.1 25.6 -25.3 24.7 -24.3 25.7 -23.8
2025-11-17T11:13:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:13:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:13:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.384423
2025-11-17T11:13:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:13:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:13:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:13:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:13:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:13:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:13:51', tmtdew=22.73, humidity=21.22, cloud=0.0, wind=13.32, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:13:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:13:58.223 [DEBUG] [Thread-53227] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:13:58.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:13:58.320 [DEBUG] [Thread-53230] [transport.py] [_log()] starting thread (client mode): 0xd07cf5b0
2025-11-17T11:13:58.320 [DEBUG] [Thread-53230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:13:58.335 [DEBUG] [Thread-53230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:13:58.335 [INFO] [Thread-53230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:13:58.342 [DEBUG] [Thread-53230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:13:58.342 [DEBUG] [Thread-53230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:13:58.342 [DEBUG] [Thread-53230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] client lang: <none>
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] server lang: <none>
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] kex follows: False
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] Compression: none
2025-11-17T11:13:58.343 [DEBUG] [Thread-53230] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:13:58.400 [DEBUG] [Thread-53230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:13:58.400 [DEBUG] [Thread-53230] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:13:58.401 [DEBUG] [Thread-53230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:13:58.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:13:58.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:13:58.456 [DEBUG] [Thread-53230] [transport.py] [_log()] userauth is OK
2025-11-17T11:13:58.456 [DEBUG] [Thread-53230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:13:58.456 [DEBUG] [Thread-53230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:13:58.456 [DEBUG] [Thread-53230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:13:58.456 [DEBUG] [Thread-53230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:13:58.472 [INFO] [Thread-53230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:13:58.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:13:58.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:13:59.041 [DEBUG] [Thread-53232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:13:59.304 [DEBUG] [Thread-53230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:13:59.305 [DEBUG] [Thread-53230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:13:59.352 [DEBUG] [Thread-53230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:13:59.352 [DEBUG] [Thread-53230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:13:59.361 [DEBUG] [Thread-53230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:13:59.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:13:59.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:13:59.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
2025-11-17T11:13:59.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:13:59.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:13:59.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:13:59.398 [DEBUG] [Thread-53230] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:14:05.994 [DEBUG] [Thread-53233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:14:14.084 [DEBUG] [Thread-53234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:14:29.113 [DEBUG] [Thread-53235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:14:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:14:29.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:14:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:14:30.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 14, 23), 22.37, 21.73, 0.0, 12.63, 20.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:14:30.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:14:23
2025-11-17T11:14:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:14:30.358 [DEBUG] [Thread-53236] [transport.py] [_log()] starting thread (client mode): 0xd0785ea0
2025-11-17T11:14:30.358 [DEBUG] [Thread-53236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:14:30.373 [DEBUG] [Thread-53236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:14:30.374 [INFO] [Thread-53236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] client lang: <none>
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] server lang: <none>
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] kex follows: False
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:14:30.375 [DEBUG] [Thread-53236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:14:30.376 [DEBUG] [Thread-53236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:14:30.376 [DEBUG] [Thread-53236] [transport.py] [_log()] Compression: none
2025-11-17T11:14:30.376 [DEBUG] [Thread-53236] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:14:30.385 [DEBUG] [Thread-53236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:14:30.386 [DEBUG] [Thread-53236] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:14:30.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:14:30.387 [DEBUG] [Thread-53236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:14:30.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:14:30.389 [DEBUG] [Thread-53236] [transport.py] [_log()] userauth is OK
2025-11-17T11:14:30.389 [DEBUG] [Thread-53236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:14:30.389 [DEBUG] [Thread-53236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:14:30.389 [DEBUG] [Thread-53236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:14:30.389 [DEBUG] [Thread-53236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:14:30.416 [INFO] [Thread-53236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:14:30.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:14:31.046 [DEBUG] [Thread-53236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:14:31.046 [DEBUG] [Thread-53236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:14:31.046 [DEBUG] [Thread-53236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:14:31.086 [DEBUG] [Thread-53236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:14:31.087 [DEBUG] [Thread-53236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:14:31.089 [DEBUG] [Thread-53236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:14:31.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:14:31.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:14:31.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:14:31.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:14:31.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:14:31.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:14:31.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:14:31.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:14:31.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:14:31.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.384771 -999.00  +19.20  17.70     28   +0.60 1 1 1 1 1   888    0 19.66 60.03 ----- 17.7 17.7 48.2 18.2 26.6 -25.3 25.6 -24.8 24.7 -23.5 25.7 -23.6
2025-11-17T11:14:31.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:14:31.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:14:31.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.384771
2025-11-17T11:14:31.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:14:31.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:14:31.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:14:31.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:14:31.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:14:31.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:14:23', tmtdew=22.37, humidity=21.73, cloud=0.0, wind=12.63, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:14:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:14:31.115 [DEBUG] [Thread-53236] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:14:31.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:14:31.202 [DEBUG] [Thread-53239] [transport.py] [_log()] starting thread (client mode): 0xd31cf3a0
2025-11-17T11:14:31.202 [DEBUG] [Thread-53239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:14:31.217 [DEBUG] [Thread-53239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:14:31.218 [INFO] [Thread-53239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:14:31.225 [DEBUG] [Thread-53239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:14:31.225 [DEBUG] [Thread-53239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:14:31.225 [DEBUG] [Thread-53239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:14:31.225 [DEBUG] [Thread-53239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:14:31.225 [DEBUG] [Thread-53239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:14:31.225 [DEBUG] [Thread-53239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] client lang: <none>
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] server lang: <none>
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] kex follows: False
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] Compression: none
2025-11-17T11:14:31.226 [DEBUG] [Thread-53239] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:14:31.283 [DEBUG] [Thread-53239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:14:31.284 [DEBUG] [Thread-53239] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:14:31.284 [DEBUG] [Thread-53239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:14:31.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:14:31.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:14:31.340 [DEBUG] [Thread-53239] [transport.py] [_log()] userauth is OK
2025-11-17T11:14:31.340 [DEBUG] [Thread-53239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:14:31.340 [DEBUG] [Thread-53239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:14:31.340 [DEBUG] [Thread-53239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:14:31.340 [DEBUG] [Thread-53239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:14:31.360 [INFO] [Thread-53239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:14:31.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:14:31.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:14:32.212 [DEBUG] [Thread-53239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:14:32.212 [DEBUG] [Thread-53239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:14:32.260 [DEBUG] [Thread-53239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:14:32.260 [DEBUG] [Thread-53239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:14:32.269 [DEBUG] [Thread-53239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:14:32.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:14:32.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:14:32.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:14:32.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:14:32.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:14:32.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:14:32.303 [DEBUG] [Thread-53239] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:14:32.543 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:14:32.544 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:14:44.148 [DEBUG] [Thread-53241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:14:59.195 [DEBUG] [Thread-53242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:15:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:15:02.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:15:02.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:15:02.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 14, 54), 22.38, 22.13, 0.0, 9.56, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:15:02.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:14:54
2025-11-17T11:15:03.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:15:03.256 [DEBUG] [Thread-53243] [transport.py] [_log()] starting thread (client mode): 0xd31ce980
2025-11-17T11:15:03.257 [DEBUG] [Thread-53243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:15:03.277 [DEBUG] [Thread-53243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:15:03.277 [INFO] [Thread-53243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] client lang: <none>
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] server lang: <none>
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] kex follows: False
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] Compression: none
2025-11-17T11:15:03.281 [DEBUG] [Thread-53243] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:15:03.299 [DEBUG] [Thread-53243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:15:03.299 [DEBUG] [Thread-53243] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:15:03.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:15:03.300 [DEBUG] [Thread-53243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:15:03.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:15:03.302 [DEBUG] [Thread-53243] [transport.py] [_log()] userauth is OK
2025-11-17T11:15:03.302 [DEBUG] [Thread-53243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:15:03.303 [DEBUG] [Thread-53243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:15:03.303 [DEBUG] [Thread-53243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:15:03.303 [DEBUG] [Thread-53243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:15:03.326 [INFO] [Thread-53243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:15:03.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:15:04.529 [DEBUG] [Thread-53243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:15:04.530 [DEBUG] [Thread-53243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:15:04.530 [DEBUG] [Thread-53243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:15:04.570 [DEBUG] [Thread-53243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:15:04.570 [DEBUG] [Thread-53243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:15:04.573 [DEBUG] [Thread-53243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:15:04.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:15:04.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:15:04.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:15:04.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:15:04.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:15:04.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:15:04.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:15:04.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:15:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:15:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.385118 -999.00  +19.10  12.68     29   +0.70 1 1 1 1 1   888    0 19.42 56.74 ----- 12.7 12.7 57.6 21.4 26.6 -24.5 25.5 -24.2 24.7 -25.2 25.5 -23.9
2025-11-17T11:15:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:15:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:15:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.385118
2025-11-17T11:15:04.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:15:04.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:15:04.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:15:04.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:15:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:15:04.599 [DEBUG] [Thread-53243] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:15:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:14:54', tmtdew=22.38, humidity=22.13, cloud=0.0, wind=9.56, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:14:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:15:04.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:15:04.695 [DEBUG] [Thread-53246] [transport.py] [_log()] starting thread (client mode): 0xd071b550
2025-11-17T11:15:04.695 [DEBUG] [Thread-53246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:15:04.712 [DEBUG] [Thread-53246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:15:04.712 [INFO] [Thread-53246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] client lang: <none>
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] server lang: <none>
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] kex follows: False
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:15:04.720 [DEBUG] [Thread-53246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:15:04.721 [DEBUG] [Thread-53246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:15:04.721 [DEBUG] [Thread-53246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:15:04.721 [DEBUG] [Thread-53246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:15:04.721 [DEBUG] [Thread-53246] [transport.py] [_log()] Compression: none
2025-11-17T11:15:04.721 [DEBUG] [Thread-53246] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:15:04.779 [DEBUG] [Thread-53246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:15:04.779 [DEBUG] [Thread-53246] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:15:04.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:15:04.780 [DEBUG] [Thread-53246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:15:04.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:15:04.837 [DEBUG] [Thread-53246] [transport.py] [_log()] userauth is OK
2025-11-17T11:15:04.837 [DEBUG] [Thread-53246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:15:04.837 [DEBUG] [Thread-53246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:15:04.837 [DEBUG] [Thread-53246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:15:04.837 [DEBUG] [Thread-53246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:15:04.856 [INFO] [Thread-53246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:15:04.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:15:04.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:15:05.802 [DEBUG] [Thread-53246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:15:05.803 [DEBUG] [Thread-53246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:15:05.850 [DEBUG] [Thread-53246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:15:05.850 [DEBUG] [Thread-53246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:15:05.859 [DEBUG] [Thread-53246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:15:05.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:15:05.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:15:05.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:15:05.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:15:05.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:15:05.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:15:05.900 [DEBUG] [Thread-53246] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:15:06.062 [DEBUG] [Thread-53248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:15:14.224 [DEBUG] [Thread-53249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:15:29.269 [DEBUG] [Thread-53250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:15:32.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:15:32.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:15:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:15:35.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:15:35.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:15:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 15, 27), 22.35, 22.18, 0.0, 9.86, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:15:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:15:27
2025-11-17T11:15:36.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:15:36.863 [DEBUG] [Thread-53251] [transport.py] [_log()] starting thread (client mode): 0xd31cd5a0
2025-11-17T11:15:36.863 [DEBUG] [Thread-53251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:15:36.883 [DEBUG] [Thread-53251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:15:36.883 [INFO] [Thread-53251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] client lang: <none>
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] server lang: <none>
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] kex follows: False
2025-11-17T11:15:36.885 [DEBUG] [Thread-53251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:15:36.886 [DEBUG] [Thread-53251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:15:36.886 [DEBUG] [Thread-53251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:15:36.886 [DEBUG] [Thread-53251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:15:36.886 [DEBUG] [Thread-53251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:15:36.886 [DEBUG] [Thread-53251] [transport.py] [_log()] Compression: none
2025-11-17T11:15:36.886 [DEBUG] [Thread-53251] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:15:36.895 [DEBUG] [Thread-53251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:15:36.895 [DEBUG] [Thread-53251] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:15:36.895 [DEBUG] [Thread-53251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:15:36.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:15:36.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:15:36.896 [DEBUG] [Thread-53251] [transport.py] [_log()] userauth is OK
2025-11-17T11:15:36.896 [DEBUG] [Thread-53251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:15:36.896 [DEBUG] [Thread-53251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:15:36.896 [DEBUG] [Thread-53251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:15:36.896 [DEBUG] [Thread-53251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:15:36.905 [INFO] [Thread-53251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:15:36.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:15:37.532 [DEBUG] [Thread-53251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:15:37.532 [DEBUG] [Thread-53251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:15:37.532 [DEBUG] [Thread-53251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:15:37.573 [DEBUG] [Thread-53251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:15:37.573 [DEBUG] [Thread-53251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:15:37.575 [DEBUG] [Thread-53251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:15:37.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:15:37.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:15:37.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:15:37.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:15:37.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:15:37.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:15:37.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:15:37.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:15:37.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:15:37.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.385465 -999.00  +19.10   9.18     28   +0.50 1 1 1 1 1   888    0 19.36 58.29 ----- 9.2 9.2 59.8 15.6 26.6 -24.2 25.6 -25.0 24.8 -23.7 25.6 -23.9
2025-11-17T11:15:37.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:15:37.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.385465
2025-11-17T11:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:15:27', tmtdew=22.35, humidity=22.18, cloud=0.0, wind=9.86, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:15:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:15:37.592 [DEBUG] [Thread-53251] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:15:37.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:15:37.680 [DEBUG] [Thread-53254] [transport.py] [_log()] starting thread (client mode): 0xd31ef700
2025-11-17T11:15:37.680 [DEBUG] [Thread-53254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:15:37.695 [DEBUG] [Thread-53254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:15:37.695 [INFO] [Thread-53254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] client lang: <none>
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] server lang: <none>
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] kex follows: False
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] Compression: none
2025-11-17T11:15:37.703 [DEBUG] [Thread-53254] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:15:37.758 [DEBUG] [Thread-53254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:15:37.758 [DEBUG] [Thread-53254] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:15:37.758 [DEBUG] [Thread-53254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:15:37.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:15:37.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:15:37.815 [DEBUG] [Thread-53254] [transport.py] [_log()] userauth is OK
2025-11-17T11:15:37.815 [DEBUG] [Thread-53254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:15:37.815 [DEBUG] [Thread-53254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:15:37.815 [DEBUG] [Thread-53254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:15:37.815 [DEBUG] [Thread-53254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:15:37.829 [INFO] [Thread-53254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:15:37.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:15:37.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:15:38.707 [DEBUG] [Thread-53254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:15:38.708 [DEBUG] [Thread-53254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:15:38.755 [DEBUG] [Thread-53254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:15:38.755 [DEBUG] [Thread-53254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:15:38.764 [DEBUG] [Thread-53254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:15:38.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:15:38.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:15:38.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:15:38.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:15:38.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:15:38.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:15:38.803 [DEBUG] [Thread-53254] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:15:44.304 [DEBUG] [Thread-53256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:15:59.345 [DEBUG] [Thread-53257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:16:06.118 [DEBUG] [Thread-53258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:16:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:16:08.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:16:08.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:16:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 15, 59), 22.45, 21.6, 0.0, 8.33, 19.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:16:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:15:59
2025-11-17T11:16:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:16:09.739 [DEBUG] [Thread-53259] [transport.py] [_log()] starting thread (client mode): 0xd3163c70
2025-11-17T11:16:09.739 [DEBUG] [Thread-53259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:16:09.759 [DEBUG] [Thread-53259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:16:09.759 [INFO] [Thread-53259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] client lang: <none>
2025-11-17T11:16:09.762 [DEBUG] [Thread-53259] [transport.py] [_log()] server lang: <none>
2025-11-17T11:16:09.763 [DEBUG] [Thread-53259] [transport.py] [_log()] kex follows: False
2025-11-17T11:16:09.763 [DEBUG] [Thread-53259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:16:09.763 [DEBUG] [Thread-53259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:16:09.763 [DEBUG] [Thread-53259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:16:09.763 [DEBUG] [Thread-53259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:16:09.763 [DEBUG] [Thread-53259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:16:09.763 [DEBUG] [Thread-53259] [transport.py] [_log()] Compression: none
2025-11-17T11:16:09.763 [DEBUG] [Thread-53259] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:16:09.775 [DEBUG] [Thread-53259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:16:09.776 [DEBUG] [Thread-53259] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:16:09.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:16:09.777 [DEBUG] [Thread-53259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:16:09.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:16:09.778 [DEBUG] [Thread-53259] [transport.py] [_log()] userauth is OK
2025-11-17T11:16:09.779 [DEBUG] [Thread-53259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:16:09.779 [DEBUG] [Thread-53259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:16:09.779 [DEBUG] [Thread-53259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:16:09.779 [DEBUG] [Thread-53259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:16:09.802 [INFO] [Thread-53259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:16:09.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:16:10.416 [DEBUG] [Thread-53259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:16:10.416 [DEBUG] [Thread-53259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:16:10.417 [DEBUG] [Thread-53259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:16:10.457 [DEBUG] [Thread-53259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:16:10.457 [DEBUG] [Thread-53259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:16:10.460 [DEBUG] [Thread-53259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:16:10.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:16:10.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:16:10.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:16:10.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:16:10.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:16:10.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:16:10.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:16:10.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:16:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:16:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.386160 -999.00  +19.30   9.22     28   +0.70 1 1 1 1 1   888    0 19.60 63.29 ----- 9.2 9.2 20.2 20.3 26.6 -24.3 25.5 -25.0 24.8 -22.4 25.7 -23.6
2025-11-17T11:16:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:16:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:16:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.386160
2025-11-17T11:16:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:16:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:16:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:16:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:16:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:16:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:15:59', tmtdew=22.45, humidity=21.6, cloud=0.0, wind=8.33, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:16:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:16:10.482 [DEBUG] [Thread-53259] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:16:10.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:16:10.580 [DEBUG] [Thread-53262] [transport.py] [_log()] starting thread (client mode): 0xd3163fd0
2025-11-17T11:16:10.580 [DEBUG] [Thread-53262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:16:10.598 [DEBUG] [Thread-53262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:16:10.598 [INFO] [Thread-53262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:16:10.605 [DEBUG] [Thread-53262] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:16:10.605 [DEBUG] [Thread-53262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:16:10.605 [DEBUG] [Thread-53262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:16:10.605 [DEBUG] [Thread-53262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:16:10.605 [DEBUG] [Thread-53262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] client lang: <none>
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] server lang: <none>
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] kex follows: False
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] Compression: none
2025-11-17T11:16:10.606 [DEBUG] [Thread-53262] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:16:10.662 [DEBUG] [Thread-53262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:16:10.663 [DEBUG] [Thread-53262] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:16:10.663 [DEBUG] [Thread-53262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:16:10.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:16:10.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:16:10.719 [DEBUG] [Thread-53262] [transport.py] [_log()] userauth is OK
2025-11-17T11:16:10.719 [DEBUG] [Thread-53262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:16:10.719 [DEBUG] [Thread-53262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:16:10.719 [DEBUG] [Thread-53262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:16:10.719 [DEBUG] [Thread-53262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:16:10.739 [INFO] [Thread-53262] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:16:10.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:16:10.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:16:11.613 [DEBUG] [Thread-53262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:16:11.613 [DEBUG] [Thread-53262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:16:11.661 [DEBUG] [Thread-53262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:16:11.661 [DEBUG] [Thread-53262] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:16:11.669 [DEBUG] [Thread-53262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:16:11.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:16:11.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:16:11.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:16:11.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:16:11.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:16:11.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:16:11.700 [DEBUG] [Thread-53262] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:16:14.367 [DEBUG] [Thread-53264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:16:29.400 [DEBUG] [Thread-53265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:16:32.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:16:32.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:16:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:16:41.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:16:41.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:16:42.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 16, 31), 22.28, 21.83, 0.0, 10.78, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:16:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:16:31
2025-11-17T11:16:42.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:16:42.661 [DEBUG] [Thread-53266] [transport.py] [_log()] starting thread (client mode): 0xd31ce5f0
2025-11-17T11:16:42.661 [DEBUG] [Thread-53266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:16:42.677 [DEBUG] [Thread-53266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:16:42.677 [INFO] [Thread-53266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:16:42.678 [DEBUG] [Thread-53266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] client lang: <none>
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] server lang: <none>
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] kex follows: False
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:16:42.679 [DEBUG] [Thread-53266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:16:42.680 [DEBUG] [Thread-53266] [transport.py] [_log()] Compression: none
2025-11-17T11:16:42.680 [DEBUG] [Thread-53266] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:16:42.689 [DEBUG] [Thread-53266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:16:42.690 [DEBUG] [Thread-53266] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:16:42.690 [DEBUG] [Thread-53266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:16:42.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:16:42.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:16:42.691 [DEBUG] [Thread-53266] [transport.py] [_log()] userauth is OK
2025-11-17T11:16:42.692 [DEBUG] [Thread-53266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:16:42.692 [DEBUG] [Thread-53266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:16:42.692 [DEBUG] [Thread-53266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:16:42.692 [DEBUG] [Thread-53266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:16:42.714 [INFO] [Thread-53266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:16:42.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:16:43.413 [DEBUG] [Thread-53266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:16:43.413 [DEBUG] [Thread-53266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:16:43.413 [DEBUG] [Thread-53266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:16:43.455 [DEBUG] [Thread-53266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:16:43.455 [DEBUG] [Thread-53266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:16:43.457 [DEBUG] [Thread-53266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:16:43.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:16:43.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:16:43.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:16:43.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:16:43.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:16:43.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:16:43.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:16:43.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:16:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:16:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.386160 -999.00  +19.30   9.22     28   +0.70 1 1 1 1 1   888    0 19.60 63.29 ----- 9.2 9.2 20.2 20.3 26.6 -24.3 25.5 -25.0 24.8 -22.4 25.7 -23.6
2025-11-17T11:16:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:16:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:16:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.386160
2025-11-17T11:16:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:16:43.473 [DEBUG] [Thread-53266] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:16:43.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:16:43.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:16:43.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:16:43.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:16:43.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:16:31', tmtdew=22.28, humidity=21.83, cloud=0.0, wind=10.78, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:16:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:16:43.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:16:43.568 [DEBUG] [Thread-53269] [transport.py] [_log()] starting thread (client mode): 0xd3163fd0
2025-11-17T11:16:43.568 [DEBUG] [Thread-53269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:16:43.583 [DEBUG] [Thread-53269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:16:43.584 [INFO] [Thread-53269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:16:43.591 [DEBUG] [Thread-53269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:16:43.591 [DEBUG] [Thread-53269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] client lang: <none>
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] server lang: <none>
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] kex follows: False
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] Compression: none
2025-11-17T11:16:43.592 [DEBUG] [Thread-53269] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:16:43.655 [DEBUG] [Thread-53269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:16:43.655 [DEBUG] [Thread-53269] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:16:43.656 [DEBUG] [Thread-53269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:16:43.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:16:43.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:16:43.711 [DEBUG] [Thread-53269] [transport.py] [_log()] userauth is OK
2025-11-17T11:16:43.711 [DEBUG] [Thread-53269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:16:43.711 [DEBUG] [Thread-53269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:16:43.712 [DEBUG] [Thread-53269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:16:43.712 [DEBUG] [Thread-53269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:16:43.732 [INFO] [Thread-53269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:16:43.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:16:43.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:16:44.431 [DEBUG] [Thread-53271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:16:44.575 [DEBUG] [Thread-53269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:16:44.575 [DEBUG] [Thread-53269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:16:44.626 [DEBUG] [Thread-53269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:16:44.626 [DEBUG] [Thread-53269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:16:44.635 [DEBUG] [Thread-53269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:16:44.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:16:44.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:16:44.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:16:44.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:16:44.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:16:44.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:16:44.669 [DEBUG] [Thread-53269] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:16:59.485 [DEBUG] [Thread-53272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:17:06.169 [DEBUG] [Thread-53273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:17:14.522 [DEBUG] [Thread-53274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:17:14.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:17:14.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:17:14.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:17:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 17, 3), 22.02, 22.23, 0.0, 11.54, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:17:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:17:03
2025-11-17T11:17:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:17:15.631 [DEBUG] [Thread-53275] [transport.py] [_log()] starting thread (client mode): 0xd31ef490
2025-11-17T11:17:15.632 [DEBUG] [Thread-53275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:17:15.652 [DEBUG] [Thread-53275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:17:15.652 [INFO] [Thread-53275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:17:15.655 [DEBUG] [Thread-53275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] client lang: <none>
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] server lang: <none>
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] kex follows: False
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] Compression: none
2025-11-17T11:17:15.656 [DEBUG] [Thread-53275] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:17:15.673 [DEBUG] [Thread-53275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:17:15.673 [DEBUG] [Thread-53275] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:17:15.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:17:15.675 [DEBUG] [Thread-53275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:17:15.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:17:15.676 [DEBUG] [Thread-53275] [transport.py] [_log()] userauth is OK
2025-11-17T11:17:15.676 [DEBUG] [Thread-53275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:17:15.677 [DEBUG] [Thread-53275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:17:15.677 [DEBUG] [Thread-53275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:17:15.677 [DEBUG] [Thread-53275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:17:15.700 [INFO] [Thread-53275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:17:15.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:17:16.287 [DEBUG] [Thread-53275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:17:16.287 [DEBUG] [Thread-53275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:17:16.287 [DEBUG] [Thread-53275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:17:16.328 [DEBUG] [Thread-53275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:17:16.329 [DEBUG] [Thread-53275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:17:16.332 [DEBUG] [Thread-53275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:17:16.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:17:16.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:17:16.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:17:16.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:17:16.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:17:16.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:17:16.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:17:16.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:17:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:17:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.386507 -999.00  +19.10   8.07     28   +0.40 1 1 1 1 1   888    0 20.01 63.28 ----- 8.1 8.1 330.6 20.1 26.6 -25.1 25.5 -24.3 24.9 -23.2 25.5 -27.6
2025-11-17T11:17:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:17:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:17:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.386507
2025-11-17T11:17:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:17:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:17:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:17:16.357 [DEBUG] [Thread-53275] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:17:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:17:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:17:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:17:03', tmtdew=22.02, humidity=22.23, cloud=0.0, wind=11.54, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:16:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:17:16.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:17:16.451 [DEBUG] [Thread-53278] [transport.py] [_log()] starting thread (client mode): 0xd31ee9b0
2025-11-17T11:17:16.451 [DEBUG] [Thread-53278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:17:16.466 [DEBUG] [Thread-53278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:17:16.467 [INFO] [Thread-53278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] client lang: <none>
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] server lang: <none>
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] kex follows: False
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:17:16.474 [DEBUG] [Thread-53278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:17:16.475 [DEBUG] [Thread-53278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:17:16.475 [DEBUG] [Thread-53278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:17:16.475 [DEBUG] [Thread-53278] [transport.py] [_log()] Compression: none
2025-11-17T11:17:16.475 [DEBUG] [Thread-53278] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:17:16.531 [DEBUG] [Thread-53278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:17:16.531 [DEBUG] [Thread-53278] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:17:16.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:17:16.532 [DEBUG] [Thread-53278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:17:16.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:17:16.587 [DEBUG] [Thread-53278] [transport.py] [_log()] userauth is OK
2025-11-17T11:17:16.587 [DEBUG] [Thread-53278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:17:16.587 [DEBUG] [Thread-53278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:17:16.587 [DEBUG] [Thread-53278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:17:16.588 [DEBUG] [Thread-53278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:17:16.606 [INFO] [Thread-53278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:17:16.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:17:16.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:17:17.457 [DEBUG] [Thread-53278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:17:17.457 [DEBUG] [Thread-53278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:17:17.505 [DEBUG] [Thread-53278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:17:17.505 [DEBUG] [Thread-53278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:17:17.514 [DEBUG] [Thread-53278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:17:17.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:17:17.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:17:17.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:17:17.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:17:17.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:17:17.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:17:17.547 [DEBUG] [Thread-53278] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:17:29.551 [DEBUG] [Thread-53280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:17:32.969 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:17:32.970 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:17:44.584 [DEBUG] [Thread-53281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:17:47.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:17:47.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:17:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:17:48.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 17, 34), 21.89, 22.85, 0.0, 10.54, 19.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:17:48.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:17:34
2025-11-17T11:17:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:17:48.494 [DEBUG] [Thread-53282] [transport.py] [_log()] starting thread (client mode): 0xd31edb70
2025-11-17T11:17:48.494 [DEBUG] [Thread-53282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:17:48.514 [DEBUG] [Thread-53282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:17:48.514 [INFO] [Thread-53282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:17:48.515 [DEBUG] [Thread-53282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] client lang: <none>
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] server lang: <none>
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] kex follows: False
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:17:48.516 [DEBUG] [Thread-53282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:17:48.517 [DEBUG] [Thread-53282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:17:48.517 [DEBUG] [Thread-53282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:17:48.517 [DEBUG] [Thread-53282] [transport.py] [_log()] Compression: none
2025-11-17T11:17:48.517 [DEBUG] [Thread-53282] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:17:48.526 [DEBUG] [Thread-53282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:17:48.527 [DEBUG] [Thread-53282] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:17:48.528 [DEBUG] [Thread-53282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:17:48.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:17:48.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:17:48.530 [DEBUG] [Thread-53282] [transport.py] [_log()] userauth is OK
2025-11-17T11:17:48.531 [DEBUG] [Thread-53282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:17:48.531 [DEBUG] [Thread-53282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:17:48.531 [DEBUG] [Thread-53282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:17:48.531 [DEBUG] [Thread-53282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:17:48.568 [INFO] [Thread-53282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:17:48.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:17:49.149 [DEBUG] [Thread-53282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:17:49.149 [DEBUG] [Thread-53282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:17:49.149 [DEBUG] [Thread-53282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:17:49.191 [DEBUG] [Thread-53282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:17:49.191 [DEBUG] [Thread-53282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:17:49.194 [DEBUG] [Thread-53282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:17:49.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:17:49.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:17:49.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:17:49.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:17:49.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:17:49.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:17:49.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:17:49.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:17:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:17:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.386854 -999.00  +18.90   9.17     29   +0.50 1 1 1 1 1   888    0 20.04 69.40 ----- 9.2 9.2 6.7 15.6 26.7 -24.9 25.6 -24.3 24.9 -22.8 25.6 -23.0
2025-11-17T11:17:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:17:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:17:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.386854
2025-11-17T11:17:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:17:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:17:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:17:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:17:49.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:17:49.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:17:34', tmtdew=21.89, humidity=22.85, cloud=0.0, wind=10.54, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:17:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:17:49.218 [DEBUG] [Thread-53282] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:17:49.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:17:49.313 [DEBUG] [Thread-53285] [transport.py] [_log()] starting thread (client mode): 0xd07bf2e0
2025-11-17T11:17:49.313 [DEBUG] [Thread-53285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:17:49.329 [DEBUG] [Thread-53285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:17:49.329 [INFO] [Thread-53285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:17:49.336 [DEBUG] [Thread-53285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:17:49.336 [DEBUG] [Thread-53285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] client lang: <none>
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] server lang: <none>
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] kex follows: False
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:17:49.337 [DEBUG] [Thread-53285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:17:49.338 [DEBUG] [Thread-53285] [transport.py] [_log()] Compression: none
2025-11-17T11:17:49.338 [DEBUG] [Thread-53285] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:17:49.395 [DEBUG] [Thread-53285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:17:49.395 [DEBUG] [Thread-53285] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:17:49.396 [DEBUG] [Thread-53285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:17:49.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:17:49.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:17:49.455 [DEBUG] [Thread-53285] [transport.py] [_log()] userauth is OK
2025-11-17T11:17:49.455 [DEBUG] [Thread-53285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:17:49.456 [DEBUG] [Thread-53285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:17:49.456 [DEBUG] [Thread-53285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:17:49.456 [DEBUG] [Thread-53285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:17:49.475 [INFO] [Thread-53285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:17:49.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:17:49.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:17:50.406 [DEBUG] [Thread-53285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:17:50.406 [DEBUG] [Thread-53285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:17:50.454 [DEBUG] [Thread-53285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:17:50.454 [DEBUG] [Thread-53285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:17:50.463 [DEBUG] [Thread-53285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:17:50.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:17:50.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:17:50.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:17:50.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:17:50.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:17:50.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:17:50.496 [DEBUG] [Thread-53285] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:17:59.616 [DEBUG] [Thread-53287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:18:06.231 [DEBUG] [Thread-53288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:18:14.661 [DEBUG] [Thread-53289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:18:20.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:18:20.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:18:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:18:21.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 18, 6), 21.7, 23.13, 0.0, 11.36, 19.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:18:21.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:18:06
2025-11-17T11:18:21.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:18:21.454 [DEBUG] [Thread-53290] [transport.py] [_log()] starting thread (client mode): 0xd3137eb0
2025-11-17T11:18:21.454 [DEBUG] [Thread-53290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:18:21.475 [DEBUG] [Thread-53290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:18:21.475 [INFO] [Thread-53290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:18:21.478 [DEBUG] [Thread-53290] [transport.py] [_log()] client lang: <none>
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] server lang: <none>
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] kex follows: False
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] Compression: none
2025-11-17T11:18:21.479 [DEBUG] [Thread-53290] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:18:21.495 [DEBUG] [Thread-53290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:18:21.495 [DEBUG] [Thread-53290] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:18:21.496 [DEBUG] [Thread-53290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:18:21.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:18:21.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:18:21.497 [DEBUG] [Thread-53290] [transport.py] [_log()] userauth is OK
2025-11-17T11:18:21.497 [DEBUG] [Thread-53290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:18:21.497 [DEBUG] [Thread-53290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:18:21.498 [DEBUG] [Thread-53290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:18:21.498 [DEBUG] [Thread-53290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:18:21.520 [INFO] [Thread-53290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:18:21.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:18:22.165 [DEBUG] [Thread-53290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:18:22.165 [DEBUG] [Thread-53290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:18:22.165 [DEBUG] [Thread-53290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:18:22.206 [DEBUG] [Thread-53290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:18:22.206 [DEBUG] [Thread-53290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:18:22.209 [DEBUG] [Thread-53290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:18:22.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:18:22.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:18:22.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:18:22.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:18:22.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:18:22.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:18:22.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:18:22.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:18:22.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:18:22.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.387201 -999.00  +18.80  12.16     29   +0.50 1 1 1 1 1   888    0 20.37 69.78 ----- 12.2 12.2 325.4 18.1 26.7 -24.6 25.7 -23.7 25.0 -23.2 25.7 -23.3
2025-11-17T11:18:22.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:18:22.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:18:22.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.387201
2025-11-17T11:18:22.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:18:22.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:18:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:18:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:18:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:18:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:18:06', tmtdew=21.7, humidity=23.13, cloud=0.0, wind=11.36, temperature=19.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:17:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:18:22.234 [DEBUG] [Thread-53290] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:18:22.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:18:22.335 [DEBUG] [Thread-53293] [transport.py] [_log()] starting thread (client mode): 0xd31375e0
2025-11-17T11:18:22.335 [DEBUG] [Thread-53293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:18:22.349 [DEBUG] [Thread-53293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:18:22.350 [INFO] [Thread-53293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:18:22.366 [DEBUG] [Thread-53293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:18:22.366 [DEBUG] [Thread-53293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] client lang: <none>
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] server lang: <none>
2025-11-17T11:18:22.367 [DEBUG] [Thread-53293] [transport.py] [_log()] kex follows: False
2025-11-17T11:18:22.368 [DEBUG] [Thread-53293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:18:22.368 [DEBUG] [Thread-53293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:18:22.368 [DEBUG] [Thread-53293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:18:22.368 [DEBUG] [Thread-53293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:18:22.368 [DEBUG] [Thread-53293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:18:22.368 [DEBUG] [Thread-53293] [transport.py] [_log()] Compression: none
2025-11-17T11:18:22.368 [DEBUG] [Thread-53293] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:18:22.414 [DEBUG] [Thread-53293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:18:22.415 [DEBUG] [Thread-53293] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:18:22.415 [DEBUG] [Thread-53293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:18:22.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:18:22.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:18:22.471 [DEBUG] [Thread-53293] [transport.py] [_log()] userauth is OK
2025-11-17T11:18:22.471 [DEBUG] [Thread-53293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:18:22.471 [DEBUG] [Thread-53293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:18:22.471 [DEBUG] [Thread-53293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:18:22.471 [DEBUG] [Thread-53293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:18:22.493 [INFO] [Thread-53293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:18:22.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:18:22.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:18:23.332 [DEBUG] [Thread-53293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:18:23.333 [DEBUG] [Thread-53293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:18:23.380 [DEBUG] [Thread-53293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:18:23.380 [DEBUG] [Thread-53293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:18:23.389 [DEBUG] [Thread-53293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:18:23.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:18:23.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:18:23.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:18:23.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:18:23.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:18:23.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:18:23.423 [DEBUG] [Thread-53293] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:18:29.690 [DEBUG] [Thread-53295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:18:33.109 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:18:33.111 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:18:44.730 [DEBUG] [Thread-53296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:18:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:18:53.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:18:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:18:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 18, 39), 21.86, 22.56, 0.0, 8.33, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:18:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:18:39
2025-11-17T11:18:54.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:18:54.363 [DEBUG] [Thread-53297] [transport.py] [_log()] starting thread (client mode): 0xd31521d0
2025-11-17T11:18:54.363 [DEBUG] [Thread-53297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:18:54.383 [DEBUG] [Thread-53297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:18:54.383 [INFO] [Thread-53297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:18:54.384 [DEBUG] [Thread-53297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] client lang: <none>
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] server lang: <none>
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] kex follows: False
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] Compression: none
2025-11-17T11:18:54.385 [DEBUG] [Thread-53297] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:18:54.395 [DEBUG] [Thread-53297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:18:54.396 [DEBUG] [Thread-53297] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:18:54.396 [DEBUG] [Thread-53297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:18:54.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:18:54.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:18:54.398 [DEBUG] [Thread-53297] [transport.py] [_log()] userauth is OK
2025-11-17T11:18:54.398 [DEBUG] [Thread-53297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:18:54.398 [DEBUG] [Thread-53297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:18:54.398 [DEBUG] [Thread-53297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:18:54.398 [DEBUG] [Thread-53297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:18:54.416 [INFO] [Thread-53297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:18:54.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:18:55.203 [DEBUG] [Thread-53297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:18:55.203 [DEBUG] [Thread-53297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:18:55.204 [DEBUG] [Thread-53297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:18:55.245 [DEBUG] [Thread-53297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:18:55.245 [DEBUG] [Thread-53297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:18:55.248 [DEBUG] [Thread-53297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:18:55.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:18:55.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:18:55.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:18:55.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:18:55.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:18:55.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:18:55.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:18:55.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:18:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:18:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.387548 -999.00  +18.70  11.85     29   +0.60 1 1 1 1 1   888    0 20.34 73.23 ----- 11.8 11.8 316.6 13.8 26.9 -23.9 25.8 -24.3 25.0 -22.1 25.8 -23.0
2025-11-17T11:18:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:18:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:18:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.387548
2025-11-17T11:18:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:18:55.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:18:55.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:18:55.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:18:55.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:18:55.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:18:39', tmtdew=21.86, humidity=22.56, cloud=0.0, wind=8.33, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:18:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:18:55.272 [DEBUG] [Thread-53297] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:18:55.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:18:55.371 [DEBUG] [Thread-53300] [transport.py] [_log()] starting thread (client mode): 0xd7bc7f40
2025-11-17T11:18:55.371 [DEBUG] [Thread-53300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:18:55.388 [DEBUG] [Thread-53300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:18:55.388 [INFO] [Thread-53300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] client lang: <none>
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] server lang: <none>
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] kex follows: False
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:18:55.396 [DEBUG] [Thread-53300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:18:55.397 [DEBUG] [Thread-53300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:18:55.397 [DEBUG] [Thread-53300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:18:55.397 [DEBUG] [Thread-53300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:18:55.397 [DEBUG] [Thread-53300] [transport.py] [_log()] Compression: none
2025-11-17T11:18:55.397 [DEBUG] [Thread-53300] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:18:55.455 [DEBUG] [Thread-53300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:18:55.455 [DEBUG] [Thread-53300] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:18:55.456 [DEBUG] [Thread-53300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:18:55.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:18:55.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:18:55.511 [DEBUG] [Thread-53300] [transport.py] [_log()] userauth is OK
2025-11-17T11:18:55.511 [DEBUG] [Thread-53300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:18:55.511 [DEBUG] [Thread-53300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:18:55.511 [DEBUG] [Thread-53300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:18:55.511 [DEBUG] [Thread-53300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:18:55.532 [INFO] [Thread-53300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:18:55.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:18:55.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:18:56.407 [DEBUG] [Thread-53300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:18:56.407 [DEBUG] [Thread-53300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:18:56.455 [DEBUG] [Thread-53300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:18:56.456 [DEBUG] [Thread-53300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:18:56.464 [DEBUG] [Thread-53300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:18:56.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:18:56.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:18:56.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:18:56.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:18:56.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:18:56.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:18:56.499 [DEBUG] [Thread-53300] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:18:59.758 [DEBUG] [Thread-53302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:19:06.286 [DEBUG] [Thread-53303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:19:14.797 [DEBUG] [Thread-53304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:19:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:19:26.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:19:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:19:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 19, 11), 22.18, 22.08, 0.0, 7.54, 19.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:19:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:19:11
2025-11-17T11:19:27.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:19:27.484 [DEBUG] [Thread-53305] [transport.py] [_log()] starting thread (client mode): 0xd07be8c0
2025-11-17T11:19:27.484 [DEBUG] [Thread-53305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:19:27.505 [DEBUG] [Thread-53305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:19:27.505 [INFO] [Thread-53305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] client lang: <none>
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] server lang: <none>
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] kex follows: False
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] Compression: none
2025-11-17T11:19:27.509 [DEBUG] [Thread-53305] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:19:27.523 [DEBUG] [Thread-53305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:19:27.524 [DEBUG] [Thread-53305] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:19:27.524 [DEBUG] [Thread-53305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:19:27.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:19:27.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:19:27.524 [DEBUG] [Thread-53305] [transport.py] [_log()] userauth is OK
2025-11-17T11:19:27.524 [DEBUG] [Thread-53305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:19:27.524 [DEBUG] [Thread-53305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:19:27.525 [DEBUG] [Thread-53305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:19:27.525 [DEBUG] [Thread-53305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:19:27.539 [INFO] [Thread-53305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:19:27.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:19:28.206 [DEBUG] [Thread-53305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:19:28.206 [DEBUG] [Thread-53305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:19:28.206 [DEBUG] [Thread-53305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:19:28.247 [DEBUG] [Thread-53305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:19:28.247 [DEBUG] [Thread-53305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:19:28.249 [DEBUG] [Thread-53305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:19:28.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:19:28.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:19:28.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:19:28.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:19:28.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:19:28.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:19:28.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:19:28.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:19:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:19:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.387896 -999.00  +18.60  10.14     29   +0.40 1 1 1 1 1   888    0 19.77 66.81 ----- 10.1 10.1 315.0 16.3 26.9 -25.5 25.9 -23.5 25.0 -23.6 25.9 -23.5
2025-11-17T11:19:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:19:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:19:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.387896
2025-11-17T11:19:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:19:28.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:19:28.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:19:28.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:19:28.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:19:28.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:19:11', tmtdew=22.18, humidity=22.08, cloud=0.0, wind=7.54, temperature=19.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:18:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:19:28.270 [DEBUG] [Thread-53305] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:19:28.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:19:28.361 [DEBUG] [Thread-53308] [transport.py] [_log()] starting thread (client mode): 0xd7bc7f40
2025-11-17T11:19:28.361 [DEBUG] [Thread-53308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:19:28.377 [DEBUG] [Thread-53308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:19:28.377 [INFO] [Thread-53308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:19:28.384 [DEBUG] [Thread-53308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:19:28.384 [DEBUG] [Thread-53308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:19:28.384 [DEBUG] [Thread-53308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] client lang: <none>
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] server lang: <none>
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] kex follows: False
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] Compression: none
2025-11-17T11:19:28.385 [DEBUG] [Thread-53308] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:19:28.442 [DEBUG] [Thread-53308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:19:28.442 [DEBUG] [Thread-53308] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:19:28.442 [DEBUG] [Thread-53308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:19:28.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:19:28.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:19:28.499 [DEBUG] [Thread-53308] [transport.py] [_log()] userauth is OK
2025-11-17T11:19:28.499 [DEBUG] [Thread-53308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:19:28.499 [DEBUG] [Thread-53308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:19:28.499 [DEBUG] [Thread-53308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:19:28.499 [DEBUG] [Thread-53308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:19:28.513 [INFO] [Thread-53308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:19:28.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:19:28.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:19:29.378 [DEBUG] [Thread-53308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:19:29.378 [DEBUG] [Thread-53308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:19:29.426 [DEBUG] [Thread-53308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:19:29.426 [DEBUG] [Thread-53308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:19:29.435 [DEBUG] [Thread-53308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:19:29.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:19:29.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:19:29.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:19:29.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:19:29.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:19:29.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:19:29.471 [DEBUG] [Thread-53308] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:19:29.823 [DEBUG] [Thread-53310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:19:33.251 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:19:33.252 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:19:44.855 [DEBUG] [Thread-53311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:19:59.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:19:59.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:19:59.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:19:59.885 [DEBUG] [Thread-53312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:20:00.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 19, 43), 21.98, 22.58, 0.0, 6.62, 19.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:20:00.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:19:43
2025-11-17T11:20:00.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:20:00.427 [DEBUG] [Thread-53313] [transport.py] [_log()] starting thread (client mode): 0xd31ce170
2025-11-17T11:20:00.427 [DEBUG] [Thread-53313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:20:00.441 [DEBUG] [Thread-53313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:20:00.442 [INFO] [Thread-53313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:20:00.444 [DEBUG] [Thread-53313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:20:00.444 [DEBUG] [Thread-53313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:20:00.444 [DEBUG] [Thread-53313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:20:00.444 [DEBUG] [Thread-53313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] client lang: <none>
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] server lang: <none>
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] kex follows: False
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] Compression: none
2025-11-17T11:20:00.445 [DEBUG] [Thread-53313] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:20:00.457 [DEBUG] [Thread-53313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:20:00.458 [DEBUG] [Thread-53313] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:20:00.458 [DEBUG] [Thread-53313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:20:00.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:20:00.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:20:00.461 [DEBUG] [Thread-53313] [transport.py] [_log()] userauth is OK
2025-11-17T11:20:00.461 [DEBUG] [Thread-53313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:20:00.461 [DEBUG] [Thread-53313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:20:00.461 [DEBUG] [Thread-53313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:20:00.461 [DEBUG] [Thread-53313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:20:00.479 [INFO] [Thread-53313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:20:00.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:20:01.318 [DEBUG] [Thread-53313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:20:01.318 [DEBUG] [Thread-53313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:20:01.319 [DEBUG] [Thread-53313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:20:01.359 [DEBUG] [Thread-53313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:20:01.359 [DEBUG] [Thread-53313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:20:01.363 [DEBUG] [Thread-53313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:20:01.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:20:01.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:20:01.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:20:01.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:20:01.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:20:01.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:20:01.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:20:01.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:20:01.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:20:01.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.388243 -999.00  +18.60   6.31     29   +0.60 1 2 1 1 1   888    0 19.70 62.51 ----- 6.3 6.3 336.6 9.0 27.1 -24.2 26.0 -23.0 25.2 -22.1 26.0 -22.9
2025-11-17T11:20:01.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:20:01.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:20:01.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.388243
2025-11-17T11:20:01.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:20:01.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:20:01.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:20:01.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:20:01.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:20:01.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:19:43', tmtdew=21.98, humidity=22.58, cloud=0.0, wind=6.62, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:19:04.195', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:20:01.386 [DEBUG] [Thread-53313] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:20:01.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:20:01.485 [DEBUG] [Thread-53316] [transport.py] [_log()] starting thread (client mode): 0xd31cc250
2025-11-17T11:20:01.486 [DEBUG] [Thread-53316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:20:01.504 [DEBUG] [Thread-53316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:20:01.504 [INFO] [Thread-53316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] client lang: <none>
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] server lang: <none>
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] kex follows: False
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] Compression: none
2025-11-17T11:20:01.512 [DEBUG] [Thread-53316] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:20:01.570 [DEBUG] [Thread-53316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:20:01.570 [DEBUG] [Thread-53316] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:20:01.570 [DEBUG] [Thread-53316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:20:01.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:20:01.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:20:01.627 [DEBUG] [Thread-53316] [transport.py] [_log()] userauth is OK
2025-11-17T11:20:01.627 [DEBUG] [Thread-53316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:20:01.627 [DEBUG] [Thread-53316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:20:01.627 [DEBUG] [Thread-53316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:20:01.627 [DEBUG] [Thread-53316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:20:01.646 [INFO] [Thread-53316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:20:01.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:20:01.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:20:02.520 [DEBUG] [Thread-53316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:20:02.520 [DEBUG] [Thread-53316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:20:02.567 [DEBUG] [Thread-53316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:20:02.567 [DEBUG] [Thread-53316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:20:02.576 [DEBUG] [Thread-53316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:20:02.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:20:02.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:20:02.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:20:02.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:20:02.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:20:02.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:20:02.610 [DEBUG] [Thread-53316] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:20:06.338 [DEBUG] [Thread-53318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:20:14.912 [DEBUG] [Thread-53319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:20:29.960 [DEBUG] [Thread-53320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:20:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:20:32.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:20:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:20:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 20, 15), 21.99, 22.58, 0.0, 6.9, 19.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:20:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:20:15
2025-11-17T11:20:33.393 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:20:33.393 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:20:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:20:33.555 [DEBUG] [Thread-53321] [transport.py] [_log()] starting thread (client mode): 0xd07bea10
2025-11-17T11:20:33.555 [DEBUG] [Thread-53321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:20:33.574 [DEBUG] [Thread-53321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:20:33.574 [INFO] [Thread-53321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:20:33.577 [DEBUG] [Thread-53321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:20:33.577 [DEBUG] [Thread-53321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] client lang: <none>
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] server lang: <none>
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] kex follows: False
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] Compression: none
2025-11-17T11:20:33.578 [DEBUG] [Thread-53321] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:20:33.593 [DEBUG] [Thread-53321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:20:33.593 [DEBUG] [Thread-53321] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:20:33.593 [DEBUG] [Thread-53321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:20:33.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:20:33.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:20:33.595 [DEBUG] [Thread-53321] [transport.py] [_log()] userauth is OK
2025-11-17T11:20:33.595 [DEBUG] [Thread-53321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:20:33.596 [DEBUG] [Thread-53321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:20:33.596 [DEBUG] [Thread-53321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:20:33.596 [DEBUG] [Thread-53321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:20:33.620 [INFO] [Thread-53321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:20:33.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:20:34.263 [DEBUG] [Thread-53321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:20:34.264 [DEBUG] [Thread-53321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:20:34.264 [DEBUG] [Thread-53321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:20:34.304 [DEBUG] [Thread-53321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:20:34.305 [DEBUG] [Thread-53321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:20:34.307 [DEBUG] [Thread-53321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:20:34.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:20:34.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:20:34.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:20:34.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:20:34.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:20:34.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:20:34.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:20:34.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:20:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:20:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.388590 -999.00  +18.90   4.05     29   +0.90 1 2 1 1 1   888    0 19.67 57.56 ----- 4.0 4.0 319.3 9.3 27.3 -24.2 26.2 -22.8 25.3 -22.2 26.2 -22.9
2025-11-17T11:20:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:20:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:20:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.388590
2025-11-17T11:20:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:20:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:20:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:20:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:20:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:20:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:20:15', tmtdew=21.99, humidity=22.58, cloud=0.0, wind=6.9, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:19:34.176', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:20:34.333 [DEBUG] [Thread-53321] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:20:34.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:20:34.419 [DEBUG] [Thread-53324] [transport.py] [_log()] starting thread (client mode): 0xd075bbe0
2025-11-17T11:20:34.419 [DEBUG] [Thread-53324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:20:34.435 [DEBUG] [Thread-53324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:20:34.435 [INFO] [Thread-53324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:20:34.442 [DEBUG] [Thread-53324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] client lang: <none>
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] server lang: <none>
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] kex follows: False
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:20:34.443 [DEBUG] [Thread-53324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:20:34.444 [DEBUG] [Thread-53324] [transport.py] [_log()] Compression: none
2025-11-17T11:20:34.444 [DEBUG] [Thread-53324] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:20:34.498 [DEBUG] [Thread-53324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:20:34.498 [DEBUG] [Thread-53324] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:20:34.498 [DEBUG] [Thread-53324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:20:34.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:20:34.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:20:34.555 [DEBUG] [Thread-53324] [transport.py] [_log()] userauth is OK
2025-11-17T11:20:34.555 [DEBUG] [Thread-53324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:20:34.555 [DEBUG] [Thread-53324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:20:34.555 [DEBUG] [Thread-53324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:20:34.555 [DEBUG] [Thread-53324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:20:34.574 [INFO] [Thread-53324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:20:34.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:20:34.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:20:35.492 [DEBUG] [Thread-53324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:20:35.492 [DEBUG] [Thread-53324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:20:35.539 [DEBUG] [Thread-53324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:20:35.539 [DEBUG] [Thread-53324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:20:35.548 [DEBUG] [Thread-53324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:20:35.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:20:35.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:20:35.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:20:35.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:20:35.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:20:35.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:20:35.581 [DEBUG] [Thread-53324] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:20:44.990 [DEBUG] [Thread-53326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:21:00.026 [DEBUG] [Thread-53327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:21:05.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:21:05.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:21:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:21:06.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 20, 46), 21.99, 22.48, 0.0, 4.32, 19.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:21:06.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:20:46
2025-11-17T11:21:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:21:06.395 [DEBUG] [Thread-53328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:21:06.526 [DEBUG] [Thread-53329] [transport.py] [_log()] starting thread (client mode): 0xd0758610
2025-11-17T11:21:06.526 [DEBUG] [Thread-53329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:21:06.548 [DEBUG] [Thread-53329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:21:06.548 [INFO] [Thread-53329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] client lang: <none>
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] server lang: <none>
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] kex follows: False
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] Compression: none
2025-11-17T11:21:06.550 [DEBUG] [Thread-53329] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:21:06.563 [DEBUG] [Thread-53329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:21:06.563 [DEBUG] [Thread-53329] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:21:06.564 [DEBUG] [Thread-53329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:21:06.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:21:06.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:21:06.566 [DEBUG] [Thread-53329] [transport.py] [_log()] userauth is OK
2025-11-17T11:21:06.566 [DEBUG] [Thread-53329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:21:06.566 [DEBUG] [Thread-53329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:21:06.566 [DEBUG] [Thread-53329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:21:06.566 [DEBUG] [Thread-53329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:21:06.592 [INFO] [Thread-53329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:21:06.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:21:07.263 [DEBUG] [Thread-53329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:21:07.263 [DEBUG] [Thread-53329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:21:07.264 [DEBUG] [Thread-53329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:21:07.305 [DEBUG] [Thread-53329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:21:07.305 [DEBUG] [Thread-53329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:21:07.308 [DEBUG] [Thread-53329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:21:07.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:21:07.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:21:07.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:21:07.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:21:07.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:21:07.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:21:07.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:21:07.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:21:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:21:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.389284 -999.00  +19.70   5.62     28   +0.90 1 1 1 1 1   888    0 20.11 58.58 ----- 5.6 5.6 249.7 9.0 27.5 -24.5 26.4 -23.7 25.4 -22.6 26.3 -23.7
2025-11-17T11:21:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:21:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:21:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.389284
2025-11-17T11:21:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:21:07.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:21:07.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:21:07.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:21:07.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:21:07.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:20:46', tmtdew=21.99, humidity=22.48, cloud=0.0, wind=4.32, temperature=19.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:20:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:21:07.330 [DEBUG] [Thread-53329] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:21:07.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:21:07.427 [DEBUG] [Thread-53332] [transport.py] [_log()] starting thread (client mode): 0xd07bd540
2025-11-17T11:21:07.427 [DEBUG] [Thread-53332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:21:07.442 [DEBUG] [Thread-53332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:21:07.443 [INFO] [Thread-53332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:21:07.450 [DEBUG] [Thread-53332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:21:07.450 [DEBUG] [Thread-53332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:21:07.450 [DEBUG] [Thread-53332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:21:07.450 [DEBUG] [Thread-53332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] client lang: <none>
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] server lang: <none>
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] kex follows: False
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:21:07.451 [DEBUG] [Thread-53332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:21:07.452 [DEBUG] [Thread-53332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:21:07.452 [DEBUG] [Thread-53332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:21:07.452 [DEBUG] [Thread-53332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:21:07.452 [DEBUG] [Thread-53332] [transport.py] [_log()] Compression: none
2025-11-17T11:21:07.452 [DEBUG] [Thread-53332] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:21:07.507 [DEBUG] [Thread-53332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:21:07.507 [DEBUG] [Thread-53332] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:21:07.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:21:07.508 [DEBUG] [Thread-53332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:21:07.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:21:07.563 [DEBUG] [Thread-53332] [transport.py] [_log()] userauth is OK
2025-11-17T11:21:07.563 [DEBUG] [Thread-53332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:21:07.563 [DEBUG] [Thread-53332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:21:07.563 [DEBUG] [Thread-53332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:21:07.563 [DEBUG] [Thread-53332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:21:07.583 [INFO] [Thread-53332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:21:07.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:21:07.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:21:08.465 [DEBUG] [Thread-53332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:21:08.465 [DEBUG] [Thread-53332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:21:08.513 [DEBUG] [Thread-53332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:21:08.513 [DEBUG] [Thread-53332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:21:08.525 [DEBUG] [Thread-53332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:21:08.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:21:08.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:21:08.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:21:08.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:21:08.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:21:08.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:21:08.564 [DEBUG] [Thread-53332] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:21:15.057 [DEBUG] [Thread-53334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:21:30.104 [DEBUG] [Thread-53335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:21:33.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:21:33.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:21:38.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:21:38.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:21:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:21:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 21, 18), 21.93, 22.6, 0.0, 5.81, 19.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:21:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:21:18
2025-11-17T11:21:39.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:21:39.508 [DEBUG] [Thread-53336] [transport.py] [_log()] starting thread (client mode): 0xd7bc66e0
2025-11-17T11:21:39.508 [DEBUG] [Thread-53336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:21:39.528 [DEBUG] [Thread-53336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:21:39.528 [INFO] [Thread-53336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:21:39.531 [DEBUG] [Thread-53336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:21:39.531 [DEBUG] [Thread-53336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:21:39.531 [DEBUG] [Thread-53336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] client lang: <none>
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] server lang: <none>
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] kex follows: False
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] Compression: none
2025-11-17T11:21:39.532 [DEBUG] [Thread-53336] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:21:39.549 [DEBUG] [Thread-53336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:21:39.550 [DEBUG] [Thread-53336] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:21:39.550 [DEBUG] [Thread-53336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:21:39.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:21:39.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:21:39.553 [DEBUG] [Thread-53336] [transport.py] [_log()] userauth is OK
2025-11-17T11:21:39.553 [DEBUG] [Thread-53336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:21:39.553 [DEBUG] [Thread-53336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:21:39.553 [DEBUG] [Thread-53336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:21:39.553 [DEBUG] [Thread-53336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:21:39.591 [INFO] [Thread-53336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:21:39.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:21:40.254 [DEBUG] [Thread-53336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:21:40.254 [DEBUG] [Thread-53336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:21:40.254 [DEBUG] [Thread-53336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:21:40.294 [DEBUG] [Thread-53336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:21:40.295 [DEBUG] [Thread-53336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:21:40.298 [DEBUG] [Thread-53336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:21:40.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:21:40.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:21:40.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:21:40.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:21:40.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:21:40.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:21:40.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:21:40.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:21:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:21:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.389632 -999.00  +19.80   7.44     28   +0.80 1 1 1 1 1   888    0 19.70 59.36 ----- 7.4 7.4 276.4 10.9 27.6 -24.5 26.5 -23.9 25.4 -23.3 26.5 -23.4
2025-11-17T11:21:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:21:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:21:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.389632
2025-11-17T11:21:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:21:40.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:21:40.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:21:40.323 [DEBUG] [Thread-53336] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:21:40.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:21:40.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:21:40.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:21:18', tmtdew=21.93, humidity=22.6, cloud=0.0, wind=5.81, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:21:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:21:40.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:21:40.419 [DEBUG] [Thread-53339] [transport.py] [_log()] starting thread (client mode): 0xd07100a0
2025-11-17T11:21:40.420 [DEBUG] [Thread-53339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:21:40.436 [DEBUG] [Thread-53339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:21:40.436 [INFO] [Thread-53339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:21:40.444 [DEBUG] [Thread-53339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:21:40.444 [DEBUG] [Thread-53339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:21:40.444 [DEBUG] [Thread-53339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:21:40.444 [DEBUG] [Thread-53339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:21:40.444 [DEBUG] [Thread-53339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:21:40.444 [DEBUG] [Thread-53339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] client lang: <none>
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] server lang: <none>
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] kex follows: False
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] Compression: none
2025-11-17T11:21:40.445 [DEBUG] [Thread-53339] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:21:40.502 [DEBUG] [Thread-53339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:21:40.503 [DEBUG] [Thread-53339] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:21:40.503 [DEBUG] [Thread-53339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:21:40.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:21:40.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:21:40.566 [DEBUG] [Thread-53339] [transport.py] [_log()] userauth is OK
2025-11-17T11:21:40.566 [DEBUG] [Thread-53339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:21:40.567 [DEBUG] [Thread-53339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:21:40.567 [DEBUG] [Thread-53339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:21:40.567 [DEBUG] [Thread-53339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:21:40.587 [INFO] [Thread-53339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:21:40.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:21:40.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:21:41.444 [DEBUG] [Thread-53339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:21:41.444 [DEBUG] [Thread-53339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:21:41.492 [DEBUG] [Thread-53339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:21:41.492 [DEBUG] [Thread-53339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:21:41.501 [DEBUG] [Thread-53339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:21:41.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:21:41.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')
2025-11-17T11:21:41.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:21:41.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:21:41.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:21:41.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:21:41.537 [DEBUG] [Thread-53339] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:21:45.133 [DEBUG] [Thread-53341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:22:00.180 [DEBUG] [Thread-53342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:22:06.461 [DEBUG] [Thread-53343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:22:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:22:11.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:22:11.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:22:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 21, 51), 22.05, 22.45, 0.0, 3.92, 19.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:22:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:21:51
2025-11-17T11:22:12.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:22:12.455 [DEBUG] [Thread-53344] [transport.py] [_log()] starting thread (client mode): 0xd31cef50
2025-11-17T11:22:12.456 [DEBUG] [Thread-53344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:22:12.470 [DEBUG] [Thread-53344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:22:12.470 [INFO] [Thread-53344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] client lang: <none>
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] server lang: <none>
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] kex follows: False
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] Compression: none
2025-11-17T11:22:12.472 [DEBUG] [Thread-53344] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:22:12.480 [DEBUG] [Thread-53344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:22:12.480 [DEBUG] [Thread-53344] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:22:12.480 [DEBUG] [Thread-53344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:22:12.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:22:12.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:22:12.481 [DEBUG] [Thread-53344] [transport.py] [_log()] userauth is OK
2025-11-17T11:22:12.482 [DEBUG] [Thread-53344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:22:12.482 [DEBUG] [Thread-53344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:22:12.482 [DEBUG] [Thread-53344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:22:12.482 [DEBUG] [Thread-53344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:22:12.497 [INFO] [Thread-53344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:22:12.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:22:13.259 [DEBUG] [Thread-53344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:22:13.259 [DEBUG] [Thread-53344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:22:13.259 [DEBUG] [Thread-53344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:22:13.299 [DEBUG] [Thread-53344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:22:13.299 [DEBUG] [Thread-53344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:22:13.302 [DEBUG] [Thread-53344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:22:13.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:22:13.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:22:13.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:22:13.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:22:13.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:22:13.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:22:13.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:22:13.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:22:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:22:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.389979 -999.00  +19.90   7.57     28   +0.80 1 2 1 1 1   888    0 20.24 61.94 ----- 7.6 7.6 39.4 9.6 27.7 -24.2 26.6 -23.2 25.5 -22.4 26.6 -22.9
2025-11-17T11:22:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:22:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:22:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.389979
2025-11-17T11:22:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:22:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:22:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:22:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:22:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:22:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:21:51', tmtdew=22.05, humidity=22.45, cloud=0.0, wind=3.92, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:21:34.186', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:22:13.328 [DEBUG] [Thread-53344] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:22:13.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:22:13.425 [DEBUG] [Thread-53347] [transport.py] [_log()] starting thread (client mode): 0xd3161ba0
2025-11-17T11:22:13.425 [DEBUG] [Thread-53347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:22:13.441 [DEBUG] [Thread-53347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:22:13.441 [INFO] [Thread-53347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:22:13.448 [DEBUG] [Thread-53347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:22:13.448 [DEBUG] [Thread-53347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] client lang: <none>
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] server lang: <none>
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] kex follows: False
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:22:13.449 [DEBUG] [Thread-53347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:22:13.450 [DEBUG] [Thread-53347] [transport.py] [_log()] Compression: none
2025-11-17T11:22:13.450 [DEBUG] [Thread-53347] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:22:13.511 [DEBUG] [Thread-53347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:22:13.511 [DEBUG] [Thread-53347] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:22:13.511 [DEBUG] [Thread-53347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:22:13.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:22:13.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:22:13.571 [DEBUG] [Thread-53347] [transport.py] [_log()] userauth is OK
2025-11-17T11:22:13.571 [DEBUG] [Thread-53347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:22:13.571 [DEBUG] [Thread-53347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:22:13.571 [DEBUG] [Thread-53347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:22:13.571 [DEBUG] [Thread-53347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:22:13.590 [INFO] [Thread-53347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:22:13.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:22:13.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:22:14.437 [DEBUG] [Thread-53347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:22:14.437 [DEBUG] [Thread-53347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:22:14.485 [DEBUG] [Thread-53347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:22:14.485 [DEBUG] [Thread-53347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:22:14.494 [DEBUG] [Thread-53347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:22:14.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:22:14.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:22:14.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:22:14.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:22:14.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:22:14.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:22:14.528 [DEBUG] [Thread-53347] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:22:15.207 [DEBUG] [Thread-53349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:22:30.247 [DEBUG] [Thread-53350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:22:33.679 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:22:33.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:22:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:22:44.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:22:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:22:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 22, 22), 21.76, 22.88, 0.0, 8.58, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:22:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:22:22
2025-11-17T11:22:45.276 [DEBUG] [Thread-53351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:22:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:22:45.447 [DEBUG] [Thread-53352] [transport.py] [_log()] starting thread (client mode): 0xd07ce560
2025-11-17T11:22:45.447 [DEBUG] [Thread-53352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:22:45.467 [DEBUG] [Thread-53352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:22:45.467 [INFO] [Thread-53352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] client lang: <none>
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] server lang: <none>
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] kex follows: False
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:22:45.470 [DEBUG] [Thread-53352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:22:45.471 [DEBUG] [Thread-53352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:22:45.471 [DEBUG] [Thread-53352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:22:45.471 [DEBUG] [Thread-53352] [transport.py] [_log()] Compression: none
2025-11-17T11:22:45.471 [DEBUG] [Thread-53352] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:22:45.488 [DEBUG] [Thread-53352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:22:45.489 [DEBUG] [Thread-53352] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:22:45.489 [DEBUG] [Thread-53352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:22:45.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:22:45.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:22:45.491 [DEBUG] [Thread-53352] [transport.py] [_log()] userauth is OK
2025-11-17T11:22:45.491 [DEBUG] [Thread-53352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:22:45.491 [DEBUG] [Thread-53352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:22:45.491 [DEBUG] [Thread-53352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:22:45.491 [DEBUG] [Thread-53352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:22:45.515 [INFO] [Thread-53352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:22:45.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:22:46.172 [DEBUG] [Thread-53352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:22:46.172 [DEBUG] [Thread-53352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:22:46.173 [DEBUG] [Thread-53352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:22:46.213 [DEBUG] [Thread-53352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:22:46.213 [DEBUG] [Thread-53352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:22:46.216 [DEBUG] [Thread-53352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:22:46.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:22:46.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:22:46.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:22:46.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:22:46.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:22:46.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:22:46.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:22:46.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:22:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:22:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.390326 -999.00  +19.80  16.50     27   +0.70 1 1 1 1 1   888    0 20.11 64.30 ----- 16.5 16.5 2.2 17.8 27.8 -24.5 26.6 -24.2 25.6 -23.7 26.6 -23.6
2025-11-17T11:22:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:22:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:22:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.390326
2025-11-17T11:22:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:22:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:22:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:22:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:22:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:22:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:22:22', tmtdew=21.76, humidity=22.88, cloud=0.0, wind=8.58, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:22:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:22:46.238 [DEBUG] [Thread-53352] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:22:46.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:22:46.333 [DEBUG] [Thread-53355] [transport.py] [_log()] starting thread (client mode): 0xd31ccf70
2025-11-17T11:22:46.333 [DEBUG] [Thread-53355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:22:46.349 [DEBUG] [Thread-53355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:22:46.350 [INFO] [Thread-53355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:22:46.357 [DEBUG] [Thread-53355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:22:46.357 [DEBUG] [Thread-53355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] client lang: <none>
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] server lang: <none>
2025-11-17T11:22:46.358 [DEBUG] [Thread-53355] [transport.py] [_log()] kex follows: False
2025-11-17T11:22:46.359 [DEBUG] [Thread-53355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:22:46.359 [DEBUG] [Thread-53355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:22:46.359 [DEBUG] [Thread-53355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:22:46.359 [DEBUG] [Thread-53355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:22:46.359 [DEBUG] [Thread-53355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:22:46.359 [DEBUG] [Thread-53355] [transport.py] [_log()] Compression: none
2025-11-17T11:22:46.359 [DEBUG] [Thread-53355] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:22:46.415 [DEBUG] [Thread-53355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:22:46.415 [DEBUG] [Thread-53355] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:22:46.416 [DEBUG] [Thread-53355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:22:46.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:22:46.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:22:46.470 [DEBUG] [Thread-53355] [transport.py] [_log()] userauth is OK
2025-11-17T11:22:46.471 [DEBUG] [Thread-53355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:22:46.471 [DEBUG] [Thread-53355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:22:46.471 [DEBUG] [Thread-53355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:22:46.471 [DEBUG] [Thread-53355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:22:46.491 [INFO] [Thread-53355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:22:46.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:22:46.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:22:47.425 [DEBUG] [Thread-53355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:22:47.425 [DEBUG] [Thread-53355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:22:47.473 [DEBUG] [Thread-53355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:22:47.473 [DEBUG] [Thread-53355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:22:47.482 [DEBUG] [Thread-53355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:22:47.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:22:47.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')
2025-11-17T11:22:47.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:22:47.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:22:47.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:22:47.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:22:47.515 [DEBUG] [Thread-53355] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:23:00.303 [DEBUG] [Thread-53357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:23:06.520 [DEBUG] [Thread-53358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:23:15.348 [DEBUG] [Thread-53359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:23:17.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:23:17.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:23:17.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:23:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 22, 54), 22.21, 22.4, 0.0, 10.54, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:23:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:22:54
2025-11-17T11:23:18.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:23:18.511 [DEBUG] [Thread-53360] [transport.py] [_log()] starting thread (client mode): 0xd7bc6860
2025-11-17T11:23:18.511 [DEBUG] [Thread-53360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:23:18.531 [DEBUG] [Thread-53360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:23:18.531 [INFO] [Thread-53360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] client lang: <none>
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] server lang: <none>
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] kex follows: False
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] Compression: none
2025-11-17T11:23:18.534 [DEBUG] [Thread-53360] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:23:18.549 [DEBUG] [Thread-53360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:23:18.550 [DEBUG] [Thread-53360] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:23:18.550 [DEBUG] [Thread-53360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:23:18.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:23:18.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:23:18.551 [DEBUG] [Thread-53360] [transport.py] [_log()] userauth is OK
2025-11-17T11:23:18.551 [DEBUG] [Thread-53360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:23:18.551 [DEBUG] [Thread-53360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:23:18.551 [DEBUG] [Thread-53360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:23:18.551 [DEBUG] [Thread-53360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:23:18.566 [INFO] [Thread-53360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:23:18.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:23:19.332 [DEBUG] [Thread-53360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:23:19.333 [DEBUG] [Thread-53360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:23:19.333 [DEBUG] [Thread-53360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:23:19.374 [DEBUG] [Thread-53360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:23:19.374 [DEBUG] [Thread-53360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:23:19.376 [DEBUG] [Thread-53360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:23:19.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:23:19.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:23:19.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:23:19.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:23:19.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:23:19.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:23:19.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:23:19.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.390673 -999.00  +19.40   6.21     28   +0.40 1 1 1 1 1   888    0 20.52 66.21 ----- 6.2 6.2 38.6 13.6 27.7 -25.3 26.5 -24.6 25.6 -23.3 26.6 -24.3
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.390673
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:23:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:22:54', tmtdew=22.21, humidity=22.4, cloud=0.0, wind=10.54, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:22:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:23:19.396 [DEBUG] [Thread-53360] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:23:19.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:23:19.480 [DEBUG] [Thread-53363] [transport.py] [_log()] starting thread (client mode): 0xd31ed750
2025-11-17T11:23:19.480 [DEBUG] [Thread-53363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:23:19.494 [DEBUG] [Thread-53363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:23:19.495 [INFO] [Thread-53363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] client lang: <none>
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] server lang: <none>
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] kex follows: False
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:23:19.502 [DEBUG] [Thread-53363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:23:19.503 [DEBUG] [Thread-53363] [transport.py] [_log()] Compression: none
2025-11-17T11:23:19.503 [DEBUG] [Thread-53363] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:23:19.557 [DEBUG] [Thread-53363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:23:19.557 [DEBUG] [Thread-53363] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:23:19.557 [DEBUG] [Thread-53363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:23:19.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:23:19.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:23:19.616 [DEBUG] [Thread-53363] [transport.py] [_log()] userauth is OK
2025-11-17T11:23:19.616 [DEBUG] [Thread-53363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:23:19.616 [DEBUG] [Thread-53363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:23:19.617 [DEBUG] [Thread-53363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:23:19.617 [DEBUG] [Thread-53363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:23:19.631 [INFO] [Thread-53363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:23:19.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:23:19.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:23:20.490 [DEBUG] [Thread-53363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:23:20.490 [DEBUG] [Thread-53363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:23:20.538 [DEBUG] [Thread-53363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:23:20.538 [DEBUG] [Thread-53363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:23:20.546 [DEBUG] [Thread-53363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:23:20.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:23: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')
2025-11-17T11:23:20.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:23:20.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:23:20.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:23:20.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:23:20.577 [DEBUG] [Thread-53363] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:23:30.379 [DEBUG] [Thread-53365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:23:33.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:23:33.823 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:23:45.423 [DEBUG] [Thread-53366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:23:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:23:50.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:23:50.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:23:51.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 23, 26), 22.53, 22.0, 0.0, 7.92, 20.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:23:51.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:23:26
2025-11-17T11:23:51.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:23:51.502 [DEBUG] [Thread-53367] [transport.py] [_log()] starting thread (client mode): 0xd31cfac0
2025-11-17T11:23:51.502 [DEBUG] [Thread-53367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:23:51.522 [DEBUG] [Thread-53367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:23:51.522 [INFO] [Thread-53367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:23:51.525 [DEBUG] [Thread-53367] [transport.py] [_log()] client lang: <none>
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] server lang: <none>
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] kex follows: False
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] Compression: none
2025-11-17T11:23:51.526 [DEBUG] [Thread-53367] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:23:51.543 [DEBUG] [Thread-53367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:23:51.543 [DEBUG] [Thread-53367] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:23:51.544 [DEBUG] [Thread-53367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:23:51.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:23:51.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:23:51.546 [DEBUG] [Thread-53367] [transport.py] [_log()] userauth is OK
2025-11-17T11:23:51.546 [DEBUG] [Thread-53367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:23:51.546 [DEBUG] [Thread-53367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:23:51.546 [DEBUG] [Thread-53367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:23:51.546 [DEBUG] [Thread-53367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:23:51.559 [INFO] [Thread-53367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:23:51.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:23:52.213 [DEBUG] [Thread-53367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:23:52.213 [DEBUG] [Thread-53367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:23:52.214 [DEBUG] [Thread-53367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:23:52.254 [DEBUG] [Thread-53367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:23:52.255 [DEBUG] [Thread-53367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:23:52.257 [DEBUG] [Thread-53367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:23:52.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:23:52.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:23:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:23:52.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:23:52.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:23:52.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:23:52.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:23:52.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:23:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:23:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.391021 -999.00  +19.60   6.75     28   +0.70 1 1 1 1 1   888    0 20.33 70.64 ----- 6.8 6.8 17.9 10.5 27.8 -25.7 26.6 -24.6 25.6 -23.4 26.6 -23.5
2025-11-17T11:23:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:23:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:23:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.391021
2025-11-17T11:23:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:23:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:23:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:23:52.282 [DEBUG] [Thread-53367] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:23:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:23:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:23:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:23:26', tmtdew=22.53, humidity=22.0, cloud=0.0, wind=7.92, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:23:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:23:52.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:23:52.380 [DEBUG] [Thread-53370] [transport.py] [_log()] starting thread (client mode): 0xd07bcfa0
2025-11-17T11:23:52.380 [DEBUG] [Thread-53370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:23:52.395 [DEBUG] [Thread-53370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:23:52.396 [INFO] [Thread-53370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:23:52.403 [DEBUG] [Thread-53370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:23:52.403 [DEBUG] [Thread-53370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:23:52.403 [DEBUG] [Thread-53370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:23:52.403 [DEBUG] [Thread-53370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:23:52.403 [DEBUG] [Thread-53370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] client lang: <none>
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] server lang: <none>
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] kex follows: False
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:23:52.404 [DEBUG] [Thread-53370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:23:52.405 [DEBUG] [Thread-53370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:23:52.405 [DEBUG] [Thread-53370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:23:52.405 [DEBUG] [Thread-53370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:23:52.405 [DEBUG] [Thread-53370] [transport.py] [_log()] Compression: none
2025-11-17T11:23:52.405 [DEBUG] [Thread-53370] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:23:52.463 [DEBUG] [Thread-53370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:23:52.464 [DEBUG] [Thread-53370] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:23:52.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:23:52.465 [DEBUG] [Thread-53370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:23:52.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:23:52.527 [DEBUG] [Thread-53370] [transport.py] [_log()] userauth is OK
2025-11-17T11:23:52.528 [DEBUG] [Thread-53370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:23:52.528 [DEBUG] [Thread-53370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:23:52.528 [DEBUG] [Thread-53370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:23:52.528 [DEBUG] [Thread-53370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:23:52.550 [INFO] [Thread-53370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:23:52.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:23:52.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:23:53.406 [DEBUG] [Thread-53370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:23:53.407 [DEBUG] [Thread-53370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:23:53.454 [DEBUG] [Thread-53370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:23:53.455 [DEBUG] [Thread-53370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:23:53.464 [DEBUG] [Thread-53370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:23:53.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:23:53.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:23:53.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:23:53.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:23:53.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:23:53.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:23:53.498 [DEBUG] [Thread-53370] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:24:00.449 [DEBUG] [Thread-53372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:24:06.587 [DEBUG] [Thread-53373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:24:15.486 [DEBUG] [Thread-53374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:24:23.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:24:23.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:24:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:24:24.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 23, 58), 22.73, 21.67, 0.0, 18.12, 20.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:24:24.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:23:58
2025-11-17T11:24:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:24:24.422 [DEBUG] [Thread-53375] [transport.py] [_log()] starting thread (client mode): 0xd3160580
2025-11-17T11:24:24.422 [DEBUG] [Thread-53375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:24:24.442 [DEBUG] [Thread-53375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:24:24.443 [INFO] [Thread-53375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] client lang: <none>
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] server lang: <none>
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] kex follows: False
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] Compression: none
2025-11-17T11:24:24.446 [DEBUG] [Thread-53375] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:24:24.466 [DEBUG] [Thread-53375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:24:24.466 [DEBUG] [Thread-53375] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:24:24.467 [DEBUG] [Thread-53375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:24:24.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:24:24.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:24:24.469 [DEBUG] [Thread-53375] [transport.py] [_log()] userauth is OK
2025-11-17T11:24:24.469 [DEBUG] [Thread-53375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:24:24.470 [DEBUG] [Thread-53375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:24:24.470 [DEBUG] [Thread-53375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:24:24.470 [DEBUG] [Thread-53375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:24:24.503 [INFO] [Thread-53375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:24:24.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:24:25.303 [DEBUG] [Thread-53375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:24:25.303 [DEBUG] [Thread-53375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:24:25.304 [DEBUG] [Thread-53375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:24:25.344 [DEBUG] [Thread-53375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:24:25.345 [DEBUG] [Thread-53375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:24:25.348 [DEBUG] [Thread-53375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:24:25.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:24:25.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:24:25.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:24:25.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:24:25.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:24:25.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:24:25.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:24:25.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:24:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:24:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.391368 -999.00  +19.50  20.04     27   +0.20 1 1 1 1 1   888    0 20.61 77.54 ----- 20.0 20.0 326.6 27.5 27.7 -26.3 26.5 -24.5 25.7 -25.0 26.6 -24.0
2025-11-17T11:24:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:24:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:24:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.391368
2025-11-17T11:24:25.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:24:25.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:24:25.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:24:25.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:24:25.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:24:25.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:23:58', tmtdew=22.73, humidity=21.67, cloud=0.0, wind=18.12, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:23:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:24:25.376 [DEBUG] [Thread-53375] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:24:25.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:24:25.473 [DEBUG] [Thread-53378] [transport.py] [_log()] starting thread (client mode): 0xd07ce4d0
2025-11-17T11:24:25.473 [DEBUG] [Thread-53378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:24:25.488 [DEBUG] [Thread-53378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:24:25.488 [INFO] [Thread-53378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] client lang: <none>
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] server lang: <none>
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] kex follows: False
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:24:25.496 [DEBUG] [Thread-53378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:24:25.497 [DEBUG] [Thread-53378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:24:25.497 [DEBUG] [Thread-53378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:24:25.497 [DEBUG] [Thread-53378] [transport.py] [_log()] Compression: none
2025-11-17T11:24:25.497 [DEBUG] [Thread-53378] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:24:25.557 [DEBUG] [Thread-53378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:24:25.557 [DEBUG] [Thread-53378] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:24:25.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:24:25.557 [DEBUG] [Thread-53378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:24:25.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:24:25.614 [DEBUG] [Thread-53378] [transport.py] [_log()] userauth is OK
2025-11-17T11:24:25.615 [DEBUG] [Thread-53378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:24:25.615 [DEBUG] [Thread-53378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:24:25.615 [DEBUG] [Thread-53378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:24:25.615 [DEBUG] [Thread-53378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:24:25.634 [INFO] [Thread-53378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:24:25.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:24:25.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:24:26.510 [DEBUG] [Thread-53378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:24:26.510 [DEBUG] [Thread-53378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:24:26.558 [DEBUG] [Thread-53378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:24:26.558 [DEBUG] [Thread-53378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:24:26.567 [DEBUG] [Thread-53378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:24:26.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:24:26.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:24:26.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:24:26.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:24:26.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:24:26.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:24:26.606 [DEBUG] [Thread-53378] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:24:30.517 [DEBUG] [Thread-53380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:24:33.965 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:24:33.965 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:24:45.555 [DEBUG] [Thread-53381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:24:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:24:56.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:24:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:24:57.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 24, 30), 23.0, 21.27, 0.0, 19.39, 20.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:24:57.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:24:30
2025-11-17T11:24:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:24:57.541 [DEBUG] [Thread-53382] [transport.py] [_log()] starting thread (client mode): 0xd31efa60
2025-11-17T11:24:57.541 [DEBUG] [Thread-53382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:24:57.561 [DEBUG] [Thread-53382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:24:57.562 [INFO] [Thread-53382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:24:57.565 [DEBUG] [Thread-53382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:24:57.565 [DEBUG] [Thread-53382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:24:57.565 [DEBUG] [Thread-53382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:24:57.565 [DEBUG] [Thread-53382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:24:57.565 [DEBUG] [Thread-53382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:24:57.565 [DEBUG] [Thread-53382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] client lang: <none>
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] server lang: <none>
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] kex follows: False
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] Compression: none
2025-11-17T11:24:57.566 [DEBUG] [Thread-53382] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:24:57.583 [DEBUG] [Thread-53382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:24:57.584 [DEBUG] [Thread-53382] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:24:57.584 [DEBUG] [Thread-53382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:24:57.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:24:57.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:24:57.586 [DEBUG] [Thread-53382] [transport.py] [_log()] userauth is OK
2025-11-17T11:24:57.586 [DEBUG] [Thread-53382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:24:57.586 [DEBUG] [Thread-53382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:24:57.586 [DEBUG] [Thread-53382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:24:57.587 [DEBUG] [Thread-53382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:24:57.622 [INFO] [Thread-53382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:24:57.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:24:58.270 [DEBUG] [Thread-53382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:24:58.271 [DEBUG] [Thread-53382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:24:58.271 [DEBUG] [Thread-53382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:24:58.311 [DEBUG] [Thread-53382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:24:58.312 [DEBUG] [Thread-53382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:24:58.315 [DEBUG] [Thread-53382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:24:58.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:24:58.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:24:58.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:24:58.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:24:58.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:24:58.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:24:58.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:24:58.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:24:58.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:24:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.391715 -999.00  +19.70  16.37     27   +0.50 1 1 1 1 1   888    0 21.02 77.56 ----- 16.4 16.4 349.9 24.0 27.7 -25.5 26.4 -25.3 25.7 -23.3 26.5 -23.1
2025-11-17T11:24:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:24:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:24:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.391715
2025-11-17T11:24:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:24:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:24:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:24:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:24:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:24:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:24:30', tmtdew=23.0, humidity=21.27, cloud=0.0, wind=19.39, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:24:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:24:58.341 [DEBUG] [Thread-53382] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:24:58.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:24:58.428 [DEBUG] [Thread-53385] [transport.py] [_log()] starting thread (client mode): 0xd07bf0a0
2025-11-17T11:24:58.428 [DEBUG] [Thread-53385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:24:58.443 [DEBUG] [Thread-53385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:24:58.443 [INFO] [Thread-53385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] client lang: <none>
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] server lang: <none>
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] kex follows: False
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:24:58.451 [DEBUG] [Thread-53385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:24:58.452 [DEBUG] [Thread-53385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:24:58.452 [DEBUG] [Thread-53385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:24:58.452 [DEBUG] [Thread-53385] [transport.py] [_log()] Compression: none
2025-11-17T11:24:58.452 [DEBUG] [Thread-53385] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:24:58.510 [DEBUG] [Thread-53385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:24:58.511 [DEBUG] [Thread-53385] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:24:58.511 [DEBUG] [Thread-53385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:24:58.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:24:58.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:24:58.566 [DEBUG] [Thread-53385] [transport.py] [_log()] userauth is OK
2025-11-17T11:24:58.566 [DEBUG] [Thread-53385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:24:58.567 [DEBUG] [Thread-53385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:24:58.567 [DEBUG] [Thread-53385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:24:58.567 [DEBUG] [Thread-53385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:24:58.582 [INFO] [Thread-53385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:24:58.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:24:58.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:24:59.438 [DEBUG] [Thread-53385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:24:59.438 [DEBUG] [Thread-53385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:24:59.486 [DEBUG] [Thread-53385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:24:59.486 [DEBUG] [Thread-53385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:24:59.495 [DEBUG] [Thread-53385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:24:59.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:24:59.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:24:59.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:24:59.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:24:59.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:24:59.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:24:59.530 [DEBUG] [Thread-53385] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:25:00.586 [DEBUG] [Thread-53387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:25:06.640 [DEBUG] [Thread-53388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:25:15.624 [DEBUG] [Thread-53389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:25:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:25:29.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:25:29.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:25:30.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 25, 3), 22.77, 21.57, 0.0, 19.13, 20.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:25:30.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:25:03
2025-11-17T11:25:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:25:30.461 [DEBUG] [Thread-53390] [transport.py] [_log()] starting thread (client mode): 0xd31cd2a0
2025-11-17T11:25:30.462 [DEBUG] [Thread-53390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:25:30.481 [DEBUG] [Thread-53390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:25:30.481 [INFO] [Thread-53390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] client lang: <none>
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] server lang: <none>
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] kex follows: False
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] Compression: none
2025-11-17T11:25:30.485 [DEBUG] [Thread-53390] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:25:30.503 [DEBUG] [Thread-53390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:25:30.504 [DEBUG] [Thread-53390] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:25:30.504 [DEBUG] [Thread-53390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:25:30.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:25:30.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:25:30.506 [DEBUG] [Thread-53390] [transport.py] [_log()] userauth is OK
2025-11-17T11:25:30.506 [DEBUG] [Thread-53390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:25:30.506 [DEBUG] [Thread-53390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:25:30.507 [DEBUG] [Thread-53390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:25:30.507 [DEBUG] [Thread-53390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:25:30.542 [INFO] [Thread-53390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:25:30.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:25:30.655 [DEBUG] [Thread-53392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:25:31.150 [DEBUG] [Thread-53390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:25:31.150 [DEBUG] [Thread-53390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:25:31.151 [DEBUG] [Thread-53390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:25:31.191 [DEBUG] [Thread-53390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:25:31.192 [DEBUG] [Thread-53390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:25:31.194 [DEBUG] [Thread-53390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:25:31.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:25:31.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:25:31.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:25:31.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:25:31.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:25:31.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:25:31.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:25:31.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:25:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:25:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.392409 -999.00  +20.10  27.71     26   +0.50 1 1 1 1 1   888    0 21.06 89.47 ----- 27.7 27.7 305.2 32.5 27.6 -24.7 26.4 -25.2 25.6 -23.4 26.5 -23.4
2025-11-17T11:25:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:25:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:25:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.392409
2025-11-17T11:25:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:25:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:25:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:25:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:25:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:25:31.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:25:03', tmtdew=22.77, humidity=21.57, cloud=0.0, wind=19.13, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:25:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:25:31.222 [DEBUG] [Thread-53390] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:25:31.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:25:31.316 [DEBUG] [Thread-53394] [transport.py] [_log()] starting thread (client mode): 0xd31ee770
2025-11-17T11:25:31.316 [DEBUG] [Thread-53394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:25:31.330 [DEBUG] [Thread-53394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:25:31.331 [INFO] [Thread-53394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:25:31.341 [DEBUG] [Thread-53394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:25:31.341 [DEBUG] [Thread-53394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] client lang: <none>
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] server lang: <none>
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] kex follows: False
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] Compression: none
2025-11-17T11:25:31.342 [DEBUG] [Thread-53394] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:25:31.403 [DEBUG] [Thread-53394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:25:31.403 [DEBUG] [Thread-53394] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:25:31.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:25:31.404 [DEBUG] [Thread-53394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:25:31.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:25:31.458 [DEBUG] [Thread-53394] [transport.py] [_log()] userauth is OK
2025-11-17T11:25:31.459 [DEBUG] [Thread-53394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:25:31.459 [DEBUG] [Thread-53394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:25:31.459 [DEBUG] [Thread-53394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:25:31.459 [DEBUG] [Thread-53394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:25:31.478 [INFO] [Thread-53394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:25:31.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:25:31.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:25:32.366 [DEBUG] [Thread-53394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:25:32.366 [DEBUG] [Thread-53394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:25:32.413 [DEBUG] [Thread-53394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:25:32.413 [DEBUG] [Thread-53394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:25:32.422 [DEBUG] [Thread-53394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:25:32.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:25:32.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:25:32.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:25:32.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:25:32.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:25:32.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:25:32.457 [DEBUG] [Thread-53394] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:25:34.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:25:34.108 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:25:45.690 [DEBUG] [Thread-53396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:26:00.722 [DEBUG] [Thread-53397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:26:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:26:02.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:26:02.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:26:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 25, 34), 22.99, 21.1, 0.0, 19.97, 20.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:26:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:25:34
2025-11-17T11:26:03.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:26:03.403 [DEBUG] [Thread-53398] [transport.py] [_log()] starting thread (client mode): 0xd071a440
2025-11-17T11:26:03.403 [DEBUG] [Thread-53398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:26:03.422 [DEBUG] [Thread-53398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:26:03.422 [INFO] [Thread-53398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:26:03.425 [DEBUG] [Thread-53398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] client lang: <none>
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] server lang: <none>
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] kex follows: False
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] Compression: none
2025-11-17T11:26:03.426 [DEBUG] [Thread-53398] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:26:03.443 [DEBUG] [Thread-53398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:26:03.443 [DEBUG] [Thread-53398] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:26:03.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:26:03.444 [DEBUG] [Thread-53398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:26:03.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:26:03.446 [DEBUG] [Thread-53398] [transport.py] [_log()] userauth is OK
2025-11-17T11:26:03.446 [DEBUG] [Thread-53398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:26:03.446 [DEBUG] [Thread-53398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:26:03.447 [DEBUG] [Thread-53398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:26:03.447 [DEBUG] [Thread-53398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:26:03.470 [INFO] [Thread-53398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:26:03.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:26:04.169 [DEBUG] [Thread-53398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:26:04.169 [DEBUG] [Thread-53398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:26:04.170 [DEBUG] [Thread-53398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:26:04.211 [DEBUG] [Thread-53398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:26:04.211 [DEBUG] [Thread-53398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:26:04.215 [DEBUG] [Thread-53398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:26:04.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:26:04.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:26:04.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:26:04.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:26:04.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:26:04.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:26:04.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:26:04.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:26:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:26:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.392757 -999.00  +19.80  21.36     27   +0.30 1 1 1 1 1   888    0 20.86 91.63 ----- 21.4 21.4 327.2 27.4 27.4 -25.7 26.3 -25.3 25.5 -24.5 26.4 -23.5
2025-11-17T11:26:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:26:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:26:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.392757
2025-11-17T11:26:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:26:04.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:26:04.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:26:04.240 [DEBUG] [Thread-53398] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:26:04.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:26:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:26:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:25:34', tmtdew=22.99, humidity=21.1, cloud=0.0, wind=19.97, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:25:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:26:04.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:26:04.337 [DEBUG] [Thread-53401] [transport.py] [_log()] starting thread (client mode): 0xd31ec5e0
2025-11-17T11:26:04.337 [DEBUG] [Thread-53401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:26:04.352 [DEBUG] [Thread-53401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:26:04.352 [INFO] [Thread-53401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:26:04.359 [DEBUG] [Thread-53401] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:26:04.359 [DEBUG] [Thread-53401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:26:04.359 [DEBUG] [Thread-53401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:26:04.359 [DEBUG] [Thread-53401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:26:04.359 [DEBUG] [Thread-53401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:26:04.359 [DEBUG] [Thread-53401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:26:04.359 [DEBUG] [Thread-53401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] client lang: <none>
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] server lang: <none>
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] kex follows: False
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] Compression: none
2025-11-17T11:26:04.360 [DEBUG] [Thread-53401] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:26:04.421 [DEBUG] [Thread-53401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:26:04.422 [DEBUG] [Thread-53401] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:26:04.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:26:04.423 [DEBUG] [Thread-53401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:26:04.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:26:04.478 [DEBUG] [Thread-53401] [transport.py] [_log()] userauth is OK
2025-11-17T11:26:04.478 [DEBUG] [Thread-53401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:26:04.479 [DEBUG] [Thread-53401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:26:04.479 [DEBUG] [Thread-53401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:26:04.479 [DEBUG] [Thread-53401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:26:04.498 [INFO] [Thread-53401] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:26:04.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:26:04.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:26:05.346 [DEBUG] [Thread-53401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:26:05.346 [DEBUG] [Thread-53401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:26:05.394 [DEBUG] [Thread-53401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:26:05.394 [DEBUG] [Thread-53401] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:26:05.403 [DEBUG] [Thread-53401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:26:05.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:26: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')
2025-11-17T11:26:05.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:26:05.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:26:05.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:26:05.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:26:05.438 [DEBUG] [Thread-53401] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:26:06.689 [DEBUG] [Thread-53403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:26:15.751 [DEBUG] [Thread-53404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:26:30.790 [DEBUG] [Thread-53405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:26:34.250 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:26:34.252 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:26:35.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:26:35.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:26:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:26:36.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 26, 6), 22.91, 21.2, 0.0, 17.43, 20.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:26:36.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:26:06
2025-11-17T11:26:36.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:26:36.378 [DEBUG] [Thread-53406] [transport.py] [_log()] starting thread (client mode): 0xd071be20
2025-11-17T11:26:36.378 [DEBUG] [Thread-53406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:26:36.399 [DEBUG] [Thread-53406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:26:36.399 [INFO] [Thread-53406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] client lang: <none>
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] server lang: <none>
2025-11-17T11:26:36.402 [DEBUG] [Thread-53406] [transport.py] [_log()] kex follows: False
2025-11-17T11:26:36.403 [DEBUG] [Thread-53406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:26:36.403 [DEBUG] [Thread-53406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:26:36.403 [DEBUG] [Thread-53406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:26:36.403 [DEBUG] [Thread-53406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:26:36.403 [DEBUG] [Thread-53406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:26:36.403 [DEBUG] [Thread-53406] [transport.py] [_log()] Compression: none
2025-11-17T11:26:36.403 [DEBUG] [Thread-53406] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:26:36.418 [DEBUG] [Thread-53406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:26:36.419 [DEBUG] [Thread-53406] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:26:36.419 [DEBUG] [Thread-53406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:26:36.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:26:36.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:26:36.421 [DEBUG] [Thread-53406] [transport.py] [_log()] userauth is OK
2025-11-17T11:26:36.422 [DEBUG] [Thread-53406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:26:36.422 [DEBUG] [Thread-53406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:26:36.422 [DEBUG] [Thread-53406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:26:36.422 [DEBUG] [Thread-53406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:26:36.445 [INFO] [Thread-53406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:26:36.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:26:37.077 [DEBUG] [Thread-53406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:26:37.078 [DEBUG] [Thread-53406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:26:37.078 [DEBUG] [Thread-53406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:26:37.119 [DEBUG] [Thread-53406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:26:37.119 [DEBUG] [Thread-53406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:26:37.121 [DEBUG] [Thread-53406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:26:37.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:26:37.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:26:37.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:26:37.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:26:37.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:26:37.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:26:37.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:26:37.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:26:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:26:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.393104 -999.00  +19.30  12.36     27   +0.30 1 1 1 1 1   888    0 20.66 83.90 ----- 12.4 12.4 19.0 14.8 27.5 -24.6 26.4 -24.7 25.5 -22.7 26.4 -23.2
2025-11-17T11:26:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:26:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:26:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.393104
2025-11-17T11:26:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:26:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:26:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:26:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:26:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:26:37.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:26:06', tmtdew=22.91, humidity=21.2, cloud=0.0, wind=17.43, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:26:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:26:37.147 [DEBUG] [Thread-53406] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:26:37.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:26:37.242 [DEBUG] [Thread-53409] [transport.py] [_log()] starting thread (client mode): 0xd0758a60
2025-11-17T11:26:37.243 [DEBUG] [Thread-53409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:26:37.257 [DEBUG] [Thread-53409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:26:37.258 [INFO] [Thread-53409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] client lang: <none>
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] server lang: <none>
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] kex follows: False
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:26:37.265 [DEBUG] [Thread-53409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:26:37.266 [DEBUG] [Thread-53409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:26:37.266 [DEBUG] [Thread-53409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:26:37.266 [DEBUG] [Thread-53409] [transport.py] [_log()] Compression: none
2025-11-17T11:26:37.266 [DEBUG] [Thread-53409] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:26:37.322 [DEBUG] [Thread-53409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:26:37.323 [DEBUG] [Thread-53409] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:26:37.323 [DEBUG] [Thread-53409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:26:37.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:26:37.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:26:37.378 [DEBUG] [Thread-53409] [transport.py] [_log()] userauth is OK
2025-11-17T11:26:37.379 [DEBUG] [Thread-53409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:26:37.379 [DEBUG] [Thread-53409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:26:37.379 [DEBUG] [Thread-53409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:26:37.379 [DEBUG] [Thread-53409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:26:37.398 [INFO] [Thread-53409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:26:37.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:26:37.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:26:38.244 [DEBUG] [Thread-53409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:26:38.244 [DEBUG] [Thread-53409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:26:38.292 [DEBUG] [Thread-53409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:26:38.292 [DEBUG] [Thread-53409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:26:38.301 [DEBUG] [Thread-53409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:26:38.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:26:38.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:26:38.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:26:38.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:26:38.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:26:38.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:26:38.336 [DEBUG] [Thread-53409] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:26:45.816 [DEBUG] [Thread-53411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:27:00.847 [DEBUG] [Thread-53412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:27:06.740 [DEBUG] [Thread-53413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:27:08.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:27:08.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:27:08.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:27:09.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 26, 38), 22.86, 21.19, 0.0, 13.96, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:27:09.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:26:38
2025-11-17T11:27:09.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:27:09.318 [DEBUG] [Thread-53414] [transport.py] [_log()] starting thread (client mode): 0xd31ceda0
2025-11-17T11:27:09.318 [DEBUG] [Thread-53414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:27:09.330 [DEBUG] [Thread-53414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:27:09.330 [INFO] [Thread-53414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:27:09.331 [DEBUG] [Thread-53414] [transport.py] [_log()] client lang: <none>
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] server lang: <none>
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] kex follows: False
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] Compression: none
2025-11-17T11:27:09.332 [DEBUG] [Thread-53414] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:27:09.340 [DEBUG] [Thread-53414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:27:09.341 [DEBUG] [Thread-53414] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:27:09.341 [DEBUG] [Thread-53414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:27:09.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:27:09.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:27:09.342 [DEBUG] [Thread-53414] [transport.py] [_log()] userauth is OK
2025-11-17T11:27:09.342 [DEBUG] [Thread-53414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:27:09.342 [DEBUG] [Thread-53414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:27:09.342 [DEBUG] [Thread-53414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:27:09.342 [DEBUG] [Thread-53414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:27:09.351 [INFO] [Thread-53414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:27:09.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:27:09.958 [DEBUG] [Thread-53414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:27:09.958 [DEBUG] [Thread-53414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:27:09.958 [DEBUG] [Thread-53414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:27:09.999 [DEBUG] [Thread-53414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:27:09.999 [DEBUG] [Thread-53414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:27:10.001 [DEBUG] [Thread-53414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:27:10.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:27:10.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:27:10.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:27:10.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:27:10.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:27:10.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:27:10.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.393451 -999.00  +19.20  19.35     28   +0.30 1 1 1 1 1   888    0 21.05 83.98 ----- 19.4 19.4 19.6 20.8 27.4 -25.7 26.1 -27.1 25.5 -23.7 26.2 -23.7
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.393451
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:27:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:26:38', tmtdew=22.86, humidity=21.19, cloud=0.0, wind=13.96, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:26:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:27:10.017 [DEBUG] [Thread-53414] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:27:10.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:27:10.102 [DEBUG] [Thread-53417] [transport.py] [_log()] starting thread (client mode): 0xd07ce6e0
2025-11-17T11:27:10.102 [DEBUG] [Thread-53417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:27:10.118 [DEBUG] [Thread-53417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:27:10.118 [INFO] [Thread-53417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] client lang: <none>
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] server lang: <none>
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] kex follows: False
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:27:10.125 [DEBUG] [Thread-53417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:27:10.126 [DEBUG] [Thread-53417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:27:10.126 [DEBUG] [Thread-53417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:27:10.126 [DEBUG] [Thread-53417] [transport.py] [_log()] Compression: none
2025-11-17T11:27:10.126 [DEBUG] [Thread-53417] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:27:10.184 [DEBUG] [Thread-53417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:27:10.184 [DEBUG] [Thread-53417] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:27:10.184 [DEBUG] [Thread-53417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:27:10.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:27:10.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:27:10.242 [DEBUG] [Thread-53417] [transport.py] [_log()] userauth is OK
2025-11-17T11:27:10.242 [DEBUG] [Thread-53417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:27:10.242 [DEBUG] [Thread-53417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:27:10.242 [DEBUG] [Thread-53417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:27:10.242 [DEBUG] [Thread-53417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:27:10.257 [INFO] [Thread-53417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:27:10.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:27:10.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:27:11.105 [DEBUG] [Thread-53417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:27:11.105 [DEBUG] [Thread-53417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:27:11.154 [DEBUG] [Thread-53417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:27:11.154 [DEBUG] [Thread-53417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:27:11.162 [DEBUG] [Thread-53417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:27:11.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:27:11.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:27:11.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:27:11.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:27:11.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:27:11.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:27:11.193 [DEBUG] [Thread-53417] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:27:15.873 [DEBUG] [Thread-53419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:27:30.914 [DEBUG] [Thread-53420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:27:34.392 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:27:34.394 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:27:41.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:27:41.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:27:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:27:41.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 27, 10), 22.83, 21.23, 0.0, 11.13, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:27:41.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:27:10
2025-11-17T11:27:41.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:27:42.119 [DEBUG] [Thread-53421] [transport.py] [_log()] starting thread (client mode): 0xd07cfcd0
2025-11-17T11:27:42.119 [DEBUG] [Thread-53421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:27:42.138 [DEBUG] [Thread-53421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:27:42.139 [INFO] [Thread-53421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] client lang: <none>
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] server lang: <none>
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] kex follows: False
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] Compression: none
2025-11-17T11:27:42.142 [DEBUG] [Thread-53421] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:27:42.159 [DEBUG] [Thread-53421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:27:42.159 [DEBUG] [Thread-53421] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:27:42.160 [DEBUG] [Thread-53421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:27:42.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:27:42.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:27:42.162 [DEBUG] [Thread-53421] [transport.py] [_log()] userauth is OK
2025-11-17T11:27:42.162 [DEBUG] [Thread-53421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:27:42.162 [DEBUG] [Thread-53421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:27:42.162 [DEBUG] [Thread-53421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:27:42.162 [DEBUG] [Thread-53421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:27:42.180 [INFO] [Thread-53421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:27:42.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:27:42.814 [DEBUG] [Thread-53421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:27:42.814 [DEBUG] [Thread-53421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:27:42.814 [DEBUG] [Thread-53421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:27:42.855 [DEBUG] [Thread-53421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:27:42.855 [DEBUG] [Thread-53421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:27:42.858 [DEBUG] [Thread-53421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:27:42.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:27:42.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:27:42.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:27:42.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:27:42.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:27:42.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:27:42.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:27:42.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:27:42.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:27:42.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.393798 -999.00  +19.30  15.16     28   +0.30 1 1 1 1 1   888    0 20.74 83.32 ----- 15.2 15.2 19.4 20.5 27.2 -25.4 26.1 -25.1 25.3 -23.3 25.9 -25.9
2025-11-17T11:27:42.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:27:42.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:27:42.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.393798
2025-11-17T11:27:42.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:27:42.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:27:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:27:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:27:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:27:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:27:10', tmtdew=22.83, humidity=21.23, cloud=0.0, wind=11.13, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:27:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:27:42.882 [DEBUG] [Thread-53421] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:27:42.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:27:42.971 [DEBUG] [Thread-53424] [transport.py] [_log()] starting thread (client mode): 0xd0759180
2025-11-17T11:27:42.971 [DEBUG] [Thread-53424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:27:42.986 [DEBUG] [Thread-53424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:27:42.986 [INFO] [Thread-53424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] client lang: <none>
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] server lang: <none>
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] kex follows: False
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:27:42.994 [DEBUG] [Thread-53424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:27:42.995 [DEBUG] [Thread-53424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:27:42.995 [DEBUG] [Thread-53424] [transport.py] [_log()] Compression: none
2025-11-17T11:27:42.995 [DEBUG] [Thread-53424] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:27:43.050 [DEBUG] [Thread-53424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:27:43.051 [DEBUG] [Thread-53424] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:27:43.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:27:43.052 [DEBUG] [Thread-53424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:27:43.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:27:43.106 [DEBUG] [Thread-53424] [transport.py] [_log()] userauth is OK
2025-11-17T11:27:43.106 [DEBUG] [Thread-53424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:27:43.106 [DEBUG] [Thread-53424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:27:43.106 [DEBUG] [Thread-53424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:27:43.106 [DEBUG] [Thread-53424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:27:43.120 [INFO] [Thread-53424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:27:43.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:27:43.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:27:43.955 [DEBUG] [Thread-53424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:27:43.955 [DEBUG] [Thread-53424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:27:44.003 [DEBUG] [Thread-53424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:27:44.003 [DEBUG] [Thread-53424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:27:44.013 [DEBUG] [Thread-53424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:27:44.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:27:44.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:27:44.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
2025-11-17T11:27:44.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:27:44.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:27:44.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:27:44.044 [DEBUG] [Thread-53424] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:27:45.943 [DEBUG] [Thread-53426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:28:00.976 [DEBUG] [Thread-53427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:28:06.801 [DEBUG] [Thread-53428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:28:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:28:14.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:28:14.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:28:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 27, 42), 22.84, 21.25, 0.0, 11.7, 20.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:28:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:27:42
2025-11-17T11:28:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:28:14.957 [DEBUG] [Thread-53429] [transport.py] [_log()] starting thread (client mode): 0xd0786920
2025-11-17T11:28:14.957 [DEBUG] [Thread-53429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:28:14.977 [DEBUG] [Thread-53429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:28:14.978 [INFO] [Thread-53429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] client lang: <none>
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] server lang: <none>
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] kex follows: False
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:28:14.981 [DEBUG] [Thread-53429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:28:14.982 [DEBUG] [Thread-53429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:28:14.982 [DEBUG] [Thread-53429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:28:14.982 [DEBUG] [Thread-53429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:28:14.982 [DEBUG] [Thread-53429] [transport.py] [_log()] Compression: none
2025-11-17T11:28:14.982 [DEBUG] [Thread-53429] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:28:14.998 [DEBUG] [Thread-53429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:28:14.998 [DEBUG] [Thread-53429] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:28:14.999 [DEBUG] [Thread-53429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:28:14.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:28:14.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:28:15.000 [DEBUG] [Thread-53429] [transport.py] [_log()] userauth is OK
2025-11-17T11:28:15.001 [DEBUG] [Thread-53429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:28:15.001 [DEBUG] [Thread-53429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:28:15.001 [DEBUG] [Thread-53429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:28:15.001 [DEBUG] [Thread-53429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:28:15.024 [INFO] [Thread-53429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:28:15.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:28:15.648 [DEBUG] [Thread-53429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:28:15.648 [DEBUG] [Thread-53429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:28:15.649 [DEBUG] [Thread-53429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:28:15.689 [DEBUG] [Thread-53429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:28:15.689 [DEBUG] [Thread-53429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:28:15.692 [DEBUG] [Thread-53429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:28:15.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:28:15.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:28:15.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:28:15.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:28:15.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:28:15.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:28:15.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:28:15.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.394146 -999.00  +19.30  12.89     28   +0.30 1 1 1 1 1   888    0 21.34 88.01 ----- 12.9 12.9 20.0 14.7 27.2 -25.3 26.1 -24.0 25.4 -23.8 26.1 -23.3
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.394146
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:28:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:27:42', tmtdew=22.84, humidity=21.25, cloud=0.0, wind=11.7, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:27:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:28:15.709 [DEBUG] [Thread-53429] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:28:15.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:28:15.798 [DEBUG] [Thread-53432] [transport.py] [_log()] starting thread (client mode): 0xd07ccf40
2025-11-17T11:28:15.798 [DEBUG] [Thread-53432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:28:15.814 [DEBUG] [Thread-53432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:28:15.814 [INFO] [Thread-53432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:28:15.824 [DEBUG] [Thread-53432] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] client lang: <none>
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] server lang: <none>
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] kex follows: False
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] Compression: none
2025-11-17T11:28:15.825 [DEBUG] [Thread-53432] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:28:15.882 [DEBUG] [Thread-53432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:28:15.882 [DEBUG] [Thread-53432] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:28:15.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:28:15.882 [DEBUG] [Thread-53432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:28:15.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:28:15.938 [DEBUG] [Thread-53432] [transport.py] [_log()] userauth is OK
2025-11-17T11:28:15.938 [DEBUG] [Thread-53432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:28:15.938 [DEBUG] [Thread-53432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:28:15.938 [DEBUG] [Thread-53432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:28:15.938 [DEBUG] [Thread-53432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:28:15.953 [INFO] [Thread-53432] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:28:15.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:28:15.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:28:16.008 [DEBUG] [Thread-53434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:28:16.806 [DEBUG] [Thread-53432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:28:16.806 [DEBUG] [Thread-53432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:28:16.857 [DEBUG] [Thread-53432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:28:16.857 [DEBUG] [Thread-53432] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:28:16.868 [DEBUG] [Thread-53432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:28:16.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:28:16.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:28:16.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:28:16.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:28:16.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:28:16.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:28:16.912 [DEBUG] [Thread-53432] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:28:31.038 [DEBUG] [Thread-53435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:28:34.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:28:34.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:28:46.068 [DEBUG] [Thread-53436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:28:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:28:46.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:28:46.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:28:47.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 28, 15), 22.88, 21.22, 0.0, 9.69, 20.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:28:47.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:28:15
2025-11-17T11:28:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:28:47.882 [DEBUG] [Thread-53437] [transport.py] [_log()] starting thread (client mode): 0xd31355d0
2025-11-17T11:28:47.882 [DEBUG] [Thread-53437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:28:47.903 [DEBUG] [Thread-53437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:28:47.903 [INFO] [Thread-53437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] client lang: <none>
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] server lang: <none>
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] kex follows: False
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] Compression: none
2025-11-17T11:28:47.907 [DEBUG] [Thread-53437] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:28:47.927 [DEBUG] [Thread-53437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:28:47.927 [DEBUG] [Thread-53437] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:28:47.927 [DEBUG] [Thread-53437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:28:47.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:28:47.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:28:47.928 [DEBUG] [Thread-53437] [transport.py] [_log()] userauth is OK
2025-11-17T11:28:47.928 [DEBUG] [Thread-53437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:28:47.928 [DEBUG] [Thread-53437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:28:47.928 [DEBUG] [Thread-53437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:28:47.928 [DEBUG] [Thread-53437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:28:47.943 [INFO] [Thread-53437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:28:47.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:28:48.524 [DEBUG] [Thread-53437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:28:48.524 [DEBUG] [Thread-53437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:28:48.524 [DEBUG] [Thread-53437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:28:48.565 [DEBUG] [Thread-53437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:28:48.565 [DEBUG] [Thread-53437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:28:48.567 [DEBUG] [Thread-53437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:28:48.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:28:48.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:28:48.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:28:48.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:28:48.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:28:48.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:28:48.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.394493 -999.00  +19.50   8.90     28   +0.50 1 1 1 1 1   888    0 20.54 81.02 ----- 8.9 8.9 25.2 13.1 27.3 -25.2 26.1 -23.9 25.5 -23.3 26.1 -23.2
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.394493
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:28:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:28:48.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:28:15', tmtdew=22.88, humidity=21.22, cloud=0.0, wind=9.69, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:28:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:28:48.587 [DEBUG] [Thread-53437] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:28:48.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:28:48.675 [DEBUG] [Thread-53440] [transport.py] [_log()] starting thread (client mode): 0xd31cd480
2025-11-17T11:28:48.676 [DEBUG] [Thread-53440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:28:48.690 [DEBUG] [Thread-53440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:28:48.690 [INFO] [Thread-53440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:28:48.697 [DEBUG] [Thread-53440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:28:48.697 [DEBUG] [Thread-53440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:28:48.697 [DEBUG] [Thread-53440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] client lang: <none>
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] server lang: <none>
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] kex follows: False
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] Compression: none
2025-11-17T11:28:48.698 [DEBUG] [Thread-53440] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:28:48.758 [DEBUG] [Thread-53440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:28:48.758 [DEBUG] [Thread-53440] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:28:48.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:28:48.758 [DEBUG] [Thread-53440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:28:48.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:28:48.814 [DEBUG] [Thread-53440] [transport.py] [_log()] userauth is OK
2025-11-17T11:28:48.814 [DEBUG] [Thread-53440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:28:48.814 [DEBUG] [Thread-53440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:28:48.814 [DEBUG] [Thread-53440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:28:48.814 [DEBUG] [Thread-53440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:28:48.828 [INFO] [Thread-53440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:28:48.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:28:48.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:28:49.694 [DEBUG] [Thread-53440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:28:49.694 [DEBUG] [Thread-53440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:28:49.741 [DEBUG] [Thread-53440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:28:49.741 [DEBUG] [Thread-53440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:28:49.750 [DEBUG] [Thread-53440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:28:49.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:28:49.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:28:49.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:28:49.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:28:49.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:28:49.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:28:49.785 [DEBUG] [Thread-53440] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:29:01.097 [DEBUG] [Thread-53442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:29:06.850 [DEBUG] [Thread-53443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:29:16.137 [DEBUG] [Thread-53444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:29:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:29:19.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:29:19.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:29:20.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 28, 46), 22.97, 20.9, 0.0, 9.69, 20.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:29:20.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:28:46
2025-11-17T11:29:20.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:29:20.785 [DEBUG] [Thread-53445] [transport.py] [_log()] starting thread (client mode): 0xd07842b0
2025-11-17T11:29:20.785 [DEBUG] [Thread-53445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:29:20.805 [DEBUG] [Thread-53445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:29:20.805 [INFO] [Thread-53445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:29:20.808 [DEBUG] [Thread-53445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] client lang: <none>
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] server lang: <none>
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] kex follows: False
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] Compression: none
2025-11-17T11:29:20.809 [DEBUG] [Thread-53445] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:29:20.823 [DEBUG] [Thread-53445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:29:20.823 [DEBUG] [Thread-53445] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:29:20.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:29:20.824 [DEBUG] [Thread-53445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:29:20.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:29:20.824 [DEBUG] [Thread-53445] [transport.py] [_log()] userauth is OK
2025-11-17T11:29:20.824 [DEBUG] [Thread-53445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:29:20.824 [DEBUG] [Thread-53445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:29:20.824 [DEBUG] [Thread-53445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:29:20.824 [DEBUG] [Thread-53445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:29:20.839 [INFO] [Thread-53445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:29:20.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:29:21.440 [DEBUG] [Thread-53445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:29:21.440 [DEBUG] [Thread-53445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:29:21.440 [DEBUG] [Thread-53445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:29:21.480 [DEBUG] [Thread-53445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:29:21.480 [DEBUG] [Thread-53445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:29:21.483 [DEBUG] [Thread-53445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:29:21.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:29:21.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:29:21.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:29:21.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:29:21.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:29:21.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:29:21.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:29:21.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:29:21.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:29:21.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.395187 -999.00  +19.90   8.55     27   +0.70 1 2 1 1 1   888    0 20.45 72.07 ----- 8.6 8.6 22.4 18.2 27.5 -25.1 26.4 -23.0 25.7 -22.8 26.4 -23.2
2025-11-17T11:29:21.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:29:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:29:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.395187
2025-11-17T11:29:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:29:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:29:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:29:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:29:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:29:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:28:46', tmtdew=22.97, humidity=20.9, cloud=0.0, wind=9.69, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:29:04.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:29:21.508 [DEBUG] [Thread-53445] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:29:21.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:29:21.603 [DEBUG] [Thread-53448] [transport.py] [_log()] starting thread (client mode): 0xd0787400
2025-11-17T11:29:21.603 [DEBUG] [Thread-53448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:29:21.619 [DEBUG] [Thread-53448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:29:21.619 [INFO] [Thread-53448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:29:21.627 [DEBUG] [Thread-53448] [transport.py] [_log()] client lang: <none>
2025-11-17T11:29:21.636 [DEBUG] [Thread-53448] [transport.py] [_log()] server lang: <none>
2025-11-17T11:29:21.636 [DEBUG] [Thread-53448] [transport.py] [_log()] kex follows: False
2025-11-17T11:29:21.636 [DEBUG] [Thread-53448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:29:21.636 [DEBUG] [Thread-53448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:29:21.636 [DEBUG] [Thread-53448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:29:21.636 [DEBUG] [Thread-53448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:29:21.636 [DEBUG] [Thread-53448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:29:21.637 [DEBUG] [Thread-53448] [transport.py] [_log()] Compression: none
2025-11-17T11:29:21.637 [DEBUG] [Thread-53448] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:29:21.690 [DEBUG] [Thread-53448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:29:21.691 [DEBUG] [Thread-53448] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:29:21.691 [DEBUG] [Thread-53448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:29:21.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:29:21.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:29:21.746 [DEBUG] [Thread-53448] [transport.py] [_log()] userauth is OK
2025-11-17T11:29:21.746 [DEBUG] [Thread-53448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:29:21.747 [DEBUG] [Thread-53448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:29:21.747 [DEBUG] [Thread-53448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:29:21.747 [DEBUG] [Thread-53448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:29:21.766 [INFO] [Thread-53448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:29:21.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:29:21.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:29:22.604 [DEBUG] [Thread-53448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:29:22.604 [DEBUG] [Thread-53448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:29:22.652 [DEBUG] [Thread-53448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:29:22.653 [DEBUG] [Thread-53448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:29:22.661 [DEBUG] [Thread-53448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:29:22.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:29:22.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:29:22.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:29:22.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:29:22.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:29:22.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:29:22.696 [DEBUG] [Thread-53448] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:29:31.166 [DEBUG] [Thread-53450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:29:34.676 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:29:34.677 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:29:46.207 [DEBUG] [Thread-53451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:29:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:29:52.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:29:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:29:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 29, 19), 23.05, 20.8, 0.0, 11.42, 20.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:29:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:29:19
2025-11-17T11:29:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:29:53.658 [DEBUG] [Thread-53452] [transport.py] [_log()] starting thread (client mode): 0xd7bc7100
2025-11-17T11:29:53.658 [DEBUG] [Thread-53452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:29:53.678 [DEBUG] [Thread-53452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:29:53.679 [INFO] [Thread-53452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:29:53.682 [DEBUG] [Thread-53452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:29:53.682 [DEBUG] [Thread-53452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:29:53.682 [DEBUG] [Thread-53452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:29:53.682 [DEBUG] [Thread-53452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:29:53.682 [DEBUG] [Thread-53452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] client lang: <none>
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] server lang: <none>
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] kex follows: False
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] Compression: none
2025-11-17T11:29:53.683 [DEBUG] [Thread-53452] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:29:53.702 [DEBUG] [Thread-53452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:29:53.702 [DEBUG] [Thread-53452] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:29:53.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:29:53.703 [DEBUG] [Thread-53452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:29:53.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:29:53.705 [DEBUG] [Thread-53452] [transport.py] [_log()] userauth is OK
2025-11-17T11:29:53.705 [DEBUG] [Thread-53452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:29:53.705 [DEBUG] [Thread-53452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:29:53.705 [DEBUG] [Thread-53452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:29:53.705 [DEBUG] [Thread-53452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:29:53.727 [INFO] [Thread-53452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:29:53.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:29:54.381 [DEBUG] [Thread-53452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:29:54.381 [DEBUG] [Thread-53452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:29:54.381 [DEBUG] [Thread-53452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:29:54.422 [DEBUG] [Thread-53452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:29:54.423 [DEBUG] [Thread-53452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:29:54.426 [DEBUG] [Thread-53452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:29:54.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:29:54.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:29:54.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:29:54.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:29:54.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:29:54.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:29:54.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:29:54.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:29:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:29:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.395534 -999.00  +20.10   5.86     27   +0.90 1 1 1 1 1   888    0 20.56 76.90 ----- 5.9 5.9 22.8 11.7 27.6 -24.3 26.5 -24.1 25.7 -22.5 26.5 -22.7
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.395534
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:29:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:29:19', tmtdew=23.05, humidity=20.8, cloud=0.0, wind=11.42, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:29:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:29:54.446 [DEBUG] [Thread-53452] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:29:54.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:29:54.531 [DEBUG] [Thread-53455] [transport.py] [_log()] starting thread (client mode): 0xd0784070
2025-11-17T11:29:54.531 [DEBUG] [Thread-53455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:29:54.546 [DEBUG] [Thread-53455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:29:54.546 [INFO] [Thread-53455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] client lang: <none>
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] server lang: <none>
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] kex follows: False
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:29:54.554 [DEBUG] [Thread-53455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:29:54.555 [DEBUG] [Thread-53455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:29:54.555 [DEBUG] [Thread-53455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:29:54.555 [DEBUG] [Thread-53455] [transport.py] [_log()] Compression: none
2025-11-17T11:29:54.555 [DEBUG] [Thread-53455] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:29:54.614 [DEBUG] [Thread-53455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:29:54.614 [DEBUG] [Thread-53455] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:29:54.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:29:54.615 [DEBUG] [Thread-53455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:29:54.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:29:54.670 [DEBUG] [Thread-53455] [transport.py] [_log()] userauth is OK
2025-11-17T11:29:54.670 [DEBUG] [Thread-53455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:29:54.670 [DEBUG] [Thread-53455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:29:54.670 [DEBUG] [Thread-53455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:29:54.670 [DEBUG] [Thread-53455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:29:54.690 [INFO] [Thread-53455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:29:54.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:29:54.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:29:55.535 [DEBUG] [Thread-53455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:29:55.535 [DEBUG] [Thread-53455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:29:55.583 [DEBUG] [Thread-53455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:29:55.583 [DEBUG] [Thread-53455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:29:55.592 [DEBUG] [Thread-53455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:29:55.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:29:55.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:29:55.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:29:55.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:29:55.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:29:55.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:29:55.627 [DEBUG] [Thread-53455] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:30:01.241 [DEBUG] [Thread-53457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:30:06.897 [DEBUG] [Thread-53458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:30:16.281 [DEBUG] [Thread-53459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:30:25.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:30:25.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:30:25.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:30:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 30, 23), 23.43, 20.59, 0.0, 15.77, 20.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:30:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:30:23
2025-11-17T11:30:26.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:30:26.579 [DEBUG] [Thread-53460] [transport.py] [_log()] starting thread (client mode): 0xd3150d60
2025-11-17T11:30:26.579 [DEBUG] [Thread-53460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:30:26.600 [DEBUG] [Thread-53460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:30:26.600 [INFO] [Thread-53460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:30:26.603 [DEBUG] [Thread-53460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:30:26.603 [DEBUG] [Thread-53460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:30:26.603 [DEBUG] [Thread-53460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:30:26.603 [DEBUG] [Thread-53460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:30:26.603 [DEBUG] [Thread-53460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:30:26.603 [DEBUG] [Thread-53460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] client lang: <none>
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] server lang: <none>
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] kex follows: False
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] Compression: none
2025-11-17T11:30:26.604 [DEBUG] [Thread-53460] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:30:26.623 [DEBUG] [Thread-53460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:30:26.624 [DEBUG] [Thread-53460] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:30:26.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:30:26.625 [DEBUG] [Thread-53460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:30:26.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:30:26.627 [DEBUG] [Thread-53460] [transport.py] [_log()] userauth is OK
2025-11-17T11:30:26.627 [DEBUG] [Thread-53460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:30:26.627 [DEBUG] [Thread-53460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:30:26.627 [DEBUG] [Thread-53460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:30:26.627 [DEBUG] [Thread-53460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:30:26.651 [INFO] [Thread-53460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:30:26.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:30:27.297 [DEBUG] [Thread-53460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:30:27.298 [DEBUG] [Thread-53460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:30:27.298 [DEBUG] [Thread-53460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:30:27.338 [DEBUG] [Thread-53460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:30:27.338 [DEBUG] [Thread-53460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:30:27.340 [DEBUG] [Thread-53460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:30:27.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:30:27.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:30:27.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:30:27.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:30:27.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:30:27.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:30:27.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:30:27.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:30:27.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:30:27.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.395881 -999.00  +20.10  14.31     27   +0.60 1 1 1 1 1   888    0 20.70 72.33 ----- 14.3 14.3 309.0 15.2 27.6 -24.6 26.6 -24.3 25.7 -22.8 26.6 -23.7
2025-11-17T11:30:27.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:30:27.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:30:27.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.395881
2025-11-17T11:30:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:30:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:30:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:30:27.366 [DEBUG] [Thread-53460] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:30:27.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:30:27.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:30:27.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:30:23', tmtdew=23.43, humidity=20.59, cloud=0.0, wind=15.77, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:30:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:30:27.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:30:27.456 [DEBUG] [Thread-53463] [transport.py] [_log()] starting thread (client mode): 0xd3150a60
2025-11-17T11:30:27.456 [DEBUG] [Thread-53463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:30:27.471 [DEBUG] [Thread-53463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:30:27.471 [INFO] [Thread-53463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:30:27.478 [DEBUG] [Thread-53463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] client lang: <none>
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] server lang: <none>
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] kex follows: False
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] Compression: none
2025-11-17T11:30:27.479 [DEBUG] [Thread-53463] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:30:27.538 [DEBUG] [Thread-53463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:30:27.538 [DEBUG] [Thread-53463] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:30:27.539 [DEBUG] [Thread-53463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:30:27.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:30:27.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:30:27.598 [DEBUG] [Thread-53463] [transport.py] [_log()] userauth is OK
2025-11-17T11:30:27.598 [DEBUG] [Thread-53463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:30:27.598 [DEBUG] [Thread-53463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:30:27.598 [DEBUG] [Thread-53463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:30:27.598 [DEBUG] [Thread-53463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:30:27.618 [INFO] [Thread-53463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:30:27.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:30:27.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:30:28.491 [DEBUG] [Thread-53463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:30:28.492 [DEBUG] [Thread-53463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:30:28.539 [DEBUG] [Thread-53463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:30:28.539 [DEBUG] [Thread-53463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:30:28.550 [DEBUG] [Thread-53463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:30:28.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:30:28.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:30:28.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:30:28.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:30:28.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:30:28.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:30:28.588 [DEBUG] [Thread-53463] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:30:31.312 [DEBUG] [Thread-53465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:30:34.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:30:34.819 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:30:46.364 [DEBUG] [Thread-53466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:30:58.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:30:58.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:30:58.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:30:59.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 30, 55), 23.14, 20.84, 0.0, 10.38, 20.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:30:59.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:30:55
2025-11-17T11:30:59.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:30:59.555 [DEBUG] [Thread-53467] [transport.py] [_log()] starting thread (client mode): 0xd07594e0
2025-11-17T11:30:59.555 [DEBUG] [Thread-53467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:30:59.574 [DEBUG] [Thread-53467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:30:59.574 [INFO] [Thread-53467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:30:59.577 [DEBUG] [Thread-53467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:30:59.577 [DEBUG] [Thread-53467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:30:59.577 [DEBUG] [Thread-53467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:30:59.577 [DEBUG] [Thread-53467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:30:59.577 [DEBUG] [Thread-53467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:30:59.577 [DEBUG] [Thread-53467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:30:59.577 [DEBUG] [Thread-53467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] client lang: <none>
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] server lang: <none>
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] kex follows: False
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] Compression: none
2025-11-17T11:30:59.578 [DEBUG] [Thread-53467] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:30:59.595 [DEBUG] [Thread-53467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:30:59.595 [DEBUG] [Thread-53467] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:30:59.595 [DEBUG] [Thread-53467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:30:59.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:30:59.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:30:59.596 [DEBUG] [Thread-53467] [transport.py] [_log()] userauth is OK
2025-11-17T11:30:59.596 [DEBUG] [Thread-53467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:30:59.596 [DEBUG] [Thread-53467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:30:59.596 [DEBUG] [Thread-53467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:30:59.596 [DEBUG] [Thread-53467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:30:59.606 [INFO] [Thread-53467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:30:59.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:31:00.227 [DEBUG] [Thread-53467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:31:00.227 [DEBUG] [Thread-53467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:31:00.227 [DEBUG] [Thread-53467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:31:00.268 [DEBUG] [Thread-53467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:31:00.268 [DEBUG] [Thread-53467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:31:00.270 [DEBUG] [Thread-53467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:31:00.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:31:00.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:31:00.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:31:00.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:31:00.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:31:00.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:31:00.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.396229 -999.00  +19.90   9.53     27   +0.50 1 1 1 1 1   888    0 21.06 73.66 ----- 9.5 9.5 352.4 16.3 27.7 -24.8 26.4 -24.2 25.8 -22.8 26.6 -24.2
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.396229
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:31:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:30:55', tmtdew=23.14, humidity=20.84, cloud=0.0, wind=10.38, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:30:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:31:00.290 [DEBUG] [Thread-53467] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:31:00.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:31:00.375 [DEBUG] [Thread-53470] [transport.py] [_log()] starting thread (client mode): 0xd31ee680
2025-11-17T11:31:00.375 [DEBUG] [Thread-53470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:31:00.394 [DEBUG] [Thread-53470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:31:00.394 [INFO] [Thread-53470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] client lang: <none>
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] server lang: <none>
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] kex follows: False
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] Compression: none
2025-11-17T11:31:00.402 [DEBUG] [Thread-53470] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:31:00.457 [DEBUG] [Thread-53470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:31:00.457 [DEBUG] [Thread-53470] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:31:00.457 [DEBUG] [Thread-53470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:31:00.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:31:00.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:31:00.518 [DEBUG] [Thread-53470] [transport.py] [_log()] userauth is OK
2025-11-17T11:31:00.518 [DEBUG] [Thread-53470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:31:00.518 [DEBUG] [Thread-53470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:31:00.518 [DEBUG] [Thread-53470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:31:00.518 [DEBUG] [Thread-53470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:31:00.532 [INFO] [Thread-53470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:31:00.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:31:00.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:31:01.389 [DEBUG] [Thread-53470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:31:01.389 [DEBUG] [Thread-53470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:31:01.390 [DEBUG] [Thread-53472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:31:01.437 [DEBUG] [Thread-53470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:31:01.437 [DEBUG] [Thread-53470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:31:01.450 [DEBUG] [Thread-53470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:31:01.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:31:01.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:31:01.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:31:01.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:31:01.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:31:01.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:31:01.481 [DEBUG] [Thread-53470] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:31:06.940 [DEBUG] [Thread-53473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:31:16.421 [DEBUG] [Thread-53474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:31:31.454 [DEBUG] [Thread-53475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:31:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:31:31.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:31:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:31:32.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 31, 27), 22.97, 21.04, 0.0, 11.19, 20.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:31:32.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:31:27
2025-11-17T11:31:32.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:31:32.406 [DEBUG] [Thread-53476] [transport.py] [_log()] starting thread (client mode): 0xd317ccd0
2025-11-17T11:31:32.406 [DEBUG] [Thread-53476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:31:32.426 [DEBUG] [Thread-53476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:31:32.426 [INFO] [Thread-53476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] client lang: <none>
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] server lang: <none>
2025-11-17T11:31:32.430 [DEBUG] [Thread-53476] [transport.py] [_log()] kex follows: False
2025-11-17T11:31:32.431 [DEBUG] [Thread-53476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:31:32.431 [DEBUG] [Thread-53476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:31:32.431 [DEBUG] [Thread-53476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:31:32.431 [DEBUG] [Thread-53476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:31:32.431 [DEBUG] [Thread-53476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:31:32.431 [DEBUG] [Thread-53476] [transport.py] [_log()] Compression: none
2025-11-17T11:31:32.431 [DEBUG] [Thread-53476] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:31:32.449 [DEBUG] [Thread-53476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:31:32.450 [DEBUG] [Thread-53476] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:31:32.450 [DEBUG] [Thread-53476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:31:32.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:31:32.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:31:32.452 [DEBUG] [Thread-53476] [transport.py] [_log()] userauth is OK
2025-11-17T11:31:32.452 [DEBUG] [Thread-53476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:31:32.452 [DEBUG] [Thread-53476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:31:32.452 [DEBUG] [Thread-53476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:31:32.452 [DEBUG] [Thread-53476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:31:32.487 [INFO] [Thread-53476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:31:32.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:31:33.111 [DEBUG] [Thread-53476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:31:33.111 [DEBUG] [Thread-53476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:31:33.112 [DEBUG] [Thread-53476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:31:33.152 [DEBUG] [Thread-53476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:31:33.152 [DEBUG] [Thread-53476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:31:33.155 [DEBUG] [Thread-53476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:31:33.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:31:33.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:31:33.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:31:33.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:31:33.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:31:33.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:31:33.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:31:33.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:31:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:31:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.396576 -999.00  +20.20  13.17     27   +0.90 1 1 1 1 1   888    0 20.68 69.07 ----- 13.2 13.2 65.2 18.4 27.6 -24.8 26.5 -23.5 25.6 -23.2 26.4 -25.5
2025-11-17T11:31:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:31:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:31:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.396576
2025-11-17T11:31:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:31:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:31:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:31:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:31:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:31:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:31:27', tmtdew=22.97, humidity=21.04, cloud=0.0, wind=11.19, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:31:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:31:33.179 [DEBUG] [Thread-53476] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:31:33.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:31:33.275 [DEBUG] [Thread-53479] [transport.py] [_log()] starting thread (client mode): 0xd0787c10
2025-11-17T11:31:33.275 [DEBUG] [Thread-53479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:31:33.290 [DEBUG] [Thread-53479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:31:33.290 [INFO] [Thread-53479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] client lang: <none>
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] server lang: <none>
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] kex follows: False
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:31:33.298 [DEBUG] [Thread-53479] [transport.py] [_log()] Compression: none
2025-11-17T11:31:33.299 [DEBUG] [Thread-53479] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:31:33.357 [DEBUG] [Thread-53479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:31:33.358 [DEBUG] [Thread-53479] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:31:33.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:31:33.359 [DEBUG] [Thread-53479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:31:33.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:31:33.414 [DEBUG] [Thread-53479] [transport.py] [_log()] userauth is OK
2025-11-17T11:31:33.414 [DEBUG] [Thread-53479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:31:33.414 [DEBUG] [Thread-53479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:31:33.414 [DEBUG] [Thread-53479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:31:33.414 [DEBUG] [Thread-53479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:31:33.437 [INFO] [Thread-53479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:31:33.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:31:33.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:31:34.273 [DEBUG] [Thread-53479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:31:34.273 [DEBUG] [Thread-53479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:31:34.320 [DEBUG] [Thread-53479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:31:34.320 [DEBUG] [Thread-53479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:31:34.329 [DEBUG] [Thread-53479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:31:34.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:31: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')
2025-11-17T11:31:34.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:31:34.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:31:34.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:31:34.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:31:34.362 [DEBUG] [Thread-53479] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:31:34.959 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:31:34.961 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:31:46.491 [DEBUG] [Thread-53481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:32:01.535 [DEBUG] [Thread-53482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:32:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:32:04.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:32:04.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:32:05.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 31, 59), 22.72, 21.17, 0.0, 14.04, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:32:05.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:31:59
2025-11-17T11:32:05.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:32:05.297 [DEBUG] [Thread-53483] [transport.py] [_log()] starting thread (client mode): 0xd0759900
2025-11-17T11:32:05.297 [DEBUG] [Thread-53483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:32:05.318 [DEBUG] [Thread-53483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:32:05.318 [INFO] [Thread-53483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:32:05.321 [DEBUG] [Thread-53483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] client lang: <none>
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] server lang: <none>
2025-11-17T11:32:05.322 [DEBUG] [Thread-53483] [transport.py] [_log()] kex follows: False
2025-11-17T11:32:05.323 [DEBUG] [Thread-53483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:32:05.323 [DEBUG] [Thread-53483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:32:05.323 [DEBUG] [Thread-53483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:32:05.323 [DEBUG] [Thread-53483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:32:05.323 [DEBUG] [Thread-53483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:32:05.323 [DEBUG] [Thread-53483] [transport.py] [_log()] Compression: none
2025-11-17T11:32:05.323 [DEBUG] [Thread-53483] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:32:05.343 [DEBUG] [Thread-53483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:32:05.344 [DEBUG] [Thread-53483] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:32:05.344 [DEBUG] [Thread-53483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:32:05.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:32:05.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:32:05.346 [DEBUG] [Thread-53483] [transport.py] [_log()] userauth is OK
2025-11-17T11:32:05.346 [DEBUG] [Thread-53483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:32:05.346 [DEBUG] [Thread-53483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:32:05.346 [DEBUG] [Thread-53483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:32:05.346 [DEBUG] [Thread-53483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:32:05.382 [INFO] [Thread-53483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:32:05.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:32:05.961 [DEBUG] [Thread-53483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:32:05.961 [DEBUG] [Thread-53483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:32:05.962 [DEBUG] [Thread-53483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:32:06.002 [DEBUG] [Thread-53483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:32:06.003 [DEBUG] [Thread-53483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:32:06.005 [DEBUG] [Thread-53483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:32:06.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:32:06.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:32:06.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:32:06.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:32:06.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:32:06.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:32:06.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:32:06.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:32:06.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:32:06.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.396924 -999.00  +20.10  11.35     27   +0.70 1 1 1 1 1   888    0 21.02 74.66 ----- 11.3 11.3 66.6 13.5 27.6 -25.3 26.5 -23.7 25.8 -23.9 26.6 -24.3
2025-11-17T11:32:06.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:32:06.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:32:06.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.396924
2025-11-17T11:32:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:32:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:32:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:32:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:32:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:32:06.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:31:59', tmtdew=22.72, humidity=21.17, cloud=0.0, wind=14.04, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:31:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:32:06.031 [DEBUG] [Thread-53483] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:32:06.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:32:06.126 [DEBUG] [Thread-53486] [transport.py] [_log()] starting thread (client mode): 0xd0785b40
2025-11-17T11:32:06.126 [DEBUG] [Thread-53486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:32:06.143 [DEBUG] [Thread-53486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:32:06.143 [INFO] [Thread-53486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:32:06.150 [DEBUG] [Thread-53486] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:32:06.150 [DEBUG] [Thread-53486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:32:06.150 [DEBUG] [Thread-53486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:32:06.150 [DEBUG] [Thread-53486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] client lang: <none>
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] server lang: <none>
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] kex follows: False
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] Compression: none
2025-11-17T11:32:06.151 [DEBUG] [Thread-53486] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:32:06.210 [DEBUG] [Thread-53486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:32:06.211 [DEBUG] [Thread-53486] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:32:06.211 [DEBUG] [Thread-53486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:32:06.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:32:06.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:32:06.266 [DEBUG] [Thread-53486] [transport.py] [_log()] userauth is OK
2025-11-17T11:32:06.266 [DEBUG] [Thread-53486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:32:06.266 [DEBUG] [Thread-53486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:32:06.267 [DEBUG] [Thread-53486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:32:06.267 [DEBUG] [Thread-53486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:32:06.286 [INFO] [Thread-53486] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:32:06.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:32:06.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:32:06.976 [DEBUG] [Thread-53488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:32:07.179 [DEBUG] [Thread-53486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:32:07.179 [DEBUG] [Thread-53486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:32:07.227 [DEBUG] [Thread-53486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:32:07.228 [DEBUG] [Thread-53486] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:32:07.237 [DEBUG] [Thread-53486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:32:07.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:32:07.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:32:07.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:32:07.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:32:07.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:32:07.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:32:07.271 [DEBUG] [Thread-53486] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:32:16.563 [DEBUG] [Thread-53489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:32:31.595 [DEBUG] [Thread-53490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:32:35.101 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:32:35.101 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:32:37.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:32:37.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:32:37.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:32:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 32, 31), 23.0, 20.8, 0.0, 13.6, 20.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:32:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:32:31
2025-11-17T11:32:38.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:32:38.207 [DEBUG] [Thread-53491] [transport.py] [_log()] starting thread (client mode): 0xd31ecbb0
2025-11-17T11:32:38.207 [DEBUG] [Thread-53491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:32:38.226 [DEBUG] [Thread-53491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:32:38.227 [INFO] [Thread-53491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] client lang: <none>
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] server lang: <none>
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] kex follows: False
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] Compression: none
2025-11-17T11:32:38.230 [DEBUG] [Thread-53491] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:32:38.238 [DEBUG] [Thread-53491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:32:38.239 [DEBUG] [Thread-53491] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:32:38.239 [DEBUG] [Thread-53491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:32:38.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:32:38.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:32:38.241 [DEBUG] [Thread-53491] [transport.py] [_log()] userauth is OK
2025-11-17T11:32:38.241 [DEBUG] [Thread-53491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:32:38.241 [DEBUG] [Thread-53491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:32:38.241 [DEBUG] [Thread-53491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:32:38.241 [DEBUG] [Thread-53491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:32:38.276 [INFO] [Thread-53491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:32:38.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:32:38.960 [DEBUG] [Thread-53491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:32:38.960 [DEBUG] [Thread-53491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:32:38.960 [DEBUG] [Thread-53491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:32:39.001 [DEBUG] [Thread-53491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:32:39.002 [DEBUG] [Thread-53491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:32:39.004 [DEBUG] [Thread-53491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:32:39.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:32:39.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:32:39.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:32:39.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:32:39.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:32:39.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:32:39.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:32:39.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:32:39.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:32:39.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.397271 -999.00  +20.00  14.77     27   +0.50 1 1 1 1 1   888    0 21.41 80.66 ----- 14.8 14.8 53.2 18.0 27.6 -25.2 26.4 -25.8 25.8 -23.8 26.6 -24.1
2025-11-17T11:32:39.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:32:39.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:32:39.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.397271
2025-11-17T11:32:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:32:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:32:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:32:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:32:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:32:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:32:31', tmtdew=23.0, humidity=20.8, cloud=0.0, wind=13.6, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:32:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:32:39.032 [DEBUG] [Thread-53491] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:32:39.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:32:39.127 [DEBUG] [Thread-53494] [transport.py] [_log()] starting thread (client mode): 0xd07594b0
2025-11-17T11:32:39.127 [DEBUG] [Thread-53494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:32:39.143 [DEBUG] [Thread-53494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:32:39.143 [INFO] [Thread-53494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:32:39.150 [DEBUG] [Thread-53494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:32:39.150 [DEBUG] [Thread-53494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:32:39.150 [DEBUG] [Thread-53494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] client lang: <none>
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] server lang: <none>
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] kex follows: False
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] Compression: none
2025-11-17T11:32:39.151 [DEBUG] [Thread-53494] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:32:39.210 [DEBUG] [Thread-53494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:32:39.210 [DEBUG] [Thread-53494] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:32:39.211 [DEBUG] [Thread-53494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:32:39.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:32:39.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:32:39.268 [DEBUG] [Thread-53494] [transport.py] [_log()] userauth is OK
2025-11-17T11:32:39.268 [DEBUG] [Thread-53494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:32:39.269 [DEBUG] [Thread-53494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:32:39.269 [DEBUG] [Thread-53494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:32:39.269 [DEBUG] [Thread-53494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:32:39.290 [INFO] [Thread-53494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:32:39.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:32:39.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:32:40.180 [DEBUG] [Thread-53494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:32:40.181 [DEBUG] [Thread-53494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:32:40.228 [DEBUG] [Thread-53494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:32:40.228 [DEBUG] [Thread-53494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:32:40.237 [DEBUG] [Thread-53494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:32:40.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:32:40.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:32:40.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:32:40.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:32:40.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:32:40.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:32:40.272 [DEBUG] [Thread-53494] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:32:46.628 [DEBUG] [Thread-53496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:33:01.669 [DEBUG] [Thread-53497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:33:07.035 [DEBUG] [Thread-53498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:33:10.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:33:10.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:33:10.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:33:10.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 33, 2), 22.86, 21.0, 0.0, 16.64, 20.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:33:10.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:33:02
2025-11-17T11:33:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:33:11.222 [DEBUG] [Thread-53499] [transport.py] [_log()] starting thread (client mode): 0xd0758ac0
2025-11-17T11:33:11.222 [DEBUG] [Thread-53499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:33:11.236 [DEBUG] [Thread-53499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:33:11.237 [INFO] [Thread-53499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:33:11.238 [DEBUG] [Thread-53499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:33:11.238 [DEBUG] [Thread-53499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] client lang: <none>
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] server lang: <none>
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] kex follows: False
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] Compression: none
2025-11-17T11:33:11.239 [DEBUG] [Thread-53499] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:33:11.249 [DEBUG] [Thread-53499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:33:11.250 [DEBUG] [Thread-53499] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:33:11.250 [DEBUG] [Thread-53499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:33:11.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:33:11.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:33:11.251 [DEBUG] [Thread-53499] [transport.py] [_log()] userauth is OK
2025-11-17T11:33:11.252 [DEBUG] [Thread-53499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:33:11.252 [DEBUG] [Thread-53499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:33:11.252 [DEBUG] [Thread-53499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:33:11.252 [DEBUG] [Thread-53499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:33:11.274 [INFO] [Thread-53499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:33:11.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:33:11.848 [DEBUG] [Thread-53499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:33:11.848 [DEBUG] [Thread-53499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:33:11.849 [DEBUG] [Thread-53499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:33:11.889 [DEBUG] [Thread-53499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:33:11.889 [DEBUG] [Thread-53499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:33:11.891 [DEBUG] [Thread-53499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:33:11.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:33:11.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:33:11.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:33:11.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:33:11.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:33:11.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:33:11.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:33:11.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:33:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:33:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.397618 -999.00  +20.20  25.87     27   +0.80 1 1 1 1 1   888    0 21.10 77.74 ----- 25.9 25.9 313.6 27.6 27.4 -27.2 26.4 -23.6 25.7 -24.8 26.5 -24.3
2025-11-17T11:33:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:33:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:33:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.397618
2025-11-17T11:33:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:33:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:33:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:33:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:33:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:33:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:33:02', tmtdew=22.86, humidity=21.0, cloud=0.0, wind=16.64, temperature=20.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:32:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:33:11.914 [DEBUG] [Thread-53499] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:33:12.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:33:12.012 [DEBUG] [Thread-53502] [transport.py] [_log()] starting thread (client mode): 0xd31521d0
2025-11-17T11:33:12.012 [DEBUG] [Thread-53502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:33:12.026 [DEBUG] [Thread-53502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:33:12.027 [INFO] [Thread-53502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] client lang: <none>
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] server lang: <none>
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] kex follows: False
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:33:12.034 [DEBUG] [Thread-53502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:33:12.035 [DEBUG] [Thread-53502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:33:12.035 [DEBUG] [Thread-53502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:33:12.035 [DEBUG] [Thread-53502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:33:12.035 [DEBUG] [Thread-53502] [transport.py] [_log()] Compression: none
2025-11-17T11:33:12.035 [DEBUG] [Thread-53502] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:33:12.098 [DEBUG] [Thread-53502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:33:12.098 [DEBUG] [Thread-53502] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:33:12.099 [DEBUG] [Thread-53502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:33:12.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:33:12.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:33:12.154 [DEBUG] [Thread-53502] [transport.py] [_log()] userauth is OK
2025-11-17T11:33:12.154 [DEBUG] [Thread-53502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:33:12.155 [DEBUG] [Thread-53502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:33:12.155 [DEBUG] [Thread-53502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:33:12.155 [DEBUG] [Thread-53502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:33:12.178 [INFO] [Thread-53502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:33:12.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:33:12.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:33:13.048 [DEBUG] [Thread-53502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:33:13.048 [DEBUG] [Thread-53502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:33:13.095 [DEBUG] [Thread-53502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:33:13.095 [DEBUG] [Thread-53502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:33:13.104 [DEBUG] [Thread-53502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:33:13.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:33:13.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:33:13.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:33:13.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:33:13.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:33:13.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:33:13.137 [DEBUG] [Thread-53502] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:33:16.700 [DEBUG] [Thread-53504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:33:31.751 [DEBUG] [Thread-53505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:33:35.242 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:33:35.243 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:33:43.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:33:43.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:33:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:33:43.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 33, 35), 23.2, 20.87, 0.0, 22.32, 20.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:33:43.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:33:35
2025-11-17T11:33:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:33:44.057 [DEBUG] [Thread-53506] [transport.py] [_log()] starting thread (client mode): 0xd0759330
2025-11-17T11:33:44.058 [DEBUG] [Thread-53506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:33:44.075 [DEBUG] [Thread-53506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:33:44.075 [INFO] [Thread-53506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:33:44.076 [DEBUG] [Thread-53506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:33:44.076 [DEBUG] [Thread-53506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] client lang: <none>
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] server lang: <none>
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] kex follows: False
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] Compression: none
2025-11-17T11:33:44.077 [DEBUG] [Thread-53506] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:33:44.096 [DEBUG] [Thread-53506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:33:44.097 [DEBUG] [Thread-53506] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:33:44.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:33:44.097 [DEBUG] [Thread-53506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:33:44.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:33:44.099 [DEBUG] [Thread-53506] [transport.py] [_log()] userauth is OK
2025-11-17T11:33:44.100 [DEBUG] [Thread-53506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:33:44.100 [DEBUG] [Thread-53506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:33:44.100 [DEBUG] [Thread-53506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:33:44.100 [DEBUG] [Thread-53506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:33:44.119 [INFO] [Thread-53506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:33:44.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:33:44.736 [DEBUG] [Thread-53506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:33:44.736 [DEBUG] [Thread-53506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:33:44.736 [DEBUG] [Thread-53506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:33:44.777 [DEBUG] [Thread-53506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:33:44.777 [DEBUG] [Thread-53506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:33:44.781 [DEBUG] [Thread-53506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:33:44.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:33:44.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:33:44.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:33:44.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:33:44.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:33:44.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:33:44.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:33:44.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:33:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:33:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.398312 -999.00  +20.20  19.18     26   +0.40 1 1 1 1 1   888    0 20.94 72.31 ----- 19.2 19.2 322.0 29.1 27.4 -25.4 26.4 -24.7 25.8 -23.4 26.6 -23.8
2025-11-17T11:33:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:33:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:33:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.398312
2025-11-17T11:33:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:33:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:33:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:33:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:33:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:33:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:33:35', tmtdew=23.2, humidity=20.87, cloud=0.0, wind=22.32, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:33:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:33:44.807 [DEBUG] [Thread-53506] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:33:44.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:33:44.903 [DEBUG] [Thread-53509] [transport.py] [_log()] starting thread (client mode): 0xd0719fc0
2025-11-17T11:33:44.904 [DEBUG] [Thread-53509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:33:44.920 [DEBUG] [Thread-53509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:33:44.920 [INFO] [Thread-53509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] client lang: <none>
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] server lang: <none>
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] kex follows: False
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:33:44.928 [DEBUG] [Thread-53509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:33:44.929 [DEBUG] [Thread-53509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:33:44.929 [DEBUG] [Thread-53509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:33:44.929 [DEBUG] [Thread-53509] [transport.py] [_log()] Compression: none
2025-11-17T11:33:44.929 [DEBUG] [Thread-53509] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:33:44.991 [DEBUG] [Thread-53509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:33:44.991 [DEBUG] [Thread-53509] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:33:44.992 [DEBUG] [Thread-53509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:33:44.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:33:44.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:33:45.046 [DEBUG] [Thread-53509] [transport.py] [_log()] userauth is OK
2025-11-17T11:33:45.047 [DEBUG] [Thread-53509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:33:45.047 [DEBUG] [Thread-53509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:33:45.047 [DEBUG] [Thread-53509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:33:45.047 [DEBUG] [Thread-53509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:33:45.066 [INFO] [Thread-53509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11: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
2025-11-17T11:33:45.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:33:45.934 [DEBUG] [Thread-53509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:33:45.935 [DEBUG] [Thread-53509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:33:45.982 [DEBUG] [Thread-53509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:33:45.982 [DEBUG] [Thread-53509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:33:45.992 [DEBUG] [Thread-53509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:33:46.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:33:46.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')
2025-11-17T11:33:46.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:33:46.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:33:46.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:33:46.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:33:46.027 [DEBUG] [Thread-53509] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:33:46.780 [DEBUG] [Thread-53511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:34:01.830 [DEBUG] [Thread-53512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:34:07.082 [DEBUG] [Thread-53513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:34:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:34:16.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:34:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:34:16.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 34, 7), 23.25, 20.77, 0.0, 21.24, 20.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:34:16.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:34:07
2025-11-17T11:34:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:34:16.864 [DEBUG] [Thread-53514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:34:16.985 [DEBUG] [Thread-53515] [transport.py] [_log()] starting thread (client mode): 0xd7bc56f0
2025-11-17T11:34:16.985 [DEBUG] [Thread-53515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:34:17.003 [DEBUG] [Thread-53515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:34:17.003 [INFO] [Thread-53515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:34:17.004 [DEBUG] [Thread-53515] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:34:17.004 [DEBUG] [Thread-53515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:34:17.004 [DEBUG] [Thread-53515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:34:17.004 [DEBUG] [Thread-53515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] client lang: <none>
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] server lang: <none>
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] kex follows: False
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] Compression: none
2025-11-17T11:34:17.005 [DEBUG] [Thread-53515] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:34:17.022 [DEBUG] [Thread-53515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:34:17.022 [DEBUG] [Thread-53515] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:34:17.023 [DEBUG] [Thread-53515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:34:17.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:34:17.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:34:17.025 [DEBUG] [Thread-53515] [transport.py] [_log()] userauth is OK
2025-11-17T11:34:17.025 [DEBUG] [Thread-53515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:34:17.025 [DEBUG] [Thread-53515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:34:17.025 [DEBUG] [Thread-53515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:34:17.025 [DEBUG] [Thread-53515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:34:17.048 [INFO] [Thread-53515] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:34:17.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:34:17.617 [DEBUG] [Thread-53515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:34:17.617 [DEBUG] [Thread-53515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:34:17.618 [DEBUG] [Thread-53515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:34:17.658 [DEBUG] [Thread-53515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:34:17.658 [DEBUG] [Thread-53515] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:34:17.660 [DEBUG] [Thread-53515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:34:17.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:34:17.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:34:17.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:34:17.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:34:17.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:34:17.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:34:17.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:34:17.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:34:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:34:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.398659 -999.00  +20.40  17.50     26   +0.50 1 1 1 1 1   888    0 20.99 69.47 ----- 17.5 17.5 20.8 24.2 27.5 -24.6 26.4 -24.7 25.8 -23.0 26.6 -23.1
2025-11-17T11:34:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:34:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:34:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.398659
2025-11-17T11:34:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:34:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:34:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:34:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:34:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:34:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:34:07', tmtdew=23.25, humidity=20.77, cloud=0.0, wind=21.24, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:34:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:34:17.683 [DEBUG] [Thread-53515] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:34:17.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:34:17.771 [DEBUG] [Thread-53518] [transport.py] [_log()] starting thread (client mode): 0xd0759ea0
2025-11-17T11:34:17.771 [DEBUG] [Thread-53518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:34:17.785 [DEBUG] [Thread-53518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:34:17.786 [INFO] [Thread-53518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:34:17.793 [DEBUG] [Thread-53518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:34:17.793 [DEBUG] [Thread-53518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:34:17.793 [DEBUG] [Thread-53518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:34:17.793 [DEBUG] [Thread-53518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:34:17.793 [DEBUG] [Thread-53518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] client lang: <none>
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] server lang: <none>
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] kex follows: False
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] Compression: none
2025-11-17T11:34:17.794 [DEBUG] [Thread-53518] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:34:17.854 [DEBUG] [Thread-53518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:34:17.854 [DEBUG] [Thread-53518] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:34:17.855 [DEBUG] [Thread-53518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:34:17.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:34:17.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:34:17.910 [DEBUG] [Thread-53518] [transport.py] [_log()] userauth is OK
2025-11-17T11:34:17.911 [DEBUG] [Thread-53518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:34:17.911 [DEBUG] [Thread-53518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:34:17.911 [DEBUG] [Thread-53518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:34:17.911 [DEBUG] [Thread-53518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:34:17.929 [INFO] [Thread-53518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:34:17.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:34:17.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:34:18.764 [DEBUG] [Thread-53518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:34:18.764 [DEBUG] [Thread-53518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:34:18.811 [DEBUG] [Thread-53518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:34:18.811 [DEBUG] [Thread-53518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:34:18.820 [DEBUG] [Thread-53518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:34:18.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:34:18.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:34:18.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:34:18.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:34:18.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:34:18.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:34:18.858 [DEBUG] [Thread-53518] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:34:31.893 [DEBUG] [Thread-53520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:34:35.385 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:34:35.386 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:34:46.937 [DEBUG] [Thread-53521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:34:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:34:48.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:34:48.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:34:49.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 34, 39), 23.31, 20.45, 0.0, 22.18, 20.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:34:49.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:34:39
2025-11-17T11:34:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:34:49.792 [DEBUG] [Thread-53522] [transport.py] [_log()] starting thread (client mode): 0xd3150d00
2025-11-17T11:34:49.792 [DEBUG] [Thread-53522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:34:49.811 [DEBUG] [Thread-53522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:34:49.811 [INFO] [Thread-53522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] client lang: <none>
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] server lang: <none>
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] kex follows: False
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] Compression: none
2025-11-17T11:34:49.814 [DEBUG] [Thread-53522] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:34:49.823 [DEBUG] [Thread-53522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:34:49.823 [DEBUG] [Thread-53522] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:34:49.824 [DEBUG] [Thread-53522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:34:49.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:34:49.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:34:49.824 [DEBUG] [Thread-53522] [transport.py] [_log()] userauth is OK
2025-11-17T11:34:49.824 [DEBUG] [Thread-53522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:34:49.824 [DEBUG] [Thread-53522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:34:49.825 [DEBUG] [Thread-53522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:34:49.825 [DEBUG] [Thread-53522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:34:49.837 [INFO] [Thread-53522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:34:49.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:34:50.450 [DEBUG] [Thread-53522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:34:50.450 [DEBUG] [Thread-53522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:34:50.450 [DEBUG] [Thread-53522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:34:50.491 [DEBUG] [Thread-53522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:34:50.491 [DEBUG] [Thread-53522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:34:50.493 [DEBUG] [Thread-53522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:34:50.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:34:50.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:34:50.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:34:50.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:34:50.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:34:50.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:34:50.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:34:50.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:34:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:34:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.399007 -999.00  +20.60  21.12     26   +0.60 1 1 1 1 1   888    0 20.91 69.62 ----- 21.1 21.1 20.8 28.1 27.4 -26.6 26.2 -26.4 25.8 -24.2 26.3 -27.5
2025-11-17T11:34:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:34:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:34:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.399007
2025-11-17T11:34:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:34:50.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:34:50.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:34:50.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:34:50.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:34:50.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:34:39', tmtdew=23.31, humidity=20.45, cloud=0.0, wind=22.18, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:34:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:34:50.510 [DEBUG] [Thread-53522] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:34:50.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:34:50.602 [DEBUG] [Thread-53525] [transport.py] [_log()] starting thread (client mode): 0xd071a4a0
2025-11-17T11:34:50.602 [DEBUG] [Thread-53525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:34:50.620 [DEBUG] [Thread-53525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:34:50.620 [INFO] [Thread-53525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:34:50.627 [DEBUG] [Thread-53525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:34:50.627 [DEBUG] [Thread-53525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:34:50.627 [DEBUG] [Thread-53525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:34:50.627 [DEBUG] [Thread-53525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:34:50.627 [DEBUG] [Thread-53525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:34:50.627 [DEBUG] [Thread-53525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:34:50.627 [DEBUG] [Thread-53525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] client lang: <none>
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] server lang: <none>
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] kex follows: False
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] Compression: none
2025-11-17T11:34:50.628 [DEBUG] [Thread-53525] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:34:50.689 [DEBUG] [Thread-53525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:34:50.689 [DEBUG] [Thread-53525] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:34:50.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:34:50.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:34:50.690 [DEBUG] [Thread-53525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:34:50.746 [DEBUG] [Thread-53525] [transport.py] [_log()] userauth is OK
2025-11-17T11:34:50.746 [DEBUG] [Thread-53525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:34:50.746 [DEBUG] [Thread-53525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:34:50.747 [DEBUG] [Thread-53525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:34:50.747 [DEBUG] [Thread-53525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:34:50.765 [INFO] [Thread-53525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:34:50.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:34:50.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:34:51.659 [DEBUG] [Thread-53525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:34:51.659 [DEBUG] [Thread-53525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:34:51.707 [DEBUG] [Thread-53525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:34:51.707 [DEBUG] [Thread-53525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:34:51.715 [DEBUG] [Thread-53525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:34:51.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:34:51.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:34:51.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:34:51.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:34:51.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:34:51.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:34:51.747 [DEBUG] [Thread-53525] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:35:01.969 [DEBUG] [Thread-53527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:35:07.137 [DEBUG] [Thread-53528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:35:17.016 [DEBUG] [Thread-53529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:35:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:35:21.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:35:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:35:22.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 35, 11), 23.17, 20.6, 0.0, 16.0, 20.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:35:22.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:35:11
2025-11-17T11:35:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:35:22.692 [DEBUG] [Thread-53530] [transport.py] [_log()] starting thread (client mode): 0xd31639a0
2025-11-17T11:35:22.693 [DEBUG] [Thread-53530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:35:22.711 [DEBUG] [Thread-53530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:35:22.712 [INFO] [Thread-53530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:35:22.716 [DEBUG] [Thread-53530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:35:22.716 [DEBUG] [Thread-53530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:35:22.716 [DEBUG] [Thread-53530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:35:22.716 [DEBUG] [Thread-53530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] client lang: <none>
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] server lang: <none>
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] kex follows: False
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] Compression: none
2025-11-17T11:35:22.717 [DEBUG] [Thread-53530] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:35:22.731 [DEBUG] [Thread-53530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:35:22.732 [DEBUG] [Thread-53530] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:35:22.732 [DEBUG] [Thread-53530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:35:22.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:35:22.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:35:22.734 [DEBUG] [Thread-53530] [transport.py] [_log()] userauth is OK
2025-11-17T11:35:22.734 [DEBUG] [Thread-53530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:35:22.734 [DEBUG] [Thread-53530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:35:22.734 [DEBUG] [Thread-53530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:35:22.734 [DEBUG] [Thread-53530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:35:22.774 [INFO] [Thread-53530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:35:22.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:35:23.603 [DEBUG] [Thread-53530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:35:23.604 [DEBUG] [Thread-53530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:35:23.604 [DEBUG] [Thread-53530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:35:23.644 [DEBUG] [Thread-53530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:35:23.644 [DEBUG] [Thread-53530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:35:23.647 [DEBUG] [Thread-53530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:35:23.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:35:23.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:35:23.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:35:23.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:35:23.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:35:23.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:35:23.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:35:23.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:35:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:35:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.399007 -999.00  +20.60  21.12     26   +0.60 1 1 1 1 1   888    0 20.91 69.62 ----- 21.1 21.1 20.8 28.1 27.4 -26.6 26.2 -26.4 25.8 -24.2 26.3 -27.5
2025-11-17T11:35:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:35:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:35:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.399007
2025-11-17T11:35:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:35:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:35:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:35:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:35:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:35:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:35:11', tmtdew=23.17, humidity=20.6, cloud=0.0, wind=16.0, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:34:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:35:23.672 [DEBUG] [Thread-53530] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:35:23.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:35:23.769 [DEBUG] [Thread-53533] [transport.py] [_log()] starting thread (client mode): 0xd075b190
2025-11-17T11:35:23.769 [DEBUG] [Thread-53533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:35:23.785 [DEBUG] [Thread-53533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:35:23.785 [INFO] [Thread-53533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:35:23.795 [DEBUG] [Thread-53533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:35:23.795 [DEBUG] [Thread-53533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:35:23.795 [DEBUG] [Thread-53533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:35:23.795 [DEBUG] [Thread-53533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:35:23.795 [DEBUG] [Thread-53533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:35:23.795 [DEBUG] [Thread-53533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:35:23.795 [DEBUG] [Thread-53533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:35:23.795 [DEBUG] [Thread-53533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] client lang: <none>
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] server lang: <none>
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] kex follows: False
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] Compression: none
2025-11-17T11:35:23.796 [DEBUG] [Thread-53533] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:35:23.850 [DEBUG] [Thread-53533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:35:23.851 [DEBUG] [Thread-53533] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:35:23.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:35:23.851 [DEBUG] [Thread-53533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:35:23.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:35:23.909 [DEBUG] [Thread-53533] [transport.py] [_log()] userauth is OK
2025-11-17T11:35:23.909 [DEBUG] [Thread-53533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:35:23.909 [DEBUG] [Thread-53533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:35:23.909 [DEBUG] [Thread-53533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:35:23.909 [DEBUG] [Thread-53533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:35:23.928 [INFO] [Thread-53533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:35:23.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:35:23.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:35:24.837 [DEBUG] [Thread-53533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:35:24.837 [DEBUG] [Thread-53533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:35:24.885 [DEBUG] [Thread-53533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:35:24.885 [DEBUG] [Thread-53533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:35:24.894 [DEBUG] [Thread-53533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:35:24.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:35:24.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:35:24.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:35:24.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:35:24.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:35:24.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:35:24.928 [DEBUG] [Thread-53533] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:35:32.045 [DEBUG] [Thread-53535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:35:35.527 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:35:35.528 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:35:47.080 [DEBUG] [Thread-53536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:35:54.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:35:54.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:35:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:35:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 35, 43), 23.27, 20.32, 0.0, 16.9, 20.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:35:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:35:43
2025-11-17T11:35:55.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:35:55.856 [DEBUG] [Thread-53537] [transport.py] [_log()] starting thread (client mode): 0xd0759180
2025-11-17T11:35:55.856 [DEBUG] [Thread-53537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:35:55.875 [DEBUG] [Thread-53537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:35:55.875 [INFO] [Thread-53537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:35:55.878 [DEBUG] [Thread-53537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] client lang: <none>
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] server lang: <none>
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] kex follows: False
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] Compression: none
2025-11-17T11:35:55.879 [DEBUG] [Thread-53537] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:35:55.895 [DEBUG] [Thread-53537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:35:55.896 [DEBUG] [Thread-53537] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:35:55.896 [DEBUG] [Thread-53537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:35:55.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:35:55.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:35:55.898 [DEBUG] [Thread-53537] [transport.py] [_log()] userauth is OK
2025-11-17T11:35:55.898 [DEBUG] [Thread-53537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:35:55.898 [DEBUG] [Thread-53537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:35:55.898 [DEBUG] [Thread-53537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:35:55.898 [DEBUG] [Thread-53537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:35:55.922 [INFO] [Thread-53537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:35:55.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:35:56.519 [DEBUG] [Thread-53537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:35:56.519 [DEBUG] [Thread-53537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:35:56.520 [DEBUG] [Thread-53537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:35:56.560 [DEBUG] [Thread-53537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:35:56.561 [DEBUG] [Thread-53537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:35:56.564 [DEBUG] [Thread-53537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:35:56.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:35:56.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:35:56.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:35:56.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:35:56.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:35:56.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:35:56.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:35:56.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:35:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:35:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.399354 -999.00  +20.60  29.27     25   +0.40 1 1 1 1 1   888    0 21.16 75.65 ----- 29.3 29.3 38.6 31.2 27.3 -25.7 26.1 -27.1 25.7 -25.3 26.4 -24.3
2025-11-17T11:35:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:35:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:35:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.399354
2025-11-17T11:35:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:35:56.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:35:56.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:35:56.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:35:56.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:35:56.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:35:43', tmtdew=23.27, humidity=20.32, cloud=0.0, wind=16.9, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:35:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:35:56.589 [DEBUG] [Thread-53537] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:35:56.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:35:56.687 [DEBUG] [Thread-53540] [transport.py] [_log()] starting thread (client mode): 0xd0718f10
2025-11-17T11:35:56.687 [DEBUG] [Thread-53540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:35:56.702 [DEBUG] [Thread-53540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:35:56.702 [INFO] [Thread-53540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:35:56.709 [DEBUG] [Thread-53540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:35:56.709 [DEBUG] [Thread-53540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:35:56.709 [DEBUG] [Thread-53540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] client lang: <none>
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] server lang: <none>
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] kex follows: False
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:35:56.710 [DEBUG] [Thread-53540] [transport.py] [_log()] Compression: none
2025-11-17T11:35:56.711 [DEBUG] [Thread-53540] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:35:56.767 [DEBUG] [Thread-53540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:35:56.767 [DEBUG] [Thread-53540] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:35:56.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:35:56.768 [DEBUG] [Thread-53540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:35:56.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:35:56.823 [DEBUG] [Thread-53540] [transport.py] [_log()] userauth is OK
2025-11-17T11:35:56.823 [DEBUG] [Thread-53540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:35:56.823 [DEBUG] [Thread-53540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:35:56.823 [DEBUG] [Thread-53540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:35:56.824 [DEBUG] [Thread-53540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:35:56.846 [INFO] [Thread-53540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:35:56.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:35:56.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:35:57.662 [DEBUG] [Thread-53540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:35:57.662 [DEBUG] [Thread-53540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:35:57.710 [DEBUG] [Thread-53540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:35:57.710 [DEBUG] [Thread-53540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:35:57.719 [DEBUG] [Thread-53540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:35:57.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:35:57.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:35:57.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:35:57.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:35:57.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:35:57.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:35:57.754 [DEBUG] [Thread-53540] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:36:02.114 [DEBUG] [Thread-53542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:36:07.185 [DEBUG] [Thread-53543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:36:17.152 [DEBUG] [Thread-53544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:36:27.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:36:27.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:36:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:36:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 36, 15), 23.17, 20.47, 0.0, 14.19, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:36:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:36:15
2025-11-17T11:36:28.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:36:28.656 [DEBUG] [Thread-53545] [transport.py] [_log()] starting thread (client mode): 0xd31cca60
2025-11-17T11:36:28.656 [DEBUG] [Thread-53545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:36:28.675 [DEBUG] [Thread-53545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:36:28.676 [INFO] [Thread-53545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:36:28.679 [DEBUG] [Thread-53545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] client lang: <none>
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] server lang: <none>
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] kex follows: False
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] Compression: none
2025-11-17T11:36:28.680 [DEBUG] [Thread-53545] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:36:28.699 [DEBUG] [Thread-53545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:36:28.700 [DEBUG] [Thread-53545] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:36:28.700 [DEBUG] [Thread-53545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:36:28.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:36:28.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:36:28.702 [DEBUG] [Thread-53545] [transport.py] [_log()] userauth is OK
2025-11-17T11:36:28.702 [DEBUG] [Thread-53545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:36:28.702 [DEBUG] [Thread-53545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:36:28.702 [DEBUG] [Thread-53545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:36:28.702 [DEBUG] [Thread-53545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:36:28.726 [INFO] [Thread-53545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:36:28.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:36:29.449 [DEBUG] [Thread-53545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:36:29.450 [DEBUG] [Thread-53545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:36:29.450 [DEBUG] [Thread-53545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:36:29.490 [DEBUG] [Thread-53545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:36:29.491 [DEBUG] [Thread-53545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:36:29.494 [DEBUG] [Thread-53545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:36:29.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:36:29.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:36:29.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:36:29.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:36:29.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:36:29.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:36:29.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:36:29.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:36:29.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:36:29.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.399701 -999.00  +19.90  11.13     26   +0.10 1 1 1 1 1   888    0 21.15 71.13 ----- 11.1 11.1 49.1 28.0 27.1 -24.7 26.0 -25.0 25.2 -24.8 26.2 -23.8
2025-11-17T11:36:29.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:36:29.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:36:29.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.399701
2025-11-17T11:36:29.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:36:29.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:36:29.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:36:29.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:36:29.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:36:29.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:36:15', tmtdew=23.17, humidity=20.47, cloud=0.0, wind=14.19, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:35:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:36:29.520 [DEBUG] [Thread-53545] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:36:29.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:36:29.616 [DEBUG] [Thread-53548] [transport.py] [_log()] starting thread (client mode): 0xd31cfd00
2025-11-17T11:36:29.616 [DEBUG] [Thread-53548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:36:29.630 [DEBUG] [Thread-53548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:36:29.630 [INFO] [Thread-53548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:36:29.637 [DEBUG] [Thread-53548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] client lang: <none>
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] server lang: <none>
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] kex follows: False
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] Compression: none
2025-11-17T11:36:29.638 [DEBUG] [Thread-53548] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:36:29.695 [DEBUG] [Thread-53548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:36:29.695 [DEBUG] [Thread-53548] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:36:29.696 [DEBUG] [Thread-53548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:36:29.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:36:29.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:36:29.751 [DEBUG] [Thread-53548] [transport.py] [_log()] userauth is OK
2025-11-17T11:36:29.751 [DEBUG] [Thread-53548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:36:29.751 [DEBUG] [Thread-53548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:36:29.751 [DEBUG] [Thread-53548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:36:29.751 [DEBUG] [Thread-53548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:36:29.771 [INFO] [Thread-53548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:36:29.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:36:29.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:36:30.618 [DEBUG] [Thread-53548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:36:30.619 [DEBUG] [Thread-53548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:36:30.666 [DEBUG] [Thread-53548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:36:30.666 [DEBUG] [Thread-53548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:36:30.675 [DEBUG] [Thread-53548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:36:30.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:36:30.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:36:30.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:36:30.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:36:30.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:36:30.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:36:30.709 [DEBUG] [Thread-53548] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:36:32.186 [DEBUG] [Thread-53550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:36:35.668 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:36:35.669 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:36:47.227 [DEBUG] [Thread-53551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:37:00.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:37:00.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:37:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:37:01.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 36, 47), 22.89, 21.03, 0.0, 10.98, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:37:01.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:36:47
2025-11-17T11:37:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:37:01.643 [DEBUG] [Thread-53552] [transport.py] [_log()] starting thread (client mode): 0xd31ceef0
2025-11-17T11:37:01.643 [DEBUG] [Thread-53552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:37:01.665 [DEBUG] [Thread-53552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:37:01.665 [INFO] [Thread-53552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:37:01.669 [DEBUG] [Thread-53552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:37:01.669 [DEBUG] [Thread-53552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:37:01.669 [DEBUG] [Thread-53552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:37:01.669 [DEBUG] [Thread-53552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] client lang: <none>
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] server lang: <none>
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] kex follows: False
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:37:01.670 [DEBUG] [Thread-53552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:37:01.671 [DEBUG] [Thread-53552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:37:01.671 [DEBUG] [Thread-53552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:37:01.671 [DEBUG] [Thread-53552] [transport.py] [_log()] Compression: none
2025-11-17T11:37:01.671 [DEBUG] [Thread-53552] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:37:01.691 [DEBUG] [Thread-53552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:37:01.692 [DEBUG] [Thread-53552] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:37:01.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:37:01.693 [DEBUG] [Thread-53552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:37:01.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:37:01.695 [DEBUG] [Thread-53552] [transport.py] [_log()] userauth is OK
2025-11-17T11:37:01.695 [DEBUG] [Thread-53552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:37:01.695 [DEBUG] [Thread-53552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:37:01.695 [DEBUG] [Thread-53552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:37:01.695 [DEBUG] [Thread-53552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:37:01.730 [INFO] [Thread-53552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:37:01.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:37:02.252 [DEBUG] [Thread-53554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:37:02.388 [DEBUG] [Thread-53552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:37:02.388 [DEBUG] [Thread-53552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:37:02.388 [DEBUG] [Thread-53552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:37:02.429 [DEBUG] [Thread-53552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:37:02.430 [DEBUG] [Thread-53552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:37:02.432 [DEBUG] [Thread-53552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:37:02.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:37:02.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:37:02.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:37:02.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:37:02.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:37:02.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:37:02.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.400048 -999.00  +20.10  16.87     27   +0.50 1 1 1 1 1   888    0 20.97 73.73 ----- 16.9 16.9 358.5 20.7 27.1 -24.8 26.2 -23.5 25.4 -25.4 26.3 -22.9
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.400048
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:37:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:36:47', tmtdew=22.89, humidity=21.03, cloud=0.0, wind=10.98, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:36:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:37:02.453 [DEBUG] [Thread-53552] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:37:02.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:37:02.540 [DEBUG] [Thread-53556] [transport.py] [_log()] starting thread (client mode): 0xd31ce170
2025-11-17T11:37:02.540 [DEBUG] [Thread-53556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:37:02.555 [DEBUG] [Thread-53556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:37:02.555 [INFO] [Thread-53556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:37:02.562 [DEBUG] [Thread-53556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] client lang: <none>
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] server lang: <none>
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] kex follows: False
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] Compression: none
2025-11-17T11:37:02.563 [DEBUG] [Thread-53556] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:37:02.623 [DEBUG] [Thread-53556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:37:02.623 [DEBUG] [Thread-53556] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:37:02.624 [DEBUG] [Thread-53556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:37:02.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:37:02.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:37:02.679 [DEBUG] [Thread-53556] [transport.py] [_log()] userauth is OK
2025-11-17T11:37:02.679 [DEBUG] [Thread-53556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:37:02.679 [DEBUG] [Thread-53556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:37:02.679 [DEBUG] [Thread-53556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:37:02.679 [DEBUG] [Thread-53556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:37:02.698 [INFO] [Thread-53556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:37:02.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:37:02.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:37:03.543 [DEBUG] [Thread-53556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:37:03.543 [DEBUG] [Thread-53556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:37:03.590 [DEBUG] [Thread-53556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:37:03.590 [DEBUG] [Thread-53556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:37:03.599 [DEBUG] [Thread-53556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:37:03.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:37: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')
2025-11-17T11:37: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
2025-11-17T11:37:03.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:37:03.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:37:03.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:37:03.634 [DEBUG] [Thread-53556] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:37:07.237 [DEBUG] [Thread-53558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:37:17.284 [DEBUG] [Thread-53559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:37:32.324 [DEBUG] [Thread-53560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:37:33.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:37:33.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:37:33.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:37:34.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 37, 19), 22.86, 21.08, 0.0, 13.83, 20.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:37:34.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:37:19
2025-11-17T11:37:34.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:37:34.573 [DEBUG] [Thread-53561] [transport.py] [_log()] starting thread (client mode): 0xd3160fd0
2025-11-17T11:37:34.573 [DEBUG] [Thread-53561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:37:34.593 [DEBUG] [Thread-53561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:37:34.593 [INFO] [Thread-53561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:37:34.596 [DEBUG] [Thread-53561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:37:34.596 [DEBUG] [Thread-53561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:37:34.596 [DEBUG] [Thread-53561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] client lang: <none>
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] server lang: <none>
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] kex follows: False
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:37:34.597 [DEBUG] [Thread-53561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:37:34.598 [DEBUG] [Thread-53561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:37:34.598 [DEBUG] [Thread-53561] [transport.py] [_log()] Compression: none
2025-11-17T11:37:34.598 [DEBUG] [Thread-53561] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:37:34.616 [DEBUG] [Thread-53561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:37:34.617 [DEBUG] [Thread-53561] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:37:34.617 [DEBUG] [Thread-53561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:37:34.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:37:34.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:37:34.619 [DEBUG] [Thread-53561] [transport.py] [_log()] userauth is OK
2025-11-17T11:37:34.620 [DEBUG] [Thread-53561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:37:34.620 [DEBUG] [Thread-53561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:37:34.620 [DEBUG] [Thread-53561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:37:34.620 [DEBUG] [Thread-53561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:37:34.638 [INFO] [Thread-53561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:37:34.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:37:35.350 [DEBUG] [Thread-53561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:37:35.350 [DEBUG] [Thread-53561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:37:35.350 [DEBUG] [Thread-53561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:37:35.391 [DEBUG] [Thread-53561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:37:35.392 [DEBUG] [Thread-53561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:37:35.395 [DEBUG] [Thread-53561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:37:35.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:37:35.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:37:35.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:37:35.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:37:35.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:37:35.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:37:35.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:37:35.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:37:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:37:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.400395 -999.00  +20.40  14.66     26   +0.60 1 1 1 1 1   888    0 21.63 74.14 ----- 14.7 14.7 334.6 15.2 27.3 -24.4 26.2 -24.1 25.6 -22.4 26.4 -23.1
2025-11-17T11:37:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:37:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:37:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.400395
2025-11-17T11:37:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:37:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:37:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:37:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:37:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:37:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:37:19', tmtdew=22.86, humidity=21.08, cloud=0.0, wind=13.83, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:36:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:37:35.420 [DEBUG] [Thread-53561] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:37:35.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:37:35.511 [DEBUG] [Thread-53564] [transport.py] [_log()] starting thread (client mode): 0xd075a770
2025-11-17T11:37:35.511 [DEBUG] [Thread-53564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:37:35.525 [DEBUG] [Thread-53564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:37:35.526 [INFO] [Thread-53564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] client lang: <none>
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] server lang: <none>
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] kex follows: False
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:37:35.533 [DEBUG] [Thread-53564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:37:35.534 [DEBUG] [Thread-53564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:37:35.534 [DEBUG] [Thread-53564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:37:35.534 [DEBUG] [Thread-53564] [transport.py] [_log()] Compression: none
2025-11-17T11:37:35.534 [DEBUG] [Thread-53564] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:37:35.596 [DEBUG] [Thread-53564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:37:35.597 [DEBUG] [Thread-53564] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:37:35.597 [DEBUG] [Thread-53564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:37:35.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:37:35.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:37:35.659 [DEBUG] [Thread-53564] [transport.py] [_log()] userauth is OK
2025-11-17T11:37:35.659 [DEBUG] [Thread-53564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:37:35.659 [DEBUG] [Thread-53564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:37:35.659 [DEBUG] [Thread-53564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:37:35.659 [DEBUG] [Thread-53564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:37:35.679 [INFO] [Thread-53564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:37:35.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:37:35.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:37:35.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:37:35.812 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:37:36.511 [DEBUG] [Thread-53564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:37:36.511 [DEBUG] [Thread-53564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:37:36.559 [DEBUG] [Thread-53564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:37:36.559 [DEBUG] [Thread-53564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:37:36.568 [DEBUG] [Thread-53564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:37:36.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:37:36.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:37:36.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:37:36.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:37:36.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:37:36.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:37:36.603 [DEBUG] [Thread-53564] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:37:47.357 [DEBUG] [Thread-53566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:38:02.396 [DEBUG] [Thread-53567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:38:06.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:38:06.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:38:06.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:38:07.283 [DEBUG] [Thread-53568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:38:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 37, 51), 22.86, 21.37, 0.0, 10.29, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:38:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:37:51
2025-11-17T11:38:07.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:38:07.579 [DEBUG] [Thread-53569] [transport.py] [_log()] starting thread (client mode): 0xd31520e0
2025-11-17T11:38:07.579 [DEBUG] [Thread-53569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:38:07.599 [DEBUG] [Thread-53569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:38:07.599 [INFO] [Thread-53569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:38:07.602 [DEBUG] [Thread-53569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] client lang: <none>
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] server lang: <none>
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] kex follows: False
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] Compression: none
2025-11-17T11:38:07.603 [DEBUG] [Thread-53569] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:38:07.618 [DEBUG] [Thread-53569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:38:07.618 [DEBUG] [Thread-53569] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:38:07.618 [DEBUG] [Thread-53569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:38:07.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:38:07.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:38:07.619 [DEBUG] [Thread-53569] [transport.py] [_log()] userauth is OK
2025-11-17T11:38:07.619 [DEBUG] [Thread-53569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:38:07.619 [DEBUG] [Thread-53569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:38:07.619 [DEBUG] [Thread-53569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:38:07.619 [DEBUG] [Thread-53569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:38:07.635 [INFO] [Thread-53569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:38:07.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:38:08.300 [DEBUG] [Thread-53569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:38:08.300 [DEBUG] [Thread-53569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:38:08.300 [DEBUG] [Thread-53569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:38:08.341 [DEBUG] [Thread-53569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:38:08.342 [DEBUG] [Thread-53569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:38:08.344 [DEBUG] [Thread-53569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:38:08.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:38:08.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:38:08.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:38:08.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:38:08.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:38:08.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:38:08.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:38:08.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:38:08.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:38:08.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.401090 -999.00  +20.30  10.28     26   +0.70 1 1 1 1 1   888    0 21.54 77.99 ----- 10.3 10.3 23.0 12.6 27.4 -24.3 26.4 -24.4 25.8 -22.4 26.5 -23.2
2025-11-17T11:38:08.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:38:08.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:38:08.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.401090
2025-11-17T11:38:08.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:38:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:38:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:38:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:38:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:38:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:37:51', tmtdew=22.86, humidity=21.37, cloud=0.0, wind=10.29, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:37:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:38:08.371 [DEBUG] [Thread-53569] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:38:08.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:38:08.469 [DEBUG] [Thread-53572] [transport.py] [_log()] starting thread (client mode): 0xd071bd00
2025-11-17T11:38:08.469 [DEBUG] [Thread-53572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:38:08.484 [DEBUG] [Thread-53572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:38:08.484 [INFO] [Thread-53572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] client lang: <none>
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] server lang: <none>
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] kex follows: False
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:38:08.492 [DEBUG] [Thread-53572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:38:08.493 [DEBUG] [Thread-53572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:38:08.493 [DEBUG] [Thread-53572] [transport.py] [_log()] Compression: none
2025-11-17T11:38:08.493 [DEBUG] [Thread-53572] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:38:08.551 [DEBUG] [Thread-53572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:38:08.552 [DEBUG] [Thread-53572] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:38:08.552 [DEBUG] [Thread-53572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:38:08.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:38:08.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:38:08.607 [DEBUG] [Thread-53572] [transport.py] [_log()] userauth is OK
2025-11-17T11:38:08.607 [DEBUG] [Thread-53572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:38:08.607 [DEBUG] [Thread-53572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:38:08.607 [DEBUG] [Thread-53572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:38:08.607 [DEBUG] [Thread-53572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:38:08.626 [INFO] [Thread-53572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:38:08.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:38:08.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:38:09.530 [DEBUG] [Thread-53572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:38:09.530 [DEBUG] [Thread-53572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:38:09.577 [DEBUG] [Thread-53572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:38:09.577 [DEBUG] [Thread-53572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:38:09.586 [DEBUG] [Thread-53572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:38:09.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:38:09.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:38:09.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:38:09.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:38:09.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:38:09.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:38:09.621 [DEBUG] [Thread-53572] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:38:17.427 [DEBUG] [Thread-53574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:38:32.468 [DEBUG] [Thread-53575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:38:35.954 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:38:35.955 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:38:39.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:38:39.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:38:39.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:38:40.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 38, 23), 22.95, 21.27, 0.0, 16.73, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:38:40.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:38:23
2025-11-17T11:38:40.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:38:40.564 [DEBUG] [Thread-53576] [transport.py] [_log()] starting thread (client mode): 0xd0787d60
2025-11-17T11:38:40.564 [DEBUG] [Thread-53576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:38:40.585 [DEBUG] [Thread-53576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:38:40.585 [INFO] [Thread-53576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] client lang: <none>
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] server lang: <none>
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] kex follows: False
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] Compression: none
2025-11-17T11:38:40.587 [DEBUG] [Thread-53576] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:38:40.595 [DEBUG] [Thread-53576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:38:40.595 [DEBUG] [Thread-53576] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:38:40.595 [DEBUG] [Thread-53576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:38:40.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:38:40.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:38:40.599 [DEBUG] [Thread-53576] [transport.py] [_log()] userauth is OK
2025-11-17T11:38:40.599 [DEBUG] [Thread-53576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:38:40.599 [DEBUG] [Thread-53576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:38:40.599 [DEBUG] [Thread-53576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:38:40.599 [DEBUG] [Thread-53576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:38:40.617 [INFO] [Thread-53576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:38:40.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:38:41.186 [DEBUG] [Thread-53576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:38:41.186 [DEBUG] [Thread-53576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:38:41.187 [DEBUG] [Thread-53576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:38:41.227 [DEBUG] [Thread-53576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:38:41.227 [DEBUG] [Thread-53576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:38:41.230 [DEBUG] [Thread-53576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:38:41.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:38:41.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:38:41.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:38:41.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:38:41.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:38:41.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:38:41.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.401437 -999.00  +20.70  13.38     26   +0.90 1 2 1 1 1   888    0 21.72 76.70 ----- 13.4 13.4 13.2 15.9 27.5 -24.3 26.5 -23.7 25.8 -22.2 26.5 -22.7
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.401437
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:38:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:38:41.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:38:23', tmtdew=22.95, humidity=21.27, cloud=0.0, wind=16.73, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:38:04.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:38:41.247 [DEBUG] [Thread-53576] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:38:41.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:38:41.331 [DEBUG] [Thread-53579] [transport.py] [_log()] starting thread (client mode): 0xd07bfa60
2025-11-17T11:38:41.331 [DEBUG] [Thread-53579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:38:41.346 [DEBUG] [Thread-53579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:38:41.346 [INFO] [Thread-53579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] client lang: <none>
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] server lang: <none>
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] kex follows: False
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:38:41.353 [DEBUG] [Thread-53579] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:38:41.354 [DEBUG] [Thread-53579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:38:41.354 [DEBUG] [Thread-53579] [transport.py] [_log()] Compression: none
2025-11-17T11:38:41.354 [DEBUG] [Thread-53579] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:38:41.410 [DEBUG] [Thread-53579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:38:41.410 [DEBUG] [Thread-53579] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:38:41.410 [DEBUG] [Thread-53579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:38:41.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:38:41.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:38:41.467 [DEBUG] [Thread-53579] [transport.py] [_log()] userauth is OK
2025-11-17T11:38:41.467 [DEBUG] [Thread-53579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:38:41.467 [DEBUG] [Thread-53579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:38:41.467 [DEBUG] [Thread-53579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:38:41.467 [DEBUG] [Thread-53579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:38:41.481 [INFO] [Thread-53579] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:38:41.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:38:41.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:38:42.330 [DEBUG] [Thread-53579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:38:42.330 [DEBUG] [Thread-53579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:38:42.378 [DEBUG] [Thread-53579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:38:42.378 [DEBUG] [Thread-53579] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:38:42.386 [DEBUG] [Thread-53579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:38:42.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:38:42.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:38:42.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:38:42.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:38:42.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:38:42.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:38:42.418 [DEBUG] [Thread-53579] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:38:47.498 [DEBUG] [Thread-53581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:39:02.546 [DEBUG] [Thread-53582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:39:07.341 [DEBUG] [Thread-53583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:39:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:39:12.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:39:12.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:39:13.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 38, 55), 23.08, 20.83, 0.0, 16.66, 20.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:39:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:38:55
2025-11-17T11:39:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:39:13.339 [DEBUG] [Thread-53584] [transport.py] [_log()] starting thread (client mode): 0xd075b820
2025-11-17T11:39:13.339 [DEBUG] [Thread-53584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:39:13.360 [DEBUG] [Thread-53584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:39:13.360 [INFO] [Thread-53584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] client lang: <none>
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] server lang: <none>
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] kex follows: False
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:39:13.363 [DEBUG] [Thread-53584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:39:13.364 [DEBUG] [Thread-53584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:39:13.364 [DEBUG] [Thread-53584] [transport.py] [_log()] Compression: none
2025-11-17T11:39:13.364 [DEBUG] [Thread-53584] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:39:13.381 [DEBUG] [Thread-53584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:39:13.381 [DEBUG] [Thread-53584] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:39:13.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:39:13.383 [DEBUG] [Thread-53584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:39:13.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:39:13.384 [DEBUG] [Thread-53584] [transport.py] [_log()] userauth is OK
2025-11-17T11:39:13.385 [DEBUG] [Thread-53584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:39:13.385 [DEBUG] [Thread-53584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:39:13.385 [DEBUG] [Thread-53584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:39:13.385 [DEBUG] [Thread-53584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:39:13.410 [INFO] [Thread-53584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:39:13.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:39:14.039 [DEBUG] [Thread-53584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:39:14.039 [DEBUG] [Thread-53584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:39:14.039 [DEBUG] [Thread-53584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:39:14.080 [DEBUG] [Thread-53584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:39:14.081 [DEBUG] [Thread-53584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:39:14.083 [DEBUG] [Thread-53584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:39:14.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:39:14.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:39:14.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:39:14.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:39:14.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:39:14.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:39:14.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:39:14.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:39:14.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:39:14.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.401784 -999.00  +20.70  26.79     25   +0.30 1 1 1 1 1   888    0 21.70 73.95 ----- 26.8 26.8 45.4 30.5 27.5 -26.5 26.2 -26.0 25.9 -24.3 26.5 -24.5
2025-11-17T11:39:14.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:39:14.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:39:14.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.401784
2025-11-17T11:39:14.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:39:14.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:39:14.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:39:14.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:39:14.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:39:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:38:55', tmtdew=23.08, humidity=20.83, cloud=0.0, wind=16.66, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:38:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:39:14.106 [DEBUG] [Thread-53584] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:39:14.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:39:14.202 [DEBUG] [Thread-53587] [transport.py] [_log()] starting thread (client mode): 0xd07ccfd0
2025-11-17T11:39:14.202 [DEBUG] [Thread-53587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:39:14.217 [DEBUG] [Thread-53587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:39:14.218 [INFO] [Thread-53587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:39:14.225 [DEBUG] [Thread-53587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:39:14.225 [DEBUG] [Thread-53587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:39:14.225 [DEBUG] [Thread-53587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:39:14.225 [DEBUG] [Thread-53587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] client lang: <none>
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] server lang: <none>
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] kex follows: False
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:39:14.226 [DEBUG] [Thread-53587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:39:14.227 [DEBUG] [Thread-53587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:39:14.227 [DEBUG] [Thread-53587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:39:14.227 [DEBUG] [Thread-53587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:39:14.227 [DEBUG] [Thread-53587] [transport.py] [_log()] Compression: none
2025-11-17T11:39:14.227 [DEBUG] [Thread-53587] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:39:14.284 [DEBUG] [Thread-53587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:39:14.285 [DEBUG] [Thread-53587] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:39:14.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:39:14.286 [DEBUG] [Thread-53587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:39:14.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:39:14.339 [DEBUG] [Thread-53587] [transport.py] [_log()] userauth is OK
2025-11-17T11:39:14.340 [DEBUG] [Thread-53587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:39:14.340 [DEBUG] [Thread-53587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:39:14.340 [DEBUG] [Thread-53587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:39:14.340 [DEBUG] [Thread-53587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:39:14.358 [INFO] [Thread-53587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:39:14.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:39:14.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:39:15.187 [DEBUG] [Thread-53587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:39:15.187 [DEBUG] [Thread-53587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:39:15.238 [DEBUG] [Thread-53587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:39:15.238 [DEBUG] [Thread-53587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:39:15.250 [DEBUG] [Thread-53587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:39:15.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:39:15.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:39:15.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:39:15.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:39:15.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:39:15.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:39:15.284 [DEBUG] [Thread-53587] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:39:17.578 [DEBUG] [Thread-53589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:39:32.620 [DEBUG] [Thread-53590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:39:36.097 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:39:36.098 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:39:45.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:39:45.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:39:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:39:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 39, 27), 22.84, 21.13, 0.0, 14.54, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:39:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:39:27
2025-11-17T11:39:46.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:39:46.209 [DEBUG] [Thread-53591] [transport.py] [_log()] starting thread (client mode): 0xd3135990
2025-11-17T11:39:46.210 [DEBUG] [Thread-53591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:39:46.230 [DEBUG] [Thread-53591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:39:46.230 [INFO] [Thread-53591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] client lang: <none>
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] server lang: <none>
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] kex follows: False
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] Compression: none
2025-11-17T11:39:46.233 [DEBUG] [Thread-53591] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:39:46.246 [DEBUG] [Thread-53591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:39:46.246 [DEBUG] [Thread-53591] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:39:46.247 [DEBUG] [Thread-53591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:39:46.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:39:46.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:39:46.249 [DEBUG] [Thread-53591] [transport.py] [_log()] userauth is OK
2025-11-17T11:39:46.249 [DEBUG] [Thread-53591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:39:46.249 [DEBUG] [Thread-53591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:39:46.249 [DEBUG] [Thread-53591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:39:46.249 [DEBUG] [Thread-53591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:39:46.267 [INFO] [Thread-53591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:39:46.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:39:46.842 [DEBUG] [Thread-53591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:39:46.842 [DEBUG] [Thread-53591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:39:46.843 [DEBUG] [Thread-53591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:39:46.884 [DEBUG] [Thread-53591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:39:46.884 [DEBUG] [Thread-53591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:39:46.886 [DEBUG] [Thread-53591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:39:46.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:39:46.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:39:46.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:39:46.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:39:46.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:39:46.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:39:46.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:39:46.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:39:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:39:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.402132 -999.00  +20.30  21.84     26   +0.30 1 1 1 1 1   888    0 21.25 76.14 ----- 21.8 21.8 15.6 28.7 27.3 -26.6 26.1 -26.1 25.7 -24.3 26.4 -24.8
2025-11-17T11:39:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:39:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:39:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.402132
2025-11-17T11:39:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:39:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:39:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:39:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:39:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:39:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:39:27', tmtdew=22.84, humidity=21.13, cloud=0.0, wind=14.54, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:39:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:39:46.913 [DEBUG] [Thread-53591] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:39:46.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:39:47.009 [DEBUG] [Thread-53594] [transport.py] [_log()] starting thread (client mode): 0xd3136680
2025-11-17T11:39:47.010 [DEBUG] [Thread-53594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:39:47.026 [DEBUG] [Thread-53594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:39:47.026 [INFO] [Thread-53594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:39:47.033 [DEBUG] [Thread-53594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:39:47.034 [DEBUG] [Thread-53594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:39:47.034 [DEBUG] [Thread-53594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:39:47.034 [DEBUG] [Thread-53594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:39:47.034 [DEBUG] [Thread-53594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:39:47.034 [DEBUG] [Thread-53594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:39:47.034 [DEBUG] [Thread-53594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:39:47.034 [DEBUG] [Thread-53594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:39:47.034 [DEBUG] [Thread-53594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] client lang: <none>
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] server lang: <none>
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] kex follows: False
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:39:47.035 [DEBUG] [Thread-53594] [transport.py] [_log()] Compression: none
2025-11-17T11:39:47.036 [DEBUG] [Thread-53594] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:39:47.091 [DEBUG] [Thread-53594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:39:47.092 [DEBUG] [Thread-53594] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:39:47.092 [DEBUG] [Thread-53594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:39:47.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:39:47.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:39:47.147 [DEBUG] [Thread-53594] [transport.py] [_log()] userauth is OK
2025-11-17T11:39:47.147 [DEBUG] [Thread-53594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:39:47.148 [DEBUG] [Thread-53594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:39:47.148 [DEBUG] [Thread-53594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:39:47.148 [DEBUG] [Thread-53594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:39:47.171 [INFO] [Thread-53594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:39:47.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:39:47.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:39:47.650 [DEBUG] [Thread-53596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:39:48.046 [DEBUG] [Thread-53594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:39:48.046 [DEBUG] [Thread-53594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:39:48.094 [DEBUG] [Thread-53594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:39:48.094 [DEBUG] [Thread-53594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:39:48.103 [DEBUG] [Thread-53594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:39:48.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:39: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')
2025-11-17T11:39:48.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:39:48.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:39:48.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:39:48.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:39:48.138 [DEBUG] [Thread-53594] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:40:02.691 [DEBUG] [Thread-53597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:40:07.396 [DEBUG] [Thread-53598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:40:17.719 [DEBUG] [Thread-53599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:40:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:40:18.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:40:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:40:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 39, 59), 23.2, 20.73, 0.0, 16.8, 20.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:40:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:39:59
2025-11-17T11:40:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:40:19.040 [DEBUG] [Thread-53600] [transport.py] [_log()] starting thread (client mode): 0xd0719180
2025-11-17T11:40:19.040 [DEBUG] [Thread-53600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:40:19.060 [DEBUG] [Thread-53600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:40:19.060 [INFO] [Thread-53600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] client lang: <none>
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] server lang: <none>
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] kex follows: False
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] Compression: none
2025-11-17T11:40:19.063 [DEBUG] [Thread-53600] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:40:19.081 [DEBUG] [Thread-53600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:40:19.082 [DEBUG] [Thread-53600] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:40:19.082 [DEBUG] [Thread-53600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:40:19.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:40:19.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:40:19.084 [DEBUG] [Thread-53600] [transport.py] [_log()] userauth is OK
2025-11-17T11:40:19.085 [DEBUG] [Thread-53600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:40:19.085 [DEBUG] [Thread-53600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:40:19.085 [DEBUG] [Thread-53600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:40:19.085 [DEBUG] [Thread-53600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:40:19.110 [INFO] [Thread-53600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:40:19.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:40:19.721 [DEBUG] [Thread-53600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:40:19.722 [DEBUG] [Thread-53600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:40:19.722 [DEBUG] [Thread-53600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:40:19.762 [DEBUG] [Thread-53600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:40:19.762 [DEBUG] [Thread-53600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:40:19.765 [DEBUG] [Thread-53600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:40:19.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:40:19.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:40:19.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:40:19.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:40:19.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:40:19.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:40:19.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:40:19.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:40:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:40:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.402479 -999.00  +20.20  12.02     26   +0.40 1 1 1 1 1   888    0 21.60 79.26 ----- 12.0 12.0 15.4 18.0 27.2 -24.8 26.2 -25.2 25.6 -22.5 26.3 -24.0
2025-11-17T11:40:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:40:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:40:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.402479
2025-11-17T11:40:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:40:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:40:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:40:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:40:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:40:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:39:59', tmtdew=23.2, humidity=20.73, cloud=0.0, wind=16.8, temperature=20.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:39:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:40:19.789 [DEBUG] [Thread-53600] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:40:19.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:40:19.885 [DEBUG] [Thread-53603] [transport.py] [_log()] starting thread (client mode): 0xd31cc1c0
2025-11-17T11:40:19.885 [DEBUG] [Thread-53603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:40:19.899 [DEBUG] [Thread-53603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:40:19.899 [INFO] [Thread-53603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] client lang: <none>
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] server lang: <none>
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] kex follows: False
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:40:19.907 [DEBUG] [Thread-53603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:40:19.908 [DEBUG] [Thread-53603] [transport.py] [_log()] Compression: none
2025-11-17T11:40:19.908 [DEBUG] [Thread-53603] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:40:19.963 [DEBUG] [Thread-53603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:40:19.963 [DEBUG] [Thread-53603] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:40:19.964 [DEBUG] [Thread-53603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:40:19.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:40:19.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:40:20.019 [DEBUG] [Thread-53603] [transport.py] [_log()] userauth is OK
2025-11-17T11:40:20.020 [DEBUG] [Thread-53603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:40:20.020 [DEBUG] [Thread-53603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:40:20.020 [DEBUG] [Thread-53603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:40:20.020 [DEBUG] [Thread-53603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:40:20.053 [INFO] [Thread-53603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:40:20.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:40:20.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:40:20.910 [DEBUG] [Thread-53603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:40:20.910 [DEBUG] [Thread-53603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:40:20.959 [DEBUG] [Thread-53603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:40:20.959 [DEBUG] [Thread-53603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:40:20.968 [DEBUG] [Thread-53603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:40:20.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:40:20.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:40:20.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:40:20.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:40:20.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:40:20.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:40:21.006 [DEBUG] [Thread-53603] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:40:32.749 [DEBUG] [Thread-53605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:40:36.239 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:40:36.240 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:40:47.781 [DEBUG] [Thread-53606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:40:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:40:51.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:40:51.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
2025-11-17T11:40:51.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 40, 31), 23.32, 20.55, 0.0, 11.12, 20.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:40:51.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:40:31
2025-11-17T11:40:51.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:40:51.944 [DEBUG] [Thread-53607] [transport.py] [_log()] starting thread (client mode): 0xd7bc7f40
2025-11-17T11:40:51.945 [DEBUG] [Thread-53607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:40:51.956 [DEBUG] [Thread-53607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:40:51.956 [INFO] [Thread-53607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] client lang: <none>
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] server lang: <none>
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] kex follows: False
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] Compression: none
2025-11-17T11:40:51.959 [DEBUG] [Thread-53607] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:40:51.976 [DEBUG] [Thread-53607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:40:51.976 [DEBUG] [Thread-53607] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:40:51.977 [DEBUG] [Thread-53607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:40:51.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:40:51.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:40:51.978 [DEBUG] [Thread-53607] [transport.py] [_log()] userauth is OK
2025-11-17T11:40:51.978 [DEBUG] [Thread-53607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:40:51.978 [DEBUG] [Thread-53607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:40:51.979 [DEBUG] [Thread-53607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:40:51.979 [DEBUG] [Thread-53607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:40:51.996 [INFO] [Thread-53607] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:40:51.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:40:52.768 [DEBUG] [Thread-53607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:40:52.768 [DEBUG] [Thread-53607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:40:52.769 [DEBUG] [Thread-53607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:40:52.809 [DEBUG] [Thread-53607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:40:52.810 [DEBUG] [Thread-53607] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:40:52.814 [DEBUG] [Thread-53607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:40:52.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:40:52.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:40:52.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:40:52.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:40:52.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:40:52.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:40:52.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:40:52.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:40:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:40:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.402826 -999.00  +19.90  12.18     27   +0.30 1 1 1 1 1   888    0 21.70 83.88 ----- 12.2 12.2 340.0 16.7 27.3 -25.2 26.2 -24.6 25.6 -23.8 26.4 -23.4
2025-11-17T11:40:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:40:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:40:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.402826
2025-11-17T11:40:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:40:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:40:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:40:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:40:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:40:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:40:31', tmtdew=23.32, humidity=20.55, cloud=0.0, wind=11.12, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:40:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:40:52.838 [DEBUG] [Thread-53607] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:40:52.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:40:52.937 [DEBUG] [Thread-53610] [transport.py] [_log()] starting thread (client mode): 0xd3134100
2025-11-17T11:40:52.937 [DEBUG] [Thread-53610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:40:52.952 [DEBUG] [Thread-53610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:40:52.952 [INFO] [Thread-53610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:40:52.960 [DEBUG] [Thread-53610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:40:52.960 [DEBUG] [Thread-53610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:40:52.960 [DEBUG] [Thread-53610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:40:52.960 [DEBUG] [Thread-53610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:40:52.960 [DEBUG] [Thread-53610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:40:52.960 [DEBUG] [Thread-53610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] client lang: <none>
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] server lang: <none>
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] kex follows: False
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] Compression: none
2025-11-17T11:40:52.961 [DEBUG] [Thread-53610] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:40:53.019 [DEBUG] [Thread-53610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:40:53.019 [DEBUG] [Thread-53610] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:40:53.020 [DEBUG] [Thread-53610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:40:53.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:40:53.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:40:53.075 [DEBUG] [Thread-53610] [transport.py] [_log()] userauth is OK
2025-11-17T11:40:53.076 [DEBUG] [Thread-53610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:40:53.076 [DEBUG] [Thread-53610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:40:53.076 [DEBUG] [Thread-53610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:40:53.076 [DEBUG] [Thread-53610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:40:53.095 [INFO] [Thread-53610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:40:53.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:40:53.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:40:53.945 [DEBUG] [Thread-53610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:40:53.945 [DEBUG] [Thread-53610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:40:53.993 [DEBUG] [Thread-53610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:40:53.993 [DEBUG] [Thread-53610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:40:54.002 [DEBUG] [Thread-53610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:40:54.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:40:54.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:40:54.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:40:54.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:40:54.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:40:54.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:40:54.037 [DEBUG] [Thread-53610] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:41:02.814 [DEBUG] [Thread-53612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:41:07.455 [DEBUG] [Thread-53613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:41:17.852 [DEBUG] [Thread-53614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:41:24.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:41:24.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:41:24.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:41:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 41, 3), 23.28, 20.66, 0.0, 11.74, 20.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:41:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:41:03
2025-11-17T11:41:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:41:24.977 [DEBUG] [Thread-53615] [transport.py] [_log()] starting thread (client mode): 0xd07ccaf0
2025-11-17T11:41:24.977 [DEBUG] [Thread-53615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:41:24.998 [DEBUG] [Thread-53615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:41:24.999 [INFO] [Thread-53615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:41:25.001 [DEBUG] [Thread-53615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] client lang: <none>
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] server lang: <none>
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] kex follows: False
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] Compression: none
2025-11-17T11:41:25.002 [DEBUG] [Thread-53615] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:41:25.022 [DEBUG] [Thread-53615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:41:25.022 [DEBUG] [Thread-53615] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:41:25.023 [DEBUG] [Thread-53615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:41:25.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:41:25.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:41:25.025 [DEBUG] [Thread-53615] [transport.py] [_log()] userauth is OK
2025-11-17T11:41:25.025 [DEBUG] [Thread-53615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:41:25.026 [DEBUG] [Thread-53615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:41:25.026 [DEBUG] [Thread-53615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:41:25.026 [DEBUG] [Thread-53615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:41:25.050 [INFO] [Thread-53615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:41:25.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:41:25.662 [DEBUG] [Thread-53615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:41:25.662 [DEBUG] [Thread-53615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:41:25.662 [DEBUG] [Thread-53615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:41:25.702 [DEBUG] [Thread-53615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:41:25.703 [DEBUG] [Thread-53615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:41:25.706 [DEBUG] [Thread-53615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:41:25.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:41:25.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:41:25.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:41:25.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:41:25.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:41:25.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:41:25.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:41:25.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:41:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:41:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.403173 -999.00  +19.80  13.41     27   +0.50 1 1 1 1 1   888    0 21.60 79.84 ----- 13.4 13.4 50.2 14.8 27.4 -24.8 26.3 -24.4 25.8 -22.8 -999.0 -999.0
2025-11-17T11:41:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:41:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:41:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.403173
2025-11-17T11:41:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:41:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:41:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:41:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:41:25.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:41:25.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:41:03', tmtdew=23.28, humidity=20.66, cloud=0.0, wind=11.74, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:40:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:41:25.734 [DEBUG] [Thread-53615] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:41:25.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:41:25.833 [DEBUG] [Thread-53618] [transport.py] [_log()] starting thread (client mode): 0xd7bc7ee0
2025-11-17T11:41:25.833 [DEBUG] [Thread-53618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:41:25.855 [DEBUG] [Thread-53618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:41:25.856 [INFO] [Thread-53618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:41:25.863 [DEBUG] [Thread-53618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:41:25.864 [DEBUG] [Thread-53618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:41:25.864 [DEBUG] [Thread-53618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:41:25.864 [DEBUG] [Thread-53618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:41:25.864 [DEBUG] [Thread-53618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:41:25.864 [DEBUG] [Thread-53618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:41:25.864 [DEBUG] [Thread-53618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:41:25.864 [DEBUG] [Thread-53618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:41:25.864 [DEBUG] [Thread-53618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:41:25.865 [DEBUG] [Thread-53618] [transport.py] [_log()] client lang: <none>
2025-11-17T11:41:25.865 [DEBUG] [Thread-53618] [transport.py] [_log()] server lang: <none>
2025-11-17T11:41:25.865 [DEBUG] [Thread-53618] [transport.py] [_log()] kex follows: False
2025-11-17T11:41:25.865 [DEBUG] [Thread-53618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:41:25.865 [DEBUG] [Thread-53618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:41:25.865 [DEBUG] [Thread-53618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:41:25.865 [DEBUG] [Thread-53618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:41:25.866 [DEBUG] [Thread-53618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:41:25.866 [DEBUG] [Thread-53618] [transport.py] [_log()] Compression: none
2025-11-17T11:41:25.866 [DEBUG] [Thread-53618] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:41:25.924 [DEBUG] [Thread-53618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:41:25.925 [DEBUG] [Thread-53618] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:41:25.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:41:25.926 [DEBUG] [Thread-53618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:41:25.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:41:25.980 [DEBUG] [Thread-53618] [transport.py] [_log()] userauth is OK
2025-11-17T11:41:25.980 [DEBUG] [Thread-53618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:41:25.980 [DEBUG] [Thread-53618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:41:25.980 [DEBUG] [Thread-53618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:41:25.980 [DEBUG] [Thread-53618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:41:26.000 [INFO] [Thread-53618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:41:26.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:41:26.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:41:26.857 [DEBUG] [Thread-53618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:41:26.858 [DEBUG] [Thread-53618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:41:26.905 [DEBUG] [Thread-53618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:41:26.905 [DEBUG] [Thread-53618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:41:26.914 [DEBUG] [Thread-53618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:41:26.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:41:26.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:41:26.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:41:26.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:41:26.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:41:26.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:41:26.949 [DEBUG] [Thread-53618] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:41:32.880 [DEBUG] [Thread-53620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:41:36.382 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:41:36.382 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:41:47.922 [DEBUG] [Thread-53621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:41:56.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:41:56.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:41:56.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:41:57.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 41, 35), 22.9, 21.27, 0.0, 9.74, 20.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:41:57.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:41:35
2025-11-17T11:41:57.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:41:57.913 [DEBUG] [Thread-53622] [transport.py] [_log()] starting thread (client mode): 0xd07cf400
2025-11-17T11:41:57.913 [DEBUG] [Thread-53622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:41:57.934 [DEBUG] [Thread-53622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:41:57.934 [INFO] [Thread-53622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] client lang: <none>
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] server lang: <none>
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] kex follows: False
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] Compression: none
2025-11-17T11:41:57.937 [DEBUG] [Thread-53622] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:41:57.951 [DEBUG] [Thread-53622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:41:57.951 [DEBUG] [Thread-53622] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:41:57.951 [DEBUG] [Thread-53622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:41:57.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:41:57.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:41:57.952 [DEBUG] [Thread-53622] [transport.py] [_log()] userauth is OK
2025-11-17T11:41:57.952 [DEBUG] [Thread-53622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:41:57.952 [DEBUG] [Thread-53622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:41:57.952 [DEBUG] [Thread-53622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:41:57.952 [DEBUG] [Thread-53622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:41:57.967 [INFO] [Thread-53622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:41:57.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:41:58.700 [DEBUG] [Thread-53622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:41:58.700 [DEBUG] [Thread-53622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:41:58.700 [DEBUG] [Thread-53622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:41:58.741 [DEBUG] [Thread-53622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:41:58.741 [DEBUG] [Thread-53622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:41:58.743 [DEBUG] [Thread-53622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:41:58.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:41:58.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:41:58.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:41:58.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:41:58.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:41:58.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:41:58.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:41:58.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:41:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:41:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.403520 -999.00  +20.00  15.88     27   +0.70 1 1 1 1 1   888    0 22.33 81.35 ----- 15.9 15.9 49.6 20.2 27.4 -24.5 26.4 -23.8 25.8 -22.6 26.6 -23.2
2025-11-17T11:41:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:41:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:41:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.403520
2025-11-17T11:41:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:41:58.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:41:58.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:41:58.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:41:58.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:41:58.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:41:35', tmtdew=22.9, humidity=21.27, cloud=0.0, wind=9.74, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:41:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:41:58.764 [DEBUG] [Thread-53622] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:41:58.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:41:58.855 [DEBUG] [Thread-53625] [transport.py] [_log()] starting thread (client mode): 0xd07cdfc0
2025-11-17T11:41:58.855 [DEBUG] [Thread-53625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:41:58.871 [DEBUG] [Thread-53625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:41:58.871 [INFO] [Thread-53625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] client lang: <none>
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] server lang: <none>
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] kex follows: False
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] Compression: none
2025-11-17T11:41:58.879 [DEBUG] [Thread-53625] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:41:58.940 [DEBUG] [Thread-53625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:41:58.941 [DEBUG] [Thread-53625] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:41:58.941 [DEBUG] [Thread-53625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:41:58.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:41:58.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:41:58.996 [DEBUG] [Thread-53625] [transport.py] [_log()] userauth is OK
2025-11-17T11:41:58.996 [DEBUG] [Thread-53625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:41:58.996 [DEBUG] [Thread-53625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:41:58.996 [DEBUG] [Thread-53625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:41:58.996 [DEBUG] [Thread-53625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:41:59.015 [INFO] [Thread-53625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:41:59.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:41:59.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:41:59.882 [DEBUG] [Thread-53625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:41:59.882 [DEBUG] [Thread-53625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:41:59.930 [DEBUG] [Thread-53625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:41:59.930 [DEBUG] [Thread-53625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:41:59.939 [DEBUG] [Thread-53625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:41:59.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:41:59.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:41:59.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:41:59.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:41:59.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:41:59.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:41:59.974 [DEBUG] [Thread-53625] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:42:02.954 [DEBUG] [Thread-53627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:42:07.499 [DEBUG] [Thread-53628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:42:17.993 [DEBUG] [Thread-53629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:42:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:42:29.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:42:29.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:42:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 42, 7), 22.92, 21.23, 0.0, 11.26, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:42:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:42:07
2025-11-17T11:42:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:42:30.916 [DEBUG] [Thread-53630] [transport.py] [_log()] starting thread (client mode): 0xd07cea70
2025-11-17T11:42:30.916 [DEBUG] [Thread-53630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:42:30.936 [DEBUG] [Thread-53630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:42:30.937 [INFO] [Thread-53630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] client lang: <none>
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] server lang: <none>
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] kex follows: False
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] Compression: none
2025-11-17T11:42:30.940 [DEBUG] [Thread-53630] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:42:30.956 [DEBUG] [Thread-53630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:42:30.957 [DEBUG] [Thread-53630] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:42:30.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:42:30.958 [DEBUG] [Thread-53630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:42:30.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:42:30.960 [DEBUG] [Thread-53630] [transport.py] [_log()] userauth is OK
2025-11-17T11:42:30.960 [DEBUG] [Thread-53630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:42:30.960 [DEBUG] [Thread-53630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:42:30.960 [DEBUG] [Thread-53630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:42:30.960 [DEBUG] [Thread-53630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:42:30.978 [INFO] [Thread-53630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:42:30.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:42:31.614 [DEBUG] [Thread-53630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:42:31.614 [DEBUG] [Thread-53630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:42:31.614 [DEBUG] [Thread-53630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:42:31.655 [DEBUG] [Thread-53630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:42:31.655 [DEBUG] [Thread-53630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:42:31.657 [DEBUG] [Thread-53630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:42:31.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:42:31.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:42:31.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:42:31.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:42:31.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:42:31.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:42:31.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:42:31.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:42:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:42:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.404215 -999.00  +20.10  15.27     26   +0.40 1 1 1 1 1   888    0 22.26 83.59 ----- 15.3 15.3 338.6 21.4 27.5 -25.5 26.4 -24.8 25.8 -23.5 26.6 -23.4
2025-11-17T11:42:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:42:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:42:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.404215
2025-11-17T11:42:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:42:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:42:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:42:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:42:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:42:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:42:07', tmtdew=22.92, humidity=21.23, cloud=0.0, wind=11.26, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:42:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:42:31.677 [DEBUG] [Thread-53630] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:42:31.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:42:31.762 [DEBUG] [Thread-53633] [transport.py] [_log()] starting thread (client mode): 0xd31cdf90
2025-11-17T11:42:31.763 [DEBUG] [Thread-53633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:42:31.778 [DEBUG] [Thread-53633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:42:31.778 [INFO] [Thread-53633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] client lang: <none>
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] server lang: <none>
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] kex follows: False
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] Compression: none
2025-11-17T11:42:31.786 [DEBUG] [Thread-53633] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:42:31.842 [DEBUG] [Thread-53633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:42:31.843 [DEBUG] [Thread-53633] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:42:31.843 [DEBUG] [Thread-53633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:42:31.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:42:31.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:42:31.900 [DEBUG] [Thread-53633] [transport.py] [_log()] userauth is OK
2025-11-17T11:42:31.900 [DEBUG] [Thread-53633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:42:31.900 [DEBUG] [Thread-53633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:42:31.900 [DEBUG] [Thread-53633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:42:31.900 [DEBUG] [Thread-53633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:42:31.918 [INFO] [Thread-53633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:42:31.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:42:31.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:42:32.777 [DEBUG] [Thread-53633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:42:32.777 [DEBUG] [Thread-53633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:42:32.825 [DEBUG] [Thread-53633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:42:32.825 [DEBUG] [Thread-53633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:42:32.833 [DEBUG] [Thread-53633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:42:32.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:42:32.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:42:32.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:42:32.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:42:32.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:42:32.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:42:32.865 [DEBUG] [Thread-53633] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:42:33.019 [DEBUG] [Thread-53635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:42:36.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:42:36.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:42:48.059 [DEBUG] [Thread-53636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:43:02.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:43:02.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:43:02.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:43:03.088 [DEBUG] [Thread-53637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:43:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 42, 39), 23.11, 20.75, 0.0, 10.43, 20.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:43:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:42:39
2025-11-17T11:43:03.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:43:03.806 [DEBUG] [Thread-53638] [transport.py] [_log()] starting thread (client mode): 0xd31cca60
2025-11-17T11:43:03.807 [DEBUG] [Thread-53638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:43:03.826 [DEBUG] [Thread-53638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:43:03.826 [INFO] [Thread-53638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] client lang: <none>
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] server lang: <none>
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] kex follows: False
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] Compression: none
2025-11-17T11:43:03.830 [DEBUG] [Thread-53638] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:43:03.848 [DEBUG] [Thread-53638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:43:03.848 [DEBUG] [Thread-53638] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:43:03.849 [DEBUG] [Thread-53638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:43:03.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:43:03.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:43:03.891 [DEBUG] [Thread-53638] [transport.py] [_log()] userauth is OK
2025-11-17T11:43:03.891 [DEBUG] [Thread-53638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:43:03.892 [DEBUG] [Thread-53638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:43:03.892 [DEBUG] [Thread-53638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:43:03.892 [DEBUG] [Thread-53638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:43:03.928 [INFO] [Thread-53638] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:43:03.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:43:04.721 [DEBUG] [Thread-53638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:43:04.721 [DEBUG] [Thread-53638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:43:04.721 [DEBUG] [Thread-53638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:43:04.762 [DEBUG] [Thread-53638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:43:04.762 [DEBUG] [Thread-53638] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:43:04.765 [DEBUG] [Thread-53638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:43:04.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:43:04.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:43:04.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:43:04.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:43:04.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:43:04.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:43:04.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:43:04.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:43:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:43:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.404562 -999.00  +19.60  14.13     27   +0.40 1 1 1 1 1   888    0 22.10 86.40 ----- 14.1 14.1 318.2 20.2 27.5 -24.9 26.4 -24.2 25.9 -23.0 26.6 -23.8
2025-11-17T11:43:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:43:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:43:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.404562
2025-11-17T11:43:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:43:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:43:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:43:04.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:43:04.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:43:04.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:42:39', tmtdew=23.11, humidity=20.75, cloud=0.0, wind=10.43, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:42:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:43:04.788 [DEBUG] [Thread-53638] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:43:04.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:43:04.894 [DEBUG] [Thread-53641] [transport.py] [_log()] starting thread (client mode): 0xd31370d0
2025-11-17T11:43:04.894 [DEBUG] [Thread-53641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:43:04.916 [DEBUG] [Thread-53641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:43:04.916 [INFO] [Thread-53641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:43:04.923 [DEBUG] [Thread-53641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] client lang: <none>
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] server lang: <none>
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] kex follows: False
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:43:04.924 [DEBUG] [Thread-53641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:43:04.925 [DEBUG] [Thread-53641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:43:04.925 [DEBUG] [Thread-53641] [transport.py] [_log()] Compression: none
2025-11-17T11:43:04.925 [DEBUG] [Thread-53641] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:43:04.984 [DEBUG] [Thread-53641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:43:04.984 [DEBUG] [Thread-53641] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:43:04.985 [DEBUG] [Thread-53641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:43:04.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:43:04.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:43:05.044 [DEBUG] [Thread-53641] [transport.py] [_log()] userauth is OK
2025-11-17T11:43:05.044 [DEBUG] [Thread-53641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:43:05.044 [DEBUG] [Thread-53641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:43:05.044 [DEBUG] [Thread-53641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:43:05.044 [DEBUG] [Thread-53641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:43:05.063 [INFO] [Thread-53641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:43:05.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:43:05.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:43:05.903 [DEBUG] [Thread-53641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:43:05.903 [DEBUG] [Thread-53641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:43:05.951 [DEBUG] [Thread-53641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:43:05.951 [DEBUG] [Thread-53641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:43:05.960 [DEBUG] [Thread-53641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:43:05.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:43:05.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:43:05.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:43:05.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:43:05.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:43:05.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:43:05.996 [DEBUG] [Thread-53641] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:43:07.549 [DEBUG] [Thread-53643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:43:18.115 [DEBUG] [Thread-53644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:43:33.155 [DEBUG] [Thread-53645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:43:36.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:43:36.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:43:36.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:43:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 43, 11), 23.07, 20.8, 0.0, 8.51, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:43:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:43:11
2025-11-17T11:43:36.663 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:43:36.664 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:43:36.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:43:36.916 [DEBUG] [Thread-53646] [transport.py] [_log()] starting thread (client mode): 0xd07be5f0
2025-11-17T11:43:36.917 [DEBUG] [Thread-53646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:43:36.938 [DEBUG] [Thread-53646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:43:36.939 [INFO] [Thread-53646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] client lang: <none>
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] server lang: <none>
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] kex follows: False
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] Compression: none
2025-11-17T11:43:36.942 [DEBUG] [Thread-53646] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:43:36.962 [DEBUG] [Thread-53646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:43:36.963 [DEBUG] [Thread-53646] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:43:36.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:43:36.964 [DEBUG] [Thread-53646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:43:36.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:43:36.966 [DEBUG] [Thread-53646] [transport.py] [_log()] userauth is OK
2025-11-17T11:43:36.966 [DEBUG] [Thread-53646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:43:36.966 [DEBUG] [Thread-53646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:43:36.966 [DEBUG] [Thread-53646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:43:36.966 [DEBUG] [Thread-53646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:43:36.989 [INFO] [Thread-53646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:43:36.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:43:37.617 [DEBUG] [Thread-53646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:43:37.617 [DEBUG] [Thread-53646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:43:37.617 [DEBUG] [Thread-53646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:43:37.659 [DEBUG] [Thread-53646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:43:37.659 [DEBUG] [Thread-53646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:43:37.662 [DEBUG] [Thread-53646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:43:37.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:43:37.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:43:37.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:43:37.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:43:37.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:43:37.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:43:37.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:43:37.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:43:37.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:43:37.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.404909 -999.00  +19.70  14.95     27   +0.50 1 1 1 1 1   888    0 21.97 81.27 ----- 14.9 14.9 297.0 16.9 27.6 -25.8 26.4 -24.1 25.9 -23.7 26.6 -23.6
2025-11-17T11:43:37.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:43:37.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:43:37.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.404909
2025-11-17T11:43:37.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:43:37.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:43:37.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:43:37.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:43:37.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:43:37.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:43:11', tmtdew=23.07, humidity=20.8, cloud=0.0, wind=8.51, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:43:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:43:37.686 [DEBUG] [Thread-53646] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:43:37.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:43:37.782 [DEBUG] [Thread-53649] [transport.py] [_log()] starting thread (client mode): 0xd07ce2c0
2025-11-17T11:43:37.782 [DEBUG] [Thread-53649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:43:37.798 [DEBUG] [Thread-53649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:43:37.798 [INFO] [Thread-53649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:43:37.805 [DEBUG] [Thread-53649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:43:37.805 [DEBUG] [Thread-53649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:43:37.805 [DEBUG] [Thread-53649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] client lang: <none>
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] server lang: <none>
2025-11-17T11:43:37.806 [DEBUG] [Thread-53649] [transport.py] [_log()] kex follows: False
2025-11-17T11:43:37.807 [DEBUG] [Thread-53649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:43:37.807 [DEBUG] [Thread-53649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:43:37.807 [DEBUG] [Thread-53649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:43:37.807 [DEBUG] [Thread-53649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:43:37.807 [DEBUG] [Thread-53649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:43:37.807 [DEBUG] [Thread-53649] [transport.py] [_log()] Compression: none
2025-11-17T11:43:37.807 [DEBUG] [Thread-53649] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:43:37.864 [DEBUG] [Thread-53649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:43:37.865 [DEBUG] [Thread-53649] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:43:37.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:43:37.867 [DEBUG] [Thread-53649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:43:37.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:43:37.920 [DEBUG] [Thread-53649] [transport.py] [_log()] userauth is OK
2025-11-17T11:43:37.920 [DEBUG] [Thread-53649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:43:37.920 [DEBUG] [Thread-53649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:43:37.920 [DEBUG] [Thread-53649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:43:37.920 [DEBUG] [Thread-53649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:43:37.942 [INFO] [Thread-53649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:43:37.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:43:37.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:43:38.774 [DEBUG] [Thread-53649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:43:38.774 [DEBUG] [Thread-53649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:43:38.822 [DEBUG] [Thread-53649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:43:38.822 [DEBUG] [Thread-53649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:43:38.831 [DEBUG] [Thread-53649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:43:38.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:43:38.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:43:38.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:43:38.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:43:38.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:43:38.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:43:38.866 [DEBUG] [Thread-53649] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:43:48.187 [DEBUG] [Thread-53651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:44:03.224 [DEBUG] [Thread-53652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:44:07.611 [DEBUG] [Thread-53653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:44:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:44:08.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:44:08.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:44:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 43, 43), 23.13, 20.9, 0.0, 7.96, 20.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:44:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:43:43
2025-11-17T11:44:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:44:09.797 [DEBUG] [Thread-53654] [transport.py] [_log()] starting thread (client mode): 0xd31cf400
2025-11-17T11:44:09.797 [DEBUG] [Thread-53654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:44:09.818 [DEBUG] [Thread-53654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:44:09.819 [INFO] [Thread-53654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:44:09.821 [DEBUG] [Thread-53654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:44:09.821 [DEBUG] [Thread-53654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] client lang: <none>
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] server lang: <none>
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] kex follows: False
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] Compression: none
2025-11-17T11:44:09.822 [DEBUG] [Thread-53654] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:44:09.840 [DEBUG] [Thread-53654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:44:09.840 [DEBUG] [Thread-53654] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:44:09.841 [DEBUG] [Thread-53654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:44:09.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:44:09.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:44:09.843 [DEBUG] [Thread-53654] [transport.py] [_log()] userauth is OK
2025-11-17T11:44:09.843 [DEBUG] [Thread-53654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:44:09.843 [DEBUG] [Thread-53654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:44:09.843 [DEBUG] [Thread-53654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:44:09.843 [DEBUG] [Thread-53654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:44:09.864 [INFO] [Thread-53654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:44:09.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:44:10.682 [DEBUG] [Thread-53654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:44:10.682 [DEBUG] [Thread-53654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:44:10.683 [DEBUG] [Thread-53654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:44:10.723 [DEBUG] [Thread-53654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:44:10.723 [DEBUG] [Thread-53654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:44:10.727 [DEBUG] [Thread-53654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:44:10.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:44:10.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:44:10.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:44:10.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:44:10.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:44:10.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:44:10.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:44:10.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:44:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:44:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.405257 -999.00  +19.80  10.31     26   +0.10 1 1 1 1 1   888    0 22.06 80.89 ----- 10.3 10.3 283.2 17.2 27.6 -25.6 26.6 -23.4 25.9 -23.1 26.7 -23.9
2025-11-17T11:44:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:44:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:44:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.405257
2025-11-17T11:44:10.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:44:10.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:44:10.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:44:10.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:44:10.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:44:10.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:43:43', tmtdew=23.13, humidity=20.9, cloud=0.0, wind=7.96, temperature=20.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:43:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:44:10.743 [DEBUG] [Thread-53654] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:44:10.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:44:10.843 [DEBUG] [Thread-53657] [transport.py] [_log()] starting thread (client mode): 0xd3160790
2025-11-17T11:44:10.843 [DEBUG] [Thread-53657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:44:10.858 [DEBUG] [Thread-53657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:44:10.858 [INFO] [Thread-53657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] client lang: <none>
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] server lang: <none>
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] kex follows: False
2025-11-17T11:44:10.866 [DEBUG] [Thread-53657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:44:10.867 [DEBUG] [Thread-53657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:44:10.867 [DEBUG] [Thread-53657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:44:10.867 [DEBUG] [Thread-53657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:44:10.867 [DEBUG] [Thread-53657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:44:10.867 [DEBUG] [Thread-53657] [transport.py] [_log()] Compression: none
2025-11-17T11:44:10.867 [DEBUG] [Thread-53657] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:44:10.928 [DEBUG] [Thread-53657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:44:10.928 [DEBUG] [Thread-53657] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:44:10.929 [DEBUG] [Thread-53657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:44:10.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:44:10.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:44:10.988 [DEBUG] [Thread-53657] [transport.py] [_log()] userauth is OK
2025-11-17T11:44:10.988 [DEBUG] [Thread-53657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:44:10.988 [DEBUG] [Thread-53657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:44:10.988 [DEBUG] [Thread-53657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:44:10.988 [DEBUG] [Thread-53657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:44:11.008 [INFO] [Thread-53657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:44:11.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:44:11.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:44:11.868 [DEBUG] [Thread-53657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:44:11.868 [DEBUG] [Thread-53657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:44:11.916 [DEBUG] [Thread-53657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:44:11.916 [DEBUG] [Thread-53657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:44:11.927 [DEBUG] [Thread-53657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:44:11.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:44:11.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:44:11.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:44:11.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:44:11.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:44:11.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:44:11.963 [DEBUG] [Thread-53657] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:44:18.255 [DEBUG] [Thread-53659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:44:33.297 [DEBUG] [Thread-53660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:44:36.803 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:44:36.804 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:44:41.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:44:41.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:44:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:44:42.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 44, 15), 23.28, 20.7, 0.0, 8.29, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:44:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:44:15
2025-11-17T11:44:42.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:44:42.896 [DEBUG] [Thread-53661] [transport.py] [_log()] starting thread (client mode): 0xd07bd660
2025-11-17T11:44:42.896 [DEBUG] [Thread-53661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:44:42.917 [DEBUG] [Thread-53661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:44:42.917 [INFO] [Thread-53661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:44:42.920 [DEBUG] [Thread-53661] [transport.py] [_log()] client lang: <none>
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] server lang: <none>
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] kex follows: False
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] Compression: none
2025-11-17T11:44:42.921 [DEBUG] [Thread-53661] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:44:42.929 [DEBUG] [Thread-53661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:44:42.930 [DEBUG] [Thread-53661] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:44:42.930 [DEBUG] [Thread-53661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:44:42.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:44:42.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:44:42.932 [DEBUG] [Thread-53661] [transport.py] [_log()] userauth is OK
2025-11-17T11:44:42.933 [DEBUG] [Thread-53661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:44:42.933 [DEBUG] [Thread-53661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:44:42.933 [DEBUG] [Thread-53661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:44:42.933 [DEBUG] [Thread-53661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:44:42.951 [INFO] [Thread-53661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:44:42.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:44:43.583 [DEBUG] [Thread-53661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:44:43.584 [DEBUG] [Thread-53661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:44:43.584 [DEBUG] [Thread-53661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:44:43.624 [DEBUG] [Thread-53661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:44:43.625 [DEBUG] [Thread-53661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:44:43.628 [DEBUG] [Thread-53661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:44:43.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:44:43.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:44:43.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:44:43.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:44:43.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:44:43.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:44:43.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:44:43.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:44:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:44:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.405604 -999.00  +19.90  11.58     27   +0.30 1 1 1 1 1   888    0 21.06 76.01 ----- 11.6 11.6 289.2 18.1 27.6 -25.7 26.6 -24.4 26.0 -23.3 26.7 -24.1
2025-11-17T11:44:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:44:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:44:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.405604
2025-11-17T11:44:43.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:44:43.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:44:43.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:44:43.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:44:43.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:44:43.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:44:15', tmtdew=23.28, humidity=20.7, cloud=0.0, wind=8.29, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:44:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:44:43.654 [DEBUG] [Thread-53661] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:44:43.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:44:43.751 [DEBUG] [Thread-53664] [transport.py] [_log()] starting thread (client mode): 0xd07bcd90
2025-11-17T11:44:43.751 [DEBUG] [Thread-53664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:44:43.770 [DEBUG] [Thread-53664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:44:43.771 [INFO] [Thread-53664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:44:43.778 [DEBUG] [Thread-53664] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:44:43.778 [DEBUG] [Thread-53664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:44:43.778 [DEBUG] [Thread-53664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:44:43.778 [DEBUG] [Thread-53664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:44:43.778 [DEBUG] [Thread-53664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:44:43.778 [DEBUG] [Thread-53664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:44:43.778 [DEBUG] [Thread-53664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] client lang: <none>
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] server lang: <none>
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] kex follows: False
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] Compression: none
2025-11-17T11:44:43.779 [DEBUG] [Thread-53664] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:44:43.835 [DEBUG] [Thread-53664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:44:43.836 [DEBUG] [Thread-53664] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:44:43.836 [DEBUG] [Thread-53664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:44:43.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:44:43.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:44:43.892 [DEBUG] [Thread-53664] [transport.py] [_log()] userauth is OK
2025-11-17T11:44:43.892 [DEBUG] [Thread-53664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:44:43.892 [DEBUG] [Thread-53664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:44:43.892 [DEBUG] [Thread-53664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:44:43.892 [DEBUG] [Thread-53664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:44:43.912 [INFO] [Thread-53664] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:44:43.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:44:43.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:44:44.861 [DEBUG] [Thread-53664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:44:44.861 [DEBUG] [Thread-53664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:44:44.909 [DEBUG] [Thread-53664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:44:44.909 [DEBUG] [Thread-53664] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:44:44.918 [DEBUG] [Thread-53664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:44:44.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:44: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')
2025-11-17T11:44:44.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:44:44.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:44:44.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:44:44.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:44:44.954 [DEBUG] [Thread-53664] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:44:48.334 [DEBUG] [Thread-53666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:45:03.367 [DEBUG] [Thread-53667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:45:07.661 [DEBUG] [Thread-53668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:45:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:45:14.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:45:14.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:45:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 44, 47), 23.08, 20.92, 0.0, 6.23, 20.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:45:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:44:47
2025-11-17T11:45:15.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:45:15.887 [DEBUG] [Thread-53669] [transport.py] [_log()] starting thread (client mode): 0xd31cc550
2025-11-17T11:45:15.887 [DEBUG] [Thread-53669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:45:15.907 [DEBUG] [Thread-53669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:45:15.907 [INFO] [Thread-53669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:45:15.910 [DEBUG] [Thread-53669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:45:15.910 [DEBUG] [Thread-53669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:45:15.910 [DEBUG] [Thread-53669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:45:15.910 [DEBUG] [Thread-53669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] client lang: <none>
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] server lang: <none>
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] kex follows: False
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] Compression: none
2025-11-17T11:45:15.911 [DEBUG] [Thread-53669] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:45:15.929 [DEBUG] [Thread-53669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:45:15.929 [DEBUG] [Thread-53669] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:45:15.930 [DEBUG] [Thread-53669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:45:15.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:45:15.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:45:15.932 [DEBUG] [Thread-53669] [transport.py] [_log()] userauth is OK
2025-11-17T11:45:15.932 [DEBUG] [Thread-53669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:45:15.932 [DEBUG] [Thread-53669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:45:15.932 [DEBUG] [Thread-53669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:45:15.932 [DEBUG] [Thread-53669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:45:15.957 [INFO] [Thread-53669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:45:15.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:45:18.400 [DEBUG] [Thread-53671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:45:19.581 [DEBUG] [Thread-53669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:45:19.582 [DEBUG] [Thread-53669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:45:19.582 [DEBUG] [Thread-53669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:45:19.622 [DEBUG] [Thread-53669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:45:19.622 [DEBUG] [Thread-53669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:45:19.624 [DEBUG] [Thread-53669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:45:19.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:45:19.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:45:19.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:45:19.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:45:19.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:45:19.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:45:19.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:45:19.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:45:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:45:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.405951 -999.00  +19.80   5.43     27   +0.30 1 1 1 1 1   888    0 21.27 72.13 ----- 5.4 5.4 266.3 14.3 27.5 -25.8 26.6 -25.0 25.7 -27.8 26.8 -23.6
2025-11-17T11:45:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:45:19.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:45:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.405951
2025-11-17T11:45:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:45:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:45:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:45:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:45:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:45:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:44:47', tmtdew=23.08, humidity=20.92, cloud=0.0, wind=6.23, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:44:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:45:19.645 [DEBUG] [Thread-53669] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:45:19.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:45:19.730 [DEBUG] [Thread-53673] [transport.py] [_log()] starting thread (client mode): 0xd0785b70
2025-11-17T11:45:19.730 [DEBUG] [Thread-53673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:45:19.745 [DEBUG] [Thread-53673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:45:19.745 [INFO] [Thread-53673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] client lang: <none>
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] server lang: <none>
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] kex follows: False
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:45:19.752 [DEBUG] [Thread-53673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:45:19.753 [DEBUG] [Thread-53673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:45:19.753 [DEBUG] [Thread-53673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:45:19.753 [DEBUG] [Thread-53673] [transport.py] [_log()] Compression: none
2025-11-17T11:45:19.753 [DEBUG] [Thread-53673] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:45:19.810 [DEBUG] [Thread-53673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:45:19.811 [DEBUG] [Thread-53673] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:45:19.811 [DEBUG] [Thread-53673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:45:19.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:45:19.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:45:19.867 [DEBUG] [Thread-53673] [transport.py] [_log()] userauth is OK
2025-11-17T11:45:19.867 [DEBUG] [Thread-53673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:45:19.867 [DEBUG] [Thread-53673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:45:19.867 [DEBUG] [Thread-53673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:45:19.868 [DEBUG] [Thread-53673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:45:19.885 [INFO] [Thread-53673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:45:19.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:45:19.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:45:20.793 [DEBUG] [Thread-53673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:45:20.793 [DEBUG] [Thread-53673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:45:20.844 [DEBUG] [Thread-53673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:45:20.844 [DEBUG] [Thread-53673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:45:20.857 [DEBUG] [Thread-53673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:45:20.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:45:20.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:45:20.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:45:20.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:45:20.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:45:20.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:45:20.903 [DEBUG] [Thread-53673] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:45:33.428 [DEBUG] [Thread-53675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:45:36.945 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:45:36.946 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:45:48.473 [DEBUG] [Thread-53676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:45:50.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:45:50.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:45:50.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:45:51.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 45, 19), 23.13, 20.84, 0.0, 5.28, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:45:51.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:45:19
2025-11-17T11:45:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:45:51.863 [DEBUG] [Thread-53677] [transport.py] [_log()] starting thread (client mode): 0xd31cc940
2025-11-17T11:45:51.863 [DEBUG] [Thread-53677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:45:51.884 [DEBUG] [Thread-53677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:45:51.884 [INFO] [Thread-53677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] client lang: <none>
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] server lang: <none>
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] kex follows: False
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] Compression: none
2025-11-17T11:45:51.886 [DEBUG] [Thread-53677] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:45:51.898 [DEBUG] [Thread-53677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:45:51.898 [DEBUG] [Thread-53677] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:45:51.898 [DEBUG] [Thread-53677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:45:51.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:45:51.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:45:51.899 [DEBUG] [Thread-53677] [transport.py] [_log()] userauth is OK
2025-11-17T11:45:51.899 [DEBUG] [Thread-53677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:45:51.899 [DEBUG] [Thread-53677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:45:51.899 [DEBUG] [Thread-53677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:45:51.899 [DEBUG] [Thread-53677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:45:51.909 [INFO] [Thread-53677] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:45:51.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:45:52.559 [DEBUG] [Thread-53677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:45:52.559 [DEBUG] [Thread-53677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:45:52.559 [DEBUG] [Thread-53677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:45:52.600 [DEBUG] [Thread-53677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:45:52.600 [DEBUG] [Thread-53677] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:45:52.602 [DEBUG] [Thread-53677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:45:52.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:45:52.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:45:52.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:45:52.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:45:52.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:45:52.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:45:52.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:45:52.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:45:52.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:45:52.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.406298 -999.00  +19.90   4.17     27   +0.30 1 1 1 1 1   888    0 21.64 68.82 ----- 4.2 4.2 39.9 9.8 27.8 -24.5 26.6 -23.7 25.9 -23.6 26.9 -23.2
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.406298
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:45:52.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:45:19', tmtdew=23.13, humidity=20.84, cloud=0.0, wind=5.28, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:45:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:45:52.621 [DEBUG] [Thread-53677] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:45:52.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:45:52.707 [DEBUG] [Thread-53680] [transport.py] [_log()] starting thread (client mode): 0xd07ce2f0
2025-11-17T11:45:52.707 [DEBUG] [Thread-53680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:45:52.724 [DEBUG] [Thread-53680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:45:52.724 [INFO] [Thread-53680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] client lang: <none>
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] server lang: <none>
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] kex follows: False
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] Compression: none
2025-11-17T11:45:52.732 [DEBUG] [Thread-53680] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:45:52.790 [DEBUG] [Thread-53680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:45:52.790 [DEBUG] [Thread-53680] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:45:52.790 [DEBUG] [Thread-53680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:45:52.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:45:52.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:45:52.847 [DEBUG] [Thread-53680] [transport.py] [_log()] userauth is OK
2025-11-17T11:45:52.847 [DEBUG] [Thread-53680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:45:52.847 [DEBUG] [Thread-53680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:45:52.847 [DEBUG] [Thread-53680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:45:52.847 [DEBUG] [Thread-53680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:45:52.866 [INFO] [Thread-53680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:45:52.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:45:52.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:45:53.786 [DEBUG] [Thread-53680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:45:53.786 [DEBUG] [Thread-53680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:45:53.834 [DEBUG] [Thread-53680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:45:53.835 [DEBUG] [Thread-53680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:45:53.844 [DEBUG] [Thread-53680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:45:53.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:45:53.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:45:53.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:45:53.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:45:53.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:45:53.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:45:53.877 [DEBUG] [Thread-53680] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:46:03.500 [DEBUG] [Thread-53682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:46:07.714 [DEBUG] [Thread-53683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:46:18.541 [DEBUG] [Thread-53684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:46:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:46:23.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:46:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:46:24.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 45, 51), 22.9, 21.0, 0.0, 15.88, 20.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:46:24.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:45:51
2025-11-17T11:46:24.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:46:24.910 [DEBUG] [Thread-53685] [transport.py] [_log()] starting thread (client mode): 0xd075bbe0
2025-11-17T11:46:24.910 [DEBUG] [Thread-53685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:46:24.934 [DEBUG] [Thread-53685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:46:24.934 [INFO] [Thread-53685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] client lang: <none>
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] server lang: <none>
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] kex follows: False
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] Compression: none
2025-11-17T11:46:24.936 [DEBUG] [Thread-53685] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:46:24.948 [DEBUG] [Thread-53685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:46:24.948 [DEBUG] [Thread-53685] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:46:24.949 [DEBUG] [Thread-53685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:46:24.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:46:24.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:46:24.950 [DEBUG] [Thread-53685] [transport.py] [_log()] userauth is OK
2025-11-17T11:46:24.950 [DEBUG] [Thread-53685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:46:24.950 [DEBUG] [Thread-53685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:46:24.950 [DEBUG] [Thread-53685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:46:24.950 [DEBUG] [Thread-53685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:46:24.962 [INFO] [Thread-53685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:46:24.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:46:25.526 [DEBUG] [Thread-53685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:46:25.526 [DEBUG] [Thread-53685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:46:25.526 [DEBUG] [Thread-53685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:46:25.567 [DEBUG] [Thread-53685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:46:25.567 [DEBUG] [Thread-53685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:46:25.568 [DEBUG] [Thread-53685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:46:25.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:46:25.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:46:25.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:46:25.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:46:25.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:46:25.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:46:25.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:46:25.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.406645 -999.00  +20.20  37.66     26   +0.60 1 1 2 1 1   888    0 21.60 71.13 ----- 37.7 37.7 265.6 40.5 27.7 -26.4 26.6 -25.2 25.9 -25.3 26.8 -26.4
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.406645
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:46:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:45:51', tmtdew=22.9, humidity=21.0, cloud=0.0, wind=15.88, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:45:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:46:25.588 [DEBUG] [Thread-53685] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:46:25.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:46:25.675 [DEBUG] [Thread-53688] [transport.py] [_log()] starting thread (client mode): 0xd3161390
2025-11-17T11:46:25.676 [DEBUG] [Thread-53688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:46:25.690 [DEBUG] [Thread-53688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:46:25.690 [INFO] [Thread-53688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] client lang: <none>
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] server lang: <none>
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] kex follows: False
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] Compression: none
2025-11-17T11:46:25.698 [DEBUG] [Thread-53688] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:46:25.759 [DEBUG] [Thread-53688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:46:25.759 [DEBUG] [Thread-53688] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:46:25.759 [DEBUG] [Thread-53688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:46:25.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:46:25.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:46:25.816 [DEBUG] [Thread-53688] [transport.py] [_log()] userauth is OK
2025-11-17T11:46:25.816 [DEBUG] [Thread-53688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:46:25.816 [DEBUG] [Thread-53688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:46:25.816 [DEBUG] [Thread-53688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:46:25.816 [DEBUG] [Thread-53688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:46:25.832 [INFO] [Thread-53688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:46:25.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:46:25.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:46:26.721 [DEBUG] [Thread-53688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:46:26.721 [DEBUG] [Thread-53688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:46:26.769 [DEBUG] [Thread-53688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:46:26.769 [DEBUG] [Thread-53688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:46:26.777 [DEBUG] [Thread-53688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:46:26.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:46: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')
2025-11-17T11:46:26.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:46:26.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:46:26.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:46:26.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:46:26.808 [DEBUG] [Thread-53688] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:46:33.576 [DEBUG] [Thread-53690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:46:37.089 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:46:37.090 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:46:48.617 [DEBUG] [Thread-53691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:46:56.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:46:56.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:46:56.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:46:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 46, 23), 22.88, 21.0, 0.0, 11.52, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:46:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:46:23
2025-11-17T11:46:57.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:46:57.768 [DEBUG] [Thread-53692] [transport.py] [_log()] starting thread (client mode): 0xd0787c40
2025-11-17T11:46:57.768 [DEBUG] [Thread-53692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:46:57.788 [DEBUG] [Thread-53692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:46:57.788 [INFO] [Thread-53692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:46:57.790 [DEBUG] [Thread-53692] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] client lang: <none>
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] server lang: <none>
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] kex follows: False
2025-11-17T11:46:57.791 [DEBUG] [Thread-53692] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:46:57.792 [DEBUG] [Thread-53692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:46:57.792 [DEBUG] [Thread-53692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:46:57.792 [DEBUG] [Thread-53692] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:46:57.792 [DEBUG] [Thread-53692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:46:57.792 [DEBUG] [Thread-53692] [transport.py] [_log()] Compression: none
2025-11-17T11:46:57.792 [DEBUG] [Thread-53692] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:46:57.810 [DEBUG] [Thread-53692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:46:57.811 [DEBUG] [Thread-53692] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:46:57.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:46:57.812 [DEBUG] [Thread-53692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:46:57.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:46:57.814 [DEBUG] [Thread-53692] [transport.py] [_log()] userauth is OK
2025-11-17T11:46:57.814 [DEBUG] [Thread-53692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:46:57.815 [DEBUG] [Thread-53692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:46:57.815 [DEBUG] [Thread-53692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:46:57.815 [DEBUG] [Thread-53692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:46:57.839 [INFO] [Thread-53692] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:46:57.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:46:58.476 [DEBUG] [Thread-53692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:46:58.476 [DEBUG] [Thread-53692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:46:58.476 [DEBUG] [Thread-53692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:46:58.516 [DEBUG] [Thread-53692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:46:58.517 [DEBUG] [Thread-53692] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:46:58.520 [DEBUG] [Thread-53692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:46:58.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:46:58.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:46:58.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:46:58.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:46:58.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:46:58.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:46:58.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:46:58.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:46:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:46:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.407340 -999.00  +20.70  15.36     26   +0.50 1 1 1 1 1   888    0 22.02 80.32 ----- 15.4 15.4 29.6 22.9 27.6 -24.4 26.4 -25.0 25.8 -24.9 26.7 -23.5
2025-11-17T11:46:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:46:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:46:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.407340
2025-11-17T11:46:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:46:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:46:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:46:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:46:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:46:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:46:23', tmtdew=22.88, humidity=21.0, cloud=0.0, wind=11.52, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:46:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:46:58.545 [DEBUG] [Thread-53692] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:46:58.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:46:58.640 [DEBUG] [Thread-53695] [transport.py] [_log()] starting thread (client mode): 0xd07cd0c0
2025-11-17T11:46:58.640 [DEBUG] [Thread-53695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:46:58.654 [DEBUG] [Thread-53695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:46:58.654 [INFO] [Thread-53695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:46:58.661 [DEBUG] [Thread-53695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:46:58.661 [DEBUG] [Thread-53695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:46:58.661 [DEBUG] [Thread-53695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] client lang: <none>
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] server lang: <none>
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] kex follows: False
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] Compression: none
2025-11-17T11:46:58.662 [DEBUG] [Thread-53695] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:46:58.719 [DEBUG] [Thread-53695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:46:58.720 [DEBUG] [Thread-53695] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:46:58.721 [DEBUG] [Thread-53695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:46:58.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:46:58.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:46:58.776 [DEBUG] [Thread-53695] [transport.py] [_log()] userauth is OK
2025-11-17T11:46:58.776 [DEBUG] [Thread-53695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:46:58.776 [DEBUG] [Thread-53695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:46:58.777 [DEBUG] [Thread-53695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:46:58.777 [DEBUG] [Thread-53695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:46:58.794 [INFO] [Thread-53695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:46:58.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:46:58.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:46:59.700 [DEBUG] [Thread-53695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:46:59.700 [DEBUG] [Thread-53695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:46:59.748 [DEBUG] [Thread-53695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:46:59.748 [DEBUG] [Thread-53695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:46:59.757 [DEBUG] [Thread-53695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:46:59.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:46:59.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:46:59.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:46:59.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:46:59.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:46:59.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:46:59.792 [DEBUG] [Thread-53695] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:47:03.650 [DEBUG] [Thread-53697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:47:07.766 [DEBUG] [Thread-53698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:47:18.684 [DEBUG] [Thread-53699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:47:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:47:29.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:47:29.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:47:30.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 47, 27), 23.03, 20.85, 0.0, 9.48, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:47:30.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:47:27
2025-11-17T11:47:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:47:30.749 [DEBUG] [Thread-53700] [transport.py] [_log()] starting thread (client mode): 0xd07ccb50
2025-11-17T11:47:30.749 [DEBUG] [Thread-53700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:47:30.764 [DEBUG] [Thread-53700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:47:30.764 [INFO] [Thread-53700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:47:30.766 [DEBUG] [Thread-53700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] client lang: <none>
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] server lang: <none>
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] kex follows: False
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] Compression: none
2025-11-17T11:47:30.767 [DEBUG] [Thread-53700] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:47:30.784 [DEBUG] [Thread-53700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:47:30.784 [DEBUG] [Thread-53700] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:47:30.784 [DEBUG] [Thread-53700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:47:30.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:47:30.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:47:30.786 [DEBUG] [Thread-53700] [transport.py] [_log()] userauth is OK
2025-11-17T11:47:30.786 [DEBUG] [Thread-53700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:47:30.787 [DEBUG] [Thread-53700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:47:30.787 [DEBUG] [Thread-53700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:47:30.787 [DEBUG] [Thread-53700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:47:30.801 [INFO] [Thread-53700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:47:30.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:47:31.419 [DEBUG] [Thread-53700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:47:31.420 [DEBUG] [Thread-53700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:47:31.420 [DEBUG] [Thread-53700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:47:31.460 [DEBUG] [Thread-53700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:47:31.461 [DEBUG] [Thread-53700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:47:31.463 [DEBUG] [Thread-53700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:47:31.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:47:31.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:47:31.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:47:31.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:47:31.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:47:31.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:47:31.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:47:31.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:47:31.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:47:31.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.407687 -999.00  +20.50  21.67     26   +0.70 1 1 1 1 1   888    0 22.34 80.27 ----- 21.7 21.7 326.4 23.7 27.5 -25.1 26.5 -24.2 25.9 -23.1 26.5 -23.1
2025-11-17T11:47:31.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:47:31.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:47:31.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.407687
2025-11-17T11:47:31.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:47:31.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:47:31.488 [DEBUG] [Thread-53700] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:47:31.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:47:31.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:47:31.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:47:31.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:47:27', tmtdew=23.03, humidity=20.85, cloud=0.0, wind=9.48, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:47:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:47:31.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:47:31.585 [DEBUG] [Thread-53703] [transport.py] [_log()] starting thread (client mode): 0xd0786590
2025-11-17T11:47:31.585 [DEBUG] [Thread-53703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:47:31.599 [DEBUG] [Thread-53703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:47:31.599 [INFO] [Thread-53703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:47:31.607 [DEBUG] [Thread-53703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:47:31.607 [DEBUG] [Thread-53703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:47:31.607 [DEBUG] [Thread-53703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:47:31.607 [DEBUG] [Thread-53703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:47:31.607 [DEBUG] [Thread-53703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:47:31.607 [DEBUG] [Thread-53703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] client lang: <none>
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] server lang: <none>
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] kex follows: False
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:47:31.608 [DEBUG] [Thread-53703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:47:31.609 [DEBUG] [Thread-53703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:47:31.609 [DEBUG] [Thread-53703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:47:31.609 [DEBUG] [Thread-53703] [transport.py] [_log()] Compression: none
2025-11-17T11:47:31.609 [DEBUG] [Thread-53703] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:47:31.668 [DEBUG] [Thread-53703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:47:31.669 [DEBUG] [Thread-53703] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:47:31.669 [DEBUG] [Thread-53703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:47:31.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:47:31.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:47:31.724 [DEBUG] [Thread-53703] [transport.py] [_log()] userauth is OK
2025-11-17T11:47:31.724 [DEBUG] [Thread-53703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:47:31.725 [DEBUG] [Thread-53703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:47:31.725 [DEBUG] [Thread-53703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:47:31.725 [DEBUG] [Thread-53703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:47:31.744 [INFO] [Thread-53703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:47:31.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:47:31.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:47:32.618 [DEBUG] [Thread-53703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:47:32.618 [DEBUG] [Thread-53703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:47:32.666 [DEBUG] [Thread-53703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:47:32.667 [DEBUG] [Thread-53703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:47:32.675 [DEBUG] [Thread-53703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:47:32.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:47:32.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:47:32.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:47:32.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:47:32.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:47:32.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:47:32.710 [DEBUG] [Thread-53703] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:47:33.714 [DEBUG] [Thread-53705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:47:37.234 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:47:37.235 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:47:48.755 [DEBUG] [Thread-53706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:48:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:48:02.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:48:02.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:48:03.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 47, 59), 23.34, 20.33, 0.0, 15.35, 20.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:48:03.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:47:59
2025-11-17T11:48:03.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:48:03.662 [DEBUG] [Thread-53707] [transport.py] [_log()] starting thread (client mode): 0xd0718640
2025-11-17T11:48:03.663 [DEBUG] [Thread-53707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:48:03.682 [DEBUG] [Thread-53707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:48:03.682 [INFO] [Thread-53707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] client lang: <none>
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] server lang: <none>
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] kex follows: False
2025-11-17T11:48:03.685 [DEBUG] [Thread-53707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:48:03.686 [DEBUG] [Thread-53707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:48:03.686 [DEBUG] [Thread-53707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:48:03.686 [DEBUG] [Thread-53707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:48:03.686 [DEBUG] [Thread-53707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:48:03.686 [DEBUG] [Thread-53707] [transport.py] [_log()] Compression: none
2025-11-17T11:48:03.686 [DEBUG] [Thread-53707] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:48:03.702 [DEBUG] [Thread-53707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:48:03.703 [DEBUG] [Thread-53707] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:48:03.703 [DEBUG] [Thread-53707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:48:03.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:48:03.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:48:03.747 [DEBUG] [Thread-53707] [transport.py] [_log()] userauth is OK
2025-11-17T11:48:03.748 [DEBUG] [Thread-53707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:48:03.748 [DEBUG] [Thread-53707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:48:03.748 [DEBUG] [Thread-53707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:48:03.748 [DEBUG] [Thread-53707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:48:03.768 [INFO] [Thread-53707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:48:03.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:48:03.783 [DEBUG] [Thread-53709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:48:04.369 [DEBUG] [Thread-53707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:48:04.369 [DEBUG] [Thread-53707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:48:04.369 [DEBUG] [Thread-53707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:48:04.409 [DEBUG] [Thread-53707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:48:04.409 [DEBUG] [Thread-53707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:48:04.412 [DEBUG] [Thread-53707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:48:04.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:48:04.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:48:04.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:48:04.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:48:04.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:48:04.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:48:04.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:48:04.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:48:04.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:48:04.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.408034 -999.00  +20.20  22.02     26   +0.40 1 1 1 1 1   888    0 22.07 79.85 ----- 22.0 22.0 325.0 23.8 27.6 -25.7 26.4 -25.2 25.9 -23.1 26.7 -23.7
2025-11-17T11:48:04.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:48:04.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:48:04.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.408034
2025-11-17T11:48:04.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:48:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:48:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:48:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:48:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:48:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:47:59', tmtdew=23.34, humidity=20.33, cloud=0.0, wind=15.35, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:47:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:48:04.436 [DEBUG] [Thread-53707] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:48:04.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:48:04.535 [DEBUG] [Thread-53711] [transport.py] [_log()] starting thread (client mode): 0xd07860e0
2025-11-17T11:48:04.535 [DEBUG] [Thread-53711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:48:04.550 [DEBUG] [Thread-53711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:48:04.550 [INFO] [Thread-53711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:48:04.557 [DEBUG] [Thread-53711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] client lang: <none>
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] server lang: <none>
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] kex follows: False
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] Compression: none
2025-11-17T11:48:04.558 [DEBUG] [Thread-53711] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:48:04.619 [DEBUG] [Thread-53711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:48:04.620 [DEBUG] [Thread-53711] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:48:04.620 [DEBUG] [Thread-53711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:48:04.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:48:04.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:48:04.680 [DEBUG] [Thread-53711] [transport.py] [_log()] userauth is OK
2025-11-17T11:48:04.680 [DEBUG] [Thread-53711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:48:04.680 [DEBUG] [Thread-53711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:48:04.680 [DEBUG] [Thread-53711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:48:04.680 [DEBUG] [Thread-53711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:48:04.698 [INFO] [Thread-53711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:48:04.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:48:04.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:48:05.580 [DEBUG] [Thread-53711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:48:05.580 [DEBUG] [Thread-53711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:48:05.628 [DEBUG] [Thread-53711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:48:05.628 [DEBUG] [Thread-53711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:48:05.637 [DEBUG] [Thread-53711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:48:05.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:48:05.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:48:05.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:48:05.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:48:05.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:48:05.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:48:05.671 [DEBUG] [Thread-53711] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:48:07.818 [DEBUG] [Thread-53713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:48:18.816 [DEBUG] [Thread-53714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:48:33.847 [DEBUG] [Thread-53715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:48:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:48:35.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:48:35.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:48:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 48, 31), 23.44, 20.23, 0.0, 16.6, 20.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:48:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:48:31
2025-11-17T11:48:36.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:48:36.606 [DEBUG] [Thread-53716] [transport.py] [_log()] starting thread (client mode): 0xd0719a20
2025-11-17T11:48:36.606 [DEBUG] [Thread-53716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:48:36.626 [DEBUG] [Thread-53716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:48:36.626 [INFO] [Thread-53716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:48:36.629 [DEBUG] [Thread-53716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:48:36.629 [DEBUG] [Thread-53716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:48:36.629 [DEBUG] [Thread-53716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:48:36.629 [DEBUG] [Thread-53716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] client lang: <none>
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] server lang: <none>
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] kex follows: False
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:48:36.630 [DEBUG] [Thread-53716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:48:36.631 [DEBUG] [Thread-53716] [transport.py] [_log()] Compression: none
2025-11-17T11:48:36.631 [DEBUG] [Thread-53716] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:48:36.649 [DEBUG] [Thread-53716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:48:36.649 [DEBUG] [Thread-53716] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:48:36.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:48:36.650 [DEBUG] [Thread-53716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:48:36.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:48:36.652 [DEBUG] [Thread-53716] [transport.py] [_log()] userauth is OK
2025-11-17T11:48:36.652 [DEBUG] [Thread-53716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:48:36.652 [DEBUG] [Thread-53716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:48:36.652 [DEBUG] [Thread-53716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:48:36.652 [DEBUG] [Thread-53716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:48:36.676 [INFO] [Thread-53716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:48:36.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:48:37.287 [DEBUG] [Thread-53716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:48:37.288 [DEBUG] [Thread-53716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:48:37.288 [DEBUG] [Thread-53716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:48:37.328 [DEBUG] [Thread-53716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:48:37.328 [DEBUG] [Thread-53716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:48:37.331 [DEBUG] [Thread-53716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:48:37.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:48:37.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:48:37.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:48:37.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:48:37.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:48:37.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:48:37.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:48:37.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:48:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:48:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.408381 -999.00  +19.50  13.66     27   +0.20 1 1 1 1 1   888    0 21.75 73.14 ----- 13.7 13.7 330.7 22.5 27.6 -24.9 26.4 -24.2 25.9 -23.1 26.7 -23.5
2025-11-17T11:48:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:48:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:48:37.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.408381
2025-11-17T11:48:37.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:48:37.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:48:37.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:48:37.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:48:37.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:48:37.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:48:31', tmtdew=23.44, humidity=20.23, cloud=0.0, wind=16.6, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:48:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:48:37.354 [DEBUG] [Thread-53716] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:48:37.375 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:48:37.376 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:48:37.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:48:37.452 [DEBUG] [Thread-53719] [transport.py] [_log()] starting thread (client mode): 0xd07bef50
2025-11-17T11:48:37.452 [DEBUG] [Thread-53719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:48:37.466 [DEBUG] [Thread-53719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:48:37.466 [INFO] [Thread-53719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:48:37.474 [DEBUG] [Thread-53719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:48:37.474 [DEBUG] [Thread-53719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:48:37.474 [DEBUG] [Thread-53719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:48:37.474 [DEBUG] [Thread-53719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] client lang: <none>
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] server lang: <none>
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] kex follows: False
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:48:37.475 [DEBUG] [Thread-53719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:48:37.476 [DEBUG] [Thread-53719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:48:37.476 [DEBUG] [Thread-53719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:48:37.476 [DEBUG] [Thread-53719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:48:37.476 [DEBUG] [Thread-53719] [transport.py] [_log()] Compression: none
2025-11-17T11:48:37.476 [DEBUG] [Thread-53719] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:48:37.532 [DEBUG] [Thread-53719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:48:37.532 [DEBUG] [Thread-53719] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:48:37.533 [DEBUG] [Thread-53719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:48:37.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:48:37.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:48:37.588 [DEBUG] [Thread-53719] [transport.py] [_log()] userauth is OK
2025-11-17T11:48:37.588 [DEBUG] [Thread-53719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:48:37.588 [DEBUG] [Thread-53719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:48:37.588 [DEBUG] [Thread-53719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:48:37.588 [DEBUG] [Thread-53719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:48:37.607 [INFO] [Thread-53719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:48:37.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:48:37.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:48:38.458 [DEBUG] [Thread-53719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:48:38.458 [DEBUG] [Thread-53719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:48:38.506 [DEBUG] [Thread-53719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:48:38.506 [DEBUG] [Thread-53719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:48:38.515 [DEBUG] [Thread-53719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:48:38.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:48:38.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:48:38.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:48:38.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:48:38.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:48:38.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:48:38.552 [DEBUG] [Thread-53719] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:48:48.883 [DEBUG] [Thread-53721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:49:03.913 [DEBUG] [Thread-53722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:49:07.869 [DEBUG] [Thread-53723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:49:08.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:49:08.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:49:08.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
2025-11-17T11:49:09.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 49, 3), 23.45, 20.23, 0.0, 14.79, 20.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:49:09.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:49:03
2025-11-17T11:49:09.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:49:09.505 [DEBUG] [Thread-53724] [transport.py] [_log()] starting thread (client mode): 0xd31cc6a0
2025-11-17T11:49:09.506 [DEBUG] [Thread-53724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:49:09.520 [DEBUG] [Thread-53724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:49:09.521 [INFO] [Thread-53724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] client lang: <none>
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] server lang: <none>
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] kex follows: False
2025-11-17T11:49:09.523 [DEBUG] [Thread-53724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:49:09.524 [DEBUG] [Thread-53724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:49:09.524 [DEBUG] [Thread-53724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:49:09.524 [DEBUG] [Thread-53724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:49:09.524 [DEBUG] [Thread-53724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:49:09.524 [DEBUG] [Thread-53724] [transport.py] [_log()] Compression: none
2025-11-17T11:49:09.524 [DEBUG] [Thread-53724] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:49:09.543 [DEBUG] [Thread-53724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:49:09.543 [DEBUG] [Thread-53724] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:49:09.544 [DEBUG] [Thread-53724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:49:09.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:49:09.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:49:09.545 [DEBUG] [Thread-53724] [transport.py] [_log()] userauth is OK
2025-11-17T11:49:09.546 [DEBUG] [Thread-53724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:49:09.546 [DEBUG] [Thread-53724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:49:09.546 [DEBUG] [Thread-53724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:49:09.546 [DEBUG] [Thread-53724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:49:09.569 [INFO] [Thread-53724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:49:09.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:49:10.181 [DEBUG] [Thread-53724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:49:10.181 [DEBUG] [Thread-53724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:49:10.181 [DEBUG] [Thread-53724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:49:10.222 [DEBUG] [Thread-53724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:49:10.222 [DEBUG] [Thread-53724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:49:10.225 [DEBUG] [Thread-53724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:49:10.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:49:10.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:49:10.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:49:10.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:49:10.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:49:10.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:49:10.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:49:10.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:49:10.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:49:10.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.408729 -999.00  +19.50  13.59     27   +0.30 1 1 1 1 1   888    0 21.10 57.89 ----- 13.6 13.6 322.0 18.5 27.6 -25.0 26.4 -24.5 25.9 -23.0 26.7 -24.7
2025-11-17T11:49:10.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:49:10.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:49:10.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.408729
2025-11-17T11:49:10.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:49:10.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:49:10.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:49:10.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:49:10.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:49:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:49:03', tmtdew=23.45, humidity=20.23, cloud=0.0, wind=14.79, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:48:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:49:10.249 [DEBUG] [Thread-53724] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:49:10.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:49:10.347 [DEBUG] [Thread-53727] [transport.py] [_log()] starting thread (client mode): 0xd07bcd00
2025-11-17T11:49:10.347 [DEBUG] [Thread-53727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:49:10.362 [DEBUG] [Thread-53727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:49:10.363 [INFO] [Thread-53727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] client lang: <none>
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] server lang: <none>
2025-11-17T11:49:10.370 [DEBUG] [Thread-53727] [transport.py] [_log()] kex follows: False
2025-11-17T11:49:10.371 [DEBUG] [Thread-53727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:49:10.371 [DEBUG] [Thread-53727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:49:10.371 [DEBUG] [Thread-53727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:49:10.371 [DEBUG] [Thread-53727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:49:10.371 [DEBUG] [Thread-53727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:49:10.371 [DEBUG] [Thread-53727] [transport.py] [_log()] Compression: none
2025-11-17T11:49:10.371 [DEBUG] [Thread-53727] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:49:10.429 [DEBUG] [Thread-53727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:49:10.430 [DEBUG] [Thread-53727] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:49:10.430 [DEBUG] [Thread-53727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:49:10.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:49:10.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:49:10.488 [DEBUG] [Thread-53727] [transport.py] [_log()] userauth is OK
2025-11-17T11:49:10.488 [DEBUG] [Thread-53727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:49:10.488 [DEBUG] [Thread-53727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:49:10.488 [DEBUG] [Thread-53727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:49:10.488 [DEBUG] [Thread-53727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:49:10.508 [INFO] [Thread-53727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:49:10.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:49:10.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:49:11.382 [DEBUG] [Thread-53727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:49:11.383 [DEBUG] [Thread-53727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:49:11.433 [DEBUG] [Thread-53727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:49:11.433 [DEBUG] [Thread-53727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:49:11.442 [DEBUG] [Thread-53727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:49:11.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:49: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')
2025-11-17T11:49:11.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:49:11.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:49:11.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:49:11.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:49:11.485 [DEBUG] [Thread-53727] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:49:18.941 [DEBUG] [Thread-53729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:49:33.980 [DEBUG] [Thread-53730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:49:37.516 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:49:37.516 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:49:41.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:49:41.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:49: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
2025-11-17T11:49:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 49, 35), 23.5, 20.62, 0.0, 6.6, 20.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:49:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:49:35
2025-11-17T11:49:42.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:49:42.415 [DEBUG] [Thread-53731] [transport.py] [_log()] starting thread (client mode): 0xd07bcbb0
2025-11-17T11:49:42.415 [DEBUG] [Thread-53731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:49:42.434 [DEBUG] [Thread-53731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:49:42.434 [INFO] [Thread-53731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] client lang: <none>
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] server lang: <none>
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] kex follows: False
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:49:42.436 [DEBUG] [Thread-53731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:49:42.437 [DEBUG] [Thread-53731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:49:42.437 [DEBUG] [Thread-53731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:49:42.437 [DEBUG] [Thread-53731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:49:42.437 [DEBUG] [Thread-53731] [transport.py] [_log()] Compression: none
2025-11-17T11:49:42.437 [DEBUG] [Thread-53731] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:49:42.448 [DEBUG] [Thread-53731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:49:42.448 [DEBUG] [Thread-53731] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:49:42.448 [DEBUG] [Thread-53731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:49:42.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:49:42.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:49:42.450 [DEBUG] [Thread-53731] [transport.py] [_log()] userauth is OK
2025-11-17T11:49:42.450 [DEBUG] [Thread-53731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:49:42.450 [DEBUG] [Thread-53731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:49:42.450 [DEBUG] [Thread-53731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:49:42.450 [DEBUG] [Thread-53731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:49:42.469 [INFO] [Thread-53731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:49:42.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:49:43.108 [DEBUG] [Thread-53731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:49:43.108 [DEBUG] [Thread-53731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:49:43.108 [DEBUG] [Thread-53731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:49:43.150 [DEBUG] [Thread-53731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:49:43.150 [DEBUG] [Thread-53731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:49:43.153 [DEBUG] [Thread-53731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:49:43.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:49:43.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:49:43.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:49:43.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:49:43.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:49:43.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:49:43.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:49:43.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:49:43.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:49:43.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.409076 -999.00  +19.70  16.68     28   +0.70 1 2 1 1 1   888    0 20.91 48.65 ----- 16.7 16.7 303.5 20.8 27.6 -24.4 26.5 -23.1 26.0 -22.1 26.8 -22.8
2025-11-17T11:49:43.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:49:43.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:49:43.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.409076
2025-11-17T11:49:43.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:49:43.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:49:43.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:49:43.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:49:43.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:49:43.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:49:35', tmtdew=23.5, humidity=20.62, cloud=0.0, wind=6.6, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:49:04.166', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:49:43.176 [DEBUG] [Thread-53731] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:49:43.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:49:43.269 [DEBUG] [Thread-53734] [transport.py] [_log()] starting thread (client mode): 0xd3163e20
2025-11-17T11:49:43.269 [DEBUG] [Thread-53734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:49:43.289 [DEBUG] [Thread-53734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:49:43.289 [INFO] [Thread-53734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:49:43.296 [DEBUG] [Thread-53734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] client lang: <none>
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] server lang: <none>
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] kex follows: False
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:49:43.297 [DEBUG] [Thread-53734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:49:43.298 [DEBUG] [Thread-53734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:49:43.298 [DEBUG] [Thread-53734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:49:43.298 [DEBUG] [Thread-53734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:49:43.298 [DEBUG] [Thread-53734] [transport.py] [_log()] Compression: none
2025-11-17T11:49:43.298 [DEBUG] [Thread-53734] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:49:43.357 [DEBUG] [Thread-53734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:49:43.357 [DEBUG] [Thread-53734] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:49:43.357 [DEBUG] [Thread-53734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:49:43.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:49:43.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:49:43.416 [DEBUG] [Thread-53734] [transport.py] [_log()] userauth is OK
2025-11-17T11:49:43.416 [DEBUG] [Thread-53734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:49:43.417 [DEBUG] [Thread-53734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:49:43.417 [DEBUG] [Thread-53734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:49:43.417 [DEBUG] [Thread-53734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:49:43.439 [INFO] [Thread-53734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:49:43.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:49:43.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:49:44.279 [DEBUG] [Thread-53734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:49:44.279 [DEBUG] [Thread-53734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:49:44.327 [DEBUG] [Thread-53734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:49:44.327 [DEBUG] [Thread-53734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:49:44.336 [DEBUG] [Thread-53734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:49:44.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:49:44.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:49:44.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:49:44.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:49:44.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:49:44.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:49:44.370 [DEBUG] [Thread-53734] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:49:49.010 [DEBUG] [Thread-53736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:50:04.052 [DEBUG] [Thread-53737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:50:07.920 [DEBUG] [Thread-53738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:50:14.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:50:14.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:50:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:50:15.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 50, 7), 23.76, 20.25, 0.0, 12.0, 21.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:50:15.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:50:07
2025-11-17T11:50:15.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:50:15.325 [DEBUG] [Thread-53739] [transport.py] [_log()] starting thread (client mode): 0xd3134f10
2025-11-17T11:50:15.325 [DEBUG] [Thread-53739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:50:15.344 [DEBUG] [Thread-53739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:50:15.344 [INFO] [Thread-53739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:50:15.347 [DEBUG] [Thread-53739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:50:15.347 [DEBUG] [Thread-53739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:50:15.347 [DEBUG] [Thread-53739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:50:15.347 [DEBUG] [Thread-53739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:50:15.347 [DEBUG] [Thread-53739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] client lang: <none>
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] server lang: <none>
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] kex follows: False
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] Compression: none
2025-11-17T11:50:15.348 [DEBUG] [Thread-53739] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:50:15.364 [DEBUG] [Thread-53739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:50:15.364 [DEBUG] [Thread-53739] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:50:15.365 [DEBUG] [Thread-53739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:50:15.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:50:15.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:50:15.367 [DEBUG] [Thread-53739] [transport.py] [_log()] userauth is OK
2025-11-17T11:50:15.367 [DEBUG] [Thread-53739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:50:15.367 [DEBUG] [Thread-53739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:50:15.367 [DEBUG] [Thread-53739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:50:15.367 [DEBUG] [Thread-53739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:50:15.391 [INFO] [Thread-53739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:50:15.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:50:16.034 [DEBUG] [Thread-53739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:50:16.034 [DEBUG] [Thread-53739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:50:16.034 [DEBUG] [Thread-53739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:50:16.075 [DEBUG] [Thread-53739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:50:16.075 [DEBUG] [Thread-53739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:50:16.078 [DEBUG] [Thread-53739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:50:16.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:50:16.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:50:16.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:50:16.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:50:16.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:50:16.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:50:16.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:50:16.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:50:16.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:50:16.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.409424 -999.00  +20.70  13.54     26   +0.90 1 2 1 1 1   888    0 21.03 40.07 ----- 13.5 13.5 328.8 15.2 27.8 -24.0 26.7 -22.5 26.1 -21.6 27.0 -22.5
2025-11-17T11:50:16.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:50:16.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:50:16.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.409424
2025-11-17T11:50:16.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:50:16.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:50:16.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:50:16.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:50:16.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:50:16.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:50:07', tmtdew=23.76, humidity=20.25, cloud=0.0, wind=12.0, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:49:34.234', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:50:16.106 [DEBUG] [Thread-53739] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:50:16.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:50:16.203 [DEBUG] [Thread-53742] [transport.py] [_log()] starting thread (client mode): 0xd31efe50
2025-11-17T11:50:16.204 [DEBUG] [Thread-53742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:50:16.218 [DEBUG] [Thread-53742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:50:16.218 [INFO] [Thread-53742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:50:16.225 [DEBUG] [Thread-53742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] client lang: <none>
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] server lang: <none>
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] kex follows: False
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] Compression: none
2025-11-17T11:50:16.226 [DEBUG] [Thread-53742] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:50:16.283 [DEBUG] [Thread-53742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:50:16.283 [DEBUG] [Thread-53742] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:50:16.283 [DEBUG] [Thread-53742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:50:16.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:50:16.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:50:16.344 [DEBUG] [Thread-53742] [transport.py] [_log()] userauth is OK
2025-11-17T11:50:16.344 [DEBUG] [Thread-53742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:50:16.344 [DEBUG] [Thread-53742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:50:16.344 [DEBUG] [Thread-53742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:50:16.344 [DEBUG] [Thread-53742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:50:16.357 [INFO] [Thread-53742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:50:16.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:50:16.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:50:17.256 [DEBUG] [Thread-53742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:50:17.257 [DEBUG] [Thread-53742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:50:17.304 [DEBUG] [Thread-53742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:50:17.304 [DEBUG] [Thread-53742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:50:17.312 [DEBUG] [Thread-53742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:50:17.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:50:17.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:50:17.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:50:17.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:50:17.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:50:17.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:50:17.348 [DEBUG] [Thread-53742] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:50:19.079 [DEBUG] [Thread-53744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:50:34.112 [DEBUG] [Thread-53745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:50:37.657 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:50:37.658 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:50:47.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:50:47.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:50:47.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:50:47.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 50, 39), 23.93, 19.84, 0.0, 14.24, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:50:47.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:50:39
2025-11-17T11:50:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:50:48.265 [DEBUG] [Thread-53746] [transport.py] [_log()] starting thread (client mode): 0xd0718820
2025-11-17T11:50:48.265 [DEBUG] [Thread-53746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:50:48.284 [DEBUG] [Thread-53746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:50:48.284 [INFO] [Thread-53746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:50:48.287 [DEBUG] [Thread-53746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:50:48.287 [DEBUG] [Thread-53746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:50:48.287 [DEBUG] [Thread-53746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:50:48.287 [DEBUG] [Thread-53746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] client lang: <none>
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] server lang: <none>
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] kex follows: False
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] Compression: none
2025-11-17T11:50:48.288 [DEBUG] [Thread-53746] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:50:48.303 [DEBUG] [Thread-53746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:50:48.303 [DEBUG] [Thread-53746] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:50:48.303 [DEBUG] [Thread-53746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:50:48.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:50:48.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:50:48.305 [DEBUG] [Thread-53746] [transport.py] [_log()] userauth is OK
2025-11-17T11:50:48.305 [DEBUG] [Thread-53746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:50:48.305 [DEBUG] [Thread-53746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:50:48.305 [DEBUG] [Thread-53746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:50:48.305 [DEBUG] [Thread-53746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:50:48.319 [INFO] [Thread-53746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:50:48.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:50:48.876 [DEBUG] [Thread-53746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:50:48.876 [DEBUG] [Thread-53746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:50:48.877 [DEBUG] [Thread-53746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:50:48.917 [DEBUG] [Thread-53746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:50:48.918 [DEBUG] [Thread-53746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:50:48.921 [DEBUG] [Thread-53746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:50:48.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:50:48.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:50:48.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:50:48.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:50:48.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:50:48.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:50:48.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:50:48.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:50:48.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:50:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.410118 -999.00  +20.90   9.35     25   +0.60 1 2 1 1 1   888    0 20.97 42.37 ----- 9.3 9.3 341.9 21.9 27.9 -24.3 26.9 -23.1 26.2 -22.2 27.2 -22.8
2025-11-17T11:50:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:50:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:50:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.410118
2025-11-17T11:50:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:50:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:50:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:50:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:50:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:50:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:50:39', tmtdew=23.93, humidity=19.84, cloud=0.0, wind=14.24, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:50:34.195', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:50:48.947 [DEBUG] [Thread-53746] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:50:49.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:50:49.044 [DEBUG] [Thread-53749] [transport.py] [_log()] starting thread (client mode): 0xd0787760
2025-11-17T11:50:49.044 [DEBUG] [Thread-53749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:50:49.058 [DEBUG] [Thread-53749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:50:49.059 [INFO] [Thread-53749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] client lang: <none>
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] server lang: <none>
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] kex follows: False
2025-11-17T11:50:49.066 [DEBUG] [Thread-53749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:50:49.067 [DEBUG] [Thread-53749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:50:49.067 [DEBUG] [Thread-53749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:50:49.067 [DEBUG] [Thread-53749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:50:49.067 [DEBUG] [Thread-53749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:50:49.067 [DEBUG] [Thread-53749] [transport.py] [_log()] Compression: none
2025-11-17T11:50:49.067 [DEBUG] [Thread-53749] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:50:49.126 [DEBUG] [Thread-53749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:50:49.127 [DEBUG] [Thread-53749] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:50:49.127 [DEBUG] [Thread-53749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:50:49.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:50:49.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:50:49.155 [DEBUG] [Thread-53751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:50:49.184 [DEBUG] [Thread-53749] [transport.py] [_log()] userauth is OK
2025-11-17T11:50:49.184 [DEBUG] [Thread-53749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:50:49.184 [DEBUG] [Thread-53749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:50:49.184 [DEBUG] [Thread-53749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:50:49.184 [DEBUG] [Thread-53749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:50:49.207 [INFO] [Thread-53749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:50:49.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:50:49.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:50:50.065 [DEBUG] [Thread-53749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:50:50.065 [DEBUG] [Thread-53749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:50:50.113 [DEBUG] [Thread-53749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:50:50.113 [DEBUG] [Thread-53749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:50:50.124 [DEBUG] [Thread-53749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:50:50.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:50:50.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:50:50.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:50:50.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:50:50.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:50:50.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:50:50.168 [DEBUG] [Thread-53749] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:51:04.202 [DEBUG] [Thread-53752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:51:07.972 [DEBUG] [Thread-53753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:51:19.231 [DEBUG] [Thread-53754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:51:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:51:20.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:51:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:51:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 51, 11), 24.14, 19.59, 0.0, 22.37, 21.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:51:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:51:11
2025-11-17T11:51:20.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:51:21.080 [DEBUG] [Thread-53755] [transport.py] [_log()] starting thread (client mode): 0xd31b2e30
2025-11-17T11:51:21.080 [DEBUG] [Thread-53755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:51:21.100 [DEBUG] [Thread-53755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:51:21.100 [INFO] [Thread-53755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:51:21.103 [DEBUG] [Thread-53755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:51:21.103 [DEBUG] [Thread-53755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:51:21.103 [DEBUG] [Thread-53755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:51:21.103 [DEBUG] [Thread-53755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:51:21.103 [DEBUG] [Thread-53755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] client lang: <none>
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] server lang: <none>
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] kex follows: False
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] Compression: none
2025-11-17T11:51:21.104 [DEBUG] [Thread-53755] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:51:21.121 [DEBUG] [Thread-53755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:51:21.122 [DEBUG] [Thread-53755] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:51:21.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:51:21.123 [DEBUG] [Thread-53755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:51:21.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:51:21.124 [DEBUG] [Thread-53755] [transport.py] [_log()] userauth is OK
2025-11-17T11:51:21.125 [DEBUG] [Thread-53755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:51:21.125 [DEBUG] [Thread-53755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:51:21.125 [DEBUG] [Thread-53755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:51:21.125 [DEBUG] [Thread-53755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:51:21.147 [INFO] [Thread-53755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:51:21.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:51:21.735 [DEBUG] [Thread-53755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:51:21.735 [DEBUG] [Thread-53755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:51:21.736 [DEBUG] [Thread-53755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:51:21.776 [DEBUG] [Thread-53755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:51:21.777 [DEBUG] [Thread-53755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:51:21.779 [DEBUG] [Thread-53755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:51:21.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:51:21.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:51:21.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:51:21.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:51:21.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:51:21.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:51:21.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:51:21.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:51:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:51:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.410465 -999.00  +20.80  21.42     25   +0.30 1 1 1 1 1   888    0 21.00 40.94 ----- 21.4 21.4 330.2 28.9 27.9 -25.3 26.8 -24.0 26.4 -23.5 27.2 -23.3
2025-11-17T11:51:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:51:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:51:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.410465
2025-11-17T11:51:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:51:21.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:51:21.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:51:21.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:51:21.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:51:21.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:51:11', tmtdew=24.14, humidity=19.59, cloud=0.0, wind=22.37, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:51:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:51:21.801 [DEBUG] [Thread-53755] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:51:21.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:51:21.897 [DEBUG] [Thread-53758] [transport.py] [_log()] starting thread (client mode): 0xd071b4f0
2025-11-17T11:51:21.897 [DEBUG] [Thread-53758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:51:21.915 [DEBUG] [Thread-53758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:51:21.915 [INFO] [Thread-53758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:51:21.923 [DEBUG] [Thread-53758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:51:21.923 [DEBUG] [Thread-53758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:51:21.923 [DEBUG] [Thread-53758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:51:21.923 [DEBUG] [Thread-53758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] client lang: <none>
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] server lang: <none>
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] kex follows: False
2025-11-17T11:51:21.924 [DEBUG] [Thread-53758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:51:21.925 [DEBUG] [Thread-53758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:51:21.925 [DEBUG] [Thread-53758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:51:21.925 [DEBUG] [Thread-53758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:51:21.925 [DEBUG] [Thread-53758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:51:21.925 [DEBUG] [Thread-53758] [transport.py] [_log()] Compression: none
2025-11-17T11:51:21.925 [DEBUG] [Thread-53758] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:51:21.984 [DEBUG] [Thread-53758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:51:21.985 [DEBUG] [Thread-53758] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:51:21.985 [DEBUG] [Thread-53758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:51:21.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:51:21.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:51:22.040 [DEBUG] [Thread-53758] [transport.py] [_log()] userauth is OK
2025-11-17T11:51:22.040 [DEBUG] [Thread-53758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:51:22.041 [DEBUG] [Thread-53758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:51:22.041 [DEBUG] [Thread-53758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:51:22.041 [DEBUG] [Thread-53758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:51:22.061 [INFO] [Thread-53758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:51:22.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:51:22.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:51:22.914 [DEBUG] [Thread-53758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:51:22.914 [DEBUG] [Thread-53758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:51:22.953 [DEBUG] [Thread-53758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:51:22.953 [DEBUG] [Thread-53758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:51:22.962 [DEBUG] [Thread-53758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:51:22.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:51:22.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:51:22.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:51:22.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:51:22.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:51:22.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:51:22.996 [DEBUG] [Thread-53758] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:51:34.262 [DEBUG] [Thread-53760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:51:37.799 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:51:37.800 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:51:49.297 [DEBUG] [Thread-53761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:51:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:51:53.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:51:53.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:51:53.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 51, 43), 24.55, 18.79, 0.0, 21.14, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:51:53.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:51:43
2025-11-17T11:51:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:51:53.937 [DEBUG] [Thread-53762] [transport.py] [_log()] starting thread (client mode): 0xd31534f0
2025-11-17T11:51:53.938 [DEBUG] [Thread-53762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:51:53.959 [DEBUG] [Thread-53762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:51:53.959 [INFO] [Thread-53762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:51:53.961 [DEBUG] [Thread-53762] [transport.py] [_log()] client lang: <none>
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] server lang: <none>
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] kex follows: False
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] Compression: none
2025-11-17T11:51:53.962 [DEBUG] [Thread-53762] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:51:53.974 [DEBUG] [Thread-53762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:51:53.975 [DEBUG] [Thread-53762] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:51:53.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:51:53.976 [DEBUG] [Thread-53762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:51:53.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:51:53.979 [DEBUG] [Thread-53762] [transport.py] [_log()] userauth is OK
2025-11-17T11:51:53.979 [DEBUG] [Thread-53762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:51:53.979 [DEBUG] [Thread-53762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:51:53.979 [DEBUG] [Thread-53762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:51:53.979 [DEBUG] [Thread-53762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:51:54.004 [INFO] [Thread-53762] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:51:54.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:51:54.569 [DEBUG] [Thread-53762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:51:54.570 [DEBUG] [Thread-53762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:51:54.570 [DEBUG] [Thread-53762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:51:54.610 [DEBUG] [Thread-53762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:51:54.610 [DEBUG] [Thread-53762] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:51:54.616 [DEBUG] [Thread-53762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:51:54.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:51:54.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:51:54.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:51:54.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:51:54.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:51:54.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:51:54.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:51:54.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:51:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:51:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.410812 -999.00  +21.00  12.89     25   +0.60 1 1 1 1 1   888    0 20.89 39.22 ----- 12.9 12.9 34.6 21.1 27.9 -24.2 26.8 -23.9 26.3 -22.7 27.1 -23.9
2025-11-17T11:51:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:51:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:51:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.410812
2025-11-17T11:51:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:51:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:51:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:51:54.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:51:54.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:51:54.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:51:43', tmtdew=24.55, humidity=18.79, cloud=0.0, wind=21.14, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:51:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:51:54.637 [DEBUG] [Thread-53762] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:51:54.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:51:54.733 [DEBUG] [Thread-53765] [transport.py] [_log()] starting thread (client mode): 0xd31b0e20
2025-11-17T11:51:54.733 [DEBUG] [Thread-53765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:51:54.748 [DEBUG] [Thread-53765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:51:54.748 [INFO] [Thread-53765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] client lang: <none>
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] server lang: <none>
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] kex follows: False
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:51:54.756 [DEBUG] [Thread-53765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:51:54.757 [DEBUG] [Thread-53765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:51:54.757 [DEBUG] [Thread-53765] [transport.py] [_log()] Compression: none
2025-11-17T11:51:54.757 [DEBUG] [Thread-53765] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:51:54.812 [DEBUG] [Thread-53765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:51:54.812 [DEBUG] [Thread-53765] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:51:54.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:51:54.813 [DEBUG] [Thread-53765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:51:54.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:51:54.868 [DEBUG] [Thread-53765] [transport.py] [_log()] userauth is OK
2025-11-17T11:51:54.868 [DEBUG] [Thread-53765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:51:54.868 [DEBUG] [Thread-53765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:51:54.868 [DEBUG] [Thread-53765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:51:54.868 [DEBUG] [Thread-53765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:51:54.888 [INFO] [Thread-53765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:51:54.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:51:54.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:51:55.746 [DEBUG] [Thread-53765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:51:55.747 [DEBUG] [Thread-53765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:51:55.794 [DEBUG] [Thread-53765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:51:55.794 [DEBUG] [Thread-53765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:51:55.803 [DEBUG] [Thread-53765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:51:55.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:51:55.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:51:55.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:51:55.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:51:55.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:51:55.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:51:55.843 [DEBUG] [Thread-53765] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:52:04.323 [DEBUG] [Thread-53767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:52:08.025 [DEBUG] [Thread-53768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:52:19.368 [DEBUG] [Thread-53769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:52:25.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:52:25.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:52:25.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:52:26.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 52, 15), 24.4, 18.97, 0.0, 22.0, 20.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:52:26.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:52:15
2025-11-17T11:52:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:52:26.786 [DEBUG] [Thread-53770] [transport.py] [_log()] starting thread (client mode): 0xd31b0fa0
2025-11-17T11:52:26.786 [DEBUG] [Thread-53770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:52:26.800 [DEBUG] [Thread-53770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:52:26.801 [INFO] [Thread-53770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] client lang: <none>
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] server lang: <none>
2025-11-17T11:52:26.804 [DEBUG] [Thread-53770] [transport.py] [_log()] kex follows: False
2025-11-17T11:52:26.805 [DEBUG] [Thread-53770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:52:26.805 [DEBUG] [Thread-53770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:52:26.805 [DEBUG] [Thread-53770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:52:26.805 [DEBUG] [Thread-53770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:52:26.805 [DEBUG] [Thread-53770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:52:26.805 [DEBUG] [Thread-53770] [transport.py] [_log()] Compression: none
2025-11-17T11:52:26.805 [DEBUG] [Thread-53770] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:52:26.820 [DEBUG] [Thread-53770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:52:26.821 [DEBUG] [Thread-53770] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:52:26.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:52:26.821 [DEBUG] [Thread-53770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:52:26.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:52:26.823 [DEBUG] [Thread-53770] [transport.py] [_log()] userauth is OK
2025-11-17T11:52:26.823 [DEBUG] [Thread-53770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:52:26.823 [DEBUG] [Thread-53770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:52:26.823 [DEBUG] [Thread-53770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:52:26.823 [DEBUG] [Thread-53770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:52:26.836 [INFO] [Thread-53770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:52:26.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:52:27.413 [DEBUG] [Thread-53770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:52:27.413 [DEBUG] [Thread-53770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:52:27.414 [DEBUG] [Thread-53770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:52:27.454 [DEBUG] [Thread-53770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:52:27.454 [DEBUG] [Thread-53770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:52:27.457 [DEBUG] [Thread-53770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:52:27.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:52:27.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:52:27.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:52:27.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:52:27.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:52:27.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:52:27.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:52:27.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:52:27.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:52:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.411159 -999.00  +21.50  24.34     24   +0.60 1 1 1 1 1   888    0 20.96 42.49 ----- 24.3 24.3 27.6 31.6 27.9 -25.8 26.8 -25.8 26.3 -23.9 27.2 -24.7
2025-11-17T11:52:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:52:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:52:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.411159
2025-11-17T11:52:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:52:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:52:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:52:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:52:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:52:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:52:15', tmtdew=24.4, humidity=18.97, cloud=0.0, wind=22.0, temperature=20.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:52:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:52:27.481 [DEBUG] [Thread-53770] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:52:27.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:52:27.579 [DEBUG] [Thread-53773] [transport.py] [_log()] starting thread (client mode): 0xd31ee680
2025-11-17T11:52:27.579 [DEBUG] [Thread-53773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:52:27.594 [DEBUG] [Thread-53773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:52:27.594 [INFO] [Thread-53773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:52:27.603 [DEBUG] [Thread-53773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:52:27.603 [DEBUG] [Thread-53773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:52:27.603 [DEBUG] [Thread-53773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:52:27.603 [DEBUG] [Thread-53773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:52:27.603 [DEBUG] [Thread-53773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:52:27.603 [DEBUG] [Thread-53773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:52:27.603 [DEBUG] [Thread-53773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] client lang: <none>
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] server lang: <none>
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] kex follows: False
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] Compression: none
2025-11-17T11:52:27.604 [DEBUG] [Thread-53773] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:52:27.664 [DEBUG] [Thread-53773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:52:27.665 [DEBUG] [Thread-53773] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:52:27.665 [DEBUG] [Thread-53773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:52:27.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:52:27.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:52:27.720 [DEBUG] [Thread-53773] [transport.py] [_log()] userauth is OK
2025-11-17T11:52:27.720 [DEBUG] [Thread-53773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:52:27.721 [DEBUG] [Thread-53773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:52:27.721 [DEBUG] [Thread-53773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:52:27.721 [DEBUG] [Thread-53773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:52:27.740 [INFO] [Thread-53773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:52:27.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:52:27.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:52:28.605 [DEBUG] [Thread-53773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:52:28.606 [DEBUG] [Thread-53773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:52:28.653 [DEBUG] [Thread-53773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:52:28.653 [DEBUG] [Thread-53773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:52:28.662 [DEBUG] [Thread-53773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:52:28.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:52:28.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:52:28.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:52:28.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:52:28.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:52:28.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:52:28.696 [DEBUG] [Thread-53773] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:52:34.404 [DEBUG] [Thread-53775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:52:37.942 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:52:37.943 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:52:49.448 [DEBUG] [Thread-53776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:52:58.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:52:58.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:52:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:52:59.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 52, 47), 24.06, 19.47, 0.0, 21.74, 20.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:52:59.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:52:47
2025-11-17T11:52:59.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:52:59.640 [DEBUG] [Thread-53777] [transport.py] [_log()] starting thread (client mode): 0xd31ed540
2025-11-17T11:52:59.640 [DEBUG] [Thread-53777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:52:59.661 [DEBUG] [Thread-53777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:52:59.661 [INFO] [Thread-53777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] client lang: <none>
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] server lang: <none>
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] kex follows: False
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:52:59.662 [DEBUG] [Thread-53777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:52:59.663 [DEBUG] [Thread-53777] [transport.py] [_log()] Compression: none
2025-11-17T11:52:59.663 [DEBUG] [Thread-53777] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:52:59.671 [DEBUG] [Thread-53777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:52:59.671 [DEBUG] [Thread-53777] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:52:59.672 [DEBUG] [Thread-53777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:52:59.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:52:59.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:52:59.673 [DEBUG] [Thread-53777] [transport.py] [_log()] userauth is OK
2025-11-17T11:52:59.674 [DEBUG] [Thread-53777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:52:59.674 [DEBUG] [Thread-53777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:52:59.674 [DEBUG] [Thread-53777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:52:59.674 [DEBUG] [Thread-53777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:52:59.691 [INFO] [Thread-53777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:52:59.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:53:00.319 [DEBUG] [Thread-53777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:53:00.319 [DEBUG] [Thread-53777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:53:00.319 [DEBUG] [Thread-53777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:53:00.361 [DEBUG] [Thread-53777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:53:00.361 [DEBUG] [Thread-53777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:53:00.364 [DEBUG] [Thread-53777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:53:00.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:53:00.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:53:00.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:53:00.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:53:00.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:53:00.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:53:00.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:53:00.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:53:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:53:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.411159 -999.00  +21.50  24.34     24   +0.60 1 1 1 1 1   888    0 20.96 42.49 ----- 24.3 24.3 27.6 31.6 27.9 -25.8 26.8 -25.8 26.3 -23.9 27.2 -24.7
2025-11-17T11:53:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:53:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:53:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.411159
2025-11-17T11:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:53:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:52:47', tmtdew=24.06, humidity=19.47, cloud=0.0, wind=21.74, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:52:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:53:00.390 [DEBUG] [Thread-53777] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:53:00.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:53:00.488 [DEBUG] [Thread-53780] [transport.py] [_log()] starting thread (client mode): 0xd31b3610
2025-11-17T11:53:00.488 [DEBUG] [Thread-53780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:53:00.504 [DEBUG] [Thread-53780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:53:00.504 [INFO] [Thread-53780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] client lang: <none>
2025-11-17T11:53:00.512 [DEBUG] [Thread-53780] [transport.py] [_log()] server lang: <none>
2025-11-17T11:53:00.513 [DEBUG] [Thread-53780] [transport.py] [_log()] kex follows: False
2025-11-17T11:53:00.513 [DEBUG] [Thread-53780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:53:00.513 [DEBUG] [Thread-53780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:53:00.513 [DEBUG] [Thread-53780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:53:00.513 [DEBUG] [Thread-53780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:53:00.513 [DEBUG] [Thread-53780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:53:00.513 [DEBUG] [Thread-53780] [transport.py] [_log()] Compression: none
2025-11-17T11:53:00.513 [DEBUG] [Thread-53780] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:53:00.576 [DEBUG] [Thread-53780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:53:00.576 [DEBUG] [Thread-53780] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:53:00.577 [DEBUG] [Thread-53780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:53:00.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:53:00.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:53:00.636 [DEBUG] [Thread-53780] [transport.py] [_log()] userauth is OK
2025-11-17T11:53:00.636 [DEBUG] [Thread-53780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:53:00.636 [DEBUG] [Thread-53780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:53:00.636 [DEBUG] [Thread-53780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:53:00.636 [DEBUG] [Thread-53780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:53:00.656 [INFO] [Thread-53780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:53:00.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:53:00.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:53:01.509 [DEBUG] [Thread-53780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:53:01.509 [DEBUG] [Thread-53780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:53:01.557 [DEBUG] [Thread-53780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:53:01.557 [DEBUG] [Thread-53780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:53:01.565 [DEBUG] [Thread-53780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:53:01.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:53:01.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:53:01.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:53:01.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:53:01.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:53:01.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:53:01.597 [DEBUG] [Thread-53780] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:53:04.478 [DEBUG] [Thread-53782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:53:08.076 [DEBUG] [Thread-53783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:53:19.523 [DEBUG] [Thread-53784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:53:31.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:53:31.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:53:31.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:53:32.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 53, 19), 24.01, 19.5, 0.0, 19.66, 20.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:53:32.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:53:19
2025-11-17T11:53:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:53:32.573 [DEBUG] [Thread-53785] [transport.py] [_log()] starting thread (client mode): 0xd31b1210
2025-11-17T11:53:32.573 [DEBUG] [Thread-53785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:53:32.594 [DEBUG] [Thread-53785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:53:32.594 [INFO] [Thread-53785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] client lang: <none>
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] server lang: <none>
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] kex follows: False
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] Compression: none
2025-11-17T11:53:32.598 [DEBUG] [Thread-53785] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:53:32.613 [DEBUG] [Thread-53785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:53:32.613 [DEBUG] [Thread-53785] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:53:32.613 [DEBUG] [Thread-53785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:53:32.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:53:32.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:53:32.614 [DEBUG] [Thread-53785] [transport.py] [_log()] userauth is OK
2025-11-17T11:53:32.614 [DEBUG] [Thread-53785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:53:32.614 [DEBUG] [Thread-53785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:53:32.614 [DEBUG] [Thread-53785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:53:32.614 [DEBUG] [Thread-53785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:53:32.623 [INFO] [Thread-53785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:53:32.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:53:33.253 [DEBUG] [Thread-53785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:53:33.253 [DEBUG] [Thread-53785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:53:33.253 [DEBUG] [Thread-53785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:53:33.294 [DEBUG] [Thread-53785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:53:33.294 [DEBUG] [Thread-53785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:53:33.296 [DEBUG] [Thread-53785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:53:33.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:53:33.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:53:33.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:53:33.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:53:33.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:53:33.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:53:33.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:53:33.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.411506 -999.00  +20.90  19.71     25   +0.20 1 1 1 1 1   888    0 21.61 48.37 ----- 19.7 19.7 16.1 26.2 27.8 -25.6 26.6 -25.5 26.2 -24.1 26.9 -23.3
2025-11-17T11:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.411506
2025-11-17T11:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:53:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:53:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:53:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:53:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:53:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:53:19', tmtdew=24.01, humidity=19.5, cloud=0.0, wind=19.66, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:52:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:53:33.315 [DEBUG] [Thread-53785] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:53:33.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:53:33.400 [DEBUG] [Thread-53788] [transport.py] [_log()] starting thread (client mode): 0xd071a560
2025-11-17T11:53:33.401 [DEBUG] [Thread-53788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:53:33.415 [DEBUG] [Thread-53788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:53:33.415 [INFO] [Thread-53788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] client lang: <none>
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] server lang: <none>
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] kex follows: False
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] Compression: none
2025-11-17T11:53:33.423 [DEBUG] [Thread-53788] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:53:33.483 [DEBUG] [Thread-53788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:53:33.483 [DEBUG] [Thread-53788] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:53:33.483 [DEBUG] [Thread-53788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:53:33.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:53:33.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:53:33.540 [DEBUG] [Thread-53788] [transport.py] [_log()] userauth is OK
2025-11-17T11:53:33.540 [DEBUG] [Thread-53788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:53:33.540 [DEBUG] [Thread-53788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:53:33.540 [DEBUG] [Thread-53788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:53:33.540 [DEBUG] [Thread-53788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:53:33.554 [INFO] [Thread-53788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:53:33.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:53:33.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:53:34.412 [DEBUG] [Thread-53788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:53:34.412 [DEBUG] [Thread-53788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:53:34.460 [DEBUG] [Thread-53788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:53:34.460 [DEBUG] [Thread-53788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:53:34.468 [DEBUG] [Thread-53788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:53:34.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:53:34.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:53:34.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:53:34.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:53:34.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:53:34.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:53:34.502 [DEBUG] [Thread-53788] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:53:34.553 [DEBUG] [Thread-53790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:53:38.084 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:53:38.085 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:53:49.590 [DEBUG] [Thread-53791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:54:04.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:54:04.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:54:04.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:54:04.618 [DEBUG] [Thread-53792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:54:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 53, 51), 23.91, 19.7, 0.0, 20.13, 20.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:54:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:53:51
2025-11-17T11:54:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:54:05.440 [DEBUG] [Thread-53793] [transport.py] [_log()] starting thread (client mode): 0xd3153c40
2025-11-17T11:54:05.440 [DEBUG] [Thread-53793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:54:05.460 [DEBUG] [Thread-53793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:54:05.460 [INFO] [Thread-53793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:54:05.463 [DEBUG] [Thread-53793] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:54:05.463 [DEBUG] [Thread-53793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:54:05.463 [DEBUG] [Thread-53793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:54:05.463 [DEBUG] [Thread-53793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:54:05.463 [DEBUG] [Thread-53793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:54:05.463 [DEBUG] [Thread-53793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] client lang: <none>
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] server lang: <none>
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] kex follows: False
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] Compression: none
2025-11-17T11:54:05.464 [DEBUG] [Thread-53793] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:54:05.483 [DEBUG] [Thread-53793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:54:05.483 [DEBUG] [Thread-53793] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:54:05.484 [DEBUG] [Thread-53793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:54:05.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:54:05.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:54:05.486 [DEBUG] [Thread-53793] [transport.py] [_log()] userauth is OK
2025-11-17T11:54:05.486 [DEBUG] [Thread-53793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:54:05.486 [DEBUG] [Thread-53793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:54:05.486 [DEBUG] [Thread-53793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:54:05.486 [DEBUG] [Thread-53793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:54:05.510 [INFO] [Thread-53793] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:54:05.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:54:06.156 [DEBUG] [Thread-53793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:54:06.156 [DEBUG] [Thread-53793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:54:06.157 [DEBUG] [Thread-53793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:54:06.197 [DEBUG] [Thread-53793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:54:06.197 [DEBUG] [Thread-53793] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:54:06.200 [DEBUG] [Thread-53793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:54:06.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:54:06.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:54:06.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:54:06.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:54:06.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:54:06.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:54:06.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:54:06.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:54:06.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:54:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.411854 -999.00  +21.30  29.34     25   +0.60 1 1 1 1 1   888    0 21.17 46.22 ----- 29.3 29.3 59.4 33.2 27.8 -24.8 26.6 -27.2 26.3 -22.8 27.0 -23.3
2025-11-17T11:54:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:54:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:54:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.411854
2025-11-17T11:54:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:54:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:54:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:54:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:54:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:54:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:53:51', tmtdew=23.91, humidity=19.7, cloud=0.0, wind=20.13, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:53:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:54:06.227 [DEBUG] [Thread-53793] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:54:06.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:54:06.324 [DEBUG] [Thread-53796] [transport.py] [_log()] starting thread (client mode): 0xd31b3be0
2025-11-17T11:54:06.324 [DEBUG] [Thread-53796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:54:06.344 [DEBUG] [Thread-53796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:54:06.344 [INFO] [Thread-53796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] client lang: <none>
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] server lang: <none>
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] kex follows: False
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:54:06.352 [DEBUG] [Thread-53796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:54:06.353 [DEBUG] [Thread-53796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:54:06.353 [DEBUG] [Thread-53796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:54:06.353 [DEBUG] [Thread-53796] [transport.py] [_log()] Compression: none
2025-11-17T11:54:06.353 [DEBUG] [Thread-53796] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:54:06.411 [DEBUG] [Thread-53796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:54:06.412 [DEBUG] [Thread-53796] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:54:06.412 [DEBUG] [Thread-53796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:54:06.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:54:06.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:54:06.468 [DEBUG] [Thread-53796] [transport.py] [_log()] userauth is OK
2025-11-17T11:54:06.468 [DEBUG] [Thread-53796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:54:06.468 [DEBUG] [Thread-53796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:54:06.468 [DEBUG] [Thread-53796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:54:06.468 [DEBUG] [Thread-53796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:54:06.487 [INFO] [Thread-53796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:54:06.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:54:06.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:54:07.408 [DEBUG] [Thread-53796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:54:07.408 [DEBUG] [Thread-53796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:54:07.456 [DEBUG] [Thread-53796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:54:07.456 [DEBUG] [Thread-53796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:54:07.465 [DEBUG] [Thread-53796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:54:07.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:54:07.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:54:07.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:54:07.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:54:07.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:54:07.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:54:07.500 [DEBUG] [Thread-53796] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:54:08.126 [DEBUG] [Thread-53798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:54:19.643 [DEBUG] [Thread-53799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:54:34.685 [DEBUG] [Thread-53800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:54:37.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:54:37.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:54:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:54:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 54, 23), 23.86, 19.77, 0.0, 18.02, 20.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:54:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:54:23
2025-11-17T11:54:38.227 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:54:38.227 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:54:38.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:54:38.447 [DEBUG] [Thread-53801] [transport.py] [_log()] starting thread (client mode): 0xd31ef400
2025-11-17T11:54:38.448 [DEBUG] [Thread-53801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:54:38.467 [DEBUG] [Thread-53801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:54:38.467 [INFO] [Thread-53801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] client lang: <none>
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] server lang: <none>
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] kex follows: False
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:54:38.470 [DEBUG] [Thread-53801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:54:38.471 [DEBUG] [Thread-53801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:54:38.471 [DEBUG] [Thread-53801] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:54:38.471 [DEBUG] [Thread-53801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:54:38.471 [DEBUG] [Thread-53801] [transport.py] [_log()] Compression: none
2025-11-17T11:54:38.471 [DEBUG] [Thread-53801] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:54:38.487 [DEBUG] [Thread-53801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:54:38.488 [DEBUG] [Thread-53801] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:54:38.488 [DEBUG] [Thread-53801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:54:38.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:54:38.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:54:38.490 [DEBUG] [Thread-53801] [transport.py] [_log()] userauth is OK
2025-11-17T11:54:38.490 [DEBUG] [Thread-53801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:54:38.490 [DEBUG] [Thread-53801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:54:38.490 [DEBUG] [Thread-53801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:54:38.491 [DEBUG] [Thread-53801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:54:38.508 [INFO] [Thread-53801] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:54:38.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:54:39.160 [DEBUG] [Thread-53801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:54:39.160 [DEBUG] [Thread-53801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:54:39.160 [DEBUG] [Thread-53801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:54:39.200 [DEBUG] [Thread-53801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:54:39.201 [DEBUG] [Thread-53801] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:54:39.203 [DEBUG] [Thread-53801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:54:39.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:54:39.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:54:39.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:54:39.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:54:39.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:54:39.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:54:39.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:54:39.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:54:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:54:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.412201 -999.00  +20.70  17.05     25   +0.20 1 1 1 1 1   888    0 21.20 51.21 ----- 17.1 17.1 25.8 23.0 27.6 -25.5 26.4 -25.1 26.1 -23.7 26.7 -25.0
2025-11-17T11:54:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:54:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:54:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.412201
2025-11-17T11:54:39.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:54:39.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:54:39.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:54:39.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:54:39.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:54:39.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:54:23', tmtdew=23.86, humidity=19.77, cloud=0.0, wind=18.02, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:53:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:54:39.230 [DEBUG] [Thread-53801] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:54:39.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:54:39.325 [DEBUG] [Thread-53804] [transport.py] [_log()] starting thread (client mode): 0xd0712aa0
2025-11-17T11:54:39.325 [DEBUG] [Thread-53804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:54:39.345 [DEBUG] [Thread-53804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:54:39.345 [INFO] [Thread-53804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] client lang: <none>
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] server lang: <none>
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] kex follows: False
2025-11-17T11:54:39.353 [DEBUG] [Thread-53804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:54:39.354 [DEBUG] [Thread-53804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:54:39.354 [DEBUG] [Thread-53804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:54:39.354 [DEBUG] [Thread-53804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:54:39.354 [DEBUG] [Thread-53804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:54:39.354 [DEBUG] [Thread-53804] [transport.py] [_log()] Compression: none
2025-11-17T11:54:39.354 [DEBUG] [Thread-53804] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:54:39.416 [DEBUG] [Thread-53804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:54:39.416 [DEBUG] [Thread-53804] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:54:39.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:54:39.417 [DEBUG] [Thread-53804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:54:39.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:54:39.472 [DEBUG] [Thread-53804] [transport.py] [_log()] userauth is OK
2025-11-17T11:54:39.472 [DEBUG] [Thread-53804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:54:39.472 [DEBUG] [Thread-53804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:54:39.472 [DEBUG] [Thread-53804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:54:39.472 [DEBUG] [Thread-53804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:54:39.491 [INFO] [Thread-53804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:54:39.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:54:39.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:54:40.331 [DEBUG] [Thread-53804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:54:40.332 [DEBUG] [Thread-53804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:54:40.379 [DEBUG] [Thread-53804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:54:40.379 [DEBUG] [Thread-53804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:54:40.388 [DEBUG] [Thread-53804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:54:40.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:54:40.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:54:40.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:54:40.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:54:40.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:54:40.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:54:40.422 [DEBUG] [Thread-53804] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:54:49.716 [DEBUG] [Thread-53806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:55:04.747 [DEBUG] [Thread-53807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:55:08.179 [DEBUG] [Thread-53808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:55:10.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:55:10.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:55:10.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:55:11.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 54, 55), 24.12, 19.74, 0.0, 16.97, 20.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:55:11.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:54:55
2025-11-17T11:55:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:55:11.350 [DEBUG] [Thread-53809] [transport.py] [_log()] starting thread (client mode): 0xd071aa10
2025-11-17T11:55:11.350 [DEBUG] [Thread-53809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:55:11.371 [DEBUG] [Thread-53809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:55:11.371 [INFO] [Thread-53809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:55:11.374 [DEBUG] [Thread-53809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] client lang: <none>
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] server lang: <none>
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] kex follows: False
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] Compression: none
2025-11-17T11:55:11.375 [DEBUG] [Thread-53809] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:55:11.391 [DEBUG] [Thread-53809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:55:11.391 [DEBUG] [Thread-53809] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:55:11.391 [DEBUG] [Thread-53809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:55:11.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:55:11.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:55:11.393 [DEBUG] [Thread-53809] [transport.py] [_log()] userauth is OK
2025-11-17T11:55:11.393 [DEBUG] [Thread-53809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:55:11.393 [DEBUG] [Thread-53809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:55:11.393 [DEBUG] [Thread-53809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:55:11.393 [DEBUG] [Thread-53809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:55:11.410 [INFO] [Thread-53809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:55:11.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:55:12.468 [DEBUG] [Thread-53809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:55:12.468 [DEBUG] [Thread-53809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:55:12.468 [DEBUG] [Thread-53809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:55:12.508 [DEBUG] [Thread-53809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:55:12.508 [DEBUG] [Thread-53809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:55:12.511 [DEBUG] [Thread-53809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:55:12.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:55:12.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:55:12.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:55:12.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:55:12.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:55:12.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:55:12.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:55:12.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:55:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:55:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.412896 -999.00  +20.40  16.04     25   +0.00 1 1 1 1 1   888    0 21.35 53.24 ----- 16.0 16.0 39.4 18.5 27.6 -25.2 26.5 -23.5 26.1 -22.9 26.8 -23.0
2025-11-17T11:55:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:55:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:55:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.412896
2025-11-17T11:55:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:55:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:55:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:55:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:55:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:55:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:54:55', tmtdew=24.12, humidity=19.74, cloud=0.0, wind=16.97, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:54:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:55:12.538 [DEBUG] [Thread-53809] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:55:12.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:55:12.647 [DEBUG] [Thread-53812] [transport.py] [_log()] starting thread (client mode): 0xd0786f50
2025-11-17T11:55:12.647 [DEBUG] [Thread-53812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:55:12.663 [DEBUG] [Thread-53812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:55:12.663 [INFO] [Thread-53812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:55:12.671 [DEBUG] [Thread-53812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:55:12.671 [DEBUG] [Thread-53812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:55:12.671 [DEBUG] [Thread-53812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:55:12.671 [DEBUG] [Thread-53812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] client lang: <none>
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] server lang: <none>
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] kex follows: False
2025-11-17T11:55:12.672 [DEBUG] [Thread-53812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:55:12.673 [DEBUG] [Thread-53812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:55:12.673 [DEBUG] [Thread-53812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:55:12.673 [DEBUG] [Thread-53812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:55:12.673 [DEBUG] [Thread-53812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:55:12.673 [DEBUG] [Thread-53812] [transport.py] [_log()] Compression: none
2025-11-17T11:55:12.673 [DEBUG] [Thread-53812] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:55:12.728 [DEBUG] [Thread-53812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:55:12.728 [DEBUG] [Thread-53812] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:55:12.729 [DEBUG] [Thread-53812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:55:12.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:55:12.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:55:12.785 [DEBUG] [Thread-53812] [transport.py] [_log()] userauth is OK
2025-11-17T11:55:12.785 [DEBUG] [Thread-53812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:55:12.785 [DEBUG] [Thread-53812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:55:12.785 [DEBUG] [Thread-53812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:55:12.785 [DEBUG] [Thread-53812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:55:12.804 [INFO] [Thread-53812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:55:12.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:55:12.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:55:13.692 [DEBUG] [Thread-53812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:55:13.692 [DEBUG] [Thread-53812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:55:13.740 [DEBUG] [Thread-53812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:55:13.740 [DEBUG] [Thread-53812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:55:13.749 [DEBUG] [Thread-53812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:55:13.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:55:13.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')
2025-11-17T11:55:13.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:55:13.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:55:13.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:55:13.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:55:13.784 [DEBUG] [Thread-53812] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:55:19.778 [DEBUG] [Thread-53814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:55:34.829 [DEBUG] [Thread-53815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:55:38.368 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:55:38.369 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:55:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:55:43.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:55:43.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:55:44.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 55, 27), 23.94, 19.98, 0.0, 18.51, 20.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:55:44.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:55:27
2025-11-17T11:55:44.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:55:44.706 [DEBUG] [Thread-53816] [transport.py] [_log()] starting thread (client mode): 0xd31ee950
2025-11-17T11:55:44.706 [DEBUG] [Thread-53816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:55:44.725 [DEBUG] [Thread-53816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:55:44.725 [INFO] [Thread-53816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:55:44.728 [DEBUG] [Thread-53816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] client lang: <none>
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] server lang: <none>
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] kex follows: False
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] Compression: none
2025-11-17T11:55:44.729 [DEBUG] [Thread-53816] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:55:44.748 [DEBUG] [Thread-53816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:55:44.748 [DEBUG] [Thread-53816] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:55:44.749 [DEBUG] [Thread-53816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:55:44.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:55:44.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:55:44.751 [DEBUG] [Thread-53816] [transport.py] [_log()] userauth is OK
2025-11-17T11:55:44.751 [DEBUG] [Thread-53816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:55:44.751 [DEBUG] [Thread-53816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:55:44.751 [DEBUG] [Thread-53816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:55:44.751 [DEBUG] [Thread-53816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:55:44.775 [INFO] [Thread-53816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:55:44.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:55:45.389 [DEBUG] [Thread-53816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:55:45.389 [DEBUG] [Thread-53816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:55:45.390 [DEBUG] [Thread-53816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:55:45.430 [DEBUG] [Thread-53816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:55:45.431 [DEBUG] [Thread-53816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:55:45.434 [DEBUG] [Thread-53816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:55:45.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:55:45.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:55:45.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:55:45.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:55:45.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:55:45.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:55:45.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:55:45.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:55:45.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:55:45.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.413243 -999.00  +20.70  15.11     25   +0.30 1 1 1 1 1   888    0 21.32 52.81 ----- 15.1 15.1 51.0 23.4 27.6 -25.1 26.5 -25.5 26.0 -24.7 26.8 -23.6
2025-11-17T11:55:45.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:55:45.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:55:45.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.413243
2025-11-17T11:55:45.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:55:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:55:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:55:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:55:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:55:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:55:27', tmtdew=23.94, humidity=19.98, cloud=0.0, wind=18.51, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:55:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:55:45.461 [DEBUG] [Thread-53816] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:55:45.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:55:45.556 [DEBUG] [Thread-53819] [transport.py] [_log()] starting thread (client mode): 0xd0718b50
2025-11-17T11:55:45.557 [DEBUG] [Thread-53819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:55:45.572 [DEBUG] [Thread-53819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:55:45.572 [INFO] [Thread-53819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:55:45.579 [DEBUG] [Thread-53819] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:55:45.579 [DEBUG] [Thread-53819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:55:45.579 [DEBUG] [Thread-53819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:55:45.579 [DEBUG] [Thread-53819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:55:45.579 [DEBUG] [Thread-53819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:55:45.579 [DEBUG] [Thread-53819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] client lang: <none>
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] server lang: <none>
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] kex follows: False
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] Compression: none
2025-11-17T11:55:45.580 [DEBUG] [Thread-53819] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:55:45.640 [DEBUG] [Thread-53819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:55:45.641 [DEBUG] [Thread-53819] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:55:45.641 [DEBUG] [Thread-53819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:55:45.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:55:45.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:55:45.696 [DEBUG] [Thread-53819] [transport.py] [_log()] userauth is OK
2025-11-17T11:55:45.696 [DEBUG] [Thread-53819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:55:45.696 [DEBUG] [Thread-53819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:55:45.696 [DEBUG] [Thread-53819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:55:45.696 [DEBUG] [Thread-53819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:55:45.716 [INFO] [Thread-53819] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:55:45.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:55:45.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:55:46.574 [DEBUG] [Thread-53819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:55:46.574 [DEBUG] [Thread-53819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:55:46.622 [DEBUG] [Thread-53819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:55:46.622 [DEBUG] [Thread-53819] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:55:46.631 [DEBUG] [Thread-53819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:55:46.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:55:46.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:55:46.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:55:46.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:55:46.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:55:46.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:55:46.665 [DEBUG] [Thread-53819] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:55:49.861 [DEBUG] [Thread-53821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:56:04.898 [DEBUG] [Thread-53822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:56:08.207 [DEBUG] [Thread-53823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:56:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:56:16.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:56:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:56:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 55, 59), 23.95, 19.55, 0.0, 14.82, 20.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:56:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:55:59
2025-11-17T11:56:17.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:56:17.620 [DEBUG] [Thread-53824] [transport.py] [_log()] starting thread (client mode): 0xd0784850
2025-11-17T11:56:17.621 [DEBUG] [Thread-53824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:56:17.641 [DEBUG] [Thread-53824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:56:17.641 [INFO] [Thread-53824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:56:17.644 [DEBUG] [Thread-53824] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] client lang: <none>
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] server lang: <none>
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] kex follows: False
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] Compression: none
2025-11-17T11:56:17.645 [DEBUG] [Thread-53824] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:56:17.662 [DEBUG] [Thread-53824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:56:17.662 [DEBUG] [Thread-53824] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:56:17.663 [DEBUG] [Thread-53824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:56:17.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:56:17.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:56:17.665 [DEBUG] [Thread-53824] [transport.py] [_log()] userauth is OK
2025-11-17T11:56:17.665 [DEBUG] [Thread-53824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:56:17.665 [DEBUG] [Thread-53824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:56:17.665 [DEBUG] [Thread-53824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:56:17.665 [DEBUG] [Thread-53824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:56:17.689 [INFO] [Thread-53824] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:56:17.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:56:18.315 [DEBUG] [Thread-53824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:56:18.315 [DEBUG] [Thread-53824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:56:18.315 [DEBUG] [Thread-53824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:56:18.355 [DEBUG] [Thread-53824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:56:18.355 [DEBUG] [Thread-53824] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:56:18.358 [DEBUG] [Thread-53824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:56:18.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:56:18.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:56:18.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:56:18.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:56:18.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:56:18.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:56:18.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:56:18.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:56:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:56:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.413590 -999.00  +20.30  14.35     26   +0.20 1 1 1 1 1   888    0 21.78 61.84 ----- 14.3 14.3 32.0 28.1 27.4 -26.3 26.3 -23.7 25.7 -25.2 26.7 -22.9
2025-11-17T11:56:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:56:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:56:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.413590
2025-11-17T11:56:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:56:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:56:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:56:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:56:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:56:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:55:59', tmtdew=23.95, humidity=19.55, cloud=0.0, wind=14.82, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:55:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:56:18.383 [DEBUG] [Thread-53824] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:56:18.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:56:18.480 [DEBUG] [Thread-53827] [transport.py] [_log()] starting thread (client mode): 0xd07ce260
2025-11-17T11:56:18.480 [DEBUG] [Thread-53827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:56:18.499 [DEBUG] [Thread-53827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:56:18.500 [INFO] [Thread-53827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:56:18.507 [DEBUG] [Thread-53827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] client lang: <none>
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] server lang: <none>
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] kex follows: False
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] Compression: none
2025-11-17T11:56:18.508 [DEBUG] [Thread-53827] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:56:18.568 [DEBUG] [Thread-53827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:56:18.568 [DEBUG] [Thread-53827] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:56:18.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:56:18.569 [DEBUG] [Thread-53827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:56:18.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:56:18.628 [DEBUG] [Thread-53827] [transport.py] [_log()] userauth is OK
2025-11-17T11:56:18.628 [DEBUG] [Thread-53827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:56:18.628 [DEBUG] [Thread-53827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:56:18.628 [DEBUG] [Thread-53827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:56:18.628 [DEBUG] [Thread-53827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:56:18.647 [INFO] [Thread-53827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:56:18.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:56:18.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:56:19.502 [DEBUG] [Thread-53827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:56:19.502 [DEBUG] [Thread-53827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:56:19.550 [DEBUG] [Thread-53827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:56:19.550 [DEBUG] [Thread-53827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:56:19.568 [DEBUG] [Thread-53827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:56:19.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:56:19.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:56:19.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:56:19.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:56:19.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:56:19.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:56:19.605 [DEBUG] [Thread-53827] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:56:19.925 [DEBUG] [Thread-53829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:56:34.964 [DEBUG] [Thread-53830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:56:38.511 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:56:38.512 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:56:49.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:56:49.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:56:49.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:56:49.991 [DEBUG] [Thread-53831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:56:50.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 56, 31), 24.22, 19.2, 0.0, 20.61, 20.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:56:50.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:56:31
2025-11-17T11:56:50.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:56:50.538 [DEBUG] [Thread-53832] [transport.py] [_log()] starting thread (client mode): 0xd07cc7c0
2025-11-17T11:56:50.538 [DEBUG] [Thread-53832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:56:50.556 [DEBUG] [Thread-53832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:56:50.556 [INFO] [Thread-53832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:56:50.558 [DEBUG] [Thread-53832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:56:50.558 [DEBUG] [Thread-53832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:56:50.558 [DEBUG] [Thread-53832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:56:50.558 [DEBUG] [Thread-53832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] client lang: <none>
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] server lang: <none>
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] kex follows: False
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] Compression: none
2025-11-17T11:56:50.559 [DEBUG] [Thread-53832] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:56:50.570 [DEBUG] [Thread-53832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:56:50.570 [DEBUG] [Thread-53832] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:56:50.570 [DEBUG] [Thread-53832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:56:50.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:56:50.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:56:50.572 [DEBUG] [Thread-53832] [transport.py] [_log()] userauth is OK
2025-11-17T11:56:50.572 [DEBUG] [Thread-53832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:56:50.572 [DEBUG] [Thread-53832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:56:50.573 [DEBUG] [Thread-53832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:56:50.573 [DEBUG] [Thread-53832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:56:50.590 [INFO] [Thread-53832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:56:50.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:56:51.219 [DEBUG] [Thread-53832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:56:51.219 [DEBUG] [Thread-53832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:56:51.220 [DEBUG] [Thread-53832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:56:51.261 [DEBUG] [Thread-53832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:56:51.261 [DEBUG] [Thread-53832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:56:51.264 [DEBUG] [Thread-53832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:56:51.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:56:51.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:56:51.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:56:51.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:56:51.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:56:51.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:56:51.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:56:51.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:56:51.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:56:51.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.413937 -999.00  +20.20  10.43     26   +0.10 1 1 1 1 1   888    0 21.90 62.96 ----- 10.4 10.4 49.2 17.0 27.5 -24.1 26.4 -24.2 25.9 -24.5 26.8 -23.7
2025-11-17T11:56:51.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:56:51.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:56:51.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.413937
2025-11-17T11:56:51.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:56:51.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:56:51.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:56:51.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:56:51.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:56:51.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:56:31', tmtdew=24.22, humidity=19.2, cloud=0.0, wind=20.61, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:56:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:56:51.290 [DEBUG] [Thread-53832] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:56:51.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:56:51.388 [DEBUG] [Thread-53835] [transport.py] [_log()] starting thread (client mode): 0xd0718f10
2025-11-17T11:56:51.388 [DEBUG] [Thread-53835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:56:51.404 [DEBUG] [Thread-53835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:56:51.404 [INFO] [Thread-53835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] client lang: <none>
2025-11-17T11:56:51.411 [DEBUG] [Thread-53835] [transport.py] [_log()] server lang: <none>
2025-11-17T11:56:51.412 [DEBUG] [Thread-53835] [transport.py] [_log()] kex follows: False
2025-11-17T11:56:51.412 [DEBUG] [Thread-53835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:56:51.412 [DEBUG] [Thread-53835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:56:51.412 [DEBUG] [Thread-53835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:56:51.412 [DEBUG] [Thread-53835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:56:51.412 [DEBUG] [Thread-53835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:56:51.412 [DEBUG] [Thread-53835] [transport.py] [_log()] Compression: none
2025-11-17T11:56:51.412 [DEBUG] [Thread-53835] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:56:51.467 [DEBUG] [Thread-53835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:56:51.468 [DEBUG] [Thread-53835] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:56:51.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:56:51.469 [DEBUG] [Thread-53835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:56:51.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:56:51.524 [DEBUG] [Thread-53835] [transport.py] [_log()] userauth is OK
2025-11-17T11:56:51.524 [DEBUG] [Thread-53835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:56:51.524 [DEBUG] [Thread-53835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:56:51.524 [DEBUG] [Thread-53835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:56:51.524 [DEBUG] [Thread-53835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:56:51.544 [INFO] [Thread-53835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:56:51.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:56:51.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:56:52.429 [DEBUG] [Thread-53835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:56:52.429 [DEBUG] [Thread-53835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:56:52.477 [DEBUG] [Thread-53835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:56:52.477 [DEBUG] [Thread-53835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:56:52.486 [DEBUG] [Thread-53835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:56:52.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:56:52.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:56:52.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:56:52.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:56:52.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:56:52.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:56:52.521 [DEBUG] [Thread-53835] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:57:05.020 [DEBUG] [Thread-53837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:57:08.259 [DEBUG] [Thread-53838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:57:20.050 [DEBUG] [Thread-53839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:57:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:57:22.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:57:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:57:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 57, 3), 24.18, 19.25, 0.0, 16.13, 20.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:57:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:57:03
2025-11-17T11:57:23.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:57:23.500 [DEBUG] [Thread-53840] [transport.py] [_log()] starting thread (client mode): 0xd071bd00
2025-11-17T11:57:23.500 [DEBUG] [Thread-53840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:57:23.520 [DEBUG] [Thread-53840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:57:23.520 [INFO] [Thread-53840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:57:23.523 [DEBUG] [Thread-53840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] client lang: <none>
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] server lang: <none>
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] kex follows: False
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] Compression: none
2025-11-17T11:57:23.524 [DEBUG] [Thread-53840] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:57:23.542 [DEBUG] [Thread-53840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:57:23.542 [DEBUG] [Thread-53840] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:57:23.542 [DEBUG] [Thread-53840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:57:23.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:57:23.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:57:23.543 [DEBUG] [Thread-53840] [transport.py] [_log()] userauth is OK
2025-11-17T11:57:23.543 [DEBUG] [Thread-53840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:57:23.543 [DEBUG] [Thread-53840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:57:23.544 [DEBUG] [Thread-53840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:57:23.544 [DEBUG] [Thread-53840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:57:23.563 [INFO] [Thread-53840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:57:23.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:57:24.178 [DEBUG] [Thread-53840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:57:24.178 [DEBUG] [Thread-53840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:57:24.178 [DEBUG] [Thread-53840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:57:24.219 [DEBUG] [Thread-53840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:57:24.219 [DEBUG] [Thread-53840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:57:24.222 [DEBUG] [Thread-53840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:57:24.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:57:24.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:57:24.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:57:24.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:57:24.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:57:24.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:57:24.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:57:24.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:57:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:57:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.414284 -999.00  +20.60  20.86     26   +0.60 1 2 1 1 1   888    0 21.86 61.74 ----- 20.9 20.9 36.0 26.5 27.5 -24.5 26.5 -23.2 26.1 -22.1 26.9 -22.6
2025-11-17T11:57:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:57:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:57:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.414284
2025-11-17T11:57:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:57:24.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:57:24.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:57:24.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:57:24.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:57:24.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:57:03', tmtdew=24.18, humidity=19.25, cloud=0.0, wind=16.13, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:56:34.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:57:24.238 [DEBUG] [Thread-53840] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:57:24.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:57:24.325 [DEBUG] [Thread-53843] [transport.py] [_log()] starting thread (client mode): 0xd07850c0
2025-11-17T11:57:24.325 [DEBUG] [Thread-53843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:57:24.344 [DEBUG] [Thread-53843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:57:24.344 [INFO] [Thread-53843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:57:24.351 [DEBUG] [Thread-53843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:57:24.351 [DEBUG] [Thread-53843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:57:24.351 [DEBUG] [Thread-53843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:57:24.351 [DEBUG] [Thread-53843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] client lang: <none>
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] server lang: <none>
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] kex follows: False
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] Compression: none
2025-11-17T11:57:24.352 [DEBUG] [Thread-53843] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:57:24.406 [DEBUG] [Thread-53843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:57:24.407 [DEBUG] [Thread-53843] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:57:24.407 [DEBUG] [Thread-53843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:57:24.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:57:24.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:57:24.468 [DEBUG] [Thread-53843] [transport.py] [_log()] userauth is OK
2025-11-17T11:57:24.468 [DEBUG] [Thread-53843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:57:24.468 [DEBUG] [Thread-53843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:57:24.468 [DEBUG] [Thread-53843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:57:24.468 [DEBUG] [Thread-53843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:57:24.482 [INFO] [Thread-53843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:57:24.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:57:24.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:57:25.345 [DEBUG] [Thread-53843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:57:25.345 [DEBUG] [Thread-53843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:57:25.393 [DEBUG] [Thread-53843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:57:25.393 [DEBUG] [Thread-53843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:57:25.401 [DEBUG] [Thread-53843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:57:25.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:57:25.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:57:25.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:57:25.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:57:25.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:57:25.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:57:25.432 [DEBUG] [Thread-53843] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:57:35.079 [DEBUG] [Thread-53845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:57:38.657 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:57:38.658 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:57:50.118 [DEBUG] [Thread-53846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:57:55.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:57:55.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:57:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:57:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 57, 35), 23.73, 19.87, 0.0, 15.72, 20.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:57:56.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:57:35
2025-11-17T11:57:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:57:56.385 [DEBUG] [Thread-53847] [transport.py] [_log()] starting thread (client mode): 0xd0785ff0
2025-11-17T11:57:56.385 [DEBUG] [Thread-53847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:57:56.405 [DEBUG] [Thread-53847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:57:56.405 [INFO] [Thread-53847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] client lang: <none>
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] server lang: <none>
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] kex follows: False
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:57:56.408 [DEBUG] [Thread-53847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:57:56.409 [DEBUG] [Thread-53847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:57:56.409 [DEBUG] [Thread-53847] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:57:56.409 [DEBUG] [Thread-53847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:57:56.409 [DEBUG] [Thread-53847] [transport.py] [_log()] Compression: none
2025-11-17T11:57:56.409 [DEBUG] [Thread-53847] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:57:56.417 [DEBUG] [Thread-53847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:57:56.418 [DEBUG] [Thread-53847] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:57:56.418 [DEBUG] [Thread-53847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:57:56.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:57:56.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:57:56.420 [DEBUG] [Thread-53847] [transport.py] [_log()] userauth is OK
2025-11-17T11:57:56.420 [DEBUG] [Thread-53847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:57:56.420 [DEBUG] [Thread-53847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:57:56.420 [DEBUG] [Thread-53847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:57:56.420 [DEBUG] [Thread-53847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:57:56.437 [INFO] [Thread-53847] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:57:56.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:57:57.093 [DEBUG] [Thread-53847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:57:57.094 [DEBUG] [Thread-53847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:57:57.094 [DEBUG] [Thread-53847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:57:57.134 [DEBUG] [Thread-53847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:57:57.134 [DEBUG] [Thread-53847] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:57:57.137 [DEBUG] [Thread-53847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:57:57.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:57:57.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:57:57.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:57:57.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:57:57.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:57:57.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:57:57.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:57:57.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:57:57.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:57:57.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.414631 -999.00  +20.70  23.16     26   +0.50 1 1 1 1 1   888    0 21.50 63.58 ----- 23.2 23.2 34.8 30.6 27.5 -24.2 26.5 -24.6 26.1 -22.5 26.9 -23.1
2025-11-17T11:57:57.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:57:57.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:57:57.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.414631
2025-11-17T11:57:57.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:57:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:57:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:57:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:57:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:57:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:57:35', tmtdew=23.73, humidity=19.87, cloud=0.0, wind=15.72, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:57:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:57:57.166 [DEBUG] [Thread-53847] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:57:57.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:57:57.265 [DEBUG] [Thread-53850] [transport.py] [_log()] starting thread (client mode): 0xd31cfb80
2025-11-17T11:57:57.266 [DEBUG] [Thread-53850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:57:57.283 [DEBUG] [Thread-53850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:57:57.284 [INFO] [Thread-53850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] client lang: <none>
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] server lang: <none>
2025-11-17T11:57:57.296 [DEBUG] [Thread-53850] [transport.py] [_log()] kex follows: False
2025-11-17T11:57:57.297 [DEBUG] [Thread-53850] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:57:57.297 [DEBUG] [Thread-53850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:57:57.297 [DEBUG] [Thread-53850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:57:57.297 [DEBUG] [Thread-53850] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:57:57.297 [DEBUG] [Thread-53850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:57:57.297 [DEBUG] [Thread-53850] [transport.py] [_log()] Compression: none
2025-11-17T11:57:57.297 [DEBUG] [Thread-53850] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:57:57.358 [DEBUG] [Thread-53850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:57:57.359 [DEBUG] [Thread-53850] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:57:57.359 [DEBUG] [Thread-53850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:57:57.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:57:57.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:57:57.424 [DEBUG] [Thread-53850] [transport.py] [_log()] userauth is OK
2025-11-17T11:57:57.424 [DEBUG] [Thread-53850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:57:57.424 [DEBUG] [Thread-53850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:57:57.424 [DEBUG] [Thread-53850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:57:57.424 [DEBUG] [Thread-53850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:57:57.450 [INFO] [Thread-53850] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:57:57.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:57:57.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:57:58.330 [DEBUG] [Thread-53850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:57:58.330 [DEBUG] [Thread-53850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:57:58.378 [DEBUG] [Thread-53850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:57:58.378 [DEBUG] [Thread-53850] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:57:58.387 [DEBUG] [Thread-53850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:57:58.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:57:58.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:57:58.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:57:58.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:57:58.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:57:58.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:57:58.421 [DEBUG] [Thread-53850] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:58:05.149 [DEBUG] [Thread-53852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:58:08.311 [DEBUG] [Thread-53853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:58:20.189 [DEBUG] [Thread-53854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:58:28.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:58:28.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:58:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:58:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 58, 7), 23.54, 20.12, 0.0, 13.29, 20.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:58:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:58:07
2025-11-17T11:58:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:58:29.361 [DEBUG] [Thread-53855] [transport.py] [_log()] starting thread (client mode): 0xd071a230
2025-11-17T11:58:29.361 [DEBUG] [Thread-53855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:58:29.385 [DEBUG] [Thread-53855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:58:29.385 [INFO] [Thread-53855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:58:29.387 [DEBUG] [Thread-53855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:58:29.387 [DEBUG] [Thread-53855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:58:29.387 [DEBUG] [Thread-53855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:58:29.387 [DEBUG] [Thread-53855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:58:29.387 [DEBUG] [Thread-53855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:58:29.387 [DEBUG] [Thread-53855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:58:29.387 [DEBUG] [Thread-53855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:58:29.387 [DEBUG] [Thread-53855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] client lang: <none>
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] server lang: <none>
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] kex follows: False
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] Compression: none
2025-11-17T11:58:29.388 [DEBUG] [Thread-53855] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:58:29.404 [DEBUG] [Thread-53855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:58:29.404 [DEBUG] [Thread-53855] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:58:29.405 [DEBUG] [Thread-53855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:58:29.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:58:29.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:58:29.407 [DEBUG] [Thread-53855] [transport.py] [_log()] userauth is OK
2025-11-17T11:58:29.408 [DEBUG] [Thread-53855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:58:29.408 [DEBUG] [Thread-53855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:58:29.408 [DEBUG] [Thread-53855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:58:29.408 [DEBUG] [Thread-53855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:58:29.431 [INFO] [Thread-53855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:58:29.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:58:30.178 [DEBUG] [Thread-53855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:58:30.178 [DEBUG] [Thread-53855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:58:30.178 [DEBUG] [Thread-53855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:58:30.219 [DEBUG] [Thread-53855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:58:30.219 [DEBUG] [Thread-53855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:58:30.222 [DEBUG] [Thread-53855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:58:30.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:58:30.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:58:30.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:58:30.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:58:30.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:58:30.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:58:30.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:58:30.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:58:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:58:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.414979 -999.00  +20.50  22.17     26   +0.50 1 1 1 1 1   888    0 21.23 57.37 ----- 22.2 22.2 27.4 28.6 27.4 -24.6 26.4 -25.3 25.8 -23.8 26.8 -23.1
2025-11-17T11:58:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:58:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:58:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.414979
2025-11-17T11:58:30.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:58:30.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:58:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:58:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:58:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:58:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:58:07', tmtdew=23.54, humidity=20.12, cloud=0.0, wind=13.29, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:57:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:58:30.246 [DEBUG] [Thread-53855] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:58:30.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:58:30.341 [DEBUG] [Thread-53858] [transport.py] [_log()] starting thread (client mode): 0xd0785240
2025-11-17T11:58:30.341 [DEBUG] [Thread-53858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:58:30.357 [DEBUG] [Thread-53858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:58:30.357 [INFO] [Thread-53858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:58:30.364 [DEBUG] [Thread-53858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:58:30.364 [DEBUG] [Thread-53858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:58:30.364 [DEBUG] [Thread-53858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] client lang: <none>
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] server lang: <none>
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] kex follows: False
2025-11-17T11:58:30.365 [DEBUG] [Thread-53858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:58:30.366 [DEBUG] [Thread-53858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:58:30.366 [DEBUG] [Thread-53858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:58:30.366 [DEBUG] [Thread-53858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:58:30.366 [DEBUG] [Thread-53858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:58:30.366 [DEBUG] [Thread-53858] [transport.py] [_log()] Compression: none
2025-11-17T11:58:30.366 [DEBUG] [Thread-53858] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:58:30.423 [DEBUG] [Thread-53858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:58:30.423 [DEBUG] [Thread-53858] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:58:30.423 [DEBUG] [Thread-53858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:58:30.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:58:30.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:58:30.480 [DEBUG] [Thread-53858] [transport.py] [_log()] userauth is OK
2025-11-17T11:58:30.480 [DEBUG] [Thread-53858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:58:30.480 [DEBUG] [Thread-53858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:58:30.480 [DEBUG] [Thread-53858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:58:30.480 [DEBUG] [Thread-53858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:58:30.495 [INFO] [Thread-53858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:58:30.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:58:30.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:58:31.360 [DEBUG] [Thread-53858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:58:31.360 [DEBUG] [Thread-53858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:58:31.407 [DEBUG] [Thread-53858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:58:31.407 [DEBUG] [Thread-53858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:58:31.416 [DEBUG] [Thread-53858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:58:31.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:58:31.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:58:31.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:58:31.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:58:31.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:58:31.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:58:31.451 [DEBUG] [Thread-53858] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:58:35.222 [DEBUG] [Thread-53860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:58:38.800 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:58:38.800 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:58:50.268 [DEBUG] [Thread-53861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:59:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:59:01.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:59: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
2025-11-17T11:59:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 58, 39), 24.03, 19.63, 0.0, 17.61, 21.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:59:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:58:39
2025-11-17T11:59:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:59:02.418 [DEBUG] [Thread-53862] [transport.py] [_log()] starting thread (client mode): 0xd0784970
2025-11-17T11:59:02.418 [DEBUG] [Thread-53862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:59:02.441 [DEBUG] [Thread-53862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:59:02.441 [INFO] [Thread-53862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:59:02.444 [DEBUG] [Thread-53862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:59:02.444 [DEBUG] [Thread-53862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:59:02.444 [DEBUG] [Thread-53862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] client lang: <none>
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] server lang: <none>
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] kex follows: False
2025-11-17T11:59:02.445 [DEBUG] [Thread-53862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:59:02.446 [DEBUG] [Thread-53862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:59:02.446 [DEBUG] [Thread-53862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:59:02.446 [DEBUG] [Thread-53862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:59:02.446 [DEBUG] [Thread-53862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:59:02.446 [DEBUG] [Thread-53862] [transport.py] [_log()] Compression: none
2025-11-17T11:59:02.446 [DEBUG] [Thread-53862] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:59:02.465 [DEBUG] [Thread-53862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:59:02.466 [DEBUG] [Thread-53862] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:59:02.466 [DEBUG] [Thread-53862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:59:02.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:59:02.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:59:02.468 [DEBUG] [Thread-53862] [transport.py] [_log()] userauth is OK
2025-11-17T11:59:02.468 [DEBUG] [Thread-53862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:59:02.468 [DEBUG] [Thread-53862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:59:02.468 [DEBUG] [Thread-53862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:59:02.469 [DEBUG] [Thread-53862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:59:02.492 [INFO] [Thread-53862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:59:02.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:59:03.133 [DEBUG] [Thread-53862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:59:03.133 [DEBUG] [Thread-53862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:59:03.134 [DEBUG] [Thread-53862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:59:03.175 [DEBUG] [Thread-53862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:59:03.175 [DEBUG] [Thread-53862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:59:03.178 [DEBUG] [Thread-53862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:59:03.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:59:03.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:59:03.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:59:03.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:59:03.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:59:03.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:59:03.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:59:03.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:59:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:59:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.415673 -999.00  +21.20  10.89     25   +0.70 1 2 1 1 1   888    0 21.45 51.38 ----- 10.9 10.9 25.5 26.2 27.5 -24.2 26.6 -22.9 26.0 -22.0 26.9 -22.5
2025-11-17T11:59:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:59:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:59:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.415673
2025-11-17T11:59:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:59:03.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:59:03.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:59:03.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:59:03.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T11:59:03.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:58:39', tmtdew=24.03, humidity=19.63, cloud=0.0, wind=17.61, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:58:34.147', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:59:03.203 [DEBUG] [Thread-53862] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:59:03.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:59:03.300 [DEBUG] [Thread-53865] [transport.py] [_log()] starting thread (client mode): 0xd31355a0
2025-11-17T11:59:03.300 [DEBUG] [Thread-53865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:59:03.314 [DEBUG] [Thread-53865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:59:03.315 [INFO] [Thread-53865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:59:03.322 [DEBUG] [Thread-53865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] client lang: <none>
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] server lang: <none>
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] kex follows: False
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] Compression: none
2025-11-17T11:59:03.323 [DEBUG] [Thread-53865] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:59:03.384 [DEBUG] [Thread-53865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:59:03.385 [DEBUG] [Thread-53865] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:59:03.385 [DEBUG] [Thread-53865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:59:03.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:59:03.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:59:03.444 [DEBUG] [Thread-53865] [transport.py] [_log()] userauth is OK
2025-11-17T11:59:03.444 [DEBUG] [Thread-53865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:59:03.444 [DEBUG] [Thread-53865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:59:03.444 [DEBUG] [Thread-53865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:59:03.444 [DEBUG] [Thread-53865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:59:03.463 [INFO] [Thread-53865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:59:03.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:59:03.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:59:04.306 [DEBUG] [Thread-53865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:59:04.307 [DEBUG] [Thread-53865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:59:04.357 [DEBUG] [Thread-53865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:59:04.358 [DEBUG] [Thread-53865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:59:04.366 [DEBUG] [Thread-53865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:59:04.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:59:04.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')
2025-11-17T11:59:04.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:59:04.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:59:04.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:59:04.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:59:04.401 [DEBUG] [Thread-53865] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:59:05.294 [DEBUG] [Thread-53867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:59:08.362 [DEBUG] [Thread-53868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:59:20.334 [DEBUG] [Thread-53869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:59:34.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T11:59:34.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T11:59:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T11:59:35.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 59, 11), 24.06, 19.6, 0.0, 17.29, 21.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T11:59:35.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:59:11
2025-11-17T11:59:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T11:59:35.344 [DEBUG] [Thread-53870] [transport.py] [_log()] starting thread (client mode): 0xd07cf280
2025-11-17T11:59:35.344 [DEBUG] [Thread-53870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:59:35.362 [DEBUG] [Thread-53871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:59:35.364 [DEBUG] [Thread-53870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T11:59:35.364 [INFO] [Thread-53870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T11:59:35.367 [DEBUG] [Thread-53870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:59:35.367 [DEBUG] [Thread-53870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] client lang: <none>
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] server lang: <none>
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] kex follows: False
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] Compression: none
2025-11-17T11:59:35.368 [DEBUG] [Thread-53870] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:59:35.386 [DEBUG] [Thread-53870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:59:35.387 [DEBUG] [Thread-53870] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:59:35.387 [DEBUG] [Thread-53870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T11:59:35.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T11:59:35.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:59:35.389 [DEBUG] [Thread-53870] [transport.py] [_log()] userauth is OK
2025-11-17T11:59:35.389 [DEBUG] [Thread-53870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:59:35.389 [DEBUG] [Thread-53870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:59:35.389 [DEBUG] [Thread-53870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T11:59:35.389 [DEBUG] [Thread-53870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:59:35.407 [INFO] [Thread-53870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:59:35.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:59:36.187 [DEBUG] [Thread-53870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:59:36.187 [DEBUG] [Thread-53870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:59:36.187 [DEBUG] [Thread-53870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T11:59:36.228 [DEBUG] [Thread-53870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:59:36.228 [DEBUG] [Thread-53870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:59:36.231 [DEBUG] [Thread-53870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:59:36.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:59:36.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T11:59:36.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T11:59:36.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T11:59:36.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:59:36.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T11:59:36.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:59:36.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:59:36.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T11:59:36.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.416020 -999.00  +21.30  18.06     25   +0.60 1 1 1 1 1   888    0 21.61 52.92 ----- 18.1 18.1 20.8 23.8 27.5 -24.4 26.5 -23.6 26.0 -22.5 26.7 -23.4
2025-11-17T11:59:36.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T11:59:36.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T11:59:36.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.416020
2025-11-17T11:59:36.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T11:59:36.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T11:59:36.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T11:59:36.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T11:59:36.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T11:59:36.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:59:11', tmtdew=24.06, humidity=19.6, cloud=0.0, wind=17.29, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:59:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T11:59:36.256 [DEBUG] [Thread-53870] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:59:36.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T11:59:36.351 [DEBUG] [Thread-53874] [transport.py] [_log()] starting thread (client mode): 0xd07cd0c0
2025-11-17T11:59:36.351 [DEBUG] [Thread-53874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T11:59:36.366 [DEBUG] [Thread-53874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T11:59:36.366 [INFO] [Thread-53874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T11:59:36.374 [DEBUG] [Thread-53874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T11:59:36.374 [DEBUG] [Thread-53874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T11:59:36.374 [DEBUG] [Thread-53874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T11:59:36.374 [DEBUG] [Thread-53874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:59:36.374 [DEBUG] [Thread-53874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T11:59:36.374 [DEBUG] [Thread-53874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] client lang: <none>
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] server lang: <none>
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] kex follows: False
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] Compression: none
2025-11-17T11:59:36.375 [DEBUG] [Thread-53874] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T11:59:36.432 [DEBUG] [Thread-53874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T11:59:36.432 [DEBUG] [Thread-53874] [transport.py] [_log()] Switch to new keys ...
2025-11-17T11:59:36.434 [DEBUG] [Thread-53874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T11:59:36.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T11:59:36.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T11:59:36.492 [DEBUG] [Thread-53874] [transport.py] [_log()] userauth is OK
2025-11-17T11:59:36.492 [DEBUG] [Thread-53874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T11:59:36.492 [DEBUG] [Thread-53874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T11:59:36.492 [DEBUG] [Thread-53874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T11:59:36.492 [DEBUG] [Thread-53874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T11:59:36.512 [INFO] [Thread-53874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T11:59:36.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T11:59:36.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T11:59:37.342 [DEBUG] [Thread-53874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T11:59:37.342 [DEBUG] [Thread-53874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T11:59:37.390 [DEBUG] [Thread-53874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T11:59:37.390 [DEBUG] [Thread-53874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T11:59:37.399 [DEBUG] [Thread-53874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T11:59:37.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T11:59:37.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T11:59:37.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T11:59:37.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T11:59:37.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T11:59:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T11:59:37.432 [DEBUG] [Thread-53874] [transport.py] [_log()] EOF in transport thread
2025-11-17T11:59:38.942 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:59:38.943 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T11:59:50.393 [DEBUG] [Thread-53876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:00:05.433 [DEBUG] [Thread-53877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:00:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:00:07.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:00:07.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:00:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 11, 59, 43), 23.84, 20.03, 0.0, 19.51, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:00:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 11:59:43
2025-11-17T12:00:08.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:00:08.393 [DEBUG] [Thread-53878] [transport.py] [_log()] starting thread (client mode): 0xd0758c10
2025-11-17T12:00:08.394 [DEBUG] [Thread-53878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:00:08.411 [DEBUG] [Thread-53879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:00:08.415 [DEBUG] [Thread-53878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:00:08.415 [INFO] [Thread-53878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] client lang: <none>
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] server lang: <none>
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] kex follows: False
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] Compression: none
2025-11-17T12:00:08.419 [DEBUG] [Thread-53878] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:00:08.433 [DEBUG] [Thread-53878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:00:08.433 [DEBUG] [Thread-53878] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:00:08.433 [DEBUG] [Thread-53878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:00:08.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:00:08.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:00:08.435 [DEBUG] [Thread-53878] [transport.py] [_log()] userauth is OK
2025-11-17T12:00:08.435 [DEBUG] [Thread-53878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:00:08.435 [DEBUG] [Thread-53878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:00:08.435 [DEBUG] [Thread-53878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:00:08.435 [DEBUG] [Thread-53878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:00:08.459 [INFO] [Thread-53878] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:00:08.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:00:11.018 [DEBUG] [Thread-53878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:00:11.019 [DEBUG] [Thread-53878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:00:11.019 [DEBUG] [Thread-53878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:00:11.059 [DEBUG] [Thread-53878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:00:11.060 [DEBUG] [Thread-53878] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:00:11.063 [DEBUG] [Thread-53878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:00:11.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:00:11.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:00:11.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:00:11.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:00:11.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:00:11.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:00:11.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:00:11.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:00:11.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:00:11.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.416368 -999.00  +21.30  19.35     25   +0.60 1 1 1 1 1   888    0 21.19 51.49 ----- 19.4 19.4 47.8 22.0 27.5 -24.1 26.5 -24.3 26.1 -22.4 26.9 -23.2
2025-11-17T12:00:11.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:00:11.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:00:11.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.416368
2025-11-17T12:00:11.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:00:11.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:00:11.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:00:11.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:00:11.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:00:11.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T11:59:43', tmtdew=23.84, humidity=20.03, cloud=0.0, wind=19.51, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T09:59:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:00:11.089 [DEBUG] [Thread-53878] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:00:11.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:00:11.179 [DEBUG] [Thread-53882] [transport.py] [_log()] starting thread (client mode): 0xd31cc790
2025-11-17T12:00:11.179 [DEBUG] [Thread-53882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:00:11.194 [DEBUG] [Thread-53882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:00:11.194 [INFO] [Thread-53882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] client lang: <none>
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] server lang: <none>
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] kex follows: False
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:00:11.202 [DEBUG] [Thread-53882] [transport.py] [_log()] Compression: none
2025-11-17T12:00:11.203 [DEBUG] [Thread-53882] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:00:11.264 [DEBUG] [Thread-53882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:00:11.264 [DEBUG] [Thread-53882] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:00:11.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:00:11.265 [DEBUG] [Thread-53882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:00:11.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:00:11.320 [DEBUG] [Thread-53882] [transport.py] [_log()] userauth is OK
2025-11-17T12:00:11.320 [DEBUG] [Thread-53882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:00:11.320 [DEBUG] [Thread-53882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:00:11.320 [DEBUG] [Thread-53882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:00:11.320 [DEBUG] [Thread-53882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:00:11.339 [INFO] [Thread-53882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:00:11.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:00:11.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:00:12.212 [DEBUG] [Thread-53882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:00:12.212 [DEBUG] [Thread-53882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:00:12.259 [DEBUG] [Thread-53882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:00:12.259 [DEBUG] [Thread-53882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:00:12.268 [DEBUG] [Thread-53882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:00:12.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:00:12.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:00:12.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:00:12.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:00:12.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:00:12.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:00:12.303 [DEBUG] [Thread-53882] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:00:20.467 [DEBUG] [Thread-53884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:00:35.505 [DEBUG] [Thread-53885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:00:39.085 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:00:39.086 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:00:42.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:00:42.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:00:42.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:00:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 0, 15), 24.16, 19.6, 0.0, 17.03, 20.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:00:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:00:15
2025-11-17T12:00:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:00:43.225 [DEBUG] [Thread-53886] [transport.py] [_log()] starting thread (client mode): 0xd31cea40
2025-11-17T12:00:43.226 [DEBUG] [Thread-53886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:00:43.246 [DEBUG] [Thread-53886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:00:43.246 [INFO] [Thread-53886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:00:43.249 [DEBUG] [Thread-53886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:00:43.249 [DEBUG] [Thread-53886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:00:43.249 [DEBUG] [Thread-53886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] client lang: <none>
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] server lang: <none>
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] kex follows: False
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:00:43.250 [DEBUG] [Thread-53886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:00:43.251 [DEBUG] [Thread-53886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:00:43.251 [DEBUG] [Thread-53886] [transport.py] [_log()] Compression: none
2025-11-17T12:00:43.251 [DEBUG] [Thread-53886] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:00:43.269 [DEBUG] [Thread-53886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:00:43.269 [DEBUG] [Thread-53886] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:00:43.270 [DEBUG] [Thread-53886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:00:43.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:00:43.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:00:43.272 [DEBUG] [Thread-53886] [transport.py] [_log()] userauth is OK
2025-11-17T12:00:43.272 [DEBUG] [Thread-53886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:00:43.272 [DEBUG] [Thread-53886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:00:43.272 [DEBUG] [Thread-53886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:00:43.272 [DEBUG] [Thread-53886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:00:43.305 [INFO] [Thread-53886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:00:43.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:00:43.926 [DEBUG] [Thread-53886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:00:43.926 [DEBUG] [Thread-53886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:00:43.926 [DEBUG] [Thread-53886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:00:43.967 [DEBUG] [Thread-53886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:00:43.967 [DEBUG] [Thread-53886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:00:43.970 [DEBUG] [Thread-53886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:00:43.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:00:43.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:00:43.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:00:43.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:00:43.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:00:43.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:00:43.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:00:43.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:00:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:00:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.416714 -999.00  +21.40  15.78     25   +0.60 1 1 1 1 1   888    0 21.69 47.85 ----- 15.8 15.8 47.6 24.0 27.6 -24.7 26.6 -23.6 26.1 -22.8 26.9 -22.9
2025-11-17T12:00:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:00:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:00:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.416714
2025-11-17T12:00:43.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:00:43.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:00:43.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:00:43.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:00:43.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:00:43.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:00:15', tmtdew=24.16, humidity=19.6, cloud=0.0, wind=17.03, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:00:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:00:43.993 [DEBUG] [Thread-53886] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:00:44.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:00:44.089 [DEBUG] [Thread-53889] [transport.py] [_log()] starting thread (client mode): 0xd3160100
2025-11-17T12:00:44.089 [DEBUG] [Thread-53889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:00:44.104 [DEBUG] [Thread-53889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:00:44.104 [INFO] [Thread-53889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:00:44.111 [DEBUG] [Thread-53889] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:00:44.112 [DEBUG] [Thread-53889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:00:44.112 [DEBUG] [Thread-53889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:00:44.112 [DEBUG] [Thread-53889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:00:44.112 [DEBUG] [Thread-53889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:00:44.112 [DEBUG] [Thread-53889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:00:44.112 [DEBUG] [Thread-53889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:00:44.112 [DEBUG] [Thread-53889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:00:44.112 [DEBUG] [Thread-53889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:00:44.113 [DEBUG] [Thread-53889] [transport.py] [_log()] client lang: <none>
2025-11-17T12:00:44.113 [DEBUG] [Thread-53889] [transport.py] [_log()] server lang: <none>
2025-11-17T12:00:44.113 [DEBUG] [Thread-53889] [transport.py] [_log()] kex follows: False
2025-11-17T12:00:44.113 [DEBUG] [Thread-53889] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:00:44.113 [DEBUG] [Thread-53889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:00:44.113 [DEBUG] [Thread-53889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:00:44.113 [DEBUG] [Thread-53889] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:00:44.113 [DEBUG] [Thread-53889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:00:44.114 [DEBUG] [Thread-53889] [transport.py] [_log()] Compression: none
2025-11-17T12:00:44.114 [DEBUG] [Thread-53889] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:00:44.172 [DEBUG] [Thread-53889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:00:44.172 [DEBUG] [Thread-53889] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:00:44.172 [DEBUG] [Thread-53889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:00:44.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:00:44.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:00:44.228 [DEBUG] [Thread-53889] [transport.py] [_log()] userauth is OK
2025-11-17T12:00:44.228 [DEBUG] [Thread-53889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:00:44.228 [DEBUG] [Thread-53889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:00:44.228 [DEBUG] [Thread-53889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:00:44.228 [DEBUG] [Thread-53889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:00:44.247 [INFO] [Thread-53889] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:00:44.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:00:44.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:00:45.115 [DEBUG] [Thread-53889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:00:45.115 [DEBUG] [Thread-53889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:00:45.162 [DEBUG] [Thread-53889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:00:45.163 [DEBUG] [Thread-53889] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:00:45.171 [DEBUG] [Thread-53889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:00:45.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:00:45.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:00:45.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:00:45.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:00:45.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:00:45.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:00:45.205 [DEBUG] [Thread-53889] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:00:50.532 [DEBUG] [Thread-53891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:01:05.570 [DEBUG] [Thread-53892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:01:08.462 [DEBUG] [Thread-53893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:01:15.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:01:15.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:01:15.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:01:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 0, 47), 24.03, 19.62, 0.0, 17.27, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:01:15.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:00:47
2025-11-17T12:01:15.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:01:16.143 [DEBUG] [Thread-53894] [transport.py] [_log()] starting thread (client mode): 0xd31b0c10
2025-11-17T12:01:16.143 [DEBUG] [Thread-53894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:01:16.159 [DEBUG] [Thread-53894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:01:16.159 [INFO] [Thread-53894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:01:16.160 [DEBUG] [Thread-53894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:01:16.160 [DEBUG] [Thread-53894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] client lang: <none>
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] server lang: <none>
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] kex follows: False
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] Compression: none
2025-11-17T12:01:16.161 [DEBUG] [Thread-53894] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:01:16.167 [DEBUG] [Thread-53894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:01:16.168 [DEBUG] [Thread-53894] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:01:16.168 [DEBUG] [Thread-53894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:01:16.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:01:16.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:01:16.168 [DEBUG] [Thread-53894] [transport.py] [_log()] userauth is OK
2025-11-17T12:01:16.168 [DEBUG] [Thread-53894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:01:16.168 [DEBUG] [Thread-53894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:01:16.168 [DEBUG] [Thread-53894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:01:16.168 [DEBUG] [Thread-53894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:01:16.195 [INFO] [Thread-53894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:01:16.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:01:16.813 [DEBUG] [Thread-53894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:01:16.814 [DEBUG] [Thread-53894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:01:16.814 [DEBUG] [Thread-53894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:01:16.854 [DEBUG] [Thread-53894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:01:16.854 [DEBUG] [Thread-53894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:01:16.856 [DEBUG] [Thread-53894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:01:16.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:01:16.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:01:16.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:01:16.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:01:16.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:01:16.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:01:16.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.417062 -999.00  +21.30  11.60     24   +0.40 1 2 1 1 1   888    0 21.71 52.35 ----- 11.6 11.6 328.5 28.6 27.6 -24.3 26.6 -23.2 26.0 -22.8 26.9 -23.6
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.417062
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:01:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:00:47', tmtdew=24.03, humidity=19.62, cloud=0.0, wind=17.27, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:00:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:01:16.878 [DEBUG] [Thread-53894] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:01:16.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:01:16.963 [DEBUG] [Thread-53897] [transport.py] [_log()] starting thread (client mode): 0xd31edde0
2025-11-17T12:01:16.963 [DEBUG] [Thread-53897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:01:16.978 [DEBUG] [Thread-53897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:01:16.978 [INFO] [Thread-53897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:01:16.986 [DEBUG] [Thread-53897] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:01:16.986 [DEBUG] [Thread-53897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:01:16.986 [DEBUG] [Thread-53897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:01:16.986 [DEBUG] [Thread-53897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:01:16.986 [DEBUG] [Thread-53897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:01:16.986 [DEBUG] [Thread-53897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:01:16.986 [DEBUG] [Thread-53897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] client lang: <none>
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] server lang: <none>
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] kex follows: False
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:01:16.987 [DEBUG] [Thread-53897] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:01:16.988 [DEBUG] [Thread-53897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:01:16.988 [DEBUG] [Thread-53897] [transport.py] [_log()] Compression: none
2025-11-17T12:01:16.988 [DEBUG] [Thread-53897] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:01:17.048 [DEBUG] [Thread-53897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:01:17.048 [DEBUG] [Thread-53897] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:01:17.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:01:17.049 [DEBUG] [Thread-53897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:01:17.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:01:17.105 [DEBUG] [Thread-53897] [transport.py] [_log()] userauth is OK
2025-11-17T12:01:17.105 [DEBUG] [Thread-53897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:01:17.105 [DEBUG] [Thread-53897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:01:17.105 [DEBUG] [Thread-53897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:01:17.105 [DEBUG] [Thread-53897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:01:17.125 [INFO] [Thread-53897] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:01:17.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:01:17.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:01:17.966 [DEBUG] [Thread-53897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:01:17.966 [DEBUG] [Thread-53897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:01:18.014 [DEBUG] [Thread-53897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:01:18.014 [DEBUG] [Thread-53897] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:01:18.023 [DEBUG] [Thread-53897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:01:18.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:01:18.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:01:18.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:01:18.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:01:18.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:01:18.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:01:18.058 [DEBUG] [Thread-53897] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:01:20.597 [DEBUG] [Thread-53899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:01:35.632 [DEBUG] [Thread-53900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:01:39.228 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:01:39.229 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:01:48.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:01:48.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:01:48.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:01:48.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 1, 19), 23.97, 19.65, 0.0, 13.16, 20.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:01:48.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:01:19
2025-11-17T12:01:48.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:01:49.025 [DEBUG] [Thread-53901] [transport.py] [_log()] starting thread (client mode): 0xd31efe80
2025-11-17T12:01:49.025 [DEBUG] [Thread-53901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:01:49.044 [DEBUG] [Thread-53901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:01:49.045 [INFO] [Thread-53901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:01:49.048 [DEBUG] [Thread-53901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:01:49.048 [DEBUG] [Thread-53901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:01:49.048 [DEBUG] [Thread-53901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:01:49.048 [DEBUG] [Thread-53901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:01:49.048 [DEBUG] [Thread-53901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] client lang: <none>
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] server lang: <none>
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] kex follows: False
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] Compression: none
2025-11-17T12:01:49.049 [DEBUG] [Thread-53901] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:01:49.069 [DEBUG] [Thread-53901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:01:49.069 [DEBUG] [Thread-53901] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:01:49.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:01:49.071 [DEBUG] [Thread-53901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:01:49.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:01:49.072 [DEBUG] [Thread-53901] [transport.py] [_log()] userauth is OK
2025-11-17T12:01:49.073 [DEBUG] [Thread-53901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:01:49.073 [DEBUG] [Thread-53901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:01:49.073 [DEBUG] [Thread-53901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:01:49.073 [DEBUG] [Thread-53901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:01:49.108 [INFO] [Thread-53901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:01:49.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:01:49.746 [DEBUG] [Thread-53901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:01:49.746 [DEBUG] [Thread-53901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:01:49.746 [DEBUG] [Thread-53901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:01:49.787 [DEBUG] [Thread-53901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:01:49.787 [DEBUG] [Thread-53901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:01:49.789 [DEBUG] [Thread-53901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:01:49.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:01:49.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:01:49.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:01:49.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:01:49.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:01:49.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:01:49.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.417409 -999.00  +20.90  21.61     25   +0.10 1 1 1 1 1   888    0 21.29 54.48 ----- 21.6 21.6 26.6 29.9 27.5 -25.3 26.4 -26.6 26.1 -22.5 26.8 -23.7
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.417409
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:01:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:01:19', tmtdew=23.97, humidity=19.65, cloud=0.0, wind=13.16, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:01:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:01:49.809 [DEBUG] [Thread-53901] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:01:49.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:01:49.895 [DEBUG] [Thread-53904] [transport.py] [_log()] starting thread (client mode): 0xd31cda50
2025-11-17T12:01:49.895 [DEBUG] [Thread-53904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:01:49.909 [DEBUG] [Thread-53904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:01:49.909 [INFO] [Thread-53904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] client lang: <none>
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] server lang: <none>
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] kex follows: False
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] Compression: none
2025-11-17T12:01:49.917 [DEBUG] [Thread-53904] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:01:49.975 [DEBUG] [Thread-53904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:01:49.975 [DEBUG] [Thread-53904] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:01:49.975 [DEBUG] [Thread-53904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:01:49.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:01:49.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:01:50.032 [DEBUG] [Thread-53904] [transport.py] [_log()] userauth is OK
2025-11-17T12:01:50.032 [DEBUG] [Thread-53904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:01:50.032 [DEBUG] [Thread-53904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:01:50.032 [DEBUG] [Thread-53904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:01:50.032 [DEBUG] [Thread-53904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:01:50.049 [INFO] [Thread-53904] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:01:50.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:01:50.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:01:50.663 [DEBUG] [Thread-53906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:01:50.913 [DEBUG] [Thread-53904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:01:50.913 [DEBUG] [Thread-53904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:01:50.961 [DEBUG] [Thread-53904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:01:50.961 [DEBUG] [Thread-53904] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:01:50.969 [DEBUG] [Thread-53904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:01:50.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:01:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:01:50.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:01:50.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:01:50.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:01:50.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:01:51.002 [DEBUG] [Thread-53904] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:02:05.697 [DEBUG] [Thread-53907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:02:08.508 [DEBUG] [Thread-53908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:02:20.729 [DEBUG] [Thread-53909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:02:21.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:02:21.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:02:21.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:02:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 1, 51), 24.31, 19.03, 0.0, 23.47, 20.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:02:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:01:51
2025-11-17T12:02:21.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:02:21.941 [DEBUG] [Thread-53910] [transport.py] [_log()] starting thread (client mode): 0xd3134f40
2025-11-17T12:02:21.942 [DEBUG] [Thread-53910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:02:21.962 [DEBUG] [Thread-53910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:02:21.962 [INFO] [Thread-53910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:02:21.963 [DEBUG] [Thread-53910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:02:21.963 [DEBUG] [Thread-53910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:02:21.963 [DEBUG] [Thread-53910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:02:21.963 [DEBUG] [Thread-53910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] client lang: <none>
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] server lang: <none>
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] kex follows: False
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] Compression: none
2025-11-17T12:02:21.964 [DEBUG] [Thread-53910] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:02:21.972 [DEBUG] [Thread-53910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:02:21.973 [DEBUG] [Thread-53910] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:02:21.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:02:21.973 [DEBUG] [Thread-53910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:02:21.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:02:21.984 [DEBUG] [Thread-53910] [transport.py] [_log()] userauth is OK
2025-11-17T12:02:21.985 [DEBUG] [Thread-53910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:02:21.985 [DEBUG] [Thread-53910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:02:21.985 [DEBUG] [Thread-53910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:02:21.985 [DEBUG] [Thread-53910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:02:22.008 [INFO] [Thread-53910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:02:22.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:02:22.648 [DEBUG] [Thread-53910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:02:22.648 [DEBUG] [Thread-53910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:02:22.649 [DEBUG] [Thread-53910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:02:22.690 [DEBUG] [Thread-53910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:02:22.690 [DEBUG] [Thread-53910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:02:22.693 [DEBUG] [Thread-53910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:02:22.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:02:22.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:02:22.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:02:22.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:02:22.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:02:22.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:02:22.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:02:22.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:02:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:02:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.417756 -999.00  +21.00  17.18     24   +0.10 1 1 1 1 1   888    0 21.45 55.66 ----- 17.2 17.2 325.4 23.7 27.5 -25.1 26.4 -25.2 26.0 -22.6 26.8 -23.1
2025-11-17T12:02:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:02:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:02:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.417756
2025-11-17T12:02:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:02:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:02:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:02:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:02:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:02:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:01:51', tmtdew=24.31, humidity=19.03, cloud=0.0, wind=23.47, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:01:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:02:22.719 [DEBUG] [Thread-53910] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:02:22.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:02:22.815 [DEBUG] [Thread-53913] [transport.py] [_log()] starting thread (client mode): 0xd31ef490
2025-11-17T12:02:22.815 [DEBUG] [Thread-53913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:02:22.834 [DEBUG] [Thread-53913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:02:22.835 [INFO] [Thread-53913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:02:22.842 [DEBUG] [Thread-53913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:02:22.842 [DEBUG] [Thread-53913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:02:22.842 [DEBUG] [Thread-53913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:02:22.842 [DEBUG] [Thread-53913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] client lang: <none>
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] server lang: <none>
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] kex follows: False
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] Compression: none
2025-11-17T12:02:22.843 [DEBUG] [Thread-53913] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:02:22.900 [DEBUG] [Thread-53913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:02:22.900 [DEBUG] [Thread-53913] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:02:22.901 [DEBUG] [Thread-53913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:02:22.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:02:22.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:02:22.960 [DEBUG] [Thread-53913] [transport.py] [_log()] userauth is OK
2025-11-17T12:02:22.960 [DEBUG] [Thread-53913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:02:22.960 [DEBUG] [Thread-53913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:02:22.960 [DEBUG] [Thread-53913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:02:22.960 [DEBUG] [Thread-53913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:02:22.980 [INFO] [Thread-53913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:02:22.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:02:22.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:02:23.808 [DEBUG] [Thread-53913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:02:23.808 [DEBUG] [Thread-53913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:02:23.856 [DEBUG] [Thread-53913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:02:23.856 [DEBUG] [Thread-53913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:02:23.865 [DEBUG] [Thread-53913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:02:23.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:02:23.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:02:23.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:02:23.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:02:23.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:02:23.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:02:23.898 [DEBUG] [Thread-53913] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:02:35.759 [DEBUG] [Thread-53915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:02:39.369 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:02:39.370 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:02:50.804 [DEBUG] [Thread-53916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:02:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:02:53.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:02:53.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:02:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 2, 23), 24.66, 18.59, 0.0, 22.62, 21.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:02:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:02:23
2025-11-17T12:02:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:02:54.837 [DEBUG] [Thread-53917] [transport.py] [_log()] starting thread (client mode): 0xd07bcc70
2025-11-17T12:02:54.838 [DEBUG] [Thread-53917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:02:54.858 [DEBUG] [Thread-53917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:02:54.859 [INFO] [Thread-53917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:02:54.861 [DEBUG] [Thread-53917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] client lang: <none>
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] server lang: <none>
2025-11-17T12:02:54.862 [DEBUG] [Thread-53917] [transport.py] [_log()] kex follows: False
2025-11-17T12:02:54.863 [DEBUG] [Thread-53917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:02:54.863 [DEBUG] [Thread-53917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:02:54.863 [DEBUG] [Thread-53917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:02:54.863 [DEBUG] [Thread-53917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:02:54.863 [DEBUG] [Thread-53917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:02:54.863 [DEBUG] [Thread-53917] [transport.py] [_log()] Compression: none
2025-11-17T12:02:54.863 [DEBUG] [Thread-53917] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:02:54.881 [DEBUG] [Thread-53917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:02:54.882 [DEBUG] [Thread-53917] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:02:54.882 [DEBUG] [Thread-53917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:02:54.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:02:54.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:02:54.884 [DEBUG] [Thread-53917] [transport.py] [_log()] userauth is OK
2025-11-17T12:02:54.885 [DEBUG] [Thread-53917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:02:54.885 [DEBUG] [Thread-53917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:02:54.885 [DEBUG] [Thread-53917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:02:54.885 [DEBUG] [Thread-53917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:02:54.920 [INFO] [Thread-53917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:02:54.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:02:55.569 [DEBUG] [Thread-53917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:02:55.569 [DEBUG] [Thread-53917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:02:55.570 [DEBUG] [Thread-53917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:02:55.610 [DEBUG] [Thread-53917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:02:55.610 [DEBUG] [Thread-53917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:02:55.613 [DEBUG] [Thread-53917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:02:55.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:02:55.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:02:55.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:02:55.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:02:55.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:02:55.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:02:55.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:02:55.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:02:55.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:02:55.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.418451 -999.00  +20.00  11.08     26   -0.00 1 1 1 1 1   888    0 21.26 51.89 ----- 11.1 11.1 297.6 18.1 27.5 -25.7 26.5 -23.5 26.0 -23.3 26.9 -23.5
2025-11-17T12:02:55.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:02:55.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:02:55.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.418451
2025-11-17T12:02:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:02:55.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:02:55.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:02:55.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:02:55.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:02:55.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:02:23', tmtdew=24.66, humidity=18.59, cloud=0.0, wind=22.62, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:02:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:02:55.639 [DEBUG] [Thread-53917] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:02:55.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:02:55.739 [DEBUG] [Thread-53920] [transport.py] [_log()] starting thread (client mode): 0xd07be950
2025-11-17T12:02:55.739 [DEBUG] [Thread-53920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:02:55.754 [DEBUG] [Thread-53920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:02:55.754 [INFO] [Thread-53920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:02:55.761 [DEBUG] [Thread-53920] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:02:55.761 [DEBUG] [Thread-53920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:02:55.761 [DEBUG] [Thread-53920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:02:55.761 [DEBUG] [Thread-53920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:02:55.761 [DEBUG] [Thread-53920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:02:55.761 [DEBUG] [Thread-53920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:02:55.761 [DEBUG] [Thread-53920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:02:55.761 [DEBUG] [Thread-53920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] client lang: <none>
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] server lang: <none>
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] kex follows: False
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] Compression: none
2025-11-17T12:02:55.762 [DEBUG] [Thread-53920] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:02:55.819 [DEBUG] [Thread-53920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:02:55.819 [DEBUG] [Thread-53920] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:02:55.820 [DEBUG] [Thread-53920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:02:55.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:02:55.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:02:55.875 [DEBUG] [Thread-53920] [transport.py] [_log()] userauth is OK
2025-11-17T12:02:55.875 [DEBUG] [Thread-53920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:02:55.875 [DEBUG] [Thread-53920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:02:55.875 [DEBUG] [Thread-53920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:02:55.875 [DEBUG] [Thread-53920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:02:55.889 [INFO] [Thread-53920] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:02:55.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:02:55.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:02:56.746 [DEBUG] [Thread-53920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:02:56.746 [DEBUG] [Thread-53920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:02:56.793 [DEBUG] [Thread-53920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:02:56.794 [DEBUG] [Thread-53920] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:02:56.802 [DEBUG] [Thread-53920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:02:56.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:02:56.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:02:56.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:02:56.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:02:56.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:02:56.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:02:56.832 [DEBUG] [Thread-53920] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:03:05.834 [DEBUG] [Thread-53922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:03:08.555 [DEBUG] [Thread-53923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:03:20.881 [DEBUG] [Thread-53924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:03:26.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:03:26.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:03:26.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
2025-11-17T12:03:27.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 2, 55), 23.72, 19.77, 0.0, 13.57, 20.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:03:27.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:02:55
2025-11-17T12:03:27.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:03:27.785 [DEBUG] [Thread-53925] [transport.py] [_log()] starting thread (client mode): 0xd07befb0
2025-11-17T12:03:27.786 [DEBUG] [Thread-53925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:03:27.806 [DEBUG] [Thread-53925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:03:27.806 [INFO] [Thread-53925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] client lang: <none>
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] server lang: <none>
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] kex follows: False
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:03:27.809 [DEBUG] [Thread-53925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:03:27.810 [DEBUG] [Thread-53925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:03:27.810 [DEBUG] [Thread-53925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:03:27.810 [DEBUG] [Thread-53925] [transport.py] [_log()] Compression: none
2025-11-17T12:03:27.810 [DEBUG] [Thread-53925] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:03:27.826 [DEBUG] [Thread-53925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:03:27.826 [DEBUG] [Thread-53925] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:03:27.827 [DEBUG] [Thread-53925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:03:27.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:03:27.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:03:27.828 [DEBUG] [Thread-53925] [transport.py] [_log()] userauth is OK
2025-11-17T12:03:27.828 [DEBUG] [Thread-53925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:03:27.829 [DEBUG] [Thread-53925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:03:27.829 [DEBUG] [Thread-53925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:03:27.829 [DEBUG] [Thread-53925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:03:27.861 [INFO] [Thread-53925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:03:27.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:03:28.487 [DEBUG] [Thread-53925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:03:28.487 [DEBUG] [Thread-53925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:03:28.488 [DEBUG] [Thread-53925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:03:28.528 [DEBUG] [Thread-53925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:03:28.528 [DEBUG] [Thread-53925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:03:28.530 [DEBUG] [Thread-53925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:03:28.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:03:28.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:03:28.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:03:28.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:03:28.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:03:28.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:03:28.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.418798 -999.00  +20.20  16.09     26   +0.20 1 1 1 1 1   888    0 21.14 51.30 ----- 16.1 16.1 52.8 20.3 27.7 -24.4 26.5 -25.6 26.2 -22.3 27.0 -23.7
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.418798
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:03:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:03:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:03:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:03:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:02:55', tmtdew=23.72, humidity=19.77, cloud=0.0, wind=13.57, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:03:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:03:28.550 [DEBUG] [Thread-53925] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:03:28.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:03:28.635 [DEBUG] [Thread-53928] [transport.py] [_log()] starting thread (client mode): 0xd3161f30
2025-11-17T12:03:28.636 [DEBUG] [Thread-53928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:03:28.653 [DEBUG] [Thread-53928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:03:28.653 [INFO] [Thread-53928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] client lang: <none>
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] server lang: <none>
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] kex follows: False
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] Compression: none
2025-11-17T12:03:28.660 [DEBUG] [Thread-53928] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:03:28.718 [DEBUG] [Thread-53928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:03:28.718 [DEBUG] [Thread-53928] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:03:28.719 [DEBUG] [Thread-53928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:03:28.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:03:28.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:03:28.775 [DEBUG] [Thread-53928] [transport.py] [_log()] userauth is OK
2025-11-17T12:03:28.775 [DEBUG] [Thread-53928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:03:28.775 [DEBUG] [Thread-53928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:03:28.776 [DEBUG] [Thread-53928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:03:28.776 [DEBUG] [Thread-53928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:03:28.790 [INFO] [Thread-53928] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:03:28.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:03:28.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:03:29.684 [DEBUG] [Thread-53928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:03:29.684 [DEBUG] [Thread-53928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:03:29.732 [DEBUG] [Thread-53928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:03:29.732 [DEBUG] [Thread-53928] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:03:29.740 [DEBUG] [Thread-53928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:03:29.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:03:29.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:03:29.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:03:29.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:03:29.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:03:29.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:03:29.772 [DEBUG] [Thread-53928] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:03:35.912 [DEBUG] [Thread-53930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:03:39.512 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:03:39.513 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:03:50.956 [DEBUG] [Thread-53931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:03:59.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:03:59.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:03:59.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:04:00.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 3, 27), 23.78, 19.67, 0.0, 10.59, 20.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:04:00.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:03:27
2025-11-17T12:04:00.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:04:00.780 [DEBUG] [Thread-53932] [transport.py] [_log()] starting thread (client mode): 0xd07cd600
2025-11-17T12:04:00.780 [DEBUG] [Thread-53932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:04:00.799 [DEBUG] [Thread-53932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:04:00.799 [INFO] [Thread-53932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:04:00.802 [DEBUG] [Thread-53932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:04:00.802 [DEBUG] [Thread-53932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:04:00.802 [DEBUG] [Thread-53932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:04:00.802 [DEBUG] [Thread-53932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:04:00.802 [DEBUG] [Thread-53932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:04:00.802 [DEBUG] [Thread-53932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:04:00.802 [DEBUG] [Thread-53932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:04:00.802 [DEBUG] [Thread-53932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] client lang: <none>
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] server lang: <none>
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] kex follows: False
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] Compression: none
2025-11-17T12:04:00.803 [DEBUG] [Thread-53932] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:04:00.817 [DEBUG] [Thread-53932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:04:00.817 [DEBUG] [Thread-53932] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:04:00.817 [DEBUG] [Thread-53932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:04:00.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:04:00.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:04:00.818 [DEBUG] [Thread-53932] [transport.py] [_log()] userauth is OK
2025-11-17T12:04:00.818 [DEBUG] [Thread-53932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:04:00.818 [DEBUG] [Thread-53932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:04:00.818 [DEBUG] [Thread-53932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:04:00.818 [DEBUG] [Thread-53932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:04:00.837 [INFO] [Thread-53932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:04:00.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:04:01.461 [DEBUG] [Thread-53932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:04:01.462 [DEBUG] [Thread-53932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:04:01.462 [DEBUG] [Thread-53932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:04:01.503 [DEBUG] [Thread-53932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:04:01.503 [DEBUG] [Thread-53932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:04:01.505 [DEBUG] [Thread-53932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:04:01.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:04:01.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:04:01.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:04:01.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:04:01.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:04:01.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:04:01.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:04:01.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:04:01.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:04:01.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.419145 -999.00  +20.20   9.20     25   +0.00 1 2 1 1 1   888    0 22.09 54.18 ----- 9.2 9.2 52.6 13.6 27.6 -24.3 26.6 -23.6 26.1 -22.3 27.0 -23.0
2025-11-17T12:04:01.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:04:01.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:04:01.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.419145
2025-11-17T12:04:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:04:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:04:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:04:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:04:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:04:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:03:27', tmtdew=23.78, humidity=19.67, cloud=0.0, wind=10.59, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:03:34.128', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:04:01.525 [DEBUG] [Thread-53932] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:04:01.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:04:01.611 [DEBUG] [Thread-53935] [transport.py] [_log()] starting thread (client mode): 0xd07cd900
2025-11-17T12:04:01.612 [DEBUG] [Thread-53935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:04:01.627 [DEBUG] [Thread-53935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:04:01.627 [INFO] [Thread-53935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:04:01.634 [DEBUG] [Thread-53935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:04:01.634 [DEBUG] [Thread-53935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:04:01.634 [DEBUG] [Thread-53935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:04:01.634 [DEBUG] [Thread-53935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] client lang: <none>
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] server lang: <none>
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] kex follows: False
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] Compression: none
2025-11-17T12:04:01.635 [DEBUG] [Thread-53935] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:04:01.691 [DEBUG] [Thread-53935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:04:01.691 [DEBUG] [Thread-53935] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:04:01.691 [DEBUG] [Thread-53935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:04:01.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:04:01.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:04:01.751 [DEBUG] [Thread-53935] [transport.py] [_log()] userauth is OK
2025-11-17T12:04:01.752 [DEBUG] [Thread-53935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:04:01.752 [DEBUG] [Thread-53935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:04:01.752 [DEBUG] [Thread-53935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:04:01.752 [DEBUG] [Thread-53935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:04:01.769 [INFO] [Thread-53935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:04:01.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:04:01.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:04:02.635 [DEBUG] [Thread-53935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:04:02.636 [DEBUG] [Thread-53935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:04:02.683 [DEBUG] [Thread-53935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:04:02.683 [DEBUG] [Thread-53935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:04:02.692 [DEBUG] [Thread-53935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:04:02.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:04:02.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:04:02.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:04:02.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:04:02.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:04:02.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:04:02.726 [DEBUG] [Thread-53935] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:04:05.983 [DEBUG] [Thread-53937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:04:08.611 [DEBUG] [Thread-53938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:04:21.022 [DEBUG] [Thread-53939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:04:32.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:04:32.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:04:32.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:04:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 3, 59), 23.24, 20.45, 0.0, 11.21, 20.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:04:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:03:59
2025-11-17T12:04:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:04:33.712 [DEBUG] [Thread-53940] [transport.py] [_log()] starting thread (client mode): 0xd07bd3c0
2025-11-17T12:04:33.712 [DEBUG] [Thread-53940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:04:33.732 [DEBUG] [Thread-53940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:04:33.732 [INFO] [Thread-53940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] client lang: <none>
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] server lang: <none>
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] kex follows: False
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:04:33.734 [DEBUG] [Thread-53940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:04:33.735 [DEBUG] [Thread-53940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:04:33.735 [DEBUG] [Thread-53940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:04:33.735 [DEBUG] [Thread-53940] [transport.py] [_log()] Compression: none
2025-11-17T12:04:33.735 [DEBUG] [Thread-53940] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:04:33.756 [DEBUG] [Thread-53940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:04:33.756 [DEBUG] [Thread-53940] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:04:33.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:04:33.757 [DEBUG] [Thread-53940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:04:33.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:04:33.758 [DEBUG] [Thread-53940] [transport.py] [_log()] userauth is OK
2025-11-17T12:04:33.758 [DEBUG] [Thread-53940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:04:33.758 [DEBUG] [Thread-53940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:04:33.758 [DEBUG] [Thread-53940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:04:33.758 [DEBUG] [Thread-53940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:04:33.777 [INFO] [Thread-53940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:04:33.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:04:34.432 [DEBUG] [Thread-53940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:04:34.432 [DEBUG] [Thread-53940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:04:34.432 [DEBUG] [Thread-53940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:04:34.473 [DEBUG] [Thread-53940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:04:34.474 [DEBUG] [Thread-53940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:04:34.476 [DEBUG] [Thread-53940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:04:34.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:04:34.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:04:34.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:04:34.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:04:34.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:04:34.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:04:34.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:04:34.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:04:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:04:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.419493 -999.00  +20.40   3.67     25   +0.00 1 2 1 1 1   888    0 22.39 60.59 ----- 3.7 3.7 180.0 9.7 27.8 -23.5 26.8 -22.7 26.2 -22.2 27.2 -22.9
2025-11-17T12:04:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:04:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:04:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.419493
2025-11-17T12:04:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:04:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:04:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:04:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:04:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:04:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:03:59', tmtdew=23.24, humidity=20.45, cloud=0.0, wind=11.21, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:04:04.195', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:04:34.501 [DEBUG] [Thread-53940] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:04:34.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:04:34.608 [DEBUG] [Thread-53943] [transport.py] [_log()] starting thread (client mode): 0xd07cc520
2025-11-17T12:04:34.608 [DEBUG] [Thread-53943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:04:34.634 [DEBUG] [Thread-53943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:04:34.634 [INFO] [Thread-53943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:04:34.652 [DEBUG] [Thread-53943] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] client lang: <none>
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] server lang: <none>
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] kex follows: False
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:04:34.653 [DEBUG] [Thread-53943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:04:34.654 [DEBUG] [Thread-53943] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:04:34.654 [DEBUG] [Thread-53943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:04:34.654 [DEBUG] [Thread-53943] [transport.py] [_log()] Compression: none
2025-11-17T12:04:34.654 [DEBUG] [Thread-53943] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:04:34.723 [DEBUG] [Thread-53943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:04:34.724 [DEBUG] [Thread-53943] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:04:34.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:04:34.724 [DEBUG] [Thread-53943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:04:34.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:04:34.797 [DEBUG] [Thread-53943] [transport.py] [_log()] userauth is OK
2025-11-17T12:04:34.797 [DEBUG] [Thread-53943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:04:34.797 [DEBUG] [Thread-53943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:04:34.797 [DEBUG] [Thread-53943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:04:34.797 [DEBUG] [Thread-53943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:04:34.820 [INFO] [Thread-53943] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:04:34.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:04:34.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:04:35.698 [DEBUG] [Thread-53943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:04:35.699 [DEBUG] [Thread-53943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:04:35.746 [DEBUG] [Thread-53943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:04:35.746 [DEBUG] [Thread-53943] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:04:35.755 [DEBUG] [Thread-53943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:04:35.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:04:35.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:04:35.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:04:35.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:04:35.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:04:35.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:04:35.789 [DEBUG] [Thread-53943] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:04:36.050 [DEBUG] [Thread-53945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:04:39.655 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:04:39.656 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:04:51.094 [DEBUG] [Thread-53946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:05:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:05:05.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:05:05.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:05:06.124 [DEBUG] [Thread-53947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:05:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 4, 31), 23.44, 20.2, 0.0, 12.16, 20.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:05:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:04:31
2025-11-17T12:05:06.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:05:06.778 [DEBUG] [Thread-53948] [transport.py] [_log()] starting thread (client mode): 0xd07be830
2025-11-17T12:05:06.778 [DEBUG] [Thread-53948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:05:06.799 [DEBUG] [Thread-53948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:05:06.799 [INFO] [Thread-53948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] client lang: <none>
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] server lang: <none>
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] kex follows: False
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:05:06.801 [DEBUG] [Thread-53948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:05:06.802 [DEBUG] [Thread-53948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:05:06.802 [DEBUG] [Thread-53948] [transport.py] [_log()] Compression: none
2025-11-17T12:05:06.802 [DEBUG] [Thread-53948] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:05:06.813 [DEBUG] [Thread-53948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:05:06.813 [DEBUG] [Thread-53948] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:05:06.813 [DEBUG] [Thread-53948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:05:06.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:05:06.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:05:06.814 [DEBUG] [Thread-53948] [transport.py] [_log()] userauth is OK
2025-11-17T12:05:06.814 [DEBUG] [Thread-53948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:05:06.814 [DEBUG] [Thread-53948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:05:06.814 [DEBUG] [Thread-53948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:05:06.814 [DEBUG] [Thread-53948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:05:06.830 [INFO] [Thread-53948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:05:06.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:05:08.654 [DEBUG] [Thread-53950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:05:11.152 [DEBUG] [Thread-53948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:05:11.153 [DEBUG] [Thread-53948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:05:11.153 [DEBUG] [Thread-53948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:05:11.193 [DEBUG] [Thread-53948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:05:11.194 [DEBUG] [Thread-53948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:05:11.197 [DEBUG] [Thread-53948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:05:11.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:05:11.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:05:11.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:05:11.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:05:11.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:05:11.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:05:11.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:05:11.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:05:11.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:05:11.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.419840 -999.00  +20.70   7.11     25   +0.20 1 1 1 1 1   888    0 22.09 62.37 ----- 7.1 7.1 38.8 7.9 28.0 -24.0 26.9 -24.4 26.5 -22.0 27.4 -23.2
2025-11-17T12:05:11.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:05:11.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:05:11.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.419840
2025-11-17T12:05:11.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:05:11.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:05:11.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:05:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:05:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:05:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:04:31', tmtdew=23.44, humidity=20.2, cloud=0.0, wind=12.16, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:04:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:05:11.231 [DEBUG] [Thread-53948] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:05:11.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:05:11.318 [DEBUG] [Thread-53952] [transport.py] [_log()] starting thread (client mode): 0xd3135ea0
2025-11-17T12:05:11.318 [DEBUG] [Thread-53952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:05:11.332 [DEBUG] [Thread-53952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:05:11.333 [INFO] [Thread-53952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:05:11.340 [DEBUG] [Thread-53952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] client lang: <none>
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] server lang: <none>
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] kex follows: False
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:05:11.341 [DEBUG] [Thread-53952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:05:11.342 [DEBUG] [Thread-53952] [transport.py] [_log()] Compression: none
2025-11-17T12:05:11.342 [DEBUG] [Thread-53952] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:05:11.405 [DEBUG] [Thread-53952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:05:11.406 [DEBUG] [Thread-53952] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:05:11.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:05:11.407 [DEBUG] [Thread-53952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:05:11.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:05:11.468 [DEBUG] [Thread-53952] [transport.py] [_log()] userauth is OK
2025-11-17T12:05:11.468 [DEBUG] [Thread-53952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:05:11.468 [DEBUG] [Thread-53952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:05:11.468 [DEBUG] [Thread-53952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:05:11.469 [DEBUG] [Thread-53952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:05:11.488 [INFO] [Thread-53952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:05:11.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:05:11.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:05:12.406 [DEBUG] [Thread-53952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:05:12.407 [DEBUG] [Thread-53952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:05:12.454 [DEBUG] [Thread-53952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:05:12.454 [DEBUG] [Thread-53952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:05:12.463 [DEBUG] [Thread-53952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:05:12.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:05:12.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:05:12.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:05:12.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:05:12.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:05:12.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:05:12.499 [DEBUG] [Thread-53952] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:05:21.152 [DEBUG] [Thread-53954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:05:36.197 [DEBUG] [Thread-53955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:05:39.798 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:05:39.799 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:05:42.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:05:42.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:05:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:05:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 5, 35), 23.75, 19.86, 0.0, 4.68, 20.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:05:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:05:35
2025-11-17T12:05:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:05:43.506 [DEBUG] [Thread-53956] [transport.py] [_log()] starting thread (client mode): 0xd31ce350
2025-11-17T12:05:43.506 [DEBUG] [Thread-53956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:05:43.527 [DEBUG] [Thread-53956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:05:43.527 [INFO] [Thread-53956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] client lang: <none>
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] server lang: <none>
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] kex follows: False
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:05:43.530 [DEBUG] [Thread-53956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:05:43.531 [DEBUG] [Thread-53956] [transport.py] [_log()] Compression: none
2025-11-17T12:05:43.531 [DEBUG] [Thread-53956] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:05:43.547 [DEBUG] [Thread-53956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:05:43.547 [DEBUG] [Thread-53956] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:05:43.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:05:43.547 [DEBUG] [Thread-53956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:05:43.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:05:43.548 [DEBUG] [Thread-53956] [transport.py] [_log()] userauth is OK
2025-11-17T12:05:43.548 [DEBUG] [Thread-53956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:05:43.548 [DEBUG] [Thread-53956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:05:43.548 [DEBUG] [Thread-53956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:05:43.548 [DEBUG] [Thread-53956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:05:43.557 [INFO] [Thread-53956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:05:43.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:05:44.203 [DEBUG] [Thread-53956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:05:44.203 [DEBUG] [Thread-53956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:05:44.203 [DEBUG] [Thread-53956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:05:44.244 [DEBUG] [Thread-53956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:05:44.244 [DEBUG] [Thread-53956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:05:44.246 [DEBUG] [Thread-53956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:05:44.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:05:44.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:05:44.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:05:44.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:05:44.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:05:44.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:05:44.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.420187 -999.00  +20.70   2.56     25   +0.20 1 2 1 1 1   888    0 21.77 66.09 ----- 2.6 2.6 269.3 6.4 28.1 -24.2 27.0 -22.9 26.4 -23.0 27.4 -23.0
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.420187
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:05:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:05:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:05:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:05:35', tmtdew=23.75, humidity=19.86, cloud=0.0, wind=4.68, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:05:04.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:05:44.265 [DEBUG] [Thread-53956] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:05:44.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:05:44.350 [DEBUG] [Thread-53959] [transport.py] [_log()] starting thread (client mode): 0xd3160b80
2025-11-17T12:05:44.350 [DEBUG] [Thread-53959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:05:44.366 [DEBUG] [Thread-53959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:05:44.366 [INFO] [Thread-53959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] client lang: <none>
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] server lang: <none>
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] kex follows: False
2025-11-17T12:05:44.373 [DEBUG] [Thread-53959] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:05:44.374 [DEBUG] [Thread-53959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:05:44.374 [DEBUG] [Thread-53959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:05:44.374 [DEBUG] [Thread-53959] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:05:44.374 [DEBUG] [Thread-53959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:05:44.374 [DEBUG] [Thread-53959] [transport.py] [_log()] Compression: none
2025-11-17T12:05:44.374 [DEBUG] [Thread-53959] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:05:44.430 [DEBUG] [Thread-53959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:05:44.430 [DEBUG] [Thread-53959] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:05:44.430 [DEBUG] [Thread-53959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:05:44.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:05:44.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:05:44.488 [DEBUG] [Thread-53959] [transport.py] [_log()] userauth is OK
2025-11-17T12:05:44.488 [DEBUG] [Thread-53959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:05:44.488 [DEBUG] [Thread-53959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:05:44.488 [DEBUG] [Thread-53959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:05:44.488 [DEBUG] [Thread-53959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:05:44.502 [INFO] [Thread-53959] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:05:44.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:05:44.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:05:45.356 [DEBUG] [Thread-53959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:05:45.356 [DEBUG] [Thread-53959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:05:45.404 [DEBUG] [Thread-53959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:05:45.404 [DEBUG] [Thread-53959] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:05:45.412 [DEBUG] [Thread-53959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:05:45.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:05:45.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:05: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') -> 00000000
2025-11-17T12:05:45.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:05:45.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:05:45.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:05:45.444 [DEBUG] [Thread-53959] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:05:51.228 [DEBUG] [Thread-53961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:06:06.269 [DEBUG] [Thread-53962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:06:08.699 [DEBUG] [Thread-53963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:06:15.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:06:15.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:06:15.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:06:16.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 6, 7), 23.56, 20.09, 0.0, 2.56, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:06:16.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:06:07
2025-11-17T12:06:16.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:06:16.413 [DEBUG] [Thread-53964] [transport.py] [_log()] starting thread (client mode): 0xd07cca30
2025-11-17T12:06:16.413 [DEBUG] [Thread-53964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:06:16.436 [DEBUG] [Thread-53964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:06:16.436 [INFO] [Thread-53964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:06:16.440 [DEBUG] [Thread-53964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:06:16.440 [DEBUG] [Thread-53964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:06:16.440 [DEBUG] [Thread-53964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:06:16.440 [DEBUG] [Thread-53964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:06:16.440 [DEBUG] [Thread-53964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:06:16.440 [DEBUG] [Thread-53964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] client lang: <none>
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] server lang: <none>
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] kex follows: False
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:06:16.441 [DEBUG] [Thread-53964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:06:16.442 [DEBUG] [Thread-53964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:06:16.442 [DEBUG] [Thread-53964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:06:16.442 [DEBUG] [Thread-53964] [transport.py] [_log()] Compression: none
2025-11-17T12:06:16.442 [DEBUG] [Thread-53964] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:06:16.460 [DEBUG] [Thread-53964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:06:16.460 [DEBUG] [Thread-53964] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:06:16.461 [DEBUG] [Thread-53964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:06:16.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:06:16.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:06:16.463 [DEBUG] [Thread-53964] [transport.py] [_log()] userauth is OK
2025-11-17T12:06:16.463 [DEBUG] [Thread-53964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:06:16.463 [DEBUG] [Thread-53964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:06:16.463 [DEBUG] [Thread-53964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:06:16.463 [DEBUG] [Thread-53964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:06:16.497 [INFO] [Thread-53964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:06:16.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:06:17.142 [DEBUG] [Thread-53964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:06:17.142 [DEBUG] [Thread-53964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:06:17.143 [DEBUG] [Thread-53964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:06:17.184 [DEBUG] [Thread-53964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:06:17.184 [DEBUG] [Thread-53964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:06:17.187 [DEBUG] [Thread-53964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:06:17.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:06:17.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:06:17.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:06:17.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:06:17.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:06:17.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:06:17.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:06:17.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:06:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:06:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.420534 -999.00  +20.70   4.34     25   +0.20 1 2 1 1 1   888    0 22.29 72.84 ----- 4.3 4.3 22.0 4.7 28.2 -23.8 27.2 -23.2 26.6 -21.7 27.7 -22.6
2025-11-17T12:06:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:06:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:06:17.211 [DEBUG] [Thread-53964] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:06:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.420534
2025-11-17T12:06:17.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:06:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:06:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:06:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:06:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:06:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:06:07', tmtdew=23.56, humidity=20.09, cloud=0.0, wind=2.56, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:05:34.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:06:17.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:06:17.322 [DEBUG] [Thread-53967] [transport.py] [_log()] starting thread (client mode): 0xd0758c10
2025-11-17T12:06:17.322 [DEBUG] [Thread-53967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:06:17.340 [DEBUG] [Thread-53967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:06:17.341 [INFO] [Thread-53967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:06:17.348 [DEBUG] [Thread-53967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] client lang: <none>
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] server lang: <none>
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] kex follows: False
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] Compression: none
2025-11-17T12:06:17.349 [DEBUG] [Thread-53967] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:06:17.406 [DEBUG] [Thread-53967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:06:17.406 [DEBUG] [Thread-53967] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:06:17.406 [DEBUG] [Thread-53967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:06:17.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:06:17.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:06:17.464 [DEBUG] [Thread-53967] [transport.py] [_log()] userauth is OK
2025-11-17T12:06:17.464 [DEBUG] [Thread-53967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:06:17.464 [DEBUG] [Thread-53967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:06:17.464 [DEBUG] [Thread-53967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:06:17.464 [DEBUG] [Thread-53967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:06:17.484 [INFO] [Thread-53967] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:06:17.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:06:17.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:06:18.392 [DEBUG] [Thread-53967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:06:18.392 [DEBUG] [Thread-53967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:06:18.440 [DEBUG] [Thread-53967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:06:18.440 [DEBUG] [Thread-53967] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:06:18.449 [DEBUG] [Thread-53967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:06:18.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:06:18.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:06:18.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:06:18.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:06:18.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:06:18.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:06:18.483 [DEBUG] [Thread-53967] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:06:21.302 [DEBUG] [Thread-53969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:06:36.335 [DEBUG] [Thread-53970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:06:39.940 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:06:39.941 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:06:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:06:48.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:06:48.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:06:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 6, 39), 23.55, 20.1, 0.0, 9.62, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:06:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:06:39
2025-11-17T12:06:49.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:06:49.443 [DEBUG] [Thread-53971] [transport.py] [_log()] starting thread (client mode): 0xd31cd780
2025-11-17T12:06:49.443 [DEBUG] [Thread-53971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:06:49.463 [DEBUG] [Thread-53971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:06:49.463 [INFO] [Thread-53971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:06:49.466 [DEBUG] [Thread-53971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] client lang: <none>
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] server lang: <none>
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] kex follows: False
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] Compression: none
2025-11-17T12:06:49.467 [DEBUG] [Thread-53971] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:06:49.477 [DEBUG] [Thread-53971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:06:49.477 [DEBUG] [Thread-53971] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:06:49.478 [DEBUG] [Thread-53971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:06:49.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:06:49.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:06:49.480 [DEBUG] [Thread-53971] [transport.py] [_log()] userauth is OK
2025-11-17T12:06:49.480 [DEBUG] [Thread-53971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:06:49.480 [DEBUG] [Thread-53971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:06:49.480 [DEBUG] [Thread-53971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:06:49.480 [DEBUG] [Thread-53971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:06:49.504 [INFO] [Thread-53971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:06:49.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:06:50.131 [DEBUG] [Thread-53971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:06:50.132 [DEBUG] [Thread-53971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:06:50.132 [DEBUG] [Thread-53971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:06:50.172 [DEBUG] [Thread-53971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:06:50.172 [DEBUG] [Thread-53971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:06:50.175 [DEBUG] [Thread-53971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:06:50.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:06:50.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:06:50.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:06:50.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:06:50.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:06:50.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:06:50.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:06:50.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:06:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:06:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.420881 -999.00  +21.00  14.36     25   +0.30 1 1 1 1 1   888    0 21.88 69.36 ----- 14.4 14.4 61.2 16.4 28.3 -24.5 27.2 -24.6 26.6 -23.8 27.7 -24.7
2025-11-17T12:06:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:06:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:06:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.420881
2025-11-17T12:06:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:06:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:06:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:06:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:06:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:06:50.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:06:39', tmtdew=23.55, humidity=20.1, cloud=0.0, wind=9.62, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:06:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:06:50.200 [DEBUG] [Thread-53971] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:06:50.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:06:50.297 [DEBUG] [Thread-53974] [transport.py] [_log()] starting thread (client mode): 0xd31374c0
2025-11-17T12:06:50.297 [DEBUG] [Thread-53974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:06:50.311 [DEBUG] [Thread-53974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:06:50.312 [INFO] [Thread-53974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:06:50.319 [DEBUG] [Thread-53974] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] client lang: <none>
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] server lang: <none>
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] kex follows: False
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:06:50.320 [DEBUG] [Thread-53974] [transport.py] [_log()] Compression: none
2025-11-17T12:06:50.321 [DEBUG] [Thread-53974] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:06:50.379 [DEBUG] [Thread-53974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:06:50.380 [DEBUG] [Thread-53974] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:06:50.380 [DEBUG] [Thread-53974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:06:50.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:06:50.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:06:50.440 [DEBUG] [Thread-53974] [transport.py] [_log()] userauth is OK
2025-11-17T12:06:50.440 [DEBUG] [Thread-53974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:06:50.440 [DEBUG] [Thread-53974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:06:50.440 [DEBUG] [Thread-53974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:06:50.440 [DEBUG] [Thread-53974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:06:50.461 [INFO] [Thread-53974] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:06:50.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:06:50.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:06:51.358 [DEBUG] [Thread-53974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:06:51.358 [DEBUG] [Thread-53974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:06:51.363 [DEBUG] [Thread-53976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:06:51.406 [DEBUG] [Thread-53974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:06:51.406 [DEBUG] [Thread-53974] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:06:51.415 [DEBUG] [Thread-53974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:06:51.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:06: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')
2025-11-17T12:06:51.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:06:51.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:06:51.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:06:51.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:06:51.450 [DEBUG] [Thread-53974] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:07:06.406 [DEBUG] [Thread-53977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:07:08.753 [DEBUG] [Thread-53978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:07:21.439 [DEBUG] [Thread-53979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:07:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:07:21.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:07:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:07:22.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 7, 11), 23.61, 20.02, 0.0, 9.49, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:07:22.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:07:11
2025-11-17T12:07:22.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:07:22.416 [DEBUG] [Thread-53980] [transport.py] [_log()] starting thread (client mode): 0xd31cc220
2025-11-17T12:07:22.417 [DEBUG] [Thread-53980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:07:22.439 [DEBUG] [Thread-53980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:07:22.439 [INFO] [Thread-53980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:07:22.442 [DEBUG] [Thread-53980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:07:22.442 [DEBUG] [Thread-53980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:07:22.442 [DEBUG] [Thread-53980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:07:22.442 [DEBUG] [Thread-53980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:07:22.442 [DEBUG] [Thread-53980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:07:22.442 [DEBUG] [Thread-53980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:07:22.442 [DEBUG] [Thread-53980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] client lang: <none>
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] server lang: <none>
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] kex follows: False
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] Compression: none
2025-11-17T12:07:22.443 [DEBUG] [Thread-53980] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:07:22.460 [DEBUG] [Thread-53980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:07:22.461 [DEBUG] [Thread-53980] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:07:22.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:07:22.462 [DEBUG] [Thread-53980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:07:22.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:07:22.464 [DEBUG] [Thread-53980] [transport.py] [_log()] userauth is OK
2025-11-17T12:07:22.464 [DEBUG] [Thread-53980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:07:22.464 [DEBUG] [Thread-53980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:07:22.464 [DEBUG] [Thread-53980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:07:22.464 [DEBUG] [Thread-53980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:07:22.500 [INFO] [Thread-53980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:07:22.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:07:23.160 [DEBUG] [Thread-53980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:07:23.160 [DEBUG] [Thread-53980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:07:23.161 [DEBUG] [Thread-53980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:07:23.201 [DEBUG] [Thread-53980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:07:23.201 [DEBUG] [Thread-53980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:07:23.203 [DEBUG] [Thread-53980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:07:23.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:07:23.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:07:23.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:07:23.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:07:23.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:07:23.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:07:23.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:07:23.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:07:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:07:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.421576 -999.00  +21.10   7.59     25   +0.40 1 1 1 1 1   888    0 22.98 77.39 ----- 7.6 7.6 26.1 16.8 28.3 -24.3 27.3 -23.7 26.8 -23.5 27.9 -22.8
2025-11-17T12:07:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:07:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:07:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.421576
2025-11-17T12:07:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:07:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:07:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:07:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:07:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:07:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:07:11', tmtdew=23.61, humidity=20.02, cloud=0.0, wind=9.49, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:07:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:07:23.220 [DEBUG] [Thread-53980] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:07:23.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:07:23.316 [DEBUG] [Thread-53983] [transport.py] [_log()] starting thread (client mode): 0xd31b1720
2025-11-17T12:07:23.316 [DEBUG] [Thread-53983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:07:23.332 [DEBUG] [Thread-53983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:07:23.332 [INFO] [Thread-53983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:07:23.339 [DEBUG] [Thread-53983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:07:23.339 [DEBUG] [Thread-53983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:07:23.339 [DEBUG] [Thread-53983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] client lang: <none>
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] server lang: <none>
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] kex follows: False
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] Compression: none
2025-11-17T12:07:23.340 [DEBUG] [Thread-53983] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:07:23.400 [DEBUG] [Thread-53983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:07:23.400 [DEBUG] [Thread-53983] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:07:23.401 [DEBUG] [Thread-53983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:07:23.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:07:23.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:07:23.456 [DEBUG] [Thread-53983] [transport.py] [_log()] userauth is OK
2025-11-17T12:07:23.456 [DEBUG] [Thread-53983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:07:23.456 [DEBUG] [Thread-53983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:07:23.456 [DEBUG] [Thread-53983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:07:23.456 [DEBUG] [Thread-53983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:07:23.476 [INFO] [Thread-53983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:07:23.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:07:23.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:07:24.412 [DEBUG] [Thread-53983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:07:24.412 [DEBUG] [Thread-53983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:07:24.464 [DEBUG] [Thread-53983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:07:24.465 [DEBUG] [Thread-53983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:07:24.478 [DEBUG] [Thread-53983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:07:24.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:07:24.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:07:24.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:07:24.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:07:24.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:07:24.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:07:24.512 [DEBUG] [Thread-53983] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:07:36.470 [DEBUG] [Thread-53985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:07:40.082 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:07:40.083 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:07:51.517 [DEBUG] [Thread-53986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:07:54.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:07:54.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:07:54.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:07:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 7, 43), 23.62, 19.9, 0.0, 6.78, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:07:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:07:43
2025-11-17T12:07:55.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:07:55.459 [DEBUG] [Thread-53987] [transport.py] [_log()] starting thread (client mode): 0xd07bf0d0
2025-11-17T12:07:55.459 [DEBUG] [Thread-53987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:07:55.479 [DEBUG] [Thread-53987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:07:55.479 [INFO] [Thread-53987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] client lang: <none>
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] server lang: <none>
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] kex follows: False
2025-11-17T12:07:55.482 [DEBUG] [Thread-53987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:07:55.483 [DEBUG] [Thread-53987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:07:55.483 [DEBUG] [Thread-53987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:07:55.483 [DEBUG] [Thread-53987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:07:55.483 [DEBUG] [Thread-53987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:07:55.483 [DEBUG] [Thread-53987] [transport.py] [_log()] Compression: none
2025-11-17T12:07:55.483 [DEBUG] [Thread-53987] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:07:55.501 [DEBUG] [Thread-53987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:07:55.502 [DEBUG] [Thread-53987] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:07:55.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:07:55.503 [DEBUG] [Thread-53987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:07:55.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:07:55.505 [DEBUG] [Thread-53987] [transport.py] [_log()] userauth is OK
2025-11-17T12:07:55.505 [DEBUG] [Thread-53987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:07:55.505 [DEBUG] [Thread-53987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:07:55.505 [DEBUG] [Thread-53987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:07:55.505 [DEBUG] [Thread-53987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:07:55.540 [INFO] [Thread-53987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:07:55.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:07:56.172 [DEBUG] [Thread-53987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:07:56.172 [DEBUG] [Thread-53987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:07:56.172 [DEBUG] [Thread-53987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:07:56.213 [DEBUG] [Thread-53987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:07:56.213 [DEBUG] [Thread-53987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:07:56.216 [DEBUG] [Thread-53987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:07:56.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:07:56.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:07:56.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:07:56.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:07:56.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:07:56.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:07:56.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:07:56.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:07:56.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:07:56.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.421923 -999.00  +21.40  11.70     25   +0.60 1 1 1 1 1   888    0 22.79 79.27 ----- 11.7 11.7 36.6 17.4 28.4 -24.4 27.3 -24.3 26.9 -22.8 27.9 -23.3
2025-11-17T12:07:56.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:07:56.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:07:56.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.421923
2025-11-17T12:07:56.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:07:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:07:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:07:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:07:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:07:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:07:43', tmtdew=23.62, humidity=19.9, cloud=0.0, wind=6.78, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:07:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:07:56.239 [DEBUG] [Thread-53987] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:07:56.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:07:56.336 [DEBUG] [Thread-53990] [transport.py] [_log()] starting thread (client mode): 0xd07be020
2025-11-17T12:07:56.336 [DEBUG] [Thread-53990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:07:56.356 [DEBUG] [Thread-53990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:07:56.356 [INFO] [Thread-53990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:07:56.363 [DEBUG] [Thread-53990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] client lang: <none>
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] server lang: <none>
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] kex follows: False
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:07:56.364 [DEBUG] [Thread-53990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:07:56.365 [DEBUG] [Thread-53990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:07:56.365 [DEBUG] [Thread-53990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:07:56.365 [DEBUG] [Thread-53990] [transport.py] [_log()] Compression: none
2025-11-17T12:07:56.365 [DEBUG] [Thread-53990] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:07:56.419 [DEBUG] [Thread-53990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:07:56.420 [DEBUG] [Thread-53990] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:07:56.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:07:56.421 [DEBUG] [Thread-53990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:07:56.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:07:56.476 [DEBUG] [Thread-53990] [transport.py] [_log()] userauth is OK
2025-11-17T12:07:56.476 [DEBUG] [Thread-53990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:07:56.476 [DEBUG] [Thread-53990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:07:56.476 [DEBUG] [Thread-53990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:07:56.476 [DEBUG] [Thread-53990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:07:56.507 [INFO] [Thread-53990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:07:56.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:07:56.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:07:57.366 [DEBUG] [Thread-53990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:07:57.366 [DEBUG] [Thread-53990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:07:57.414 [DEBUG] [Thread-53990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:07:57.414 [DEBUG] [Thread-53990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:07:57.423 [DEBUG] [Thread-53990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:07:57.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:07:57.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:07:57.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:07:57.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:07:57.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:07:57.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:07:57.458 [DEBUG] [Thread-53990] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:08:06.548 [DEBUG] [Thread-53992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:08:08.805 [DEBUG] [Thread-53993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:08:21.591 [DEBUG] [Thread-53994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:08:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:08:27.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:08:27.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:08:28.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 8, 15), 23.61, 19.94, 0.0, 6.09, 20.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:08:28.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:08:15
2025-11-17T12:08:28.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:08:28.406 [DEBUG] [Thread-53995] [transport.py] [_log()] starting thread (client mode): 0xd075b820
2025-11-17T12:08:28.406 [DEBUG] [Thread-53995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:08:28.427 [DEBUG] [Thread-53995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:08:28.428 [INFO] [Thread-53995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:08:28.431 [DEBUG] [Thread-53995] [transport.py] [_log()] client lang: <none>
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] server lang: <none>
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] kex follows: False
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] Compression: none
2025-11-17T12:08:28.432 [DEBUG] [Thread-53995] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:08:28.451 [DEBUG] [Thread-53995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:08:28.454 [DEBUG] [Thread-53995] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:08:28.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:08:28.455 [DEBUG] [Thread-53995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:08:28.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:08:28.457 [DEBUG] [Thread-53995] [transport.py] [_log()] userauth is OK
2025-11-17T12:08:28.457 [DEBUG] [Thread-53995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:08:28.457 [DEBUG] [Thread-53995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:08:28.457 [DEBUG] [Thread-53995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:08:28.457 [DEBUG] [Thread-53995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:08:28.493 [INFO] [Thread-53995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:08:28.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:08:29.122 [DEBUG] [Thread-53995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:08:29.122 [DEBUG] [Thread-53995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:08:29.123 [DEBUG] [Thread-53995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:08:29.163 [DEBUG] [Thread-53995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:08:29.163 [DEBUG] [Thread-53995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:08:29.166 [DEBUG] [Thread-53995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:08:29.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:08:29.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:08:29.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:08:29.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:08:29.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:08:29.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:08:29.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:08:29.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:08:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:08:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.422270 -999.00  +21.00   9.32     24   +0.10 1 1 1 1 1   888    0 22.40 80.24 ----- 9.3 9.3 324.7 17.6 28.5 -24.5 27.5 -23.5 26.9 -23.4 27.9 -23.2
2025-11-17T12:08:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:08:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:08:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.422270
2025-11-17T12:08:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:08:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:08:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:08:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:08:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:08:29.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:08:15', tmtdew=23.61, humidity=19.94, cloud=0.0, wind=6.09, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:08:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:08:29.194 [DEBUG] [Thread-53995] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:08:29.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:08:29.290 [DEBUG] [Thread-53998] [transport.py] [_log()] starting thread (client mode): 0xd31cd1e0
2025-11-17T12:08:29.290 [DEBUG] [Thread-53998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:08:29.305 [DEBUG] [Thread-53998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:08:29.305 [INFO] [Thread-53998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:08:29.312 [DEBUG] [Thread-53998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:08:29.313 [DEBUG] [Thread-53998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:08:29.313 [DEBUG] [Thread-53998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:08:29.313 [DEBUG] [Thread-53998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:08:29.313 [DEBUG] [Thread-53998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:08:29.313 [DEBUG] [Thread-53998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:08:29.313 [DEBUG] [Thread-53998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:08:29.313 [DEBUG] [Thread-53998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:08:29.313 [DEBUG] [Thread-53998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:08:29.314 [DEBUG] [Thread-53998] [transport.py] [_log()] client lang: <none>
2025-11-17T12:08:29.314 [DEBUG] [Thread-53998] [transport.py] [_log()] server lang: <none>
2025-11-17T12:08:29.314 [DEBUG] [Thread-53998] [transport.py] [_log()] kex follows: False
2025-11-17T12:08:29.314 [DEBUG] [Thread-53998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:08:29.314 [DEBUG] [Thread-53998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:08:29.314 [DEBUG] [Thread-53998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:08:29.314 [DEBUG] [Thread-53998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:08:29.314 [DEBUG] [Thread-53998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:08:29.315 [DEBUG] [Thread-53998] [transport.py] [_log()] Compression: none
2025-11-17T12:08:29.315 [DEBUG] [Thread-53998] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:08:29.382 [DEBUG] [Thread-53998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:08:29.382 [DEBUG] [Thread-53998] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:08:29.383 [DEBUG] [Thread-53998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:08:29.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:08:29.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:08:29.444 [DEBUG] [Thread-53998] [transport.py] [_log()] userauth is OK
2025-11-17T12:08:29.444 [DEBUG] [Thread-53998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:08:29.445 [DEBUG] [Thread-53998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:08:29.445 [DEBUG] [Thread-53998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:08:29.445 [DEBUG] [Thread-53998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:08:29.465 [INFO] [Thread-53998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:08:29.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:08:29.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:08:30.380 [DEBUG] [Thread-53998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:08:30.380 [DEBUG] [Thread-53998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:08:30.428 [DEBUG] [Thread-53998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:08:30.428 [DEBUG] [Thread-53998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:08:30.437 [DEBUG] [Thread-53998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:08:30.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:08:30.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:08:30.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:08:30.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:08:30.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:08:30.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:08:30.471 [DEBUG] [Thread-53998] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:08:36.624 [DEBUG] [Thread-54000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:08:40.225 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:08:40.225 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:08:51.674 [DEBUG] [Thread-54001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:09:00.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:09:00.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:09:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:09:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 8, 47), 23.55, 20.42, 0.0, 8.86, 20.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:09:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:08:47
2025-11-17T12:09:01.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:09:01.422 [DEBUG] [Thread-54002] [transport.py] [_log()] starting thread (client mode): 0xd31b38b0
2025-11-17T12:09:01.422 [DEBUG] [Thread-54002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:09:01.441 [DEBUG] [Thread-54002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:09:01.441 [INFO] [Thread-54002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:09:01.444 [DEBUG] [Thread-54002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:09:01.444 [DEBUG] [Thread-54002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:09:01.444 [DEBUG] [Thread-54002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:09:01.444 [DEBUG] [Thread-54002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] client lang: <none>
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] server lang: <none>
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] kex follows: False
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] Compression: none
2025-11-17T12:09:01.445 [DEBUG] [Thread-54002] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:09:01.462 [DEBUG] [Thread-54002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:09:01.462 [DEBUG] [Thread-54002] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:09:01.462 [DEBUG] [Thread-54002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:09:01.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:09:01.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:09:01.463 [DEBUG] [Thread-54002] [transport.py] [_log()] userauth is OK
2025-11-17T12:09:01.463 [DEBUG] [Thread-54002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:09:01.463 [DEBUG] [Thread-54002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:09:01.463 [DEBUG] [Thread-54002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:09:01.463 [DEBUG] [Thread-54002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:09:01.474 [INFO] [Thread-54002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:09:01.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:09:02.123 [DEBUG] [Thread-54002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:09:02.124 [DEBUG] [Thread-54002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:09:02.124 [DEBUG] [Thread-54002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:09:02.164 [DEBUG] [Thread-54002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:09:02.164 [DEBUG] [Thread-54002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:09:02.166 [DEBUG] [Thread-54002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:09:02.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:09:02.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:09:02.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:09:02.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:09:02.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:09:02.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:09:02.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:09:02.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:09:02.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:09:02.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.422617 -999.00  +20.70   7.83     25   +0.20 1 1 1 1 1   888    0 22.90 76.32 ----- 7.8 7.8 48.4 15.6 28.4 -25.0 27.3 -25.2 26.9 -24.4 27.9 -23.6
2025-11-17T12:09:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:09:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:09:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.422617
2025-11-17T12:09:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:09:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:09:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:09:02.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:09:02.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:09:02.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:08:47', tmtdew=23.55, humidity=20.42, cloud=0.0, wind=8.86, temperature=20.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:08:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:09:02.189 [DEBUG] [Thread-54002] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:09:02.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:09:02.287 [DEBUG] [Thread-54005] [transport.py] [_log()] starting thread (client mode): 0xd0785b10
2025-11-17T12:09:02.287 [DEBUG] [Thread-54005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:09:02.302 [DEBUG] [Thread-54005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:09:02.302 [INFO] [Thread-54005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] client lang: <none>
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] server lang: <none>
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] kex follows: False
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] Compression: none
2025-11-17T12:09:02.310 [DEBUG] [Thread-54005] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:09:02.368 [DEBUG] [Thread-54005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:09:02.369 [DEBUG] [Thread-54005] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:09:02.369 [DEBUG] [Thread-54005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:09:02.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:09:02.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:09:02.424 [DEBUG] [Thread-54005] [transport.py] [_log()] userauth is OK
2025-11-17T12:09:02.424 [DEBUG] [Thread-54005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:09:02.424 [DEBUG] [Thread-54005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:09:02.425 [DEBUG] [Thread-54005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:09:02.425 [DEBUG] [Thread-54005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:09:02.444 [INFO] [Thread-54005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:09:02.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:09:02.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:09:03.308 [DEBUG] [Thread-54005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:09:03.308 [DEBUG] [Thread-54005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:09:03.355 [DEBUG] [Thread-54005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:09:03.355 [DEBUG] [Thread-54005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:09:03.364 [DEBUG] [Thread-54005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:09:03.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:09:03.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:09:03.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
2025-11-17T12:09:03.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:09:03.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:09:03.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:09:03.400 [DEBUG] [Thread-54005] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:09:06.704 [DEBUG] [Thread-54007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:09:08.872 [DEBUG] [Thread-54008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:09:21.743 [DEBUG] [Thread-54009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:09:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:09:33.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:09:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:09:34.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 9, 19), 23.53, 20.45, 0.0, 11.84, 20.3, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:09:34.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:09:19
2025-11-17T12:09:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:09:34.401 [DEBUG] [Thread-54010] [transport.py] [_log()] starting thread (client mode): 0xd075bbe0
2025-11-17T12:09:34.401 [DEBUG] [Thread-54010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:09:34.422 [DEBUG] [Thread-54010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:09:34.422 [INFO] [Thread-54010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] client lang: <none>
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] server lang: <none>
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] kex follows: False
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] Compression: none
2025-11-17T12:09:34.424 [DEBUG] [Thread-54010] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:09:34.440 [DEBUG] [Thread-54010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:09:34.441 [DEBUG] [Thread-54010] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:09:34.441 [DEBUG] [Thread-54010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:09:34.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:09:34.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:09:34.442 [DEBUG] [Thread-54010] [transport.py] [_log()] userauth is OK
2025-11-17T12:09:34.442 [DEBUG] [Thread-54010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:09:34.442 [DEBUG] [Thread-54010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:09:34.442 [DEBUG] [Thread-54010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:09:34.442 [DEBUG] [Thread-54010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:09:34.459 [INFO] [Thread-54010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:09:34.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:09:35.068 [DEBUG] [Thread-54010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:09:35.068 [DEBUG] [Thread-54010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:09:35.068 [DEBUG] [Thread-54010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:09:35.109 [DEBUG] [Thread-54010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:09:35.109 [DEBUG] [Thread-54010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:09:35.111 [DEBUG] [Thread-54010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:09:35.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:09:35.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:09:35.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:09:35.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:09:35.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:09:35.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:09:35.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.422965 -999.00  +20.70   7.39     25   +0.40 1 1 1 1 1   888    0 22.78 79.81 ----- 7.4 7.4 58.9 12.2 28.5 -24.9 27.4 -24.3 26.9 -24.3 28.0 -23.5
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.422965
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:09:19', tmtdew=23.53, humidity=20.45, cloud=0.0, wind=11.84, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:09:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:09:35.129 [DEBUG] [Thread-54010] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:09:35.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:09:35.215 [DEBUG] [Thread-54013] [transport.py] [_log()] starting thread (client mode): 0xd31ceef0
2025-11-17T12:09:35.215 [DEBUG] [Thread-54013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:09:35.230 [DEBUG] [Thread-54013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:09:35.230 [INFO] [Thread-54013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] client lang: <none>
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] server lang: <none>
2025-11-17T12:09:35.237 [DEBUG] [Thread-54013] [transport.py] [_log()] kex follows: False
2025-11-17T12:09:35.238 [DEBUG] [Thread-54013] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:09:35.238 [DEBUG] [Thread-54013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:09:35.238 [DEBUG] [Thread-54013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:09:35.238 [DEBUG] [Thread-54013] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:09:35.238 [DEBUG] [Thread-54013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:09:35.238 [DEBUG] [Thread-54013] [transport.py] [_log()] Compression: none
2025-11-17T12:09:35.238 [DEBUG] [Thread-54013] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:09:35.295 [DEBUG] [Thread-54013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:09:35.296 [DEBUG] [Thread-54013] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:09:35.296 [DEBUG] [Thread-54013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:09:35.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:09:35.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:09:35.352 [DEBUG] [Thread-54013] [transport.py] [_log()] userauth is OK
2025-11-17T12:09:35.352 [DEBUG] [Thread-54013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:09:35.352 [DEBUG] [Thread-54013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:09:35.352 [DEBUG] [Thread-54013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:09:35.353 [DEBUG] [Thread-54013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:09:35.367 [INFO] [Thread-54013] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:09:35.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:09:35.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:09:36.192 [DEBUG] [Thread-54013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:09:36.192 [DEBUG] [Thread-54013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:09:36.240 [DEBUG] [Thread-54013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:09:36.240 [DEBUG] [Thread-54013] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:09:36.248 [DEBUG] [Thread-54013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:09:36.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:09:36.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:09:36.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:09:36.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:09:36.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:09:36.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:09:36.279 [DEBUG] [Thread-54013] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:09:36.770 [DEBUG] [Thread-54015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:09:40.367 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:09:40.368 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:09:51.800 [DEBUG] [Thread-54016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:10:06.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:10:06.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:10:06.828 [DEBUG] [Thread-54017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:10:06.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 9, 51), 23.33, 20.57, 0.0, 15.16, 20.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:10:06.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:09:51
2025-11-17T12:10:07.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:10:07.240 [DEBUG] [Thread-54018] [transport.py] [_log()] starting thread (client mode): 0xd31cd780
2025-11-17T12:10:07.241 [DEBUG] [Thread-54018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:10:07.261 [DEBUG] [Thread-54018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:10:07.261 [INFO] [Thread-54018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] client lang: <none>
2025-11-17T12:10:07.265 [DEBUG] [Thread-54018] [transport.py] [_log()] server lang: <none>
2025-11-17T12:10:07.266 [DEBUG] [Thread-54018] [transport.py] [_log()] kex follows: False
2025-11-17T12:10:07.266 [DEBUG] [Thread-54018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:10:07.266 [DEBUG] [Thread-54018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:10:07.266 [DEBUG] [Thread-54018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:10:07.266 [DEBUG] [Thread-54018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:10:07.266 [DEBUG] [Thread-54018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:10:07.266 [DEBUG] [Thread-54018] [transport.py] [_log()] Compression: none
2025-11-17T12:10:07.266 [DEBUG] [Thread-54018] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:10:07.283 [DEBUG] [Thread-54018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:10:07.283 [DEBUG] [Thread-54018] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:10:07.284 [DEBUG] [Thread-54018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:10:07.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:10:07.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:10:07.286 [DEBUG] [Thread-54018] [transport.py] [_log()] userauth is OK
2025-11-17T12:10:07.286 [DEBUG] [Thread-54018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:10:07.286 [DEBUG] [Thread-54018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:10:07.286 [DEBUG] [Thread-54018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:10:07.286 [DEBUG] [Thread-54018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:10:07.322 [INFO] [Thread-54018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:10:07.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:10:08.924 [DEBUG] [Thread-54020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:10:08.947 [DEBUG] [Thread-54018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:10:08.947 [DEBUG] [Thread-54018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:10:08.948 [DEBUG] [Thread-54018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:10:08.989 [DEBUG] [Thread-54018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:10:08.989 [DEBUG] [Thread-54018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:10:08.992 [DEBUG] [Thread-54018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:10:09.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:10:09.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:10:09.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:10:09.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:10:09.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:10:09.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:10:09.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:10:09.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:10:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:10:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.423312 -999.00  +20.60  12.30     25   +0.30 1 1 1 1 1   888    0 22.84 74.68 ----- 12.3 12.3 324.2 14.5 28.6 -24.7 27.5 -23.5 27.1 -23.3 28.1 -23.7
2025-11-17T12:10:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:10:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:10:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.423312
2025-11-17T12:10:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:10:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:10:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:10:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:10:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:10:09.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:09:51', tmtdew=23.33, humidity=20.57, cloud=0.0, wind=15.16, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:09:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:10:09.018 [DEBUG] [Thread-54018] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:10:09.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:10:09.106 [DEBUG] [Thread-54022] [transport.py] [_log()] starting thread (client mode): 0xd07bea10
2025-11-17T12:10:09.106 [DEBUG] [Thread-54022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:10:09.121 [DEBUG] [Thread-54022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:10:09.121 [INFO] [Thread-54022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:10:09.128 [DEBUG] [Thread-54022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] client lang: <none>
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] server lang: <none>
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] kex follows: False
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:10:09.129 [DEBUG] [Thread-54022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:10:09.130 [DEBUG] [Thread-54022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:10:09.130 [DEBUG] [Thread-54022] [transport.py] [_log()] Compression: none
2025-11-17T12:10:09.130 [DEBUG] [Thread-54022] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:10:09.192 [DEBUG] [Thread-54022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:10:09.192 [DEBUG] [Thread-54022] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:10:09.193 [DEBUG] [Thread-54022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:10:09.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:10:09.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:10:09.248 [DEBUG] [Thread-54022] [transport.py] [_log()] userauth is OK
2025-11-17T12:10:09.248 [DEBUG] [Thread-54022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:10:09.248 [DEBUG] [Thread-54022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:10:09.248 [DEBUG] [Thread-54022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:10:09.249 [DEBUG] [Thread-54022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:10:09.268 [INFO] [Thread-54022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:10:09.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:10:09.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:10:10.120 [DEBUG] [Thread-54022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:10:10.120 [DEBUG] [Thread-54022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:10:10.168 [DEBUG] [Thread-54022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:10:10.169 [DEBUG] [Thread-54022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:10:10.178 [DEBUG] [Thread-54022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:10:10.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:10:10.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:10:10.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:10:10.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:10:10.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:10:10.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:10:10.212 [DEBUG] [Thread-54022] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:10:21.855 [DEBUG] [Thread-54024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:10:36.895 [DEBUG] [Thread-54025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:10:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:10:40.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:10:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:10:40.507 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:10:40.508 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:10:40.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 10, 23), 23.72, 20.05, 0.0, 14.36, 20.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:10:40.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:10:23
2025-11-17T12:10:41.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:10:41.158 [DEBUG] [Thread-54026] [transport.py] [_log()] starting thread (client mode): 0xd0759330
2025-11-17T12:10:41.158 [DEBUG] [Thread-54026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:10:41.178 [DEBUG] [Thread-54026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:10:41.178 [INFO] [Thread-54026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] client lang: <none>
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] server lang: <none>
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] kex follows: False
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:10:41.181 [DEBUG] [Thread-54026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:10:41.182 [DEBUG] [Thread-54026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:10:41.182 [DEBUG] [Thread-54026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:10:41.182 [DEBUG] [Thread-54026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:10:41.182 [DEBUG] [Thread-54026] [transport.py] [_log()] Compression: none
2025-11-17T12:10:41.182 [DEBUG] [Thread-54026] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:10:41.199 [DEBUG] [Thread-54026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:10:41.200 [DEBUG] [Thread-54026] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:10:41.200 [DEBUG] [Thread-54026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:10:41.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:10:41.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:10:41.202 [DEBUG] [Thread-54026] [transport.py] [_log()] userauth is OK
2025-11-17T12:10:41.202 [DEBUG] [Thread-54026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:10:41.202 [DEBUG] [Thread-54026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:10:41.202 [DEBUG] [Thread-54026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:10:41.202 [DEBUG] [Thread-54026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:10:41.226 [INFO] [Thread-54026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:10:41.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:10:41.851 [DEBUG] [Thread-54026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:10:41.851 [DEBUG] [Thread-54026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:10:41.851 [DEBUG] [Thread-54026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:10:41.892 [DEBUG] [Thread-54026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:10:41.892 [DEBUG] [Thread-54026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:10:41.895 [DEBUG] [Thread-54026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:10:41.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:10:41.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:10:41.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:10:41.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:10:41.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:10:41.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:10:41.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:10:41.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:10:41.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:10:41.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.423659 -999.00  +20.60  16.06     26   +0.50 1 1 1 1 1   888    0 22.49 70.67 ----- 16.1 16.1 318.6 16.5 28.6 -24.8 27.5 -24.6 27.1 -23.3 28.1 -23.6
2025-11-17T12:10:41.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:10:41.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:10:41.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.423659
2025-11-17T12:10:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:10:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:10:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:10:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:10:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:10:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:10:23', tmtdew=23.72, humidity=20.05, cloud=0.0, wind=14.36, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:10:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:10:41.921 [DEBUG] [Thread-54026] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:10:42.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:10:42.018 [DEBUG] [Thread-54029] [transport.py] [_log()] starting thread (client mode): 0xd3135570
2025-11-17T12:10:42.018 [DEBUG] [Thread-54029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:10:42.037 [DEBUG] [Thread-54029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:10:42.038 [INFO] [Thread-54029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:10:42.045 [DEBUG] [Thread-54029] [transport.py] [_log()] client lang: <none>
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] server lang: <none>
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] kex follows: False
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] Compression: none
2025-11-17T12:10:42.046 [DEBUG] [Thread-54029] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:10:42.106 [DEBUG] [Thread-54029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:10:42.107 [DEBUG] [Thread-54029] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:10:42.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:10:42.108 [DEBUG] [Thread-54029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:10:42.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:10:42.164 [DEBUG] [Thread-54029] [transport.py] [_log()] userauth is OK
2025-11-17T12:10:42.164 [DEBUG] [Thread-54029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:10:42.165 [DEBUG] [Thread-54029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:10:42.165 [DEBUG] [Thread-54029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:10:42.165 [DEBUG] [Thread-54029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:10:42.185 [INFO] [Thread-54029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:10:42.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:10:42.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:10:43.090 [DEBUG] [Thread-54029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:10:43.090 [DEBUG] [Thread-54029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:10:43.138 [DEBUG] [Thread-54029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:10:43.138 [DEBUG] [Thread-54029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:10:43.148 [DEBUG] [Thread-54029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:10:43.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:10:43.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:10:43.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:10:43.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:10:43.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:10:43.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:10:43.183 [DEBUG] [Thread-54029] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:10:51.926 [DEBUG] [Thread-54031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:11:06.957 [DEBUG] [Thread-54032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:11:08.976 [DEBUG] [Thread-54033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:11:13.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:11:13.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:11:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:11:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 10, 55), 23.74, 20.05, 0.0, 13.43, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:11:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:10:55
2025-11-17T12:11:13.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:11:14.124 [DEBUG] [Thread-54034] [transport.py] [_log()] starting thread (client mode): 0xd0786920
2025-11-17T12:11:14.124 [DEBUG] [Thread-54034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:11:14.143 [DEBUG] [Thread-54034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:11:14.143 [INFO] [Thread-54034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:11:14.146 [DEBUG] [Thread-54034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:11:14.146 [DEBUG] [Thread-54034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:11:14.146 [DEBUG] [Thread-54034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:11:14.146 [DEBUG] [Thread-54034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] client lang: <none>
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] server lang: <none>
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] kex follows: False
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] Compression: none
2025-11-17T12:11:14.147 [DEBUG] [Thread-54034] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:11:14.164 [DEBUG] [Thread-54034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:11:14.164 [DEBUG] [Thread-54034] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:11:14.165 [DEBUG] [Thread-54034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:11:14.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:11:14.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:11:14.167 [DEBUG] [Thread-54034] [transport.py] [_log()] userauth is OK
2025-11-17T12:11:14.167 [DEBUG] [Thread-54034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:11:14.167 [DEBUG] [Thread-54034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:11:14.167 [DEBUG] [Thread-54034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:11:14.167 [DEBUG] [Thread-54034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:11:14.191 [INFO] [Thread-54034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:11:14.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:11:14.827 [DEBUG] [Thread-54034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:11:14.827 [DEBUG] [Thread-54034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:11:14.827 [DEBUG] [Thread-54034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:11:14.868 [DEBUG] [Thread-54034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:11:14.869 [DEBUG] [Thread-54034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:11:14.872 [DEBUG] [Thread-54034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:11:14.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:11:14.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:11:14.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:11:14.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:11:14.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:11:14.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:11:14.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:11:14.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:11:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:11:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.424354 -999.00  +20.70  16.29     25   +0.30 1 1 1 1 1   888    0 22.29 54.06 ----- 16.3 16.3 42.2 24.7 28.5 -25.7 27.4 -25.7 27.1 -24.7 28.0 -24.0
2025-11-17T12:11:14.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:11:14.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:11:14.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.424354
2025-11-17T12:11:14.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:11:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:11:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:11:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:11:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:11:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:10:55', tmtdew=23.74, humidity=20.05, cloud=0.0, wind=13.43, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:11:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:11:14.899 [DEBUG] [Thread-54034] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:11:14.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:11:14.998 [DEBUG] [Thread-54037] [transport.py] [_log()] starting thread (client mode): 0xd31622f0
2025-11-17T12:11:14.998 [DEBUG] [Thread-54037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:11:15.014 [DEBUG] [Thread-54037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:11:15.015 [INFO] [Thread-54037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:11:15.022 [DEBUG] [Thread-54037] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:11:15.022 [DEBUG] [Thread-54037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:11:15.022 [DEBUG] [Thread-54037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] client lang: <none>
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] server lang: <none>
2025-11-17T12:11:15.023 [DEBUG] [Thread-54037] [transport.py] [_log()] kex follows: False
2025-11-17T12:11:15.024 [DEBUG] [Thread-54037] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:11:15.024 [DEBUG] [Thread-54037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:11:15.024 [DEBUG] [Thread-54037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:11:15.024 [DEBUG] [Thread-54037] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:11:15.024 [DEBUG] [Thread-54037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:11:15.024 [DEBUG] [Thread-54037] [transport.py] [_log()] Compression: none
2025-11-17T12:11:15.024 [DEBUG] [Thread-54037] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:11:15.084 [DEBUG] [Thread-54037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:11:15.085 [DEBUG] [Thread-54037] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:11:15.085 [DEBUG] [Thread-54037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:11:15.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:11:15.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:11:15.144 [DEBUG] [Thread-54037] [transport.py] [_log()] userauth is OK
2025-11-17T12:11:15.145 [DEBUG] [Thread-54037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:11:15.145 [DEBUG] [Thread-54037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:11:15.145 [DEBUG] [Thread-54037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:11:15.145 [DEBUG] [Thread-54037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:11:15.166 [INFO] [Thread-54037] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:11:15.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:11:15.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:11:16.007 [DEBUG] [Thread-54037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:11:16.007 [DEBUG] [Thread-54037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:11:16.055 [DEBUG] [Thread-54037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:11:16.056 [DEBUG] [Thread-54037] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:11:16.065 [DEBUG] [Thread-54037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:11:16.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:11: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')
2025-11-17T12:11:16.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:11:16.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:11:16.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:11:16.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:11:16.099 [DEBUG] [Thread-54037] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:11:21.986 [DEBUG] [Thread-54039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:11:37.035 [DEBUG] [Thread-54040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:11:40.650 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:11:40.651 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:11:46.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:11:46.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:11:46.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:11:46.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 11, 27), 23.89, 19.82, 0.0, 12.18, 20.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:11:46.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:11:27
2025-11-17T12:11:46.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:11:47.040 [DEBUG] [Thread-54041] [transport.py] [_log()] starting thread (client mode): 0xd0759840
2025-11-17T12:11:47.040 [DEBUG] [Thread-54041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:11:47.061 [DEBUG] [Thread-54041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:11:47.061 [INFO] [Thread-54041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:11:47.063 [DEBUG] [Thread-54041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] client lang: <none>
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] server lang: <none>
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] kex follows: False
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:11:47.064 [DEBUG] [Thread-54041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:11:47.065 [DEBUG] [Thread-54041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:11:47.065 [DEBUG] [Thread-54041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:11:47.065 [DEBUG] [Thread-54041] [transport.py] [_log()] Compression: none
2025-11-17T12:11:47.065 [DEBUG] [Thread-54041] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:11:47.081 [DEBUG] [Thread-54041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:11:47.081 [DEBUG] [Thread-54041] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:11:47.081 [DEBUG] [Thread-54041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:11:47.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:11:47.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:11:47.083 [DEBUG] [Thread-54041] [transport.py] [_log()] userauth is OK
2025-11-17T12:11:47.083 [DEBUG] [Thread-54041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:11:47.083 [DEBUG] [Thread-54041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:11:47.083 [DEBUG] [Thread-54041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:11:47.083 [DEBUG] [Thread-54041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:11:47.105 [INFO] [Thread-54041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:11:47.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:11:47.706 [DEBUG] [Thread-54041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:11:47.706 [DEBUG] [Thread-54041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:11:47.707 [DEBUG] [Thread-54041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:11:47.747 [DEBUG] [Thread-54041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:11:47.748 [DEBUG] [Thread-54041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:11:47.751 [DEBUG] [Thread-54041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:11:47.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:11:47.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:11:47.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:11:47.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:11:47.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:11:47.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:11:47.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:11:47.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:11:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:11:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.424701 -999.00  +20.70  21.63     26   +0.50 1 1 1 1 1   888    0 21.87 45.00 ----- 21.6 21.6 27.0 27.4 28.4 -25.2 27.3 -25.6 26.9 -22.8 27.9 -23.8
2025-11-17T12:11:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:11:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:11:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.424701
2025-11-17T12:11:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:11:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:11:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:11:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:11:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:11:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:11:27', tmtdew=23.89, humidity=19.82, cloud=0.0, wind=12.18, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:11:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:11:47.777 [DEBUG] [Thread-54041] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:11:47.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:11:47.872 [DEBUG] [Thread-54044] [transport.py] [_log()] starting thread (client mode): 0xd31ee260
2025-11-17T12:11:47.872 [DEBUG] [Thread-54044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:11:47.888 [DEBUG] [Thread-54044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:11:47.888 [INFO] [Thread-54044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:11:47.896 [DEBUG] [Thread-54044] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:11:47.896 [DEBUG] [Thread-54044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:11:47.896 [DEBUG] [Thread-54044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:11:47.896 [DEBUG] [Thread-54044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:11:47.896 [DEBUG] [Thread-54044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:11:47.896 [DEBUG] [Thread-54044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:11:47.896 [DEBUG] [Thread-54044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] client lang: <none>
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] server lang: <none>
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] kex follows: False
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:11:47.897 [DEBUG] [Thread-54044] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:11:47.898 [DEBUG] [Thread-54044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:11:47.898 [DEBUG] [Thread-54044] [transport.py] [_log()] Compression: none
2025-11-17T12:11:47.898 [DEBUG] [Thread-54044] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:11:47.952 [DEBUG] [Thread-54044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:11:47.952 [DEBUG] [Thread-54044] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:11:47.953 [DEBUG] [Thread-54044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:11:47.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:11:47.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:11:48.008 [DEBUG] [Thread-54044] [transport.py] [_log()] userauth is OK
2025-11-17T12:11:48.008 [DEBUG] [Thread-54044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:11:48.008 [DEBUG] [Thread-54044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:11:48.009 [DEBUG] [Thread-54044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:11:48.009 [DEBUG] [Thread-54044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:11:48.028 [INFO] [Thread-54044] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:11:48.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:11:48.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:11:48.908 [DEBUG] [Thread-54044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:11:48.908 [DEBUG] [Thread-54044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:11:48.956 [DEBUG] [Thread-54044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:11:48.956 [DEBUG] [Thread-54044] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:11:48.965 [DEBUG] [Thread-54044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:11:48.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:11:48.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:11:48.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:11:48.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:11:48.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:11:48.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:11:48.999 [DEBUG] [Thread-54044] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:11:52.068 [DEBUG] [Thread-54046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:12:07.108 [DEBUG] [Thread-54047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:12:09.023 [DEBUG] [Thread-54048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:12:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:12:19.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:12:19.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:12:19.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 11, 59), 23.62, 20.05, 0.0, 14.91, 20.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:12:19.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:11:59
2025-11-17T12:12:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:12:19.946 [DEBUG] [Thread-54049] [transport.py] [_log()] starting thread (client mode): 0xd31ec7c0
2025-11-17T12:12:19.946 [DEBUG] [Thread-54049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:12:19.965 [DEBUG] [Thread-54049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:12:19.965 [INFO] [Thread-54049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] client lang: <none>
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] server lang: <none>
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] kex follows: False
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] Compression: none
2025-11-17T12:12:19.967 [DEBUG] [Thread-54049] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:12:19.977 [DEBUG] [Thread-54049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:12:19.978 [DEBUG] [Thread-54049] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:12:19.978 [DEBUG] [Thread-54049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:12:19.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:12:19.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:12:19.980 [DEBUG] [Thread-54049] [transport.py] [_log()] userauth is OK
2025-11-17T12:12:19.980 [DEBUG] [Thread-54049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:12:19.981 [DEBUG] [Thread-54049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:12:19.981 [DEBUG] [Thread-54049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:12:19.981 [DEBUG] [Thread-54049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:12:20.016 [INFO] [Thread-54049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:12:20.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:12:20.577 [DEBUG] [Thread-54049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:12:20.578 [DEBUG] [Thread-54049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:12:20.578 [DEBUG] [Thread-54049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:12:20.618 [DEBUG] [Thread-54049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:12:20.619 [DEBUG] [Thread-54049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:12:20.622 [DEBUG] [Thread-54049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:12:20.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:12:20.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:12:20.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:12:20.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:12:20.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:12:20.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:12:20.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:12:20.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:12:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:12:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.425048 -999.00  +20.90  12.56     25   +0.40 1 1 1 1 1   888    0 21.74 43.80 ----- 12.6 12.6 42.6 20.9 28.4 -25.7 27.4 -25.2 26.9 -23.4 27.9 -23.6
2025-11-17T12:12:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:12:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:12:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.425048
2025-11-17T12:12:20.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:12:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:12:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:12:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:12:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:12:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:11:59', tmtdew=23.62, humidity=20.05, cloud=0.0, wind=14.91, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:12:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:12:20.648 [DEBUG] [Thread-54049] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:12:20.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:12:20.745 [DEBUG] [Thread-54052] [transport.py] [_log()] starting thread (client mode): 0xd0718d90
2025-11-17T12:12:20.745 [DEBUG] [Thread-54052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:12:20.759 [DEBUG] [Thread-54052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:12:20.760 [INFO] [Thread-54052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:12:20.776 [DEBUG] [Thread-54052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:12:20.776 [DEBUG] [Thread-54052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] client lang: <none>
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] server lang: <none>
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] kex follows: False
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:12:20.777 [DEBUG] [Thread-54052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:12:20.778 [DEBUG] [Thread-54052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:12:20.778 [DEBUG] [Thread-54052] [transport.py] [_log()] Compression: none
2025-11-17T12:12:20.778 [DEBUG] [Thread-54052] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:12:20.828 [DEBUG] [Thread-54052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:12:20.828 [DEBUG] [Thread-54052] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:12:20.829 [DEBUG] [Thread-54052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:12:20.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:12:20.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:12:20.885 [DEBUG] [Thread-54052] [transport.py] [_log()] userauth is OK
2025-11-17T12:12:20.885 [DEBUG] [Thread-54052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:12:20.885 [DEBUG] [Thread-54052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:12:20.886 [DEBUG] [Thread-54052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:12:20.886 [DEBUG] [Thread-54052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:12:20.903 [INFO] [Thread-54052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:12:20.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:12:20.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:12:21.763 [DEBUG] [Thread-54052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:12:21.772 [DEBUG] [Thread-54052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:12:21.811 [DEBUG] [Thread-54052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:12:21.811 [DEBUG] [Thread-54052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:12:21.822 [DEBUG] [Thread-54052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:12:21.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:12:21.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:12:21.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:12:21.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:12:21.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:12:21.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:12:21.858 [DEBUG] [Thread-54052] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:12:22.137 [DEBUG] [Thread-54054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:12:37.181 [DEBUG] [Thread-54055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:12:40.792 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:12:40.793 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:12:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:12:51.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:12:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:12:52.212 [DEBUG] [Thread-54056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:12:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 12, 31), 23.62, 20.07, 0.0, 13.02, 20.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:12:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:12:31
2025-11-17T12:12:52.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:12:52.811 [DEBUG] [Thread-54057] [transport.py] [_log()] starting thread (client mode): 0xd0718550
2025-11-17T12:12:52.811 [DEBUG] [Thread-54057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:12:52.821 [DEBUG] [Thread-54057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:12:52.821 [INFO] [Thread-54057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] client lang: <none>
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] server lang: <none>
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] kex follows: False
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] Compression: none
2025-11-17T12:12:52.823 [DEBUG] [Thread-54057] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:12:52.830 [DEBUG] [Thread-54057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:12:52.830 [DEBUG] [Thread-54057] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:12:52.831 [DEBUG] [Thread-54057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:12:52.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:12:52.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:12:52.831 [DEBUG] [Thread-54057] [transport.py] [_log()] userauth is OK
2025-11-17T12:12:52.831 [DEBUG] [Thread-54057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:12:52.832 [DEBUG] [Thread-54057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:12:52.832 [DEBUG] [Thread-54057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:12:52.832 [DEBUG] [Thread-54057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:12:52.842 [INFO] [Thread-54057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:12:52.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:12:53.443 [DEBUG] [Thread-54057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:12:53.443 [DEBUG] [Thread-54057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:12:53.443 [DEBUG] [Thread-54057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:12:53.486 [DEBUG] [Thread-54057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:12:53.486 [DEBUG] [Thread-54057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:12:53.488 [DEBUG] [Thread-54057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:12:53.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:12:53.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:12:53.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:12:53.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:12:53.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:12:53.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:12:53.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:12:53.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:12:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:12:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.425395 -999.00  +20.80  21.04     25   +0.40 1 1 1 1 1   888    0 21.66 41.87 ----- 21.0 21.0 57.2 23.0 28.4 -25.0 27.2 -25.4 26.9 -24.4 27.8 -25.1
2025-11-17T12:12:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:12:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:12:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.425395
2025-11-17T12:12:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:12:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:12:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:12:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:12:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:12:53.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:12:31', tmtdew=23.62, humidity=20.07, cloud=0.0, wind=13.02, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:12:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:12:53.509 [DEBUG] [Thread-54057] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:12:53.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:12:53.606 [DEBUG] [Thread-54060] [transport.py] [_log()] starting thread (client mode): 0xd31cfa00
2025-11-17T12:12:53.606 [DEBUG] [Thread-54060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:12:53.620 [DEBUG] [Thread-54060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:12:53.620 [INFO] [Thread-54060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:12:53.628 [DEBUG] [Thread-54060] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:12:53.628 [DEBUG] [Thread-54060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:12:53.628 [DEBUG] [Thread-54060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:12:53.628 [DEBUG] [Thread-54060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:12:53.628 [DEBUG] [Thread-54060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] client lang: <none>
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] server lang: <none>
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] kex follows: False
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:12:53.629 [DEBUG] [Thread-54060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:12:53.630 [DEBUG] [Thread-54060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:12:53.630 [DEBUG] [Thread-54060] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:12:53.630 [DEBUG] [Thread-54060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:12:53.630 [DEBUG] [Thread-54060] [transport.py] [_log()] Compression: none
2025-11-17T12:12:53.630 [DEBUG] [Thread-54060] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:12:53.688 [DEBUG] [Thread-54060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:12:53.689 [DEBUG] [Thread-54060] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:12:53.689 [DEBUG] [Thread-54060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:12:53.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:12:53.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:12:53.744 [DEBUG] [Thread-54060] [transport.py] [_log()] userauth is OK
2025-11-17T12:12:53.745 [DEBUG] [Thread-54060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:12:53.745 [DEBUG] [Thread-54060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:12:53.745 [DEBUG] [Thread-54060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:12:53.745 [DEBUG] [Thread-54060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:12:53.764 [INFO] [Thread-54060] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:12:53.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:12:53.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:12:54.617 [DEBUG] [Thread-54060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:12:54.618 [DEBUG] [Thread-54060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:12:54.665 [DEBUG] [Thread-54060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:12:54.665 [DEBUG] [Thread-54060] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:12:54.674 [DEBUG] [Thread-54060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:12:54.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:12:54.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:12:54.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:12:54.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:12:54.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:12:54.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:12:54.709 [DEBUG] [Thread-54060] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:13:07.242 [DEBUG] [Thread-54062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:13:09.074 [DEBUG] [Thread-54063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:13:22.286 [DEBUG] [Thread-54064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:13:24.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:13:24.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:13:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:13:25.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 13, 3), 23.75, 19.9, 0.0, 16.15, 21.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:13:25.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:13:03
2025-11-17T12:13:25.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:13:25.713 [DEBUG] [Thread-54065] [transport.py] [_log()] starting thread (client mode): 0xd071b820
2025-11-17T12:13:25.714 [DEBUG] [Thread-54065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:13:25.734 [DEBUG] [Thread-54065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:13:25.734 [INFO] [Thread-54065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] client lang: <none>
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] server lang: <none>
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] kex follows: False
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] Compression: none
2025-11-17T12:13:25.738 [DEBUG] [Thread-54065] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:13:25.752 [DEBUG] [Thread-54065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:13:25.752 [DEBUG] [Thread-54065] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:13:25.753 [DEBUG] [Thread-54065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:13:25.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:13:25.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:13:25.753 [DEBUG] [Thread-54065] [transport.py] [_log()] userauth is OK
2025-11-17T12:13:25.753 [DEBUG] [Thread-54065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:13:25.753 [DEBUG] [Thread-54065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:13:25.753 [DEBUG] [Thread-54065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:13:25.753 [DEBUG] [Thread-54065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:13:25.768 [INFO] [Thread-54065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:13:25.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:13:26.309 [DEBUG] [Thread-54065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:13:26.309 [DEBUG] [Thread-54065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:13:26.309 [DEBUG] [Thread-54065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:13:26.350 [DEBUG] [Thread-54065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:13:26.350 [DEBUG] [Thread-54065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:13:26.352 [DEBUG] [Thread-54065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:13:26.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:13:26.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:13:26.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:13:26.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:13:26.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:13:26.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:13:26.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:13:26.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.425395 -999.00  +20.80  21.04     25   +0.40 1 1 1 1 1   888    0 21.66 41.87 ----- 21.0 21.0 57.2 23.0 28.4 -25.0 27.2 -25.4 26.9 -24.4 27.8 -25.1
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.425395
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:13:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:13:03', tmtdew=23.75, humidity=19.9, cloud=0.0, wind=16.15, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:12:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:13:26.369 [DEBUG] [Thread-54065] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:13:26.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:13:26.455 [DEBUG] [Thread-54068] [transport.py] [_log()] starting thread (client mode): 0xd0785a50
2025-11-17T12:13:26.455 [DEBUG] [Thread-54068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:13:26.473 [DEBUG] [Thread-54068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:13:26.474 [INFO] [Thread-54068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] client lang: <none>
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] server lang: <none>
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] kex follows: False
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:13:26.481 [DEBUG] [Thread-54068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:13:26.482 [DEBUG] [Thread-54068] [transport.py] [_log()] Compression: none
2025-11-17T12:13:26.482 [DEBUG] [Thread-54068] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:13:26.538 [DEBUG] [Thread-54068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:13:26.538 [DEBUG] [Thread-54068] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:13:26.539 [DEBUG] [Thread-54068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:13:26.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:13:26.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:13:26.600 [DEBUG] [Thread-54068] [transport.py] [_log()] userauth is OK
2025-11-17T12:13:26.600 [DEBUG] [Thread-54068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:13:26.600 [DEBUG] [Thread-54068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:13:26.600 [DEBUG] [Thread-54068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:13:26.600 [DEBUG] [Thread-54068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:13:26.614 [INFO] [Thread-54068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:13:26.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:13:26.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:13:27.503 [DEBUG] [Thread-54068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:13:27.503 [DEBUG] [Thread-54068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:13:27.551 [DEBUG] [Thread-54068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:13:27.551 [DEBUG] [Thread-54068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:13:27.559 [DEBUG] [Thread-54068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:13:27.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:13:27.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:13:27.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:13:27.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:13:27.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:13:27.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:13:27.591 [DEBUG] [Thread-54068] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:13:37.311 [DEBUG] [Thread-54070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:13:40.935 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:13:40.936 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:13:52.343 [DEBUG] [Thread-54071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:13:57.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:13:57.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:13:57.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:13:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 13, 35), 24.11, 19.77, 0.0, 17.24, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:13:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:13:35
2025-11-17T12:13:58.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:13:58.559 [DEBUG] [Thread-54072] [transport.py] [_log()] starting thread (client mode): 0xd31efbe0
2025-11-17T12:13:58.559 [DEBUG] [Thread-54072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:13:58.580 [DEBUG] [Thread-54072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:13:58.580 [INFO] [Thread-54072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:13:58.581 [DEBUG] [Thread-54072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:13:58.581 [DEBUG] [Thread-54072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] client lang: <none>
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] server lang: <none>
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] kex follows: False
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:13:58.582 [DEBUG] [Thread-54072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:13:58.583 [DEBUG] [Thread-54072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:13:58.583 [DEBUG] [Thread-54072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:13:58.583 [DEBUG] [Thread-54072] [transport.py] [_log()] Compression: none
2025-11-17T12:13:58.583 [DEBUG] [Thread-54072] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:13:58.602 [DEBUG] [Thread-54072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:13:58.603 [DEBUG] [Thread-54072] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:13:58.604 [DEBUG] [Thread-54072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:13:58.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:13:58.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:13:58.605 [DEBUG] [Thread-54072] [transport.py] [_log()] userauth is OK
2025-11-17T12:13:58.606 [DEBUG] [Thread-54072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:13:58.606 [DEBUG] [Thread-54072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:13:58.606 [DEBUG] [Thread-54072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:13:58.606 [DEBUG] [Thread-54072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:13:58.629 [INFO] [Thread-54072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:13:58.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:13:59.291 [DEBUG] [Thread-54072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:13:59.291 [DEBUG] [Thread-54072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:13:59.291 [DEBUG] [Thread-54072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:13:59.332 [DEBUG] [Thread-54072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:13:59.332 [DEBUG] [Thread-54072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:13:59.335 [DEBUG] [Thread-54072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:13:59.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:13:59.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:13:59.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:13:59.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:13:59.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:13:59.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:13:59.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:13:59.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:13:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:13:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.425742 -999.00  +20.70  14.98     25   +0.20 1 1 1 1 1   888    0 21.10 37.01 ----- 15.0 15.0 79.2 22.2 28.1 -29.0 27.2 -24.9 26.8 -24.5 27.8 -24.2
2025-11-17T12:13:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:13:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:13:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.425742
2025-11-17T12:13:59.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:13:59.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:13:59.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:13:59.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:13:59.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:13:59.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:13:35', tmtdew=24.11, humidity=19.77, cloud=0.0, wind=17.24, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:13:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:13:59.361 [DEBUG] [Thread-54072] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:13:59.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:13:59.457 [DEBUG] [Thread-54075] [transport.py] [_log()] starting thread (client mode): 0xd31eee90
2025-11-17T12:13:59.457 [DEBUG] [Thread-54075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:13:59.471 [DEBUG] [Thread-54075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:13:59.472 [INFO] [Thread-54075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] client lang: <none>
2025-11-17T12:13:59.479 [DEBUG] [Thread-54075] [transport.py] [_log()] server lang: <none>
2025-11-17T12:13:59.480 [DEBUG] [Thread-54075] [transport.py] [_log()] kex follows: False
2025-11-17T12:13:59.480 [DEBUG] [Thread-54075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:13:59.480 [DEBUG] [Thread-54075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:13:59.480 [DEBUG] [Thread-54075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:13:59.480 [DEBUG] [Thread-54075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:13:59.480 [DEBUG] [Thread-54075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:13:59.480 [DEBUG] [Thread-54075] [transport.py] [_log()] Compression: none
2025-11-17T12:13:59.480 [DEBUG] [Thread-54075] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:13:59.539 [DEBUG] [Thread-54075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:13:59.540 [DEBUG] [Thread-54075] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:13:59.540 [DEBUG] [Thread-54075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:13:59.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:13:59.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:13:59.596 [DEBUG] [Thread-54075] [transport.py] [_log()] userauth is OK
2025-11-17T12:13:59.596 [DEBUG] [Thread-54075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:13:59.597 [DEBUG] [Thread-54075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:13:59.597 [DEBUG] [Thread-54075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:13:59.597 [DEBUG] [Thread-54075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:13:59.615 [INFO] [Thread-54075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:13:59.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:13:59.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:14:00.492 [DEBUG] [Thread-54075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:14:00.492 [DEBUG] [Thread-54075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:14:00.540 [DEBUG] [Thread-54075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:14:00.540 [DEBUG] [Thread-54075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:14:00.549 [DEBUG] [Thread-54075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:14:00.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:14:00.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:14:00.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:14:00.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:14:00.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:14:00.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:14:00.583 [DEBUG] [Thread-54075] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:14:07.371 [DEBUG] [Thread-54077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:14:09.120 [DEBUG] [Thread-54078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:14:22.403 [DEBUG] [Thread-54079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:14:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:14:30.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:14:30.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:14:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 14, 7), 24.22, 19.64, 0.0, 17.42, 21.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:14:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:14:07
2025-11-17T12:14:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:14:31.532 [DEBUG] [Thread-54080] [transport.py] [_log()] starting thread (client mode): 0xd31edde0
2025-11-17T12:14:31.532 [DEBUG] [Thread-54080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:14:31.552 [DEBUG] [Thread-54080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:14:31.552 [INFO] [Thread-54080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:14:31.555 [DEBUG] [Thread-54080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:14:31.555 [DEBUG] [Thread-54080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:14:31.555 [DEBUG] [Thread-54080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] client lang: <none>
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] server lang: <none>
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] kex follows: False
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] Compression: none
2025-11-17T12:14:31.556 [DEBUG] [Thread-54080] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:14:31.575 [DEBUG] [Thread-54080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:14:31.575 [DEBUG] [Thread-54080] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:14:31.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:14:31.576 [DEBUG] [Thread-54080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:14:31.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:14:31.578 [DEBUG] [Thread-54080] [transport.py] [_log()] userauth is OK
2025-11-17T12:14:31.578 [DEBUG] [Thread-54080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:14:31.578 [DEBUG] [Thread-54080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:14:31.578 [DEBUG] [Thread-54080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:14:31.579 [DEBUG] [Thread-54080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:14:31.592 [INFO] [Thread-54080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:14:31.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:14:32.228 [DEBUG] [Thread-54080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:14:32.228 [DEBUG] [Thread-54080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:14:32.229 [DEBUG] [Thread-54080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:14:32.270 [DEBUG] [Thread-54080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:14:32.270 [DEBUG] [Thread-54080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:14:32.273 [DEBUG] [Thread-54080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:14:32.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:14:32.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:14:32.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:14:32.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:14:32.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:14:32.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:14:32.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:14:32.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:14:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:14:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.426090 -999.00  +20.80  10.32     25   +0.50 1 1 1 1 1   888    0 21.35 37.12 ----- 10.3 10.3 73.4 15.9 28.2 -25.3 27.3 -24.1 26.9 -23.6 27.9 -24.0
2025-11-17T12:14:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:14:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:14:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.426090
2025-11-17T12:14:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:14:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:14:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:14:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:14:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:14:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:14:07', tmtdew=24.22, humidity=19.64, cloud=0.0, wind=17.42, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:13:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:14:32.300 [DEBUG] [Thread-54080] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:14:32.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:14:32.395 [DEBUG] [Thread-54083] [transport.py] [_log()] starting thread (client mode): 0xd31ecdf0
2025-11-17T12:14:32.396 [DEBUG] [Thread-54083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:14:32.411 [DEBUG] [Thread-54083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:14:32.411 [INFO] [Thread-54083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] client lang: <none>
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] server lang: <none>
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] kex follows: False
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:14:32.419 [DEBUG] [Thread-54083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:14:32.420 [DEBUG] [Thread-54083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:14:32.420 [DEBUG] [Thread-54083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:14:32.420 [DEBUG] [Thread-54083] [transport.py] [_log()] Compression: none
2025-11-17T12:14:32.420 [DEBUG] [Thread-54083] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:14:32.480 [DEBUG] [Thread-54083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:14:32.480 [DEBUG] [Thread-54083] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:14:32.480 [DEBUG] [Thread-54083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:14:32.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:14:32.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:14:32.536 [DEBUG] [Thread-54083] [transport.py] [_log()] userauth is OK
2025-11-17T12:14:32.537 [DEBUG] [Thread-54083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:14:32.537 [DEBUG] [Thread-54083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:14:32.537 [DEBUG] [Thread-54083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:14:32.537 [DEBUG] [Thread-54083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:14:32.556 [INFO] [Thread-54083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:14:32.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:14:32.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:14:33.409 [DEBUG] [Thread-54083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:14:33.409 [DEBUG] [Thread-54083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:14:33.456 [DEBUG] [Thread-54083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:14:33.456 [DEBUG] [Thread-54083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:14:33.465 [DEBUG] [Thread-54083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:14:33.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:14:33.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:14:33.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:14:33.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:14:33.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:14:33.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:14:33.500 [DEBUG] [Thread-54083] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:14:37.438 [DEBUG] [Thread-54085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:14:41.077 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:14:41.078 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:14:52.489 [DEBUG] [Thread-54086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:15:03.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:15:03.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:15:03.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:15:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 14, 39), 24.34, 19.09, 0.0, 15.93, 21.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:15:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:14:39
2025-11-17T12:15:04.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:15:04.444 [DEBUG] [Thread-54087] [transport.py] [_log()] starting thread (client mode): 0xd7bc6860
2025-11-17T12:15:04.445 [DEBUG] [Thread-54087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:15:04.466 [DEBUG] [Thread-54087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:15:04.466 [INFO] [Thread-54087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:15:04.469 [DEBUG] [Thread-54087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] client lang: <none>
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] server lang: <none>
2025-11-17T12:15:04.470 [DEBUG] [Thread-54087] [transport.py] [_log()] kex follows: False
2025-11-17T12:15:04.471 [DEBUG] [Thread-54087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:15:04.471 [DEBUG] [Thread-54087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:15:04.471 [DEBUG] [Thread-54087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:15:04.471 [DEBUG] [Thread-54087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:15:04.471 [DEBUG] [Thread-54087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:15:04.471 [DEBUG] [Thread-54087] [transport.py] [_log()] Compression: none
2025-11-17T12:15:04.471 [DEBUG] [Thread-54087] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:15:04.488 [DEBUG] [Thread-54087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:15:04.489 [DEBUG] [Thread-54087] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:15:04.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:15:04.489 [DEBUG] [Thread-54087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:15:04.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:15:04.492 [DEBUG] [Thread-54087] [transport.py] [_log()] userauth is OK
2025-11-17T12:15:04.492 [DEBUG] [Thread-54087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:15:04.492 [DEBUG] [Thread-54087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:15:04.492 [DEBUG] [Thread-54087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:15:04.492 [DEBUG] [Thread-54087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:15:04.510 [INFO] [Thread-54087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:15:04.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:15:06.527 [DEBUG] [Thread-54087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:15:06.528 [DEBUG] [Thread-54087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:15:06.528 [DEBUG] [Thread-54087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:15:06.568 [DEBUG] [Thread-54087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:15:06.569 [DEBUG] [Thread-54087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:15:06.572 [DEBUG] [Thread-54087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:15:06.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:15:06.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:15:06.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:15:06.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:15:06.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:15:06.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:15:06.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:15:06.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:15:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:15:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.426437 -999.00  +20.70  18.89     25   +0.30 1 1 1 1 1   888    0 21.40 32.82 ----- 18.9 18.9 16.4 24.4 28.1 -24.7 27.2 -24.1 26.9 -22.8 27.8 -24.3
2025-11-17T12:15:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:15:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:15:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.426437
2025-11-17T12:15:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:15:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:15:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:15:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:15:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:15:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:14:39', tmtdew=24.34, humidity=19.09, cloud=0.0, wind=15.93, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:14:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:15:06.636 [DEBUG] [Thread-54087] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:15:06.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:15:06.732 [DEBUG] [Thread-54090] [transport.py] [_log()] starting thread (client mode): 0xd31ef220
2025-11-17T12:15:06.733 [DEBUG] [Thread-54090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:15:06.747 [DEBUG] [Thread-54090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:15:06.747 [INFO] [Thread-54090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:15:06.754 [DEBUG] [Thread-54090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] client lang: <none>
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] server lang: <none>
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] kex follows: False
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] Compression: none
2025-11-17T12:15:06.755 [DEBUG] [Thread-54090] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:15:06.817 [DEBUG] [Thread-54090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:15:06.818 [DEBUG] [Thread-54090] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:15:06.818 [DEBUG] [Thread-54090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:15:06.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:15:06.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:15:06.877 [DEBUG] [Thread-54090] [transport.py] [_log()] userauth is OK
2025-11-17T12:15:06.877 [DEBUG] [Thread-54090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:15:06.877 [DEBUG] [Thread-54090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:15:06.877 [DEBUG] [Thread-54090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:15:06.877 [DEBUG] [Thread-54090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:15:06.897 [INFO] [Thread-54090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:15:06.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:15:06.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:15:07.519 [DEBUG] [Thread-54092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:15:07.745 [DEBUG] [Thread-54090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:15:07.745 [DEBUG] [Thread-54090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:15:07.793 [DEBUG] [Thread-54090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:15:07.793 [DEBUG] [Thread-54090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:15:07.802 [DEBUG] [Thread-54090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:15:07.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:15:07.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:15:07.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:15:07.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:15:07.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:15:07.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:15:07.842 [DEBUG] [Thread-54090] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:15:09.188 [DEBUG] [Thread-54093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:15:22.560 [DEBUG] [Thread-54094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:15:37.588 [DEBUG] [Thread-54095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:15:37.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:15:37.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:15:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:15:38.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 15, 11), 24.39, 19.06, 0.0, 15.42, 21.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:15:38.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:15:11
2025-11-17T12:15:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:15:38.773 [DEBUG] [Thread-54096] [transport.py] [_log()] starting thread (client mode): 0xd31edea0
2025-11-17T12:15:38.773 [DEBUG] [Thread-54096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:15:38.794 [DEBUG] [Thread-54096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:15:38.794 [INFO] [Thread-54096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] client lang: <none>
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] server lang: <none>
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] kex follows: False
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] Compression: none
2025-11-17T12:15:38.797 [DEBUG] [Thread-54096] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:15:38.814 [DEBUG] [Thread-54096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:15:38.814 [DEBUG] [Thread-54096] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:15:38.815 [DEBUG] [Thread-54096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:15:38.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:15:38.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:15:38.817 [DEBUG] [Thread-54096] [transport.py] [_log()] userauth is OK
2025-11-17T12:15:38.817 [DEBUG] [Thread-54096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:15:38.817 [DEBUG] [Thread-54096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:15:38.817 [DEBUG] [Thread-54096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:15:38.817 [DEBUG] [Thread-54096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:15:38.838 [INFO] [Thread-54096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:15:38.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:15:39.509 [DEBUG] [Thread-54096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:15:39.509 [DEBUG] [Thread-54096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:15:39.509 [DEBUG] [Thread-54096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:15:39.551 [DEBUG] [Thread-54096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:15:39.551 [DEBUG] [Thread-54096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:15:39.554 [DEBUG] [Thread-54096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:15:39.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:15:39.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:15:39.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:15:39.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:15:39.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:15:39.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:15:39.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:15:39.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:15:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:15:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.426784 -999.00  +21.00  16.73     25   +0.50 1 1 1 1 1   888    0 20.98 28.86 ----- 16.7 16.7 77.4 21.4 27.9 -27.8 27.2 -24.8 26.9 -23.9 27.7 -24.3
2025-11-17T12:15:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:15:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:15:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.426784
2025-11-17T12:15:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:15:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:15:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:15:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:15:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:15:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:15:11', tmtdew=24.39, humidity=19.06, cloud=0.0, wind=15.42, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:14:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:15:39.577 [DEBUG] [Thread-54096] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:15:39.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:15:39.677 [DEBUG] [Thread-54099] [transport.py] [_log()] starting thread (client mode): 0xd0784af0
2025-11-17T12:15:39.677 [DEBUG] [Thread-54099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:15:39.692 [DEBUG] [Thread-54099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:15:39.693 [INFO] [Thread-54099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] client lang: <none>
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] server lang: <none>
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] kex follows: False
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:15:39.700 [DEBUG] [Thread-54099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:15:39.701 [DEBUG] [Thread-54099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:15:39.701 [DEBUG] [Thread-54099] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:15:39.701 [DEBUG] [Thread-54099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:15:39.701 [DEBUG] [Thread-54099] [transport.py] [_log()] Compression: none
2025-11-17T12:15:39.701 [DEBUG] [Thread-54099] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:15:39.756 [DEBUG] [Thread-54099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:15:39.756 [DEBUG] [Thread-54099] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:15:39.756 [DEBUG] [Thread-54099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:15:39.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:15:39.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:15:39.813 [DEBUG] [Thread-54099] [transport.py] [_log()] userauth is OK
2025-11-17T12:15:39.813 [DEBUG] [Thread-54099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:15:39.813 [DEBUG] [Thread-54099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:15:39.813 [DEBUG] [Thread-54099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:15:39.813 [DEBUG] [Thread-54099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:15:39.840 [INFO] [Thread-54099] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:15:39.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:15:39.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:15:40.702 [DEBUG] [Thread-54099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:15:40.702 [DEBUG] [Thread-54099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:15:40.749 [DEBUG] [Thread-54099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:15:40.749 [DEBUG] [Thread-54099] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:15:40.758 [DEBUG] [Thread-54099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:15:40.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:15:40.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:15:40.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:15:40.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:15:40.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:15:40.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:15:40.791 [DEBUG] [Thread-54099] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:15:41.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:15:41.219 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:15:52.619 [DEBUG] [Thread-54101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:16:07.659 [DEBUG] [Thread-54102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:16:09.236 [DEBUG] [Thread-54103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:16:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:16:10.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:16:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:16:11.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 15, 43), 24.55, 19.12, 0.0, 14.38, 21.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:16:11.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:15:43
2025-11-17T12:16:11.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:16:11.750 [DEBUG] [Thread-54104] [transport.py] [_log()] starting thread (client mode): 0xd0718eb0
2025-11-17T12:16:11.750 [DEBUG] [Thread-54104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:16:11.771 [DEBUG] [Thread-54104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:16:11.771 [INFO] [Thread-54104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] client lang: <none>
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] server lang: <none>
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] kex follows: False
2025-11-17T12:16:11.774 [DEBUG] [Thread-54104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:16:11.775 [DEBUG] [Thread-54104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:16:11.775 [DEBUG] [Thread-54104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:16:11.775 [DEBUG] [Thread-54104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:16:11.775 [DEBUG] [Thread-54104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:16:11.775 [DEBUG] [Thread-54104] [transport.py] [_log()] Compression: none
2025-11-17T12:16:11.775 [DEBUG] [Thread-54104] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:16:11.794 [DEBUG] [Thread-54104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:16:11.795 [DEBUG] [Thread-54104] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:16:11.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:16:11.796 [DEBUG] [Thread-54104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:16:11.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:16:11.798 [DEBUG] [Thread-54104] [transport.py] [_log()] userauth is OK
2025-11-17T12:16:11.798 [DEBUG] [Thread-54104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:16:11.798 [DEBUG] [Thread-54104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:16:11.798 [DEBUG] [Thread-54104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:16:11.798 [DEBUG] [Thread-54104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:16:11.821 [INFO] [Thread-54104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:16:11.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:16:12.481 [DEBUG] [Thread-54104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:16:12.481 [DEBUG] [Thread-54104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:16:12.481 [DEBUG] [Thread-54104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:16:12.522 [DEBUG] [Thread-54104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:16:12.523 [DEBUG] [Thread-54104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:16:12.526 [DEBUG] [Thread-54104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:16:12.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:16:12.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:16:12.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:16:12.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:16:12.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:16:12.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:16:12.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:16:12.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:16:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:16:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.427478 -999.00  +20.70  11.78     25   +0.40 1 1 1 1 1   888    0 21.07 24.94 ----- 11.8 11.8 116.0 19.0 27.7 -24.7 27.1 -23.8 26.8 -23.2 27.7 -23.5
2025-11-17T12:16:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:16:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:16:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.427478
2025-11-17T12:16:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:16:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:16:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:16:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:16:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:16:12.552 [DEBUG] [Thread-54104] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:16:12.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:15:43', tmtdew=24.55, humidity=19.12, cloud=0.0, wind=14.38, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:15:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:16:12.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:16:12.650 [DEBUG] [Thread-54107] [transport.py] [_log()] starting thread (client mode): 0xd31ef970
2025-11-17T12:16:12.650 [DEBUG] [Thread-54107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:16:12.667 [DEBUG] [Thread-54107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:16:12.667 [INFO] [Thread-54107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:16:12.674 [DEBUG] [Thread-54107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] client lang: <none>
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] server lang: <none>
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] kex follows: False
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:16:12.675 [DEBUG] [Thread-54107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:16:12.676 [DEBUG] [Thread-54107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:16:12.676 [DEBUG] [Thread-54107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:16:12.676 [DEBUG] [Thread-54107] [transport.py] [_log()] Compression: none
2025-11-17T12:16:12.676 [DEBUG] [Thread-54107] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:16:12.736 [DEBUG] [Thread-54107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:16:12.736 [DEBUG] [Thread-54107] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:16:12.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:16:12.737 [DEBUG] [Thread-54107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:16:12.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:16:12.796 [DEBUG] [Thread-54107] [transport.py] [_log()] userauth is OK
2025-11-17T12:16:12.796 [DEBUG] [Thread-54107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:16:12.796 [DEBUG] [Thread-54107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:16:12.796 [DEBUG] [Thread-54107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:16:12.797 [DEBUG] [Thread-54107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:16:12.818 [INFO] [Thread-54107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:16:12.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:16:12.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:16:13.707 [DEBUG] [Thread-54107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:16:13.707 [DEBUG] [Thread-54107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:16:13.755 [DEBUG] [Thread-54107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:16:13.756 [DEBUG] [Thread-54107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:16:13.765 [DEBUG] [Thread-54107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:16:13.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:16:13.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:16:13.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:16:13.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:16:13.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:16:13.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:16:13.806 [DEBUG] [Thread-54107] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:16:22.688 [DEBUG] [Thread-54109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:16:37.732 [DEBUG] [Thread-54110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:16:41.360 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:16:41.361 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:16:43.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:16:43.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:16: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
2025-11-17T12:16:44.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 16, 15), 24.71, 18.89, 0.0, 12.83, 21.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:16:44.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:16:15
2025-11-17T12:16:44.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:16:44.733 [DEBUG] [Thread-54111] [transport.py] [_log()] starting thread (client mode): 0xd31eec80
2025-11-17T12:16:44.733 [DEBUG] [Thread-54111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:16:44.753 [DEBUG] [Thread-54111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:16:44.753 [INFO] [Thread-54111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:16:44.756 [DEBUG] [Thread-54111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] client lang: <none>
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] server lang: <none>
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] kex follows: False
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:16:44.757 [DEBUG] [Thread-54111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:16:44.758 [DEBUG] [Thread-54111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:16:44.758 [DEBUG] [Thread-54111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:16:44.758 [DEBUG] [Thread-54111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:16:44.758 [DEBUG] [Thread-54111] [transport.py] [_log()] Compression: none
2025-11-17T12:16:44.758 [DEBUG] [Thread-54111] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:16:44.777 [DEBUG] [Thread-54111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:16:44.778 [DEBUG] [Thread-54111] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:16:44.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:16:44.779 [DEBUG] [Thread-54111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:16:44.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:16:44.781 [DEBUG] [Thread-54111] [transport.py] [_log()] userauth is OK
2025-11-17T12:16:44.781 [DEBUG] [Thread-54111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:16:44.781 [DEBUG] [Thread-54111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:16:44.781 [DEBUG] [Thread-54111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:16:44.781 [DEBUG] [Thread-54111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:16:44.816 [INFO] [Thread-54111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:16:44.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:16:45.470 [DEBUG] [Thread-54111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:16:45.470 [DEBUG] [Thread-54111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:16:45.470 [DEBUG] [Thread-54111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:16:45.510 [DEBUG] [Thread-54111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:16:45.511 [DEBUG] [Thread-54111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:16:45.514 [DEBUG] [Thread-54111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:16:45.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:16:45.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:16:45.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:16:45.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:16:45.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:16:45.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:16:45.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:16:45.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:16:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:16:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.427826 -999.00  +21.10   7.03     25   +0.50 1 1 1 1 1   888    0 21.22 23.91 ----- 7.0 7.0 86.1 20.5 27.9 -25.1 27.2 -23.4 26.9 -24.1 27.9 -23.8
2025-11-17T12:16:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:16:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:16:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.427826
2025-11-17T12:16:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:16:45.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:16:45.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:16:45.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:16:45.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:16:45.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:16:15', tmtdew=24.71, humidity=18.89, cloud=0.0, wind=12.83, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:16:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:16:45.539 [DEBUG] [Thread-54111] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:16:45.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:16:45.649 [DEBUG] [Thread-54114] [transport.py] [_log()] starting thread (client mode): 0xd075bbb0
2025-11-17T12:16:45.649 [DEBUG] [Thread-54114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:16:45.666 [DEBUG] [Thread-54114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:16:45.666 [INFO] [Thread-54114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:16:45.673 [DEBUG] [Thread-54114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:16:45.673 [DEBUG] [Thread-54114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:16:45.673 [DEBUG] [Thread-54114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] client lang: <none>
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] server lang: <none>
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] kex follows: False
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] Compression: none
2025-11-17T12:16:45.674 [DEBUG] [Thread-54114] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:16:45.732 [DEBUG] [Thread-54114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:16:45.732 [DEBUG] [Thread-54114] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:16:45.733 [DEBUG] [Thread-54114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:16:45.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:16:45.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:16:45.788 [DEBUG] [Thread-54114] [transport.py] [_log()] userauth is OK
2025-11-17T12:16:45.789 [DEBUG] [Thread-54114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:16:45.789 [DEBUG] [Thread-54114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:16:45.789 [DEBUG] [Thread-54114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:16:45.789 [DEBUG] [Thread-54114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:16:45.808 [INFO] [Thread-54114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:16:45.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:16:45.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:16:46.673 [DEBUG] [Thread-54114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:16:46.673 [DEBUG] [Thread-54114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:16:46.720 [DEBUG] [Thread-54114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:16:46.720 [DEBUG] [Thread-54114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:16:46.729 [DEBUG] [Thread-54114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:16:46.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:16:46.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:16:46.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:16:46.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:16:46.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:16:46.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:16:46.763 [DEBUG] [Thread-54114] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:16:52.760 [DEBUG] [Thread-54116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:17:07.799 [DEBUG] [Thread-54117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:17:09.291 [DEBUG] [Thread-54118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:17:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:17:16.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:17:16.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:17:17.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 16, 47), 24.27, 19.19, 0.0, 16.2, 21.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:17:17.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:16:47
2025-11-17T12:17:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:17:17.727 [DEBUG] [Thread-54119] [transport.py] [_log()] starting thread (client mode): 0xd31ec3d0
2025-11-17T12:17:17.727 [DEBUG] [Thread-54119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:17:17.747 [DEBUG] [Thread-54119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:17:17.748 [INFO] [Thread-54119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] client lang: <none>
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] server lang: <none>
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] kex follows: False
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] Compression: none
2025-11-17T12:17:17.751 [DEBUG] [Thread-54119] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:17:17.767 [DEBUG] [Thread-54119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:17:17.768 [DEBUG] [Thread-54119] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:17:17.768 [DEBUG] [Thread-54119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:17:17.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:17:17.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:17:17.769 [DEBUG] [Thread-54119] [transport.py] [_log()] userauth is OK
2025-11-17T12:17:17.769 [DEBUG] [Thread-54119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:17:17.769 [DEBUG] [Thread-54119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:17:17.769 [DEBUG] [Thread-54119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:17:17.769 [DEBUG] [Thread-54119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:17:17.779 [INFO] [Thread-54119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:17:17.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:17:18.420 [DEBUG] [Thread-54119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:17:18.420 [DEBUG] [Thread-54119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:17:18.420 [DEBUG] [Thread-54119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:17:18.461 [DEBUG] [Thread-54119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:17:18.461 [DEBUG] [Thread-54119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:17:18.463 [DEBUG] [Thread-54119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:17:18.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:17:18.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:17:18.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:17:18.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:17:18.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:17:18.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:17:18.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.428173 -999.00  +21.00   6.45     25   +0.30 1 1 1 1 1   888    0 21.67 26.44 ----- 6.5 6.5 88.2 20.1 27.9 -23.9 27.2 -23.9 26.9 -23.1 27.9 -23.9
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.428173
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:17:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:16:47', tmtdew=24.27, humidity=19.19, cloud=0.0, wind=16.2, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:16:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:17:18.481 [DEBUG] [Thread-54119] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:17:18.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:17:18.566 [DEBUG] [Thread-54122] [transport.py] [_log()] starting thread (client mode): 0xd3163070
2025-11-17T12:17:18.566 [DEBUG] [Thread-54122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:17:18.581 [DEBUG] [Thread-54122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:17:18.581 [INFO] [Thread-54122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] client lang: <none>
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] server lang: <none>
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] kex follows: False
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] Compression: none
2025-11-17T12:17:18.589 [DEBUG] [Thread-54122] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:17:18.656 [DEBUG] [Thread-54122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:17:18.656 [DEBUG] [Thread-54122] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:17:18.656 [DEBUG] [Thread-54122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:17:18.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:17:18.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:17:18.712 [DEBUG] [Thread-54122] [transport.py] [_log()] userauth is OK
2025-11-17T12:17:18.712 [DEBUG] [Thread-54122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:17:18.712 [DEBUG] [Thread-54122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:17:18.712 [DEBUG] [Thread-54122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:17:18.712 [DEBUG] [Thread-54122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:17:18.726 [INFO] [Thread-54122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:17:18.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:17:18.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:17:19.574 [DEBUG] [Thread-54122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:17:19.575 [DEBUG] [Thread-54122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:17:19.623 [DEBUG] [Thread-54122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:17:19.623 [DEBUG] [Thread-54122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:17:19.631 [DEBUG] [Thread-54122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:17:19.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:17: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')
2025-11-17T12:17:19.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:17:19.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:17:19.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:17:19.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:17:19.662 [DEBUG] [Thread-54122] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:17:22.828 [DEBUG] [Thread-54124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:17:37.876 [DEBUG] [Thread-54125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:17:41.503 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:17:41.504 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:17:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:17:49.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:17:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:17:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 17, 19), 24.36, 19.07, 0.0, 14.95, 21.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:17:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:17:19
2025-11-17T12:17:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:17:50.598 [DEBUG] [Thread-54126] [transport.py] [_log()] starting thread (client mode): 0xd0784af0
2025-11-17T12:17:50.598 [DEBUG] [Thread-54126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:17:50.618 [DEBUG] [Thread-54126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:17:50.618 [INFO] [Thread-54126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] client lang: <none>
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] server lang: <none>
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] kex follows: False
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] Compression: none
2025-11-17T12:17:50.622 [DEBUG] [Thread-54126] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:17:50.639 [DEBUG] [Thread-54126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:17:50.639 [DEBUG] [Thread-54126] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:17:50.639 [DEBUG] [Thread-54126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:17:50.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:17:50.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:17:50.683 [DEBUG] [Thread-54126] [transport.py] [_log()] userauth is OK
2025-11-17T12:17:50.683 [DEBUG] [Thread-54126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:17:50.683 [DEBUG] [Thread-54126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:17:50.683 [DEBUG] [Thread-54126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:17:50.683 [DEBUG] [Thread-54126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:17:50.710 [INFO] [Thread-54126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:17:50.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:17:51.376 [DEBUG] [Thread-54126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:17:51.376 [DEBUG] [Thread-54126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:17:51.377 [DEBUG] [Thread-54126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:17:51.418 [DEBUG] [Thread-54126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:17:51.418 [DEBUG] [Thread-54126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:17:51.421 [DEBUG] [Thread-54126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:17:51.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:17:51.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:17:51.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:17:51.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:17:51.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:17:51.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:17:51.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:17:51.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:17:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:17:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.428520 -999.00  +21.10  14.52     25   +0.40 1 1 1 1 1   888    0 21.34 23.06 ----- 14.5 14.5 51.4 18.6 27.9 -24.7 27.1 -25.1 26.9 -24.8 27.9 -24.2
2025-11-17T12:17:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:17:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:17:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.428520
2025-11-17T12:17:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:17:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:17:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:17:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:17:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:17:51.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:17:19', tmtdew=24.36, humidity=19.07, cloud=0.0, wind=14.95, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:17:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:17:51.449 [DEBUG] [Thread-54126] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:17:51.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:17:51.551 [DEBUG] [Thread-54129] [transport.py] [_log()] starting thread (client mode): 0xd31b20b0
2025-11-17T12:17:51.551 [DEBUG] [Thread-54129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:17:51.566 [DEBUG] [Thread-54129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:17:51.567 [INFO] [Thread-54129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:17:51.574 [DEBUG] [Thread-54129] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:17:51.574 [DEBUG] [Thread-54129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:17:51.574 [DEBUG] [Thread-54129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] client lang: <none>
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] server lang: <none>
2025-11-17T12:17:51.575 [DEBUG] [Thread-54129] [transport.py] [_log()] kex follows: False
2025-11-17T12:17:51.576 [DEBUG] [Thread-54129] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:17:51.576 [DEBUG] [Thread-54129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:17:51.576 [DEBUG] [Thread-54129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:17:51.576 [DEBUG] [Thread-54129] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:17:51.576 [DEBUG] [Thread-54129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:17:51.576 [DEBUG] [Thread-54129] [transport.py] [_log()] Compression: none
2025-11-17T12:17:51.576 [DEBUG] [Thread-54129] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:17:51.635 [DEBUG] [Thread-54129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:17:51.636 [DEBUG] [Thread-54129] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:17:51.636 [DEBUG] [Thread-54129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:17:51.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:17:51.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:17:51.693 [DEBUG] [Thread-54129] [transport.py] [_log()] userauth is OK
2025-11-17T12:17:51.693 [DEBUG] [Thread-54129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:17:51.693 [DEBUG] [Thread-54129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:17:51.693 [DEBUG] [Thread-54129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:17:51.693 [DEBUG] [Thread-54129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:17:51.717 [INFO] [Thread-54129] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:17:51.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:17:51.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:17:52.618 [DEBUG] [Thread-54129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:17:52.618 [DEBUG] [Thread-54129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:17:52.666 [DEBUG] [Thread-54129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:17:52.666 [DEBUG] [Thread-54129] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:17:52.674 [DEBUG] [Thread-54129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:17:52.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:17:52.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:17: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
2025-11-17T12:17:52.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:17:52.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:17:52.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:17:52.706 [DEBUG] [Thread-54129] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:17:52.908 [DEBUG] [Thread-54131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:18:07.937 [DEBUG] [Thread-54132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:18:09.351 [DEBUG] [Thread-54133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:18:22.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:18:22.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:18:22.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
2025-11-17T12:18:22.966 [DEBUG] [Thread-54134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:18:23.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 17, 51), 24.11, 19.64, 0.0, 10.11, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:18:23.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:17:51
2025-11-17T12:18:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:18:23.659 [DEBUG] [Thread-54135] [transport.py] [_log()] starting thread (client mode): 0xd31b0ca0
2025-11-17T12:18:23.659 [DEBUG] [Thread-54135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:18:23.679 [DEBUG] [Thread-54135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:18:23.680 [INFO] [Thread-54135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:18:23.683 [DEBUG] [Thread-54135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:18:23.683 [DEBUG] [Thread-54135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:18:23.683 [DEBUG] [Thread-54135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:18:23.683 [DEBUG] [Thread-54135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] client lang: <none>
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] server lang: <none>
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] kex follows: False
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] Compression: none
2025-11-17T12:18:23.684 [DEBUG] [Thread-54135] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:18:23.701 [DEBUG] [Thread-54135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:18:23.702 [DEBUG] [Thread-54135] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:18:23.702 [DEBUG] [Thread-54135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:18:23.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:18:23.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:18:23.704 [DEBUG] [Thread-54135] [transport.py] [_log()] userauth is OK
2025-11-17T12:18:23.704 [DEBUG] [Thread-54135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:18:23.705 [DEBUG] [Thread-54135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:18:23.705 [DEBUG] [Thread-54135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:18:23.705 [DEBUG] [Thread-54135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:18:23.728 [INFO] [Thread-54135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:18:23.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:18:24.330 [DEBUG] [Thread-54135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:18:24.330 [DEBUG] [Thread-54135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:18:24.330 [DEBUG] [Thread-54135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:18:24.373 [DEBUG] [Thread-54135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:18:24.373 [DEBUG] [Thread-54135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:18:24.378 [DEBUG] [Thread-54135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:18:24.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:18:24.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:18:24.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:18:24.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:18:24.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:18:24.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:18:24.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.428867 -999.00  +20.90  13.13     25   +0.30 1 1 1 1 1   888    0 20.96 23.57 ----- 13.1 13.1 52.0 15.8 27.9 -24.4 27.1 -24.4 27.1 -24.4 27.9 -23.2
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.428867
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:18:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:17:51', tmtdew=24.11, humidity=19.64, cloud=0.0, wind=10.11, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:17:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:18:24.397 [DEBUG] [Thread-54135] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:18:24.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:18:24.482 [DEBUG] [Thread-54138] [transport.py] [_log()] starting thread (client mode): 0xd071ae00
2025-11-17T12:18:24.483 [DEBUG] [Thread-54138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:18:24.497 [DEBUG] [Thread-54138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:18:24.497 [INFO] [Thread-54138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] client lang: <none>
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] server lang: <none>
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] kex follows: False
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] Compression: none
2025-11-17T12:18:24.505 [DEBUG] [Thread-54138] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:18:24.563 [DEBUG] [Thread-54138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:18:24.563 [DEBUG] [Thread-54138] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:18:24.563 [DEBUG] [Thread-54138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:18:24.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:18:24.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:18:24.620 [DEBUG] [Thread-54138] [transport.py] [_log()] userauth is OK
2025-11-17T12:18:24.620 [DEBUG] [Thread-54138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:18:24.621 [DEBUG] [Thread-54138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:18:24.621 [DEBUG] [Thread-54138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:18:24.621 [DEBUG] [Thread-54138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:18:24.635 [INFO] [Thread-54138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:18:24.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:18:24.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:18:25.495 [DEBUG] [Thread-54138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:18:25.495 [DEBUG] [Thread-54138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:18:25.543 [DEBUG] [Thread-54138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:18:25.543 [DEBUG] [Thread-54138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:18:25.551 [DEBUG] [Thread-54138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:18:25.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:18:25.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:18:25.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:18:25.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:18:25.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:18:25.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:18:25.583 [DEBUG] [Thread-54138] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:18:37.991 [DEBUG] [Thread-54140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:18:41.644 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:18:41.645 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:18:53.028 [DEBUG] [Thread-54141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:18:55.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:18:55.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:18:55.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:18:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 18, 23), 24.0, 19.77, 0.0, 7.61, 21.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:18:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:18:23
2025-11-17T12:18:56.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:18:56.571 [DEBUG] [Thread-54142] [transport.py] [_log()] starting thread (client mode): 0xd31b2b30
2025-11-17T12:18:56.572 [DEBUG] [Thread-54142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:18:56.591 [DEBUG] [Thread-54142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:18:56.591 [INFO] [Thread-54142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] client lang: <none>
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] server lang: <none>
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] kex follows: False
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] Compression: none
2025-11-17T12:18:56.594 [DEBUG] [Thread-54142] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:18:56.609 [DEBUG] [Thread-54142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:18:56.610 [DEBUG] [Thread-54142] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:18:56.610 [DEBUG] [Thread-54142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:18:56.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:18:56.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:18:56.611 [DEBUG] [Thread-54142] [transport.py] [_log()] userauth is OK
2025-11-17T12:18:56.611 [DEBUG] [Thread-54142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:18:56.611 [DEBUG] [Thread-54142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:18:56.611 [DEBUG] [Thread-54142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:18:56.611 [DEBUG] [Thread-54142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:18:56.620 [INFO] [Thread-54142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:18:56.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:18:57.257 [DEBUG] [Thread-54142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:18:57.257 [DEBUG] [Thread-54142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:18:57.257 [DEBUG] [Thread-54142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:18:57.298 [DEBUG] [Thread-54142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:18:57.298 [DEBUG] [Thread-54142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:18:57.301 [DEBUG] [Thread-54142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:18:57.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:18:57.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:18:57.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:18:57.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:18:57.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:18:57.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:18:57.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:18:57.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:18:57.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:18:57.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.429215 -999.00  +21.00  15.17     25   +0.40 1 1 1 1 1   888    0 21.00 19.75 ----- 15.2 15.2 42.4 21.6 28.0 -25.1 27.2 -24.9 26.9 -23.8 27.9 -23.8
2025-11-17T12:18:57.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:18:57.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:18:57.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.429215
2025-11-17T12:18:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:18:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:18:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:18:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:18:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:18:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:18:23', tmtdew=24.0, humidity=19.77, cloud=0.0, wind=7.61, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:18:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:18:57.320 [DEBUG] [Thread-54142] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:18:57.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:18:57.404 [DEBUG] [Thread-54145] [transport.py] [_log()] starting thread (client mode): 0xd31ed630
2025-11-17T12:18:57.404 [DEBUG] [Thread-54145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:18:57.419 [DEBUG] [Thread-54145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:18:57.419 [INFO] [Thread-54145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] client lang: <none>
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] server lang: <none>
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] kex follows: False
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] Compression: none
2025-11-17T12:18:57.427 [DEBUG] [Thread-54145] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:18:57.491 [DEBUG] [Thread-54145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:18:57.491 [DEBUG] [Thread-54145] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:18:57.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:18:57.491 [DEBUG] [Thread-54145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:18:57.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:18:57.548 [DEBUG] [Thread-54145] [transport.py] [_log()] userauth is OK
2025-11-17T12:18:57.548 [DEBUG] [Thread-54145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:18:57.548 [DEBUG] [Thread-54145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:18:57.548 [DEBUG] [Thread-54145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:18:57.548 [DEBUG] [Thread-54145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:18:57.563 [INFO] [Thread-54145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:18:57.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:18:57.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:18:58.432 [DEBUG] [Thread-54145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:18:58.432 [DEBUG] [Thread-54145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:18:58.480 [DEBUG] [Thread-54145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:18:58.480 [DEBUG] [Thread-54145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:18:58.489 [DEBUG] [Thread-54145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:18:58.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:18:58.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:18:58.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:18:58.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:18:58.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:18:58.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:18:58.524 [DEBUG] [Thread-54145] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:19:08.057 [DEBUG] [Thread-54147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:19:09.404 [DEBUG] [Thread-54148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:19:23.109 [DEBUG] [Thread-54149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:19:28.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:19:28.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:19:28.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:19:29.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 18, 55), 24.28, 19.16, 0.0, 6.18, 21.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:19:29.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:18:55
2025-11-17T12:19:29.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:19:29.523 [DEBUG] [Thread-54150] [transport.py] [_log()] starting thread (client mode): 0xd31ec760
2025-11-17T12:19:29.523 [DEBUG] [Thread-54150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:19:29.541 [DEBUG] [Thread-54150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:19:29.541 [INFO] [Thread-54150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] client lang: <none>
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] server lang: <none>
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] kex follows: False
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:19:29.544 [DEBUG] [Thread-54150] [transport.py] [_log()] Compression: none
2025-11-17T12:19:29.545 [DEBUG] [Thread-54150] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:19:29.561 [DEBUG] [Thread-54150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:19:29.561 [DEBUG] [Thread-54150] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:19:29.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:19:29.562 [DEBUG] [Thread-54150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:19:29.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:19:29.563 [DEBUG] [Thread-54150] [transport.py] [_log()] userauth is OK
2025-11-17T12:19:29.563 [DEBUG] [Thread-54150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:19:29.563 [DEBUG] [Thread-54150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:19:29.563 [DEBUG] [Thread-54150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:19:29.563 [DEBUG] [Thread-54150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:19:29.573 [INFO] [Thread-54150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:19:29.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:19:30.200 [DEBUG] [Thread-54150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:19:30.200 [DEBUG] [Thread-54150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:19:30.200 [DEBUG] [Thread-54150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:19:30.240 [DEBUG] [Thread-54150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:19:30.240 [DEBUG] [Thread-54150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:19:30.243 [DEBUG] [Thread-54150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:19:30.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:19:30.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:19:30.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:19:30.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:19:30.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:19:30.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:19:30.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:19:30.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:19:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:19:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.429562 -999.00  +20.80   4.73     25   +0.20 1 1 1 1 1   888    0 20.94 14.40 ----- 4.7 4.7 115.3 14.7 28.1 -23.8 27.2 -23.5 27.0 -22.6 27.9 -24.0
2025-11-17T12:19:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:19:30.267 [DEBUG] [Thread-54150] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:19:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:19:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.429562
2025-11-17T12:19:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:19:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:19:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:19:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:19:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:19:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:18:55', tmtdew=24.28, humidity=19.16, cloud=0.0, wind=6.18, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:18:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:19:30.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:19:30.361 [DEBUG] [Thread-54153] [transport.py] [_log()] starting thread (client mode): 0xd31ee7a0
2025-11-17T12:19:30.361 [DEBUG] [Thread-54153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:19:30.377 [DEBUG] [Thread-54153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:19:30.377 [INFO] [Thread-54153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:19:30.384 [DEBUG] [Thread-54153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:19:30.384 [DEBUG] [Thread-54153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:19:30.384 [DEBUG] [Thread-54153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:19:30.384 [DEBUG] [Thread-54153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:19:30.384 [DEBUG] [Thread-54153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:19:30.384 [DEBUG] [Thread-54153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] client lang: <none>
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] server lang: <none>
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] kex follows: False
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] Compression: none
2025-11-17T12:19:30.385 [DEBUG] [Thread-54153] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:19:30.444 [DEBUG] [Thread-54153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:19:30.444 [DEBUG] [Thread-54153] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:19:30.445 [DEBUG] [Thread-54153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:19:30.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:19:30.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:19:30.500 [DEBUG] [Thread-54153] [transport.py] [_log()] userauth is OK
2025-11-17T12:19:30.501 [DEBUG] [Thread-54153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:19:30.501 [DEBUG] [Thread-54153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:19:30.501 [DEBUG] [Thread-54153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:19:30.501 [DEBUG] [Thread-54153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:19:30.521 [INFO] [Thread-54153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:19:30.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:19:30.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:19:31.373 [DEBUG] [Thread-54153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:19:31.374 [DEBUG] [Thread-54153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:19:31.421 [DEBUG] [Thread-54153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:19:31.421 [DEBUG] [Thread-54153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:19:31.430 [DEBUG] [Thread-54153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:19:31.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:19: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')
2025-11-17T12:19:31.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:19:31.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:19:31.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:19:31.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:19:31.463 [DEBUG] [Thread-54153] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:19:38.140 [DEBUG] [Thread-54155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:19:41.787 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:19:41.788 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:19:53.178 [DEBUG] [Thread-54156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:20:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:20:01.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:20:01.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:20:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 19, 27), 24.26, 19.21, 0.0, 6.07, 21.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:20:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:19:27
2025-11-17T12:20:02.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:20:02.466 [DEBUG] [Thread-54157] [transport.py] [_log()] starting thread (client mode): 0xd31b3340
2025-11-17T12:20:02.466 [DEBUG] [Thread-54157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:20:02.489 [DEBUG] [Thread-54157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:20:02.490 [INFO] [Thread-54157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] client lang: <none>
2025-11-17T12:20:02.493 [DEBUG] [Thread-54157] [transport.py] [_log()] server lang: <none>
2025-11-17T12:20:02.494 [DEBUG] [Thread-54157] [transport.py] [_log()] kex follows: False
2025-11-17T12:20:02.494 [DEBUG] [Thread-54157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:20:02.494 [DEBUG] [Thread-54157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:20:02.494 [DEBUG] [Thread-54157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:20:02.494 [DEBUG] [Thread-54157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:20:02.494 [DEBUG] [Thread-54157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:20:02.494 [DEBUG] [Thread-54157] [transport.py] [_log()] Compression: none
2025-11-17T12:20:02.494 [DEBUG] [Thread-54157] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:20:02.510 [DEBUG] [Thread-54157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:20:02.511 [DEBUG] [Thread-54157] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:20:02.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:20:02.511 [DEBUG] [Thread-54157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:20:02.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:20:02.513 [DEBUG] [Thread-54157] [transport.py] [_log()] userauth is OK
2025-11-17T12:20:02.514 [DEBUG] [Thread-54157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:20:02.514 [DEBUG] [Thread-54157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:20:02.514 [DEBUG] [Thread-54157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:20:02.514 [DEBUG] [Thread-54157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:20:02.537 [INFO] [Thread-54157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:20:02.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:20:06.667 [DEBUG] [Thread-54157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:20:06.668 [DEBUG] [Thread-54157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:20:06.668 [DEBUG] [Thread-54157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:20:06.708 [DEBUG] [Thread-54157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:20:06.708 [DEBUG] [Thread-54157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:20:06.711 [DEBUG] [Thread-54157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:20:06.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:20:06.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:20:06.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:20:06.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:20:06.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:20:06.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:20:06.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:20:06.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:20:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:20:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.430256 -999.00  +21.50   6.87     24   +0.50 1 1 1 1 1   888    0 20.94 5.20 ----- 6.9 6.9 229.2 18.2 28.1 -25.1 27.2 -23.5 27.1 -23.1 27.9 -25.3
2025-11-17T12:20:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:20:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:20:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.430256
2025-11-17T12:20:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:20:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:20:06.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:20:06.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:20:06.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:20:06.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:19:27', tmtdew=24.26, humidity=19.21, cloud=0.0, wind=6.07, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:19:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:20:06.749 [DEBUG] [Thread-54157] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:20:06.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:20:06.845 [DEBUG] [Thread-54160] [transport.py] [_log()] starting thread (client mode): 0xd07cde70
2025-11-17T12:20:06.845 [DEBUG] [Thread-54160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:20:06.859 [DEBUG] [Thread-54160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:20:06.860 [INFO] [Thread-54160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] client lang: <none>
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] server lang: <none>
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] kex follows: False
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:20:06.867 [DEBUG] [Thread-54160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:20:06.868 [DEBUG] [Thread-54160] [transport.py] [_log()] Compression: none
2025-11-17T12:20:06.868 [DEBUG] [Thread-54160] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:20:06.924 [DEBUG] [Thread-54160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:20:06.924 [DEBUG] [Thread-54160] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:20:06.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:20:06.925 [DEBUG] [Thread-54160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:20:06.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:20:06.981 [DEBUG] [Thread-54160] [transport.py] [_log()] userauth is OK
2025-11-17T12:20:06.981 [DEBUG] [Thread-54160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:20:06.981 [DEBUG] [Thread-54160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:20:06.981 [DEBUG] [Thread-54160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:20:06.981 [DEBUG] [Thread-54160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:20:07.000 [INFO] [Thread-54160] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:20:07.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:20:07.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:20:07.854 [DEBUG] [Thread-54160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:20:07.855 [DEBUG] [Thread-54160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:20:07.902 [DEBUG] [Thread-54160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:20:07.902 [DEBUG] [Thread-54160] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:20:07.911 [DEBUG] [Thread-54160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:20:07.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:20:07.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:20:07.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:20:07.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:20:07.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:20:07.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:20:07.946 [DEBUG] [Thread-54160] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:20:08.205 [DEBUG] [Thread-54162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:20:09.461 [DEBUG] [Thread-54163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:20:23.255 [DEBUG] [Thread-54164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:20:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:20:37.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:20:37.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:20:38.283 [DEBUG] [Thread-54165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:20:38.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 20, 31), 24.62, 19.14, 0.0, 17.47, 21.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:20:38.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:20:31
2025-11-17T12:20:38.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:20:38.888 [DEBUG] [Thread-54166] [transport.py] [_log()] starting thread (client mode): 0xd7bc7ee0
2025-11-17T12:20:38.889 [DEBUG] [Thread-54166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:20:38.908 [DEBUG] [Thread-54166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:20:38.909 [INFO] [Thread-54166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:20:38.912 [DEBUG] [Thread-54166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:20:38.912 [DEBUG] [Thread-54166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:20:38.912 [DEBUG] [Thread-54166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:20:38.912 [DEBUG] [Thread-54166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:20:38.912 [DEBUG] [Thread-54166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:20:38.912 [DEBUG] [Thread-54166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:20:38.912 [DEBUG] [Thread-54166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:20:38.912 [DEBUG] [Thread-54166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] client lang: <none>
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] server lang: <none>
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] kex follows: False
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] Compression: none
2025-11-17T12:20:38.913 [DEBUG] [Thread-54166] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:20:38.929 [DEBUG] [Thread-54166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:20:38.929 [DEBUG] [Thread-54166] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:20:38.930 [DEBUG] [Thread-54166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:20:38.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:20:38.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:20:38.931 [DEBUG] [Thread-54166] [transport.py] [_log()] userauth is OK
2025-11-17T12:20:38.932 [DEBUG] [Thread-54166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:20:38.932 [DEBUG] [Thread-54166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:20:38.932 [DEBUG] [Thread-54166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:20:38.932 [DEBUG] [Thread-54166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:20:38.953 [INFO] [Thread-54166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:20:38.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:20:39.564 [DEBUG] [Thread-54166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:20:39.564 [DEBUG] [Thread-54166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:20:39.565 [DEBUG] [Thread-54166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:20:39.605 [DEBUG] [Thread-54166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:20:39.605 [DEBUG] [Thread-54166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:20:39.608 [DEBUG] [Thread-54166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:20:39.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:20:39.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:20:39.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:20:39.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:20:39.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:20:39.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:20:39.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:20:39.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:20:39.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:20:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.430603 -999.00  +21.70  14.36     24   +0.40 1 1 1 1 1   888    0 20.60 5.89 ----- 14.4 14.4 2.6 38.3 28.1 -24.5 27.1 -23.7 26.9 -23.3 27.9 -25.3
2025-11-17T12:20:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:20:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:20:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.430603
2025-11-17T12:20:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:20:39.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:20:39.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:20:39.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:20:39.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:20:39.626 [DEBUG] [Thread-54166] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:20:39.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:20:31', tmtdew=24.62, humidity=19.14, cloud=0.0, wind=17.47, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:20:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:20:39.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:20:39.721 [DEBUG] [Thread-54169] [transport.py] [_log()] starting thread (client mode): 0xd3150d60
2025-11-17T12:20:39.722 [DEBUG] [Thread-54169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:20:39.736 [DEBUG] [Thread-54169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:20:39.736 [INFO] [Thread-54169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:20:39.744 [DEBUG] [Thread-54169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:20:39.744 [DEBUG] [Thread-54169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:20:39.744 [DEBUG] [Thread-54169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:20:39.744 [DEBUG] [Thread-54169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:20:39.744 [DEBUG] [Thread-54169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:20:39.744 [DEBUG] [Thread-54169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] client lang: <none>
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] server lang: <none>
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] kex follows: False
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] Compression: none
2025-11-17T12:20:39.745 [DEBUG] [Thread-54169] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:20:39.800 [DEBUG] [Thread-54169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:20:39.801 [DEBUG] [Thread-54169] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:20:39.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:20:39.802 [DEBUG] [Thread-54169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:20:39.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:20:39.856 [DEBUG] [Thread-54169] [transport.py] [_log()] userauth is OK
2025-11-17T12:20:39.857 [DEBUG] [Thread-54169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:20:39.857 [DEBUG] [Thread-54169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:20:39.857 [DEBUG] [Thread-54169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:20:39.857 [DEBUG] [Thread-54169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:20:39.882 [INFO] [Thread-54169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:20:39.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:20:39.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:20:40.729 [DEBUG] [Thread-54169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:20:40.729 [DEBUG] [Thread-54169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:20:40.777 [DEBUG] [Thread-54169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:20:40.777 [DEBUG] [Thread-54169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:20:40.786 [DEBUG] [Thread-54169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:20:40.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:20:40.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:20:40.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:20:40.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:20:40.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:20:40.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:20:40.820 [DEBUG] [Thread-54169] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:20:41.929 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:20:41.930 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:20:53.314 [DEBUG] [Thread-54171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:21:08.357 [DEBUG] [Thread-54172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:21:09.489 [DEBUG] [Thread-54173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:21:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:21:10.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:21:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:21:11.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 21, 3), 24.6, 19.12, 0.0, 14.75, 21.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:21:11.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:21:03
2025-11-17T12:21:11.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:21:11.829 [DEBUG] [Thread-54174] [transport.py] [_log()] starting thread (client mode): 0xd07bfb50
2025-11-17T12:21:11.829 [DEBUG] [Thread-54174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:21:11.848 [DEBUG] [Thread-54174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:21:11.848 [INFO] [Thread-54174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] client lang: <none>
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] server lang: <none>
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] kex follows: False
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] Compression: none
2025-11-17T12:21:11.852 [DEBUG] [Thread-54174] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:21:11.868 [DEBUG] [Thread-54174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:21:11.869 [DEBUG] [Thread-54174] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:21:11.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:21:11.869 [DEBUG] [Thread-54174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:21:11.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:21:11.869 [DEBUG] [Thread-54174] [transport.py] [_log()] userauth is OK
2025-11-17T12:21:11.869 [DEBUG] [Thread-54174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:21:11.869 [DEBUG] [Thread-54174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:21:11.869 [DEBUG] [Thread-54174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:21:11.869 [DEBUG] [Thread-54174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:21:11.896 [INFO] [Thread-54174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:21:11.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:21:12.516 [DEBUG] [Thread-54174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:21:12.516 [DEBUG] [Thread-54174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:21:12.516 [DEBUG] [Thread-54174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:21:12.557 [DEBUG] [Thread-54174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:21:12.557 [DEBUG] [Thread-54174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:21:12.558 [DEBUG] [Thread-54174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:21:12.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:21:12.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:21:12.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:21:12.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:21:12.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:21:12.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:21:12.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.430951 -999.00  +21.40   8.93     24   +0.50 1 1 1 1 1   888    0 20.50 8.07 ----- 8.9 8.9 284.4 11.2 28.2 -23.6 27.4 -23.0 27.2 -24.0 27.9 -23.1
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.430951
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:21:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:21:03', tmtdew=24.6, humidity=19.12, cloud=0.0, wind=14.75, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:20:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:21:12.575 [DEBUG] [Thread-54174] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:21:12.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:21:12.662 [DEBUG] [Thread-54177] [transport.py] [_log()] starting thread (client mode): 0xd31ceaa0
2025-11-17T12:21:12.662 [DEBUG] [Thread-54177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:21:12.676 [DEBUG] [Thread-54177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:21:12.677 [INFO] [Thread-54177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] client lang: <none>
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] server lang: <none>
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] kex follows: False
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:21:12.684 [DEBUG] [Thread-54177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:21:12.685 [DEBUG] [Thread-54177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:21:12.685 [DEBUG] [Thread-54177] [transport.py] [_log()] Compression: none
2025-11-17T12:21:12.685 [DEBUG] [Thread-54177] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:21:12.739 [DEBUG] [Thread-54177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:21:12.739 [DEBUG] [Thread-54177] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:21:12.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:21:12.740 [DEBUG] [Thread-54177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:21:12.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:21:12.796 [DEBUG] [Thread-54177] [transport.py] [_log()] userauth is OK
2025-11-17T12:21:12.796 [DEBUG] [Thread-54177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:21:12.796 [DEBUG] [Thread-54177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:21:12.796 [DEBUG] [Thread-54177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:21:12.796 [DEBUG] [Thread-54177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:21:12.810 [INFO] [Thread-54177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:21:12.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:21:12.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:21:13.667 [DEBUG] [Thread-54177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:21:13.667 [DEBUG] [Thread-54177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:21:13.715 [DEBUG] [Thread-54177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:21:13.715 [DEBUG] [Thread-54177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:21:13.724 [DEBUG] [Thread-54177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:21:13.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:21: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')
2025-11-17T12:21:13.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:21:13.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:21:13.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:21:13.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:21:13.764 [DEBUG] [Thread-54177] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:21:23.388 [DEBUG] [Thread-54179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:21:38.430 [DEBUG] [Thread-54180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:21:42.070 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:21:42.071 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:21:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:21:43.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:21:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:21:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 21, 35), 25.18, 18.02, 0.0, 14.47, 21.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:21:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:21:35
2025-11-17T12:21:44.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:21:44.712 [DEBUG] [Thread-54181] [transport.py] [_log()] starting thread (client mode): 0xd31ceec0
2025-11-17T12:21:44.712 [DEBUG] [Thread-54181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:21:44.736 [DEBUG] [Thread-54181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:21:44.736 [INFO] [Thread-54181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:21:44.739 [DEBUG] [Thread-54181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:21:44.739 [DEBUG] [Thread-54181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] client lang: <none>
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] server lang: <none>
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] kex follows: False
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] Compression: none
2025-11-17T12:21:44.740 [DEBUG] [Thread-54181] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:21:44.767 [DEBUG] [Thread-54181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:21:44.768 [DEBUG] [Thread-54181] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:21:44.768 [DEBUG] [Thread-54181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:21:44.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:21:44.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:21:44.770 [DEBUG] [Thread-54181] [transport.py] [_log()] userauth is OK
2025-11-17T12:21:44.770 [DEBUG] [Thread-54181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:21:44.770 [DEBUG] [Thread-54181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:21:44.770 [DEBUG] [Thread-54181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:21:44.771 [DEBUG] [Thread-54181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:21:44.812 [INFO] [Thread-54181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:21:44.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:21:45.451 [DEBUG] [Thread-54181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:21:45.452 [DEBUG] [Thread-54181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:21:45.452 [DEBUG] [Thread-54181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:21:45.492 [DEBUG] [Thread-54181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:21:45.493 [DEBUG] [Thread-54181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:21:45.496 [DEBUG] [Thread-54181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:21:45.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:21:45.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:21:45.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:21:45.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:21:45.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:21:45.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:21:45.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:21:45.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:21:45.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:21:45.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.431298 -999.00  +21.70   5.41     24   +0.50 1 2 1 1 1   888    0 20.62 9.48 ----- 5.4 5.4 254.6 8.0 28.4 -24.8 27.5 -23.0 27.3 -22.0 28.1 -22.8
2025-11-17T12:21:45.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:21:45.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:21:45.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.431298
2025-11-17T12:21:45.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:21:45.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:21:45.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:21:45.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:21:45.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:21:45.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:21:35', tmtdew=25.18, humidity=18.02, cloud=0.0, wind=14.47, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:21:04.147', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:21:45.523 [DEBUG] [Thread-54181] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:21:45.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:21:45.620 [DEBUG] [Thread-54184] [transport.py] [_log()] starting thread (client mode): 0xd071be20
2025-11-17T12:21:45.620 [DEBUG] [Thread-54184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:21:45.635 [DEBUG] [Thread-54184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:21:45.635 [INFO] [Thread-54184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:21:45.642 [DEBUG] [Thread-54184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:21:45.643 [DEBUG] [Thread-54184] [transport.py] [_log()] client lang: <none>
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] server lang: <none>
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] kex follows: False
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] Compression: none
2025-11-17T12:21:45.644 [DEBUG] [Thread-54184] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:21:45.701 [DEBUG] [Thread-54184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:21:45.702 [DEBUG] [Thread-54184] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:21:45.702 [DEBUG] [Thread-54184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:21:45.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:21:45.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:21:45.757 [DEBUG] [Thread-54184] [transport.py] [_log()] userauth is OK
2025-11-17T12:21:45.757 [DEBUG] [Thread-54184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:21:45.757 [DEBUG] [Thread-54184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:21:45.757 [DEBUG] [Thread-54184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:21:45.757 [DEBUG] [Thread-54184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:21:45.776 [INFO] [Thread-54184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:21:45.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:21:45.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:21:46.616 [DEBUG] [Thread-54184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:21:46.616 [DEBUG] [Thread-54184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:21:46.664 [DEBUG] [Thread-54184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:21:46.664 [DEBUG] [Thread-54184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:21:46.672 [DEBUG] [Thread-54184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:21:46.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:21:46.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:21:46.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
2025-11-17T12:21:46.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:21:46.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:21:46.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:21:46.704 [DEBUG] [Thread-54184] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:21:53.466 [DEBUG] [Thread-54186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:22:08.511 [DEBUG] [Thread-54187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:22:09.551 [DEBUG] [Thread-54188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:22:16.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:22:16.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:22:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:22:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 22, 7), 25.19, 18.02, 0.0, 16.76, 21.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:22:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:22:07
2025-11-17T12:22:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:22:17.642 [DEBUG] [Thread-54189] [transport.py] [_log()] starting thread (client mode): 0xd31b3250
2025-11-17T12:22:17.643 [DEBUG] [Thread-54189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:22:17.664 [DEBUG] [Thread-54189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:22:17.664 [INFO] [Thread-54189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:22:17.667 [DEBUG] [Thread-54189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:22:17.667 [DEBUG] [Thread-54189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:22:17.667 [DEBUG] [Thread-54189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:22:17.667 [DEBUG] [Thread-54189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:22:17.667 [DEBUG] [Thread-54189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:22:17.667 [DEBUG] [Thread-54189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] client lang: <none>
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] server lang: <none>
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] kex follows: False
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] Compression: none
2025-11-17T12:22:17.668 [DEBUG] [Thread-54189] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:22:17.684 [DEBUG] [Thread-54189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:22:17.685 [DEBUG] [Thread-54189] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:22:17.685 [DEBUG] [Thread-54189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:22:17.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:22:17.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:22:17.687 [DEBUG] [Thread-54189] [transport.py] [_log()] userauth is OK
2025-11-17T12:22:17.687 [DEBUG] [Thread-54189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:22:17.687 [DEBUG] [Thread-54189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:22:17.687 [DEBUG] [Thread-54189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:22:17.687 [DEBUG] [Thread-54189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:22:17.711 [INFO] [Thread-54189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:22:17.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:22:18.360 [DEBUG] [Thread-54189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:22:18.360 [DEBUG] [Thread-54189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:22:18.361 [DEBUG] [Thread-54189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:22:18.402 [DEBUG] [Thread-54189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:22:18.402 [DEBUG] [Thread-54189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:22:18.405 [DEBUG] [Thread-54189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:22:18.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:22:18.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:22:18.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:22:18.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:22:18.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:22:18.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:22:18.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:22:18.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:22:18.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:22:18.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.431645 -999.00  +21.80  13.51     23   +0.20 1 1 1 1 1   888    0 20.97 10.92 ----- 13.5 13.5 266.5 16.7 28.4 -25.6 27.6 -23.9 27.2 -23.8 28.2 -24.0
2025-11-17T12:22:18.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:22:18.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:22:18.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.431645
2025-11-17T12:22:18.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:22:18.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:22:18.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:22:18.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:22:18.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:22:18.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:22:07', tmtdew=25.19, humidity=18.02, cloud=0.0, wind=16.76, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:21:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:22:18.430 [DEBUG] [Thread-54189] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:22:18.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:22:18.527 [DEBUG] [Thread-54192] [transport.py] [_log()] starting thread (client mode): 0xd07cc070
2025-11-17T12:22:18.527 [DEBUG] [Thread-54192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:22:18.542 [DEBUG] [Thread-54192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:22:18.542 [INFO] [Thread-54192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:22:18.550 [DEBUG] [Thread-54192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:22:18.550 [DEBUG] [Thread-54192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:22:18.550 [DEBUG] [Thread-54192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:22:18.550 [DEBUG] [Thread-54192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:22:18.550 [DEBUG] [Thread-54192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:22:18.550 [DEBUG] [Thread-54192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:22:18.550 [DEBUG] [Thread-54192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:22:18.550 [DEBUG] [Thread-54192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] client lang: <none>
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] server lang: <none>
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] kex follows: False
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:22:18.551 [DEBUG] [Thread-54192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:22:18.552 [DEBUG] [Thread-54192] [transport.py] [_log()] Compression: none
2025-11-17T12:22:18.552 [DEBUG] [Thread-54192] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:22:18.609 [DEBUG] [Thread-54192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:22:18.610 [DEBUG] [Thread-54192] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:22:18.610 [DEBUG] [Thread-54192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:22:18.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:22:18.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:22:18.665 [DEBUG] [Thread-54192] [transport.py] [_log()] userauth is OK
2025-11-17T12:22:18.665 [DEBUG] [Thread-54192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:22:18.665 [DEBUG] [Thread-54192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:22:18.665 [DEBUG] [Thread-54192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:22:18.665 [DEBUG] [Thread-54192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:22:18.684 [INFO] [Thread-54192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:22:18.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:22:18.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:22:19.519 [DEBUG] [Thread-54192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:22:19.519 [DEBUG] [Thread-54192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:22:19.566 [DEBUG] [Thread-54192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:22:19.566 [DEBUG] [Thread-54192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:22:19.575 [DEBUG] [Thread-54192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:22:19.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:22:19.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:22:19.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:22:19.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:22:19.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:22:19.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:22:19.610 [DEBUG] [Thread-54192] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:22:23.539 [DEBUG] [Thread-54194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:22:38.585 [DEBUG] [Thread-54195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:22:42.212 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:22:42.213 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:22:49.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:22:49.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:22:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:22:50.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 22, 39), 25.23, 17.94, 0.0, 17.5, 21.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:22:50.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:22:39
2025-11-17T12:22:50.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:22:50.564 [DEBUG] [Thread-54196] [transport.py] [_log()] starting thread (client mode): 0xd07cea70
2025-11-17T12:22:50.564 [DEBUG] [Thread-54196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:22:50.584 [DEBUG] [Thread-54196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:22:50.584 [INFO] [Thread-54196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:22:50.587 [DEBUG] [Thread-54196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:22:50.587 [DEBUG] [Thread-54196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] client lang: <none>
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] server lang: <none>
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] kex follows: False
2025-11-17T12:22:50.588 [DEBUG] [Thread-54196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:22:50.589 [DEBUG] [Thread-54196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:22:50.589 [DEBUG] [Thread-54196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:22:50.589 [DEBUG] [Thread-54196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:22:50.589 [DEBUG] [Thread-54196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:22:50.589 [DEBUG] [Thread-54196] [transport.py] [_log()] Compression: none
2025-11-17T12:22:50.589 [DEBUG] [Thread-54196] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:22:50.606 [DEBUG] [Thread-54196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:22:50.607 [DEBUG] [Thread-54196] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:22:50.607 [DEBUG] [Thread-54196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:22:50.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:22:50.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:22:50.609 [DEBUG] [Thread-54196] [transport.py] [_log()] userauth is OK
2025-11-17T12:22:50.609 [DEBUG] [Thread-54196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:22:50.609 [DEBUG] [Thread-54196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:22:50.609 [DEBUG] [Thread-54196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:22:50.609 [DEBUG] [Thread-54196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:22:50.645 [INFO] [Thread-54196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:22:50.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:22:51.273 [DEBUG] [Thread-54196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:22:51.273 [DEBUG] [Thread-54196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:22:51.273 [DEBUG] [Thread-54196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:22:51.314 [DEBUG] [Thread-54196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:22:51.315 [DEBUG] [Thread-54196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:22:51.317 [DEBUG] [Thread-54196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:22:51.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:22:51.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:22:51.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:22:51.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:22:51.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:22:51.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:22:51.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:22:51.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:22:51.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:22:51.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.431992 -999.00  +21.70  14.80     23   +0.20 1 2 1 1 1   888    0 20.61 15.08 ----- 14.8 14.8 297.4 19.1 28.5 -24.3 27.7 -23.3 27.3 -22.5 28.3 -23.8
2025-11-17T12:22:51.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:22:51.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:22:51.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.431992
2025-11-17T12:22:51.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:22:51.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:22:51.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:22:51.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:22:51.340 [DEBUG] [Thread-54196] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:22:51.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:22:51.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:22:39', tmtdew=25.23, humidity=17.94, cloud=0.0, wind=17.5, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:22:04.109', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:22:51.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:22:51.438 [DEBUG] [Thread-54199] [transport.py] [_log()] starting thread (client mode): 0xd31efa60
2025-11-17T12:22:51.438 [DEBUG] [Thread-54199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:22:51.453 [DEBUG] [Thread-54199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:22:51.453 [INFO] [Thread-54199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] client lang: <none>
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] server lang: <none>
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] kex follows: False
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:22:51.461 [DEBUG] [Thread-54199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:22:51.462 [DEBUG] [Thread-54199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:22:51.462 [DEBUG] [Thread-54199] [transport.py] [_log()] Compression: none
2025-11-17T12:22:51.462 [DEBUG] [Thread-54199] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:22:51.524 [DEBUG] [Thread-54199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:22:51.525 [DEBUG] [Thread-54199] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:22:51.525 [DEBUG] [Thread-54199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:22:51.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:22:51.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:22:51.581 [DEBUG] [Thread-54199] [transport.py] [_log()] userauth is OK
2025-11-17T12:22:51.581 [DEBUG] [Thread-54199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:22:51.581 [DEBUG] [Thread-54199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:22:51.581 [DEBUG] [Thread-54199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:22:51.581 [DEBUG] [Thread-54199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:22:51.600 [INFO] [Thread-54199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:22:51.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:22:51.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:22:52.463 [DEBUG] [Thread-54199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:22:52.464 [DEBUG] [Thread-54199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:22:52.511 [DEBUG] [Thread-54199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:22:52.511 [DEBUG] [Thread-54199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:22:52.521 [DEBUG] [Thread-54199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:22:52.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:22:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:22:52.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:22:52.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:22:52.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:22:52.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:22:52.556 [DEBUG] [Thread-54199] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:22:53.626 [DEBUG] [Thread-54201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:23:08.666 [DEBUG] [Thread-54202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:23:09.604 [DEBUG] [Thread-54203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:23:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:23:22.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:23:22.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:23:23.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 23, 11), 25.47, 17.66, 0.0, 10.92, 21.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:23:23.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:23:11
2025-11-17T12:23:23.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:23:23.477 [DEBUG] [Thread-54204] [transport.py] [_log()] starting thread (client mode): 0xd31b25c0
2025-11-17T12:23:23.477 [DEBUG] [Thread-54204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:23:23.497 [DEBUG] [Thread-54204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:23:23.498 [INFO] [Thread-54204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] client lang: <none>
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] server lang: <none>
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] kex follows: False
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] Compression: none
2025-11-17T12:23:23.501 [DEBUG] [Thread-54204] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:23:23.518 [DEBUG] [Thread-54204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:23:23.519 [DEBUG] [Thread-54204] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:23:23.519 [DEBUG] [Thread-54204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:23:23.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:23:23.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:23:23.521 [DEBUG] [Thread-54204] [transport.py] [_log()] userauth is OK
2025-11-17T12:23:23.522 [DEBUG] [Thread-54204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:23:23.522 [DEBUG] [Thread-54204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:23:23.522 [DEBUG] [Thread-54204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:23:23.522 [DEBUG] [Thread-54204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:23:23.545 [INFO] [Thread-54204] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:23:23.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:23:23.692 [DEBUG] [Thread-54206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:23:24.203 [DEBUG] [Thread-54204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:23:24.203 [DEBUG] [Thread-54204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:23:24.203 [DEBUG] [Thread-54204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:23:24.244 [DEBUG] [Thread-54204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:23:24.244 [DEBUG] [Thread-54204] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:23:24.247 [DEBUG] [Thread-54204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:23:24.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:23:24.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:23:24.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:23:24.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:23:24.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:23:24.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:23:24.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:23:24.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:23:24.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:23:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.432340 -999.00  +21.80  17.59     23   +0.30 1 1 1 1 1   888    0 21.19 20.06 ----- 17.6 17.6 298.2 19.9 28.5 -25.1 27.6 -24.7 27.2 -24.2 28.3 -23.9
2025-11-17T12:23:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:23:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:23:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.432340
2025-11-17T12:23:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:23:24.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:23:24.273 [DEBUG] [Thread-54204] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:23:24.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:23:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:23:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:23:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:23:11', tmtdew=25.47, humidity=17.66, cloud=0.0, wind=10.92, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:22:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:23:24.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:23:24.369 [DEBUG] [Thread-54208] [transport.py] [_log()] starting thread (client mode): 0xd07cc070
2025-11-17T12:23:24.369 [DEBUG] [Thread-54208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:23:24.384 [DEBUG] [Thread-54208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:23:24.384 [INFO] [Thread-54208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:23:24.392 [DEBUG] [Thread-54208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:23:24.392 [DEBUG] [Thread-54208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:23:24.392 [DEBUG] [Thread-54208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:23:24.392 [DEBUG] [Thread-54208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:23:24.392 [DEBUG] [Thread-54208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:23:24.392 [DEBUG] [Thread-54208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:23:24.392 [DEBUG] [Thread-54208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:23:24.393 [DEBUG] [Thread-54208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:23:24.393 [DEBUG] [Thread-54208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:23:24.393 [DEBUG] [Thread-54208] [transport.py] [_log()] client lang: <none>
2025-11-17T12:23:24.393 [DEBUG] [Thread-54208] [transport.py] [_log()] server lang: <none>
2025-11-17T12:23:24.393 [DEBUG] [Thread-54208] [transport.py] [_log()] kex follows: False
2025-11-17T12:23:24.393 [DEBUG] [Thread-54208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:23:24.393 [DEBUG] [Thread-54208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:23:24.393 [DEBUG] [Thread-54208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:23:24.394 [DEBUG] [Thread-54208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:23:24.394 [DEBUG] [Thread-54208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:23:24.394 [DEBUG] [Thread-54208] [transport.py] [_log()] Compression: none
2025-11-17T12:23:24.394 [DEBUG] [Thread-54208] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:23:24.450 [DEBUG] [Thread-54208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:23:24.450 [DEBUG] [Thread-54208] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:23:24.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:23:24.451 [DEBUG] [Thread-54208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:23:24.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:23:24.509 [DEBUG] [Thread-54208] [transport.py] [_log()] userauth is OK
2025-11-17T12:23:24.509 [DEBUG] [Thread-54208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:23:24.509 [DEBUG] [Thread-54208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:23:24.509 [DEBUG] [Thread-54208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:23:24.509 [DEBUG] [Thread-54208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:23:24.530 [INFO] [Thread-54208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:23:24.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:23:24.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:23:25.384 [DEBUG] [Thread-54208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:23:25.393 [DEBUG] [Thread-54208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:23:25.431 [DEBUG] [Thread-54208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:23:25.431 [DEBUG] [Thread-54208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:23:25.440 [DEBUG] [Thread-54208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:23:25.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:23:25.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:23:25.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:23:25.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:23:25.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:23:25.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:23:25.475 [DEBUG] [Thread-54208] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:23:38.722 [DEBUG] [Thread-54210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:23:42.355 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:23:42.356 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:23:53.768 [DEBUG] [Thread-54211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:23:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:23:55.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:23:55.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:23:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 23, 44), 25.49, 17.63, 0.0, 14.77, 22.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:23:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:23:44
2025-11-17T12:23:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:23:56.447 [DEBUG] [Thread-54212] [transport.py] [_log()] starting thread (client mode): 0xd07cdab0
2025-11-17T12:23:56.448 [DEBUG] [Thread-54212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:23:56.468 [DEBUG] [Thread-54212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:23:56.468 [INFO] [Thread-54212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:23:56.471 [DEBUG] [Thread-54212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:23:56.471 [DEBUG] [Thread-54212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:23:56.471 [DEBUG] [Thread-54212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:23:56.471 [DEBUG] [Thread-54212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:23:56.471 [DEBUG] [Thread-54212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:23:56.471 [DEBUG] [Thread-54212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:23:56.471 [DEBUG] [Thread-54212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:23:56.471 [DEBUG] [Thread-54212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] client lang: <none>
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] server lang: <none>
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] kex follows: False
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] Compression: none
2025-11-17T12:23:56.472 [DEBUG] [Thread-54212] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:23:56.491 [DEBUG] [Thread-54212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:23:56.492 [DEBUG] [Thread-54212] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:23:56.492 [DEBUG] [Thread-54212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:23:56.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:23:56.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:23:56.494 [DEBUG] [Thread-54212] [transport.py] [_log()] userauth is OK
2025-11-17T12:23:56.495 [DEBUG] [Thread-54212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:23:56.495 [DEBUG] [Thread-54212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:23:56.495 [DEBUG] [Thread-54212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:23:56.495 [DEBUG] [Thread-54212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:23:56.530 [INFO] [Thread-54212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:23:56.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:23:57.133 [DEBUG] [Thread-54212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:23:57.133 [DEBUG] [Thread-54212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:23:57.134 [DEBUG] [Thread-54212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:23:57.174 [DEBUG] [Thread-54212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:23:57.174 [DEBUG] [Thread-54212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:23:57.177 [DEBUG] [Thread-54212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:23:57.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:23:57.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:23:57.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:23:57.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:23:57.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:23:57.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:23:57.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:23:57.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:23:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:23:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.433034 -999.00  +21.70  13.90     24   +0.40 1 2 1 1 1   888    0 21.44 27.27 ----- 13.9 13.9 326.0 21.2 28.6 -23.9 27.7 -23.0 27.2 -22.7 28.2 -22.9
2025-11-17T12:23:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:23:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:23:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.433034
2025-11-17T12:23:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:23:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:23:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:23:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:23:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:23:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:23:44', tmtdew=25.49, humidity=17.63, cloud=0.0, wind=14.77, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:23:34.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:23:57.205 [DEBUG] [Thread-54212] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:23:57.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:23:57.303 [DEBUG] [Thread-54215] [transport.py] [_log()] starting thread (client mode): 0xd31b25c0
2025-11-17T12:23:57.303 [DEBUG] [Thread-54215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:23:57.318 [DEBUG] [Thread-54215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:23:57.318 [INFO] [Thread-54215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:23:57.325 [DEBUG] [Thread-54215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:23:57.325 [DEBUG] [Thread-54215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] client lang: <none>
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] server lang: <none>
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] kex follows: False
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] Compression: none
2025-11-17T12:23:57.326 [DEBUG] [Thread-54215] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:23:57.384 [DEBUG] [Thread-54215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:23:57.385 [DEBUG] [Thread-54215] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:23:57.386 [DEBUG] [Thread-54215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:23:57.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:23:57.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:23:57.441 [DEBUG] [Thread-54215] [transport.py] [_log()] userauth is OK
2025-11-17T12:23:57.441 [DEBUG] [Thread-54215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:23:57.441 [DEBUG] [Thread-54215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:23:57.441 [DEBUG] [Thread-54215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:23:57.441 [DEBUG] [Thread-54215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:23:57.460 [INFO] [Thread-54215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:23:57.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:23:57.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:23:58.309 [DEBUG] [Thread-54215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:23:58.309 [DEBUG] [Thread-54215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:23:58.356 [DEBUG] [Thread-54215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:23:58.356 [DEBUG] [Thread-54215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:23:58.365 [DEBUG] [Thread-54215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:23:58.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:23:58.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:23:58.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:23:58.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:23:58.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:23:58.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:23:58.400 [DEBUG] [Thread-54215] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:24:08.796 [DEBUG] [Thread-54217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:24:09.663 [DEBUG] [Thread-54218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:24:23.834 [DEBUG] [Thread-54219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:24:28.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:24:28.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:24:28.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:24:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 24, 16), 25.46, 17.69, 0.0, 12.48, 22.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:24:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:24:16
2025-11-17T12:24:29.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:24:29.347 [DEBUG] [Thread-54220] [transport.py] [_log()] starting thread (client mode): 0xd3137970
2025-11-17T12:24:29.347 [DEBUG] [Thread-54220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:24:29.368 [DEBUG] [Thread-54220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:24:29.368 [INFO] [Thread-54220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:24:29.371 [DEBUG] [Thread-54220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:24:29.371 [DEBUG] [Thread-54220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:24:29.371 [DEBUG] [Thread-54220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] client lang: <none>
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] server lang: <none>
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] kex follows: False
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] Compression: none
2025-11-17T12:24:29.372 [DEBUG] [Thread-54220] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:24:29.388 [DEBUG] [Thread-54220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:24:29.389 [DEBUG] [Thread-54220] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:24:29.389 [DEBUG] [Thread-54220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:24:29.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:24:29.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:24:29.391 [DEBUG] [Thread-54220] [transport.py] [_log()] userauth is OK
2025-11-17T12:24:29.392 [DEBUG] [Thread-54220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:24:29.392 [DEBUG] [Thread-54220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:24:29.392 [DEBUG] [Thread-54220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:24:29.392 [DEBUG] [Thread-54220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:24:29.416 [INFO] [Thread-54220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:24:29.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:24:30.041 [DEBUG] [Thread-54220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:24:30.041 [DEBUG] [Thread-54220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:24:30.041 [DEBUG] [Thread-54220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:24:30.082 [DEBUG] [Thread-54220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:24:30.082 [DEBUG] [Thread-54220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:24:30.085 [DEBUG] [Thread-54220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:24:30.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:24:30.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:24:30.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:24:30.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:24:30.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:24:30.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:24:30.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:24:30.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:24:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:24:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.433381 -999.00  +21.80  21.23     23   +0.10 1 1 1 1 1   888    0 21.63 32.93 ----- 21.2 21.2 325.6 21.8 28.6 -25.1 27.7 -24.2 27.4 -22.7 28.3 -23.1
2025-11-17T12:24:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:24:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:24:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.433381
2025-11-17T12:24:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:24:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:24:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:24:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:24:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:24:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:24:16', tmtdew=25.46, humidity=17.69, cloud=0.0, wind=12.48, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:24:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:24:30.103 [DEBUG] [Thread-54220] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:24:30.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:24:30.186 [DEBUG] [Thread-54223] [transport.py] [_log()] starting thread (client mode): 0xd31b1240
2025-11-17T12:24:30.186 [DEBUG] [Thread-54223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:24:30.200 [DEBUG] [Thread-54223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:24:30.201 [INFO] [Thread-54223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] client lang: <none>
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] server lang: <none>
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] kex follows: False
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:24:30.208 [DEBUG] [Thread-54223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:24:30.209 [DEBUG] [Thread-54223] [transport.py] [_log()] Compression: none
2025-11-17T12:24:30.209 [DEBUG] [Thread-54223] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:24:30.268 [DEBUG] [Thread-54223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:24:30.268 [DEBUG] [Thread-54223] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:24:30.269 [DEBUG] [Thread-54223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:24:30.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:24:30.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:24:30.328 [DEBUG] [Thread-54223] [transport.py] [_log()] userauth is OK
2025-11-17T12:24:30.329 [DEBUG] [Thread-54223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:24:30.329 [DEBUG] [Thread-54223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:24:30.329 [DEBUG] [Thread-54223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:24:30.329 [DEBUG] [Thread-54223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:24:30.347 [INFO] [Thread-54223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:24:30.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:24:30.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:24:31.237 [DEBUG] [Thread-54223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:24:31.237 [DEBUG] [Thread-54223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:24:31.284 [DEBUG] [Thread-54223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:24:31.284 [DEBUG] [Thread-54223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:24:31.293 [DEBUG] [Thread-54223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:24:31.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:24:31.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:24:31.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:24:31.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:24:31.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:24:31.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:24:31.327 [DEBUG] [Thread-54223] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:24:38.862 [DEBUG] [Thread-54225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:24:42.497 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:24:42.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:24:53.907 [DEBUG] [Thread-54226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:25:01.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:25:01.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:25:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:25:02.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 24, 48), 25.9, 17.48, 0.0, 11.05, 22.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:25:02.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:24:48
2025-11-17T12:25:02.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:25:02.324 [DEBUG] [Thread-54227] [transport.py] [_log()] starting thread (client mode): 0xd31535b0
2025-11-17T12:25:02.324 [DEBUG] [Thread-54227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:25:02.343 [DEBUG] [Thread-54227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:25:02.343 [INFO] [Thread-54227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] client lang: <none>
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] server lang: <none>
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] kex follows: False
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:25:02.346 [DEBUG] [Thread-54227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:25:02.347 [DEBUG] [Thread-54227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:25:02.347 [DEBUG] [Thread-54227] [transport.py] [_log()] Compression: none
2025-11-17T12:25:02.347 [DEBUG] [Thread-54227] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:25:02.361 [DEBUG] [Thread-54227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:25:02.362 [DEBUG] [Thread-54227] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:25:02.362 [DEBUG] [Thread-54227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:25:02.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:25:02.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:25:02.363 [DEBUG] [Thread-54227] [transport.py] [_log()] userauth is OK
2025-11-17T12:25:02.363 [DEBUG] [Thread-54227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:25:02.363 [DEBUG] [Thread-54227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:25:02.363 [DEBUG] [Thread-54227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:25:02.363 [DEBUG] [Thread-54227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:25:02.379 [INFO] [Thread-54227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:25:02.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:25:07.742 [DEBUG] [Thread-54227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:25:07.742 [DEBUG] [Thread-54227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:25:07.743 [DEBUG] [Thread-54227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:25:07.783 [DEBUG] [Thread-54227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:25:07.784 [DEBUG] [Thread-54227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:25:07.786 [DEBUG] [Thread-54227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:25:07.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:25:07.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:25:07.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:25:07.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:25:07.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:25:07.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:25:07.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:25:07.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:25:07.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:25:07.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.433728 -999.00  +21.60  15.39     24   +0.20 1 1 1 1 1   888    0 21.39 39.87 ----- 15.4 15.4 319.1 23.0 28.6 -24.9 27.7 -24.5 27.4 -23.3 28.2 -22.9
2025-11-17T12:25:07.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:25:07.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:25:07.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.433728
2025-11-17T12:25:07.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:25:07.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:25:07.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:25:07.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:25:07.933 [DEBUG] [Thread-54227] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:25:07.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:25:07.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:24:48', tmtdew=25.9, humidity=17.48, cloud=0.0, wind=11.05, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:24:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:25:08.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:25:08.019 [DEBUG] [Thread-54230] [transport.py] [_log()] starting thread (client mode): 0xd0758610
2025-11-17T12:25:08.019 [DEBUG] [Thread-54230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:25:08.037 [DEBUG] [Thread-54230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:25:08.037 [INFO] [Thread-54230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:25:08.044 [DEBUG] [Thread-54230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] client lang: <none>
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] server lang: <none>
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] kex follows: False
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:25:08.045 [DEBUG] [Thread-54230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:25:08.046 [DEBUG] [Thread-54230] [transport.py] [_log()] Compression: none
2025-11-17T12:25:08.046 [DEBUG] [Thread-54230] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:25:08.105 [DEBUG] [Thread-54230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:25:08.105 [DEBUG] [Thread-54230] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:25:08.106 [DEBUG] [Thread-54230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:25:08.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:25:08.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:25:08.165 [DEBUG] [Thread-54230] [transport.py] [_log()] userauth is OK
2025-11-17T12:25:08.165 [DEBUG] [Thread-54230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:25:08.165 [DEBUG] [Thread-54230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:25:08.165 [DEBUG] [Thread-54230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:25:08.165 [DEBUG] [Thread-54230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:25:08.186 [INFO] [Thread-54230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:25:08.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:25:08.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:25:08.940 [DEBUG] [Thread-54232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:25:09.171 [DEBUG] [Thread-54230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:25:09.172 [DEBUG] [Thread-54230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:25:09.219 [DEBUG] [Thread-54230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:25:09.219 [DEBUG] [Thread-54230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:25:09.228 [DEBUG] [Thread-54230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:25:09.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:25:09.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:25:09.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:25:09.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:25:09.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:25:09.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:25:09.262 [DEBUG] [Thread-54230] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:25:09.720 [DEBUG] [Thread-54233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:25:23.978 [DEBUG] [Thread-54234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:25:39.014 [DEBUG] [Thread-54235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:25:39.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:25:39.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:25:39.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:25:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 25, 20), 25.88, 17.51, 0.0, 9.94, 22.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:25:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:25:20
2025-11-17T12:25:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:25:40.231 [DEBUG] [Thread-54236] [transport.py] [_log()] starting thread (client mode): 0xd0759450
2025-11-17T12:25:40.231 [DEBUG] [Thread-54236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:25:40.251 [DEBUG] [Thread-54236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:25:40.251 [INFO] [Thread-54236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] client lang: <none>
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] server lang: <none>
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] kex follows: False
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] Compression: none
2025-11-17T12:25:40.254 [DEBUG] [Thread-54236] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:25:40.272 [DEBUG] [Thread-54236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:25:40.272 [DEBUG] [Thread-54236] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:25:40.272 [DEBUG] [Thread-54236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:25:40.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:25:40.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:25:40.316 [DEBUG] [Thread-54236] [transport.py] [_log()] userauth is OK
2025-11-17T12:25:40.316 [DEBUG] [Thread-54236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:25:40.316 [DEBUG] [Thread-54236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:25:40.316 [DEBUG] [Thread-54236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:25:40.316 [DEBUG] [Thread-54236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:25:40.343 [INFO] [Thread-54236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:25:40.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:25:40.983 [DEBUG] [Thread-54236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:25:40.983 [DEBUG] [Thread-54236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:25:40.983 [DEBUG] [Thread-54236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:25:41.024 [DEBUG] [Thread-54236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:25:41.024 [DEBUG] [Thread-54236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:25:41.026 [DEBUG] [Thread-54236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:25:41.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:25:41.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:25:41.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:25:41.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:25:41.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:25:41.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:25:41.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:25:41.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:25:41.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:25:41.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.434075 -999.00  +22.00  17.55     24   +0.40 1 1 1 1 1   888    0 22.33 40.48 ----- 17.6 17.6 328.4 18.8 28.8 -24.4 27.8 -23.8 27.5 -22.7 28.3 -23.3
2025-11-17T12:25:41.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:25:41.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:25:41.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.434075
2025-11-17T12:25:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:25:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:25:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:25:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:25:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:25:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:25:20', tmtdew=25.88, humidity=17.51, cloud=0.0, wind=9.94, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:25:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:25:41.046 [DEBUG] [Thread-54236] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:25:41.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:25:41.130 [DEBUG] [Thread-54239] [transport.py] [_log()] starting thread (client mode): 0xd07cf700
2025-11-17T12:25:41.131 [DEBUG] [Thread-54239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:25:41.146 [DEBUG] [Thread-54239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:25:41.146 [INFO] [Thread-54239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] client lang: <none>
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] server lang: <none>
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] kex follows: False
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] Compression: none
2025-11-17T12:25:41.154 [DEBUG] [Thread-54239] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:25:41.215 [DEBUG] [Thread-54239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:25:41.216 [DEBUG] [Thread-54239] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:25:41.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:25:41.216 [DEBUG] [Thread-54239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:25:41.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:25:41.272 [DEBUG] [Thread-54239] [transport.py] [_log()] userauth is OK
2025-11-17T12:25:41.272 [DEBUG] [Thread-54239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:25:41.272 [DEBUG] [Thread-54239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:25:41.272 [DEBUG] [Thread-54239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:25:41.272 [DEBUG] [Thread-54239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:25:41.287 [INFO] [Thread-54239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:25:41.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:25:41.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:25:42.197 [DEBUG] [Thread-54239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:25:42.197 [DEBUG] [Thread-54239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:25:42.245 [DEBUG] [Thread-54239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:25:42.245 [DEBUG] [Thread-54239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:25:42.253 [DEBUG] [Thread-54239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:25:42.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:25:42.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:25:42.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:25:42.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:25:42.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:25:42.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:25:42.284 [DEBUG] [Thread-54239] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:25:42.639 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:25:42.640 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:25:54.042 [DEBUG] [Thread-54241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:26:09.075 [DEBUG] [Thread-54242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:26:09.774 [DEBUG] [Thread-54243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:26:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:26:12.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:26:12.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:26:12.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 25, 52), 26.01, 17.06, 0.0, 13.01, 22.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:26:12.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:25:52
2025-11-17T12:26:13.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:26:13.225 [DEBUG] [Thread-54244] [transport.py] [_log()] starting thread (client mode): 0xd075ae30
2025-11-17T12:26:13.225 [DEBUG] [Thread-54244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:26:13.237 [DEBUG] [Thread-54244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:26:13.237 [INFO] [Thread-54244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:26:13.238 [DEBUG] [Thread-54244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:26:13.238 [DEBUG] [Thread-54244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] client lang: <none>
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] server lang: <none>
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] kex follows: False
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] Compression: none
2025-11-17T12:26:13.239 [DEBUG] [Thread-54244] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:26:13.248 [DEBUG] [Thread-54244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:26:13.249 [DEBUG] [Thread-54244] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:26:13.249 [DEBUG] [Thread-54244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:26:13.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:26:13.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:26:13.250 [DEBUG] [Thread-54244] [transport.py] [_log()] userauth is OK
2025-11-17T12:26:13.250 [DEBUG] [Thread-54244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:26:13.250 [DEBUG] [Thread-54244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:26:13.250 [DEBUG] [Thread-54244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:26:13.250 [DEBUG] [Thread-54244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:26:13.264 [INFO] [Thread-54244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:26:13.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:26:14.053 [DEBUG] [Thread-54244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:26:14.053 [DEBUG] [Thread-54244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:26:14.053 [DEBUG] [Thread-54244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:26:14.093 [DEBUG] [Thread-54244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:26:14.093 [DEBUG] [Thread-54244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:26:14.096 [DEBUG] [Thread-54244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:26:14.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:26:14.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:26:14.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:26:14.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:26:14.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:26:14.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:26:14.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:26:14.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.434423 -999.00  +22.00  12.55     23   +0.40 1 1 1 1 1   888    0 22.02 45.28 ----- 12.6 12.6 317.3 26.6 28.8 -24.4 27.9 -23.5 27.4 -23.1 28.4 -23.4
2025-11-17T12:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.434423
2025-11-17T12:26:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:26:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:26:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:26:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:26:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:26:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:25:52', tmtdew=26.01, humidity=17.06, cloud=0.0, wind=13.01, temperature=22.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:25:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:26:14.122 [DEBUG] [Thread-54244] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:26:14.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:26:14.218 [DEBUG] [Thread-54247] [transport.py] [_log()] starting thread (client mode): 0xd31cf0a0
2025-11-17T12:26:14.219 [DEBUG] [Thread-54247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:26:14.238 [DEBUG] [Thread-54247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:26:14.238 [INFO] [Thread-54247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:26:14.245 [DEBUG] [Thread-54247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:26:14.245 [DEBUG] [Thread-54247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] client lang: <none>
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] server lang: <none>
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] kex follows: False
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] Compression: none
2025-11-17T12:26:14.246 [DEBUG] [Thread-54247] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:26:14.304 [DEBUG] [Thread-54247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:26:14.304 [DEBUG] [Thread-54247] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:26:14.305 [DEBUG] [Thread-54247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:26:14.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:26:14.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:26:14.361 [DEBUG] [Thread-54247] [transport.py] [_log()] userauth is OK
2025-11-17T12:26:14.361 [DEBUG] [Thread-54247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:26:14.361 [DEBUG] [Thread-54247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:26:14.361 [DEBUG] [Thread-54247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:26:14.361 [DEBUG] [Thread-54247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:26:14.382 [INFO] [Thread-54247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:26:14.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:26:14.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:26:15.295 [DEBUG] [Thread-54247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:26:15.295 [DEBUG] [Thread-54247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:26:15.343 [DEBUG] [Thread-54247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:26:15.343 [DEBUG] [Thread-54247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:26:15.352 [DEBUG] [Thread-54247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:26:15.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:26:15.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:26:15.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:26:15.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:26:15.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:26:15.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:26:15.384 [DEBUG] [Thread-54247] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:26:24.101 [DEBUG] [Thread-54249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:26:39.144 [DEBUG] [Thread-54250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:26:42.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:26:42.782 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:26:45.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:26:45.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:26:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:26:46.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 26, 24), 26.0, 17.13, 0.0, 19.29, 22.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:26:46.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:26:24
2025-11-17T12:26:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:26:46.350 [DEBUG] [Thread-54251] [transport.py] [_log()] starting thread (client mode): 0xd07bd8a0
2025-11-17T12:26:46.350 [DEBUG] [Thread-54251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:26:46.370 [DEBUG] [Thread-54251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:26:46.370 [INFO] [Thread-54251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:26:46.373 [DEBUG] [Thread-54251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] client lang: <none>
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] server lang: <none>
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] kex follows: False
2025-11-17T12:26:46.374 [DEBUG] [Thread-54251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:26:46.375 [DEBUG] [Thread-54251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:26:46.375 [DEBUG] [Thread-54251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:26:46.375 [DEBUG] [Thread-54251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:26:46.375 [DEBUG] [Thread-54251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:26:46.375 [DEBUG] [Thread-54251] [transport.py] [_log()] Compression: none
2025-11-17T12:26:46.375 [DEBUG] [Thread-54251] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:26:46.385 [DEBUG] [Thread-54251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:26:46.386 [DEBUG] [Thread-54251] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:26:46.386 [DEBUG] [Thread-54251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:26:46.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:26:46.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:26:46.389 [DEBUG] [Thread-54251] [transport.py] [_log()] userauth is OK
2025-11-17T12:26:46.389 [DEBUG] [Thread-54251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:26:46.389 [DEBUG] [Thread-54251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:26:46.390 [DEBUG] [Thread-54251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:26:46.390 [DEBUG] [Thread-54251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:26:46.410 [INFO] [Thread-54251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:26:46.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:26:47.027 [DEBUG] [Thread-54251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:26:47.027 [DEBUG] [Thread-54251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:26:47.027 [DEBUG] [Thread-54251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:26:47.068 [DEBUG] [Thread-54251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:26:47.069 [DEBUG] [Thread-54251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:26:47.072 [DEBUG] [Thread-54251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:26:47.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:26:47.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:26:47.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:26:47.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:26:47.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:26:47.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:26:47.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:26:47.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:26:47.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:26:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.434770 -999.00  +21.80  18.62     24   +0.40 1 1 1 1 1   888    0 22.00 43.51 ----- 18.6 18.6 276.5 24.4 28.8 -24.5 27.9 -23.8 27.4 -22.7 28.4 -23.8
2025-11-17T12:26:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:26:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:26:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.434770
2025-11-17T12:26:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:26:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:26:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:26:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:26:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:26:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:26:24', tmtdew=26.0, humidity=17.13, cloud=0.0, wind=19.29, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:26:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:26:47.097 [DEBUG] [Thread-54251] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:26:47.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:26:47.193 [DEBUG] [Thread-54254] [transport.py] [_log()] starting thread (client mode): 0xd07bdf60
2025-11-17T12:26:47.193 [DEBUG] [Thread-54254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:26:47.209 [DEBUG] [Thread-54254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:26:47.209 [INFO] [Thread-54254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:26:47.216 [DEBUG] [Thread-54254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:26:47.217 [DEBUG] [Thread-54254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:26:47.217 [DEBUG] [Thread-54254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:26:47.217 [DEBUG] [Thread-54254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:26:47.217 [DEBUG] [Thread-54254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:26:47.217 [DEBUG] [Thread-54254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:26:47.217 [DEBUG] [Thread-54254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:26:47.217 [DEBUG] [Thread-54254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:26:47.217 [DEBUG] [Thread-54254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] client lang: <none>
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] server lang: <none>
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] kex follows: False
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:26:47.218 [DEBUG] [Thread-54254] [transport.py] [_log()] Compression: none
2025-11-17T12:26:47.219 [DEBUG] [Thread-54254] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:26:47.277 [DEBUG] [Thread-54254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:26:47.278 [DEBUG] [Thread-54254] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:26:47.279 [DEBUG] [Thread-54254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:26:47.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:26:47.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:26:47.333 [DEBUG] [Thread-54254] [transport.py] [_log()] userauth is OK
2025-11-17T12:26:47.333 [DEBUG] [Thread-54254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:26:47.333 [DEBUG] [Thread-54254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:26:47.333 [DEBUG] [Thread-54254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:26:47.333 [DEBUG] [Thread-54254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:26:47.353 [INFO] [Thread-54254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:26:47.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:26:47.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:26:48.279 [DEBUG] [Thread-54254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:26:48.280 [DEBUG] [Thread-54254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:26:48.327 [DEBUG] [Thread-54254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:26:48.327 [DEBUG] [Thread-54254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:26:48.336 [DEBUG] [Thread-54254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:26:48.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:26:48.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:26:48.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:26:48.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:26:48.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:26:48.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:26:48.371 [DEBUG] [Thread-54254] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:26:54.180 [DEBUG] [Thread-54256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:27:09.223 [DEBUG] [Thread-54257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:27:09.828 [DEBUG] [Thread-54258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:27:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:27:18.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:27:18.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:27:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 26, 56), 25.72, 17.43, 0.0, 21.21, 22.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:27:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:26:56
2025-11-17T12:27:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:27:19.290 [DEBUG] [Thread-54259] [transport.py] [_log()] starting thread (client mode): 0xd31ccdc0
2025-11-17T12:27:19.290 [DEBUG] [Thread-54259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:27:19.311 [DEBUG] [Thread-54259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:27:19.311 [INFO] [Thread-54259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:27:19.312 [DEBUG] [Thread-54259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:27:19.312 [DEBUG] [Thread-54259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:27:19.312 [DEBUG] [Thread-54259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:27:19.312 [DEBUG] [Thread-54259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:27:19.312 [DEBUG] [Thread-54259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] client lang: <none>
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] server lang: <none>
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] kex follows: False
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] Compression: none
2025-11-17T12:27:19.313 [DEBUG] [Thread-54259] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:27:19.330 [DEBUG] [Thread-54259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:27:19.331 [DEBUG] [Thread-54259] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:27:19.331 [DEBUG] [Thread-54259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:27:19.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:27:19.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:27:19.333 [DEBUG] [Thread-54259] [transport.py] [_log()] userauth is OK
2025-11-17T12:27:19.334 [DEBUG] [Thread-54259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:27:19.334 [DEBUG] [Thread-54259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:27:19.334 [DEBUG] [Thread-54259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:27:19.334 [DEBUG] [Thread-54259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:27:19.357 [INFO] [Thread-54259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:27:19.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:27:20.139 [DEBUG] [Thread-54259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:27:20.139 [DEBUG] [Thread-54259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:27:20.139 [DEBUG] [Thread-54259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:27:20.180 [DEBUG] [Thread-54259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:27:20.180 [DEBUG] [Thread-54259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:27:20.183 [DEBUG] [Thread-54259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:27:20.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:27:20.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:27:20.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:27:20.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:27:20.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:27:20.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:27:20.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:27:20.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:27:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:27:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.435117 -999.00  +21.80  28.66     24   +0.40 1 1 1 1 1   888    0 22.36 47.96 ----- 28.7 28.7 315.6 34.7 28.7 -25.1 27.8 -23.6 27.3 -23.5 28.4 -23.1
2025-11-17T12:27:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:27:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:27:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.435117
2025-11-17T12:27:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:27:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:27:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:27:20.209 [DEBUG] [Thread-54259] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:27:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:27:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:27:20.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:26:56', tmtdew=25.72, humidity=17.43, cloud=0.0, wind=21.21, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:26:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:27:20.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:27:20.316 [DEBUG] [Thread-54262] [transport.py] [_log()] starting thread (client mode): 0xd0759330
2025-11-17T12:27:20.316 [DEBUG] [Thread-54262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:27:20.331 [DEBUG] [Thread-54262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:27:20.331 [INFO] [Thread-54262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] client lang: <none>
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] server lang: <none>
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] kex follows: False
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:27:20.339 [DEBUG] [Thread-54262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:27:20.340 [DEBUG] [Thread-54262] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:27:20.340 [DEBUG] [Thread-54262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:27:20.340 [DEBUG] [Thread-54262] [transport.py] [_log()] Compression: none
2025-11-17T12:27:20.340 [DEBUG] [Thread-54262] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:27:20.396 [DEBUG] [Thread-54262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:27:20.397 [DEBUG] [Thread-54262] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:27:20.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:27:20.397 [DEBUG] [Thread-54262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:27:20.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:27:20.453 [DEBUG] [Thread-54262] [transport.py] [_log()] userauth is OK
2025-11-17T12:27:20.453 [DEBUG] [Thread-54262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:27:20.453 [DEBUG] [Thread-54262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:27:20.453 [DEBUG] [Thread-54262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:27:20.453 [DEBUG] [Thread-54262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:27:20.472 [INFO] [Thread-54262] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:27:20.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:27:20.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:27:21.316 [DEBUG] [Thread-54262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:27:21.317 [DEBUG] [Thread-54262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:27:21.364 [DEBUG] [Thread-54262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:27:21.364 [DEBUG] [Thread-54262] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:27:21.373 [DEBUG] [Thread-54262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:27:21.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:27:21.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:27:21.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:27:21.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:27:21.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:27:21.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:27:21.407 [DEBUG] [Thread-54262] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:27:24.255 [DEBUG] [Thread-54264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:27:39.297 [DEBUG] [Thread-54265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:27:42.923 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:27:42.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:27:51.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:27:51.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:27:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:27:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 27, 28), 25.77, 17.36, 0.0, 20.13, 22.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:27:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:27:28
2025-11-17T12:27:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:27:52.353 [DEBUG] [Thread-54266] [transport.py] [_log()] starting thread (client mode): 0xd075a6e0
2025-11-17T12:27:52.353 [DEBUG] [Thread-54266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:27:52.373 [DEBUG] [Thread-54266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:27:52.374 [INFO] [Thread-54266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:27:52.376 [DEBUG] [Thread-54266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:27:52.376 [DEBUG] [Thread-54266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] client lang: <none>
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] server lang: <none>
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] kex follows: False
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] Compression: none
2025-11-17T12:27:52.377 [DEBUG] [Thread-54266] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:27:52.397 [DEBUG] [Thread-54266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:27:52.397 [DEBUG] [Thread-54266] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:27:52.398 [DEBUG] [Thread-54266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:27:52.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:27:52.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:27:52.400 [DEBUG] [Thread-54266] [transport.py] [_log()] userauth is OK
2025-11-17T12:27:52.400 [DEBUG] [Thread-54266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:27:52.400 [DEBUG] [Thread-54266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:27:52.400 [DEBUG] [Thread-54266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:27:52.400 [DEBUG] [Thread-54266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:27:52.424 [INFO] [Thread-54266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:27:52.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:27:53.063 [DEBUG] [Thread-54266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:27:53.063 [DEBUG] [Thread-54266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:27:53.064 [DEBUG] [Thread-54266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:27:53.104 [DEBUG] [Thread-54266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:27:53.105 [DEBUG] [Thread-54266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:27:53.108 [DEBUG] [Thread-54266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:27:53.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:27:53.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:27:53.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:27:53.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:27:53.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:27:53.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:27:53.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:27:53.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:27:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:27:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.435811 -999.00  +21.50  19.53     24   +0.20 1 1 1 1 1   888    0 22.02 52.52 ----- 19.5 19.5 295.9 29.6 28.6 -24.1 27.7 -23.7 27.2 -22.8 28.2 -23.8
2025-11-17T12:27:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:27:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:27:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.435811
2025-11-17T12:27:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:27:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:27:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:27:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:27:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:27:53.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:27:28', tmtdew=25.77, humidity=17.36, cloud=0.0, wind=20.13, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:27:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:27:53.126 [DEBUG] [Thread-54266] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:27:53.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:27:53.221 [DEBUG] [Thread-54269] [transport.py] [_log()] starting thread (client mode): 0xd3163100
2025-11-17T12:27:53.221 [DEBUG] [Thread-54269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:27:53.244 [DEBUG] [Thread-54269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:27:53.245 [INFO] [Thread-54269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:27:53.252 [DEBUG] [Thread-54269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:27:53.252 [DEBUG] [Thread-54269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] client lang: <none>
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] server lang: <none>
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] kex follows: False
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:27:53.253 [DEBUG] [Thread-54269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:27:53.254 [DEBUG] [Thread-54269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:27:53.254 [DEBUG] [Thread-54269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:27:53.254 [DEBUG] [Thread-54269] [transport.py] [_log()] Compression: none
2025-11-17T12:27:53.254 [DEBUG] [Thread-54269] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:27:53.312 [DEBUG] [Thread-54269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:27:53.313 [DEBUG] [Thread-54269] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:27:53.313 [DEBUG] [Thread-54269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:27:53.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:27:53.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:27:53.372 [DEBUG] [Thread-54269] [transport.py] [_log()] userauth is OK
2025-11-17T12:27:53.372 [DEBUG] [Thread-54269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:27:53.372 [DEBUG] [Thread-54269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:27:53.373 [DEBUG] [Thread-54269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:27:53.373 [DEBUG] [Thread-54269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:27:53.393 [INFO] [Thread-54269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:27:53.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:27:53.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:27:54.268 [DEBUG] [Thread-54269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:27:54.268 [DEBUG] [Thread-54269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:27:54.316 [DEBUG] [Thread-54269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:27:54.316 [DEBUG] [Thread-54269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:27:54.325 [DEBUG] [Thread-54269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:27:54.329 [DEBUG] [Thread-54271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:27:54.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:27:54.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:27:54.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:27:54.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:27:54.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:27:54.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:27:54.359 [DEBUG] [Thread-54269] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:28:09.369 [DEBUG] [Thread-54272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:28:09.882 [DEBUG] [Thread-54273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:28:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:28:24.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:28:24.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:28:24.394 [DEBUG] [Thread-54274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:28:25.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 27, 28), 25.77, 17.36, 0.0, 20.13, 22.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:28:25.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:27:28
2025-11-17T12:28:25.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:28:25.306 [DEBUG] [Thread-54275] [transport.py] [_log()] starting thread (client mode): 0xd3163e20
2025-11-17T12:28:25.306 [DEBUG] [Thread-54275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:28:25.326 [DEBUG] [Thread-54275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:28:25.326 [INFO] [Thread-54275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:28:25.330 [DEBUG] [Thread-54275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] client lang: <none>
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] server lang: <none>
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] kex follows: False
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] Compression: none
2025-11-17T12:28:25.331 [DEBUG] [Thread-54275] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:28:25.350 [DEBUG] [Thread-54275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:28:25.351 [DEBUG] [Thread-54275] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:28:25.352 [DEBUG] [Thread-54275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:28:25.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:28:25.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:28:25.354 [DEBUG] [Thread-54275] [transport.py] [_log()] userauth is OK
2025-11-17T12:28:25.354 [DEBUG] [Thread-54275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:28:25.354 [DEBUG] [Thread-54275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:28:25.355 [DEBUG] [Thread-54275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:28:25.355 [DEBUG] [Thread-54275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:28:25.369 [INFO] [Thread-54275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:28:25.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:28:25.971 [DEBUG] [Thread-54275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:28:25.971 [DEBUG] [Thread-54275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:28:25.972 [DEBUG] [Thread-54275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:28:26.012 [DEBUG] [Thread-54275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:28:26.012 [DEBUG] [Thread-54275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:28:26.015 [DEBUG] [Thread-54275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:28:26.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:28:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:28:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:28:26.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:28:26.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:28:26.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:28:26.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:28:26.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:28:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:28:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.436159 -999.00  +21.90  24.55     24   +0.60 1 1 1 1 1   888    0 21.92 51.06 ----- 24.6 24.6 325.0 29.3 28.7 -25.6 27.8 -23.8 27.4 -22.6 28.2 -23.3
2025-11-17T12:28:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:28:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:28:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.436159
2025-11-17T12:28:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:28:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:28:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:28:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:28:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:28:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:27:28', tmtdew=25.77, humidity=17.36, cloud=0.0, wind=20.13, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:28:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:28:26.037 [DEBUG] [Thread-54275] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:28:26.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:28:26.134 [DEBUG] [Thread-54278] [transport.py] [_log()] starting thread (client mode): 0xd07595d0
2025-11-17T12:28:26.134 [DEBUG] [Thread-54278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:28:26.150 [DEBUG] [Thread-54278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:28:26.150 [INFO] [Thread-54278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:28:26.157 [DEBUG] [Thread-54278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] client lang: <none>
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] server lang: <none>
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] kex follows: False
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:28:26.158 [DEBUG] [Thread-54278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:28:26.159 [DEBUG] [Thread-54278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:28:26.159 [DEBUG] [Thread-54278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:28:26.159 [DEBUG] [Thread-54278] [transport.py] [_log()] Compression: none
2025-11-17T12:28:26.159 [DEBUG] [Thread-54278] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:28:26.220 [DEBUG] [Thread-54278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:28:26.221 [DEBUG] [Thread-54278] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:28:26.221 [DEBUG] [Thread-54278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:28:26.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:28:26.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:28:26.277 [DEBUG] [Thread-54278] [transport.py] [_log()] userauth is OK
2025-11-17T12:28:26.277 [DEBUG] [Thread-54278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:28:26.277 [DEBUG] [Thread-54278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:28:26.277 [DEBUG] [Thread-54278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:28:26.277 [DEBUG] [Thread-54278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:28:26.297 [INFO] [Thread-54278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:28:26.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:28:26.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:28:27.154 [DEBUG] [Thread-54278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:28:27.154 [DEBUG] [Thread-54278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:28:27.202 [DEBUG] [Thread-54278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:28:27.203 [DEBUG] [Thread-54278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:28:27.211 [DEBUG] [Thread-54278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:28:27.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:28:27.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:28:27.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:28:27.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:28:27.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:28:27.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:28:27.246 [DEBUG] [Thread-54278] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:28:39.427 [DEBUG] [Thread-54280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:28:43.065 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:28:43.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:28:54.470 [DEBUG] [Thread-54281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:28:57.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:28:57.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:28:57.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:28:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 28, 32), 26.69, 16.76, 0.0, 25.12, 23.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:28:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:28:32
2025-11-17T12:28:58.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:28:58.191 [DEBUG] [Thread-54282] [transport.py] [_log()] starting thread (client mode): 0xd07198a0
2025-11-17T12:28:58.192 [DEBUG] [Thread-54282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:28:58.213 [DEBUG] [Thread-54282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:28:58.213 [INFO] [Thread-54282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:28:58.216 [DEBUG] [Thread-54282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] client lang: <none>
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] server lang: <none>
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] kex follows: False
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] Compression: none
2025-11-17T12:28:58.217 [DEBUG] [Thread-54282] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:28:58.234 [DEBUG] [Thread-54282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:28:58.234 [DEBUG] [Thread-54282] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:28:58.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:28:58.235 [DEBUG] [Thread-54282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:28:58.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:28:58.237 [DEBUG] [Thread-54282] [transport.py] [_log()] userauth is OK
2025-11-17T12:28:58.237 [DEBUG] [Thread-54282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:28:58.237 [DEBUG] [Thread-54282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:28:58.237 [DEBUG] [Thread-54282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:28:58.237 [DEBUG] [Thread-54282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:28:58.258 [INFO] [Thread-54282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:28:58.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:28:58.909 [DEBUG] [Thread-54282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:28:58.909 [DEBUG] [Thread-54282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:28:58.909 [DEBUG] [Thread-54282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:28:58.950 [DEBUG] [Thread-54282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:28:58.950 [DEBUG] [Thread-54282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:28:58.953 [DEBUG] [Thread-54282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:28:58.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:28:58.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:28:58.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:28:58.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:28:58.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:28:58.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:28:58.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:28:58.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:28:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:28:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.436506 -999.00  +21.50  21.97     24   +0.10 1 2 1 1 1   888    0 22.35 51.69 ----- 22.0 22.0 324.4 24.5 28.7 -24.1 27.7 -23.4 27.4 -22.3 28.3 -23.7
2025-11-17T12:28:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:28:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:28:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.436506
2025-11-17T12:28:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:28:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:28:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:28:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:28:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:28:58.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:28:32', tmtdew=26.69, humidity=16.76, cloud=0.0, wind=25.12, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:28:34.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:28:58.980 [DEBUG] [Thread-54282] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:28:59.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:28:59.077 [DEBUG] [Thread-54285] [transport.py] [_log()] starting thread (client mode): 0xd3163100
2025-11-17T12:28:59.077 [DEBUG] [Thread-54285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:28:59.092 [DEBUG] [Thread-54285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:28:59.092 [INFO] [Thread-54285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:28:59.100 [DEBUG] [Thread-54285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:28:59.100 [DEBUG] [Thread-54285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:28:59.100 [DEBUG] [Thread-54285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:28:59.100 [DEBUG] [Thread-54285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:28:59.100 [DEBUG] [Thread-54285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:28:59.100 [DEBUG] [Thread-54285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:28:59.100 [DEBUG] [Thread-54285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:28:59.100 [DEBUG] [Thread-54285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] client lang: <none>
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] server lang: <none>
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] kex follows: False
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:28:59.101 [DEBUG] [Thread-54285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:28:59.102 [DEBUG] [Thread-54285] [transport.py] [_log()] Compression: none
2025-11-17T12:28:59.102 [DEBUG] [Thread-54285] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:28:59.161 [DEBUG] [Thread-54285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:28:59.161 [DEBUG] [Thread-54285] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:28:59.162 [DEBUG] [Thread-54285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:28:59.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:28:59.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:28:59.217 [DEBUG] [Thread-54285] [transport.py] [_log()] userauth is OK
2025-11-17T12:28:59.217 [DEBUG] [Thread-54285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:28:59.217 [DEBUG] [Thread-54285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:28:59.217 [DEBUG] [Thread-54285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:28:59.217 [DEBUG] [Thread-54285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:28:59.237 [INFO] [Thread-54285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:28:59.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:28:59.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:29:00.105 [DEBUG] [Thread-54285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:29:00.105 [DEBUG] [Thread-54285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:29:00.152 [DEBUG] [Thread-54285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:29:00.152 [DEBUG] [Thread-54285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:29:00.161 [DEBUG] [Thread-54285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:29:00.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:29:00.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:29:00.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:29:00.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:29:00.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:29:00.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:29:00.203 [DEBUG] [Thread-54285] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:29:09.498 [DEBUG] [Thread-54287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:29:09.938 [DEBUG] [Thread-54288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:29:24.537 [DEBUG] [Thread-54289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:29:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:29:30.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:29:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:29:30.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 29, 4), 25.46, 17.98, 0.0, 14.87, 22.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:29:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:29:04
2025-11-17T12:29:31.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:29:31.209 [DEBUG] [Thread-54290] [transport.py] [_log()] starting thread (client mode): 0xd31ee830
2025-11-17T12:29:31.209 [DEBUG] [Thread-54290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:29:31.230 [DEBUG] [Thread-54290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:29:31.230 [INFO] [Thread-54290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] client lang: <none>
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] server lang: <none>
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] kex follows: False
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] Compression: none
2025-11-17T12:29:31.233 [DEBUG] [Thread-54290] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:29:31.251 [DEBUG] [Thread-54290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:29:31.251 [DEBUG] [Thread-54290] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:29:31.251 [DEBUG] [Thread-54290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:29:31.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:29:31.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:29:31.252 [DEBUG] [Thread-54290] [transport.py] [_log()] userauth is OK
2025-11-17T12:29:31.252 [DEBUG] [Thread-54290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:29:31.252 [DEBUG] [Thread-54290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:29:31.252 [DEBUG] [Thread-54290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:29:31.252 [DEBUG] [Thread-54290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:29:31.278 [INFO] [Thread-54290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:29:31.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:29:31.878 [DEBUG] [Thread-54290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:29:31.878 [DEBUG] [Thread-54290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:29:31.878 [DEBUG] [Thread-54290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:29:31.919 [DEBUG] [Thread-54290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:29:31.919 [DEBUG] [Thread-54290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:29:31.921 [DEBUG] [Thread-54290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:29:31.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:29:31.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:29:31.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:29:31.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:29:31.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:29:31.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:29:31.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.436853 -999.00  +21.40  19.19     24   +0.10 1 1 1 1 1   888    0 22.28 49.02 ----- 19.2 19.2 321.0 26.4 28.7 -24.1 27.7 -25.0 27.5 -23.4 28.3 -23.0
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.436853
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:29:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:29:04', tmtdew=25.46, humidity=17.98, cloud=0.0, wind=14.87, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:29:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:29:31.941 [DEBUG] [Thread-54290] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:29:32.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:29:32.026 [DEBUG] [Thread-54293] [transport.py] [_log()] starting thread (client mode): 0xd07bdfc0
2025-11-17T12:29:32.026 [DEBUG] [Thread-54293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:29:32.041 [DEBUG] [Thread-54293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:29:32.041 [INFO] [Thread-54293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] client lang: <none>
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] server lang: <none>
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] kex follows: False
2025-11-17T12:29:32.048 [DEBUG] [Thread-54293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:29:32.049 [DEBUG] [Thread-54293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:29:32.049 [DEBUG] [Thread-54293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:29:32.049 [DEBUG] [Thread-54293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:29:32.049 [DEBUG] [Thread-54293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:29:32.049 [DEBUG] [Thread-54293] [transport.py] [_log()] Compression: none
2025-11-17T12:29:32.049 [DEBUG] [Thread-54293] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:29:32.103 [DEBUG] [Thread-54293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:29:32.103 [DEBUG] [Thread-54293] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:29:32.103 [DEBUG] [Thread-54293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:29:32.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:29:32.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:29:32.160 [DEBUG] [Thread-54293] [transport.py] [_log()] userauth is OK
2025-11-17T12:29:32.160 [DEBUG] [Thread-54293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:29:32.160 [DEBUG] [Thread-54293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:29:32.160 [DEBUG] [Thread-54293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:29:32.160 [DEBUG] [Thread-54293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:29:32.174 [INFO] [Thread-54293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:29:32.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:29:32.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:29:33.066 [DEBUG] [Thread-54293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:29:33.067 [DEBUG] [Thread-54293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:29:33.114 [DEBUG] [Thread-54293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:29:33.114 [DEBUG] [Thread-54293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:29:33.122 [DEBUG] [Thread-54293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:29:33.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:29:33.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:29:33.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:29:33.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:29:33.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:29:33.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:29:33.153 [DEBUG] [Thread-54293] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:29:39.568 [DEBUG] [Thread-54295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:29:43.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:29:43.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:29:54.617 [DEBUG] [Thread-54296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:30:03.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:30:03.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:30:03.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:30:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 29, 36), 25.55, 17.59, 0.0, 19.07, 22.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:30:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:29:36
2025-11-17T12:30:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:30:04.088 [DEBUG] [Thread-54297] [transport.py] [_log()] starting thread (client mode): 0xd31cc6a0
2025-11-17T12:30:04.088 [DEBUG] [Thread-54297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:30:04.107 [DEBUG] [Thread-54297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:30:04.107 [INFO] [Thread-54297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] client lang: <none>
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] server lang: <none>
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] kex follows: False
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] Compression: none
2025-11-17T12:30:04.109 [DEBUG] [Thread-54297] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:30:04.120 [DEBUG] [Thread-54297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:30:04.121 [DEBUG] [Thread-54297] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:30:04.121 [DEBUG] [Thread-54297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:30:04.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:30:04.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:30:04.122 [DEBUG] [Thread-54297] [transport.py] [_log()] userauth is OK
2025-11-17T12:30:04.123 [DEBUG] [Thread-54297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:30:04.123 [DEBUG] [Thread-54297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:30:04.123 [DEBUG] [Thread-54297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:30:04.123 [DEBUG] [Thread-54297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:30:04.135 [INFO] [Thread-54297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:30:04.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:30:05.089 [DEBUG] [Thread-54297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:30:05.089 [DEBUG] [Thread-54297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:30:05.089 [DEBUG] [Thread-54297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:30:05.130 [DEBUG] [Thread-54297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:30:05.131 [DEBUG] [Thread-54297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:30:05.133 [DEBUG] [Thread-54297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:30:05.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:30:05.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:30:05.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:30:05.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:30:05.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:30:05.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:30:05.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:30:05.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:30:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:30:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.437201 -999.00  +21.20  11.67     24   +0.30 1 1 1 1 1   888    0 22.76 48.97 ----- 11.7 11.7 339.8 22.5 28.7 -25.0 27.6 -24.2 27.4 -22.7 28.3 -23.3
2025-11-17T12:30:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:30:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:30:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.437201
2025-11-17T12:30:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:30:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:30:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:30:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:30:05.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:30:05.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:29:36', tmtdew=25.55, humidity=17.59, cloud=0.0, wind=19.07, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:29:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:30:05.160 [DEBUG] [Thread-54297] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:30:05.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:30:05.256 [DEBUG] [Thread-54300] [transport.py] [_log()] starting thread (client mode): 0xd31ce1d0
2025-11-17T12:30:05.256 [DEBUG] [Thread-54300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:30:05.271 [DEBUG] [Thread-54300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:30:05.271 [INFO] [Thread-54300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:30:05.279 [DEBUG] [Thread-54300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:30:05.279 [DEBUG] [Thread-54300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:30:05.279 [DEBUG] [Thread-54300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:30:05.279 [DEBUG] [Thread-54300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:30:05.279 [DEBUG] [Thread-54300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:30:05.279 [DEBUG] [Thread-54300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] client lang: <none>
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] server lang: <none>
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] kex follows: False
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:30:05.280 [DEBUG] [Thread-54300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:30:05.281 [DEBUG] [Thread-54300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:30:05.281 [DEBUG] [Thread-54300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:30:05.281 [DEBUG] [Thread-54300] [transport.py] [_log()] Compression: none
2025-11-17T12:30:05.281 [DEBUG] [Thread-54300] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:30:05.341 [DEBUG] [Thread-54300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:30:05.342 [DEBUG] [Thread-54300] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:30:05.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:30:05.343 [DEBUG] [Thread-54300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:30:05.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:30:05.399 [DEBUG] [Thread-54300] [transport.py] [_log()] userauth is OK
2025-11-17T12:30:05.399 [DEBUG] [Thread-54300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:30:05.399 [DEBUG] [Thread-54300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:30:05.399 [DEBUG] [Thread-54300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:30:05.399 [DEBUG] [Thread-54300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:30:05.413 [INFO] [Thread-54300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:30:05.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:30:05.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:30:06.267 [DEBUG] [Thread-54300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:30:06.267 [DEBUG] [Thread-54300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:30:06.315 [DEBUG] [Thread-54300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:30:06.315 [DEBUG] [Thread-54300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:30:06.325 [DEBUG] [Thread-54300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:30:06.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:30:06.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:30:06.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:30:06.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:30:06.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:30:06.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:30:06.363 [DEBUG] [Thread-54300] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:30:09.646 [DEBUG] [Thread-54302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:30:09.989 [DEBUG] [Thread-54303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:30:24.678 [DEBUG] [Thread-54304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:30:36.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:30:36.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:30:36.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:30:37.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 30, 8), 25.24, 17.94, 0.0, 17.27, 21.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:30:37.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:30:08
2025-11-17T12:30:37.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:30:37.309 [DEBUG] [Thread-54305] [transport.py] [_log()] starting thread (client mode): 0xd07cc760
2025-11-17T12:30:37.309 [DEBUG] [Thread-54305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:30:37.330 [DEBUG] [Thread-54305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:30:37.330 [INFO] [Thread-54305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:30:37.333 [DEBUG] [Thread-54305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:30:37.333 [DEBUG] [Thread-54305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:30:37.333 [DEBUG] [Thread-54305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:30:37.333 [DEBUG] [Thread-54305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] client lang: <none>
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] server lang: <none>
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] kex follows: False
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] Compression: none
2025-11-17T12:30:37.334 [DEBUG] [Thread-54305] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:30:37.353 [DEBUG] [Thread-54305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:30:37.353 [DEBUG] [Thread-54305] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:30:37.354 [DEBUG] [Thread-54305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:30:37.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:30:37.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:30:37.356 [DEBUG] [Thread-54305] [transport.py] [_log()] userauth is OK
2025-11-17T12:30:37.356 [DEBUG] [Thread-54305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:30:37.356 [DEBUG] [Thread-54305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:30:37.356 [DEBUG] [Thread-54305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:30:37.356 [DEBUG] [Thread-54305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:30:37.380 [INFO] [Thread-54305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:30:37.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:30:37.974 [DEBUG] [Thread-54305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:30:37.974 [DEBUG] [Thread-54305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:30:37.975 [DEBUG] [Thread-54305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:30:38.015 [DEBUG] [Thread-54305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:30:38.016 [DEBUG] [Thread-54305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:30:38.019 [DEBUG] [Thread-54305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:30:38.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:30:38.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:30:38.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:30:38.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:30:38.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:30:38.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:30:38.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:30:38.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:30:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:30:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.437548 -999.00  +21.50  19.29     24   +0.50 1 1 1 1 1   888    0 22.67 48.51 ----- 19.3 19.3 308.4 23.4 28.6 -24.8 27.8 -24.7 27.5 -23.8 28.1 -23.3
2025-11-17T12:30:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:30:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:30:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.437548
2025-11-17T12:30:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:30:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:30:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:30:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:30:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:30:38.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:30:08', tmtdew=25.24, humidity=17.94, cloud=0.0, wind=17.27, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:30:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:30:38.045 [DEBUG] [Thread-54305] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:30:38.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:30:38.141 [DEBUG] [Thread-54308] [transport.py] [_log()] starting thread (client mode): 0xd3160a60
2025-11-17T12:30:38.141 [DEBUG] [Thread-54308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:30:38.155 [DEBUG] [Thread-54308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:30:38.156 [INFO] [Thread-54308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:30:38.163 [DEBUG] [Thread-54308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:30:38.163 [DEBUG] [Thread-54308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] client lang: <none>
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] server lang: <none>
2025-11-17T12:30:38.164 [DEBUG] [Thread-54308] [transport.py] [_log()] kex follows: False
2025-11-17T12:30:38.165 [DEBUG] [Thread-54308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:30:38.165 [DEBUG] [Thread-54308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:30:38.165 [DEBUG] [Thread-54308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:30:38.165 [DEBUG] [Thread-54308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:30:38.165 [DEBUG] [Thread-54308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:30:38.165 [DEBUG] [Thread-54308] [transport.py] [_log()] Compression: none
2025-11-17T12:30:38.165 [DEBUG] [Thread-54308] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:30:38.225 [DEBUG] [Thread-54308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:30:38.225 [DEBUG] [Thread-54308] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:30:38.226 [DEBUG] [Thread-54308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:30:38.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:30:38.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:30:38.281 [DEBUG] [Thread-54308] [transport.py] [_log()] userauth is OK
2025-11-17T12:30:38.281 [DEBUG] [Thread-54308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:30:38.281 [DEBUG] [Thread-54308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:30:38.281 [DEBUG] [Thread-54308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:30:38.281 [DEBUG] [Thread-54308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:30:38.300 [INFO] [Thread-54308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:30:38.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:30:38.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:30:39.245 [DEBUG] [Thread-54308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:30:39.246 [DEBUG] [Thread-54308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:30:39.293 [DEBUG] [Thread-54308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:30:39.293 [DEBUG] [Thread-54308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:30:39.302 [DEBUG] [Thread-54308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:30:39.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:30:39.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:30:39.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:30:39.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:30:39.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:30:39.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:30:39.337 [DEBUG] [Thread-54308] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:30:39.707 [DEBUG] [Thread-54310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:30:43.350 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:30:43.351 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:30:54.745 [DEBUG] [Thread-54311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:31:09.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:31:09.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:31:09.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:31:09.773 [DEBUG] [Thread-54312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:31:10.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 30, 40), 24.68, 18.94, 0.0, 12.23, 21.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:31:10.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:30:40
2025-11-17T12:31:10.036 [DEBUG] [Thread-54313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:31:10.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:31:10.296 [DEBUG] [Thread-54314] [transport.py] [_log()] starting thread (client mode): 0xd07cd6c0
2025-11-17T12:31:10.296 [DEBUG] [Thread-54314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:31:10.312 [DEBUG] [Thread-54314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:31:10.312 [INFO] [Thread-54314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:31:10.315 [DEBUG] [Thread-54314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:31:10.315 [DEBUG] [Thread-54314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:31:10.315 [DEBUG] [Thread-54314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] client lang: <none>
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] server lang: <none>
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] kex follows: False
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] Compression: none
2025-11-17T12:31:10.316 [DEBUG] [Thread-54314] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:31:10.330 [DEBUG] [Thread-54314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:31:10.331 [DEBUG] [Thread-54314] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:31:10.331 [DEBUG] [Thread-54314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:31:10.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:31:10.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:31:10.333 [DEBUG] [Thread-54314] [transport.py] [_log()] userauth is OK
2025-11-17T12:31:10.333 [DEBUG] [Thread-54314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:31:10.333 [DEBUG] [Thread-54314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:31:10.333 [DEBUG] [Thread-54314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:31:10.333 [DEBUG] [Thread-54314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:31:10.346 [INFO] [Thread-54314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:31:10.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:31:10.961 [DEBUG] [Thread-54314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:31:10.962 [DEBUG] [Thread-54314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:31:10.962 [DEBUG] [Thread-54314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:31:11.002 [DEBUG] [Thread-54314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:31:11.002 [DEBUG] [Thread-54314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:31:11.005 [DEBUG] [Thread-54314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:31:11.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:31:11.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:31:11.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:31:11.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:31:11.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:31:11.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:31:11.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:31:11.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:31:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:31:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.437895 -999.00  +21.20  15.04     24   +0.30 1 1 1 1 1   888    0 22.38 51.48 ----- 15.0 15.0 323.8 20.6 28.7 -25.0 27.8 -23.6 27.5 -23.8 28.3 -23.5
2025-11-17T12:31:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:31:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:31:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.437895
2025-11-17T12:31:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:31:11.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:31:11.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:31:11.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:31:11.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:31:11.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:30:40', tmtdew=24.68, humidity=18.94, cloud=0.0, wind=12.23, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:30:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:31:11.030 [DEBUG] [Thread-54314] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:31:11.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:31:11.127 [DEBUG] [Thread-54317] [transport.py] [_log()] starting thread (client mode): 0xd3160a60
2025-11-17T12:31:11.127 [DEBUG] [Thread-54317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:31:11.143 [DEBUG] [Thread-54317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:31:11.143 [INFO] [Thread-54317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:31:11.150 [DEBUG] [Thread-54317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:31:11.150 [DEBUG] [Thread-54317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] client lang: <none>
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] server lang: <none>
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] kex follows: False
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:31:11.151 [DEBUG] [Thread-54317] [transport.py] [_log()] Compression: none
2025-11-17T12:31:11.152 [DEBUG] [Thread-54317] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:31:11.213 [DEBUG] [Thread-54317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:31:11.214 [DEBUG] [Thread-54317] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:31:11.214 [DEBUG] [Thread-54317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:31:11.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:31:11.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:31:11.273 [DEBUG] [Thread-54317] [transport.py] [_log()] userauth is OK
2025-11-17T12:31:11.273 [DEBUG] [Thread-54317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:31:11.273 [DEBUG] [Thread-54317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:31:11.273 [DEBUG] [Thread-54317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:31:11.274 [DEBUG] [Thread-54317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:31:11.292 [INFO] [Thread-54317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:31:11.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:31:11.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:31:12.131 [DEBUG] [Thread-54317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:31:12.131 [DEBUG] [Thread-54317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:31:12.179 [DEBUG] [Thread-54317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:31:12.179 [DEBUG] [Thread-54317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:31:12.188 [DEBUG] [Thread-54317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:31:12.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:31:12.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:31:12.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:31:12.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:31:12.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:31:12.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:31:12.224 [DEBUG] [Thread-54317] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:31:24.801 [DEBUG] [Thread-54319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:31:39.832 [DEBUG] [Thread-54320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:31:42.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:31:42.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:31:42.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:31:42.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 31, 12), 24.41, 19.27, 0.0, 14.63, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:31:42.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:31:12
2025-11-17T12:31:43.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:31:43.175 [DEBUG] [Thread-54321] [transport.py] [_log()] starting thread (client mode): 0xd07bfdc0
2025-11-17T12:31:43.175 [DEBUG] [Thread-54321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:31:43.196 [DEBUG] [Thread-54321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:31:43.196 [INFO] [Thread-54321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:31:43.199 [DEBUG] [Thread-54321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:31:43.199 [DEBUG] [Thread-54321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:31:43.199 [DEBUG] [Thread-54321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:31:43.199 [DEBUG] [Thread-54321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:31:43.199 [DEBUG] [Thread-54321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:31:43.199 [DEBUG] [Thread-54321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] client lang: <none>
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] server lang: <none>
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] kex follows: False
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] Compression: none
2025-11-17T12:31:43.200 [DEBUG] [Thread-54321] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:31:43.218 [DEBUG] [Thread-54321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:31:43.218 [DEBUG] [Thread-54321] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:31:43.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:31:43.219 [DEBUG] [Thread-54321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:31:43.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:31:43.221 [DEBUG] [Thread-54321] [transport.py] [_log()] userauth is OK
2025-11-17T12:31:43.221 [DEBUG] [Thread-54321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:31:43.222 [DEBUG] [Thread-54321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:31:43.222 [DEBUG] [Thread-54321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:31:43.222 [DEBUG] [Thread-54321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:31:43.239 [INFO] [Thread-54321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:31:43.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:31:43.492 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:31:43.494 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:31:43.899 [DEBUG] [Thread-54321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:31:43.899 [DEBUG] [Thread-54321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:31:43.899 [DEBUG] [Thread-54321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:31:43.939 [DEBUG] [Thread-54321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:31:43.939 [DEBUG] [Thread-54321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:31:43.942 [DEBUG] [Thread-54321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:31:43.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:31:43.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:31:43.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:31:43.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:31:43.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:31:43.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:31:43.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:31:43.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:31:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:31:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.438242 -999.00  +21.20  13.61     25   +0.40 1 1 1 1 1   888    0 22.12 49.29 ----- 13.6 13.6 5.8 17.1 28.8 -24.5 27.9 -24.1 27.5 -22.6 28.4 -23.3
2025-11-17T12:31:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:31:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:31:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.438242
2025-11-17T12:31:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:31:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:31:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:31:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:31:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:31:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:31:12', tmtdew=24.41, humidity=19.27, cloud=0.0, wind=14.63, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:31:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:31:43.967 [DEBUG] [Thread-54321] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:31:44.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:31:44.064 [DEBUG] [Thread-54324] [transport.py] [_log()] starting thread (client mode): 0xd07cf2b0
2025-11-17T12:31:44.064 [DEBUG] [Thread-54324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:31:44.078 [DEBUG] [Thread-54324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:31:44.079 [INFO] [Thread-54324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] client lang: <none>
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] server lang: <none>
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] kex follows: False
2025-11-17T12:31:44.086 [DEBUG] [Thread-54324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:31:44.087 [DEBUG] [Thread-54324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:31:44.087 [DEBUG] [Thread-54324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:31:44.087 [DEBUG] [Thread-54324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:31:44.087 [DEBUG] [Thread-54324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:31:44.087 [DEBUG] [Thread-54324] [transport.py] [_log()] Compression: none
2025-11-17T12:31:44.087 [DEBUG] [Thread-54324] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:31:44.144 [DEBUG] [Thread-54324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:31:44.144 [DEBUG] [Thread-54324] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:31:44.145 [DEBUG] [Thread-54324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:31:44.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:31:44.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:31:44.206 [DEBUG] [Thread-54324] [transport.py] [_log()] userauth is OK
2025-11-17T12:31:44.206 [DEBUG] [Thread-54324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:31:44.206 [DEBUG] [Thread-54324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:31:44.206 [DEBUG] [Thread-54324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:31:44.206 [DEBUG] [Thread-54324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:31:44.225 [INFO] [Thread-54324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:31:44.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:31:44.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:31:45.081 [DEBUG] [Thread-54324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:31:45.081 [DEBUG] [Thread-54324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:31:45.132 [DEBUG] [Thread-54324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:31:45.132 [DEBUG] [Thread-54324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:31:45.140 [DEBUG] [Thread-54324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:31:45.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:31:45.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:31:45.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:31:45.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:31:45.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:31:45.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:31:45.172 [DEBUG] [Thread-54324] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:31:54.864 [DEBUG] [Thread-54326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:32:09.914 [DEBUG] [Thread-54327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:32:10.088 [DEBUG] [Thread-54328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:32:15.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:32:15.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:32:15.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:32:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 31, 44), 24.54, 19.22, 0.0, 8.61, 21.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:32:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:31:44
2025-11-17T12:32:15.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:32:16.125 [DEBUG] [Thread-54329] [transport.py] [_log()] starting thread (client mode): 0xd31b1180
2025-11-17T12:32:16.125 [DEBUG] [Thread-54329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:32:16.144 [DEBUG] [Thread-54329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:32:16.144 [INFO] [Thread-54329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] client lang: <none>
2025-11-17T12:32:16.147 [DEBUG] [Thread-54329] [transport.py] [_log()] server lang: <none>
2025-11-17T12:32:16.148 [DEBUG] [Thread-54329] [transport.py] [_log()] kex follows: False
2025-11-17T12:32:16.148 [DEBUG] [Thread-54329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:32:16.148 [DEBUG] [Thread-54329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:32:16.148 [DEBUG] [Thread-54329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:32:16.148 [DEBUG] [Thread-54329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:32:16.148 [DEBUG] [Thread-54329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:32:16.148 [DEBUG] [Thread-54329] [transport.py] [_log()] Compression: none
2025-11-17T12:32:16.148 [DEBUG] [Thread-54329] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:32:16.165 [DEBUG] [Thread-54329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:32:16.165 [DEBUG] [Thread-54329] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:32:16.166 [DEBUG] [Thread-54329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:32:16.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:32:16.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:32:16.168 [DEBUG] [Thread-54329] [transport.py] [_log()] userauth is OK
2025-11-17T12:32:16.168 [DEBUG] [Thread-54329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:32:16.168 [DEBUG] [Thread-54329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:32:16.168 [DEBUG] [Thread-54329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:32:16.168 [DEBUG] [Thread-54329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:32:16.203 [INFO] [Thread-54329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:32:16.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:32:16.843 [DEBUG] [Thread-54329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:32:16.844 [DEBUG] [Thread-54329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:32:16.844 [DEBUG] [Thread-54329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:32:16.884 [DEBUG] [Thread-54329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:32:16.884 [DEBUG] [Thread-54329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:32:16.887 [DEBUG] [Thread-54329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:32:16.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:32:16.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:32:16.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:32:16.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:32:16.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:32:16.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:32:16.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:32:16.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:32:16.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:32:16.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.438937 -999.00  +21.00  10.14     25   +0.40 1 2 1 1 1   888    0 22.57 49.03 ----- 10.1 10.1 22.6 16.2 28.7 -25.7 27.8 -23.0 27.6 -22.0 28.3 -23.2
2025-11-17T12:32:16.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:32:16.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:32:16.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.438937
2025-11-17T12:32:16.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:32:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:32:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:32:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:32:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:32:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:31:44', tmtdew=24.54, humidity=19.22, cloud=0.0, wind=8.61, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:32:04.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:32:16.906 [DEBUG] [Thread-54329] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:32:16.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:32:17.002 [DEBUG] [Thread-54332] [transport.py] [_log()] starting thread (client mode): 0xd07cc040
2025-11-17T12:32:17.002 [DEBUG] [Thread-54332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:32:17.016 [DEBUG] [Thread-54332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:32:17.016 [INFO] [Thread-54332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:32:17.024 [DEBUG] [Thread-54332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] client lang: <none>
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] server lang: <none>
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] kex follows: False
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] Compression: none
2025-11-17T12:32:17.025 [DEBUG] [Thread-54332] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:32:17.080 [DEBUG] [Thread-54332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:32:17.081 [DEBUG] [Thread-54332] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:32:17.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:32:17.081 [DEBUG] [Thread-54332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:32:17.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:32:17.136 [DEBUG] [Thread-54332] [transport.py] [_log()] userauth is OK
2025-11-17T12:32:17.136 [DEBUG] [Thread-54332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:32:17.136 [DEBUG] [Thread-54332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:32:17.136 [DEBUG] [Thread-54332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:32:17.136 [DEBUG] [Thread-54332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:32:17.151 [INFO] [Thread-54332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:32:17.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:32:17.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:32:17.997 [DEBUG] [Thread-54332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:32:17.998 [DEBUG] [Thread-54332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:32:18.046 [DEBUG] [Thread-54332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:32:18.046 [DEBUG] [Thread-54332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:32:18.054 [DEBUG] [Thread-54332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:32:18.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:32:18.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:32:18.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:32:18.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:32:18.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:32:18.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:32:18.085 [DEBUG] [Thread-54332] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:32:24.944 [DEBUG] [Thread-54334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:32:39.995 [DEBUG] [Thread-54335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:32:43.635 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:32:43.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:32:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:32:48.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:32:48.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:32:48.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 32, 16), 24.6, 19.16, 0.0, 9.55, 21.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:32:48.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:32:16
2025-11-17T12:32:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:32:49.026 [DEBUG] [Thread-54336] [transport.py] [_log()] starting thread (client mode): 0xd071a0b0
2025-11-17T12:32:49.026 [DEBUG] [Thread-54336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:32:49.045 [DEBUG] [Thread-54336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:32:49.045 [INFO] [Thread-54336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:32:49.048 [DEBUG] [Thread-54336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:32:49.048 [DEBUG] [Thread-54336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:32:49.048 [DEBUG] [Thread-54336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] client lang: <none>
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] server lang: <none>
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] kex follows: False
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] Compression: none
2025-11-17T12:32:49.049 [DEBUG] [Thread-54336] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:32:49.069 [DEBUG] [Thread-54336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:32:49.069 [DEBUG] [Thread-54336] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:32:49.069 [DEBUG] [Thread-54336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:32:49.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:32:49.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:32:49.070 [DEBUG] [Thread-54336] [transport.py] [_log()] userauth is OK
2025-11-17T12:32:49.070 [DEBUG] [Thread-54336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:32:49.070 [DEBUG] [Thread-54336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:32:49.070 [DEBUG] [Thread-54336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:32:49.070 [DEBUG] [Thread-54336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:32:49.084 [INFO] [Thread-54336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:32:49.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:32:49.710 [DEBUG] [Thread-54336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:32:49.710 [DEBUG] [Thread-54336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:32:49.710 [DEBUG] [Thread-54336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:32:49.751 [DEBUG] [Thread-54336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:32:49.751 [DEBUG] [Thread-54336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:32:49.753 [DEBUG] [Thread-54336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:32:49.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:32:49.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:32:49.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:32:49.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:32:49.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:32:49.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:32:49.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:32:49.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:32:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:32:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.439284 -999.00  +21.40  15.26     25   +0.70 1 1 1 1 1   888    0 22.03 45.66 ----- 15.3 15.3 287.0 17.6 28.8 -23.4 27.9 -23.1 27.6 -23.3 28.3 -23.5
2025-11-17T12:32:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:32:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:32:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.439284
2025-11-17T12:32:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:32:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:32:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:32:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:32:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:32:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:32:16', tmtdew=24.6, humidity=19.16, cloud=0.0, wind=9.55, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:32:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:32:49.771 [DEBUG] [Thread-54336] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:32:49.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:32:49.858 [DEBUG] [Thread-54339] [transport.py] [_log()] starting thread (client mode): 0xd071b2e0
2025-11-17T12:32:49.858 [DEBUG] [Thread-54339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:32:49.873 [DEBUG] [Thread-54339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:32:49.873 [INFO] [Thread-54339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] client lang: <none>
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] server lang: <none>
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] kex follows: False
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] Compression: none
2025-11-17T12:32:49.881 [DEBUG] [Thread-54339] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:32:49.943 [DEBUG] [Thread-54339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:32:49.943 [DEBUG] [Thread-54339] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:32:49.944 [DEBUG] [Thread-54339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:32:49.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:32:49.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:32:50.004 [DEBUG] [Thread-54339] [transport.py] [_log()] userauth is OK
2025-11-17T12:32:50.004 [DEBUG] [Thread-54339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:32:50.004 [DEBUG] [Thread-54339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:32:50.004 [DEBUG] [Thread-54339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:32:50.004 [DEBUG] [Thread-54339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:32:50.021 [INFO] [Thread-54339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:32:50.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:32:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:32:50.895 [DEBUG] [Thread-54339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:32:50.895 [DEBUG] [Thread-54339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:32:50.943 [DEBUG] [Thread-54339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:32:50.943 [DEBUG] [Thread-54339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:32:50.951 [DEBUG] [Thread-54339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:32:50.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:32:50.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:32:50.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:32:50.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:32:50.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:32:50.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:32:50.984 [DEBUG] [Thread-54339] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:32:55.026 [DEBUG] [Thread-54341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:33:10.082 [DEBUG] [Thread-54342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:33:10.139 [DEBUG] [Thread-54343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:33:21.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:33:21.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:33:21.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:33:21.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 32, 48), 24.73, 18.92, 0.0, 17.4, 21.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:33:21.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:32:48
2025-11-17T12:33:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:33:22.027 [DEBUG] [Thread-54344] [transport.py] [_log()] starting thread (client mode): 0xd07198a0
2025-11-17T12:33:22.027 [DEBUG] [Thread-54344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:33:22.042 [DEBUG] [Thread-54344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:33:22.042 [INFO] [Thread-54344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] client lang: <none>
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] server lang: <none>
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] kex follows: False
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] Compression: none
2025-11-17T12:33:22.045 [DEBUG] [Thread-54344] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:33:22.052 [DEBUG] [Thread-54344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:33:22.052 [DEBUG] [Thread-54344] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:33:22.052 [DEBUG] [Thread-54344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:33:22.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:33:22.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:33:22.053 [DEBUG] [Thread-54344] [transport.py] [_log()] userauth is OK
2025-11-17T12:33:22.053 [DEBUG] [Thread-54344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:33:22.053 [DEBUG] [Thread-54344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:33:22.053 [DEBUG] [Thread-54344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:33:22.053 [DEBUG] [Thread-54344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:33:22.063 [INFO] [Thread-54344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:33:22.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:33:22.715 [DEBUG] [Thread-54344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:33:22.715 [DEBUG] [Thread-54344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:33:22.715 [DEBUG] [Thread-54344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:33:22.756 [DEBUG] [Thread-54344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:33:22.756 [DEBUG] [Thread-54344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:33:22.758 [DEBUG] [Thread-54344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:33:22.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:33:22.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:33:22.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:33:22.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:33:22.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:33:22.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:33:22.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:33:22.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:33:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:33:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.439631 -999.00  +21.90  20.69     24   +0.90 1 2 1 1 1   888    0 22.01 42.62 ----- 20.7 20.7 310.4 22.6 28.9 -24.1 28.0 -23.2 27.6 -22.1 28.4 -22.6
2025-11-17T12:33:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:33:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:33:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.439631
2025-11-17T12:33:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:33:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:33:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:33:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:33:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:33:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:32:48', tmtdew=24.73, humidity=18.92, cloud=0.0, wind=17.4, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:33:04.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:33:22.776 [DEBUG] [Thread-54344] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:33:22.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:33:22.862 [DEBUG] [Thread-54347] [transport.py] [_log()] starting thread (client mode): 0xd071bc40
2025-11-17T12:33:22.862 [DEBUG] [Thread-54347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:33:22.877 [DEBUG] [Thread-54347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:33:22.877 [INFO] [Thread-54347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] client lang: <none>
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] server lang: <none>
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] kex follows: False
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] Compression: none
2025-11-17T12:33:22.884 [DEBUG] [Thread-54347] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:33:22.943 [DEBUG] [Thread-54347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:33:22.943 [DEBUG] [Thread-54347] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:33:22.944 [DEBUG] [Thread-54347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:33:22.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:33:22.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:33:23.001 [DEBUG] [Thread-54347] [transport.py] [_log()] userauth is OK
2025-11-17T12:33:23.001 [DEBUG] [Thread-54347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:33:23.001 [DEBUG] [Thread-54347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:33:23.001 [DEBUG] [Thread-54347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:33:23.001 [DEBUG] [Thread-54347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:33:23.015 [INFO] [Thread-54347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:33:23.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:33:23.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:33:23.863 [DEBUG] [Thread-54347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:33:23.864 [DEBUG] [Thread-54347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:33:23.911 [DEBUG] [Thread-54347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:33:23.911 [DEBUG] [Thread-54347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:33:23.919 [DEBUG] [Thread-54347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:33:23.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:33: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')
2025-11-17T12:33:23.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:33:23.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:33:23.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:33:23.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:33:23.952 [DEBUG] [Thread-54347] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:33:25.109 [DEBUG] [Thread-54349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:33:40.152 [DEBUG] [Thread-54350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:33:43.777 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:33:43.778 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:33:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:33:53.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:33:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:33:54.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 33, 20), 24.76, 18.86, 0.0, 17.71, 21.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:33:54.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:33:20
2025-11-17T12:33:54.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:33:54.955 [DEBUG] [Thread-54351] [transport.py] [_log()] starting thread (client mode): 0xd07cee60
2025-11-17T12:33:54.955 [DEBUG] [Thread-54351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:33:54.970 [DEBUG] [Thread-54351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:33:54.970 [INFO] [Thread-54351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:33:54.973 [DEBUG] [Thread-54351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] client lang: <none>
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] server lang: <none>
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] kex follows: False
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] Compression: none
2025-11-17T12:33:54.974 [DEBUG] [Thread-54351] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:33:54.985 [DEBUG] [Thread-54351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:33:54.985 [DEBUG] [Thread-54351] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:33:54.986 [DEBUG] [Thread-54351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:33:54.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:33:54.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:33:54.986 [DEBUG] [Thread-54351] [transport.py] [_log()] userauth is OK
2025-11-17T12:33:54.986 [DEBUG] [Thread-54351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:33:54.986 [DEBUG] [Thread-54351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:33:54.986 [DEBUG] [Thread-54351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:33:54.986 [DEBUG] [Thread-54351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:33:54.999 [INFO] [Thread-54351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:33:54.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:33:55.182 [DEBUG] [Thread-54353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:33:55.605 [DEBUG] [Thread-54351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:33:55.606 [DEBUG] [Thread-54351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:33:55.606 [DEBUG] [Thread-54351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:33:55.646 [DEBUG] [Thread-54351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:33:55.647 [DEBUG] [Thread-54351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:33:55.649 [DEBUG] [Thread-54351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:33:55.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:33:55.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:33:55.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:33:55.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:33:55.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:33:55.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:33:55.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:33:55.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:33:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:33:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.439978 -999.00  +22.00  16.06     24   +0.50 1 1 1 1 1   888    0 22.07 41.77 ----- 16.1 16.1 326.7 24.0 28.9 -23.6 27.8 -25.1 27.6 -25.0 28.6 -22.6
2025-11-17T12:33:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:33:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:33:55.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.439978
2025-11-17T12:33:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:33:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:33:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:33:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:33:55.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:33:55.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:33:20', tmtdew=24.76, humidity=18.86, cloud=0.0, wind=17.71, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:33:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:33:55.678 [DEBUG] [Thread-54351] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:33:55.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:33:55.774 [DEBUG] [Thread-54355] [transport.py] [_log()] starting thread (client mode): 0xd075bfa0
2025-11-17T12:33:55.774 [DEBUG] [Thread-54355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:33:55.789 [DEBUG] [Thread-54355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:33:55.789 [INFO] [Thread-54355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:33:55.797 [DEBUG] [Thread-54355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:33:55.797 [DEBUG] [Thread-54355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:33:55.797 [DEBUG] [Thread-54355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:33:55.797 [DEBUG] [Thread-54355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:33:55.797 [DEBUG] [Thread-54355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:33:55.797 [DEBUG] [Thread-54355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:33:55.797 [DEBUG] [Thread-54355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:33:55.798 [DEBUG] [Thread-54355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:33:55.798 [DEBUG] [Thread-54355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:33:55.798 [DEBUG] [Thread-54355] [transport.py] [_log()] client lang: <none>
2025-11-17T12:33:55.798 [DEBUG] [Thread-54355] [transport.py] [_log()] server lang: <none>
2025-11-17T12:33:55.798 [DEBUG] [Thread-54355] [transport.py] [_log()] kex follows: False
2025-11-17T12:33:55.798 [DEBUG] [Thread-54355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:33:55.798 [DEBUG] [Thread-54355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:33:55.798 [DEBUG] [Thread-54355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:33:55.799 [DEBUG] [Thread-54355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:33:55.799 [DEBUG] [Thread-54355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:33:55.799 [DEBUG] [Thread-54355] [transport.py] [_log()] Compression: none
2025-11-17T12:33:55.799 [DEBUG] [Thread-54355] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:33:55.860 [DEBUG] [Thread-54355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:33:55.860 [DEBUG] [Thread-54355] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:33:55.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:33:55.861 [DEBUG] [Thread-54355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:33:55.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:33:55.916 [DEBUG] [Thread-54355] [transport.py] [_log()] userauth is OK
2025-11-17T12:33:55.917 [DEBUG] [Thread-54355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:33:55.917 [DEBUG] [Thread-54355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:33:55.917 [DEBUG] [Thread-54355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:33:55.917 [DEBUG] [Thread-54355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:33:55.936 [INFO] [Thread-54355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:33:55.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:33:55.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:33:56.802 [DEBUG] [Thread-54355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:33:56.802 [DEBUG] [Thread-54355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:33:56.849 [DEBUG] [Thread-54355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:33:56.849 [DEBUG] [Thread-54355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:33:56.858 [DEBUG] [Thread-54355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:33:56.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:33:56.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:33:56.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:33:56.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:33:56.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:33:56.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:33:56.891 [DEBUG] [Thread-54355] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:34:10.183 [DEBUG] [Thread-54357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:34:10.215 [DEBUG] [Thread-54358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:34:25.258 [DEBUG] [Thread-54359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:34:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:34:26.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:34:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:34:27.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 33, 53), 24.64, 18.85, 0.0, 18.55, 21.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:34:27.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:33:53
2025-11-17T12:34:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:34:27.834 [DEBUG] [Thread-54360] [transport.py] [_log()] starting thread (client mode): 0xd0785e70
2025-11-17T12:34:27.834 [DEBUG] [Thread-54360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:34:27.855 [DEBUG] [Thread-54360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:34:27.855 [INFO] [Thread-54360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:34:27.856 [DEBUG] [Thread-54360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] client lang: <none>
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] server lang: <none>
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] kex follows: False
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] Compression: none
2025-11-17T12:34:27.857 [DEBUG] [Thread-54360] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:34:27.866 [DEBUG] [Thread-54360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:34:27.866 [DEBUG] [Thread-54360] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:34:27.867 [DEBUG] [Thread-54360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:34:27.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:34:27.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:34:27.868 [DEBUG] [Thread-54360] [transport.py] [_log()] userauth is OK
2025-11-17T12:34:27.868 [DEBUG] [Thread-54360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:34:27.868 [DEBUG] [Thread-54360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:34:27.869 [DEBUG] [Thread-54360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:34:27.869 [DEBUG] [Thread-54360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:34:27.886 [INFO] [Thread-54360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:34:27.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:34:28.469 [DEBUG] [Thread-54360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:34:28.470 [DEBUG] [Thread-54360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:34:28.470 [DEBUG] [Thread-54360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:34:28.510 [DEBUG] [Thread-54360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:34:28.510 [DEBUG] [Thread-54360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:34:28.513 [DEBUG] [Thread-54360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:34:28.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:34:28.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:34:28.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:34:28.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:34:28.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:34:28.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:34:28.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:34:28.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:34:28.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:34:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.440326 -999.00  +21.80  16.16     24   +0.60 1 2 1 1 1   888    0 22.26 40.38 ----- 16.2 16.2 337.6 25.1 28.7 -24.7 27.8 -23.4 27.6 -22.6 28.3 -22.7
2025-11-17T12:34:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:34:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:34:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.440326
2025-11-17T12:34:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:34:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:34:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:34:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:34:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:34:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:33:53', tmtdew=24.64, humidity=18.85, cloud=0.0, wind=18.55, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:34:04.166', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:34:28.539 [DEBUG] [Thread-54360] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:34:28.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:34:28.634 [DEBUG] [Thread-54363] [transport.py] [_log()] starting thread (client mode): 0xd31b2050
2025-11-17T12:34:28.634 [DEBUG] [Thread-54363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:34:28.649 [DEBUG] [Thread-54363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:34:28.649 [INFO] [Thread-54363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:34:28.656 [DEBUG] [Thread-54363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:34:28.656 [DEBUG] [Thread-54363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] client lang: <none>
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] server lang: <none>
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] kex follows: False
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] Compression: none
2025-11-17T12:34:28.657 [DEBUG] [Thread-54363] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:34:28.718 [DEBUG] [Thread-54363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:34:28.718 [DEBUG] [Thread-54363] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:34:28.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:34:28.719 [DEBUG] [Thread-54363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:34:28.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:34:28.781 [DEBUG] [Thread-54363] [transport.py] [_log()] userauth is OK
2025-11-17T12:34:28.781 [DEBUG] [Thread-54363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:34:28.781 [DEBUG] [Thread-54363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:34:28.781 [DEBUG] [Thread-54363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:34:28.781 [DEBUG] [Thread-54363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:34:28.800 [INFO] [Thread-54363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:34:28.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:34:28.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:34:29.701 [DEBUG] [Thread-54363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:34:29.710 [DEBUG] [Thread-54363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:34:29.750 [DEBUG] [Thread-54363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:34:29.750 [DEBUG] [Thread-54363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:34:29.759 [DEBUG] [Thread-54363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:34:29.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:34:29.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:34:29.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:34:29.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:34:29.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:34:29.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:34:29.791 [DEBUG] [Thread-54363] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:34:40.286 [DEBUG] [Thread-54365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:34:43.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:34:43.917 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:34:55.321 [DEBUG] [Thread-54366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:34:59.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:34:59.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:34:59.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:35:00.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 34, 57), 24.55, 18.94, 0.0, 21.28, 21.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:35:00.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:34:57
2025-11-17T12:35:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:35:00.752 [DEBUG] [Thread-54367] [transport.py] [_log()] starting thread (client mode): 0xd31cf250
2025-11-17T12:35:00.752 [DEBUG] [Thread-54367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:35:00.772 [DEBUG] [Thread-54367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:35:00.772 [INFO] [Thread-54367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:35:00.774 [DEBUG] [Thread-54367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] client lang: <none>
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] server lang: <none>
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] kex follows: False
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] Compression: none
2025-11-17T12:35:00.775 [DEBUG] [Thread-54367] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:35:00.797 [DEBUG] [Thread-54367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:35:00.797 [DEBUG] [Thread-54367] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:35:00.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:35:00.798 [DEBUG] [Thread-54367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:35:00.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:35:00.799 [DEBUG] [Thread-54367] [transport.py] [_log()] userauth is OK
2025-11-17T12:35:00.799 [DEBUG] [Thread-54367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:35:00.800 [DEBUG] [Thread-54367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:35:00.800 [DEBUG] [Thread-54367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:35:00.800 [DEBUG] [Thread-54367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:35:00.816 [INFO] [Thread-54367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:35:00.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:35:01.437 [DEBUG] [Thread-54367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:35:01.437 [DEBUG] [Thread-54367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:35:01.437 [DEBUG] [Thread-54367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:35:01.478 [DEBUG] [Thread-54367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:35:01.478 [DEBUG] [Thread-54367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:35:01.480 [DEBUG] [Thread-54367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:35:01.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:35:01.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:35:01.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:35:01.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:35:01.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:35:01.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:35:01.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:35:01.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:35:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:35:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.440673 -999.00  +22.50  22.46     24   +1.10 1 1 1 1 1   888    0 22.36 41.87 ----- 22.5 22.5 310.8 32.3 28.8 -24.0 27.9 -23.6 27.6 -25.6 28.4 -22.5
2025-11-17T12:35:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:35:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:35:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.440673
2025-11-17T12:35:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:35:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:35:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:35:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:35:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:35:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:34:57', tmtdew=24.55, humidity=18.94, cloud=0.0, wind=21.28, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:34:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:35:01.502 [DEBUG] [Thread-54367] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:35:01.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:35:01.590 [DEBUG] [Thread-54370] [transport.py] [_log()] starting thread (client mode): 0xd0721c60
2025-11-17T12:35:01.590 [DEBUG] [Thread-54370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:35:01.604 [DEBUG] [Thread-54370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:35:01.604 [INFO] [Thread-54370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] client lang: <none>
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] server lang: <none>
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] kex follows: False
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] Compression: none
2025-11-17T12:35:01.612 [DEBUG] [Thread-54370] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:35:01.671 [DEBUG] [Thread-54370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:35:01.671 [DEBUG] [Thread-54370] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:35:01.671 [DEBUG] [Thread-54370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:35:01.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:35:01.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:35:01.729 [DEBUG] [Thread-54370] [transport.py] [_log()] userauth is OK
2025-11-17T12:35:01.729 [DEBUG] [Thread-54370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:35:01.729 [DEBUG] [Thread-54370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:35:01.729 [DEBUG] [Thread-54370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:35:01.729 [DEBUG] [Thread-54370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:35:01.752 [INFO] [Thread-54370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:35:01.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:35:01.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:35:02.640 [DEBUG] [Thread-54370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:35:02.640 [DEBUG] [Thread-54370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:35:02.688 [DEBUG] [Thread-54370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:35:02.689 [DEBUG] [Thread-54370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:35:02.698 [DEBUG] [Thread-54370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:35:02.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:35:02.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:35:02.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:35:02.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:35:02.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:35:02.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:35:02.733 [DEBUG] [Thread-54370] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:35:10.238 [DEBUG] [Thread-54372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:35:10.353 [DEBUG] [Thread-54373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:35:25.392 [DEBUG] [Thread-54374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:35:32.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:35:32.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:35:32.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:35:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 35, 29), 24.47, 19.05, 0.0, 18.47, 21.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:35:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:35:29
2025-11-17T12:35:33.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:35:33.684 [DEBUG] [Thread-54375] [transport.py] [_log()] starting thread (client mode): 0xd31b04c0
2025-11-17T12:35:33.684 [DEBUG] [Thread-54375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:35:33.698 [DEBUG] [Thread-54375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:35:33.699 [INFO] [Thread-54375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] client lang: <none>
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] server lang: <none>
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] kex follows: False
2025-11-17T12:35:33.702 [DEBUG] [Thread-54375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:35:33.703 [DEBUG] [Thread-54375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:35:33.703 [DEBUG] [Thread-54375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:35:33.703 [DEBUG] [Thread-54375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:35:33.703 [DEBUG] [Thread-54375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:35:33.703 [DEBUG] [Thread-54375] [transport.py] [_log()] Compression: none
2025-11-17T12:35:33.703 [DEBUG] [Thread-54375] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:35:33.719 [DEBUG] [Thread-54375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:35:33.720 [DEBUG] [Thread-54375] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:35:33.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:35:33.721 [DEBUG] [Thread-54375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:35:33.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:35:33.723 [DEBUG] [Thread-54375] [transport.py] [_log()] userauth is OK
2025-11-17T12:35:33.723 [DEBUG] [Thread-54375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:35:33.723 [DEBUG] [Thread-54375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:35:33.723 [DEBUG] [Thread-54375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:35:33.723 [DEBUG] [Thread-54375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:35:33.746 [INFO] [Thread-54375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:35:33.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:35:34.371 [DEBUG] [Thread-54375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:35:34.371 [DEBUG] [Thread-54375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:35:34.372 [DEBUG] [Thread-54375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:35:34.418 [DEBUG] [Thread-54375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:35:34.418 [DEBUG] [Thread-54375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:35:34.420 [DEBUG] [Thread-54375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:35:34.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:35:34.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:35:34.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:35:34.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:35:34.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:35:34.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:35:34.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:35:34.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:35:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:35:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.440673 -999.00  +22.50  22.46     24   +1.10 1 1 1 1 1   888    0 22.36 41.87 ----- 22.5 22.5 310.8 32.3 28.8 -24.0 27.9 -23.6 27.6 -25.6 28.4 -22.5
2025-11-17T12:35:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:35:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:35:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.440673
2025-11-17T12:35:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:35:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:35:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:35:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:35:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:35:34.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:35:29', tmtdew=24.47, humidity=19.05, cloud=0.0, wind=18.47, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:34:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:35:34.445 [DEBUG] [Thread-54375] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:35:34.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:35:34.540 [DEBUG] [Thread-54378] [transport.py] [_log()] starting thread (client mode): 0xd31b16c0
2025-11-17T12:35:34.540 [DEBUG] [Thread-54378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:35:34.555 [DEBUG] [Thread-54378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:35:34.556 [INFO] [Thread-54378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:35:34.563 [DEBUG] [Thread-54378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] client lang: <none>
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] server lang: <none>
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] kex follows: False
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] Compression: none
2025-11-17T12:35:34.564 [DEBUG] [Thread-54378] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:35:34.620 [DEBUG] [Thread-54378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:35:34.620 [DEBUG] [Thread-54378] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:35:34.621 [DEBUG] [Thread-54378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:35:34.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:35:34.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:35:34.677 [DEBUG] [Thread-54378] [transport.py] [_log()] userauth is OK
2025-11-17T12:35:34.677 [DEBUG] [Thread-54378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:35:34.677 [DEBUG] [Thread-54378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:35:34.677 [DEBUG] [Thread-54378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:35:34.677 [DEBUG] [Thread-54378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:35:34.696 [INFO] [Thread-54378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:35:34.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:35:34.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:35:35.534 [DEBUG] [Thread-54378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:35:35.534 [DEBUG] [Thread-54378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:35:35.582 [DEBUG] [Thread-54378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:35:35.582 [DEBUG] [Thread-54378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:35:35.591 [DEBUG] [Thread-54378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:35:35.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:35:35.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:35:35.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:35:35.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:35:35.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:35:35.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:35:35.627 [DEBUG] [Thread-54378] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:35:40.423 [DEBUG] [Thread-54380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:35:44.059 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:35:44.061 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:35:55.463 [DEBUG] [Thread-54381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:36:05.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:36:05.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:36:05.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:36:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 36, 1), 24.6, 18.92, 0.0, 17.24, 21.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:36:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:36:01
2025-11-17T12:36:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:36:06.568 [DEBUG] [Thread-54382] [transport.py] [_log()] starting thread (client mode): 0xd0721660
2025-11-17T12:36:06.568 [DEBUG] [Thread-54382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:36:06.588 [DEBUG] [Thread-54382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:36:06.589 [INFO] [Thread-54382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] client lang: <none>
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] server lang: <none>
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] kex follows: False
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] Compression: none
2025-11-17T12:36:06.592 [DEBUG] [Thread-54382] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:36:06.610 [DEBUG] [Thread-54382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:36:06.611 [DEBUG] [Thread-54382] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:36:06.611 [DEBUG] [Thread-54382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:36:06.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:36:06.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:36:06.613 [DEBUG] [Thread-54382] [transport.py] [_log()] userauth is OK
2025-11-17T12:36:06.613 [DEBUG] [Thread-54382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:36:06.613 [DEBUG] [Thread-54382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:36:06.613 [DEBUG] [Thread-54382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:36:06.613 [DEBUG] [Thread-54382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:36:06.649 [INFO] [Thread-54382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:36:06.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:36:07.286 [DEBUG] [Thread-54382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:36:07.286 [DEBUG] [Thread-54382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:36:07.287 [DEBUG] [Thread-54382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:36:07.328 [DEBUG] [Thread-54382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:36:07.328 [DEBUG] [Thread-54382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:36:07.331 [DEBUG] [Thread-54382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:36:07.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:36:07.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:36:07.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:36:07.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:36:07.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:36:07.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:36:07.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:36:07.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:36:07.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:36:07.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.441367 -999.00  +21.30  12.70     25   +0.70 1 1 1 1 1   888    0 21.78 42.70 ----- 12.7 12.7 338.1 17.5 28.6 -24.8 27.6 -24.1 27.5 -22.8 28.2 -26.3
2025-11-17T12:36:07.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:36:07.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:36:07.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.441367
2025-11-17T12:36:07.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:36:07.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:36:07.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:36:07.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:36:07.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:36:07.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:36:01', tmtdew=24.6, humidity=18.92, cloud=0.0, wind=17.24, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:35:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:36:07.355 [DEBUG] [Thread-54382] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:36:07.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:36:07.449 [DEBUG] [Thread-54385] [transport.py] [_log()] starting thread (client mode): 0xd07236a0
2025-11-17T12:36:07.449 [DEBUG] [Thread-54385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:36:07.465 [DEBUG] [Thread-54385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:36:07.465 [INFO] [Thread-54385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:36:07.472 [DEBUG] [Thread-54385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:36:07.472 [DEBUG] [Thread-54385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:36:07.473 [DEBUG] [Thread-54385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:36:07.473 [DEBUG] [Thread-54385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:36:07.473 [DEBUG] [Thread-54385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:36:07.473 [DEBUG] [Thread-54385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:36:07.473 [DEBUG] [Thread-54385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:36:07.473 [DEBUG] [Thread-54385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:36:07.473 [DEBUG] [Thread-54385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:36:07.473 [DEBUG] [Thread-54385] [transport.py] [_log()] client lang: <none>
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] server lang: <none>
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] kex follows: False
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] Compression: none
2025-11-17T12:36:07.474 [DEBUG] [Thread-54385] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:36:07.528 [DEBUG] [Thread-54385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:36:07.529 [DEBUG] [Thread-54385] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:36:07.529 [DEBUG] [Thread-54385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:36:07.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:36:07.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:36:07.585 [DEBUG] [Thread-54385] [transport.py] [_log()] userauth is OK
2025-11-17T12:36:07.585 [DEBUG] [Thread-54385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:36:07.585 [DEBUG] [Thread-54385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:36:07.585 [DEBUG] [Thread-54385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:36:07.585 [DEBUG] [Thread-54385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:36:07.606 [INFO] [Thread-54385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:36:07.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:36:07.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:36:08.463 [DEBUG] [Thread-54385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:36:08.464 [DEBUG] [Thread-54385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:36:08.511 [DEBUG] [Thread-54385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:36:08.511 [DEBUG] [Thread-54385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:36:08.521 [DEBUG] [Thread-54385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:36:08.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:36:08.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:36:08.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:36:08.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:36:08.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:36:08.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:36:08.556 [DEBUG] [Thread-54385] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:36:10.294 [DEBUG] [Thread-54387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:36:10.493 [DEBUG] [Thread-54388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:36:25.537 [DEBUG] [Thread-54389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:36:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:36:38.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:36:38.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:36:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 36, 33), 24.81, 18.84, 0.0, 18.28, 22.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:36:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:36:33
2025-11-17T12:36:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:36:39.522 [DEBUG] [Thread-54390] [transport.py] [_log()] starting thread (client mode): 0xd0721900
2025-11-17T12:36:39.522 [DEBUG] [Thread-54390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:36:39.537 [DEBUG] [Thread-54390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:36:39.537 [INFO] [Thread-54390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] client lang: <none>
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] server lang: <none>
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] kex follows: False
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] Compression: none
2025-11-17T12:36:39.539 [DEBUG] [Thread-54390] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:36:39.548 [DEBUG] [Thread-54390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:36:39.549 [DEBUG] [Thread-54390] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:36:39.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:36:39.550 [DEBUG] [Thread-54390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:36:39.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:36:39.552 [DEBUG] [Thread-54390] [transport.py] [_log()] userauth is OK
2025-11-17T12:36:39.552 [DEBUG] [Thread-54390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:36:39.552 [DEBUG] [Thread-54390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:36:39.552 [DEBUG] [Thread-54390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:36:39.553 [DEBUG] [Thread-54390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:36:39.569 [INFO] [Thread-54390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:36:39.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:36:40.140 [DEBUG] [Thread-54390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:36:40.141 [DEBUG] [Thread-54390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:36:40.141 [DEBUG] [Thread-54390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:36:40.181 [DEBUG] [Thread-54390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:36:40.182 [DEBUG] [Thread-54390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:36:40.191 [DEBUG] [Thread-54390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:36:40.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:36:40.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:36:40.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:36:40.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:36:40.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:36:40.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:36:40.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:36:40.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:36:40.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:36:40.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.441714 -999.00  +21.40  21.67     25   +0.80 1 2 1 1 1   888    0 22.23 43.45 ----- 21.7 21.7 278.9 26.4 28.6 -24.3 27.8 -23.1 27.5 -22.8 28.2 -23.0
2025-11-17T12:36:40.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:36:40.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:36:40.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.441714
2025-11-17T12:36:40.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:36:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:36:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:36:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:36:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:36:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:36:33', tmtdew=24.81, humidity=18.84, cloud=0.0, wind=18.28, temperature=22.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:36:04.090', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:36:40.213 [DEBUG] [Thread-54390] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:36:40.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:36:40.310 [DEBUG] [Thread-54393] [transport.py] [_log()] starting thread (client mode): 0xd0787be0
2025-11-17T12:36:40.310 [DEBUG] [Thread-54393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:36:40.327 [DEBUG] [Thread-54393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:36:40.327 [INFO] [Thread-54393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:36:40.334 [DEBUG] [Thread-54393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] client lang: <none>
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] server lang: <none>
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] kex follows: False
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:36:40.335 [DEBUG] [Thread-54393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:36:40.336 [DEBUG] [Thread-54393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:36:40.336 [DEBUG] [Thread-54393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:36:40.336 [DEBUG] [Thread-54393] [transport.py] [_log()] Compression: none
2025-11-17T12:36:40.336 [DEBUG] [Thread-54393] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:36:40.392 [DEBUG] [Thread-54393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:36:40.393 [DEBUG] [Thread-54393] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:36:40.393 [DEBUG] [Thread-54393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:36:40.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:36:40.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:36:40.449 [DEBUG] [Thread-54393] [transport.py] [_log()] userauth is OK
2025-11-17T12:36:40.449 [DEBUG] [Thread-54393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:36:40.449 [DEBUG] [Thread-54393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:36:40.449 [DEBUG] [Thread-54393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:36:40.449 [DEBUG] [Thread-54393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:36:40.468 [INFO] [Thread-54393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:36:40.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:36:40.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:36:40.571 [DEBUG] [Thread-54395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:36:41.379 [DEBUG] [Thread-54393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:36:41.379 [DEBUG] [Thread-54393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:36:41.427 [DEBUG] [Thread-54393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:36:41.427 [DEBUG] [Thread-54393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:36:41.436 [DEBUG] [Thread-54393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:36:41.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:36:41.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:36:41.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:36:41.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:36:41.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:36:41.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:36:41.471 [DEBUG] [Thread-54393] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:36:44.201 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:36:44.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:36:55.615 [DEBUG] [Thread-54396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:37:10.345 [DEBUG] [Thread-54397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:37:10.644 [DEBUG] [Thread-54398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:37:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:37:11.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:37:11.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:37:12.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 37, 5), 24.81, 19.01, 0.0, 18.93, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:37:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:37:05
2025-11-17T12:37:12.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:37:12.432 [DEBUG] [Thread-54399] [transport.py] [_log()] starting thread (client mode): 0xd0722890
2025-11-17T12:37:12.432 [DEBUG] [Thread-54399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:37:12.452 [DEBUG] [Thread-54399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:37:12.452 [INFO] [Thread-54399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:37:12.455 [DEBUG] [Thread-54399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] client lang: <none>
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] server lang: <none>
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] kex follows: False
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] Compression: none
2025-11-17T12:37:12.456 [DEBUG] [Thread-54399] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:37:12.474 [DEBUG] [Thread-54399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:37:12.474 [DEBUG] [Thread-54399] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:37:12.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:37:12.474 [DEBUG] [Thread-54399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:37:12.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:37:12.475 [DEBUG] [Thread-54399] [transport.py] [_log()] userauth is OK
2025-11-17T12:37:12.475 [DEBUG] [Thread-54399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:37:12.475 [DEBUG] [Thread-54399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:37:12.475 [DEBUG] [Thread-54399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:37:12.475 [DEBUG] [Thread-54399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:37:12.484 [INFO] [Thread-54399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:37:12.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:37:13.145 [DEBUG] [Thread-54399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:37:13.145 [DEBUG] [Thread-54399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:37:13.145 [DEBUG] [Thread-54399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:37:13.186 [DEBUG] [Thread-54399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:37:13.186 [DEBUG] [Thread-54399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:37:13.189 [DEBUG] [Thread-54399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:37:13.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:37:13.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:37:13.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:37:13.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:37:13.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:37:13.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:37:13.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.442062 -999.00  +21.40  19.48     24   +0.50 1 1 1 1 1   888    0 22.32 44.83 ----- 19.5 19.5 295.4 32.7 28.7 -23.8 27.7 -24.0 27.4 -25.5 28.3 -23.8
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.442062
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:37:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:37:13.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:37:05', tmtdew=24.81, humidity=19.01, cloud=0.0, wind=18.93, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:36:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:37:13.208 [DEBUG] [Thread-54399] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:37:13.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:37:13.294 [DEBUG] [Thread-54402] [transport.py] [_log()] starting thread (client mode): 0xd0723f10
2025-11-17T12:37:13.294 [DEBUG] [Thread-54402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:37:13.309 [DEBUG] [Thread-54402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:37:13.309 [INFO] [Thread-54402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:37:13.316 [DEBUG] [Thread-54402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:37:13.316 [DEBUG] [Thread-54402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:37:13.316 [DEBUG] [Thread-54402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:37:13.316 [DEBUG] [Thread-54402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:37:13.316 [DEBUG] [Thread-54402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] client lang: <none>
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] server lang: <none>
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] kex follows: False
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] Compression: none
2025-11-17T12:37:13.317 [DEBUG] [Thread-54402] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:37:13.371 [DEBUG] [Thread-54402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:37:13.371 [DEBUG] [Thread-54402] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:37:13.371 [DEBUG] [Thread-54402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:37:13.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:37:13.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:37:13.428 [DEBUG] [Thread-54402] [transport.py] [_log()] userauth is OK
2025-11-17T12:37:13.428 [DEBUG] [Thread-54402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:37:13.428 [DEBUG] [Thread-54402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:37:13.428 [DEBUG] [Thread-54402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:37:13.428 [DEBUG] [Thread-54402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:37:13.445 [INFO] [Thread-54402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:37:13.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:37:13.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:37:14.281 [DEBUG] [Thread-54402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:37:14.281 [DEBUG] [Thread-54402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:37:14.329 [DEBUG] [Thread-54402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:37:14.329 [DEBUG] [Thread-54402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:37:14.337 [DEBUG] [Thread-54402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:37:14.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:37:14.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:37:14.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:37:14.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:37:14.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:37:14.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:37:14.368 [DEBUG] [Thread-54402] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:37:25.674 [DEBUG] [Thread-54404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:37:40.717 [DEBUG] [Thread-54405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:37:44.342 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:37:44.344 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:37:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:37:44.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:37:44.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
2025-11-17T12:37:45.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 37, 37), 24.43, 19.09, 0.0, 14.22, 21.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:37:45.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:37:37
2025-11-17T12:37:45.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:37:45.308 [DEBUG] [Thread-54406] [transport.py] [_log()] starting thread (client mode): 0xd07218a0
2025-11-17T12:37:45.308 [DEBUG] [Thread-54406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:37:45.320 [DEBUG] [Thread-54406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:37:45.320 [INFO] [Thread-54406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] client lang: <none>
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] server lang: <none>
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] kex follows: False
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] Compression: none
2025-11-17T12:37:45.322 [DEBUG] [Thread-54406] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:37:45.333 [DEBUG] [Thread-54406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:37:45.334 [DEBUG] [Thread-54406] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:37:45.334 [DEBUG] [Thread-54406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:37:45.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:37:45.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:37:45.335 [DEBUG] [Thread-54406] [transport.py] [_log()] userauth is OK
2025-11-17T12:37:45.335 [DEBUG] [Thread-54406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:37:45.335 [DEBUG] [Thread-54406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:37:45.335 [DEBUG] [Thread-54406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:37:45.335 [DEBUG] [Thread-54406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:37:45.349 [INFO] [Thread-54406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:37:45.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:37:45.904 [DEBUG] [Thread-54406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:37:45.905 [DEBUG] [Thread-54406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:37:45.905 [DEBUG] [Thread-54406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:37:45.945 [DEBUG] [Thread-54406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:37:45.945 [DEBUG] [Thread-54406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:37:45.948 [DEBUG] [Thread-54406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:37:45.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:37:45.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:37:45.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:37:45.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:37:45.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:37:45.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:37:45.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:37:45.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:37:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:37:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.442409 -999.00  +21.20  12.58     25   +0.50 1 2 1 1 1   888    0 22.57 45.30 ----- 12.6 12.6 287.6 18.5 28.5 -24.7 27.8 -22.9 27.4 -22.7 28.2 -23.6
2025-11-17T12:37:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:37:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:37:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.442409
2025-11-17T12:37:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:37:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:37:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:37:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:37:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:37:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:37:37', tmtdew=24.43, humidity=19.09, cloud=0.0, wind=14.22, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:37:04.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:37:45.971 [DEBUG] [Thread-54406] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:37:46.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:37:46.072 [DEBUG] [Thread-54409] [transport.py] [_log()] starting thread (client mode): 0xd31cf880
2025-11-17T12:37:46.072 [DEBUG] [Thread-54409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:37:46.086 [DEBUG] [Thread-54409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:37:46.087 [INFO] [Thread-54409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:37:46.094 [DEBUG] [Thread-54409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:37:46.094 [DEBUG] [Thread-54409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:37:46.094 [DEBUG] [Thread-54409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:37:46.094 [DEBUG] [Thread-54409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:37:46.094 [DEBUG] [Thread-54409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] client lang: <none>
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] server lang: <none>
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] kex follows: False
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] Compression: none
2025-11-17T12:37:46.095 [DEBUG] [Thread-54409] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:37:46.156 [DEBUG] [Thread-54409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:37:46.156 [DEBUG] [Thread-54409] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:37:46.157 [DEBUG] [Thread-54409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:37:46.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:37:46.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:37:46.218 [DEBUG] [Thread-54409] [transport.py] [_log()] userauth is OK
2025-11-17T12:37:46.218 [DEBUG] [Thread-54409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:37:46.218 [DEBUG] [Thread-54409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:37:46.218 [DEBUG] [Thread-54409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:37:46.218 [DEBUG] [Thread-54409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:37:46.241 [INFO] [Thread-54409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:37:46.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:37:46.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:37:47.109 [DEBUG] [Thread-54409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:37:47.109 [DEBUG] [Thread-54409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:37:47.157 [DEBUG] [Thread-54409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:37:47.157 [DEBUG] [Thread-54409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:37:47.166 [DEBUG] [Thread-54409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:37:47.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:37:47.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:37:47.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:37:47.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:37:47.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:37:47.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:37:47.201 [DEBUG] [Thread-54409] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:37:55.740 [DEBUG] [Thread-54411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:38:10.394 [DEBUG] [Thread-54412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:38:10.784 [DEBUG] [Thread-54413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:38:17.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:38:17.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:38:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:38:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 38, 9), 24.36, 19.14, 0.0, 11.22, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:38:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:38:09
2025-11-17T12:38:18.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:38:18.152 [DEBUG] [Thread-54414] [transport.py] [_log()] starting thread (client mode): 0xd0723af0
2025-11-17T12:38:18.152 [DEBUG] [Thread-54414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:38:18.171 [DEBUG] [Thread-54414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:38:18.171 [INFO] [Thread-54414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:38:18.174 [DEBUG] [Thread-54414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:38:18.174 [DEBUG] [Thread-54414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:38:18.174 [DEBUG] [Thread-54414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:38:18.174 [DEBUG] [Thread-54414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:38:18.174 [DEBUG] [Thread-54414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] client lang: <none>
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] server lang: <none>
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] kex follows: False
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] Compression: none
2025-11-17T12:38:18.175 [DEBUG] [Thread-54414] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:38:18.191 [DEBUG] [Thread-54414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:38:18.192 [DEBUG] [Thread-54414] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:38:18.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:38:18.193 [DEBUG] [Thread-54414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:38:18.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:38:18.195 [DEBUG] [Thread-54414] [transport.py] [_log()] userauth is OK
2025-11-17T12:38:18.195 [DEBUG] [Thread-54414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:38:18.195 [DEBUG] [Thread-54414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:38:18.195 [DEBUG] [Thread-54414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:38:18.195 [DEBUG] [Thread-54414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:38:18.231 [INFO] [Thread-54414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:38:18.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:38:18.880 [DEBUG] [Thread-54414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:38:18.880 [DEBUG] [Thread-54414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:38:18.880 [DEBUG] [Thread-54414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:38:18.921 [DEBUG] [Thread-54414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:38:18.921 [DEBUG] [Thread-54414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:38:18.924 [DEBUG] [Thread-54414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:38:18.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:38:18.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:38:18.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:38:18.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:38:18.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:38:18.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:38:18.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:38:18.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:38:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:38:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.442756 -999.00  +21.20   9.32     25   +0.50 1 1 1 1 1   888    0 22.63 43.34 ----- 9.3 9.3 285.2 15.0 28.6 -23.3 27.9 -23.2 27.4 -25.9 28.3 -23.2
2025-11-17T12:38:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:38:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:38:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.442756
2025-11-17T12:38:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:38:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:38:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:38:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:38:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:38:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:38:09', tmtdew=24.36, humidity=19.14, cloud=0.0, wind=11.22, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:37:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:38:18.948 [DEBUG] [Thread-54414] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:38:19.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:38:19.049 [DEBUG] [Thread-54417] [transport.py] [_log()] starting thread (client mode): 0xd0720f10
2025-11-17T12:38:19.049 [DEBUG] [Thread-54417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:38:19.064 [DEBUG] [Thread-54417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:38:19.064 [INFO] [Thread-54417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:38:19.072 [DEBUG] [Thread-54417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:38:19.072 [DEBUG] [Thread-54417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:38:19.072 [DEBUG] [Thread-54417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:38:19.072 [DEBUG] [Thread-54417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:38:19.072 [DEBUG] [Thread-54417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:38:19.072 [DEBUG] [Thread-54417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:38:19.072 [DEBUG] [Thread-54417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:38:19.072 [DEBUG] [Thread-54417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] client lang: <none>
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] server lang: <none>
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] kex follows: False
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:38:19.073 [DEBUG] [Thread-54417] [transport.py] [_log()] Compression: none
2025-11-17T12:38:19.074 [DEBUG] [Thread-54417] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:38:19.129 [DEBUG] [Thread-54417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:38:19.129 [DEBUG] [Thread-54417] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:38:19.130 [DEBUG] [Thread-54417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:38:19.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:38:19.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:38:19.185 [DEBUG] [Thread-54417] [transport.py] [_log()] userauth is OK
2025-11-17T12:38:19.185 [DEBUG] [Thread-54417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:38:19.185 [DEBUG] [Thread-54417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:38:19.185 [DEBUG] [Thread-54417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:38:19.185 [DEBUG] [Thread-54417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:38:19.207 [INFO] [Thread-54417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:38:19.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:38:19.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:38:20.059 [DEBUG] [Thread-54417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:38:20.059 [DEBUG] [Thread-54417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:38:20.106 [DEBUG] [Thread-54417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:38:20.106 [DEBUG] [Thread-54417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:38:20.115 [DEBUG] [Thread-54417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:38:20.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:38:20.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:38:20.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:38:20.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:38:20.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:38:20.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:38:20.150 [DEBUG] [Thread-54417] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:38:25.813 [DEBUG] [Thread-54419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:38:40.855 [DEBUG] [Thread-54420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:38:44.484 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:38:44.485 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:38:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:38:50.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:38:50.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:38:50.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 38, 41), 24.22, 19.59, 0.0, 11.26, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:38:50.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:38:41
2025-11-17T12:38:50.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:38:51.107 [DEBUG] [Thread-54421] [transport.py] [_log()] starting thread (client mode): 0xd0784820
2025-11-17T12:38:51.107 [DEBUG] [Thread-54421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:38:51.123 [DEBUG] [Thread-54421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:38:51.123 [INFO] [Thread-54421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:38:51.126 [DEBUG] [Thread-54421] [transport.py] [_log()] client lang: <none>
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] server lang: <none>
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] kex follows: False
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] Compression: none
2025-11-17T12:38:51.127 [DEBUG] [Thread-54421] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:38:51.144 [DEBUG] [Thread-54421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:38:51.145 [DEBUG] [Thread-54421] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:38:51.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:38:51.146 [DEBUG] [Thread-54421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:38:51.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:38:51.148 [DEBUG] [Thread-54421] [transport.py] [_log()] userauth is OK
2025-11-17T12:38:51.148 [DEBUG] [Thread-54421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:38:51.148 [DEBUG] [Thread-54421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:38:51.148 [DEBUG] [Thread-54421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:38:51.148 [DEBUG] [Thread-54421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:38:51.166 [INFO] [Thread-54421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:38:51.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:38:51.757 [DEBUG] [Thread-54421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:38:51.757 [DEBUG] [Thread-54421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:38:51.757 [DEBUG] [Thread-54421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:38:51.798 [DEBUG] [Thread-54421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:38:51.798 [DEBUG] [Thread-54421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:38:51.800 [DEBUG] [Thread-54421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:38:51.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:38:51.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:38:51.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:38:51.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:38:51.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:38:51.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:38:51.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:38:51.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:38:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:38:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.443103 -999.00  +21.20   8.13     25   +0.50 1 1 1 1 1   888    0 22.13 44.50 ----- 8.1 8.1 308.4 10.9 28.7 -23.9 27.9 -23.6 27.6 -22.7 28.4 -23.2
2025-11-17T12:38:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:38:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:38:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.443103
2025-11-17T12:38:51.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:38:51.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:38:51.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:38:51.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:38:51.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:38:51.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:38:41', tmtdew=24.22, humidity=19.59, cloud=0.0, wind=11.26, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:38:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:38:51.819 [DEBUG] [Thread-54421] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:38:51.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:38:51.919 [DEBUG] [Thread-54424] [transport.py] [_log()] starting thread (client mode): 0xd07220b0
2025-11-17T12:38:51.919 [DEBUG] [Thread-54424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:38:51.934 [DEBUG] [Thread-54424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:38:51.934 [INFO] [Thread-54424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] client lang: <none>
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] server lang: <none>
2025-11-17T12:38:51.942 [DEBUG] [Thread-54424] [transport.py] [_log()] kex follows: False
2025-11-17T12:38:51.943 [DEBUG] [Thread-54424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:38:51.943 [DEBUG] [Thread-54424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:38:51.943 [DEBUG] [Thread-54424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:38:51.943 [DEBUG] [Thread-54424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:38:51.943 [DEBUG] [Thread-54424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:38:51.943 [DEBUG] [Thread-54424] [transport.py] [_log()] Compression: none
2025-11-17T12:38:51.943 [DEBUG] [Thread-54424] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:38:52.001 [DEBUG] [Thread-54424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:38:52.001 [DEBUG] [Thread-54424] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:38:52.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:38:52.003 [DEBUG] [Thread-54424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:38:52.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:38:52.056 [DEBUG] [Thread-54424] [transport.py] [_log()] userauth is OK
2025-11-17T12:38:52.057 [DEBUG] [Thread-54424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:38:52.057 [DEBUG] [Thread-54424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:38:52.057 [DEBUG] [Thread-54424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:38:52.057 [DEBUG] [Thread-54424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:38:52.081 [INFO] [Thread-54424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:38:52.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:38:52.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:38:52.919 [DEBUG] [Thread-54424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:38:52.920 [DEBUG] [Thread-54424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:38:52.967 [DEBUG] [Thread-54424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:38:52.967 [DEBUG] [Thread-54424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:38:52.976 [DEBUG] [Thread-54424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:38:52.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:38:52.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:38:52.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:38:53.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:38:53.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:38:53.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:38:53.011 [DEBUG] [Thread-54424] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:38:55.886 [DEBUG] [Thread-54426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:39:10.442 [DEBUG] [Thread-54427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:39:10.931 [DEBUG] [Thread-54428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:39:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:39:23.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:39:23.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:39:23.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 39, 13), 24.14, 19.69, 0.0, 11.56, 21.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:39:23.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:39:13
2025-11-17T12:39:23.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:39:23.954 [DEBUG] [Thread-54429] [transport.py] [_log()] starting thread (client mode): 0xd0786d10
2025-11-17T12:39:23.954 [DEBUG] [Thread-54429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:39:23.975 [DEBUG] [Thread-54429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:39:23.975 [INFO] [Thread-54429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] client lang: <none>
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] server lang: <none>
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] kex follows: False
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] Compression: none
2025-11-17T12:39:23.978 [DEBUG] [Thread-54429] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:39:23.995 [DEBUG] [Thread-54429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:39:23.996 [DEBUG] [Thread-54429] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:39:23.997 [DEBUG] [Thread-54429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:39:23.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:39:23.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:39:23.999 [DEBUG] [Thread-54429] [transport.py] [_log()] userauth is OK
2025-11-17T12:39:23.999 [DEBUG] [Thread-54429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:39:23.999 [DEBUG] [Thread-54429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:39:23.999 [DEBUG] [Thread-54429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:39:23.999 [DEBUG] [Thread-54429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:39:24.022 [INFO] [Thread-54429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:39:24.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:39:24.664 [DEBUG] [Thread-54429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:39:24.664 [DEBUG] [Thread-54429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:39:24.664 [DEBUG] [Thread-54429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:39:24.705 [DEBUG] [Thread-54429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:39:24.705 [DEBUG] [Thread-54429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:39:24.708 [DEBUG] [Thread-54429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:39:24.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:39:24.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:39:24.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:39:24.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:39:24.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:39:24.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:39:24.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:39:24.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:39:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:39:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.443451 -999.00  +21.00   7.68     25   +0.40 1 1 1 1 1   888    0 22.85 45.55 ----- 7.7 7.7 313.6 13.8 28.8 -25.0 27.9 -23.6 27.7 -22.6 28.5 -23.7
2025-11-17T12:39:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:39:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:39:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.443451
2025-11-17T12:39:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:39:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:39:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:39:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:39:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:39:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:39:13', tmtdew=24.14, humidity=19.69, cloud=0.0, wind=11.56, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:38:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:39:24.734 [DEBUG] [Thread-54429] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:39:24.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:39:24.831 [DEBUG] [Thread-54432] [transport.py] [_log()] starting thread (client mode): 0xd31b0a90
2025-11-17T12:39:24.831 [DEBUG] [Thread-54432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:39:24.846 [DEBUG] [Thread-54432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:39:24.846 [INFO] [Thread-54432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:39:24.854 [DEBUG] [Thread-54432] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:39:24.854 [DEBUG] [Thread-54432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:39:24.854 [DEBUG] [Thread-54432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:39:24.854 [DEBUG] [Thread-54432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] client lang: <none>
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] server lang: <none>
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] kex follows: False
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] Compression: none
2025-11-17T12:39:24.855 [DEBUG] [Thread-54432] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:39:24.912 [DEBUG] [Thread-54432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:39:24.913 [DEBUG] [Thread-54432] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:39:24.913 [DEBUG] [Thread-54432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:39:24.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:39:24.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:39:24.968 [DEBUG] [Thread-54432] [transport.py] [_log()] userauth is OK
2025-11-17T12:39:24.969 [DEBUG] [Thread-54432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:39:24.969 [DEBUG] [Thread-54432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:39:24.969 [DEBUG] [Thread-54432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:39:24.969 [DEBUG] [Thread-54432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:39:24.988 [INFO] [Thread-54432] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:39:24.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:39:24.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:39:25.841 [DEBUG] [Thread-54432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:39:25.841 [DEBUG] [Thread-54432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:39:25.889 [DEBUG] [Thread-54432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:39:25.889 [DEBUG] [Thread-54432] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:39:25.898 [DEBUG] [Thread-54432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:39:25.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:39:25.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:39:25.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:39:25.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:39:25.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:39:25.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:39:25.933 [DEBUG] [Thread-54432] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:39:25.960 [DEBUG] [Thread-54434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:39:41.004 [DEBUG] [Thread-54435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:39:44.626 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:39:44.627 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:39:55.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:39:55.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:39:55.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:39:56.031 [DEBUG] [Thread-54436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:39:56.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 39, 45), 24.58, 18.89, 0.0, 15.19, 21.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:39:56.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:39:45
2025-11-17T12:39:56.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:39:56.847 [DEBUG] [Thread-54437] [transport.py] [_log()] starting thread (client mode): 0xd31b0880
2025-11-17T12:39:56.848 [DEBUG] [Thread-54437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:39:56.860 [DEBUG] [Thread-54437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:39:56.860 [INFO] [Thread-54437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] client lang: <none>
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] server lang: <none>
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] kex follows: False
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] Compression: none
2025-11-17T12:39:56.864 [DEBUG] [Thread-54437] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:39:56.872 [DEBUG] [Thread-54437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:39:56.872 [DEBUG] [Thread-54437] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:39:56.873 [DEBUG] [Thread-54437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:39:56.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:39:56.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:39:56.874 [DEBUG] [Thread-54437] [transport.py] [_log()] userauth is OK
2025-11-17T12:39:56.874 [DEBUG] [Thread-54437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:39:56.874 [DEBUG] [Thread-54437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:39:56.874 [DEBUG] [Thread-54437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:39:56.874 [DEBUG] [Thread-54437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:39:56.890 [INFO] [Thread-54437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:39:56.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:39:57.614 [DEBUG] [Thread-54437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:39:57.614 [DEBUG] [Thread-54437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:39:57.615 [DEBUG] [Thread-54437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:39:57.655 [DEBUG] [Thread-54437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:39:57.656 [DEBUG] [Thread-54437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:39:57.658 [DEBUG] [Thread-54437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:39:57.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:39:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:39:57.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:39:57.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:39:57.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:39:57.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:39:57.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:39:57.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:39:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:39:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.444145 -999.00  +20.90  19.37     25   +0.50 1 1 1 1 1   888    0 21.98 30.68 ----- 19.4 19.4 289.0 24.0 28.9 -25.7 27.9 -24.4 27.5 -23.6 28.6 -24.2
2025-11-17T12:39:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:39:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:39:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.444145
2025-11-17T12:39:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:39:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:39:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:39:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:39:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:39:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:39:45', tmtdew=24.58, humidity=18.89, cloud=0.0, wind=15.19, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:39:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:39:57.682 [DEBUG] [Thread-54437] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:39:57.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:39:57.779 [DEBUG] [Thread-54440] [transport.py] [_log()] starting thread (client mode): 0xd31cd750
2025-11-17T12:39:57.779 [DEBUG] [Thread-54440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:39:57.794 [DEBUG] [Thread-54440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:39:57.794 [INFO] [Thread-54440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:39:57.801 [DEBUG] [Thread-54440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:39:57.801 [DEBUG] [Thread-54440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:39:57.801 [DEBUG] [Thread-54440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:39:57.801 [DEBUG] [Thread-54440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:39:57.801 [DEBUG] [Thread-54440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] client lang: <none>
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] server lang: <none>
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] kex follows: False
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] Compression: none
2025-11-17T12:39:57.802 [DEBUG] [Thread-54440] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:39:57.860 [DEBUG] [Thread-54440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:39:57.861 [DEBUG] [Thread-54440] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:39:57.861 [DEBUG] [Thread-54440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:39:57.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:39:57.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:39:57.917 [DEBUG] [Thread-54440] [transport.py] [_log()] userauth is OK
2025-11-17T12:39:57.917 [DEBUG] [Thread-54440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:39:57.917 [DEBUG] [Thread-54440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:39:57.917 [DEBUG] [Thread-54440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:39:57.917 [DEBUG] [Thread-54440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:39:57.936 [INFO] [Thread-54440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:39:57.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:39:57.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:39:58.825 [DEBUG] [Thread-54440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:39:58.825 [DEBUG] [Thread-54440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:39:58.871 [DEBUG] [Thread-54440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:39:58.871 [DEBUG] [Thread-54440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:39:58.880 [DEBUG] [Thread-54440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:39:58.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:39:58.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:39:58.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:39:58.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:39:58.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:39:58.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:39:58.915 [DEBUG] [Thread-54440] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:40:10.491 [DEBUG] [Thread-54442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:40:11.062 [DEBUG] [Thread-54443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:40:26.101 [DEBUG] [Thread-54444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:40:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:40:28.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:40:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:40:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 40, 17), 24.75, 18.71, 0.0, 17.15, 21.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:40:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:40:17
2025-11-17T12:40:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:40:29.877 [DEBUG] [Thread-54445] [transport.py] [_log()] starting thread (client mode): 0xd31efa60
2025-11-17T12:40:29.877 [DEBUG] [Thread-54445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:40:29.896 [DEBUG] [Thread-54445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:40:29.896 [INFO] [Thread-54445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:40:29.899 [DEBUG] [Thread-54445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:40:29.899 [DEBUG] [Thread-54445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] client lang: <none>
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] server lang: <none>
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] kex follows: False
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] Compression: none
2025-11-17T12:40:29.900 [DEBUG] [Thread-54445] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:40:29.907 [DEBUG] [Thread-54445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:40:29.908 [DEBUG] [Thread-54445] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:40:29.908 [DEBUG] [Thread-54445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:40:29.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:40:29.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:40:29.908 [DEBUG] [Thread-54445] [transport.py] [_log()] userauth is OK
2025-11-17T12:40:29.908 [DEBUG] [Thread-54445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:40:29.908 [DEBUG] [Thread-54445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:40:29.908 [DEBUG] [Thread-54445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:40:29.908 [DEBUG] [Thread-54445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:40:29.924 [INFO] [Thread-54445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:40:29.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:40:30.586 [DEBUG] [Thread-54445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:40:30.586 [DEBUG] [Thread-54445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:40:30.586 [DEBUG] [Thread-54445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:40:30.627 [DEBUG] [Thread-54445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:40:30.627 [DEBUG] [Thread-54445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:40:30.629 [DEBUG] [Thread-54445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:40:30.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:40:30.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:40:30.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:40:30.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:40:30.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:40:30.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:40:30.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.444492 -999.00  +20.90  14.80     25   +0.30 1 1 1 1 1   888    0 21.41 23.73 ----- 14.8 14.8 302.4 23.1 28.8 -25.3 27.9 -24.4 27.5 -23.2 28.5 -23.5
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.444492
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:40:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:40:17', tmtdew=24.75, humidity=18.71, cloud=0.0, wind=17.15, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:40:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:40:30.648 [DEBUG] [Thread-54445] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:40:30.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:40:30.733 [DEBUG] [Thread-54448] [transport.py] [_log()] starting thread (client mode): 0xd07cc6a0
2025-11-17T12:40:30.733 [DEBUG] [Thread-54448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:40:30.748 [DEBUG] [Thread-54448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:40:30.748 [INFO] [Thread-54448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] client lang: <none>
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] server lang: <none>
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] kex follows: False
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] Compression: none
2025-11-17T12:40:30.756 [DEBUG] [Thread-54448] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:40:30.817 [DEBUG] [Thread-54448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:40:30.817 [DEBUG] [Thread-54448] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:40:30.818 [DEBUG] [Thread-54448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:40:30.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:40:30.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:40:30.873 [DEBUG] [Thread-54448] [transport.py] [_log()] userauth is OK
2025-11-17T12:40:30.873 [DEBUG] [Thread-54448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:40:30.873 [DEBUG] [Thread-54448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:40:30.873 [DEBUG] [Thread-54448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:40:30.873 [DEBUG] [Thread-54448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:40:30.892 [INFO] [Thread-54448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:40:30.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:40:30.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:40:31.840 [DEBUG] [Thread-54448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:40:31.840 [DEBUG] [Thread-54448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:40:31.888 [DEBUG] [Thread-54448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:40:31.888 [DEBUG] [Thread-54448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:40:31.897 [DEBUG] [Thread-54448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:40:31.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:40:31.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:40:31.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:40:31.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:40:31.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:40:31.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:40:31.932 [DEBUG] [Thread-54448] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:40:41.129 [DEBUG] [Thread-54450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:40:44.769 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:40:44.770 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:40:56.172 [DEBUG] [Thread-54451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:41:01.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:41:01.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:41:01.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:41:02.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 40, 49), 24.89, 18.43, 0.0, 15.83, 21.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:41:02.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:40:49
2025-11-17T12:41:02.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:41:02.905 [DEBUG] [Thread-54452] [transport.py] [_log()] starting thread (client mode): 0xd07cf160
2025-11-17T12:41:02.905 [DEBUG] [Thread-54452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:41:02.927 [DEBUG] [Thread-54452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:41:02.927 [INFO] [Thread-54452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:41:02.930 [DEBUG] [Thread-54452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] client lang: <none>
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] server lang: <none>
2025-11-17T12:41:02.931 [DEBUG] [Thread-54452] [transport.py] [_log()] kex follows: False
2025-11-17T12:41:02.932 [DEBUG] [Thread-54452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:41:02.932 [DEBUG] [Thread-54452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:41:02.932 [DEBUG] [Thread-54452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:41:02.932 [DEBUG] [Thread-54452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:41:02.932 [DEBUG] [Thread-54452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:41:02.932 [DEBUG] [Thread-54452] [transport.py] [_log()] Compression: none
2025-11-17T12:41:02.932 [DEBUG] [Thread-54452] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:41:02.952 [DEBUG] [Thread-54452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:41:02.953 [DEBUG] [Thread-54452] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:41:02.953 [DEBUG] [Thread-54452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:41:02.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:41:02.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:41:02.955 [DEBUG] [Thread-54452] [transport.py] [_log()] userauth is OK
2025-11-17T12:41:02.955 [DEBUG] [Thread-54452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:41:02.955 [DEBUG] [Thread-54452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:41:02.955 [DEBUG] [Thread-54452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:41:02.955 [DEBUG] [Thread-54452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:41:02.972 [INFO] [Thread-54452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:41:02.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:41:03.597 [DEBUG] [Thread-54452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:41:03.597 [DEBUG] [Thread-54452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:41:03.597 [DEBUG] [Thread-54452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:41:03.638 [DEBUG] [Thread-54452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:41:03.638 [DEBUG] [Thread-54452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:41:03.640 [DEBUG] [Thread-54452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:41:03.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:41:03.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:41:03.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:41:03.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:41:03.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:41:03.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:41:03.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:41:03.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:41:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:41:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.444839 -999.00  +20.70   9.57     25   +0.30 1 1 1 1 1   888    0 22.09 17.98 ----- 9.6 9.6 332.7 15.7 28.9 -24.6 27.9 -23.9 27.6 -23.2 28.6 -22.9
2025-11-17T12:41:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:41:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:41:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.444839
2025-11-17T12:41:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:41:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:41:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:41:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:41:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:41:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:40:49', tmtdew=24.89, humidity=18.43, cloud=0.0, wind=15.83, temperature=21.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:40:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:41:03.659 [DEBUG] [Thread-54452] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:41:03.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:41:03.745 [DEBUG] [Thread-54455] [transport.py] [_log()] starting thread (client mode): 0xd0786290
2025-11-17T12:41:03.745 [DEBUG] [Thread-54455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:41:03.762 [DEBUG] [Thread-54455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:41:03.762 [INFO] [Thread-54455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] client lang: <none>
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] server lang: <none>
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] kex follows: False
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] Compression: none
2025-11-17T12:41:03.769 [DEBUG] [Thread-54455] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:41:03.828 [DEBUG] [Thread-54455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:41:03.828 [DEBUG] [Thread-54455] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:41:03.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:41:03.828 [DEBUG] [Thread-54455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:41:03.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:41:03.884 [DEBUG] [Thread-54455] [transport.py] [_log()] userauth is OK
2025-11-17T12:41:03.884 [DEBUG] [Thread-54455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:41:03.885 [DEBUG] [Thread-54455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:41:03.885 [DEBUG] [Thread-54455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:41:03.885 [DEBUG] [Thread-54455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:41:03.902 [INFO] [Thread-54455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:41:03.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:41:03.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:41:04.761 [DEBUG] [Thread-54455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:41:04.761 [DEBUG] [Thread-54455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:41:04.812 [DEBUG] [Thread-54455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:41:04.812 [DEBUG] [Thread-54455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:41:04.820 [DEBUG] [Thread-54455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:41:04.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:41:04.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:41:04.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:41:04.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:41:04.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:41:04.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:41:04.852 [DEBUG] [Thread-54455] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:41:10.542 [DEBUG] [Thread-54457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:41:11.203 [DEBUG] [Thread-54458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:41:26.254 [DEBUG] [Thread-54459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:41:34.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:41:34.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:41:34.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
2025-11-17T12:41:35.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 41, 21), 24.58, 18.77, 0.0, 15.9, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:41:35.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:41:21
2025-11-17T12:41:35.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:41:35.808 [DEBUG] [Thread-54460] [transport.py] [_log()] starting thread (client mode): 0xd0722590
2025-11-17T12:41:35.808 [DEBUG] [Thread-54460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:41:35.828 [DEBUG] [Thread-54460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:41:35.828 [INFO] [Thread-54460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] client lang: <none>
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] server lang: <none>
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] kex follows: False
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] Compression: none
2025-11-17T12:41:35.830 [DEBUG] [Thread-54460] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:41:35.838 [DEBUG] [Thread-54460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:41:35.839 [DEBUG] [Thread-54460] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:41:35.839 [DEBUG] [Thread-54460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:41:35.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:41:35.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:41:35.840 [DEBUG] [Thread-54460] [transport.py] [_log()] userauth is OK
2025-11-17T12:41:35.841 [DEBUG] [Thread-54460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:41:35.841 [DEBUG] [Thread-54460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:41:35.841 [DEBUG] [Thread-54460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:41:35.841 [DEBUG] [Thread-54460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:41:35.858 [INFO] [Thread-54460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:41:35.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:41:36.520 [DEBUG] [Thread-54460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:41:36.520 [DEBUG] [Thread-54460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:41:36.520 [DEBUG] [Thread-54460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:41:36.561 [DEBUG] [Thread-54460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:41:36.561 [DEBUG] [Thread-54460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:41:36.564 [DEBUG] [Thread-54460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:41:36.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:41:36.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:41:36.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:41:36.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:41:36.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:41:36.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:41:36.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:41:36.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:41:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:41:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.445187 -999.00  +21.50  17.16     25   +0.80 1 1 1 1 1   888    0 21.40 11.02 ----- 17.2 17.2 302.2 21.1 28.9 -24.2 28.1 -24.6 27.7 -22.9 28.6 -22.6
2025-11-17T12:41:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:41:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:41:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.445187
2025-11-17T12:41:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:41:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:41:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:41:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:41:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:41:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:41:21', tmtdew=24.58, humidity=18.77, cloud=0.0, wind=15.9, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:41:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:41:36.591 [DEBUG] [Thread-54460] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:41:36.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:41:36.686 [DEBUG] [Thread-54463] [transport.py] [_log()] starting thread (client mode): 0xd0722b90
2025-11-17T12:41:36.687 [DEBUG] [Thread-54463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:41:36.702 [DEBUG] [Thread-54463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:41:36.702 [INFO] [Thread-54463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:41:36.710 [DEBUG] [Thread-54463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:41:36.710 [DEBUG] [Thread-54463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:41:36.710 [DEBUG] [Thread-54463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:41:36.710 [DEBUG] [Thread-54463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:41:36.710 [DEBUG] [Thread-54463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:41:36.710 [DEBUG] [Thread-54463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:41:36.710 [DEBUG] [Thread-54463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] client lang: <none>
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] server lang: <none>
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] kex follows: False
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] Compression: none
2025-11-17T12:41:36.711 [DEBUG] [Thread-54463] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:41:36.769 [DEBUG] [Thread-54463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:41:36.769 [DEBUG] [Thread-54463] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:41:36.770 [DEBUG] [Thread-54463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:41:36.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:41:36.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:41:36.825 [DEBUG] [Thread-54463] [transport.py] [_log()] userauth is OK
2025-11-17T12:41:36.826 [DEBUG] [Thread-54463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:41:36.826 [DEBUG] [Thread-54463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:41:36.826 [DEBUG] [Thread-54463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:41:36.826 [DEBUG] [Thread-54463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:41:36.849 [INFO] [Thread-54463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:41:36.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:41:36.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:41:37.711 [DEBUG] [Thread-54463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:41:37.712 [DEBUG] [Thread-54463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:41:37.759 [DEBUG] [Thread-54463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:41:37.759 [DEBUG] [Thread-54463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:41:37.768 [DEBUG] [Thread-54463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:41:37.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:41:37.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:41: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') -> 00000000
2025-11-17T12:41:37.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:41:37.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:41:37.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:41:37.809 [DEBUG] [Thread-54463] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:41:41.288 [DEBUG] [Thread-54465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:41:44.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:41:44.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:41:56.332 [DEBUG] [Thread-54466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:42:07.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:42:07.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:42:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:42:08.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 41, 53), 24.72, 18.79, 0.0, 15.4, 21.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:42:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:41:53
2025-11-17T12:42:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:42:08.750 [DEBUG] [Thread-54467] [transport.py] [_log()] starting thread (client mode): 0xd07cc580
2025-11-17T12:42:08.750 [DEBUG] [Thread-54467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:42:08.772 [DEBUG] [Thread-54467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:42:08.772 [INFO] [Thread-54467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:42:08.775 [DEBUG] [Thread-54467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:42:08.775 [DEBUG] [Thread-54467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:42:08.775 [DEBUG] [Thread-54467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:42:08.775 [DEBUG] [Thread-54467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:42:08.775 [DEBUG] [Thread-54467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:42:08.775 [DEBUG] [Thread-54467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:42:08.775 [DEBUG] [Thread-54467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] client lang: <none>
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] server lang: <none>
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] kex follows: False
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:42:08.776 [DEBUG] [Thread-54467] [transport.py] [_log()] Compression: none
2025-11-17T12:42:08.777 [DEBUG] [Thread-54467] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:42:08.795 [DEBUG] [Thread-54467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:42:08.796 [DEBUG] [Thread-54467] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:42:08.797 [DEBUG] [Thread-54467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:42:08.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:42:08.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:42:08.800 [DEBUG] [Thread-54467] [transport.py] [_log()] userauth is OK
2025-11-17T12:42:08.800 [DEBUG] [Thread-54467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:42:08.800 [DEBUG] [Thread-54467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:42:08.800 [DEBUG] [Thread-54467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:42:08.800 [DEBUG] [Thread-54467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:42:08.816 [INFO] [Thread-54467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:42:08.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:42:09.472 [DEBUG] [Thread-54467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:42:09.473 [DEBUG] [Thread-54467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:42:09.473 [DEBUG] [Thread-54467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:42:09.513 [DEBUG] [Thread-54467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:42:09.513 [DEBUG] [Thread-54467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:42:09.516 [DEBUG] [Thread-54467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:42:09.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:42:09.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:42:09.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:42:09.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:42:09.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:42:09.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:42:09.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:42:09.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:42:09.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:42:09.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.445534 -999.00  +21.60  15.85     25   +0.70 1 2 1 1 1   888    0 21.09 7.56 ----- 15.8 15.8 314.4 20.2 29.0 -25.1 28.1 -23.1 27.7 -22.0 28.6 -23.7
2025-11-17T12:42:09.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:42:09.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:42:09.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.445534
2025-11-17T12:42:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:42:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:42:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:42:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:42:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:42:09.544 [DEBUG] [Thread-54467] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:42:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:41:53', tmtdew=24.72, humidity=18.79, cloud=0.0, wind=15.4, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:41:34.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:42:09.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:42:09.642 [DEBUG] [Thread-54470] [transport.py] [_log()] starting thread (client mode): 0xd0759ea0
2025-11-17T12:42:09.642 [DEBUG] [Thread-54470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:42:09.656 [DEBUG] [Thread-54470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:42:09.656 [INFO] [Thread-54470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:42:09.663 [DEBUG] [Thread-54470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] client lang: <none>
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] server lang: <none>
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] kex follows: False
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:42:09.664 [DEBUG] [Thread-54470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:42:09.665 [DEBUG] [Thread-54470] [transport.py] [_log()] Compression: none
2025-11-17T12:42:09.665 [DEBUG] [Thread-54470] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:42:09.732 [DEBUG] [Thread-54470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:42:09.732 [DEBUG] [Thread-54470] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:42:09.733 [DEBUG] [Thread-54470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:42:09.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:42:09.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:42:09.789 [DEBUG] [Thread-54470] [transport.py] [_log()] userauth is OK
2025-11-17T12:42:09.789 [DEBUG] [Thread-54470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:42:09.789 [DEBUG] [Thread-54470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:42:09.790 [DEBUG] [Thread-54470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:42:09.790 [DEBUG] [Thread-54470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:42:09.809 [INFO] [Thread-54470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:42:09.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:42:09.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:42:10.593 [DEBUG] [Thread-54472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:42:10.659 [DEBUG] [Thread-54470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:42:10.659 [DEBUG] [Thread-54470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:42:10.706 [DEBUG] [Thread-54470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:42:10.706 [DEBUG] [Thread-54470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:42:10.715 [DEBUG] [Thread-54470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:42:10.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:42:10.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:42:10.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:42:10.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:42:10.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:42:10.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:42:10.749 [DEBUG] [Thread-54470] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:42:11.366 [DEBUG] [Thread-54473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:42:26.409 [DEBUG] [Thread-54474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:42:40.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:42:40.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:42:40.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:42:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 42, 25), 24.82, 18.66, 0.0, 14.54, 21.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:42:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:42:25
2025-11-17T12:42:41.438 [DEBUG] [Thread-54475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:42:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:42:41.690 [DEBUG] [Thread-54476] [transport.py] [_log()] starting thread (client mode): 0xd0759180
2025-11-17T12:42:41.690 [DEBUG] [Thread-54476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:42:41.705 [DEBUG] [Thread-54476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:42:41.705 [INFO] [Thread-54476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] client lang: <none>
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] server lang: <none>
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] kex follows: False
2025-11-17T12:42:41.708 [DEBUG] [Thread-54476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:42:41.709 [DEBUG] [Thread-54476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:42:41.709 [DEBUG] [Thread-54476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:42:41.709 [DEBUG] [Thread-54476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:42:41.709 [DEBUG] [Thread-54476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:42:41.709 [DEBUG] [Thread-54476] [transport.py] [_log()] Compression: none
2025-11-17T12:42:41.709 [DEBUG] [Thread-54476] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:42:41.724 [DEBUG] [Thread-54476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:42:41.725 [DEBUG] [Thread-54476] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:42:41.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:42:41.726 [DEBUG] [Thread-54476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:42:41.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:42:41.727 [DEBUG] [Thread-54476] [transport.py] [_log()] userauth is OK
2025-11-17T12:42:41.727 [DEBUG] [Thread-54476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:42:41.727 [DEBUG] [Thread-54476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:42:41.727 [DEBUG] [Thread-54476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:42:41.727 [DEBUG] [Thread-54476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:42:41.742 [INFO] [Thread-54476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:42:41.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:42:42.379 [DEBUG] [Thread-54476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:42:42.379 [DEBUG] [Thread-54476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:42:42.380 [DEBUG] [Thread-54476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:42:42.420 [DEBUG] [Thread-54476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:42:42.421 [DEBUG] [Thread-54476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:42:42.424 [DEBUG] [Thread-54476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:42:42.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:42:42.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:42:42.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:42:42.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:42:42.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:42:42.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:42:42.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:42:42.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:42:42.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:42:42.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.445881 -999.00  +21.90  11.83     23   +0.10 1 1 1 1 1   888    0 21.29 8.00 ----- 11.8 11.8 332.2 19.7 29.0 -25.0 28.1 -23.9 27.9 -23.0 28.5 -23.1
2025-11-17T12:42:42.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:42:42.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:42:42.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.445881
2025-11-17T12:42:42.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:42:42.448 [DEBUG] [Thread-54476] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:42:42.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:42:42.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:42:42.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:42:42.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:42:42.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:42:25', tmtdew=24.82, humidity=18.66, cloud=0.0, wind=14.54, temperature=21.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:42:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:42:42.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:42:42.542 [DEBUG] [Thread-54479] [transport.py] [_log()] starting thread (client mode): 0xd31b31f0
2025-11-17T12:42:42.543 [DEBUG] [Thread-54479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:42:42.558 [DEBUG] [Thread-54479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:42:42.558 [INFO] [Thread-54479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] client lang: <none>
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] server lang: <none>
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] kex follows: False
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] Compression: none
2025-11-17T12:42:42.566 [DEBUG] [Thread-54479] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:42:42.625 [DEBUG] [Thread-54479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:42:42.626 [DEBUG] [Thread-54479] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:42:42.626 [DEBUG] [Thread-54479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:42:42.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:42:42.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:42:42.682 [DEBUG] [Thread-54479] [transport.py] [_log()] userauth is OK
2025-11-17T12:42:42.683 [DEBUG] [Thread-54479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:42:42.683 [DEBUG] [Thread-54479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:42:42.683 [DEBUG] [Thread-54479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:42:42.683 [DEBUG] [Thread-54479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:42:42.703 [INFO] [Thread-54479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:42:42.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:42:42.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:42:43.634 [DEBUG] [Thread-54479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:42:43.634 [DEBUG] [Thread-54479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:42:43.683 [DEBUG] [Thread-54479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:42:43.683 [DEBUG] [Thread-54479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:42:43.696 [DEBUG] [Thread-54479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:42:43.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:42:43.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:42: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') -> 00000000
2025-11-17T12:42:43.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:42:43.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:42:43.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:42:43.741 [DEBUG] [Thread-54479] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:42:45.056 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:42:45.057 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:42:56.465 [DEBUG] [Thread-54481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:43:10.648 [DEBUG] [Thread-54482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:43:11.499 [DEBUG] [Thread-54483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:43:13.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:43:13.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:43:13.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:43:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 42, 57), 25.15, 18.31, 0.0, 12.93, 21.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:43:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:42:57
2025-11-17T12:43:14.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:43:14.692 [DEBUG] [Thread-54484] [transport.py] [_log()] starting thread (client mode): 0xd07235e0
2025-11-17T12:43:14.692 [DEBUG] [Thread-54484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:43:14.712 [DEBUG] [Thread-54484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:43:14.713 [INFO] [Thread-54484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:43:14.716 [DEBUG] [Thread-54484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:43:14.716 [DEBUG] [Thread-54484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:43:14.716 [DEBUG] [Thread-54484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:43:14.716 [DEBUG] [Thread-54484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:43:14.716 [DEBUG] [Thread-54484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:43:14.716 [DEBUG] [Thread-54484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:43:14.716 [DEBUG] [Thread-54484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:43:14.716 [DEBUG] [Thread-54484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] client lang: <none>
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] server lang: <none>
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] kex follows: False
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] Compression: none
2025-11-17T12:43:14.717 [DEBUG] [Thread-54484] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:43:14.735 [DEBUG] [Thread-54484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:43:14.735 [DEBUG] [Thread-54484] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:43:14.736 [DEBUG] [Thread-54484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:43:14.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:43:14.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:43:14.738 [DEBUG] [Thread-54484] [transport.py] [_log()] userauth is OK
2025-11-17T12:43:14.738 [DEBUG] [Thread-54484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:43:14.738 [DEBUG] [Thread-54484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:43:14.738 [DEBUG] [Thread-54484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:43:14.738 [DEBUG] [Thread-54484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:43:14.762 [INFO] [Thread-54484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:43:14.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:43:15.405 [DEBUG] [Thread-54484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:43:15.405 [DEBUG] [Thread-54484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:43:15.406 [DEBUG] [Thread-54484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:43:15.446 [DEBUG] [Thread-54484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:43:15.447 [DEBUG] [Thread-54484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:43:15.449 [DEBUG] [Thread-54484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:43:15.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:43:15.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:43:15.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:43:15.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:43:15.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:43:15.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:43:15.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:43:15.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:43:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:43:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.446228 -999.00  +22.20  18.96     23   +0.30 1 1 1 1 1   888    0 20.63 9.01 ----- 19.0 19.0 37.0 20.1 29.1 -23.8 28.1 -24.6 27.8 -22.9 28.8 -22.4
2025-11-17T12:43:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:43:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:43:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.446228
2025-11-17T12:43:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:43:15.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:43:15.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:43:15.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:43:15.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:43:15.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:42:57', tmtdew=25.15, humidity=18.31, cloud=0.0, wind=12.93, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:42:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:43:15.476 [DEBUG] [Thread-54484] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:43:15.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:43:15.572 [DEBUG] [Thread-54487] [transport.py] [_log()] starting thread (client mode): 0xd0718b20
2025-11-17T12:43:15.573 [DEBUG] [Thread-54487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:43:15.587 [DEBUG] [Thread-54487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:43:15.587 [INFO] [Thread-54487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:43:15.594 [DEBUG] [Thread-54487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:43:15.595 [DEBUG] [Thread-54487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:43:15.595 [DEBUG] [Thread-54487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:43:15.595 [DEBUG] [Thread-54487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:43:15.595 [DEBUG] [Thread-54487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:43:15.595 [DEBUG] [Thread-54487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:43:15.595 [DEBUG] [Thread-54487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:43:15.595 [DEBUG] [Thread-54487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:43:15.595 [DEBUG] [Thread-54487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] client lang: <none>
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] server lang: <none>
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] kex follows: False
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:43:15.596 [DEBUG] [Thread-54487] [transport.py] [_log()] Compression: none
2025-11-17T12:43:15.597 [DEBUG] [Thread-54487] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:43:15.657 [DEBUG] [Thread-54487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:43:15.657 [DEBUG] [Thread-54487] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:43:15.658 [DEBUG] [Thread-54487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:43:15.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:43:15.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:43:15.713 [DEBUG] [Thread-54487] [transport.py] [_log()] userauth is OK
2025-11-17T12:43:15.714 [DEBUG] [Thread-54487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:43:15.714 [DEBUG] [Thread-54487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:43:15.714 [DEBUG] [Thread-54487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:43:15.714 [DEBUG] [Thread-54487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:43:15.734 [INFO] [Thread-54487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:43:15.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:43:15.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:43:16.592 [DEBUG] [Thread-54487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:43:16.593 [DEBUG] [Thread-54487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:43:16.640 [DEBUG] [Thread-54487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:43:16.640 [DEBUG] [Thread-54487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:43:16.654 [DEBUG] [Thread-54487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:43:16.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:43:16.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:43:16.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:43:16.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:43:16.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:43:16.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:43:16.688 [DEBUG] [Thread-54487] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:43:26.534 [DEBUG] [Thread-54489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:43:41.573 [DEBUG] [Thread-54490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:43:45.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:43:45.198 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:43:46.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:43:46.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:43:46.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:43:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 43, 29), 25.57, 17.79, 0.0, 9.18, 21.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:43:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:43:29
2025-11-17T12:43:47.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:43:47.598 [DEBUG] [Thread-54491] [transport.py] [_log()] starting thread (client mode): 0xd31b0670
2025-11-17T12:43:47.598 [DEBUG] [Thread-54491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:43:47.614 [DEBUG] [Thread-54491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:43:47.614 [INFO] [Thread-54491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] client lang: <none>
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] server lang: <none>
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] kex follows: False
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:43:47.617 [DEBUG] [Thread-54491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:43:47.618 [DEBUG] [Thread-54491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:43:47.618 [DEBUG] [Thread-54491] [transport.py] [_log()] Compression: none
2025-11-17T12:43:47.618 [DEBUG] [Thread-54491] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:43:47.633 [DEBUG] [Thread-54491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:43:47.633 [DEBUG] [Thread-54491] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:43:47.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:43:47.634 [DEBUG] [Thread-54491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:43:47.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:43:47.636 [DEBUG] [Thread-54491] [transport.py] [_log()] userauth is OK
2025-11-17T12:43:47.636 [DEBUG] [Thread-54491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:43:47.636 [DEBUG] [Thread-54491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:43:47.637 [DEBUG] [Thread-54491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:43:47.637 [DEBUG] [Thread-54491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:43:47.655 [INFO] [Thread-54491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:43:47.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:43:48.283 [DEBUG] [Thread-54491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:43:48.283 [DEBUG] [Thread-54491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:43:48.284 [DEBUG] [Thread-54491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:43:48.325 [DEBUG] [Thread-54491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:43:48.325 [DEBUG] [Thread-54491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:43:48.328 [DEBUG] [Thread-54491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:43:48.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:43:48.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:43:48.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:43:48.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:43:48.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:43:48.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:43:48.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:43:48.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:43:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:43:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.446923 -999.00  +22.00  11.67     23   +0.00 1 1 1 1 1   888    0 21.45 15.15 ----- 11.7 11.7 314.2 16.1 29.2 -23.9 28.2 -24.4 28.1 -22.2 28.8 -22.4
2025-11-17T12:43:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:43:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:43:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.446923
2025-11-17T12:43:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:43:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:43:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:43:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:43:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:43:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:43:29', tmtdew=25.57, humidity=17.79, cloud=0.0, wind=9.18, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:43:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:43:48.354 [DEBUG] [Thread-54491] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:43:48.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:43:48.451 [DEBUG] [Thread-54494] [transport.py] [_log()] starting thread (client mode): 0xd0784820
2025-11-17T12:43:48.452 [DEBUG] [Thread-54494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:43:48.466 [DEBUG] [Thread-54494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:43:48.467 [INFO] [Thread-54494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:43:48.474 [DEBUG] [Thread-54494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:43:48.474 [DEBUG] [Thread-54494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] client lang: <none>
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] server lang: <none>
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] kex follows: False
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] Compression: none
2025-11-17T12:43:48.475 [DEBUG] [Thread-54494] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:43:48.542 [DEBUG] [Thread-54494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:43:48.542 [DEBUG] [Thread-54494] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:43:48.543 [DEBUG] [Thread-54494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:43:48.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:43:48.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:43:48.601 [DEBUG] [Thread-54494] [transport.py] [_log()] userauth is OK
2025-11-17T12:43:48.602 [DEBUG] [Thread-54494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:43:48.602 [DEBUG] [Thread-54494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:43:48.602 [DEBUG] [Thread-54494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:43:48.602 [DEBUG] [Thread-54494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:43:48.622 [INFO] [Thread-54494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:43:48.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:43:48.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:43:49.475 [DEBUG] [Thread-54494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:43:49.475 [DEBUG] [Thread-54494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:43:49.523 [DEBUG] [Thread-54494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:43:49.523 [DEBUG] [Thread-54494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:43:49.532 [DEBUG] [Thread-54494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:43:49.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:43:49.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:43:49.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:43:49.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:43:49.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:43:49.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:43:49.566 [DEBUG] [Thread-54494] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:43:56.599 [DEBUG] [Thread-54496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:44:10.700 [DEBUG] [Thread-54497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:44:11.653 [DEBUG] [Thread-54498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:44:19.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:44:19.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:44:19.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:44:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 44, 1), 25.41, 18.01, 0.0, 12.33, 21.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:44:20.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:44:01
2025-11-17T12:44:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:44:20.556 [DEBUG] [Thread-54499] [transport.py] [_log()] starting thread (client mode): 0xd3134dc0
2025-11-17T12:44:20.556 [DEBUG] [Thread-54499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:44:20.576 [DEBUG] [Thread-54499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:44:20.576 [INFO] [Thread-54499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] client lang: <none>
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] server lang: <none>
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] kex follows: False
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] Compression: none
2025-11-17T12:44:20.579 [DEBUG] [Thread-54499] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:44:20.596 [DEBUG] [Thread-54499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:44:20.597 [DEBUG] [Thread-54499] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:44:20.597 [DEBUG] [Thread-54499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:44:20.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:44:20.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:44:20.597 [DEBUG] [Thread-54499] [transport.py] [_log()] userauth is OK
2025-11-17T12:44:20.597 [DEBUG] [Thread-54499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:44:20.597 [DEBUG] [Thread-54499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:44:20.597 [DEBUG] [Thread-54499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:44:20.597 [DEBUG] [Thread-54499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:44:20.607 [INFO] [Thread-54499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:44:20.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:44:21.261 [DEBUG] [Thread-54499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:44:21.261 [DEBUG] [Thread-54499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:44:21.261 [DEBUG] [Thread-54499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:44:21.302 [DEBUG] [Thread-54499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:44:21.302 [DEBUG] [Thread-54499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:44:21.304 [DEBUG] [Thread-54499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:44:21.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:44:21.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:44:21.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:44:21.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:44:21.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:44:21.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:44:21.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:44:21.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:44:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:44:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.447270 -999.00  +21.80  11.24     23   -0.10 1 2 1 1 1   888    0 21.52 16.61 ----- 11.2 11.2 25.0 15.1 29.2 -24.6 28.2 -24.0 28.1 -22.0 28.9 -22.5
2025-11-17T12:44:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:44:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:44:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.447270
2025-11-17T12:44:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:44:01', tmtdew=25.41, humidity=18.01, cloud=0.0, wind=12.33, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:44:04.128', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:44:21.321 [DEBUG] [Thread-54499] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:44:21.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:44:21.407 [DEBUG] [Thread-54502] [transport.py] [_log()] starting thread (client mode): 0xd0759840
2025-11-17T12:44:21.407 [DEBUG] [Thread-54502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:44:21.422 [DEBUG] [Thread-54502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:44:21.422 [INFO] [Thread-54502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:44:21.429 [DEBUG] [Thread-54502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] client lang: <none>
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] server lang: <none>
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] kex follows: False
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] Compression: none
2025-11-17T12:44:21.430 [DEBUG] [Thread-54502] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:44:21.487 [DEBUG] [Thread-54502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:44:21.487 [DEBUG] [Thread-54502] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:44:21.487 [DEBUG] [Thread-54502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:44:21.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:44:21.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:44:21.546 [DEBUG] [Thread-54502] [transport.py] [_log()] userauth is OK
2025-11-17T12:44:21.546 [DEBUG] [Thread-54502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:44:21.546 [DEBUG] [Thread-54502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:44:21.546 [DEBUG] [Thread-54502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:44:21.546 [DEBUG] [Thread-54502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:44:21.563 [INFO] [Thread-54502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:44:21.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:44:21.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:44:22.415 [DEBUG] [Thread-54502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:44:22.415 [DEBUG] [Thread-54502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:44:22.462 [DEBUG] [Thread-54502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:44:22.463 [DEBUG] [Thread-54502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:44:22.472 [DEBUG] [Thread-54502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:44:22.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:44:22.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:44:22.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:44:22.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:44:22.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:44:22.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:44:22.507 [DEBUG] [Thread-54502] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:44:26.685 [DEBUG] [Thread-54504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:44:41.727 [DEBUG] [Thread-54505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:44:45.340 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:44:45.341 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:44:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:44:52.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:44:52.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:44:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 44, 33), 26.28, 16.95, 0.0, 22.23, 22.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:44:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:44:33
2025-11-17T12:44:53.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:44:53.433 [DEBUG] [Thread-54506] [transport.py] [_log()] starting thread (client mode): 0xd07cf610
2025-11-17T12:44:53.433 [DEBUG] [Thread-54506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:44:53.449 [DEBUG] [Thread-54506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:44:53.449 [INFO] [Thread-54506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] client lang: <none>
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] server lang: <none>
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] kex follows: False
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] Compression: none
2025-11-17T12:44:53.453 [DEBUG] [Thread-54506] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:44:53.462 [DEBUG] [Thread-54506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:44:53.462 [DEBUG] [Thread-54506] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:44:53.462 [DEBUG] [Thread-54506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:44:53.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:44:53.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:44:53.464 [DEBUG] [Thread-54506] [transport.py] [_log()] userauth is OK
2025-11-17T12:44:53.464 [DEBUG] [Thread-54506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:44:53.465 [DEBUG] [Thread-54506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:44:53.465 [DEBUG] [Thread-54506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:44:53.465 [DEBUG] [Thread-54506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:44:53.482 [INFO] [Thread-54506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:44:53.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:44:54.092 [DEBUG] [Thread-54506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:44:54.092 [DEBUG] [Thread-54506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:44:54.093 [DEBUG] [Thread-54506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:44:54.133 [DEBUG] [Thread-54506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:44:54.134 [DEBUG] [Thread-54506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:44:54.137 [DEBUG] [Thread-54506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:44:54.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:44:54.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:44:54.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:44:54.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:44:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:44:54.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:44:54.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:44:54.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:44:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:44:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.447617 -999.00  +21.80  19.40     23   -0.10 1 2 1 1 1   888    0 21.32 19.64 ----- 19.4 19.4 3.9 22.4 29.2 -24.9 28.2 -23.1 28.1 -22.5 28.9 -22.8
2025-11-17T12:44:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:44:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:44:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.447617
2025-11-17T12:44:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:44:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:44:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:44:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:44:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:44:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:44:33', tmtdew=26.28, humidity=16.95, cloud=0.0, wind=22.23, temperature=22.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:44:34.109', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:44:54.163 [DEBUG] [Thread-54506] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:44:54.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:44:54.259 [DEBUG] [Thread-54509] [transport.py] [_log()] starting thread (client mode): 0xd3163c70
2025-11-17T12:44:54.259 [DEBUG] [Thread-54509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:44:54.278 [DEBUG] [Thread-54509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:44:54.279 [INFO] [Thread-54509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:44:54.286 [DEBUG] [Thread-54509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:44:54.286 [DEBUG] [Thread-54509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:44:54.286 [DEBUG] [Thread-54509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:44:54.286 [DEBUG] [Thread-54509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:44:54.286 [DEBUG] [Thread-54509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:44:54.286 [DEBUG] [Thread-54509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] client lang: <none>
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] server lang: <none>
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] kex follows: False
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:44:54.287 [DEBUG] [Thread-54509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:44:54.288 [DEBUG] [Thread-54509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:44:54.288 [DEBUG] [Thread-54509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:44:54.288 [DEBUG] [Thread-54509] [transport.py] [_log()] Compression: none
2025-11-17T12:44:54.288 [DEBUG] [Thread-54509] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:44:54.346 [DEBUG] [Thread-54509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:44:54.346 [DEBUG] [Thread-54509] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:44:54.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:44:54.347 [DEBUG] [Thread-54509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:44:54.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:44:54.401 [DEBUG] [Thread-54509] [transport.py] [_log()] userauth is OK
2025-11-17T12:44:54.402 [DEBUG] [Thread-54509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:44:54.402 [DEBUG] [Thread-54509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:44:54.402 [DEBUG] [Thread-54509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:44:54.402 [DEBUG] [Thread-54509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:44:54.421 [INFO] [Thread-54509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:44:54.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:44:54.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:44:55.252 [DEBUG] [Thread-54509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:44:55.252 [DEBUG] [Thread-54509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:44:55.300 [DEBUG] [Thread-54509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:44:55.300 [DEBUG] [Thread-54509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:44:55.308 [DEBUG] [Thread-54509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:44:55.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:44:55.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:44:55.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:44:55.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:44:55.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:44:55.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:44:55.341 [DEBUG] [Thread-54509] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:44:56.755 [DEBUG] [Thread-54511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:45:10.757 [DEBUG] [Thread-54512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:45:11.788 [DEBUG] [Thread-54513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:45:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:45:25.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:45:25.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:45:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 45, 5), 25.89, 17.36, 0.0, 15.35, 21.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:45:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:45:05
2025-11-17T12:45:26.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:45:26.283 [DEBUG] [Thread-54514] [transport.py] [_log()] starting thread (client mode): 0xd31b1c90
2025-11-17T12:45:26.283 [DEBUG] [Thread-54514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:45:26.303 [DEBUG] [Thread-54514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:45:26.304 [INFO] [Thread-54514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:45:26.306 [DEBUG] [Thread-54514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] client lang: <none>
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] server lang: <none>
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] kex follows: False
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] Compression: none
2025-11-17T12:45:26.307 [DEBUG] [Thread-54514] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:45:26.325 [DEBUG] [Thread-54514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:45:26.325 [DEBUG] [Thread-54514] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:45:26.326 [DEBUG] [Thread-54514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:45:26.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:45:26.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:45:26.328 [DEBUG] [Thread-54514] [transport.py] [_log()] userauth is OK
2025-11-17T12:45:26.328 [DEBUG] [Thread-54514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:45:26.328 [DEBUG] [Thread-54514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:45:26.328 [DEBUG] [Thread-54514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:45:26.328 [DEBUG] [Thread-54514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:45:26.352 [INFO] [Thread-54514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:45:26.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:45:26.816 [DEBUG] [Thread-54516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:45:26.985 [DEBUG] [Thread-54514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:45:26.985 [DEBUG] [Thread-54514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:45:26.986 [DEBUG] [Thread-54514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:45:27.026 [DEBUG] [Thread-54514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:45:27.027 [DEBUG] [Thread-54514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:45:27.029 [DEBUG] [Thread-54514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:45:27.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:45:27.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:45:27.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:45:27.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:45:27.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:45:27.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:45:27.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:45:27.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:45:27.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:45:27.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.447964 -999.00  +22.30  24.57     22   -0.10 1 1 1 1 1   888    0 21.83 21.76 ----- 24.6 24.6 28.6 35.0 29.3 -23.4 28.1 -25.6 28.0 -22.6 28.9 -22.4
2025-11-17T12:45:27.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:45:27.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:45:27.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.447964
2025-11-17T12:45:27.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:45:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:45:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:45:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:45:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:45:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:45:05', tmtdew=25.89, humidity=17.36, cloud=0.0, wind=15.35, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:45:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:45:27.054 [DEBUG] [Thread-54514] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:45:27.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:45:27.150 [DEBUG] [Thread-54518] [transport.py] [_log()] starting thread (client mode): 0xd3136ef0
2025-11-17T12:45:27.150 [DEBUG] [Thread-54518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:45:27.165 [DEBUG] [Thread-54518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:45:27.165 [INFO] [Thread-54518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:45:27.172 [DEBUG] [Thread-54518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:45:27.172 [DEBUG] [Thread-54518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] client lang: <none>
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] server lang: <none>
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] kex follows: False
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] Compression: none
2025-11-17T12:45:27.173 [DEBUG] [Thread-54518] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:45:27.230 [DEBUG] [Thread-54518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:45:27.230 [DEBUG] [Thread-54518] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:45:27.230 [DEBUG] [Thread-54518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:45:27.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:45:27.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:45:27.290 [DEBUG] [Thread-54518] [transport.py] [_log()] userauth is OK
2025-11-17T12:45:27.290 [DEBUG] [Thread-54518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:45:27.290 [DEBUG] [Thread-54518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:45:27.290 [DEBUG] [Thread-54518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:45:27.290 [DEBUG] [Thread-54518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:45:27.310 [INFO] [Thread-54518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:45:27.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:45:27.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:45:28.184 [DEBUG] [Thread-54518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:45:28.185 [DEBUG] [Thread-54518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:45:28.232 [DEBUG] [Thread-54518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:45:28.232 [DEBUG] [Thread-54518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:45:28.241 [DEBUG] [Thread-54518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:45:28.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:45:28.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:45:28.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:45:28.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:45:28.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:45:28.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:45:28.276 [DEBUG] [Thread-54518] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:45:41.846 [DEBUG] [Thread-54520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:45:45.486 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:45:45.486 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:45:56.887 [DEBUG] [Thread-54521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:45:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:45:58.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:45:58.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:45:58.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 45, 37), 25.92, 17.48, 0.0, 17.75, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:45:58.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:45:37
2025-11-17T12:45:59.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:45:59.207 [DEBUG] [Thread-54522] [transport.py] [_log()] starting thread (client mode): 0xd07bc0d0
2025-11-17T12:45:59.207 [DEBUG] [Thread-54522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:45:59.227 [DEBUG] [Thread-54522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:45:59.227 [INFO] [Thread-54522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] client lang: <none>
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] server lang: <none>
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] kex follows: False
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:45:59.230 [DEBUG] [Thread-54522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:45:59.231 [DEBUG] [Thread-54522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:45:59.231 [DEBUG] [Thread-54522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:45:59.231 [DEBUG] [Thread-54522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:45:59.231 [DEBUG] [Thread-54522] [transport.py] [_log()] Compression: none
2025-11-17T12:45:59.231 [DEBUG] [Thread-54522] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:45:59.246 [DEBUG] [Thread-54522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:45:59.247 [DEBUG] [Thread-54522] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:45:59.247 [DEBUG] [Thread-54522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:45:59.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:45:59.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:45:59.288 [DEBUG] [Thread-54522] [transport.py] [_log()] userauth is OK
2025-11-17T12:45:59.288 [DEBUG] [Thread-54522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:45:59.288 [DEBUG] [Thread-54522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:45:59.288 [DEBUG] [Thread-54522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:45:59.289 [DEBUG] [Thread-54522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:45:59.309 [INFO] [Thread-54522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:45:59.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:45:59.896 [DEBUG] [Thread-54522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:45:59.896 [DEBUG] [Thread-54522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:45:59.896 [DEBUG] [Thread-54522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:45:59.938 [DEBUG] [Thread-54522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:45:59.938 [DEBUG] [Thread-54522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:45:59.940 [DEBUG] [Thread-54522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:45:59.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:45:59.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:45:59.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:45:59.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:45:59.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:45:59.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:45:59.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:45:59.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:45:59.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:45:59.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.448312 -999.00  +22.10  18.11     22   -0.10 1 1 1 1 1   888    0 22.02 26.05 ----- 18.1 18.1 41.0 22.2 29.1 -24.2 28.1 -24.7 27.9 -22.5 28.8 -21.4
2025-11-17T12:45:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:45:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:45:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.448312
2025-11-17T12:45:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:45:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:45:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:45:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:45:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:45:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:45:37', tmtdew=25.92, humidity=17.48, cloud=0.0, wind=17.75, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:45:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:45:59.965 [DEBUG] [Thread-54522] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:46:00.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:46:00.065 [DEBUG] [Thread-54525] [transport.py] [_log()] starting thread (client mode): 0xd0786e90
2025-11-17T12:46:00.065 [DEBUG] [Thread-54525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:46:00.081 [DEBUG] [Thread-54525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:46:00.082 [INFO] [Thread-54525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:46:00.089 [DEBUG] [Thread-54525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:46:00.089 [DEBUG] [Thread-54525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] client lang: <none>
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] server lang: <none>
2025-11-17T12:46:00.090 [DEBUG] [Thread-54525] [transport.py] [_log()] kex follows: False
2025-11-17T12:46:00.091 [DEBUG] [Thread-54525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:46:00.091 [DEBUG] [Thread-54525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:46:00.091 [DEBUG] [Thread-54525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:46:00.091 [DEBUG] [Thread-54525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:46:00.091 [DEBUG] [Thread-54525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:46:00.091 [DEBUG] [Thread-54525] [transport.py] [_log()] Compression: none
2025-11-17T12:46:00.091 [DEBUG] [Thread-54525] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:46:00.150 [DEBUG] [Thread-54525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:46:00.151 [DEBUG] [Thread-54525] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:46:00.151 [DEBUG] [Thread-54525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:46:00.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:46:00.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:46:00.209 [DEBUG] [Thread-54525] [transport.py] [_log()] userauth is OK
2025-11-17T12:46:00.209 [DEBUG] [Thread-54525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:46:00.209 [DEBUG] [Thread-54525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:46:00.209 [DEBUG] [Thread-54525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:46:00.210 [DEBUG] [Thread-54525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:46:00.230 [INFO] [Thread-54525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:46:00.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:46:00.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:46:01.091 [DEBUG] [Thread-54525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:46:01.091 [DEBUG] [Thread-54525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:46:01.139 [DEBUG] [Thread-54525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:46:01.139 [DEBUG] [Thread-54525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:46:01.148 [DEBUG] [Thread-54525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:46:01.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:46: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')
2025-11-17T12:46:01.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:46:01.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:46:01.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:46:01.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:46:01.181 [DEBUG] [Thread-54525] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:46:10.785 [DEBUG] [Thread-54527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:46:11.917 [DEBUG] [Thread-54528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:46:26.967 [DEBUG] [Thread-54529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:46:31.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:46:31.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:46:31.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:46:31.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 46, 9), 25.87, 17.54, 0.0, 20.56, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:46:31.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:46:09
2025-11-17T12:46:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:46:32.125 [DEBUG] [Thread-54530] [transport.py] [_log()] starting thread (client mode): 0xd071a590
2025-11-17T12:46:32.126 [DEBUG] [Thread-54530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:46:32.145 [DEBUG] [Thread-54530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:46:32.145 [INFO] [Thread-54530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] client lang: <none>
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] server lang: <none>
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] kex follows: False
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] Compression: none
2025-11-17T12:46:32.148 [DEBUG] [Thread-54530] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:46:32.165 [DEBUG] [Thread-54530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:46:32.165 [DEBUG] [Thread-54530] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:46:32.165 [DEBUG] [Thread-54530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:46:32.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:46:32.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:46:32.167 [DEBUG] [Thread-54530] [transport.py] [_log()] userauth is OK
2025-11-17T12:46:32.167 [DEBUG] [Thread-54530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:46:32.168 [DEBUG] [Thread-54530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:46:32.168 [DEBUG] [Thread-54530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:46:32.168 [DEBUG] [Thread-54530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:46:32.191 [INFO] [Thread-54530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:46:32.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:46:32.788 [DEBUG] [Thread-54530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:46:32.789 [DEBUG] [Thread-54530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:46:32.789 [DEBUG] [Thread-54530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:46:32.829 [DEBUG] [Thread-54530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:46:32.829 [DEBUG] [Thread-54530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:46:32.832 [DEBUG] [Thread-54530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:46:32.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:46:32.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:46:32.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:46:32.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:46:32.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:46:32.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:46:32.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:46:32.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:46:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:46:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.448659 -999.00  +21.80  17.52     23   -0.00 1 2 1 1 1   888    0 22.07 27.65 ----- 17.5 17.5 20.6 22.6 29.1 -24.6 28.0 -24.2 28.1 -21.8 28.8 -22.0
2025-11-17T12:46:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:46:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:46:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.448659
2025-11-17T12:46:32.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:46:32.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:46:32.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:46:32.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:46:32.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:46:32.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:46:09', tmtdew=25.87, humidity=17.54, cloud=0.0, wind=20.56, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:46:04.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:46:32.857 [DEBUG] [Thread-54530] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:46:32.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:46:32.956 [DEBUG] [Thread-54533] [transport.py] [_log()] starting thread (client mode): 0xd07be200
2025-11-17T12:46:32.956 [DEBUG] [Thread-54533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:46:32.973 [DEBUG] [Thread-54533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:46:32.973 [INFO] [Thread-54533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] client lang: <none>
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] server lang: <none>
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] kex follows: False
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:46:32.981 [DEBUG] [Thread-54533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:46:32.982 [DEBUG] [Thread-54533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:46:32.982 [DEBUG] [Thread-54533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:46:32.982 [DEBUG] [Thread-54533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:46:32.982 [DEBUG] [Thread-54533] [transport.py] [_log()] Compression: none
2025-11-17T12:46:32.982 [DEBUG] [Thread-54533] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:46:33.042 [DEBUG] [Thread-54533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:46:33.042 [DEBUG] [Thread-54533] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:46:33.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:46:33.043 [DEBUG] [Thread-54533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:46:33.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:46:33.098 [DEBUG] [Thread-54533] [transport.py] [_log()] userauth is OK
2025-11-17T12:46:33.098 [DEBUG] [Thread-54533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:46:33.098 [DEBUG] [Thread-54533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:46:33.099 [DEBUG] [Thread-54533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:46:33.099 [DEBUG] [Thread-54533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:46:33.118 [INFO] [Thread-54533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:46:33.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:46:33.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:46:34.001 [DEBUG] [Thread-54533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:46:34.002 [DEBUG] [Thread-54533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:46:34.049 [DEBUG] [Thread-54533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:46:34.049 [DEBUG] [Thread-54533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:46:34.059 [DEBUG] [Thread-54533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:46:34.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:46:34.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:46:34.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:46:34.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:46:34.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:46:34.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:46:34.097 [DEBUG] [Thread-54533] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:46:41.999 [DEBUG] [Thread-54535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:46:45.628 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:46:45.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:46:57.028 [DEBUG] [Thread-54536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:47:04.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:47:04.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:47:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:47:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 46, 41), 25.96, 17.31, 0.0, 22.09, 22.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:47:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:46:41
2025-11-17T12:47:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:47:05.051 [DEBUG] [Thread-54537] [transport.py] [_log()] starting thread (client mode): 0xd07cffa0
2025-11-17T12:47:05.052 [DEBUG] [Thread-54537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:47:05.070 [DEBUG] [Thread-54537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:47:05.070 [INFO] [Thread-54537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] client lang: <none>
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] server lang: <none>
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] kex follows: False
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] Compression: none
2025-11-17T12:47:05.071 [DEBUG] [Thread-54537] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:47:05.079 [DEBUG] [Thread-54537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:47:05.079 [DEBUG] [Thread-54537] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:47:05.080 [DEBUG] [Thread-54537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:47:05.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:47:05.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:47:05.081 [DEBUG] [Thread-54537] [transport.py] [_log()] userauth is OK
2025-11-17T12:47:05.081 [DEBUG] [Thread-54537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:47:05.081 [DEBUG] [Thread-54537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:47:05.081 [DEBUG] [Thread-54537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:47:05.081 [DEBUG] [Thread-54537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:47:05.092 [INFO] [Thread-54537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:47:05.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:47:05.665 [DEBUG] [Thread-54537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:47:05.665 [DEBUG] [Thread-54537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:47:05.665 [DEBUG] [Thread-54537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:47:05.705 [DEBUG] [Thread-54537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:47:05.705 [DEBUG] [Thread-54537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:47:05.709 [DEBUG] [Thread-54537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:47:05.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:47:05.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:47:05.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:47:05.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:47:05.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:47:05.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:47:05.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:47:05.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:47:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:47:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.449006 -999.00  +21.80  22.67     23   -0.10 1 1 1 1 1   888    0 22.09 30.72 ----- 22.7 22.7 42.6 26.3 29.0 -23.4 28.0 -24.3 27.9 -23.4 28.8 -21.5
2025-11-17T12:47:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:47:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:47:05.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.449006
2025-11-17T12:47:05.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:47:05.725 [DEBUG] [Thread-54537] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:47:05.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:47:05.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:47:05.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:47:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:47:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:46:41', tmtdew=25.96, humidity=17.31, cloud=0.0, wind=22.09, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:46:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:47:05.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:47:05.820 [DEBUG] [Thread-54540] [transport.py] [_log()] starting thread (client mode): 0xd07bcb80
2025-11-17T12:47:05.820 [DEBUG] [Thread-54540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:47:05.836 [DEBUG] [Thread-54540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:47:05.836 [INFO] [Thread-54540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] client lang: <none>
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] server lang: <none>
2025-11-17T12:47:05.844 [DEBUG] [Thread-54540] [transport.py] [_log()] kex follows: False
2025-11-17T12:47:05.845 [DEBUG] [Thread-54540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:47:05.845 [DEBUG] [Thread-54540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:47:05.845 [DEBUG] [Thread-54540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:47:05.845 [DEBUG] [Thread-54540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:47:05.845 [DEBUG] [Thread-54540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:47:05.845 [DEBUG] [Thread-54540] [transport.py] [_log()] Compression: none
2025-11-17T12:47:05.845 [DEBUG] [Thread-54540] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:47:05.902 [DEBUG] [Thread-54540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:47:05.903 [DEBUG] [Thread-54540] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:47:05.903 [DEBUG] [Thread-54540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:47:05.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:47:05.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:47:05.962 [DEBUG] [Thread-54540] [transport.py] [_log()] userauth is OK
2025-11-17T12:47:05.963 [DEBUG] [Thread-54540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:47:05.963 [DEBUG] [Thread-54540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:47:05.963 [DEBUG] [Thread-54540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:47:05.963 [DEBUG] [Thread-54540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:47:05.982 [INFO] [Thread-54540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:47:05.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:47:05.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:47:06.844 [DEBUG] [Thread-54540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:47:06.844 [DEBUG] [Thread-54540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:47:06.891 [DEBUG] [Thread-54540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:47:06.892 [DEBUG] [Thread-54540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:47:06.900 [DEBUG] [Thread-54540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:47:06.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:47:06.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:47:06.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:47:06.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:47:06.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:47:06.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:47:06.935 [DEBUG] [Thread-54540] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:47:10.840 [DEBUG] [Thread-54542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:47:12.058 [DEBUG] [Thread-54543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:47:27.101 [DEBUG] [Thread-54544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:47:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:47:36.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:47:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:47:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 47, 13), 26.09, 17.15, 0.0, 18.12, 22.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:47:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:47:13
2025-11-17T12:47:37.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:47:37.887 [DEBUG] [Thread-54545] [transport.py] [_log()] starting thread (client mode): 0xd3160fd0
2025-11-17T12:47:37.887 [DEBUG] [Thread-54545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:47:37.906 [DEBUG] [Thread-54545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:47:37.906 [INFO] [Thread-54545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] client lang: <none>
2025-11-17T12:47:37.909 [DEBUG] [Thread-54545] [transport.py] [_log()] server lang: <none>
2025-11-17T12:47:37.910 [DEBUG] [Thread-54545] [transport.py] [_log()] kex follows: False
2025-11-17T12:47:37.910 [DEBUG] [Thread-54545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:47:37.910 [DEBUG] [Thread-54545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:47:37.910 [DEBUG] [Thread-54545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:47:37.910 [DEBUG] [Thread-54545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:47:37.910 [DEBUG] [Thread-54545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:47:37.910 [DEBUG] [Thread-54545] [transport.py] [_log()] Compression: none
2025-11-17T12:47:37.910 [DEBUG] [Thread-54545] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:47:37.925 [DEBUG] [Thread-54545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:47:37.925 [DEBUG] [Thread-54545] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:47:37.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:47:37.926 [DEBUG] [Thread-54545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:47:37.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:47:37.927 [DEBUG] [Thread-54545] [transport.py] [_log()] userauth is OK
2025-11-17T12:47:37.927 [DEBUG] [Thread-54545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:47:37.928 [DEBUG] [Thread-54545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:47:37.928 [DEBUG] [Thread-54545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:47:37.928 [DEBUG] [Thread-54545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:47:37.947 [INFO] [Thread-54545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:47:37.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:47:38.541 [DEBUG] [Thread-54545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:47:38.542 [DEBUG] [Thread-54545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:47:38.542 [DEBUG] [Thread-54545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:47:38.582 [DEBUG] [Thread-54545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:47:38.582 [DEBUG] [Thread-54545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:47:38.588 [DEBUG] [Thread-54545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:47:38.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:47:38.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:47:38.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:47:38.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:47:38.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:47:38.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:47:38.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:47:38.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:47:38.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:47:38.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.449006 -999.00  +21.80  22.67     23   -0.10 1 1 1 1 1   888    0 22.09 30.72 ----- 22.7 22.7 42.6 26.3 29.0 -23.4 28.0 -24.3 27.9 -23.4 28.8 -21.5
2025-11-17T12:47:38.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:47:38.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:47:38.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.449006
2025-11-17T12:47:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:47:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:47:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:47:38.608 [DEBUG] [Thread-54545] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:47:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:47:38.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:47:38.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:47:13', tmtdew=26.09, humidity=17.15, cloud=0.0, wind=18.12, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:46:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:47:38.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:47:38.703 [DEBUG] [Thread-54548] [transport.py] [_log()] starting thread (client mode): 0xd071b1c0
2025-11-17T12:47:38.703 [DEBUG] [Thread-54548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:47:38.718 [DEBUG] [Thread-54548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:47:38.718 [INFO] [Thread-54548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:47:38.726 [DEBUG] [Thread-54548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:47:38.726 [DEBUG] [Thread-54548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:47:38.726 [DEBUG] [Thread-54548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:47:38.726 [DEBUG] [Thread-54548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:47:38.726 [DEBUG] [Thread-54548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] client lang: <none>
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] server lang: <none>
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] kex follows: False
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] Compression: none
2025-11-17T12:47:38.727 [DEBUG] [Thread-54548] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:47:38.782 [DEBUG] [Thread-54548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:47:38.782 [DEBUG] [Thread-54548] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:47:38.783 [DEBUG] [Thread-54548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:47:38.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:47:38.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:47:38.838 [DEBUG] [Thread-54548] [transport.py] [_log()] userauth is OK
2025-11-17T12:47:38.839 [DEBUG] [Thread-54548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:47:38.839 [DEBUG] [Thread-54548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:47:38.839 [DEBUG] [Thread-54548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:47:38.839 [DEBUG] [Thread-54548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:47:38.857 [INFO] [Thread-54548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:47:38.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:47:38.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:47:39.741 [DEBUG] [Thread-54548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:47:39.741 [DEBUG] [Thread-54548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:47:39.789 [DEBUG] [Thread-54548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:47:39.789 [DEBUG] [Thread-54548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:47:39.798 [DEBUG] [Thread-54548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:47:39.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:47:39.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:47:39.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:47:39.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:47:39.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:47:39.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:47:39.832 [DEBUG] [Thread-54548] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:47:42.129 [DEBUG] [Thread-54550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:47:45.769 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:47:45.770 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:47:57.169 [DEBUG] [Thread-54551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:48:09.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:48:09.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:48:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:48:10.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 47, 45), 26.31, 16.73, 0.0, 22.06, 22.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:48:10.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:47:45
2025-11-17T12:48:10.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:48:10.821 [DEBUG] [Thread-54552] [transport.py] [_log()] starting thread (client mode): 0xd07cfb20
2025-11-17T12:48:10.822 [DEBUG] [Thread-54552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:48:10.842 [DEBUG] [Thread-54552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:48:10.843 [INFO] [Thread-54552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] client lang: <none>
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] server lang: <none>
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] kex follows: False
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] Compression: none
2025-11-17T12:48:10.846 [DEBUG] [Thread-54552] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:48:10.861 [DEBUG] [Thread-54552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:48:10.861 [DEBUG] [Thread-54552] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:48:10.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:48:10.862 [DEBUG] [Thread-54552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:48:10.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:48:10.862 [DEBUG] [Thread-54552] [transport.py] [_log()] userauth is OK
2025-11-17T12:48:10.862 [DEBUG] [Thread-54552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:48:10.863 [DEBUG] [Thread-54552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:48:10.863 [DEBUG] [Thread-54552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:48:10.863 [DEBUG] [Thread-54552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:48:10.876 [INFO] [Thread-54552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:48:10.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:48:10.880 [DEBUG] [Thread-54554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:48:11.710 [DEBUG] [Thread-54552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:48:11.710 [DEBUG] [Thread-54552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:48:11.710 [DEBUG] [Thread-54552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:48:11.751 [DEBUG] [Thread-54552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:48:11.751 [DEBUG] [Thread-54552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:48:11.753 [DEBUG] [Thread-54552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:48:11.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:48:11.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:48:11.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:48:11.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:48:11.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:48:11.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:48:11.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:48:11.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:48:11.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:48:11.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.449353 -999.00  +22.00  18.02     22   -0.10 1 2 1 1 1   888    0 22.10 31.02 ----- 18.0 18.0 43.8 25.1 28.9 -23.7 28.0 -23.8 27.8 -21.4 28.7 -21.4
2025-11-17T12:48:11.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:48:11.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:48:11.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.449353
2025-11-17T12:48:11.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:48:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:48:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:48:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:48:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:48:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:47:45', tmtdew=26.31, humidity=16.73, cloud=0.0, wind=22.06, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:47:04.099', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:48:11.771 [DEBUG] [Thread-54552] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:48:11.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:48:11.861 [DEBUG] [Thread-54556] [transport.py] [_log()] starting thread (client mode): 0xd3163880
2025-11-17T12:48:11.861 [DEBUG] [Thread-54556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:48:11.876 [DEBUG] [Thread-54556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:48:11.876 [INFO] [Thread-54556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] client lang: <none>
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] server lang: <none>
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] kex follows: False
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] Compression: none
2025-11-17T12:48:11.884 [DEBUG] [Thread-54556] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:48:11.941 [DEBUG] [Thread-54556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:48:11.941 [DEBUG] [Thread-54556] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:48:11.941 [DEBUG] [Thread-54556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:48:11.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:48:11.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:48:11.998 [DEBUG] [Thread-54556] [transport.py] [_log()] userauth is OK
2025-11-17T12:48:11.998 [DEBUG] [Thread-54556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:48:11.998 [DEBUG] [Thread-54556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:48:11.998 [DEBUG] [Thread-54556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:48:11.998 [DEBUG] [Thread-54556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:48:12.013 [INFO] [Thread-54556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:48:12.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:48:12.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:48:12.198 [DEBUG] [Thread-54558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:48:12.874 [DEBUG] [Thread-54556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:48:12.874 [DEBUG] [Thread-54556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:48:12.922 [DEBUG] [Thread-54556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:48:12.922 [DEBUG] [Thread-54556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:48:12.930 [DEBUG] [Thread-54556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:48:12.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:48:12.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:48:12.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:48:12.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:48:12.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:48:12.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:48:12.961 [DEBUG] [Thread-54556] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:48:27.241 [DEBUG] [Thread-54559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:48:42.273 [DEBUG] [Thread-54560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:48:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:48:42.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:48:42.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:48:43.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 48, 17), 26.35, 16.66, 0.0, 20.43, 22.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:48:43.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:48:17
2025-11-17T12:48:43.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:48:43.901 [DEBUG] [Thread-54561] [transport.py] [_log()] starting thread (client mode): 0xd31346d0
2025-11-17T12:48:43.901 [DEBUG] [Thread-54561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:48:43.921 [DEBUG] [Thread-54561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:48:43.921 [INFO] [Thread-54561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:48:43.925 [DEBUG] [Thread-54561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] client lang: <none>
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] server lang: <none>
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] kex follows: False
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] Compression: none
2025-11-17T12:48:43.926 [DEBUG] [Thread-54561] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:48:43.943 [DEBUG] [Thread-54561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:48:43.943 [DEBUG] [Thread-54561] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:48:43.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:48:43.944 [DEBUG] [Thread-54561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:48:43.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:48:43.946 [DEBUG] [Thread-54561] [transport.py] [_log()] userauth is OK
2025-11-17T12:48:43.947 [DEBUG] [Thread-54561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:48:43.947 [DEBUG] [Thread-54561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:48:43.947 [DEBUG] [Thread-54561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:48:43.947 [DEBUG] [Thread-54561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:48:43.971 [INFO] [Thread-54561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:48:43.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:48:44.559 [DEBUG] [Thread-54561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:48:44.559 [DEBUG] [Thread-54561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:48:44.560 [DEBUG] [Thread-54561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:48:44.600 [DEBUG] [Thread-54561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:48:44.601 [DEBUG] [Thread-54561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:48:44.604 [DEBUG] [Thread-54561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:48:44.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:48:44.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:48:44.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:48:44.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:48:44.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:48:44.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:48:44.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:48:44.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:48:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:48:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.450048 -999.00  +21.80  20.12     23   -0.20 1 1 1 1 1   888    0 21.94 28.55 ----- 20.1 20.1 21.4 25.0 28.9 -23.8 27.5 -29.6 27.9 -22.4 28.6 -21.8
2025-11-17T12:48:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:48:44.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:48:44.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.450048
2025-11-17T12:48:44.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:48:44.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:48:44.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:48:44.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:48:44.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:48:44.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:48:17', tmtdew=26.35, humidity=16.66, cloud=0.0, wind=20.43, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:48:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:48:44.630 [DEBUG] [Thread-54561] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:48:44.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:48:44.727 [DEBUG] [Thread-54564] [transport.py] [_log()] starting thread (client mode): 0xd3160910
2025-11-17T12:48:44.727 [DEBUG] [Thread-54564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:48:44.742 [DEBUG] [Thread-54564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:48:44.742 [INFO] [Thread-54564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:48:44.749 [DEBUG] [Thread-54564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] client lang: <none>
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] server lang: <none>
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] kex follows: False
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] Compression: none
2025-11-17T12:48:44.750 [DEBUG] [Thread-54564] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:48:44.811 [DEBUG] [Thread-54564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:48:44.811 [DEBUG] [Thread-54564] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:48:44.812 [DEBUG] [Thread-54564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:48:44.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:48:44.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:48:44.866 [DEBUG] [Thread-54564] [transport.py] [_log()] userauth is OK
2025-11-17T12:48:44.867 [DEBUG] [Thread-54564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:48:44.867 [DEBUG] [Thread-54564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:48:44.867 [DEBUG] [Thread-54564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:48:44.867 [DEBUG] [Thread-54564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:48:44.886 [INFO] [Thread-54564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:48:44.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:48:44.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:48:45.769 [DEBUG] [Thread-54564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:48:45.769 [DEBUG] [Thread-54564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:48:45.817 [DEBUG] [Thread-54564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:48:45.817 [DEBUG] [Thread-54564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:48:45.826 [DEBUG] [Thread-54564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:48:45.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:48:45.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:48:45.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:48:45.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:48:45.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:48:45.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:48:45.860 [DEBUG] [Thread-54564] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:48:45.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:48:45.911 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:48:57.302 [DEBUG] [Thread-54566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:49:10.930 [DEBUG] [Thread-54567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:49:12.349 [DEBUG] [Thread-54568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:49:15.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:49:15.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:49:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:49:16.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 48, 49), 26.64, 16.18, 0.0, 22.13, 22.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:49:16.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:48:49
2025-11-17T12:49:16.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:49:16.814 [DEBUG] [Thread-54569] [transport.py] [_log()] starting thread (client mode): 0xd3137250
2025-11-17T12:49:16.815 [DEBUG] [Thread-54569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:49:16.834 [DEBUG] [Thread-54569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:49:16.834 [INFO] [Thread-54569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:49:16.837 [DEBUG] [Thread-54569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] client lang: <none>
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] server lang: <none>
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] kex follows: False
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:49:16.838 [DEBUG] [Thread-54569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:49:16.839 [DEBUG] [Thread-54569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:49:16.839 [DEBUG] [Thread-54569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:49:16.839 [DEBUG] [Thread-54569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:49:16.839 [DEBUG] [Thread-54569] [transport.py] [_log()] Compression: none
2025-11-17T12:49:16.839 [DEBUG] [Thread-54569] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:49:16.853 [DEBUG] [Thread-54569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:49:16.853 [DEBUG] [Thread-54569] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:49:16.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:49:16.855 [DEBUG] [Thread-54569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:49:16.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:49:16.896 [DEBUG] [Thread-54569] [transport.py] [_log()] userauth is OK
2025-11-17T12:49:16.896 [DEBUG] [Thread-54569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:49:16.896 [DEBUG] [Thread-54569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:49:16.897 [DEBUG] [Thread-54569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:49:16.897 [DEBUG] [Thread-54569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:49:16.911 [INFO] [Thread-54569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:49:16.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:49:17.727 [DEBUG] [Thread-54569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:49:17.727 [DEBUG] [Thread-54569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:49:17.727 [DEBUG] [Thread-54569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:49:17.767 [DEBUG] [Thread-54569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:49:17.768 [DEBUG] [Thread-54569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:49:17.770 [DEBUG] [Thread-54569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:49:17.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:49:17.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:49:17.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:49:17.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:49:17.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:49:17.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:49:17.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:49:17.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:49:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:49:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.450395 -999.00  +21.80  12.64     23   -0.10 1 1 1 1 1   888    0 21.66 26.39 ----- 12.6 12.6 11.4 20.1 28.2 -29.9 27.4 -26.7 27.4 -28.4 27.9 -29.0
2025-11-17T12:49:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:49:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:49:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.450395
2025-11-17T12:49:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:49:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:49:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:49:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:49:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:49:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:48:49', tmtdew=26.64, humidity=16.18, cloud=0.0, wind=22.13, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:48:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:49:17.796 [DEBUG] [Thread-54569] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:49:17.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:49:27.376 [DEBUG] [Thread-54572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:49:42.417 [DEBUG] [Thread-54573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:49:46.052 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:49:46.053 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:49:57.451 [DEBUG] [Thread-54574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:50:10.981 [DEBUG] [Thread-54575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:50:12.481 [DEBUG] [Thread-54576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:50:27.508 [DEBUG] [Thread-54577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:50:42.541 [DEBUG] [Thread-54578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:50:46.195 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:50:46.195 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:50:57.566 [DEBUG] [Thread-54579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:51:11.033 [DEBUG] [Thread-54580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:51:12.598 [DEBUG] [Thread-54581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:51:27.626 [DEBUG] [Thread-54582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:51:29.850 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T12:51:42.661 [DEBUG] [Thread-54583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:51:46.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:51:46.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:51:57.692 [DEBUG] [Thread-54584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:51:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:51:59.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:51:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:52:00.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 51, 29), 26.72, 16.38, 0.0, 28.97, 22.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:52:00.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:51:29
2025-11-17T12:52:00.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:52:00.850 [DEBUG] [Thread-54585] [transport.py] [_log()] starting thread (client mode): 0xd3136f50
2025-11-17T12:52:00.850 [DEBUG] [Thread-54585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:52:00.869 [DEBUG] [Thread-54585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:52:00.869 [INFO] [Thread-54585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] client lang: <none>
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] server lang: <none>
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] kex follows: False
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] Compression: none
2025-11-17T12:52:00.873 [DEBUG] [Thread-54585] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:52:00.889 [DEBUG] [Thread-54585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:52:00.889 [DEBUG] [Thread-54585] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:52:00.890 [DEBUG] [Thread-54585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:52:00.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:52:00.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:52:00.891 [DEBUG] [Thread-54585] [transport.py] [_log()] userauth is OK
2025-11-17T12:52:00.891 [DEBUG] [Thread-54585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:52:00.891 [DEBUG] [Thread-54585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:52:00.891 [DEBUG] [Thread-54585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:52:00.891 [DEBUG] [Thread-54585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:52:00.902 [INFO] [Thread-54585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:52:00.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:52:01.531 [DEBUG] [Thread-54585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:52:01.531 [DEBUG] [Thread-54585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:52:01.531 [DEBUG] [Thread-54585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:52:01.572 [DEBUG] [Thread-54585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:52:01.572 [DEBUG] [Thread-54585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:52:01.575 [DEBUG] [Thread-54585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:52:01.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:52:01.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:52:01.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:52:01.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:52:01.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:52:01.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:52:01.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:52:01.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.452131 -999.00  +21.80  15.33     22   -0.20 1 2 1 1 1   888    0 22.46 29.77 ----- 15.3 15.3 3.0 42.3 28.2 -24.1 27.4 -23.0 27.4 -21.1 27.9 -22.8
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.452131
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:51:29', tmtdew=26.72, humidity=16.38, cloud=0.0, wind=28.97, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:51:04.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:52:01.594 [DEBUG] [Thread-54585] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:52:01.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:52:01.681 [DEBUG] [Thread-54588] [transport.py] [_log()] starting thread (client mode): 0xd3135900
2025-11-17T12:52:01.682 [DEBUG] [Thread-54588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:52:01.697 [DEBUG] [Thread-54588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:52:01.698 [INFO] [Thread-54588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] client lang: <none>
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] server lang: <none>
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] kex follows: False
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] Compression: none
2025-11-17T12:52:01.706 [DEBUG] [Thread-54588] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:52:01.762 [DEBUG] [Thread-54588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:52:01.762 [DEBUG] [Thread-54588] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:52:01.763 [DEBUG] [Thread-54588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:52:01.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:52:01.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:52:01.818 [DEBUG] [Thread-54588] [transport.py] [_log()] userauth is OK
2025-11-17T12:52:01.818 [DEBUG] [Thread-54588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:52:01.819 [DEBUG] [Thread-54588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:52:01.819 [DEBUG] [Thread-54588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:52:01.819 [DEBUG] [Thread-54588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:52:01.840 [INFO] [Thread-54588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:52:01.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:52:01.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:52:02.836 [DEBUG] [Thread-54588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:52:02.836 [DEBUG] [Thread-54588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:52:02.884 [DEBUG] [Thread-54588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:52:02.884 [DEBUG] [Thread-54588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:52:02.892 [DEBUG] [Thread-54588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:52:02.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:52:02.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:52:02.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:52:02.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:52:02.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:52:02.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:52:02.924 [DEBUG] [Thread-54588] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:52:11.088 [DEBUG] [Thread-54590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:52:12.724 [DEBUG] [Thread-54591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:52:27.762 [DEBUG] [Thread-54592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:52:32.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:52:32.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:52:32.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:52:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 52, 1), 26.84, 16.23, 0.0, 23.55, 22.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:52:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:52:01
2025-11-17T12:52:33.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:52:33.933 [DEBUG] [Thread-54593] [transport.py] [_log()] starting thread (client mode): 0xd07cf310
2025-11-17T12:52:33.934 [DEBUG] [Thread-54593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:52:33.953 [DEBUG] [Thread-54593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:52:33.953 [INFO] [Thread-54593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] client lang: <none>
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] server lang: <none>
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] kex follows: False
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] Compression: none
2025-11-17T12:52:33.957 [DEBUG] [Thread-54593] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:52:33.972 [DEBUG] [Thread-54593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:52:33.972 [DEBUG] [Thread-54593] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:52:33.973 [DEBUG] [Thread-54593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:52:33.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:52:33.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:52:33.973 [DEBUG] [Thread-54593] [transport.py] [_log()] userauth is OK
2025-11-17T12:52:33.973 [DEBUG] [Thread-54593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:52:33.974 [DEBUG] [Thread-54593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:52:33.974 [DEBUG] [Thread-54593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:52:33.974 [DEBUG] [Thread-54593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:52:33.988 [INFO] [Thread-54593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:52:33.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:52:34.639 [DEBUG] [Thread-54593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:52:34.639 [DEBUG] [Thread-54593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:52:34.639 [DEBUG] [Thread-54593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:52:34.680 [DEBUG] [Thread-54593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:52:34.680 [DEBUG] [Thread-54593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:52:34.683 [DEBUG] [Thread-54593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:52:34.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:52:34.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:52:34.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:52:34.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:52:34.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:52:34.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:52:34.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.452825 -999.00  +21.50  19.18     22   -0.70 1 2 1 1 1   888    0 22.52 33.61 ----- 19.2 19.2 342.6 43.6 28.1 -23.4 27.2 -23.9 27.3 -22.0 27.9 -22.0
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.452825
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:52:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:52:01', tmtdew=26.84, humidity=16.23, cloud=0.0, wind=23.55, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:52:04.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:52:34.702 [DEBUG] [Thread-54593] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:52:34.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:52:34.785 [DEBUG] [Thread-54596] [transport.py] [_log()] starting thread (client mode): 0xd07bc760
2025-11-17T12:52:34.785 [DEBUG] [Thread-54596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:52:34.801 [DEBUG] [Thread-54596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:52:34.801 [INFO] [Thread-54596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] client lang: <none>
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] server lang: <none>
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] kex follows: False
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:52:34.808 [DEBUG] [Thread-54596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:52:34.809 [DEBUG] [Thread-54596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:52:34.809 [DEBUG] [Thread-54596] [transport.py] [_log()] Compression: none
2025-11-17T12:52:34.809 [DEBUG] [Thread-54596] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:52:34.865 [DEBUG] [Thread-54596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:52:34.866 [DEBUG] [Thread-54596] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:52:34.866 [DEBUG] [Thread-54596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:52:34.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:52:34.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:52:34.927 [DEBUG] [Thread-54596] [transport.py] [_log()] userauth is OK
2025-11-17T12:52:34.927 [DEBUG] [Thread-54596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:52:34.927 [DEBUG] [Thread-54596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:52:34.927 [DEBUG] [Thread-54596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:52:34.927 [DEBUG] [Thread-54596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:52:34.941 [INFO] [Thread-54596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:52:34.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:52:34.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:52:35.859 [DEBUG] [Thread-54596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:52:35.859 [DEBUG] [Thread-54596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:52:35.906 [DEBUG] [Thread-54596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:52:35.906 [DEBUG] [Thread-54596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:52:35.915 [DEBUG] [Thread-54596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:52:35.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:52:35.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:52:35.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:52:35.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:52:35.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:52:35.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:52:35.949 [DEBUG] [Thread-54596] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:52:42.789 [DEBUG] [Thread-54598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:52:46.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:52:46.480 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:52:57.820 [DEBUG] [Thread-54599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:53:05.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:53:05.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:53:05.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:53:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 52, 33), 27.87, 15.1, 0.0, 24.98, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:53:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:52:33
2025-11-17T12:53:06.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:53:06.959 [DEBUG] [Thread-54600] [transport.py] [_log()] starting thread (client mode): 0xd07ce320
2025-11-17T12:53:06.959 [DEBUG] [Thread-54600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:53:06.973 [DEBUG] [Thread-54600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:53:06.974 [INFO] [Thread-54600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] client lang: <none>
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] server lang: <none>
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] kex follows: False
2025-11-17T12:53:06.975 [DEBUG] [Thread-54600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:53:06.976 [DEBUG] [Thread-54600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:53:06.976 [DEBUG] [Thread-54600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:53:06.976 [DEBUG] [Thread-54600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:53:06.976 [DEBUG] [Thread-54600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:53:06.976 [DEBUG] [Thread-54600] [transport.py] [_log()] Compression: none
2025-11-17T12:53:06.976 [DEBUG] [Thread-54600] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:53:06.984 [DEBUG] [Thread-54600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:53:06.984 [DEBUG] [Thread-54600] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:53:06.984 [DEBUG] [Thread-54600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:53:06.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:53:06.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:53:06.985 [DEBUG] [Thread-54600] [transport.py] [_log()] userauth is OK
2025-11-17T12:53:06.985 [DEBUG] [Thread-54600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:53:06.985 [DEBUG] [Thread-54600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:53:06.985 [DEBUG] [Thread-54600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:53:06.985 [DEBUG] [Thread-54600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:53:06.998 [INFO] [Thread-54600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:53:06.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:53:07.785 [DEBUG] [Thread-54600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:53:07.785 [DEBUG] [Thread-54600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:53:07.786 [DEBUG] [Thread-54600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:53:07.826 [DEBUG] [Thread-54600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:53:07.827 [DEBUG] [Thread-54600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:53:07.830 [DEBUG] [Thread-54600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:53:07.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:53:07.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:53:07.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:53:07.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:53:07.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:53:07.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:53:07.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:53:07.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:53:07.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:53:07.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.453173 -999.00  +21.10  24.39     23   -0.70 1 2 1 1 1   888    0 22.51 39.22 ----- 24.4 24.4 335.8 28.0 27.9 -24.3 27.1 -23.6 27.2 -22.0 27.7 -23.1
2025-11-17T12:53:07.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:53:07.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:53:07.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.453173
2025-11-17T12:53:07.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:53:07.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:53:07.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:53:07.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:53:07.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:53:07.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:52:33', tmtdew=27.87, humidity=15.1, cloud=0.0, wind=24.98, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:52:34.147', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:53:07.854 [DEBUG] [Thread-54600] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:53:07.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:53:07.953 [DEBUG] [Thread-54603] [transport.py] [_log()] starting thread (client mode): 0xd31ef790
2025-11-17T12:53:07.953 [DEBUG] [Thread-54603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:53:07.970 [DEBUG] [Thread-54603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:53:07.970 [INFO] [Thread-54603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:53:07.978 [DEBUG] [Thread-54603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:53:07.978 [DEBUG] [Thread-54603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:53:07.978 [DEBUG] [Thread-54603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:53:07.978 [DEBUG] [Thread-54603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:53:07.978 [DEBUG] [Thread-54603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:53:07.978 [DEBUG] [Thread-54603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] client lang: <none>
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] server lang: <none>
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] kex follows: False
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:53:07.979 [DEBUG] [Thread-54603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:53:07.980 [DEBUG] [Thread-54603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:53:07.980 [DEBUG] [Thread-54603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:53:07.980 [DEBUG] [Thread-54603] [transport.py] [_log()] Compression: none
2025-11-17T12:53:07.980 [DEBUG] [Thread-54603] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:53:08.037 [DEBUG] [Thread-54603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:53:08.037 [DEBUG] [Thread-54603] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:53:08.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:53:08.039 [DEBUG] [Thread-54603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:53:08.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:53:08.096 [DEBUG] [Thread-54603] [transport.py] [_log()] userauth is OK
2025-11-17T12:53:08.096 [DEBUG] [Thread-54603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:53:08.096 [DEBUG] [Thread-54603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:53:08.096 [DEBUG] [Thread-54603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:53:08.097 [DEBUG] [Thread-54603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:53:08.119 [INFO] [Thread-54603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:53:08.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:53:08.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:53:09.047 [DEBUG] [Thread-54603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:53:09.048 [DEBUG] [Thread-54603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:53:09.095 [DEBUG] [Thread-54603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:53:09.095 [DEBUG] [Thread-54603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:53:09.104 [DEBUG] [Thread-54603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:53:09.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:53:09.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:53:09.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:53:09.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:53:09.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:53:09.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:53:09.139 [DEBUG] [Thread-54603] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:53:11.147 [DEBUG] [Thread-54605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:53:12.852 [DEBUG] [Thread-54606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:53:27.892 [DEBUG] [Thread-54607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:53:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:53:39.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:53:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:53:39.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 53, 5), 27.14, 15.71, 0.0, 27.56, 22.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:53:39.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:53:05
2025-11-17T12:53:39.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:53:40.112 [DEBUG] [Thread-54608] [transport.py] [_log()] starting thread (client mode): 0xd3134610
2025-11-17T12:53:40.113 [DEBUG] [Thread-54608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:53:40.132 [DEBUG] [Thread-54608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:53:40.132 [INFO] [Thread-54608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:53:40.135 [DEBUG] [Thread-54608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] client lang: <none>
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] server lang: <none>
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] kex follows: False
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] Compression: none
2025-11-17T12:53:40.136 [DEBUG] [Thread-54608] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:53:40.152 [DEBUG] [Thread-54608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:53:40.152 [DEBUG] [Thread-54608] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:53:40.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:53:40.153 [DEBUG] [Thread-54608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:53:40.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:53:40.155 [DEBUG] [Thread-54608] [transport.py] [_log()] userauth is OK
2025-11-17T12:53:40.156 [DEBUG] [Thread-54608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:53:40.156 [DEBUG] [Thread-54608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:53:40.156 [DEBUG] [Thread-54608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:53:40.156 [DEBUG] [Thread-54608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:53:40.191 [INFO] [Thread-54608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:53:40.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:53:40.830 [DEBUG] [Thread-54608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:53:40.830 [DEBUG] [Thread-54608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:53:40.830 [DEBUG] [Thread-54608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:53:40.871 [DEBUG] [Thread-54608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:53:40.872 [DEBUG] [Thread-54608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:53:40.874 [DEBUG] [Thread-54608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:53:40.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:53:40.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:53:40.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:53:40.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:53:40.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:53:40.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:53:40.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:53:40.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:53:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:53:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.453520 -999.00  +21.00  14.95     23   -0.80 1 1 1 1 1   888    0 22.66 37.55 ----- 14.9 14.9 353.7 28.2 27.9 -23.7 27.1 -24.0 27.2 -22.4 27.6 -21.9
2025-11-17T12:53:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:53:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:53:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.453520
2025-11-17T12:53:40.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:53:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:53:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:53:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:53:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T12:53:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:53:05', tmtdew=27.14, humidity=15.71, cloud=0.0, wind=27.56, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:53:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:53:40.897 [DEBUG] [Thread-54608] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:53:40.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:53:41.005 [DEBUG] [Thread-54611] [transport.py] [_log()] starting thread (client mode): 0xd071bd00
2025-11-17T12:53:41.005 [DEBUG] [Thread-54611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:53:41.020 [DEBUG] [Thread-54611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:53:41.020 [INFO] [Thread-54611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] client lang: <none>
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] server lang: <none>
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] kex follows: False
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:53:41.028 [DEBUG] [Thread-54611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:53:41.029 [DEBUG] [Thread-54611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:53:41.029 [DEBUG] [Thread-54611] [transport.py] [_log()] Compression: none
2025-11-17T12:53:41.029 [DEBUG] [Thread-54611] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:53:41.092 [DEBUG] [Thread-54611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:53:41.092 [DEBUG] [Thread-54611] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:53:41.093 [DEBUG] [Thread-54611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:53:41.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:53:41.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:53:41.147 [DEBUG] [Thread-54611] [transport.py] [_log()] userauth is OK
2025-11-17T12:53:41.147 [DEBUG] [Thread-54611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:53:41.147 [DEBUG] [Thread-54611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:53:41.147 [DEBUG] [Thread-54611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:53:41.148 [DEBUG] [Thread-54611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:53:41.167 [INFO] [Thread-54611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:53:41.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:53:41.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:53:42.062 [DEBUG] [Thread-54611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:53:42.062 [DEBUG] [Thread-54611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:53:42.110 [DEBUG] [Thread-54611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:53:42.110 [DEBUG] [Thread-54611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:53:42.119 [DEBUG] [Thread-54611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:53:42.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:53:42.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:53:42.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:53:42.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:53:42.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:53:42.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:53:42.154 [DEBUG] [Thread-54611] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:53:42.922 [DEBUG] [Thread-54613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:53:46.621 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:53:46.622 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:53:57.958 [DEBUG] [Thread-54614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:54:11.192 [DEBUG] [Thread-54615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:54:12.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:54:12.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:54:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:54:12.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 54, 9), 26.37, 16.8, 0.0, 17.13, 21.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:54:12.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:54:09
2025-11-17T12:54:12.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:54:12.982 [DEBUG] [Thread-54616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:54:13.106 [DEBUG] [Thread-54617] [transport.py] [_log()] starting thread (client mode): 0xd07cceb0
2025-11-17T12:54:13.106 [DEBUG] [Thread-54617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:54:13.126 [DEBUG] [Thread-54617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:54:13.127 [INFO] [Thread-54617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:54:13.129 [DEBUG] [Thread-54617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:54:13.129 [DEBUG] [Thread-54617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:54:13.129 [DEBUG] [Thread-54617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:54:13.129 [DEBUG] [Thread-54617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:54:13.129 [DEBUG] [Thread-54617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:54:13.129 [DEBUG] [Thread-54617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] client lang: <none>
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] server lang: <none>
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] kex follows: False
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] Compression: none
2025-11-17T12:54:13.130 [DEBUG] [Thread-54617] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:54:13.148 [DEBUG] [Thread-54617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:54:13.148 [DEBUG] [Thread-54617] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:54:13.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:54:13.149 [DEBUG] [Thread-54617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:54:13.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:54:13.151 [DEBUG] [Thread-54617] [transport.py] [_log()] userauth is OK
2025-11-17T12:54:13.151 [DEBUG] [Thread-54617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:54:13.151 [DEBUG] [Thread-54617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:54:13.151 [DEBUG] [Thread-54617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:54:13.151 [DEBUG] [Thread-54617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:54:13.167 [INFO] [Thread-54617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:54:13.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:54:13.963 [DEBUG] [Thread-54617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:54:13.963 [DEBUG] [Thread-54617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:54:13.964 [DEBUG] [Thread-54617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:54:14.004 [DEBUG] [Thread-54617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:54:14.005 [DEBUG] [Thread-54617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:54:14.007 [DEBUG] [Thread-54617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:54:14.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:54:14.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:54:14.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:54:14.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:54:14.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:54:14.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:54:14.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:54:14.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:54:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:54:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.453867 -999.00  +20.70  15.63     23   -1.10 1 2 1 1 1   888    0 22.60 41.01 ----- 15.6 15.6 334.8 24.9 27.7 -24.1 26.9 -23.1 27.1 -21.8 27.3 -22.9
2025-11-17T12:54:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:54:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:54:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.453867
2025-11-17T12:54:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:54:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:54:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:54:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:54:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:54:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:54:09', tmtdew=26.37, humidity=16.8, cloud=0.0, wind=17.13, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:53:34.109', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:54:14.033 [DEBUG] [Thread-54617] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:54:14.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:54:14.128 [DEBUG] [Thread-54620] [transport.py] [_log()] starting thread (client mode): 0xd07bf820
2025-11-17T12:54:14.129 [DEBUG] [Thread-54620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:54:14.145 [DEBUG] [Thread-54620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:54:14.145 [INFO] [Thread-54620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:54:14.152 [DEBUG] [Thread-54620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] client lang: <none>
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] server lang: <none>
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] kex follows: False
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] Compression: none
2025-11-17T12:54:14.153 [DEBUG] [Thread-54620] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:54:14.211 [DEBUG] [Thread-54620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:54:14.211 [DEBUG] [Thread-54620] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:54:14.212 [DEBUG] [Thread-54620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:54:14.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:54:14.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:54:14.267 [DEBUG] [Thread-54620] [transport.py] [_log()] userauth is OK
2025-11-17T12:54:14.268 [DEBUG] [Thread-54620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:54:14.268 [DEBUG] [Thread-54620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:54:14.268 [DEBUG] [Thread-54620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:54:14.268 [DEBUG] [Thread-54620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:54:14.286 [INFO] [Thread-54620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:54:14.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:54:14.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:54:15.245 [DEBUG] [Thread-54620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:54:15.245 [DEBUG] [Thread-54620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:54:15.292 [DEBUG] [Thread-54620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:54:15.292 [DEBUG] [Thread-54620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:54:15.301 [DEBUG] [Thread-54620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:54:15.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:54: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')
2025-11-17T12:54: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
2025-11-17T12:54:15.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:54:15.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:54:15.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:54:15.335 [DEBUG] [Thread-54620] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:54:28.011 [DEBUG] [Thread-54622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:54:43.050 [DEBUG] [Thread-54623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:54:45.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:54:45.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:54:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:54:46.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 54, 41), 26.12, 17.06, 0.0, 10.2, 21.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:54:46.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:54:41
2025-11-17T12:54:46.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:54:46.307 [DEBUG] [Thread-54624] [transport.py] [_log()] starting thread (client mode): 0xd07bdd80
2025-11-17T12:54:46.307 [DEBUG] [Thread-54624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:54:46.327 [DEBUG] [Thread-54624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:54:46.328 [INFO] [Thread-54624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:54:46.330 [DEBUG] [Thread-54624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] client lang: <none>
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] server lang: <none>
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] kex follows: False
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] Compression: none
2025-11-17T12:54:46.331 [DEBUG] [Thread-54624] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:54:46.351 [DEBUG] [Thread-54624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:54:46.351 [DEBUG] [Thread-54624] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:54:46.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:54:46.352 [DEBUG] [Thread-54624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:54:46.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:54:46.354 [DEBUG] [Thread-54624] [transport.py] [_log()] userauth is OK
2025-11-17T12:54:46.354 [DEBUG] [Thread-54624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:54:46.355 [DEBUG] [Thread-54624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:54:46.355 [DEBUG] [Thread-54624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:54:46.355 [DEBUG] [Thread-54624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:54:46.392 [INFO] [Thread-54624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:54:46.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:54:46.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:54:46.767 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:54:47.040 [DEBUG] [Thread-54624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:54:47.040 [DEBUG] [Thread-54624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:54:47.040 [DEBUG] [Thread-54624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:54:47.081 [DEBUG] [Thread-54624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:54:47.081 [DEBUG] [Thread-54624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:54:47.084 [DEBUG] [Thread-54624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:54:47.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:54:47.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:54:47.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:54:47.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:54:47.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:54:47.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:54:47.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:54:47.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:54:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:54:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454215 -999.00  +20.70  18.06     23   -0.90 1 2 1 1 1   888    0 22.97 44.31 ----- 18.1 18.1 33.0 20.1 27.7 -23.3 26.9 -22.6 27.2 -21.1 27.5 -20.9
2025-11-17T12:54:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:54:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:54:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454215
2025-11-17T12:54:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:54:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:54:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:54:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:54:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:54:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:54:41', tmtdew=26.12, humidity=17.06, cloud=0.0, wind=10.2, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:04.176', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:54:47.110 [DEBUG] [Thread-54624] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:54:47.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:54:47.205 [DEBUG] [Thread-54627] [transport.py] [_log()] starting thread (client mode): 0xd31630a0
2025-11-17T12:54:47.205 [DEBUG] [Thread-54627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:54:47.219 [DEBUG] [Thread-54627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:54:47.220 [INFO] [Thread-54627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:54:47.227 [DEBUG] [Thread-54627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:54:47.227 [DEBUG] [Thread-54627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:54:47.227 [DEBUG] [Thread-54627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] client lang: <none>
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] server lang: <none>
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] kex follows: False
2025-11-17T12:54:47.228 [DEBUG] [Thread-54627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:54:47.229 [DEBUG] [Thread-54627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:54:47.229 [DEBUG] [Thread-54627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:54:47.229 [DEBUG] [Thread-54627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:54:47.229 [DEBUG] [Thread-54627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:54:47.229 [DEBUG] [Thread-54627] [transport.py] [_log()] Compression: none
2025-11-17T12:54:47.229 [DEBUG] [Thread-54627] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:54:47.287 [DEBUG] [Thread-54627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:54:47.288 [DEBUG] [Thread-54627] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:54:47.289 [DEBUG] [Thread-54627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:54:47.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:54:47.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:54:47.343 [DEBUG] [Thread-54627] [transport.py] [_log()] userauth is OK
2025-11-17T12:54:47.344 [DEBUG] [Thread-54627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:54:47.344 [DEBUG] [Thread-54627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:54:47.344 [DEBUG] [Thread-54627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:54:47.344 [DEBUG] [Thread-54627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:54:47.363 [INFO] [Thread-54627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:54:47.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:54:47.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:54:48.229 [DEBUG] [Thread-54627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:54:48.229 [DEBUG] [Thread-54627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:54:48.277 [DEBUG] [Thread-54627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:54:48.277 [DEBUG] [Thread-54627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:54:48.286 [DEBUG] [Thread-54627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:54:48.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:54:48.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:54:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:54:48.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:54:48.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:54:48.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:54:48.321 [DEBUG] [Thread-54627] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:54:58.078 [DEBUG] [Thread-54629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:55:11.242 [DEBUG] [Thread-54630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:55:13.118 [DEBUG] [Thread-54631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:55:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:55:18.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:55:18.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:55:19.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 55, 13), 26.14, 17.06, 0.0, 9.76, 21.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:55:19.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:55:13
2025-11-17T12:55:19.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:55:19.277 [DEBUG] [Thread-54632] [transport.py] [_log()] starting thread (client mode): 0xd31edc30
2025-11-17T12:55:19.277 [DEBUG] [Thread-54632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:55:19.298 [DEBUG] [Thread-54632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:55:19.298 [INFO] [Thread-54632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:55:19.301 [DEBUG] [Thread-54632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:55:19.301 [DEBUG] [Thread-54632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:55:19.301 [DEBUG] [Thread-54632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] client lang: <none>
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] server lang: <none>
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] kex follows: False
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] Compression: none
2025-11-17T12:55:19.302 [DEBUG] [Thread-54632] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:55:19.317 [DEBUG] [Thread-54632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:55:19.318 [DEBUG] [Thread-54632] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:55:19.318 [DEBUG] [Thread-54632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:55:19.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:55:19.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:55:19.320 [DEBUG] [Thread-54632] [transport.py] [_log()] userauth is OK
2025-11-17T12:55:19.321 [DEBUG] [Thread-54632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:55:19.321 [DEBUG] [Thread-54632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:55:19.321 [DEBUG] [Thread-54632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:55:19.321 [DEBUG] [Thread-54632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:55:19.355 [INFO] [Thread-54632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:55:19.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:55:20.212 [DEBUG] [Thread-54632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:55:20.212 [DEBUG] [Thread-54632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:55:20.212 [DEBUG] [Thread-54632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:55:20.254 [DEBUG] [Thread-54632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:55:20.254 [DEBUG] [Thread-54632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:55:20.256 [DEBUG] [Thread-54632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:55:20.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:55:20.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:55:20.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:55:20.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:55:20.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:55:20.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:55:20.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:55:20.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:55:20.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:55:20.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:55:20.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:55:20.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:55:20.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:55:20.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:55:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:55:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:55:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:55:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:55:20.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:55:13', tmtdew=26.14, humidity=17.06, cloud=0.0, wind=9.76, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:55:20.276 [DEBUG] [Thread-54632] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:55:20.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:55:20.362 [DEBUG] [Thread-54635] [transport.py] [_log()] starting thread (client mode): 0xd0718460
2025-11-17T12:55:20.362 [DEBUG] [Thread-54635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:55:20.377 [DEBUG] [Thread-54635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:55:20.378 [INFO] [Thread-54635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:55:20.386 [DEBUG] [Thread-54635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:55:20.387 [DEBUG] [Thread-54635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:55:20.387 [DEBUG] [Thread-54635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:55:20.387 [DEBUG] [Thread-54635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:55:20.387 [DEBUG] [Thread-54635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:55:20.387 [DEBUG] [Thread-54635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:55:20.387 [DEBUG] [Thread-54635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:55:20.388 [DEBUG] [Thread-54635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:55:20.388 [DEBUG] [Thread-54635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:55:20.388 [DEBUG] [Thread-54635] [transport.py] [_log()] client lang: <none>
2025-11-17T12:55:20.388 [DEBUG] [Thread-54635] [transport.py] [_log()] server lang: <none>
2025-11-17T12:55:20.388 [DEBUG] [Thread-54635] [transport.py] [_log()] kex follows: False
2025-11-17T12:55:20.388 [DEBUG] [Thread-54635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:55:20.388 [DEBUG] [Thread-54635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:55:20.388 [DEBUG] [Thread-54635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:55:20.389 [DEBUG] [Thread-54635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:55:20.389 [DEBUG] [Thread-54635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:55:20.389 [DEBUG] [Thread-54635] [transport.py] [_log()] Compression: none
2025-11-17T12:55:20.389 [DEBUG] [Thread-54635] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:55:20.444 [DEBUG] [Thread-54635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:55:20.445 [DEBUG] [Thread-54635] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:55:20.445 [DEBUG] [Thread-54635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:55:20.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:55:20.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:55:20.499 [DEBUG] [Thread-54635] [transport.py] [_log()] userauth is OK
2025-11-17T12:55:20.500 [DEBUG] [Thread-54635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:55:20.500 [DEBUG] [Thread-54635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:55:20.500 [DEBUG] [Thread-54635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:55:20.500 [DEBUG] [Thread-54635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:55:20.519 [INFO] [Thread-54635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:55:20.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:55:20.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:55:21.383 [DEBUG] [Thread-54635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:55:21.384 [DEBUG] [Thread-54635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:55:21.431 [DEBUG] [Thread-54635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:55:21.431 [DEBUG] [Thread-54635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:55:21.441 [DEBUG] [Thread-54635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:55:21.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:55:21.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:55:21.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
2025-11-17T12:55:21.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:55:21.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:55:21.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:55:21.475 [DEBUG] [Thread-54635] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:55:28.147 [DEBUG] [Thread-54637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:55:43.196 [DEBUG] [Thread-54638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:55:46.907 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:55:46.908 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:55:51.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:55:51.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:55:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:55:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 55, 45), 26.15, 16.89, 0.0, 18.56, 21.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:55:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:55:45
2025-11-17T12:55:52.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:55:52.474 [DEBUG] [Thread-54639] [transport.py] [_log()] starting thread (client mode): 0xd0722ad0
2025-11-17T12:55:52.474 [DEBUG] [Thread-54639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:55:52.494 [DEBUG] [Thread-54639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:55:52.494 [INFO] [Thread-54639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:55:52.497 [DEBUG] [Thread-54639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] client lang: <none>
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] server lang: <none>
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] kex follows: False
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] Compression: none
2025-11-17T12:55:52.498 [DEBUG] [Thread-54639] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:55:52.516 [DEBUG] [Thread-54639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:55:52.516 [DEBUG] [Thread-54639] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:55:52.516 [DEBUG] [Thread-54639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:55:52.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:55:52.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:55:52.516 [DEBUG] [Thread-54639] [transport.py] [_log()] userauth is OK
2025-11-17T12:55:52.516 [DEBUG] [Thread-54639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:55:52.516 [DEBUG] [Thread-54639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:55:52.516 [DEBUG] [Thread-54639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:55:52.516 [DEBUG] [Thread-54639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:55:52.525 [INFO] [Thread-54639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:55:52.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:55:53.274 [DEBUG] [Thread-54639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:55:53.274 [DEBUG] [Thread-54639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:55:53.274 [DEBUG] [Thread-54639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:55:53.315 [DEBUG] [Thread-54639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:55:53.315 [DEBUG] [Thread-54639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:55:53.317 [DEBUG] [Thread-54639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:55:53.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:55:53.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:55:53.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:55:53.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:55:53.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:55:53.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:55:53.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:55:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:55:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:55:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:55:45', tmtdew=26.15, humidity=16.89, cloud=0.0, wind=18.56, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:55:53.339 [DEBUG] [Thread-54639] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:55:53.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:55:53.422 [DEBUG] [Thread-54642] [transport.py] [_log()] starting thread (client mode): 0xd31ee680
2025-11-17T12:55:53.422 [DEBUG] [Thread-54642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:55:53.439 [DEBUG] [Thread-54642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:55:53.439 [INFO] [Thread-54642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] client lang: <none>
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] server lang: <none>
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] kex follows: False
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] Compression: none
2025-11-17T12:55:53.446 [DEBUG] [Thread-54642] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:55:53.506 [DEBUG] [Thread-54642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:55:53.506 [DEBUG] [Thread-54642] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:55:53.506 [DEBUG] [Thread-54642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:55:53.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:55:53.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:55:53.563 [DEBUG] [Thread-54642] [transport.py] [_log()] userauth is OK
2025-11-17T12:55:53.563 [DEBUG] [Thread-54642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:55:53.563 [DEBUG] [Thread-54642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:55:53.563 [DEBUG] [Thread-54642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:55:53.563 [DEBUG] [Thread-54642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:55:53.579 [INFO] [Thread-54642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:55:53.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:55:53.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:55:54.446 [DEBUG] [Thread-54642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:55:54.446 [DEBUG] [Thread-54642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:55:54.494 [DEBUG] [Thread-54642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:55:54.494 [DEBUG] [Thread-54642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:55:54.501 [DEBUG] [Thread-54642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:55:54.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:55:54.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:55:54.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:55:54.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:55:54.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:55:54.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:55:54.532 [DEBUG] [Thread-54642] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:55:58.224 [DEBUG] [Thread-54644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:56:11.295 [DEBUG] [Thread-54645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:56:13.266 [DEBUG] [Thread-54646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:56:24.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:56:24.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:56:24.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:56:25.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 56, 17), 26.32, 16.73, 0.0, 23.89, 22.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:56:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:56:17
2025-11-17T12:56:25.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:56:25.507 [DEBUG] [Thread-54647] [transport.py] [_log()] starting thread (client mode): 0xd07214e0
2025-11-17T12:56:25.507 [DEBUG] [Thread-54647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:56:25.527 [DEBUG] [Thread-54647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:56:25.527 [INFO] [Thread-54647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:56:25.530 [DEBUG] [Thread-54647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:56:25.530 [DEBUG] [Thread-54647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] client lang: <none>
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] server lang: <none>
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] kex follows: False
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] Compression: none
2025-11-17T12:56:25.531 [DEBUG] [Thread-54647] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:56:25.550 [DEBUG] [Thread-54647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:56:25.550 [DEBUG] [Thread-54647] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:56:25.551 [DEBUG] [Thread-54647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:56:25.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:56:25.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:56:25.552 [DEBUG] [Thread-54647] [transport.py] [_log()] userauth is OK
2025-11-17T12:56:25.553 [DEBUG] [Thread-54647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:56:25.553 [DEBUG] [Thread-54647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:56:25.553 [DEBUG] [Thread-54647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:56:25.553 [DEBUG] [Thread-54647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:56:25.577 [INFO] [Thread-54647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:56:25.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:56:26.217 [DEBUG] [Thread-54647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:56:26.218 [DEBUG] [Thread-54647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:56:26.218 [DEBUG] [Thread-54647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:56:26.258 [DEBUG] [Thread-54647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:56:26.258 [DEBUG] [Thread-54647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:56:26.260 [DEBUG] [Thread-54647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:56:26.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:56:26.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:56:26.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:56:26.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:56:26.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:56:26.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:56:26.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:56:26.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:56:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:56:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:56:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:56:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:56:26.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:56:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:56:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:56:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:56:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:56:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:56:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:56:17', tmtdew=26.32, humidity=16.73, cloud=0.0, wind=23.89, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:56:26.280 [DEBUG] [Thread-54647] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:56:26.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:56:26.366 [DEBUG] [Thread-54650] [transport.py] [_log()] starting thread (client mode): 0xd07bee30
2025-11-17T12:56:26.366 [DEBUG] [Thread-54650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:56:26.382 [DEBUG] [Thread-54650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:56:26.382 [INFO] [Thread-54650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:56:26.393 [DEBUG] [Thread-54650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:56:26.393 [DEBUG] [Thread-54650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:56:26.393 [DEBUG] [Thread-54650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:56:26.393 [DEBUG] [Thread-54650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:56:26.394 [DEBUG] [Thread-54650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:56:26.394 [DEBUG] [Thread-54650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:56:26.394 [DEBUG] [Thread-54650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:56:26.394 [DEBUG] [Thread-54650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:56:26.394 [DEBUG] [Thread-54650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:56:26.394 [DEBUG] [Thread-54650] [transport.py] [_log()] client lang: <none>
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] server lang: <none>
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] kex follows: False
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] Compression: none
2025-11-17T12:56:26.395 [DEBUG] [Thread-54650] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:56:26.449 [DEBUG] [Thread-54650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:56:26.450 [DEBUG] [Thread-54650] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:56:26.450 [DEBUG] [Thread-54650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:56:26.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:56:26.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:56:26.507 [DEBUG] [Thread-54650] [transport.py] [_log()] userauth is OK
2025-11-17T12:56:26.508 [DEBUG] [Thread-54650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:56:26.508 [DEBUG] [Thread-54650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:56:26.508 [DEBUG] [Thread-54650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:56:26.508 [DEBUG] [Thread-54650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:56:26.528 [INFO] [Thread-54650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:56:26.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:56:26.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:56:27.441 [DEBUG] [Thread-54650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:56:27.442 [DEBUG] [Thread-54650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:56:27.489 [DEBUG] [Thread-54650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:56:27.489 [DEBUG] [Thread-54650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:56:27.498 [DEBUG] [Thread-54650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:56:27.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:56:27.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:56:27.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:56:27.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:56:27.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:56:27.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:56:27.532 [DEBUG] [Thread-54650] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:56:28.296 [DEBUG] [Thread-54652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:56:43.345 [DEBUG] [Thread-54653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:56:47.048 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:56:47.049 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:56:57.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:56:57.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:56:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:56:58.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 56, 49), 26.73, 16.65, 0.0, 15.02, 22.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:56:58.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:56:49
2025-11-17T12:56:58.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:56:58.371 [DEBUG] [Thread-54654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:56:58.482 [DEBUG] [Thread-54655] [transport.py] [_log()] starting thread (client mode): 0xd075a080
2025-11-17T12:56:58.482 [DEBUG] [Thread-54655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:56:58.502 [DEBUG] [Thread-54655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:56:58.502 [INFO] [Thread-54655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] client lang: <none>
2025-11-17T12:56:58.505 [DEBUG] [Thread-54655] [transport.py] [_log()] server lang: <none>
2025-11-17T12:56:58.506 [DEBUG] [Thread-54655] [transport.py] [_log()] kex follows: False
2025-11-17T12:56:58.506 [DEBUG] [Thread-54655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:56:58.506 [DEBUG] [Thread-54655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:56:58.506 [DEBUG] [Thread-54655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:56:58.506 [DEBUG] [Thread-54655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:56:58.506 [DEBUG] [Thread-54655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:56:58.506 [DEBUG] [Thread-54655] [transport.py] [_log()] Compression: none
2025-11-17T12:56:58.506 [DEBUG] [Thread-54655] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:56:58.525 [DEBUG] [Thread-54655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:56:58.526 [DEBUG] [Thread-54655] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:56:58.526 [DEBUG] [Thread-54655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:56:58.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:56:58.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:56:58.529 [DEBUG] [Thread-54655] [transport.py] [_log()] userauth is OK
2025-11-17T12:56:58.529 [DEBUG] [Thread-54655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:56:58.529 [DEBUG] [Thread-54655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:56:58.529 [DEBUG] [Thread-54655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:56:58.529 [DEBUG] [Thread-54655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:56:58.548 [INFO] [Thread-54655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:56:58.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:56:59.318 [DEBUG] [Thread-54655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:56:59.319 [DEBUG] [Thread-54655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:56:59.319 [DEBUG] [Thread-54655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:56:59.359 [DEBUG] [Thread-54655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:56:59.359 [DEBUG] [Thread-54655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:56:59.362 [DEBUG] [Thread-54655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:56:59.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:56:59.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:56:59.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:56:59.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:56:59.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:56:59.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:56:59.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:56:59.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:56:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:56:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:56:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:56:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:56:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:56:59.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:56:59.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:56:59.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:56:59.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:56:59.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:56:59.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:56:49', tmtdew=26.73, humidity=16.65, cloud=0.0, wind=15.02, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:56:59.388 [DEBUG] [Thread-54655] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:56:59.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:56:59.483 [DEBUG] [Thread-54658] [transport.py] [_log()] starting thread (client mode): 0xd07be500
2025-11-17T12:56:59.483 [DEBUG] [Thread-54658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:56:59.501 [DEBUG] [Thread-54658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:56:59.501 [INFO] [Thread-54658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] client lang: <none>
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] server lang: <none>
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] kex follows: False
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:56:59.509 [DEBUG] [Thread-54658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:56:59.510 [DEBUG] [Thread-54658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:56:59.510 [DEBUG] [Thread-54658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:56:59.510 [DEBUG] [Thread-54658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:56:59.510 [DEBUG] [Thread-54658] [transport.py] [_log()] Compression: none
2025-11-17T12:56:59.510 [DEBUG] [Thread-54658] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:56:59.574 [DEBUG] [Thread-54658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:56:59.574 [DEBUG] [Thread-54658] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:56:59.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:56:59.575 [DEBUG] [Thread-54658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:56:59.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:56:59.631 [DEBUG] [Thread-54658] [transport.py] [_log()] userauth is OK
2025-11-17T12:56:59.632 [DEBUG] [Thread-54658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:56:59.632 [DEBUG] [Thread-54658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:56:59.632 [DEBUG] [Thread-54658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:56:59.632 [DEBUG] [Thread-54658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:56:59.652 [INFO] [Thread-54658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:56:59.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:56:59.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:57:00.526 [DEBUG] [Thread-54658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:57:00.526 [DEBUG] [Thread-54658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:57:00.573 [DEBUG] [Thread-54658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:57:00.573 [DEBUG] [Thread-54658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:57:00.591 [DEBUG] [Thread-54658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:57:00.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:57:00.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:57:00.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:57:00.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:57:00.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:57:00.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:57:00.626 [DEBUG] [Thread-54658] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:57:11.341 [DEBUG] [Thread-54660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:57:13.393 [DEBUG] [Thread-54661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:57:28.428 [DEBUG] [Thread-54662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:57:30.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:57:30.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:57:30.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:57:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 57, 21), 26.8, 16.57, 0.0, 16.32, 22.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:57:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:57:21
2025-11-17T12:57:31.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:57:31.565 [DEBUG] [Thread-54663] [transport.py] [_log()] starting thread (client mode): 0xd31b2290
2025-11-17T12:57:31.565 [DEBUG] [Thread-54663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:57:31.585 [DEBUG] [Thread-54663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:57:31.586 [INFO] [Thread-54663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:57:31.589 [DEBUG] [Thread-54663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:57:31.589 [DEBUG] [Thread-54663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:57:31.589 [DEBUG] [Thread-54663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:57:31.589 [DEBUG] [Thread-54663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:57:31.589 [DEBUG] [Thread-54663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:57:31.589 [DEBUG] [Thread-54663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:57:31.589 [DEBUG] [Thread-54663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:57:31.589 [DEBUG] [Thread-54663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] client lang: <none>
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] server lang: <none>
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] kex follows: False
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] Compression: none
2025-11-17T12:57:31.590 [DEBUG] [Thread-54663] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:57:31.607 [DEBUG] [Thread-54663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:57:31.607 [DEBUG] [Thread-54663] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:57:31.607 [DEBUG] [Thread-54663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:57:31.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:57:31.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:57:31.608 [DEBUG] [Thread-54663] [transport.py] [_log()] userauth is OK
2025-11-17T12:57:31.608 [DEBUG] [Thread-54663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:57:31.608 [DEBUG] [Thread-54663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:57:31.608 [DEBUG] [Thread-54663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:57:31.608 [DEBUG] [Thread-54663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:57:31.623 [INFO] [Thread-54663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:57:31.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:57:32.233 [DEBUG] [Thread-54663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:57:32.233 [DEBUG] [Thread-54663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:57:32.234 [DEBUG] [Thread-54663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:57:32.274 [DEBUG] [Thread-54663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:57:32.274 [DEBUG] [Thread-54663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:57:32.277 [DEBUG] [Thread-54663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:57:32.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:57:32.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:57:32.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:57:32.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:57:32.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:57:32.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:57:32.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:57:32.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:57:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:57:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:57:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:57:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:57:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:57:32.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:57:32.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:57:32.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:57:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:57:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:57:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:57:21', tmtdew=26.8, humidity=16.57, cloud=0.0, wind=16.32, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:57:32.301 [DEBUG] [Thread-54663] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:57:32.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:57:32.397 [DEBUG] [Thread-54666] [transport.py] [_log()] starting thread (client mode): 0xd31b00a0
2025-11-17T12:57:32.397 [DEBUG] [Thread-54666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:57:32.417 [DEBUG] [Thread-54666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:57:32.417 [INFO] [Thread-54666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:57:32.425 [DEBUG] [Thread-54666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:57:32.425 [DEBUG] [Thread-54666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:57:32.425 [DEBUG] [Thread-54666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:57:32.425 [DEBUG] [Thread-54666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:57:32.425 [DEBUG] [Thread-54666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:57:32.425 [DEBUG] [Thread-54666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:57:32.426 [DEBUG] [Thread-54666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:57:32.426 [DEBUG] [Thread-54666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:57:32.426 [DEBUG] [Thread-54666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:57:32.426 [DEBUG] [Thread-54666] [transport.py] [_log()] client lang: <none>
2025-11-17T12:57:32.426 [DEBUG] [Thread-54666] [transport.py] [_log()] server lang: <none>
2025-11-17T12:57:32.426 [DEBUG] [Thread-54666] [transport.py] [_log()] kex follows: False
2025-11-17T12:57:32.426 [DEBUG] [Thread-54666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:57:32.426 [DEBUG] [Thread-54666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:57:32.427 [DEBUG] [Thread-54666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:57:32.427 [DEBUG] [Thread-54666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:57:32.427 [DEBUG] [Thread-54666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:57:32.427 [DEBUG] [Thread-54666] [transport.py] [_log()] Compression: none
2025-11-17T12:57:32.427 [DEBUG] [Thread-54666] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:57:32.484 [DEBUG] [Thread-54666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:57:32.484 [DEBUG] [Thread-54666] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:57:32.485 [DEBUG] [Thread-54666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:57:32.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:57:32.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:57:32.544 [DEBUG] [Thread-54666] [transport.py] [_log()] userauth is OK
2025-11-17T12:57:32.544 [DEBUG] [Thread-54666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:57:32.544 [DEBUG] [Thread-54666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:57:32.544 [DEBUG] [Thread-54666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:57:32.544 [DEBUG] [Thread-54666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:57:32.566 [INFO] [Thread-54666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:57:32.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:57:32.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:57:33.487 [DEBUG] [Thread-54666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:57:33.488 [DEBUG] [Thread-54666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:57:33.535 [DEBUG] [Thread-54666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:57:33.536 [DEBUG] [Thread-54666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:57:33.544 [DEBUG] [Thread-54666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:57:33.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:57: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')
2025-11-17T12:57:33.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:57:33.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:57:33.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:57:33.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:57:33.579 [DEBUG] [Thread-54666] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:57:43.460 [DEBUG] [Thread-54668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:57:47.190 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:57:47.191 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:57:58.499 [DEBUG] [Thread-54669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:58:03.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:58:03.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:58:03.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:58:04.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 57, 53), 26.75, 16.55, 0.0, 13.8, 22.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:58:04.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:57:53
2025-11-17T12:58:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:58:04.548 [DEBUG] [Thread-54670] [transport.py] [_log()] starting thread (client mode): 0xd31620b0
2025-11-17T12:58:04.548 [DEBUG] [Thread-54670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:58:04.570 [DEBUG] [Thread-54670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:58:04.571 [INFO] [Thread-54670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] client lang: <none>
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] server lang: <none>
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] kex follows: False
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] Compression: none
2025-11-17T12:58:04.574 [DEBUG] [Thread-54670] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:58:04.591 [DEBUG] [Thread-54670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:58:04.591 [DEBUG] [Thread-54670] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:58:04.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:58:04.592 [DEBUG] [Thread-54670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:58:04.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:58:04.594 [DEBUG] [Thread-54670] [transport.py] [_log()] userauth is OK
2025-11-17T12:58:04.594 [DEBUG] [Thread-54670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:58:04.594 [DEBUG] [Thread-54670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:58:04.594 [DEBUG] [Thread-54670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:58:04.594 [DEBUG] [Thread-54670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:58:04.611 [INFO] [Thread-54670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:58:04.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:58:05.376 [DEBUG] [Thread-54670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:58:05.376 [DEBUG] [Thread-54670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:58:05.376 [DEBUG] [Thread-54670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:58:05.416 [DEBUG] [Thread-54670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:58:05.416 [DEBUG] [Thread-54670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:58:05.419 [DEBUG] [Thread-54670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:58:05.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:58:05.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:58:05.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:58:05.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:58:05.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:58:05.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:58:05.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:58:05.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:58:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:58:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:58:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:58:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:58:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:58:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:58:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:58:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:58:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:58:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:58:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:57:53', tmtdew=26.75, humidity=16.55, cloud=0.0, wind=13.8, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:58:05.439 [DEBUG] [Thread-54670] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:58:05.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:58:05.528 [DEBUG] [Thread-54673] [transport.py] [_log()] starting thread (client mode): 0xd071a440
2025-11-17T12:58:05.528 [DEBUG] [Thread-54673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:58:05.542 [DEBUG] [Thread-54673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:58:05.543 [INFO] [Thread-54673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:58:05.550 [DEBUG] [Thread-54673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:58:05.550 [DEBUG] [Thread-54673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:58:05.550 [DEBUG] [Thread-54673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:58:05.550 [DEBUG] [Thread-54673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:58:05.550 [DEBUG] [Thread-54673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:58:05.551 [DEBUG] [Thread-54673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:58:05.551 [DEBUG] [Thread-54673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:58:05.551 [DEBUG] [Thread-54673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:58:05.551 [DEBUG] [Thread-54673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:58:05.551 [DEBUG] [Thread-54673] [transport.py] [_log()] client lang: <none>
2025-11-17T12:58:05.551 [DEBUG] [Thread-54673] [transport.py] [_log()] server lang: <none>
2025-11-17T12:58:05.551 [DEBUG] [Thread-54673] [transport.py] [_log()] kex follows: False
2025-11-17T12:58:05.551 [DEBUG] [Thread-54673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:58:05.552 [DEBUG] [Thread-54673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:58:05.552 [DEBUG] [Thread-54673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:58:05.552 [DEBUG] [Thread-54673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:58:05.552 [DEBUG] [Thread-54673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:58:05.552 [DEBUG] [Thread-54673] [transport.py] [_log()] Compression: none
2025-11-17T12:58:05.552 [DEBUG] [Thread-54673] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:58:05.608 [DEBUG] [Thread-54673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:58:05.609 [DEBUG] [Thread-54673] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:58:05.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:58:05.610 [DEBUG] [Thread-54673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:58:05.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:58:05.663 [DEBUG] [Thread-54673] [transport.py] [_log()] userauth is OK
2025-11-17T12:58:05.664 [DEBUG] [Thread-54673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:58:05.664 [DEBUG] [Thread-54673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:58:05.664 [DEBUG] [Thread-54673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:58:05.664 [DEBUG] [Thread-54673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:58:05.683 [INFO] [Thread-54673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:58:05.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:58:05.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:58:06.593 [DEBUG] [Thread-54673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:58:06.593 [DEBUG] [Thread-54673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:58:06.642 [DEBUG] [Thread-54673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:58:06.642 [DEBUG] [Thread-54673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:58:06.654 [DEBUG] [Thread-54673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:58:06.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:58:06.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:58:06.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:58:06.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:58:06.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:58:06.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:58:06.691 [DEBUG] [Thread-54673] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:58:11.396 [DEBUG] [Thread-54675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:58:13.533 [DEBUG] [Thread-54676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:58:28.571 [DEBUG] [Thread-54677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:58:36.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:58:36.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:58:36.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
2025-11-17T12:58:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 58, 25), 26.63, 16.68, 0.0, 15.24, 22.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:58:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:58:25
2025-11-17T12:58:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:58:37.619 [DEBUG] [Thread-54678] [transport.py] [_log()] starting thread (client mode): 0xd071ba60
2025-11-17T12:58:37.619 [DEBUG] [Thread-54678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:58:37.640 [DEBUG] [Thread-54678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:58:37.641 [INFO] [Thread-54678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:58:37.644 [DEBUG] [Thread-54678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:58:37.644 [DEBUG] [Thread-54678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:58:37.644 [DEBUG] [Thread-54678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:58:37.644 [DEBUG] [Thread-54678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:58:37.644 [DEBUG] [Thread-54678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:58:37.644 [DEBUG] [Thread-54678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:58:37.644 [DEBUG] [Thread-54678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] client lang: <none>
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] server lang: <none>
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] kex follows: False
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] Compression: none
2025-11-17T12:58:37.645 [DEBUG] [Thread-54678] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:58:37.662 [DEBUG] [Thread-54678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:58:37.662 [DEBUG] [Thread-54678] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:58:37.663 [DEBUG] [Thread-54678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:58:37.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:58:37.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:58:37.665 [DEBUG] [Thread-54678] [transport.py] [_log()] userauth is OK
2025-11-17T12:58:37.665 [DEBUG] [Thread-54678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:58:37.665 [DEBUG] [Thread-54678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:58:37.665 [DEBUG] [Thread-54678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:58:37.665 [DEBUG] [Thread-54678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:58:37.689 [INFO] [Thread-54678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:58:37.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:58:38.330 [DEBUG] [Thread-54678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:58:38.330 [DEBUG] [Thread-54678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:58:38.330 [DEBUG] [Thread-54678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:58:38.370 [DEBUG] [Thread-54678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:58:38.371 [DEBUG] [Thread-54678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:58:38.374 [DEBUG] [Thread-54678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:58:38.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:58:38.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:58:38.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:58:38.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:58:38.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:58:38.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:58:38.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:58:38.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:58:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:58:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:58:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:58:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:58:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:58:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:58:38.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:58:38.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:58:38.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:58:38.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:58:38.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:58:25', tmtdew=26.63, humidity=16.68, cloud=0.0, wind=15.24, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:58:38.398 [DEBUG] [Thread-54678] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:58:38.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:58:38.484 [DEBUG] [Thread-54681] [transport.py] [_log()] starting thread (client mode): 0xd0718040
2025-11-17T12:58:38.485 [DEBUG] [Thread-54681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:58:38.509 [DEBUG] [Thread-54681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:58:38.510 [INFO] [Thread-54681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:58:38.517 [DEBUG] [Thread-54681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:58:38.517 [DEBUG] [Thread-54681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:58:38.517 [DEBUG] [Thread-54681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:58:38.517 [DEBUG] [Thread-54681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] client lang: <none>
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] server lang: <none>
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] kex follows: False
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] Compression: none
2025-11-17T12:58:38.518 [DEBUG] [Thread-54681] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:58:38.579 [DEBUG] [Thread-54681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:58:38.580 [DEBUG] [Thread-54681] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:58:38.580 [DEBUG] [Thread-54681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:58:38.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:58:38.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:58:38.636 [DEBUG] [Thread-54681] [transport.py] [_log()] userauth is OK
2025-11-17T12:58:38.636 [DEBUG] [Thread-54681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:58:38.636 [DEBUG] [Thread-54681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:58:38.636 [DEBUG] [Thread-54681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:58:38.636 [DEBUG] [Thread-54681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:58:38.656 [INFO] [Thread-54681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:58:38.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:58:38.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:58:39.545 [DEBUG] [Thread-54681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:58:39.545 [DEBUG] [Thread-54681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:58:39.593 [DEBUG] [Thread-54681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:58:39.593 [DEBUG] [Thread-54681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:58:39.603 [DEBUG] [Thread-54681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:58:39.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:58: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')
2025-11-17T12:58:39.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:58:39.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:58:39.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:58:39.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:58:39.644 [DEBUG] [Thread-54681] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:58:43.601 [DEBUG] [Thread-54683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:58:47.333 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:58:47.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:58:58.639 [DEBUG] [Thread-54684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:59:09.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:59:09.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:59:09.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:59:10.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 58, 57), 26.71, 16.25, 0.0, 15.32, 22.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:59:10.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:58:57
2025-11-17T12:59:10.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:59:10.606 [DEBUG] [Thread-54685] [transport.py] [_log()] starting thread (client mode): 0xd0723f10
2025-11-17T12:59:10.606 [DEBUG] [Thread-54685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:59:10.626 [DEBUG] [Thread-54685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:59:10.626 [INFO] [Thread-54685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:59:10.629 [DEBUG] [Thread-54685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:59:10.629 [DEBUG] [Thread-54685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] client lang: <none>
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] server lang: <none>
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] kex follows: False
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] Compression: none
2025-11-17T12:59:10.630 [DEBUG] [Thread-54685] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:59:10.649 [DEBUG] [Thread-54685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:59:10.649 [DEBUG] [Thread-54685] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:59:10.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:59:10.650 [DEBUG] [Thread-54685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:59:10.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:59:10.652 [DEBUG] [Thread-54685] [transport.py] [_log()] userauth is OK
2025-11-17T12:59:10.652 [DEBUG] [Thread-54685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:59:10.652 [DEBUG] [Thread-54685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:59:10.652 [DEBUG] [Thread-54685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:59:10.652 [DEBUG] [Thread-54685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:59:10.670 [INFO] [Thread-54685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:59:10.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:59:11.452 [DEBUG] [Thread-54687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:59:11.456 [DEBUG] [Thread-54685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:59:11.456 [DEBUG] [Thread-54685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:59:11.456 [DEBUG] [Thread-54685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:59:11.497 [DEBUG] [Thread-54685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:59:11.498 [DEBUG] [Thread-54685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:59:11.500 [DEBUG] [Thread-54685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:59:11.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:59:11.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:59:11.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:59:11.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:59:11.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:59:11.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:59:11.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:59:11.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:59:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:59:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:59:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:59:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:59:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:59:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:59:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:59:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:59:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:59:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:59:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:58:57', tmtdew=26.71, humidity=16.25, cloud=0.0, wind=15.32, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:59:11.523 [DEBUG] [Thread-54685] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:59:11.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:59:11.620 [DEBUG] [Thread-54689] [transport.py] [_log()] starting thread (client mode): 0xd31b37f0
2025-11-17T12:59:11.620 [DEBUG] [Thread-54689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:59:11.635 [DEBUG] [Thread-54689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:59:11.635 [INFO] [Thread-54689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] client lang: <none>
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] server lang: <none>
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] kex follows: False
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:59:11.643 [DEBUG] [Thread-54689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:59:11.644 [DEBUG] [Thread-54689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:59:11.644 [DEBUG] [Thread-54689] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:59:11.644 [DEBUG] [Thread-54689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:59:11.644 [DEBUG] [Thread-54689] [transport.py] [_log()] Compression: none
2025-11-17T12:59:11.644 [DEBUG] [Thread-54689] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:59:11.703 [DEBUG] [Thread-54689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:59:11.704 [DEBUG] [Thread-54689] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:59:11.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:59:11.705 [DEBUG] [Thread-54689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:59:11.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:59:11.760 [DEBUG] [Thread-54689] [transport.py] [_log()] userauth is OK
2025-11-17T12:59:11.760 [DEBUG] [Thread-54689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:59:11.760 [DEBUG] [Thread-54689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:59:11.760 [DEBUG] [Thread-54689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:59:11.760 [DEBUG] [Thread-54689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:59:11.780 [INFO] [Thread-54689] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:59:11.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:59:11.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:59:12.667 [DEBUG] [Thread-54689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:59:12.668 [DEBUG] [Thread-54689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:59:12.715 [DEBUG] [Thread-54689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:59:12.715 [DEBUG] [Thread-54689] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:59:12.724 [DEBUG] [Thread-54689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:59:12.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:59:12.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T12:59:12.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:59:12.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:59:12.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:59:12.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:59:12.758 [DEBUG] [Thread-54689] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:59:13.666 [DEBUG] [Thread-54691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:59:28.707 [DEBUG] [Thread-54692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:59:42.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T12:59:42.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T12:59:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T12:59:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 12, 59, 29), 26.91, 16.02, 0.0, 21.95, 22.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T12:59:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 12:59:29
2025-11-17T12:59:43.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T12:59:43.734 [DEBUG] [Thread-54693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:59:43.764 [DEBUG] [Thread-54694] [transport.py] [_log()] starting thread (client mode): 0xd31ef400
2025-11-17T12:59:43.764 [DEBUG] [Thread-54694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:59:43.783 [DEBUG] [Thread-54694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T12:59:43.783 [INFO] [Thread-54694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] client lang: <none>
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] server lang: <none>
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] kex follows: False
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] Compression: none
2025-11-17T12:59:43.787 [DEBUG] [Thread-54694] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:59:43.803 [DEBUG] [Thread-54694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:59:43.803 [DEBUG] [Thread-54694] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:59:43.804 [DEBUG] [Thread-54694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T12:59:43.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T12:59:43.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:59:43.805 [DEBUG] [Thread-54694] [transport.py] [_log()] userauth is OK
2025-11-17T12:59:43.805 [DEBUG] [Thread-54694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:59:43.805 [DEBUG] [Thread-54694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:59:43.805 [DEBUG] [Thread-54694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T12:59:43.805 [DEBUG] [Thread-54694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:59:43.816 [INFO] [Thread-54694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:59:43.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:59:44.396 [DEBUG] [Thread-54694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:59:44.396 [DEBUG] [Thread-54694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:59:44.396 [DEBUG] [Thread-54694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T12:59:44.437 [DEBUG] [Thread-54694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:59:44.437 [DEBUG] [Thread-54694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:59:44.439 [DEBUG] [Thread-54694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:59:44.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:59:44.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T12:59:44.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T12:59:44.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T12:59:44.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:59:44.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T12:59:44.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T12:59:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T12:59:29', tmtdew=26.91, humidity=16.02, cloud=0.0, wind=21.95, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T12:59:44.457 [DEBUG] [Thread-54694] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:59:44.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T12:59:44.544 [DEBUG] [Thread-54697] [transport.py] [_log()] starting thread (client mode): 0xd31b3a00
2025-11-17T12:59:44.544 [DEBUG] [Thread-54697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T12:59:44.560 [DEBUG] [Thread-54697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T12:59:44.560 [INFO] [Thread-54697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] client lang: <none>
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] server lang: <none>
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] kex follows: False
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] Compression: none
2025-11-17T12:59:44.568 [DEBUG] [Thread-54697] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T12:59:44.626 [DEBUG] [Thread-54697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T12:59:44.626 [DEBUG] [Thread-54697] [transport.py] [_log()] Switch to new keys ...
2025-11-17T12:59:44.626 [DEBUG] [Thread-54697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T12:59:44.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T12:59:44.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T12:59:44.683 [DEBUG] [Thread-54697] [transport.py] [_log()] userauth is OK
2025-11-17T12:59:44.683 [DEBUG] [Thread-54697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T12:59:44.683 [DEBUG] [Thread-54697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T12:59:44.683 [DEBUG] [Thread-54697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T12:59:44.683 [DEBUG] [Thread-54697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T12:59:44.697 [INFO] [Thread-54697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T12:59:44.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T12:59:44.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T12:59:45.649 [DEBUG] [Thread-54697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T12:59:45.649 [DEBUG] [Thread-54697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T12:59:45.697 [DEBUG] [Thread-54697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T12:59:45.697 [DEBUG] [Thread-54697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T12:59:45.705 [DEBUG] [Thread-54697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T12:59:45.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T12:59:45.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')
2025-11-17T12:59:45.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T12:59:45.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T12:59:45.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T12:59:45.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T12:59:45.736 [DEBUG] [Thread-54697] [transport.py] [_log()] EOF in transport thread
2025-11-17T12:59:47.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:59:47.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T12:59:58.761 [DEBUG] [Thread-54699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:00:11.508 [DEBUG] [Thread-54700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:00:13.810 [DEBUG] [Thread-54701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:00:15.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:00:15.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:00:15.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:00:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 0, 1), 26.54, 16.33, 0.0, 16.75, 22.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:00:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:00:01
2025-11-17T13:00:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:00:16.717 [DEBUG] [Thread-54702] [transport.py] [_log()] starting thread (client mode): 0xd07230d0
2025-11-17T13:00:16.718 [DEBUG] [Thread-54702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:00:16.739 [DEBUG] [Thread-54702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:00:16.739 [INFO] [Thread-54702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:00:16.742 [DEBUG] [Thread-54702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] client lang: <none>
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] server lang: <none>
2025-11-17T13:00:16.743 [DEBUG] [Thread-54702] [transport.py] [_log()] kex follows: False
2025-11-17T13:00:16.744 [DEBUG] [Thread-54702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:00:16.744 [DEBUG] [Thread-54702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:00:16.744 [DEBUG] [Thread-54702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:00:16.744 [DEBUG] [Thread-54702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:00:16.744 [DEBUG] [Thread-54702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:00:16.744 [DEBUG] [Thread-54702] [transport.py] [_log()] Compression: none
2025-11-17T13:00:16.744 [DEBUG] [Thread-54702] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:00:16.772 [DEBUG] [Thread-54702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:00:16.772 [DEBUG] [Thread-54702] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:00:16.773 [DEBUG] [Thread-54702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:00:16.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:00:16.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:00:16.775 [DEBUG] [Thread-54702] [transport.py] [_log()] userauth is OK
2025-11-17T13:00:16.775 [DEBUG] [Thread-54702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:00:16.775 [DEBUG] [Thread-54702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:00:16.775 [DEBUG] [Thread-54702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:00:16.775 [DEBUG] [Thread-54702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:00:16.798 [INFO] [Thread-54702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:00:16.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:00:18.965 [DEBUG] [Thread-54702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:00:18.965 [DEBUG] [Thread-54702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:00:18.965 [DEBUG] [Thread-54702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:00:19.005 [DEBUG] [Thread-54702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:00:19.005 [DEBUG] [Thread-54702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:00:19.008 [DEBUG] [Thread-54702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:00:19.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:00:19.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:00:19.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:00:19.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:00:19.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:00:19.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:00:19.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:00:19.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:00:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:00:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.454562 -999.00  +21.00  12.08     22   -0.90 1 2 1 1 1   888    0 23.40 48.09 ----- 12.1 12.1 15.2 14.8 27.9 -22.4 27.1 -22.0 27.2 -21.1 27.8 -21.1
2025-11-17T13:00:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:00:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:00:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.454562
2025-11-17T13:00:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:00:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:00:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:00:19.025 [DEBUG] [Thread-54702] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:00:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:00:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:00:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:00:01', tmtdew=26.54, humidity=16.33, cloud=0.0, wind=16.75, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T10:54:34.157', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:00:19.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:00:19.118 [DEBUG] [Thread-54705] [transport.py] [_log()] starting thread (client mode): 0xd0759930
2025-11-17T13:00:19.118 [DEBUG] [Thread-54705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:00:19.133 [DEBUG] [Thread-54705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:00:19.134 [INFO] [Thread-54705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:00:19.141 [DEBUG] [Thread-54705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:00:19.141 [DEBUG] [Thread-54705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:00:19.141 [DEBUG] [Thread-54705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:00:19.141 [DEBUG] [Thread-54705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:00:19.141 [DEBUG] [Thread-54705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:00:19.141 [DEBUG] [Thread-54705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] client lang: <none>
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] server lang: <none>
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] kex follows: False
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] Compression: none
2025-11-17T13:00:19.142 [DEBUG] [Thread-54705] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:00:19.204 [DEBUG] [Thread-54705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:00:19.204 [DEBUG] [Thread-54705] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:00:19.205 [DEBUG] [Thread-54705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:00:19.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:00:19.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:00:19.260 [DEBUG] [Thread-54705] [transport.py] [_log()] userauth is OK
2025-11-17T13:00:19.260 [DEBUG] [Thread-54705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:00:19.260 [DEBUG] [Thread-54705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:00:19.260 [DEBUG] [Thread-54705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:00:19.260 [DEBUG] [Thread-54705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:00:19.279 [INFO] [Thread-54705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:00:19.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:00:19.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:00:20.161 [DEBUG] [Thread-54705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:00:20.161 [DEBUG] [Thread-54705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:00:20.209 [DEBUG] [Thread-54705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:00:20.209 [DEBUG] [Thread-54705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:00:20.218 [DEBUG] [Thread-54705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:00:20.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:00:20.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:00:20.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:00:20.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:00:20.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:00:20.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:00:20.253 [DEBUG] [Thread-54705] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:00:28.839 [DEBUG] [Thread-54707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:00:43.887 [DEBUG] [Thread-54708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:00:47.617 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:00:47.618 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:00:50.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:00:50.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:00:50.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:00:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 0, 33), 26.27, 16.61, 0.0, 15.47, 21.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:00:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:00:33
2025-11-17T13:00:51.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:00:51.209 [DEBUG] [Thread-54709] [transport.py] [_log()] starting thread (client mode): 0xd0787a30
2025-11-17T13:00:51.209 [DEBUG] [Thread-54709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:00:51.228 [DEBUG] [Thread-54709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:00:51.228 [INFO] [Thread-54709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] client lang: <none>
2025-11-17T13:00:51.232 [DEBUG] [Thread-54709] [transport.py] [_log()] server lang: <none>
2025-11-17T13:00:51.233 [DEBUG] [Thread-54709] [transport.py] [_log()] kex follows: False
2025-11-17T13:00:51.233 [DEBUG] [Thread-54709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:00:51.233 [DEBUG] [Thread-54709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:00:51.233 [DEBUG] [Thread-54709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:00:51.233 [DEBUG] [Thread-54709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:00:51.233 [DEBUG] [Thread-54709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:00:51.233 [DEBUG] [Thread-54709] [transport.py] [_log()] Compression: none
2025-11-17T13:00:51.233 [DEBUG] [Thread-54709] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:00:51.249 [DEBUG] [Thread-54709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:00:51.249 [DEBUG] [Thread-54709] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:00:51.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:00:51.250 [DEBUG] [Thread-54709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:00:51.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:00:51.252 [DEBUG] [Thread-54709] [transport.py] [_log()] userauth is OK
2025-11-17T13:00:51.252 [DEBUG] [Thread-54709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:00:51.252 [DEBUG] [Thread-54709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:00:51.252 [DEBUG] [Thread-54709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:00:51.252 [DEBUG] [Thread-54709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:00:51.276 [INFO] [Thread-54709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:00:51.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:00:51.941 [DEBUG] [Thread-54709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:00:51.941 [DEBUG] [Thread-54709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:00:51.942 [DEBUG] [Thread-54709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:00:51.983 [DEBUG] [Thread-54709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:00:51.983 [DEBUG] [Thread-54709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:00:51.986 [DEBUG] [Thread-54709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:00:51.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:00:51.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:00:52.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:00:52.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:00:52.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:00:52.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:00:52.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:00:52.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:00:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:00:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.458381 -999.00  +22.00  15.04     22   -0.40 1 2 1 1 1   888    0 23.56 66.81 NA 15.0 15.0 327.4 22.7 28.3 -22.4 27.6 -22.2 27.7 -22.2 28.1 -20.8
2025-11-17T13:00:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:00:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:00:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.458381
2025-11-17T13:00:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:00:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:00:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:00:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:00:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:00:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:00:33', tmtdew=26.27, humidity=16.61, cloud=0.0, wind=15.47, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:00:04.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:00:52.013 [DEBUG] [Thread-54709] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:00:52.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:00:52.110 [DEBUG] [Thread-54712] [transport.py] [_log()] starting thread (client mode): 0xd31eeb60
2025-11-17T13:00:52.110 [DEBUG] [Thread-54712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:00:52.125 [DEBUG] [Thread-54712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:00:52.126 [INFO] [Thread-54712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:00:52.133 [DEBUG] [Thread-54712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] client lang: <none>
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] server lang: <none>
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] kex follows: False
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] Compression: none
2025-11-17T13:00:52.134 [DEBUG] [Thread-54712] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:00:52.192 [DEBUG] [Thread-54712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:00:52.193 [DEBUG] [Thread-54712] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:00:52.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:00:52.193 [DEBUG] [Thread-54712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:00:52.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:00:52.248 [DEBUG] [Thread-54712] [transport.py] [_log()] userauth is OK
2025-11-17T13:00:52.248 [DEBUG] [Thread-54712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:00:52.248 [DEBUG] [Thread-54712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:00:52.248 [DEBUG] [Thread-54712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:00:52.248 [DEBUG] [Thread-54712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:00:52.267 [INFO] [Thread-54712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:00:52.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:00:52.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:00:53.167 [DEBUG] [Thread-54712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:00:53.167 [DEBUG] [Thread-54712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:00:53.214 [DEBUG] [Thread-54712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:00:53.214 [DEBUG] [Thread-54712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:00:53.224 [DEBUG] [Thread-54712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:00:53.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:00:53.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:00:53.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:00:53.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:00:53.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:00:53.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:00:53.258 [DEBUG] [Thread-54712] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:00:58.917 [DEBUG] [Thread-54714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:01:11.568 [DEBUG] [Thread-54715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:01:13.962 [DEBUG] [Thread-54716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:01:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:01:23.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:01:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:01:23.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 1, 5), 26.13, 16.76, 0.0, 15.53, 21.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:01:23.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:01:05
2025-11-17T13:01:24.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:01:24.191 [DEBUG] [Thread-54717] [transport.py] [_log()] starting thread (client mode): 0xd0758cd0
2025-11-17T13:01:24.191 [DEBUG] [Thread-54717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:01:24.212 [DEBUG] [Thread-54717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:01:24.212 [INFO] [Thread-54717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] client lang: <none>
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] server lang: <none>
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] kex follows: False
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:01:24.215 [DEBUG] [Thread-54717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:01:24.216 [DEBUG] [Thread-54717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:01:24.216 [DEBUG] [Thread-54717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:01:24.216 [DEBUG] [Thread-54717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:01:24.216 [DEBUG] [Thread-54717] [transport.py] [_log()] Compression: none
2025-11-17T13:01:24.216 [DEBUG] [Thread-54717] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:01:24.233 [DEBUG] [Thread-54717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:01:24.233 [DEBUG] [Thread-54717] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:01:24.234 [DEBUG] [Thread-54717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:01:24.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:01:24.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:01:24.236 [DEBUG] [Thread-54717] [transport.py] [_log()] userauth is OK
2025-11-17T13:01:24.236 [DEBUG] [Thread-54717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:01:24.236 [DEBUG] [Thread-54717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:01:24.236 [DEBUG] [Thread-54717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:01:24.236 [DEBUG] [Thread-54717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:01:24.259 [INFO] [Thread-54717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:01:24.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:01:25.014 [DEBUG] [Thread-54717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:01:25.015 [DEBUG] [Thread-54717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:01:25.015 [DEBUG] [Thread-54717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:01:25.055 [DEBUG] [Thread-54717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:01:25.055 [DEBUG] [Thread-54717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:01:25.060 [DEBUG] [Thread-54717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:01:25.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:01:25.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:01:25.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:01:25.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:01:25.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:01:25.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:01:25.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:01:25.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:01:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:01:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.458728 -999.00  +22.10  23.64     22   -0.40 1 2 1 1 1   888    0 23.54 66.29 NA 23.6 23.6 295.6 32.5 28.5 -21.5 27.6 -21.6 27.7 -20.2 28.4 -20.4
2025-11-17T13:01:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:01:25.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:01:25.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.458728
2025-11-17T13:01:25.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:01:25.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:01:25.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:01:25.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:01:25.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:01:25.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:01:05', tmtdew=26.13, humidity=16.76, cloud=0.0, wind=15.53, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:00:34.099', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:01:25.088 [DEBUG] [Thread-54717] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:01:25.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:01:25.185 [DEBUG] [Thread-54720] [transport.py] [_log()] starting thread (client mode): 0xd31b0c70
2025-11-17T13:01:25.185 [DEBUG] [Thread-54720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:01:25.200 [DEBUG] [Thread-54720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:01:25.200 [INFO] [Thread-54720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] client lang: <none>
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] server lang: <none>
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] kex follows: False
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:01:25.208 [DEBUG] [Thread-54720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:01:25.209 [DEBUG] [Thread-54720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:01:25.209 [DEBUG] [Thread-54720] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:01:25.209 [DEBUG] [Thread-54720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:01:25.209 [DEBUG] [Thread-54720] [transport.py] [_log()] Compression: none
2025-11-17T13:01:25.209 [DEBUG] [Thread-54720] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:01:25.273 [DEBUG] [Thread-54720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:01:25.273 [DEBUG] [Thread-54720] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:01:25.273 [DEBUG] [Thread-54720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:01:25.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:01:25.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:01:25.335 [DEBUG] [Thread-54720] [transport.py] [_log()] userauth is OK
2025-11-17T13:01:25.336 [DEBUG] [Thread-54720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:01:25.336 [DEBUG] [Thread-54720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:01:25.336 [DEBUG] [Thread-54720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:01:25.336 [DEBUG] [Thread-54720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:01:25.354 [INFO] [Thread-54720] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:01:25.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:01:25.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:01:26.252 [DEBUG] [Thread-54720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:01:26.252 [DEBUG] [Thread-54720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:01:26.301 [DEBUG] [Thread-54720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:01:26.301 [DEBUG] [Thread-54720] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:01:26.310 [DEBUG] [Thread-54720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:01:26.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:01:26.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:01:26.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:01:26.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:01:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:01:26.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:01:26.345 [DEBUG] [Thread-54720] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:01:28.992 [DEBUG] [Thread-54722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:01:44.031 [DEBUG] [Thread-54723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:01:47.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:01:47.767 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:01:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:01:56.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:01:56.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:01:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 1, 37), 26.73, 16.05, 0.0, 23.31, 21.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:01:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:01:37
2025-11-17T13:01:57.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:01:57.293 [DEBUG] [Thread-54724] [transport.py] [_log()] starting thread (client mode): 0xd31b3ac0
2025-11-17T13:01:57.293 [DEBUG] [Thread-54724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:01:57.313 [DEBUG] [Thread-54724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:01:57.313 [INFO] [Thread-54724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:01:57.316 [DEBUG] [Thread-54724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:01:57.316 [DEBUG] [Thread-54724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:01:57.316 [DEBUG] [Thread-54724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] client lang: <none>
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] server lang: <none>
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] kex follows: False
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] Compression: none
2025-11-17T13:01:57.317 [DEBUG] [Thread-54724] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:01:57.334 [DEBUG] [Thread-54724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:01:57.334 [DEBUG] [Thread-54724] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:01:57.335 [DEBUG] [Thread-54724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:01:57.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:01:57.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:01:57.337 [DEBUG] [Thread-54724] [transport.py] [_log()] userauth is OK
2025-11-17T13:01:57.337 [DEBUG] [Thread-54724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:01:57.337 [DEBUG] [Thread-54724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:01:57.337 [DEBUG] [Thread-54724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:01:57.337 [DEBUG] [Thread-54724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:01:57.372 [INFO] [Thread-54724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:01:57.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:01:58.049 [DEBUG] [Thread-54724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:01:58.049 [DEBUG] [Thread-54724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:01:58.049 [DEBUG] [Thread-54724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:01:58.089 [DEBUG] [Thread-54724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:01:58.089 [DEBUG] [Thread-54724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:01:58.093 [DEBUG] [Thread-54724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:01:58.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:01:58.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:01:58.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:01:58.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:01:58.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:01:58.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:01:58.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:01:58.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:01:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:01:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.459075 -999.00  +22.40  29.29     21   -0.50 1 2 1 1 1   888    0 23.58 67.28 NA 29.3 29.3 289.1 38.0 28.5 -22.8 27.7 -21.0 27.6 -20.4 28.5 -21.5
2025-11-17T13:01:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:01:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:01:58.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.459075
2025-11-17T13:01:58.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:01:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:01:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:01:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:01:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:01:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:01:37', tmtdew=26.73, humidity=16.05, cloud=0.0, wind=23.31, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:01:04.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:01:58.120 [DEBUG] [Thread-54724] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:01:58.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:01:58.218 [DEBUG] [Thread-54727] [transport.py] [_log()] starting thread (client mode): 0xd0785990
2025-11-17T13:01:58.218 [DEBUG] [Thread-54727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:01:58.232 [DEBUG] [Thread-54727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:01:58.233 [INFO] [Thread-54727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:01:58.240 [DEBUG] [Thread-54727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:01:58.240 [DEBUG] [Thread-54727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:01:58.240 [DEBUG] [Thread-54727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:01:58.240 [DEBUG] [Thread-54727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:01:58.240 [DEBUG] [Thread-54727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:01:58.240 [DEBUG] [Thread-54727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] client lang: <none>
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] server lang: <none>
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] kex follows: False
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] Compression: none
2025-11-17T13:01:58.241 [DEBUG] [Thread-54727] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:01:58.305 [DEBUG] [Thread-54727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:01:58.305 [DEBUG] [Thread-54727] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:01:58.306 [DEBUG] [Thread-54727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:01:58.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:01:58.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:01:58.364 [DEBUG] [Thread-54727] [transport.py] [_log()] userauth is OK
2025-11-17T13:01:58.364 [DEBUG] [Thread-54727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:01:58.365 [DEBUG] [Thread-54727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:01:58.365 [DEBUG] [Thread-54727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:01:58.365 [DEBUG] [Thread-54727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:01:58.384 [INFO] [Thread-54727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:01:58.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:01:58.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:01:59.062 [DEBUG] [Thread-54729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:01:59.232 [DEBUG] [Thread-54727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:01:59.232 [DEBUG] [Thread-54727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:01:59.279 [DEBUG] [Thread-54727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:01:59.280 [DEBUG] [Thread-54727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:01:59.288 [DEBUG] [Thread-54727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:01:59.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:01:59.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:01:59.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:01:59.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:01:59.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:01:59.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:01:59.324 [DEBUG] [Thread-54727] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:02:11.625 [DEBUG] [Thread-54730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:02:14.108 [DEBUG] [Thread-54731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:02:29.133 [DEBUG] [Thread-54732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:02:29.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:02:29.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:02:29.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:02:30.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 2, 9), 26.97, 15.81, 0.0, 24.83, 22.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:02:30.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:02:09
2025-11-17T13:02:30.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:02:30.280 [DEBUG] [Thread-54733] [transport.py] [_log()] starting thread (client mode): 0xd075ae30
2025-11-17T13:02:30.280 [DEBUG] [Thread-54733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:02:30.290 [DEBUG] [Thread-54733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:02:30.290 [INFO] [Thread-54733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:02:30.292 [DEBUG] [Thread-54733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:02:30.292 [DEBUG] [Thread-54733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:02:30.292 [DEBUG] [Thread-54733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:02:30.292 [DEBUG] [Thread-54733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:02:30.292 [DEBUG] [Thread-54733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:02:30.292 [DEBUG] [Thread-54733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:02:30.292 [DEBUG] [Thread-54733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:02:30.292 [DEBUG] [Thread-54733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] client lang: <none>
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] server lang: <none>
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] kex follows: False
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] Compression: none
2025-11-17T13:02:30.293 [DEBUG] [Thread-54733] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:02:30.304 [DEBUG] [Thread-54733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:02:30.304 [DEBUG] [Thread-54733] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:02:30.304 [DEBUG] [Thread-54733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:02:30.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:02:30.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:02:30.305 [DEBUG] [Thread-54733] [transport.py] [_log()] userauth is OK
2025-11-17T13:02:30.306 [DEBUG] [Thread-54733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:02:30.306 [DEBUG] [Thread-54733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:02:30.306 [DEBUG] [Thread-54733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:02:30.306 [DEBUG] [Thread-54733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:02:30.325 [INFO] [Thread-54733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:02:30.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:02:30.907 [DEBUG] [Thread-54733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:02:30.907 [DEBUG] [Thread-54733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:02:30.907 [DEBUG] [Thread-54733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:02:30.948 [DEBUG] [Thread-54733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:02:30.948 [DEBUG] [Thread-54733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:02:30.951 [DEBUG] [Thread-54733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:02:30.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:02:30.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:02:30.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:02:30.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:02:30.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:02:30.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:02:30.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:02:30.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:02:30.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:02:30.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.459770 -999.00  +22.30  34.39     21   -0.50 1 2 2 1 1   888    0 23.62 67.56 ----- 34.4 34.4 292.4 40.5 28.4 -21.6 27.6 -22.7 27.4 -22.3 28.4 -20.4
2025-11-17T13:02:30.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:02:30.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:02:30.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.459770
2025-11-17T13:02:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:02:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:02:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:02:30.974 [DEBUG] [Thread-54733] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:02:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:02:30.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:02:30.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:02:09', tmtdew=26.97, humidity=15.81, cloud=0.0, wind=24.83, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:02:04.128', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:02:31.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:02:31.072 [DEBUG] [Thread-54736] [transport.py] [_log()] starting thread (client mode): 0xd07866b0
2025-11-17T13:02:31.072 [DEBUG] [Thread-54736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:02:31.087 [DEBUG] [Thread-54736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:02:31.087 [INFO] [Thread-54736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:02:31.094 [DEBUG] [Thread-54736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] client lang: <none>
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] server lang: <none>
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] kex follows: False
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] Compression: none
2025-11-17T13:02:31.095 [DEBUG] [Thread-54736] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:02:31.152 [DEBUG] [Thread-54736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:02:31.153 [DEBUG] [Thread-54736] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:02:31.153 [DEBUG] [Thread-54736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:02:31.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:02:31.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:02:31.208 [DEBUG] [Thread-54736] [transport.py] [_log()] userauth is OK
2025-11-17T13:02:31.208 [DEBUG] [Thread-54736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:02:31.208 [DEBUG] [Thread-54736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:02:31.208 [DEBUG] [Thread-54736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:02:31.209 [DEBUG] [Thread-54736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:02:31.228 [INFO] [Thread-54736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:02:31.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:02:31.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:02:32.113 [DEBUG] [Thread-54736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:02:32.113 [DEBUG] [Thread-54736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:02:32.165 [DEBUG] [Thread-54736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:02:32.165 [DEBUG] [Thread-54736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:02:32.173 [DEBUG] [Thread-54736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:02:32.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:02:32.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:02:32.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:02:32.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:02:32.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:02:32.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:02:32.208 [DEBUG] [Thread-54736] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:02:44.163 [DEBUG] [Thread-54738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:02:47.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:02:47.911 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:02:59.207 [DEBUG] [Thread-54739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:03:02.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:03:02.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:03:02.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:03:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 2, 41), 27.34, 15.87, 0.0, 32.59, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:03:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:02:41
2025-11-17T13:03:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:03:03.176 [DEBUG] [Thread-54740] [transport.py] [_log()] starting thread (client mode): 0xd07ce800
2025-11-17T13:03:03.176 [DEBUG] [Thread-54740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:03:03.196 [DEBUG] [Thread-54740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:03:03.196 [INFO] [Thread-54740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] client lang: <none>
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] server lang: <none>
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] kex follows: False
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] Compression: none
2025-11-17T13:03:03.199 [DEBUG] [Thread-54740] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:03:03.207 [DEBUG] [Thread-54740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:03:03.208 [DEBUG] [Thread-54740] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:03:03.208 [DEBUG] [Thread-54740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:03:03.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:03:03.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:03:03.209 [DEBUG] [Thread-54740] [transport.py] [_log()] userauth is OK
2025-11-17T13:03:03.210 [DEBUG] [Thread-54740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:03:03.210 [DEBUG] [Thread-54740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:03:03.210 [DEBUG] [Thread-54740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:03:03.210 [DEBUG] [Thread-54740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:03:03.244 [INFO] [Thread-54740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:03:03.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:03:03.888 [DEBUG] [Thread-54740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:03:03.888 [DEBUG] [Thread-54740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:03:03.888 [DEBUG] [Thread-54740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:03:03.929 [DEBUG] [Thread-54740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:03:03.929 [DEBUG] [Thread-54740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:03:03.932 [DEBUG] [Thread-54740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:03:03.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:03:03.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:03:03.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:03:03.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:03:03.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:03:03.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:03:03.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.460117 -999.00  +22.20  30.49     21   -0.50 1 1 2 1 1   888    0 23.39 64.32 ----- 30.5 30.5 297.2 39.3 28.2 -24.1 27.7 -22.7 27.3 -27.1 28.4 -22.3
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.460117
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:03:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:03:03.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:02:41', tmtdew=27.34, humidity=15.87, cloud=0.0, wind=32.59, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:02:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:03:03.955 [DEBUG] [Thread-54740] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:03:04.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:03:04.049 [DEBUG] [Thread-54743] [transport.py] [_log()] starting thread (client mode): 0xd07cea70
2025-11-17T13:03:04.049 [DEBUG] [Thread-54743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:03:04.065 [DEBUG] [Thread-54743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:03:04.065 [INFO] [Thread-54743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] client lang: <none>
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] server lang: <none>
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] kex follows: False
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:03:04.073 [DEBUG] [Thread-54743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:03:04.074 [DEBUG] [Thread-54743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:03:04.074 [DEBUG] [Thread-54743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:03:04.074 [DEBUG] [Thread-54743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:03:04.074 [DEBUG] [Thread-54743] [transport.py] [_log()] Compression: none
2025-11-17T13:03:04.074 [DEBUG] [Thread-54743] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:03:04.133 [DEBUG] [Thread-54743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:03:04.133 [DEBUG] [Thread-54743] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:03:04.134 [DEBUG] [Thread-54743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:03:04.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:03:04.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:03:04.188 [DEBUG] [Thread-54743] [transport.py] [_log()] userauth is OK
2025-11-17T13:03:04.188 [DEBUG] [Thread-54743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:03:04.188 [DEBUG] [Thread-54743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:03:04.188 [DEBUG] [Thread-54743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:03:04.188 [DEBUG] [Thread-54743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:03:04.207 [INFO] [Thread-54743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:03:04.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:03:04.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:03:05.184 [DEBUG] [Thread-54743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:03:05.184 [DEBUG] [Thread-54743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:03:05.232 [DEBUG] [Thread-54743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:03:05.232 [DEBUG] [Thread-54743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:03:05.241 [DEBUG] [Thread-54743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:03:05.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:03:05.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:03:05.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:03:05.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:03:05.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:03:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:03:05.276 [DEBUG] [Thread-54743] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:03:11.688 [DEBUG] [Thread-54745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:03:14.234 [DEBUG] [Thread-54746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:03:29.265 [DEBUG] [Thread-54747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:03:35.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:03:35.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:03:35.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:03:35.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 3, 13), 27.45, 15.78, 0.0, 33.47, 22.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:03:35.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:03:13
2025-11-17T13:03:36.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:03:36.267 [DEBUG] [Thread-54748] [transport.py] [_log()] starting thread (client mode): 0xd07840d0
2025-11-17T13:03:36.267 [DEBUG] [Thread-54748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:03:36.287 [DEBUG] [Thread-54748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:03:36.287 [INFO] [Thread-54748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] client lang: <none>
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] server lang: <none>
2025-11-17T13:03:36.288 [DEBUG] [Thread-54748] [transport.py] [_log()] kex follows: False
2025-11-17T13:03:36.289 [DEBUG] [Thread-54748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:03:36.289 [DEBUG] [Thread-54748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:03:36.289 [DEBUG] [Thread-54748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:03:36.289 [DEBUG] [Thread-54748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:03:36.289 [DEBUG] [Thread-54748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:03:36.289 [DEBUG] [Thread-54748] [transport.py] [_log()] Compression: none
2025-11-17T13:03:36.289 [DEBUG] [Thread-54748] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:03:36.297 [DEBUG] [Thread-54748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:03:36.297 [DEBUG] [Thread-54748] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:03:36.297 [DEBUG] [Thread-54748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:03:36.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:03:36.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:03:36.298 [DEBUG] [Thread-54748] [transport.py] [_log()] userauth is OK
2025-11-17T13:03:36.298 [DEBUG] [Thread-54748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:03:36.298 [DEBUG] [Thread-54748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:03:36.298 [DEBUG] [Thread-54748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:03:36.298 [DEBUG] [Thread-54748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:03:36.307 [INFO] [Thread-54748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:03:36.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:03:36.897 [DEBUG] [Thread-54748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:03:36.897 [DEBUG] [Thread-54748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:03:36.897 [DEBUG] [Thread-54748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:03:36.938 [DEBUG] [Thread-54748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:03:36.938 [DEBUG] [Thread-54748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:03:36.940 [DEBUG] [Thread-54748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:03:36.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:03:36.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:03:36.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:03:36.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:03:36.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:03:36.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:03:36.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.460464 -999.00  +22.10  30.18     22   -0.50 1 2 2 1 1   888    0 23.74 62.30 ----- 30.2 30.2 295.8 40.6 28.4 -23.3 27.7 -21.7 27.6 -22.1 28.4 -22.1
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.460464
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:03:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:03:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:03:13', tmtdew=27.45, humidity=15.78, cloud=0.0, wind=33.47, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:03:04.090', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:03:36.958 [DEBUG] [Thread-54748] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:03:37.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:03:37.044 [DEBUG] [Thread-54751] [transport.py] [_log()] starting thread (client mode): 0xd31b1a20
2025-11-17T13:03:37.044 [DEBUG] [Thread-54751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:03:37.059 [DEBUG] [Thread-54751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:03:37.059 [INFO] [Thread-54751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:03:37.066 [DEBUG] [Thread-54751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] client lang: <none>
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] server lang: <none>
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] kex follows: False
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] Compression: none
2025-11-17T13:03:37.067 [DEBUG] [Thread-54751] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:03:37.123 [DEBUG] [Thread-54751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:03:37.123 [DEBUG] [Thread-54751] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:03:37.123 [DEBUG] [Thread-54751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:03:37.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:03:37.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:03:37.180 [DEBUG] [Thread-54751] [transport.py] [_log()] userauth is OK
2025-11-17T13:03:37.180 [DEBUG] [Thread-54751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:03:37.181 [DEBUG] [Thread-54751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:03:37.181 [DEBUG] [Thread-54751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:03:37.181 [DEBUG] [Thread-54751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:03:37.198 [INFO] [Thread-54751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:03:37.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:03:37.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:03:38.088 [DEBUG] [Thread-54751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:03:38.088 [DEBUG] [Thread-54751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:03:38.136 [DEBUG] [Thread-54751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:03:38.136 [DEBUG] [Thread-54751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:03:38.144 [DEBUG] [Thread-54751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:03:38.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:03:38.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:03:38.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:03:38.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:03:38.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:03:38.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:03:38.177 [DEBUG] [Thread-54751] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:03:44.293 [DEBUG] [Thread-54753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:03:48.052 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:03:48.053 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:03:59.342 [DEBUG] [Thread-54754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:04:08.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:04:08.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:04:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:04:08.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 3, 45), 27.4, 15.62, 0.0, 19.21, 22.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:04:08.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:03:45
2025-11-17T13:04:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:04:09.121 [DEBUG] [Thread-54755] [transport.py] [_log()] starting thread (client mode): 0xd31b1780
2025-11-17T13:04:09.121 [DEBUG] [Thread-54755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:04:09.142 [DEBUG] [Thread-54755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:04:09.143 [INFO] [Thread-54755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] client lang: <none>
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] server lang: <none>
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] kex follows: False
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] Compression: none
2025-11-17T13:04:09.144 [DEBUG] [Thread-54755] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:04:09.163 [DEBUG] [Thread-54755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:04:09.163 [DEBUG] [Thread-54755] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:04:09.164 [DEBUG] [Thread-54755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:04:09.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:04:09.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:04:09.166 [DEBUG] [Thread-54755] [transport.py] [_log()] userauth is OK
2025-11-17T13:04:09.166 [DEBUG] [Thread-54755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:04:09.166 [DEBUG] [Thread-54755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:04:09.166 [DEBUG] [Thread-54755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:04:09.166 [DEBUG] [Thread-54755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:04:09.184 [INFO] [Thread-54755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:04:09.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:04:09.828 [DEBUG] [Thread-54755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:04:09.829 [DEBUG] [Thread-54755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:04:09.829 [DEBUG] [Thread-54755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:04:09.869 [DEBUG] [Thread-54755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:04:09.869 [DEBUG] [Thread-54755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:04:09.873 [DEBUG] [Thread-54755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:04:09.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:04:09.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:04:09.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:04:09.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:04:09.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:04:09.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:04:09.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:04:09.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:04:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:04:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.460811 -999.00  +21.90  30.72     22   -0.50 1 1 2 1 1   888    0 23.67 62.62 ----- 30.7 30.7 286.9 36.4 28.4 -23.5 27.7 -23.1 27.3 -23.9 28.4 -21.7
2025-11-17T13:04:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:04:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:04:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.460811
2025-11-17T13:04:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:04:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:04:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:04:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:04:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:04:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:03:45', tmtdew=27.4, humidity=15.62, cloud=0.0, wind=19.21, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:03:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:04:09.898 [DEBUG] [Thread-54755] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:04:09.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:04:09.994 [DEBUG] [Thread-54758] [transport.py] [_log()] starting thread (client mode): 0xd31b1870
2025-11-17T13:04:09.995 [DEBUG] [Thread-54758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:04:10.009 [DEBUG] [Thread-54758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:04:10.009 [INFO] [Thread-54758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:04:10.017 [DEBUG] [Thread-54758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:04:10.017 [DEBUG] [Thread-54758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:04:10.017 [DEBUG] [Thread-54758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:04:10.017 [DEBUG] [Thread-54758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:04:10.017 [DEBUG] [Thread-54758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:04:10.017 [DEBUG] [Thread-54758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] client lang: <none>
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] server lang: <none>
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] kex follows: False
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] Compression: none
2025-11-17T13:04:10.018 [DEBUG] [Thread-54758] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:04:10.076 [DEBUG] [Thread-54758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:04:10.077 [DEBUG] [Thread-54758] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:04:10.077 [DEBUG] [Thread-54758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:04:10.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:04:10.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:04:10.139 [DEBUG] [Thread-54758] [transport.py] [_log()] userauth is OK
2025-11-17T13:04:10.139 [DEBUG] [Thread-54758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:04:10.139 [DEBUG] [Thread-54758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:04:10.140 [DEBUG] [Thread-54758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:04:10.140 [DEBUG] [Thread-54758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:04:10.163 [INFO] [Thread-54758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:04:10.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:04:10.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:04:11.054 [DEBUG] [Thread-54758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:04:11.054 [DEBUG] [Thread-54758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:04:11.102 [DEBUG] [Thread-54758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:04:11.106 [DEBUG] [Thread-54758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:04:11.114 [DEBUG] [Thread-54758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:04:11.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:04:11.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:04:11.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:04:11.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:04:11.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:04:11.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:04:11.152 [DEBUG] [Thread-54758] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:04:11.738 [DEBUG] [Thread-54760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:04:14.370 [DEBUG] [Thread-54761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:04:29.395 [DEBUG] [Thread-54762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:04:41.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:04:41.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:04:41.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:04:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 4, 17), 27.23, 15.78, 0.0, 20.38, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:04:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:04:17
2025-11-17T13:04:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:04:42.070 [DEBUG] [Thread-54763] [transport.py] [_log()] starting thread (client mode): 0xd0785e70
2025-11-17T13:04:42.070 [DEBUG] [Thread-54763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:04:42.089 [DEBUG] [Thread-54763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:04:42.089 [INFO] [Thread-54763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] client lang: <none>
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] server lang: <none>
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] kex follows: False
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] Compression: none
2025-11-17T13:04:42.093 [DEBUG] [Thread-54763] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:04:42.102 [DEBUG] [Thread-54763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:04:42.102 [DEBUG] [Thread-54763] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:04:42.103 [DEBUG] [Thread-54763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:04:42.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:04:42.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:04:42.104 [DEBUG] [Thread-54763] [transport.py] [_log()] userauth is OK
2025-11-17T13:04:42.105 [DEBUG] [Thread-54763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:04:42.105 [DEBUG] [Thread-54763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:04:42.105 [DEBUG] [Thread-54763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:04:42.105 [DEBUG] [Thread-54763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:04:42.122 [INFO] [Thread-54763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:04:42.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:04:42.802 [DEBUG] [Thread-54763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:04:42.802 [DEBUG] [Thread-54763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:04:42.802 [DEBUG] [Thread-54763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:04:42.843 [DEBUG] [Thread-54763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:04:42.843 [DEBUG] [Thread-54763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:04:42.846 [DEBUG] [Thread-54763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:04:42.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:04:42.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:04:42.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:04:42.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:04:42.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:04:42.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:04:42.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:04:42.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:04:42.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:04:42.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.461159 -999.00  +21.60  22.36     22   -0.50 1 2 1 1 1   888    0 23.80 63.92 ----- 22.4 22.4 301.0 37.5 28.4 -23.7 27.6 -22.2 27.4 -22.7 28.4 -22.4
2025-11-17T13:04:42.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:04:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:04:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.461159
2025-11-17T13:04:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:04:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:04:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:04:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:04:42.870 [DEBUG] [Thread-54763] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:04:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:04:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:04:17', tmtdew=27.23, humidity=15.78, cloud=0.0, wind=20.38, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:04:04.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:04:42.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:04:42.966 [DEBUG] [Thread-54766] [transport.py] [_log()] starting thread (client mode): 0xd07cea70
2025-11-17T13:04:42.966 [DEBUG] [Thread-54766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:04:42.981 [DEBUG] [Thread-54766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:04:42.981 [INFO] [Thread-54766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:04:42.989 [DEBUG] [Thread-54766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:04:42.989 [DEBUG] [Thread-54766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:04:42.989 [DEBUG] [Thread-54766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:04:42.989 [DEBUG] [Thread-54766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:04:42.989 [DEBUG] [Thread-54766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:04:42.989 [DEBUG] [Thread-54766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:04:42.989 [DEBUG] [Thread-54766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] client lang: <none>
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] server lang: <none>
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] kex follows: False
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:04:42.990 [DEBUG] [Thread-54766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:04:42.991 [DEBUG] [Thread-54766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:04:42.991 [DEBUG] [Thread-54766] [transport.py] [_log()] Compression: none
2025-11-17T13:04:42.991 [DEBUG] [Thread-54766] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:04:43.050 [DEBUG] [Thread-54766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:04:43.050 [DEBUG] [Thread-54766] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:04:43.051 [DEBUG] [Thread-54766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:04:43.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:04:43.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:04:43.108 [DEBUG] [Thread-54766] [transport.py] [_log()] userauth is OK
2025-11-17T13:04:43.108 [DEBUG] [Thread-54766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:04:43.108 [DEBUG] [Thread-54766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:04:43.109 [DEBUG] [Thread-54766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:04:43.109 [DEBUG] [Thread-54766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:04:43.128 [INFO] [Thread-54766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:04:43.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:04:43.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:04:44.073 [DEBUG] [Thread-54766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:04:44.073 [DEBUG] [Thread-54766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:04:44.121 [DEBUG] [Thread-54766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:04:44.121 [DEBUG] [Thread-54766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:04:44.130 [DEBUG] [Thread-54766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:04:44.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:04:44.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:04:44.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:04:44.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:04:44.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:04:44.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:04:44.164 [DEBUG] [Thread-54766] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:04:44.436 [DEBUG] [Thread-54768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:04:48.194 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:04:48.194 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:04:59.475 [DEBUG] [Thread-54769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:05:11.791 [DEBUG] [Thread-54770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:05:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:05:14.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:05:14.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:05:14.506 [DEBUG] [Thread-54771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:05:14.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 4, 49), 27.51, 15.72, 0.0, 22.41, 23.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:05:14.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:04:49
2025-11-17T13:05:14.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:05:15.098 [DEBUG] [Thread-54772] [transport.py] [_log()] starting thread (client mode): 0xd31ec280
2025-11-17T13:05:15.098 [DEBUG] [Thread-54772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:05:15.117 [DEBUG] [Thread-54772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:05:15.118 [INFO] [Thread-54772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] client lang: <none>
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] server lang: <none>
2025-11-17T13:05:15.121 [DEBUG] [Thread-54772] [transport.py] [_log()] kex follows: False
2025-11-17T13:05:15.122 [DEBUG] [Thread-54772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:05:15.122 [DEBUG] [Thread-54772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:05:15.122 [DEBUG] [Thread-54772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:05:15.122 [DEBUG] [Thread-54772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:05:15.122 [DEBUG] [Thread-54772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:05:15.122 [DEBUG] [Thread-54772] [transport.py] [_log()] Compression: none
2025-11-17T13:05:15.122 [DEBUG] [Thread-54772] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:05:15.139 [DEBUG] [Thread-54772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:05:15.140 [DEBUG] [Thread-54772] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:05:15.140 [DEBUG] [Thread-54772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:05:15.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:05:15.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:05:15.142 [DEBUG] [Thread-54772] [transport.py] [_log()] userauth is OK
2025-11-17T13:05:15.143 [DEBUG] [Thread-54772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:05:15.143 [DEBUG] [Thread-54772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:05:15.143 [DEBUG] [Thread-54772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:05:15.143 [DEBUG] [Thread-54772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:05:15.178 [INFO] [Thread-54772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:05:15.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:05:15.814 [DEBUG] [Thread-54772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:05:15.814 [DEBUG] [Thread-54772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:05:15.815 [DEBUG] [Thread-54772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:05:15.856 [DEBUG] [Thread-54772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:05:15.856 [DEBUG] [Thread-54772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:05:15.859 [DEBUG] [Thread-54772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:05:15.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:05:15.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:05:15.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:05:15.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:05:15.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:05:15.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:05:15.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:05:15.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:05:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:05:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.461506 -999.00  +21.70  23.84     22   -0.50 1 2 1 1 1   888    0 23.75 63.49 ----- 23.8 23.8 302.6 36.0 28.3 -23.6 27.6 -22.6 27.4 -22.6 28.3 -22.3
2025-11-17T13:05:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:05:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:05:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.461506
2025-11-17T13:05:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:05:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:05:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:05:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:05:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:05:15.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:04:49', tmtdew=27.51, humidity=15.72, cloud=0.0, wind=22.41, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:04:34.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:05:15.887 [DEBUG] [Thread-54772] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:05:15.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:05:15.982 [DEBUG] [Thread-54775] [transport.py] [_log()] starting thread (client mode): 0xd07cde70
2025-11-17T13:05:15.982 [DEBUG] [Thread-54775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:05:16.000 [DEBUG] [Thread-54775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:05:16.000 [INFO] [Thread-54775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:05:16.008 [DEBUG] [Thread-54775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] client lang: <none>
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] server lang: <none>
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] kex follows: False
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] Compression: none
2025-11-17T13:05:16.009 [DEBUG] [Thread-54775] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:05:16.068 [DEBUG] [Thread-54775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:05:16.069 [DEBUG] [Thread-54775] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:05:16.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:05:16.070 [DEBUG] [Thread-54775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:05:16.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:05:16.124 [DEBUG] [Thread-54775] [transport.py] [_log()] userauth is OK
2025-11-17T13:05:16.125 [DEBUG] [Thread-54775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:05:16.125 [DEBUG] [Thread-54775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:05:16.125 [DEBUG] [Thread-54775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:05:16.125 [DEBUG] [Thread-54775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:05:16.144 [INFO] [Thread-54775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:05:16.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:05:16.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:05:17.046 [DEBUG] [Thread-54775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:05:17.046 [DEBUG] [Thread-54775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:05:17.093 [DEBUG] [Thread-54775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:05:17.093 [DEBUG] [Thread-54775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:05:17.103 [DEBUG] [Thread-54775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:05:17.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:05:17.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:05:17.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:05:17.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:05:17.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:05:17.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:05:17.138 [DEBUG] [Thread-54775] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:05:29.533 [DEBUG] [Thread-54777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:05:44.567 [DEBUG] [Thread-54778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:05:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:05:47.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:05:47.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:05:47.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 5, 21), 27.26, 15.95, 0.0, 19.81, 22.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:05:47.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:05:21
2025-11-17T13:05:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:05:48.076 [DEBUG] [Thread-54779] [transport.py] [_log()] starting thread (client mode): 0xd31b12d0
2025-11-17T13:05:48.076 [DEBUG] [Thread-54779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:05:48.099 [DEBUG] [Thread-54779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:05:48.099 [INFO] [Thread-54779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:05:48.102 [DEBUG] [Thread-54779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:05:48.102 [DEBUG] [Thread-54779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] client lang: <none>
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] server lang: <none>
2025-11-17T13:05:48.103 [DEBUG] [Thread-54779] [transport.py] [_log()] kex follows: False
2025-11-17T13:05:48.104 [DEBUG] [Thread-54779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:05:48.104 [DEBUG] [Thread-54779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:05:48.104 [DEBUG] [Thread-54779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:05:48.104 [DEBUG] [Thread-54779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:05:48.104 [DEBUG] [Thread-54779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:05:48.104 [DEBUG] [Thread-54779] [transport.py] [_log()] Compression: none
2025-11-17T13:05:48.104 [DEBUG] [Thread-54779] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:05:48.123 [DEBUG] [Thread-54779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:05:48.124 [DEBUG] [Thread-54779] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:05:48.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:05:48.124 [DEBUG] [Thread-54779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:05:48.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:05:48.127 [DEBUG] [Thread-54779] [transport.py] [_log()] userauth is OK
2025-11-17T13:05:48.127 [DEBUG] [Thread-54779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:05:48.127 [DEBUG] [Thread-54779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:05:48.127 [DEBUG] [Thread-54779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:05:48.127 [DEBUG] [Thread-54779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:05:48.145 [INFO] [Thread-54779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:05:48.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:05:48.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:05:48.337 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:05:48.809 [DEBUG] [Thread-54779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:05:48.809 [DEBUG] [Thread-54779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:05:48.809 [DEBUG] [Thread-54779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:05:48.850 [DEBUG] [Thread-54779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:05:48.851 [DEBUG] [Thread-54779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:05:48.853 [DEBUG] [Thread-54779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:05:48.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:05:48.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:05:48.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:05:48.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:05:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:05:48.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:05:48.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:05:48.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:05:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:05:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.461853 -999.00  +22.00  25.85     22   -0.40 1 2 1 1 1   888    0 23.54 65.96 ----- 25.9 25.9 304.8 35.0 28.4 -22.7 27.7 -21.8 27.4 -20.7 28.4 -22.0
2025-11-17T13:05:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:05:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:05:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.461853
2025-11-17T13:05:48.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:05:48.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:05:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:05:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:05:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:05:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:05:21', tmtdew=27.26, humidity=15.95, cloud=0.0, wind=19.81, temperature=22.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:05:04.099', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:05:48.881 [DEBUG] [Thread-54779] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:05:48.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:05:48.975 [DEBUG] [Thread-54782] [transport.py] [_log()] starting thread (client mode): 0xd31608b0
2025-11-17T13:05:48.975 [DEBUG] [Thread-54782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:05:48.990 [DEBUG] [Thread-54782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:05:48.990 [INFO] [Thread-54782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:05:48.998 [DEBUG] [Thread-54782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:05:48.998 [DEBUG] [Thread-54782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:05:48.998 [DEBUG] [Thread-54782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:05:48.998 [DEBUG] [Thread-54782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] client lang: <none>
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] server lang: <none>
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] kex follows: False
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] Compression: none
2025-11-17T13:05:48.999 [DEBUG] [Thread-54782] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:05:49.057 [DEBUG] [Thread-54782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:05:49.057 [DEBUG] [Thread-54782] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:05:49.058 [DEBUG] [Thread-54782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:05:49.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:05:49.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:05:49.112 [DEBUG] [Thread-54782] [transport.py] [_log()] userauth is OK
2025-11-17T13:05:49.112 [DEBUG] [Thread-54782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:05:49.112 [DEBUG] [Thread-54782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:05:49.112 [DEBUG] [Thread-54782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:05:49.112 [DEBUG] [Thread-54782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:05:49.136 [INFO] [Thread-54782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:05:49.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:05:49.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:05:50.006 [DEBUG] [Thread-54782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:05:50.006 [DEBUG] [Thread-54782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:05:50.053 [DEBUG] [Thread-54782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:05:50.053 [DEBUG] [Thread-54782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:05:50.062 [DEBUG] [Thread-54782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:05:50.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:05:50.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:05:50.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:05:50.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:05:50.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:05:50.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:05:50.096 [DEBUG] [Thread-54782] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:05:59.597 [DEBUG] [Thread-54784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:06:11.842 [DEBUG] [Thread-54785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:06:14.637 [DEBUG] [Thread-54786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:06:20.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:06:20.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:06:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:06:20.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 5, 53), 27.11, 16.08, 0.0, 22.5, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:06:20.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:05:53
2025-11-17T13:06:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:06:21.046 [DEBUG] [Thread-54787] [transport.py] [_log()] starting thread (client mode): 0xd07cef80
2025-11-17T13:06:21.046 [DEBUG] [Thread-54787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:06:21.066 [DEBUG] [Thread-54787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:06:21.066 [INFO] [Thread-54787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] client lang: <none>
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] server lang: <none>
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] kex follows: False
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] Compression: none
2025-11-17T13:06:21.070 [DEBUG] [Thread-54787] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:06:21.085 [DEBUG] [Thread-54787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:06:21.086 [DEBUG] [Thread-54787] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:06:21.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:06:21.087 [DEBUG] [Thread-54787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:06:21.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:06:21.088 [DEBUG] [Thread-54787] [transport.py] [_log()] userauth is OK
2025-11-17T13:06:21.088 [DEBUG] [Thread-54787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:06:21.088 [DEBUG] [Thread-54787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:06:21.088 [DEBUG] [Thread-54787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:06:21.088 [DEBUG] [Thread-54787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:06:21.102 [INFO] [Thread-54787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:06:21.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:06:21.698 [DEBUG] [Thread-54787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:06:21.698 [DEBUG] [Thread-54787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:06:21.699 [DEBUG] [Thread-54787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:06:21.739 [DEBUG] [Thread-54787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:06:21.739 [DEBUG] [Thread-54787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:06:21.742 [DEBUG] [Thread-54787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:06:21.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:06:21.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:06:21.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:06:21.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:06:21.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:06:21.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:06:21.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:06:21.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:06:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:06:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.462200 -999.00  +21.90  25.25     22   -0.20 1 2 1 1 1   888    0 23.97 64.39 ----- 25.2 25.2 305.8 31.4 28.4 -23.3 27.7 -21.7 27.6 -21.6 28.4 -22.3
2025-11-17T13:06:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:06:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:06:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.462200
2025-11-17T13:06:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:06:21.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:06:21.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:06:21.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:06:21.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:06:21.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:05:53', tmtdew=27.11, humidity=16.08, cloud=0.0, wind=22.5, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:05:34.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:06:21.770 [DEBUG] [Thread-54787] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:06:21.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:06:21.864 [DEBUG] [Thread-54790] [transport.py] [_log()] starting thread (client mode): 0xd0758e20
2025-11-17T13:06:21.864 [DEBUG] [Thread-54790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:06:21.883 [DEBUG] [Thread-54790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:06:21.883 [INFO] [Thread-54790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:06:21.891 [DEBUG] [Thread-54790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:06:21.891 [DEBUG] [Thread-54790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:06:21.891 [DEBUG] [Thread-54790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:06:21.891 [DEBUG] [Thread-54790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:06:21.891 [DEBUG] [Thread-54790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:06:21.891 [DEBUG] [Thread-54790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:06:21.891 [DEBUG] [Thread-54790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:06:21.891 [DEBUG] [Thread-54790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:06:21.892 [DEBUG] [Thread-54790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:06:21.892 [DEBUG] [Thread-54790] [transport.py] [_log()] client lang: <none>
2025-11-17T13:06:21.892 [DEBUG] [Thread-54790] [transport.py] [_log()] server lang: <none>
2025-11-17T13:06:21.892 [DEBUG] [Thread-54790] [transport.py] [_log()] kex follows: False
2025-11-17T13:06:21.892 [DEBUG] [Thread-54790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:06:21.892 [DEBUG] [Thread-54790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:06:21.892 [DEBUG] [Thread-54790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:06:21.892 [DEBUG] [Thread-54790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:06:21.893 [DEBUG] [Thread-54790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:06:21.893 [DEBUG] [Thread-54790] [transport.py] [_log()] Compression: none
2025-11-17T13:06:21.893 [DEBUG] [Thread-54790] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:06:21.948 [DEBUG] [Thread-54790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:06:21.948 [DEBUG] [Thread-54790] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:06:21.949 [DEBUG] [Thread-54790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:06:21.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:06:21.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:06:22.004 [DEBUG] [Thread-54790] [transport.py] [_log()] userauth is OK
2025-11-17T13:06:22.005 [DEBUG] [Thread-54790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:06:22.005 [DEBUG] [Thread-54790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:06:22.005 [DEBUG] [Thread-54790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:06:22.005 [DEBUG] [Thread-54790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:06:22.024 [INFO] [Thread-54790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:06:22.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:06:22.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:06:22.896 [DEBUG] [Thread-54790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:06:22.896 [DEBUG] [Thread-54790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:06:22.944 [DEBUG] [Thread-54790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:06:22.944 [DEBUG] [Thread-54790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:06:22.954 [DEBUG] [Thread-54790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:06:22.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:06:22.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:06:22.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:06:22.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:06:22.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:06:22.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:06:22.989 [DEBUG] [Thread-54790] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:06:29.668 [DEBUG] [Thread-54792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:06:44.717 [DEBUG] [Thread-54793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:06:48.482 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:06:48.483 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:06:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:06:53.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:06:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:06:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 6, 25), 27.25, 15.95, 0.0, 22.66, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:06:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:06:25
2025-11-17T13:06:53.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:06:53.931 [DEBUG] [Thread-54794] [transport.py] [_log()] starting thread (client mode): 0xd07591e0
2025-11-17T13:06:53.931 [DEBUG] [Thread-54794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:06:53.951 [DEBUG] [Thread-54794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:06:53.951 [INFO] [Thread-54794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:06:53.954 [DEBUG] [Thread-54794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:06:53.954 [DEBUG] [Thread-54794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] client lang: <none>
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] server lang: <none>
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] kex follows: False
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:06:53.955 [DEBUG] [Thread-54794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:06:53.956 [DEBUG] [Thread-54794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:06:53.956 [DEBUG] [Thread-54794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:06:53.956 [DEBUG] [Thread-54794] [transport.py] [_log()] Compression: none
2025-11-17T13:06:53.956 [DEBUG] [Thread-54794] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:06:53.975 [DEBUG] [Thread-54794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:06:53.976 [DEBUG] [Thread-54794] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:06:53.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:06:53.977 [DEBUG] [Thread-54794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:06:53.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:06:53.979 [DEBUG] [Thread-54794] [transport.py] [_log()] userauth is OK
2025-11-17T13:06:53.979 [DEBUG] [Thread-54794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:06:53.979 [DEBUG] [Thread-54794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:06:53.979 [DEBUG] [Thread-54794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:06:53.979 [DEBUG] [Thread-54794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:06:54.015 [INFO] [Thread-54794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:06:54.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:06:54.670 [DEBUG] [Thread-54794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:06:54.670 [DEBUG] [Thread-54794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:06:54.671 [DEBUG] [Thread-54794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:06:54.711 [DEBUG] [Thread-54794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:06:54.711 [DEBUG] [Thread-54794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:06:54.714 [DEBUG] [Thread-54794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:06:54.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:06:54.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:06:54.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:06:54.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:06:54.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:06:54.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:06:54.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:06:54.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:06:54.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:06:54.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.462548 -999.00  +22.20  28.13     21   -0.60 1 2 1 1 1   888    0 23.66 63.34 ----- 28.1 28.1 298.0 37.3 28.6 -23.8 27.7 -21.1 27.7 -20.5 28.6 -22.3
2025-11-17T13:06:54.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:06:54.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:06:54.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.462548
2025-11-17T13:06:54.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:06:54.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:06:54.737 [DEBUG] [Thread-54794] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:06:54.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:06:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:06:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:06:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:06:25', tmtdew=27.25, humidity=15.95, cloud=0.0, wind=22.66, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:06:04.147', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:06:54.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:06:54.833 [DEBUG] [Thread-54797] [transport.py] [_log()] starting thread (client mode): 0xd31cffd0
2025-11-17T13:06:54.833 [DEBUG] [Thread-54797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:06:54.851 [DEBUG] [Thread-54797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:06:54.851 [INFO] [Thread-54797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] client lang: <none>
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] server lang: <none>
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] kex follows: False
2025-11-17T13:06:54.860 [DEBUG] [Thread-54797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:06:54.861 [DEBUG] [Thread-54797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:06:54.861 [DEBUG] [Thread-54797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:06:54.861 [DEBUG] [Thread-54797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:06:54.861 [DEBUG] [Thread-54797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:06:54.861 [DEBUG] [Thread-54797] [transport.py] [_log()] Compression: none
2025-11-17T13:06:54.861 [DEBUG] [Thread-54797] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:06:54.918 [DEBUG] [Thread-54797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:06:54.919 [DEBUG] [Thread-54797] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:06:54.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:06:54.920 [DEBUG] [Thread-54797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:06:54.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:06:54.980 [DEBUG] [Thread-54797] [transport.py] [_log()] userauth is OK
2025-11-17T13:06:54.980 [DEBUG] [Thread-54797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:06:54.980 [DEBUG] [Thread-54797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:06:54.980 [DEBUG] [Thread-54797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:06:54.981 [DEBUG] [Thread-54797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:06:55.000 [INFO] [Thread-54797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:06:55.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:06:55.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:06:55.858 [DEBUG] [Thread-54797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:06:55.858 [DEBUG] [Thread-54797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:06:55.905 [DEBUG] [Thread-54797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:06:55.905 [DEBUG] [Thread-54797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:06:55.914 [DEBUG] [Thread-54797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:06:55.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:06:55.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:06:55.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:06:55.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:06:55.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:06:55.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:06:55.949 [DEBUG] [Thread-54797] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:06:59.746 [DEBUG] [Thread-54799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:07:11.897 [DEBUG] [Thread-54800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:07:14.785 [DEBUG] [Thread-54801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:07:25.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:07:25.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:07:25.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:07:26.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 6, 57), 26.99, 15.95, 0.0, 16.9, 22.4, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:07:26.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:06:57
2025-11-17T13:07:26.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:07:26.952 [DEBUG] [Thread-54802] [transport.py] [_log()] starting thread (client mode): 0xd0759180
2025-11-17T13:07:26.953 [DEBUG] [Thread-54802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:07:26.972 [DEBUG] [Thread-54802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:07:26.972 [INFO] [Thread-54802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] client lang: <none>
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] server lang: <none>
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] kex follows: False
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] Compression: none
2025-11-17T13:07:26.975 [DEBUG] [Thread-54802] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:07:26.991 [DEBUG] [Thread-54802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:07:26.991 [DEBUG] [Thread-54802] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:07:26.991 [DEBUG] [Thread-54802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:07:26.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:07:26.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:07:26.992 [DEBUG] [Thread-54802] [transport.py] [_log()] userauth is OK
2025-11-17T13:07:26.992 [DEBUG] [Thread-54802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:07:26.992 [DEBUG] [Thread-54802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:07:26.992 [DEBUG] [Thread-54802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:07:26.992 [DEBUG] [Thread-54802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:07:27.007 [INFO] [Thread-54802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:07:27.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:07:27.630 [DEBUG] [Thread-54802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:07:27.630 [DEBUG] [Thread-54802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:07:27.630 [DEBUG] [Thread-54802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:07:27.671 [DEBUG] [Thread-54802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:07:27.671 [DEBUG] [Thread-54802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:07:27.673 [DEBUG] [Thread-54802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:07:27.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:07:27.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:07:27.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:07:27.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:07:27.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:07:27.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:07:27.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:07:27.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:07:27.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:07:27.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.463242 -999.00  +21.10  26.16     23   -0.60 1 2 1 1 1   888    0 23.80 59.03 ----- 26.2 26.2 278.6 28.4 28.4 -23.6 27.7 -22.9 27.5 -23.1 28.4 -21.9
2025-11-17T13:07:27.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:07:27.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:07:27.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.463242
2025-11-17T13:07:27.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:07:27.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:07:27.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:07:27.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:07:27.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:07:27.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:06:57', tmtdew=26.99, humidity=15.95, cloud=0.0, wind=16.9, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:07:04.109', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:07:27.693 [DEBUG] [Thread-54802] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:07:27.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:07:27.778 [DEBUG] [Thread-54805] [transport.py] [_log()] starting thread (client mode): 0xd31efbe0
2025-11-17T13:07:27.778 [DEBUG] [Thread-54805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:07:27.792 [DEBUG] [Thread-54805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:07:27.792 [INFO] [Thread-54805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] client lang: <none>
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] server lang: <none>
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] kex follows: False
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] Compression: none
2025-11-17T13:07:27.800 [DEBUG] [Thread-54805] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:07:27.859 [DEBUG] [Thread-54805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:07:27.859 [DEBUG] [Thread-54805] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:07:27.859 [DEBUG] [Thread-54805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:07:27.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:07:27.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:07:27.916 [DEBUG] [Thread-54805] [transport.py] [_log()] userauth is OK
2025-11-17T13:07:27.916 [DEBUG] [Thread-54805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:07:27.916 [DEBUG] [Thread-54805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:07:27.916 [DEBUG] [Thread-54805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:07:27.916 [DEBUG] [Thread-54805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:07:27.931 [INFO] [Thread-54805] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:07:27.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:07:27.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:07:28.795 [DEBUG] [Thread-54805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:07:28.795 [DEBUG] [Thread-54805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:07:28.843 [DEBUG] [Thread-54805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:07:28.843 [DEBUG] [Thread-54805] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:07:28.851 [DEBUG] [Thread-54805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:07:28.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:07:28.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:07:28.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:07:28.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:07:28.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:07:28.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:07:28.882 [DEBUG] [Thread-54805] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:07:29.813 [DEBUG] [Thread-54807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:07:44.846 [DEBUG] [Thread-54808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:07:48.624 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:07:48.625 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:07:58.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:07:58.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:07:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:07:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 7, 29), 26.95, 16.0, 0.0, 19.37, 22.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:07:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:07:29
2025-11-17T13:07:59.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:07:59.829 [DEBUG] [Thread-54809] [transport.py] [_log()] starting thread (client mode): 0xd31b3b50
2025-11-17T13:07:59.829 [DEBUG] [Thread-54809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:07:59.849 [DEBUG] [Thread-54809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:07:59.849 [INFO] [Thread-54809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:07:59.852 [DEBUG] [Thread-54809] [transport.py] [_log()] client lang: <none>
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] server lang: <none>
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] kex follows: False
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] Compression: none
2025-11-17T13:07:59.853 [DEBUG] [Thread-54809] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:07:59.871 [DEBUG] [Thread-54809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:07:59.872 [DEBUG] [Thread-54809] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:07:59.872 [DEBUG] [Thread-54809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:07:59.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:07:59.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:07:59.874 [DEBUG] [Thread-54809] [transport.py] [_log()] userauth is OK
2025-11-17T13:07:59.875 [DEBUG] [Thread-54809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:07:59.875 [DEBUG] [Thread-54809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:07:59.875 [DEBUG] [Thread-54809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:07:59.875 [DEBUG] [Thread-54809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:07:59.876 [DEBUG] [Thread-54811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:07:59.912 [INFO] [Thread-54809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:07:59.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:08:00.532 [DEBUG] [Thread-54809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:08:00.532 [DEBUG] [Thread-54809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:08:00.532 [DEBUG] [Thread-54809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:08:00.572 [DEBUG] [Thread-54809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:08:00.573 [DEBUG] [Thread-54809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:08:00.576 [DEBUG] [Thread-54809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:08:00.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:08:00.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:08:00.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:08:00.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:08:00.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:08:00.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:08:00.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:08:00.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:08:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:08:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.463589 -999.00  +21.60  17.19     22   -0.50 1 2 1 1 1   888    0 23.58 57.71 ----- 17.2 17.2 288.8 31.1 28.5 -22.3 27.7 -22.3 27.5 -21.2 28.5 -22.3
2025-11-17T13:08:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:08:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:08:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.463589
2025-11-17T13:08:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:08:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:08:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:08:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:08:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:08:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:07:29', tmtdew=26.95, humidity=16.0, cloud=0.0, wind=19.37, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:07:34.090', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:08:00.602 [DEBUG] [Thread-54809] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:08:00.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:08:00.698 [DEBUG] [Thread-54813] [transport.py] [_log()] starting thread (client mode): 0xd3160fa0
2025-11-17T13:08:00.698 [DEBUG] [Thread-54813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:08:00.713 [DEBUG] [Thread-54813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:08:00.713 [INFO] [Thread-54813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:08:00.720 [DEBUG] [Thread-54813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:08:00.720 [DEBUG] [Thread-54813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:08:00.720 [DEBUG] [Thread-54813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] client lang: <none>
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] server lang: <none>
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] kex follows: False
2025-11-17T13:08:00.721 [DEBUG] [Thread-54813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:08:00.722 [DEBUG] [Thread-54813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:08:00.722 [DEBUG] [Thread-54813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:08:00.722 [DEBUG] [Thread-54813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:08:00.722 [DEBUG] [Thread-54813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:08:00.722 [DEBUG] [Thread-54813] [transport.py] [_log()] Compression: none
2025-11-17T13:08:00.722 [DEBUG] [Thread-54813] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:08:00.780 [DEBUG] [Thread-54813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:08:00.780 [DEBUG] [Thread-54813] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:08:00.781 [DEBUG] [Thread-54813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:08:00.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:08:00.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:08:00.836 [DEBUG] [Thread-54813] [transport.py] [_log()] userauth is OK
2025-11-17T13:08:00.836 [DEBUG] [Thread-54813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:08:00.836 [DEBUG] [Thread-54813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:08:00.836 [DEBUG] [Thread-54813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:08:00.837 [DEBUG] [Thread-54813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:08:00.854 [INFO] [Thread-54813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:08:00.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:08:00.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:08:01.720 [DEBUG] [Thread-54813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:08:01.720 [DEBUG] [Thread-54813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:08:01.769 [DEBUG] [Thread-54813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:08:01.769 [DEBUG] [Thread-54813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:08:01.779 [DEBUG] [Thread-54813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:08:01.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:08:01.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:08: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
2025-11-17T13:08:01.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:08:01.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:08:01.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:08:01.816 [DEBUG] [Thread-54813] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:08:11.931 [DEBUG] [Thread-54815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:08:14.907 [DEBUG] [Thread-54816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:08:29.958 [DEBUG] [Thread-54817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:08:31.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:08:31.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:08:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:08:32.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 8, 1), 27.25, 15.95, 0.0, 21.03, 22.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:08:32.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:08:01
2025-11-17T13:08:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:08:32.745 [DEBUG] [Thread-54818] [transport.py] [_log()] starting thread (client mode): 0xd31cfca0
2025-11-17T13:08:32.745 [DEBUG] [Thread-54818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:08:32.766 [DEBUG] [Thread-54818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:08:32.766 [INFO] [Thread-54818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] client lang: <none>
2025-11-17T13:08:32.769 [DEBUG] [Thread-54818] [transport.py] [_log()] server lang: <none>
2025-11-17T13:08:32.770 [DEBUG] [Thread-54818] [transport.py] [_log()] kex follows: False
2025-11-17T13:08:32.770 [DEBUG] [Thread-54818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:08:32.770 [DEBUG] [Thread-54818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:08:32.770 [DEBUG] [Thread-54818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:08:32.770 [DEBUG] [Thread-54818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:08:32.770 [DEBUG] [Thread-54818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:08:32.770 [DEBUG] [Thread-54818] [transport.py] [_log()] Compression: none
2025-11-17T13:08:32.770 [DEBUG] [Thread-54818] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:08:32.786 [DEBUG] [Thread-54818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:08:32.787 [DEBUG] [Thread-54818] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:08:32.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:08:32.788 [DEBUG] [Thread-54818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:08:32.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:08:32.789 [DEBUG] [Thread-54818] [transport.py] [_log()] userauth is OK
2025-11-17T13:08:32.790 [DEBUG] [Thread-54818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:08:32.790 [DEBUG] [Thread-54818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:08:32.790 [DEBUG] [Thread-54818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:08:32.790 [DEBUG] [Thread-54818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:08:32.822 [INFO] [Thread-54818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:08:32.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:08:33.468 [DEBUG] [Thread-54818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:08:33.468 [DEBUG] [Thread-54818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:08:33.468 [DEBUG] [Thread-54818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:08:33.509 [DEBUG] [Thread-54818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:08:33.509 [DEBUG] [Thread-54818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:08:33.512 [DEBUG] [Thread-54818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:08:33.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:08:33.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:08:33.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:08:33.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:08:33.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:08:33.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:08:33.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.463936 -999.00  +21.70  16.62     22   -0.50 1 2 1 1 1   888    0 23.56 55.19 ----- 16.6 16.6 308.0 21.3 28.6 -22.8 27.8 -22.4 27.5 -21.4 28.5 -21.8
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.463936
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:08:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:08:01', tmtdew=27.25, humidity=15.95, cloud=0.0, wind=21.03, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:08:04.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:08:33.532 [DEBUG] [Thread-54818] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:08:33.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:08:33.617 [DEBUG] [Thread-54821] [transport.py] [_log()] starting thread (client mode): 0xd3137eb0
2025-11-17T13:08:33.617 [DEBUG] [Thread-54821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:08:33.632 [DEBUG] [Thread-54821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:08:33.632 [INFO] [Thread-54821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] client lang: <none>
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] server lang: <none>
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] kex follows: False
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] Compression: none
2025-11-17T13:08:33.640 [DEBUG] [Thread-54821] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:08:33.695 [DEBUG] [Thread-54821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:08:33.695 [DEBUG] [Thread-54821] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:08:33.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:08:33.696 [DEBUG] [Thread-54821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:08:33.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:08:33.752 [DEBUG] [Thread-54821] [transport.py] [_log()] userauth is OK
2025-11-17T13:08:33.752 [DEBUG] [Thread-54821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:08:33.752 [DEBUG] [Thread-54821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:08:33.752 [DEBUG] [Thread-54821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:08:33.752 [DEBUG] [Thread-54821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:08:33.766 [INFO] [Thread-54821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:08:33.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:08:33.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:08:34.661 [DEBUG] [Thread-54821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:08:34.661 [DEBUG] [Thread-54821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:08:34.710 [DEBUG] [Thread-54821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:08:34.710 [DEBUG] [Thread-54821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:08:34.720 [DEBUG] [Thread-54821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:08:34.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:08:34.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:08:34.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:08:34.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:08:34.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:08:34.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:08:34.751 [DEBUG] [Thread-54821] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:08:44.986 [DEBUG] [Thread-54823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:08:48.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:08:48.768 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:09:00.025 [DEBUG] [Thread-54824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:09:04.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:09:04.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:09:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:09:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 8, 33), 27.24, 15.98, 0.0, 19.97, 22.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:09:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:08:33
2025-11-17T13:09:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:09:05.711 [DEBUG] [Thread-54825] [transport.py] [_log()] starting thread (client mode): 0xd3161600
2025-11-17T13:09:05.711 [DEBUG] [Thread-54825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:09:05.729 [DEBUG] [Thread-54825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:09:05.730 [INFO] [Thread-54825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] client lang: <none>
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] server lang: <none>
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] kex follows: False
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] Compression: none
2025-11-17T13:09:05.733 [DEBUG] [Thread-54825] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:09:05.749 [DEBUG] [Thread-54825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:09:05.749 [DEBUG] [Thread-54825] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:09:05.749 [DEBUG] [Thread-54825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:09:05.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:09:05.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:09:05.750 [DEBUG] [Thread-54825] [transport.py] [_log()] userauth is OK
2025-11-17T13:09:05.750 [DEBUG] [Thread-54825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:09:05.750 [DEBUG] [Thread-54825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:09:05.750 [DEBUG] [Thread-54825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:09:05.751 [DEBUG] [Thread-54825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:09:05.761 [INFO] [Thread-54825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:09:05.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:09:06.397 [DEBUG] [Thread-54825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:09:06.397 [DEBUG] [Thread-54825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:09:06.397 [DEBUG] [Thread-54825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:09:06.438 [DEBUG] [Thread-54825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:09:06.438 [DEBUG] [Thread-54825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:09:06.440 [DEBUG] [Thread-54825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:09:06.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:09:06.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:09:06.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:09:06.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:09:06.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:09:06.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:09:06.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:09:06.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:09:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:09:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.464284 -999.00  +21.90  18.96     22   -0.50 1 2 1 1 1   888    0 23.71 52.02 ----- 19.0 19.0 302.6 26.2 28.7 -23.2 27.9 -24.2 27.7 -21.3 28.6 -21.9
2025-11-17T13:09:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:09:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:09:06.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.464284
2025-11-17T13:09:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:09:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:09:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:09:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:09:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:09:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:08:33', tmtdew=27.24, humidity=15.98, cloud=0.0, wind=19.97, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:08:34.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:09:06.458 [DEBUG] [Thread-54825] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:09:06.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:09:06.543 [DEBUG] [Thread-54828] [transport.py] [_log()] starting thread (client mode): 0xd3160880
2025-11-17T13:09:06.543 [DEBUG] [Thread-54828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:09:06.557 [DEBUG] [Thread-54828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:09:06.557 [INFO] [Thread-54828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] client lang: <none>
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] server lang: <none>
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] kex follows: False
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] Compression: none
2025-11-17T13:09:06.565 [DEBUG] [Thread-54828] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:09:06.627 [DEBUG] [Thread-54828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:09:06.627 [DEBUG] [Thread-54828] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:09:06.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:09:06.627 [DEBUG] [Thread-54828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:09:06.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:09:06.688 [DEBUG] [Thread-54828] [transport.py] [_log()] userauth is OK
2025-11-17T13:09:06.688 [DEBUG] [Thread-54828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:09:06.688 [DEBUG] [Thread-54828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:09:06.688 [DEBUG] [Thread-54828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:09:06.688 [DEBUG] [Thread-54828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:09:06.702 [INFO] [Thread-54828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:09:06.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:09:06.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:09:07.594 [DEBUG] [Thread-54828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:09:07.594 [DEBUG] [Thread-54828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:09:07.642 [DEBUG] [Thread-54828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:09:07.643 [DEBUG] [Thread-54828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:09:07.652 [DEBUG] [Thread-54828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:09:07.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:09:07.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:09:07.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:09:07.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:09:07.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:09:07.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:09:07.690 [DEBUG] [Thread-54828] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:09:11.983 [DEBUG] [Thread-54830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:09:15.058 [DEBUG] [Thread-54831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:09:30.097 [DEBUG] [Thread-54832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:09:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:09:37.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:09:37.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:09:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 9, 5), 27.43, 15.77, 0.0, 22.85, 22.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:09:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:09:05
2025-11-17T13:09:38.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:09:38.689 [DEBUG] [Thread-54833] [transport.py] [_log()] starting thread (client mode): 0xd3160850
2025-11-17T13:09:38.690 [DEBUG] [Thread-54833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:09:38.710 [DEBUG] [Thread-54833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:09:38.710 [INFO] [Thread-54833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] client lang: <none>
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] server lang: <none>
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] kex follows: False
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] Compression: none
2025-11-17T13:09:38.713 [DEBUG] [Thread-54833] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:09:38.732 [DEBUG] [Thread-54833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:09:38.732 [DEBUG] [Thread-54833] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:09:38.732 [DEBUG] [Thread-54833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:09:38.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:09:38.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:09:38.733 [DEBUG] [Thread-54833] [transport.py] [_log()] userauth is OK
2025-11-17T13:09:38.733 [DEBUG] [Thread-54833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:09:38.733 [DEBUG] [Thread-54833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:09:38.733 [DEBUG] [Thread-54833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:09:38.733 [DEBUG] [Thread-54833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:09:38.743 [INFO] [Thread-54833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:09:38.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:09:39.395 [DEBUG] [Thread-54833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:09:39.396 [DEBUG] [Thread-54833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:09:39.396 [DEBUG] [Thread-54833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:09:39.436 [DEBUG] [Thread-54833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:09:39.437 [DEBUG] [Thread-54833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:09:39.439 [DEBUG] [Thread-54833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:09:39.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:09:39.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:09:39.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:09:39.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:09:39.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:09:39.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:09:39.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:09:39.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:09:39.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:09:39.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.464631 -999.00  +22.60  21.96     21   -0.20 1 2 1 1 1   888    0 23.55 48.51 ----- 22.0 22.0 304.6 28.4 28.9 -21.8 27.9 -22.6 27.9 -21.6 28.8 -21.3
2025-11-17T13:09:39.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:09:39.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:09:39.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.464631
2025-11-17T13:09:39.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:09:39.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:09:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:09:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:09:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:09:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:09:05', tmtdew=27.43, humidity=15.77, cloud=0.0, wind=22.85, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:09:04.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:09:39.464 [DEBUG] [Thread-54833] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:09:39.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:09:39.561 [DEBUG] [Thread-54836] [transport.py] [_log()] starting thread (client mode): 0xd3163fd0
2025-11-17T13:09:39.561 [DEBUG] [Thread-54836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:09:39.576 [DEBUG] [Thread-54836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:09:39.576 [INFO] [Thread-54836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:09:39.584 [DEBUG] [Thread-54836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:09:39.584 [DEBUG] [Thread-54836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:09:39.584 [DEBUG] [Thread-54836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:09:39.584 [DEBUG] [Thread-54836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:09:39.584 [DEBUG] [Thread-54836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:09:39.584 [DEBUG] [Thread-54836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:09:39.584 [DEBUG] [Thread-54836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] client lang: <none>
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] server lang: <none>
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] kex follows: False
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] Compression: none
2025-11-17T13:09:39.585 [DEBUG] [Thread-54836] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:09:39.640 [DEBUG] [Thread-54836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:09:39.641 [DEBUG] [Thread-54836] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:09:39.641 [DEBUG] [Thread-54836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:09:39.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:09:39.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:09:39.700 [DEBUG] [Thread-54836] [transport.py] [_log()] userauth is OK
2025-11-17T13:09:39.700 [DEBUG] [Thread-54836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:09:39.701 [DEBUG] [Thread-54836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:09:39.701 [DEBUG] [Thread-54836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:09:39.701 [DEBUG] [Thread-54836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:09:39.720 [INFO] [Thread-54836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:09:39.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:09:39.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:09:40.594 [DEBUG] [Thread-54836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:09:40.594 [DEBUG] [Thread-54836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:09:40.642 [DEBUG] [Thread-54836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:09:40.642 [DEBUG] [Thread-54836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:09:40.651 [DEBUG] [Thread-54836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:09:40.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:09:40.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:09:40.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:09:40.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:09:40.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:09:40.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:09:40.686 [DEBUG] [Thread-54836] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:09:45.126 [DEBUG] [Thread-54838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:09:48.908 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:09:48.909 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:10:00.173 [DEBUG] [Thread-54839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:10:10.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:10:10.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:10:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:10:11.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 9, 37), 27.68, 15.38, 0.0, 21.9, 23.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:10:11.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:09:37
2025-11-17T13:10:11.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:10:11.667 [DEBUG] [Thread-54840] [transport.py] [_log()] starting thread (client mode): 0xd31cc6d0
2025-11-17T13:10:11.667 [DEBUG] [Thread-54840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:10:11.687 [DEBUG] [Thread-54840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:10:11.687 [INFO] [Thread-54840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:10:11.690 [DEBUG] [Thread-54840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] client lang: <none>
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] server lang: <none>
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] kex follows: False
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:10:11.691 [DEBUG] [Thread-54840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:10:11.692 [DEBUG] [Thread-54840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:10:11.692 [DEBUG] [Thread-54840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:10:11.692 [DEBUG] [Thread-54840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:10:11.692 [DEBUG] [Thread-54840] [transport.py] [_log()] Compression: none
2025-11-17T13:10:11.692 [DEBUG] [Thread-54840] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:10:11.711 [DEBUG] [Thread-54840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:10:11.712 [DEBUG] [Thread-54840] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:10:11.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:10:11.713 [DEBUG] [Thread-54840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:10:11.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:10:11.715 [DEBUG] [Thread-54840] [transport.py] [_log()] userauth is OK
2025-11-17T13:10:11.715 [DEBUG] [Thread-54840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:10:11.715 [DEBUG] [Thread-54840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:10:11.715 [DEBUG] [Thread-54840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:10:11.715 [DEBUG] [Thread-54840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:10:11.738 [INFO] [Thread-54840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:10:11.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:10:12.046 [DEBUG] [Thread-54842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:10:12.703 [DEBUG] [Thread-54840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:10:12.703 [DEBUG] [Thread-54840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:10:12.703 [DEBUG] [Thread-54840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:10:12.744 [DEBUG] [Thread-54840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:10:12.745 [DEBUG] [Thread-54840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:10:12.748 [DEBUG] [Thread-54840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:10:12.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:10:12.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:10:12.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:10:12.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:10:12.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:10:12.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:10:12.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:10:12.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:10:12.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:10:12.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.464978 -999.00  +22.90  24.99     21   -0.40 1 2 1 1 1   888    0 23.65 48.55 ----- 25.0 25.0 309.6 34.7 29.0 -23.4 28.1 -21.6 28.0 -21.2 28.9 -23.1
2025-11-17T13:10:12.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:10:12.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:10:12.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.464978
2025-11-17T13:10:12.772 [DEBUG] [Thread-54840] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:10:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:10:12.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:10:12.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:10:12.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:10:12.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:10:12.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:09:37', tmtdew=27.68, humidity=15.38, cloud=0.0, wind=21.9, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:09:34.099', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:10:12.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:10:12.873 [DEBUG] [Thread-54844] [transport.py] [_log()] starting thread (client mode): 0xd07868c0
2025-11-17T13:10:12.873 [DEBUG] [Thread-54844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:10:12.891 [DEBUG] [Thread-54844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:10:12.891 [INFO] [Thread-54844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:10:12.898 [DEBUG] [Thread-54844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:10:12.899 [DEBUG] [Thread-54844] [transport.py] [_log()] client lang: <none>
2025-11-17T13:10:12.900 [DEBUG] [Thread-54844] [transport.py] [_log()] server lang: <none>
2025-11-17T13:10:12.900 [DEBUG] [Thread-54844] [transport.py] [_log()] kex follows: False
2025-11-17T13:10:12.900 [DEBUG] [Thread-54844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:10:12.900 [DEBUG] [Thread-54844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:10:12.900 [DEBUG] [Thread-54844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:10:12.900 [DEBUG] [Thread-54844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:10:12.900 [DEBUG] [Thread-54844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:10:12.900 [DEBUG] [Thread-54844] [transport.py] [_log()] Compression: none
2025-11-17T13:10:12.901 [DEBUG] [Thread-54844] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:10:12.957 [DEBUG] [Thread-54844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:10:12.958 [DEBUG] [Thread-54844] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:10:12.958 [DEBUG] [Thread-54844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:10:12.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:10:12.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:10:13.012 [DEBUG] [Thread-54844] [transport.py] [_log()] userauth is OK
2025-11-17T13:10:13.012 [DEBUG] [Thread-54844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:10:13.012 [DEBUG] [Thread-54844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:10:13.012 [DEBUG] [Thread-54844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:10:13.013 [DEBUG] [Thread-54844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:10:13.032 [INFO] [Thread-54844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:10:13.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:10:13.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:10:13.895 [DEBUG] [Thread-54844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:10:13.895 [DEBUG] [Thread-54844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:10:13.942 [DEBUG] [Thread-54844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:10:13.943 [DEBUG] [Thread-54844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:10:13.952 [DEBUG] [Thread-54844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:10:13.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:10:13.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:10:13.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:10:13.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:10:13.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:10:13.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:10:13.989 [DEBUG] [Thread-54844] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:10:15.201 [DEBUG] [Thread-54846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:10:30.242 [DEBUG] [Thread-54847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:10:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:10:44.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:10:44.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:10:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 10, 41), 27.3, 15.76, 0.0, 22.02, 23.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:10:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:10:41
2025-11-17T13:10:44.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:10:44.940 [DEBUG] [Thread-54848] [transport.py] [_log()] starting thread (client mode): 0xd3134c70
2025-11-17T13:10:44.940 [DEBUG] [Thread-54848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:10:44.959 [DEBUG] [Thread-54848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:10:44.960 [INFO] [Thread-54848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:10:44.961 [DEBUG] [Thread-54848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:10:44.961 [DEBUG] [Thread-54848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:10:44.961 [DEBUG] [Thread-54848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:10:44.961 [DEBUG] [Thread-54848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:10:44.961 [DEBUG] [Thread-54848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:10:44.961 [DEBUG] [Thread-54848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] client lang: <none>
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] server lang: <none>
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] kex follows: False
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] Compression: none
2025-11-17T13:10:44.962 [DEBUG] [Thread-54848] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:10:44.970 [DEBUG] [Thread-54848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:10:44.970 [DEBUG] [Thread-54848] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:10:44.971 [DEBUG] [Thread-54848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:10:44.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:10:44.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:10:44.973 [DEBUG] [Thread-54848] [transport.py] [_log()] userauth is OK
2025-11-17T13:10:44.973 [DEBUG] [Thread-54848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:10:44.973 [DEBUG] [Thread-54848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:10:44.973 [DEBUG] [Thread-54848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:10:44.973 [DEBUG] [Thread-54848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:10:44.987 [INFO] [Thread-54848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:10:44.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:10:45.271 [DEBUG] [Thread-54850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:10:45.639 [DEBUG] [Thread-54848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:10:45.639 [DEBUG] [Thread-54848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:10:45.640 [DEBUG] [Thread-54848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:10:45.680 [DEBUG] [Thread-54848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:10:45.680 [DEBUG] [Thread-54848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:10:45.683 [DEBUG] [Thread-54848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:10:45.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:10:45.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:10:45.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:10:45.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:10:45.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:10:45.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:10:45.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:10:45.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:10:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:10:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.465325 -999.00  +22.60  35.64     21   -0.20 1 1 2 1 1   888    0 23.00 45.43 ----- 35.6 35.6 294.8 36.3 28.8 -22.9 28.1 -23.6 27.8 -24.1 28.8 -21.7
2025-11-17T13:10:45.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:10:45.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:10:45.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.465325
2025-11-17T13:10:45.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:10:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:10:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:10:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:10:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:10:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:10:41', tmtdew=27.3, humidity=15.76, cloud=0.0, wind=22.02, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:10:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:10:45.707 [DEBUG] [Thread-54848] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:10:45.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:10:45.804 [DEBUG] [Thread-54852] [transport.py] [_log()] starting thread (client mode): 0xd0785150
2025-11-17T13:10:45.804 [DEBUG] [Thread-54852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:10:45.819 [DEBUG] [Thread-54852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:10:45.819 [INFO] [Thread-54852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:10:45.826 [DEBUG] [Thread-54852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:10:45.826 [DEBUG] [Thread-54852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] client lang: <none>
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] server lang: <none>
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] kex follows: False
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] Compression: none
2025-11-17T13:10:45.827 [DEBUG] [Thread-54852] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:10:45.883 [DEBUG] [Thread-54852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:10:45.884 [DEBUG] [Thread-54852] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:10:45.884 [DEBUG] [Thread-54852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:10:45.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:10:45.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:10:45.944 [DEBUG] [Thread-54852] [transport.py] [_log()] userauth is OK
2025-11-17T13:10:45.944 [DEBUG] [Thread-54852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:10:45.944 [DEBUG] [Thread-54852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:10:45.944 [DEBUG] [Thread-54852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:10:45.944 [DEBUG] [Thread-54852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:10:45.962 [INFO] [Thread-54852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:10:45.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:10:45.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:10:46.912 [DEBUG] [Thread-54852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:10:46.913 [DEBUG] [Thread-54852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:10:46.960 [DEBUG] [Thread-54852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:10:46.960 [DEBUG] [Thread-54852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:10:46.969 [DEBUG] [Thread-54852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:10:46.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:10:46.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:10:46.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:10:46.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:10:46.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:10:46.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:10:47.002 [DEBUG] [Thread-54852] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:10:49.050 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:10:49.051 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:11:00.302 [DEBUG] [Thread-54854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:11:12.085 [DEBUG] [Thread-54855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:11:15.346 [DEBUG] [Thread-54856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:11:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:11:17.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:11:17.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:11:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 11, 13), 27.26, 15.8, 0.0, 22.89, 22.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:11:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:11:13
2025-11-17T13:11:17.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:11:17.979 [DEBUG] [Thread-54857] [transport.py] [_log()] starting thread (client mode): 0xd078d450
2025-11-17T13:11:17.979 [DEBUG] [Thread-54857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:11:18.003 [DEBUG] [Thread-54857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:11:18.003 [INFO] [Thread-54857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] client lang: <none>
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] server lang: <none>
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] kex follows: False
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:11:18.007 [DEBUG] [Thread-54857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:11:18.008 [DEBUG] [Thread-54857] [transport.py] [_log()] Compression: none
2025-11-17T13:11:18.008 [DEBUG] [Thread-54857] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:11:18.025 [DEBUG] [Thread-54857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:11:18.025 [DEBUG] [Thread-54857] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:11:18.025 [DEBUG] [Thread-54857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:11:18.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:11:18.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:11:18.026 [DEBUG] [Thread-54857] [transport.py] [_log()] userauth is OK
2025-11-17T13:11:18.026 [DEBUG] [Thread-54857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:11:18.026 [DEBUG] [Thread-54857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:11:18.026 [DEBUG] [Thread-54857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:11:18.026 [DEBUG] [Thread-54857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:11:18.057 [INFO] [Thread-54857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:11:18.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:11:18.705 [DEBUG] [Thread-54857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:11:18.706 [DEBUG] [Thread-54857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:11:18.706 [DEBUG] [Thread-54857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:11:18.746 [DEBUG] [Thread-54857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:11:18.746 [DEBUG] [Thread-54857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:11:18.748 [DEBUG] [Thread-54857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:11:18.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:11:18.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:11:18.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:11:18.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:11:18.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:11:18.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:11:18.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:11:18.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:11:18.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:11:18.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.465673 -999.00  +22.20  29.10     22   -0.50 1 2 1 1 1   888    0 23.27 44.47 ----- 29.1 29.1 302.4 35.4 28.7 -24.2 28.0 -22.9 27.8 -22.0 28.7 -22.4
2025-11-17T13:11:18.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:11:18.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:11:18.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.465673
2025-11-17T13:11:18.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:11:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:11:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:11:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:11:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:11:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:11:13', tmtdew=27.26, humidity=15.8, cloud=0.0, wind=22.89, temperature=22.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:10:34.147', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:11:18.767 [DEBUG] [Thread-54857] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:11:18.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:11:18.852 [DEBUG] [Thread-54860] [transport.py] [_log()] starting thread (client mode): 0xd31cd8d0
2025-11-17T13:11:18.853 [DEBUG] [Thread-54860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:11:18.867 [DEBUG] [Thread-54860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:11:18.868 [INFO] [Thread-54860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] client lang: <none>
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] server lang: <none>
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] kex follows: False
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:11:18.875 [DEBUG] [Thread-54860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:11:18.876 [DEBUG] [Thread-54860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:11:18.876 [DEBUG] [Thread-54860] [transport.py] [_log()] Compression: none
2025-11-17T13:11:18.876 [DEBUG] [Thread-54860] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:11:18.932 [DEBUG] [Thread-54860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:11:18.932 [DEBUG] [Thread-54860] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:11:18.932 [DEBUG] [Thread-54860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:11:18.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:11:18.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:11:18.988 [DEBUG] [Thread-54860] [transport.py] [_log()] userauth is OK
2025-11-17T13:11:18.988 [DEBUG] [Thread-54860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:11:18.988 [DEBUG] [Thread-54860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:11:18.988 [DEBUG] [Thread-54860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:11:18.988 [DEBUG] [Thread-54860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:11:19.006 [INFO] [Thread-54860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:11:19.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:11:19.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:11:19.862 [DEBUG] [Thread-54860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:11:19.862 [DEBUG] [Thread-54860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:11:19.910 [DEBUG] [Thread-54860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:11:19.910 [DEBUG] [Thread-54860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:11:19.919 [DEBUG] [Thread-54860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:11:19.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:11:19.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:11:19.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:11:19.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:11:19.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:11:19.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:11:19.950 [DEBUG] [Thread-54860] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:11:30.373 [DEBUG] [Thread-54862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:11:45.420 [DEBUG] [Thread-54863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:11:49.192 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:11:49.193 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:11:49.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:11:49.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:11:49.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:11:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 11, 45), 27.2, 15.66, 0.0, 22.09, 22.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:11:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:11:45
2025-11-17T13:11:50.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:11:50.875 [DEBUG] [Thread-54864] [transport.py] [_log()] starting thread (client mode): 0xd3160580
2025-11-17T13:11:50.875 [DEBUG] [Thread-54864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:11:50.896 [DEBUG] [Thread-54864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:11:50.896 [INFO] [Thread-54864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:11:50.898 [DEBUG] [Thread-54864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:11:50.898 [DEBUG] [Thread-54864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:11:50.898 [DEBUG] [Thread-54864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:11:50.898 [DEBUG] [Thread-54864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:11:50.898 [DEBUG] [Thread-54864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:11:50.898 [DEBUG] [Thread-54864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:11:50.898 [DEBUG] [Thread-54864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:11:50.898 [DEBUG] [Thread-54864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] client lang: <none>
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] server lang: <none>
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] kex follows: False
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] Compression: none
2025-11-17T13:11:50.899 [DEBUG] [Thread-54864] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:11:50.915 [DEBUG] [Thread-54864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:11:50.916 [DEBUG] [Thread-54864] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:11:50.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:11:50.917 [DEBUG] [Thread-54864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:11:50.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:11:50.919 [DEBUG] [Thread-54864] [transport.py] [_log()] userauth is OK
2025-11-17T13:11:50.919 [DEBUG] [Thread-54864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:11:50.919 [DEBUG] [Thread-54864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:11:50.920 [DEBUG] [Thread-54864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:11:50.920 [DEBUG] [Thread-54864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:11:50.937 [INFO] [Thread-54864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:11:50.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:11:51.535 [DEBUG] [Thread-54864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:11:51.535 [DEBUG] [Thread-54864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:11:51.535 [DEBUG] [Thread-54864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:11:51.575 [DEBUG] [Thread-54864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:11:51.576 [DEBUG] [Thread-54864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:11:51.578 [DEBUG] [Thread-54864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:11:51.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:11:51.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:11:51.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:11:51.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:11:51.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:11:51.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:11:51.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:11:51.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:11:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:11:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.466020 -999.00  +22.00  30.26     22   -0.30 1 1 2 1 1   888    0 23.01 37.09 ----- 30.3 30.3 296.4 38.1 28.5 -23.6 27.9 -22.9 27.6 -28.1 28.6 -21.8
2025-11-17T13:11:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:11:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:11:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.466020
2025-11-17T13:11:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:11:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:11:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:11:51.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:11:51.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:11:51.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:11:45', tmtdew=27.2, humidity=15.66, cloud=0.0, wind=22.09, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:11:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:11:51.604 [DEBUG] [Thread-54864] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:11:51.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:11:51.698 [DEBUG] [Thread-54867] [transport.py] [_log()] starting thread (client mode): 0xd31608b0
2025-11-17T13:11:51.698 [DEBUG] [Thread-54867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:11:51.714 [DEBUG] [Thread-54867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:11:51.714 [INFO] [Thread-54867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:11:51.721 [DEBUG] [Thread-54867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:11:51.721 [DEBUG] [Thread-54867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:11:51.721 [DEBUG] [Thread-54867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] client lang: <none>
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] server lang: <none>
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] kex follows: False
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] Compression: none
2025-11-17T13:11:51.722 [DEBUG] [Thread-54867] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:11:51.784 [DEBUG] [Thread-54867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:11:51.784 [DEBUG] [Thread-54867] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:11:51.785 [DEBUG] [Thread-54867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:11:51.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:11:51.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:11:51.840 [DEBUG] [Thread-54867] [transport.py] [_log()] userauth is OK
2025-11-17T13:11:51.840 [DEBUG] [Thread-54867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:11:51.840 [DEBUG] [Thread-54867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:11:51.841 [DEBUG] [Thread-54867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:11:51.841 [DEBUG] [Thread-54867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:11:51.860 [INFO] [Thread-54867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:11:51.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:11:51.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:11:52.747 [DEBUG] [Thread-54867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:11:52.748 [DEBUG] [Thread-54867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:11:52.795 [DEBUG] [Thread-54867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:11:52.795 [DEBUG] [Thread-54867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:11:52.804 [DEBUG] [Thread-54867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:11:52.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:11:52.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:11:52.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:11:52.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:11:52.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:11:52.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:11:52.839 [DEBUG] [Thread-54867] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:12:00.444 [DEBUG] [Thread-54869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:12:12.137 [DEBUG] [Thread-54870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:12:15.474 [DEBUG] [Thread-54871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:12:22.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:12:22.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:12:22.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:12:23.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 12, 17), 27.35, 15.53, 0.0, 23.96, 23.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:12:23.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:12:17
2025-11-17T13:12:23.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:12:23.785 [DEBUG] [Thread-54872] [transport.py] [_log()] starting thread (client mode): 0xd078edd0
2025-11-17T13:12:23.785 [DEBUG] [Thread-54872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:12:23.804 [DEBUG] [Thread-54872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:12:23.804 [INFO] [Thread-54872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:12:23.805 [DEBUG] [Thread-54872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:12:23.805 [DEBUG] [Thread-54872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:12:23.805 [DEBUG] [Thread-54872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:12:23.805 [DEBUG] [Thread-54872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:12:23.805 [DEBUG] [Thread-54872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:12:23.805 [DEBUG] [Thread-54872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] client lang: <none>
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] server lang: <none>
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] kex follows: False
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] Compression: none
2025-11-17T13:12:23.806 [DEBUG] [Thread-54872] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:12:23.824 [DEBUG] [Thread-54872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:12:23.825 [DEBUG] [Thread-54872] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:12:23.825 [DEBUG] [Thread-54872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:12:23.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:12:23.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:12:23.827 [DEBUG] [Thread-54872] [transport.py] [_log()] userauth is OK
2025-11-17T13:12:23.827 [DEBUG] [Thread-54872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:12:23.827 [DEBUG] [Thread-54872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:12:23.828 [DEBUG] [Thread-54872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:12:23.828 [DEBUG] [Thread-54872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:12:23.863 [INFO] [Thread-54872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:12:23.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:12:24.526 [DEBUG] [Thread-54872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:12:24.526 [DEBUG] [Thread-54872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:12:24.527 [DEBUG] [Thread-54872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:12:24.567 [DEBUG] [Thread-54872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:12:24.568 [DEBUG] [Thread-54872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:12:24.570 [DEBUG] [Thread-54872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:12:24.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:12:24.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:12:24.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:12:24.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:12:24.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:12:24.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:12:24.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:12:24.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:12:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:12:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.466714 -999.00  +22.00  19.70     22   -0.40 1 1 1 1 1   888    0 23.62 30.18 ----- 19.7 19.7 299.2 33.7 28.6 -23.3 27.9 -23.4 27.5 -23.9 28.6 -22.8
2025-11-17T13:12:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:12:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:12:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.466714
2025-11-17T13:12:24.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:12:24.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:12:24.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:12:24.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:12:24.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:12:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:12:17', tmtdew=27.35, humidity=15.53, cloud=0.0, wind=23.96, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:12:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:12:24.597 [DEBUG] [Thread-54872] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:12:24.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:12:24.691 [DEBUG] [Thread-54875] [transport.py] [_log()] starting thread (client mode): 0xd31620b0
2025-11-17T13:12:24.691 [DEBUG] [Thread-54875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:12:24.707 [DEBUG] [Thread-54875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:12:24.707 [INFO] [Thread-54875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:12:24.715 [DEBUG] [Thread-54875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:12:24.715 [DEBUG] [Thread-54875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:12:24.715 [DEBUG] [Thread-54875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:12:24.715 [DEBUG] [Thread-54875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:12:24.715 [DEBUG] [Thread-54875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:12:24.715 [DEBUG] [Thread-54875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:12:24.715 [DEBUG] [Thread-54875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] client lang: <none>
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] server lang: <none>
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] kex follows: False
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:12:24.716 [DEBUG] [Thread-54875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:12:24.717 [DEBUG] [Thread-54875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:12:24.717 [DEBUG] [Thread-54875] [transport.py] [_log()] Compression: none
2025-11-17T13:12:24.717 [DEBUG] [Thread-54875] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:12:24.773 [DEBUG] [Thread-54875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:12:24.773 [DEBUG] [Thread-54875] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:12:24.774 [DEBUG] [Thread-54875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:12:24.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:12:24.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:12:24.829 [DEBUG] [Thread-54875] [transport.py] [_log()] userauth is OK
2025-11-17T13:12:24.829 [DEBUG] [Thread-54875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:12:24.829 [DEBUG] [Thread-54875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:12:24.829 [DEBUG] [Thread-54875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:12:24.829 [DEBUG] [Thread-54875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:12:24.849 [INFO] [Thread-54875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:12:24.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:12:24.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:12:25.758 [DEBUG] [Thread-54875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:12:25.758 [DEBUG] [Thread-54875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:12:25.806 [DEBUG] [Thread-54875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:12:25.806 [DEBUG] [Thread-54875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:12:25.815 [DEBUG] [Thread-54875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:12:25.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:12:25.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:12:25.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
2025-11-17T13:12:25.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:12:25.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:12:25.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:12:25.849 [DEBUG] [Thread-54875] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:12:30.502 [DEBUG] [Thread-54877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:12:45.543 [DEBUG] [Thread-54878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:12:49.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:12:49.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:12:55.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:12:55.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:12:55.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:12:56.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 12, 49), 27.88, 15.09, 0.0, 26.13, 23.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:12:56.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:12:49
2025-11-17T13:12:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:12:56.809 [DEBUG] [Thread-54879] [transport.py] [_log()] starting thread (client mode): 0xd078c2b0
2025-11-17T13:12:56.810 [DEBUG] [Thread-54879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:12:56.832 [DEBUG] [Thread-54879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:12:56.832 [INFO] [Thread-54879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] client lang: <none>
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] server lang: <none>
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] kex follows: False
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:12:56.833 [DEBUG] [Thread-54879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:12:56.834 [DEBUG] [Thread-54879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:12:56.834 [DEBUG] [Thread-54879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:12:56.834 [DEBUG] [Thread-54879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:12:56.834 [DEBUG] [Thread-54879] [transport.py] [_log()] Compression: none
2025-11-17T13:12:56.834 [DEBUG] [Thread-54879] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:12:56.848 [DEBUG] [Thread-54879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:12:56.849 [DEBUG] [Thread-54879] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:12:56.849 [DEBUG] [Thread-54879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:12:56.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:12:56.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:12:56.851 [DEBUG] [Thread-54879] [transport.py] [_log()] userauth is OK
2025-11-17T13:12:56.851 [DEBUG] [Thread-54879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:12:56.851 [DEBUG] [Thread-54879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:12:56.851 [DEBUG] [Thread-54879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:12:56.851 [DEBUG] [Thread-54879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:12:56.873 [INFO] [Thread-54879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:12:56.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:12:57.492 [DEBUG] [Thread-54879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:12:57.492 [DEBUG] [Thread-54879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:12:57.493 [DEBUG] [Thread-54879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:12:57.533 [DEBUG] [Thread-54879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:12:57.533 [DEBUG] [Thread-54879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:12:57.536 [DEBUG] [Thread-54879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:12:57.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:12:57.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:12:57.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:12:57.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:12:57.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:12:57.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:12:57.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:12:57.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:12:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:12:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.467061 -999.00  +22.10  26.18     22   -0.20 1 2 1 1 1   888    0 23.26 28.84 ----- 26.2 26.2 289.0 30.6 28.8 -23.9 28.0 -21.9 27.8 -22.0 28.7 -22.0
2025-11-17T13:12:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:12:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:12:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.467061
2025-11-17T13:12:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:12:57.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:12:57.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:12:57.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:12:57.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:12:57.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:12:49', tmtdew=27.88, humidity=15.09, cloud=0.0, wind=26.13, temperature=23.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:12:34.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:12:57.559 [DEBUG] [Thread-54879] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:12:57.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:12:57.656 [DEBUG] [Thread-54882] [transport.py] [_log()] starting thread (client mode): 0xd31cdd50
2025-11-17T13:12:57.657 [DEBUG] [Thread-54882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:12:57.672 [DEBUG] [Thread-54882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:12:57.672 [INFO] [Thread-54882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:12:57.679 [DEBUG] [Thread-54882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:12:57.679 [DEBUG] [Thread-54882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:12:57.679 [DEBUG] [Thread-54882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] client lang: <none>
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] server lang: <none>
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] kex follows: False
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] Compression: none
2025-11-17T13:12:57.680 [DEBUG] [Thread-54882] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:12:57.739 [DEBUG] [Thread-54882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:12:57.739 [DEBUG] [Thread-54882] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:12:57.740 [DEBUG] [Thread-54882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:12:57.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:12:57.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:12:57.800 [DEBUG] [Thread-54882] [transport.py] [_log()] userauth is OK
2025-11-17T13:12:57.800 [DEBUG] [Thread-54882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:12:57.800 [DEBUG] [Thread-54882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:12:57.801 [DEBUG] [Thread-54882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:12:57.801 [DEBUG] [Thread-54882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:12:57.823 [INFO] [Thread-54882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:12:57.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:12:57.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:12:58.700 [DEBUG] [Thread-54882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:12:58.700 [DEBUG] [Thread-54882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:12:58.748 [DEBUG] [Thread-54882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:12:58.748 [DEBUG] [Thread-54882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:12:58.757 [DEBUG] [Thread-54882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:12:58.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:12:58.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:12:58.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:12:58.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:12:58.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:12:58.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:12:58.790 [DEBUG] [Thread-54882] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:13:00.572 [DEBUG] [Thread-54884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:13:12.196 [DEBUG] [Thread-54885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:13:15.616 [DEBUG] [Thread-54886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:13:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:13:28.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:13:28.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:13:29.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 13, 21), 27.62, 15.28, 0.0, 24.61, 22.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:13:29.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:13:21
2025-11-17T13:13:29.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:13:29.716 [DEBUG] [Thread-54887] [transport.py] [_log()] starting thread (client mode): 0xd31cd540
2025-11-17T13:13:29.717 [DEBUG] [Thread-54887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:13:29.738 [DEBUG] [Thread-54887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:13:29.739 [INFO] [Thread-54887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:13:29.742 [DEBUG] [Thread-54887] [transport.py] [_log()] client lang: <none>
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] server lang: <none>
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] kex follows: False
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] Compression: none
2025-11-17T13:13:29.743 [DEBUG] [Thread-54887] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:13:29.761 [DEBUG] [Thread-54887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:13:29.762 [DEBUG] [Thread-54887] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:13:29.762 [DEBUG] [Thread-54887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:13:29.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:13:29.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:13:29.764 [DEBUG] [Thread-54887] [transport.py] [_log()] userauth is OK
2025-11-17T13:13:29.765 [DEBUG] [Thread-54887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:13:29.765 [DEBUG] [Thread-54887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:13:29.765 [DEBUG] [Thread-54887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:13:29.765 [DEBUG] [Thread-54887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:13:29.789 [INFO] [Thread-54887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:13:29.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:13:30.416 [DEBUG] [Thread-54887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:13:30.416 [DEBUG] [Thread-54887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:13:30.417 [DEBUG] [Thread-54887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:13:30.458 [DEBUG] [Thread-54887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:13:30.458 [DEBUG] [Thread-54887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:13:30.461 [DEBUG] [Thread-54887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:13:30.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:13:30.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:13:30.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:13:30.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:13:30.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:13:30.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:13:30.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:13:30.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:13:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:13:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.467409 -999.00  +22.40  21.78     21   -0.30 1 2 1 1 1   888    0 22.99 29.43 ----- 21.8 21.8 294.1 27.2 28.8 -23.5 28.1 -22.7 27.8 -21.6 28.8 -23.0
2025-11-17T13:13:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:13:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:13:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.467409
2025-11-17T13:13:30.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:13:30.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:13:30.485 [DEBUG] [Thread-54887] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:13:30.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:13:30.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:13:30.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:13:30.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:13:21', tmtdew=27.62, humidity=15.28, cloud=0.0, wind=24.61, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:13:04.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:13:30.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:13:30.583 [DEBUG] [Thread-54890] [transport.py] [_log()] starting thread (client mode): 0xd31cf3a0
2025-11-17T13:13:30.583 [DEBUG] [Thread-54890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:13:30.600 [DEBUG] [Thread-54890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:13:30.601 [INFO] [Thread-54890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:13:30.608 [DEBUG] [Thread-54890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:13:30.608 [DEBUG] [Thread-54890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:13:30.608 [DEBUG] [Thread-54890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:13:30.608 [DEBUG] [Thread-54890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] client lang: <none>
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] server lang: <none>
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] kex follows: False
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:13:30.609 [DEBUG] [Thread-54890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:13:30.610 [DEBUG] [Thread-54890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:13:30.610 [DEBUG] [Thread-54890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:13:30.610 [DEBUG] [Thread-54890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:13:30.610 [DEBUG] [Thread-54890] [transport.py] [_log()] Compression: none
2025-11-17T13:13:30.610 [DEBUG] [Thread-54890] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:13:30.644 [DEBUG] [Thread-54892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:13:30.673 [DEBUG] [Thread-54890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:13:30.673 [DEBUG] [Thread-54890] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:13:30.673 [DEBUG] [Thread-54890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:13:30.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:13:30.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:13:30.732 [DEBUG] [Thread-54890] [transport.py] [_log()] userauth is OK
2025-11-17T13:13:30.732 [DEBUG] [Thread-54890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:13:30.733 [DEBUG] [Thread-54890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:13:30.733 [DEBUG] [Thread-54890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:13:30.733 [DEBUG] [Thread-54890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:13:30.753 [INFO] [Thread-54890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:13:30.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:13:30.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:13:31.671 [DEBUG] [Thread-54890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:13:31.671 [DEBUG] [Thread-54890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:13:31.720 [DEBUG] [Thread-54890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:13:31.720 [DEBUG] [Thread-54890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:13:31.731 [DEBUG] [Thread-54890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:13:31.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:13:31.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:13:31.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:13:31.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:13:31.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:13:31.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:13:31.766 [DEBUG] [Thread-54890] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:13:45.696 [DEBUG] [Thread-54893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:13:49.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:13:49.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:14:00.724 [DEBUG] [Thread-54894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:14:01.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:14:01.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:14:01.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:14:02.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 13, 53), 27.22, 15.92, 0.0, 22.94, 22.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:14:02.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:13:53
2025-11-17T13:14:02.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:14:02.730 [DEBUG] [Thread-54895] [transport.py] [_log()] starting thread (client mode): 0xd3163d90
2025-11-17T13:14:02.730 [DEBUG] [Thread-54895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:14:02.750 [DEBUG] [Thread-54895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:14:02.750 [INFO] [Thread-54895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:14:02.754 [DEBUG] [Thread-54895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:14:02.754 [DEBUG] [Thread-54895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:14:02.754 [DEBUG] [Thread-54895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] client lang: <none>
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] server lang: <none>
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] kex follows: False
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] Compression: none
2025-11-17T13:14:02.755 [DEBUG] [Thread-54895] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:14:02.764 [DEBUG] [Thread-54895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:14:02.764 [DEBUG] [Thread-54895] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:14:02.765 [DEBUG] [Thread-54895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:14:02.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:14:02.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:14:02.767 [DEBUG] [Thread-54895] [transport.py] [_log()] userauth is OK
2025-11-17T13:14:02.767 [DEBUG] [Thread-54895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:14:02.767 [DEBUG] [Thread-54895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:14:02.767 [DEBUG] [Thread-54895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:14:02.767 [DEBUG] [Thread-54895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:14:02.785 [INFO] [Thread-54895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:14:02.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:14:03.416 [DEBUG] [Thread-54895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:14:03.416 [DEBUG] [Thread-54895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:14:03.416 [DEBUG] [Thread-54895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:14:03.457 [DEBUG] [Thread-54895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:14:03.458 [DEBUG] [Thread-54895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:14:03.461 [DEBUG] [Thread-54895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:14:03.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:14:03.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:14:03.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:14:03.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:14:03.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:14:03.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:14:03.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:14:03.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:14:03.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:14:03.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.467756 -999.00  +22.20  19.96     21   -0.60 1 1 1 1 1   888    0 23.01 32.63 ----- 20.0 20.0 282.5 28.9 28.7 -24.9 28.1 -23.8 27.8 -23.0 28.8 -23.9
2025-11-17T13:14:03.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:14:03.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:14:03.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.467756
2025-11-17T13:14:03.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:14:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:14:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:14:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:14:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:14:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:13:53', tmtdew=27.22, humidity=15.92, cloud=0.0, wind=22.94, temperature=22.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:13:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:14:03.485 [DEBUG] [Thread-54895] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:14:03.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:14:03.577 [DEBUG] [Thread-54898] [transport.py] [_log()] starting thread (client mode): 0xd0758e20
2025-11-17T13:14:03.577 [DEBUG] [Thread-54898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:14:03.592 [DEBUG] [Thread-54898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:14:03.592 [INFO] [Thread-54898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] client lang: <none>
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] server lang: <none>
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] kex follows: False
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:14:03.600 [DEBUG] [Thread-54898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:14:03.601 [DEBUG] [Thread-54898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:14:03.601 [DEBUG] [Thread-54898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:14:03.601 [DEBUG] [Thread-54898] [transport.py] [_log()] Compression: none
2025-11-17T13:14:03.601 [DEBUG] [Thread-54898] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:14:03.657 [DEBUG] [Thread-54898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:14:03.658 [DEBUG] [Thread-54898] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:14:03.659 [DEBUG] [Thread-54898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:14:03.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:14:03.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:14:03.712 [DEBUG] [Thread-54898] [transport.py] [_log()] userauth is OK
2025-11-17T13:14:03.713 [DEBUG] [Thread-54898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:14:03.713 [DEBUG] [Thread-54898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:14:03.713 [DEBUG] [Thread-54898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:14:03.713 [DEBUG] [Thread-54898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:14:03.733 [INFO] [Thread-54898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:14:03.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:14:03.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:14:04.627 [DEBUG] [Thread-54898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:14:04.627 [DEBUG] [Thread-54898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:14:04.676 [DEBUG] [Thread-54898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:14:04.676 [DEBUG] [Thread-54898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:14:04.685 [DEBUG] [Thread-54898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:14:04.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:14:04.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:14:04.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:14:04.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:14:04.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:14:04.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:14:04.719 [DEBUG] [Thread-54898] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:14:12.255 [DEBUG] [Thread-54900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:14:15.753 [DEBUG] [Thread-54901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:14:30.804 [DEBUG] [Thread-54902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:14:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:14:34.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:14:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:14:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 14, 25), 27.21, 15.92, 0.0, 22.13, 22.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:14:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:14:25
2025-11-17T13:14:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:14:35.704 [DEBUG] [Thread-54903] [transport.py] [_log()] starting thread (client mode): 0xd071ad40
2025-11-17T13:14:35.704 [DEBUG] [Thread-54903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:14:35.725 [DEBUG] [Thread-54903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:14:35.725 [INFO] [Thread-54903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:14:35.728 [DEBUG] [Thread-54903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:14:35.728 [DEBUG] [Thread-54903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:14:35.728 [DEBUG] [Thread-54903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] client lang: <none>
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] server lang: <none>
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] kex follows: False
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] Compression: none
2025-11-17T13:14:35.729 [DEBUG] [Thread-54903] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:14:35.744 [DEBUG] [Thread-54903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:14:35.744 [DEBUG] [Thread-54903] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:14:35.744 [DEBUG] [Thread-54903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:14:35.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:14:35.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:14:35.745 [DEBUG] [Thread-54903] [transport.py] [_log()] userauth is OK
2025-11-17T13:14:35.745 [DEBUG] [Thread-54903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:14:35.745 [DEBUG] [Thread-54903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:14:35.745 [DEBUG] [Thread-54903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:14:35.745 [DEBUG] [Thread-54903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:14:35.755 [INFO] [Thread-54903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:14:35.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:14:36.406 [DEBUG] [Thread-54903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:14:36.406 [DEBUG] [Thread-54903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:14:36.406 [DEBUG] [Thread-54903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:14:36.447 [DEBUG] [Thread-54903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:14:36.447 [DEBUG] [Thread-54903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:14:36.449 [DEBUG] [Thread-54903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:14:36.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:14:36.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:14:36.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:14:36.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:14:36.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:14:36.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:14:36.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:14:36.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:14:36.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:14:36.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.468103 -999.00  +22.20   9.96     22   -0.30 1 1 1 1 1   888    0 23.05 33.94 ----- 10.0 10.0 287.8 24.2 28.8 -23.0 28.0 -23.4 27.7 -24.4 28.8 -22.0
2025-11-17T13:14:36.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:14:36.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:14:36.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.468103
2025-11-17T13:14:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:14:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:14:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:14:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:14:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:14:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:14:25', tmtdew=27.21, humidity=15.92, cloud=0.0, wind=22.13, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:14:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:14:36.471 [DEBUG] [Thread-54903] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:14:36.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:14:36.573 [DEBUG] [Thread-54906] [transport.py] [_log()] starting thread (client mode): 0xd31cda50
2025-11-17T13:14:36.573 [DEBUG] [Thread-54906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:14:36.588 [DEBUG] [Thread-54906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:14:36.588 [INFO] [Thread-54906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] client lang: <none>
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] server lang: <none>
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] kex follows: False
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] Compression: none
2025-11-17T13:14:36.596 [DEBUG] [Thread-54906] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:14:36.651 [DEBUG] [Thread-54906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:14:36.651 [DEBUG] [Thread-54906] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:14:36.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:14:36.652 [DEBUG] [Thread-54906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:14:36.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:14:36.708 [DEBUG] [Thread-54906] [transport.py] [_log()] userauth is OK
2025-11-17T13:14:36.708 [DEBUG] [Thread-54906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:14:36.708 [DEBUG] [Thread-54906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:14:36.709 [DEBUG] [Thread-54906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:14:36.709 [DEBUG] [Thread-54906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:14:36.729 [INFO] [Thread-54906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:14:36.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:14:36.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:14:37.628 [DEBUG] [Thread-54906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:14:37.628 [DEBUG] [Thread-54906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:14:37.675 [DEBUG] [Thread-54906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:14:37.675 [DEBUG] [Thread-54906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:14:37.684 [DEBUG] [Thread-54906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:14:37.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:14:37.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:14:37.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:14:37.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:14:37.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:14:37.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:14:37.719 [DEBUG] [Thread-54906] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:14:45.837 [DEBUG] [Thread-54908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:14:49.620 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:14:49.621 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:15:00.886 [DEBUG] [Thread-54909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:15:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:15:07.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:15:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:15:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 14, 57), 27.02, 15.9, 0.0, 17.59, 22.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:15:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:14:57
2025-11-17T13:15:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:15:08.656 [DEBUG] [Thread-54910] [transport.py] [_log()] starting thread (client mode): 0xd3137250
2025-11-17T13:15:08.656 [DEBUG] [Thread-54910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:15:08.675 [DEBUG] [Thread-54910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:15:08.675 [INFO] [Thread-54910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:15:08.677 [DEBUG] [Thread-54910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] client lang: <none>
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] server lang: <none>
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] kex follows: False
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] Compression: none
2025-11-17T13:15:08.678 [DEBUG] [Thread-54910] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:15:08.686 [DEBUG] [Thread-54910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:15:08.686 [DEBUG] [Thread-54910] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:15:08.687 [DEBUG] [Thread-54910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:15:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:15:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:15:08.688 [DEBUG] [Thread-54910] [transport.py] [_log()] userauth is OK
2025-11-17T13:15:08.688 [DEBUG] [Thread-54910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:15:08.689 [DEBUG] [Thread-54910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:15:08.689 [DEBUG] [Thread-54910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:15:08.689 [DEBUG] [Thread-54910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:15:08.711 [INFO] [Thread-54910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:15:08.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:15:12.302 [DEBUG] [Thread-54912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:15:13.516 [DEBUG] [Thread-54910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:15:13.516 [DEBUG] [Thread-54910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:15:13.516 [DEBUG] [Thread-54910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:15:13.557 [DEBUG] [Thread-54910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:15:13.557 [DEBUG] [Thread-54910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:15:13.559 [DEBUG] [Thread-54910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:15:13.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:15:13.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:15:13.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:15:13.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:15:13.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:15:13.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:15:13.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.468451 -999.00  +23.00  11.96     21   -0.20 1 2 1 1 1   888    0 23.30 38.87 ----- 12.0 12.0 304.4 16.7 29.0 -23.0 28.2 -22.8 28.1 -21.6 29.0 -22.1
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.468451
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:15:13.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:14:57', tmtdew=27.02, humidity=15.9, cloud=0.0, wind=17.59, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:14:34.166', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:15:13.626 [DEBUG] [Thread-54910] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:15:13.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:15:13.713 [DEBUG] [Thread-54914] [transport.py] [_log()] starting thread (client mode): 0xd31ceaa0
2025-11-17T13:15:13.714 [DEBUG] [Thread-54914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:15:13.730 [DEBUG] [Thread-54914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:15:13.730 [INFO] [Thread-54914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:15:13.737 [DEBUG] [Thread-54914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] client lang: <none>
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] server lang: <none>
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] kex follows: False
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] Compression: none
2025-11-17T13:15:13.738 [DEBUG] [Thread-54914] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:15:13.799 [DEBUG] [Thread-54914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:15:13.799 [DEBUG] [Thread-54914] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:15:13.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:15:13.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:15:13.800 [DEBUG] [Thread-54914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:15:13.856 [DEBUG] [Thread-54914] [transport.py] [_log()] userauth is OK
2025-11-17T13:15:13.856 [DEBUG] [Thread-54914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:15:13.856 [DEBUG] [Thread-54914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:15:13.856 [DEBUG] [Thread-54914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:15:13.856 [DEBUG] [Thread-54914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:15:13.871 [INFO] [Thread-54914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:15:13.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:15:13.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:15:14.772 [DEBUG] [Thread-54914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:15:14.772 [DEBUG] [Thread-54914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:15:14.820 [DEBUG] [Thread-54914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:15:14.820 [DEBUG] [Thread-54914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:15:14.828 [DEBUG] [Thread-54914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:15:14.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:15:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:15:14.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:15:14.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:15:14.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:15:14.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:15:14.860 [DEBUG] [Thread-54914] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:15:15.915 [DEBUG] [Thread-54916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:15:30.953 [DEBUG] [Thread-54917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:15:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:15:44.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:15:44.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:15:45.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 15, 29), 26.89, 16.03, 0.0, 21.4, 22.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:15:45.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:15:29
2025-11-17T13:15:45.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:15:45.812 [DEBUG] [Thread-54918] [transport.py] [_log()] starting thread (client mode): 0xd078d930
2025-11-17T13:15:45.813 [DEBUG] [Thread-54918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:15:45.833 [DEBUG] [Thread-54918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:15:45.833 [INFO] [Thread-54918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:15:45.836 [DEBUG] [Thread-54918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] client lang: <none>
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] server lang: <none>
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] kex follows: False
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] Compression: none
2025-11-17T13:15:45.837 [DEBUG] [Thread-54918] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:15:45.856 [DEBUG] [Thread-54918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:15:45.857 [DEBUG] [Thread-54918] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:15:45.857 [DEBUG] [Thread-54918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:15:45.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:15:45.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:15:45.860 [DEBUG] [Thread-54918] [transport.py] [_log()] userauth is OK
2025-11-17T13:15:45.860 [DEBUG] [Thread-54918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:15:45.860 [DEBUG] [Thread-54918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:15:45.860 [DEBUG] [Thread-54918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:15:45.860 [DEBUG] [Thread-54918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:15:45.895 [INFO] [Thread-54918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:15:45.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:15:45.982 [DEBUG] [Thread-54920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:15:46.526 [DEBUG] [Thread-54918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:15:46.527 [DEBUG] [Thread-54918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:15:46.527 [DEBUG] [Thread-54918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:15:46.567 [DEBUG] [Thread-54918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:15:46.568 [DEBUG] [Thread-54918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:15:46.570 [DEBUG] [Thread-54918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:15:46.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:15:46.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:15:46.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:15:46.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:15:46.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:15:46.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:15:46.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:15:46.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:15:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:15:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.468798 -999.00  +23.10  11.72     21   -0.20 1 2 1 1 1   888    0 23.01 41.80 ----- 11.7 11.7 283.8 14.8 29.2 -22.8 28.4 -22.6 28.3 -21.8 29.2 -21.8
2025-11-17T13:15:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:15:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:15:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.468798
2025-11-17T13:15:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:15:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:15:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:15:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:15:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:15:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:15:29', tmtdew=26.89, humidity=16.03, cloud=0.0, wind=21.4, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:15:04.147', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:15:46.595 [DEBUG] [Thread-54918] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:15:46.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:15:46.692 [DEBUG] [Thread-54922] [transport.py] [_log()] starting thread (client mode): 0xd0718a00
2025-11-17T13:15:46.693 [DEBUG] [Thread-54922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:15:46.707 [DEBUG] [Thread-54922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:15:46.707 [INFO] [Thread-54922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:15:46.714 [DEBUG] [Thread-54922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:15:46.714 [DEBUG] [Thread-54922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:15:46.714 [DEBUG] [Thread-54922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] client lang: <none>
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] server lang: <none>
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] kex follows: False
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] Compression: none
2025-11-17T13:15:46.715 [DEBUG] [Thread-54922] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:15:46.775 [DEBUG] [Thread-54922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:15:46.776 [DEBUG] [Thread-54922] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:15:46.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:15:46.777 [DEBUG] [Thread-54922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:15:46.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:15:46.832 [DEBUG] [Thread-54922] [transport.py] [_log()] userauth is OK
2025-11-17T13:15:46.832 [DEBUG] [Thread-54922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:15:46.832 [DEBUG] [Thread-54922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:15:46.832 [DEBUG] [Thread-54922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:15:46.832 [DEBUG] [Thread-54922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:15:46.852 [INFO] [Thread-54922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:15:46.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:15:46.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:15:47.751 [DEBUG] [Thread-54922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:15:47.751 [DEBUG] [Thread-54922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:15:47.800 [DEBUG] [Thread-54922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:15:47.801 [DEBUG] [Thread-54922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:15:47.814 [DEBUG] [Thread-54922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:15:47.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:15:47.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:15:47.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:15:47.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:15:47.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:15:47.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:15:47.848 [DEBUG] [Thread-54922] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:15:49.762 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:15:49.763 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:16:01.012 [DEBUG] [Thread-54924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:16:12.355 [DEBUG] [Thread-54925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:16:16.055 [DEBUG] [Thread-54926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:16:17.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:16:17.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:16:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:16:18.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 16, 1), 27.97, 14.95, 0.0, 25.6, 23.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:16:18.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:16:01
2025-11-17T13:16:18.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:16:18.802 [DEBUG] [Thread-54927] [transport.py] [_log()] starting thread (client mode): 0xd31ed450
2025-11-17T13:16:18.802 [DEBUG] [Thread-54927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:16:18.821 [DEBUG] [Thread-54927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:16:18.822 [INFO] [Thread-54927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:16:18.824 [DEBUG] [Thread-54927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:16:18.824 [DEBUG] [Thread-54927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:16:18.824 [DEBUG] [Thread-54927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:16:18.824 [DEBUG] [Thread-54927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] client lang: <none>
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] server lang: <none>
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] kex follows: False
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] Compression: none
2025-11-17T13:16:18.825 [DEBUG] [Thread-54927] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:16:18.843 [DEBUG] [Thread-54927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:16:18.843 [DEBUG] [Thread-54927] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:16:18.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:16:18.844 [DEBUG] [Thread-54927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:16:18.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:16:18.845 [DEBUG] [Thread-54927] [transport.py] [_log()] userauth is OK
2025-11-17T13:16:18.845 [DEBUG] [Thread-54927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:16:18.846 [DEBUG] [Thread-54927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:16:18.846 [DEBUG] [Thread-54927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:16:18.846 [DEBUG] [Thread-54927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:16:18.869 [INFO] [Thread-54927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:16:18.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:16:19.606 [DEBUG] [Thread-54927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:16:19.607 [DEBUG] [Thread-54927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:16:19.607 [DEBUG] [Thread-54927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:16:19.648 [DEBUG] [Thread-54927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:16:19.648 [DEBUG] [Thread-54927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:16:19.651 [DEBUG] [Thread-54927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:16:19.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:16:19.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:16:19.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:16:19.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:16:19.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:16:19.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:16:19.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:16:19.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:16:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:16:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.469145 -999.00  +23.20  21.61     20   -0.60 1 2 1 1 1   888    0 23.87 46.76 ----- 21.6 21.6 289.6 32.6 29.3 -25.0 28.5 -22.8 28.3 -23.0 29.3 -23.1
2025-11-17T13:16:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:16:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:16:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.469145
2025-11-17T13:16:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:16:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:16:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:16:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:16:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:16:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:16:01', tmtdew=27.97, humidity=14.95, cloud=0.0, wind=25.6, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:15:34.128', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:16:19.677 [DEBUG] [Thread-54927] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:16:19.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:16:19.773 [DEBUG] [Thread-54930] [transport.py] [_log()] starting thread (client mode): 0xd071b4c0
2025-11-17T13:16:19.773 [DEBUG] [Thread-54930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:16:19.788 [DEBUG] [Thread-54930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:16:19.788 [INFO] [Thread-54930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] client lang: <none>
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] server lang: <none>
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] kex follows: False
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:16:19.796 [DEBUG] [Thread-54930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:16:19.797 [DEBUG] [Thread-54930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:16:19.797 [DEBUG] [Thread-54930] [transport.py] [_log()] Compression: none
2025-11-17T13:16:19.797 [DEBUG] [Thread-54930] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:16:19.855 [DEBUG] [Thread-54930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:16:19.856 [DEBUG] [Thread-54930] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:16:19.856 [DEBUG] [Thread-54930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:16:19.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:16:19.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:16:19.916 [DEBUG] [Thread-54930] [transport.py] [_log()] userauth is OK
2025-11-17T13:16:19.917 [DEBUG] [Thread-54930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:16:19.917 [DEBUG] [Thread-54930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:16:19.917 [DEBUG] [Thread-54930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:16:19.917 [DEBUG] [Thread-54930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:16:19.936 [INFO] [Thread-54930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:16:19.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:16:19.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:16:20.832 [DEBUG] [Thread-54930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:16:20.833 [DEBUG] [Thread-54930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:16:20.880 [DEBUG] [Thread-54930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:16:20.880 [DEBUG] [Thread-54930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:16:20.889 [DEBUG] [Thread-54930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:16:20.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:16:20.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:16:20.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:16:20.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:16:20.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:16:20.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:16:20.923 [DEBUG] [Thread-54930] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:16:31.082 [DEBUG] [Thread-54932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:16:46.123 [DEBUG] [Thread-54933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:16:49.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:16:49.903 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:16:50.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:16:50.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:16:50.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:16:51.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 16, 33), 28.1, 14.79, 0.0, 21.7, 22.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:16:51.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:16:33
2025-11-17T13:16:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:16:51.845 [DEBUG] [Thread-54934] [transport.py] [_log()] starting thread (client mode): 0xd071ad70
2025-11-17T13:16:51.845 [DEBUG] [Thread-54934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:16:51.864 [DEBUG] [Thread-54934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:16:51.864 [INFO] [Thread-54934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:16:51.867 [DEBUG] [Thread-54934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:16:51.867 [DEBUG] [Thread-54934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] client lang: <none>
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] server lang: <none>
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] kex follows: False
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] Compression: none
2025-11-17T13:16:51.868 [DEBUG] [Thread-54934] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:16:51.884 [DEBUG] [Thread-54934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:16:51.885 [DEBUG] [Thread-54934] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:16:51.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:16:51.886 [DEBUG] [Thread-54934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:16:51.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:16:51.887 [DEBUG] [Thread-54934] [transport.py] [_log()] userauth is OK
2025-11-17T13:16:51.888 [DEBUG] [Thread-54934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:16:51.888 [DEBUG] [Thread-54934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:16:51.888 [DEBUG] [Thread-54934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:16:51.888 [DEBUG] [Thread-54934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:16:51.911 [INFO] [Thread-54934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:16:51.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:16:52.555 [DEBUG] [Thread-54934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:16:52.556 [DEBUG] [Thread-54934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:16:52.556 [DEBUG] [Thread-54934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:16:52.597 [DEBUG] [Thread-54934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:16:52.597 [DEBUG] [Thread-54934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:16:52.600 [DEBUG] [Thread-54934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:16:52.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:16:52.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:16:52.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:16:52.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:16:52.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:16:52.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:16:52.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:16:52.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:16:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:16:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.469492 -999.00  +22.50  24.00     20   -0.90 1 1 1 1 1   888    0 23.66 55.88 ----- 24.0 24.0 278.2 27.7 29.2 -24.5 28.5 -23.8 28.3 -23.2 29.3 -23.1
2025-11-17T13:16:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:16:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:16:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.469492
2025-11-17T13:16:52.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:16:52.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:16:52.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:16:52.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:16:52.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:16:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:16:33', tmtdew=28.1, humidity=14.79, cloud=0.0, wind=21.7, temperature=22.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:16:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:16:52.626 [DEBUG] [Thread-54934] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:16:52.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:16:52.721 [DEBUG] [Thread-54937] [transport.py] [_log()] starting thread (client mode): 0xd0759ab0
2025-11-17T13:16:52.721 [DEBUG] [Thread-54937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:16:52.736 [DEBUG] [Thread-54937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:16:52.736 [INFO] [Thread-54937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:16:52.743 [DEBUG] [Thread-54937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:16:52.743 [DEBUG] [Thread-54937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:16:52.743 [DEBUG] [Thread-54937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] client lang: <none>
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] server lang: <none>
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] kex follows: False
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] Compression: none
2025-11-17T13:16:52.744 [DEBUG] [Thread-54937] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:16:52.803 [DEBUG] [Thread-54937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:16:52.804 [DEBUG] [Thread-54937] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:16:52.804 [DEBUG] [Thread-54937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:16:52.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:16:52.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:16:52.859 [DEBUG] [Thread-54937] [transport.py] [_log()] userauth is OK
2025-11-17T13:16:52.860 [DEBUG] [Thread-54937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:16:52.860 [DEBUG] [Thread-54937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:16:52.860 [DEBUG] [Thread-54937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:16:52.860 [DEBUG] [Thread-54937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:16:52.880 [INFO] [Thread-54937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:16:52.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:16:52.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:16:53.725 [DEBUG] [Thread-54937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:16:53.725 [DEBUG] [Thread-54937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:16:53.773 [DEBUG] [Thread-54937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:16:53.773 [DEBUG] [Thread-54937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:16:53.782 [DEBUG] [Thread-54937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:16:53.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:16:53.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:16:53.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:16:53.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:16:53.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:16:53.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:16:53.816 [DEBUG] [Thread-54937] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:17:01.154 [DEBUG] [Thread-54939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:17:12.413 [DEBUG] [Thread-54940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:17:16.205 [DEBUG] [Thread-54941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:17:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:17:23.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:17:23.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:17:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 17, 5), 28.15, 14.8, 0.0, 24.08, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:17:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:17:05
2025-11-17T13:17:24.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:17:24.745 [DEBUG] [Thread-54942] [transport.py] [_log()] starting thread (client mode): 0xd07591e0
2025-11-17T13:17:24.745 [DEBUG] [Thread-54942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:17:24.765 [DEBUG] [Thread-54942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:17:24.765 [INFO] [Thread-54942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:17:24.766 [DEBUG] [Thread-54942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:17:24.766 [DEBUG] [Thread-54942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:17:24.766 [DEBUG] [Thread-54942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:17:24.766 [DEBUG] [Thread-54942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:17:24.766 [DEBUG] [Thread-54942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:17:24.766 [DEBUG] [Thread-54942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] client lang: <none>
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] server lang: <none>
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] kex follows: False
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] Compression: none
2025-11-17T13:17:24.767 [DEBUG] [Thread-54942] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:17:24.781 [DEBUG] [Thread-54942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:17:24.782 [DEBUG] [Thread-54942] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:17:24.782 [DEBUG] [Thread-54942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:17:24.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:17:24.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:17:24.784 [DEBUG] [Thread-54942] [transport.py] [_log()] userauth is OK
2025-11-17T13:17:24.784 [DEBUG] [Thread-54942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:17:24.784 [DEBUG] [Thread-54942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:17:24.784 [DEBUG] [Thread-54942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:17:24.784 [DEBUG] [Thread-54942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:17:24.798 [INFO] [Thread-54942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:17:24.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:17:25.573 [DEBUG] [Thread-54942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:17:25.573 [DEBUG] [Thread-54942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:17:25.573 [DEBUG] [Thread-54942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:17:25.613 [DEBUG] [Thread-54942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:17:25.614 [DEBUG] [Thread-54942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:17:25.616 [DEBUG] [Thread-54942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:17:25.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:17:25.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:17:25.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:17:25.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:17:25.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:17:25.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:17:25.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:17:25.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:17:25.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:17:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.469840 -999.00  +22.50  24.93     20   -0.90 1 2 1 1 1   888    0 24.26 58.77 ----- 24.9 24.9 277.6 31.9 29.1 -24.5 28.4 -23.0 28.1 -22.0 29.2 -23.6
2025-11-17T13:17:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:17:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:17:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.469840
2025-11-17T13:17:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:17:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:17:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:17:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:17:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:17:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:17:05', tmtdew=28.15, humidity=14.8, cloud=0.0, wind=24.08, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:16:34.176', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:17:25.640 [DEBUG] [Thread-54942] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:17:25.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:17:25.738 [DEBUG] [Thread-54945] [transport.py] [_log()] starting thread (client mode): 0xd071ae30
2025-11-17T13:17:25.738 [DEBUG] [Thread-54945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:17:25.754 [DEBUG] [Thread-54945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:17:25.754 [INFO] [Thread-54945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] client lang: <none>
2025-11-17T13:17:25.762 [DEBUG] [Thread-54945] [transport.py] [_log()] server lang: <none>
2025-11-17T13:17:25.763 [DEBUG] [Thread-54945] [transport.py] [_log()] kex follows: False
2025-11-17T13:17:25.763 [DEBUG] [Thread-54945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:17:25.763 [DEBUG] [Thread-54945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:17:25.763 [DEBUG] [Thread-54945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:17:25.763 [DEBUG] [Thread-54945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:17:25.763 [DEBUG] [Thread-54945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:17:25.763 [DEBUG] [Thread-54945] [transport.py] [_log()] Compression: none
2025-11-17T13:17:25.763 [DEBUG] [Thread-54945] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:17:25.823 [DEBUG] [Thread-54945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:17:25.823 [DEBUG] [Thread-54945] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:17:25.824 [DEBUG] [Thread-54945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:17:25.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:17:25.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:17:25.880 [DEBUG] [Thread-54945] [transport.py] [_log()] userauth is OK
2025-11-17T13:17:25.880 [DEBUG] [Thread-54945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:17:25.880 [DEBUG] [Thread-54945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:17:25.880 [DEBUG] [Thread-54945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:17:25.881 [DEBUG] [Thread-54945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:17:25.901 [INFO] [Thread-54945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:17:25.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:17:25.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:17:26.780 [DEBUG] [Thread-54945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:17:26.780 [DEBUG] [Thread-54945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:17:26.827 [DEBUG] [Thread-54945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:17:26.828 [DEBUG] [Thread-54945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:17:26.837 [DEBUG] [Thread-54945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:17:26.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:17:26.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:17:26.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
2025-11-17T13:17:26.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:17:26.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:17:26.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:17:26.871 [DEBUG] [Thread-54945] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:17:31.238 [DEBUG] [Thread-54947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:17:46.281 [DEBUG] [Thread-54948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:17:50.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:17:50.046 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:17:56.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:17:56.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:17:56.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:17:57.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 17, 37), 28.96, 14.01, 0.0, 24.08, 23.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:17:57.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:17:37
2025-11-17T13:17:57.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:17:57.827 [DEBUG] [Thread-54949] [transport.py] [_log()] starting thread (client mode): 0xd07186a0
2025-11-17T13:17:57.827 [DEBUG] [Thread-54949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:17:57.848 [DEBUG] [Thread-54949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:17:57.848 [INFO] [Thread-54949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:17:57.851 [DEBUG] [Thread-54949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:17:57.851 [DEBUG] [Thread-54949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:17:57.851 [DEBUG] [Thread-54949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:17:57.851 [DEBUG] [Thread-54949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] client lang: <none>
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] server lang: <none>
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] kex follows: False
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] Compression: none
2025-11-17T13:17:57.852 [DEBUG] [Thread-54949] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:17:57.871 [DEBUG] [Thread-54949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:17:57.871 [DEBUG] [Thread-54949] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:17:57.872 [DEBUG] [Thread-54949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:17:57.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:17:57.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:17:57.873 [DEBUG] [Thread-54949] [transport.py] [_log()] userauth is OK
2025-11-17T13:17:57.874 [DEBUG] [Thread-54949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:17:57.874 [DEBUG] [Thread-54949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:17:57.874 [DEBUG] [Thread-54949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:17:57.874 [DEBUG] [Thread-54949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:17:57.896 [INFO] [Thread-54949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:17:57.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:17:58.549 [DEBUG] [Thread-54949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:17:58.549 [DEBUG] [Thread-54949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:17:58.549 [DEBUG] [Thread-54949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:17:58.590 [DEBUG] [Thread-54949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:17:58.590 [DEBUG] [Thread-54949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:17:58.593 [DEBUG] [Thread-54949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:17:58.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:17:58.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:17:58.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:17:58.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:17:58.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:17:58.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:17:58.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:17:58.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:17:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:17:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.470534 -999.00  +23.20  35.27     20   -0.80 1 2 2 1 1   888    0 24.14 61.83 ----- 35.3 35.3 308.6 43.3 29.1 -23.8 28.2 -23.8 27.9 -22.1 29.1 -22.6
2025-11-17T13:17:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:17:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:17:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.470534
2025-11-17T13:17:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:17:58.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:17:58.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:17:58.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:17:58.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:17:58.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:17:37', tmtdew=28.96, humidity=14.01, cloud=0.0, wind=24.08, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:17:34.138', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:17:58.620 [DEBUG] [Thread-54949] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:17:58.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:17:58.717 [DEBUG] [Thread-54952] [transport.py] [_log()] starting thread (client mode): 0xd075b820
2025-11-17T13:17:58.717 [DEBUG] [Thread-54952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:17:58.732 [DEBUG] [Thread-54952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:17:58.732 [INFO] [Thread-54952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:17:58.739 [DEBUG] [Thread-54952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:17:58.739 [DEBUG] [Thread-54952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:17:58.739 [DEBUG] [Thread-54952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] client lang: <none>
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] server lang: <none>
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] kex follows: False
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] Compression: none
2025-11-17T13:17:58.740 [DEBUG] [Thread-54952] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:17:58.799 [DEBUG] [Thread-54952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:17:58.800 [DEBUG] [Thread-54952] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:17:58.800 [DEBUG] [Thread-54952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:17:58.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:17:58.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:17:58.855 [DEBUG] [Thread-54952] [transport.py] [_log()] userauth is OK
2025-11-17T13:17:58.855 [DEBUG] [Thread-54952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:17:58.856 [DEBUG] [Thread-54952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:17:58.856 [DEBUG] [Thread-54952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:17:58.856 [DEBUG] [Thread-54952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:17:58.877 [INFO] [Thread-54952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:17:58.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:17:58.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:17:59.721 [DEBUG] [Thread-54952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:17:59.721 [DEBUG] [Thread-54952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:17:59.769 [DEBUG] [Thread-54952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:17:59.769 [DEBUG] [Thread-54952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:17:59.778 [DEBUG] [Thread-54952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:17:59.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:17:59.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:17:59.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:17:59.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:17:59.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:17:59.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:17:59.812 [DEBUG] [Thread-54952] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:18:01.308 [DEBUG] [Thread-54954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:18:12.464 [DEBUG] [Thread-54955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:18:16.342 [DEBUG] [Thread-54956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:18:29.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:18:29.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:18:29.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:18:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 18, 9), 28.53, 14.37, 0.0, 24.67, 23.58, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:18:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:18:09
2025-11-17T13:18:30.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:18:30.757 [DEBUG] [Thread-54957] [transport.py] [_log()] starting thread (client mode): 0xd07bf370
2025-11-17T13:18:30.757 [DEBUG] [Thread-54957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:18:30.777 [DEBUG] [Thread-54957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:18:30.777 [INFO] [Thread-54957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:18:30.778 [DEBUG] [Thread-54957] [transport.py] [_log()] client lang: <none>
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] server lang: <none>
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] kex follows: False
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] Compression: none
2025-11-17T13:18:30.779 [DEBUG] [Thread-54957] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:18:30.787 [DEBUG] [Thread-54957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:18:30.787 [DEBUG] [Thread-54957] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:18:30.787 [DEBUG] [Thread-54957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:18:30.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:18:30.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:18:30.791 [DEBUG] [Thread-54957] [transport.py] [_log()] userauth is OK
2025-11-17T13:18:30.791 [DEBUG] [Thread-54957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:18:30.791 [DEBUG] [Thread-54957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:18:30.792 [DEBUG] [Thread-54957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:18:30.792 [DEBUG] [Thread-54957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:18:30.810 [INFO] [Thread-54957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:18:30.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:18:31.375 [DEBUG] [Thread-54959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:18:31.557 [DEBUG] [Thread-54957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:18:31.557 [DEBUG] [Thread-54957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:18:31.558 [DEBUG] [Thread-54957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:18:31.599 [DEBUG] [Thread-54957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:18:31.599 [DEBUG] [Thread-54957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:18:31.602 [DEBUG] [Thread-54957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:18:31.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:18:31.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:18:31.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:18:31.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:18:31.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:18:31.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:18:31.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:18:31.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:18:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:18:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.470881 -999.00  +23.10  25.62     20   -0.90 1 2 1 1 1   888    0 24.48 73.06 ----- 25.6 25.6 311.0 32.4 29.0 -24.6 28.2 -23.9 28.0 -21.9 29.1 -22.9
2025-11-17T13:18:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:18:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:18:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.470881
2025-11-17T13:18:31.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:18:31.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:18:31.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:18:31.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:18:31.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:18:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:18:09', tmtdew=28.53, humidity=14.37, cloud=0.0, wind=24.67, temperature=23.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:18:04.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:18:31.628 [DEBUG] [Thread-54957] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:18:31.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:18:31.719 [DEBUG] [Thread-54961] [transport.py] [_log()] starting thread (client mode): 0xd07bf130
2025-11-17T13:18:31.719 [DEBUG] [Thread-54961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:18:31.735 [DEBUG] [Thread-54961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:18:31.735 [INFO] [Thread-54961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:18:31.742 [DEBUG] [Thread-54961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:18:31.743 [DEBUG] [Thread-54961] [transport.py] [_log()] client lang: <none>
2025-11-17T13:18:31.744 [DEBUG] [Thread-54961] [transport.py] [_log()] server lang: <none>
2025-11-17T13:18:31.744 [DEBUG] [Thread-54961] [transport.py] [_log()] kex follows: False
2025-11-17T13:18:31.744 [DEBUG] [Thread-54961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:18:31.744 [DEBUG] [Thread-54961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:18:31.744 [DEBUG] [Thread-54961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:18:31.744 [DEBUG] [Thread-54961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:18:31.744 [DEBUG] [Thread-54961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:18:31.744 [DEBUG] [Thread-54961] [transport.py] [_log()] Compression: none
2025-11-17T13:18:31.745 [DEBUG] [Thread-54961] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:18:31.799 [DEBUG] [Thread-54961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:18:31.799 [DEBUG] [Thread-54961] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:18:31.800 [DEBUG] [Thread-54961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:18:31.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:18:31.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:18:31.855 [DEBUG] [Thread-54961] [transport.py] [_log()] userauth is OK
2025-11-17T13:18:31.855 [DEBUG] [Thread-54961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:18:31.855 [DEBUG] [Thread-54961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:18:31.855 [DEBUG] [Thread-54961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:18:31.855 [DEBUG] [Thread-54961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:18:31.875 [INFO] [Thread-54961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:18:31.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:18:31.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:18:32.760 [DEBUG] [Thread-54961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:18:32.760 [DEBUG] [Thread-54961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:18:32.808 [DEBUG] [Thread-54961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:18:32.809 [DEBUG] [Thread-54961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:18:32.817 [DEBUG] [Thread-54961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:18:32.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:18:32.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:18:32.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:18:32.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:18:32.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:18:32.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:18:32.852 [DEBUG] [Thread-54961] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:18:46.406 [DEBUG] [Thread-54963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:18:50.196 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:18:50.198 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:19:01.444 [DEBUG] [Thread-54964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:19:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:19:02.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:19:02.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:19:03.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 18, 41), 28.4, 14.54, 0.0, 24.74, 23.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:19:03.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:18:41
2025-11-17T13:19:03.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:19:03.817 [DEBUG] [Thread-54965] [transport.py] [_log()] starting thread (client mode): 0xd0759180
2025-11-17T13:19:03.817 [DEBUG] [Thread-54965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:19:03.837 [DEBUG] [Thread-54965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:19:03.837 [INFO] [Thread-54965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] client lang: <none>
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] server lang: <none>
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] kex follows: False
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] Compression: none
2025-11-17T13:19:03.840 [DEBUG] [Thread-54965] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:19:03.857 [DEBUG] [Thread-54965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:19:03.857 [DEBUG] [Thread-54965] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:19:03.857 [DEBUG] [Thread-54965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:19:03.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:19:03.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:19:03.858 [DEBUG] [Thread-54965] [transport.py] [_log()] userauth is OK
2025-11-17T13:19:03.858 [DEBUG] [Thread-54965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:19:03.858 [DEBUG] [Thread-54965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:19:03.858 [DEBUG] [Thread-54965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:19:03.858 [DEBUG] [Thread-54965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:19:03.868 [INFO] [Thread-54965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:19:03.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:19:04.511 [DEBUG] [Thread-54965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:19:04.511 [DEBUG] [Thread-54965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:19:04.511 [DEBUG] [Thread-54965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:19:04.552 [DEBUG] [Thread-54965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:19:04.552 [DEBUG] [Thread-54965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:19:04.554 [DEBUG] [Thread-54965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:19:04.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:19:04.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:19:04.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:19:04.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:19:04.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:19:04.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:19:04.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.471228 -999.00  +22.90  23.74     20   -0.80 1 1 1 1 1   888    0 24.94 75.56 ----- 23.7 23.7 329.8 27.2 29.0 -24.0 28.2 -23.4 28.1 -26.4 29.0 -22.6
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.471228
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:19:04.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:18:41', tmtdew=28.4, humidity=14.54, cloud=0.0, wind=24.74, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:18:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:19:04.574 [DEBUG] [Thread-54965] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:19:04.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:19:04.660 [DEBUG] [Thread-54968] [transport.py] [_log()] starting thread (client mode): 0xd31cf430
2025-11-17T13:19:04.660 [DEBUG] [Thread-54968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:19:04.681 [DEBUG] [Thread-54968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:19:04.681 [INFO] [Thread-54968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] client lang: <none>
2025-11-17T13:19:04.694 [DEBUG] [Thread-54968] [transport.py] [_log()] server lang: <none>
2025-11-17T13:19:04.695 [DEBUG] [Thread-54968] [transport.py] [_log()] kex follows: False
2025-11-17T13:19:04.695 [DEBUG] [Thread-54968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:19:04.695 [DEBUG] [Thread-54968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:19:04.695 [DEBUG] [Thread-54968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:19:04.695 [DEBUG] [Thread-54968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:19:04.695 [DEBUG] [Thread-54968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:19:04.695 [DEBUG] [Thread-54968] [transport.py] [_log()] Compression: none
2025-11-17T13:19:04.695 [DEBUG] [Thread-54968] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:19:04.751 [DEBUG] [Thread-54968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:19:04.751 [DEBUG] [Thread-54968] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:19:04.751 [DEBUG] [Thread-54968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:19:04.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:19:04.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:19:04.819 [DEBUG] [Thread-54968] [transport.py] [_log()] userauth is OK
2025-11-17T13:19:04.819 [DEBUG] [Thread-54968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:19:04.819 [DEBUG] [Thread-54968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:19:04.819 [DEBUG] [Thread-54968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:19:04.819 [DEBUG] [Thread-54968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:19:04.841 [INFO] [Thread-54968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:19:04.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:19:04.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:19:05.696 [DEBUG] [Thread-54968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:19:05.696 [DEBUG] [Thread-54968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:19:05.746 [DEBUG] [Thread-54968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:19:05.746 [DEBUG] [Thread-54968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:19:05.755 [DEBUG] [Thread-54968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:19:05.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:19:05.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:19:05.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:19:05.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:19:05.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:19:05.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:19:05.787 [DEBUG] [Thread-54968] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:19:12.517 [DEBUG] [Thread-54970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:19:16.475 [DEBUG] [Thread-54971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:19:31.515 [DEBUG] [Thread-54972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:19:35.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:19:35.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:19:35.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:19:36.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 19, 13), 28.3, 14.63, 0.0, 26.43, 23.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:19:36.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:19:13
2025-11-17T13:19:36.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:19:36.727 [DEBUG] [Thread-54973] [transport.py] [_log()] starting thread (client mode): 0xd0723640
2025-11-17T13:19:36.727 [DEBUG] [Thread-54973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:19:36.748 [DEBUG] [Thread-54973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:19:36.749 [INFO] [Thread-54973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:19:36.752 [DEBUG] [Thread-54973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:19:36.752 [DEBUG] [Thread-54973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] client lang: <none>
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] server lang: <none>
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] kex follows: False
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] Compression: none
2025-11-17T13:19:36.753 [DEBUG] [Thread-54973] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:19:36.770 [DEBUG] [Thread-54973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:19:36.771 [DEBUG] [Thread-54973] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:19:36.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:19:36.772 [DEBUG] [Thread-54973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:19:36.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:19:36.774 [DEBUG] [Thread-54973] [transport.py] [_log()] userauth is OK
2025-11-17T13:19:36.774 [DEBUG] [Thread-54973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:19:36.774 [DEBUG] [Thread-54973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:19:36.774 [DEBUG] [Thread-54973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:19:36.774 [DEBUG] [Thread-54973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:19:36.797 [INFO] [Thread-54973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:19:36.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:19:37.545 [DEBUG] [Thread-54973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:19:37.546 [DEBUG] [Thread-54973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:19:37.546 [DEBUG] [Thread-54973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:19:37.586 [DEBUG] [Thread-54973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:19:37.586 [DEBUG] [Thread-54973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:19:37.589 [DEBUG] [Thread-54973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:19:37.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:19:37.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:19:37.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:19:37.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:19:37.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:19:37.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:19:37.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:19:37.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:19:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:19:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.471575 -999.00  +22.50  22.94     20   -1.00 1 1 1 1 1   888    0 24.48 82.58 ----- 22.9 22.9 323.4 31.6 29.1 -24.2 28.4 -23.0 28.4 -23.2 29.1 -22.8
2025-11-17T13:19:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:19:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:19:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.471575
2025-11-17T13:19:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:19:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:19:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:19:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:19:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:19:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:19:13', tmtdew=28.3, humidity=14.63, cloud=0.0, wind=26.43, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:19:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:19:37.616 [DEBUG] [Thread-54973] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:19:37.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:19:37.725 [DEBUG] [Thread-54976] [transport.py] [_log()] starting thread (client mode): 0xd0787460
2025-11-17T13:19:37.725 [DEBUG] [Thread-54976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:19:37.741 [DEBUG] [Thread-54976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:19:37.741 [INFO] [Thread-54976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:19:37.748 [DEBUG] [Thread-54976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:19:37.748 [DEBUG] [Thread-54976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:19:37.748 [DEBUG] [Thread-54976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:19:37.748 [DEBUG] [Thread-54976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] client lang: <none>
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] server lang: <none>
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] kex follows: False
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] Compression: none
2025-11-17T13:19:37.749 [DEBUG] [Thread-54976] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:19:37.806 [DEBUG] [Thread-54976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:19:37.806 [DEBUG] [Thread-54976] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:19:37.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:19:37.808 [DEBUG] [Thread-54976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:19:37.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:19:37.863 [DEBUG] [Thread-54976] [transport.py] [_log()] userauth is OK
2025-11-17T13:19:37.863 [DEBUG] [Thread-54976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:19:37.863 [DEBUG] [Thread-54976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:19:37.863 [DEBUG] [Thread-54976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:19:37.863 [DEBUG] [Thread-54976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:19:37.882 [INFO] [Thread-54976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:19:37.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:19:37.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:19:38.744 [DEBUG] [Thread-54976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:19:38.744 [DEBUG] [Thread-54976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:19:38.791 [DEBUG] [Thread-54976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:19:38.791 [DEBUG] [Thread-54976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:19:38.800 [DEBUG] [Thread-54976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:19:38.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:19:38.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:19:38.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:19:38.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:19:38.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:19:38.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:19:38.834 [DEBUG] [Thread-54976] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:19:46.549 [DEBUG] [Thread-54978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:19:50.338 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:19:50.339 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:20:01.583 [DEBUG] [Thread-54979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:20:08.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:20:08.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:20:08.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:20:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 19, 45), 28.06, 14.9, 0.0, 27.12, 23.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:20:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:19:45
2025-11-17T13:20:09.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:20:09.785 [DEBUG] [Thread-54980] [transport.py] [_log()] starting thread (client mode): 0xd3135900
2025-11-17T13:20:09.785 [DEBUG] [Thread-54980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:20:09.805 [DEBUG] [Thread-54980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:20:09.805 [INFO] [Thread-54980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] client lang: <none>
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] server lang: <none>
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] kex follows: False
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] Compression: none
2025-11-17T13:20:09.807 [DEBUG] [Thread-54980] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:20:09.820 [DEBUG] [Thread-54980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:20:09.820 [DEBUG] [Thread-54980] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:20:09.821 [DEBUG] [Thread-54980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:20:09.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:20:09.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:20:09.823 [DEBUG] [Thread-54980] [transport.py] [_log()] userauth is OK
2025-11-17T13:20:09.823 [DEBUG] [Thread-54980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:20:09.823 [DEBUG] [Thread-54980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:20:09.823 [DEBUG] [Thread-54980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:20:09.823 [DEBUG] [Thread-54980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:20:09.840 [INFO] [Thread-54980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:20:09.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:20:12.559 [DEBUG] [Thread-54980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:20:12.559 [DEBUG] [Thread-54980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:20:12.559 [DEBUG] [Thread-54980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:20:12.568 [DEBUG] [Thread-54982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:20:12.600 [DEBUG] [Thread-54980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:20:12.600 [DEBUG] [Thread-54980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:20:12.603 [DEBUG] [Thread-54980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:20:12.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:20:12.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:20:12.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:20:12.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:20:12.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:20:12.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:20:12.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:20:12.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:20:12.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:20:12.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.471922 -999.00  +22.70  23.36     20   -0.70 1 2 1 1 1   888    0 24.89 87.97 ----- 23.4 23.4 309.4 32.8 29.1 -24.6 28.3 -23.4 28.4 -22.2 29.1 -23.2
2025-11-17T13:20:12.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:20:12.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:20:12.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.471922
2025-11-17T13:20:12.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:20:12.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:20:12.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:20:12.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:20:12.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:20:12.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:19:45', tmtdew=28.06, humidity=14.9, cloud=0.0, wind=27.12, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:19:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:20:12.631 [DEBUG] [Thread-54980] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:20:12.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:20:12.726 [DEBUG] [Thread-54984] [transport.py] [_log()] starting thread (client mode): 0xd0722cb0
2025-11-17T13:20:12.726 [DEBUG] [Thread-54984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:20:12.742 [DEBUG] [Thread-54984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:20:12.742 [INFO] [Thread-54984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] client lang: <none>
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] server lang: <none>
2025-11-17T13:20:12.750 [DEBUG] [Thread-54984] [transport.py] [_log()] kex follows: False
2025-11-17T13:20:12.751 [DEBUG] [Thread-54984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:20:12.751 [DEBUG] [Thread-54984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:20:12.751 [DEBUG] [Thread-54984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:20:12.751 [DEBUG] [Thread-54984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:20:12.751 [DEBUG] [Thread-54984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:20:12.751 [DEBUG] [Thread-54984] [transport.py] [_log()] Compression: none
2025-11-17T13:20:12.751 [DEBUG] [Thread-54984] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:20:12.806 [DEBUG] [Thread-54984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:20:12.806 [DEBUG] [Thread-54984] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:20:12.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:20:12.809 [DEBUG] [Thread-54984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:20:12.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:20:12.867 [DEBUG] [Thread-54984] [transport.py] [_log()] userauth is OK
2025-11-17T13:20:12.867 [DEBUG] [Thread-54984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:20:12.867 [DEBUG] [Thread-54984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:20:12.867 [DEBUG] [Thread-54984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:20:12.867 [DEBUG] [Thread-54984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:20:12.886 [INFO] [Thread-54984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:20:12.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:20:12.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:20:13.838 [DEBUG] [Thread-54984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:20:13.838 [DEBUG] [Thread-54984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:20:13.886 [DEBUG] [Thread-54984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:20:13.887 [DEBUG] [Thread-54984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:20:13.895 [DEBUG] [Thread-54984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:20:13.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:20:13.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:20:13.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:20:13.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:20:13.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:20:13.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:20:13.929 [DEBUG] [Thread-54984] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:20:16.617 [DEBUG] [Thread-54986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:20:31.665 [DEBUG] [Thread-54987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:20:43.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:20:43.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:20:43.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:20:44.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 20, 17), 27.7, 15.28, 0.0, 25.14, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:20:44.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:20:17
2025-11-17T13:20:44.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:20:44.884 [DEBUG] [Thread-54988] [transport.py] [_log()] starting thread (client mode): 0xd0721390
2025-11-17T13:20:44.884 [DEBUG] [Thread-54988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:20:44.904 [DEBUG] [Thread-54988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:20:44.904 [INFO] [Thread-54988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:20:44.907 [DEBUG] [Thread-54988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] client lang: <none>
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] server lang: <none>
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] kex follows: False
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] Compression: none
2025-11-17T13:20:44.908 [DEBUG] [Thread-54988] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:20:44.926 [DEBUG] [Thread-54988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:20:44.927 [DEBUG] [Thread-54988] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:20:44.927 [DEBUG] [Thread-54988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:20:44.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:20:44.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:20:44.929 [DEBUG] [Thread-54988] [transport.py] [_log()] userauth is OK
2025-11-17T13:20:44.929 [DEBUG] [Thread-54988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:20:44.929 [DEBUG] [Thread-54988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:20:44.929 [DEBUG] [Thread-54988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:20:44.930 [DEBUG] [Thread-54988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:20:44.953 [INFO] [Thread-54988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:20:44.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:20:45.584 [DEBUG] [Thread-54988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:20:45.584 [DEBUG] [Thread-54988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:20:45.584 [DEBUG] [Thread-54988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:20:45.626 [DEBUG] [Thread-54988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:20:45.626 [DEBUG] [Thread-54988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:20:45.629 [DEBUG] [Thread-54988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:20:45.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:20:45.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:20:45.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:20:45.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:20:45.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:20:45.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:20:45.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:20:45.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:20:45.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:20:45.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.472270 -999.00  +22.90  34.62     21   -0.40 1 2 2 1 1   888    0 25.22 94.07 ----- 34.6 34.6 322.0 40.0 29.2 -24.5 28.4 -23.6 28.4 -21.6 29.3 -23.3
2025-11-17T13:20:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:20:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:20:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.472270
2025-11-17T13:20:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:20:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:20:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:20:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:20:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:20:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:20:17', tmtdew=27.7, humidity=15.28, cloud=0.0, wind=25.14, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:20:04.128', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:20:45.653 [DEBUG] [Thread-54988] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:20:45.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:20:45.757 [DEBUG] [Thread-54991] [transport.py] [_log()] starting thread (client mode): 0xd3134730
2025-11-17T13:20:45.757 [DEBUG] [Thread-54991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:20:45.773 [DEBUG] [Thread-54991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:20:45.773 [INFO] [Thread-54991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] client lang: <none>
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] server lang: <none>
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] kex follows: False
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:20:45.781 [DEBUG] [Thread-54991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:20:45.782 [DEBUG] [Thread-54991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:20:45.782 [DEBUG] [Thread-54991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:20:45.782 [DEBUG] [Thread-54991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:20:45.782 [DEBUG] [Thread-54991] [transport.py] [_log()] Compression: none
2025-11-17T13:20:45.782 [DEBUG] [Thread-54991] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:20:45.843 [DEBUG] [Thread-54991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:20:45.843 [DEBUG] [Thread-54991] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:20:45.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:20:45.844 [DEBUG] [Thread-54991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:20:45.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:20:45.904 [DEBUG] [Thread-54991] [transport.py] [_log()] userauth is OK
2025-11-17T13:20:45.904 [DEBUG] [Thread-54991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:20:45.904 [DEBUG] [Thread-54991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:20:45.904 [DEBUG] [Thread-54991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:20:45.904 [DEBUG] [Thread-54991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:20:45.925 [INFO] [Thread-54991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:20:45.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:20:45.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:20:46.704 [DEBUG] [Thread-54993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:20:46.854 [DEBUG] [Thread-54991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:20:46.854 [DEBUG] [Thread-54991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:20:46.902 [DEBUG] [Thread-54991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:20:46.902 [DEBUG] [Thread-54991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:20:46.911 [DEBUG] [Thread-54991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:20:46.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:20:46.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:20:46.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:20:46.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:20:46.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:20:46.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:20:46.945 [DEBUG] [Thread-54991] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:20:50.479 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:20:50.480 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:21:01.754 [DEBUG] [Thread-54994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:21:12.621 [DEBUG] [Thread-54995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:21:16.779 [DEBUG] [Thread-54996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:21:16.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:21:16.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:21: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
2025-11-17T13:21:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 20, 49), 27.32, 15.95, 0.0, 25.87, 22.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:21:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:20:49
2025-11-17T13:21:17.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:21:17.869 [DEBUG] [Thread-54997] [transport.py] [_log()] starting thread (client mode): 0xd0722560
2025-11-17T13:21:17.869 [DEBUG] [Thread-54997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:21:17.890 [DEBUG] [Thread-54997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:21:17.890 [INFO] [Thread-54997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:21:17.893 [DEBUG] [Thread-54997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:21:17.893 [DEBUG] [Thread-54997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:21:17.893 [DEBUG] [Thread-54997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:21:17.893 [DEBUG] [Thread-54997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:21:17.893 [DEBUG] [Thread-54997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] client lang: <none>
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] server lang: <none>
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] kex follows: False
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] Compression: none
2025-11-17T13:21:17.894 [DEBUG] [Thread-54997] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:21:17.910 [DEBUG] [Thread-54997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:21:17.911 [DEBUG] [Thread-54997] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:21:17.911 [DEBUG] [Thread-54997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:21:17.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:21:17.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:21:17.911 [DEBUG] [Thread-54997] [transport.py] [_log()] userauth is OK
2025-11-17T13:21:17.911 [DEBUG] [Thread-54997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:21:17.911 [DEBUG] [Thread-54997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:21:17.911 [DEBUG] [Thread-54997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:21:17.911 [DEBUG] [Thread-54997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:21:17.922 [INFO] [Thread-54997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:21:17.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:21:18.571 [DEBUG] [Thread-54997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:21:18.571 [DEBUG] [Thread-54997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:21:18.572 [DEBUG] [Thread-54997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:21:18.612 [DEBUG] [Thread-54997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:21:18.613 [DEBUG] [Thread-54997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:21:18.616 [DEBUG] [Thread-54997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:21:18.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:21:18.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:21:18.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:21:18.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:21:18.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:21:18.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:21:18.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:21:18.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:21:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:21:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.472617 -999.00  +22.50  28.42     21   -0.40 1 1 1 1 1   888    0 25.43 88.77 ----- 28.4 28.4 314.2 32.5 29.1 -25.0 28.4 -24.5 28.4 -24.9 29.2 -23.4
2025-11-17T13:21:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:21:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:21:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.472617
2025-11-17T13:21:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:21:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:21:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:21:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:21:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:21:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:20:49', tmtdew=27.32, humidity=15.95, cloud=0.0, wind=25.87, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:20:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:21:18.643 [DEBUG] [Thread-54997] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:21:18.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:21:18.744 [DEBUG] [Thread-55000] [transport.py] [_log()] starting thread (client mode): 0xd07bdbd0
2025-11-17T13:21:18.744 [DEBUG] [Thread-55000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:21:18.758 [DEBUG] [Thread-55000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:21:18.758 [INFO] [Thread-55000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:21:18.766 [DEBUG] [Thread-55000] [transport.py] [_log()] client lang: <none>
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] server lang: <none>
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] kex follows: False
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] Compression: none
2025-11-17T13:21:18.767 [DEBUG] [Thread-55000] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:21:18.826 [DEBUG] [Thread-55000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:21:18.827 [DEBUG] [Thread-55000] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:21:18.827 [DEBUG] [Thread-55000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:21:18.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:21:18.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:21:18.882 [DEBUG] [Thread-55000] [transport.py] [_log()] userauth is OK
2025-11-17T13:21:18.882 [DEBUG] [Thread-55000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:21:18.883 [DEBUG] [Thread-55000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:21:18.883 [DEBUG] [Thread-55000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:21:18.883 [DEBUG] [Thread-55000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:21:18.902 [INFO] [Thread-55000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:21:18.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:21:18.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:21:19.756 [DEBUG] [Thread-55000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:21:19.756 [DEBUG] [Thread-55000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:21:19.803 [DEBUG] [Thread-55000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:21:19.803 [DEBUG] [Thread-55000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:21:19.816 [DEBUG] [Thread-55000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:21:19.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:21:19.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:21:19.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:21:19.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:21:19.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:21:19.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:21:19.851 [DEBUG] [Thread-55000] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:21:31.807 [DEBUG] [Thread-55002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:21:46.851 [DEBUG] [Thread-55003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:21:49.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:21:49.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:21: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
2025-11-17T13:21:50.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 21, 21), 27.36, 15.91, 0.0, 26.68, 22.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:21:50.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:21:21
2025-11-17T13:21:50.621 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:21:50.622 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:21:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:21:50.803 [DEBUG] [Thread-55004] [transport.py] [_log()] starting thread (client mode): 0xd31379d0
2025-11-17T13:21:50.803 [DEBUG] [Thread-55004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:21:50.821 [DEBUG] [Thread-55004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:21:50.821 [INFO] [Thread-55004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] client lang: <none>
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] server lang: <none>
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] kex follows: False
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] Compression: none
2025-11-17T13:21:50.825 [DEBUG] [Thread-55004] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:21:50.841 [DEBUG] [Thread-55004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:21:50.842 [DEBUG] [Thread-55004] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:21:50.842 [DEBUG] [Thread-55004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:21:50.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:21:50.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:21:50.844 [DEBUG] [Thread-55004] [transport.py] [_log()] userauth is OK
2025-11-17T13:21:50.844 [DEBUG] [Thread-55004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:21:50.844 [DEBUG] [Thread-55004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:21:50.844 [DEBUG] [Thread-55004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:21:50.844 [DEBUG] [Thread-55004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:21:50.870 [INFO] [Thread-55004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:21:50.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:21:51.541 [DEBUG] [Thread-55004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:21:51.541 [DEBUG] [Thread-55004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:21:51.541 [DEBUG] [Thread-55004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:21:51.582 [DEBUG] [Thread-55004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:21:51.583 [DEBUG] [Thread-55004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:21:51.585 [DEBUG] [Thread-55004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:21:51.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:21:51.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:21:51.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:21:51.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:21:51.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:21:51.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:21:51.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:21:51.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:21:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:21:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.472964 -999.00  +22.50  26.66     22   -0.20 1 1 1 1 1   888    0 24.99 83.69 ----- 26.7 26.7 331.0 31.0 29.1 -24.3 28.2 -23.9 28.3 -24.5 29.2 -23.8
2025-11-17T13:21:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:21:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:21:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.472964
2025-11-17T13:21:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:21:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:21:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:21:51.611 [DEBUG] [Thread-55004] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:21:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:21:51.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:21:51.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:21:21', tmtdew=27.36, humidity=15.91, cloud=0.0, wind=26.68, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:21:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:21:51.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:21:51.719 [DEBUG] [Thread-55007] [transport.py] [_log()] starting thread (client mode): 0xd31b0fd0
2025-11-17T13:21:51.719 [DEBUG] [Thread-55007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:21:51.733 [DEBUG] [Thread-55007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:21:51.733 [INFO] [Thread-55007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:21:51.741 [DEBUG] [Thread-55007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:21:51.741 [DEBUG] [Thread-55007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:21:51.741 [DEBUG] [Thread-55007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:21:51.741 [DEBUG] [Thread-55007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:21:51.741 [DEBUG] [Thread-55007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:21:51.741 [DEBUG] [Thread-55007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] client lang: <none>
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] server lang: <none>
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] kex follows: False
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:21:51.742 [DEBUG] [Thread-55007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:21:51.743 [DEBUG] [Thread-55007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:21:51.743 [DEBUG] [Thread-55007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:21:51.743 [DEBUG] [Thread-55007] [transport.py] [_log()] Compression: none
2025-11-17T13:21:51.743 [DEBUG] [Thread-55007] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:21:51.798 [DEBUG] [Thread-55007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:21:51.798 [DEBUG] [Thread-55007] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:21:51.799 [DEBUG] [Thread-55007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:21:51.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:21:51.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:21:51.854 [DEBUG] [Thread-55007] [transport.py] [_log()] userauth is OK
2025-11-17T13:21:51.854 [DEBUG] [Thread-55007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:21:51.854 [DEBUG] [Thread-55007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:21:51.855 [DEBUG] [Thread-55007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:21:51.855 [DEBUG] [Thread-55007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:21:51.877 [INFO] [Thread-55007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:21:51.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:21:51.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:21:52.784 [DEBUG] [Thread-55007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:21:52.784 [DEBUG] [Thread-55007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:21:52.832 [DEBUG] [Thread-55007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:21:52.832 [DEBUG] [Thread-55007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:21:52.841 [DEBUG] [Thread-55007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:21:52.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:21: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')
2025-11-17T13:21:52.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:21:52.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:21:52.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:21:52.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:21:52.878 [DEBUG] [Thread-55007] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:22:01.879 [DEBUG] [Thread-55009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:22:12.676 [DEBUG] [Thread-55010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:22:16.915 [DEBUG] [Thread-55011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:22:22.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:22:22.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:22: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
2025-11-17T13:22:23.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 21, 53), 27.01, 16.05, 0.0, 26.13, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:22:23.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:21:53
2025-11-17T13:22:23.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:22:23.809 [DEBUG] [Thread-55012] [transport.py] [_log()] starting thread (client mode): 0xd078c070
2025-11-17T13:22:23.809 [DEBUG] [Thread-55012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:22:23.830 [DEBUG] [Thread-55012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:22:23.830 [INFO] [Thread-55012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:22:23.842 [DEBUG] [Thread-55012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:22:23.842 [DEBUG] [Thread-55012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:22:23.843 [DEBUG] [Thread-55012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:22:23.843 [DEBUG] [Thread-55012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:22:23.843 [DEBUG] [Thread-55012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:22:23.843 [DEBUG] [Thread-55012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:22:23.843 [DEBUG] [Thread-55012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:22:23.843 [DEBUG] [Thread-55012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:22:23.843 [DEBUG] [Thread-55012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:22:23.844 [DEBUG] [Thread-55012] [transport.py] [_log()] client lang: <none>
2025-11-17T13:22:23.844 [DEBUG] [Thread-55012] [transport.py] [_log()] server lang: <none>
2025-11-17T13:22:23.844 [DEBUG] [Thread-55012] [transport.py] [_log()] kex follows: False
2025-11-17T13:22:23.844 [DEBUG] [Thread-55012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:22:23.844 [DEBUG] [Thread-55012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:22:23.844 [DEBUG] [Thread-55012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:22:23.844 [DEBUG] [Thread-55012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:22:23.845 [DEBUG] [Thread-55012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:22:23.845 [DEBUG] [Thread-55012] [transport.py] [_log()] Compression: none
2025-11-17T13:22:23.845 [DEBUG] [Thread-55012] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:22:23.867 [DEBUG] [Thread-55012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:22:23.867 [DEBUG] [Thread-55012] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:22:23.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:22:23.868 [DEBUG] [Thread-55012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:22:23.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:22:23.871 [DEBUG] [Thread-55012] [transport.py] [_log()] userauth is OK
2025-11-17T13:22:23.872 [DEBUG] [Thread-55012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:22:23.872 [DEBUG] [Thread-55012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:22:23.872 [DEBUG] [Thread-55012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:22:23.872 [DEBUG] [Thread-55012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:22:23.895 [INFO] [Thread-55012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:22:23.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:22:24.489 [DEBUG] [Thread-55012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:22:24.489 [DEBUG] [Thread-55012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:22:24.490 [DEBUG] [Thread-55012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:22:24.530 [DEBUG] [Thread-55012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:22:24.530 [DEBUG] [Thread-55012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:22:24.533 [DEBUG] [Thread-55012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:22:24.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:22:24.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:22:24.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:22:24.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:22:24.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:22:24.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:22:24.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:22:24.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:22:24.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:22:24.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.473311 -999.00  +21.80  20.66     22   -0.40 1 1 1 1 1   888    0 25.72 86.76 ----- 20.7 20.7 314.8 27.2 29.0 -25.3 28.2 -25.1 28.4 -22.7 29.2 -23.4
2025-11-17T13:22:24.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:22:24.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:22:24.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.473311
2025-11-17T13:22:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:22:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:22:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:22:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:22:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:22:24.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:21:53', tmtdew=27.01, humidity=16.05, cloud=0.0, wind=26.13, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:21:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:22:24.560 [DEBUG] [Thread-55012] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:22:24.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:22:24.663 [DEBUG] [Thread-55015] [transport.py] [_log()] starting thread (client mode): 0xd07cd150
2025-11-17T13:22:24.663 [DEBUG] [Thread-55015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:22:24.677 [DEBUG] [Thread-55015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:22:24.678 [INFO] [Thread-55015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] client lang: <none>
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] server lang: <none>
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] kex follows: False
2025-11-17T13:22:24.688 [DEBUG] [Thread-55015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:22:24.689 [DEBUG] [Thread-55015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:22:24.689 [DEBUG] [Thread-55015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:22:24.689 [DEBUG] [Thread-55015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:22:24.689 [DEBUG] [Thread-55015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:22:24.689 [DEBUG] [Thread-55015] [transport.py] [_log()] Compression: none
2025-11-17T13:22:24.689 [DEBUG] [Thread-55015] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:22:24.748 [DEBUG] [Thread-55015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:22:24.748 [DEBUG] [Thread-55015] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:22:24.748 [DEBUG] [Thread-55015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:22:24.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:22:24.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:22:24.806 [DEBUG] [Thread-55015] [transport.py] [_log()] userauth is OK
2025-11-17T13:22:24.806 [DEBUG] [Thread-55015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:22:24.806 [DEBUG] [Thread-55015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:22:24.806 [DEBUG] [Thread-55015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:22:24.806 [DEBUG] [Thread-55015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:22:24.827 [INFO] [Thread-55015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:22:24.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:22:24.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:22:25.713 [DEBUG] [Thread-55015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:22:25.713 [DEBUG] [Thread-55015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:22:25.761 [DEBUG] [Thread-55015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:22:25.761 [DEBUG] [Thread-55015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:22:25.769 [DEBUG] [Thread-55015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:22:25.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:22:25.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:22:25.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:22:25.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:22:25.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:22:25.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:22:25.801 [DEBUG] [Thread-55015] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:22:31.944 [DEBUG] [Thread-55017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:22:47.001 [DEBUG] [Thread-55018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:22:50.761 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:22:50.762 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:22:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:22:55.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:22:55.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:22:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 22, 25), 27.02, 16.0, 0.0, 21.3, 22.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:22:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:22:25
2025-11-17T13:22:56.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:22:56.796 [DEBUG] [Thread-55019] [transport.py] [_log()] starting thread (client mode): 0xd3160880
2025-11-17T13:22:56.796 [DEBUG] [Thread-55019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:22:56.816 [DEBUG] [Thread-55019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:22:56.816 [INFO] [Thread-55019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:22:56.819 [DEBUG] [Thread-55019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] client lang: <none>
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] server lang: <none>
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] kex follows: False
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] Compression: none
2025-11-17T13:22:56.820 [DEBUG] [Thread-55019] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:22:56.835 [DEBUG] [Thread-55019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:22:56.835 [DEBUG] [Thread-55019] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:22:56.835 [DEBUG] [Thread-55019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:22:56.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:22:56.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:22:56.836 [DEBUG] [Thread-55019] [transport.py] [_log()] userauth is OK
2025-11-17T13:22:56.836 [DEBUG] [Thread-55019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:22:56.836 [DEBUG] [Thread-55019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:22:56.836 [DEBUG] [Thread-55019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:22:56.836 [DEBUG] [Thread-55019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:22:56.851 [INFO] [Thread-55019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:22:56.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:22:57.521 [DEBUG] [Thread-55019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:22:57.521 [DEBUG] [Thread-55019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:22:57.521 [DEBUG] [Thread-55019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:22:57.562 [DEBUG] [Thread-55019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:22:57.562 [DEBUG] [Thread-55019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:22:57.565 [DEBUG] [Thread-55019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:22:57.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:22:57.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:22:57.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:22:57.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:22:57.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:22:57.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:22:57.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.474006 -999.00  +22.00  18.66     22   -0.20 1 2 1 1 1   888    0 25.31 92.18 ----- 18.7 18.7 348.6 25.5 29.1 -26.9 28.3 -23.7 28.6 -21.6 29.0 -30.4
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.474006
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:22:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:22:25', tmtdew=27.02, humidity=16.0, cloud=0.0, wind=21.3, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:22:34.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:22:57.584 [DEBUG] [Thread-55019] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:22:57.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:22:57.670 [DEBUG] [Thread-55022] [transport.py] [_log()] starting thread (client mode): 0xd07cef80
2025-11-17T13:22:57.670 [DEBUG] [Thread-55022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:22:57.685 [DEBUG] [Thread-55022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:22:57.685 [INFO] [Thread-55022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] client lang: <none>
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] server lang: <none>
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] kex follows: False
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:22:57.692 [DEBUG] [Thread-55022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:22:57.693 [DEBUG] [Thread-55022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:22:57.693 [DEBUG] [Thread-55022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:22:57.693 [DEBUG] [Thread-55022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:22:57.693 [DEBUG] [Thread-55022] [transport.py] [_log()] Compression: none
2025-11-17T13:22:57.693 [DEBUG] [Thread-55022] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:22:57.752 [DEBUG] [Thread-55022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:22:57.753 [DEBUG] [Thread-55022] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:22:57.753 [DEBUG] [Thread-55022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:22:57.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:22:57.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:22:57.809 [DEBUG] [Thread-55022] [transport.py] [_log()] userauth is OK
2025-11-17T13:22:57.810 [DEBUG] [Thread-55022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:22:57.810 [DEBUG] [Thread-55022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:22:57.810 [DEBUG] [Thread-55022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:22:57.810 [DEBUG] [Thread-55022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:22:57.825 [INFO] [Thread-55022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:22:57.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:22:57.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:22:58.764 [DEBUG] [Thread-55022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:22:58.764 [DEBUG] [Thread-55022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:22:58.812 [DEBUG] [Thread-55022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:22:58.812 [DEBUG] [Thread-55022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:22:58.820 [DEBUG] [Thread-55022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:22:58.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:22:58.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:22:58.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:22:58.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:22:58.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:22:58.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:22:58.853 [DEBUG] [Thread-55022] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:23:02.028 [DEBUG] [Thread-55024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:23:12.727 [DEBUG] [Thread-55025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:23:17.069 [DEBUG] [Thread-55026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:23:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:23:28.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:23:28.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:23:29.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 22, 57), 27.17, 16.11, 0.0, 19.74, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:23:29.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:22:57
2025-11-17T13:23:29.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:23:29.799 [DEBUG] [Thread-55027] [transport.py] [_log()] starting thread (client mode): 0xd31b33d0
2025-11-17T13:23:29.799 [DEBUG] [Thread-55027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:23:29.819 [DEBUG] [Thread-55027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:23:29.819 [INFO] [Thread-55027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:23:29.822 [DEBUG] [Thread-55027] [transport.py] [_log()] client lang: <none>
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] server lang: <none>
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] kex follows: False
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] Compression: none
2025-11-17T13:23:29.823 [DEBUG] [Thread-55027] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:23:29.839 [DEBUG] [Thread-55027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:23:29.839 [DEBUG] [Thread-55027] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:23:29.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:23:29.839 [DEBUG] [Thread-55027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:23:29.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:23:29.840 [DEBUG] [Thread-55027] [transport.py] [_log()] userauth is OK
2025-11-17T13:23:29.840 [DEBUG] [Thread-55027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:23:29.840 [DEBUG] [Thread-55027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:23:29.840 [DEBUG] [Thread-55027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:23:29.840 [DEBUG] [Thread-55027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:23:29.857 [INFO] [Thread-55027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:23:29.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:23:30.455 [DEBUG] [Thread-55027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:23:30.455 [DEBUG] [Thread-55027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:23:30.456 [DEBUG] [Thread-55027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:23:30.496 [DEBUG] [Thread-55027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:23:30.496 [DEBUG] [Thread-55027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:23:30.498 [DEBUG] [Thread-55027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:23:30.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:23:30.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:23:30.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:23:30.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:23:30.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:23:30.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:23:30.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:23:30.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:23:30.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.474353 -999.00  +22.00  15.61     22   -0.10 1 1 1 1 1   888    0 25.71 83.24 ----- 15.6 15.6 5.0 22.1 29.0 -23.6 28.0 -25.5 28.4 -22.3 29.1 -21.8
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.474353
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:23:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:22:57', tmtdew=27.17, humidity=16.11, cloud=0.0, wind=19.74, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:23:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:23:30.515 [DEBUG] [Thread-55027] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:23:30.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:23:30.603 [DEBUG] [Thread-55030] [transport.py] [_log()] starting thread (client mode): 0xd0786710
2025-11-17T13:23:30.603 [DEBUG] [Thread-55030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:23:30.620 [DEBUG] [Thread-55030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:23:30.620 [INFO] [Thread-55030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] client lang: <none>
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] server lang: <none>
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] kex follows: False
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:23:30.627 [DEBUG] [Thread-55030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:23:30.628 [DEBUG] [Thread-55030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:23:30.628 [DEBUG] [Thread-55030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:23:30.628 [DEBUG] [Thread-55030] [transport.py] [_log()] Compression: none
2025-11-17T13:23:30.628 [DEBUG] [Thread-55030] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:23:30.685 [DEBUG] [Thread-55030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:23:30.685 [DEBUG] [Thread-55030] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:23:30.685 [DEBUG] [Thread-55030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:23:30.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:23:30.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:23:30.746 [DEBUG] [Thread-55030] [transport.py] [_log()] userauth is OK
2025-11-17T13:23:30.747 [DEBUG] [Thread-55030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:23:30.747 [DEBUG] [Thread-55030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:23:30.747 [DEBUG] [Thread-55030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:23:30.747 [DEBUG] [Thread-55030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:23:30.762 [INFO] [Thread-55030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:23:30.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:23:30.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:23:31.644 [DEBUG] [Thread-55030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:23:31.644 [DEBUG] [Thread-55030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:23:31.692 [DEBUG] [Thread-55030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:23:31.692 [DEBUG] [Thread-55030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:23:31.700 [DEBUG] [Thread-55030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:23:31.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:23:31.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:23:31.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:23:31.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:23:31.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:23:31.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:23:31.731 [DEBUG] [Thread-55030] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:23:32.098 [DEBUG] [Thread-55032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:23:47.132 [DEBUG] [Thread-55033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:23:50.905 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:23:50.906 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:24:01.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:24:01.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:24:01.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:24:02.157 [DEBUG] [Thread-55034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:24:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 23, 29), 27.34, 15.93, 0.0, 15.23, 22.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:24:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:23:29
2025-11-17T13:24:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:24:02.770 [DEBUG] [Thread-55035] [transport.py] [_log()] starting thread (client mode): 0xd0784850
2025-11-17T13:24:02.770 [DEBUG] [Thread-55035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:24:02.790 [DEBUG] [Thread-55035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:24:02.791 [INFO] [Thread-55035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] client lang: <none>
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] server lang: <none>
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] kex follows: False
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] Compression: none
2025-11-17T13:24:02.794 [DEBUG] [Thread-55035] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:24:02.810 [DEBUG] [Thread-55035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:24:02.810 [DEBUG] [Thread-55035] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:24:02.810 [DEBUG] [Thread-55035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:24:02.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:24:02.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:24:02.811 [DEBUG] [Thread-55035] [transport.py] [_log()] userauth is OK
2025-11-17T13:24:02.812 [DEBUG] [Thread-55035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:24:02.812 [DEBUG] [Thread-55035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:24:02.812 [DEBUG] [Thread-55035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:24:02.812 [DEBUG] [Thread-55035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:24:02.828 [INFO] [Thread-55035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:24:02.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:24:03.422 [DEBUG] [Thread-55035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:24:03.422 [DEBUG] [Thread-55035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:24:03.422 [DEBUG] [Thread-55035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:24:03.464 [DEBUG] [Thread-55035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:24:03.464 [DEBUG] [Thread-55035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:24:03.466 [DEBUG] [Thread-55035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:24:03.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:24:03.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:24:03.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:24:03.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:24:03.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:24:03.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:24:03.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:24:03.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.474700 -999.00  +22.10  14.60     22   -0.30 1 2 1 1 1   888    0 24.70 77.30 ----- 14.6 14.6 350.4 20.7 29.0 -24.8 28.2 -23.2 28.5 -22.6 29.0 -22.8
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.474700
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:24:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:23:29', tmtdew=27.34, humidity=15.93, cloud=0.0, wind=15.23, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:23:34.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:24:03.487 [DEBUG] [Thread-55035] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:24:03.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:24:03.579 [DEBUG] [Thread-55038] [transport.py] [_log()] starting thread (client mode): 0xd31b2680
2025-11-17T13:24:03.579 [DEBUG] [Thread-55038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:24:03.594 [DEBUG] [Thread-55038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:24:03.594 [INFO] [Thread-55038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:24:03.601 [DEBUG] [Thread-55038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:24:03.601 [DEBUG] [Thread-55038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:24:03.601 [DEBUG] [Thread-55038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] client lang: <none>
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] server lang: <none>
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] kex follows: False
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] Compression: none
2025-11-17T13:24:03.602 [DEBUG] [Thread-55038] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:24:03.667 [DEBUG] [Thread-55038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:24:03.668 [DEBUG] [Thread-55038] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:24:03.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:24:03.668 [DEBUG] [Thread-55038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:24:03.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:24:03.726 [DEBUG] [Thread-55038] [transport.py] [_log()] userauth is OK
2025-11-17T13:24:03.726 [DEBUG] [Thread-55038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:24:03.726 [DEBUG] [Thread-55038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:24:03.726 [DEBUG] [Thread-55038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:24:03.726 [DEBUG] [Thread-55038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:24:03.744 [INFO] [Thread-55038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:24:03.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:24:03.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:24:04.628 [DEBUG] [Thread-55038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:24:04.629 [DEBUG] [Thread-55038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:24:04.681 [DEBUG] [Thread-55038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:24:04.682 [DEBUG] [Thread-55038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:24:04.696 [DEBUG] [Thread-55038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:24:04.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:24:04.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:24:04.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:24:04.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:24:04.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:24:04.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:24:04.735 [DEBUG] [Thread-55038] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:24:12.772 [DEBUG] [Thread-55040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:24:17.185 [DEBUG] [Thread-55041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:24:32.227 [DEBUG] [Thread-55042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:24:34.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:24:34.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:24:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:24:35.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 24, 1), 27.16, 15.83, 0.0, 15.32, 22.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:24:35.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:24:01
2025-11-17T13:24:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:24:35.729 [DEBUG] [Thread-55043] [transport.py] [_log()] starting thread (client mode): 0xd31639a0
2025-11-17T13:24:35.729 [DEBUG] [Thread-55043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:24:35.749 [DEBUG] [Thread-55043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:24:35.749 [INFO] [Thread-55043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:24:35.752 [DEBUG] [Thread-55043] [transport.py] [_log()] client lang: <none>
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] server lang: <none>
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] kex follows: False
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] Compression: none
2025-11-17T13:24:35.753 [DEBUG] [Thread-55043] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:24:35.772 [DEBUG] [Thread-55043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:24:35.772 [DEBUG] [Thread-55043] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:24:35.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:24:35.773 [DEBUG] [Thread-55043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:24:35.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:24:35.775 [DEBUG] [Thread-55043] [transport.py] [_log()] userauth is OK
2025-11-17T13:24:35.776 [DEBUG] [Thread-55043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:24:35.776 [DEBUG] [Thread-55043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:24:35.776 [DEBUG] [Thread-55043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:24:35.776 [DEBUG] [Thread-55043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:24:35.799 [INFO] [Thread-55043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:24:35.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:24:36.430 [DEBUG] [Thread-55043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:24:36.430 [DEBUG] [Thread-55043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:24:36.430 [DEBUG] [Thread-55043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:24:36.471 [DEBUG] [Thread-55043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:24:36.471 [DEBUG] [Thread-55043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:24:36.473 [DEBUG] [Thread-55043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:24:36.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:24:36.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:24:36.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:24:36.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:24:36.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:24:36.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:24:36.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:24:36.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:24:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:24:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.475047 -999.00  +22.40  11.31     22   -0.20 1 2 1 1 1   888    0 24.31 67.36 ----- 11.3 11.3 11.7 16.8 29.1 -25.4 28.2 -22.8 28.6 -23.0 29.2 -25.6
2025-11-17T13:24:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:24:36.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:24:36.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.475047
2025-11-17T13:24:36.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:24:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:24:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:24:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:24:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:24:36.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:24:01', tmtdew=27.16, humidity=15.83, cloud=0.0, wind=15.32, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:24:04.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:24:36.500 [DEBUG] [Thread-55043] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:24:36.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:24:36.597 [DEBUG] [Thread-55046] [transport.py] [_log()] starting thread (client mode): 0xd31620b0
2025-11-17T13:24:36.597 [DEBUG] [Thread-55046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:24:36.612 [DEBUG] [Thread-55046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:24:36.612 [INFO] [Thread-55046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] client lang: <none>
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] server lang: <none>
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] kex follows: False
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:24:36.620 [DEBUG] [Thread-55046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:24:36.621 [DEBUG] [Thread-55046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:24:36.621 [DEBUG] [Thread-55046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:24:36.621 [DEBUG] [Thread-55046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:24:36.621 [DEBUG] [Thread-55046] [transport.py] [_log()] Compression: none
2025-11-17T13:24:36.621 [DEBUG] [Thread-55046] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:24:36.682 [DEBUG] [Thread-55046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:24:36.683 [DEBUG] [Thread-55046] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:24:36.683 [DEBUG] [Thread-55046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:24:36.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:24:36.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:24:36.737 [DEBUG] [Thread-55046] [transport.py] [_log()] userauth is OK
2025-11-17T13:24:36.738 [DEBUG] [Thread-55046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:24:36.738 [DEBUG] [Thread-55046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:24:36.738 [DEBUG] [Thread-55046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:24:36.738 [DEBUG] [Thread-55046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:24:36.758 [INFO] [Thread-55046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:24:36.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:24:36.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:24:37.646 [DEBUG] [Thread-55046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:24:37.646 [DEBUG] [Thread-55046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:24:37.694 [DEBUG] [Thread-55046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:24:37.695 [DEBUG] [Thread-55046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:24:37.704 [DEBUG] [Thread-55046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:24:37.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:24:37.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:24:37.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:24:37.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:24:37.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:24:37.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:24:37.738 [DEBUG] [Thread-55046] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:24:47.253 [DEBUG] [Thread-55048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:24:51.048 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:24:51.048 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:25:02.289 [DEBUG] [Thread-55049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:25:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:25:07.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:25:07.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:25:08.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 25, 5), 27.05, 15.95, 0.0, 15.37, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:25:08.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:25:05
2025-11-17T13:25:08.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:25:08.667 [DEBUG] [Thread-55050] [transport.py] [_log()] starting thread (client mode): 0xd0785150
2025-11-17T13:25:08.667 [DEBUG] [Thread-55050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:25:08.689 [DEBUG] [Thread-55050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:25:08.690 [INFO] [Thread-55050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:25:08.692 [DEBUG] [Thread-55050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:25:08.692 [DEBUG] [Thread-55050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:25:08.692 [DEBUG] [Thread-55050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:25:08.692 [DEBUG] [Thread-55050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:25:08.692 [DEBUG] [Thread-55050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] client lang: <none>
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] server lang: <none>
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] kex follows: False
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] Compression: none
2025-11-17T13:25:08.693 [DEBUG] [Thread-55050] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:25:08.709 [DEBUG] [Thread-55050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:25:08.710 [DEBUG] [Thread-55050] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:25:08.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:25:08.711 [DEBUG] [Thread-55050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:25:08.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:25:08.717 [DEBUG] [Thread-55050] [transport.py] [_log()] userauth is OK
2025-11-17T13:25:08.717 [DEBUG] [Thread-55050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:25:08.717 [DEBUG] [Thread-55050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:25:08.717 [DEBUG] [Thread-55050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:25:08.718 [DEBUG] [Thread-55050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:25:08.741 [INFO] [Thread-55050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:25:08.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:25:12.447 [DEBUG] [Thread-55050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:25:12.447 [DEBUG] [Thread-55050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:25:12.447 [DEBUG] [Thread-55050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:25:12.487 [DEBUG] [Thread-55050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:25:12.488 [DEBUG] [Thread-55050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:25:12.490 [DEBUG] [Thread-55050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:25:12.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:25:12.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:25:12.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:25:12.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:25:12.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:25:12.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:25:12.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:25:12.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:25:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:25:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.475395 -999.00  +22.00  10.29     22   -0.40 1 1 1 1 1   888    0 23.79 59.18 ----- 10.3 10.3 11.6 17.0 28.8 -27.3 28.1 -27.4 28.4 -24.5 28.9 -27.5
2025-11-17T13:25:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:25:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:25:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.475395
2025-11-17T13:25:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:25:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:25:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:25:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:25:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:25:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:25:05', tmtdew=27.05, humidity=15.95, cloud=0.0, wind=15.37, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:24:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:25:12.514 [DEBUG] [Thread-55050] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:25:12.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:25:12.610 [DEBUG] [Thread-55053] [transport.py] [_log()] starting thread (client mode): 0xd07cf700
2025-11-17T13:25:12.610 [DEBUG] [Thread-55053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:25:12.626 [DEBUG] [Thread-55053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:25:12.626 [INFO] [Thread-55053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:25:12.633 [DEBUG] [Thread-55053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] client lang: <none>
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] server lang: <none>
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] kex follows: False
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] Compression: none
2025-11-17T13:25:12.634 [DEBUG] [Thread-55053] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:25:12.693 [DEBUG] [Thread-55053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:25:12.693 [DEBUG] [Thread-55053] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:25:12.694 [DEBUG] [Thread-55053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:25:12.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:25:12.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:25:12.750 [DEBUG] [Thread-55053] [transport.py] [_log()] userauth is OK
2025-11-17T13:25:12.750 [DEBUG] [Thread-55053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:25:12.750 [DEBUG] [Thread-55053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:25:12.750 [DEBUG] [Thread-55053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:25:12.750 [DEBUG] [Thread-55053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:25:12.774 [INFO] [Thread-55053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:25:12.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:25:12.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:25:12.824 [DEBUG] [Thread-55055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:25:13.670 [DEBUG] [Thread-55053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:25:13.670 [DEBUG] [Thread-55053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:25:13.718 [DEBUG] [Thread-55053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:25:13.719 [DEBUG] [Thread-55053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:25:13.728 [DEBUG] [Thread-55053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:25:13.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:25:13.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:25:13.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:25:13.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:25:13.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:25:13.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:25:13.762 [DEBUG] [Thread-55053] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:25:17.324 [DEBUG] [Thread-55056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:25:32.365 [DEBUG] [Thread-55057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:25:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:25:43.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:25:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:25:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 25, 37), 26.8, 16.03, 0.0, 7.43, 22.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:25:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:25:37
2025-11-17T13:25:44.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:25:44.712 [DEBUG] [Thread-55058] [transport.py] [_log()] starting thread (client mode): 0xd0787be0
2025-11-17T13:25:44.712 [DEBUG] [Thread-55058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:25:44.732 [DEBUG] [Thread-55058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:25:44.732 [INFO] [Thread-55058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:25:44.735 [DEBUG] [Thread-55058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] client lang: <none>
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] server lang: <none>
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] kex follows: False
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] Compression: none
2025-11-17T13:25:44.736 [DEBUG] [Thread-55058] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:25:44.755 [DEBUG] [Thread-55058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:25:44.756 [DEBUG] [Thread-55058] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:25:44.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:25:44.757 [DEBUG] [Thread-55058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:25:44.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:25:44.759 [DEBUG] [Thread-55058] [transport.py] [_log()] userauth is OK
2025-11-17T13:25:44.759 [DEBUG] [Thread-55058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:25:44.759 [DEBUG] [Thread-55058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:25:44.759 [DEBUG] [Thread-55058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:25:44.759 [DEBUG] [Thread-55058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:25:44.782 [INFO] [Thread-55058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:25:44.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:25:45.430 [DEBUG] [Thread-55058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:25:45.430 [DEBUG] [Thread-55058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:25:45.430 [DEBUG] [Thread-55058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:25:45.471 [DEBUG] [Thread-55058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:25:45.472 [DEBUG] [Thread-55058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:25:45.474 [DEBUG] [Thread-55058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:25:45.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:25:45.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:25:45.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:25:45.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:25:45.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:25:45.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:25:45.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:25:45.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:25:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:25:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.475742 -999.00  +21.60  10.76     22   -0.50 1 1 1 1 1   888    0 24.26 55.59 ----- 10.8 10.8 352.0 19.1 28.6 -24.6 27.9 -28.8 28.1 -28.7 28.8 -22.8
2025-11-17T13:25:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:25:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:25:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.475742
2025-11-17T13:25:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:25:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:25:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:25:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:25:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:25:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:25:37', tmtdew=26.8, humidity=16.03, cloud=0.0, wind=7.43, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:25:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:25:45.500 [DEBUG] [Thread-55058] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:25:45.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:25:45.596 [DEBUG] [Thread-55061] [transport.py] [_log()] starting thread (client mode): 0xd07866e0
2025-11-17T13:25:45.597 [DEBUG] [Thread-55061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:25:45.612 [DEBUG] [Thread-55061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:25:45.612 [INFO] [Thread-55061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:25:45.619 [DEBUG] [Thread-55061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:25:45.620 [DEBUG] [Thread-55061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:25:45.620 [DEBUG] [Thread-55061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:25:45.620 [DEBUG] [Thread-55061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:25:45.620 [DEBUG] [Thread-55061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:25:45.620 [DEBUG] [Thread-55061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:25:45.620 [DEBUG] [Thread-55061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:25:45.620 [DEBUG] [Thread-55061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:25:45.620 [DEBUG] [Thread-55061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] client lang: <none>
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] server lang: <none>
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] kex follows: False
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] Compression: none
2025-11-17T13:25:45.621 [DEBUG] [Thread-55061] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:25:45.683 [DEBUG] [Thread-55061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:25:45.683 [DEBUG] [Thread-55061] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:25:45.683 [DEBUG] [Thread-55061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:25:45.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:25:45.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:25:45.741 [DEBUG] [Thread-55061] [transport.py] [_log()] userauth is OK
2025-11-17T13:25:45.742 [DEBUG] [Thread-55061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:25:45.742 [DEBUG] [Thread-55061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:25:45.742 [DEBUG] [Thread-55061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:25:45.742 [DEBUG] [Thread-55061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:25:45.761 [INFO] [Thread-55061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:25:45.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:25:45.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:25:46.652 [DEBUG] [Thread-55061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:25:46.652 [DEBUG] [Thread-55061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:25:46.700 [DEBUG] [Thread-55061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:25:46.700 [DEBUG] [Thread-55061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:25:46.709 [DEBUG] [Thread-55061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:25:46.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:25:46.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:25:46.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:25:46.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:25:46.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:25:46.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:25:46.744 [DEBUG] [Thread-55061] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:25:47.397 [DEBUG] [Thread-55063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:25:51.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:25:51.190 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:26:02.436 [DEBUG] [Thread-55064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:26:12.881 [DEBUG] [Thread-55065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:26:16.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:26:16.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:26:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:26:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 26, 9), 26.57, 16.29, 0.0, 9.88, 22.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:26:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:26:09
2025-11-17T13:26:17.459 [DEBUG] [Thread-55066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:26:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:26:17.694 [DEBUG] [Thread-55067] [transport.py] [_log()] starting thread (client mode): 0xd31520e0
2025-11-17T13:26:17.694 [DEBUG] [Thread-55067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:26:17.710 [DEBUG] [Thread-55067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:26:17.710 [INFO] [Thread-55067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:26:17.713 [DEBUG] [Thread-55067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:26:17.713 [DEBUG] [Thread-55067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:26:17.713 [DEBUG] [Thread-55067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:26:17.713 [DEBUG] [Thread-55067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:26:17.713 [DEBUG] [Thread-55067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:26:17.713 [DEBUG] [Thread-55067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:26:17.713 [DEBUG] [Thread-55067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:26:17.713 [DEBUG] [Thread-55067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] client lang: <none>
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] server lang: <none>
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] kex follows: False
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] Compression: none
2025-11-17T13:26:17.714 [DEBUG] [Thread-55067] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:26:17.729 [DEBUG] [Thread-55067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:26:17.730 [DEBUG] [Thread-55067] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:26:17.731 [DEBUG] [Thread-55067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:26:17.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:26:17.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:26:17.733 [DEBUG] [Thread-55067] [transport.py] [_log()] userauth is OK
2025-11-17T13:26:17.733 [DEBUG] [Thread-55067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:26:17.733 [DEBUG] [Thread-55067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:26:17.733 [DEBUG] [Thread-55067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:26:17.733 [DEBUG] [Thread-55067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:26:17.752 [INFO] [Thread-55067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:26:17.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:26:18.386 [DEBUG] [Thread-55067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:26:18.386 [DEBUG] [Thread-55067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:26:18.386 [DEBUG] [Thread-55067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:26:18.427 [DEBUG] [Thread-55067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:26:18.427 [DEBUG] [Thread-55067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:26:18.430 [DEBUG] [Thread-55067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:26:18.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:26:18.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:26:18.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:26:18.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:26:18.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:26:18.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:26:18.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:26:18.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:26:18.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:26:18.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.476089 -999.00  +21.70   8.65     22   -0.50 1 1 1 1 1   888    0 24.07 43.11 ----- 8.7 8.7 47.2 15.1 28.6 -28.9 28.1 -24.7 28.3 -23.8 28.8 -27.6
2025-11-17T13:26:18.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:26:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:26:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.476089
2025-11-17T13:26:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:26:18.455 [DEBUG] [Thread-55067] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:26:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:26:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:26:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:26:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:26:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:26:09', tmtdew=26.57, humidity=16.29, cloud=0.0, wind=9.88, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:25:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:26:18.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:26:18.555 [DEBUG] [Thread-55070] [transport.py] [_log()] starting thread (client mode): 0xd0723d00
2025-11-17T13:26:18.555 [DEBUG] [Thread-55070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:26:18.571 [DEBUG] [Thread-55070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:26:18.571 [INFO] [Thread-55070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:26:18.578 [DEBUG] [Thread-55070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:26:18.578 [DEBUG] [Thread-55070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] client lang: <none>
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] server lang: <none>
2025-11-17T13:26:18.579 [DEBUG] [Thread-55070] [transport.py] [_log()] kex follows: False
2025-11-17T13:26:18.580 [DEBUG] [Thread-55070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:26:18.580 [DEBUG] [Thread-55070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:26:18.580 [DEBUG] [Thread-55070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:26:18.580 [DEBUG] [Thread-55070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:26:18.580 [DEBUG] [Thread-55070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:26:18.580 [DEBUG] [Thread-55070] [transport.py] [_log()] Compression: none
2025-11-17T13:26:18.580 [DEBUG] [Thread-55070] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:26:18.642 [DEBUG] [Thread-55070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:26:18.643 [DEBUG] [Thread-55070] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:26:18.643 [DEBUG] [Thread-55070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:26:18.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:26:18.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:26:18.701 [DEBUG] [Thread-55070] [transport.py] [_log()] userauth is OK
2025-11-17T13:26:18.702 [DEBUG] [Thread-55070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:26:18.702 [DEBUG] [Thread-55070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:26:18.702 [DEBUG] [Thread-55070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:26:18.702 [DEBUG] [Thread-55070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:26:18.725 [INFO] [Thread-55070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:26:18.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:26:18.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:26:19.635 [DEBUG] [Thread-55070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:26:19.635 [DEBUG] [Thread-55070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:26:19.683 [DEBUG] [Thread-55070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:26:19.683 [DEBUG] [Thread-55070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:26:19.693 [DEBUG] [Thread-55070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:26:19.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:26:19.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:26:19.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:26:19.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:26:19.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:26:19.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:26:19.727 [DEBUG] [Thread-55070] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:26:32.489 [DEBUG] [Thread-55072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:26:47.534 [DEBUG] [Thread-55073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:26:49.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:26:49.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:26:49.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:26:50.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 26, 41), 26.44, 16.66, 0.0, 9.95, 22.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:26:50.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:26:41
2025-11-17T13:26:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:26:50.674 [DEBUG] [Thread-55074] [transport.py] [_log()] starting thread (client mode): 0xd3163a30
2025-11-17T13:26:50.674 [DEBUG] [Thread-55074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:26:50.694 [DEBUG] [Thread-55074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:26:50.695 [INFO] [Thread-55074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:26:50.698 [DEBUG] [Thread-55074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:26:50.698 [DEBUG] [Thread-55074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:26:50.698 [DEBUG] [Thread-55074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:26:50.698 [DEBUG] [Thread-55074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:26:50.698 [DEBUG] [Thread-55074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] client lang: <none>
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] server lang: <none>
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] kex follows: False
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] Compression: none
2025-11-17T13:26:50.699 [DEBUG] [Thread-55074] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:26:50.716 [DEBUG] [Thread-55074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:26:50.716 [DEBUG] [Thread-55074] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:26:50.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:26:50.717 [DEBUG] [Thread-55074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:26:50.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:26:50.720 [DEBUG] [Thread-55074] [transport.py] [_log()] userauth is OK
2025-11-17T13:26:50.720 [DEBUG] [Thread-55074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:26:50.720 [DEBUG] [Thread-55074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:26:50.720 [DEBUG] [Thread-55074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:26:50.720 [DEBUG] [Thread-55074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:26:50.744 [INFO] [Thread-55074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:26:50.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:26:51.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:26:51.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:26:51.357 [DEBUG] [Thread-55074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:26:51.357 [DEBUG] [Thread-55074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:26:51.358 [DEBUG] [Thread-55074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:26:51.398 [DEBUG] [Thread-55074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:26:51.398 [DEBUG] [Thread-55074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:26:51.401 [DEBUG] [Thread-55074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:26:51.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:26:51.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:26:51.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:26:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:26:51.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:26:51.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:26:51.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:26:51.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:26:51.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:26:51.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.476436 -999.00  +21.70   6.23     22   -0.40 1 1 1 1 1   888    0 24.40 39.99 ----- 6.2 6.2 39.4 9.1 28.3 -28.2 27.7 -27.6 27.9 -27.3 28.5 -27.1
2025-11-17T13:26:51.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:26:51.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:26:51.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.476436
2025-11-17T13:26:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:26:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:26:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:26:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:26:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:26:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:26:41', tmtdew=26.44, humidity=16.66, cloud=0.0, wind=9.95, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:26:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:26:51.425 [DEBUG] [Thread-55074] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:26:51.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:26:51.520 [DEBUG] [Thread-55077] [transport.py] [_log()] starting thread (client mode): 0xd31609d0
2025-11-17T13:26:51.520 [DEBUG] [Thread-55077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:26:51.537 [DEBUG] [Thread-55077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:26:51.537 [INFO] [Thread-55077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:26:51.544 [DEBUG] [Thread-55077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:26:51.545 [DEBUG] [Thread-55077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:26:51.545 [DEBUG] [Thread-55077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:26:51.545 [DEBUG] [Thread-55077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:26:51.545 [DEBUG] [Thread-55077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:26:51.545 [DEBUG] [Thread-55077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:26:51.545 [DEBUG] [Thread-55077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:26:51.545 [DEBUG] [Thread-55077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:26:51.545 [DEBUG] [Thread-55077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:26:51.546 [DEBUG] [Thread-55077] [transport.py] [_log()] client lang: <none>
2025-11-17T13:26:51.546 [DEBUG] [Thread-55077] [transport.py] [_log()] server lang: <none>
2025-11-17T13:26:51.546 [DEBUG] [Thread-55077] [transport.py] [_log()] kex follows: False
2025-11-17T13:26:51.546 [DEBUG] [Thread-55077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:26:51.546 [DEBUG] [Thread-55077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:26:51.546 [DEBUG] [Thread-55077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:26:51.546 [DEBUG] [Thread-55077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:26:51.546 [DEBUG] [Thread-55077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:26:51.547 [DEBUG] [Thread-55077] [transport.py] [_log()] Compression: none
2025-11-17T13:26:51.547 [DEBUG] [Thread-55077] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:26:51.605 [DEBUG] [Thread-55077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:26:51.606 [DEBUG] [Thread-55077] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:26:51.606 [DEBUG] [Thread-55077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:26:51.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:26:51.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:26:51.666 [DEBUG] [Thread-55077] [transport.py] [_log()] userauth is OK
2025-11-17T13:26:51.666 [DEBUG] [Thread-55077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:26:51.666 [DEBUG] [Thread-55077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:26:51.666 [DEBUG] [Thread-55077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:26:51.666 [DEBUG] [Thread-55077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:26:51.686 [INFO] [Thread-55077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:26:51.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:26:51.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:26:52.536 [DEBUG] [Thread-55077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:26:52.536 [DEBUG] [Thread-55077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:26:52.584 [DEBUG] [Thread-55077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:26:52.584 [DEBUG] [Thread-55077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:26:52.593 [DEBUG] [Thread-55077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:26:52.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:26:52.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:26:52.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:26:52.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:26:52.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:26:52.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:26:52.628 [DEBUG] [Thread-55077] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:27:02.564 [DEBUG] [Thread-55079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:27:12.931 [DEBUG] [Thread-55080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:27:17.611 [DEBUG] [Thread-55081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:27:22.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:27:22.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:27:22.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:27:23.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 27, 13), 26.38, 16.74, 0.0, 10.52, 22.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:27:23.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:27:13
2025-11-17T13:27:23.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:27:23.613 [DEBUG] [Thread-55082] [transport.py] [_log()] starting thread (client mode): 0xd07ce110
2025-11-17T13:27:23.613 [DEBUG] [Thread-55082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:27:23.630 [DEBUG] [Thread-55082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:27:23.630 [INFO] [Thread-55082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:27:23.631 [DEBUG] [Thread-55082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:27:23.631 [DEBUG] [Thread-55082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:27:23.631 [DEBUG] [Thread-55082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:27:23.631 [DEBUG] [Thread-55082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] client lang: <none>
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] server lang: <none>
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] kex follows: False
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] Compression: none
2025-11-17T13:27:23.632 [DEBUG] [Thread-55082] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:27:23.648 [DEBUG] [Thread-55082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:27:23.648 [DEBUG] [Thread-55082] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:27:23.648 [DEBUG] [Thread-55082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:27:23.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:27:23.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:27:23.649 [DEBUG] [Thread-55082] [transport.py] [_log()] userauth is OK
2025-11-17T13:27:23.649 [DEBUG] [Thread-55082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:27:23.650 [DEBUG] [Thread-55082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:27:23.650 [DEBUG] [Thread-55082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:27:23.650 [DEBUG] [Thread-55082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:27:23.663 [INFO] [Thread-55082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:27:23.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:27:24.241 [DEBUG] [Thread-55082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:27:24.241 [DEBUG] [Thread-55082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:27:24.241 [DEBUG] [Thread-55082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:27:24.282 [DEBUG] [Thread-55082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:27:24.282 [DEBUG] [Thread-55082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:27:24.285 [DEBUG] [Thread-55082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:27:24.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:27:24.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:27:24.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:27:24.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:27:24.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:27:24.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:27:24.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.476784 -999.00  +21.80  10.32     22   -0.40 1 1 1 1 1   888    0 23.34 34.39 ----- 10.3 10.3 313.2 14.5 28.5 -27.1 27.9 -23.6 28.1 -23.8 28.5 -28.0
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.476784
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:27:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:27:13', tmtdew=26.38, humidity=16.74, cloud=0.0, wind=10.52, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:26:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:27:24.303 [DEBUG] [Thread-55082] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:27:24.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:27:24.389 [DEBUG] [Thread-55085] [transport.py] [_log()] starting thread (client mode): 0xd07877c0
2025-11-17T13:27:24.390 [DEBUG] [Thread-55085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:27:24.404 [DEBUG] [Thread-55085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:27:24.404 [INFO] [Thread-55085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:27:24.411 [DEBUG] [Thread-55085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:27:24.411 [DEBUG] [Thread-55085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:27:24.411 [DEBUG] [Thread-55085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:27:24.411 [DEBUG] [Thread-55085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:27:24.411 [DEBUG] [Thread-55085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] client lang: <none>
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] server lang: <none>
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] kex follows: False
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] Compression: none
2025-11-17T13:27:24.412 [DEBUG] [Thread-55085] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:27:24.468 [DEBUG] [Thread-55085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:27:24.468 [DEBUG] [Thread-55085] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:27:24.469 [DEBUG] [Thread-55085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:27:24.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:27:24.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:27:24.529 [DEBUG] [Thread-55085] [transport.py] [_log()] userauth is OK
2025-11-17T13:27:24.529 [DEBUG] [Thread-55085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:27:24.529 [DEBUG] [Thread-55085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:27:24.529 [DEBUG] [Thread-55085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:27:24.529 [DEBUG] [Thread-55085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:27:24.544 [INFO] [Thread-55085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:27:24.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:27:24.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:27:25.398 [DEBUG] [Thread-55085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:27:25.399 [DEBUG] [Thread-55085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:27:25.447 [DEBUG] [Thread-55085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:27:25.447 [DEBUG] [Thread-55085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:27:25.455 [DEBUG] [Thread-55085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:27:25.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:27:25.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:27:25.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:27:25.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:27:25.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:27:25.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:27:25.491 [DEBUG] [Thread-55085] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:27:32.642 [DEBUG] [Thread-55087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:27:47.683 [DEBUG] [Thread-55088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:27:51.475 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:27:51.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:27:55.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:27:55.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:27:55.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:27:56.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 27, 45), 26.76, 16.11, 0.0, 15.26, 22.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:27:56.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:27:45
2025-11-17T13:27:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:27:56.458 [DEBUG] [Thread-55089] [transport.py] [_log()] starting thread (client mode): 0xd07cc1f0
2025-11-17T13:27:56.458 [DEBUG] [Thread-55089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:27:56.479 [DEBUG] [Thread-55089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:27:56.479 [INFO] [Thread-55089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:27:56.482 [DEBUG] [Thread-55089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:27:56.482 [DEBUG] [Thread-55089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:27:56.482 [DEBUG] [Thread-55089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:27:56.482 [DEBUG] [Thread-55089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:27:56.482 [DEBUG] [Thread-55089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:27:56.482 [DEBUG] [Thread-55089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:27:56.482 [DEBUG] [Thread-55089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:27:56.482 [DEBUG] [Thread-55089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] client lang: <none>
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] server lang: <none>
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] kex follows: False
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] Compression: none
2025-11-17T13:27:56.483 [DEBUG] [Thread-55089] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:27:56.501 [DEBUG] [Thread-55089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:27:56.502 [DEBUG] [Thread-55089] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:27:56.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:27:56.503 [DEBUG] [Thread-55089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:27:56.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:27:56.504 [DEBUG] [Thread-55089] [transport.py] [_log()] userauth is OK
2025-11-17T13:27:56.504 [DEBUG] [Thread-55089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:27:56.504 [DEBUG] [Thread-55089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:27:56.504 [DEBUG] [Thread-55089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:27:56.504 [DEBUG] [Thread-55089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:27:56.519 [INFO] [Thread-55089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:27:56.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:27:57.127 [DEBUG] [Thread-55089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:27:57.127 [DEBUG] [Thread-55089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:27:57.128 [DEBUG] [Thread-55089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:27:57.168 [DEBUG] [Thread-55089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:27:57.169 [DEBUG] [Thread-55089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:27:57.172 [DEBUG] [Thread-55089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:27:57.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:27:57.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:27:57.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:27:57.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:27:57.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:27:57.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:27:57.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:27:57.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:27:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:27:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.477131 -999.00  +21.90   6.36     22   -0.30 1 2 1 1 1   888    0 23.67 28.14 ----- 6.4 6.4 321.2 11.8 28.8 -23.9 28.1 -22.7 28.3 -21.7 28.9 -22.8
2025-11-17T13:27:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:27:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:27:57.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.477131
2025-11-17T13:27:57.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:27:57.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:27:57.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:27:57.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:27:57.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:27:57.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:27:45', tmtdew=26.76, humidity=16.11, cloud=0.0, wind=15.26, temperature=22.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:27:04.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:27:57.198 [DEBUG] [Thread-55089] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:27:57.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:27:57.293 [DEBUG] [Thread-55092] [transport.py] [_log()] starting thread (client mode): 0xd31346d0
2025-11-17T13:27:57.293 [DEBUG] [Thread-55092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:27:57.307 [DEBUG] [Thread-55092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:27:57.308 [INFO] [Thread-55092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] client lang: <none>
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] server lang: <none>
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] kex follows: False
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:27:57.315 [DEBUG] [Thread-55092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:27:57.316 [DEBUG] [Thread-55092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:27:57.316 [DEBUG] [Thread-55092] [transport.py] [_log()] Compression: none
2025-11-17T13:27:57.316 [DEBUG] [Thread-55092] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:27:57.375 [DEBUG] [Thread-55092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:27:57.376 [DEBUG] [Thread-55092] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:27:57.376 [DEBUG] [Thread-55092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:27:57.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:27:57.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:27:57.433 [DEBUG] [Thread-55092] [transport.py] [_log()] userauth is OK
2025-11-17T13:27:57.433 [DEBUG] [Thread-55092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:27:57.434 [DEBUG] [Thread-55092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:27:57.434 [DEBUG] [Thread-55092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:27:57.434 [DEBUG] [Thread-55092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:27:57.453 [INFO] [Thread-55092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:27:57.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:27:57.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:27:58.293 [DEBUG] [Thread-55092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:27:58.294 [DEBUG] [Thread-55092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:27:58.342 [DEBUG] [Thread-55092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:27:58.342 [DEBUG] [Thread-55092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:27:58.351 [DEBUG] [Thread-55092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:27:58.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:27:58.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')
2025-11-17T13:27:58.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:27:58.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:27:58.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:27:58.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:27:58.383 [DEBUG] [Thread-55092] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:28:02.712 [DEBUG] [Thread-55094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:28:12.987 [DEBUG] [Thread-55095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:28:17.748 [DEBUG] [Thread-55096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:28:28.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:28:28.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:28:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:28:29.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 28, 17), 26.66, 16.21, 0.0, 16.52, 22.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:28:29.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:28:17
2025-11-17T13:28:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:28:29.337 [DEBUG] [Thread-55097] [transport.py] [_log()] starting thread (client mode): 0xd07cc7c0
2025-11-17T13:28:29.337 [DEBUG] [Thread-55097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:28:29.357 [DEBUG] [Thread-55097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:28:29.357 [INFO] [Thread-55097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:28:29.360 [DEBUG] [Thread-55097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:28:29.360 [DEBUG] [Thread-55097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:28:29.360 [DEBUG] [Thread-55097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:28:29.360 [DEBUG] [Thread-55097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:28:29.360 [DEBUG] [Thread-55097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:28:29.360 [DEBUG] [Thread-55097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:28:29.360 [DEBUG] [Thread-55097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] client lang: <none>
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] server lang: <none>
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] kex follows: False
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] Compression: none
2025-11-17T13:28:29.361 [DEBUG] [Thread-55097] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:28:29.377 [DEBUG] [Thread-55097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:28:29.377 [DEBUG] [Thread-55097] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:28:29.378 [DEBUG] [Thread-55097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:28:29.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:28:29.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:28:29.380 [DEBUG] [Thread-55097] [transport.py] [_log()] userauth is OK
2025-11-17T13:28:29.380 [DEBUG] [Thread-55097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:28:29.380 [DEBUG] [Thread-55097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:28:29.380 [DEBUG] [Thread-55097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:28:29.380 [DEBUG] [Thread-55097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:28:29.404 [INFO] [Thread-55097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:28:29.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:28:30.059 [DEBUG] [Thread-55097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:28:30.060 [DEBUG] [Thread-55097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:28:30.060 [DEBUG] [Thread-55097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:28:30.100 [DEBUG] [Thread-55097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:28:30.100 [DEBUG] [Thread-55097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:28:30.103 [DEBUG] [Thread-55097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:28:30.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:28:30.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:28:30.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:28:30.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:28:30.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:28:30.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:28:30.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:28:30.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:28:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:28:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.477825 -999.00  +22.60  13.12     21   -0.20 1 1 1 1 1   888    0 23.21 17.46 ----- 13.1 13.1 313.8 17.2 28.7 -26.1 28.1 -26.7 28.1 -24.7 29.0 -24.6
2025-11-17T13:28:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:28:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:28:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.477825
2025-11-17T13:28:30.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:28:30.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:28:30.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:28:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:28:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:28:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:28:17', tmtdew=26.66, humidity=16.21, cloud=0.0, wind=16.52, temperature=22.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:28:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:28:30.128 [DEBUG] [Thread-55097] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:28:30.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:28:30.221 [DEBUG] [Thread-55100] [transport.py] [_log()] starting thread (client mode): 0xd07cd090
2025-11-17T13:28:30.221 [DEBUG] [Thread-55100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:28:30.240 [DEBUG] [Thread-55100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:28:30.240 [INFO] [Thread-55100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:28:30.247 [DEBUG] [Thread-55100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:28:30.247 [DEBUG] [Thread-55100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:28:30.247 [DEBUG] [Thread-55100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:28:30.247 [DEBUG] [Thread-55100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:28:30.247 [DEBUG] [Thread-55100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:28:30.247 [DEBUG] [Thread-55100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] client lang: <none>
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] server lang: <none>
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] kex follows: False
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] Compression: none
2025-11-17T13:28:30.248 [DEBUG] [Thread-55100] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:28:30.305 [DEBUG] [Thread-55100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:28:30.305 [DEBUG] [Thread-55100] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:28:30.306 [DEBUG] [Thread-55100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:28:30.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:28:30.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:28:30.361 [DEBUG] [Thread-55100] [transport.py] [_log()] userauth is OK
2025-11-17T13:28:30.361 [DEBUG] [Thread-55100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:28:30.361 [DEBUG] [Thread-55100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:28:30.362 [DEBUG] [Thread-55100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:28:30.362 [DEBUG] [Thread-55100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:28:30.381 [INFO] [Thread-55100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:28:30.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:28:30.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:28:31.241 [DEBUG] [Thread-55100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:28:31.241 [DEBUG] [Thread-55100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:28:31.288 [DEBUG] [Thread-55100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:28:31.288 [DEBUG] [Thread-55100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:28:31.297 [DEBUG] [Thread-55100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:28:31.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:28:31.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:28:31.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:28:31.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:28:31.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:28:31.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:28:31.332 [DEBUG] [Thread-55100] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:28:32.775 [DEBUG] [Thread-55102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:28:47.823 [DEBUG] [Thread-55103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:28:51.617 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:28:51.618 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:29:01.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:29:01.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:29:01.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:29:02.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 28, 49), 26.3, 16.66, 0.0, 16.13, 21.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:29:02.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:28:49
2025-11-17T13:29:02.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:29:02.300 [DEBUG] [Thread-55104] [transport.py] [_log()] starting thread (client mode): 0xd07ce800
2025-11-17T13:29:02.300 [DEBUG] [Thread-55104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:29:02.322 [DEBUG] [Thread-55104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:29:02.322 [INFO] [Thread-55104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:29:02.323 [DEBUG] [Thread-55104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:29:02.323 [DEBUG] [Thread-55104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:29:02.323 [DEBUG] [Thread-55104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:29:02.323 [DEBUG] [Thread-55104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:29:02.323 [DEBUG] [Thread-55104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:29:02.323 [DEBUG] [Thread-55104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:29:02.323 [DEBUG] [Thread-55104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] client lang: <none>
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] server lang: <none>
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] kex follows: False
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] Compression: none
2025-11-17T13:29:02.324 [DEBUG] [Thread-55104] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:29:02.333 [DEBUG] [Thread-55104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:29:02.333 [DEBUG] [Thread-55104] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:29:02.334 [DEBUG] [Thread-55104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:29:02.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:29:02.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:29:02.336 [DEBUG] [Thread-55104] [transport.py] [_log()] userauth is OK
2025-11-17T13:29:02.336 [DEBUG] [Thread-55104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:29:02.336 [DEBUG] [Thread-55104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:29:02.336 [DEBUG] [Thread-55104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:29:02.336 [DEBUG] [Thread-55104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:29:02.350 [INFO] [Thread-55104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:29:02.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:29:02.857 [DEBUG] [Thread-55106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:29:02.941 [DEBUG] [Thread-55104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:29:02.941 [DEBUG] [Thread-55104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:29:02.941 [DEBUG] [Thread-55104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:29:02.982 [DEBUG] [Thread-55104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:29:02.983 [DEBUG] [Thread-55104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:29:02.985 [DEBUG] [Thread-55104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:29:02.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:29:02.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:29:02.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:29:03.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:29:03.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:29:03.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:29:03.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:29:03.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:29:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:29:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.478172 -999.00  +22.50  11.06     22   -0.10 1 2 1 1 1   888    0 23.02 15.01 ----- 11.1 11.1 279.4 17.6 28.9 -24.4 28.2 -23.2 28.5 -22.3 29.2 -22.3
2025-11-17T13:29:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:29:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:29:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.478172
2025-11-17T13:29:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:29:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:29:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:29:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:29:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:29:03.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:28:49', tmtdew=26.3, humidity=16.66, cloud=0.0, wind=16.13, temperature=21.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:28:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:29:03.010 [DEBUG] [Thread-55104] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:29:03.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:29:03.106 [DEBUG] [Thread-55108] [transport.py] [_log()] starting thread (client mode): 0xd0759ea0
2025-11-17T13:29:03.106 [DEBUG] [Thread-55108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:29:03.122 [DEBUG] [Thread-55108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:29:03.122 [INFO] [Thread-55108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:29:03.129 [DEBUG] [Thread-55108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:29:03.129 [DEBUG] [Thread-55108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] client lang: <none>
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] server lang: <none>
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] kex follows: False
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:29:03.130 [DEBUG] [Thread-55108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:29:03.131 [DEBUG] [Thread-55108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:29:03.131 [DEBUG] [Thread-55108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:29:03.131 [DEBUG] [Thread-55108] [transport.py] [_log()] Compression: none
2025-11-17T13:29:03.131 [DEBUG] [Thread-55108] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:29:03.193 [DEBUG] [Thread-55108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:29:03.193 [DEBUG] [Thread-55108] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:29:03.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:29:03.194 [DEBUG] [Thread-55108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:29:03.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:29:03.249 [DEBUG] [Thread-55108] [transport.py] [_log()] userauth is OK
2025-11-17T13:29:03.249 [DEBUG] [Thread-55108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:29:03.249 [DEBUG] [Thread-55108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:29:03.249 [DEBUG] [Thread-55108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:29:03.249 [DEBUG] [Thread-55108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:29:03.271 [INFO] [Thread-55108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:29:03.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:29:03.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:29:04.152 [DEBUG] [Thread-55108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:29:04.152 [DEBUG] [Thread-55108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:29:04.199 [DEBUG] [Thread-55108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:29:04.199 [DEBUG] [Thread-55108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:29:04.208 [DEBUG] [Thread-55108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:29:04.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:29:04.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:29:04.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:29:04.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:29:04.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:29:04.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:29:04.242 [DEBUG] [Thread-55108] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:29:13.040 [DEBUG] [Thread-55110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:29:17.891 [DEBUG] [Thread-55111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:29:32.931 [DEBUG] [Thread-55112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:29:34.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:29:34.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:29:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:29:34.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 29, 21), 26.67, 16.25, 0.0, 16.37, 22.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:29:34.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:29:21
2025-11-17T13:29:35.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:29:35.184 [DEBUG] [Thread-55113] [transport.py] [_log()] starting thread (client mode): 0xd31b17b0
2025-11-17T13:29:35.184 [DEBUG] [Thread-55113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:29:35.203 [DEBUG] [Thread-55113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:29:35.203 [INFO] [Thread-55113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] client lang: <none>
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] server lang: <none>
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] kex follows: False
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] Compression: none
2025-11-17T13:29:35.206 [DEBUG] [Thread-55113] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:29:35.217 [DEBUG] [Thread-55113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:29:35.217 [DEBUG] [Thread-55113] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:29:35.217 [DEBUG] [Thread-55113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:29:35.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:29:35.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:29:35.218 [DEBUG] [Thread-55113] [transport.py] [_log()] userauth is OK
2025-11-17T13:29:35.218 [DEBUG] [Thread-55113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:29:35.218 [DEBUG] [Thread-55113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:29:35.218 [DEBUG] [Thread-55113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:29:35.218 [DEBUG] [Thread-55113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:29:35.233 [INFO] [Thread-55113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:29:35.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:29:35.877 [DEBUG] [Thread-55113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:29:35.877 [DEBUG] [Thread-55113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:29:35.877 [DEBUG] [Thread-55113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:29:35.917 [DEBUG] [Thread-55113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:29:35.918 [DEBUG] [Thread-55113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:29:35.921 [DEBUG] [Thread-55113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:29:35.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:29:35.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:29:35.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:29:35.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:29:35.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:29:35.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:29:35.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:29:35.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.478520 -999.00  +22.70  19.79     21   -0.10 1 1 1 1 1   888    0 22.89 9.94 ----- 19.8 19.8 297.0 22.4 29.1 -24.2 28.4 -23.2 28.4 -25.5 29.3 -23.5
2025-11-17T13:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.478520
2025-11-17T13:29:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:29:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:29:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:29:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:29:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:29:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:29:21', tmtdew=26.67, humidity=16.25, cloud=0.0, wind=16.37, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:29:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:29:35.946 [DEBUG] [Thread-55113] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:29:36.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:29:47.966 [DEBUG] [Thread-55116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:29:51.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:29:51.761 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:30:03.005 [DEBUG] [Thread-55117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:30:13.093 [DEBUG] [Thread-55118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:30:18.034 [DEBUG] [Thread-55119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:30:33.066 [DEBUG] [Thread-55120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:30:48.096 [DEBUG] [Thread-55121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:30:51.908 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:30:51.909 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:31:03.129 [DEBUG] [Thread-55122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:31:13.150 [DEBUG] [Thread-55123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:31:18.160 [DEBUG] [Thread-55124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:31:33.185 [DEBUG] [Thread-55125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:31:48.216 [DEBUG] [Thread-55126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:31:50.587 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T13:31:52.050 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:31:52.051 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:32:03.245 [DEBUG] [Thread-55127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:32:13.205 [DEBUG] [Thread-55128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:32:18.277 [DEBUG] [Thread-55129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:32:20.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:32:20.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:32:20.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:32:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 32, 1), 27.31, 16.04, 0.0, 20.41, 22.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:32:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:32:01
2025-11-17T13:32:21.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:32:21.558 [DEBUG] [Thread-55130] [transport.py] [_log()] starting thread (client mode): 0xd07210f0
2025-11-17T13:32:21.558 [DEBUG] [Thread-55130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:32:21.579 [DEBUG] [Thread-55130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:32:21.580 [INFO] [Thread-55130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] client lang: <none>
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] server lang: <none>
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] kex follows: False
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:32:21.584 [DEBUG] [Thread-55130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:32:21.585 [DEBUG] [Thread-55130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:32:21.585 [DEBUG] [Thread-55130] [transport.py] [_log()] Compression: none
2025-11-17T13:32:21.585 [DEBUG] [Thread-55130] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:32:21.603 [DEBUG] [Thread-55130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:32:21.603 [DEBUG] [Thread-55130] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:32:21.604 [DEBUG] [Thread-55130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:32:21.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:32:21.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:32:21.606 [DEBUG] [Thread-55130] [transport.py] [_log()] userauth is OK
2025-11-17T13:32:21.606 [DEBUG] [Thread-55130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:32:21.606 [DEBUG] [Thread-55130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:32:21.606 [DEBUG] [Thread-55130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:32:21.606 [DEBUG] [Thread-55130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:32:21.640 [INFO] [Thread-55130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:32:21.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:32:22.298 [DEBUG] [Thread-55130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:32:22.298 [DEBUG] [Thread-55130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:32:22.298 [DEBUG] [Thread-55130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:32:22.340 [DEBUG] [Thread-55130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:32:22.340 [DEBUG] [Thread-55130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:32:22.344 [DEBUG] [Thread-55130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:32:22.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:32:22.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:32:22.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:32:22.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:32:22.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:32:22.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:32:22.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:32:22.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:32:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:32:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.480255 -999.00  +21.80  18.90     22   -0.40 1 2 1 1 1   888    0 22.77 1.77 ----- 18.9 18.9 315.8 21.4 29.6 -23.6 28.8 -23.4 28.9 -21.5 29.8 -22.7
2025-11-17T13:32:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:32:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:32:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.480255
2025-11-17T13:32:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:32:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:32:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:32:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:32:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:32:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:32:01', tmtdew=27.31, humidity=16.04, cloud=0.0, wind=20.41, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:31:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:32:22.369 [DEBUG] [Thread-55130] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:32:22.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:32:22.465 [DEBUG] [Thread-55133] [transport.py] [_log()] starting thread (client mode): 0xd0721a20
2025-11-17T13:32:22.465 [DEBUG] [Thread-55133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:32:22.481 [DEBUG] [Thread-55133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:32:22.481 [INFO] [Thread-55133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:32:22.488 [DEBUG] [Thread-55133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:32:22.488 [DEBUG] [Thread-55133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:32:22.488 [DEBUG] [Thread-55133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:32:22.488 [DEBUG] [Thread-55133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] client lang: <none>
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] server lang: <none>
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] kex follows: False
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] Compression: none
2025-11-17T13:32:22.489 [DEBUG] [Thread-55133] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:32:22.548 [DEBUG] [Thread-55133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:32:22.549 [DEBUG] [Thread-55133] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:32:22.549 [DEBUG] [Thread-55133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:32:22.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:32:22.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:32:22.605 [DEBUG] [Thread-55133] [transport.py] [_log()] userauth is OK
2025-11-17T13:32:22.605 [DEBUG] [Thread-55133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:32:22.605 [DEBUG] [Thread-55133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:32:22.605 [DEBUG] [Thread-55133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:32:22.605 [DEBUG] [Thread-55133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:32:22.624 [INFO] [Thread-55133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:32:22.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:32:22.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:32:23.461 [DEBUG] [Thread-55133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:32:23.461 [DEBUG] [Thread-55133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:32:23.509 [DEBUG] [Thread-55133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:32:23.509 [DEBUG] [Thread-55133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:32:23.518 [DEBUG] [Thread-55133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:32:23.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:32:23.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:32:23.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:32:23.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:32:23.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:32:23.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:32:23.553 [DEBUG] [Thread-55133] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:32:33.304 [DEBUG] [Thread-55135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:32:48.348 [DEBUG] [Thread-55136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:32:52.191 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:32:52.193 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:32:53.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:32:53.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:32:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:32:54.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 32, 33), 27.39, 15.92, 0.0, 20.31, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:32:54.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:32:33
2025-11-17T13:32:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:32:54.517 [DEBUG] [Thread-55137] [transport.py] [_log()] starting thread (client mode): 0xd07bdcf0
2025-11-17T13:32:54.517 [DEBUG] [Thread-55137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:32:54.536 [DEBUG] [Thread-55137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:32:54.537 [INFO] [Thread-55137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:32:54.540 [DEBUG] [Thread-55137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:32:54.540 [DEBUG] [Thread-55137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:32:54.540 [DEBUG] [Thread-55137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:32:54.540 [DEBUG] [Thread-55137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:32:54.540 [DEBUG] [Thread-55137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:32:54.540 [DEBUG] [Thread-55137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:32:54.540 [DEBUG] [Thread-55137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:32:54.540 [DEBUG] [Thread-55137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] client lang: <none>
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] server lang: <none>
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] kex follows: False
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] Compression: none
2025-11-17T13:32:54.541 [DEBUG] [Thread-55137] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:32:54.560 [DEBUG] [Thread-55137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:32:54.561 [DEBUG] [Thread-55137] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:32:54.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:32:54.562 [DEBUG] [Thread-55137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:32:54.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:32:54.565 [DEBUG] [Thread-55137] [transport.py] [_log()] userauth is OK
2025-11-17T13:32:54.565 [DEBUG] [Thread-55137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:32:54.566 [DEBUG] [Thread-55137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:32:54.566 [DEBUG] [Thread-55137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:32:54.566 [DEBUG] [Thread-55137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:32:54.587 [INFO] [Thread-55137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:32:54.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:32:55.216 [DEBUG] [Thread-55137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:32:55.216 [DEBUG] [Thread-55137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:32:55.216 [DEBUG] [Thread-55137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:32:55.257 [DEBUG] [Thread-55137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:32:55.257 [DEBUG] [Thread-55137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:32:55.260 [DEBUG] [Thread-55137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:32:55.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:32:55.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:32:55.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:32:55.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:32:55.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:32:55.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:32:55.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:32:55.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:32:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:32:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.480603 -999.00  +21.80  27.05     22   -0.60 1 1 1 1 1   888    0 22.91 1.39 ----- 27.1 27.1 310.2 32.4 29.5 -24.1 28.8 -25.5 28.9 -24.1 29.7 -22.7
2025-11-17T13:32:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:32:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:32:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.480603
2025-11-17T13:32:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:32:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:32:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:32:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:32:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:32:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:32:33', tmtdew=27.39, humidity=15.92, cloud=0.0, wind=20.31, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:32:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:32:55.288 [DEBUG] [Thread-55137] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:32:55.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:32:55.386 [DEBUG] [Thread-55140] [transport.py] [_log()] starting thread (client mode): 0xd31b1000
2025-11-17T13:32:55.387 [DEBUG] [Thread-55140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:32:55.405 [DEBUG] [Thread-55140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:32:55.405 [INFO] [Thread-55140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] client lang: <none>
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] server lang: <none>
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] kex follows: False
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] Compression: none
2025-11-17T13:32:55.413 [DEBUG] [Thread-55140] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:32:55.473 [DEBUG] [Thread-55140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:32:55.474 [DEBUG] [Thread-55140] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:32:55.474 [DEBUG] [Thread-55140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:32:55.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:32:55.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:32:55.529 [DEBUG] [Thread-55140] [transport.py] [_log()] userauth is OK
2025-11-17T13:32:55.529 [DEBUG] [Thread-55140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:32:55.529 [DEBUG] [Thread-55140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:32:55.529 [DEBUG] [Thread-55140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:32:55.529 [DEBUG] [Thread-55140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:32:55.552 [INFO] [Thread-55140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:32:55.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:32:55.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:32:56.413 [DEBUG] [Thread-55140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:32:56.414 [DEBUG] [Thread-55140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:32:56.461 [DEBUG] [Thread-55140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:32:56.461 [DEBUG] [Thread-55140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:32:56.470 [DEBUG] [Thread-55140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:32:56.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:32:56.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:32:56.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:32:56.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:32:56.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:32:56.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:32:56.504 [DEBUG] [Thread-55140] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:33:03.382 [DEBUG] [Thread-55142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:33:13.249 [DEBUG] [Thread-55143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:33:18.424 [DEBUG] [Thread-55144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:33:26.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:33:26.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:33:26.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:33:27.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 33, 5), 27.0, 16.23, 0.0, 16.95, 22.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:33:27.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:33:05
2025-11-17T13:33:27.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:33:27.461 [DEBUG] [Thread-55145] [transport.py] [_log()] starting thread (client mode): 0xd0787370
2025-11-17T13:33:27.461 [DEBUG] [Thread-55145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:33:27.481 [DEBUG] [Thread-55145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:33:27.481 [INFO] [Thread-55145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] client lang: <none>
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] server lang: <none>
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] kex follows: False
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:33:27.484 [DEBUG] [Thread-55145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:33:27.485 [DEBUG] [Thread-55145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:33:27.485 [DEBUG] [Thread-55145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:33:27.485 [DEBUG] [Thread-55145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:33:27.485 [DEBUG] [Thread-55145] [transport.py] [_log()] Compression: none
2025-11-17T13:33:27.485 [DEBUG] [Thread-55145] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:33:27.501 [DEBUG] [Thread-55145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:33:27.502 [DEBUG] [Thread-55145] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:33:27.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:33:27.503 [DEBUG] [Thread-55145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:33:27.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:33:27.505 [DEBUG] [Thread-55145] [transport.py] [_log()] userauth is OK
2025-11-17T13:33:27.505 [DEBUG] [Thread-55145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:33:27.505 [DEBUG] [Thread-55145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:33:27.505 [DEBUG] [Thread-55145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:33:27.505 [DEBUG] [Thread-55145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:33:27.540 [INFO] [Thread-55145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:33:27.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:33:28.166 [DEBUG] [Thread-55145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:33:28.166 [DEBUG] [Thread-55145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:33:28.166 [DEBUG] [Thread-55145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:33:28.207 [DEBUG] [Thread-55145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:33:28.208 [DEBUG] [Thread-55145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:33:28.211 [DEBUG] [Thread-55145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:33:28.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:33:28.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:33:28.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:33:28.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:33:28.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:33:28.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:33:28.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:33:28.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:33:28.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:33:28.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.481297 -999.00  +22.10  21.38     21   -0.90 1 1 1 1 1   888    0 22.73 3.10 ----- 21.4 21.4 343.7 36.0 29.4 -25.7 28.6 -25.2 28.8 -24.0 29.6 -23.8
2025-11-17T13:33:28.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:33:28.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:33:28.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.481297
2025-11-17T13:33:28.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:33:28.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:33:28.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:33:28.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:33:28.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:33:28.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:33:05', tmtdew=27.0, humidity=16.23, cloud=0.0, wind=16.95, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:33:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:33:28.237 [DEBUG] [Thread-55145] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:33:28.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:33:33.457 [DEBUG] [Thread-55148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:33:48.497 [DEBUG] [Thread-55149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:33:52.333 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:33:52.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:34:03.526 [DEBUG] [Thread-55150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:34:13.303 [DEBUG] [Thread-55151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:34:18.563 [DEBUG] [Thread-55152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:34:33.589 [DEBUG] [Thread-55153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:34:48.625 [DEBUG] [Thread-55154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:34:52.474 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:34:52.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:35:03.656 [DEBUG] [Thread-55155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:35:13.361 [DEBUG] [Thread-55156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:35:18.686 [DEBUG] [Thread-55157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:35:33.720 [DEBUG] [Thread-55158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:35:39.963 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T13:35:48.751 [DEBUG] [Thread-55159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:35:52.617 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:35:52.618 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:36:03.778 [DEBUG] [Thread-55160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:36:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:36:09.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:36:09.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:36:10.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 35, 45), 27.5, 15.53, 0.0, 16.46, 22.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:36:10.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:35:45
2025-11-17T13:36:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:36:10.935 [DEBUG] [Thread-55161] [transport.py] [_log()] starting thread (client mode): 0xd31b0130
2025-11-17T13:36:10.935 [DEBUG] [Thread-55161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:36:10.954 [DEBUG] [Thread-55161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:36:10.955 [INFO] [Thread-55161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] client lang: <none>
2025-11-17T13:36:10.958 [DEBUG] [Thread-55161] [transport.py] [_log()] server lang: <none>
2025-11-17T13:36:10.959 [DEBUG] [Thread-55161] [transport.py] [_log()] kex follows: False
2025-11-17T13:36:10.959 [DEBUG] [Thread-55161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:36:10.959 [DEBUG] [Thread-55161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:36:10.959 [DEBUG] [Thread-55161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:36:10.959 [DEBUG] [Thread-55161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:36:10.959 [DEBUG] [Thread-55161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:36:10.959 [DEBUG] [Thread-55161] [transport.py] [_log()] Compression: none
2025-11-17T13:36:10.959 [DEBUG] [Thread-55161] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:36:10.976 [DEBUG] [Thread-55161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:36:10.977 [DEBUG] [Thread-55161] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:36:10.977 [DEBUG] [Thread-55161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:36:10.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:36:10.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:36:11.020 [DEBUG] [Thread-55161] [transport.py] [_log()] userauth is OK
2025-11-17T13:36:11.020 [DEBUG] [Thread-55161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:36:11.020 [DEBUG] [Thread-55161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:36:11.020 [DEBUG] [Thread-55161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:36:11.021 [DEBUG] [Thread-55161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:36:11.052 [INFO] [Thread-55161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:36:11.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:36:11.676 [DEBUG] [Thread-55161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:36:11.676 [DEBUG] [Thread-55161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:36:11.677 [DEBUG] [Thread-55161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:36:11.717 [DEBUG] [Thread-55161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:36:11.717 [DEBUG] [Thread-55161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:36:11.720 [DEBUG] [Thread-55161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:36:11.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:36:11.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:36:11.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:36:11.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:36:11.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:36:11.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:36:11.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:36:11.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:36:11.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:36:11.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.483033 -999.00  +21.90  13.10     21   -1.00 1 2 1 1 1   888    0 22.91 -0.25 ----- 13.1 13.1 17.1 24.8 28.9 -24.9 28.1 -23.6 28.7 -22.0 29.1 -24.1
2025-11-17T13:36:11.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:36:11.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:36:11.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.483033
2025-11-17T13:36:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:36:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:36:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:36:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:36:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:36:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:35:45', tmtdew=27.5, humidity=15.53, cloud=0.0, wind=16.46, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:35:34.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:36:11.743 [DEBUG] [Thread-55161] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:36:11.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:36:11.842 [DEBUG] [Thread-55164] [transport.py] [_log()] starting thread (client mode): 0xd31ce680
2025-11-17T13:36:11.842 [DEBUG] [Thread-55164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:36:11.857 [DEBUG] [Thread-55164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:36:11.858 [INFO] [Thread-55164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] client lang: <none>
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] server lang: <none>
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] kex follows: False
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:36:11.883 [DEBUG] [Thread-55164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:36:11.884 [DEBUG] [Thread-55164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:36:11.884 [DEBUG] [Thread-55164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:36:11.884 [DEBUG] [Thread-55164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:36:11.884 [DEBUG] [Thread-55164] [transport.py] [_log()] Compression: none
2025-11-17T13:36:11.884 [DEBUG] [Thread-55164] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:36:11.932 [DEBUG] [Thread-55164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:36:11.933 [DEBUG] [Thread-55164] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:36:11.933 [DEBUG] [Thread-55164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:36:11.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:36:11.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:36:11.993 [DEBUG] [Thread-55164] [transport.py] [_log()] userauth is OK
2025-11-17T13:36:11.993 [DEBUG] [Thread-55164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:36:11.993 [DEBUG] [Thread-55164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:36:11.993 [DEBUG] [Thread-55164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:36:11.994 [DEBUG] [Thread-55164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:36:12.026 [INFO] [Thread-55164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:36:12.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:36:12.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:36:12.886 [DEBUG] [Thread-55164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:36:12.886 [DEBUG] [Thread-55164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:36:12.934 [DEBUG] [Thread-55164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:36:12.935 [DEBUG] [Thread-55164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:36:12.946 [DEBUG] [Thread-55164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:36:12.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:36:12.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')
2025-11-17T13:36:12.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:36:12.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:36:12.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:36:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:36:12.987 [DEBUG] [Thread-55164] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:36:13.407 [DEBUG] [Thread-55166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:36:18.808 [DEBUG] [Thread-55167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:36:33.841 [DEBUG] [Thread-55168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:36:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:36:43.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:36:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:36:43.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 36, 17), 27.69, 15.35, 0.0, 19.41, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:36:43.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:36:17
2025-11-17T13:36:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:36:43.931 [DEBUG] [Thread-55169] [transport.py] [_log()] starting thread (client mode): 0xd31b01c0
2025-11-17T13:36:43.931 [DEBUG] [Thread-55169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:36:43.951 [DEBUG] [Thread-55169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:36:43.951 [INFO] [Thread-55169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] client lang: <none>
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] server lang: <none>
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] kex follows: False
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:36:43.955 [DEBUG] [Thread-55169] [transport.py] [_log()] Compression: none
2025-11-17T13:36:43.956 [DEBUG] [Thread-55169] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:36:43.972 [DEBUG] [Thread-55169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:36:43.973 [DEBUG] [Thread-55169] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:36:43.973 [DEBUG] [Thread-55169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:36:43.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:36:43.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:36:43.975 [DEBUG] [Thread-55169] [transport.py] [_log()] userauth is OK
2025-11-17T13:36:43.976 [DEBUG] [Thread-55169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:36:43.976 [DEBUG] [Thread-55169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:36:43.976 [DEBUG] [Thread-55169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:36:43.976 [DEBUG] [Thread-55169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:36:44.000 [INFO] [Thread-55169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:36:44.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:36:44.805 [DEBUG] [Thread-55169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:36:44.810 [DEBUG] [Thread-55169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:36:44.810 [DEBUG] [Thread-55169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:36:44.846 [DEBUG] [Thread-55169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:36:44.846 [DEBUG] [Thread-55169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:36:44.849 [DEBUG] [Thread-55169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:36:44.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:36:44.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:36:44.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:36:44.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:36:44.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:36:44.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:36:44.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:36:44.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:36:44.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:36:44.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.483381 -999.00  +22.70  23.90     20   -0.70 1 2 1 1 1   888    0 22.69 -0.15 ----- 23.9 23.9 335.4 30.8 29.1 -23.5 28.2 -22.5 28.8 -21.3 29.4 -22.9
2025-11-17T13:36:44.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:36:44.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:36:44.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.483381
2025-11-17T13:36:44.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:36:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:36:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:36:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:36:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:36:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:36:17', tmtdew=27.69, humidity=15.35, cloud=0.0, wind=19.41, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:36:04.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:36:44.875 [DEBUG] [Thread-55169] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:36:44.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:36:44.969 [DEBUG] [Thread-55172] [transport.py] [_log()] starting thread (client mode): 0xd0759a20
2025-11-17T13:36:44.969 [DEBUG] [Thread-55172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:36:44.985 [DEBUG] [Thread-55172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:36:44.985 [INFO] [Thread-55172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:36:44.992 [DEBUG] [Thread-55172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] client lang: <none>
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] server lang: <none>
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] kex follows: False
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] Compression: none
2025-11-17T13:36:44.993 [DEBUG] [Thread-55172] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:36:45.057 [DEBUG] [Thread-55172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:36:45.057 [DEBUG] [Thread-55172] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:36:45.058 [DEBUG] [Thread-55172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:36:45.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:36:45.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:36:45.113 [DEBUG] [Thread-55172] [transport.py] [_log()] userauth is OK
2025-11-17T13:36:45.113 [DEBUG] [Thread-55172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:36:45.113 [DEBUG] [Thread-55172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:36:45.113 [DEBUG] [Thread-55172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:36:45.113 [DEBUG] [Thread-55172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:36:45.132 [INFO] [Thread-55172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:36:45.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:36:45.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:36:46.004 [DEBUG] [Thread-55172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:36:46.005 [DEBUG] [Thread-55172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:36:46.052 [DEBUG] [Thread-55172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:36:46.052 [DEBUG] [Thread-55172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:36:46.061 [DEBUG] [Thread-55172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:36:46.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:36:46.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:36:46.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:36:46.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:36:46.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:36:46.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:36:46.096 [DEBUG] [Thread-55172] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:36:48.876 [DEBUG] [Thread-55174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:36:52.759 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:36:52.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:37:03.917 [DEBUG] [Thread-55175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:37:13.440 [DEBUG] [Thread-55176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:37:16.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:37:16.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:37: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
2025-11-17T13:37:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 36, 50), 28.29, 15.04, 0.0, 12.97, 23.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:37:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:36:50
2025-11-17T13:37:16.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:37:17.056 [DEBUG] [Thread-55177] [transport.py] [_log()] starting thread (client mode): 0xd078c310
2025-11-17T13:37:17.056 [DEBUG] [Thread-55177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:37:17.076 [DEBUG] [Thread-55177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:37:17.077 [INFO] [Thread-55177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] client lang: <none>
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] server lang: <none>
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] kex follows: False
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] Compression: none
2025-11-17T13:37:17.080 [DEBUG] [Thread-55177] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:37:17.098 [DEBUG] [Thread-55177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:37:17.098 [DEBUG] [Thread-55177] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:37:17.099 [DEBUG] [Thread-55177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:37:17.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:37:17.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:37:17.101 [DEBUG] [Thread-55177] [transport.py] [_log()] userauth is OK
2025-11-17T13:37:17.101 [DEBUG] [Thread-55177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:37:17.101 [DEBUG] [Thread-55177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:37:17.101 [DEBUG] [Thread-55177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:37:17.101 [DEBUG] [Thread-55177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:37:17.137 [INFO] [Thread-55177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:37:17.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:37:17.775 [DEBUG] [Thread-55177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:37:17.775 [DEBUG] [Thread-55177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:37:17.775 [DEBUG] [Thread-55177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:37:17.816 [DEBUG] [Thread-55177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:37:17.816 [DEBUG] [Thread-55177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:37:17.819 [DEBUG] [Thread-55177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:37:17.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:37:17.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:37:17.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:37:17.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:37:17.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:37:17.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:37:17.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:37:17.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:37:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:37:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.483728 -999.00  +22.50   9.44     20   -1.00 1 2 1 1 1   888    0 22.47 2.60 ----- 9.4 9.4 34.8 25.4 29.2 -23.7 28.4 -22.8 28.8 -22.7 29.6 -22.7
2025-11-17T13:37:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:37:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:37:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.483728
2025-11-17T13:37:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:37:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:37:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:37:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:37:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:37:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:36:50', tmtdew=28.29, humidity=15.04, cloud=0.0, wind=12.97, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:36:34.099', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:37:17.845 [DEBUG] [Thread-55177] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:37:17.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:37:17.941 [DEBUG] [Thread-55180] [transport.py] [_log()] starting thread (client mode): 0xd31cd900
2025-11-17T13:37:17.941 [DEBUG] [Thread-55180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:37:17.963 [DEBUG] [Thread-55180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:37:17.963 [INFO] [Thread-55180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:37:17.971 [DEBUG] [Thread-55180] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:37:17.971 [DEBUG] [Thread-55180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:37:17.971 [DEBUG] [Thread-55180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:37:17.971 [DEBUG] [Thread-55180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:37:17.971 [DEBUG] [Thread-55180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:37:17.971 [DEBUG] [Thread-55180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:37:17.971 [DEBUG] [Thread-55180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:37:17.971 [DEBUG] [Thread-55180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] client lang: <none>
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] server lang: <none>
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] kex follows: False
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] Compression: none
2025-11-17T13:37:17.972 [DEBUG] [Thread-55180] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:37:18.028 [DEBUG] [Thread-55180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:37:18.029 [DEBUG] [Thread-55180] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:37:18.029 [DEBUG] [Thread-55180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:37:18.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:37:18.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:37:18.088 [DEBUG] [Thread-55180] [transport.py] [_log()] userauth is OK
2025-11-17T13:37:18.088 [DEBUG] [Thread-55180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:37:18.088 [DEBUG] [Thread-55180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:37:18.089 [DEBUG] [Thread-55180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:37:18.089 [DEBUG] [Thread-55180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:37:18.109 [INFO] [Thread-55180] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:37:18.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:37:18.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:37:18.946 [DEBUG] [Thread-55182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:37:19.060 [DEBUG] [Thread-55180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:37:19.060 [DEBUG] [Thread-55180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:37:19.107 [DEBUG] [Thread-55180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:37:19.108 [DEBUG] [Thread-55180] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:37:19.117 [DEBUG] [Thread-55180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:37:19.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:37:19.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:37:19.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:37:19.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:37:19.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:37:19.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:37:19.151 [DEBUG] [Thread-55180] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:37:33.989 [DEBUG] [Thread-55183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:37:49.017 [DEBUG] [Thread-55184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:37:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:37:49.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:37:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:37:49.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 37, 22), 28.53, 14.75, 0.0, 10.94, 23.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:37:49.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:37:22
2025-11-17T13:37:49.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:37:50.111 [DEBUG] [Thread-55185] [transport.py] [_log()] starting thread (client mode): 0xd07197e0
2025-11-17T13:37:50.111 [DEBUG] [Thread-55185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:37:50.128 [DEBUG] [Thread-55185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:37:50.128 [INFO] [Thread-55185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] client lang: <none>
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] server lang: <none>
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] kex follows: False
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] Compression: none
2025-11-17T13:37:50.130 [DEBUG] [Thread-55185] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:37:50.138 [DEBUG] [Thread-55185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:37:50.139 [DEBUG] [Thread-55185] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:37:50.139 [DEBUG] [Thread-55185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:37:50.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:37:50.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:37:50.140 [DEBUG] [Thread-55185] [transport.py] [_log()] userauth is OK
2025-11-17T13:37:50.140 [DEBUG] [Thread-55185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:37:50.140 [DEBUG] [Thread-55185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:37:50.141 [DEBUG] [Thread-55185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:37:50.141 [DEBUG] [Thread-55185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:37:50.156 [INFO] [Thread-55185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:37:50.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:37:50.888 [DEBUG] [Thread-55185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:37:50.888 [DEBUG] [Thread-55185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:37:50.889 [DEBUG] [Thread-55185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:37:50.929 [DEBUG] [Thread-55185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:37:50.930 [DEBUG] [Thread-55185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:37:50.932 [DEBUG] [Thread-55185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:37:50.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:37:50.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:37:50.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:37:50.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:37:50.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:37:50.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:37:50.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:37:50.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:37:50.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:37:50.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.484075 -999.00  +22.30   9.64     20   -1.10 1 2 1 1 1   888    0 22.80 2.66 ----- 9.6 9.6 307.2 17.0 29.4 -23.6 28.6 -22.8 29.0 -22.8 29.8 -22.8
2025-11-17T13:37:50.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:37:50.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:37:50.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.484075
2025-11-17T13:37:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:37:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:37:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:37:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:37:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:37:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:37:22', tmtdew=28.53, humidity=14.75, cloud=0.0, wind=10.94, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:37:04.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:37:50.958 [DEBUG] [Thread-55185] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:37:51.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:37:51.054 [DEBUG] [Thread-55188] [transport.py] [_log()] starting thread (client mode): 0xd31ce620
2025-11-17T13:37:51.055 [DEBUG] [Thread-55188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:37:51.073 [DEBUG] [Thread-55188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:37:51.073 [INFO] [Thread-55188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:37:51.081 [DEBUG] [Thread-55188] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:37:51.081 [DEBUG] [Thread-55188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] client lang: <none>
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] server lang: <none>
2025-11-17T13:37:51.082 [DEBUG] [Thread-55188] [transport.py] [_log()] kex follows: False
2025-11-17T13:37:51.083 [DEBUG] [Thread-55188] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:37:51.083 [DEBUG] [Thread-55188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:37:51.083 [DEBUG] [Thread-55188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:37:51.083 [DEBUG] [Thread-55188] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:37:51.083 [DEBUG] [Thread-55188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:37:51.083 [DEBUG] [Thread-55188] [transport.py] [_log()] Compression: none
2025-11-17T13:37:51.083 [DEBUG] [Thread-55188] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:37:51.141 [DEBUG] [Thread-55188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:37:51.141 [DEBUG] [Thread-55188] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:37:51.142 [DEBUG] [Thread-55188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:37:51.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:37:51.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:37:51.201 [DEBUG] [Thread-55188] [transport.py] [_log()] userauth is OK
2025-11-17T13:37:51.201 [DEBUG] [Thread-55188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:37:51.201 [DEBUG] [Thread-55188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:37:51.201 [DEBUG] [Thread-55188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:37:51.201 [DEBUG] [Thread-55188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:37:51.221 [INFO] [Thread-55188] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:37:51.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:37:51.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:37:52.131 [DEBUG] [Thread-55188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:37:52.132 [DEBUG] [Thread-55188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:37:52.179 [DEBUG] [Thread-55188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:37:52.179 [DEBUG] [Thread-55188] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:37:52.188 [DEBUG] [Thread-55188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:37:52.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:37:52.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:37:52.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:37:52.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:37:52.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:37:52.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:37:52.223 [DEBUG] [Thread-55188] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:37:52.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:37:52.903 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:38:04.047 [DEBUG] [Thread-55190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:38:13.493 [DEBUG] [Thread-55191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:38:19.087 [DEBUG] [Thread-55192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:38:22.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:38:22.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:38:22.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:38:22.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 37, 54), 28.35, 14.53, 0.0, 7.11, 22.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:38:22.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:37:54
2025-11-17T13:38:23.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:38:23.228 [DEBUG] [Thread-55193] [transport.py] [_log()] starting thread (client mode): 0xd07bfd30
2025-11-17T13:38:23.228 [DEBUG] [Thread-55193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:38:23.248 [DEBUG] [Thread-55193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:38:23.248 [INFO] [Thread-55193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:38:23.251 [DEBUG] [Thread-55193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] client lang: <none>
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] server lang: <none>
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] kex follows: False
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] Compression: none
2025-11-17T13:38:23.252 [DEBUG] [Thread-55193] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:38:23.259 [DEBUG] [Thread-55193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:38:23.260 [DEBUG] [Thread-55193] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:38:23.260 [DEBUG] [Thread-55193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:38:23.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:38:23.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:38:23.261 [DEBUG] [Thread-55193] [transport.py] [_log()] userauth is OK
2025-11-17T13:38:23.261 [DEBUG] [Thread-55193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:38:23.261 [DEBUG] [Thread-55193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:38:23.261 [DEBUG] [Thread-55193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:38:23.261 [DEBUG] [Thread-55193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:38:23.270 [INFO] [Thread-55193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:38:23.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:38:23.894 [DEBUG] [Thread-55193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:38:23.895 [DEBUG] [Thread-55193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:38:23.895 [DEBUG] [Thread-55193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:38:23.935 [DEBUG] [Thread-55193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:38:23.935 [DEBUG] [Thread-55193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:38:23.938 [DEBUG] [Thread-55193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:38:23.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:38:23.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:38:23.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:38:23.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:38:23.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:38:23.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:38:23.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:38:23.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:38:23.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:38:23.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.484422 -999.00  +22.30   6.83     20   -1.10 1 2 1 1 1   888    0 22.87 1.13 ----- 6.8 6.8 327.6 12.2 29.6 -23.4 28.7 -22.3 29.1 -21.4 30.0 -22.5
2025-11-17T13:38:23.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:38:23.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:38:23.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.484422
2025-11-17T13:38:23.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:38:23.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:38:23.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:38:23.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:38:23.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:38:23.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:37:54', tmtdew=28.35, humidity=14.53, cloud=0.0, wind=7.11, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:37:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:38:23.963 [DEBUG] [Thread-55193] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:38:24.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:38:24.060 [DEBUG] [Thread-55196] [transport.py] [_log()] starting thread (client mode): 0xd0722080
2025-11-17T13:38:24.060 [DEBUG] [Thread-55196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:38:24.075 [DEBUG] [Thread-55196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:38:24.075 [INFO] [Thread-55196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:38:24.083 [DEBUG] [Thread-55196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:38:24.083 [DEBUG] [Thread-55196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:38:24.083 [DEBUG] [Thread-55196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:38:24.083 [DEBUG] [Thread-55196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:38:24.083 [DEBUG] [Thread-55196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:38:24.083 [DEBUG] [Thread-55196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] client lang: <none>
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] server lang: <none>
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] kex follows: False
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] Compression: none
2025-11-17T13:38:24.084 [DEBUG] [Thread-55196] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:38:24.144 [DEBUG] [Thread-55196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:38:24.144 [DEBUG] [Thread-55196] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:38:24.145 [DEBUG] [Thread-55196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:38:24.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:38:24.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:38:24.200 [DEBUG] [Thread-55196] [transport.py] [_log()] userauth is OK
2025-11-17T13:38:24.200 [DEBUG] [Thread-55196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:38:24.201 [DEBUG] [Thread-55196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:38:24.201 [DEBUG] [Thread-55196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:38:24.201 [DEBUG] [Thread-55196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:38:24.220 [INFO] [Thread-55196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:38:24.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:38:24.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:38:25.075 [DEBUG] [Thread-55196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:38:25.076 [DEBUG] [Thread-55196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:38:25.123 [DEBUG] [Thread-55196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:38:25.123 [DEBUG] [Thread-55196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:38:25.132 [DEBUG] [Thread-55196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:38:25.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:38:25.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:38:25.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:38:25.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:38:25.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:38:25.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:38:25.164 [DEBUG] [Thread-55196] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:38:34.117 [DEBUG] [Thread-55198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:38:49.162 [DEBUG] [Thread-55199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:38:53.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:38:53.046 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:38:55.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:38:55.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:38:55.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:38:55.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 38, 26), 28.33, 14.55, 0.0, 8.98, 22.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:38:55.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:38:26
2025-11-17T13:38:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:38:56.113 [DEBUG] [Thread-55200] [transport.py] [_log()] starting thread (client mode): 0xd0719840
2025-11-17T13:38:56.113 [DEBUG] [Thread-55200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:38:56.133 [DEBUG] [Thread-55200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:38:56.133 [INFO] [Thread-55200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:38:56.136 [DEBUG] [Thread-55200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] client lang: <none>
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] server lang: <none>
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] kex follows: False
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] Compression: none
2025-11-17T13:38:56.137 [DEBUG] [Thread-55200] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:38:56.153 [DEBUG] [Thread-55200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:38:56.154 [DEBUG] [Thread-55200] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:38:56.154 [DEBUG] [Thread-55200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:38:56.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:38:56.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:38:56.156 [DEBUG] [Thread-55200] [transport.py] [_log()] userauth is OK
2025-11-17T13:38:56.156 [DEBUG] [Thread-55200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:38:56.156 [DEBUG] [Thread-55200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:38:56.157 [DEBUG] [Thread-55200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:38:56.157 [DEBUG] [Thread-55200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:38:56.176 [INFO] [Thread-55200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:38:56.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:38:56.949 [DEBUG] [Thread-55200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:38:56.949 [DEBUG] [Thread-55200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:38:56.949 [DEBUG] [Thread-55200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:38:56.990 [DEBUG] [Thread-55200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:38:56.990 [DEBUG] [Thread-55200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:38:56.992 [DEBUG] [Thread-55200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:38:57.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:38:57.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:38:57.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:38:57.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:38:57.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:38:57.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:38:57.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.485117 -999.00  +22.50  14.03     21   -0.70 1 2 1 1 1   888    0 22.95 0.60 ----- 14.0 14.0 349.8 15.8 29.9 -23.5 29.0 -22.3 29.4 -21.4 30.4 -22.6
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.485117
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:38:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:38:26', tmtdew=28.33, humidity=14.55, cloud=0.0, wind=8.98, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:38:34.109', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:38:57.009 [DEBUG] [Thread-55200] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:38:57.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:38:57.095 [DEBUG] [Thread-55203] [transport.py] [_log()] starting thread (client mode): 0xd071ba60
2025-11-17T13:38:57.095 [DEBUG] [Thread-55203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:38:57.109 [DEBUG] [Thread-55203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:38:57.109 [INFO] [Thread-55203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] client lang: <none>
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] server lang: <none>
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] kex follows: False
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] Compression: none
2025-11-17T13:38:57.117 [DEBUG] [Thread-55203] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:38:57.175 [DEBUG] [Thread-55203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:38:57.175 [DEBUG] [Thread-55203] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:38:57.175 [DEBUG] [Thread-55203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:38:57.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:38:57.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:38:57.233 [DEBUG] [Thread-55203] [transport.py] [_log()] userauth is OK
2025-11-17T13:38:57.233 [DEBUG] [Thread-55203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:38:57.233 [DEBUG] [Thread-55203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:38:57.233 [DEBUG] [Thread-55203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:38:57.233 [DEBUG] [Thread-55203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:38:57.247 [INFO] [Thread-55203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:38:57.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:38:57.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:38:58.107 [DEBUG] [Thread-55203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:38:58.107 [DEBUG] [Thread-55203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:38:58.155 [DEBUG] [Thread-55203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:38:58.155 [DEBUG] [Thread-55203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:38:58.163 [DEBUG] [Thread-55203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:38:58.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:38:58.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:38:58.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:38:58.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:38:58.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:38:58.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:38:58.194 [DEBUG] [Thread-55203] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:39:04.191 [DEBUG] [Thread-55205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:39:13.546 [DEBUG] [Thread-55206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:39:19.231 [DEBUG] [Thread-55207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:39:28.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:39:28.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:39:28.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:39:28.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 38, 58), 28.13, 15.1, 0.0, 13.85, 22.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:39:28.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:38:58
2025-11-17T13:39:28.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:39:29.139 [DEBUG] [Thread-55208] [transport.py] [_log()] starting thread (client mode): 0xd0718bb0
2025-11-17T13:39:29.139 [DEBUG] [Thread-55208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:39:29.162 [DEBUG] [Thread-55208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:39:29.162 [INFO] [Thread-55208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:39:29.166 [DEBUG] [Thread-55208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] client lang: <none>
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] server lang: <none>
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] kex follows: False
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:39:29.167 [DEBUG] [Thread-55208] [transport.py] [_log()] Compression: none
2025-11-17T13:39:29.168 [DEBUG] [Thread-55208] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:39:29.185 [DEBUG] [Thread-55208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:39:29.185 [DEBUG] [Thread-55208] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:39:29.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:39:29.186 [DEBUG] [Thread-55208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:39:29.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:39:29.188 [DEBUG] [Thread-55208] [transport.py] [_log()] userauth is OK
2025-11-17T13:39:29.188 [DEBUG] [Thread-55208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:39:29.189 [DEBUG] [Thread-55208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:39:29.189 [DEBUG] [Thread-55208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:39:29.189 [DEBUG] [Thread-55208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:39:29.222 [INFO] [Thread-55208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:39:29.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:39:29.861 [DEBUG] [Thread-55208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:39:29.861 [DEBUG] [Thread-55208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:39:29.861 [DEBUG] [Thread-55208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:39:29.902 [DEBUG] [Thread-55208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:39:29.902 [DEBUG] [Thread-55208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:39:29.905 [DEBUG] [Thread-55208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:39:29.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:39:29.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:39:29.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:39:29.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:39:29.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:39:29.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:39:29.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:39:29.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:39:29.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:39:29.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.485464 -999.00  +22.70  21.46     20   -1.00 1 2 1 1 1   888    0 22.86 2.99 ----- 21.5 21.5 325.4 25.0 29.9 -24.2 29.0 -23.7 29.5 -22.1 30.3 -23.1
2025-11-17T13:39:29.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:39:29.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:39:29.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.485464
2025-11-17T13:39:29.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:39:29.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:39:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:39:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:39:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:39:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:38:58', tmtdew=28.13, humidity=15.1, cloud=0.0, wind=13.85, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:39:04.090', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:39:29.930 [DEBUG] [Thread-55208] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:39:30.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:39:30.025 [DEBUG] [Thread-55211] [transport.py] [_log()] starting thread (client mode): 0xd075bbe0
2025-11-17T13:39:30.025 [DEBUG] [Thread-55211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:39:30.043 [DEBUG] [Thread-55211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:39:30.043 [INFO] [Thread-55211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] client lang: <none>
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] server lang: <none>
2025-11-17T13:39:30.050 [DEBUG] [Thread-55211] [transport.py] [_log()] kex follows: False
2025-11-17T13:39:30.051 [DEBUG] [Thread-55211] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:39:30.051 [DEBUG] [Thread-55211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:39:30.051 [DEBUG] [Thread-55211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:39:30.051 [DEBUG] [Thread-55211] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:39:30.051 [DEBUG] [Thread-55211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:39:30.051 [DEBUG] [Thread-55211] [transport.py] [_log()] Compression: none
2025-11-17T13:39:30.051 [DEBUG] [Thread-55211] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:39:30.112 [DEBUG] [Thread-55211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:39:30.113 [DEBUG] [Thread-55211] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:39:30.113 [DEBUG] [Thread-55211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:39:30.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:39:30.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:39:30.168 [DEBUG] [Thread-55211] [transport.py] [_log()] userauth is OK
2025-11-17T13:39:30.168 [DEBUG] [Thread-55211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:39:30.168 [DEBUG] [Thread-55211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:39:30.169 [DEBUG] [Thread-55211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:39:30.169 [DEBUG] [Thread-55211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:39:30.187 [INFO] [Thread-55211] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:39:30.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:39:30.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:39:31.092 [DEBUG] [Thread-55211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:39:31.093 [DEBUG] [Thread-55211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:39:31.140 [DEBUG] [Thread-55211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:39:31.140 [DEBUG] [Thread-55211] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:39:31.148 [DEBUG] [Thread-55211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:39:31.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:39:31.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:39:31.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:39:31.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:39:31.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:39:31.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:39:31.179 [DEBUG] [Thread-55211] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:39:34.261 [DEBUG] [Thread-55213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:39:49.320 [DEBUG] [Thread-55214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:39:53.187 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:39:53.188 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:40:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:40:01.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:40:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:40:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 39, 30), 28.07, 15.15, 0.0, 19.44, 22.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:40:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:39:30
2025-11-17T13:40:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:40:02.150 [DEBUG] [Thread-55215] [transport.py] [_log()] starting thread (client mode): 0xd078cf10
2025-11-17T13:40:02.150 [DEBUG] [Thread-55215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:40:02.162 [DEBUG] [Thread-55215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:40:02.162 [INFO] [Thread-55215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] client lang: <none>
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] server lang: <none>
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] kex follows: False
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] Compression: none
2025-11-17T13:40:02.163 [DEBUG] [Thread-55215] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:40:02.170 [DEBUG] [Thread-55215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:40:02.170 [DEBUG] [Thread-55215] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:40:02.171 [DEBUG] [Thread-55215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:40:02.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:40:02.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:40:02.172 [DEBUG] [Thread-55215] [transport.py] [_log()] userauth is OK
2025-11-17T13:40:02.172 [DEBUG] [Thread-55215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:40:02.172 [DEBUG] [Thread-55215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:40:02.172 [DEBUG] [Thread-55215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:40:02.172 [DEBUG] [Thread-55215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:40:02.183 [INFO] [Thread-55215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:40:02.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:40:04.348 [DEBUG] [Thread-55217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:40:05.049 [DEBUG] [Thread-55215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:40:05.050 [DEBUG] [Thread-55215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:40:05.050 [DEBUG] [Thread-55215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:40:05.090 [DEBUG] [Thread-55215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:40:05.090 [DEBUG] [Thread-55215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:40:05.093 [DEBUG] [Thread-55215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:40:05.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:40:05.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:40:05.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:40:05.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:40:05.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:40:05.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:40:05.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:40:05.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:40:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:40:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.485811 -999.00  +23.00  28.29     20   -1.00 1 1 1 1 1   888    0 23.01 8.19 ----- 28.3 28.3 311.4 37.5 29.9 -23.4 29.1 -23.2 29.4 -23.4 30.4 -22.7
2025-11-17T13:40:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:40:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:40:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.485811
2025-11-17T13:40:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:40:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:40:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:40:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:40:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:40:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:39:30', tmtdew=28.07, humidity=15.15, cloud=0.0, wind=19.44, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:39:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:40:05.116 [DEBUG] [Thread-55215] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:40:05.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:40:05.215 [DEBUG] [Thread-55219] [transport.py] [_log()] starting thread (client mode): 0xd071ad40
2025-11-17T13:40:05.215 [DEBUG] [Thread-55219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:40:05.229 [DEBUG] [Thread-55219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:40:05.230 [INFO] [Thread-55219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:40:05.237 [DEBUG] [Thread-55219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:40:05.237 [DEBUG] [Thread-55219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] client lang: <none>
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] server lang: <none>
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] kex follows: False
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:40:05.238 [DEBUG] [Thread-55219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:40:05.239 [DEBUG] [Thread-55219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:40:05.239 [DEBUG] [Thread-55219] [transport.py] [_log()] Compression: none
2025-11-17T13:40:05.239 [DEBUG] [Thread-55219] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:40:05.296 [DEBUG] [Thread-55219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:40:05.297 [DEBUG] [Thread-55219] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:40:05.297 [DEBUG] [Thread-55219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:40:05.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:40:05.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:40:05.352 [DEBUG] [Thread-55219] [transport.py] [_log()] userauth is OK
2025-11-17T13:40:05.352 [DEBUG] [Thread-55219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:40:05.352 [DEBUG] [Thread-55219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:40:05.352 [DEBUG] [Thread-55219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:40:05.353 [DEBUG] [Thread-55219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:40:05.375 [INFO] [Thread-55219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:40:05.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:40:05.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:40:06.282 [DEBUG] [Thread-55219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:40:06.282 [DEBUG] [Thread-55219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:40:06.330 [DEBUG] [Thread-55219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:40:06.331 [DEBUG] [Thread-55219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:40:06.340 [DEBUG] [Thread-55219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:40:06.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:40: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')
2025-11-17T13:40:06.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:40:06.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:40:06.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:40:06.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:40:06.375 [DEBUG] [Thread-55219] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:40:13.590 [DEBUG] [Thread-55221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:40:19.376 [DEBUG] [Thread-55222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:40:34.418 [DEBUG] [Thread-55223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:40:36.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:40:36.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:40:36.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:40:37.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 40, 2), 28.41, 14.84, 0.0, 22.41, 22.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:40:37.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:40:02
2025-11-17T13:40:37.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:40:37.369 [DEBUG] [Thread-55224] [transport.py] [_log()] starting thread (client mode): 0xd31ee680
2025-11-17T13:40:37.369 [DEBUG] [Thread-55224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:40:37.389 [DEBUG] [Thread-55224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:40:37.389 [INFO] [Thread-55224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] client lang: <none>
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] server lang: <none>
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] kex follows: False
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:40:37.392 [DEBUG] [Thread-55224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:40:37.393 [DEBUG] [Thread-55224] [transport.py] [_log()] Compression: none
2025-11-17T13:40:37.393 [DEBUG] [Thread-55224] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:40:37.409 [DEBUG] [Thread-55224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:40:37.409 [DEBUG] [Thread-55224] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:40:37.410 [DEBUG] [Thread-55224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:40:37.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:40:37.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:40:37.412 [DEBUG] [Thread-55224] [transport.py] [_log()] userauth is OK
2025-11-17T13:40:37.412 [DEBUG] [Thread-55224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:40:37.412 [DEBUG] [Thread-55224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:40:37.412 [DEBUG] [Thread-55224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:40:37.412 [DEBUG] [Thread-55224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:40:37.435 [INFO] [Thread-55224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:40:37.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:40:38.086 [DEBUG] [Thread-55224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:40:38.086 [DEBUG] [Thread-55224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:40:38.086 [DEBUG] [Thread-55224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:40:38.127 [DEBUG] [Thread-55224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:40:38.127 [DEBUG] [Thread-55224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:40:38.131 [DEBUG] [Thread-55224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:40:38.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:40:38.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:40:38.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:40:38.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:40:38.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:40:38.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:40:38.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:40:38.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:40:38.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:40:38.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.486158 -999.00  +22.80  14.13     19   -1.30 1 2 1 1 1   888    0 23.41 14.46 ----- 14.1 14.1 16.7 28.3 29.8 -24.2 29.0 -23.7 29.4 -22.2 30.1 -26.7
2025-11-17T13:40:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:40:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:40:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.486158
2025-11-17T13:40:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:40:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:40:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:40:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:40:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T13:40:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:40:02', tmtdew=28.41, humidity=14.84, cloud=0.0, wind=22.41, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:40:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:40:38.157 [DEBUG] [Thread-55224] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:40:38.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:40:38.253 [DEBUG] [Thread-55227] [transport.py] [_log()] starting thread (client mode): 0xd31ed630
2025-11-17T13:40:38.253 [DEBUG] [Thread-55227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:40:38.267 [DEBUG] [Thread-55227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:40:38.268 [INFO] [Thread-55227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:40:38.275 [DEBUG] [Thread-55227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:40:38.275 [DEBUG] [Thread-55227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] client lang: <none>
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] server lang: <none>
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] kex follows: False
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:40:38.276 [DEBUG] [Thread-55227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:40:38.277 [DEBUG] [Thread-55227] [transport.py] [_log()] Compression: none
2025-11-17T13:40:38.277 [DEBUG] [Thread-55227] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:40:38.333 [DEBUG] [Thread-55227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:40:38.333 [DEBUG] [Thread-55227] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:40:38.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:40:38.334 [DEBUG] [Thread-55227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:40:38.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:40:38.389 [DEBUG] [Thread-55227] [transport.py] [_log()] userauth is OK
2025-11-17T13:40:38.389 [DEBUG] [Thread-55227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:40:38.389 [DEBUG] [Thread-55227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:40:38.389 [DEBUG] [Thread-55227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:40:38.389 [DEBUG] [Thread-55227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:40:38.408 [INFO] [Thread-55227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:40:38.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:40:38.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:40:39.247 [DEBUG] [Thread-55227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:40:39.248 [DEBUG] [Thread-55227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:40:39.295 [DEBUG] [Thread-55227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:40:39.295 [DEBUG] [Thread-55227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:40:39.304 [DEBUG] [Thread-55227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:40:39.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:40:39.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:40:39.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
2025-11-17T13:40:39.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:40:39.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:40:39.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:40:39.339 [DEBUG] [Thread-55227] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:40:49.452 [DEBUG] [Thread-55229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:40:53.330 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:40:53.330 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:41:04.490 [DEBUG] [Thread-55230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:41:09.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:41:09.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:41:09.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:41:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 41, 6), 28.95, 14.2, 0.0, 25.97, 23.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:41:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:41:06
2025-11-17T13:41:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:41:10.292 [DEBUG] [Thread-55231] [transport.py] [_log()] starting thread (client mode): 0xd0719840
2025-11-17T13:41:10.292 [DEBUG] [Thread-55231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:41:10.313 [DEBUG] [Thread-55231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:41:10.313 [INFO] [Thread-55231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] client lang: <none>
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] server lang: <none>
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] kex follows: False
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:41:10.314 [DEBUG] [Thread-55231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:41:10.315 [DEBUG] [Thread-55231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:41:10.315 [DEBUG] [Thread-55231] [transport.py] [_log()] Compression: none
2025-11-17T13:41:10.315 [DEBUG] [Thread-55231] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:41:10.334 [DEBUG] [Thread-55231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:41:10.334 [DEBUG] [Thread-55231] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:41:10.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:41:10.335 [DEBUG] [Thread-55231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:41:10.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:41:10.337 [DEBUG] [Thread-55231] [transport.py] [_log()] userauth is OK
2025-11-17T13:41:10.337 [DEBUG] [Thread-55231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:41:10.337 [DEBUG] [Thread-55231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:41:10.337 [DEBUG] [Thread-55231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:41:10.337 [DEBUG] [Thread-55231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:41:10.361 [INFO] [Thread-55231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:41:10.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:41:11.003 [DEBUG] [Thread-55231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:41:11.003 [DEBUG] [Thread-55231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:41:11.003 [DEBUG] [Thread-55231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:41:11.043 [DEBUG] [Thread-55231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:41:11.044 [DEBUG] [Thread-55231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:41:11.047 [DEBUG] [Thread-55231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:41:11.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:41:11.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:41:11.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:41:11.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:41:11.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:41:11.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:41:11.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:41:11.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:41:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:41:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.486506 -999.00  +23.60  25.26     19   -0.80 1 1 1 1 1   888    0 24.01 21.26 ----- 25.3 25.3 321.6 29.9 29.9 -23.8 29.1 -23.0 29.5 -23.5 30.4 -23.0
2025-11-17T13:41:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:41:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:41:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.486506
2025-11-17T13:41:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:41:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:41:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:41:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:41:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:41:11.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:41:06', tmtdew=28.95, humidity=14.2, cloud=0.0, wind=25.97, temperature=23.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:40:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:41:11.071 [DEBUG] [Thread-55231] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:41:11.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:41:11.165 [DEBUG] [Thread-55234] [transport.py] [_log()] starting thread (client mode): 0xd0718940
2025-11-17T13:41:11.166 [DEBUG] [Thread-55234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:41:11.180 [DEBUG] [Thread-55234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:41:11.180 [INFO] [Thread-55234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] client lang: <none>
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] server lang: <none>
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] kex follows: False
2025-11-17T13:41:11.188 [DEBUG] [Thread-55234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:41:11.189 [DEBUG] [Thread-55234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:41:11.189 [DEBUG] [Thread-55234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:41:11.189 [DEBUG] [Thread-55234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:41:11.189 [DEBUG] [Thread-55234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:41:11.189 [DEBUG] [Thread-55234] [transport.py] [_log()] Compression: none
2025-11-17T13:41:11.189 [DEBUG] [Thread-55234] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:41:11.248 [DEBUG] [Thread-55234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:41:11.248 [DEBUG] [Thread-55234] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:41:11.248 [DEBUG] [Thread-55234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:41:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:41:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:41:11.304 [DEBUG] [Thread-55234] [transport.py] [_log()] userauth is OK
2025-11-17T13:41:11.304 [DEBUG] [Thread-55234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:41:11.304 [DEBUG] [Thread-55234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:41:11.305 [DEBUG] [Thread-55234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:41:11.305 [DEBUG] [Thread-55234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:41:11.324 [INFO] [Thread-55234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:41:11.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:41:11.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:41:12.192 [DEBUG] [Thread-55234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:41:12.193 [DEBUG] [Thread-55234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:41:12.243 [DEBUG] [Thread-55234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:41:12.243 [DEBUG] [Thread-55234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:41:12.252 [DEBUG] [Thread-55234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:41:12.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:41:12.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:41:12.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:41:12.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:41:12.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:41:12.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:41:12.290 [DEBUG] [Thread-55234] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:41:13.644 [DEBUG] [Thread-55236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:41:19.520 [DEBUG] [Thread-55237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:41:34.559 [DEBUG] [Thread-55238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:41:42.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:41:42.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:41:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:41:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 41, 38), 28.65, 14.44, 0.0, 23.06, 22.86, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:41:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:41:38
2025-11-17T13:41:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:41:43.239 [DEBUG] [Thread-55239] [transport.py] [_log()] starting thread (client mode): 0xd075a560
2025-11-17T13:41:43.239 [DEBUG] [Thread-55239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:41:43.259 [DEBUG] [Thread-55239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:41:43.259 [INFO] [Thread-55239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:41:43.262 [DEBUG] [Thread-55239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] client lang: <none>
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] server lang: <none>
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] kex follows: False
2025-11-17T13:41:43.263 [DEBUG] [Thread-55239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:41:43.264 [DEBUG] [Thread-55239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:41:43.264 [DEBUG] [Thread-55239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:41:43.264 [DEBUG] [Thread-55239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:41:43.264 [DEBUG] [Thread-55239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:41:43.264 [DEBUG] [Thread-55239] [transport.py] [_log()] Compression: none
2025-11-17T13:41:43.264 [DEBUG] [Thread-55239] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:41:43.283 [DEBUG] [Thread-55239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:41:43.284 [DEBUG] [Thread-55239] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:41:43.285 [DEBUG] [Thread-55239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:41:43.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:41:43.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:41:43.286 [DEBUG] [Thread-55239] [transport.py] [_log()] userauth is OK
2025-11-17T13:41:43.287 [DEBUG] [Thread-55239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:41:43.287 [DEBUG] [Thread-55239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:41:43.287 [DEBUG] [Thread-55239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:41:43.287 [DEBUG] [Thread-55239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:41:43.304 [INFO] [Thread-55239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:41:43.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:41:43.949 [DEBUG] [Thread-55239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:41:43.949 [DEBUG] [Thread-55239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:41:43.949 [DEBUG] [Thread-55239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:41:43.991 [DEBUG] [Thread-55239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:41:43.991 [DEBUG] [Thread-55239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:41:43.994 [DEBUG] [Thread-55239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:41:44.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:41:44.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:41:44.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:41:44.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:41:44.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:41:44.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:41:44.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:41:44.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:41:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:41:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.486853 -999.00  +23.40  21.58     19   -1.20 1 1 1 1 1   888    0 23.75 25.89 ----- 21.6 21.6 313.2 33.5 29.7 -24.9 29.1 -23.7 29.1 -26.8 30.2 -24.1
2025-11-17T13:41:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:41:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:41:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.486853
2025-11-17T13:41:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:41:44.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:41:44.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:41:44.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:41:44.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:41:44.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:41:38', tmtdew=28.65, humidity=14.44, cloud=0.0, wind=23.06, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:41:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:41:44.016 [DEBUG] [Thread-55239] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:41:44.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:41:44.113 [DEBUG] [Thread-55242] [transport.py] [_log()] starting thread (client mode): 0xd078ce50
2025-11-17T13:41:44.114 [DEBUG] [Thread-55242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:41:44.129 [DEBUG] [Thread-55242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:41:44.129 [INFO] [Thread-55242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] client lang: <none>
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] server lang: <none>
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] kex follows: False
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:41:44.137 [DEBUG] [Thread-55242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:41:44.138 [DEBUG] [Thread-55242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:41:44.138 [DEBUG] [Thread-55242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:41:44.138 [DEBUG] [Thread-55242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:41:44.138 [DEBUG] [Thread-55242] [transport.py] [_log()] Compression: none
2025-11-17T13:41:44.138 [DEBUG] [Thread-55242] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:41:44.196 [DEBUG] [Thread-55242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:41:44.196 [DEBUG] [Thread-55242] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:41:44.196 [DEBUG] [Thread-55242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:41:44.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:41:44.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:41:44.252 [DEBUG] [Thread-55242] [transport.py] [_log()] userauth is OK
2025-11-17T13:41:44.252 [DEBUG] [Thread-55242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:41:44.252 [DEBUG] [Thread-55242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:41:44.252 [DEBUG] [Thread-55242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:41:44.252 [DEBUG] [Thread-55242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:41:44.271 [INFO] [Thread-55242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:41:44.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:41:44.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:41:45.146 [DEBUG] [Thread-55242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:41:45.146 [DEBUG] [Thread-55242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:41:45.193 [DEBUG] [Thread-55242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:41:45.193 [DEBUG] [Thread-55242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:41:45.202 [DEBUG] [Thread-55242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:41:45.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:41:45.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:41:45.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:41:45.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:41:45.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:41:45.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:41:45.237 [DEBUG] [Thread-55242] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:41:49.585 [DEBUG] [Thread-55244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:41:53.473 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:41:53.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:42:04.625 [DEBUG] [Thread-55245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:42:13.689 [DEBUG] [Thread-55246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:42:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:42:15.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:42:15.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:42:15.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 42, 10), 28.68, 14.4, 0.0, 27.7, 22.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:42:15.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:42:10
2025-11-17T13:42:16.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:42:16.181 [DEBUG] [Thread-55247] [transport.py] [_log()] starting thread (client mode): 0xd31ef6d0
2025-11-17T13:42:16.181 [DEBUG] [Thread-55247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:42:16.201 [DEBUG] [Thread-55247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:42:16.201 [INFO] [Thread-55247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:42:16.204 [DEBUG] [Thread-55247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:42:16.204 [DEBUG] [Thread-55247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:42:16.204 [DEBUG] [Thread-55247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:42:16.204 [DEBUG] [Thread-55247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:42:16.204 [DEBUG] [Thread-55247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:42:16.204 [DEBUG] [Thread-55247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:42:16.204 [DEBUG] [Thread-55247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] client lang: <none>
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] server lang: <none>
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] kex follows: False
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] Compression: none
2025-11-17T13:42:16.205 [DEBUG] [Thread-55247] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:42:16.222 [DEBUG] [Thread-55247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:42:16.223 [DEBUG] [Thread-55247] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:42:16.223 [DEBUG] [Thread-55247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:42:16.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:42:16.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:42:16.225 [DEBUG] [Thread-55247] [transport.py] [_log()] userauth is OK
2025-11-17T13:42:16.225 [DEBUG] [Thread-55247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:42:16.225 [DEBUG] [Thread-55247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:42:16.225 [DEBUG] [Thread-55247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:42:16.226 [DEBUG] [Thread-55247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:42:16.244 [INFO] [Thread-55247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:42:16.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:42:16.855 [DEBUG] [Thread-55247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:42:16.855 [DEBUG] [Thread-55247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:42:16.856 [DEBUG] [Thread-55247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:42:16.896 [DEBUG] [Thread-55247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:42:16.897 [DEBUG] [Thread-55247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:42:16.900 [DEBUG] [Thread-55247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:42:16.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:42:16.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:42:16.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:42:16.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:42:16.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:42:16.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:42:16.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:42:16.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:42:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:42:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.487200 -999.00  +23.10  30.02     19   -1.20 1 1 2 1 1   888    0 23.81 28.72 ----- 30.0 30.0 293.0 36.6 29.6 -25.6 29.0 -23.7 29.1 -28.1 30.1 -24.3
2025-11-17T13:42:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:42:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:42:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.487200
2025-11-17T13:42:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:42:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:42:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:42:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:42:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:42:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:42:10', tmtdew=28.68, humidity=14.4, cloud=0.0, wind=27.7, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:41:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:42:16.925 [DEBUG] [Thread-55247] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:42:17.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:42:17.022 [DEBUG] [Thread-55250] [transport.py] [_log()] starting thread (client mode): 0xd3137eb0
2025-11-17T13:42:17.023 [DEBUG] [Thread-55250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:42:17.037 [DEBUG] [Thread-55250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:42:17.037 [INFO] [Thread-55250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:42:17.044 [DEBUG] [Thread-55250] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:42:17.044 [DEBUG] [Thread-55250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:42:17.044 [DEBUG] [Thread-55250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] client lang: <none>
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] server lang: <none>
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] kex follows: False
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] Compression: none
2025-11-17T13:42:17.045 [DEBUG] [Thread-55250] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:42:17.104 [DEBUG] [Thread-55250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:42:17.104 [DEBUG] [Thread-55250] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:42:17.105 [DEBUG] [Thread-55250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:42:17.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:42:17.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:42:17.160 [DEBUG] [Thread-55250] [transport.py] [_log()] userauth is OK
2025-11-17T13:42:17.160 [DEBUG] [Thread-55250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:42:17.160 [DEBUG] [Thread-55250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:42:17.161 [DEBUG] [Thread-55250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:42:17.161 [DEBUG] [Thread-55250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:42:17.180 [INFO] [Thread-55250] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:42:17.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:42:17.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:42:18.048 [DEBUG] [Thread-55250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:42:18.048 [DEBUG] [Thread-55250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:42:18.096 [DEBUG] [Thread-55250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:42:18.096 [DEBUG] [Thread-55250] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:42:18.105 [DEBUG] [Thread-55250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:42:18.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:42:18.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:42:18.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:42:18.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:42:18.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:42:18.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:42:18.140 [DEBUG] [Thread-55250] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:42:19.654 [DEBUG] [Thread-55252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:42:34.700 [DEBUG] [Thread-55253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:42:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:42:48.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:42:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:42:48.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 42, 42), 28.59, 14.44, 0.0, 26.45, 23.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:42:48.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:42:42
2025-11-17T13:42:48.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:42:49.138 [DEBUG] [Thread-55254] [transport.py] [_log()] starting thread (client mode): 0xd078ffd0
2025-11-17T13:42:49.138 [DEBUG] [Thread-55254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:42:49.158 [DEBUG] [Thread-55254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:42:49.158 [INFO] [Thread-55254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] client lang: <none>
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] server lang: <none>
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] kex follows: False
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] Compression: none
2025-11-17T13:42:49.161 [DEBUG] [Thread-55254] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:42:49.176 [DEBUG] [Thread-55254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:42:49.176 [DEBUG] [Thread-55254] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:42:49.177 [DEBUG] [Thread-55254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:42:49.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:42:49.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:42:49.177 [DEBUG] [Thread-55254] [transport.py] [_log()] userauth is OK
2025-11-17T13:42:49.177 [DEBUG] [Thread-55254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:42:49.177 [DEBUG] [Thread-55254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:42:49.177 [DEBUG] [Thread-55254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:42:49.177 [DEBUG] [Thread-55254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:42:49.187 [INFO] [Thread-55254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:42:49.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:42:49.730 [DEBUG] [Thread-55256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:42:49.775 [DEBUG] [Thread-55254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:42:49.775 [DEBUG] [Thread-55254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:42:49.775 [DEBUG] [Thread-55254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:42:49.816 [DEBUG] [Thread-55254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:42:49.816 [DEBUG] [Thread-55254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:42:49.818 [DEBUG] [Thread-55254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:42:49.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:42:49.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:42:49.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:42:49.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:42:49.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:42:49.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:42:49.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:42:49.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:42:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:42:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.487547 -999.00  +23.20  27.43     19   -1.00 1 1 1 1 1   888    0 23.90 29.75 ----- 27.4 27.4 311.6 31.8 29.7 -24.4 29.0 -24.4 29.2 -23.1 30.1 -23.7
2025-11-17T13:42:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:42:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:42:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.487547
2025-11-17T13:42:49.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:42:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:42:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:42:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:42:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:42:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:42:42', tmtdew=28.59, humidity=14.44, cloud=0.0, wind=26.45, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:42:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:42:49.837 [DEBUG] [Thread-55254] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:42:49.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:42:49.923 [DEBUG] [Thread-55258] [transport.py] [_log()] starting thread (client mode): 0xd0719b40
2025-11-17T13:42:49.923 [DEBUG] [Thread-55258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:42:49.938 [DEBUG] [Thread-55258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:42:49.938 [INFO] [Thread-55258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] client lang: <none>
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] server lang: <none>
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] kex follows: False
2025-11-17T13:42:49.945 [DEBUG] [Thread-55258] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:42:49.946 [DEBUG] [Thread-55258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:42:49.946 [DEBUG] [Thread-55258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:42:49.946 [DEBUG] [Thread-55258] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:42:49.946 [DEBUG] [Thread-55258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:42:49.946 [DEBUG] [Thread-55258] [transport.py] [_log()] Compression: none
2025-11-17T13:42:49.946 [DEBUG] [Thread-55258] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:42:50.007 [DEBUG] [Thread-55258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:42:50.008 [DEBUG] [Thread-55258] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:42:50.008 [DEBUG] [Thread-55258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:42:50.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:42:50.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:42:50.064 [DEBUG] [Thread-55258] [transport.py] [_log()] userauth is OK
2025-11-17T13:42:50.064 [DEBUG] [Thread-55258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:42:50.064 [DEBUG] [Thread-55258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:42:50.064 [DEBUG] [Thread-55258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:42:50.064 [DEBUG] [Thread-55258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:42:50.081 [INFO] [Thread-55258] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:42:50.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:42:50.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:42:50.938 [DEBUG] [Thread-55258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:42:50.938 [DEBUG] [Thread-55258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:42:50.986 [DEBUG] [Thread-55258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:42:50.986 [DEBUG] [Thread-55258] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:42:50.995 [DEBUG] [Thread-55258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:42:51.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:42:51.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:42:51.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:42:51.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:42:51.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:42:51.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:42:51.027 [DEBUG] [Thread-55258] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:42:53.627 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:42:53.628 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:43:04.756 [DEBUG] [Thread-55260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:43:13.740 [DEBUG] [Thread-55261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:43:19.801 [DEBUG] [Thread-55262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:43:21.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:43:21.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:43:21.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:43:21.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 43, 14), 28.94, 14.15, 0.0, 25.87, 23.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:43:21.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:43:14
2025-11-17T13:43:21.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:43:21.984 [DEBUG] [Thread-55263] [transport.py] [_log()] starting thread (client mode): 0xd078cb80
2025-11-17T13:43:21.984 [DEBUG] [Thread-55263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:43:22.006 [DEBUG] [Thread-55263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:43:22.006 [INFO] [Thread-55263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:43:22.010 [DEBUG] [Thread-55263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:43:22.010 [DEBUG] [Thread-55263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:43:22.010 [DEBUG] [Thread-55263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:43:22.010 [DEBUG] [Thread-55263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:43:22.010 [DEBUG] [Thread-55263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:43:22.010 [DEBUG] [Thread-55263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:43:22.010 [DEBUG] [Thread-55263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:43:22.010 [DEBUG] [Thread-55263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] client lang: <none>
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] server lang: <none>
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] kex follows: False
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:43:22.011 [DEBUG] [Thread-55263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:43:22.012 [DEBUG] [Thread-55263] [transport.py] [_log()] Compression: none
2025-11-17T13:43:22.012 [DEBUG] [Thread-55263] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:43:22.029 [DEBUG] [Thread-55263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:43:22.029 [DEBUG] [Thread-55263] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:43:22.030 [DEBUG] [Thread-55263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:43:22.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:43:22.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:43:22.032 [DEBUG] [Thread-55263] [transport.py] [_log()] userauth is OK
2025-11-17T13:43:22.032 [DEBUG] [Thread-55263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:43:22.032 [DEBUG] [Thread-55263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:43:22.032 [DEBUG] [Thread-55263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:43:22.032 [DEBUG] [Thread-55263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:43:22.068 [INFO] [Thread-55263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:43:22.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:43:22.639 [DEBUG] [Thread-55263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:43:22.639 [DEBUG] [Thread-55263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:43:22.639 [DEBUG] [Thread-55263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:43:22.681 [DEBUG] [Thread-55263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:43:22.681 [DEBUG] [Thread-55263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:43:22.684 [DEBUG] [Thread-55263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:43:22.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:43:22.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:43:22.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:43:22.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:43:22.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:43:22.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:43:22.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:43:22.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:43:22.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:43:22.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.487895 -999.00  +23.50  24.54     19   -1.10 1 1 1 1 1   888    0 24.04 34.05 ----- 24.5 24.5 306.4 33.9 29.7 -25.7 29.1 -23.9 29.4 -23.3 30.1 -24.3
2025-11-17T13:43:22.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:43:22.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:43:22.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.487895
2025-11-17T13:43:22.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:43:22.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:43:22.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:43:22.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:43:22.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:43:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:43:14', tmtdew=28.94, humidity=14.15, cloud=0.0, wind=25.87, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:42:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:43:22.708 [DEBUG] [Thread-55263] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:43:22.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:43:22.804 [DEBUG] [Thread-55266] [transport.py] [_log()] starting thread (client mode): 0xd3163a30
2025-11-17T13:43:22.804 [DEBUG] [Thread-55266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:43:22.819 [DEBUG] [Thread-55266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:43:22.819 [INFO] [Thread-55266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:43:22.826 [DEBUG] [Thread-55266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:43:22.826 [DEBUG] [Thread-55266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] client lang: <none>
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] server lang: <none>
2025-11-17T13:43:22.827 [DEBUG] [Thread-55266] [transport.py] [_log()] kex follows: False
2025-11-17T13:43:22.828 [DEBUG] [Thread-55266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:43:22.828 [DEBUG] [Thread-55266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:43:22.828 [DEBUG] [Thread-55266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:43:22.828 [DEBUG] [Thread-55266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:43:22.828 [DEBUG] [Thread-55266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:43:22.828 [DEBUG] [Thread-55266] [transport.py] [_log()] Compression: none
2025-11-17T13:43:22.828 [DEBUG] [Thread-55266] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:43:22.884 [DEBUG] [Thread-55266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:43:22.885 [DEBUG] [Thread-55266] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:43:22.885 [DEBUG] [Thread-55266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:43:22.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:43:22.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:43:22.940 [DEBUG] [Thread-55266] [transport.py] [_log()] userauth is OK
2025-11-17T13:43:22.940 [DEBUG] [Thread-55266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:43:22.940 [DEBUG] [Thread-55266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:43:22.940 [DEBUG] [Thread-55266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:43:22.940 [DEBUG] [Thread-55266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:43:22.960 [INFO] [Thread-55266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:43:22.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:43:22.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:43:23.825 [DEBUG] [Thread-55266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:43:23.825 [DEBUG] [Thread-55266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:43:23.873 [DEBUG] [Thread-55266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:43:23.873 [DEBUG] [Thread-55266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:43:23.882 [DEBUG] [Thread-55266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:43:23.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:43:23.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:43:23.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:43:23.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:43:23.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:43:23.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:43:23.918 [DEBUG] [Thread-55266] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:43:34.831 [DEBUG] [Thread-55268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:43:49.875 [DEBUG] [Thread-55269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:43:53.770 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:43:53.771 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:43:53.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:43:53.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:43:53.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:43:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 43, 46), 29.17, 13.79, 0.0, 22.27, 23.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:43:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:43:46
2025-11-17T13:43:54.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:43:54.866 [DEBUG] [Thread-55270] [transport.py] [_log()] starting thread (client mode): 0xd3160c10
2025-11-17T13:43:54.866 [DEBUG] [Thread-55270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:43:54.887 [DEBUG] [Thread-55270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:43:54.887 [INFO] [Thread-55270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:43:54.890 [DEBUG] [Thread-55270] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:43:54.890 [DEBUG] [Thread-55270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:43:54.890 [DEBUG] [Thread-55270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:43:54.890 [DEBUG] [Thread-55270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] client lang: <none>
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] server lang: <none>
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] kex follows: False
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] Compression: none
2025-11-17T13:43:54.891 [DEBUG] [Thread-55270] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:43:54.908 [DEBUG] [Thread-55270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:43:54.909 [DEBUG] [Thread-55270] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:43:54.909 [DEBUG] [Thread-55270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:43:54.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:43:54.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:43:54.911 [DEBUG] [Thread-55270] [transport.py] [_log()] userauth is OK
2025-11-17T13:43:54.911 [DEBUG] [Thread-55270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:43:54.912 [DEBUG] [Thread-55270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:43:54.912 [DEBUG] [Thread-55270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:43:54.912 [DEBUG] [Thread-55270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:43:54.929 [INFO] [Thread-55270] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:43:54.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:43:55.574 [DEBUG] [Thread-55270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:43:55.574 [DEBUG] [Thread-55270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:43:55.575 [DEBUG] [Thread-55270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:43:55.615 [DEBUG] [Thread-55270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:43:55.615 [DEBUG] [Thread-55270] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:43:55.619 [DEBUG] [Thread-55270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:43:55.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:43:55.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:43:55.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:43:55.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:43:55.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:43:55.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:43:55.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:43:55.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:43:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:43:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.488589 -999.00  +23.30  21.18     19   -1.00 1 1 1 1 1   888    0 24.13 38.22 ----- 21.2 21.2 311.2 29.9 29.8 -24.8 29.1 -23.5 29.4 -23.3 30.1 -23.9
2025-11-17T13:43:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:43:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:43:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.488589
2025-11-17T13:43:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:43:55.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:43:55.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:43:55.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:43:55.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:43:55.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:43:46', tmtdew=29.17, humidity=13.79, cloud=0.0, wind=22.27, temperature=23.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:43:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:43:55.645 [DEBUG] [Thread-55270] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:43:55.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:43:55.742 [DEBUG] [Thread-55273] [transport.py] [_log()] starting thread (client mode): 0xd31ee7a0
2025-11-17T13:43:55.742 [DEBUG] [Thread-55273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:43:55.757 [DEBUG] [Thread-55273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:43:55.757 [INFO] [Thread-55273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:43:55.764 [DEBUG] [Thread-55273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] client lang: <none>
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] server lang: <none>
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] kex follows: False
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] Compression: none
2025-11-17T13:43:55.765 [DEBUG] [Thread-55273] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:43:55.824 [DEBUG] [Thread-55273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:43:55.824 [DEBUG] [Thread-55273] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:43:55.825 [DEBUG] [Thread-55273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:43:55.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:43:55.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:43:55.880 [DEBUG] [Thread-55273] [transport.py] [_log()] userauth is OK
2025-11-17T13:43:55.880 [DEBUG] [Thread-55273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:43:55.880 [DEBUG] [Thread-55273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:43:55.880 [DEBUG] [Thread-55273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:43:55.880 [DEBUG] [Thread-55273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:43:55.899 [INFO] [Thread-55273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:43:55.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:43:55.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:43:56.781 [DEBUG] [Thread-55273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:43:56.782 [DEBUG] [Thread-55273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:43:56.829 [DEBUG] [Thread-55273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:43:56.829 [DEBUG] [Thread-55273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:43:56.839 [DEBUG] [Thread-55273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:43:56.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:43:56.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:43:56.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:43:56.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:43:56.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:43:56.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:43:56.873 [DEBUG] [Thread-55273] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:44:04.912 [DEBUG] [Thread-55275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:44:13.792 [DEBUG] [Thread-55276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:44:19.950 [DEBUG] [Thread-55277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:44:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:44:26.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:44:26.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
2025-11-17T13:44:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 44, 18), 28.87, 14.05, 0.0, 21.26, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:44:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:44:18
2025-11-17T13:44:27.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:44:27.814 [DEBUG] [Thread-55278] [transport.py] [_log()] starting thread (client mode): 0xd31ecfa0
2025-11-17T13:44:27.814 [DEBUG] [Thread-55278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:44:27.833 [DEBUG] [Thread-55278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:44:27.833 [INFO] [Thread-55278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:44:27.837 [DEBUG] [Thread-55278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:44:27.837 [DEBUG] [Thread-55278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:44:27.837 [DEBUG] [Thread-55278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] client lang: <none>
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] server lang: <none>
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] kex follows: False
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] Compression: none
2025-11-17T13:44:27.838 [DEBUG] [Thread-55278] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:44:27.854 [DEBUG] [Thread-55278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:44:27.855 [DEBUG] [Thread-55278] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:44:27.855 [DEBUG] [Thread-55278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:44:27.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:44:27.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:44:27.857 [DEBUG] [Thread-55278] [transport.py] [_log()] userauth is OK
2025-11-17T13:44:27.858 [DEBUG] [Thread-55278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:44:27.858 [DEBUG] [Thread-55278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:44:27.858 [DEBUG] [Thread-55278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:44:27.858 [DEBUG] [Thread-55278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:44:27.882 [INFO] [Thread-55278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:44:27.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:44:28.505 [DEBUG] [Thread-55278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:44:28.505 [DEBUG] [Thread-55278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:44:28.505 [DEBUG] [Thread-55278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:44:28.546 [DEBUG] [Thread-55278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:44:28.546 [DEBUG] [Thread-55278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:44:28.549 [DEBUG] [Thread-55278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:44:28.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:44:28.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:44:28.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:44:28.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:44:28.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:44:28.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:44:28.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:44:28.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:44:28.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:44:28.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.488936 -999.00  +22.70  16.65     19   -1.70 1 1 1 1 1   888    0 24.72 41.21 ----- 16.6 16.6 287.6 25.2 29.7 -26.0 29.1 -25.3 29.2 -23.9 30.1 -24.9
2025-11-17T13:44:28.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:44:28.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:44:28.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.488936
2025-11-17T13:44:28.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:44:28.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:44:28.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:44:28.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:44:28.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:44:28.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:44:18', tmtdew=28.87, humidity=14.05, cloud=0.0, wind=21.26, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:44:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:44:28.575 [DEBUG] [Thread-55278] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:44:28.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:44:28.671 [DEBUG] [Thread-55281] [transport.py] [_log()] starting thread (client mode): 0xd07bfee0
2025-11-17T13:44:28.671 [DEBUG] [Thread-55281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:44:28.687 [DEBUG] [Thread-55281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:44:28.687 [INFO] [Thread-55281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:44:28.695 [DEBUG] [Thread-55281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] client lang: <none>
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] server lang: <none>
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] kex follows: False
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] Compression: none
2025-11-17T13:44:28.696 [DEBUG] [Thread-55281] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:44:28.752 [DEBUG] [Thread-55281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:44:28.753 [DEBUG] [Thread-55281] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:44:28.754 [DEBUG] [Thread-55281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:44:28.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:44:28.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:44:28.808 [DEBUG] [Thread-55281] [transport.py] [_log()] userauth is OK
2025-11-17T13:44:28.808 [DEBUG] [Thread-55281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:44:28.808 [DEBUG] [Thread-55281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:44:28.808 [DEBUG] [Thread-55281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:44:28.808 [DEBUG] [Thread-55281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:44:28.827 [INFO] [Thread-55281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:44:28.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:44:28.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:44:29.762 [DEBUG] [Thread-55281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:44:29.762 [DEBUG] [Thread-55281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:44:29.809 [DEBUG] [Thread-55281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:44:29.809 [DEBUG] [Thread-55281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:44:29.818 [DEBUG] [Thread-55281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:44:29.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:44:29.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:44:29.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:44:29.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:44:29.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:44:29.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:44:29.853 [DEBUG] [Thread-55281] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:44:34.981 [DEBUG] [Thread-55283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:44:50.021 [DEBUG] [Thread-55284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:44:53.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:44:53.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:44:59.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:44:59.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:44:59.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:45:00.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 44, 50), 29.01, 13.77, 0.0, 16.0, 22.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:45:00.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:44:50
2025-11-17T13:45:00.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:45:00.826 [DEBUG] [Thread-55285] [transport.py] [_log()] starting thread (client mode): 0xd31609a0
2025-11-17T13:45:00.826 [DEBUG] [Thread-55285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:45:00.845 [DEBUG] [Thread-55285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:45:00.845 [INFO] [Thread-55285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:45:00.849 [DEBUG] [Thread-55285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:45:00.849 [DEBUG] [Thread-55285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:45:00.849 [DEBUG] [Thread-55285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:45:00.849 [DEBUG] [Thread-55285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:45:00.849 [DEBUG] [Thread-55285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:45:00.849 [DEBUG] [Thread-55285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:45:00.849 [DEBUG] [Thread-55285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:45:00.849 [DEBUG] [Thread-55285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] client lang: <none>
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] server lang: <none>
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] kex follows: False
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] Compression: none
2025-11-17T13:45:00.850 [DEBUG] [Thread-55285] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:45:00.869 [DEBUG] [Thread-55285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:45:00.870 [DEBUG] [Thread-55285] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:45:00.870 [DEBUG] [Thread-55285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:45:00.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:45:00.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:45:00.872 [DEBUG] [Thread-55285] [transport.py] [_log()] userauth is OK
2025-11-17T13:45:00.872 [DEBUG] [Thread-55285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:45:00.872 [DEBUG] [Thread-55285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:45:00.872 [DEBUG] [Thread-55285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:45:00.873 [DEBUG] [Thread-55285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:45:00.895 [INFO] [Thread-55285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:45:00.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:45:01.561 [DEBUG] [Thread-55285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:45:01.561 [DEBUG] [Thread-55285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:45:01.562 [DEBUG] [Thread-55285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:45:01.601 [DEBUG] [Thread-55285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:45:01.601 [DEBUG] [Thread-55285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:45:01.602 [DEBUG] [Thread-55285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:45:01.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:45:01.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:45:01.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:45:01.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:45:01.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:45:01.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:45:01.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:45:01.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:45:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:45:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.489283 -999.00  +22.40  16.63     20   -1.50 1 1 1 1 1   888    0 24.41 44.26 ----- 16.6 16.6 283.9 22.9 29.8 -25.2 29.1 -25.1 29.4 -23.5 30.2 -24.4
2025-11-17T13:45:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:45:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:45:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.489283
2025-11-17T13:45:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:45:01.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:45:01.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:45:01.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:45:01.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:45:01.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:44:50', tmtdew=29.01, humidity=13.77, cloud=0.0, wind=16.0, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:44:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:45:01.615 [DEBUG] [Thread-55285] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:45:01.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:45:01.766 [DEBUG] [Thread-55288] [transport.py] [_log()] starting thread (client mode): 0xd0759ea0
2025-11-17T13:45:01.766 [DEBUG] [Thread-55288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:45:01.784 [DEBUG] [Thread-55288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:45:01.784 [INFO] [Thread-55288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] client lang: <none>
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] server lang: <none>
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] kex follows: False
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] Compression: none
2025-11-17T13:45:01.791 [DEBUG] [Thread-55288] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:45:01.847 [DEBUG] [Thread-55288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:45:01.847 [DEBUG] [Thread-55288] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:45:01.847 [DEBUG] [Thread-55288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:45:01.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:45:01.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:45:01.904 [DEBUG] [Thread-55288] [transport.py] [_log()] userauth is OK
2025-11-17T13:45:01.904 [DEBUG] [Thread-55288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:45:01.904 [DEBUG] [Thread-55288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:45:01.904 [DEBUG] [Thread-55288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:45:01.904 [DEBUG] [Thread-55288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:45:01.918 [INFO] [Thread-55288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:45:01.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:45:01.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:45:02.889 [DEBUG] [Thread-55288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:45:02.890 [DEBUG] [Thread-55288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:45:02.938 [DEBUG] [Thread-55288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:45:02.938 [DEBUG] [Thread-55288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:45:02.947 [DEBUG] [Thread-55288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:45:02.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:45: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')
2025-11-17T13:45:02.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:45:02.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:45:02.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:45:02.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:45:02.982 [DEBUG] [Thread-55288] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:45:05.049 [DEBUG] [Thread-55290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:45:13.857 [DEBUG] [Thread-55291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:45:20.091 [DEBUG] [Thread-55292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:45:33.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:45:33.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:45:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:45:33.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 45, 22), 29.0, 13.82, 0.0, 16.32, 23.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:45:33.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:45:22
2025-11-17T13:45:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:45:33.922 [DEBUG] [Thread-55293] [transport.py] [_log()] starting thread (client mode): 0xd07cee30
2025-11-17T13:45:33.922 [DEBUG] [Thread-55293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:45:33.943 [DEBUG] [Thread-55293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:45:33.943 [INFO] [Thread-55293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] client lang: <none>
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] server lang: <none>
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] kex follows: False
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:45:33.946 [DEBUG] [Thread-55293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:45:33.947 [DEBUG] [Thread-55293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:45:33.947 [DEBUG] [Thread-55293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:45:33.947 [DEBUG] [Thread-55293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:45:33.947 [DEBUG] [Thread-55293] [transport.py] [_log()] Compression: none
2025-11-17T13:45:33.947 [DEBUG] [Thread-55293] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:45:33.963 [DEBUG] [Thread-55293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:45:33.964 [DEBUG] [Thread-55293] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:45:33.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:45:33.964 [DEBUG] [Thread-55293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:45:33.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:45:33.967 [DEBUG] [Thread-55293] [transport.py] [_log()] userauth is OK
2025-11-17T13:45:33.967 [DEBUG] [Thread-55293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:45:33.967 [DEBUG] [Thread-55293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:45:33.967 [DEBUG] [Thread-55293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:45:33.967 [DEBUG] [Thread-55293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:45:33.990 [INFO] [Thread-55293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:45:33.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:45:34.624 [DEBUG] [Thread-55293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:45:34.624 [DEBUG] [Thread-55293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:45:34.624 [DEBUG] [Thread-55293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:45:34.665 [DEBUG] [Thread-55293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:45:34.665 [DEBUG] [Thread-55293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:45:34.668 [DEBUG] [Thread-55293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:45:34.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:45:34.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:45:34.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:45:34.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:45:34.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:45:34.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:45:34.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:45:34.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:45:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:45:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.489631 -999.00  +22.50  16.52     19   -1.60 1 1 1 1 1   888    0 24.83 50.57 ----- 16.5 16.5 296.2 18.7 29.8 -26.6 29.1 -24.9 29.2 -27.2 30.2 -24.6
2025-11-17T13:45:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:45:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:45:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.489631
2025-11-17T13:45:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:45:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:45:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:45:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:45:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:45:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:45:22', tmtdew=29.0, humidity=13.82, cloud=0.0, wind=16.32, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:45:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:45:34.690 [DEBUG] [Thread-55293] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:45:34.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:45:34.798 [DEBUG] [Thread-55296] [transport.py] [_log()] starting thread (client mode): 0xd0784af0
2025-11-17T13:45:34.798 [DEBUG] [Thread-55296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:45:34.812 [DEBUG] [Thread-55296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:45:34.813 [INFO] [Thread-55296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] client lang: <none>
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] server lang: <none>
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] kex follows: False
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:45:34.820 [DEBUG] [Thread-55296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:45:34.821 [DEBUG] [Thread-55296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:45:34.821 [DEBUG] [Thread-55296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:45:34.821 [DEBUG] [Thread-55296] [transport.py] [_log()] Compression: none
2025-11-17T13:45:34.821 [DEBUG] [Thread-55296] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:45:34.882 [DEBUG] [Thread-55296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:45:34.883 [DEBUG] [Thread-55296] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:45:34.883 [DEBUG] [Thread-55296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:45:34.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:45:34.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:45:34.940 [DEBUG] [Thread-55296] [transport.py] [_log()] userauth is OK
2025-11-17T13:45:34.940 [DEBUG] [Thread-55296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:45:34.941 [DEBUG] [Thread-55296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:45:34.941 [DEBUG] [Thread-55296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:45:34.941 [DEBUG] [Thread-55296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:45:34.958 [INFO] [Thread-55296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:45:34.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:45:34.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:45:35.125 [DEBUG] [Thread-55298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:45:35.849 [DEBUG] [Thread-55296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:45:35.850 [DEBUG] [Thread-55296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:45:35.897 [DEBUG] [Thread-55296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:45:35.897 [DEBUG] [Thread-55296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:45:35.906 [DEBUG] [Thread-55296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:45:35.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:45:35.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:45:35.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:45:35.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:45:35.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:45:35.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:45:35.940 [DEBUG] [Thread-55296] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:45:50.175 [DEBUG] [Thread-55299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:45:54.058 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:45:54.059 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:46:05.203 [DEBUG] [Thread-55300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:46:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:46:05.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:46:05.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:46:06.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 45, 54), 29.41, 13.62, 0.0, 17.75, 23.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:46:06.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:45:54
2025-11-17T13:46:06.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:46:06.902 [DEBUG] [Thread-55301] [transport.py] [_log()] starting thread (client mode): 0xd31ceb30
2025-11-17T13:46:06.903 [DEBUG] [Thread-55301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:46:06.917 [DEBUG] [Thread-55301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:46:06.918 [INFO] [Thread-55301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] client lang: <none>
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] server lang: <none>
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] kex follows: False
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] Compression: none
2025-11-17T13:46:06.921 [DEBUG] [Thread-55301] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:46:06.938 [DEBUG] [Thread-55301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:46:06.938 [DEBUG] [Thread-55301] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:46:06.939 [DEBUG] [Thread-55301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:46:06.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:46:06.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:46:06.941 [DEBUG] [Thread-55301] [transport.py] [_log()] userauth is OK
2025-11-17T13:46:06.941 [DEBUG] [Thread-55301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:46:06.941 [DEBUG] [Thread-55301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:46:06.941 [DEBUG] [Thread-55301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:46:06.941 [DEBUG] [Thread-55301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:46:06.967 [INFO] [Thread-55301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:46:06.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:46:07.588 [DEBUG] [Thread-55301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:46:07.588 [DEBUG] [Thread-55301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:46:07.589 [DEBUG] [Thread-55301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:46:07.629 [DEBUG] [Thread-55301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:46:07.630 [DEBUG] [Thread-55301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:46:07.632 [DEBUG] [Thread-55301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:46:07.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:46:07.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:46:07.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:46:07.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:46:07.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:46:07.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:46:07.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:46:07.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:46:07.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:46:07.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.489978 -999.00  +22.70  18.29     18   -2.20 1 1 1 1 1   888    0 25.07 57.48 ----- 18.3 18.3 301.9 23.9 30.0 -26.1 29.2 -24.0 29.4 -23.7 30.4 -24.9
2025-11-17T13:46:07.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:46:07.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:46:07.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.489978
2025-11-17T13:46:07.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:46:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:46:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:46:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:46:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:46:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:45:54', tmtdew=29.41, humidity=13.62, cloud=0.0, wind=17.75, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:45:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:46:07.655 [DEBUG] [Thread-55301] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:46:07.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:46:07.757 [DEBUG] [Thread-55304] [transport.py] [_log()] starting thread (client mode): 0xd31b1360
2025-11-17T13:46:07.757 [DEBUG] [Thread-55304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:46:07.774 [DEBUG] [Thread-55304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:46:07.774 [INFO] [Thread-55304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] client lang: <none>
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] server lang: <none>
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] kex follows: False
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:46:07.782 [DEBUG] [Thread-55304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:46:07.783 [DEBUG] [Thread-55304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:46:07.783 [DEBUG] [Thread-55304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:46:07.783 [DEBUG] [Thread-55304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:46:07.783 [DEBUG] [Thread-55304] [transport.py] [_log()] Compression: none
2025-11-17T13:46:07.783 [DEBUG] [Thread-55304] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:46:07.844 [DEBUG] [Thread-55304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:46:07.844 [DEBUG] [Thread-55304] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:46:07.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:46:07.845 [DEBUG] [Thread-55304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:46:07.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:46:07.900 [DEBUG] [Thread-55304] [transport.py] [_log()] userauth is OK
2025-11-17T13:46:07.900 [DEBUG] [Thread-55304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:46:07.900 [DEBUG] [Thread-55304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:46:07.900 [DEBUG] [Thread-55304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:46:07.900 [DEBUG] [Thread-55304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:46:07.919 [INFO] [Thread-55304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:46:07.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:46:07.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:46:08.826 [DEBUG] [Thread-55304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:46:08.826 [DEBUG] [Thread-55304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:46:08.873 [DEBUG] [Thread-55304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:46:08.873 [DEBUG] [Thread-55304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:46:08.882 [DEBUG] [Thread-55304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:46:08.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:46:08.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:46: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') -> 00000000
2025-11-17T13:46:08.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:46:08.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:46:08.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:46:08.917 [DEBUG] [Thread-55304] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:46:13.913 [DEBUG] [Thread-55306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:46:20.234 [DEBUG] [Thread-55307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:46:35.284 [DEBUG] [Thread-55308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:46:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:46:38.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:46:38.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:46:39.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 46, 26), 29.94, 13.08, 0.0, 14.57, 23.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:46:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:46:26
2025-11-17T13:46:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:46:39.911 [DEBUG] [Thread-55309] [transport.py] [_log()] starting thread (client mode): 0xd3135150
2025-11-17T13:46:39.912 [DEBUG] [Thread-55309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:46:39.934 [DEBUG] [Thread-55309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:46:39.934 [INFO] [Thread-55309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] client lang: <none>
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] server lang: <none>
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] kex follows: False
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] Compression: none
2025-11-17T13:46:39.938 [DEBUG] [Thread-55309] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:46:39.955 [DEBUG] [Thread-55309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:46:39.955 [DEBUG] [Thread-55309] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:46:39.955 [DEBUG] [Thread-55309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:46:39.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:46:39.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:46:39.956 [DEBUG] [Thread-55309] [transport.py] [_log()] userauth is OK
2025-11-17T13:46:39.956 [DEBUG] [Thread-55309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:46:39.956 [DEBUG] [Thread-55309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:46:39.956 [DEBUG] [Thread-55309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:46:39.956 [DEBUG] [Thread-55309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:46:39.965 [INFO] [Thread-55309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:46:39.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:46:40.595 [DEBUG] [Thread-55309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:46:40.595 [DEBUG] [Thread-55309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:46:40.595 [DEBUG] [Thread-55309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:46:40.636 [DEBUG] [Thread-55309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:46:40.636 [DEBUG] [Thread-55309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:46:40.638 [DEBUG] [Thread-55309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:46:40.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:46:40.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:46:40.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:46:40.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:46:40.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:46:40.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:46:40.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.490325 -999.00  +22.70  13.42     19   -1.70 1 1 1 1 1   888    0 24.82 59.66 ----- 13.4 13.4 306.4 21.2 30.1 -24.5 29.2 -25.8 29.5 -23.7 30.4 -23.9
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.490325
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:46:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:46:26', tmtdew=29.94, humidity=13.08, cloud=0.0, wind=14.57, temperature=23.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:46:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:46:40.654 [DEBUG] [Thread-55309] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:46:40.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:46:40.741 [DEBUG] [Thread-55312] [transport.py] [_log()] starting thread (client mode): 0xd3160fa0
2025-11-17T13:46:40.741 [DEBUG] [Thread-55312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:46:40.761 [DEBUG] [Thread-55312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:46:40.761 [INFO] [Thread-55312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:46:40.768 [DEBUG] [Thread-55312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] client lang: <none>
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] server lang: <none>
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] kex follows: False
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] Compression: none
2025-11-17T13:46:40.769 [DEBUG] [Thread-55312] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:46:40.827 [DEBUG] [Thread-55312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:46:40.827 [DEBUG] [Thread-55312] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:46:40.827 [DEBUG] [Thread-55312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:46:40.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:46:40.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:46:40.884 [DEBUG] [Thread-55312] [transport.py] [_log()] userauth is OK
2025-11-17T13:46:40.884 [DEBUG] [Thread-55312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:46:40.884 [DEBUG] [Thread-55312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:46:40.884 [DEBUG] [Thread-55312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:46:40.884 [DEBUG] [Thread-55312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:46:40.898 [INFO] [Thread-55312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:46:40.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:46:40.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:46:41.828 [DEBUG] [Thread-55312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:46:41.828 [DEBUG] [Thread-55312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:46:41.877 [DEBUG] [Thread-55312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:46:41.877 [DEBUG] [Thread-55312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:46:41.885 [DEBUG] [Thread-55312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:46:41.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:46:41.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:46:41.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:46:41.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:46:41.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:46:41.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:46:41.916 [DEBUG] [Thread-55312] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:46:50.311 [DEBUG] [Thread-55314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:46:54.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:46:54.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:47:05.348 [DEBUG] [Thread-55315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:47:11.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:47:11.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:47:11.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
2025-11-17T13:47:12.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 46, 58), 29.92, 13.18, 0.0, 9.97, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:47:12.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:46:58
2025-11-17T13:47:12.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:47:12.863 [DEBUG] [Thread-55316] [transport.py] [_log()] starting thread (client mode): 0xd0759ea0
2025-11-17T13:47:12.863 [DEBUG] [Thread-55316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:47:12.882 [DEBUG] [Thread-55316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:47:12.883 [INFO] [Thread-55316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:47:12.886 [DEBUG] [Thread-55316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:47:12.886 [DEBUG] [Thread-55316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:47:12.886 [DEBUG] [Thread-55316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:47:12.886 [DEBUG] [Thread-55316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:47:12.886 [DEBUG] [Thread-55316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:47:12.886 [DEBUG] [Thread-55316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:47:12.886 [DEBUG] [Thread-55316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:47:12.886 [DEBUG] [Thread-55316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] client lang: <none>
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] server lang: <none>
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] kex follows: False
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] Compression: none
2025-11-17T13:47:12.887 [DEBUG] [Thread-55316] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:47:12.902 [DEBUG] [Thread-55316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:47:12.903 [DEBUG] [Thread-55316] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:47:12.903 [DEBUG] [Thread-55316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:47:12.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:47:12.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:47:12.944 [DEBUG] [Thread-55316] [transport.py] [_log()] userauth is OK
2025-11-17T13:47:12.944 [DEBUG] [Thread-55316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:47:12.944 [DEBUG] [Thread-55316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:47:12.944 [DEBUG] [Thread-55316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:47:12.944 [DEBUG] [Thread-55316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:47:12.976 [INFO] [Thread-55316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:47:12.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:47:13.524 [DEBUG] [Thread-55316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:47:13.525 [DEBUG] [Thread-55316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:47:13.525 [DEBUG] [Thread-55316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:47:13.565 [DEBUG] [Thread-55316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:47:13.566 [DEBUG] [Thread-55316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:47:13.569 [DEBUG] [Thread-55316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:47:13.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:47:13.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:47:13.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:47:13.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:47:13.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:47:13.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:47:13.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:47:13.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:47:13.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:47:13.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.490672 -999.00  +23.00   7.44     18   -1.90 1 1 1 1 1   888    0 25.49 67.07 ----- 7.4 7.4 15.2 13.6 30.2 -25.1 29.4 -24.3 29.7 -23.9 30.6 -27.7
2025-11-17T13:47:13.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:47:13.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:47:13.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.490672
2025-11-17T13:47:13.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:47:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:47:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:47:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:47:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:47:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:46:58', tmtdew=29.92, humidity=13.18, cloud=0.0, wind=9.97, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:46:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:47:13.593 [DEBUG] [Thread-55316] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:47:13.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:47:13.690 [DEBUG] [Thread-55319] [transport.py] [_log()] starting thread (client mode): 0xd078c970
2025-11-17T13:47:13.690 [DEBUG] [Thread-55319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:47:13.705 [DEBUG] [Thread-55319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:47:13.705 [INFO] [Thread-55319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:47:13.712 [DEBUG] [Thread-55319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] client lang: <none>
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] server lang: <none>
2025-11-17T13:47:13.713 [DEBUG] [Thread-55319] [transport.py] [_log()] kex follows: False
2025-11-17T13:47:13.714 [DEBUG] [Thread-55319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:47:13.714 [DEBUG] [Thread-55319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:47:13.714 [DEBUG] [Thread-55319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:47:13.714 [DEBUG] [Thread-55319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:47:13.714 [DEBUG] [Thread-55319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:47:13.714 [DEBUG] [Thread-55319] [transport.py] [_log()] Compression: none
2025-11-17T13:47:13.714 [DEBUG] [Thread-55319] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:47:13.772 [DEBUG] [Thread-55319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:47:13.773 [DEBUG] [Thread-55319] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:47:13.773 [DEBUG] [Thread-55319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:47:13.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:47:13.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:47:13.832 [DEBUG] [Thread-55319] [transport.py] [_log()] userauth is OK
2025-11-17T13:47:13.833 [DEBUG] [Thread-55319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:47:13.833 [DEBUG] [Thread-55319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:47:13.833 [DEBUG] [Thread-55319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:47:13.833 [DEBUG] [Thread-55319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:47:13.852 [INFO] [Thread-55319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:47:13.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:47:13.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:47:13.966 [DEBUG] [Thread-55321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:47:14.694 [DEBUG] [Thread-55319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:47:14.694 [DEBUG] [Thread-55319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:47:14.742 [DEBUG] [Thread-55319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:47:14.742 [DEBUG] [Thread-55319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:47:14.751 [DEBUG] [Thread-55319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:47:14.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:47:14.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:47:14.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:47:14.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:47:14.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:47:14.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:47:14.789 [DEBUG] [Thread-55319] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:47:20.379 [DEBUG] [Thread-55322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:47:35.414 [DEBUG] [Thread-55323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:47:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:47:44.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:47:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:47:45.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 47, 30), 29.24, 13.72, 0.0, 7.61, 22.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:47:45.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:47:30
2025-11-17T13:47:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:47:45.745 [DEBUG] [Thread-55324] [transport.py] [_log()] starting thread (client mode): 0xd31cea40
2025-11-17T13:47:45.746 [DEBUG] [Thread-55324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:47:45.766 [DEBUG] [Thread-55324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:47:45.767 [INFO] [Thread-55324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] client lang: <none>
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] server lang: <none>
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] kex follows: False
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] Compression: none
2025-11-17T13:47:45.770 [DEBUG] [Thread-55324] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:47:45.786 [DEBUG] [Thread-55324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:47:45.787 [DEBUG] [Thread-55324] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:47:45.787 [DEBUG] [Thread-55324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:47:45.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:47:45.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:47:45.789 [DEBUG] [Thread-55324] [transport.py] [_log()] userauth is OK
2025-11-17T13:47:45.789 [DEBUG] [Thread-55324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:47:45.790 [DEBUG] [Thread-55324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:47:45.790 [DEBUG] [Thread-55324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:47:45.790 [DEBUG] [Thread-55324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:47:45.824 [INFO] [Thread-55324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:47:45.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:47:46.479 [DEBUG] [Thread-55324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:47:46.479 [DEBUG] [Thread-55324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:47:46.479 [DEBUG] [Thread-55324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:47:46.520 [DEBUG] [Thread-55324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:47:46.521 [DEBUG] [Thread-55324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:47:46.524 [DEBUG] [Thread-55324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:47:46.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:47:46.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:47:46.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:47:46.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:47:46.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:47:46.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:47:46.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:47:46.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:47:46.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:47:46.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.491019 -999.00  +23.20  11.07     18   -1.80 1 1 1 1 1   888    0 25.58 73.14 ----- 11.1 11.1 353.3 14.5 30.4 -24.4 29.5 -24.6 29.9 -23.9 30.8 -24.1
2025-11-17T13:47:46.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:47:46.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:47:46.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.491019
2025-11-17T13:47:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:47:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:47:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:47:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:47:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:47:46.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:47:30', tmtdew=29.24, humidity=13.72, cloud=0.0, wind=7.61, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:47:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:47:46.547 [DEBUG] [Thread-55324] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:47:46.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:47:46.642 [DEBUG] [Thread-55327] [transport.py] [_log()] starting thread (client mode): 0xd07235b0
2025-11-17T13:47:46.642 [DEBUG] [Thread-55327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:47:46.657 [DEBUG] [Thread-55327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:47:46.657 [INFO] [Thread-55327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:47:46.665 [DEBUG] [Thread-55327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:47:46.665 [DEBUG] [Thread-55327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:47:46.665 [DEBUG] [Thread-55327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:47:46.665 [DEBUG] [Thread-55327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:47:46.665 [DEBUG] [Thread-55327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:47:46.665 [DEBUG] [Thread-55327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] client lang: <none>
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] server lang: <none>
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] kex follows: False
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] Compression: none
2025-11-17T13:47:46.666 [DEBUG] [Thread-55327] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:47:46.728 [DEBUG] [Thread-55327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:47:46.728 [DEBUG] [Thread-55327] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:47:46.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:47:46.729 [DEBUG] [Thread-55327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:47:46.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:47:46.784 [DEBUG] [Thread-55327] [transport.py] [_log()] userauth is OK
2025-11-17T13:47:46.784 [DEBUG] [Thread-55327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:47:46.784 [DEBUG] [Thread-55327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:47:46.784 [DEBUG] [Thread-55327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:47:46.784 [DEBUG] [Thread-55327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:47:46.803 [INFO] [Thread-55327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:47:46.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:47:46.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:47:47.673 [DEBUG] [Thread-55327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:47:47.673 [DEBUG] [Thread-55327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:47:47.721 [DEBUG] [Thread-55327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:47:47.721 [DEBUG] [Thread-55327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:47:47.730 [DEBUG] [Thread-55327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:47:47.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:47:47.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:47:47.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:47:47.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:47:47.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:47:47.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:47:47.765 [DEBUG] [Thread-55327] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:47:50.447 [DEBUG] [Thread-55329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:47:54.344 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:47:54.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:48:05.485 [DEBUG] [Thread-55330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:48:14.018 [DEBUG] [Thread-55331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:48:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:48:17.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:48:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:48:18.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 48, 2), 29.06, 13.87, 0.0, 5.77, 22.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:48:18.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:48:02
2025-11-17T13:48:18.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:48:18.706 [DEBUG] [Thread-55332] [transport.py] [_log()] starting thread (client mode): 0xd0721990
2025-11-17T13:48:18.706 [DEBUG] [Thread-55332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:48:18.725 [DEBUG] [Thread-55332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:48:18.726 [INFO] [Thread-55332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:48:18.728 [DEBUG] [Thread-55332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:48:18.728 [DEBUG] [Thread-55332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] client lang: <none>
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] server lang: <none>
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] kex follows: False
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] Compression: none
2025-11-17T13:48:18.729 [DEBUG] [Thread-55332] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:48:18.745 [DEBUG] [Thread-55332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:48:18.746 [DEBUG] [Thread-55332] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:48:18.746 [DEBUG] [Thread-55332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:48:18.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:48:18.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:48:18.748 [DEBUG] [Thread-55332] [transport.py] [_log()] userauth is OK
2025-11-17T13:48:18.748 [DEBUG] [Thread-55332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:48:18.748 [DEBUG] [Thread-55332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:48:18.748 [DEBUG] [Thread-55332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:48:18.748 [DEBUG] [Thread-55332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:48:18.772 [INFO] [Thread-55332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:48:18.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:48:19.409 [DEBUG] [Thread-55332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:48:19.410 [DEBUG] [Thread-55332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:48:19.410 [DEBUG] [Thread-55332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:48:19.450 [DEBUG] [Thread-55332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:48:19.451 [DEBUG] [Thread-55332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:48:19.454 [DEBUG] [Thread-55332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:48:19.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:48:19.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:48:19.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:48:19.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:48:19.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:48:19.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:48:19.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:48:19.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:48:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:48:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.491367 -999.00  +23.10  15.78     18   -2.10 1 1 1 1 1   888    0 26.02 86.66 ----- 15.8 15.8 328.0 18.7 30.5 -25.2 29.6 -25.6 30.0 -24.5 30.8 -24.5
2025-11-17T13:48:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:48:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:48:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.491367
2025-11-17T13:48:19.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:48:19.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:48:19.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:48:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:48:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:48:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:48:02', tmtdew=29.06, humidity=13.87, cloud=0.0, wind=5.77, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:47:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:48:19.480 [DEBUG] [Thread-55332] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:48:19.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:48:19.585 [DEBUG] [Thread-55335] [transport.py] [_log()] starting thread (client mode): 0xd3137eb0
2025-11-17T13:48:19.585 [DEBUG] [Thread-55335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:48:19.601 [DEBUG] [Thread-55335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:48:19.601 [INFO] [Thread-55335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] client lang: <none>
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] server lang: <none>
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] kex follows: False
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:48:19.609 [DEBUG] [Thread-55335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:48:19.610 [DEBUG] [Thread-55335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:48:19.610 [DEBUG] [Thread-55335] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:48:19.610 [DEBUG] [Thread-55335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:48:19.610 [DEBUG] [Thread-55335] [transport.py] [_log()] Compression: none
2025-11-17T13:48:19.610 [DEBUG] [Thread-55335] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:48:19.672 [DEBUG] [Thread-55335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:48:19.672 [DEBUG] [Thread-55335] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:48:19.673 [DEBUG] [Thread-55335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:48:19.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:48:19.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:48:19.732 [DEBUG] [Thread-55335] [transport.py] [_log()] userauth is OK
2025-11-17T13:48:19.732 [DEBUG] [Thread-55335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:48:19.732 [DEBUG] [Thread-55335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:48:19.732 [DEBUG] [Thread-55335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:48:19.733 [DEBUG] [Thread-55335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:48:19.752 [INFO] [Thread-55335] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:48:19.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:48:19.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:48:20.515 [DEBUG] [Thread-55337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:48:20.614 [DEBUG] [Thread-55335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:48:20.623 [DEBUG] [Thread-55335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:48:20.662 [DEBUG] [Thread-55335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:48:20.663 [DEBUG] [Thread-55335] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:48:20.671 [DEBUG] [Thread-55335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:48:20.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:48:20.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:48:20.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:48:20.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:48:20.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:48:20.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:48:20.711 [DEBUG] [Thread-55335] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:48:35.556 [DEBUG] [Thread-55338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:48:50.591 [DEBUG] [Thread-55339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:48:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:48:50.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:48:50.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:48:51.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 48, 34), 30.02, 13.16, 0.0, 7.45, 23.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:48:51.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:48:34
2025-11-17T13:48:51.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:48:51.643 [DEBUG] [Thread-55340] [transport.py] [_log()] starting thread (client mode): 0xd0721750
2025-11-17T13:48:51.643 [DEBUG] [Thread-55340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:48:51.664 [DEBUG] [Thread-55340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:48:51.664 [INFO] [Thread-55340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:48:51.668 [DEBUG] [Thread-55340] [transport.py] [_log()] client lang: <none>
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] server lang: <none>
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] kex follows: False
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] Compression: none
2025-11-17T13:48:51.669 [DEBUG] [Thread-55340] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:48:51.688 [DEBUG] [Thread-55340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:48:51.689 [DEBUG] [Thread-55340] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:48:51.689 [DEBUG] [Thread-55340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:48:51.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:48:51.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:48:51.691 [DEBUG] [Thread-55340] [transport.py] [_log()] userauth is OK
2025-11-17T13:48:51.691 [DEBUG] [Thread-55340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:48:51.691 [DEBUG] [Thread-55340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:48:51.691 [DEBUG] [Thread-55340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:48:51.691 [DEBUG] [Thread-55340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:48:51.716 [INFO] [Thread-55340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:48:51.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:48:52.326 [DEBUG] [Thread-55340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:48:52.326 [DEBUG] [Thread-55340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:48:52.327 [DEBUG] [Thread-55340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:48:52.367 [DEBUG] [Thread-55340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:48:52.367 [DEBUG] [Thread-55340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:48:52.371 [DEBUG] [Thread-55340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:48:52.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:48:52.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:48:52.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:48:52.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:48:52.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:48:52.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:48:52.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:48:52.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:48:52.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:48:52.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.492061 -999.00  +22.40   4.82     18   -2.70 1 1 1 1 1   888    0 26.63 105.73 ----- 4.8 4.8 344.6 10.8 30.5 -25.4 29.6 -25.4 30.1 -25.4 30.9 -24.4
2025-11-17T13:48:52.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:48:52.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:48:52.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.492061
2025-11-17T13:48:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:48:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:48:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:48:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:48:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:48:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:48:34', tmtdew=30.02, humidity=13.16, cloud=0.0, wind=7.45, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:48:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:48:52.390 [DEBUG] [Thread-55340] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:48:52.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:48:52.488 [DEBUG] [Thread-55343] [transport.py] [_log()] starting thread (client mode): 0xd31376a0
2025-11-17T13:48:52.488 [DEBUG] [Thread-55343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:48:52.503 [DEBUG] [Thread-55343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:48:52.503 [INFO] [Thread-55343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:48:52.511 [DEBUG] [Thread-55343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:48:52.511 [DEBUG] [Thread-55343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:48:52.511 [DEBUG] [Thread-55343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:48:52.511 [DEBUG] [Thread-55343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] client lang: <none>
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] server lang: <none>
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] kex follows: False
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:48:52.512 [DEBUG] [Thread-55343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:48:52.513 [DEBUG] [Thread-55343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:48:52.513 [DEBUG] [Thread-55343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:48:52.513 [DEBUG] [Thread-55343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:48:52.513 [DEBUG] [Thread-55343] [transport.py] [_log()] Compression: none
2025-11-17T13:48:52.513 [DEBUG] [Thread-55343] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:48:52.569 [DEBUG] [Thread-55343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:48:52.569 [DEBUG] [Thread-55343] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:48:52.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:48:52.570 [DEBUG] [Thread-55343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:48:52.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:48:52.624 [DEBUG] [Thread-55343] [transport.py] [_log()] userauth is OK
2025-11-17T13:48:52.624 [DEBUG] [Thread-55343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:48:52.625 [DEBUG] [Thread-55343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:48:52.625 [DEBUG] [Thread-55343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:48:52.625 [DEBUG] [Thread-55343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:48:52.647 [INFO] [Thread-55343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:48:52.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:48:52.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:48:53.565 [DEBUG] [Thread-55343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:48:53.565 [DEBUG] [Thread-55343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:48:53.616 [DEBUG] [Thread-55343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:48:53.617 [DEBUG] [Thread-55343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:48:53.628 [DEBUG] [Thread-55343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:48:53.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:48:53.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:48:53.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:48:53.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:48:53.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:48:53.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:48:53.664 [DEBUG] [Thread-55343] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:48:54.486 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:48:54.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:49:05.623 [DEBUG] [Thread-55345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:49:14.063 [DEBUG] [Thread-55346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:49:20.671 [DEBUG] [Thread-55347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:49:23.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:49:23.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:49:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:49:24.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 49, 6), 30.29, 12.91, 0.0, 6.67, 23.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:49:24.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:49:06
2025-11-17T13:49:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:49:24.602 [DEBUG] [Thread-55348] [transport.py] [_log()] starting thread (client mode): 0xd0784be0
2025-11-17T13:49:24.602 [DEBUG] [Thread-55348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:49:24.621 [DEBUG] [Thread-55348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:49:24.621 [INFO] [Thread-55348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:49:24.624 [DEBUG] [Thread-55348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:49:24.624 [DEBUG] [Thread-55348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:49:24.624 [DEBUG] [Thread-55348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:49:24.624 [DEBUG] [Thread-55348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:49:24.624 [DEBUG] [Thread-55348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:49:24.624 [DEBUG] [Thread-55348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] client lang: <none>
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] server lang: <none>
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] kex follows: False
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] Compression: none
2025-11-17T13:49:24.625 [DEBUG] [Thread-55348] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:49:24.633 [DEBUG] [Thread-55348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:49:24.634 [DEBUG] [Thread-55348] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:49:24.634 [DEBUG] [Thread-55348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:49:24.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:49:24.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:49:24.635 [DEBUG] [Thread-55348] [transport.py] [_log()] userauth is OK
2025-11-17T13:49:24.636 [DEBUG] [Thread-55348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:49:24.636 [DEBUG] [Thread-55348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:49:24.636 [DEBUG] [Thread-55348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:49:24.636 [DEBUG] [Thread-55348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:49:24.649 [INFO] [Thread-55348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:49:24.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:49:25.285 [DEBUG] [Thread-55348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:49:25.285 [DEBUG] [Thread-55348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:49:25.285 [DEBUG] [Thread-55348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:49:25.325 [DEBUG] [Thread-55348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:49:25.326 [DEBUG] [Thread-55348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:49:25.329 [DEBUG] [Thread-55348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:49:25.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:49:25.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:49:25.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:49:25.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:49:25.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:49:25.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:49:25.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:49:25.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:49:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:49:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.492408 -999.00  +22.40  17.16     18   -2.40 1 1 1 1 1   888    0 26.81 109.61 ----- 17.2 17.2 301.2 21.6 30.5 -26.1 29.8 -25.8 30.1 -25.3 31.0 -25.0
2025-11-17T13:49:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:49:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:49:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.492408
2025-11-17T13:49:25.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:49:25.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:49:25.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:49:25.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:49:25.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:49:25.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:49:06', tmtdew=30.29, humidity=12.91, cloud=0.0, wind=6.67, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:49:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:49:25.356 [DEBUG] [Thread-55348] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:49:25.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:49:25.453 [DEBUG] [Thread-55351] [transport.py] [_log()] starting thread (client mode): 0xd07215a0
2025-11-17T13:49:25.453 [DEBUG] [Thread-55351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:49:25.467 [DEBUG] [Thread-55351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:49:25.468 [INFO] [Thread-55351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:49:25.479 [DEBUG] [Thread-55351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:49:25.479 [DEBUG] [Thread-55351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:49:25.479 [DEBUG] [Thread-55351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] client lang: <none>
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] server lang: <none>
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] kex follows: False
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] Compression: none
2025-11-17T13:49:25.480 [DEBUG] [Thread-55351] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:49:25.536 [DEBUG] [Thread-55351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:49:25.537 [DEBUG] [Thread-55351] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:49:25.537 [DEBUG] [Thread-55351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:49:25.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:49:25.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:49:25.592 [DEBUG] [Thread-55351] [transport.py] [_log()] userauth is OK
2025-11-17T13:49:25.592 [DEBUG] [Thread-55351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:49:25.592 [DEBUG] [Thread-55351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:49:25.592 [DEBUG] [Thread-55351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:49:25.592 [DEBUG] [Thread-55351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:49:25.611 [INFO] [Thread-55351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:49:25.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:49:25.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:49:26.467 [DEBUG] [Thread-55351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:49:26.467 [DEBUG] [Thread-55351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:49:26.515 [DEBUG] [Thread-55351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:49:26.515 [DEBUG] [Thread-55351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:49:26.524 [DEBUG] [Thread-55351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:49:26.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:49:26.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:49:26.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:49:26.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:49:26.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:49:26.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:49:26.559 [DEBUG] [Thread-55351] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:49:35.706 [DEBUG] [Thread-55353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:49:50.755 [DEBUG] [Thread-55354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:49:54.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:49:54.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:49:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:49:56.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:49:56.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:49:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 49, 38), 30.84, 11.94, 0.0, 12.69, 23.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:49:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:49:38
2025-11-17T13:49:57.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:49:57.543 [DEBUG] [Thread-55355] [transport.py] [_log()] starting thread (client mode): 0xd075b190
2025-11-17T13:49:57.543 [DEBUG] [Thread-55355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:49:57.563 [DEBUG] [Thread-55355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:49:57.563 [INFO] [Thread-55355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] client lang: <none>
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] server lang: <none>
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] kex follows: False
2025-11-17T13:49:57.566 [DEBUG] [Thread-55355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:49:57.567 [DEBUG] [Thread-55355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:49:57.567 [DEBUG] [Thread-55355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:49:57.567 [DEBUG] [Thread-55355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:49:57.567 [DEBUG] [Thread-55355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:49:57.567 [DEBUG] [Thread-55355] [transport.py] [_log()] Compression: none
2025-11-17T13:49:57.567 [DEBUG] [Thread-55355] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:49:57.583 [DEBUG] [Thread-55355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:49:57.583 [DEBUG] [Thread-55355] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:49:57.583 [DEBUG] [Thread-55355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:49:57.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:49:57.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:49:57.584 [DEBUG] [Thread-55355] [transport.py] [_log()] userauth is OK
2025-11-17T13:49:57.584 [DEBUG] [Thread-55355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:49:57.584 [DEBUG] [Thread-55355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:49:57.584 [DEBUG] [Thread-55355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:49:57.584 [DEBUG] [Thread-55355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:49:57.593 [INFO] [Thread-55355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:49:57.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:49:58.254 [DEBUG] [Thread-55355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:49:58.254 [DEBUG] [Thread-55355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:49:58.255 [DEBUG] [Thread-55355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:49:58.296 [DEBUG] [Thread-55355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:49:58.296 [DEBUG] [Thread-55355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:49:58.299 [DEBUG] [Thread-55355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:49:58.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:49:58.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:49:58.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:49:58.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:49:58.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:49:58.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:49:58.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:49:58.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:49:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:49:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.492756 -999.00  +22.80  15.68     18   -2.50 1 1 1 1 1   888    0 27.03 115.39 ----- 15.7 15.7 284.4 26.9 30.4 -26.9 29.8 -26.0 30.0 -25.0 30.9 -25.3
2025-11-17T13:49:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:49:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:49:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.492756
2025-11-17T13:49:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:49:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:49:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:49:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:49:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:49:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:49:38', tmtdew=30.84, humidity=11.94, cloud=0.0, wind=12.69, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:49:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:49:58.328 [DEBUG] [Thread-55355] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:49:58.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:49:58.426 [DEBUG] [Thread-55358] [transport.py] [_log()] starting thread (client mode): 0xd07591e0
2025-11-17T13:49:58.426 [DEBUG] [Thread-55358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:49:58.442 [DEBUG] [Thread-55358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:49:58.442 [INFO] [Thread-55358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:49:58.449 [DEBUG] [Thread-55358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] client lang: <none>
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] server lang: <none>
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] kex follows: False
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:49:58.450 [DEBUG] [Thread-55358] [transport.py] [_log()] Compression: none
2025-11-17T13:49:58.451 [DEBUG] [Thread-55358] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:49:58.513 [DEBUG] [Thread-55358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:49:58.513 [DEBUG] [Thread-55358] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:49:58.514 [DEBUG] [Thread-55358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:49:58.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:49:58.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:49:58.577 [DEBUG] [Thread-55358] [transport.py] [_log()] userauth is OK
2025-11-17T13:49:58.577 [DEBUG] [Thread-55358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:49:58.577 [DEBUG] [Thread-55358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:49:58.577 [DEBUG] [Thread-55358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:49:58.577 [DEBUG] [Thread-55358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:49:58.597 [INFO] [Thread-55358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:49:58.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:49:58.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:49:59.498 [DEBUG] [Thread-55358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:49:59.498 [DEBUG] [Thread-55358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:49:59.546 [DEBUG] [Thread-55358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:49:59.546 [DEBUG] [Thread-55358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:49:59.556 [DEBUG] [Thread-55358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:49:59.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:49:59.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')
2025-11-17T13:49: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
2025-11-17T13:49:59.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:49:59.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:49:59.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:49:59.590 [DEBUG] [Thread-55358] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:50:05.791 [DEBUG] [Thread-55360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:50:14.116 [DEBUG] [Thread-55361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:50:20.829 [DEBUG] [Thread-55362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:50:29.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:50:29.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:50:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:50:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 50, 10), 30.43, 12.31, 0.0, 19.32, 22.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:50:30.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:50:10
2025-11-17T13:50:30.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:50:30.525 [DEBUG] [Thread-55363] [transport.py] [_log()] starting thread (client mode): 0xd07227d0
2025-11-17T13:50:30.525 [DEBUG] [Thread-55363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:50:30.541 [DEBUG] [Thread-55363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:50:30.541 [INFO] [Thread-55363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] client lang: <none>
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] server lang: <none>
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] kex follows: False
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] Compression: none
2025-11-17T13:50:30.543 [DEBUG] [Thread-55363] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:50:30.550 [DEBUG] [Thread-55363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:50:30.550 [DEBUG] [Thread-55363] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:50:30.550 [DEBUG] [Thread-55363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:50:30.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:50:30.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:50:30.551 [DEBUG] [Thread-55363] [transport.py] [_log()] userauth is OK
2025-11-17T13:50:30.551 [DEBUG] [Thread-55363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:50:30.551 [DEBUG] [Thread-55363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:50:30.551 [DEBUG] [Thread-55363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:50:30.551 [DEBUG] [Thread-55363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:50:30.560 [INFO] [Thread-55363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:50:30.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:50:31.196 [DEBUG] [Thread-55363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:50:31.197 [DEBUG] [Thread-55363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:50:31.197 [DEBUG] [Thread-55363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:50:31.238 [DEBUG] [Thread-55363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:50:31.238 [DEBUG] [Thread-55363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:50:31.240 [DEBUG] [Thread-55363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:50:31.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:50:31.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:50:31.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:50:31.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:50:31.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:50:31.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:50:31.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:50:31.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:50:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:50:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.493103 -999.00  +22.90  16.05     17   -2.80 1 1 1 1 1   888    0 26.99 128.47 ----- 16.1 16.1 280.2 22.8 30.1 -27.7 29.7 -26.6 29.7 -30.9 30.8 -25.7
2025-11-17T13:50:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:50:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:50:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.493103
2025-11-17T13:50:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:50:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:50:10', tmtdew=30.43, humidity=12.31, cloud=0.0, wind=19.32, temperature=22.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:50:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:50:31.259 [DEBUG] [Thread-55363] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:50:31.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:50:31.355 [DEBUG] [Thread-55366] [transport.py] [_log()] starting thread (client mode): 0xd31b1900
2025-11-17T13:50:31.355 [DEBUG] [Thread-55366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:50:31.369 [DEBUG] [Thread-55366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:50:31.369 [INFO] [Thread-55366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] client lang: <none>
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] server lang: <none>
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] kex follows: False
2025-11-17T13:50:31.376 [DEBUG] [Thread-55366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:50:31.377 [DEBUG] [Thread-55366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:50:31.377 [DEBUG] [Thread-55366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:50:31.377 [DEBUG] [Thread-55366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:50:31.377 [DEBUG] [Thread-55366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:50:31.377 [DEBUG] [Thread-55366] [transport.py] [_log()] Compression: none
2025-11-17T13:50:31.377 [DEBUG] [Thread-55366] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:50:31.439 [DEBUG] [Thread-55366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:50:31.439 [DEBUG] [Thread-55366] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:50:31.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:50:31.439 [DEBUG] [Thread-55366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:50:31.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:50:31.496 [DEBUG] [Thread-55366] [transport.py] [_log()] userauth is OK
2025-11-17T13:50:31.496 [DEBUG] [Thread-55366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:50:31.496 [DEBUG] [Thread-55366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:50:31.496 [DEBUG] [Thread-55366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:50:31.496 [DEBUG] [Thread-55366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:50:31.511 [INFO] [Thread-55366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:50:31.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:50:31.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:50:32.364 [DEBUG] [Thread-55366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:50:32.364 [DEBUG] [Thread-55366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:50:32.412 [DEBUG] [Thread-55366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:50:32.412 [DEBUG] [Thread-55366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:50:32.420 [DEBUG] [Thread-55366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:50:32.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:50:32.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:50:32.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:50:32.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:50:32.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:50:32.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:50:32.455 [DEBUG] [Thread-55366] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:50:35.857 [DEBUG] [Thread-55368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:50:50.890 [DEBUG] [Thread-55369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:50:54.771 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:50:54.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:51:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:51:02.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:51:02.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:51:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 50, 42), 30.28, 12.57, 0.0, 17.17, 23.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:51:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:50:42
2025-11-17T13:51:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:51:03.384 [DEBUG] [Thread-55370] [transport.py] [_log()] starting thread (client mode): 0xd0758e20
2025-11-17T13:51:03.384 [DEBUG] [Thread-55370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:51:03.403 [DEBUG] [Thread-55370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:51:03.403 [INFO] [Thread-55370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:51:03.406 [DEBUG] [Thread-55370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:51:03.406 [DEBUG] [Thread-55370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:51:03.406 [DEBUG] [Thread-55370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:51:03.406 [DEBUG] [Thread-55370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:51:03.406 [DEBUG] [Thread-55370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] client lang: <none>
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] server lang: <none>
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] kex follows: False
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] Compression: none
2025-11-17T13:51:03.407 [DEBUG] [Thread-55370] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:51:03.424 [DEBUG] [Thread-55370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:51:03.425 [DEBUG] [Thread-55370] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:51:03.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:51:03.426 [DEBUG] [Thread-55370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:51:03.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:51:03.428 [DEBUG] [Thread-55370] [transport.py] [_log()] userauth is OK
2025-11-17T13:51:03.428 [DEBUG] [Thread-55370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:51:03.428 [DEBUG] [Thread-55370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:51:03.428 [DEBUG] [Thread-55370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:51:03.428 [DEBUG] [Thread-55370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:51:03.464 [INFO] [Thread-55370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:51:03.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:51:04.121 [DEBUG] [Thread-55370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:51:04.121 [DEBUG] [Thread-55370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:51:04.121 [DEBUG] [Thread-55370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:51:04.161 [DEBUG] [Thread-55370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:51:04.162 [DEBUG] [Thread-55370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:51:04.165 [DEBUG] [Thread-55370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:51:04.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:51:04.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:51:04.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:51:04.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:51:04.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:51:04.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:51:04.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:51:04.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:51:04.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:51:04.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.493450 -999.00  +22.50  19.60     17   -3.00 1 1 1 1 1   888    0 28.13 143.93 ----- 19.6 19.6 299.0 26.4 30.3 -26.8 29.7 -25.9 29.8 -26.6 30.7 -25.7
2025-11-17T13:51:04.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:51:04.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:51:04.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.493450
2025-11-17T13:51:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:51:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:51:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:51:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:51:04.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:51:04.190 [DEBUG] [Thread-55370] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:51:04.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:50:42', tmtdew=30.28, humidity=12.57, cloud=0.0, wind=17.17, temperature=23.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:50:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:51:04.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:51:04.277 [DEBUG] [Thread-55373] [transport.py] [_log()] starting thread (client mode): 0xd075bc40
2025-11-17T13:51:04.278 [DEBUG] [Thread-55373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:51:04.292 [DEBUG] [Thread-55373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:51:04.293 [INFO] [Thread-55373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] client lang: <none>
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] server lang: <none>
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] kex follows: False
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:51:04.301 [DEBUG] [Thread-55373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:51:04.302 [DEBUG] [Thread-55373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:51:04.302 [DEBUG] [Thread-55373] [transport.py] [_log()] Compression: none
2025-11-17T13:51:04.302 [DEBUG] [Thread-55373] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:51:04.364 [DEBUG] [Thread-55373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:51:04.364 [DEBUG] [Thread-55373] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:51:04.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:51:04.365 [DEBUG] [Thread-55373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:51:04.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:51:04.420 [DEBUG] [Thread-55373] [transport.py] [_log()] userauth is OK
2025-11-17T13:51:04.420 [DEBUG] [Thread-55373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:51:04.420 [DEBUG] [Thread-55373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:51:04.420 [DEBUG] [Thread-55373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:51:04.420 [DEBUG] [Thread-55373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:51:04.440 [INFO] [Thread-55373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:51:04.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:51:04.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:51:05.304 [DEBUG] [Thread-55373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:51:05.304 [DEBUG] [Thread-55373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:51:05.351 [DEBUG] [Thread-55373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:51:05.351 [DEBUG] [Thread-55373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:51:05.360 [DEBUG] [Thread-55373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:51:05.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:51:05.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:51:05.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:51:05.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:51:05.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:51:05.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:51:05.393 [DEBUG] [Thread-55373] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:51:05.916 [DEBUG] [Thread-55375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:51:14.165 [DEBUG] [Thread-55376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:51:20.953 [DEBUG] [Thread-55377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:51:35.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:51:35.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:51:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:51:35.985 [DEBUG] [Thread-55378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:51:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 51, 14), 30.32, 12.54, 0.0, 16.66, 23.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:51:36.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:51:14
2025-11-17T13:51:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:51:36.336 [DEBUG] [Thread-55379] [transport.py] [_log()] starting thread (client mode): 0xd0723dc0
2025-11-17T13:51:36.336 [DEBUG] [Thread-55379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:51:36.356 [DEBUG] [Thread-55379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:51:36.356 [INFO] [Thread-55379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:51:36.359 [DEBUG] [Thread-55379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:51:36.359 [DEBUG] [Thread-55379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:51:36.359 [DEBUG] [Thread-55379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:51:36.359 [DEBUG] [Thread-55379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] client lang: <none>
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] server lang: <none>
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] kex follows: False
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] Compression: none
2025-11-17T13:51:36.360 [DEBUG] [Thread-55379] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:51:36.376 [DEBUG] [Thread-55379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:51:36.377 [DEBUG] [Thread-55379] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:51:36.377 [DEBUG] [Thread-55379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:51:36.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:51:36.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:51:36.379 [DEBUG] [Thread-55379] [transport.py] [_log()] userauth is OK
2025-11-17T13:51:36.380 [DEBUG] [Thread-55379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:51:36.380 [DEBUG] [Thread-55379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:51:36.380 [DEBUG] [Thread-55379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:51:36.380 [DEBUG] [Thread-55379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:51:36.399 [INFO] [Thread-55379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:51:36.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:51:36.998 [DEBUG] [Thread-55379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:51:36.998 [DEBUG] [Thread-55379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:51:36.998 [DEBUG] [Thread-55379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:51:37.040 [DEBUG] [Thread-55379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:51:37.040 [DEBUG] [Thread-55379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:51:37.043 [DEBUG] [Thread-55379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:51:37.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:51:37.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:51:37.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:51:37.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:51:37.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:51:37.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:51:37.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:51:37.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:51:37.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:51:37.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.493797 -999.00  +22.50  15.26     18   -2.70 1 1 1 1 1   888    0 28.35 157.31 ----- 15.3 15.3 280.2 20.5 30.2 -28.2 29.6 -26.1 29.8 -24.4 30.7 -25.7
2025-11-17T13:51:37.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:51:37.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:51:37.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.493797
2025-11-17T13:51:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:51:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:51:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:51:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:51:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:51:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:51:14', tmtdew=30.32, humidity=12.54, cloud=0.0, wind=16.66, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:51:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:51:37.069 [DEBUG] [Thread-55379] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:51:37.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:51:37.166 [DEBUG] [Thread-55382] [transport.py] [_log()] starting thread (client mode): 0xd31edde0
2025-11-17T13:51:37.166 [DEBUG] [Thread-55382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:51:37.182 [DEBUG] [Thread-55382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:51:37.182 [INFO] [Thread-55382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:51:37.191 [DEBUG] [Thread-55382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] client lang: <none>
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] server lang: <none>
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] kex follows: False
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:51:37.192 [DEBUG] [Thread-55382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:51:37.193 [DEBUG] [Thread-55382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:51:37.193 [DEBUG] [Thread-55382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:51:37.193 [DEBUG] [Thread-55382] [transport.py] [_log()] Compression: none
2025-11-17T13:51:37.193 [DEBUG] [Thread-55382] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:51:37.248 [DEBUG] [Thread-55382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:51:37.249 [DEBUG] [Thread-55382] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:51:37.249 [DEBUG] [Thread-55382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:51:37.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:51:37.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:51:37.304 [DEBUG] [Thread-55382] [transport.py] [_log()] userauth is OK
2025-11-17T13:51:37.304 [DEBUG] [Thread-55382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:51:37.305 [DEBUG] [Thread-55382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:51:37.305 [DEBUG] [Thread-55382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:51:37.305 [DEBUG] [Thread-55382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:51:37.324 [INFO] [Thread-55382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:51:37.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:51:37.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:51:38.180 [DEBUG] [Thread-55382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:51:38.180 [DEBUG] [Thread-55382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:51:38.227 [DEBUG] [Thread-55382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:51:38.227 [DEBUG] [Thread-55382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:51:38.236 [DEBUG] [Thread-55382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:51:38.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:51:38.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:51:38.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:51:38.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:51:38.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:51:38.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:51:38.270 [DEBUG] [Thread-55382] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:51:51.011 [DEBUG] [Thread-55384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:51:54.914 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:51:54.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:52:06.040 [DEBUG] [Thread-55385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:52:08.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:52:08.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:52:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:52:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 51, 46), 30.82, 11.98, 0.0, 8.01, 23.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:52:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:51:46
2025-11-17T13:52:09.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:52:09.205 [DEBUG] [Thread-55386] [transport.py] [_log()] starting thread (client mode): 0xd07231f0
2025-11-17T13:52:09.205 [DEBUG] [Thread-55386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:52:09.231 [DEBUG] [Thread-55386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:52:09.232 [INFO] [Thread-55386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:52:09.235 [DEBUG] [Thread-55386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:52:09.235 [DEBUG] [Thread-55386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:52:09.235 [DEBUG] [Thread-55386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] client lang: <none>
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] server lang: <none>
2025-11-17T13:52:09.236 [DEBUG] [Thread-55386] [transport.py] [_log()] kex follows: False
2025-11-17T13:52:09.237 [DEBUG] [Thread-55386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:52:09.237 [DEBUG] [Thread-55386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:52:09.237 [DEBUG] [Thread-55386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:52:09.237 [DEBUG] [Thread-55386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:52:09.237 [DEBUG] [Thread-55386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:52:09.237 [DEBUG] [Thread-55386] [transport.py] [_log()] Compression: none
2025-11-17T13:52:09.237 [DEBUG] [Thread-55386] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:52:09.257 [DEBUG] [Thread-55386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:52:09.257 [DEBUG] [Thread-55386] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:52:09.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:52:09.258 [DEBUG] [Thread-55386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:52:09.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:52:09.260 [DEBUG] [Thread-55386] [transport.py] [_log()] userauth is OK
2025-11-17T13:52:09.261 [DEBUG] [Thread-55386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:52:09.261 [DEBUG] [Thread-55386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:52:09.261 [DEBUG] [Thread-55386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:52:09.261 [DEBUG] [Thread-55386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:52:09.285 [INFO] [Thread-55386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:52:09.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:52:09.902 [DEBUG] [Thread-55386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:52:09.902 [DEBUG] [Thread-55386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:52:09.903 [DEBUG] [Thread-55386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:52:09.944 [DEBUG] [Thread-55386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:52:09.944 [DEBUG] [Thread-55386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:52:09.946 [DEBUG] [Thread-55386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:52:09.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:52:09.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:52:09.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:52:09.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:52:09.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:52:09.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:52:09.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:52:09.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:52:09.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:52:09.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.494144 -999.00  +22.50   5.90     18   -2.80 1 1 1 1 1   888    0 28.79 169.12 ----- 5.9 5.9 270.4 16.0 30.3 -26.5 29.7 -25.5 29.8 -25.2 30.8 -24.8
2025-11-17T13:52:09.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:52:09.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:52:09.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.494144
2025-11-17T13:52:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:52:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:52:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:52:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:52:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:52:09.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:51:46', tmtdew=30.82, humidity=11.98, cloud=0.0, wind=8.01, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:51:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:52:09.970 [DEBUG] [Thread-55386] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:52:10.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:52:10.070 [DEBUG] [Thread-55389] [transport.py] [_log()] starting thread (client mode): 0xd0720430
2025-11-17T13:52:10.070 [DEBUG] [Thread-55389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:52:10.086 [DEBUG] [Thread-55389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:52:10.086 [INFO] [Thread-55389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:52:10.094 [DEBUG] [Thread-55389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:52:10.094 [DEBUG] [Thread-55389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:52:10.094 [DEBUG] [Thread-55389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:52:10.094 [DEBUG] [Thread-55389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:52:10.094 [DEBUG] [Thread-55389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:52:10.094 [DEBUG] [Thread-55389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:52:10.094 [DEBUG] [Thread-55389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:52:10.094 [DEBUG] [Thread-55389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] client lang: <none>
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] server lang: <none>
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] kex follows: False
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:52:10.095 [DEBUG] [Thread-55389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:52:10.096 [DEBUG] [Thread-55389] [transport.py] [_log()] Compression: none
2025-11-17T13:52:10.096 [DEBUG] [Thread-55389] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:52:10.152 [DEBUG] [Thread-55389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:52:10.152 [DEBUG] [Thread-55389] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:52:10.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:52:10.153 [DEBUG] [Thread-55389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:52:10.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:52:10.208 [DEBUG] [Thread-55389] [transport.py] [_log()] userauth is OK
2025-11-17T13:52:10.208 [DEBUG] [Thread-55389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:52:10.208 [DEBUG] [Thread-55389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:52:10.208 [DEBUG] [Thread-55389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:52:10.209 [DEBUG] [Thread-55389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:52:10.227 [INFO] [Thread-55389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:52:10.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:52:10.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:52:11.099 [DEBUG] [Thread-55389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:52:11.099 [DEBUG] [Thread-55389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:52:11.147 [DEBUG] [Thread-55389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:52:11.147 [DEBUG] [Thread-55389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:52:11.157 [DEBUG] [Thread-55389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:52:11.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:52:11.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:52:11.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:52:11.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:52:11.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:52:11.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:52:11.193 [DEBUG] [Thread-55389] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:52:14.219 [DEBUG] [Thread-55391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:52:21.066 [DEBUG] [Thread-55392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:52:36.109 [DEBUG] [Thread-55393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:52:41.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:52:41.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:52:41.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:52:41.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 52, 19), 31.1, 11.74, 0.0, 8.52, 23.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:52:41.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:52:19
2025-11-17T13:52:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:52:42.129 [DEBUG] [Thread-55394] [transport.py] [_log()] starting thread (client mode): 0xd075b1f0
2025-11-17T13:52:42.129 [DEBUG] [Thread-55394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:52:42.149 [DEBUG] [Thread-55394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:52:42.149 [INFO] [Thread-55394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:52:42.152 [DEBUG] [Thread-55394] [transport.py] [_log()] client lang: <none>
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] server lang: <none>
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] kex follows: False
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] Compression: none
2025-11-17T13:52:42.153 [DEBUG] [Thread-55394] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:52:42.175 [DEBUG] [Thread-55394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:52:42.175 [DEBUG] [Thread-55394] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:52:42.176 [DEBUG] [Thread-55394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:52:42.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:52:42.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:52:42.178 [DEBUG] [Thread-55394] [transport.py] [_log()] userauth is OK
2025-11-17T13:52:42.178 [DEBUG] [Thread-55394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:52:42.178 [DEBUG] [Thread-55394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:52:42.178 [DEBUG] [Thread-55394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:52:42.178 [DEBUG] [Thread-55394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:52:42.202 [INFO] [Thread-55394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:52:42.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:52:42.858 [DEBUG] [Thread-55394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:52:42.858 [DEBUG] [Thread-55394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:52:42.858 [DEBUG] [Thread-55394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:52:42.898 [DEBUG] [Thread-55394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:52:42.899 [DEBUG] [Thread-55394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:52:42.901 [DEBUG] [Thread-55394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:52:42.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:52:42.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:52:42.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:52:42.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:52:42.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:52:42.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:52:42.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:52:42.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:52:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:52:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.494492 -999.00  +22.50  14.16     17   -3.10 1 1 1 1 1   888    0 28.37 160.41 ----- 14.2 14.2 306.4 18.8 30.4 -26.5 29.7 -25.9 29.8 -25.8 30.8 -25.2
2025-11-17T13:52:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:52:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:52:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.494492
2025-11-17T13:52:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:52:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:52:42.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:52:42.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:52:42.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:52:42.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:52:19', tmtdew=31.1, humidity=11.74, cloud=0.0, wind=8.52, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:52:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:52:42.926 [DEBUG] [Thread-55394] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:52:43.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:52:43.022 [DEBUG] [Thread-55397] [transport.py] [_log()] starting thread (client mode): 0xd31b2b60
2025-11-17T13:52:43.022 [DEBUG] [Thread-55397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:52:43.037 [DEBUG] [Thread-55397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:52:43.037 [INFO] [Thread-55397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] client lang: <none>
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] server lang: <none>
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] kex follows: False
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:52:43.045 [DEBUG] [Thread-55397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:52:43.046 [DEBUG] [Thread-55397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:52:43.046 [DEBUG] [Thread-55397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:52:43.046 [DEBUG] [Thread-55397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:52:43.046 [DEBUG] [Thread-55397] [transport.py] [_log()] Compression: none
2025-11-17T13:52:43.046 [DEBUG] [Thread-55397] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:52:43.108 [DEBUG] [Thread-55397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:52:43.109 [DEBUG] [Thread-55397] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:52:43.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:52:43.110 [DEBUG] [Thread-55397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:52:43.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:52:43.164 [DEBUG] [Thread-55397] [transport.py] [_log()] userauth is OK
2025-11-17T13:52:43.164 [DEBUG] [Thread-55397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:52:43.164 [DEBUG] [Thread-55397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:52:43.164 [DEBUG] [Thread-55397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:52:43.165 [DEBUG] [Thread-55397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:52:43.184 [INFO] [Thread-55397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:52:43.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:52:43.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:52:44.026 [DEBUG] [Thread-55397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:52:44.026 [DEBUG] [Thread-55397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:52:44.074 [DEBUG] [Thread-55397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:52:44.074 [DEBUG] [Thread-55397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:52:44.084 [DEBUG] [Thread-55397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:52:44.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:52:44.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:52:44.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:52:44.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:52:44.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:52:44.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:52:44.119 [DEBUG] [Thread-55397] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:52:51.142 [DEBUG] [Thread-55399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:52:55.056 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:52:55.058 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:53:06.178 [DEBUG] [Thread-55400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:53:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:53:14.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:53:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:53:14.267 [DEBUG] [Thread-55401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:53:14.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 52, 51), 31.46, 11.5, 0.0, 12.0, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:53:14.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:52:51
2025-11-17T13:53:14.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:53:15.067 [DEBUG] [Thread-55402] [transport.py] [_log()] starting thread (client mode): 0xd07587f0
2025-11-17T13:53:15.067 [DEBUG] [Thread-55402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:53:15.090 [DEBUG] [Thread-55402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:53:15.090 [INFO] [Thread-55402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:53:15.094 [DEBUG] [Thread-55402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:53:15.094 [DEBUG] [Thread-55402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:53:15.094 [DEBUG] [Thread-55402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:53:15.094 [DEBUG] [Thread-55402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:53:15.094 [DEBUG] [Thread-55402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:53:15.094 [DEBUG] [Thread-55402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] client lang: <none>
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] server lang: <none>
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] kex follows: False
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:53:15.095 [DEBUG] [Thread-55402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:53:15.096 [DEBUG] [Thread-55402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:53:15.096 [DEBUG] [Thread-55402] [transport.py] [_log()] Compression: none
2025-11-17T13:53:15.096 [DEBUG] [Thread-55402] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:53:15.112 [DEBUG] [Thread-55402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:53:15.113 [DEBUG] [Thread-55402] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:53:15.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:53:15.113 [DEBUG] [Thread-55402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:53:15.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:53:15.156 [DEBUG] [Thread-55402] [transport.py] [_log()] userauth is OK
2025-11-17T13:53:15.156 [DEBUG] [Thread-55402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:53:15.156 [DEBUG] [Thread-55402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:53:15.156 [DEBUG] [Thread-55402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:53:15.157 [DEBUG] [Thread-55402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:53:15.191 [INFO] [Thread-55402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:53:15.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:53:15.826 [DEBUG] [Thread-55402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:53:15.826 [DEBUG] [Thread-55402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:53:15.827 [DEBUG] [Thread-55402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:53:15.867 [DEBUG] [Thread-55402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:53:15.867 [DEBUG] [Thread-55402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:53:15.870 [DEBUG] [Thread-55402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:53:15.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:53:15.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:53:15.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:53:15.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:53:15.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:53:15.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:53:15.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:53:15.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:53:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:53:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.494839 -999.00  +22.30   8.88     18   -3.00 1 1 1 1 1   888    0 28.75 163.01 ----- 8.9 8.9 287.4 14.5 30.4 -26.8 29.7 -26.2 29.8 -28.3 30.9 -25.0
2025-11-17T13:53:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:53:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:53:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.494839
2025-11-17T13:53:15.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:53:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:53:15.896 [DEBUG] [Thread-55402] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:53:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:53:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:53:15.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:53:15.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:52:51', tmtdew=31.46, humidity=11.5, cloud=0.0, wind=12.0, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:52:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:53:15.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:53:15.998 [DEBUG] [Thread-55405] [transport.py] [_log()] starting thread (client mode): 0xd07be020
2025-11-17T13:53:15.998 [DEBUG] [Thread-55405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:53:16.012 [DEBUG] [Thread-55405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:53:16.012 [INFO] [Thread-55405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:53:16.019 [DEBUG] [Thread-55405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:53:16.019 [DEBUG] [Thread-55405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:53:16.019 [DEBUG] [Thread-55405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] client lang: <none>
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] server lang: <none>
2025-11-17T13:53:16.020 [DEBUG] [Thread-55405] [transport.py] [_log()] kex follows: False
2025-11-17T13:53:16.021 [DEBUG] [Thread-55405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:53:16.021 [DEBUG] [Thread-55405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:53:16.021 [DEBUG] [Thread-55405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:53:16.021 [DEBUG] [Thread-55405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:53:16.021 [DEBUG] [Thread-55405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:53:16.021 [DEBUG] [Thread-55405] [transport.py] [_log()] Compression: none
2025-11-17T13:53:16.021 [DEBUG] [Thread-55405] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:53:16.075 [DEBUG] [Thread-55405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:53:16.076 [DEBUG] [Thread-55405] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:53:16.076 [DEBUG] [Thread-55405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:53:16.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:53:16.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:53:16.132 [DEBUG] [Thread-55405] [transport.py] [_log()] userauth is OK
2025-11-17T13:53:16.132 [DEBUG] [Thread-55405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:53:16.132 [DEBUG] [Thread-55405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:53:16.132 [DEBUG] [Thread-55405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:53:16.132 [DEBUG] [Thread-55405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:53:16.151 [INFO] [Thread-55405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:53:16.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:53:16.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:53:17.033 [DEBUG] [Thread-55405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:53:17.033 [DEBUG] [Thread-55405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:53:17.081 [DEBUG] [Thread-55405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:53:17.081 [DEBUG] [Thread-55405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:53:17.090 [DEBUG] [Thread-55405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:53:17.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:53:17.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:53:17.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:53:17.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:53:17.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:53:17.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:53:17.124 [DEBUG] [Thread-55405] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:53:21.204 [DEBUG] [Thread-55407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:53:36.248 [DEBUG] [Thread-55408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:53:47.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:53:47.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:53:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:53:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 53, 23), 31.38, 11.56, 0.0, 18.01, 23.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:53:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:53:23
2025-11-17T13:53:47.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:53:48.072 [DEBUG] [Thread-55409] [transport.py] [_log()] starting thread (client mode): 0xd31b2290
2025-11-17T13:53:48.072 [DEBUG] [Thread-55409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:53:48.090 [DEBUG] [Thread-55409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:53:48.090 [INFO] [Thread-55409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:53:48.093 [DEBUG] [Thread-55409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:53:48.093 [DEBUG] [Thread-55409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:53:48.093 [DEBUG] [Thread-55409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:53:48.093 [DEBUG] [Thread-55409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:53:48.093 [DEBUG] [Thread-55409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:53:48.093 [DEBUG] [Thread-55409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:53:48.093 [DEBUG] [Thread-55409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:53:48.093 [DEBUG] [Thread-55409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] client lang: <none>
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] server lang: <none>
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] kex follows: False
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] Compression: none
2025-11-17T13:53:48.094 [DEBUG] [Thread-55409] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:53:48.113 [DEBUG] [Thread-55409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:53:48.113 [DEBUG] [Thread-55409] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:53:48.113 [DEBUG] [Thread-55409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:53:48.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:53:48.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:53:48.115 [DEBUG] [Thread-55409] [transport.py] [_log()] userauth is OK
2025-11-17T13:53:48.115 [DEBUG] [Thread-55409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:53:48.115 [DEBUG] [Thread-55409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:53:48.115 [DEBUG] [Thread-55409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:53:48.115 [DEBUG] [Thread-55409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:53:48.130 [INFO] [Thread-55409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:53:48.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:53:48.779 [DEBUG] [Thread-55409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:53:48.779 [DEBUG] [Thread-55409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:53:48.780 [DEBUG] [Thread-55409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:53:48.820 [DEBUG] [Thread-55409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:53:48.821 [DEBUG] [Thread-55409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:53:48.824 [DEBUG] [Thread-55409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:53:48.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:53:48.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:53:48.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:53:48.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:53:48.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:53:48.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:53:48.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:53:48.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:53:48.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:53:48.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.495186 -999.00  +22.40  19.50     18   -2.80 1 1 1 1 1   888    0 28.57 168.03 ----- 19.5 19.5 308.8 24.8 30.4 -24.4 29.7 -25.7 29.8 -26.2 30.9 -23.7
2025-11-17T13:53:48.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:53:48.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:53:48.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.495186
2025-11-17T13:53:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:53:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:53:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:53:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:53:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:53:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:53:23', tmtdew=31.38, humidity=11.56, cloud=0.0, wind=18.01, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:53:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:53:48.849 [DEBUG] [Thread-55409] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:53:48.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:53:48.947 [DEBUG] [Thread-55412] [transport.py] [_log()] starting thread (client mode): 0xd31b1990
2025-11-17T13:53:48.947 [DEBUG] [Thread-55412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:53:48.962 [DEBUG] [Thread-55412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:53:48.963 [INFO] [Thread-55412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] client lang: <none>
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] server lang: <none>
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] kex follows: False
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:53:48.970 [DEBUG] [Thread-55412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:53:48.971 [DEBUG] [Thread-55412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:53:48.971 [DEBUG] [Thread-55412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:53:48.971 [DEBUG] [Thread-55412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:53:48.971 [DEBUG] [Thread-55412] [transport.py] [_log()] Compression: none
2025-11-17T13:53:48.971 [DEBUG] [Thread-55412] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:53:49.032 [DEBUG] [Thread-55412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:53:49.033 [DEBUG] [Thread-55412] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:53:49.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:53:49.033 [DEBUG] [Thread-55412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:53:49.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:53:49.088 [DEBUG] [Thread-55412] [transport.py] [_log()] userauth is OK
2025-11-17T13:53:49.088 [DEBUG] [Thread-55412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:53:49.088 [DEBUG] [Thread-55412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:53:49.088 [DEBUG] [Thread-55412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:53:49.089 [DEBUG] [Thread-55412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:53:49.109 [INFO] [Thread-55412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:53:49.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:53:49.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:53:50.002 [DEBUG] [Thread-55412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:53:50.002 [DEBUG] [Thread-55412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:53:50.050 [DEBUG] [Thread-55412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:53:50.050 [DEBUG] [Thread-55412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:53:50.059 [DEBUG] [Thread-55412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:53:50.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:53:50.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:53:50.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:53:50.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:53:50.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:53:50.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:53:50.098 [DEBUG] [Thread-55412] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:53:51.284 [DEBUG] [Thread-55414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:53:55.200 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:53:55.201 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:54:06.334 [DEBUG] [Thread-55415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:54:14.322 [DEBUG] [Thread-55416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:54:20.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:54:20.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:54:20.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:54:20.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 53, 55), 30.76, 12.41, 0.0, 34.19, 23.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:54:20.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:53:55
2025-11-17T13:54:20.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:54:21.017 [DEBUG] [Thread-55417] [transport.py] [_log()] starting thread (client mode): 0xd07cca60
2025-11-17T13:54:21.017 [DEBUG] [Thread-55417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:54:21.037 [DEBUG] [Thread-55417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:54:21.037 [INFO] [Thread-55417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] client lang: <none>
2025-11-17T13:54:21.039 [DEBUG] [Thread-55417] [transport.py] [_log()] server lang: <none>
2025-11-17T13:54:21.040 [DEBUG] [Thread-55417] [transport.py] [_log()] kex follows: False
2025-11-17T13:54:21.040 [DEBUG] [Thread-55417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:54:21.040 [DEBUG] [Thread-55417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:54:21.040 [DEBUG] [Thread-55417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:54:21.040 [DEBUG] [Thread-55417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:54:21.040 [DEBUG] [Thread-55417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:54:21.040 [DEBUG] [Thread-55417] [transport.py] [_log()] Compression: none
2025-11-17T13:54:21.040 [DEBUG] [Thread-55417] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:54:21.050 [DEBUG] [Thread-55417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:54:21.050 [DEBUG] [Thread-55417] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:54:21.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:54:21.051 [DEBUG] [Thread-55417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:54:21.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:54:21.053 [DEBUG] [Thread-55417] [transport.py] [_log()] userauth is OK
2025-11-17T13:54:21.053 [DEBUG] [Thread-55417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:54:21.053 [DEBUG] [Thread-55417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:54:21.053 [DEBUG] [Thread-55417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:54:21.053 [DEBUG] [Thread-55417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:54:21.077 [INFO] [Thread-55417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:54:21.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:54:21.367 [DEBUG] [Thread-55419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:54:21.724 [DEBUG] [Thread-55417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:54:21.724 [DEBUG] [Thread-55417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:54:21.724 [DEBUG] [Thread-55417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:54:21.765 [DEBUG] [Thread-55417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:54:21.765 [DEBUG] [Thread-55417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:54:21.768 [DEBUG] [Thread-55417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:54:21.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:54:21.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:54:21.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:54:21.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:54:21.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:54:21.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:54:21.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:54:21.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.495881 -999.00  +23.80  23.71     18   -1.60 1 1 1 1 1   888    0 30.33 198.64 ----- 23.7 23.7 308.6 30.3 30.4 -25.1 29.6 -25.3 29.8 -25.8 30.8 -23.9
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.495881
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:54:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:53:55', tmtdew=30.76, humidity=12.41, cloud=0.0, wind=34.19, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:54:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:54:21.788 [DEBUG] [Thread-55417] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:54:21.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:54:21.871 [DEBUG] [Thread-55421] [transport.py] [_log()] starting thread (client mode): 0xd07cd600
2025-11-17T13:54:21.872 [DEBUG] [Thread-55421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:54:21.888 [DEBUG] [Thread-55421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:54:21.889 [INFO] [Thread-55421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] client lang: <none>
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] server lang: <none>
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] kex follows: False
2025-11-17T13:54:21.896 [DEBUG] [Thread-55421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:54:21.897 [DEBUG] [Thread-55421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:54:21.897 [DEBUG] [Thread-55421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:54:21.897 [DEBUG] [Thread-55421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:54:21.897 [DEBUG] [Thread-55421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:54:21.897 [DEBUG] [Thread-55421] [transport.py] [_log()] Compression: none
2025-11-17T13:54:21.897 [DEBUG] [Thread-55421] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:54:21.954 [DEBUG] [Thread-55421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:54:21.954 [DEBUG] [Thread-55421] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:54:21.955 [DEBUG] [Thread-55421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:54:21.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:54:21.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:54:22.012 [DEBUG] [Thread-55421] [transport.py] [_log()] userauth is OK
2025-11-17T13:54:22.012 [DEBUG] [Thread-55421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:54:22.012 [DEBUG] [Thread-55421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:54:22.012 [DEBUG] [Thread-55421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:54:22.012 [DEBUG] [Thread-55421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:54:22.025 [INFO] [Thread-55421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:54:22.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:54:22.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:54:22.860 [DEBUG] [Thread-55421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:54:22.861 [DEBUG] [Thread-55421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:54:22.909 [DEBUG] [Thread-55421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:54:22.909 [DEBUG] [Thread-55421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:54:22.917 [DEBUG] [Thread-55421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:54:22.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:54:22.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:54:22.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:54:22.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:54:22.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:54:22.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:54:22.949 [DEBUG] [Thread-55421] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:54:36.397 [DEBUG] [Thread-55423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:54:51.441 [DEBUG] [Thread-55424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:54:52.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:54:52.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:54:52.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:54:53.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 54, 27), 30.69, 12.46, 0.0, 30.42, 23.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:54:53.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:54:27
2025-11-17T13:54:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:54:53.887 [DEBUG] [Thread-55425] [transport.py] [_log()] starting thread (client mode): 0xd0723580
2025-11-17T13:54:53.888 [DEBUG] [Thread-55425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:54:53.903 [DEBUG] [Thread-55425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:54:53.903 [INFO] [Thread-55425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:54:53.906 [DEBUG] [Thread-55425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:54:53.906 [DEBUG] [Thread-55425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:54:53.906 [DEBUG] [Thread-55425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] client lang: <none>
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] server lang: <none>
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] kex follows: False
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] Compression: none
2025-11-17T13:54:53.907 [DEBUG] [Thread-55425] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:54:53.926 [DEBUG] [Thread-55425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:54:53.926 [DEBUG] [Thread-55425] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:54:53.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:54:53.927 [DEBUG] [Thread-55425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:54:53.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:54:53.929 [DEBUG] [Thread-55425] [transport.py] [_log()] userauth is OK
2025-11-17T13:54:53.929 [DEBUG] [Thread-55425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:54:53.929 [DEBUG] [Thread-55425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:54:53.929 [DEBUG] [Thread-55425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:54:53.930 [DEBUG] [Thread-55425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:54:53.964 [INFO] [Thread-55425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:54:53.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:54:54.564 [DEBUG] [Thread-55425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:54:54.564 [DEBUG] [Thread-55425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:54:54.564 [DEBUG] [Thread-55425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:54:54.605 [DEBUG] [Thread-55425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:54:54.605 [DEBUG] [Thread-55425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:54:54.608 [DEBUG] [Thread-55425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:54:54.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:54:54.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:54:54.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:54:54.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:54:54.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:54:54.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:54:54.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:54:54.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:54:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:54:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.496228 -999.00  +24.60  41.31     17   -1.60 1 1 2 1 1   888    0 30.87 227.09 ----- 41.3 41.3 312.6 44.7 30.4 -26.4 29.6 -25.5 29.9 -27.1 30.8 -25.6
2025-11-17T13:54:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:54:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:54:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.496228
2025-11-17T13:54:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:54:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:54:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:54:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:54:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:54:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:54:27', tmtdew=30.69, humidity=12.46, cloud=0.0, wind=30.42, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:54:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:54:54.633 [DEBUG] [Thread-55425] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:54:54.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:54:54.729 [DEBUG] [Thread-55428] [transport.py] [_log()] starting thread (client mode): 0xd31ef0a0
2025-11-17T13:54:54.729 [DEBUG] [Thread-55428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:54:54.744 [DEBUG] [Thread-55428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:54:54.744 [INFO] [Thread-55428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:54:54.752 [DEBUG] [Thread-55428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:54:54.752 [DEBUG] [Thread-55428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:54:54.752 [DEBUG] [Thread-55428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:54:54.752 [DEBUG] [Thread-55428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:54:54.752 [DEBUG] [Thread-55428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:54:54.752 [DEBUG] [Thread-55428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] client lang: <none>
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] server lang: <none>
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] kex follows: False
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] Compression: none
2025-11-17T13:54:54.753 [DEBUG] [Thread-55428] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:54:54.811 [DEBUG] [Thread-55428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:54:54.812 [DEBUG] [Thread-55428] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:54:54.812 [DEBUG] [Thread-55428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:54:54.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:54:54.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:54:54.868 [DEBUG] [Thread-55428] [transport.py] [_log()] userauth is OK
2025-11-17T13:54:54.869 [DEBUG] [Thread-55428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:54:54.869 [DEBUG] [Thread-55428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:54:54.869 [DEBUG] [Thread-55428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:54:54.869 [DEBUG] [Thread-55428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:54:54.888 [INFO] [Thread-55428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:54:54.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:54:54.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:54:55.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:54:55.347 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:54:55.766 [DEBUG] [Thread-55428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:54:55.766 [DEBUG] [Thread-55428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:54:55.822 [DEBUG] [Thread-55428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:54:55.822 [DEBUG] [Thread-55428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:54:55.831 [DEBUG] [Thread-55428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:54:55.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:54:55.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:54:55.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:54:55.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:54:55.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:54:55.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:54:55.866 [DEBUG] [Thread-55428] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:55:06.469 [DEBUG] [Thread-55430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:55:14.374 [DEBUG] [Thread-55431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:55:21.509 [DEBUG] [Thread-55432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:55:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:55:25.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:55:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:55:26.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 54, 59), 30.45, 12.69, 0.0, 32.68, 23.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:55:26.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:54:59
2025-11-17T13:55:26.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:55:26.805 [DEBUG] [Thread-55433] [transport.py] [_log()] starting thread (client mode): 0xd07bc0a0
2025-11-17T13:55:26.805 [DEBUG] [Thread-55433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:55:26.825 [DEBUG] [Thread-55433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:55:26.825 [INFO] [Thread-55433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] client lang: <none>
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] server lang: <none>
2025-11-17T13:55:26.828 [DEBUG] [Thread-55433] [transport.py] [_log()] kex follows: False
2025-11-17T13:55:26.829 [DEBUG] [Thread-55433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:55:26.829 [DEBUG] [Thread-55433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:55:26.829 [DEBUG] [Thread-55433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:55:26.829 [DEBUG] [Thread-55433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:55:26.829 [DEBUG] [Thread-55433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:55:26.829 [DEBUG] [Thread-55433] [transport.py] [_log()] Compression: none
2025-11-17T13:55:26.829 [DEBUG] [Thread-55433] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:55:26.847 [DEBUG] [Thread-55433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:55:26.847 [DEBUG] [Thread-55433] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:55:26.848 [DEBUG] [Thread-55433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:55:26.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:55:26.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:55:26.850 [DEBUG] [Thread-55433] [transport.py] [_log()] userauth is OK
2025-11-17T13:55:26.850 [DEBUG] [Thread-55433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:55:26.850 [DEBUG] [Thread-55433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:55:26.850 [DEBUG] [Thread-55433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:55:26.850 [DEBUG] [Thread-55433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:55:26.885 [INFO] [Thread-55433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:55:26.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:55:27.554 [DEBUG] [Thread-55433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:55:27.554 [DEBUG] [Thread-55433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:55:27.555 [DEBUG] [Thread-55433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:55:27.595 [DEBUG] [Thread-55433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:55:27.595 [DEBUG] [Thread-55433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:55:27.598 [DEBUG] [Thread-55433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:55:27.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:55:27.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:55:27.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:55:27.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:55:27.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:55:27.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:55:27.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:55:27.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:55:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:55:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.496575 -999.00  +23.50  31.96     18   -1.90 1 1 2 1 1   888    0 31.20 240.10 ----- 32.0 32.0 310.8 38.5 30.2 -26.2 29.6 -25.8 29.8 -27.5 30.7 -25.2
2025-11-17T13:55:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:55:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:55:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.496575
2025-11-17T13:55:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:55:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:55:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:55:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:55:27.621 [DEBUG] [Thread-55433] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:55:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:55:27.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:54:59', tmtdew=30.45, humidity=12.69, cloud=0.0, wind=32.68, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:55:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:55:27.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:55:27.714 [DEBUG] [Thread-55436] [transport.py] [_log()] starting thread (client mode): 0xd0787250
2025-11-17T13:55:27.714 [DEBUG] [Thread-55436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:55:27.729 [DEBUG] [Thread-55436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:55:27.730 [INFO] [Thread-55436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:55:27.737 [DEBUG] [Thread-55436] [transport.py] [_log()] client lang: <none>
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] server lang: <none>
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] kex follows: False
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] Compression: none
2025-11-17T13:55:27.738 [DEBUG] [Thread-55436] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:55:27.799 [DEBUG] [Thread-55436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:55:27.799 [DEBUG] [Thread-55436] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:55:27.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:55:27.800 [DEBUG] [Thread-55436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:55:27.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:55:27.856 [DEBUG] [Thread-55436] [transport.py] [_log()] userauth is OK
2025-11-17T13:55:27.856 [DEBUG] [Thread-55436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:55:27.856 [DEBUG] [Thread-55436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:55:27.856 [DEBUG] [Thread-55436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:55:27.857 [DEBUG] [Thread-55436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:55:27.876 [INFO] [Thread-55436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:55:27.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:55:27.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:55:28.813 [DEBUG] [Thread-55436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:55:28.814 [DEBUG] [Thread-55436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:55:28.861 [DEBUG] [Thread-55436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:55:28.861 [DEBUG] [Thread-55436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:55:28.870 [DEBUG] [Thread-55436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:55:28.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:55:28.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:55:28.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:55:28.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:55:28.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:55:28.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:55:28.905 [DEBUG] [Thread-55436] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:55:36.540 [DEBUG] [Thread-55438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:55:51.582 [DEBUG] [Thread-55439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:55:55.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:55:55.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:55:58.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:55:58.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:55:58.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:55:59.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 55, 31), 30.32, 12.81, 0.0, 32.57, 23.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:55:59.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:55:31
2025-11-17T13:55:59.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:55:59.844 [DEBUG] [Thread-55440] [transport.py] [_log()] starting thread (client mode): 0xd0785ed0
2025-11-17T13:55:59.845 [DEBUG] [Thread-55440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:55:59.865 [DEBUG] [Thread-55440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:55:59.865 [INFO] [Thread-55440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] client lang: <none>
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] server lang: <none>
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] kex follows: False
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] Compression: none
2025-11-17T13:55:59.869 [DEBUG] [Thread-55440] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:55:59.885 [DEBUG] [Thread-55440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:55:59.886 [DEBUG] [Thread-55440] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:55:59.886 [DEBUG] [Thread-55440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:55:59.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:55:59.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:55:59.889 [DEBUG] [Thread-55440] [transport.py] [_log()] userauth is OK
2025-11-17T13:55:59.889 [DEBUG] [Thread-55440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:55:59.889 [DEBUG] [Thread-55440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:55:59.889 [DEBUG] [Thread-55440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:55:59.889 [DEBUG] [Thread-55440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:55:59.904 [INFO] [Thread-55440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:55:59.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:56:00.480 [DEBUG] [Thread-55440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:56:00.480 [DEBUG] [Thread-55440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:56:00.480 [DEBUG] [Thread-55440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:56:00.520 [DEBUG] [Thread-55440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:56:00.520 [DEBUG] [Thread-55440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:56:00.524 [DEBUG] [Thread-55440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:56:00.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:56:00.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:56:00.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:56:00.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:56:00.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:56:00.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:56:00.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:56:00.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:56:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:56:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.496922 -999.00  +23.20  25.96     18   -2.20 1 1 1 1 1   888    0 31.47 229.94 ----- 26.0 26.0 317.0 35.3 30.1 -26.2 29.4 -25.8 29.7 -26.8 30.6 -25.2
2025-11-17T13:56:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:56:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:56:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.496922
2025-11-17T13:56:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:56:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:56:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:56:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:56:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:56:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:55:31', tmtdew=30.32, humidity=12.81, cloud=0.0, wind=32.57, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:55:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:56:00.548 [DEBUG] [Thread-55440] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:56:00.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:56:00.648 [DEBUG] [Thread-55443] [transport.py] [_log()] starting thread (client mode): 0xd3135150
2025-11-17T13:56:00.648 [DEBUG] [Thread-55443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:56:00.664 [DEBUG] [Thread-55443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:56:00.664 [INFO] [Thread-55443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:56:00.672 [DEBUG] [Thread-55443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:56:00.672 [DEBUG] [Thread-55443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:56:00.672 [DEBUG] [Thread-55443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:56:00.672 [DEBUG] [Thread-55443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:56:00.672 [DEBUG] [Thread-55443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:56:00.672 [DEBUG] [Thread-55443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:56:00.672 [DEBUG] [Thread-55443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:56:00.672 [DEBUG] [Thread-55443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] client lang: <none>
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] server lang: <none>
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] kex follows: False
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:56:00.673 [DEBUG] [Thread-55443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:56:00.674 [DEBUG] [Thread-55443] [transport.py] [_log()] Compression: none
2025-11-17T13:56:00.674 [DEBUG] [Thread-55443] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:56:00.733 [DEBUG] [Thread-55443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:56:00.733 [DEBUG] [Thread-55443] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:56:00.734 [DEBUG] [Thread-55443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:56:00.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:56:00.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:56:00.788 [DEBUG] [Thread-55443] [transport.py] [_log()] userauth is OK
2025-11-17T13:56:00.788 [DEBUG] [Thread-55443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:56:00.788 [DEBUG] [Thread-55443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:56:00.789 [DEBUG] [Thread-55443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:56:00.789 [DEBUG] [Thread-55443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:56:00.810 [INFO] [Thread-55443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:56:00.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:56:00.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:56:01.692 [DEBUG] [Thread-55443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:56:01.692 [DEBUG] [Thread-55443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:56:01.741 [DEBUG] [Thread-55443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:56:01.741 [DEBUG] [Thread-55443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:56:01.749 [DEBUG] [Thread-55443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:56:01.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:56:01.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:56:01.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:56:01.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:56:01.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:56:01.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:56:01.780 [DEBUG] [Thread-55443] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:56:06.610 [DEBUG] [Thread-55445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:56:14.439 [DEBUG] [Thread-55446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:56:21.659 [DEBUG] [Thread-55447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:56:31.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:56:31.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:56:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:56:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 56, 3), 30.82, 12.39, 0.0, 30.31, 23.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:56:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:56:03
2025-11-17T13:56:32.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:56:32.687 [DEBUG] [Thread-55448] [transport.py] [_log()] starting thread (client mode): 0xd31ed480
2025-11-17T13:56:32.687 [DEBUG] [Thread-55448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:56:32.706 [DEBUG] [Thread-55448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:56:32.706 [INFO] [Thread-55448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:56:32.709 [DEBUG] [Thread-55448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:56:32.709 [DEBUG] [Thread-55448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] client lang: <none>
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] server lang: <none>
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] kex follows: False
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] Compression: none
2025-11-17T13:56:32.710 [DEBUG] [Thread-55448] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:56:32.725 [DEBUG] [Thread-55448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:56:32.726 [DEBUG] [Thread-55448] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:56:32.726 [DEBUG] [Thread-55448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:56:32.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:56:32.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:56:32.728 [DEBUG] [Thread-55448] [transport.py] [_log()] userauth is OK
2025-11-17T13:56:32.729 [DEBUG] [Thread-55448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:56:32.729 [DEBUG] [Thread-55448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:56:32.729 [DEBUG] [Thread-55448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:56:32.729 [DEBUG] [Thread-55448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:56:32.761 [INFO] [Thread-55448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:56:32.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:56:33.395 [DEBUG] [Thread-55448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:56:33.395 [DEBUG] [Thread-55448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:56:33.396 [DEBUG] [Thread-55448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:56:33.437 [DEBUG] [Thread-55448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:56:33.437 [DEBUG] [Thread-55448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:56:33.440 [DEBUG] [Thread-55448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:56:33.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:56:33.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:56:33.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:56:33.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:56:33.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:56:33.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:56:33.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:56:33.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:56:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:56:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.497269 -999.00  +23.50  31.98     18   -1.90 1 1 2 1 1   888    0 31.62 231.39 ----- 32.0 32.0 304.9 38.7 30.1 -25.3 29.3 -26.3 29.6 -24.5 30.5 -24.5
2025-11-17T13:56:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:56:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:56:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.497269
2025-11-17T13:56:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:56:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:56:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:56:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:56:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:56:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:56:03', tmtdew=30.82, humidity=12.39, cloud=0.0, wind=30.31, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:56:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:56:33.465 [DEBUG] [Thread-55448] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:56:33.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:56:33.562 [DEBUG] [Thread-55451] [transport.py] [_log()] starting thread (client mode): 0xd07bcbb0
2025-11-17T13:56:33.562 [DEBUG] [Thread-55451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:56:33.576 [DEBUG] [Thread-55451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:56:33.577 [INFO] [Thread-55451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:56:33.584 [DEBUG] [Thread-55451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:56:33.584 [DEBUG] [Thread-55451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] client lang: <none>
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] server lang: <none>
2025-11-17T13:56:33.585 [DEBUG] [Thread-55451] [transport.py] [_log()] kex follows: False
2025-11-17T13:56:33.586 [DEBUG] [Thread-55451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:56:33.586 [DEBUG] [Thread-55451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:56:33.586 [DEBUG] [Thread-55451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:56:33.586 [DEBUG] [Thread-55451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:56:33.586 [DEBUG] [Thread-55451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:56:33.586 [DEBUG] [Thread-55451] [transport.py] [_log()] Compression: none
2025-11-17T13:56:33.586 [DEBUG] [Thread-55451] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:56:33.645 [DEBUG] [Thread-55451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:56:33.645 [DEBUG] [Thread-55451] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:56:33.645 [DEBUG] [Thread-55451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:56:33.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:56:33.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:56:33.700 [DEBUG] [Thread-55451] [transport.py] [_log()] userauth is OK
2025-11-17T13:56:33.701 [DEBUG] [Thread-55451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:56:33.701 [DEBUG] [Thread-55451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:56:33.701 [DEBUG] [Thread-55451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:56:33.701 [DEBUG] [Thread-55451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:56:33.720 [INFO] [Thread-55451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:56:33.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:56:33.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:56:34.612 [DEBUG] [Thread-55451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:56:34.612 [DEBUG] [Thread-55451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:56:34.660 [DEBUG] [Thread-55451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:56:34.660 [DEBUG] [Thread-55451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:56:34.669 [DEBUG] [Thread-55451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:56:34.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:56:34.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:56:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:56:34.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:56:34.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:56:34.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:56:34.703 [DEBUG] [Thread-55451] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:56:36.686 [DEBUG] [Thread-55453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:56:51.718 [DEBUG] [Thread-55454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:56:55.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:56:55.631 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:57:04.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:57:04.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:57:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:57:05.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 56, 35), 30.72, 12.39, 0.0, 32.43, 23.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:57:05.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:56:35
2025-11-17T13:57:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:57:05.653 [DEBUG] [Thread-55455] [transport.py] [_log()] starting thread (client mode): 0xd31cf4f0
2025-11-17T13:57:05.654 [DEBUG] [Thread-55455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:57:05.673 [DEBUG] [Thread-55455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:57:05.673 [INFO] [Thread-55455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:57:05.677 [DEBUG] [Thread-55455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:57:05.677 [DEBUG] [Thread-55455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:57:05.677 [DEBUG] [Thread-55455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:57:05.677 [DEBUG] [Thread-55455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:57:05.677 [DEBUG] [Thread-55455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:57:05.677 [DEBUG] [Thread-55455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:57:05.677 [DEBUG] [Thread-55455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:57:05.677 [DEBUG] [Thread-55455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] client lang: <none>
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] server lang: <none>
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] kex follows: False
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] Compression: none
2025-11-17T13:57:05.678 [DEBUG] [Thread-55455] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:57:05.696 [DEBUG] [Thread-55455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:57:05.696 [DEBUG] [Thread-55455] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:57:05.697 [DEBUG] [Thread-55455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:57:05.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:57:05.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:57:05.699 [DEBUG] [Thread-55455] [transport.py] [_log()] userauth is OK
2025-11-17T13:57:05.699 [DEBUG] [Thread-55455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:57:05.699 [DEBUG] [Thread-55455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:57:05.699 [DEBUG] [Thread-55455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:57:05.699 [DEBUG] [Thread-55455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:57:05.723 [INFO] [Thread-55455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:57:05.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:57:06.376 [DEBUG] [Thread-55455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:57:06.376 [DEBUG] [Thread-55455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:57:06.376 [DEBUG] [Thread-55455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:57:06.416 [DEBUG] [Thread-55455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:57:06.417 [DEBUG] [Thread-55455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:57:06.419 [DEBUG] [Thread-55455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:57:06.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:57:06.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:57:06.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:57:06.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:57:06.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:57:06.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:57:06.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:57:06.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:57:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:57:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.497617 -999.00  +23.60  30.75     18   -2.00 1 1 2 1 1   888    0 31.67 232.83 ----- 30.8 30.8 305.8 39.5 29.9 -26.1 29.2 -26.4 29.6 -26.1 30.4 -25.7
2025-11-17T13:57:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:57:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:57:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.497617
2025-11-17T13:57:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:57:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:57:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:57:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:57:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:57:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:56:35', tmtdew=30.72, humidity=12.39, cloud=0.0, wind=32.43, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:56:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:57:06.444 [DEBUG] [Thread-55455] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:57:06.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:57:06.541 [DEBUG] [Thread-55458] [transport.py] [_log()] starting thread (client mode): 0xd07ce8c0
2025-11-17T13:57:06.541 [DEBUG] [Thread-55458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:57:06.556 [DEBUG] [Thread-55458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:57:06.556 [INFO] [Thread-55458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:57:06.563 [DEBUG] [Thread-55458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] client lang: <none>
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] server lang: <none>
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] kex follows: False
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] Compression: none
2025-11-17T13:57:06.564 [DEBUG] [Thread-55458] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:57:06.620 [DEBUG] [Thread-55458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:57:06.620 [DEBUG] [Thread-55458] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:57:06.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:57:06.621 [DEBUG] [Thread-55458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:57:06.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:57:06.676 [DEBUG] [Thread-55458] [transport.py] [_log()] userauth is OK
2025-11-17T13:57:06.676 [DEBUG] [Thread-55458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:57:06.677 [DEBUG] [Thread-55458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:57:06.677 [DEBUG] [Thread-55458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:57:06.677 [DEBUG] [Thread-55458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:57:06.696 [INFO] [Thread-55458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:57:06.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:57:06.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:57:06.744 [DEBUG] [Thread-55460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:57:07.579 [DEBUG] [Thread-55458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:57:07.579 [DEBUG] [Thread-55458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:57:07.627 [DEBUG] [Thread-55458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:57:07.627 [DEBUG] [Thread-55458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:57:07.636 [DEBUG] [Thread-55458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:57:07.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:57:07.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:57:07.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
2025-11-17T13:57:07.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:57:07.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:57:07.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:57:07.667 [DEBUG] [Thread-55458] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:57:14.494 [DEBUG] [Thread-55461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:57:21.784 [DEBUG] [Thread-55462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:57:36.814 [DEBUG] [Thread-55463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:57:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:57:37.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:57:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:57:38.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 57, 7), 30.76, 12.39, 0.0, 36.47, 23.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:57:38.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:57:07
2025-11-17T13:57:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:57:38.636 [DEBUG] [Thread-55464] [transport.py] [_log()] starting thread (client mode): 0xd31b19c0
2025-11-17T13:57:38.636 [DEBUG] [Thread-55464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:57:38.656 [DEBUG] [Thread-55464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:57:38.656 [INFO] [Thread-55464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] client lang: <none>
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] server lang: <none>
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] kex follows: False
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:57:38.659 [DEBUG] [Thread-55464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:57:38.660 [DEBUG] [Thread-55464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:57:38.660 [DEBUG] [Thread-55464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:57:38.660 [DEBUG] [Thread-55464] [transport.py] [_log()] Compression: none
2025-11-17T13:57:38.660 [DEBUG] [Thread-55464] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:57:38.676 [DEBUG] [Thread-55464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:57:38.677 [DEBUG] [Thread-55464] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:57:38.677 [DEBUG] [Thread-55464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:57:38.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:57:38.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:57:38.677 [DEBUG] [Thread-55464] [transport.py] [_log()] userauth is OK
2025-11-17T13:57:38.677 [DEBUG] [Thread-55464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:57:38.677 [DEBUG] [Thread-55464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:57:38.677 [DEBUG] [Thread-55464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:57:38.677 [DEBUG] [Thread-55464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:57:38.687 [INFO] [Thread-55464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:57:38.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:57:39.290 [DEBUG] [Thread-55464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:57:39.290 [DEBUG] [Thread-55464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:57:39.290 [DEBUG] [Thread-55464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:57:39.331 [DEBUG] [Thread-55464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:57:39.331 [DEBUG] [Thread-55464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:57:39.333 [DEBUG] [Thread-55464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:57:39.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:57:39.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:57:39.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:57:39.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:57:39.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:57:39.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:57:39.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.497964 -999.00  +23.50  29.85     18   -2.10 1 1 1 1 1   888    0 31.86 228.22 ----- 29.9 29.9 312.2 39.4 30.0 -25.2 29.2 -26.0 29.4 -26.1 30.4 -24.6
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.497964
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:57:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:57:07', tmtdew=30.76, humidity=12.39, cloud=0.0, wind=36.47, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:57:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:57:39.350 [DEBUG] [Thread-55464] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:57:39.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:57:39.435 [DEBUG] [Thread-55467] [transport.py] [_log()] starting thread (client mode): 0xd071aa40
2025-11-17T13:57:39.435 [DEBUG] [Thread-55467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:57:39.453 [DEBUG] [Thread-55467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:57:39.453 [INFO] [Thread-55467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] client lang: <none>
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] server lang: <none>
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] kex follows: False
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] Compression: none
2025-11-17T13:57:39.461 [DEBUG] [Thread-55467] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:57:39.519 [DEBUG] [Thread-55467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:57:39.519 [DEBUG] [Thread-55467] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:57:39.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:57:39.520 [DEBUG] [Thread-55467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:57:39.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:57:39.576 [DEBUG] [Thread-55467] [transport.py] [_log()] userauth is OK
2025-11-17T13:57:39.576 [DEBUG] [Thread-55467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:57:39.576 [DEBUG] [Thread-55467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:57:39.576 [DEBUG] [Thread-55467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:57:39.576 [DEBUG] [Thread-55467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:57:39.594 [INFO] [Thread-55467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:57:39.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:57:39.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:57:40.461 [DEBUG] [Thread-55467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:57:40.461 [DEBUG] [Thread-55467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:57:40.509 [DEBUG] [Thread-55467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:57:40.509 [DEBUG] [Thread-55467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:57:40.517 [DEBUG] [Thread-55467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:57:40.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:57:40.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:57:40.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:57:40.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:57:40.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:57:40.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:57:40.548 [DEBUG] [Thread-55467] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:57:51.847 [DEBUG] [Thread-55469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:57:55.779 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:57:55.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:58:06.890 [DEBUG] [Thread-55470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:58:10.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:58:10.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:58:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:58:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 57, 39), 30.29, 13.01, 0.0, 34.25, 23.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:58:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:57:39
2025-11-17T13:58:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:58:11.466 [DEBUG] [Thread-55471] [transport.py] [_log()] starting thread (client mode): 0xd0719fc0
2025-11-17T13:58:11.466 [DEBUG] [Thread-55471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:58:11.486 [DEBUG] [Thread-55471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:58:11.486 [INFO] [Thread-55471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:58:11.489 [DEBUG] [Thread-55471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:58:11.489 [DEBUG] [Thread-55471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:58:11.489 [DEBUG] [Thread-55471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:58:11.489 [DEBUG] [Thread-55471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] client lang: <none>
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] server lang: <none>
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] kex follows: False
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] Compression: none
2025-11-17T13:58:11.490 [DEBUG] [Thread-55471] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:58:11.509 [DEBUG] [Thread-55471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:58:11.509 [DEBUG] [Thread-55471] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:58:11.509 [DEBUG] [Thread-55471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:58:11.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:58:11.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:58:11.510 [DEBUG] [Thread-55471] [transport.py] [_log()] userauth is OK
2025-11-17T13:58:11.510 [DEBUG] [Thread-55471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:58:11.510 [DEBUG] [Thread-55471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:58:11.510 [DEBUG] [Thread-55471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:58:11.510 [DEBUG] [Thread-55471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:58:11.520 [INFO] [Thread-55471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:58:11.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:58:12.154 [DEBUG] [Thread-55471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:58:12.154 [DEBUG] [Thread-55471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:58:12.154 [DEBUG] [Thread-55471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:58:12.195 [DEBUG] [Thread-55471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:58:12.195 [DEBUG] [Thread-55471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:58:12.197 [DEBUG] [Thread-55471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:58:12.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:58:12.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:58:12.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:58:12.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:58:12.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:58:12.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:58:12.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:58:12.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:58:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:58:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.498311 -999.00  +23.80  28.12     18   -1.60 1 1 1 1 1   888    0 30.85 207.54 ----- 28.1 28.1 298.2 36.5 29.9 -27.2 29.2 -25.8 29.6 -23.5 30.4 -25.2
2025-11-17T13:58:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:58:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:58:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.498311
2025-11-17T13:58:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:58:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:58:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:58:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:58:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:58:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:57:39', tmtdew=30.29, humidity=13.01, cloud=0.0, wind=34.25, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:57:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:58:12.217 [DEBUG] [Thread-55471] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:58:12.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:58:12.303 [DEBUG] [Thread-55474] [transport.py] [_log()] starting thread (client mode): 0xd07851b0
2025-11-17T13:58:12.303 [DEBUG] [Thread-55474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:58:12.319 [DEBUG] [Thread-55474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:58:12.319 [INFO] [Thread-55474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] client lang: <none>
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] server lang: <none>
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] kex follows: False
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] Compression: none
2025-11-17T13:58:12.327 [DEBUG] [Thread-55474] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:58:12.389 [DEBUG] [Thread-55474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:58:12.389 [DEBUG] [Thread-55474] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:58:12.389 [DEBUG] [Thread-55474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:58:12.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:58:12.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:58:12.450 [DEBUG] [Thread-55474] [transport.py] [_log()] userauth is OK
2025-11-17T13:58:12.450 [DEBUG] [Thread-55474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:58:12.450 [DEBUG] [Thread-55474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:58:12.450 [DEBUG] [Thread-55474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:58:12.450 [DEBUG] [Thread-55474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:58:12.466 [INFO] [Thread-55474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:58:12.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:58:12.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:58:13.335 [DEBUG] [Thread-55474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:58:13.335 [DEBUG] [Thread-55474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:58:13.383 [DEBUG] [Thread-55474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:58:13.383 [DEBUG] [Thread-55474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:58:13.391 [DEBUG] [Thread-55474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:58:13.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:58:13.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:58:13.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:58:13.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:58:13.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:58:13.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:58:13.424 [DEBUG] [Thread-55474] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:58:14.543 [DEBUG] [Thread-55476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:58:21.921 [DEBUG] [Thread-55477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:58:36.965 [DEBUG] [Thread-55478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:58:43.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:58:43.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:58:43.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:58:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 58, 11), 30.11, 13.12, 0.0, 29.73, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:58:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:58:11
2025-11-17T13:58:44.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:58:44.378 [DEBUG] [Thread-55479] [transport.py] [_log()] starting thread (client mode): 0xd3135810
2025-11-17T13:58:44.378 [DEBUG] [Thread-55479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:58:44.398 [DEBUG] [Thread-55479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:58:44.398 [INFO] [Thread-55479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:58:44.407 [DEBUG] [Thread-55479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] client lang: <none>
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] server lang: <none>
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] kex follows: False
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] Compression: none
2025-11-17T13:58:44.408 [DEBUG] [Thread-55479] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:58:44.423 [DEBUG] [Thread-55479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:58:44.423 [DEBUG] [Thread-55479] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:58:44.423 [DEBUG] [Thread-55479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:58:44.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:58:44.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:58:44.424 [DEBUG] [Thread-55479] [transport.py] [_log()] userauth is OK
2025-11-17T13:58:44.424 [DEBUG] [Thread-55479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:58:44.424 [DEBUG] [Thread-55479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:58:44.424 [DEBUG] [Thread-55479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:58:44.424 [DEBUG] [Thread-55479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:58:44.434 [INFO] [Thread-55479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:58:44.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:58:45.071 [DEBUG] [Thread-55479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:58:45.071 [DEBUG] [Thread-55479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:58:45.071 [DEBUG] [Thread-55479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:58:45.112 [DEBUG] [Thread-55479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:58:45.112 [DEBUG] [Thread-55479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:58:45.114 [DEBUG] [Thread-55479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:58:45.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:58:45.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:58:45.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:58:45.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:58:45.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:58:45.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:58:45.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.498658 -999.00  +23.60  36.24     18   -1.70 1 1 2 1 1   888    0 30.24 195.97 ----- 36.2 36.2 295.6 41.3 29.8 -25.8 29.2 -25.8 29.4 -25.0 30.2 -25.2
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.498658
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:58:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:58:45.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:58:11', tmtdew=30.11, humidity=13.12, cloud=0.0, wind=29.73, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:58:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:58:45.131 [DEBUG] [Thread-55479] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:58:45.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:58:45.215 [DEBUG] [Thread-55482] [transport.py] [_log()] starting thread (client mode): 0xd31350f0
2025-11-17T13:58:45.215 [DEBUG] [Thread-55482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:58:45.231 [DEBUG] [Thread-55482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:58:45.231 [INFO] [Thread-55482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:58:45.240 [DEBUG] [Thread-55482] [transport.py] [_log()] client lang: <none>
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] server lang: <none>
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] kex follows: False
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] Compression: none
2025-11-17T13:58:45.241 [DEBUG] [Thread-55482] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:58:45.297 [DEBUG] [Thread-55482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:58:45.297 [DEBUG] [Thread-55482] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:58:45.298 [DEBUG] [Thread-55482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:58:45.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:58:45.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:58:45.352 [DEBUG] [Thread-55482] [transport.py] [_log()] userauth is OK
2025-11-17T13:58:45.352 [DEBUG] [Thread-55482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:58:45.353 [DEBUG] [Thread-55482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:58:45.353 [DEBUG] [Thread-55482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:58:45.353 [DEBUG] [Thread-55482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:58:45.372 [INFO] [Thread-55482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:58:45.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:58:45.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:58:46.303 [DEBUG] [Thread-55482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:58:46.303 [DEBUG] [Thread-55482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:58:46.352 [DEBUG] [Thread-55482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:58:46.352 [DEBUG] [Thread-55482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:58:46.361 [DEBUG] [Thread-55482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:58:46.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:58:46.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:58:46.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
2025-11-17T13:58:46.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:58:46.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:58:46.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:58:46.396 [DEBUG] [Thread-55482] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:58:51.995 [DEBUG] [Thread-55484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:58:55.921 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:58:55.922 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:59:07.026 [DEBUG] [Thread-55485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:59:14.596 [DEBUG] [Thread-55486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:59:16.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:59:16.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:59: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
2025-11-17T13:59:17.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 58, 43), 29.51, 13.26, 0.0, 28.09, 23.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:59:17.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:58:43
2025-11-17T13:59:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:59:17.380 [DEBUG] [Thread-55487] [transport.py] [_log()] starting thread (client mode): 0xd071a2f0
2025-11-17T13:59:17.380 [DEBUG] [Thread-55487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:59:17.400 [DEBUG] [Thread-55487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:59:17.400 [INFO] [Thread-55487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:59:17.403 [DEBUG] [Thread-55487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:59:17.403 [DEBUG] [Thread-55487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] client lang: <none>
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] server lang: <none>
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] kex follows: False
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] Compression: none
2025-11-17T13:59:17.404 [DEBUG] [Thread-55487] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:59:17.420 [DEBUG] [Thread-55487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:59:17.421 [DEBUG] [Thread-55487] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:59:17.421 [DEBUG] [Thread-55487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:59:17.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:59:17.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:59:17.423 [DEBUG] [Thread-55487] [transport.py] [_log()] userauth is OK
2025-11-17T13:59:17.424 [DEBUG] [Thread-55487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:59:17.424 [DEBUG] [Thread-55487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:59:17.424 [DEBUG] [Thread-55487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:59:17.424 [DEBUG] [Thread-55487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:59:17.441 [INFO] [Thread-55487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:59:17.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:59:18.078 [DEBUG] [Thread-55487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:59:18.078 [DEBUG] [Thread-55487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:59:18.079 [DEBUG] [Thread-55487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:59:18.120 [DEBUG] [Thread-55487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:59:18.120 [DEBUG] [Thread-55487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:59:18.123 [DEBUG] [Thread-55487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:59:18.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:59:18.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:59:18.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:59:18.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:59:18.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:59:18.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:59:18.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:59:18.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:59:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:59:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.499353 -999.00  +23.30  26.59     19   -1.50 1 1 1 1 1   888    0 29.90 181.54 ----- 26.6 26.6 312.0 39.0 29.9 -23.7 29.1 -25.3 29.4 -23.3 30.3 -23.6
2025-11-17T13:59:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:59:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:59:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.499353
2025-11-17T13:59:18.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:59:18.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:59:18.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:59:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:59:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:59:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:58:43', tmtdew=29.51, humidity=13.26, cloud=0.0, wind=28.09, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:59:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:59:18.147 [DEBUG] [Thread-55487] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:59:18.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:59:18.253 [DEBUG] [Thread-55490] [transport.py] [_log()] starting thread (client mode): 0xd078db10
2025-11-17T13:59:18.253 [DEBUG] [Thread-55490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:59:18.269 [DEBUG] [Thread-55490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:59:18.269 [INFO] [Thread-55490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:59:18.276 [DEBUG] [Thread-55490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:59:18.276 [DEBUG] [Thread-55490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] client lang: <none>
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] server lang: <none>
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] kex follows: False
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] Compression: none
2025-11-17T13:59:18.277 [DEBUG] [Thread-55490] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:59:18.336 [DEBUG] [Thread-55490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:59:18.336 [DEBUG] [Thread-55490] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:59:18.336 [DEBUG] [Thread-55490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:59:18.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:59:18.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:59:18.392 [DEBUG] [Thread-55490] [transport.py] [_log()] userauth is OK
2025-11-17T13:59:18.393 [DEBUG] [Thread-55490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:59:18.393 [DEBUG] [Thread-55490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:59:18.393 [DEBUG] [Thread-55490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:59:18.393 [DEBUG] [Thread-55490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:59:18.413 [INFO] [Thread-55490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:59:18.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:59:18.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:59:19.301 [DEBUG] [Thread-55490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:59:19.301 [DEBUG] [Thread-55490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:59:19.349 [DEBUG] [Thread-55490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:59:19.349 [DEBUG] [Thread-55490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:59:19.358 [DEBUG] [Thread-55490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:59:19.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:59: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')
2025-11-17T13:59:19.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:59:19.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:59:19.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:59:19.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:59:19.392 [DEBUG] [Thread-55490] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:59:22.056 [DEBUG] [Thread-55492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:59:37.096 [DEBUG] [Thread-55493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:59:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T13:59:49.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T13:59:49.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T13:59:50.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 13, 59, 47), 29.82, 13.49, 0.0, 29.31, 23.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T13:59:50.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 13:59:47
2025-11-17T13:59:50.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T13:59:50.309 [DEBUG] [Thread-55494] [transport.py] [_log()] starting thread (client mode): 0xd071aef0
2025-11-17T13:59:50.310 [DEBUG] [Thread-55494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:59:50.329 [DEBUG] [Thread-55494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T13:59:50.329 [INFO] [Thread-55494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] client lang: <none>
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] server lang: <none>
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] kex follows: False
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] Compression: none
2025-11-17T13:59:50.332 [DEBUG] [Thread-55494] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:59:50.351 [DEBUG] [Thread-55494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:59:50.352 [DEBUG] [Thread-55494] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:59:50.352 [DEBUG] [Thread-55494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T13:59:50.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T13:59:50.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:59:50.354 [DEBUG] [Thread-55494] [transport.py] [_log()] userauth is OK
2025-11-17T13:59:50.354 [DEBUG] [Thread-55494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:59:50.355 [DEBUG] [Thread-55494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:59:50.355 [DEBUG] [Thread-55494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T13:59:50.355 [DEBUG] [Thread-55494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:59:50.377 [INFO] [Thread-55494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:59:50.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:59:50.969 [DEBUG] [Thread-55494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:59:50.970 [DEBUG] [Thread-55494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:59:50.970 [DEBUG] [Thread-55494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T13:59:51.011 [DEBUG] [Thread-55494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:59:51.011 [DEBUG] [Thread-55494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:59:51.013 [DEBUG] [Thread-55494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:59:51.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:59:51.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T13:59:51.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T13:59:51.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T13:59:51.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:59:51.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T13:59:51.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:59:51.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:59:51.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T13:59:51.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.499700 -999.00  +23.60  31.87     18   -1.40 1 1 2 1 1   888    0 29.76 180.40 ----- 31.9 31.9 307.6 40.5 29.8 -25.4 29.2 -25.2 29.3 -24.1 30.2 -25.1
2025-11-17T13:59:51.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T13:59:51.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T13:59:51.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.499700
2025-11-17T13:59:51.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T13:59:51.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T13:59:51.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T13:59:51.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T13:59:51.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T13:59:51.038 [DEBUG] [Thread-55494] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:59:51.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T13:59:47', tmtdew=29.82, humidity=13.49, cloud=0.0, wind=29.31, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T11:59:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T13:59:51.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T13:59:51.137 [DEBUG] [Thread-55497] [transport.py] [_log()] starting thread (client mode): 0xd0719000
2025-11-17T13:59:51.137 [DEBUG] [Thread-55497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T13:59:51.153 [DEBUG] [Thread-55497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T13:59:51.153 [INFO] [Thread-55497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T13:59:51.161 [DEBUG] [Thread-55497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T13:59:51.161 [DEBUG] [Thread-55497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T13:59:51.161 [DEBUG] [Thread-55497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T13:59:51.161 [DEBUG] [Thread-55497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:59:51.161 [DEBUG] [Thread-55497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T13:59:51.161 [DEBUG] [Thread-55497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:59:51.161 [DEBUG] [Thread-55497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T13:59:51.161 [DEBUG] [Thread-55497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] client lang: <none>
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] server lang: <none>
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] kex follows: False
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T13:59:51.162 [DEBUG] [Thread-55497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T13:59:51.163 [DEBUG] [Thread-55497] [transport.py] [_log()] Compression: none
2025-11-17T13:59:51.163 [DEBUG] [Thread-55497] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T13:59:51.221 [DEBUG] [Thread-55497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T13:59:51.222 [DEBUG] [Thread-55497] [transport.py] [_log()] Switch to new keys ...
2025-11-17T13:59:51.222 [DEBUG] [Thread-55497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T13:59:51.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T13:59:51.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T13:59:51.276 [DEBUG] [Thread-55497] [transport.py] [_log()] userauth is OK
2025-11-17T13:59:51.276 [DEBUG] [Thread-55497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T13:59:51.276 [DEBUG] [Thread-55497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T13:59:51.276 [DEBUG] [Thread-55497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T13:59:51.276 [DEBUG] [Thread-55497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T13:59:51.296 [INFO] [Thread-55497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T13:59:51.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T13:59:51.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T13:59:52.127 [DEBUG] [Thread-55499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:59:52.161 [DEBUG] [Thread-55497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T13:59:52.161 [DEBUG] [Thread-55497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T13:59:52.209 [DEBUG] [Thread-55497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T13:59:52.209 [DEBUG] [Thread-55497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T13:59:52.218 [DEBUG] [Thread-55497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T13:59:52.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T13:59:52.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T13:59:52.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T13:59:52.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T13:59:52.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T13:59:52.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T13:59:52.253 [DEBUG] [Thread-55497] [transport.py] [_log()] EOF in transport thread
2025-11-17T13:59:56.062 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T13:59:56.063 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:00:07.168 [DEBUG] [Thread-55500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:00:14.649 [DEBUG] [Thread-55501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:00:22.201 [DEBUG] [Thread-55502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:00:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:00:22.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:00:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:00:22.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 0, 19), 29.78, 13.54, 0.0, 30.12, 23.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:00:22.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:00:19
2025-11-17T14:00:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:00:23.198 [DEBUG] [Thread-55503] [transport.py] [_log()] starting thread (client mode): 0xd078ccd0
2025-11-17T14:00:23.198 [DEBUG] [Thread-55503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:00:23.219 [DEBUG] [Thread-55503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:00:23.219 [INFO] [Thread-55503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:00:23.222 [DEBUG] [Thread-55503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] client lang: <none>
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] server lang: <none>
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] kex follows: False
2025-11-17T14:00:23.223 [DEBUG] [Thread-55503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:00:23.224 [DEBUG] [Thread-55503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:00:23.224 [DEBUG] [Thread-55503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:00:23.224 [DEBUG] [Thread-55503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:00:23.224 [DEBUG] [Thread-55503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:00:23.224 [DEBUG] [Thread-55503] [transport.py] [_log()] Compression: none
2025-11-17T14:00:23.224 [DEBUG] [Thread-55503] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:00:23.241 [DEBUG] [Thread-55503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:00:23.242 [DEBUG] [Thread-55503] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:00:23.242 [DEBUG] [Thread-55503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:00:23.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:00:23.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:00:23.244 [DEBUG] [Thread-55503] [transport.py] [_log()] userauth is OK
2025-11-17T14:00:23.244 [DEBUG] [Thread-55503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:00:23.244 [DEBUG] [Thread-55503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:00:23.245 [DEBUG] [Thread-55503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:00:23.245 [DEBUG] [Thread-55503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:00:23.268 [INFO] [Thread-55503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:00:23.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:00:23.902 [DEBUG] [Thread-55503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:00:23.903 [DEBUG] [Thread-55503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:00:23.903 [DEBUG] [Thread-55503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:00:23.944 [DEBUG] [Thread-55503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:00:23.944 [DEBUG] [Thread-55503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:00:23.947 [DEBUG] [Thread-55503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:00:23.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:00:23.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:00:23.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:00:23.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:00:23.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:00:23.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:00:23.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:00:23.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:00:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:00:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.500047 -999.00  +23.20  29.24     19   -1.40 1 1 1 1 1   888    0 29.22 168.93 ----- 29.2 29.2 313.8 39.5 29.6 -25.8 29.1 -25.1 29.2 -29.3 30.1 -24.6
2025-11-17T14:00:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:00:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:00:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.500047
2025-11-17T14:00:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:00:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:00:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:00:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:00:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:00:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:00:19', tmtdew=29.78, humidity=13.54, cloud=0.0, wind=30.12, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:00:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:00:23.971 [DEBUG] [Thread-55503] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:00:24.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:00:24.068 [DEBUG] [Thread-55506] [transport.py] [_log()] starting thread (client mode): 0xd3135840
2025-11-17T14:00:24.068 [DEBUG] [Thread-55506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:00:24.086 [DEBUG] [Thread-55506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:00:24.086 [INFO] [Thread-55506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] client lang: <none>
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] server lang: <none>
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] kex follows: False
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:00:24.094 [DEBUG] [Thread-55506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:00:24.095 [DEBUG] [Thread-55506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:00:24.095 [DEBUG] [Thread-55506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:00:24.095 [DEBUG] [Thread-55506] [transport.py] [_log()] Compression: none
2025-11-17T14:00:24.095 [DEBUG] [Thread-55506] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:00:24.151 [DEBUG] [Thread-55506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:00:24.152 [DEBUG] [Thread-55506] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:00:24.152 [DEBUG] [Thread-55506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:00:24.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:00:24.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:00:24.208 [DEBUG] [Thread-55506] [transport.py] [_log()] userauth is OK
2025-11-17T14:00:24.208 [DEBUG] [Thread-55506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:00:24.208 [DEBUG] [Thread-55506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:00:24.209 [DEBUG] [Thread-55506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:00:24.209 [DEBUG] [Thread-55506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:00:24.227 [INFO] [Thread-55506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:00:24.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:00:24.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:00:25.084 [DEBUG] [Thread-55506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:00:25.084 [DEBUG] [Thread-55506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:00:25.131 [DEBUG] [Thread-55506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:00:25.131 [DEBUG] [Thread-55506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:00:25.140 [DEBUG] [Thread-55506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:00:25.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:00:25.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:00:25.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:00:25.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:00:25.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:00:25.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:00:25.175 [DEBUG] [Thread-55506] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:00:37.234 [DEBUG] [Thread-55508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:00:52.277 [DEBUG] [Thread-55509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:00:55.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:00:55.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:00:55.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:00:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 0, 51), 29.53, 13.52, 0.0, 27.42, 23.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:00:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:00:51
2025-11-17T14:00:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:00:56.106 [DEBUG] [Thread-55510] [transport.py] [_log()] starting thread (client mode): 0xd07587f0
2025-11-17T14:00:56.106 [DEBUG] [Thread-55510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:00:56.129 [DEBUG] [Thread-55510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:00:56.129 [INFO] [Thread-55510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:00:56.132 [DEBUG] [Thread-55510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:00:56.132 [DEBUG] [Thread-55510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:00:56.132 [DEBUG] [Thread-55510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:00:56.132 [DEBUG] [Thread-55510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:00:56.132 [DEBUG] [Thread-55510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:00:56.132 [DEBUG] [Thread-55510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:00:56.132 [DEBUG] [Thread-55510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] client lang: <none>
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] server lang: <none>
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] kex follows: False
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] Compression: none
2025-11-17T14:00:56.133 [DEBUG] [Thread-55510] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:00:56.146 [DEBUG] [Thread-55510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:00:56.147 [DEBUG] [Thread-55510] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:00:56.147 [DEBUG] [Thread-55510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:00:56.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:00:56.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:00:56.149 [DEBUG] [Thread-55510] [transport.py] [_log()] userauth is OK
2025-11-17T14:00:56.149 [DEBUG] [Thread-55510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:00:56.150 [DEBUG] [Thread-55510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:00:56.150 [DEBUG] [Thread-55510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:00:56.150 [DEBUG] [Thread-55510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:00:56.185 [INFO] [Thread-55510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:00:56.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:00:56.204 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:00:56.206 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:00:56.819 [DEBUG] [Thread-55510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:00:56.820 [DEBUG] [Thread-55510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:00:56.820 [DEBUG] [Thread-55510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:00:56.860 [DEBUG] [Thread-55510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:00:56.860 [DEBUG] [Thread-55510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:00:56.863 [DEBUG] [Thread-55510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:00:56.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:00:56.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:00:56.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:00:56.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:00:56.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:00:56.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:00:56.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:00:56.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:00:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:00:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.500394 -999.00  +23.30  29.12     19   -1.50 1 1 1 1 1   888    0 28.98 152.85 ----- 29.1 29.1 294.0 43.7 29.6 -25.7 28.9 -25.7 29.0 -30.3 30.0 -25.3
2025-11-17T14:00:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:00:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:00:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.500394
2025-11-17T14:00:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:00:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:00:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:00:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:00:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:00:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:00:51', tmtdew=29.53, humidity=13.52, cloud=0.0, wind=27.42, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:00:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:00:56.885 [DEBUG] [Thread-55510] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:00:56.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:00:56.981 [DEBUG] [Thread-55513] [transport.py] [_log()] starting thread (client mode): 0xd078c3a0
2025-11-17T14:00:56.981 [DEBUG] [Thread-55513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:00:56.998 [DEBUG] [Thread-55513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:00:56.999 [INFO] [Thread-55513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:00:57.006 [DEBUG] [Thread-55513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:00:57.006 [DEBUG] [Thread-55513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:00:57.006 [DEBUG] [Thread-55513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] client lang: <none>
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] server lang: <none>
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] kex follows: False
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:00:57.007 [DEBUG] [Thread-55513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:00:57.008 [DEBUG] [Thread-55513] [transport.py] [_log()] Compression: none
2025-11-17T14:00:57.008 [DEBUG] [Thread-55513] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:00:57.064 [DEBUG] [Thread-55513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:00:57.064 [DEBUG] [Thread-55513] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:00:57.065 [DEBUG] [Thread-55513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:00:57.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:00:57.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:00:57.120 [DEBUG] [Thread-55513] [transport.py] [_log()] userauth is OK
2025-11-17T14:00:57.120 [DEBUG] [Thread-55513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:00:57.120 [DEBUG] [Thread-55513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:00:57.120 [DEBUG] [Thread-55513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:00:57.120 [DEBUG] [Thread-55513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:00:57.140 [INFO] [Thread-55513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:00:57.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:00:57.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:00:58.100 [DEBUG] [Thread-55513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:00:58.100 [DEBUG] [Thread-55513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:00:58.147 [DEBUG] [Thread-55513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:00:58.147 [DEBUG] [Thread-55513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:00:58.156 [DEBUG] [Thread-55513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:00:58.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:00:58.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:00:58.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:00:58.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:00:58.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:00:58.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:00:58.190 [DEBUG] [Thread-55513] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:01:07.306 [DEBUG] [Thread-55515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:01:14.682 [DEBUG] [Thread-55516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:01:22.347 [DEBUG] [Thread-55517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:01:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:01:28.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:01:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:01:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 1, 23), 29.97, 13.17, 0.0, 31.78, 23.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:01:28.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:01:23
2025-11-17T14:01:28.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:01:29.130 [DEBUG] [Thread-55518] [transport.py] [_log()] starting thread (client mode): 0xd3135270
2025-11-17T14:01:29.130 [DEBUG] [Thread-55518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:01:29.150 [DEBUG] [Thread-55518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:01:29.150 [INFO] [Thread-55518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] client lang: <none>
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] server lang: <none>
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] kex follows: False
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:01:29.153 [DEBUG] [Thread-55518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:01:29.154 [DEBUG] [Thread-55518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:01:29.154 [DEBUG] [Thread-55518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:01:29.154 [DEBUG] [Thread-55518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:01:29.154 [DEBUG] [Thread-55518] [transport.py] [_log()] Compression: none
2025-11-17T14:01:29.154 [DEBUG] [Thread-55518] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:01:29.171 [DEBUG] [Thread-55518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:01:29.171 [DEBUG] [Thread-55518] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:01:29.171 [DEBUG] [Thread-55518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:01:29.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:01:29.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:01:29.172 [DEBUG] [Thread-55518] [transport.py] [_log()] userauth is OK
2025-11-17T14:01:29.172 [DEBUG] [Thread-55518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:01:29.172 [DEBUG] [Thread-55518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:01:29.172 [DEBUG] [Thread-55518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:01:29.172 [DEBUG] [Thread-55518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:01:29.198 [INFO] [Thread-55518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:01:29.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:01:29.838 [DEBUG] [Thread-55518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:01:29.838 [DEBUG] [Thread-55518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:01:29.838 [DEBUG] [Thread-55518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:01:29.879 [DEBUG] [Thread-55518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:01:29.879 [DEBUG] [Thread-55518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:01:29.882 [DEBUG] [Thread-55518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:01:29.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:01:29.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:01:29.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:01:29.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:01:29.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:01:29.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:01:29.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.500742 -999.00  +22.80  29.63     19   -1.80 1 1 1 1 1   888    0 28.37 126.48 ----- 29.6 29.6 297.8 40.6 29.4 -25.2 28.8 -25.9 28.8 -25.2 29.9 -24.6
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.500742
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:01:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:01:23', tmtdew=29.97, humidity=13.17, cloud=0.0, wind=31.78, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:01:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:01:29.902 [DEBUG] [Thread-55518] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:01:29.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:01:29.987 [DEBUG] [Thread-55521] [transport.py] [_log()] starting thread (client mode): 0xd3137190
2025-11-17T14:01:29.987 [DEBUG] [Thread-55521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:01:30.002 [DEBUG] [Thread-55521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:01:30.002 [INFO] [Thread-55521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:01:30.009 [DEBUG] [Thread-55521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:01:30.009 [DEBUG] [Thread-55521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:01:30.009 [DEBUG] [Thread-55521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] client lang: <none>
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] server lang: <none>
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] kex follows: False
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] Compression: none
2025-11-17T14:01:30.010 [DEBUG] [Thread-55521] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:01:30.068 [DEBUG] [Thread-55521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:01:30.068 [DEBUG] [Thread-55521] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:01:30.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:01:30.068 [DEBUG] [Thread-55521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:01:30.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:01:30.124 [DEBUG] [Thread-55521] [transport.py] [_log()] userauth is OK
2025-11-17T14:01:30.124 [DEBUG] [Thread-55521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:01:30.124 [DEBUG] [Thread-55521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:01:30.124 [DEBUG] [Thread-55521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:01:30.124 [DEBUG] [Thread-55521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:01:30.138 [INFO] [Thread-55521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:01:30.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:01:30.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:01:31.037 [DEBUG] [Thread-55521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:01:31.037 [DEBUG] [Thread-55521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:01:31.084 [DEBUG] [Thread-55521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:01:31.085 [DEBUG] [Thread-55521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:01:31.094 [DEBUG] [Thread-55521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:01:31.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:01:31.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:01:31.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:01:31.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:01:31.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:01:31.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:01:31.129 [DEBUG] [Thread-55521] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:01:37.373 [DEBUG] [Thread-55523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:01:52.411 [DEBUG] [Thread-55524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:01:56.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:01:56.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:02:01.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:02:01.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:02:01.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:02:01.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 1, 55), 30.26, 12.96, 0.0, 29.55, 23.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:02:01.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:01:55
2025-11-17T14:02:01.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:02:02.058 [DEBUG] [Thread-55525] [transport.py] [_log()] starting thread (client mode): 0xd3134730
2025-11-17T14:02:02.058 [DEBUG] [Thread-55525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:02:02.077 [DEBUG] [Thread-55525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:02:02.077 [INFO] [Thread-55525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:02:02.080 [DEBUG] [Thread-55525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] client lang: <none>
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] server lang: <none>
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] kex follows: False
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:02:02.081 [DEBUG] [Thread-55525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:02:02.082 [DEBUG] [Thread-55525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:02:02.082 [DEBUG] [Thread-55525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:02:02.082 [DEBUG] [Thread-55525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:02:02.082 [DEBUG] [Thread-55525] [transport.py] [_log()] Compression: none
2025-11-17T14:02:02.082 [DEBUG] [Thread-55525] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:02:02.094 [DEBUG] [Thread-55525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:02:02.095 [DEBUG] [Thread-55525] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:02:02.095 [DEBUG] [Thread-55525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:02:02.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:02:02.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:02:02.096 [DEBUG] [Thread-55525] [transport.py] [_log()] userauth is OK
2025-11-17T14:02:02.097 [DEBUG] [Thread-55525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:02:02.097 [DEBUG] [Thread-55525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:02:02.097 [DEBUG] [Thread-55525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:02:02.097 [DEBUG] [Thread-55525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:02:02.116 [INFO] [Thread-55525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:02:02.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:02:02.761 [DEBUG] [Thread-55525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:02:02.761 [DEBUG] [Thread-55525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:02:02.762 [DEBUG] [Thread-55525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:02:02.802 [DEBUG] [Thread-55525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:02:02.803 [DEBUG] [Thread-55525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:02:02.805 [DEBUG] [Thread-55525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:02:02.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:02:02.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:02:02.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:02:02.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:02:02.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:02:02.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:02:02.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:02:02.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:02:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:02:02.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.501089 -999.00  +23.30  32.40     18   -1.70 1 1 2 1 1   888    0 28.49 116.80 ----- 32.4 32.4 314.2 36.3 29.4 -24.1 28.8 -24.9 29.1 -27.3 29.9 -23.3
2025-11-17T14:02:02.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:02:02.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:02:02.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.501089
2025-11-17T14:02:02.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:02:02.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:02:02.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:02:02.830 [DEBUG] [Thread-55525] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:02:02.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:02:02.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:02:02.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:01:55', tmtdew=30.26, humidity=12.96, cloud=0.0, wind=29.55, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:01:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:02:02.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:02:02.927 [DEBUG] [Thread-55528] [transport.py] [_log()] starting thread (client mode): 0xd31cd7b0
2025-11-17T14:02:02.927 [DEBUG] [Thread-55528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:02:02.943 [DEBUG] [Thread-55528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:02:02.944 [INFO] [Thread-55528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:02:02.951 [DEBUG] [Thread-55528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:02:02.951 [DEBUG] [Thread-55528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:02:02.951 [DEBUG] [Thread-55528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] client lang: <none>
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] server lang: <none>
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] kex follows: False
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:02:02.952 [DEBUG] [Thread-55528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:02:02.953 [DEBUG] [Thread-55528] [transport.py] [_log()] Compression: none
2025-11-17T14:02:02.953 [DEBUG] [Thread-55528] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:02:03.008 [DEBUG] [Thread-55528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:02:03.008 [DEBUG] [Thread-55528] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:02:03.009 [DEBUG] [Thread-55528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:02:03.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:02:03.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:02:03.064 [DEBUG] [Thread-55528] [transport.py] [_log()] userauth is OK
2025-11-17T14:02:03.064 [DEBUG] [Thread-55528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:02:03.064 [DEBUG] [Thread-55528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:02:03.064 [DEBUG] [Thread-55528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:02:03.065 [DEBUG] [Thread-55528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:02:03.088 [INFO] [Thread-55528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:02:03.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:02:03.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:02:03.961 [DEBUG] [Thread-55528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:02:03.961 [DEBUG] [Thread-55528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:02:04.009 [DEBUG] [Thread-55528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:02:04.009 [DEBUG] [Thread-55528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:02:04.018 [DEBUG] [Thread-55528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:02:04.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:02:04.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:02:04.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:02:04.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:02:04.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:02:04.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:02:04.049 [DEBUG] [Thread-55528] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:02:07.438 [DEBUG] [Thread-55530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:02:14.737 [DEBUG] [Thread-55531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:02:22.469 [DEBUG] [Thread-55532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:02:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:02:34.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:02:34.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:02:34.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 2, 27), 30.36, 12.88, 0.0, 33.68, 23.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:02:34.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:02:27
2025-11-17T14:02:34.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:02:34.978 [DEBUG] [Thread-55533] [transport.py] [_log()] starting thread (client mode): 0xd31ecca0
2025-11-17T14:02:34.978 [DEBUG] [Thread-55533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:02:34.998 [DEBUG] [Thread-55533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:02:34.998 [INFO] [Thread-55533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:02:35.001 [DEBUG] [Thread-55533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] client lang: <none>
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] server lang: <none>
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] kex follows: False
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:02:35.002 [DEBUG] [Thread-55533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:02:35.003 [DEBUG] [Thread-55533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:02:35.003 [DEBUG] [Thread-55533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:02:35.003 [DEBUG] [Thread-55533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:02:35.003 [DEBUG] [Thread-55533] [transport.py] [_log()] Compression: none
2025-11-17T14:02:35.003 [DEBUG] [Thread-55533] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:02:35.023 [DEBUG] [Thread-55533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:02:35.024 [DEBUG] [Thread-55533] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:02:35.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:02:35.025 [DEBUG] [Thread-55533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:02:35.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:02:35.027 [DEBUG] [Thread-55533] [transport.py] [_log()] userauth is OK
2025-11-17T14:02:35.028 [DEBUG] [Thread-55533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:02:35.028 [DEBUG] [Thread-55533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:02:35.028 [DEBUG] [Thread-55533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:02:35.028 [DEBUG] [Thread-55533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:02:35.041 [INFO] [Thread-55533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:02:35.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:02:35.670 [DEBUG] [Thread-55533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:02:35.670 [DEBUG] [Thread-55533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:02:35.671 [DEBUG] [Thread-55533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:02:35.712 [DEBUG] [Thread-55533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:02:35.712 [DEBUG] [Thread-55533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:02:35.715 [DEBUG] [Thread-55533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:02:35.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:02:35.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:02:35.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:02:35.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:02:35.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:02:35.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:02:35.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.501436 -999.00  +23.50  24.02     18   -2.10 1 1 1 1 1   888    0 28.57 111.29 ----- 24.0 24.0 304.7 40.2 29.5 -23.9 28.8 -25.8 29.0 -25.9 29.9 -23.4
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.501436
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:02:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:02:27', tmtdew=30.36, humidity=12.88, cloud=0.0, wind=33.68, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:02:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:02:35.736 [DEBUG] [Thread-55533] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:02:35.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:02:35.827 [DEBUG] [Thread-55536] [transport.py] [_log()] starting thread (client mode): 0xd0718460
2025-11-17T14:02:35.827 [DEBUG] [Thread-55536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:02:35.840 [DEBUG] [Thread-55536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:02:35.841 [INFO] [Thread-55536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:02:35.848 [DEBUG] [Thread-55536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:02:35.848 [DEBUG] [Thread-55536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] client lang: <none>
2025-11-17T14:02:35.849 [DEBUG] [Thread-55536] [transport.py] [_log()] server lang: <none>
2025-11-17T14:02:35.850 [DEBUG] [Thread-55536] [transport.py] [_log()] kex follows: False
2025-11-17T14:02:35.850 [DEBUG] [Thread-55536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:02:35.850 [DEBUG] [Thread-55536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:02:35.850 [DEBUG] [Thread-55536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:02:35.850 [DEBUG] [Thread-55536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:02:35.850 [DEBUG] [Thread-55536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:02:35.851 [DEBUG] [Thread-55536] [transport.py] [_log()] Compression: none
2025-11-17T14:02:35.851 [DEBUG] [Thread-55536] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:02:35.910 [DEBUG] [Thread-55536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:02:35.911 [DEBUG] [Thread-55536] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:02:35.911 [DEBUG] [Thread-55536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:02:35.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:02:35.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:02:35.968 [DEBUG] [Thread-55536] [transport.py] [_log()] userauth is OK
2025-11-17T14:02:35.968 [DEBUG] [Thread-55536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:02:35.968 [DEBUG] [Thread-55536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:02:35.968 [DEBUG] [Thread-55536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:02:35.968 [DEBUG] [Thread-55536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:02:35.987 [INFO] [Thread-55536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:02:35.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:02:35.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:02:36.868 [DEBUG] [Thread-55536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:02:36.868 [DEBUG] [Thread-55536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:02:36.916 [DEBUG] [Thread-55536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:02:36.916 [DEBUG] [Thread-55536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:02:36.925 [DEBUG] [Thread-55536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:02:36.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:02:36.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:02: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') -> 00000000
2025-11-17T14:02:36.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:02:36.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:02:36.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:02:36.960 [DEBUG] [Thread-55536] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:02:37.499 [DEBUG] [Thread-55538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:02:52.550 [DEBUG] [Thread-55539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:02:56.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:02:56.492 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:03:06.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:03:06.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:03:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:03:07.583 [DEBUG] [Thread-55540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:03:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 2, 27), 30.36, 12.88, 0.0, 33.68, 23.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:03:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:02:27
2025-11-17T14:03:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:03:07.879 [DEBUG] [Thread-55541] [transport.py] [_log()] starting thread (client mode): 0xd31cd2a0
2025-11-17T14:03:07.879 [DEBUG] [Thread-55541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:03:07.899 [DEBUG] [Thread-55541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:03:07.899 [INFO] [Thread-55541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] client lang: <none>
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] server lang: <none>
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] kex follows: False
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] Compression: none
2025-11-17T14:03:07.903 [DEBUG] [Thread-55541] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:03:07.920 [DEBUG] [Thread-55541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:03:07.920 [DEBUG] [Thread-55541] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:03:07.921 [DEBUG] [Thread-55541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:03:07.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:03:07.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:03:07.964 [DEBUG] [Thread-55541] [transport.py] [_log()] userauth is OK
2025-11-17T14:03:07.965 [DEBUG] [Thread-55541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:03:07.965 [DEBUG] [Thread-55541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:03:07.965 [DEBUG] [Thread-55541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:03:07.965 [DEBUG] [Thread-55541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:03:07.985 [INFO] [Thread-55541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:03:07.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:03:08.569 [DEBUG] [Thread-55541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:03:08.569 [DEBUG] [Thread-55541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:03:08.570 [DEBUG] [Thread-55541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:03:08.610 [DEBUG] [Thread-55541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:03:08.610 [DEBUG] [Thread-55541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:03:08.612 [DEBUG] [Thread-55541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:03:08.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:03:08.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:03:08.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:03:08.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:03:08.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:03:08.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:03:08.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:03:08.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:03:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:03:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.501783 -999.00  +24.10  30.87     18   -1.60 1 1 2 1 1   888    0 28.10 112.37 ----- 30.9 30.9 314.8 39.4 29.5 -24.9 29.0 -24.9 29.2 -25.0 30.0 -24.5
2025-11-17T14:03:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:03:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:03:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.501783
2025-11-17T14:03:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:03:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:03:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:03:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:03:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:03:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:02:27', tmtdew=30.36, humidity=12.88, cloud=0.0, wind=33.68, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:02:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:03:08.634 [DEBUG] [Thread-55541] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:03:08.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:03:08.730 [DEBUG] [Thread-55544] [transport.py] [_log()] starting thread (client mode): 0xd0719210
2025-11-17T14:03:08.730 [DEBUG] [Thread-55544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:03:08.744 [DEBUG] [Thread-55544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:03:08.744 [INFO] [Thread-55544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:03:08.751 [DEBUG] [Thread-55544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] client lang: <none>
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] server lang: <none>
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] kex follows: False
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] Compression: none
2025-11-17T14:03:08.752 [DEBUG] [Thread-55544] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:03:08.812 [DEBUG] [Thread-55544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:03:08.812 [DEBUG] [Thread-55544] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:03:08.813 [DEBUG] [Thread-55544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:03:08.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:03:08.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:03:08.868 [DEBUG] [Thread-55544] [transport.py] [_log()] userauth is OK
2025-11-17T14:03:08.868 [DEBUG] [Thread-55544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:03:08.868 [DEBUG] [Thread-55544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:03:08.868 [DEBUG] [Thread-55544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:03:08.869 [DEBUG] [Thread-55544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:03:08.887 [INFO] [Thread-55544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:03:08.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:03:08.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:03:09.715 [DEBUG] [Thread-55544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:03:09.715 [DEBUG] [Thread-55544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:03:09.763 [DEBUG] [Thread-55544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:03:09.763 [DEBUG] [Thread-55544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:03:09.772 [DEBUG] [Thread-55544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:03:09.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:03:09.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:03:09.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:03:09.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:03:09.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:03:09.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:03:09.807 [DEBUG] [Thread-55544] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:03:14.789 [DEBUG] [Thread-55546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:03:22.611 [DEBUG] [Thread-55547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:03:37.643 [DEBUG] [Thread-55548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:03:39.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:03:39.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:03:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:03:40.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 3, 32), 30.08, 12.91, 0.0, 31.67, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:03:40.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:03:32
2025-11-17T14:03:40.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:03:40.733 [DEBUG] [Thread-55549] [transport.py] [_log()] starting thread (client mode): 0xd3136200
2025-11-17T14:03:40.733 [DEBUG] [Thread-55549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:03:40.756 [DEBUG] [Thread-55549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:03:40.756 [INFO] [Thread-55549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] client lang: <none>
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] server lang: <none>
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] kex follows: False
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:03:40.760 [DEBUG] [Thread-55549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:03:40.761 [DEBUG] [Thread-55549] [transport.py] [_log()] Compression: none
2025-11-17T14:03:40.761 [DEBUG] [Thread-55549] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:03:40.779 [DEBUG] [Thread-55549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:03:40.780 [DEBUG] [Thread-55549] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:03:40.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:03:40.781 [DEBUG] [Thread-55549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:03:40.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:03:40.783 [DEBUG] [Thread-55549] [transport.py] [_log()] userauth is OK
2025-11-17T14:03:40.783 [DEBUG] [Thread-55549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:03:40.783 [DEBUG] [Thread-55549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:03:40.783 [DEBUG] [Thread-55549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:03:40.783 [DEBUG] [Thread-55549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:03:40.819 [INFO] [Thread-55549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:03:40.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:03:41.490 [DEBUG] [Thread-55549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:03:41.490 [DEBUG] [Thread-55549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:03:41.491 [DEBUG] [Thread-55549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:03:41.532 [DEBUG] [Thread-55549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:03:41.532 [DEBUG] [Thread-55549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:03:41.535 [DEBUG] [Thread-55549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:03:41.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:03:41.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:03:41.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:03:41.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:03:41.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:03:41.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:03:41.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:03:41.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:03:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:03:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.502131 -999.00  +23.60  31.33     18   -2.10 1 1 2 1 1   888    0 28.28 108.45 ----- 31.3 31.3 320.6 44.3 29.5 -25.4 28.9 -26.4 29.2 -24.3 30.0 -24.6
2025-11-17T14:03:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:03:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:03:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.502131
2025-11-17T14:03:41.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:03:41.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:03:41.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:03:41.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:03:41.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:03:41.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:03:32', tmtdew=30.08, humidity=12.91, cloud=0.0, wind=31.67, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:03:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:03:41.562 [DEBUG] [Thread-55549] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:03:41.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:03:41.658 [DEBUG] [Thread-55552] [transport.py] [_log()] starting thread (client mode): 0xd07591e0
2025-11-17T14:03:41.658 [DEBUG] [Thread-55552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:03:41.673 [DEBUG] [Thread-55552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:03:41.673 [INFO] [Thread-55552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:03:41.680 [DEBUG] [Thread-55552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] client lang: <none>
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] server lang: <none>
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] kex follows: False
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] Compression: none
2025-11-17T14:03:41.681 [DEBUG] [Thread-55552] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:03:41.740 [DEBUG] [Thread-55552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:03:41.740 [DEBUG] [Thread-55552] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:03:41.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:03:41.741 [DEBUG] [Thread-55552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:03:41.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:03:41.796 [DEBUG] [Thread-55552] [transport.py] [_log()] userauth is OK
2025-11-17T14:03:41.796 [DEBUG] [Thread-55552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:03:41.796 [DEBUG] [Thread-55552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:03:41.797 [DEBUG] [Thread-55552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:03:41.797 [DEBUG] [Thread-55552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:03:41.815 [INFO] [Thread-55552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:03:41.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:03:41.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:03:42.673 [DEBUG] [Thread-55552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:03:42.673 [DEBUG] [Thread-55552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:03:42.720 [DEBUG] [Thread-55552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:03:42.720 [DEBUG] [Thread-55552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:03:42.729 [DEBUG] [Thread-55552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:03:42.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:03:42.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:03:42.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:03:42.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:03:42.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:03:42.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:03:42.764 [DEBUG] [Thread-55552] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:03:52.678 [DEBUG] [Thread-55554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:03:56.633 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:03:56.634 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:04:07.724 [DEBUG] [Thread-55555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:04:12.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:04:12.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:04:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:04:13.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 4, 4), 30.04, 12.94, 0.0, 27.83, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:04:13.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:04:04
2025-11-17T14:04:13.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:04:13.704 [DEBUG] [Thread-55556] [transport.py] [_log()] starting thread (client mode): 0xd31379d0
2025-11-17T14:04:13.704 [DEBUG] [Thread-55556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:04:13.725 [DEBUG] [Thread-55556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:04:13.726 [INFO] [Thread-55556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:04:13.729 [DEBUG] [Thread-55556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:04:13.729 [DEBUG] [Thread-55556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:04:13.729 [DEBUG] [Thread-55556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:04:13.729 [DEBUG] [Thread-55556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:04:13.729 [DEBUG] [Thread-55556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:04:13.729 [DEBUG] [Thread-55556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:04:13.729 [DEBUG] [Thread-55556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:04:13.729 [DEBUG] [Thread-55556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] client lang: <none>
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] server lang: <none>
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] kex follows: False
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] Compression: none
2025-11-17T14:04:13.730 [DEBUG] [Thread-55556] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:04:13.746 [DEBUG] [Thread-55556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:04:13.746 [DEBUG] [Thread-55556] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:04:13.747 [DEBUG] [Thread-55556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:04:13.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:04:13.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:04:13.749 [DEBUG] [Thread-55556] [transport.py] [_log()] userauth is OK
2025-11-17T14:04:13.749 [DEBUG] [Thread-55556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:04:13.749 [DEBUG] [Thread-55556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:04:13.749 [DEBUG] [Thread-55556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:04:13.749 [DEBUG] [Thread-55556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:04:13.774 [INFO] [Thread-55556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:04:13.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:04:14.410 [DEBUG] [Thread-55556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:04:14.410 [DEBUG] [Thread-55556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:04:14.410 [DEBUG] [Thread-55556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:04:14.450 [DEBUG] [Thread-55556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:04:14.451 [DEBUG] [Thread-55556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:04:14.453 [DEBUG] [Thread-55556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:04:14.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:04:14.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:04:14.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:04:14.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:04:14.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:04:14.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:04:14.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:04:14.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:04:14.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:04:14.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.502825 -999.00  +22.90  25.96     18   -2.00 1 1 1 1 1   888    0 28.56 114.36 ----- 26.0 26.0 326.2 35.3 29.5 -26.3 28.8 -26.9 29.2 -24.9 29.9 -24.9
2025-11-17T14:04:14.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:04:14.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:04:14.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.502825
2025-11-17T14:04:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:04:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:04:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:04:14.477 [DEBUG] [Thread-55556] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:04:14.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:04:14.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:04:14.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:04:04', tmtdew=30.04, humidity=12.94, cloud=0.0, wind=27.83, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:04:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:04:14.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:04:14.574 [DEBUG] [Thread-55559] [transport.py] [_log()] starting thread (client mode): 0xd07cffa0
2025-11-17T14:04:14.574 [DEBUG] [Thread-55559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:04:14.589 [DEBUG] [Thread-55559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:04:14.590 [INFO] [Thread-55559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:04:14.597 [DEBUG] [Thread-55559] [transport.py] [_log()] client lang: <none>
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] server lang: <none>
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] kex follows: False
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] Compression: none
2025-11-17T14:04:14.598 [DEBUG] [Thread-55559] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:04:14.656 [DEBUG] [Thread-55559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:04:14.657 [DEBUG] [Thread-55559] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:04:14.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:04:14.658 [DEBUG] [Thread-55559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:04:14.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:04:14.715 [DEBUG] [Thread-55559] [transport.py] [_log()] userauth is OK
2025-11-17T14:04:14.715 [DEBUG] [Thread-55559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:04:14.715 [DEBUG] [Thread-55559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:04:14.716 [DEBUG] [Thread-55559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:04:14.716 [DEBUG] [Thread-55559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:04:14.743 [INFO] [Thread-55559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:04:14.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:04:14.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:04:14.838 [DEBUG] [Thread-55561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:04:15.592 [DEBUG] [Thread-55559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:04:15.592 [DEBUG] [Thread-55559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:04:15.640 [DEBUG] [Thread-55559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:04:15.640 [DEBUG] [Thread-55559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:04:15.649 [DEBUG] [Thread-55559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:04:15.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:04:15.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:04:15.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:04:15.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:04:15.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:04:15.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:04:15.684 [DEBUG] [Thread-55559] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:04:22.754 [DEBUG] [Thread-55562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:04:37.794 [DEBUG] [Thread-55563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:04:45.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:04:45.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:04:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:04:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 4, 36), 30.1, 12.81, 0.0, 23.61, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:04:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:04:36
2025-11-17T14:04:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:04:46.621 [DEBUG] [Thread-55564] [transport.py] [_log()] starting thread (client mode): 0xd0758ac0
2025-11-17T14:04:46.621 [DEBUG] [Thread-55564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:04:46.642 [DEBUG] [Thread-55564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:04:46.642 [INFO] [Thread-55564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:04:46.645 [DEBUG] [Thread-55564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:04:46.645 [DEBUG] [Thread-55564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:04:46.645 [DEBUG] [Thread-55564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:04:46.645 [DEBUG] [Thread-55564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:04:46.645 [DEBUG] [Thread-55564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] client lang: <none>
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] server lang: <none>
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] kex follows: False
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:04:46.646 [DEBUG] [Thread-55564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:04:46.647 [DEBUG] [Thread-55564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:04:46.647 [DEBUG] [Thread-55564] [transport.py] [_log()] Compression: none
2025-11-17T14:04:46.647 [DEBUG] [Thread-55564] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:04:46.665 [DEBUG] [Thread-55564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:04:46.665 [DEBUG] [Thread-55564] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:04:46.666 [DEBUG] [Thread-55564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:04:46.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:04:46.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:04:46.668 [DEBUG] [Thread-55564] [transport.py] [_log()] userauth is OK
2025-11-17T14:04:46.668 [DEBUG] [Thread-55564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:04:46.668 [DEBUG] [Thread-55564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:04:46.668 [DEBUG] [Thread-55564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:04:46.668 [DEBUG] [Thread-55564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:04:46.704 [INFO] [Thread-55564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:04:46.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:04:47.374 [DEBUG] [Thread-55564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:04:47.374 [DEBUG] [Thread-55564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:04:47.374 [DEBUG] [Thread-55564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:04:47.414 [DEBUG] [Thread-55564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:04:47.414 [DEBUG] [Thread-55564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:04:47.417 [DEBUG] [Thread-55564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:04:47.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:04:47.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:04:47.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:04:47.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:04:47.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:04:47.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:04:47.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:04:47.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:04:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:04:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.503172 -999.00  +22.80  24.52     19   -1.90 1 1 1 1 1   888    0 27.72 115.84 ----- 24.5 24.5 335.1 28.1 29.6 -25.6 28.7 -25.8 29.4 -23.2 30.1 -24.8
2025-11-17T14:04:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:04:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:04:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.503172
2025-11-17T14:04:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:04:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:04:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:04:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:04:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:04:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:04:36', tmtdew=30.1, humidity=12.81, cloud=0.0, wind=23.61, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:04:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:04:47.441 [DEBUG] [Thread-55564] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:04:47.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:04:47.536 [DEBUG] [Thread-55567] [transport.py] [_log()] starting thread (client mode): 0xd0759930
2025-11-17T14:04:47.537 [DEBUG] [Thread-55567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:04:47.551 [DEBUG] [Thread-55567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:04:47.551 [INFO] [Thread-55567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] client lang: <none>
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] server lang: <none>
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] kex follows: False
2025-11-17T14:04:47.559 [DEBUG] [Thread-55567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:04:47.560 [DEBUG] [Thread-55567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:04:47.560 [DEBUG] [Thread-55567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:04:47.560 [DEBUG] [Thread-55567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:04:47.560 [DEBUG] [Thread-55567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:04:47.560 [DEBUG] [Thread-55567] [transport.py] [_log()] Compression: none
2025-11-17T14:04:47.560 [DEBUG] [Thread-55567] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:04:47.620 [DEBUG] [Thread-55567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:04:47.620 [DEBUG] [Thread-55567] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:04:47.621 [DEBUG] [Thread-55567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:04:47.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:04:47.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:04:47.680 [DEBUG] [Thread-55567] [transport.py] [_log()] userauth is OK
2025-11-17T14:04:47.680 [DEBUG] [Thread-55567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:04:47.680 [DEBUG] [Thread-55567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:04:47.681 [DEBUG] [Thread-55567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:04:47.681 [DEBUG] [Thread-55567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:04:47.699 [INFO] [Thread-55567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:04:47.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:04:47.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:04:48.560 [DEBUG] [Thread-55567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:04:48.560 [DEBUG] [Thread-55567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:04:48.607 [DEBUG] [Thread-55567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:04:48.607 [DEBUG] [Thread-55567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:04:48.616 [DEBUG] [Thread-55567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:04:48.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:04:48.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:04:48.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:04:48.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:04:48.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:04:48.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:04:48.651 [DEBUG] [Thread-55567] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:04:52.817 [DEBUG] [Thread-55569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:04:56.775 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:04:56.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:05:07.869 [DEBUG] [Thread-55570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:05:14.897 [DEBUG] [Thread-55571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:05:18.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:05:18.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:05:18.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:05:19.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 5, 8), 30.48, 12.49, 0.0, 22.87, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:05:19.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:05:08
2025-11-17T14:05:19.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:05:19.618 [DEBUG] [Thread-55572] [transport.py] [_log()] starting thread (client mode): 0xd071bd00
2025-11-17T14:05:19.618 [DEBUG] [Thread-55572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:05:19.638 [DEBUG] [Thread-55572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:05:19.638 [INFO] [Thread-55572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] client lang: <none>
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] server lang: <none>
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] kex follows: False
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:05:19.641 [DEBUG] [Thread-55572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:05:19.642 [DEBUG] [Thread-55572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:05:19.642 [DEBUG] [Thread-55572] [transport.py] [_log()] Compression: none
2025-11-17T14:05:19.642 [DEBUG] [Thread-55572] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:05:19.657 [DEBUG] [Thread-55572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:05:19.657 [DEBUG] [Thread-55572] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:05:19.657 [DEBUG] [Thread-55572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:05:19.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:05:19.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:05:19.658 [DEBUG] [Thread-55572] [transport.py] [_log()] userauth is OK
2025-11-17T14:05:19.658 [DEBUG] [Thread-55572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:05:19.658 [DEBUG] [Thread-55572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:05:19.658 [DEBUG] [Thread-55572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:05:19.658 [DEBUG] [Thread-55572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:05:19.674 [INFO] [Thread-55572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:05:19.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:05:20.274 [DEBUG] [Thread-55572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:05:20.274 [DEBUG] [Thread-55572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:05:20.274 [DEBUG] [Thread-55572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:05:20.315 [DEBUG] [Thread-55572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:05:20.315 [DEBUG] [Thread-55572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:05:20.317 [DEBUG] [Thread-55572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:05:20.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:05:20.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:05:20.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:05:20.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:05:20.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:05:20.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:05:20.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:05:20.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:05:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:05:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.503519 -999.00  +23.30  23.08     18   -2.10 1 1 1 1 1   888    0 27.98 107.10 ----- 23.1 23.1 312.8 34.2 29.5 -26.2 28.9 -25.4 29.3 -25.2 30.1 -25.1
2025-11-17T14:05:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:05:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:05:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.503519
2025-11-17T14:05:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:05:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:05:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:05:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:05:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:05:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:05:08', tmtdew=30.48, humidity=12.49, cloud=0.0, wind=22.87, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:05:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:05:20.336 [DEBUG] [Thread-55572] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:05:20.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:05:20.421 [DEBUG] [Thread-55575] [transport.py] [_log()] starting thread (client mode): 0xd078dde0
2025-11-17T14:05:20.421 [DEBUG] [Thread-55575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:05:20.436 [DEBUG] [Thread-55575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:05:20.436 [INFO] [Thread-55575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:05:20.443 [DEBUG] [Thread-55575] [transport.py] [_log()] client lang: <none>
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] server lang: <none>
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] kex follows: False
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] Compression: none
2025-11-17T14:05:20.444 [DEBUG] [Thread-55575] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:05:20.499 [DEBUG] [Thread-55575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:05:20.499 [DEBUG] [Thread-55575] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:05:20.499 [DEBUG] [Thread-55575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:05:20.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:05:20.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:05:20.556 [DEBUG] [Thread-55575] [transport.py] [_log()] userauth is OK
2025-11-17T14:05:20.556 [DEBUG] [Thread-55575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:05:20.556 [DEBUG] [Thread-55575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:05:20.556 [DEBUG] [Thread-55575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:05:20.556 [DEBUG] [Thread-55575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:05:20.573 [INFO] [Thread-55575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:05:20.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:05:20.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:05:21.408 [DEBUG] [Thread-55575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:05:21.408 [DEBUG] [Thread-55575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:05:21.456 [DEBUG] [Thread-55575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:05:21.456 [DEBUG] [Thread-55575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:05:21.464 [DEBUG] [Thread-55575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:05:21.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:05:21.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:05:21.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:05:21.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:05:21.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:05:21.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:05:21.496 [DEBUG] [Thread-55575] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:05:22.898 [DEBUG] [Thread-55577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:05:37.950 [DEBUG] [Thread-55578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:05:51.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:05:51.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:05:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:05:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 5, 40), 30.92, 11.88, 0.0, 23.31, 23.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:05:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:05:40
2025-11-17T14:05:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:05:52.435 [DEBUG] [Thread-55579] [transport.py] [_log()] starting thread (client mode): 0xd31cf5e0
2025-11-17T14:05:52.436 [DEBUG] [Thread-55579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:05:52.458 [DEBUG] [Thread-55579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:05:52.458 [INFO] [Thread-55579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:05:52.461 [DEBUG] [Thread-55579] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] client lang: <none>
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] server lang: <none>
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] kex follows: False
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] Compression: none
2025-11-17T14:05:52.462 [DEBUG] [Thread-55579] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:05:52.475 [DEBUG] [Thread-55579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:05:52.476 [DEBUG] [Thread-55579] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:05:52.476 [DEBUG] [Thread-55579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:05:52.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:05:52.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:05:52.478 [DEBUG] [Thread-55579] [transport.py] [_log()] userauth is OK
2025-11-17T14:05:52.478 [DEBUG] [Thread-55579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:05:52.478 [DEBUG] [Thread-55579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:05:52.478 [DEBUG] [Thread-55579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:05:52.478 [DEBUG] [Thread-55579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:05:52.496 [INFO] [Thread-55579] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:05:52.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:05:52.980 [DEBUG] [Thread-55581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:05:53.138 [DEBUG] [Thread-55579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:05:53.138 [DEBUG] [Thread-55579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:05:53.139 [DEBUG] [Thread-55579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:05:53.179 [DEBUG] [Thread-55579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:05:53.179 [DEBUG] [Thread-55579] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:05:53.182 [DEBUG] [Thread-55579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:05:53.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:05:53.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:05:53.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:05:53.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:05:53.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:05:53.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:05:53.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:05:53.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:05:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:05:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.503867 -999.00  +23.30  14.39     17   -2.50 1 1 1 1 1   888    0 27.90 104.26 ----- 14.4 14.4 336.2 24.1 29.6 -25.0 28.9 -24.8 29.5 -23.5 30.2 -24.2
2025-11-17T14:05:53.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:05:53.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:05:53.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.503867
2025-11-17T14:05:53.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:05:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:05:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:05:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:05:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:05:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:05:40', tmtdew=30.92, humidity=11.88, cloud=0.0, wind=23.31, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:05:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:05:53.205 [DEBUG] [Thread-55579] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:05:53.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:05:53.302 [DEBUG] [Thread-55583] [transport.py] [_log()] starting thread (client mode): 0xd31366e0
2025-11-17T14:05:53.302 [DEBUG] [Thread-55583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:05:53.317 [DEBUG] [Thread-55583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:05:53.317 [INFO] [Thread-55583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] client lang: <none>
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] server lang: <none>
2025-11-17T14:05:53.325 [DEBUG] [Thread-55583] [transport.py] [_log()] kex follows: False
2025-11-17T14:05:53.326 [DEBUG] [Thread-55583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:05:53.326 [DEBUG] [Thread-55583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:05:53.326 [DEBUG] [Thread-55583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:05:53.326 [DEBUG] [Thread-55583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:05:53.326 [DEBUG] [Thread-55583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:05:53.326 [DEBUG] [Thread-55583] [transport.py] [_log()] Compression: none
2025-11-17T14:05:53.326 [DEBUG] [Thread-55583] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:05:53.384 [DEBUG] [Thread-55583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:05:53.384 [DEBUG] [Thread-55583] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:05:53.385 [DEBUG] [Thread-55583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:05:53.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:05:53.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:05:53.440 [DEBUG] [Thread-55583] [transport.py] [_log()] userauth is OK
2025-11-17T14:05:53.440 [DEBUG] [Thread-55583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:05:53.440 [DEBUG] [Thread-55583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:05:53.440 [DEBUG] [Thread-55583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:05:53.440 [DEBUG] [Thread-55583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:05:53.459 [INFO] [Thread-55583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:05:53.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:05:53.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:05:54.325 [DEBUG] [Thread-55583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:05:54.326 [DEBUG] [Thread-55583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:05:54.373 [DEBUG] [Thread-55583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:05:54.373 [DEBUG] [Thread-55583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:05:54.382 [DEBUG] [Thread-55583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:05:54.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:05:54.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:05:54.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:05:54.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:05:54.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:05:54.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:05:54.416 [DEBUG] [Thread-55583] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:05:56.921 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:05:56.921 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:06:08.007 [DEBUG] [Thread-55585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:06:14.951 [DEBUG] [Thread-55586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:06:23.052 [DEBUG] [Thread-55587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:06:24.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:06:24.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:06:24.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:06:25.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 6, 12), 30.77, 11.97, 0.0, 16.3, 23.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:06:25.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:06:12
2025-11-17T14:06:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:06:25.351 [DEBUG] [Thread-55588] [transport.py] [_log()] starting thread (client mode): 0xd0759930
2025-11-17T14:06:25.351 [DEBUG] [Thread-55588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:06:25.368 [DEBUG] [Thread-55588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:06:25.368 [INFO] [Thread-55588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] client lang: <none>
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] server lang: <none>
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] kex follows: False
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:06:25.370 [DEBUG] [Thread-55588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:06:25.371 [DEBUG] [Thread-55588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:06:25.371 [DEBUG] [Thread-55588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:06:25.371 [DEBUG] [Thread-55588] [transport.py] [_log()] Compression: none
2025-11-17T14:06:25.371 [DEBUG] [Thread-55588] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:06:25.385 [DEBUG] [Thread-55588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:06:25.386 [DEBUG] [Thread-55588] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:06:25.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:06:25.388 [DEBUG] [Thread-55588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:06:25.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:06:25.389 [DEBUG] [Thread-55588] [transport.py] [_log()] userauth is OK
2025-11-17T14:06:25.389 [DEBUG] [Thread-55588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:06:25.390 [DEBUG] [Thread-55588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:06:25.390 [DEBUG] [Thread-55588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:06:25.390 [DEBUG] [Thread-55588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:06:25.411 [INFO] [Thread-55588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:06:25.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:06:26.038 [DEBUG] [Thread-55588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:06:26.038 [DEBUG] [Thread-55588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:06:26.039 [DEBUG] [Thread-55588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:06:26.079 [DEBUG] [Thread-55588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:06:26.080 [DEBUG] [Thread-55588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:06:26.082 [DEBUG] [Thread-55588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:06:26.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:06:26.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:06:26.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:06:26.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:06:26.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:06:26.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:06:26.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:06:26.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:06:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:06:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.504214 -999.00  +23.00  17.42     17   -2.70 1 1 1 1 1   888    0 27.79 95.76 ----- 17.4 17.4 323.4 23.5 29.7 -25.6 28.9 -25.9 29.6 -23.6 30.4 -24.8
2025-11-17T14:06:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:06:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:06:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.504214
2025-11-17T14:06:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:06:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:06:26.115 [DEBUG] [Thread-55588] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:06:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:06:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:06:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:06:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:06:12', tmtdew=30.77, humidity=11.97, cloud=0.0, wind=16.3, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:06:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:06:26.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:06:26.208 [DEBUG] [Thread-55591] [transport.py] [_log()] starting thread (client mode): 0xd071bfd0
2025-11-17T14:06:26.208 [DEBUG] [Thread-55591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:06:26.223 [DEBUG] [Thread-55591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:06:26.223 [INFO] [Thread-55591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] client lang: <none>
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] server lang: <none>
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] kex follows: False
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:06:26.231 [DEBUG] [Thread-55591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:06:26.232 [DEBUG] [Thread-55591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:06:26.232 [DEBUG] [Thread-55591] [transport.py] [_log()] Compression: none
2025-11-17T14:06:26.232 [DEBUG] [Thread-55591] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:06:26.293 [DEBUG] [Thread-55591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:06:26.294 [DEBUG] [Thread-55591] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:06:26.294 [DEBUG] [Thread-55591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:06:26.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:06:26.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:06:26.352 [DEBUG] [Thread-55591] [transport.py] [_log()] userauth is OK
2025-11-17T14:06:26.352 [DEBUG] [Thread-55591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:06:26.353 [DEBUG] [Thread-55591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:06:26.353 [DEBUG] [Thread-55591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:06:26.353 [DEBUG] [Thread-55591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:06:26.373 [INFO] [Thread-55591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:06:26.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:06:26.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:06:27.237 [DEBUG] [Thread-55591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:06:27.238 [DEBUG] [Thread-55591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:06:27.285 [DEBUG] [Thread-55591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:06:27.285 [DEBUG] [Thread-55591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:06:27.293 [DEBUG] [Thread-55591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:06:27.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:06:27.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:06:27.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:06:27.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:06:27.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:06:27.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:06:27.327 [DEBUG] [Thread-55591] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:06:38.079 [DEBUG] [Thread-55593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:06:53.112 [DEBUG] [Thread-55594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:06:57.062 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:06:57.063 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:06:57.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:06:57.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:06:57.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:06:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 6, 44), 31.35, 11.84, 0.0, 19.32, 23.86, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:06:57.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:06:44
2025-11-17T14:06:58.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:06:58.258 [DEBUG] [Thread-55595] [transport.py] [_log()] starting thread (client mode): 0xd078edd0
2025-11-17T14:06:58.258 [DEBUG] [Thread-55595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:06:58.279 [DEBUG] [Thread-55595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:06:58.279 [INFO] [Thread-55595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:06:58.282 [DEBUG] [Thread-55595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:06:58.282 [DEBUG] [Thread-55595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:06:58.282 [DEBUG] [Thread-55595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] client lang: <none>
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] server lang: <none>
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] kex follows: False
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:06:58.283 [DEBUG] [Thread-55595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:06:58.284 [DEBUG] [Thread-55595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:06:58.284 [DEBUG] [Thread-55595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:06:58.284 [DEBUG] [Thread-55595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:06:58.284 [DEBUG] [Thread-55595] [transport.py] [_log()] Compression: none
2025-11-17T14:06:58.284 [DEBUG] [Thread-55595] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:06:58.296 [DEBUG] [Thread-55595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:06:58.297 [DEBUG] [Thread-55595] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:06:58.297 [DEBUG] [Thread-55595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:06:58.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:06:58.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:06:58.299 [DEBUG] [Thread-55595] [transport.py] [_log()] userauth is OK
2025-11-17T14:06:58.300 [DEBUG] [Thread-55595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:06:58.300 [DEBUG] [Thread-55595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:06:58.300 [DEBUG] [Thread-55595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:06:58.300 [DEBUG] [Thread-55595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:06:58.324 [INFO] [Thread-55595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:06:58.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:06:58.969 [DEBUG] [Thread-55595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:06:58.969 [DEBUG] [Thread-55595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:06:58.970 [DEBUG] [Thread-55595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:06:59.011 [DEBUG] [Thread-55595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:06:59.011 [DEBUG] [Thread-55595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:06:59.014 [DEBUG] [Thread-55595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:06:59.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:06:59.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:06:59.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:06:59.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:06:59.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:06:59.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:06:59.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:06:59.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:06:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:06:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.504561 -999.00  +23.60  24.21     17   -2.30 1 1 1 1 1   888    0 28.37 95.89 ----- 24.2 24.2 317.8 28.4 29.8 -25.7 29.1 -25.1 29.7 -23.6 30.4 -25.0
2025-11-17T14:06:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:06:59.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:06:59.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.504561
2025-11-17T14:06:59.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:06:59.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:06:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:06:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:06:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:06:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:06:44', tmtdew=31.35, humidity=11.84, cloud=0.0, wind=19.32, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:06:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:06:59.040 [DEBUG] [Thread-55595] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:06:59.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:06:59.137 [DEBUG] [Thread-55598] [transport.py] [_log()] starting thread (client mode): 0xd0759930
2025-11-17T14:06:59.137 [DEBUG] [Thread-55598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:06:59.151 [DEBUG] [Thread-55598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:06:59.152 [INFO] [Thread-55598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:06:59.159 [DEBUG] [Thread-55598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:06:59.159 [DEBUG] [Thread-55598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:06:59.159 [DEBUG] [Thread-55598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:06:59.159 [DEBUG] [Thread-55598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] client lang: <none>
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] server lang: <none>
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] kex follows: False
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] Compression: none
2025-11-17T14:06:59.160 [DEBUG] [Thread-55598] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:06:59.216 [DEBUG] [Thread-55598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:06:59.216 [DEBUG] [Thread-55598] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:06:59.217 [DEBUG] [Thread-55598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:06:59.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:06:59.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:06:59.272 [DEBUG] [Thread-55598] [transport.py] [_log()] userauth is OK
2025-11-17T14:06:59.272 [DEBUG] [Thread-55598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:06:59.272 [DEBUG] [Thread-55598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:06:59.272 [DEBUG] [Thread-55598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:06:59.273 [DEBUG] [Thread-55598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:06:59.292 [INFO] [Thread-55598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:06:59.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:06:59.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:07:00.138 [DEBUG] [Thread-55598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:07:00.139 [DEBUG] [Thread-55598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:07:00.186 [DEBUG] [Thread-55598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:07:00.186 [DEBUG] [Thread-55598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:07:00.195 [DEBUG] [Thread-55598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:07:00.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:07:00.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')
2025-11-17T14:07:00.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:07:00.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:07:00.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:07:00.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:07:00.230 [DEBUG] [Thread-55598] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:07:08.142 [DEBUG] [Thread-55600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:07:15.001 [DEBUG] [Thread-55601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:07:23.181 [DEBUG] [Thread-55602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:07:30.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:07:30.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:07:30.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:07:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 7, 16), 31.19, 11.96, 0.0, 16.92, 23.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:07:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:07:16
2025-11-17T14:07:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:07:31.150 [DEBUG] [Thread-55603] [transport.py] [_log()] starting thread (client mode): 0xd31ceda0
2025-11-17T14:07:31.151 [DEBUG] [Thread-55603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:07:31.169 [DEBUG] [Thread-55603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:07:31.169 [INFO] [Thread-55603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] client lang: <none>
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] server lang: <none>
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] kex follows: False
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] Compression: none
2025-11-17T14:07:31.172 [DEBUG] [Thread-55603] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:07:31.191 [DEBUG] [Thread-55603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:07:31.192 [DEBUG] [Thread-55603] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:07:31.192 [DEBUG] [Thread-55603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:07:31.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:07:31.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:07:31.194 [DEBUG] [Thread-55603] [transport.py] [_log()] userauth is OK
2025-11-17T14:07:31.194 [DEBUG] [Thread-55603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:07:31.194 [DEBUG] [Thread-55603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:07:31.194 [DEBUG] [Thread-55603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:07:31.194 [DEBUG] [Thread-55603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:07:31.218 [INFO] [Thread-55603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:07:31.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:07:31.882 [DEBUG] [Thread-55603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:07:31.882 [DEBUG] [Thread-55603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:07:31.883 [DEBUG] [Thread-55603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:07:31.923 [DEBUG] [Thread-55603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:07:31.923 [DEBUG] [Thread-55603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:07:31.926 [DEBUG] [Thread-55603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:07:31.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:07:31.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:07:31.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:07:31.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:07:31.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:07:31.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:07:31.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:07:31.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:07:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:07:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.504908 -999.00  +23.50  12.86     17   -2.40 1 1 1 1 1   888    0 27.53 97.27 ----- 12.9 12.9 326.2 18.1 29.9 -26.9 29.2 -25.9 29.8 -24.5 30.4 -25.0
2025-11-17T14:07:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:07:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:07:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.504908
2025-11-17T14:07:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:07:31.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:07:31.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:07:31.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:07:31.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:07:31.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:07:16', tmtdew=31.19, humidity=11.96, cloud=0.0, wind=16.92, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:07:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:07:31.954 [DEBUG] [Thread-55603] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:07:32.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:07:32.050 [DEBUG] [Thread-55606] [transport.py] [_log()] starting thread (client mode): 0xd07181f0
2025-11-17T14:07:32.051 [DEBUG] [Thread-55606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:07:32.065 [DEBUG] [Thread-55606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:07:32.066 [INFO] [Thread-55606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:07:32.073 [DEBUG] [Thread-55606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:07:32.073 [DEBUG] [Thread-55606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] client lang: <none>
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] server lang: <none>
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] kex follows: False
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:07:32.074 [DEBUG] [Thread-55606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:07:32.075 [DEBUG] [Thread-55606] [transport.py] [_log()] Compression: none
2025-11-17T14:07:32.075 [DEBUG] [Thread-55606] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:07:32.133 [DEBUG] [Thread-55606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:07:32.133 [DEBUG] [Thread-55606] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:07:32.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:07:32.134 [DEBUG] [Thread-55606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:07:32.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:07:32.188 [DEBUG] [Thread-55606] [transport.py] [_log()] userauth is OK
2025-11-17T14:07:32.188 [DEBUG] [Thread-55606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:07:32.188 [DEBUG] [Thread-55606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:07:32.188 [DEBUG] [Thread-55606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:07:32.188 [DEBUG] [Thread-55606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:07:32.209 [INFO] [Thread-55606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:07:32.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:07:32.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:07:33.071 [DEBUG] [Thread-55606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:07:33.071 [DEBUG] [Thread-55606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:07:33.120 [DEBUG] [Thread-55606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:07:33.120 [DEBUG] [Thread-55606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:07:33.129 [DEBUG] [Thread-55606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:07:33.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:07: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')
2025-11-17T14:07:33.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:07:33.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:07:33.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:07:33.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:07:33.163 [DEBUG] [Thread-55606] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:07:38.218 [DEBUG] [Thread-55608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:07:53.259 [DEBUG] [Thread-55609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:07:57.204 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:07:57.205 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:08:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:08:03.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:08:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:08:03.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 7, 48), 31.3, 12.04, 0.0, 20.41, 23.86, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:08:03.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:07:48
2025-11-17T14:08:03.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:08:04.083 [DEBUG] [Thread-55610] [transport.py] [_log()] starting thread (client mode): 0xd0786590
2025-11-17T14:08:04.083 [DEBUG] [Thread-55610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:08:04.101 [DEBUG] [Thread-55610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:08:04.101 [INFO] [Thread-55610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:08:04.105 [DEBUG] [Thread-55610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:08:04.105 [DEBUG] [Thread-55610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:08:04.105 [DEBUG] [Thread-55610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] client lang: <none>
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] server lang: <none>
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] kex follows: False
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] Compression: none
2025-11-17T14:08:04.106 [DEBUG] [Thread-55610] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:08:04.120 [DEBUG] [Thread-55610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:08:04.120 [DEBUG] [Thread-55610] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:08:04.121 [DEBUG] [Thread-55610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:08:04.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:08:04.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:08:04.123 [DEBUG] [Thread-55610] [transport.py] [_log()] userauth is OK
2025-11-17T14:08:04.123 [DEBUG] [Thread-55610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:08:04.123 [DEBUG] [Thread-55610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:08:04.123 [DEBUG] [Thread-55610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:08:04.123 [DEBUG] [Thread-55610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:08:04.140 [INFO] [Thread-55610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:08:04.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:08:04.707 [DEBUG] [Thread-55610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:08:04.707 [DEBUG] [Thread-55610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:08:04.707 [DEBUG] [Thread-55610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:08:04.747 [DEBUG] [Thread-55610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:08:04.748 [DEBUG] [Thread-55610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:08:04.751 [DEBUG] [Thread-55610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:08:04.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:08:04.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:08:04.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:08:04.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:08:04.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:08:04.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:08:04.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:08:04.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:08:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:08:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.505255 -999.00  +23.50  12.70     17   -2.50 1 1 1 1 1   888    0 27.67 98.70 ----- 12.7 12.7 335.1 18.6 29.9 -26.4 29.1 -27.2 29.8 -24.1 30.6 -27.9
2025-11-17T14:08:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:08:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:08:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.505255
2025-11-17T14:08:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:08:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:08:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:08:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:08:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:08:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:07:48', tmtdew=31.3, humidity=12.04, cloud=0.0, wind=20.41, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:07:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:08:04.781 [DEBUG] [Thread-55610] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:08:04.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:08:04.877 [DEBUG] [Thread-55613] [transport.py] [_log()] starting thread (client mode): 0xd071bd30
2025-11-17T14:08:04.877 [DEBUG] [Thread-55613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:08:04.894 [DEBUG] [Thread-55613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:08:04.895 [INFO] [Thread-55613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:08:04.902 [DEBUG] [Thread-55613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:08:04.902 [DEBUG] [Thread-55613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:08:04.902 [DEBUG] [Thread-55613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:08:04.902 [DEBUG] [Thread-55613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] client lang: <none>
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] server lang: <none>
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] kex follows: False
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] Compression: none
2025-11-17T14:08:04.903 [DEBUG] [Thread-55613] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:08:04.967 [DEBUG] [Thread-55613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:08:04.968 [DEBUG] [Thread-55613] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:08:04.968 [DEBUG] [Thread-55613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:08:04.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:08:04.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:08:05.028 [DEBUG] [Thread-55613] [transport.py] [_log()] userauth is OK
2025-11-17T14:08:05.028 [DEBUG] [Thread-55613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:08:05.028 [DEBUG] [Thread-55613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:08:05.028 [DEBUG] [Thread-55613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:08:05.028 [DEBUG] [Thread-55613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:08:05.047 [INFO] [Thread-55613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:08:05.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:08:05.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:08:05.901 [DEBUG] [Thread-55613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:08:05.901 [DEBUG] [Thread-55613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:08:05.948 [DEBUG] [Thread-55613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:08:05.948 [DEBUG] [Thread-55613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:08:05.957 [DEBUG] [Thread-55613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:08:05.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:08:05.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:08:05.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:08:05.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:08:05.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:08:05.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:08:05.990 [DEBUG] [Thread-55613] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:08:08.285 [DEBUG] [Thread-55615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:08:15.051 [DEBUG] [Thread-55616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:08:23.329 [DEBUG] [Thread-55617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:08:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:08:36.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:08:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:08:36.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 8, 20), 31.4, 11.99, 0.0, 18.02, 24.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:08:36.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:08:20
2025-11-17T14:08:36.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:08:36.912 [DEBUG] [Thread-55618] [transport.py] [_log()] starting thread (client mode): 0xd07ce2c0
2025-11-17T14:08:36.912 [DEBUG] [Thread-55618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:08:36.929 [DEBUG] [Thread-55618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:08:36.930 [INFO] [Thread-55618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] client lang: <none>
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] server lang: <none>
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] kex follows: False
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] Compression: none
2025-11-17T14:08:36.932 [DEBUG] [Thread-55618] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:08:36.943 [DEBUG] [Thread-55618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:08:36.943 [DEBUG] [Thread-55618] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:08:36.944 [DEBUG] [Thread-55618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:08:36.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:08:36.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:08:36.946 [DEBUG] [Thread-55618] [transport.py] [_log()] userauth is OK
2025-11-17T14:08:36.946 [DEBUG] [Thread-55618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:08:36.946 [DEBUG] [Thread-55618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:08:36.946 [DEBUG] [Thread-55618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:08:36.946 [DEBUG] [Thread-55618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:08:36.964 [INFO] [Thread-55618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:08:36.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:08:37.539 [DEBUG] [Thread-55618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:08:37.539 [DEBUG] [Thread-55618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:08:37.539 [DEBUG] [Thread-55618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:08:37.579 [DEBUG] [Thread-55618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:08:37.580 [DEBUG] [Thread-55618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:08:37.582 [DEBUG] [Thread-55618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:08:37.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:08:37.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:08:37.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:08:37.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:08:37.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:08:37.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:08:37.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:08:37.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:08:37.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:08:37.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.505603 -999.00  +23.30  16.32     17   -2.40 1 1 1 1 1   888    0 27.79 93.23 ----- 16.3 16.3 305.0 17.1 30.0 -25.1 29.2 -25.5 29.9 -24.2 30.5 -25.2
2025-11-17T14:08:37.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:08:37.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:08:37.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.505603
2025-11-17T14:08:37.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:08:37.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:08:37.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:08:37.601 [DEBUG] [Thread-55618] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:08:37.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:08:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:08:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:08:20', tmtdew=31.4, humidity=11.99, cloud=0.0, wind=18.02, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:08:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:08:37.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:08:37.697 [DEBUG] [Thread-55621] [transport.py] [_log()] starting thread (client mode): 0xd07cceb0
2025-11-17T14:08:37.697 [DEBUG] [Thread-55621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:08:37.712 [DEBUG] [Thread-55621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:08:37.712 [INFO] [Thread-55621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:08:37.720 [DEBUG] [Thread-55621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:08:37.721 [DEBUG] [Thread-55621] [transport.py] [_log()] client lang: <none>
2025-11-17T14:08:37.721 [DEBUG] [Thread-55621] [transport.py] [_log()] server lang: <none>
2025-11-17T14:08:37.721 [DEBUG] [Thread-55621] [transport.py] [_log()] kex follows: False
2025-11-17T14:08:37.721 [DEBUG] [Thread-55621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:08:37.721 [DEBUG] [Thread-55621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:08:37.721 [DEBUG] [Thread-55621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:08:37.721 [DEBUG] [Thread-55621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:08:37.721 [DEBUG] [Thread-55621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:08:37.722 [DEBUG] [Thread-55621] [transport.py] [_log()] Compression: none
2025-11-17T14:08:37.722 [DEBUG] [Thread-55621] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:08:37.776 [DEBUG] [Thread-55621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:08:37.777 [DEBUG] [Thread-55621] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:08:37.777 [DEBUG] [Thread-55621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:08:37.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:08:37.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:08:37.836 [DEBUG] [Thread-55621] [transport.py] [_log()] userauth is OK
2025-11-17T14:08:37.836 [DEBUG] [Thread-55621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:08:37.836 [DEBUG] [Thread-55621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:08:37.836 [DEBUG] [Thread-55621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:08:37.836 [DEBUG] [Thread-55621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:08:37.854 [INFO] [Thread-55621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:08:37.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:08:37.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:08:38.360 [DEBUG] [Thread-55623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:08:38.700 [DEBUG] [Thread-55621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:08:38.700 [DEBUG] [Thread-55621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:08:38.747 [DEBUG] [Thread-55621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:08:38.747 [DEBUG] [Thread-55621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:08:38.756 [DEBUG] [Thread-55621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:08:38.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:08:38.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:08:38.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:08:38.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:08:38.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:08:38.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:08:38.791 [DEBUG] [Thread-55621] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:08:53.406 [DEBUG] [Thread-55624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:08:57.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:08:57.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:09:08.430 [DEBUG] [Thread-55625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:09:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:09:08.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:09:08.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:09:09.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 8, 52), 31.07, 12.14, 0.0, 28.5, 23.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:09:09.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:08:52
2025-11-17T14:09:09.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:09:09.774 [DEBUG] [Thread-55626] [transport.py] [_log()] starting thread (client mode): 0xd3135e10
2025-11-17T14:09:09.774 [DEBUG] [Thread-55626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:09:09.794 [DEBUG] [Thread-55626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:09:09.794 [INFO] [Thread-55626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] client lang: <none>
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] server lang: <none>
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] kex follows: False
2025-11-17T14:09:09.797 [DEBUG] [Thread-55626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:09:09.798 [DEBUG] [Thread-55626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:09:09.798 [DEBUG] [Thread-55626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:09:09.798 [DEBUG] [Thread-55626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:09:09.798 [DEBUG] [Thread-55626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:09:09.798 [DEBUG] [Thread-55626] [transport.py] [_log()] Compression: none
2025-11-17T14:09:09.798 [DEBUG] [Thread-55626] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:09:09.815 [DEBUG] [Thread-55626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:09:09.815 [DEBUG] [Thread-55626] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:09:09.815 [DEBUG] [Thread-55626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:09:09.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:09:09.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:09:09.815 [DEBUG] [Thread-55626] [transport.py] [_log()] userauth is OK
2025-11-17T14:09:09.815 [DEBUG] [Thread-55626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:09:09.815 [DEBUG] [Thread-55626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:09:09.815 [DEBUG] [Thread-55626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:09:09.815 [DEBUG] [Thread-55626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:09:09.824 [INFO] [Thread-55626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:09:09.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:09:10.424 [DEBUG] [Thread-55626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:09:10.424 [DEBUG] [Thread-55626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:09:10.424 [DEBUG] [Thread-55626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:09:10.465 [DEBUG] [Thread-55626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:09:10.465 [DEBUG] [Thread-55626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:09:10.467 [DEBUG] [Thread-55626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:09:10.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:09:10.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:09:10.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:09:10.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:09:10.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:09:10.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:09:10.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:09:10.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.505950 -999.00  +23.60  30.57     17   -2.10 1 1 2 1 1   888    0 27.92 83.56 ----- 30.6 30.6 295.6 40.0 30.0 -26.0 29.4 -25.8 29.7 -25.9 30.7 -24.9
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.505950
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:09:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:08:52', tmtdew=31.07, humidity=12.14, cloud=0.0, wind=28.5, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:08:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:09:10.488 [DEBUG] [Thread-55626] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:09:10.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:09:10.574 [DEBUG] [Thread-55629] [transport.py] [_log()] starting thread (client mode): 0xd0785990
2025-11-17T14:09:10.574 [DEBUG] [Thread-55629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:09:10.588 [DEBUG] [Thread-55629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:09:10.588 [INFO] [Thread-55629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:09:10.595 [DEBUG] [Thread-55629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] client lang: <none>
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] server lang: <none>
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] kex follows: False
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] Compression: none
2025-11-17T14:09:10.596 [DEBUG] [Thread-55629] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:09:10.651 [DEBUG] [Thread-55629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:09:10.652 [DEBUG] [Thread-55629] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:09:10.652 [DEBUG] [Thread-55629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:09:10.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:09:10.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:09:10.708 [DEBUG] [Thread-55629] [transport.py] [_log()] userauth is OK
2025-11-17T14:09:10.708 [DEBUG] [Thread-55629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:09:10.708 [DEBUG] [Thread-55629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:09:10.708 [DEBUG] [Thread-55629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:09:10.708 [DEBUG] [Thread-55629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:09:10.726 [INFO] [Thread-55629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:09:10.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:09:10.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:09:11.570 [DEBUG] [Thread-55629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:09:11.570 [DEBUG] [Thread-55629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:09:11.618 [DEBUG] [Thread-55629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:09:11.618 [DEBUG] [Thread-55629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:09:11.626 [DEBUG] [Thread-55629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:09:11.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:09:11.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:09:11.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:09:11.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:09:11.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:09:11.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:09:11.658 [DEBUG] [Thread-55629] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:09:15.085 [DEBUG] [Thread-55631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:09:23.460 [DEBUG] [Thread-55632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:09:38.502 [DEBUG] [Thread-55633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:09:41.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:09:41.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:09:41.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:09:42.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 9, 24), 31.2, 12.04, 0.0, 27.7, 24.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:09:42.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:09:24
2025-11-17T14:09:42.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:09:42.580 [DEBUG] [Thread-55634] [transport.py] [_log()] starting thread (client mode): 0xd0722d10
2025-11-17T14:09:42.580 [DEBUG] [Thread-55634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:09:42.602 [DEBUG] [Thread-55634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:09:42.602 [INFO] [Thread-55634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:09:42.603 [DEBUG] [Thread-55634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:09:42.603 [DEBUG] [Thread-55634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:09:42.603 [DEBUG] [Thread-55634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:09:42.603 [DEBUG] [Thread-55634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:09:42.603 [DEBUG] [Thread-55634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:09:42.603 [DEBUG] [Thread-55634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:09:42.603 [DEBUG] [Thread-55634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:09:42.603 [DEBUG] [Thread-55634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] client lang: <none>
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] server lang: <none>
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] kex follows: False
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] Compression: none
2025-11-17T14:09:42.604 [DEBUG] [Thread-55634] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:09:42.612 [DEBUG] [Thread-55634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:09:42.613 [DEBUG] [Thread-55634] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:09:42.613 [DEBUG] [Thread-55634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:09:42.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:09:42.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:09:42.615 [DEBUG] [Thread-55634] [transport.py] [_log()] userauth is OK
2025-11-17T14:09:42.615 [DEBUG] [Thread-55634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:09:42.615 [DEBUG] [Thread-55634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:09:42.615 [DEBUG] [Thread-55634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:09:42.615 [DEBUG] [Thread-55634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:09:42.632 [INFO] [Thread-55634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:09:42.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:09:43.228 [DEBUG] [Thread-55634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:09:43.228 [DEBUG] [Thread-55634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:09:43.229 [DEBUG] [Thread-55634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:09:43.269 [DEBUG] [Thread-55634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:09:43.270 [DEBUG] [Thread-55634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:09:43.273 [DEBUG] [Thread-55634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:09:43.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:09:43.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:09:43.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:09:43.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:09:43.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:09:43.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:09:43.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:09:43.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:09:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:09:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.506644 -999.00  +23.60  25.42     17   -2.30 1 1 1 1 1   888    0 27.23 70.02 ----- 25.4 25.4 302.8 38.7 29.8 -26.9 29.3 -26.8 29.5 -30.1 30.7 -25.2
2025-11-17T14:09:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:09:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:09:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.506644
2025-11-17T14:09:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:09:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:09:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:09:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:09:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:09:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:09:24', tmtdew=31.2, humidity=12.04, cloud=0.0, wind=27.7, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:09:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:09:43.297 [DEBUG] [Thread-55634] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:09:43.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:09:43.391 [DEBUG] [Thread-55637] [transport.py] [_log()] starting thread (client mode): 0xd31cd900
2025-11-17T14:09:43.391 [DEBUG] [Thread-55637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:09:43.412 [DEBUG] [Thread-55637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:09:43.412 [INFO] [Thread-55637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] client lang: <none>
2025-11-17T14:09:43.420 [DEBUG] [Thread-55637] [transport.py] [_log()] server lang: <none>
2025-11-17T14:09:43.421 [DEBUG] [Thread-55637] [transport.py] [_log()] kex follows: False
2025-11-17T14:09:43.421 [DEBUG] [Thread-55637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:09:43.421 [DEBUG] [Thread-55637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:09:43.421 [DEBUG] [Thread-55637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:09:43.421 [DEBUG] [Thread-55637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:09:43.421 [DEBUG] [Thread-55637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:09:43.421 [DEBUG] [Thread-55637] [transport.py] [_log()] Compression: none
2025-11-17T14:09:43.421 [DEBUG] [Thread-55637] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:09:43.480 [DEBUG] [Thread-55637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:09:43.480 [DEBUG] [Thread-55637] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:09:43.481 [DEBUG] [Thread-55637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:09:43.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:09:43.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:09:43.540 [DEBUG] [Thread-55637] [transport.py] [_log()] userauth is OK
2025-11-17T14:09:43.540 [DEBUG] [Thread-55637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:09:43.540 [DEBUG] [Thread-55637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:09:43.540 [DEBUG] [Thread-55637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:09:43.540 [DEBUG] [Thread-55637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:09:43.559 [INFO] [Thread-55637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:09:43.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:09:43.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:09:44.439 [DEBUG] [Thread-55637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:09:44.439 [DEBUG] [Thread-55637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:09:44.486 [DEBUG] [Thread-55637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:09:44.486 [DEBUG] [Thread-55637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:09:44.495 [DEBUG] [Thread-55637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:09:44.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:09:44.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:09:44.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:09:44.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:09:44.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:09:44.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:09:44.530 [DEBUG] [Thread-55637] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:09:53.533 [DEBUG] [Thread-55639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:09:57.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:09:57.491 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:10:08.577 [DEBUG] [Thread-55640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:10:14.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:10:14.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:10:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:10:15.115 [DEBUG] [Thread-55641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:10:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 9, 56), 30.66, 12.12, 0.0, 24.79, 23.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:10:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:09:56
2025-11-17T14:10:15.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:10:15.470 [DEBUG] [Thread-55642] [transport.py] [_log()] starting thread (client mode): 0xd07877f0
2025-11-17T14:10:15.471 [DEBUG] [Thread-55642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:10:15.487 [DEBUG] [Thread-55642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:10:15.488 [INFO] [Thread-55642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] client lang: <none>
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] server lang: <none>
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] kex follows: False
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] Compression: none
2025-11-17T14:10:15.489 [DEBUG] [Thread-55642] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:10:15.507 [DEBUG] [Thread-55642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:10:15.507 [DEBUG] [Thread-55642] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:10:15.508 [DEBUG] [Thread-55642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:10:15.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:10:15.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:10:15.510 [DEBUG] [Thread-55642] [transport.py] [_log()] userauth is OK
2025-11-17T14:10:15.510 [DEBUG] [Thread-55642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:10:15.510 [DEBUG] [Thread-55642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:10:15.510 [DEBUG] [Thread-55642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:10:15.510 [DEBUG] [Thread-55642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:10:15.528 [INFO] [Thread-55642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:10:15.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:10:16.139 [DEBUG] [Thread-55642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:10:16.139 [DEBUG] [Thread-55642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:10:16.139 [DEBUG] [Thread-55642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:10:16.180 [DEBUG] [Thread-55642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:10:16.180 [DEBUG] [Thread-55642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:10:16.183 [DEBUG] [Thread-55642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:10:16.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:10:16.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:10:16.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:10:16.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:10:16.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:10:16.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:10:16.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:10:16.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:10:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:10:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.506992 -999.00  +22.90  16.83     18   -2.20 1 1 1 1 1   888    0 27.18 62.10 ----- 16.8 16.8 300.4 22.3 29.9 -25.3 29.2 -26.1 29.7 -26.7 30.5 -25.6
2025-11-17T14:10:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:10:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:10:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.506992
2025-11-17T14:10:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:10:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:10:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:10:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:10:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:10:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:09:56', tmtdew=30.66, humidity=12.12, cloud=0.0, wind=24.79, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:10:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:10:16.206 [DEBUG] [Thread-55642] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:10:16.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:10:16.301 [DEBUG] [Thread-55645] [transport.py] [_log()] starting thread (client mode): 0xd31b3e80
2025-11-17T14:10:16.301 [DEBUG] [Thread-55645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:10:16.316 [DEBUG] [Thread-55645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:10:16.317 [INFO] [Thread-55645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:10:16.324 [DEBUG] [Thread-55645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:10:16.324 [DEBUG] [Thread-55645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:10:16.324 [DEBUG] [Thread-55645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:10:16.324 [DEBUG] [Thread-55645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:10:16.324 [DEBUG] [Thread-55645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] client lang: <none>
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] server lang: <none>
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] kex follows: False
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:10:16.325 [DEBUG] [Thread-55645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:10:16.326 [DEBUG] [Thread-55645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:10:16.326 [DEBUG] [Thread-55645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:10:16.326 [DEBUG] [Thread-55645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:10:16.326 [DEBUG] [Thread-55645] [transport.py] [_log()] Compression: none
2025-11-17T14:10:16.326 [DEBUG] [Thread-55645] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:10:16.384 [DEBUG] [Thread-55645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:10:16.384 [DEBUG] [Thread-55645] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:10:16.385 [DEBUG] [Thread-55645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:10:16.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:10:16.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:10:16.440 [DEBUG] [Thread-55645] [transport.py] [_log()] userauth is OK
2025-11-17T14:10:16.440 [DEBUG] [Thread-55645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:10:16.440 [DEBUG] [Thread-55645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:10:16.440 [DEBUG] [Thread-55645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:10:16.440 [DEBUG] [Thread-55645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:10:16.463 [INFO] [Thread-55645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:10:16.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:10:16.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:10:17.317 [DEBUG] [Thread-55645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:10:17.317 [DEBUG] [Thread-55645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:10:17.365 [DEBUG] [Thread-55645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:10:17.365 [DEBUG] [Thread-55645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:10:17.374 [DEBUG] [Thread-55645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:10:17.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:10:17.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:10:17.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:10:17.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:10:17.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:10:17.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:10:17.407 [DEBUG] [Thread-55645] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:10:23.606 [DEBUG] [Thread-55647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:10:38.652 [DEBUG] [Thread-55648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:10:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:10:47.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:10:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:10:48.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 10, 28), 31.29, 11.68, 0.0, 27.51, 24.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:10:48.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:10:28
2025-11-17T14:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:10:48.350 [DEBUG] [Thread-55649] [transport.py] [_log()] starting thread (client mode): 0xd070fca0
2025-11-17T14:10:48.350 [DEBUG] [Thread-55649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:10:48.371 [DEBUG] [Thread-55649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:10:48.371 [INFO] [Thread-55649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:10:48.374 [DEBUG] [Thread-55649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] client lang: <none>
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] server lang: <none>
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] kex follows: False
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] Compression: none
2025-11-17T14:10:48.375 [DEBUG] [Thread-55649] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:10:48.391 [DEBUG] [Thread-55649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:10:48.391 [DEBUG] [Thread-55649] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:10:48.392 [DEBUG] [Thread-55649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:10:48.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:10:48.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:10:48.394 [DEBUG] [Thread-55649] [transport.py] [_log()] userauth is OK
2025-11-17T14:10:48.394 [DEBUG] [Thread-55649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:10:48.394 [DEBUG] [Thread-55649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:10:48.394 [DEBUG] [Thread-55649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:10:48.394 [DEBUG] [Thread-55649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:10:48.418 [INFO] [Thread-55649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:10:48.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:10:48.978 [DEBUG] [Thread-55649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:10:48.978 [DEBUG] [Thread-55649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:10:48.978 [DEBUG] [Thread-55649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:10:49.019 [DEBUG] [Thread-55649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:10:49.019 [DEBUG] [Thread-55649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:10:49.022 [DEBUG] [Thread-55649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:10:49.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:10:49.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:10:49.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:10:49.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:10:49.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:10:49.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:10:49.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:10:49.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:10:49.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:10:49.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.507339 -999.00  +23.00  17.33     18   -2.30 1 1 1 1 1   888    0 27.03 57.57 ----- 17.3 17.3 300.0 25.1 30.0 -26.2 29.3 -26.2 29.8 -25.5 30.6 -25.5
2025-11-17T14:10:49.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:10:49.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:10:49.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.507339
2025-11-17T14:10:49.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:10:49.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:10:49.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:10:49.047 [DEBUG] [Thread-55649] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:10:49.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:10:49.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:10:49.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:10:28', tmtdew=31.29, humidity=11.68, cloud=0.0, wind=27.51, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:10:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:10:49.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:10:49.145 [DEBUG] [Thread-55652] [transport.py] [_log()] starting thread (client mode): 0xd0787f10
2025-11-17T14:10:49.145 [DEBUG] [Thread-55652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:10:49.160 [DEBUG] [Thread-55652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:10:49.160 [INFO] [Thread-55652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:10:49.168 [DEBUG] [Thread-55652] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:10:49.168 [DEBUG] [Thread-55652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:10:49.168 [DEBUG] [Thread-55652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:10:49.168 [DEBUG] [Thread-55652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] client lang: <none>
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] server lang: <none>
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] kex follows: False
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] Compression: none
2025-11-17T14:10:49.169 [DEBUG] [Thread-55652] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:10:49.228 [DEBUG] [Thread-55652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:10:49.228 [DEBUG] [Thread-55652] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:10:49.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:10:49.229 [DEBUG] [Thread-55652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:10:49.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:10:49.284 [DEBUG] [Thread-55652] [transport.py] [_log()] userauth is OK
2025-11-17T14:10:49.284 [DEBUG] [Thread-55652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:10:49.284 [DEBUG] [Thread-55652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:10:49.284 [DEBUG] [Thread-55652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:10:49.284 [DEBUG] [Thread-55652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:10:49.303 [INFO] [Thread-55652] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:10:49.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:10:49.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:10:50.221 [DEBUG] [Thread-55652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:10:50.222 [DEBUG] [Thread-55652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:10:50.269 [DEBUG] [Thread-55652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:10:50.269 [DEBUG] [Thread-55652] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:10:50.278 [DEBUG] [Thread-55652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:10:50.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:10:50.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:10:50.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:10:50.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:10:50.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:10:50.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:10:50.313 [DEBUG] [Thread-55652] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:10:53.684 [DEBUG] [Thread-55654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:10:57.632 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:10:57.634 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:11:08.721 [DEBUG] [Thread-55655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:11:15.168 [DEBUG] [Thread-55656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:11:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:11:20.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:11:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:11:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 10, 28), 31.29, 11.68, 0.0, 27.51, 24.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:11:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:10:28
2025-11-17T14:11:21.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:11:21.232 [DEBUG] [Thread-55657] [transport.py] [_log()] starting thread (client mode): 0xd0721270
2025-11-17T14:11:21.232 [DEBUG] [Thread-55657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:11:21.253 [DEBUG] [Thread-55657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:11:21.253 [INFO] [Thread-55657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:11:21.254 [DEBUG] [Thread-55657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:11:21.254 [DEBUG] [Thread-55657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:11:21.254 [DEBUG] [Thread-55657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:11:21.254 [DEBUG] [Thread-55657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:11:21.254 [DEBUG] [Thread-55657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:11:21.254 [DEBUG] [Thread-55657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] client lang: <none>
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] server lang: <none>
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] kex follows: False
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] Compression: none
2025-11-17T14:11:21.255 [DEBUG] [Thread-55657] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:11:21.264 [DEBUG] [Thread-55657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:11:21.264 [DEBUG] [Thread-55657] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:11:21.265 [DEBUG] [Thread-55657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:11:21.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:11:21.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:11:21.267 [DEBUG] [Thread-55657] [transport.py] [_log()] userauth is OK
2025-11-17T14:11:21.267 [DEBUG] [Thread-55657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:11:21.267 [DEBUG] [Thread-55657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:11:21.267 [DEBUG] [Thread-55657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:11:21.267 [DEBUG] [Thread-55657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:11:21.284 [INFO] [Thread-55657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:11:21.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:11:21.907 [DEBUG] [Thread-55657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:11:21.907 [DEBUG] [Thread-55657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:11:21.907 [DEBUG] [Thread-55657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:11:21.948 [DEBUG] [Thread-55657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:11:21.948 [DEBUG] [Thread-55657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:11:21.951 [DEBUG] [Thread-55657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:11:21.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:11:21.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:11:21.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:11:21.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:11:21.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:11:21.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:11:21.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:11:21.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:11:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:11:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.507339 -999.00  +23.00  17.33     18   -2.30 1 1 1 1 1   888    0 27.03 57.57 ----- 17.3 17.3 300.0 25.1 30.0 -26.2 29.3 -26.2 29.8 -25.5 30.6 -25.5
2025-11-17T14:11:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:11:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:11:21.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.507339
2025-11-17T14:11:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:11:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:11:21.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:11:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:11:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:11:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:10:28', tmtdew=31.29, humidity=11.68, cloud=0.0, wind=27.51, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:10:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:11:21.975 [DEBUG] [Thread-55657] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:11:22.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:11:22.077 [DEBUG] [Thread-55660] [transport.py] [_log()] starting thread (client mode): 0xd0721240
2025-11-17T14:11:22.077 [DEBUG] [Thread-55660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:11:22.092 [DEBUG] [Thread-55660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:11:22.092 [INFO] [Thread-55660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:11:22.100 [DEBUG] [Thread-55660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:11:22.100 [DEBUG] [Thread-55660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:11:22.100 [DEBUG] [Thread-55660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:11:22.100 [DEBUG] [Thread-55660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] client lang: <none>
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] server lang: <none>
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] kex follows: False
2025-11-17T14:11:22.101 [DEBUG] [Thread-55660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:11:22.102 [DEBUG] [Thread-55660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:11:22.102 [DEBUG] [Thread-55660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:11:22.102 [DEBUG] [Thread-55660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:11:22.102 [DEBUG] [Thread-55660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:11:22.102 [DEBUG] [Thread-55660] [transport.py] [_log()] Compression: none
2025-11-17T14:11:22.102 [DEBUG] [Thread-55660] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:11:22.164 [DEBUG] [Thread-55660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:11:22.165 [DEBUG] [Thread-55660] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:11:22.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:11:22.166 [DEBUG] [Thread-55660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:11:22.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:11:22.226 [DEBUG] [Thread-55660] [transport.py] [_log()] userauth is OK
2025-11-17T14:11:22.227 [DEBUG] [Thread-55660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:11:22.227 [DEBUG] [Thread-55660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:11:22.227 [DEBUG] [Thread-55660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:11:22.227 [DEBUG] [Thread-55660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:11:22.247 [INFO] [Thread-55660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:11:22.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:11:22.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:11:23.113 [DEBUG] [Thread-55660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:11:23.113 [DEBUG] [Thread-55660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:11:23.162 [DEBUG] [Thread-55660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:11:23.163 [DEBUG] [Thread-55660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:11:23.174 [DEBUG] [Thread-55660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:11:23.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:11:23.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:11:23.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:11:23.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:11:23.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:11:23.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:11:23.214 [DEBUG] [Thread-55660] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:11:23.753 [DEBUG] [Thread-55662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:11:38.784 [DEBUG] [Thread-55663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:11:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:11:53.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:11:53.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:11:53.812 [DEBUG] [Thread-55664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:11:53.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 11, 32), 31.41, 11.91, 0.0, 18.12, 23.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:11:53.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:11:32
2025-11-17T14:11:53.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:11:54.138 [DEBUG] [Thread-55665] [transport.py] [_log()] starting thread (client mode): 0xd070e170
2025-11-17T14:11:54.139 [DEBUG] [Thread-55665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:11:54.158 [DEBUG] [Thread-55665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:11:54.159 [INFO] [Thread-55665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:11:54.162 [DEBUG] [Thread-55665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:11:54.162 [DEBUG] [Thread-55665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:11:54.162 [DEBUG] [Thread-55665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:11:54.162 [DEBUG] [Thread-55665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:11:54.162 [DEBUG] [Thread-55665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:11:54.162 [DEBUG] [Thread-55665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:11:54.162 [DEBUG] [Thread-55665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] client lang: <none>
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] server lang: <none>
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] kex follows: False
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] Compression: none
2025-11-17T14:11:54.163 [DEBUG] [Thread-55665] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:11:54.184 [DEBUG] [Thread-55665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:11:54.184 [DEBUG] [Thread-55665] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:11:54.185 [DEBUG] [Thread-55665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:11:54.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:11:54.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:11:54.187 [DEBUG] [Thread-55665] [transport.py] [_log()] userauth is OK
2025-11-17T14:11:54.187 [DEBUG] [Thread-55665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:11:54.187 [DEBUG] [Thread-55665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:11:54.187 [DEBUG] [Thread-55665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:11:54.187 [DEBUG] [Thread-55665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:11:54.209 [INFO] [Thread-55665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:11:54.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:11:54.832 [DEBUG] [Thread-55665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:11:54.833 [DEBUG] [Thread-55665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:11:54.833 [DEBUG] [Thread-55665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:11:54.873 [DEBUG] [Thread-55665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:11:54.873 [DEBUG] [Thread-55665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:11:54.876 [DEBUG] [Thread-55665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:11:54.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:11:54.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:11:54.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:11:54.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:11:54.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:11:54.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:11:54.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:11:54.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:11:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:11:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.507686 -999.00  +23.20  21.04     17   -2.50 1 1 1 1 1   888    0 26.72 52.98 ----- 21.0 21.0 306.0 26.2 30.0 -26.2 29.4 -25.5 29.7 -27.0 30.7 -24.7
2025-11-17T14:11:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:11:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:11:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.507686
2025-11-17T14:11:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:11:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:11:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:11:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:11:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:11:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:11:32', tmtdew=31.41, humidity=11.91, cloud=0.0, wind=18.12, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:11:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:11:54.900 [DEBUG] [Thread-55665] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:11:54.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:11:54.997 [DEBUG] [Thread-55668] [transport.py] [_log()] starting thread (client mode): 0xd070f040
2025-11-17T14:11:54.997 [DEBUG] [Thread-55668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:11:55.012 [DEBUG] [Thread-55668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:11:55.013 [INFO] [Thread-55668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] client lang: <none>
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] server lang: <none>
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] kex follows: False
2025-11-17T14:11:55.020 [DEBUG] [Thread-55668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:11:55.021 [DEBUG] [Thread-55668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:11:55.021 [DEBUG] [Thread-55668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:11:55.021 [DEBUG] [Thread-55668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:11:55.021 [DEBUG] [Thread-55668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:11:55.021 [DEBUG] [Thread-55668] [transport.py] [_log()] Compression: none
2025-11-17T14:11:55.021 [DEBUG] [Thread-55668] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:11:55.079 [DEBUG] [Thread-55668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:11:55.080 [DEBUG] [Thread-55668] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:11:55.080 [DEBUG] [Thread-55668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:11:55.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:11:55.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:11:55.136 [DEBUG] [Thread-55668] [transport.py] [_log()] userauth is OK
2025-11-17T14:11:55.136 [DEBUG] [Thread-55668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:11:55.136 [DEBUG] [Thread-55668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:11:55.136 [DEBUG] [Thread-55668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:11:55.137 [DEBUG] [Thread-55668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:11:55.157 [INFO] [Thread-55668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:11:55.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:11:55.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:11:56.028 [DEBUG] [Thread-55668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:11:56.028 [DEBUG] [Thread-55668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:11:56.076 [DEBUG] [Thread-55668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:11:56.076 [DEBUG] [Thread-55668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:11:56.085 [DEBUG] [Thread-55668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:11:56.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:11:56.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:11:56.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:11:56.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:11:56.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:11:56.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:11:56.119 [DEBUG] [Thread-55668] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:11:57.775 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:11:57.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:12:08.841 [DEBUG] [Thread-55670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:12:15.202 [DEBUG] [Thread-55671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:12:23.883 [DEBUG] [Thread-55672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:12:26.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:12:26.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:12:26.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:12:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 12, 4), 31.43, 11.9, 0.0, 22.62, 23.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:12:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:12:04
2025-11-17T14:12:26.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:12:27.050 [DEBUG] [Thread-55673] [transport.py] [_log()] starting thread (client mode): 0xd070ecb0
2025-11-17T14:12:27.050 [DEBUG] [Thread-55673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:12:27.070 [DEBUG] [Thread-55673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:12:27.070 [INFO] [Thread-55673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] client lang: <none>
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] server lang: <none>
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] kex follows: False
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:12:27.073 [DEBUG] [Thread-55673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:12:27.074 [DEBUG] [Thread-55673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:12:27.074 [DEBUG] [Thread-55673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:12:27.074 [DEBUG] [Thread-55673] [transport.py] [_log()] Compression: none
2025-11-17T14:12:27.074 [DEBUG] [Thread-55673] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:12:27.082 [DEBUG] [Thread-55673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:12:27.083 [DEBUG] [Thread-55673] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:12:27.083 [DEBUG] [Thread-55673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:12:27.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:12:27.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:12:27.085 [DEBUG] [Thread-55673] [transport.py] [_log()] userauth is OK
2025-11-17T14:12:27.085 [DEBUG] [Thread-55673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:12:27.085 [DEBUG] [Thread-55673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:12:27.085 [DEBUG] [Thread-55673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:12:27.086 [DEBUG] [Thread-55673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:12:27.108 [INFO] [Thread-55673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:12:27.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:12:27.755 [DEBUG] [Thread-55673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:12:27.755 [DEBUG] [Thread-55673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:12:27.756 [DEBUG] [Thread-55673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:12:27.796 [DEBUG] [Thread-55673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:12:27.797 [DEBUG] [Thread-55673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:12:27.799 [DEBUG] [Thread-55673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:12:27.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:12:27.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:12:27.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:12:27.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:12:27.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:12:27.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:12:27.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:12:27.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:12:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:12:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.508034 -999.00  +23.70  33.89     17   -2.30 1 1 2 1 1   888    0 26.74 47.55 ----- 33.9 33.9 322.6 36.9 30.0 -25.5 29.5 -24.8 30.1 -23.7 30.8 -24.6
2025-11-17T14:12:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:12:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:12:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.508034
2025-11-17T14:12:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:12:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:12:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:12:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:12:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:12:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:12:04', tmtdew=31.43, humidity=11.9, cloud=0.0, wind=22.62, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:11:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:12:27.824 [DEBUG] [Thread-55673] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:12:27.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:12:27.924 [DEBUG] [Thread-55676] [transport.py] [_log()] starting thread (client mode): 0xd3163100
2025-11-17T14:12:27.924 [DEBUG] [Thread-55676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:12:27.942 [DEBUG] [Thread-55676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:12:27.942 [INFO] [Thread-55676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:12:27.949 [DEBUG] [Thread-55676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] client lang: <none>
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] server lang: <none>
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] kex follows: False
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:12:27.950 [DEBUG] [Thread-55676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:12:27.951 [DEBUG] [Thread-55676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:12:27.951 [DEBUG] [Thread-55676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:12:27.951 [DEBUG] [Thread-55676] [transport.py] [_log()] Compression: none
2025-11-17T14:12:27.951 [DEBUG] [Thread-55676] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:12:28.008 [DEBUG] [Thread-55676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:12:28.009 [DEBUG] [Thread-55676] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:12:28.009 [DEBUG] [Thread-55676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:12:28.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:12:28.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:12:28.064 [DEBUG] [Thread-55676] [transport.py] [_log()] userauth is OK
2025-11-17T14:12:28.064 [DEBUG] [Thread-55676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:12:28.064 [DEBUG] [Thread-55676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:12:28.064 [DEBUG] [Thread-55676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:12:28.064 [DEBUG] [Thread-55676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:12:28.084 [INFO] [Thread-55676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:12:28.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:12:28.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:12:28.997 [DEBUG] [Thread-55676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:12:28.997 [DEBUG] [Thread-55676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:12:29.045 [DEBUG] [Thread-55676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:12:29.045 [DEBUG] [Thread-55676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:12:29.055 [DEBUG] [Thread-55676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:12:29.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:12:29.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:12:29.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:12:29.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:12:29.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:12:29.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:12:29.090 [DEBUG] [Thread-55676] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:12:38.909 [DEBUG] [Thread-55678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:12:53.954 [DEBUG] [Thread-55679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:12:57.917 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:12:57.918 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:12:59.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:12:59.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:12:59.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:12:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 12, 36), 32.45, 10.9, 0.0, 30.15, 24.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:12:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:12:36
2025-11-17T14:12:59.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:13:00.061 [DEBUG] [Thread-55680] [transport.py] [_log()] starting thread (client mode): 0xd31b02e0
2025-11-17T14:13:00.061 [DEBUG] [Thread-55680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:13:00.081 [DEBUG] [Thread-55680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:13:00.081 [INFO] [Thread-55680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] client lang: <none>
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] server lang: <none>
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] kex follows: False
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] Compression: none
2025-11-17T14:13:00.085 [DEBUG] [Thread-55680] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:13:00.101 [DEBUG] [Thread-55680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:13:00.101 [DEBUG] [Thread-55680] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:13:00.101 [DEBUG] [Thread-55680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:13:00.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:13:00.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:13:00.103 [DEBUG] [Thread-55680] [transport.py] [_log()] userauth is OK
2025-11-17T14:13:00.103 [DEBUG] [Thread-55680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:13:00.103 [DEBUG] [Thread-55680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:13:00.103 [DEBUG] [Thread-55680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:13:00.103 [DEBUG] [Thread-55680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:13:00.119 [INFO] [Thread-55680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:13:00.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:13:00.758 [DEBUG] [Thread-55680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:13:00.758 [DEBUG] [Thread-55680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:13:00.758 [DEBUG] [Thread-55680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:13:00.799 [DEBUG] [Thread-55680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:13:00.799 [DEBUG] [Thread-55680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:13:00.801 [DEBUG] [Thread-55680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:13:00.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:13:00.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:13:00.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:13:00.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:13:00.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:13:00.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:13:00.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.508380 -999.00  +23.80  20.94     17   -2.50 1 1 1 1 1   888    0 26.54 49.70 ----- 20.9 20.9 324.2 29.8 30.1 -26.1 29.5 -25.9 30.1 -24.0 30.8 -25.1
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.508380
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:13:00.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:12:36', tmtdew=32.45, humidity=10.9, cloud=0.0, wind=30.15, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:12:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:13:00.819 [DEBUG] [Thread-55680] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:13:00.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:13:00.905 [DEBUG] [Thread-55683] [transport.py] [_log()] starting thread (client mode): 0xd31b1870
2025-11-17T14:13:00.905 [DEBUG] [Thread-55683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:13:00.921 [DEBUG] [Thread-55683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:13:00.922 [INFO] [Thread-55683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] client lang: <none>
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] server lang: <none>
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] kex follows: False
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:13:00.929 [DEBUG] [Thread-55683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:13:00.930 [DEBUG] [Thread-55683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:13:00.930 [DEBUG] [Thread-55683] [transport.py] [_log()] Compression: none
2025-11-17T14:13:00.930 [DEBUG] [Thread-55683] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:13:00.987 [DEBUG] [Thread-55683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:13:00.987 [DEBUG] [Thread-55683] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:13:00.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:13:00.987 [DEBUG] [Thread-55683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:13:00.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:13:01.043 [DEBUG] [Thread-55683] [transport.py] [_log()] userauth is OK
2025-11-17T14:13:01.044 [DEBUG] [Thread-55683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:13:01.044 [DEBUG] [Thread-55683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:13:01.044 [DEBUG] [Thread-55683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:13:01.044 [DEBUG] [Thread-55683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:13:01.058 [INFO] [Thread-55683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:13:01.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:13:01.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:13:01.991 [DEBUG] [Thread-55683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:13:01.991 [DEBUG] [Thread-55683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:13:02.045 [DEBUG] [Thread-55683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:13:02.045 [DEBUG] [Thread-55683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:13:02.054 [DEBUG] [Thread-55683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:13:02.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:13:02.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:13:02.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:13:02.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:13:02.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:13:02.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:13:02.107 [DEBUG] [Thread-55683] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:13:08.981 [DEBUG] [Thread-55685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:13:15.236 [DEBUG] [Thread-55686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:13:24.009 [DEBUG] [Thread-55687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:13:32.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:13:32.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:13:32.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:13:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 13, 8), 31.86, 11.31, 0.0, 25.85, 24.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:13:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:13:08
2025-11-17T14:13:32.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:13:33.018 [DEBUG] [Thread-55688] [transport.py] [_log()] starting thread (client mode): 0xd31b01c0
2025-11-17T14:13:33.018 [DEBUG] [Thread-55688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:13:33.037 [DEBUG] [Thread-55688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:13:33.038 [INFO] [Thread-55688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:13:33.038 [DEBUG] [Thread-55688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] client lang: <none>
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] server lang: <none>
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] kex follows: False
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] Compression: none
2025-11-17T14:13:33.039 [DEBUG] [Thread-55688] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:13:33.047 [DEBUG] [Thread-55688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:13:33.047 [DEBUG] [Thread-55688] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:13:33.047 [DEBUG] [Thread-55688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:13:33.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:13:33.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:13:33.049 [DEBUG] [Thread-55688] [transport.py] [_log()] userauth is OK
2025-11-17T14:13:33.049 [DEBUG] [Thread-55688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:13:33.049 [DEBUG] [Thread-55688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:13:33.049 [DEBUG] [Thread-55688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:13:33.049 [DEBUG] [Thread-55688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:13:33.072 [INFO] [Thread-55688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:13:33.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:13:33.728 [DEBUG] [Thread-55688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:13:33.728 [DEBUG] [Thread-55688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:13:33.728 [DEBUG] [Thread-55688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:13:33.769 [DEBUG] [Thread-55688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:13:33.769 [DEBUG] [Thread-55688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:13:33.772 [DEBUG] [Thread-55688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:13:33.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:13:33.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:13:33.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:13:33.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:13:33.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:13:33.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:13:33.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:13:33.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:13:33.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:13:33.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.508728 -999.00  +24.30  15.53     16   -2.40 1 1 1 1 1   888    0 26.84 51.97 ----- 15.5 15.5 5.2 33.7 30.3 -25.4 29.6 -24.9 30.2 -24.1 31.0 -24.6
2025-11-17T14:13:33.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:13:33.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:13:33.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.508728
2025-11-17T14:13:33.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:13:33.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:13:33.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:13:33.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:13:33.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:13:33.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:13:08', tmtdew=31.86, humidity=11.31, cloud=0.0, wind=25.85, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:12:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:13:33.798 [DEBUG] [Thread-55688] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:13:33.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:13:33.896 [DEBUG] [Thread-55691] [transport.py] [_log()] starting thread (client mode): 0xd3134b20
2025-11-17T14:13:33.897 [DEBUG] [Thread-55691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:13:33.911 [DEBUG] [Thread-55691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:13:33.912 [INFO] [Thread-55691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:13:33.919 [DEBUG] [Thread-55691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:13:33.919 [DEBUG] [Thread-55691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:13:33.919 [DEBUG] [Thread-55691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] client lang: <none>
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] server lang: <none>
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] kex follows: False
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:13:33.920 [DEBUG] [Thread-55691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:13:33.921 [DEBUG] [Thread-55691] [transport.py] [_log()] Compression: none
2025-11-17T14:13:33.921 [DEBUG] [Thread-55691] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:13:33.976 [DEBUG] [Thread-55691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:13:33.976 [DEBUG] [Thread-55691] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:13:33.977 [DEBUG] [Thread-55691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:13:33.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:13:33.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:13:34.032 [DEBUG] [Thread-55691] [transport.py] [_log()] userauth is OK
2025-11-17T14:13:34.032 [DEBUG] [Thread-55691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:13:34.032 [DEBUG] [Thread-55691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:13:34.032 [DEBUG] [Thread-55691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:13:34.032 [DEBUG] [Thread-55691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:13:34.052 [INFO] [Thread-55691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:13:34.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:13:34.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:13:34.940 [DEBUG] [Thread-55691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:13:34.940 [DEBUG] [Thread-55691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:13:34.988 [DEBUG] [Thread-55691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:13:34.988 [DEBUG] [Thread-55691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:13:34.997 [DEBUG] [Thread-55691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:13:35.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:13: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')
2025-11-17T14:13:35.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:13:35.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:13:35.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:13:35.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:13:35.032 [DEBUG] [Thread-55691] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:13:39.038 [DEBUG] [Thread-55693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:13:54.070 [DEBUG] [Thread-55694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:13:58.059 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:13:58.060 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:14:05.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:14:05.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:14:05.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:14:05.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 13, 40), 32.68, 10.63, 0.0, 24.33, 24.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:14:05.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:13:40
2025-11-17T14:14:05.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:14:05.961 [DEBUG] [Thread-55695] [transport.py] [_log()] starting thread (client mode): 0xd070f760
2025-11-17T14:14:05.961 [DEBUG] [Thread-55695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:14:05.983 [DEBUG] [Thread-55695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:14:05.983 [INFO] [Thread-55695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:14:05.986 [DEBUG] [Thread-55695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:14:05.986 [DEBUG] [Thread-55695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:14:05.986 [DEBUG] [Thread-55695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] client lang: <none>
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] server lang: <none>
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] kex follows: False
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] Compression: none
2025-11-17T14:14:05.987 [DEBUG] [Thread-55695] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:14:06.008 [DEBUG] [Thread-55695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:14:06.009 [DEBUG] [Thread-55695] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:14:06.009 [DEBUG] [Thread-55695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:14:06.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:14:06.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:14:06.011 [DEBUG] [Thread-55695] [transport.py] [_log()] userauth is OK
2025-11-17T14:14:06.011 [DEBUG] [Thread-55695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:14:06.011 [DEBUG] [Thread-55695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:14:06.011 [DEBUG] [Thread-55695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:14:06.011 [DEBUG] [Thread-55695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:14:06.046 [INFO] [Thread-55695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:14:06.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:14:06.726 [DEBUG] [Thread-55695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:14:06.726 [DEBUG] [Thread-55695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:14:06.726 [DEBUG] [Thread-55695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:14:06.766 [DEBUG] [Thread-55695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:14:06.766 [DEBUG] [Thread-55695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:14:06.769 [DEBUG] [Thread-55695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:14:06.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:14:06.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:14:06.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:14:06.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:14:06.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:14:06.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:14:06.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:14:06.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:14:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:14:06.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.509075 -999.00  +24.40  21.56     16   -2.50 1 1 1 1 1   888    0 26.98 54.19 ----- 21.6 21.6 333.8 27.0 30.4 -26.3 29.7 -25.3 30.4 -23.9 31.0 -24.9
2025-11-17T14:14:06.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:14:06.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:14:06.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.509075
2025-11-17T14:14:06.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:14:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:14:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:14:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:14:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:14:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:13:40', tmtdew=32.68, humidity=10.63, cloud=0.0, wind=24.33, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:13:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:14:06.798 [DEBUG] [Thread-55695] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:14:06.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:14:06.896 [DEBUG] [Thread-55698] [transport.py] [_log()] starting thread (client mode): 0xd070fbe0
2025-11-17T14:14:06.896 [DEBUG] [Thread-55698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:14:06.911 [DEBUG] [Thread-55698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:14:06.912 [INFO] [Thread-55698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] client lang: <none>
2025-11-17T14:14:06.919 [DEBUG] [Thread-55698] [transport.py] [_log()] server lang: <none>
2025-11-17T14:14:06.920 [DEBUG] [Thread-55698] [transport.py] [_log()] kex follows: False
2025-11-17T14:14:06.920 [DEBUG] [Thread-55698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:14:06.920 [DEBUG] [Thread-55698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:14:06.920 [DEBUG] [Thread-55698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:14:06.920 [DEBUG] [Thread-55698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:14:06.920 [DEBUG] [Thread-55698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:14:06.920 [DEBUG] [Thread-55698] [transport.py] [_log()] Compression: none
2025-11-17T14:14:06.920 [DEBUG] [Thread-55698] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:14:06.975 [DEBUG] [Thread-55698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:14:06.976 [DEBUG] [Thread-55698] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:14:06.976 [DEBUG] [Thread-55698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:14:06.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:14:06.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:14:07.032 [DEBUG] [Thread-55698] [transport.py] [_log()] userauth is OK
2025-11-17T14:14:07.032 [DEBUG] [Thread-55698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:14:07.032 [DEBUG] [Thread-55698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:14:07.032 [DEBUG] [Thread-55698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:14:07.033 [DEBUG] [Thread-55698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:14:07.052 [INFO] [Thread-55698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:14:07.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:14:07.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:14:08.010 [DEBUG] [Thread-55698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:14:08.011 [DEBUG] [Thread-55698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:14:08.058 [DEBUG] [Thread-55698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:14:08.059 [DEBUG] [Thread-55698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:14:08.067 [DEBUG] [Thread-55698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:14:08.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:14:08.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:14:08.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:14:08.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:14:08.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:14:08.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:14:08.108 [DEBUG] [Thread-55698] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:14:09.101 [DEBUG] [Thread-55700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:14:15.268 [DEBUG] [Thread-55701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:14:24.135 [DEBUG] [Thread-55702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:14:38.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:14:38.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:14:38.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:14:38.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 14, 12), 33.3, 10.11, 0.0, 25.88, 24.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:14:38.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:14:12
2025-11-17T14:14:38.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:14:39.044 [DEBUG] [Thread-55703] [transport.py] [_log()] starting thread (client mode): 0xd0784550
2025-11-17T14:14:39.044 [DEBUG] [Thread-55703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:14:39.059 [DEBUG] [Thread-55703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:14:39.059 [INFO] [Thread-55703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:14:39.061 [DEBUG] [Thread-55703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:14:39.061 [DEBUG] [Thread-55703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:14:39.061 [DEBUG] [Thread-55703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:14:39.061 [DEBUG] [Thread-55703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:14:39.061 [DEBUG] [Thread-55703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] client lang: <none>
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] server lang: <none>
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] kex follows: False
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] Compression: none
2025-11-17T14:14:39.062 [DEBUG] [Thread-55703] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:14:39.073 [DEBUG] [Thread-55703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:14:39.073 [DEBUG] [Thread-55703] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:14:39.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:14:39.074 [DEBUG] [Thread-55703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:14:39.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:14:39.075 [DEBUG] [Thread-55703] [transport.py] [_log()] userauth is OK
2025-11-17T14:14:39.075 [DEBUG] [Thread-55703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:14:39.075 [DEBUG] [Thread-55703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:14:39.075 [DEBUG] [Thread-55703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:14:39.076 [DEBUG] [Thread-55703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:14:39.093 [INFO] [Thread-55703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:14:39.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:14:39.166 [DEBUG] [Thread-55705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:14:39.755 [DEBUG] [Thread-55703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:14:39.755 [DEBUG] [Thread-55703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:14:39.755 [DEBUG] [Thread-55703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:14:39.795 [DEBUG] [Thread-55703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:14:39.796 [DEBUG] [Thread-55703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:14:39.799 [DEBUG] [Thread-55703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:14:39.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:14:39.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:14:39.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:14:39.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:14:39.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:14:39.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:14:39.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:14:39.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:14:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:14:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.509422 -999.00  +24.40  14.52     15   -3.10 1 1 1 1 1   888    0 27.30 61.23 ----- 14.5 14.5 343.4 25.4 30.4 -26.2 29.6 -27.5 30.5 -24.3 31.1 -25.5
2025-11-17T14:14:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:14:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:14:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.509422
2025-11-17T14:14:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:14:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:14:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:14:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:14:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:14:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:14:12', tmtdew=33.3, humidity=10.11, cloud=0.0, wind=25.88, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:13:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:14:39.825 [DEBUG] [Thread-55703] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:14:39.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:14:39.924 [DEBUG] [Thread-55707] [transport.py] [_log()] starting thread (client mode): 0xd31b3460
2025-11-17T14:14:39.924 [DEBUG] [Thread-55707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:14:39.940 [DEBUG] [Thread-55707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:14:39.940 [INFO] [Thread-55707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:14:39.947 [DEBUG] [Thread-55707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:14:39.947 [DEBUG] [Thread-55707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] client lang: <none>
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] server lang: <none>
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] kex follows: False
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] Compression: none
2025-11-17T14:14:39.948 [DEBUG] [Thread-55707] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:14:40.008 [DEBUG] [Thread-55707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:14:40.009 [DEBUG] [Thread-55707] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:14:40.010 [DEBUG] [Thread-55707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:14:40.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:14:40.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:14:40.068 [DEBUG] [Thread-55707] [transport.py] [_log()] userauth is OK
2025-11-17T14:14:40.068 [DEBUG] [Thread-55707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:14:40.068 [DEBUG] [Thread-55707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:14:40.068 [DEBUG] [Thread-55707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:14:40.068 [DEBUG] [Thread-55707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:14:40.089 [INFO] [Thread-55707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:14:40.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:14:40.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:14:40.955 [DEBUG] [Thread-55707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:14:40.955 [DEBUG] [Thread-55707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:14:41.003 [DEBUG] [Thread-55707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:14:41.003 [DEBUG] [Thread-55707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:14:41.012 [DEBUG] [Thread-55707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:14:41.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:14:41.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:14:41.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:14:41.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:14:41.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:14:41.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:14:41.047 [DEBUG] [Thread-55707] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:14:54.197 [DEBUG] [Thread-55709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:14:58.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:14:58.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:15:09.240 [DEBUG] [Thread-55710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:15:11.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:15:11.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:15:11.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:15:11.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 14, 44), 32.8, 10.31, 0.0, 28.41, 23.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:15:11.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:14:44
2025-11-17T14:15:11.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:15:11.971 [DEBUG] [Thread-55711] [transport.py] [_log()] starting thread (client mode): 0xd075b820
2025-11-17T14:15:11.972 [DEBUG] [Thread-55711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:15:11.991 [DEBUG] [Thread-55711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:15:11.991 [INFO] [Thread-55711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:15:11.994 [DEBUG] [Thread-55711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:15:11.994 [DEBUG] [Thread-55711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:15:11.994 [DEBUG] [Thread-55711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:15:11.994 [DEBUG] [Thread-55711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:15:11.994 [DEBUG] [Thread-55711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:15:11.994 [DEBUG] [Thread-55711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:15:11.994 [DEBUG] [Thread-55711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:15:11.994 [DEBUG] [Thread-55711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] client lang: <none>
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] server lang: <none>
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] kex follows: False
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] Compression: none
2025-11-17T14:15:11.995 [DEBUG] [Thread-55711] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:15:12.011 [DEBUG] [Thread-55711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:15:12.012 [DEBUG] [Thread-55711] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:15:12.012 [DEBUG] [Thread-55711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:15:12.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:15:12.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:15:12.014 [DEBUG] [Thread-55711] [transport.py] [_log()] userauth is OK
2025-11-17T14:15:12.014 [DEBUG] [Thread-55711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:15:12.014 [DEBUG] [Thread-55711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:15:12.015 [DEBUG] [Thread-55711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:15:12.015 [DEBUG] [Thread-55711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:15:12.039 [INFO] [Thread-55711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:15:12.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:15:13.141 [DEBUG] [Thread-55711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:15:13.142 [DEBUG] [Thread-55711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:15:13.142 [DEBUG] [Thread-55711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:15:13.182 [DEBUG] [Thread-55711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:15:13.183 [DEBUG] [Thread-55711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:15:13.186 [DEBUG] [Thread-55711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:15:13.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:15:13.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:15:13.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:15:13.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:15:13.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:15:13.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:15:13.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:15:13.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:15:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:15:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.510117 -999.00  +24.70  31.46     15   -3.00 1 1 2 1 1   888    0 27.83 77.24 ----- 31.5 31.5 309.4 38.9 30.4 -26.7 29.8 -26.0 30.5 -26.0 31.2 -25.6
2025-11-17T14:15:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:15:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:15:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.510117
2025-11-17T14:15:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:15:13.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:15:13.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:15:13.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:15:13.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:15:13.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:14:44', tmtdew=32.8, humidity=10.31, cloud=0.0, wind=28.41, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:14:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:15:13.212 [DEBUG] [Thread-55711] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:15:13.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:15:13.309 [DEBUG] [Thread-55714] [transport.py] [_log()] starting thread (client mode): 0xd07216f0
2025-11-17T14:15:13.309 [DEBUG] [Thread-55714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:15:13.323 [DEBUG] [Thread-55714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:15:13.323 [INFO] [Thread-55714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:15:13.330 [DEBUG] [Thread-55714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] client lang: <none>
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] server lang: <none>
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] kex follows: False
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] Compression: none
2025-11-17T14:15:13.331 [DEBUG] [Thread-55714] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:15:13.390 [DEBUG] [Thread-55714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:15:13.390 [DEBUG] [Thread-55714] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:15:13.390 [DEBUG] [Thread-55714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:15:13.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:15:13.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:15:13.452 [DEBUG] [Thread-55714] [transport.py] [_log()] userauth is OK
2025-11-17T14:15:13.452 [DEBUG] [Thread-55714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:15:13.452 [DEBUG] [Thread-55714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:15:13.452 [DEBUG] [Thread-55714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:15:13.452 [DEBUG] [Thread-55714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:15:13.471 [INFO] [Thread-55714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:15:13.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:15:13.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:15:14.357 [DEBUG] [Thread-55714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:15:14.357 [DEBUG] [Thread-55714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:15:14.405 [DEBUG] [Thread-55714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:15:14.405 [DEBUG] [Thread-55714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:15:14.414 [DEBUG] [Thread-55714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:15:14.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:15:14.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:15:14.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:15:14.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:15:14.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:15:14.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:15:14.449 [DEBUG] [Thread-55714] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:15:15.306 [DEBUG] [Thread-55716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:15:24.274 [DEBUG] [Thread-55717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:15:39.323 [DEBUG] [Thread-55718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:15:44.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:15:44.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:15: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
2025-11-17T14:15:45.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 15, 16), 32.85, 10.3, 0.0, 22.96, 23.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:15:45.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:15:16
2025-11-17T14:15:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:15:45.360 [DEBUG] [Thread-55719] [transport.py] [_log()] starting thread (client mode): 0xd3163a00
2025-11-17T14:15:45.360 [DEBUG] [Thread-55719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:15:45.380 [DEBUG] [Thread-55719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:15:45.380 [INFO] [Thread-55719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:15:45.382 [DEBUG] [Thread-55719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:15:45.382 [DEBUG] [Thread-55719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:15:45.382 [DEBUG] [Thread-55719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:15:45.382 [DEBUG] [Thread-55719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:15:45.382 [DEBUG] [Thread-55719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:15:45.382 [DEBUG] [Thread-55719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:15:45.382 [DEBUG] [Thread-55719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:15:45.382 [DEBUG] [Thread-55719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] client lang: <none>
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] server lang: <none>
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] kex follows: False
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] Compression: none
2025-11-17T14:15:45.383 [DEBUG] [Thread-55719] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:15:45.397 [DEBUG] [Thread-55719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:15:45.398 [DEBUG] [Thread-55719] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:15:45.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:15:45.399 [DEBUG] [Thread-55719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:15:45.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:15:45.401 [DEBUG] [Thread-55719] [transport.py] [_log()] userauth is OK
2025-11-17T14:15:45.401 [DEBUG] [Thread-55719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:15:45.401 [DEBUG] [Thread-55719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:15:45.401 [DEBUG] [Thread-55719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:15:45.401 [DEBUG] [Thread-55719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:15:45.425 [INFO] [Thread-55719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:15:45.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:15:46.190 [DEBUG] [Thread-55719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:15:46.191 [DEBUG] [Thread-55719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:15:46.191 [DEBUG] [Thread-55719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:15:46.231 [DEBUG] [Thread-55719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:15:46.232 [DEBUG] [Thread-55719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:15:46.234 [DEBUG] [Thread-55719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:15:46.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:15:46.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:15:46.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:15:46.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:15:46.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:15:46.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:15:46.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:15:46.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:15:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:15:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.510464 -999.00  +23.90  28.64     17   -2.40 1 1 1 1 1   888    0 27.43 73.28 ----- 28.6 28.6 310.4 43.5 30.3 -28.5 29.6 -26.7 30.2 -25.0 31.1 -26.7
2025-11-17T14:15:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:15:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:15:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.510464
2025-11-17T14:15:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:15:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:15:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:15:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:15:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:15:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:15:16', tmtdew=32.85, humidity=10.3, cloud=0.0, wind=22.96, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:15:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:15:46.259 [DEBUG] [Thread-55719] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:15:46.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:15:46.355 [DEBUG] [Thread-55722] [transport.py] [_log()] starting thread (client mode): 0xd0786e90
2025-11-17T14:15:46.355 [DEBUG] [Thread-55722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:15:46.372 [DEBUG] [Thread-55722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:15:46.372 [INFO] [Thread-55722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] client lang: <none>
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] server lang: <none>
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] kex follows: False
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:15:46.380 [DEBUG] [Thread-55722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:15:46.381 [DEBUG] [Thread-55722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:15:46.381 [DEBUG] [Thread-55722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:15:46.381 [DEBUG] [Thread-55722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:15:46.381 [DEBUG] [Thread-55722] [transport.py] [_log()] Compression: none
2025-11-17T14:15:46.381 [DEBUG] [Thread-55722] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:15:46.440 [DEBUG] [Thread-55722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:15:46.440 [DEBUG] [Thread-55722] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:15:46.441 [DEBUG] [Thread-55722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:15:46.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:15:46.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:15:46.496 [DEBUG] [Thread-55722] [transport.py] [_log()] userauth is OK
2025-11-17T14:15:46.496 [DEBUG] [Thread-55722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:15:46.496 [DEBUG] [Thread-55722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:15:46.496 [DEBUG] [Thread-55722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:15:46.496 [DEBUG] [Thread-55722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:15:46.516 [INFO] [Thread-55722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:15:46.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:15:46.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:15:47.368 [DEBUG] [Thread-55722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:15:47.369 [DEBUG] [Thread-55722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:15:47.417 [DEBUG] [Thread-55722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:15:47.417 [DEBUG] [Thread-55722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:15:47.426 [DEBUG] [Thread-55722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:15:47.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:15:47.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:15:47.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:15:47.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:15:47.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:15:47.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:15:47.461 [DEBUG] [Thread-55722] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:15:54.358 [DEBUG] [Thread-55724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:15:58.344 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:15:58.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:16:09.408 [DEBUG] [Thread-55725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:16:15.334 [DEBUG] [Thread-55726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:16:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:16:17.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:16: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
2025-11-17T14:16:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 15, 48), 32.05, 11.08, 0.0, 30.12, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:16:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:15:48
2025-11-17T14:16:18.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:16:18.412 [DEBUG] [Thread-55727] [transport.py] [_log()] starting thread (client mode): 0xd0786290
2025-11-17T14:16:18.412 [DEBUG] [Thread-55727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:16:18.433 [DEBUG] [Thread-55727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:16:18.433 [INFO] [Thread-55727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:16:18.436 [DEBUG] [Thread-55727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] client lang: <none>
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] server lang: <none>
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] kex follows: False
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] Compression: none
2025-11-17T14:16:18.437 [DEBUG] [Thread-55727] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:16:18.454 [DEBUG] [Thread-55727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:16:18.455 [DEBUG] [Thread-55727] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:16:18.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:16:18.456 [DEBUG] [Thread-55727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:16:18.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:16:18.458 [DEBUG] [Thread-55727] [transport.py] [_log()] userauth is OK
2025-11-17T14:16:18.458 [DEBUG] [Thread-55727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:16:18.458 [DEBUG] [Thread-55727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:16:18.458 [DEBUG] [Thread-55727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:16:18.458 [DEBUG] [Thread-55727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:16:18.482 [INFO] [Thread-55727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:16:18.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:16:19.133 [DEBUG] [Thread-55727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:16:19.133 [DEBUG] [Thread-55727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:16:19.134 [DEBUG] [Thread-55727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:16:19.175 [DEBUG] [Thread-55727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:16:19.175 [DEBUG] [Thread-55727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:16:19.178 [DEBUG] [Thread-55727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:16:19.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:16:19.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:16:19.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:16:19.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:16:19.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:16:19.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:16:19.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:16:19.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:16:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:16:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.510811 -999.00  +23.60  31.84     17   -2.60 1 1 2 1 1   888    0 27.67 71.89 ----- 31.8 31.8 309.8 43.5 30.3 -27.3 29.6 -26.7 30.0 -27.4 31.0 -26.3
2025-11-17T14:16:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:16:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:16:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.510811
2025-11-17T14:16:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:16:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:16:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:16:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:16:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:16:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:15:48', tmtdew=32.05, humidity=11.08, cloud=0.0, wind=30.12, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:15:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:16:19.205 [DEBUG] [Thread-55727] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:16:19.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:16:19.301 [DEBUG] [Thread-55730] [transport.py] [_log()] starting thread (client mode): 0xd07be500
2025-11-17T14:16:19.301 [DEBUG] [Thread-55730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:16:19.316 [DEBUG] [Thread-55730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:16:19.316 [INFO] [Thread-55730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:16:19.324 [DEBUG] [Thread-55730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:16:19.324 [DEBUG] [Thread-55730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:16:19.324 [DEBUG] [Thread-55730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:16:19.324 [DEBUG] [Thread-55730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:16:19.324 [DEBUG] [Thread-55730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:16:19.324 [DEBUG] [Thread-55730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:16:19.324 [DEBUG] [Thread-55730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:16:19.324 [DEBUG] [Thread-55730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] client lang: <none>
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] server lang: <none>
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] kex follows: False
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] Compression: none
2025-11-17T14:16:19.325 [DEBUG] [Thread-55730] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:16:19.384 [DEBUG] [Thread-55730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:16:19.385 [DEBUG] [Thread-55730] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:16:19.385 [DEBUG] [Thread-55730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:16:19.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:16:19.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:16:19.440 [DEBUG] [Thread-55730] [transport.py] [_log()] userauth is OK
2025-11-17T14:16:19.440 [DEBUG] [Thread-55730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:16:19.440 [DEBUG] [Thread-55730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:16:19.440 [DEBUG] [Thread-55730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:16:19.440 [DEBUG] [Thread-55730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:16:19.460 [INFO] [Thread-55730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:16:19.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:16:19.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:16:20.323 [DEBUG] [Thread-55730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:16:20.323 [DEBUG] [Thread-55730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:16:20.371 [DEBUG] [Thread-55730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:16:20.371 [DEBUG] [Thread-55730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:16:20.381 [DEBUG] [Thread-55730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:16:20.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:16:20.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:16:20.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:16:20.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:16:20.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:16:20.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:16:20.416 [DEBUG] [Thread-55730] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:16:24.441 [DEBUG] [Thread-55732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:16:39.484 [DEBUG] [Thread-55733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:16:50.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:16:50.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:16:50.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:16:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 16, 20), 31.59, 11.45, 0.0, 31.14, 23.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:16:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:16:20
2025-11-17T14:16:51.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:16:51.378 [DEBUG] [Thread-55734] [transport.py] [_log()] starting thread (client mode): 0xd070e410
2025-11-17T14:16:51.378 [DEBUG] [Thread-55734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:16:51.398 [DEBUG] [Thread-55734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:16:51.398 [INFO] [Thread-55734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:16:51.399 [DEBUG] [Thread-55734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:16:51.399 [DEBUG] [Thread-55734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] client lang: <none>
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] server lang: <none>
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] kex follows: False
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] Compression: none
2025-11-17T14:16:51.400 [DEBUG] [Thread-55734] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:16:51.407 [DEBUG] [Thread-55734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:16:51.408 [DEBUG] [Thread-55734] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:16:51.408 [DEBUG] [Thread-55734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:16:51.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:16:51.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:16:51.409 [DEBUG] [Thread-55734] [transport.py] [_log()] userauth is OK
2025-11-17T14:16:51.409 [DEBUG] [Thread-55734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:16:51.409 [DEBUG] [Thread-55734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:16:51.409 [DEBUG] [Thread-55734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:16:51.409 [DEBUG] [Thread-55734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:16:51.422 [INFO] [Thread-55734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:16:51.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:16:52.172 [DEBUG] [Thread-55734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:16:52.172 [DEBUG] [Thread-55734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:16:52.173 [DEBUG] [Thread-55734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:16:52.213 [DEBUG] [Thread-55734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:16:52.213 [DEBUG] [Thread-55734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:16:52.215 [DEBUG] [Thread-55734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:16:52.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:16:52.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:16:52.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:16:52.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:16:52.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:16:52.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:16:52.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:16:52.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:16:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:16:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.511158 -999.00  +23.20  26.16     18   -2.30 1 1 1 1 1   888    0 28.07 76.54 ----- 26.2 26.2 304.6 34.7 30.1 -27.9 29.5 -26.6 30.0 -25.9 30.9 -26.6
2025-11-17T14:16:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:16:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:16:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.511158
2025-11-17T14:16:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:16:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:16:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:16:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:16:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:16:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:16:20', tmtdew=31.59, humidity=11.45, cloud=0.0, wind=31.14, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:16:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:16:52.231 [DEBUG] [Thread-55734] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:16:52.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:16:52.319 [DEBUG] [Thread-55737] [transport.py] [_log()] starting thread (client mode): 0xd070d840
2025-11-17T14:16:52.319 [DEBUG] [Thread-55737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:16:52.335 [DEBUG] [Thread-55737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:16:52.335 [INFO] [Thread-55737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] client lang: <none>
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] server lang: <none>
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] kex follows: False
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:16:52.342 [DEBUG] [Thread-55737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:16:52.343 [DEBUG] [Thread-55737] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:16:52.343 [DEBUG] [Thread-55737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:16:52.343 [DEBUG] [Thread-55737] [transport.py] [_log()] Compression: none
2025-11-17T14:16:52.343 [DEBUG] [Thread-55737] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:16:52.403 [DEBUG] [Thread-55737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:16:52.403 [DEBUG] [Thread-55737] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:16:52.404 [DEBUG] [Thread-55737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:16:52.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:16:52.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:16:52.460 [DEBUG] [Thread-55737] [transport.py] [_log()] userauth is OK
2025-11-17T14:16:52.460 [DEBUG] [Thread-55737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:16:52.460 [DEBUG] [Thread-55737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:16:52.460 [DEBUG] [Thread-55737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:16:52.460 [DEBUG] [Thread-55737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:16:52.474 [INFO] [Thread-55737] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:16:52.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:16:52.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:16:53.304 [DEBUG] [Thread-55737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:16:53.304 [DEBUG] [Thread-55737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:16:53.352 [DEBUG] [Thread-55737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:16:53.352 [DEBUG] [Thread-55737] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:16:53.360 [DEBUG] [Thread-55737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:16:53.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:16:53.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:16:53.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:16:53.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:16:53.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:16:53.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:16:53.391 [DEBUG] [Thread-55737] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:16:54.513 [DEBUG] [Thread-55739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:16:58.485 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:16:58.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:17:09.544 [DEBUG] [Thread-55740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:17:15.372 [DEBUG] [Thread-55741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:17:23.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:17:23.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:17:23.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:17:24.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 16, 52), 30.97, 12.21, 0.0, 23.98, 23.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:17:24.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:16:52
2025-11-17T14:17:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:17:24.311 [DEBUG] [Thread-55742] [transport.py] [_log()] starting thread (client mode): 0xd070fa00
2025-11-17T14:17:24.311 [DEBUG] [Thread-55742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:17:24.332 [DEBUG] [Thread-55742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:17:24.332 [INFO] [Thread-55742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:17:24.335 [DEBUG] [Thread-55742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:17:24.335 [DEBUG] [Thread-55742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:17:24.335 [DEBUG] [Thread-55742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:17:24.335 [DEBUG] [Thread-55742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:17:24.335 [DEBUG] [Thread-55742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:17:24.335 [DEBUG] [Thread-55742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:17:24.335 [DEBUG] [Thread-55742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:17:24.335 [DEBUG] [Thread-55742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] client lang: <none>
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] server lang: <none>
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] kex follows: False
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] Compression: none
2025-11-17T14:17:24.336 [DEBUG] [Thread-55742] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:17:24.352 [DEBUG] [Thread-55742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:17:24.353 [DEBUG] [Thread-55742] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:17:24.353 [DEBUG] [Thread-55742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:17:24.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:17:24.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:17:24.356 [DEBUG] [Thread-55742] [transport.py] [_log()] userauth is OK
2025-11-17T14:17:24.356 [DEBUG] [Thread-55742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:17:24.356 [DEBUG] [Thread-55742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:17:24.356 [DEBUG] [Thread-55742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:17:24.356 [DEBUG] [Thread-55742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:17:24.391 [INFO] [Thread-55742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:17:24.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:17:24.573 [DEBUG] [Thread-55744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:17:25.019 [DEBUG] [Thread-55742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:17:25.020 [DEBUG] [Thread-55742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:17:25.020 [DEBUG] [Thread-55742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:17:25.061 [DEBUG] [Thread-55742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:17:25.061 [DEBUG] [Thread-55742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:17:25.063 [DEBUG] [Thread-55742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:17:25.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:17:25.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:17:25.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:17:25.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:17:25.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:17:25.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:17:25.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:17:25.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:17:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:17:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.511505 -999.00  +23.90  26.29     17   -2.20 1 1 1 1 1   888    0 27.68 67.86 ----- 26.3 26.3 308.2 34.2 30.0 -27.6 29.5 -25.3 30.0 -24.9 30.8 -26.2
2025-11-17T14:17:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:17:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:17:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.511505
2025-11-17T14:17:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:17:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:17:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:17:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:17:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:17:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:16:52', tmtdew=30.97, humidity=12.21, cloud=0.0, wind=23.98, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:16:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:17:25.084 [DEBUG] [Thread-55742] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:17:25.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:17:25.170 [DEBUG] [Thread-55746] [transport.py] [_log()] starting thread (client mode): 0xd07216f0
2025-11-17T14:17:25.170 [DEBUG] [Thread-55746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:17:25.184 [DEBUG] [Thread-55746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:17:25.184 [INFO] [Thread-55746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] client lang: <none>
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] server lang: <none>
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] kex follows: False
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] Compression: none
2025-11-17T14:17:25.192 [DEBUG] [Thread-55746] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:17:25.250 [DEBUG] [Thread-55746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:17:25.250 [DEBUG] [Thread-55746] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:17:25.250 [DEBUG] [Thread-55746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:17:25.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:17:25.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:17:25.308 [DEBUG] [Thread-55746] [transport.py] [_log()] userauth is OK
2025-11-17T14:17:25.308 [DEBUG] [Thread-55746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:17:25.308 [DEBUG] [Thread-55746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:17:25.308 [DEBUG] [Thread-55746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:17:25.308 [DEBUG] [Thread-55746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:17:25.322 [INFO] [Thread-55746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:17:25.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:17:25.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:17:26.197 [DEBUG] [Thread-55746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:17:26.197 [DEBUG] [Thread-55746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:17:26.245 [DEBUG] [Thread-55746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:17:26.245 [DEBUG] [Thread-55746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:17:26.253 [DEBUG] [Thread-55746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:17:26.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:17:26.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:17:26.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:17:26.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:17:26.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:17:26.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:17:26.284 [DEBUG] [Thread-55746] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:17:39.600 [DEBUG] [Thread-55748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:17:54.637 [DEBUG] [Thread-55749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:17:56.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:17:56.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:17:56.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:17:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 17, 24), 31.14, 12.11, 0.0, 21.51, 23.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:17:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:17:24
2025-11-17T14:17:57.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:17:57.269 [DEBUG] [Thread-55750] [transport.py] [_log()] starting thread (client mode): 0xd078dfc0
2025-11-17T14:17:57.269 [DEBUG] [Thread-55750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:17:57.288 [DEBUG] [Thread-55750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:17:57.288 [INFO] [Thread-55750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:17:57.291 [DEBUG] [Thread-55750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:17:57.291 [DEBUG] [Thread-55750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:17:57.291 [DEBUG] [Thread-55750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:17:57.291 [DEBUG] [Thread-55750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:17:57.291 [DEBUG] [Thread-55750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:17:57.291 [DEBUG] [Thread-55750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] client lang: <none>
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] server lang: <none>
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] kex follows: False
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] Compression: none
2025-11-17T14:17:57.292 [DEBUG] [Thread-55750] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:17:57.307 [DEBUG] [Thread-55750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:17:57.307 [DEBUG] [Thread-55750] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:17:57.307 [DEBUG] [Thread-55750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:17:57.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:17:57.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:17:57.308 [DEBUG] [Thread-55750] [transport.py] [_log()] userauth is OK
2025-11-17T14:17:57.308 [DEBUG] [Thread-55750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:17:57.308 [DEBUG] [Thread-55750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:17:57.308 [DEBUG] [Thread-55750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:17:57.308 [DEBUG] [Thread-55750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:17:57.317 [INFO] [Thread-55750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:17:57.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:17:58.051 [DEBUG] [Thread-55750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:17:58.051 [DEBUG] [Thread-55750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:17:58.051 [DEBUG] [Thread-55750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:17:58.092 [DEBUG] [Thread-55750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:17:58.092 [DEBUG] [Thread-55750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:17:58.094 [DEBUG] [Thread-55750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:17:58.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:17:58.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:17:58.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:17:58.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:17:58.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:17:58.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:17:58.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.511853 -999.00  +24.20  21.28     16   -2.40 1 1 1 1 1   888    0 27.54 70.09 ----- 21.3 21.3 325.4 24.7 30.1 -26.6 29.5 -25.4 30.1 -26.3 30.9 -25.5
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.511853
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:17:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:17:24', tmtdew=31.14, humidity=12.11, cloud=0.0, wind=21.51, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:17:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:17:58.111 [DEBUG] [Thread-55750] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:17:58.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:17:58.197 [DEBUG] [Thread-55753] [transport.py] [_log()] starting thread (client mode): 0xd31ce5f0
2025-11-17T14:17:58.197 [DEBUG] [Thread-55753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:17:58.214 [DEBUG] [Thread-55753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:17:58.214 [INFO] [Thread-55753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] client lang: <none>
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] server lang: <none>
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] kex follows: False
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] Compression: none
2025-11-17T14:17:58.222 [DEBUG] [Thread-55753] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:17:58.278 [DEBUG] [Thread-55753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:17:58.279 [DEBUG] [Thread-55753] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:17:58.279 [DEBUG] [Thread-55753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:17:58.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:17:58.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:17:58.335 [DEBUG] [Thread-55753] [transport.py] [_log()] userauth is OK
2025-11-17T14:17:58.335 [DEBUG] [Thread-55753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:17:58.335 [DEBUG] [Thread-55753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:17:58.335 [DEBUG] [Thread-55753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:17:58.335 [DEBUG] [Thread-55753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:17:58.350 [INFO] [Thread-55753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:17:58.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:17:58.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:17:58.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:17:58.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:17:59.219 [DEBUG] [Thread-55753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:17:59.219 [DEBUG] [Thread-55753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:17:59.267 [DEBUG] [Thread-55753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:17:59.268 [DEBUG] [Thread-55753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:17:59.277 [DEBUG] [Thread-55753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:17:59.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:17:59.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:17:59.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:17:59.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:17:59.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:17:59.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:17:59.311 [DEBUG] [Thread-55753] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:18:09.664 [DEBUG] [Thread-55755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:18:15.416 [DEBUG] [Thread-55756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:18:24.695 [DEBUG] [Thread-55757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:18:29.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:18:29.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:18:29.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:18:30.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 17, 56), 30.8, 12.34, 0.0, 20.54, 23.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:18:30.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:17:56
2025-11-17T14:18:30.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:18:30.307 [DEBUG] [Thread-55758] [transport.py] [_log()] starting thread (client mode): 0xd078dde0
2025-11-17T14:18:30.307 [DEBUG] [Thread-55758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:18:30.326 [DEBUG] [Thread-55758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:18:30.326 [INFO] [Thread-55758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] client lang: <none>
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] server lang: <none>
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] kex follows: False
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] Compression: none
2025-11-17T14:18:30.330 [DEBUG] [Thread-55758] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:18:30.345 [DEBUG] [Thread-55758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:18:30.345 [DEBUG] [Thread-55758] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:18:30.345 [DEBUG] [Thread-55758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:18:30.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:18:30.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:18:30.346 [DEBUG] [Thread-55758] [transport.py] [_log()] userauth is OK
2025-11-17T14:18:30.346 [DEBUG] [Thread-55758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:18:30.346 [DEBUG] [Thread-55758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:18:30.346 [DEBUG] [Thread-55758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:18:30.346 [DEBUG] [Thread-55758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:18:30.361 [INFO] [Thread-55758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:18:30.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:18:30.988 [DEBUG] [Thread-55758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:18:30.988 [DEBUG] [Thread-55758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:18:30.988 [DEBUG] [Thread-55758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:18:31.029 [DEBUG] [Thread-55758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:18:31.030 [DEBUG] [Thread-55758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:18:31.033 [DEBUG] [Thread-55758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:18:31.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:18:31.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:18:31.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:18:31.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:18:31.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:18:31.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:18:31.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:18:31.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:18:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:18:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.512200 -999.00  +23.60  19.27     17   -2.40 1 1 1 1 1   888    0 27.40 72.53 ----- 19.3 19.3 304.0 24.6 30.2 -27.3 29.6 -26.6 30.1 -29.8 31.0 -25.7
2025-11-17T14:18:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:18:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:18:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.512200
2025-11-17T14:18:31.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:18:31.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:18:31.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:18:31.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:18:31.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:18:31.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:17:56', tmtdew=30.8, humidity=12.34, cloud=0.0, wind=20.54, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:17:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:18:31.059 [DEBUG] [Thread-55758] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:18:31.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:18:31.147 [DEBUG] [Thread-55761] [transport.py] [_log()] starting thread (client mode): 0xd31b2ec0
2025-11-17T14:18:31.147 [DEBUG] [Thread-55761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:18:31.162 [DEBUG] [Thread-55761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:18:31.162 [INFO] [Thread-55761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:18:31.170 [DEBUG] [Thread-55761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:18:31.170 [DEBUG] [Thread-55761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:18:31.170 [DEBUG] [Thread-55761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:18:31.170 [DEBUG] [Thread-55761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:18:31.170 [DEBUG] [Thread-55761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] client lang: <none>
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] server lang: <none>
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] kex follows: False
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:18:31.171 [DEBUG] [Thread-55761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:18:31.172 [DEBUG] [Thread-55761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:18:31.172 [DEBUG] [Thread-55761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:18:31.172 [DEBUG] [Thread-55761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:18:31.172 [DEBUG] [Thread-55761] [transport.py] [_log()] Compression: none
2025-11-17T14:18:31.172 [DEBUG] [Thread-55761] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:18:31.236 [DEBUG] [Thread-55761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:18:31.236 [DEBUG] [Thread-55761] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:18:31.237 [DEBUG] [Thread-55761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:18:31.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:18:31.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:18:31.292 [DEBUG] [Thread-55761] [transport.py] [_log()] userauth is OK
2025-11-17T14:18:31.292 [DEBUG] [Thread-55761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:18:31.292 [DEBUG] [Thread-55761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:18:31.292 [DEBUG] [Thread-55761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:18:31.293 [DEBUG] [Thread-55761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:18:31.316 [INFO] [Thread-55761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:18:31.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:18:31.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:18:32.168 [DEBUG] [Thread-55761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:18:32.168 [DEBUG] [Thread-55761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:18:32.216 [DEBUG] [Thread-55761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:18:32.216 [DEBUG] [Thread-55761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:18:32.226 [DEBUG] [Thread-55761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:18:32.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:18:32.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:18:32.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:18:32.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:18:32.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:18:32.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:18:32.263 [DEBUG] [Thread-55761] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:18:39.727 [DEBUG] [Thread-55763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:18:54.766 [DEBUG] [Thread-55764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:18:58.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:18:58.773 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:19:02.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:19:02.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:19:02.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:19:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 18, 28), 30.71, 12.36, 0.0, 15.41, 23.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:19:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:18:28
2025-11-17T14:19:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:19:03.239 [DEBUG] [Thread-55765] [transport.py] [_log()] starting thread (client mode): 0xd31b17b0
2025-11-17T14:19:03.240 [DEBUG] [Thread-55765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:19:03.260 [DEBUG] [Thread-55765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:19:03.260 [INFO] [Thread-55765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:19:03.263 [DEBUG] [Thread-55765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:19:03.263 [DEBUG] [Thread-55765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] client lang: <none>
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] server lang: <none>
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] kex follows: False
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:19:03.264 [DEBUG] [Thread-55765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:19:03.265 [DEBUG] [Thread-55765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:19:03.265 [DEBUG] [Thread-55765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:19:03.265 [DEBUG] [Thread-55765] [transport.py] [_log()] Compression: none
2025-11-17T14:19:03.265 [DEBUG] [Thread-55765] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:19:03.282 [DEBUG] [Thread-55765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:19:03.282 [DEBUG] [Thread-55765] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:19:03.282 [DEBUG] [Thread-55765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:19:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:19:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:19:03.284 [DEBUG] [Thread-55765] [transport.py] [_log()] userauth is OK
2025-11-17T14:19:03.284 [DEBUG] [Thread-55765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:19:03.284 [DEBUG] [Thread-55765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:19:03.284 [DEBUG] [Thread-55765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:19:03.284 [DEBUG] [Thread-55765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:19:03.303 [INFO] [Thread-55765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:19:03.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:19:04.089 [DEBUG] [Thread-55765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:19:04.089 [DEBUG] [Thread-55765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:19:04.089 [DEBUG] [Thread-55765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:19:04.130 [DEBUG] [Thread-55765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:19:04.130 [DEBUG] [Thread-55765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:19:04.133 [DEBUG] [Thread-55765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:19:04.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:19:04.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:19:04.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:19:04.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:19:04.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:19:04.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:19:04.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:19:04.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:19:04.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:19:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.512547 -999.00  +23.40  21.20     17   -2.50 1 1 1 1 1   888    0 28.23 77.67 ----- 21.2 21.2 306.2 27.6 30.3 -26.0 29.7 -25.7 30.3 -26.8 31.0 -24.8
2025-11-17T14:19:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:19:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:19:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.512547
2025-11-17T14:19:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:19:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:19:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:19:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:19:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:19:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:18:28', tmtdew=30.71, humidity=12.36, cloud=0.0, wind=15.41, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:18:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:19:04.157 [DEBUG] [Thread-55765] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:19:04.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:19:04.253 [DEBUG] [Thread-55768] [transport.py] [_log()] starting thread (client mode): 0xd07cdfc0
2025-11-17T14:19:04.253 [DEBUG] [Thread-55768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:19:04.268 [DEBUG] [Thread-55768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:19:04.268 [INFO] [Thread-55768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:19:04.275 [DEBUG] [Thread-55768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:19:04.275 [DEBUG] [Thread-55768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] client lang: <none>
2025-11-17T14:19:04.276 [DEBUG] [Thread-55768] [transport.py] [_log()] server lang: <none>
2025-11-17T14:19:04.277 [DEBUG] [Thread-55768] [transport.py] [_log()] kex follows: False
2025-11-17T14:19:04.277 [DEBUG] [Thread-55768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:19:04.277 [DEBUG] [Thread-55768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:19:04.277 [DEBUG] [Thread-55768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:19:04.277 [DEBUG] [Thread-55768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:19:04.277 [DEBUG] [Thread-55768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:19:04.277 [DEBUG] [Thread-55768] [transport.py] [_log()] Compression: none
2025-11-17T14:19:04.277 [DEBUG] [Thread-55768] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:19:04.334 [DEBUG] [Thread-55768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:19:04.335 [DEBUG] [Thread-55768] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:19:04.335 [DEBUG] [Thread-55768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:19:04.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:19:04.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:19:04.396 [DEBUG] [Thread-55768] [transport.py] [_log()] userauth is OK
2025-11-17T14:19:04.397 [DEBUG] [Thread-55768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:19:04.397 [DEBUG] [Thread-55768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:19:04.397 [DEBUG] [Thread-55768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:19:04.397 [DEBUG] [Thread-55768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:19:04.426 [INFO] [Thread-55768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:19:04.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:19:04.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:19:05.289 [DEBUG] [Thread-55768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:19:05.290 [DEBUG] [Thread-55768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:19:05.337 [DEBUG] [Thread-55768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:19:05.338 [DEBUG] [Thread-55768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:19:05.347 [DEBUG] [Thread-55768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:19:05.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:19:05.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:19:05.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:19:05.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:19:05.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:19:05.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:19:05.382 [DEBUG] [Thread-55768] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:19:09.799 [DEBUG] [Thread-55770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:19:15.449 [DEBUG] [Thread-55771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:19:24.841 [DEBUG] [Thread-55772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:19:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:19:35.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:19:35.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:19:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 19, 32), 30.8, 11.91, 0.0, 15.3, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:19:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:19:32
2025-11-17T14:19:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:19:36.301 [DEBUG] [Thread-55773] [transport.py] [_log()] starting thread (client mode): 0xd0723b80
2025-11-17T14:19:36.301 [DEBUG] [Thread-55773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:19:36.321 [DEBUG] [Thread-55773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:19:36.322 [INFO] [Thread-55773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] client lang: <none>
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] server lang: <none>
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] kex follows: False
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] Compression: none
2025-11-17T14:19:36.325 [DEBUG] [Thread-55773] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:19:36.344 [DEBUG] [Thread-55773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:19:36.344 [DEBUG] [Thread-55773] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:19:36.345 [DEBUG] [Thread-55773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:19:36.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:19:36.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:19:36.347 [DEBUG] [Thread-55773] [transport.py] [_log()] userauth is OK
2025-11-17T14:19:36.347 [DEBUG] [Thread-55773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:19:36.348 [DEBUG] [Thread-55773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:19:36.348 [DEBUG] [Thread-55773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:19:36.348 [DEBUG] [Thread-55773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:19:36.372 [INFO] [Thread-55773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:19:36.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:19:36.984 [DEBUG] [Thread-55773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:19:36.984 [DEBUG] [Thread-55773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:19:36.985 [DEBUG] [Thread-55773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:19:37.025 [DEBUG] [Thread-55773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:19:37.026 [DEBUG] [Thread-55773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:19:37.029 [DEBUG] [Thread-55773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:19:37.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:19:37.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:19:37.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:19:37.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:19:37.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:19:37.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:19:37.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:19:37.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:19:37.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:19:37.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.512894 -999.00  +23.40  19.22     18   -2.10 1 1 1 1 1   888    0 28.05 77.27 ----- 19.2 19.2 316.2 28.3 30.3 -27.0 29.7 -25.8 30.3 -25.1 31.0 -25.9
2025-11-17T14:19:37.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:19:37.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:19:37.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.512894
2025-11-17T14:19:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:19:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:19:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:19:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:19:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:19:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:19:32', tmtdew=30.8, humidity=11.91, cloud=0.0, wind=15.3, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:18:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:19:37.054 [DEBUG] [Thread-55773] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:19:37.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:19:37.150 [DEBUG] [Thread-55776] [transport.py] [_log()] starting thread (client mode): 0xd07bc670
2025-11-17T14:19:37.150 [DEBUG] [Thread-55776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:19:37.164 [DEBUG] [Thread-55776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:19:37.165 [INFO] [Thread-55776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] client lang: <none>
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] server lang: <none>
2025-11-17T14:19:37.172 [DEBUG] [Thread-55776] [transport.py] [_log()] kex follows: False
2025-11-17T14:19:37.173 [DEBUG] [Thread-55776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:19:37.173 [DEBUG] [Thread-55776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:19:37.173 [DEBUG] [Thread-55776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:19:37.173 [DEBUG] [Thread-55776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:19:37.173 [DEBUG] [Thread-55776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:19:37.173 [DEBUG] [Thread-55776] [transport.py] [_log()] Compression: none
2025-11-17T14:19:37.173 [DEBUG] [Thread-55776] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:19:37.238 [DEBUG] [Thread-55776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:19:37.238 [DEBUG] [Thread-55776] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:19:37.238 [DEBUG] [Thread-55776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:19:37.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:19:37.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:19:37.300 [DEBUG] [Thread-55776] [transport.py] [_log()] userauth is OK
2025-11-17T14:19:37.300 [DEBUG] [Thread-55776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:19:37.300 [DEBUG] [Thread-55776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:19:37.300 [DEBUG] [Thread-55776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:19:37.300 [DEBUG] [Thread-55776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:19:37.321 [INFO] [Thread-55776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:19:37.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:19:37.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:19:38.161 [DEBUG] [Thread-55776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:19:38.162 [DEBUG] [Thread-55776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:19:38.209 [DEBUG] [Thread-55776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:19:38.209 [DEBUG] [Thread-55776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:19:38.218 [DEBUG] [Thread-55776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:19:38.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:19:38.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:19:38.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:19:38.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:19:38.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:19:38.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:19:38.254 [DEBUG] [Thread-55776] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:19:39.869 [DEBUG] [Thread-55778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:19:54.922 [DEBUG] [Thread-55779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:19:58.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:19:58.917 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:20:08.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:20:08.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:20:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:20:08.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 20, 4), 30.63, 12.04, 0.0, 17.19, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:20:08.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:20:04
2025-11-17T14:20:09.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:20:09.231 [DEBUG] [Thread-55780] [transport.py] [_log()] starting thread (client mode): 0xd07bca90
2025-11-17T14:20:09.231 [DEBUG] [Thread-55780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:20:09.250 [DEBUG] [Thread-55780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:20:09.250 [INFO] [Thread-55780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:20:09.253 [DEBUG] [Thread-55780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:20:09.253 [DEBUG] [Thread-55780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:20:09.253 [DEBUG] [Thread-55780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:20:09.253 [DEBUG] [Thread-55780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] client lang: <none>
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] server lang: <none>
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] kex follows: False
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] Compression: none
2025-11-17T14:20:09.254 [DEBUG] [Thread-55780] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:20:09.268 [DEBUG] [Thread-55780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:20:09.268 [DEBUG] [Thread-55780] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:20:09.268 [DEBUG] [Thread-55780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:20:09.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:20:09.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:20:09.269 [DEBUG] [Thread-55780] [transport.py] [_log()] userauth is OK
2025-11-17T14:20:09.269 [DEBUG] [Thread-55780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:20:09.269 [DEBUG] [Thread-55780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:20:09.269 [DEBUG] [Thread-55780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:20:09.269 [DEBUG] [Thread-55780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:20:09.284 [INFO] [Thread-55780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:20:09.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:20:09.953 [DEBUG] [Thread-55782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:20:15.482 [DEBUG] [Thread-55783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:20:16.273 [DEBUG] [Thread-55780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:20:16.273 [DEBUG] [Thread-55780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:20:16.274 [DEBUG] [Thread-55780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:20:16.314 [DEBUG] [Thread-55780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:20:16.315 [DEBUG] [Thread-55780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:20:16.317 [DEBUG] [Thread-55780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:20:16.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:20:16.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:20:16.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:20:16.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:20:16.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:20:16.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:20:16.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:20:16.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:20:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:20:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.513589 -999.00  +23.60  20.31     17   -2.30 1 1 1 1 1   888    0 27.93 73.80 ----- 20.3 20.3 322.0 28.4 30.4 -26.7 29.8 -25.7 30.2 -24.7 31.1 -25.7
2025-11-17T14:20:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:20:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:20:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.513589
2025-11-17T14:20:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:20:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:20:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:20:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:20:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:20:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:20:04', tmtdew=30.63, humidity=12.04, cloud=0.0, wind=17.19, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:19:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:20:16.347 [DEBUG] [Thread-55780] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:20:16.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:20:16.448 [DEBUG] [Thread-55785] [transport.py] [_log()] starting thread (client mode): 0xd070e8f0
2025-11-17T14:20:16.448 [DEBUG] [Thread-55785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:20:16.464 [DEBUG] [Thread-55785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:20:16.465 [INFO] [Thread-55785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] client lang: <none>
2025-11-17T14:20:16.472 [DEBUG] [Thread-55785] [transport.py] [_log()] server lang: <none>
2025-11-17T14:20:16.473 [DEBUG] [Thread-55785] [transport.py] [_log()] kex follows: False
2025-11-17T14:20:16.473 [DEBUG] [Thread-55785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:20:16.473 [DEBUG] [Thread-55785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:20:16.473 [DEBUG] [Thread-55785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:20:16.473 [DEBUG] [Thread-55785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:20:16.473 [DEBUG] [Thread-55785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:20:16.473 [DEBUG] [Thread-55785] [transport.py] [_log()] Compression: none
2025-11-17T14:20:16.473 [DEBUG] [Thread-55785] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:20:16.533 [DEBUG] [Thread-55785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:20:16.534 [DEBUG] [Thread-55785] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:20:16.534 [DEBUG] [Thread-55785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:20:16.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:20:16.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:20:16.594 [DEBUG] [Thread-55785] [transport.py] [_log()] userauth is OK
2025-11-17T14:20:16.594 [DEBUG] [Thread-55785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:20:16.594 [DEBUG] [Thread-55785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:20:16.594 [DEBUG] [Thread-55785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:20:16.594 [DEBUG] [Thread-55785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:20:16.614 [INFO] [Thread-55785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:20:16.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:20:16.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:20:17.605 [DEBUG] [Thread-55785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:20:17.605 [DEBUG] [Thread-55785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:20:17.652 [DEBUG] [Thread-55785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:20:17.652 [DEBUG] [Thread-55785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:20:17.661 [DEBUG] [Thread-55785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:20:17.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:20:17.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:20:17.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:20:17.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:20:17.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:20:17.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:20:17.696 [DEBUG] [Thread-55785] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:20:24.987 [DEBUG] [Thread-55787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:20:40.027 [DEBUG] [Thread-55788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:20:47.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:20:47.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:20:47.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:20:48.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 20, 36), 30.4, 12.56, 0.0, 22.66, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:20:48.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:20:36
2025-11-17T14:20:48.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:20:48.657 [DEBUG] [Thread-55789] [transport.py] [_log()] starting thread (client mode): 0xd071ab00
2025-11-17T14:20:48.657 [DEBUG] [Thread-55789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:20:48.677 [DEBUG] [Thread-55789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:20:48.678 [INFO] [Thread-55789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:20:48.680 [DEBUG] [Thread-55789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:20:48.680 [DEBUG] [Thread-55789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] client lang: <none>
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] server lang: <none>
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] kex follows: False
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] Compression: none
2025-11-17T14:20:48.681 [DEBUG] [Thread-55789] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:20:48.690 [DEBUG] [Thread-55789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:20:48.690 [DEBUG] [Thread-55789] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:20:48.691 [DEBUG] [Thread-55789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:20:48.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:20:48.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:20:48.692 [DEBUG] [Thread-55789] [transport.py] [_log()] userauth is OK
2025-11-17T14:20:48.692 [DEBUG] [Thread-55789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:20:48.693 [DEBUG] [Thread-55789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:20:48.693 [DEBUG] [Thread-55789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:20:48.693 [DEBUG] [Thread-55789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:20:48.717 [INFO] [Thread-55789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:20:48.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:20:49.281 [DEBUG] [Thread-55789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:20:49.282 [DEBUG] [Thread-55789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:20:49.282 [DEBUG] [Thread-55789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:20:49.322 [DEBUG] [Thread-55789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:20:49.322 [DEBUG] [Thread-55789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:20:49.325 [DEBUG] [Thread-55789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:20:49.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:20:49.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:20:49.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:20:49.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:20:49.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:20:49.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:20:49.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:20:49.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:20:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:20:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.513936 -999.00  +23.20  15.08     17   -2.90 1 1 1 1 1   888    0 28.17 83.87 ----- 15.1 15.1 309.4 26.3 30.4 -27.6 29.9 -26.3 30.4 -25.4 31.2 -25.9
2025-11-17T14:20:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:20:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:20:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.513936
2025-11-17T14:20:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:20:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:20:49.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:20:49.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:20:49.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:20:49.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:20:36', tmtdew=30.4, humidity=12.56, cloud=0.0, wind=22.66, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:20:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:20:49.352 [DEBUG] [Thread-55789] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:20:49.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:20:49.450 [DEBUG] [Thread-55792] [transport.py] [_log()] starting thread (client mode): 0xd31ef6a0
2025-11-17T14:20:49.450 [DEBUG] [Thread-55792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:20:49.466 [DEBUG] [Thread-55792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:20:49.466 [INFO] [Thread-55792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:20:49.473 [DEBUG] [Thread-55792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:20:49.473 [DEBUG] [Thread-55792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:20:49.473 [DEBUG] [Thread-55792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:20:49.473 [DEBUG] [Thread-55792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:20:49.473 [DEBUG] [Thread-55792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:20:49.473 [DEBUG] [Thread-55792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:20:49.473 [DEBUG] [Thread-55792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] client lang: <none>
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] server lang: <none>
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] kex follows: False
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] Compression: none
2025-11-17T14:20:49.474 [DEBUG] [Thread-55792] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:20:49.531 [DEBUG] [Thread-55792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:20:49.531 [DEBUG] [Thread-55792] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:20:49.532 [DEBUG] [Thread-55792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:20:49.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:20:49.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:20:49.588 [DEBUG] [Thread-55792] [transport.py] [_log()] userauth is OK
2025-11-17T14:20:49.588 [DEBUG] [Thread-55792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:20:49.588 [DEBUG] [Thread-55792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:20:49.588 [DEBUG] [Thread-55792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:20:49.588 [DEBUG] [Thread-55792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:20:49.607 [INFO] [Thread-55792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:20:49.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:20:49.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:20:50.569 [DEBUG] [Thread-55792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:20:50.569 [DEBUG] [Thread-55792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:20:50.617 [DEBUG] [Thread-55792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:20:50.617 [DEBUG] [Thread-55792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:20:50.626 [DEBUG] [Thread-55792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:20:50.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:20:50.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:20:50.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:20:50.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:20:50.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:20:50.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:20:50.659 [DEBUG] [Thread-55792] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:20:55.057 [DEBUG] [Thread-55794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:20:59.058 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:20:59.060 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:21:10.096 [DEBUG] [Thread-55795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:21:15.521 [DEBUG] [Thread-55796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:21:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:21:20.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:21:20.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:21:21.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 21, 8), 30.55, 12.41, 0.0, 18.76, 22.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:21:21.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:21:08
2025-11-17T14:21:21.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:21:21.645 [DEBUG] [Thread-55797] [transport.py] [_log()] starting thread (client mode): 0xd07bd990
2025-11-17T14:21:21.645 [DEBUG] [Thread-55797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:21:21.660 [DEBUG] [Thread-55797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:21:21.660 [INFO] [Thread-55797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:21:21.663 [DEBUG] [Thread-55797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:21:21.663 [DEBUG] [Thread-55797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:21:21.663 [DEBUG] [Thread-55797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:21:21.663 [DEBUG] [Thread-55797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:21:21.663 [DEBUG] [Thread-55797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] client lang: <none>
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] server lang: <none>
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] kex follows: False
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] Compression: none
2025-11-17T14:21:21.664 [DEBUG] [Thread-55797] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:21:21.671 [DEBUG] [Thread-55797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:21:21.671 [DEBUG] [Thread-55797] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:21:21.672 [DEBUG] [Thread-55797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:21:21.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:21:21.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:21:21.672 [DEBUG] [Thread-55797] [transport.py] [_log()] userauth is OK
2025-11-17T14:21:21.672 [DEBUG] [Thread-55797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:21:21.672 [DEBUG] [Thread-55797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:21:21.672 [DEBUG] [Thread-55797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:21:21.672 [DEBUG] [Thread-55797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:21:21.681 [INFO] [Thread-55797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:21:21.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:21:22.263 [DEBUG] [Thread-55797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:21:22.263 [DEBUG] [Thread-55797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:21:22.263 [DEBUG] [Thread-55797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:21:22.304 [DEBUG] [Thread-55797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:21:22.304 [DEBUG] [Thread-55797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:21:22.306 [DEBUG] [Thread-55797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:21:22.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:21:22.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:21:22.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:21:22.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:21:22.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:21:22.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:21:22.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:21:22.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:21:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:21:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.514283 -999.00  +23.20  24.21     17   -2.80 1 1 1 1 1   888    0 28.18 81.64 ----- 24.2 24.2 336.8 28.1 30.4 -27.0 29.8 -25.5 30.6 -25.3 31.2 -25.5
2025-11-17T14:21:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:21:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:21:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.514283
2025-11-17T14:21:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:21:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:21:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:21:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:21:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:21:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:21:08', tmtdew=30.55, humidity=12.41, cloud=0.0, wind=18.76, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:20:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:21:22.326 [DEBUG] [Thread-55797] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:21:22.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:21:22.411 [DEBUG] [Thread-55800] [transport.py] [_log()] starting thread (client mode): 0xd070ee00
2025-11-17T14:21:22.411 [DEBUG] [Thread-55800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:21:22.429 [DEBUG] [Thread-55800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:21:22.429 [INFO] [Thread-55800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:21:22.436 [DEBUG] [Thread-55800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] client lang: <none>
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] server lang: <none>
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] kex follows: False
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] Compression: none
2025-11-17T14:21:22.437 [DEBUG] [Thread-55800] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:21:22.495 [DEBUG] [Thread-55800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:21:22.495 [DEBUG] [Thread-55800] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:21:22.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:21:22.495 [DEBUG] [Thread-55800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:21:22.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:21:22.552 [DEBUG] [Thread-55800] [transport.py] [_log()] userauth is OK
2025-11-17T14:21:22.552 [DEBUG] [Thread-55800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:21:22.552 [DEBUG] [Thread-55800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:21:22.552 [DEBUG] [Thread-55800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:21:22.552 [DEBUG] [Thread-55800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:21:22.570 [INFO] [Thread-55800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:21:22.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:21:22.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:21:23.434 [DEBUG] [Thread-55800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:21:23.434 [DEBUG] [Thread-55800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:21:23.482 [DEBUG] [Thread-55800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:21:23.482 [DEBUG] [Thread-55800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:21:23.490 [DEBUG] [Thread-55800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:21:23.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:21:23.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:21:23.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:21:23.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:21:23.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:21:23.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:21:23.530 [DEBUG] [Thread-55800] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:21:25.122 [DEBUG] [Thread-55802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:21:40.168 [DEBUG] [Thread-55803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:21:53.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:21:53.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:21:53.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:21:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 21, 40), 30.61, 12.41, 0.0, 22.13, 22.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:21:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:21:40
2025-11-17T14:21:54.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:21:54.488 [DEBUG] [Thread-55804] [transport.py] [_log()] starting thread (client mode): 0xd31b22c0
2025-11-17T14:21:54.489 [DEBUG] [Thread-55804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:21:54.505 [DEBUG] [Thread-55804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:21:54.505 [INFO] [Thread-55804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] client lang: <none>
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] server lang: <none>
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] kex follows: False
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] Compression: none
2025-11-17T14:21:54.508 [DEBUG] [Thread-55804] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:21:54.523 [DEBUG] [Thread-55804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:21:54.523 [DEBUG] [Thread-55804] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:21:54.524 [DEBUG] [Thread-55804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:21:54.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:21:54.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:21:54.525 [DEBUG] [Thread-55804] [transport.py] [_log()] userauth is OK
2025-11-17T14:21:54.525 [DEBUG] [Thread-55804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:21:54.525 [DEBUG] [Thread-55804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:21:54.525 [DEBUG] [Thread-55804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:21:54.526 [DEBUG] [Thread-55804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:21:54.545 [INFO] [Thread-55804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:21:54.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:21:55.141 [DEBUG] [Thread-55804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:21:55.141 [DEBUG] [Thread-55804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:21:55.142 [DEBUG] [Thread-55804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:21:55.183 [DEBUG] [Thread-55804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:21:55.183 [DEBUG] [Thread-55804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:21:55.186 [DEBUG] [Thread-55804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:21:55.198 [DEBUG] [Thread-55806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:21:55.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:21:55.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:21:55.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:21:55.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:21:55.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:21:55.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:21:55.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:21:55.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:21:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:21:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.514630 -999.00  +22.70  19.58     17   -3.10 1 1 1 1 1   888    0 28.65 86.24 ----- 19.6 19.6 337.8 29.4 30.4 -28.3 29.7 -27.6 30.4 -25.4 31.2 -26.1
2025-11-17T14:21:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:21:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:21:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.514630
2025-11-17T14:21:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:21:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:21:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:21:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:21:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:21:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:21:40', tmtdew=30.61, humidity=12.41, cloud=0.0, wind=22.13, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:21:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:21:55.212 [DEBUG] [Thread-55804] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:21:55.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:21:55.321 [DEBUG] [Thread-55808] [transport.py] [_log()] starting thread (client mode): 0xd07cc580
2025-11-17T14:21:55.321 [DEBUG] [Thread-55808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:21:55.336 [DEBUG] [Thread-55808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:21:55.336 [INFO] [Thread-55808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] client lang: <none>
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] server lang: <none>
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] kex follows: False
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:21:55.344 [DEBUG] [Thread-55808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:21:55.345 [DEBUG] [Thread-55808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:21:55.345 [DEBUG] [Thread-55808] [transport.py] [_log()] Compression: none
2025-11-17T14:21:55.345 [DEBUG] [Thread-55808] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:21:55.403 [DEBUG] [Thread-55808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:21:55.404 [DEBUG] [Thread-55808] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:21:55.404 [DEBUG] [Thread-55808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:21:55.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:21:55.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:21:55.460 [DEBUG] [Thread-55808] [transport.py] [_log()] userauth is OK
2025-11-17T14:21:55.460 [DEBUG] [Thread-55808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:21:55.460 [DEBUG] [Thread-55808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:21:55.460 [DEBUG] [Thread-55808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:21:55.460 [DEBUG] [Thread-55808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:21:55.479 [INFO] [Thread-55808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:21:55.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:21:55.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:21:56.340 [DEBUG] [Thread-55808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:21:56.340 [DEBUG] [Thread-55808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:21:56.389 [DEBUG] [Thread-55808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:21:56.389 [DEBUG] [Thread-55808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:21:56.398 [DEBUG] [Thread-55808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:21:56.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:21:56.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:21:56.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:21:56.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:21:56.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:21:56.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:21:56.432 [DEBUG] [Thread-55808] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:21:59.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:21:59.204 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:22:10.228 [DEBUG] [Thread-55810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:22:15.565 [DEBUG] [Thread-55811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:22:25.280 [DEBUG] [Thread-55812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:22:26.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:22:26.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:22:26.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:22:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 22, 12), 30.54, 12.47, 0.0, 18.93, 22.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:22:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:22:12
2025-11-17T14:22:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:22:27.381 [DEBUG] [Thread-55813] [transport.py] [_log()] starting thread (client mode): 0xd078dd20
2025-11-17T14:22:27.381 [DEBUG] [Thread-55813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:22:27.401 [DEBUG] [Thread-55813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:22:27.401 [INFO] [Thread-55813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:22:27.404 [DEBUG] [Thread-55813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:22:27.404 [DEBUG] [Thread-55813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:22:27.404 [DEBUG] [Thread-55813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] client lang: <none>
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] server lang: <none>
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] kex follows: False
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] Compression: none
2025-11-17T14:22:27.405 [DEBUG] [Thread-55813] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:22:27.422 [DEBUG] [Thread-55813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:22:27.422 [DEBUG] [Thread-55813] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:22:27.423 [DEBUG] [Thread-55813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:22:27.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:22:27.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:22:27.425 [DEBUG] [Thread-55813] [transport.py] [_log()] userauth is OK
2025-11-17T14:22:27.425 [DEBUG] [Thread-55813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:22:27.425 [DEBUG] [Thread-55813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:22:27.425 [DEBUG] [Thread-55813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:22:27.425 [DEBUG] [Thread-55813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:22:27.449 [INFO] [Thread-55813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:22:27.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:22:28.143 [DEBUG] [Thread-55813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:22:28.143 [DEBUG] [Thread-55813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:22:28.144 [DEBUG] [Thread-55813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:22:28.185 [DEBUG] [Thread-55813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:22:28.185 [DEBUG] [Thread-55813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:22:28.188 [DEBUG] [Thread-55813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:22:28.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:22:28.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:22:28.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:22:28.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:22:28.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:22:28.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:22:28.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:22:28.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:22:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:22:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.514978 -999.00  +22.70  20.05     18   -2.80 1 1 1 1 1   888    0 27.42 70.12 ----- 20.1 20.1 314.2 22.2 30.4 -27.6 29.6 -27.5 30.5 -24.7 31.1 -26.4
2025-11-17T14:22:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:22:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:22:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.514978
2025-11-17T14:22:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:22:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:22:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:22:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:22:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:22:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:22:12', tmtdew=30.54, humidity=12.47, cloud=0.0, wind=18.93, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:21:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:22:28.216 [DEBUG] [Thread-55813] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:22:28.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:22:28.300 [DEBUG] [Thread-55816] [transport.py] [_log()] starting thread (client mode): 0xd0719090
2025-11-17T14:22:28.300 [DEBUG] [Thread-55816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:22:28.316 [DEBUG] [Thread-55816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:22:28.316 [INFO] [Thread-55816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:22:28.323 [DEBUG] [Thread-55816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] client lang: <none>
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] server lang: <none>
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] kex follows: False
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] Compression: none
2025-11-17T14:22:28.324 [DEBUG] [Thread-55816] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:22:28.380 [DEBUG] [Thread-55816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:22:28.381 [DEBUG] [Thread-55816] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:22:28.381 [DEBUG] [Thread-55816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:22:28.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:22:28.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:22:28.436 [DEBUG] [Thread-55816] [transport.py] [_log()] userauth is OK
2025-11-17T14:22:28.436 [DEBUG] [Thread-55816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:22:28.436 [DEBUG] [Thread-55816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:22:28.436 [DEBUG] [Thread-55816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:22:28.436 [DEBUG] [Thread-55816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:22:28.457 [INFO] [Thread-55816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:22:28.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:22:28.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:22:29.310 [DEBUG] [Thread-55816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:22:29.311 [DEBUG] [Thread-55816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:22:29.358 [DEBUG] [Thread-55816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:22:29.358 [DEBUG] [Thread-55816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:22:29.367 [DEBUG] [Thread-55816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:22:29.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:22:29.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')
2025-11-17T14:22:29.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:22:29.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:22:29.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:22:29.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:22:29.400 [DEBUG] [Thread-55816] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:22:40.309 [DEBUG] [Thread-55818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:22:55.339 [DEBUG] [Thread-55819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:22:59.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:22:59.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:22:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:22:59.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:22:59.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:23:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 22, 44), 31.41, 11.58, 0.0, 16.55, 23.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:23:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:22:44
2025-11-17T14:23:00.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:23:00.338 [DEBUG] [Thread-55820] [transport.py] [_log()] starting thread (client mode): 0xd07ce920
2025-11-17T14:23:00.339 [DEBUG] [Thread-55820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:23:00.357 [DEBUG] [Thread-55820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:23:00.357 [INFO] [Thread-55820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:23:00.360 [DEBUG] [Thread-55820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:23:00.360 [DEBUG] [Thread-55820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:23:00.360 [DEBUG] [Thread-55820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:23:00.360 [DEBUG] [Thread-55820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] client lang: <none>
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] server lang: <none>
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] kex follows: False
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] Compression: none
2025-11-17T14:23:00.361 [DEBUG] [Thread-55820] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:23:00.381 [DEBUG] [Thread-55820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:23:00.381 [DEBUG] [Thread-55820] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:23:00.382 [DEBUG] [Thread-55820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:23:00.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:23:00.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:23:00.383 [DEBUG] [Thread-55820] [transport.py] [_log()] userauth is OK
2025-11-17T14:23:00.384 [DEBUG] [Thread-55820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:23:00.384 [DEBUG] [Thread-55820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:23:00.384 [DEBUG] [Thread-55820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:23:00.384 [DEBUG] [Thread-55820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:23:00.407 [INFO] [Thread-55820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:23:00.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:23:01.018 [DEBUG] [Thread-55820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:23:01.018 [DEBUG] [Thread-55820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:23:01.019 [DEBUG] [Thread-55820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:23:01.059 [DEBUG] [Thread-55820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:23:01.059 [DEBUG] [Thread-55820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:23:01.062 [DEBUG] [Thread-55820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:23:01.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:23:01.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:23:01.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:23:01.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:23:01.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:23:01.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:23:01.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:23:01.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:23:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:23:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.515325 -999.00  +22.80  25.10     17   -3.30 1 1 1 1 1   888    0 28.09 72.66 ----- 25.1 25.1 307.2 33.9 30.4 -27.9 29.7 -27.1 30.4 -25.0 31.2 -26.9
2025-11-17T14:23:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:23:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:23:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.515325
2025-11-17T14:23:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:23:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:23:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:23:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:23:01.080 [DEBUG] [Thread-55820] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:23:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:23:01.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:22:44', tmtdew=31.41, humidity=11.58, cloud=0.0, wind=16.55, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:22:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:23:01.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:23:01.185 [DEBUG] [Thread-55823] [transport.py] [_log()] starting thread (client mode): 0xd31ec7c0
2025-11-17T14:23:01.185 [DEBUG] [Thread-55823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:23:01.203 [DEBUG] [Thread-55823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:23:01.203 [INFO] [Thread-55823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] client lang: <none>
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] server lang: <none>
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] kex follows: False
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] Compression: none
2025-11-17T14:23:01.214 [DEBUG] [Thread-55823] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:23:01.268 [DEBUG] [Thread-55823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:23:01.269 [DEBUG] [Thread-55823] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:23:01.270 [DEBUG] [Thread-55823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:23:01.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:23:01.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:23:01.331 [DEBUG] [Thread-55823] [transport.py] [_log()] userauth is OK
2025-11-17T14:23:01.332 [DEBUG] [Thread-55823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:23:01.332 [DEBUG] [Thread-55823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:23:01.332 [DEBUG] [Thread-55823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:23:01.332 [DEBUG] [Thread-55823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:23:01.351 [INFO] [Thread-55823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:23:01.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:23:01.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:23:02.272 [DEBUG] [Thread-55823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:23:02.273 [DEBUG] [Thread-55823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:23:02.321 [DEBUG] [Thread-55823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:23:02.322 [DEBUG] [Thread-55823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:23:02.330 [DEBUG] [Thread-55823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:23:02.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:23:02.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:23:02.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:23:02.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:23:02.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:23:02.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:23:02.362 [DEBUG] [Thread-55823] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:23:10.375 [DEBUG] [Thread-55825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:23:15.613 [DEBUG] [Thread-55826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:23:25.412 [DEBUG] [Thread-55827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:23:32.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:23:32.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:23:32.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:23:33.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 23, 16), 31.4, 11.56, 0.0, 16.15, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:23:33.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:23:16
2025-11-17T14:23:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:23:33.310 [DEBUG] [Thread-55828] [transport.py] [_log()] starting thread (client mode): 0xd07cd720
2025-11-17T14:23:33.310 [DEBUG] [Thread-55828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:23:33.330 [DEBUG] [Thread-55828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:23:33.330 [INFO] [Thread-55828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:23:33.333 [DEBUG] [Thread-55828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] client lang: <none>
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] server lang: <none>
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] kex follows: False
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] Compression: none
2025-11-17T14:23:33.334 [DEBUG] [Thread-55828] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:23:33.350 [DEBUG] [Thread-55828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:23:33.350 [DEBUG] [Thread-55828] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:23:33.351 [DEBUG] [Thread-55828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:23:33.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:23:33.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:23:33.353 [DEBUG] [Thread-55828] [transport.py] [_log()] userauth is OK
2025-11-17T14:23:33.353 [DEBUG] [Thread-55828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:23:33.354 [DEBUG] [Thread-55828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:23:33.354 [DEBUG] [Thread-55828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:23:33.354 [DEBUG] [Thread-55828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:23:33.372 [INFO] [Thread-55828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:23:33.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:23:34.096 [DEBUG] [Thread-55828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:23:34.096 [DEBUG] [Thread-55828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:23:34.097 [DEBUG] [Thread-55828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:23:34.137 [DEBUG] [Thread-55828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:23:34.137 [DEBUG] [Thread-55828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:23:34.140 [DEBUG] [Thread-55828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:23:34.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:23:34.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:23:34.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:23:34.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:23:34.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:23:34.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:23:34.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:23:34.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.515672 -999.00  +23.10  20.04     17   -3.20 1 1 1 1 1   888    0 27.62 70.80 ----- 20.0 20.0 307.6 27.4 30.3 -26.8 29.7 -26.2 30.4 -26.4 31.1 -25.8
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.515672
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:23:16', tmtdew=31.4, humidity=11.56, cloud=0.0, wind=16.15, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:22:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:23:34.162 [DEBUG] [Thread-55828] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:23:34.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:23:34.255 [DEBUG] [Thread-55831] [transport.py] [_log()] starting thread (client mode): 0xd31cca30
2025-11-17T14:23:34.255 [DEBUG] [Thread-55831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:23:34.274 [DEBUG] [Thread-55831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:23:34.275 [INFO] [Thread-55831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:23:34.282 [DEBUG] [Thread-55831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] client lang: <none>
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] server lang: <none>
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] kex follows: False
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] Compression: none
2025-11-17T14:23:34.283 [DEBUG] [Thread-55831] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:23:34.339 [DEBUG] [Thread-55831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:23:34.340 [DEBUG] [Thread-55831] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:23:34.340 [DEBUG] [Thread-55831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:23:34.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:23:34.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:23:34.396 [DEBUG] [Thread-55831] [transport.py] [_log()] userauth is OK
2025-11-17T14:23:34.396 [DEBUG] [Thread-55831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:23:34.396 [DEBUG] [Thread-55831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:23:34.396 [DEBUG] [Thread-55831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:23:34.396 [DEBUG] [Thread-55831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:23:34.414 [INFO] [Thread-55831] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:23:34.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:23:34.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:23:35.306 [DEBUG] [Thread-55831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:23:35.306 [DEBUG] [Thread-55831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:23:35.354 [DEBUG] [Thread-55831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:23:35.354 [DEBUG] [Thread-55831] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:23:35.363 [DEBUG] [Thread-55831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:23:35.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:23:35.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:23:35.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:23:35.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:23:35.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:23:35.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:23:35.397 [DEBUG] [Thread-55831] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:23:40.445 [DEBUG] [Thread-55833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:23:55.484 [DEBUG] [Thread-55834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:23:59.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:23:59.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:24:05.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:24:05.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:24:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:24:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 23, 48), 31.55, 11.59, 0.0, 20.35, 23.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:24:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:23:48
2025-11-17T14:24:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:24:06.345 [DEBUG] [Thread-55835] [transport.py] [_log()] starting thread (client mode): 0xd07cf610
2025-11-17T14:24:06.345 [DEBUG] [Thread-55835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:24:06.365 [DEBUG] [Thread-55835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:24:06.365 [INFO] [Thread-55835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:24:06.368 [DEBUG] [Thread-55835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] client lang: <none>
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] server lang: <none>
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] kex follows: False
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] Compression: none
2025-11-17T14:24:06.369 [DEBUG] [Thread-55835] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:24:06.386 [DEBUG] [Thread-55835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:24:06.387 [DEBUG] [Thread-55835] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:24:06.387 [DEBUG] [Thread-55835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:24:06.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:24:06.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:24:06.389 [DEBUG] [Thread-55835] [transport.py] [_log()] userauth is OK
2025-11-17T14:24:06.390 [DEBUG] [Thread-55835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:24:06.390 [DEBUG] [Thread-55835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:24:06.390 [DEBUG] [Thread-55835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:24:06.390 [DEBUG] [Thread-55835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:24:06.426 [INFO] [Thread-55835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:24:06.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:24:07.045 [DEBUG] [Thread-55835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:24:07.045 [DEBUG] [Thread-55835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:24:07.046 [DEBUG] [Thread-55835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:24:07.087 [DEBUG] [Thread-55835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:24:07.087 [DEBUG] [Thread-55835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:24:07.089 [DEBUG] [Thread-55835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:24:07.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:24:07.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:24:07.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:24:07.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:24:07.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:24:07.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:24:07.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:24:07.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:24:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:24:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.516019 -999.00  +23.20  21.60     17   -3.10 1 1 1 1 1   888    0 28.19 71.23 ----- 21.6 21.6 291.4 31.5 30.4 -26.5 29.7 -25.4 30.4 -25.4 31.2 -25.3
2025-11-17T14:24:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:24:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:24:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.516019
2025-11-17T14:24:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:24:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:24:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:24:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:24:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:24:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:23:48', tmtdew=31.55, humidity=11.59, cloud=0.0, wind=20.35, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:23:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:24:07.115 [DEBUG] [Thread-55835] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:24:07.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:24:07.210 [DEBUG] [Thread-55838] [transport.py] [_log()] starting thread (client mode): 0xd07ce320
2025-11-17T14:24:07.210 [DEBUG] [Thread-55838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:24:07.228 [DEBUG] [Thread-55838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:24:07.229 [INFO] [Thread-55838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:24:07.236 [DEBUG] [Thread-55838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] client lang: <none>
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] server lang: <none>
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] kex follows: False
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] Compression: none
2025-11-17T14:24:07.237 [DEBUG] [Thread-55838] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:24:07.295 [DEBUG] [Thread-55838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:24:07.296 [DEBUG] [Thread-55838] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:24:07.296 [DEBUG] [Thread-55838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:24:07.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:24:07.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:24:07.352 [DEBUG] [Thread-55838] [transport.py] [_log()] userauth is OK
2025-11-17T14:24:07.352 [DEBUG] [Thread-55838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:24:07.352 [DEBUG] [Thread-55838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:24:07.352 [DEBUG] [Thread-55838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:24:07.352 [DEBUG] [Thread-55838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:24:07.372 [INFO] [Thread-55838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:24:07.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:24:07.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:24:08.348 [DEBUG] [Thread-55838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:24:08.348 [DEBUG] [Thread-55838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:24:08.396 [DEBUG] [Thread-55838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:24:08.396 [DEBUG] [Thread-55838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:24:08.405 [DEBUG] [Thread-55838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:24:08.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:24:08.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:24:08.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:24:08.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:24:08.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:24:08.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:24:08.440 [DEBUG] [Thread-55838] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:24:10.514 [DEBUG] [Thread-55840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:24:15.647 [DEBUG] [Thread-55841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:24:25.557 [DEBUG] [Thread-55842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:24:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:24:38.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:24:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:24:39.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 24, 20), 31.87, 11.38, 0.0, 23.86, 23.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:24:39.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:24:20
2025-11-17T14:24:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:24:39.396 [DEBUG] [Thread-55843] [transport.py] [_log()] starting thread (client mode): 0xd3135120
2025-11-17T14:24:39.396 [DEBUG] [Thread-55843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:24:39.410 [DEBUG] [Thread-55843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:24:39.410 [INFO] [Thread-55843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] client lang: <none>
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] server lang: <none>
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] kex follows: False
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:24:39.413 [DEBUG] [Thread-55843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:24:39.414 [DEBUG] [Thread-55843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:24:39.414 [DEBUG] [Thread-55843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:24:39.414 [DEBUG] [Thread-55843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:24:39.414 [DEBUG] [Thread-55843] [transport.py] [_log()] Compression: none
2025-11-17T14:24:39.414 [DEBUG] [Thread-55843] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:24:39.429 [DEBUG] [Thread-55843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:24:39.430 [DEBUG] [Thread-55843] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:24:39.430 [DEBUG] [Thread-55843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:24:39.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:24:39.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:24:39.430 [DEBUG] [Thread-55843] [transport.py] [_log()] userauth is OK
2025-11-17T14:24:39.430 [DEBUG] [Thread-55843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:24:39.430 [DEBUG] [Thread-55843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:24:39.430 [DEBUG] [Thread-55843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:24:39.430 [DEBUG] [Thread-55843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:24:39.439 [INFO] [Thread-55843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:24:39.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:24:40.076 [DEBUG] [Thread-55843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:24:40.076 [DEBUG] [Thread-55843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:24:40.077 [DEBUG] [Thread-55843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:24:40.117 [DEBUG] [Thread-55843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:24:40.117 [DEBUG] [Thread-55843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:24:40.120 [DEBUG] [Thread-55843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:24:40.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:24:40.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:24:40.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:24:40.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:24:40.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:24:40.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:24:40.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:24:40.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:24:40.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:24:40.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.516367 -999.00  +23.00  26.35     17   -3.20 1 1 1 1 1   888    0 27.72 68.54 ----- 26.4 26.4 313.4 28.9 30.4 -26.6 29.8 -26.0 30.5 -24.5 31.2 -25.4
2025-11-17T14:24:40.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:24:40.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:24:40.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.516367
2025-11-17T14:24:40.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:24:40.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:24:40.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:24:40.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:24:40.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:24:40.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:24:20', tmtdew=31.87, humidity=11.38, cloud=0.0, wind=23.86, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:23:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:24:40.144 [DEBUG] [Thread-55843] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:24:40.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:24:40.240 [DEBUG] [Thread-55846] [transport.py] [_log()] starting thread (client mode): 0xd07cc760
2025-11-17T14:24:40.240 [DEBUG] [Thread-55846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:24:40.255 [DEBUG] [Thread-55846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:24:40.255 [INFO] [Thread-55846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:24:40.263 [DEBUG] [Thread-55846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:24:40.263 [DEBUG] [Thread-55846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:24:40.263 [DEBUG] [Thread-55846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] client lang: <none>
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] server lang: <none>
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] kex follows: False
2025-11-17T14:24:40.264 [DEBUG] [Thread-55846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:24:40.265 [DEBUG] [Thread-55846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:24:40.265 [DEBUG] [Thread-55846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:24:40.265 [DEBUG] [Thread-55846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:24:40.265 [DEBUG] [Thread-55846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:24:40.265 [DEBUG] [Thread-55846] [transport.py] [_log()] Compression: none
2025-11-17T14:24:40.265 [DEBUG] [Thread-55846] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:24:40.320 [DEBUG] [Thread-55846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:24:40.320 [DEBUG] [Thread-55846] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:24:40.321 [DEBUG] [Thread-55846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:24:40.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:24:40.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:24:40.376 [DEBUG] [Thread-55846] [transport.py] [_log()] userauth is OK
2025-11-17T14:24:40.376 [DEBUG] [Thread-55846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:24:40.376 [DEBUG] [Thread-55846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:24:40.376 [DEBUG] [Thread-55846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:24:40.376 [DEBUG] [Thread-55846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:24:40.396 [INFO] [Thread-55846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:24:40.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:24:40.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:24:40.588 [DEBUG] [Thread-55848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:24:41.280 [DEBUG] [Thread-55846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:24:41.280 [DEBUG] [Thread-55846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:24:41.329 [DEBUG] [Thread-55846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:24:41.329 [DEBUG] [Thread-55846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:24:41.338 [DEBUG] [Thread-55846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:24:41.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:24:41.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:24:41.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:24:41.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:24:41.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:24:41.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:24:41.373 [DEBUG] [Thread-55846] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:24:55.632 [DEBUG] [Thread-55849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:24:59.628 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:24:59.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:25:10.664 [DEBUG] [Thread-55850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:25:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:25:11.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:25:11.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:25:12.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 24, 52), 31.93, 11.4, 0.0, 21.68, 23.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:25:12.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:24:52
2025-11-17T14:25:12.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:25:12.323 [DEBUG] [Thread-55851] [transport.py] [_log()] starting thread (client mode): 0xd07be230
2025-11-17T14:25:12.323 [DEBUG] [Thread-55851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:25:12.345 [DEBUG] [Thread-55851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:25:12.346 [INFO] [Thread-55851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:25:12.349 [DEBUG] [Thread-55851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] client lang: <none>
2025-11-17T14:25:12.350 [DEBUG] [Thread-55851] [transport.py] [_log()] server lang: <none>
2025-11-17T14:25:12.351 [DEBUG] [Thread-55851] [transport.py] [_log()] kex follows: False
2025-11-17T14:25:12.351 [DEBUG] [Thread-55851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:25:12.351 [DEBUG] [Thread-55851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:25:12.351 [DEBUG] [Thread-55851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:25:12.351 [DEBUG] [Thread-55851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:25:12.351 [DEBUG] [Thread-55851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:25:12.351 [DEBUG] [Thread-55851] [transport.py] [_log()] Compression: none
2025-11-17T14:25:12.351 [DEBUG] [Thread-55851] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:25:12.369 [DEBUG] [Thread-55851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:25:12.370 [DEBUG] [Thread-55851] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:25:12.371 [DEBUG] [Thread-55851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:25:12.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:25:12.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:25:12.373 [DEBUG] [Thread-55851] [transport.py] [_log()] userauth is OK
2025-11-17T14:25:12.373 [DEBUG] [Thread-55851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:25:12.373 [DEBUG] [Thread-55851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:25:12.373 [DEBUG] [Thread-55851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:25:12.373 [DEBUG] [Thread-55851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:25:12.399 [INFO] [Thread-55851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:25:12.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:25:13.103 [DEBUG] [Thread-55851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:25:13.103 [DEBUG] [Thread-55851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:25:13.103 [DEBUG] [Thread-55851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:25:13.144 [DEBUG] [Thread-55851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:25:13.144 [DEBUG] [Thread-55851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:25:13.147 [DEBUG] [Thread-55851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:25:13.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:25:13.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:25:13.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:25:13.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:25:13.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:25:13.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:25:13.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.517061 -999.00  +23.50  17.36     16   -3.00 1 1 1 1 1   888    0 27.09 65.99 ----- 17.4 17.4 295.0 26.8 30.4 -26.9 29.9 -25.9 30.5 -25.9 31.3 -26.1
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.517061
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:25:13.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:24:52', tmtdew=31.93, humidity=11.4, cloud=0.0, wind=21.68, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:24:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:25:13.166 [DEBUG] [Thread-55851] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:25:13.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:25:13.252 [DEBUG] [Thread-55854] [transport.py] [_log()] starting thread (client mode): 0xd07cd900
2025-11-17T14:25:13.252 [DEBUG] [Thread-55854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:25:13.267 [DEBUG] [Thread-55854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:25:13.267 [INFO] [Thread-55854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] client lang: <none>
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] server lang: <none>
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] kex follows: False
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] Compression: none
2025-11-17T14:25:13.275 [DEBUG] [Thread-55854] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:25:13.330 [DEBUG] [Thread-55854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:25:13.330 [DEBUG] [Thread-55854] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:25:13.330 [DEBUG] [Thread-55854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:25:13.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:25:13.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:25:13.387 [DEBUG] [Thread-55854] [transport.py] [_log()] userauth is OK
2025-11-17T14:25:13.388 [DEBUG] [Thread-55854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:25:13.388 [DEBUG] [Thread-55854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:25:13.388 [DEBUG] [Thread-55854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:25:13.388 [DEBUG] [Thread-55854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:25:13.403 [INFO] [Thread-55854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:25:13.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:25:13.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:25:14.285 [DEBUG] [Thread-55854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:25:14.285 [DEBUG] [Thread-55854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:25:14.333 [DEBUG] [Thread-55854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:25:14.333 [DEBUG] [Thread-55854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:25:14.341 [DEBUG] [Thread-55854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:25:14.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:25:14.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:25:14.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:25:14.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:25:14.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:25:14.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:25:14.375 [DEBUG] [Thread-55854] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:25:15.676 [DEBUG] [Thread-55856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:25:25.693 [DEBUG] [Thread-55857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:25:40.732 [DEBUG] [Thread-55858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:25:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:25:44.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:25:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:25:45.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 25, 24), 31.66, 11.58, 0.0, 23.85, 23.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:25:45.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:25:24
2025-11-17T14:25:45.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:25:45.304 [DEBUG] [Thread-55859] [transport.py] [_log()] starting thread (client mode): 0xd31ed3c0
2025-11-17T14:25:45.304 [DEBUG] [Thread-55859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:25:45.318 [DEBUG] [Thread-55859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:25:45.318 [INFO] [Thread-55859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] client lang: <none>
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] server lang: <none>
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] kex follows: False
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] Compression: none
2025-11-17T14:25:45.320 [DEBUG] [Thread-55859] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:25:45.337 [DEBUG] [Thread-55859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:25:45.337 [DEBUG] [Thread-55859] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:25:45.338 [DEBUG] [Thread-55859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:25:45.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:25:45.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:25:45.340 [DEBUG] [Thread-55859] [transport.py] [_log()] userauth is OK
2025-11-17T14:25:45.340 [DEBUG] [Thread-55859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:25:45.340 [DEBUG] [Thread-55859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:25:45.340 [DEBUG] [Thread-55859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:25:45.340 [DEBUG] [Thread-55859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:25:45.358 [INFO] [Thread-55859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:25:45.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:25:45.971 [DEBUG] [Thread-55859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:25:45.971 [DEBUG] [Thread-55859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:25:45.972 [DEBUG] [Thread-55859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:25:46.012 [DEBUG] [Thread-55859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:25:46.012 [DEBUG] [Thread-55859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:25:46.015 [DEBUG] [Thread-55859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:25:46.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:25:46.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:25:46.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:25:46.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:25:46.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:25:46.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:25:46.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:25:46.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:25:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:25:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.517408 -999.00  +24.00  15.00     16   -2.80 1 1 1 1 1   888    0 27.76 67.25 ----- 15.0 15.0 321.4 18.1 30.6 -27.0 30.0 -26.3 30.7 -24.3 31.4 -25.5
2025-11-17T14:25:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:25:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:25:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.517408
2025-11-17T14:25:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:25:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:25:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:25:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:25:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:25:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:25:24', tmtdew=31.66, humidity=11.58, cloud=0.0, wind=23.85, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:25:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:25:46.035 [DEBUG] [Thread-55859] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:25:46.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:25:46.132 [DEBUG] [Thread-55862] [transport.py] [_log()] starting thread (client mode): 0xd31ccac0
2025-11-17T14:25:46.132 [DEBUG] [Thread-55862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:25:46.147 [DEBUG] [Thread-55862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:25:46.147 [INFO] [Thread-55862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:25:46.154 [DEBUG] [Thread-55862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] client lang: <none>
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] server lang: <none>
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] kex follows: False
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:25:46.155 [DEBUG] [Thread-55862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:25:46.156 [DEBUG] [Thread-55862] [transport.py] [_log()] Compression: none
2025-11-17T14:25:46.156 [DEBUG] [Thread-55862] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:25:46.212 [DEBUG] [Thread-55862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:25:46.212 [DEBUG] [Thread-55862] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:25:46.213 [DEBUG] [Thread-55862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:25:46.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:25:46.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:25:46.268 [DEBUG] [Thread-55862] [transport.py] [_log()] userauth is OK
2025-11-17T14:25:46.268 [DEBUG] [Thread-55862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:25:46.268 [DEBUG] [Thread-55862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:25:46.268 [DEBUG] [Thread-55862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:25:46.268 [DEBUG] [Thread-55862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:25:46.286 [INFO] [Thread-55862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:25:46.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:25:46.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:25:47.134 [DEBUG] [Thread-55862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:25:47.134 [DEBUG] [Thread-55862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:25:47.181 [DEBUG] [Thread-55862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:25:47.181 [DEBUG] [Thread-55862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:25:47.190 [DEBUG] [Thread-55862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:25:47.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:25:47.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:25:47.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:25:47.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:25:47.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:25:47.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:25:47.224 [DEBUG] [Thread-55862] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:25:55.759 [DEBUG] [Thread-55864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:25:59.771 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:25:59.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:26:10.795 [DEBUG] [Thread-55865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:26:15.709 [DEBUG] [Thread-55866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:26:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:26:17.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:26:17.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:26:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 25, 56), 31.64, 11.45, 0.0, 17.96, 23.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:26:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:25:56
2025-11-17T14:26:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:26:18.173 [DEBUG] [Thread-55867] [transport.py] [_log()] starting thread (client mode): 0xd078e020
2025-11-17T14:26:18.173 [DEBUG] [Thread-55867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:26:18.194 [DEBUG] [Thread-55867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:26:18.194 [INFO] [Thread-55867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:26:18.197 [DEBUG] [Thread-55867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:26:18.197 [DEBUG] [Thread-55867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:26:18.197 [DEBUG] [Thread-55867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:26:18.197 [DEBUG] [Thread-55867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:26:18.197 [DEBUG] [Thread-55867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:26:18.197 [DEBUG] [Thread-55867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] client lang: <none>
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] server lang: <none>
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] kex follows: False
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] Compression: none
2025-11-17T14:26:18.198 [DEBUG] [Thread-55867] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:26:18.217 [DEBUG] [Thread-55867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:26:18.217 [DEBUG] [Thread-55867] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:26:18.218 [DEBUG] [Thread-55867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:26:18.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:26:18.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:26:18.219 [DEBUG] [Thread-55867] [transport.py] [_log()] userauth is OK
2025-11-17T14:26:18.220 [DEBUG] [Thread-55867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:26:18.220 [DEBUG] [Thread-55867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:26:18.220 [DEBUG] [Thread-55867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:26:18.220 [DEBUG] [Thread-55867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:26:18.255 [INFO] [Thread-55867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:26:18.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:26:18.900 [DEBUG] [Thread-55867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:26:18.900 [DEBUG] [Thread-55867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:26:18.901 [DEBUG] [Thread-55867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:26:18.942 [DEBUG] [Thread-55867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:26:18.942 [DEBUG] [Thread-55867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:26:18.945 [DEBUG] [Thread-55867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:26:18.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:26:18.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:26:18.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:26:18.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:26:18.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:26:18.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:26:18.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:26:18.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:26:18.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:26:18.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.517755 -999.00  +24.60  29.25     16   -2.30 1 1 1 1 1   888    0 27.79 66.20 ----- 29.2 29.2 323.9 35.3 30.8 -26.2 30.1 -25.6 30.8 -24.5 31.6 -24.9
2025-11-17T14:26:18.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:26:18.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:26:18.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.517755
2025-11-17T14:26:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:26:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:26:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:26:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:26:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:26:18.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:25:56', tmtdew=31.64, humidity=11.45, cloud=0.0, wind=17.96, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:25:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:26:18.973 [DEBUG] [Thread-55867] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:26:19.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:26:19.071 [DEBUG] [Thread-55870] [transport.py] [_log()] starting thread (client mode): 0xd0722c50
2025-11-17T14:26:19.071 [DEBUG] [Thread-55870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:26:19.086 [DEBUG] [Thread-55870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:26:19.086 [INFO] [Thread-55870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:26:19.093 [DEBUG] [Thread-55870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:26:19.094 [DEBUG] [Thread-55870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:26:19.094 [DEBUG] [Thread-55870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:26:19.094 [DEBUG] [Thread-55870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:26:19.094 [DEBUG] [Thread-55870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:26:19.094 [DEBUG] [Thread-55870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:26:19.094 [DEBUG] [Thread-55870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:26:19.094 [DEBUG] [Thread-55870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:26:19.094 [DEBUG] [Thread-55870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:26:19.095 [DEBUG] [Thread-55870] [transport.py] [_log()] client lang: <none>
2025-11-17T14:26:19.095 [DEBUG] [Thread-55870] [transport.py] [_log()] server lang: <none>
2025-11-17T14:26:19.095 [DEBUG] [Thread-55870] [transport.py] [_log()] kex follows: False
2025-11-17T14:26:19.095 [DEBUG] [Thread-55870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:26:19.095 [DEBUG] [Thread-55870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:26:19.095 [DEBUG] [Thread-55870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:26:19.095 [DEBUG] [Thread-55870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:26:19.095 [DEBUG] [Thread-55870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:26:19.096 [DEBUG] [Thread-55870] [transport.py] [_log()] Compression: none
2025-11-17T14:26:19.096 [DEBUG] [Thread-55870] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:26:19.152 [DEBUG] [Thread-55870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:26:19.153 [DEBUG] [Thread-55870] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:26:19.154 [DEBUG] [Thread-55870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:26:19.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:26:19.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:26:19.208 [DEBUG] [Thread-55870] [transport.py] [_log()] userauth is OK
2025-11-17T14:26:19.208 [DEBUG] [Thread-55870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:26:19.208 [DEBUG] [Thread-55870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:26:19.208 [DEBUG] [Thread-55870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:26:19.208 [DEBUG] [Thread-55870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:26:19.228 [INFO] [Thread-55870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:26:19.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:26:19.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:26:20.086 [DEBUG] [Thread-55870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:26:20.086 [DEBUG] [Thread-55870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:26:20.134 [DEBUG] [Thread-55870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:26:20.134 [DEBUG] [Thread-55870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:26:20.143 [DEBUG] [Thread-55870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:26:20.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:26:20.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:26:20.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:26:20.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:26:20.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:26:20.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:26:20.177 [DEBUG] [Thread-55870] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:26:25.825 [DEBUG] [Thread-55872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:26:40.864 [DEBUG] [Thread-55873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:26:50.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:26:50.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:26:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:26:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 26, 28), 30.99, 12.02, 0.0, 28.44, 23.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:26:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:26:28
2025-11-17T14:26:50.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:26:51.105 [DEBUG] [Thread-55874] [transport.py] [_log()] starting thread (client mode): 0xd078cb20
2025-11-17T14:26:51.106 [DEBUG] [Thread-55874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:26:51.126 [DEBUG] [Thread-55874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:26:51.126 [INFO] [Thread-55874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] client lang: <none>
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] server lang: <none>
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] kex follows: False
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:26:51.129 [DEBUG] [Thread-55874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:26:51.130 [DEBUG] [Thread-55874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:26:51.130 [DEBUG] [Thread-55874] [transport.py] [_log()] Compression: none
2025-11-17T14:26:51.130 [DEBUG] [Thread-55874] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:26:51.147 [DEBUG] [Thread-55874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:26:51.147 [DEBUG] [Thread-55874] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:26:51.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:26:51.148 [DEBUG] [Thread-55874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:26:51.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:26:51.150 [DEBUG] [Thread-55874] [transport.py] [_log()] userauth is OK
2025-11-17T14:26:51.150 [DEBUG] [Thread-55874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:26:51.150 [DEBUG] [Thread-55874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:26:51.150 [DEBUG] [Thread-55874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:26:51.150 [DEBUG] [Thread-55874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:26:51.176 [INFO] [Thread-55874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:26:51.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:26:51.838 [DEBUG] [Thread-55874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:26:51.838 [DEBUG] [Thread-55874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:26:51.839 [DEBUG] [Thread-55874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:26:51.879 [DEBUG] [Thread-55874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:26:51.880 [DEBUG] [Thread-55874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:26:51.882 [DEBUG] [Thread-55874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:26:51.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:26:51.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:26:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:26:51.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:26:51.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:26:51.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:26:51.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:26:51.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:26:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:26:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.518103 -999.00  +24.60  41.86     16   -2.20 1 1 2 1 1   888    0 27.68 70.48 ----- 41.9 41.9 314.2 46.7 30.7 -26.6 30.1 -26.2 30.4 -25.6 31.6 -25.1
2025-11-17T14:26:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:26:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:26:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.518103
2025-11-17T14:26:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:26:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:26:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:26:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:26:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:26:51.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:26:28', tmtdew=30.99, humidity=12.02, cloud=0.0, wind=28.44, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:26:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:26:51.910 [DEBUG] [Thread-55874] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:26:51.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:26:52.001 [DEBUG] [Thread-55877] [transport.py] [_log()] starting thread (client mode): 0xd31edc30
2025-11-17T14:26:52.001 [DEBUG] [Thread-55877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:26:52.016 [DEBUG] [Thread-55877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:26:52.016 [INFO] [Thread-55877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:26:52.023 [DEBUG] [Thread-55877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:26:52.023 [DEBUG] [Thread-55877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:26:52.023 [DEBUG] [Thread-55877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] client lang: <none>
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] server lang: <none>
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] kex follows: False
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] Compression: none
2025-11-17T14:26:52.024 [DEBUG] [Thread-55877] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:26:52.087 [DEBUG] [Thread-55877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:26:52.088 [DEBUG] [Thread-55877] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:26:52.088 [DEBUG] [Thread-55877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:26:52.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:26:52.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:26:52.147 [DEBUG] [Thread-55877] [transport.py] [_log()] userauth is OK
2025-11-17T14:26:52.148 [DEBUG] [Thread-55877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:26:52.148 [DEBUG] [Thread-55877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:26:52.148 [DEBUG] [Thread-55877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:26:52.148 [DEBUG] [Thread-55877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:26:52.167 [INFO] [Thread-55877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:26:52.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:26:52.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:26:53.041 [DEBUG] [Thread-55877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:26:53.041 [DEBUG] [Thread-55877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:26:53.089 [DEBUG] [Thread-55877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:26:53.089 [DEBUG] [Thread-55877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:26:53.098 [DEBUG] [Thread-55877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:26:53.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:26:53.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:26:53.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:26:53.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:26:53.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:26:53.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:26:53.132 [DEBUG] [Thread-55877] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:26:55.893 [DEBUG] [Thread-55879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:26:59.914 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:26:59.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:27:10.940 [DEBUG] [Thread-55880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:27:15.759 [DEBUG] [Thread-55881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:27:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:27:23.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:27:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:27:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 27), 31.15, 11.94, 0.0, 30.33, 23.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:27:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:27:00
2025-11-17T14:27:23.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:27:24.056 [DEBUG] [Thread-55882] [transport.py] [_log()] starting thread (client mode): 0xd31ee2c0
2025-11-17T14:27:24.056 [DEBUG] [Thread-55882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:27:24.076 [DEBUG] [Thread-55882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:27:24.077 [INFO] [Thread-55882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:27:24.080 [DEBUG] [Thread-55882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:27:24.080 [DEBUG] [Thread-55882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:27:24.080 [DEBUG] [Thread-55882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:27:24.080 [DEBUG] [Thread-55882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:27:24.080 [DEBUG] [Thread-55882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:27:24.080 [DEBUG] [Thread-55882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] client lang: <none>
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] server lang: <none>
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] kex follows: False
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] Compression: none
2025-11-17T14:27:24.081 [DEBUG] [Thread-55882] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:27:24.099 [DEBUG] [Thread-55882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:27:24.099 [DEBUG] [Thread-55882] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:27:24.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:27:24.100 [DEBUG] [Thread-55882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:27:24.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:27:24.102 [DEBUG] [Thread-55882] [transport.py] [_log()] userauth is OK
2025-11-17T14:27:24.103 [DEBUG] [Thread-55882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:27:24.103 [DEBUG] [Thread-55882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:27:24.103 [DEBUG] [Thread-55882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:27:24.103 [DEBUG] [Thread-55882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:27:24.118 [INFO] [Thread-55882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:27:24.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:27:24.774 [DEBUG] [Thread-55882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:27:24.775 [DEBUG] [Thread-55882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:27:24.775 [DEBUG] [Thread-55882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:27:24.815 [DEBUG] [Thread-55882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:27:24.815 [DEBUG] [Thread-55882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:27:24.818 [DEBUG] [Thread-55882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:27:24.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:27:24.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:27:24.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:27:24.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:27:24.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:27:24.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:27:24.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:27:24.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:27:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:27:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.518450 -999.00  +24.20  30.15     17   -2.10 1 1 2 1 1   888    0 28.09 69.04 ----- 30.1 30.1 307.8 41.5 30.5 -28.0 29.9 -27.2 30.4 -29.4 31.4 -25.9
2025-11-17T14:27:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:27:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:27:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.518450
2025-11-17T14:27:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:27:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:27:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:27:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:27:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:27:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:27:00', tmtdew=31.15, humidity=11.94, cloud=0.0, wind=30.33, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:26:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:27:24.844 [DEBUG] [Thread-55882] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:27:24.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:27:24.941 [DEBUG] [Thread-55885] [transport.py] [_log()] starting thread (client mode): 0xd31b3070
2025-11-17T14:27:24.941 [DEBUG] [Thread-55885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:27:24.957 [DEBUG] [Thread-55885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:27:24.957 [INFO] [Thread-55885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:27:24.964 [DEBUG] [Thread-55885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:27:24.964 [DEBUG] [Thread-55885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:27:24.964 [DEBUG] [Thread-55885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:27:24.964 [DEBUG] [Thread-55885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] client lang: <none>
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] server lang: <none>
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] kex follows: False
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] Compression: none
2025-11-17T14:27:24.965 [DEBUG] [Thread-55885] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:27:25.027 [DEBUG] [Thread-55885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:27:25.028 [DEBUG] [Thread-55885] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:27:25.028 [DEBUG] [Thread-55885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:27:25.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:27:25.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:27:25.083 [DEBUG] [Thread-55885] [transport.py] [_log()] userauth is OK
2025-11-17T14:27:25.084 [DEBUG] [Thread-55885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:27:25.084 [DEBUG] [Thread-55885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:27:25.084 [DEBUG] [Thread-55885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:27:25.084 [DEBUG] [Thread-55885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:27:25.104 [INFO] [Thread-55885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:27:25.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:27:25.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:27:25.968 [DEBUG] [Thread-55887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:27:25.985 [DEBUG] [Thread-55885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:27:25.985 [DEBUG] [Thread-55885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:27:26.033 [DEBUG] [Thread-55885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:27:26.033 [DEBUG] [Thread-55885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:27:26.042 [DEBUG] [Thread-55885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:27:26.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:27:26.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:27:26.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:27:26.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:27:26.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:27:26.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:27:26.082 [DEBUG] [Thread-55885] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:27:41.011 [DEBUG] [Thread-55888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:27:56.042 [DEBUG] [Thread-55889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:27:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:27:56.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:27:56.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:27:56.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 27, 32), 31.49, 11.71, 0.0, 28.85, 24.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:27:56.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:27:32
2025-11-17T14:27:56.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:27:57.027 [DEBUG] [Thread-55890] [transport.py] [_log()] starting thread (client mode): 0xd31cf670
2025-11-17T14:27:57.027 [DEBUG] [Thread-55890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:27:57.047 [DEBUG] [Thread-55890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:27:57.047 [INFO] [Thread-55890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] client lang: <none>
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] server lang: <none>
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] kex follows: False
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:27:57.050 [DEBUG] [Thread-55890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:27:57.051 [DEBUG] [Thread-55890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:27:57.051 [DEBUG] [Thread-55890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:27:57.051 [DEBUG] [Thread-55890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:27:57.051 [DEBUG] [Thread-55890] [transport.py] [_log()] Compression: none
2025-11-17T14:27:57.051 [DEBUG] [Thread-55890] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:27:57.067 [DEBUG] [Thread-55890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:27:57.068 [DEBUG] [Thread-55890] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:27:57.068 [DEBUG] [Thread-55890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:27:57.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:27:57.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:27:57.112 [DEBUG] [Thread-55890] [transport.py] [_log()] userauth is OK
2025-11-17T14:27:57.112 [DEBUG] [Thread-55890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:27:57.113 [DEBUG] [Thread-55890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:27:57.113 [DEBUG] [Thread-55890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:27:57.113 [DEBUG] [Thread-55890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:27:57.145 [INFO] [Thread-55890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:27:57.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:27:57.796 [DEBUG] [Thread-55890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:27:57.796 [DEBUG] [Thread-55890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:27:57.796 [DEBUG] [Thread-55890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:27:57.837 [DEBUG] [Thread-55890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:27:57.838 [DEBUG] [Thread-55890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:27:57.840 [DEBUG] [Thread-55890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:27:57.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:27:57.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:27:57.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:27:57.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:27:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:27:57.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:27:57.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:27:57.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:27:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:27:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.518797 -999.00  +23.70  29.71     17   -2.40 1 1 1 1 1   888    0 27.99 68.43 ----- 29.7 29.7 314.2 38.0 30.4 -29.1 29.8 -26.9 30.3 -26.1 31.2 -26.3
2025-11-17T14:27:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:27:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:27:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.518797
2025-11-17T14:27:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:27:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:27:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:27:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:27:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:27:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:27:32', tmtdew=31.49, humidity=11.71, cloud=0.0, wind=28.85, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:27:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:27:57.865 [DEBUG] [Thread-55890] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:27:57.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:27:57.961 [DEBUG] [Thread-55893] [transport.py] [_log()] starting thread (client mode): 0xd31cda80
2025-11-17T14:27:57.961 [DEBUG] [Thread-55893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:27:57.975 [DEBUG] [Thread-55893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:27:57.975 [INFO] [Thread-55893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] client lang: <none>
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] server lang: <none>
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] kex follows: False
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:27:57.983 [DEBUG] [Thread-55893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:27:57.984 [DEBUG] [Thread-55893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:27:57.984 [DEBUG] [Thread-55893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:27:57.984 [DEBUG] [Thread-55893] [transport.py] [_log()] Compression: none
2025-11-17T14:27:57.984 [DEBUG] [Thread-55893] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:27:58.039 [DEBUG] [Thread-55893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:27:58.039 [DEBUG] [Thread-55893] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:27:58.040 [DEBUG] [Thread-55893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:27:58.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:27:58.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:27:58.099 [DEBUG] [Thread-55893] [transport.py] [_log()] userauth is OK
2025-11-17T14:27:58.099 [DEBUG] [Thread-55893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:27:58.100 [DEBUG] [Thread-55893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:27:58.100 [DEBUG] [Thread-55893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:27:58.100 [DEBUG] [Thread-55893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:27:58.120 [INFO] [Thread-55893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:27:58.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:27:58.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:27:58.986 [DEBUG] [Thread-55893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:27:58.986 [DEBUG] [Thread-55893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:27:59.034 [DEBUG] [Thread-55893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:27:59.034 [DEBUG] [Thread-55893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:27:59.043 [DEBUG] [Thread-55893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:27:59.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:27:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:27:59.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:27:59.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:27:59.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:27:59.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:27:59.078 [DEBUG] [Thread-55893] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:28:00.063 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:28:00.068 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:28:11.073 [DEBUG] [Thread-55895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:28:15.793 [DEBUG] [Thread-55896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:28:26.116 [DEBUG] [Thread-55897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:28:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:28:29.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:28:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:28:29.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 28, 4), 31.59, 11.61, 0.0, 24.69, 23.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:28:29.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:28:04
2025-11-17T14:28:29.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:28:30.055 [DEBUG] [Thread-55898] [transport.py] [_log()] starting thread (client mode): 0xd31cf2b0
2025-11-17T14:28:30.055 [DEBUG] [Thread-55898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:28:30.075 [DEBUG] [Thread-55898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:28:30.075 [INFO] [Thread-55898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:28:30.078 [DEBUG] [Thread-55898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:28:30.078 [DEBUG] [Thread-55898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:28:30.078 [DEBUG] [Thread-55898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:28:30.078 [DEBUG] [Thread-55898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:28:30.078 [DEBUG] [Thread-55898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:28:30.078 [DEBUG] [Thread-55898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:28:30.078 [DEBUG] [Thread-55898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:28:30.078 [DEBUG] [Thread-55898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] client lang: <none>
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] server lang: <none>
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] kex follows: False
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] Compression: none
2025-11-17T14:28:30.079 [DEBUG] [Thread-55898] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:28:30.095 [DEBUG] [Thread-55898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:28:30.095 [DEBUG] [Thread-55898] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:28:30.095 [DEBUG] [Thread-55898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:28:30.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:28:30.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:28:30.096 [DEBUG] [Thread-55898] [transport.py] [_log()] userauth is OK
2025-11-17T14:28:30.096 [DEBUG] [Thread-55898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:28:30.096 [DEBUG] [Thread-55898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:28:30.096 [DEBUG] [Thread-55898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:28:30.096 [DEBUG] [Thread-55898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:28:30.111 [INFO] [Thread-55898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:28:30.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:28:30.761 [DEBUG] [Thread-55898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:28:30.761 [DEBUG] [Thread-55898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:28:30.761 [DEBUG] [Thread-55898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:28:30.802 [DEBUG] [Thread-55898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:28:30.802 [DEBUG] [Thread-55898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:28:30.803 [DEBUG] [Thread-55898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:28:30.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:28:30.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:28:30.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:28:30.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:28:30.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:28:30.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:28:30.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:28:30.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.519144 -999.00  +23.20  24.84     18   -2.30 1 1 1 1 1   888    0 28.05 65.84 ----- 24.8 24.8 312.0 28.8 30.2 -28.2 29.7 -26.9 30.2 -27.6 31.1 -26.4
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.519144
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:28:04', tmtdew=31.59, humidity=11.61, cloud=0.0, wind=24.69, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:27:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:28:30.822 [DEBUG] [Thread-55898] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:28:30.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:28:30.907 [DEBUG] [Thread-55901] [transport.py] [_log()] starting thread (client mode): 0xd0723940
2025-11-17T14:28:30.907 [DEBUG] [Thread-55901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:28:30.922 [DEBUG] [Thread-55901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:28:30.922 [INFO] [Thread-55901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] client lang: <none>
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] server lang: <none>
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] kex follows: False
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] Compression: none
2025-11-17T14:28:30.930 [DEBUG] [Thread-55901] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:28:30.991 [DEBUG] [Thread-55901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:28:30.991 [DEBUG] [Thread-55901] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:28:30.991 [DEBUG] [Thread-55901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:28:30.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:28:30.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:28:31.047 [DEBUG] [Thread-55901] [transport.py] [_log()] userauth is OK
2025-11-17T14:28:31.048 [DEBUG] [Thread-55901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:28:31.048 [DEBUG] [Thread-55901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:28:31.048 [DEBUG] [Thread-55901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:28:31.048 [DEBUG] [Thread-55901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:28:31.071 [INFO] [Thread-55901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:28:31.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:28:31.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:28:32.000 [DEBUG] [Thread-55901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:28:32.000 [DEBUG] [Thread-55901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:28:32.048 [DEBUG] [Thread-55901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:28:32.048 [DEBUG] [Thread-55901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:28:32.058 [DEBUG] [Thread-55901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:28:32.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:28:32.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:28:32.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:28:32.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:28:32.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:28:32.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:28:32.093 [DEBUG] [Thread-55901] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:28:41.142 [DEBUG] [Thread-55903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:28:56.181 [DEBUG] [Thread-55904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:29:00.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:29:00.211 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:29:02.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:29:02.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:29:02.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:29:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 28, 36), 30.57, 12.28, 0.0, 19.66, 23.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:29:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:28:36
2025-11-17T14:29:02.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:29:03.052 [DEBUG] [Thread-55905] [transport.py] [_log()] starting thread (client mode): 0xd07231f0
2025-11-17T14:29:03.052 [DEBUG] [Thread-55905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:29:03.072 [DEBUG] [Thread-55905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:29:03.072 [INFO] [Thread-55905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] client lang: <none>
2025-11-17T14:29:03.076 [DEBUG] [Thread-55905] [transport.py] [_log()] server lang: <none>
2025-11-17T14:29:03.077 [DEBUG] [Thread-55905] [transport.py] [_log()] kex follows: False
2025-11-17T14:29:03.077 [DEBUG] [Thread-55905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:29:03.077 [DEBUG] [Thread-55905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:29:03.077 [DEBUG] [Thread-55905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:29:03.077 [DEBUG] [Thread-55905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:29:03.077 [DEBUG] [Thread-55905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:29:03.077 [DEBUG] [Thread-55905] [transport.py] [_log()] Compression: none
2025-11-17T14:29:03.077 [DEBUG] [Thread-55905] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:29:03.096 [DEBUG] [Thread-55905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:29:03.096 [DEBUG] [Thread-55905] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:29:03.097 [DEBUG] [Thread-55905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:29:03.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:29:03.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:29:03.099 [DEBUG] [Thread-55905] [transport.py] [_log()] userauth is OK
2025-11-17T14:29:03.099 [DEBUG] [Thread-55905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:29:03.099 [DEBUG] [Thread-55905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:29:03.099 [DEBUG] [Thread-55905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:29:03.099 [DEBUG] [Thread-55905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:29:03.122 [INFO] [Thread-55905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:29:03.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:29:03.741 [DEBUG] [Thread-55905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:29:03.741 [DEBUG] [Thread-55905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:29:03.741 [DEBUG] [Thread-55905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:29:03.781 [DEBUG] [Thread-55905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:29:03.782 [DEBUG] [Thread-55905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:29:03.785 [DEBUG] [Thread-55905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:29:03.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:29:03.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:29:03.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:29:03.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:29:03.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:29:03.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:29:03.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:29:03.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:29:03.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:29:03.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.519491 -999.00  +23.00  20.26     18   -2.20 1 1 1 1 1   888    0 28.02 64.40 ----- 20.3 20.3 313.4 24.5 30.2 -27.8 29.6 -26.7 30.3 -25.3 31.0 -25.8
2025-11-17T14:29:03.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:29:03.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:29:03.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.519491
2025-11-17T14:29:03.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:29:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:29:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:29:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:29:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:29:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:28:36', tmtdew=30.57, humidity=12.28, cloud=0.0, wind=19.66, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:28:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:29:03.809 [DEBUG] [Thread-55905] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:29:03.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:29:03.908 [DEBUG] [Thread-55908] [transport.py] [_log()] starting thread (client mode): 0xd31342b0
2025-11-17T14:29:03.908 [DEBUG] [Thread-55908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:29:03.926 [DEBUG] [Thread-55908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:29:03.926 [INFO] [Thread-55908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:29:03.933 [DEBUG] [Thread-55908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:29:03.933 [DEBUG] [Thread-55908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:29:03.933 [DEBUG] [Thread-55908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] client lang: <none>
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] server lang: <none>
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] kex follows: False
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] Compression: none
2025-11-17T14:29:03.934 [DEBUG] [Thread-55908] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:29:03.990 [DEBUG] [Thread-55908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:29:03.990 [DEBUG] [Thread-55908] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:29:03.990 [DEBUG] [Thread-55908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:29:03.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:29:03.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:29:04.047 [DEBUG] [Thread-55908] [transport.py] [_log()] userauth is OK
2025-11-17T14:29:04.047 [DEBUG] [Thread-55908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:29:04.047 [DEBUG] [Thread-55908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:29:04.047 [DEBUG] [Thread-55908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:29:04.047 [DEBUG] [Thread-55908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:29:04.063 [INFO] [Thread-55908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:29:04.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:29:04.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:29:04.983 [DEBUG] [Thread-55908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:29:04.983 [DEBUG] [Thread-55908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:29:05.031 [DEBUG] [Thread-55908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:29:05.031 [DEBUG] [Thread-55908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:29:05.039 [DEBUG] [Thread-55908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:29:05.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:29:05.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:29:05.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:29:05.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:29:05.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:29:05.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:29:05.070 [DEBUG] [Thread-55908] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:29:11.214 [DEBUG] [Thread-55910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:29:15.827 [DEBUG] [Thread-55911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:29:26.255 [DEBUG] [Thread-55912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:29:35.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:29:35.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:29:35.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:29:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 29, 8), 30.33, 12.44, 0.0, 24.52, 23.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:29:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:29:08
2025-11-17T14:29:35.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:29:36.000 [DEBUG] [Thread-55913] [transport.py] [_log()] starting thread (client mode): 0xd07bf0d0
2025-11-17T14:29:36.001 [DEBUG] [Thread-55913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:29:36.021 [DEBUG] [Thread-55913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:29:36.021 [INFO] [Thread-55913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] client lang: <none>
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] server lang: <none>
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] kex follows: False
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] Compression: none
2025-11-17T14:29:36.025 [DEBUG] [Thread-55913] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:29:36.044 [DEBUG] [Thread-55913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:29:36.044 [DEBUG] [Thread-55913] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:29:36.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:29:36.046 [DEBUG] [Thread-55913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:29:36.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:29:36.047 [DEBUG] [Thread-55913] [transport.py] [_log()] userauth is OK
2025-11-17T14:29:36.048 [DEBUG] [Thread-55913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:29:36.048 [DEBUG] [Thread-55913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:29:36.048 [DEBUG] [Thread-55913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:29:36.048 [DEBUG] [Thread-55913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:29:36.065 [INFO] [Thread-55913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:29:36.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:29:36.656 [DEBUG] [Thread-55913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:29:36.656 [DEBUG] [Thread-55913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:29:36.657 [DEBUG] [Thread-55913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:29:36.698 [DEBUG] [Thread-55913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:29:36.698 [DEBUG] [Thread-55913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:29:36.700 [DEBUG] [Thread-55913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:29:36.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:29:36.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:29:36.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:29:36.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:29:36.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:29:36.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:29:36.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:29:36.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:29:36.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:29:36.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.519839 -999.00  +23.10  24.72     18   -2.10 1 1 1 1 1   888    0 27.83 58.26 ----- 24.7 24.7 315.5 26.0 30.2 -27.7 29.6 -26.5 30.4 -24.7 31.1 -25.4
2025-11-17T14:29:36.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:29:36.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:29:36.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.519839
2025-11-17T14:29:36.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:29:36.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:29:36.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:29:36.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:29:36.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:29:36.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:29:08', tmtdew=30.33, humidity=12.44, cloud=0.0, wind=24.52, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:28:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:29:36.726 [DEBUG] [Thread-55913] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:29:36.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:29:36.833 [DEBUG] [Thread-55916] [transport.py] [_log()] starting thread (client mode): 0xd31ec280
2025-11-17T14:29:36.833 [DEBUG] [Thread-55916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:29:36.848 [DEBUG] [Thread-55916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:29:36.849 [INFO] [Thread-55916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] client lang: <none>
2025-11-17T14:29:36.856 [DEBUG] [Thread-55916] [transport.py] [_log()] server lang: <none>
2025-11-17T14:29:36.857 [DEBUG] [Thread-55916] [transport.py] [_log()] kex follows: False
2025-11-17T14:29:36.857 [DEBUG] [Thread-55916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:29:36.857 [DEBUG] [Thread-55916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:29:36.857 [DEBUG] [Thread-55916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:29:36.857 [DEBUG] [Thread-55916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:29:36.857 [DEBUG] [Thread-55916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:29:36.857 [DEBUG] [Thread-55916] [transport.py] [_log()] Compression: none
2025-11-17T14:29:36.857 [DEBUG] [Thread-55916] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:29:36.916 [DEBUG] [Thread-55916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:29:36.916 [DEBUG] [Thread-55916] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:29:36.917 [DEBUG] [Thread-55916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:29:36.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:29:36.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:29:36.971 [DEBUG] [Thread-55916] [transport.py] [_log()] userauth is OK
2025-11-17T14:29:36.971 [DEBUG] [Thread-55916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:29:36.972 [DEBUG] [Thread-55916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:29:36.972 [DEBUG] [Thread-55916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:29:36.972 [DEBUG] [Thread-55916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:29:36.990 [INFO] [Thread-55916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:29:36.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:29:36.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:29:37.857 [DEBUG] [Thread-55916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:29:37.858 [DEBUG] [Thread-55916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:29:37.905 [DEBUG] [Thread-55916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:29:37.905 [DEBUG] [Thread-55916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:29:37.914 [DEBUG] [Thread-55916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:29:37.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:29:37.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:29:37.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:29:37.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:29:37.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:29:37.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:29:37.950 [DEBUG] [Thread-55916] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:29:41.280 [DEBUG] [Thread-55918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:29:56.308 [DEBUG] [Thread-55919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:30:00.354 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:30:00.354 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:30:07.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:30:07.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:30:07.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:30:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 29, 40), 30.28, 12.54, 0.0, 17.36, 23.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:30:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:29:40
2025-11-17T14:30:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:30:08.867 [DEBUG] [Thread-55920] [transport.py] [_log()] starting thread (client mode): 0xd31cf280
2025-11-17T14:30:08.867 [DEBUG] [Thread-55920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:30:08.888 [DEBUG] [Thread-55920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:30:08.888 [INFO] [Thread-55920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:30:08.891 [DEBUG] [Thread-55920] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:30:08.891 [DEBUG] [Thread-55920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:30:08.891 [DEBUG] [Thread-55920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] client lang: <none>
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] server lang: <none>
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] kex follows: False
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] Compression: none
2025-11-17T14:30:08.892 [DEBUG] [Thread-55920] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:30:08.909 [DEBUG] [Thread-55920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:30:08.909 [DEBUG] [Thread-55920] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:30:08.910 [DEBUG] [Thread-55920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:30:08.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:30:08.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:30:08.912 [DEBUG] [Thread-55920] [transport.py] [_log()] userauth is OK
2025-11-17T14:30:08.912 [DEBUG] [Thread-55920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:30:08.912 [DEBUG] [Thread-55920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:30:08.912 [DEBUG] [Thread-55920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:30:08.912 [DEBUG] [Thread-55920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:30:08.936 [INFO] [Thread-55920] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:30:08.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:30:11.342 [DEBUG] [Thread-55922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:30:13.832 [DEBUG] [Thread-55920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:30:13.832 [DEBUG] [Thread-55920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:30:13.832 [DEBUG] [Thread-55920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:30:13.873 [DEBUG] [Thread-55920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:30:13.873 [DEBUG] [Thread-55920] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:30:13.876 [DEBUG] [Thread-55920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:30:13.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:30:13.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:30:13.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:30:13.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:30:13.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:30:13.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:30:13.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:30:13.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:30:13.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:30:13.948 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-11-17T14:30:13.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:29:40', tmtdew=30.28, humidity=12.54, cloud=0.0, wind=17.36, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:30:13.949 [DEBUG] [Thread-55920] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:30:14.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:30:14.035 [DEBUG] [Thread-55924] [transport.py] [_log()] starting thread (client mode): 0xd31b13f0
2025-11-17T14:30:14.035 [DEBUG] [Thread-55924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:30:14.053 [DEBUG] [Thread-55924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:30:14.053 [INFO] [Thread-55924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] client lang: <none>
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] server lang: <none>
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] kex follows: False
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] Compression: none
2025-11-17T14:30:14.061 [DEBUG] [Thread-55924] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:30:14.118 [DEBUG] [Thread-55924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:30:14.118 [DEBUG] [Thread-55924] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:30:14.118 [DEBUG] [Thread-55924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:30:14.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:30:14.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:30:14.175 [DEBUG] [Thread-55924] [transport.py] [_log()] userauth is OK
2025-11-17T14:30:14.175 [DEBUG] [Thread-55924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:30:14.175 [DEBUG] [Thread-55924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:30:14.175 [DEBUG] [Thread-55924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:30:14.175 [DEBUG] [Thread-55924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:30:14.191 [INFO] [Thread-55924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:30:14.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:30:14.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:30:15.097 [DEBUG] [Thread-55924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:30:15.097 [DEBUG] [Thread-55924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:30:15.145 [DEBUG] [Thread-55924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:30:15.145 [DEBUG] [Thread-55924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:30:15.154 [DEBUG] [Thread-55924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:30:15.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:30: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')
2025-11-17T14:30:15.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:30:15.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:30:15.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:30:15.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:30:15.186 [DEBUG] [Thread-55924] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:30:15.862 [DEBUG] [Thread-55926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:30:26.371 [DEBUG] [Thread-55927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:30:41.405 [DEBUG] [Thread-55928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:30:45.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:30:45.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:30:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:30:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 30, 12), 30.26, 12.52, 0.0, 12.58, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:30:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:30:12
2025-11-17T14:30:46.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:30:46.196 [DEBUG] [Thread-55929] [transport.py] [_log()] starting thread (client mode): 0xd0723370
2025-11-17T14:30:46.196 [DEBUG] [Thread-55929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:30:46.215 [DEBUG] [Thread-55929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:30:46.215 [INFO] [Thread-55929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:30:46.218 [DEBUG] [Thread-55929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:30:46.218 [DEBUG] [Thread-55929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:30:46.218 [DEBUG] [Thread-55929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:30:46.218 [DEBUG] [Thread-55929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:30:46.218 [DEBUG] [Thread-55929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:30:46.218 [DEBUG] [Thread-55929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] client lang: <none>
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] server lang: <none>
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] kex follows: False
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] Compression: none
2025-11-17T14:30:46.219 [DEBUG] [Thread-55929] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:30:46.234 [DEBUG] [Thread-55929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:30:46.234 [DEBUG] [Thread-55929] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:30:46.234 [DEBUG] [Thread-55929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:30:46.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:30:46.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:30:46.235 [DEBUG] [Thread-55929] [transport.py] [_log()] userauth is OK
2025-11-17T14:30:46.236 [DEBUG] [Thread-55929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:30:46.236 [DEBUG] [Thread-55929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:30:46.236 [DEBUG] [Thread-55929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:30:46.236 [DEBUG] [Thread-55929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:30:46.256 [INFO] [Thread-55929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:30:46.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:30:46.852 [DEBUG] [Thread-55929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:30:46.852 [DEBUG] [Thread-55929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:30:46.853 [DEBUG] [Thread-55929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:30:46.892 [DEBUG] [Thread-55929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:30:46.893 [DEBUG] [Thread-55929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:30:46.895 [DEBUG] [Thread-55929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:30:46.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:30:46.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:30:46.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:30:46.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:30:46.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:30:46.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:30:46.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:30:46.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:30:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:30:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.520880 -999.00  +22.90  11.30     18   -2.60 1 1 1 1 1   888    0 27.33 33.17 ----- 11.3 11.3 333.0 19.1 30.1 -26.4 29.5 -26.1 30.4 -24.0 30.7 -24.3
2025-11-17T14:30:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:30:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:30:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.520880
2025-11-17T14:30:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:30:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:30:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:30:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:30:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:30:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:30:12', tmtdew=30.26, humidity=12.52, cloud=0.0, wind=12.58, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:30:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:30:46.915 [DEBUG] [Thread-55929] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:30:47.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:30:47.012 [DEBUG] [Thread-55932] [transport.py] [_log()] starting thread (client mode): 0xd070e440
2025-11-17T14:30:47.013 [DEBUG] [Thread-55932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:30:47.027 [DEBUG] [Thread-55932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:30:47.028 [INFO] [Thread-55932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:30:47.035 [DEBUG] [Thread-55932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:30:47.035 [DEBUG] [Thread-55932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] client lang: <none>
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] server lang: <none>
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] kex follows: False
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:30:47.036 [DEBUG] [Thread-55932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:30:47.037 [DEBUG] [Thread-55932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:30:47.037 [DEBUG] [Thread-55932] [transport.py] [_log()] Compression: none
2025-11-17T14:30:47.037 [DEBUG] [Thread-55932] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:30:47.095 [DEBUG] [Thread-55932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:30:47.095 [DEBUG] [Thread-55932] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:30:47.096 [DEBUG] [Thread-55932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:30:47.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:30:47.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:30:47.155 [DEBUG] [Thread-55932] [transport.py] [_log()] userauth is OK
2025-11-17T14:30:47.155 [DEBUG] [Thread-55932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:30:47.156 [DEBUG] [Thread-55932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:30:47.156 [DEBUG] [Thread-55932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:30:47.156 [DEBUG] [Thread-55932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:30:47.175 [INFO] [Thread-55932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:30:47.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:30:47.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:30:48.042 [DEBUG] [Thread-55932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:30:48.042 [DEBUG] [Thread-55932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:30:48.089 [DEBUG] [Thread-55932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:30:48.089 [DEBUG] [Thread-55932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:30:48.098 [DEBUG] [Thread-55932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:30:48.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:30:48.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:30:48.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:30:48.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:30:48.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:30:48.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:30:48.131 [DEBUG] [Thread-55932] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:30:56.434 [DEBUG] [Thread-55934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:31:00.504 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:31:00.505 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:31:11.475 [DEBUG] [Thread-55935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:31:15.906 [DEBUG] [Thread-55936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:31:18.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:31:18.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:31:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:31:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 30, 44), 30.23, 12.77, 0.0, 5.47, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:31:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:30:44
2025-11-17T14:31:18.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:31:19.115 [DEBUG] [Thread-55937] [transport.py] [_log()] starting thread (client mode): 0xd3135cc0
2025-11-17T14:31:19.115 [DEBUG] [Thread-55937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:31:19.136 [DEBUG] [Thread-55937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:31:19.136 [INFO] [Thread-55937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:31:19.139 [DEBUG] [Thread-55937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:31:19.139 [DEBUG] [Thread-55937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:31:19.139 [DEBUG] [Thread-55937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:31:19.139 [DEBUG] [Thread-55937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:31:19.139 [DEBUG] [Thread-55937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] client lang: <none>
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] server lang: <none>
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] kex follows: False
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:31:19.140 [DEBUG] [Thread-55937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:31:19.141 [DEBUG] [Thread-55937] [transport.py] [_log()] Compression: none
2025-11-17T14:31:19.141 [DEBUG] [Thread-55937] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:31:19.158 [DEBUG] [Thread-55937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:31:19.158 [DEBUG] [Thread-55937] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:31:19.159 [DEBUG] [Thread-55937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:31:19.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:31:19.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:31:19.161 [DEBUG] [Thread-55937] [transport.py] [_log()] userauth is OK
2025-11-17T14:31:19.161 [DEBUG] [Thread-55937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:31:19.161 [DEBUG] [Thread-55937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:31:19.161 [DEBUG] [Thread-55937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:31:19.161 [DEBUG] [Thread-55937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:31:19.178 [INFO] [Thread-55937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:31:19.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:31:19.976 [DEBUG] [Thread-55937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:31:19.976 [DEBUG] [Thread-55937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:31:19.976 [DEBUG] [Thread-55937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:31:20.017 [DEBUG] [Thread-55937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:31:20.017 [DEBUG] [Thread-55937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:31:20.020 [DEBUG] [Thread-55937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:31:20.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:31:20.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:31:20.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:31:20.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:31:20.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:31:20.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:31:20.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:31:20.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:31:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:31:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.521228 -999.00  +23.00  11.24     18   -2.50 1 1 1 1 1   888    0 26.97 25.61 ----- 11.2 11.2 311.4 12.4 30.3 -26.1 29.6 -26.2 30.7 -23.2 31.1 -23.8
2025-11-17T14:31:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:31:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:31:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.521228
2025-11-17T14:31:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:31:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:31:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:31:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:31:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:31:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:30:44', tmtdew=30.23, humidity=12.77, cloud=0.0, wind=5.47, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:30:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:31:20.042 [DEBUG] [Thread-55937] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:31:20.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:31:20.136 [DEBUG] [Thread-55940] [transport.py] [_log()] starting thread (client mode): 0xd078db10
2025-11-17T14:31:20.136 [DEBUG] [Thread-55940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:31:20.152 [DEBUG] [Thread-55940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:31:20.152 [INFO] [Thread-55940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:31:20.159 [DEBUG] [Thread-55940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] client lang: <none>
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] server lang: <none>
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] kex follows: False
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:31:20.160 [DEBUG] [Thread-55940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:31:20.161 [DEBUG] [Thread-55940] [transport.py] [_log()] Compression: none
2025-11-17T14:31:20.161 [DEBUG] [Thread-55940] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:31:20.219 [DEBUG] [Thread-55940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:31:20.220 [DEBUG] [Thread-55940] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:31:20.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:31:20.221 [DEBUG] [Thread-55940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:31:20.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:31:20.287 [DEBUG] [Thread-55940] [transport.py] [_log()] userauth is OK
2025-11-17T14:31:20.287 [DEBUG] [Thread-55940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:31:20.288 [DEBUG] [Thread-55940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:31:20.288 [DEBUG] [Thread-55940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:31:20.288 [DEBUG] [Thread-55940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:31:20.307 [INFO] [Thread-55940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:31:20.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:31:20.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:31:21.184 [DEBUG] [Thread-55940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:31:21.184 [DEBUG] [Thread-55940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:31:21.232 [DEBUG] [Thread-55940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:31:21.233 [DEBUG] [Thread-55940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:31:21.245 [DEBUG] [Thread-55940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:31:21.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:31:21.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:31:21.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:31:21.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:31:21.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:31:21.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:31:21.280 [DEBUG] [Thread-55940] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:31:26.505 [DEBUG] [Thread-55942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:31:41.543 [DEBUG] [Thread-55943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:31:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:31:51.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:31:51.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:31:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 31, 48), 29.92, 12.9, 0.0, 11.77, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:31:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:31:48
2025-11-17T14:31:52.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:31:52.225 [DEBUG] [Thread-55944] [transport.py] [_log()] starting thread (client mode): 0xd0785fc0
2025-11-17T14:31:52.225 [DEBUG] [Thread-55944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:31:52.245 [DEBUG] [Thread-55944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:31:52.245 [INFO] [Thread-55944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:31:52.248 [DEBUG] [Thread-55944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:31:52.248 [DEBUG] [Thread-55944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] client lang: <none>
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] server lang: <none>
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] kex follows: False
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] Compression: none
2025-11-17T14:31:52.249 [DEBUG] [Thread-55944] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:31:52.267 [DEBUG] [Thread-55944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:31:52.267 [DEBUG] [Thread-55944] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:31:52.268 [DEBUG] [Thread-55944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:31:52.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:31:52.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:31:52.270 [DEBUG] [Thread-55944] [transport.py] [_log()] userauth is OK
2025-11-17T14:31:52.270 [DEBUG] [Thread-55944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:31:52.270 [DEBUG] [Thread-55944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:31:52.270 [DEBUG] [Thread-55944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:31:52.270 [DEBUG] [Thread-55944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:31:52.294 [INFO] [Thread-55944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:31:52.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:31:52.924 [DEBUG] [Thread-55944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:31:52.924 [DEBUG] [Thread-55944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:31:52.924 [DEBUG] [Thread-55944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:31:52.965 [DEBUG] [Thread-55944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:31:52.966 [DEBUG] [Thread-55944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:31:52.969 [DEBUG] [Thread-55944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:31:52.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:31:52.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:31:52.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:31:52.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:31:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:31:52.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:31:52.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:31:52.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:31:52.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:31:52.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.521575 -999.00  +22.80   7.14     18   -2.40 1 1 1 1 1   888    0 27.06 19.11 ----- 7.1 7.1 23.9 9.2 30.4 -25.4 29.8 -25.8 30.5 -28.7 31.3 -23.5
2025-11-17T14:31:52.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:31:52.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:31:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.521575
2025-11-17T14:31:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:31:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:31:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:31:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:31:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:31:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:31:48', tmtdew=29.92, humidity=12.9, cloud=0.0, wind=11.77, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:31:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:31:52.993 [DEBUG] [Thread-55944] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:31:53.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:31:53.094 [DEBUG] [Thread-55947] [transport.py] [_log()] starting thread (client mode): 0xd31b3220
2025-11-17T14:31:53.094 [DEBUG] [Thread-55947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:31:53.109 [DEBUG] [Thread-55947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:31:53.110 [INFO] [Thread-55947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:31:53.117 [DEBUG] [Thread-55947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:31:53.117 [DEBUG] [Thread-55947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:31:53.117 [DEBUG] [Thread-55947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] client lang: <none>
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] server lang: <none>
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] kex follows: False
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:31:53.118 [DEBUG] [Thread-55947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:31:53.119 [DEBUG] [Thread-55947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:31:53.119 [DEBUG] [Thread-55947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:31:53.119 [DEBUG] [Thread-55947] [transport.py] [_log()] Compression: none
2025-11-17T14:31:53.119 [DEBUG] [Thread-55947] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:31:53.175 [DEBUG] [Thread-55947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:31:53.176 [DEBUG] [Thread-55947] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:31:53.176 [DEBUG] [Thread-55947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:31:53.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:31:53.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:31:53.231 [DEBUG] [Thread-55947] [transport.py] [_log()] userauth is OK
2025-11-17T14:31:53.231 [DEBUG] [Thread-55947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:31:53.231 [DEBUG] [Thread-55947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:31:53.232 [DEBUG] [Thread-55947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:31:53.232 [DEBUG] [Thread-55947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:31:53.251 [INFO] [Thread-55947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:31:53.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:31:53.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:31:54.104 [DEBUG] [Thread-55947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:31:54.104 [DEBUG] [Thread-55947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:31:54.152 [DEBUG] [Thread-55947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:31:54.152 [DEBUG] [Thread-55947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:31:54.161 [DEBUG] [Thread-55947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:31:54.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:31:54.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:31:54.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:31:54.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:31:54.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:31:54.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:31:54.197 [DEBUG] [Thread-55947] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:31:56.570 [DEBUG] [Thread-55949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:32:00.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:32:00.647 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:32:11.614 [DEBUG] [Thread-55950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:32:15.940 [DEBUG] [Thread-55951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:32:24.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:32:24.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:32:24.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:32:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 32, 20), 30.03, 12.82, 0.0, 19.5, 23.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:32:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:32:20
2025-11-17T14:32:24.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:32:25.146 [DEBUG] [Thread-55952] [transport.py] [_log()] starting thread (client mode): 0xd0784f10
2025-11-17T14:32:25.146 [DEBUG] [Thread-55952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:32:25.167 [DEBUG] [Thread-55952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:32:25.167 [INFO] [Thread-55952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:32:25.170 [DEBUG] [Thread-55952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:32:25.170 [DEBUG] [Thread-55952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:32:25.171 [DEBUG] [Thread-55952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:32:25.171 [DEBUG] [Thread-55952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:32:25.171 [DEBUG] [Thread-55952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:32:25.171 [DEBUG] [Thread-55952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:32:25.171 [DEBUG] [Thread-55952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:32:25.171 [DEBUG] [Thread-55952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:32:25.171 [DEBUG] [Thread-55952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] client lang: <none>
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] server lang: <none>
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] kex follows: False
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] Compression: none
2025-11-17T14:32:25.172 [DEBUG] [Thread-55952] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:32:25.195 [DEBUG] [Thread-55952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:32:25.195 [DEBUG] [Thread-55952] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:32:25.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:32:25.196 [DEBUG] [Thread-55952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:32:25.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:32:25.199 [DEBUG] [Thread-55952] [transport.py] [_log()] userauth is OK
2025-11-17T14:32:25.199 [DEBUG] [Thread-55952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:32:25.199 [DEBUG] [Thread-55952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:32:25.199 [DEBUG] [Thread-55952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:32:25.199 [DEBUG] [Thread-55952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:32:25.223 [INFO] [Thread-55952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:32:25.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:32:26.008 [DEBUG] [Thread-55952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:32:26.009 [DEBUG] [Thread-55952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:32:26.009 [DEBUG] [Thread-55952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:32:26.049 [DEBUG] [Thread-55952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:32:26.049 [DEBUG] [Thread-55952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:32:26.053 [DEBUG] [Thread-55952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:32:26.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:32:26.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:32:26.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:32:26.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:32:26.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:32:26.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:32:26.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:32:26.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:32:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:32:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.521922 -999.00  +22.90   6.20     18   -2.30 1 1 1 1 1   888    0 26.28 9.63 ----- 6.2 6.2 19.2 8.7 30.0 -31.0 29.5 -29.5 30.0 -27.6 30.8 -30.0
2025-11-17T14:32:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:32:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:32:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.521922
2025-11-17T14:32:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:32:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:32:26.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:32:26.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:32:26.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:32:26.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:32:20', tmtdew=30.03, humidity=12.82, cloud=0.0, wind=19.5, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:31:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:32:26.075 [DEBUG] [Thread-55952] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:32:26.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:32:26.171 [DEBUG] [Thread-55955] [transport.py] [_log()] starting thread (client mode): 0xd070e590
2025-11-17T14:32:26.171 [DEBUG] [Thread-55955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:32:26.189 [DEBUG] [Thread-55955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:32:26.189 [INFO] [Thread-55955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:32:26.196 [DEBUG] [Thread-55955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:32:26.197 [DEBUG] [Thread-55955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:32:26.197 [DEBUG] [Thread-55955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:32:26.197 [DEBUG] [Thread-55955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:32:26.197 [DEBUG] [Thread-55955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:32:26.197 [DEBUG] [Thread-55955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:32:26.197 [DEBUG] [Thread-55955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:32:26.197 [DEBUG] [Thread-55955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:32:26.197 [DEBUG] [Thread-55955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:32:26.198 [DEBUG] [Thread-55955] [transport.py] [_log()] client lang: <none>
2025-11-17T14:32:26.198 [DEBUG] [Thread-55955] [transport.py] [_log()] server lang: <none>
2025-11-17T14:32:26.198 [DEBUG] [Thread-55955] [transport.py] [_log()] kex follows: False
2025-11-17T14:32:26.198 [DEBUG] [Thread-55955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:32:26.198 [DEBUG] [Thread-55955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:32:26.198 [DEBUG] [Thread-55955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:32:26.198 [DEBUG] [Thread-55955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:32:26.198 [DEBUG] [Thread-55955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:32:26.199 [DEBUG] [Thread-55955] [transport.py] [_log()] Compression: none
2025-11-17T14:32:26.199 [DEBUG] [Thread-55955] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:32:26.258 [DEBUG] [Thread-55955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:32:26.259 [DEBUG] [Thread-55955] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:32:26.259 [DEBUG] [Thread-55955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:32:26.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:32:26.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:32:26.315 [DEBUG] [Thread-55955] [transport.py] [_log()] userauth is OK
2025-11-17T14:32:26.315 [DEBUG] [Thread-55955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:32:26.315 [DEBUG] [Thread-55955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:32:26.315 [DEBUG] [Thread-55955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:32:26.315 [DEBUG] [Thread-55955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:32:26.336 [INFO] [Thread-55955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:32:26.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:32:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:32:26.646 [DEBUG] [Thread-55957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:32:27.223 [DEBUG] [Thread-55955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:32:27.223 [DEBUG] [Thread-55955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:32:27.273 [DEBUG] [Thread-55955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:32:27.273 [DEBUG] [Thread-55955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:32:27.282 [DEBUG] [Thread-55955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:32:27.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:32:27.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:32:27.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:32:27.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:32:27.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:32:27.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:32:27.323 [DEBUG] [Thread-55955] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:32:41.684 [DEBUG] [Thread-55958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:32:56.717 [DEBUG] [Thread-55959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:32:57.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:32:57.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:32:57.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:32:58.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 32, 52), 29.82, 12.84, 0.0, 13.83, 22.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:32:58.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:32:52
2025-11-17T14:32:58.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:32:58.296 [DEBUG] [Thread-55960] [transport.py] [_log()] starting thread (client mode): 0xd070ffa0
2025-11-17T14:32:58.296 [DEBUG] [Thread-55960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:32:58.316 [DEBUG] [Thread-55960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:32:58.316 [INFO] [Thread-55960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] client lang: <none>
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] server lang: <none>
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] kex follows: False
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:32:58.319 [DEBUG] [Thread-55960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:32:58.320 [DEBUG] [Thread-55960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:32:58.320 [DEBUG] [Thread-55960] [transport.py] [_log()] Compression: none
2025-11-17T14:32:58.320 [DEBUG] [Thread-55960] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:32:58.335 [DEBUG] [Thread-55960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:32:58.335 [DEBUG] [Thread-55960] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:32:58.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:32:58.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:32:58.336 [DEBUG] [Thread-55960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:32:58.336 [DEBUG] [Thread-55960] [transport.py] [_log()] userauth is OK
2025-11-17T14:32:58.336 [DEBUG] [Thread-55960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:32:58.336 [DEBUG] [Thread-55960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:32:58.336 [DEBUG] [Thread-55960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:32:58.336 [DEBUG] [Thread-55960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:32:58.356 [INFO] [Thread-55960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:32:58.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:32:58.995 [DEBUG] [Thread-55960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:32:58.995 [DEBUG] [Thread-55960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:32:58.995 [DEBUG] [Thread-55960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:32:59.036 [DEBUG] [Thread-55960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:32:59.036 [DEBUG] [Thread-55960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:32:59.039 [DEBUG] [Thread-55960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:32:59.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:32:59.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:32:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:32:59.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:32:59.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:32:59.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:32:59.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.522269 -999.00  +22.90  13.51     18   -2.30 1 1 1 1 1   888    0 26.02 4.06 ----- 13.5 13.5 311.2 18.0 29.8 -30.2 29.4 -30.5 29.7 -29.4 30.6 -29.8
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.522269
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:32:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:32:59.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:32:59.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:32:59.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:32:52', tmtdew=29.82, humidity=12.84, cloud=0.0, wind=13.83, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:32:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:32:59.059 [DEBUG] [Thread-55960] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:32:59.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:32:59.146 [DEBUG] [Thread-55963] [transport.py] [_log()] starting thread (client mode): 0xd0786530
2025-11-17T14:32:59.146 [DEBUG] [Thread-55963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:32:59.162 [DEBUG] [Thread-55963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:32:59.162 [INFO] [Thread-55963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] client lang: <none>
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] server lang: <none>
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] kex follows: False
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:32:59.169 [DEBUG] [Thread-55963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:32:59.170 [DEBUG] [Thread-55963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:32:59.170 [DEBUG] [Thread-55963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:32:59.170 [DEBUG] [Thread-55963] [transport.py] [_log()] Compression: none
2025-11-17T14:32:59.170 [DEBUG] [Thread-55963] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:32:59.226 [DEBUG] [Thread-55963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:32:59.226 [DEBUG] [Thread-55963] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:32:59.226 [DEBUG] [Thread-55963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:32:59.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:32:59.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:32:59.283 [DEBUG] [Thread-55963] [transport.py] [_log()] userauth is OK
2025-11-17T14:32:59.283 [DEBUG] [Thread-55963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:32:59.283 [DEBUG] [Thread-55963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:32:59.283 [DEBUG] [Thread-55963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:32:59.283 [DEBUG] [Thread-55963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:32:59.301 [INFO] [Thread-55963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:32:59.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:32:59.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:33:00.179 [DEBUG] [Thread-55963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:33:00.179 [DEBUG] [Thread-55963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:33:00.227 [DEBUG] [Thread-55963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:33:00.227 [DEBUG] [Thread-55963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:33:00.235 [DEBUG] [Thread-55963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:33:00.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:33:00.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:33:00.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:33:00.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:33:00.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:33:00.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:33:00.267 [DEBUG] [Thread-55963] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:33:00.796 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:33:00.797 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:33:11.742 [DEBUG] [Thread-55965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:33:15.973 [DEBUG] [Thread-55966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:33:26.785 [DEBUG] [Thread-55967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:33:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:33:30.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:33: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
2025-11-17T14:33:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 33, 24), 29.65, 12.99, 0.0, 15.01, 22.53, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:33:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:33:24
2025-11-17T14:33:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:33:31.208 [DEBUG] [Thread-55968] [transport.py] [_log()] starting thread (client mode): 0xd0720b50
2025-11-17T14:33:31.209 [DEBUG] [Thread-55968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:33:31.229 [DEBUG] [Thread-55968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:33:31.229 [INFO] [Thread-55968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:33:31.232 [DEBUG] [Thread-55968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] client lang: <none>
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] server lang: <none>
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] kex follows: False
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] Compression: none
2025-11-17T14:33:31.233 [DEBUG] [Thread-55968] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:33:31.249 [DEBUG] [Thread-55968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:33:31.250 [DEBUG] [Thread-55968] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:33:31.250 [DEBUG] [Thread-55968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:33:31.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:33:31.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:33:31.252 [DEBUG] [Thread-55968] [transport.py] [_log()] userauth is OK
2025-11-17T14:33:31.252 [DEBUG] [Thread-55968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:33:31.252 [DEBUG] [Thread-55968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:33:31.252 [DEBUG] [Thread-55968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:33:31.252 [DEBUG] [Thread-55968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:33:31.285 [INFO] [Thread-55968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:33:31.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:33:32.063 [DEBUG] [Thread-55968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:33:32.063 [DEBUG] [Thread-55968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:33:32.064 [DEBUG] [Thread-55968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:33:32.104 [DEBUG] [Thread-55968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:33:32.104 [DEBUG] [Thread-55968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:33:32.107 [DEBUG] [Thread-55968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:33:32.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:33:32.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:33:32.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:33:32.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:33:32.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:33:32.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:33:32.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:33:32.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:33:32.139 [DEBUG] [Thread-55968] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:33:32.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:33:32.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.522616 -999.00  +22.50   7.89     18   -2.40 1 1 1 1 1   888    0 25.74 -1.19 ----- 7.9 7.9 322.6 15.2 29.5 -30.1 29.1 -28.7 29.6 -27.5 30.2 -28.6
2025-11-17T14:33:32.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:33:32.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:33:32.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.522616
2025-11-17T14:33:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:33:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:33:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:33:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:33:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:33:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:33:24', tmtdew=29.65, humidity=12.99, cloud=0.0, wind=15.01, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:32:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:33:32.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:33:32.236 [DEBUG] [Thread-55971] [transport.py] [_log()] starting thread (client mode): 0xd31b1f00
2025-11-17T14:33:32.236 [DEBUG] [Thread-55971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:33:32.252 [DEBUG] [Thread-55971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:33:32.252 [INFO] [Thread-55971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:33:32.259 [DEBUG] [Thread-55971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:33:32.259 [DEBUG] [Thread-55971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] client lang: <none>
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] server lang: <none>
2025-11-17T14:33:32.260 [DEBUG] [Thread-55971] [transport.py] [_log()] kex follows: False
2025-11-17T14:33:32.261 [DEBUG] [Thread-55971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:33:32.261 [DEBUG] [Thread-55971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:33:32.261 [DEBUG] [Thread-55971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:33:32.261 [DEBUG] [Thread-55971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:33:32.261 [DEBUG] [Thread-55971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:33:32.261 [DEBUG] [Thread-55971] [transport.py] [_log()] Compression: none
2025-11-17T14:33:32.261 [DEBUG] [Thread-55971] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:33:32.319 [DEBUG] [Thread-55971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:33:32.320 [DEBUG] [Thread-55971] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:33:32.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:33:32.321 [DEBUG] [Thread-55971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:33:32.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:33:32.375 [DEBUG] [Thread-55971] [transport.py] [_log()] userauth is OK
2025-11-17T14:33:32.375 [DEBUG] [Thread-55971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:33:32.375 [DEBUG] [Thread-55971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:33:32.375 [DEBUG] [Thread-55971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:33:32.375 [DEBUG] [Thread-55971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:33:32.397 [INFO] [Thread-55971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:33:32.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:33:32.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:33:33.256 [DEBUG] [Thread-55971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:33:33.256 [DEBUG] [Thread-55971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:33:33.304 [DEBUG] [Thread-55971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:33:33.304 [DEBUG] [Thread-55971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:33:33.313 [DEBUG] [Thread-55971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:33:33.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:33:33.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:33:33.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:33:33.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:33:33.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:33:33.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:33:33.348 [DEBUG] [Thread-55971] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:33:41.815 [DEBUG] [Thread-55973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:33:56.853 [DEBUG] [Thread-55974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:34:00.939 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:34:00.940 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:34:03.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:34:03.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:34:04.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 33, 56), 29.77, 12.87, 0.0, 14.63, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:34:04.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:33:56
2025-11-17T14:34:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:34:04.274 [DEBUG] [Thread-55975] [transport.py] [_log()] starting thread (client mode): 0xd3163a30
2025-11-17T14:34:04.274 [DEBUG] [Thread-55975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:34:04.295 [DEBUG] [Thread-55975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:34:04.295 [INFO] [Thread-55975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:34:04.298 [DEBUG] [Thread-55975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:34:04.298 [DEBUG] [Thread-55975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:34:04.298 [DEBUG] [Thread-55975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:34:04.298 [DEBUG] [Thread-55975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:34:04.298 [DEBUG] [Thread-55975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:34:04.298 [DEBUG] [Thread-55975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:34:04.298 [DEBUG] [Thread-55975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] client lang: <none>
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] server lang: <none>
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] kex follows: False
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] Compression: none
2025-11-17T14:34:04.299 [DEBUG] [Thread-55975] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:34:04.308 [DEBUG] [Thread-55975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:34:04.308 [DEBUG] [Thread-55975] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:34:04.309 [DEBUG] [Thread-55975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:34:04.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:34:04.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:34:04.311 [DEBUG] [Thread-55975] [transport.py] [_log()] userauth is OK
2025-11-17T14:34:04.311 [DEBUG] [Thread-55975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:34:04.311 [DEBUG] [Thread-55975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:34:04.311 [DEBUG] [Thread-55975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:34:04.311 [DEBUG] [Thread-55975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:34:04.337 [INFO] [Thread-55975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:34:04.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:34:04.988 [DEBUG] [Thread-55975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:34:04.988 [DEBUG] [Thread-55975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:34:04.989 [DEBUG] [Thread-55975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:34:05.029 [DEBUG] [Thread-55975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:34:05.030 [DEBUG] [Thread-55975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:34:05.033 [DEBUG] [Thread-55975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:34:05.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:34:05.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:34:05.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:34:05.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:34:05.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:34:05.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:34:05.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:34:05.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:34:05.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:34:05.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.522964 -999.00  +22.80  12.22     18   -2.10 1 1 1 1 1   888    0 25.98 -6.13 ----- 12.2 12.2 44.7 17.4 29.4 -29.5 29.0 -28.6 29.4 -28.4 30.0 -28.4
2025-11-17T14:34:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:34:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:34:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.522964
2025-11-17T14:34:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:34:05.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:34:05.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:34:05.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:34:05.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:34:05.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:33:56', tmtdew=29.77, humidity=12.87, cloud=0.0, wind=14.63, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:33:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:34:05.059 [DEBUG] [Thread-55975] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:34:05.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:34:05.153 [DEBUG] [Thread-55978] [transport.py] [_log()] starting thread (client mode): 0xd3163880
2025-11-17T14:34:05.153 [DEBUG] [Thread-55978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:34:05.170 [DEBUG] [Thread-55978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:34:05.170 [INFO] [Thread-55978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] client lang: <none>
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] server lang: <none>
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] kex follows: False
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:34:05.178 [DEBUG] [Thread-55978] [transport.py] [_log()] Compression: none
2025-11-17T14:34:05.179 [DEBUG] [Thread-55978] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:34:05.235 [DEBUG] [Thread-55978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:34:05.235 [DEBUG] [Thread-55978] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:34:05.236 [DEBUG] [Thread-55978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:34:05.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:34:05.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:34:05.292 [DEBUG] [Thread-55978] [transport.py] [_log()] userauth is OK
2025-11-17T14:34:05.292 [DEBUG] [Thread-55978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:34:05.292 [DEBUG] [Thread-55978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:34:05.292 [DEBUG] [Thread-55978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:34:05.292 [DEBUG] [Thread-55978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:34:05.312 [INFO] [Thread-55978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:34:05.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:34:05.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:34:06.538 [DEBUG] [Thread-55978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:34:06.538 [DEBUG] [Thread-55978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:34:06.586 [DEBUG] [Thread-55978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:34:06.586 [DEBUG] [Thread-55978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:34:06.595 [DEBUG] [Thread-55978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:34:06.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:34:06.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:34:06.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:34:06.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:34:06.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:34:06.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:34:06.631 [DEBUG] [Thread-55978] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:34:11.883 [DEBUG] [Thread-55980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:34:16.002 [DEBUG] [Thread-55981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:34:26.931 [DEBUG] [Thread-55982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:34:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:34:36.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:34:36.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:34:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 34, 28), 29.94, 12.74, 0.0, 17.26, 22.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:34:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:34:28
2025-11-17T14:34:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:34:37.587 [DEBUG] [Thread-55983] [transport.py] [_log()] starting thread (client mode): 0xd3160850
2025-11-17T14:34:37.587 [DEBUG] [Thread-55983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:34:37.608 [DEBUG] [Thread-55983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:34:37.608 [INFO] [Thread-55983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] client lang: <none>
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] server lang: <none>
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] kex follows: False
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] Compression: none
2025-11-17T14:34:37.611 [DEBUG] [Thread-55983] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:34:37.627 [DEBUG] [Thread-55983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:34:37.627 [DEBUG] [Thread-55983] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:34:37.627 [DEBUG] [Thread-55983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:34:37.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:34:37.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:34:37.628 [DEBUG] [Thread-55983] [transport.py] [_log()] userauth is OK
2025-11-17T14:34:37.628 [DEBUG] [Thread-55983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:34:37.628 [DEBUG] [Thread-55983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:34:37.628 [DEBUG] [Thread-55983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:34:37.628 [DEBUG] [Thread-55983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:34:37.644 [INFO] [Thread-55983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:34:37.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:34:38.384 [DEBUG] [Thread-55983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:34:38.384 [DEBUG] [Thread-55983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:34:38.385 [DEBUG] [Thread-55983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:34:38.425 [DEBUG] [Thread-55983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:34:38.425 [DEBUG] [Thread-55983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:34:38.428 [DEBUG] [Thread-55983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:34:38.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:34:38.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:34:38.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:34:38.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:34:38.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:34:38.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:34:38.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:34:38.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:34:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:34:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.523311 -999.00  +22.80   6.49     18   -2.40 1 1 1 1 1   888    0 26.02 -11.77 ----- 6.5 6.5 0.6 18.5 29.2 -30.0 28.8 -30.1 29.1 -25.4 29.8 -28.8
2025-11-17T14:34:38.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:34:38.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:34:38.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.523311
2025-11-17T14:34:38.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:34:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:34:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:34:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:34:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:34:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:34:28', tmtdew=29.94, humidity=12.74, cloud=0.0, wind=17.26, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:33:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:34:38.453 [DEBUG] [Thread-55983] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:34:38.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:34:38.552 [DEBUG] [Thread-55986] [transport.py] [_log()] starting thread (client mode): 0xd31ef6d0
2025-11-17T14:34:38.552 [DEBUG] [Thread-55986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:34:38.569 [DEBUG] [Thread-55986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:34:38.569 [INFO] [Thread-55986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] client lang: <none>
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] server lang: <none>
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] kex follows: False
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:34:38.577 [DEBUG] [Thread-55986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:34:38.578 [DEBUG] [Thread-55986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:34:38.578 [DEBUG] [Thread-55986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:34:38.578 [DEBUG] [Thread-55986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:34:38.578 [DEBUG] [Thread-55986] [transport.py] [_log()] Compression: none
2025-11-17T14:34:38.578 [DEBUG] [Thread-55986] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:34:38.634 [DEBUG] [Thread-55986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:34:38.635 [DEBUG] [Thread-55986] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:34:38.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:34:38.636 [DEBUG] [Thread-55986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:34:38.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:34:38.691 [DEBUG] [Thread-55986] [transport.py] [_log()] userauth is OK
2025-11-17T14:34:38.691 [DEBUG] [Thread-55986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:34:38.691 [DEBUG] [Thread-55986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:34:38.691 [DEBUG] [Thread-55986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:34:38.692 [DEBUG] [Thread-55986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:34:38.711 [INFO] [Thread-55986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:34:38.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:34:38.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:34:40.055 [DEBUG] [Thread-55986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:34:40.055 [DEBUG] [Thread-55986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:34:40.103 [DEBUG] [Thread-55986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:34:40.103 [DEBUG] [Thread-55986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:34:40.112 [DEBUG] [Thread-55986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:34:40.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:34:40.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:34:40.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:34:40.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:34:40.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:34:40.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:34:40.147 [DEBUG] [Thread-55986] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:34:41.961 [DEBUG] [Thread-55988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:34:57.004 [DEBUG] [Thread-55989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:35:01.081 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:35:01.082 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:35:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:35:10.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:35:10.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:35:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 35), 30.22, 12.71, 0.0, 14.88, 22.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:35:10.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:35:00
2025-11-17T14:35:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:35:11.108 [DEBUG] [Thread-55990] [transport.py] [_log()] starting thread (client mode): 0xd07870d0
2025-11-17T14:35:11.108 [DEBUG] [Thread-55990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:35:11.128 [DEBUG] [Thread-55990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:35:11.128 [INFO] [Thread-55990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:35:11.131 [DEBUG] [Thread-55990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] client lang: <none>
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] server lang: <none>
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] kex follows: False
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] Compression: none
2025-11-17T14:35:11.132 [DEBUG] [Thread-55990] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:35:11.149 [DEBUG] [Thread-55990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:35:11.150 [DEBUG] [Thread-55990] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:35:11.150 [DEBUG] [Thread-55990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:35:11.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:35:11.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:35:11.152 [DEBUG] [Thread-55990] [transport.py] [_log()] userauth is OK
2025-11-17T14:35:11.152 [DEBUG] [Thread-55990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:35:11.152 [DEBUG] [Thread-55990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:35:11.153 [DEBUG] [Thread-55990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:35:11.153 [DEBUG] [Thread-55990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:35:11.174 [INFO] [Thread-55990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:35:11.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:35:12.039 [DEBUG] [Thread-55992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:35:12.080 [DEBUG] [Thread-55990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:35:12.080 [DEBUG] [Thread-55990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:35:12.080 [DEBUG] [Thread-55990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:35:12.121 [DEBUG] [Thread-55990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:35:12.122 [DEBUG] [Thread-55990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:35:12.124 [DEBUG] [Thread-55990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:35:12.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:35:12.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:35:12.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:35:12.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:35:12.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:35:12.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:35:12.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:35:12.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:35:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:35:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.523658 -999.00  +22.80  11.61     18   -2.20 1 2 1 1 1   888    0 25.39 -19.35 ----- 11.6 11.6 9.8 16.5 29.3 -24.3 28.9 -23.9 29.6 -20.0 29.8 -21.5
2025-11-17T14:35:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:35:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:35:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.523658
2025-11-17T14:35:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:35:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:35:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:35:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:35:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:35:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:35:00', tmtdew=30.22, humidity=12.71, cloud=0.0, wind=14.88, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:34:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:35:12.145 [DEBUG] [Thread-55990] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:35:12.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:35:12.243 [DEBUG] [Thread-55994] [transport.py] [_log()] starting thread (client mode): 0xd31b3b50
2025-11-17T14:35:12.243 [DEBUG] [Thread-55994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:35:12.261 [DEBUG] [Thread-55994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:35:12.261 [INFO] [Thread-55994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:35:12.268 [DEBUG] [Thread-55994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:35:12.268 [DEBUG] [Thread-55994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] client lang: <none>
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] server lang: <none>
2025-11-17T14:35:12.269 [DEBUG] [Thread-55994] [transport.py] [_log()] kex follows: False
2025-11-17T14:35:12.270 [DEBUG] [Thread-55994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:35:12.270 [DEBUG] [Thread-55994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:35:12.270 [DEBUG] [Thread-55994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:35:12.270 [DEBUG] [Thread-55994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:35:12.270 [DEBUG] [Thread-55994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:35:12.270 [DEBUG] [Thread-55994] [transport.py] [_log()] Compression: none
2025-11-17T14:35:12.270 [DEBUG] [Thread-55994] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:35:12.327 [DEBUG] [Thread-55994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:35:12.328 [DEBUG] [Thread-55994] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:35:12.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:35:12.329 [DEBUG] [Thread-55994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:35:12.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:35:12.387 [DEBUG] [Thread-55994] [transport.py] [_log()] userauth is OK
2025-11-17T14:35:12.387 [DEBUG] [Thread-55994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:35:12.387 [DEBUG] [Thread-55994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:35:12.388 [DEBUG] [Thread-55994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:35:12.388 [DEBUG] [Thread-55994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:35:12.411 [INFO] [Thread-55994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:35:12.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:35:12.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:35:13.527 [DEBUG] [Thread-55994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:35:13.527 [DEBUG] [Thread-55994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:35:13.577 [DEBUG] [Thread-55994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:35:13.578 [DEBUG] [Thread-55994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:35:13.589 [DEBUG] [Thread-55994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:35:13.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:35:13.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:35:13.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:35:13.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:35:13.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:35:13.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:35:13.625 [DEBUG] [Thread-55994] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:35:16.036 [DEBUG] [Thread-55996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:35:27.067 [DEBUG] [Thread-55997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:35:42.102 [DEBUG] [Thread-55998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:35:43.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:35:43.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:35:43.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:35:44.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 35, 32), 30.11, 12.84, 0.0, 15.25, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:35:44.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:35:32
2025-11-17T14:35:44.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:35:44.589 [DEBUG] [Thread-55999] [transport.py] [_log()] starting thread (client mode): 0xd3160b80
2025-11-17T14:35:44.589 [DEBUG] [Thread-55999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:35:44.610 [DEBUG] [Thread-55999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:35:44.611 [INFO] [Thread-55999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:35:44.611 [DEBUG] [Thread-55999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:35:44.611 [DEBUG] [Thread-55999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:35:44.611 [DEBUG] [Thread-55999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] client lang: <none>
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] server lang: <none>
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] kex follows: False
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] Compression: none
2025-11-17T14:35:44.612 [DEBUG] [Thread-55999] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:35:44.631 [DEBUG] [Thread-55999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:35:44.631 [DEBUG] [Thread-55999] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:35:44.631 [DEBUG] [Thread-55999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:35:44.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:35:44.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:35:44.634 [DEBUG] [Thread-55999] [transport.py] [_log()] userauth is OK
2025-11-17T14:35:44.634 [DEBUG] [Thread-55999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:35:44.634 [DEBUG] [Thread-55999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:35:44.634 [DEBUG] [Thread-55999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:35:44.634 [DEBUG] [Thread-55999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:35:44.669 [INFO] [Thread-55999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:35:44.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:35:45.282 [DEBUG] [Thread-55999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:35:45.282 [DEBUG] [Thread-55999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:35:45.282 [DEBUG] [Thread-55999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:35:45.323 [DEBUG] [Thread-55999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:35:45.323 [DEBUG] [Thread-55999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:35:45.326 [DEBUG] [Thread-55999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:35:45.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:35:45.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:35:45.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:35:45.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:35:45.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:35:45.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:35:45.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:35:45.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:35:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:35:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.524353 -999.00  +23.90  15.06     18   -1.70 1 2 1 1 1   888    0 24.74 -35.53 ----- 15.1 15.1 323.4 24.3 29.8 -22.9 29.4 -22.5 30.2 -20.9 30.4 -20.7
2025-11-17T14:35:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:35:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:35:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.524353
2025-11-17T14:35:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:35:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:35:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:35:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:35:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:35:45.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:35:32', tmtdew=30.11, humidity=12.84, cloud=0.0, wind=15.25, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:35:04.099', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:35:45.346 [DEBUG] [Thread-55999] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:35:45.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:35:45.442 [DEBUG] [Thread-56002] [transport.py] [_log()] starting thread (client mode): 0xd31b02e0
2025-11-17T14:35:45.442 [DEBUG] [Thread-56002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:35:45.460 [DEBUG] [Thread-56002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:35:45.460 [INFO] [Thread-56002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:35:45.467 [DEBUG] [Thread-56002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:35:45.467 [DEBUG] [Thread-56002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] client lang: <none>
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] server lang: <none>
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] kex follows: False
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:35:45.468 [DEBUG] [Thread-56002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:35:45.469 [DEBUG] [Thread-56002] [transport.py] [_log()] Compression: none
2025-11-17T14:35:45.469 [DEBUG] [Thread-56002] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:35:45.526 [DEBUG] [Thread-56002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:35:45.527 [DEBUG] [Thread-56002] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:35:45.527 [DEBUG] [Thread-56002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:35:45.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:35:45.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:35:45.583 [DEBUG] [Thread-56002] [transport.py] [_log()] userauth is OK
2025-11-17T14:35:45.583 [DEBUG] [Thread-56002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:35:45.583 [DEBUG] [Thread-56002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:35:45.583 [DEBUG] [Thread-56002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:35:45.583 [DEBUG] [Thread-56002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:35:45.602 [INFO] [Thread-56002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:35:45.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:35:45.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:35:47.109 [DEBUG] [Thread-56002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:35:47.109 [DEBUG] [Thread-56002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:35:47.157 [DEBUG] [Thread-56002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:35:47.157 [DEBUG] [Thread-56002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:35:47.166 [DEBUG] [Thread-56002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:35:47.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:35: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')
2025-11-17T14:35:47.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:35:47.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:35:47.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:35:47.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:35:47.209 [DEBUG] [Thread-56002] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:35:57.138 [DEBUG] [Thread-56004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:36:01.225 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:36:01.227 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:36:12.188 [DEBUG] [Thread-56005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:36:16.072 [DEBUG] [Thread-56006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:36:17.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:36:17.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:36:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:36:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 36, 4), 30.53, 12.49, 0.0, 17.64, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:36:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:36:04
2025-11-17T14:36:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:36:18.149 [DEBUG] [Thread-56007] [transport.py] [_log()] starting thread (client mode): 0xd31b17b0
2025-11-17T14:36:18.149 [DEBUG] [Thread-56007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:36:18.169 [DEBUG] [Thread-56007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:36:18.169 [INFO] [Thread-56007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:36:18.172 [DEBUG] [Thread-56007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] client lang: <none>
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] server lang: <none>
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] kex follows: False
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:36:18.173 [DEBUG] [Thread-56007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:36:18.174 [DEBUG] [Thread-56007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:36:18.174 [DEBUG] [Thread-56007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:36:18.174 [DEBUG] [Thread-56007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:36:18.174 [DEBUG] [Thread-56007] [transport.py] [_log()] Compression: none
2025-11-17T14:36:18.174 [DEBUG] [Thread-56007] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:36:18.194 [DEBUG] [Thread-56007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:36:18.195 [DEBUG] [Thread-56007] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:36:18.196 [DEBUG] [Thread-56007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:36:18.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:36:18.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:36:18.198 [DEBUG] [Thread-56007] [transport.py] [_log()] userauth is OK
2025-11-17T14:36:18.198 [DEBUG] [Thread-56007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:36:18.198 [DEBUG] [Thread-56007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:36:18.198 [DEBUG] [Thread-56007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:36:18.198 [DEBUG] [Thread-56007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:36:18.234 [INFO] [Thread-56007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:36:18.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:36:18.846 [DEBUG] [Thread-56007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:36:18.846 [DEBUG] [Thread-56007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:36:18.847 [DEBUG] [Thread-56007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:36:18.887 [DEBUG] [Thread-56007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:36:18.888 [DEBUG] [Thread-56007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:36:18.890 [DEBUG] [Thread-56007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:36:18.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:36:18.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:36:18.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:36:18.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:36:18.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:36:18.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:36:18.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:36:18.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:36:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:36:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.524700 -999.00  +23.60  18.61     17   -2.70 1 1 1 1 1   888    0 25.04 -36.29 ----- 18.6 18.6 18.2 23.6 29.5 -28.5 29.1 -27.5 29.4 -28.1 30.0 -27.2
2025-11-17T14:36:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:36:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:36:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.524700
2025-11-17T14:36:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:36:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:36:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:36:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:36:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:36:18.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:36:04', tmtdew=30.53, humidity=12.49, cloud=0.0, wind=17.64, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:35:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:36:18.918 [DEBUG] [Thread-56007] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:36:19.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:36:19.013 [DEBUG] [Thread-56010] [transport.py] [_log()] starting thread (client mode): 0xd075bd00
2025-11-17T14:36:19.014 [DEBUG] [Thread-56010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:36:19.028 [DEBUG] [Thread-56010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:36:19.028 [INFO] [Thread-56010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:36:19.036 [DEBUG] [Thread-56010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:36:19.036 [DEBUG] [Thread-56010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:36:19.036 [DEBUG] [Thread-56010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:36:19.036 [DEBUG] [Thread-56010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] client lang: <none>
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] server lang: <none>
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] kex follows: False
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:36:19.037 [DEBUG] [Thread-56010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:36:19.038 [DEBUG] [Thread-56010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:36:19.038 [DEBUG] [Thread-56010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:36:19.038 [DEBUG] [Thread-56010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:36:19.038 [DEBUG] [Thread-56010] [transport.py] [_log()] Compression: none
2025-11-17T14:36:19.038 [DEBUG] [Thread-56010] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:36:19.099 [DEBUG] [Thread-56010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:36:19.099 [DEBUG] [Thread-56010] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:36:19.100 [DEBUG] [Thread-56010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:36:19.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:36:19.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:36:19.158 [DEBUG] [Thread-56010] [transport.py] [_log()] userauth is OK
2025-11-17T14:36:19.158 [DEBUG] [Thread-56010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:36:19.158 [DEBUG] [Thread-56010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:36:19.158 [DEBUG] [Thread-56010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:36:19.158 [DEBUG] [Thread-56010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:36:19.179 [INFO] [Thread-56010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:36:19.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:36:19.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:36:20.438 [DEBUG] [Thread-56010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:36:20.439 [DEBUG] [Thread-56010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:36:20.491 [DEBUG] [Thread-56010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:36:20.491 [DEBUG] [Thread-56010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:36:20.501 [DEBUG] [Thread-56010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:36:20.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:36:20.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')
2025-11-17T14:36:20.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:36:20.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:36:20.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:36:20.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:36:20.547 [DEBUG] [Thread-56010] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:36:27.217 [DEBUG] [Thread-56012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:36:42.261 [DEBUG] [Thread-56013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:36:50.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:36:50.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:36: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
2025-11-17T14:36:51.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 36, 36), 31.24, 11.92, 0.0, 17.1, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:36:51.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:36:36
2025-11-17T14:36:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:36:51.549 [DEBUG] [Thread-56014] [transport.py] [_log()] starting thread (client mode): 0xd31b38e0
2025-11-17T14:36:51.549 [DEBUG] [Thread-56014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:36:51.570 [DEBUG] [Thread-56014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:36:51.570 [INFO] [Thread-56014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] client lang: <none>
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] server lang: <none>
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] kex follows: False
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] Compression: none
2025-11-17T14:36:51.573 [DEBUG] [Thread-56014] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:36:51.581 [DEBUG] [Thread-56014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:36:51.582 [DEBUG] [Thread-56014] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:36:51.582 [DEBUG] [Thread-56014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:36:51.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:36:51.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:36:51.583 [DEBUG] [Thread-56014] [transport.py] [_log()] userauth is OK
2025-11-17T14:36:51.583 [DEBUG] [Thread-56014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:36:51.583 [DEBUG] [Thread-56014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:36:51.583 [DEBUG] [Thread-56014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:36:51.583 [DEBUG] [Thread-56014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:36:51.593 [INFO] [Thread-56014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:36:51.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:36:52.162 [DEBUG] [Thread-56014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:36:52.162 [DEBUG] [Thread-56014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:36:52.162 [DEBUG] [Thread-56014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:36:52.203 [DEBUG] [Thread-56014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:36:52.203 [DEBUG] [Thread-56014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:36:52.204 [DEBUG] [Thread-56014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:36:52.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:36:52.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:36:52.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:36:52.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:36:52.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:36:52.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:36:52.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:36:52.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.525047 -999.00  +23.10  19.02     17   -2.80 1 1 1 1 1   888    0 24.55 -36.04 ----- 19.0 19.0 329.6 25.4 29.1 -28.9 28.6 -28.7 29.1 -25.8 29.6 -27.7
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.525047
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:36:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:36:36', tmtdew=31.24, humidity=11.92, cloud=0.0, wind=17.1, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:36:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:36:52.217 [DEBUG] [Thread-56014] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:36:52.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:36:57.291 [DEBUG] [Thread-56017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:37:01.370 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:37:01.371 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:37:12.342 [DEBUG] [Thread-56018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:37:16.127 [DEBUG] [Thread-56019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:37:27.376 [DEBUG] [Thread-56020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:37:42.400 [DEBUG] [Thread-56021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:37:57.427 [DEBUG] [Thread-56022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:38:01.511 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:38:01.512 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:38:12.458 [DEBUG] [Thread-56023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:38:16.177 [DEBUG] [Thread-56024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:38:27.489 [DEBUG] [Thread-56025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:38:42.521 [DEBUG] [Thread-56026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:38:57.549 [DEBUG] [Thread-56027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:39:01.653 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:39:01.654 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:39:05.147 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T14:39:12.584 [DEBUG] [Thread-56028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:39:16.232 [DEBUG] [Thread-56029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:39:27.611 [DEBUG] [Thread-56030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:39:35.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:39:35.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:39:35.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:39:35.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 39, 16), 31.34, 11.63, 0.0, 14.56, 23.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:39:35.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:39:16
2025-11-17T14:39:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:39:36.121 [DEBUG] [Thread-56031] [transport.py] [_log()] starting thread (client mode): 0xd070f280
2025-11-17T14:39:36.122 [DEBUG] [Thread-56031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:39:36.141 [DEBUG] [Thread-56031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:39:36.141 [INFO] [Thread-56031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:39:36.145 [DEBUG] [Thread-56031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:39:36.145 [DEBUG] [Thread-56031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:39:36.145 [DEBUG] [Thread-56031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:39:36.145 [DEBUG] [Thread-56031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:39:36.145 [DEBUG] [Thread-56031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:39:36.145 [DEBUG] [Thread-56031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:39:36.145 [DEBUG] [Thread-56031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] client lang: <none>
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] server lang: <none>
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] kex follows: False
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] Compression: none
2025-11-17T14:39:36.146 [DEBUG] [Thread-56031] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:39:36.163 [DEBUG] [Thread-56031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:39:36.163 [DEBUG] [Thread-56031] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:39:36.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:39:36.164 [DEBUG] [Thread-56031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:39:36.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:39:36.166 [DEBUG] [Thread-56031] [transport.py] [_log()] userauth is OK
2025-11-17T14:39:36.167 [DEBUG] [Thread-56031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:39:36.167 [DEBUG] [Thread-56031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:39:36.167 [DEBUG] [Thread-56031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:39:36.167 [DEBUG] [Thread-56031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:39:36.191 [INFO] [Thread-56031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:39:36.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:39:36.823 [DEBUG] [Thread-56031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:39:36.823 [DEBUG] [Thread-56031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:39:36.823 [DEBUG] [Thread-56031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:39:36.863 [DEBUG] [Thread-56031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:39:36.863 [DEBUG] [Thread-56031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:39:36.865 [DEBUG] [Thread-56031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:39:36.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:39:36.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:39:36.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:39:36.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:39:36.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:39:36.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:39:36.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:39:36.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:39:36.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:39:36.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.526783 -999.00  +23.30  17.52     17   -2.70 1 1 1 1 1   888    0 25.18 -35.58 ----- 17.5 17.5 309.4 23.9 29.8 -25.0 29.4 -24.5 29.7 -22.7 30.6 -23.5
2025-11-17T14:39:36.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:39:36.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:39:36.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.526783
2025-11-17T14:39:36.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:39:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:39:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:39:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:39:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:39:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:39:16', tmtdew=31.34, humidity=11.63, cloud=0.0, wind=14.56, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:38:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:39:36.892 [DEBUG] [Thread-56031] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:39:36.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:39:36.994 [DEBUG] [Thread-56034] [transport.py] [_log()] starting thread (client mode): 0xd07239d0
2025-11-17T14:39:36.995 [DEBUG] [Thread-56034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:39:37.009 [DEBUG] [Thread-56034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:39:37.010 [INFO] [Thread-56034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:39:37.018 [DEBUG] [Thread-56034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:39:37.018 [DEBUG] [Thread-56034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:39:37.018 [DEBUG] [Thread-56034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:39:37.018 [DEBUG] [Thread-56034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:39:37.018 [DEBUG] [Thread-56034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] client lang: <none>
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] server lang: <none>
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] kex follows: False
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:39:37.019 [DEBUG] [Thread-56034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:39:37.020 [DEBUG] [Thread-56034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:39:37.020 [DEBUG] [Thread-56034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:39:37.020 [DEBUG] [Thread-56034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:39:37.020 [DEBUG] [Thread-56034] [transport.py] [_log()] Compression: none
2025-11-17T14:39:37.020 [DEBUG] [Thread-56034] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:39:37.075 [DEBUG] [Thread-56034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:39:37.075 [DEBUG] [Thread-56034] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:39:37.076 [DEBUG] [Thread-56034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:39:37.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:39:37.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:39:37.132 [DEBUG] [Thread-56034] [transport.py] [_log()] userauth is OK
2025-11-17T14:39:37.132 [DEBUG] [Thread-56034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:39:37.132 [DEBUG] [Thread-56034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:39:37.132 [DEBUG] [Thread-56034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:39:37.132 [DEBUG] [Thread-56034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:39:37.152 [INFO] [Thread-56034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:39:37.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:39:37.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:39:37.917 [DEBUG] [Thread-56034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:39:37.918 [DEBUG] [Thread-56034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:39:37.965 [DEBUG] [Thread-56034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:39:37.966 [DEBUG] [Thread-56034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:39:37.975 [DEBUG] [Thread-56034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:39:37.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:39:37.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:39:37.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:39:38.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:39:38.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:39:38.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:39:38.013 [DEBUG] [Thread-56034] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:39:42.643 [DEBUG] [Thread-56036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:39:57.681 [DEBUG] [Thread-56037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:40:01.795 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:40:01.796 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:40:08.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:40:08.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:40:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:40:08.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 39, 48), 31.66, 11.41, 0.0, 12.19, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:40:08.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:39:48
2025-11-17T14:40:08.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:40:08.965 [DEBUG] [Thread-56038] [transport.py] [_log()] starting thread (client mode): 0xd07877f0
2025-11-17T14:40:08.965 [DEBUG] [Thread-56038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:40:08.986 [DEBUG] [Thread-56038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:40:08.987 [INFO] [Thread-56038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:40:08.988 [DEBUG] [Thread-56038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:40:08.988 [DEBUG] [Thread-56038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:40:08.988 [DEBUG] [Thread-56038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:40:08.988 [DEBUG] [Thread-56038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:40:08.988 [DEBUG] [Thread-56038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:40:08.988 [DEBUG] [Thread-56038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:40:08.988 [DEBUG] [Thread-56038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] client lang: <none>
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] server lang: <none>
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] kex follows: False
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] Compression: none
2025-11-17T14:40:08.989 [DEBUG] [Thread-56038] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:40:09.001 [DEBUG] [Thread-56038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:40:09.002 [DEBUG] [Thread-56038] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:40:09.002 [DEBUG] [Thread-56038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:40:09.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:40:09.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:40:09.004 [DEBUG] [Thread-56038] [transport.py] [_log()] userauth is OK
2025-11-17T14:40:09.004 [DEBUG] [Thread-56038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:40:09.004 [DEBUG] [Thread-56038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:40:09.004 [DEBUG] [Thread-56038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:40:09.004 [DEBUG] [Thread-56038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:40:09.028 [INFO] [Thread-56038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:40:09.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:40:11.465 [DEBUG] [Thread-56038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:40:11.465 [DEBUG] [Thread-56038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:40:11.465 [DEBUG] [Thread-56038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:40:11.505 [DEBUG] [Thread-56038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:40:11.506 [DEBUG] [Thread-56038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:40:11.509 [DEBUG] [Thread-56038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:40:11.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:40:11.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:40:11.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:40:11.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:40:11.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:40:11.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:40:11.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:40:11.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:40:11.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:40:11.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.527825 -999.00  +22.70  17.09     18   -2.50 1 1 1 1 1   888    0 24.64 -43.66 ----- 17.1 17.1 306.0 24.4 29.2 -29.4 28.9 -26.4 29.1 -27.7 30.1 -26.6
2025-11-17T14:40:11.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:40:11.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:40:11.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.527825
2025-11-17T14:40:11.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:40:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:40:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:40:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:40:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:40:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:39:48', tmtdew=31.66, humidity=11.41, cloud=0.0, wind=12.19, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:40:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:40:11.539 [DEBUG] [Thread-56038] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:40:11.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:40:11.635 [DEBUG] [Thread-56041] [transport.py] [_log()] starting thread (client mode): 0xd07233d0
2025-11-17T14:40:11.635 [DEBUG] [Thread-56041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:40:11.650 [DEBUG] [Thread-56041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:40:11.650 [INFO] [Thread-56041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:40:11.657 [DEBUG] [Thread-56041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:40:11.657 [DEBUG] [Thread-56041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] client lang: <none>
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] server lang: <none>
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] kex follows: False
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] Compression: none
2025-11-17T14:40:11.658 [DEBUG] [Thread-56041] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:40:11.718 [DEBUG] [Thread-56041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:40:11.719 [DEBUG] [Thread-56041] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:40:11.719 [DEBUG] [Thread-56041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:40:11.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:40:11.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:40:11.775 [DEBUG] [Thread-56041] [transport.py] [_log()] userauth is OK
2025-11-17T14:40:11.775 [DEBUG] [Thread-56041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:40:11.775 [DEBUG] [Thread-56041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:40:11.775 [DEBUG] [Thread-56041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:40:11.775 [DEBUG] [Thread-56041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:40:11.793 [INFO] [Thread-56041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:40:11.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:40:11.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:40:12.711 [DEBUG] [Thread-56043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:40:12.731 [DEBUG] [Thread-56041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:40:12.731 [DEBUG] [Thread-56041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:40:12.778 [DEBUG] [Thread-56041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:40:12.778 [DEBUG] [Thread-56041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:40:12.787 [DEBUG] [Thread-56041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:40:12.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:40:12.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')
2025-11-17T14:40:12.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:40:12.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:40:12.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:40:12.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:40:12.821 [DEBUG] [Thread-56041] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:40:16.292 [DEBUG] [Thread-56044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:40:27.752 [DEBUG] [Thread-56045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:40:42.778 [DEBUG] [Thread-56046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:40:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:40:42.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:40:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:40:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 40, 20), 31.6, 11.43, 0.0, 11.91, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:40:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:40:20
2025-11-17T14:40:43.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:40:43.831 [DEBUG] [Thread-56047] [transport.py] [_log()] starting thread (client mode): 0xd31b2b60
2025-11-17T14:40:43.831 [DEBUG] [Thread-56047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:40:43.845 [DEBUG] [Thread-56047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:40:43.845 [INFO] [Thread-56047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] client lang: <none>
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] server lang: <none>
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] kex follows: False
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] Compression: none
2025-11-17T14:40:43.849 [DEBUG] [Thread-56047] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:40:43.860 [DEBUG] [Thread-56047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:40:43.860 [DEBUG] [Thread-56047] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:40:43.860 [DEBUG] [Thread-56047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:40:43.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:40:43.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:40:43.861 [DEBUG] [Thread-56047] [transport.py] [_log()] userauth is OK
2025-11-17T14:40:43.861 [DEBUG] [Thread-56047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:40:43.861 [DEBUG] [Thread-56047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:40:43.861 [DEBUG] [Thread-56047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:40:43.861 [DEBUG] [Thread-56047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:40:43.871 [INFO] [Thread-56047] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:40:43.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:40:44.459 [DEBUG] [Thread-56047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:40:44.459 [DEBUG] [Thread-56047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:40:44.460 [DEBUG] [Thread-56047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:40:44.499 [DEBUG] [Thread-56047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:40:44.499 [DEBUG] [Thread-56047] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:40:44.502 [DEBUG] [Thread-56047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:40:44.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:40:44.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:40:44.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:40:44.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:40:44.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:40:44.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:40:44.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:40:44.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:40:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:40:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.528172 -999.00  +22.90  11.48     18   -2.30 1 1 1 1 1   888    0 23.99 -49.74 ----- 11.5 11.5 300.3 15.8 29.1 -27.3 28.8 -25.2 29.7 -22.4 29.9 -25.4
2025-11-17T14:40:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:40:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:40:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.528172
2025-11-17T14:40:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:40:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:40:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:40:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:40:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:40:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:40:20', tmtdew=31.6, humidity=11.43, cloud=0.0, wind=11.91, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:40:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:40:44.521 [DEBUG] [Thread-56047] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:40:44.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:40:44.616 [DEBUG] [Thread-56050] [transport.py] [_log()] starting thread (client mode): 0xd07bfee0
2025-11-17T14:40:44.616 [DEBUG] [Thread-56050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:40:44.634 [DEBUG] [Thread-56050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:40:44.634 [INFO] [Thread-56050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:40:44.642 [DEBUG] [Thread-56050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:40:44.642 [DEBUG] [Thread-56050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:40:44.642 [DEBUG] [Thread-56050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:40:44.642 [DEBUG] [Thread-56050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] client lang: <none>
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] server lang: <none>
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] kex follows: False
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] Compression: none
2025-11-17T14:40:44.643 [DEBUG] [Thread-56050] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:40:44.702 [DEBUG] [Thread-56050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:40:44.703 [DEBUG] [Thread-56050] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:40:44.703 [DEBUG] [Thread-56050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:40:44.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:40:44.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:40:44.759 [DEBUG] [Thread-56050] [transport.py] [_log()] userauth is OK
2025-11-17T14:40:44.759 [DEBUG] [Thread-56050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:40:44.759 [DEBUG] [Thread-56050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:40:44.759 [DEBUG] [Thread-56050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:40:44.759 [DEBUG] [Thread-56050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:40:44.780 [INFO] [Thread-56050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:40:44.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:40:44.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:40:45.659 [DEBUG] [Thread-56050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:40:45.659 [DEBUG] [Thread-56050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:40:45.706 [DEBUG] [Thread-56050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:40:45.706 [DEBUG] [Thread-56050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:40:45.715 [DEBUG] [Thread-56050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:40:45.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:40:45.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:40:45.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:40:45.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:40:45.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:40:45.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:40:45.750 [DEBUG] [Thread-56050] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:40:57.804 [DEBUG] [Thread-56052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:41:01.935 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:41:01.936 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:41:12.845 [DEBUG] [Thread-56053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:41:15.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:41:15.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:41:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:41:16.341 [DEBUG] [Thread-56054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:41:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 40, 52), 30.72, 12.24, 0.0, 12.53, 23.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:41:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:40:52
2025-11-17T14:41:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:41:16.687 [DEBUG] [Thread-56055] [transport.py] [_log()] starting thread (client mode): 0xd070e650
2025-11-17T14:41:16.687 [DEBUG] [Thread-56055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:41:16.708 [DEBUG] [Thread-56055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:41:16.708 [INFO] [Thread-56055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:41:16.711 [DEBUG] [Thread-56055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:41:16.711 [DEBUG] [Thread-56055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:41:16.711 [DEBUG] [Thread-56055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] client lang: <none>
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] server lang: <none>
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] kex follows: False
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:41:16.712 [DEBUG] [Thread-56055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:41:16.713 [DEBUG] [Thread-56055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:41:16.713 [DEBUG] [Thread-56055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:41:16.713 [DEBUG] [Thread-56055] [transport.py] [_log()] Compression: none
2025-11-17T14:41:16.713 [DEBUG] [Thread-56055] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:41:16.731 [DEBUG] [Thread-56055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:41:16.732 [DEBUG] [Thread-56055] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:41:16.732 [DEBUG] [Thread-56055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:41:16.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:41:16.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:41:16.734 [DEBUG] [Thread-56055] [transport.py] [_log()] userauth is OK
2025-11-17T14:41:16.734 [DEBUG] [Thread-56055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:41:16.734 [DEBUG] [Thread-56055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:41:16.735 [DEBUG] [Thread-56055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:41:16.735 [DEBUG] [Thread-56055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:41:16.753 [INFO] [Thread-56055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:41:16.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:41:17.332 [DEBUG] [Thread-56055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:41:17.332 [DEBUG] [Thread-56055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:41:17.333 [DEBUG] [Thread-56055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:41:17.373 [DEBUG] [Thread-56055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:41:17.373 [DEBUG] [Thread-56055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:41:17.375 [DEBUG] [Thread-56055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:41:17.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:41:17.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:41:17.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:41:17.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:41:17.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:41:17.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:41:17.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:41:17.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:41:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:41:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.528172 -999.00  +22.90  11.48     18   -2.30 1 1 1 1 1   888    0 23.99 -49.74 ----- 11.5 11.5 300.3 15.8 29.1 -27.3 28.8 -25.2 29.7 -22.4 29.9 -25.4
2025-11-17T14:41:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:41:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:41:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.528172
2025-11-17T14:41:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:41:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:41:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:41:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:41:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:41:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:40:52', tmtdew=30.72, humidity=12.24, cloud=0.0, wind=12.53, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:40:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:41:17.400 [DEBUG] [Thread-56055] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:41:17.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:41:17.497 [DEBUG] [Thread-56058] [transport.py] [_log()] starting thread (client mode): 0xd07bd810
2025-11-17T14:41:17.497 [DEBUG] [Thread-56058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:41:17.512 [DEBUG] [Thread-56058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:41:17.512 [INFO] [Thread-56058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] client lang: <none>
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] server lang: <none>
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] kex follows: False
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:41:17.520 [DEBUG] [Thread-56058] [transport.py] [_log()] Compression: none
2025-11-17T14:41:17.521 [DEBUG] [Thread-56058] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:41:17.579 [DEBUG] [Thread-56058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:41:17.580 [DEBUG] [Thread-56058] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:41:17.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:41:17.581 [DEBUG] [Thread-56058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:41:17.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:41:17.635 [DEBUG] [Thread-56058] [transport.py] [_log()] userauth is OK
2025-11-17T14:41:17.635 [DEBUG] [Thread-56058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:41:17.635 [DEBUG] [Thread-56058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:41:17.635 [DEBUG] [Thread-56058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:41:17.635 [DEBUG] [Thread-56058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:41:17.656 [INFO] [Thread-56058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:41:17.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:41:17.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:41:18.512 [DEBUG] [Thread-56058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:41:18.512 [DEBUG] [Thread-56058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:41:18.560 [DEBUG] [Thread-56058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:41:18.560 [DEBUG] [Thread-56058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:41:18.568 [DEBUG] [Thread-56058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:41:18.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:41:18.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:41:18.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
2025-11-17T14:41:18.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:41:18.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:41:18.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:41:18.599 [DEBUG] [Thread-56058] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:41:27.874 [DEBUG] [Thread-56060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:41:42.923 [DEBUG] [Thread-56061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:41:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:41:48.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:41:48.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:41:49.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 41, 24), 30.56, 12.42, 0.0, 12.7, 23.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:41:49.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:41:24
2025-11-17T14:41:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:41:49.542 [DEBUG] [Thread-56062] [transport.py] [_log()] starting thread (client mode): 0xd0723be0
2025-11-17T14:41:49.542 [DEBUG] [Thread-56062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:41:49.562 [DEBUG] [Thread-56062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:41:49.563 [INFO] [Thread-56062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:41:49.564 [DEBUG] [Thread-56062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:41:49.564 [DEBUG] [Thread-56062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:41:49.564 [DEBUG] [Thread-56062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] client lang: <none>
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] server lang: <none>
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] kex follows: False
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] Compression: none
2025-11-17T14:41:49.565 [DEBUG] [Thread-56062] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:41:49.573 [DEBUG] [Thread-56062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:41:49.573 [DEBUG] [Thread-56062] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:41:49.574 [DEBUG] [Thread-56062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:41:49.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:41:49.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:41:49.576 [DEBUG] [Thread-56062] [transport.py] [_log()] userauth is OK
2025-11-17T14:41:49.576 [DEBUG] [Thread-56062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:41:49.576 [DEBUG] [Thread-56062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:41:49.576 [DEBUG] [Thread-56062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:41:49.576 [DEBUG] [Thread-56062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:41:49.599 [INFO] [Thread-56062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:41:49.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:41:50.230 [DEBUG] [Thread-56062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:41:50.231 [DEBUG] [Thread-56062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:41:50.231 [DEBUG] [Thread-56062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:41:50.271 [DEBUG] [Thread-56062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:41:50.272 [DEBUG] [Thread-56062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:41:50.274 [DEBUG] [Thread-56062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:41:50.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:41:50.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:41:50.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:41:50.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:41:50.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:41:50.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:41:50.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:41:50.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:41:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:41:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.528519 -999.00  +23.20  14.72     18   -2.10 1 2 1 1 1   888    0 24.28 -55.07 ----- 14.7 14.7 289.8 17.8 29.7 -23.0 29.3 -21.8 30.0 -19.5 30.4 -20.9
2025-11-17T14:41:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:41:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:41:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.528519
2025-11-17T14:41:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:41:50.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:41:50.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:41:50.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:41:50.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:41:50.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:41:24', tmtdew=30.56, humidity=12.42, cloud=0.0, wind=12.7, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:41:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:41:50.299 [DEBUG] [Thread-56062] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:41:50.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:41:50.396 [DEBUG] [Thread-56065] [transport.py] [_log()] starting thread (client mode): 0xd071bd00
2025-11-17T14:41:50.396 [DEBUG] [Thread-56065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:41:50.413 [DEBUG] [Thread-56065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:41:50.414 [INFO] [Thread-56065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] client lang: <none>
2025-11-17T14:41:50.421 [DEBUG] [Thread-56065] [transport.py] [_log()] server lang: <none>
2025-11-17T14:41:50.422 [DEBUG] [Thread-56065] [transport.py] [_log()] kex follows: False
2025-11-17T14:41:50.422 [DEBUG] [Thread-56065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:41:50.422 [DEBUG] [Thread-56065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:41:50.422 [DEBUG] [Thread-56065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:41:50.422 [DEBUG] [Thread-56065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:41:50.422 [DEBUG] [Thread-56065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:41:50.422 [DEBUG] [Thread-56065] [transport.py] [_log()] Compression: none
2025-11-17T14:41:50.422 [DEBUG] [Thread-56065] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:41:50.478 [DEBUG] [Thread-56065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:41:50.479 [DEBUG] [Thread-56065] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:41:50.479 [DEBUG] [Thread-56065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:41:50.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:41:50.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:41:50.535 [DEBUG] [Thread-56065] [transport.py] [_log()] userauth is OK
2025-11-17T14:41:50.535 [DEBUG] [Thread-56065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:41:50.535 [DEBUG] [Thread-56065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:41:50.535 [DEBUG] [Thread-56065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:41:50.535 [DEBUG] [Thread-56065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:41:50.551 [INFO] [Thread-56065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:41:50.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:41:50.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:41:51.525 [DEBUG] [Thread-56065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:41:51.525 [DEBUG] [Thread-56065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:41:51.574 [DEBUG] [Thread-56065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:41:51.574 [DEBUG] [Thread-56065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:41:51.583 [DEBUG] [Thread-56065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:41:51.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:41:51.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:41:51.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:41:51.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:41:51.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:41:51.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:41:51.618 [DEBUG] [Thread-56065] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:41:57.951 [DEBUG] [Thread-56067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:42:02.081 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:42:02.082 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:42:12.982 [DEBUG] [Thread-56068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:42:16.391 [DEBUG] [Thread-56069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:42:21.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:42:21.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:42:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:42:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 41, 56), 30.53, 12.31, 0.0, 14.29, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:42:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:41:56
2025-11-17T14:42:22.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:42:22.571 [DEBUG] [Thread-56070] [transport.py] [_log()] starting thread (client mode): 0xd07bc460
2025-11-17T14:42:22.571 [DEBUG] [Thread-56070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:42:22.591 [DEBUG] [Thread-56070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:42:22.591 [INFO] [Thread-56070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:42:22.594 [DEBUG] [Thread-56070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:42:22.594 [DEBUG] [Thread-56070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:42:22.594 [DEBUG] [Thread-56070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:42:22.594 [DEBUG] [Thread-56070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] client lang: <none>
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] server lang: <none>
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] kex follows: False
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] Compression: none
2025-11-17T14:42:22.595 [DEBUG] [Thread-56070] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:42:22.611 [DEBUG] [Thread-56070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:42:22.612 [DEBUG] [Thread-56070] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:42:22.612 [DEBUG] [Thread-56070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:42:22.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:42:22.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:42:22.614 [DEBUG] [Thread-56070] [transport.py] [_log()] userauth is OK
2025-11-17T14:42:22.614 [DEBUG] [Thread-56070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:42:22.614 [DEBUG] [Thread-56070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:42:22.614 [DEBUG] [Thread-56070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:42:22.614 [DEBUG] [Thread-56070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:42:22.649 [INFO] [Thread-56070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:42:22.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:42:23.275 [DEBUG] [Thread-56070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:42:23.276 [DEBUG] [Thread-56070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:42:23.276 [DEBUG] [Thread-56070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:42:23.316 [DEBUG] [Thread-56070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:42:23.317 [DEBUG] [Thread-56070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:42:23.320 [DEBUG] [Thread-56070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:42:23.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:42:23.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:42:23.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:42:23.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:42:23.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:42:23.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:42:23.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:42:23.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:42:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:42:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.528866 -999.00  +23.60  16.77     17   -2.30 1 2 1 1 1   888    0 24.07 -58.40 ----- 16.8 16.8 317.2 19.1 29.9 -23.6 29.4 -22.3 30.0 -21.2 30.7 -21.5
2025-11-17T14:42:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:42:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:42:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.528866
2025-11-17T14:42:23.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:42:23.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:42:23.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:42:23.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:42:23.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:42:23.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:41:56', tmtdew=30.53, humidity=12.31, cloud=0.0, wind=14.29, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:41:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:42:23.335 [DEBUG] [Thread-56070] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:42:23.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:42:23.431 [DEBUG] [Thread-56073] [transport.py] [_log()] starting thread (client mode): 0xd07cf730
2025-11-17T14:42:23.431 [DEBUG] [Thread-56073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:42:23.446 [DEBUG] [Thread-56073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:42:23.447 [INFO] [Thread-56073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:42:23.454 [DEBUG] [Thread-56073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] client lang: <none>
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] server lang: <none>
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] kex follows: False
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:42:23.455 [DEBUG] [Thread-56073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:42:23.456 [DEBUG] [Thread-56073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:42:23.456 [DEBUG] [Thread-56073] [transport.py] [_log()] Compression: none
2025-11-17T14:42:23.456 [DEBUG] [Thread-56073] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:42:23.519 [DEBUG] [Thread-56073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:42:23.519 [DEBUG] [Thread-56073] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:42:23.520 [DEBUG] [Thread-56073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:42:23.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:42:23.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:42:23.575 [DEBUG] [Thread-56073] [transport.py] [_log()] userauth is OK
2025-11-17T14:42:23.575 [DEBUG] [Thread-56073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:42:23.575 [DEBUG] [Thread-56073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:42:23.576 [DEBUG] [Thread-56073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:42:23.576 [DEBUG] [Thread-56073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:42:23.594 [INFO] [Thread-56073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:42:23.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:42:23.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:42:24.442 [DEBUG] [Thread-56073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:42:24.442 [DEBUG] [Thread-56073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:42:24.490 [DEBUG] [Thread-56073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:42:24.490 [DEBUG] [Thread-56073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:42:24.499 [DEBUG] [Thread-56073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:42:24.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:42:24.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:42:24.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:42:24.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:42:24.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:42:24.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:42:24.535 [DEBUG] [Thread-56073] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:42:28.010 [DEBUG] [Thread-56075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:42:43.048 [DEBUG] [Thread-56076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:42:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:42:54.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:42:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:42:55.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 42, 28), 30.18, 12.57, 0.0, 10.32, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:42:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:42:28
2025-11-17T14:42:55.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:42:55.483 [DEBUG] [Thread-56077] [transport.py] [_log()] starting thread (client mode): 0xd07223e0
2025-11-17T14:42:55.483 [DEBUG] [Thread-56077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:42:55.502 [DEBUG] [Thread-56077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:42:55.503 [INFO] [Thread-56077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:42:55.506 [DEBUG] [Thread-56077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:42:55.506 [DEBUG] [Thread-56077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:42:55.506 [DEBUG] [Thread-56077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:42:55.506 [DEBUG] [Thread-56077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] client lang: <none>
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] server lang: <none>
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] kex follows: False
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] Compression: none
2025-11-17T14:42:55.507 [DEBUG] [Thread-56077] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:42:55.526 [DEBUG] [Thread-56077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:42:55.527 [DEBUG] [Thread-56077] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:42:55.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:42:55.528 [DEBUG] [Thread-56077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:42:55.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:42:55.530 [DEBUG] [Thread-56077] [transport.py] [_log()] userauth is OK
2025-11-17T14:42:55.530 [DEBUG] [Thread-56077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:42:55.530 [DEBUG] [Thread-56077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:42:55.530 [DEBUG] [Thread-56077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:42:55.530 [DEBUG] [Thread-56077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:42:55.564 [INFO] [Thread-56077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:42:55.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:42:56.197 [DEBUG] [Thread-56077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:42:56.197 [DEBUG] [Thread-56077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:42:56.197 [DEBUG] [Thread-56077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:42:56.237 [DEBUG] [Thread-56077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:42:56.238 [DEBUG] [Thread-56077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:42:56.241 [DEBUG] [Thread-56077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:42:56.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:42:56.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:42:56.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:42:56.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:42:56.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:42:56.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:42:56.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:42:56.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:42:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:42:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.529214 -999.00  +23.30  17.07     17   -2.40 1 1 1 1 1   888    0 24.14 -58.46 ----- 17.1 17.1 295.0 27.8 30.0 -24.1 29.5 -23.4 29.7 -26.3 30.8 -22.4
2025-11-17T14:42:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:42:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:42:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.529214
2025-11-17T14:42:56.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:42:56.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:42:56.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:42:56.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:42:56.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:42:56.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:42:28', tmtdew=30.18, humidity=12.57, cloud=0.0, wind=10.32, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:42:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:42:56.261 [DEBUG] [Thread-56077] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:42:56.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:42:56.357 [DEBUG] [Thread-56080] [transport.py] [_log()] starting thread (client mode): 0xd07185e0
2025-11-17T14:42:56.357 [DEBUG] [Thread-56080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:42:56.377 [DEBUG] [Thread-56080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:42:56.377 [INFO] [Thread-56080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:42:56.384 [DEBUG] [Thread-56080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:42:56.385 [DEBUG] [Thread-56080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:42:56.385 [DEBUG] [Thread-56080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:42:56.385 [DEBUG] [Thread-56080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:42:56.385 [DEBUG] [Thread-56080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:42:56.385 [DEBUG] [Thread-56080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:42:56.385 [DEBUG] [Thread-56080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] client lang: <none>
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] server lang: <none>
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] kex follows: False
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] Compression: none
2025-11-17T14:42:56.386 [DEBUG] [Thread-56080] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:42:56.441 [DEBUG] [Thread-56080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:42:56.442 [DEBUG] [Thread-56080] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:42:56.442 [DEBUG] [Thread-56080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:42:56.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:42:56.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:42:56.499 [DEBUG] [Thread-56080] [transport.py] [_log()] userauth is OK
2025-11-17T14:42:56.499 [DEBUG] [Thread-56080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:42:56.499 [DEBUG] [Thread-56080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:42:56.499 [DEBUG] [Thread-56080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:42:56.499 [DEBUG] [Thread-56080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:42:56.523 [INFO] [Thread-56080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:42:56.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:42:56.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:42:57.392 [DEBUG] [Thread-56080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:42:57.393 [DEBUG] [Thread-56080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:42:57.440 [DEBUG] [Thread-56080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:42:57.441 [DEBUG] [Thread-56080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:42:57.450 [DEBUG] [Thread-56080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:42:57.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:42:57.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:42:57.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:42:57.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:42:57.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:42:57.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:42:57.484 [DEBUG] [Thread-56080] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:42:58.082 [DEBUG] [Thread-56082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:43:02.223 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:43:02.224 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:43:13.127 [DEBUG] [Thread-56083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:43:16.441 [DEBUG] [Thread-56084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:43:27.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:43:27.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:43:27.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:43:28.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 43), 29.95, 13.26, 0.0, 16.66, 23.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:43:28.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:43:00
2025-11-17T14:43:28.155 [DEBUG] [Thread-56085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:43:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:43:28.422 [DEBUG] [Thread-56086] [transport.py] [_log()] starting thread (client mode): 0xd07ce9b0
2025-11-17T14:43:28.423 [DEBUG] [Thread-56086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:43:28.443 [DEBUG] [Thread-56086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:43:28.443 [INFO] [Thread-56086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:43:28.444 [DEBUG] [Thread-56086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:43:28.444 [DEBUG] [Thread-56086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:43:28.444 [DEBUG] [Thread-56086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:43:28.444 [DEBUG] [Thread-56086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] client lang: <none>
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] server lang: <none>
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] kex follows: False
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:43:28.445 [DEBUG] [Thread-56086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:43:28.446 [DEBUG] [Thread-56086] [transport.py] [_log()] Compression: none
2025-11-17T14:43:28.446 [DEBUG] [Thread-56086] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:43:28.464 [DEBUG] [Thread-56086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:43:28.465 [DEBUG] [Thread-56086] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:43:28.466 [DEBUG] [Thread-56086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:43:28.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:43:28.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:43:28.468 [DEBUG] [Thread-56086] [transport.py] [_log()] userauth is OK
2025-11-17T14:43:28.469 [DEBUG] [Thread-56086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:43:28.469 [DEBUG] [Thread-56086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:43:28.469 [DEBUG] [Thread-56086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:43:28.469 [DEBUG] [Thread-56086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:43:28.489 [INFO] [Thread-56086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:43:28.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:43:29.095 [DEBUG] [Thread-56086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:43:29.095 [DEBUG] [Thread-56086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:43:29.096 [DEBUG] [Thread-56086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:43:29.136 [DEBUG] [Thread-56086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:43:29.137 [DEBUG] [Thread-56086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:43:29.140 [DEBUG] [Thread-56086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:43:29.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:43:29.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:43:29.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:43:29.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:43:29.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:43:29.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:43:29.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:43:29.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:43:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:43:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.529561 -999.00  +23.70  24.42     17   -2.20 1 1 1 1 1   888    0 24.24 -58.73 ----- 24.4 24.4 312.0 31.5 29.7 -25.0 29.4 -24.0 30.0 -22.2 30.6 -23.8
2025-11-17T14:43:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:43:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:43:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.529561
2025-11-17T14:43:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:43:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:43:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:43:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:43:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:43:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:43:00', tmtdew=29.95, humidity=13.26, cloud=0.0, wind=16.66, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:42:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:43:29.165 [DEBUG] [Thread-56086] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:43:29.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:43:29.262 [DEBUG] [Thread-56089] [transport.py] [_log()] starting thread (client mode): 0xd3136ef0
2025-11-17T14:43:29.262 [DEBUG] [Thread-56089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:43:29.278 [DEBUG] [Thread-56089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:43:29.278 [INFO] [Thread-56089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:43:29.286 [DEBUG] [Thread-56089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:43:29.286 [DEBUG] [Thread-56089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] client lang: <none>
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] server lang: <none>
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] kex follows: False
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:43:29.287 [DEBUG] [Thread-56089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:43:29.288 [DEBUG] [Thread-56089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:43:29.288 [DEBUG] [Thread-56089] [transport.py] [_log()] Compression: none
2025-11-17T14:43:29.288 [DEBUG] [Thread-56089] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:43:29.343 [DEBUG] [Thread-56089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:43:29.343 [DEBUG] [Thread-56089] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:43:29.344 [DEBUG] [Thread-56089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:43:29.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:43:29.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:43:29.399 [DEBUG] [Thread-56089] [transport.py] [_log()] userauth is OK
2025-11-17T14:43:29.399 [DEBUG] [Thread-56089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:43:29.399 [DEBUG] [Thread-56089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:43:29.400 [DEBUG] [Thread-56089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:43:29.400 [DEBUG] [Thread-56089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:43:29.420 [INFO] [Thread-56089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:43:29.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:43:29.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:43:30.338 [DEBUG] [Thread-56089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:43:30.338 [DEBUG] [Thread-56089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:43:30.387 [DEBUG] [Thread-56089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:43:30.387 [DEBUG] [Thread-56089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:43:30.396 [DEBUG] [Thread-56089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:43:30.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:43: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')
2025-11-17T14:43:30.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:43:30.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:43:30.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:43:30.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:43:30.430 [DEBUG] [Thread-56089] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:43:43.182 [DEBUG] [Thread-56091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:43:58.232 [DEBUG] [Thread-56092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:44:00.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:44:00.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:44:00.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:44:01.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 43, 32), 29.89, 13.29, 0.0, 15.04, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:44:01.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:43:32
2025-11-17T14:44:01.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:44:01.381 [DEBUG] [Thread-56093] [transport.py] [_log()] starting thread (client mode): 0xd0786d10
2025-11-17T14:44:01.381 [DEBUG] [Thread-56093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:44:01.401 [DEBUG] [Thread-56093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:44:01.401 [INFO] [Thread-56093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:44:01.404 [DEBUG] [Thread-56093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] client lang: <none>
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] server lang: <none>
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] kex follows: False
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] Compression: none
2025-11-17T14:44:01.405 [DEBUG] [Thread-56093] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:44:01.424 [DEBUG] [Thread-56093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:44:01.425 [DEBUG] [Thread-56093] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:44:01.426 [DEBUG] [Thread-56093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:44:01.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:44:01.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:44:01.427 [DEBUG] [Thread-56093] [transport.py] [_log()] userauth is OK
2025-11-17T14:44:01.428 [DEBUG] [Thread-56093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:44:01.428 [DEBUG] [Thread-56093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:44:01.428 [DEBUG] [Thread-56093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:44:01.428 [DEBUG] [Thread-56093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:44:01.448 [INFO] [Thread-56093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:44:01.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:44:02.073 [DEBUG] [Thread-56093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:44:02.074 [DEBUG] [Thread-56093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:44:02.074 [DEBUG] [Thread-56093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:44:02.114 [DEBUG] [Thread-56093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:44:02.114 [DEBUG] [Thread-56093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:44:02.117 [DEBUG] [Thread-56093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:44:02.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:44:02.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:44:02.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:44:02.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:44:02.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:44:02.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:44:02.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:44:02.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:44:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:44:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.529908 -999.00  +23.50  18.17     18   -1.80 1 1 1 1 1   888    0 24.26 -59.70 ----- 18.2 18.2 321.8 24.7 29.6 -27.1 29.2 -25.5 29.6 -23.3 30.3 -25.5
2025-11-17T14:44:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:44:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:44:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.529908
2025-11-17T14:44:02.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:44:02.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:44:02.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:44:02.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:44:02.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:44:02.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:43:32', tmtdew=29.89, humidity=13.29, cloud=0.0, wind=15.04, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:43:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:44:02.141 [DEBUG] [Thread-56093] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:44:02.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:44:02.240 [DEBUG] [Thread-56096] [transport.py] [_log()] starting thread (client mode): 0xd070f220
2025-11-17T14:44:02.240 [DEBUG] [Thread-56096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:44:02.256 [DEBUG] [Thread-56096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:44:02.257 [INFO] [Thread-56096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:44:02.264 [DEBUG] [Thread-56096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:44:02.264 [DEBUG] [Thread-56096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:44:02.264 [DEBUG] [Thread-56096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:44:02.264 [DEBUG] [Thread-56096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:44:02.264 [DEBUG] [Thread-56096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:44:02.264 [DEBUG] [Thread-56096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:44:02.264 [DEBUG] [Thread-56096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:44:02.264 [DEBUG] [Thread-56096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] client lang: <none>
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] server lang: <none>
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] kex follows: False
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] Compression: none
2025-11-17T14:44:02.265 [DEBUG] [Thread-56096] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:44:02.323 [DEBUG] [Thread-56096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:44:02.323 [DEBUG] [Thread-56096] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:44:02.324 [DEBUG] [Thread-56096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:44:02.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:44:02.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:44:02.365 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:44:02.366 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:44:02.378 [DEBUG] [Thread-56096] [transport.py] [_log()] userauth is OK
2025-11-17T14:44:02.378 [DEBUG] [Thread-56096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:44:02.378 [DEBUG] [Thread-56096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:44:02.378 [DEBUG] [Thread-56096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:44:02.379 [DEBUG] [Thread-56096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:44:02.398 [INFO] [Thread-56096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:44:02.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:44:02.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:44:03.292 [DEBUG] [Thread-56096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:44:03.292 [DEBUG] [Thread-56096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:44:03.339 [DEBUG] [Thread-56096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:44:03.339 [DEBUG] [Thread-56096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:44:03.351 [DEBUG] [Thread-56096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:44:03.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:44:03.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:44:03.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:44:03.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:44:03.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:44:03.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:44:03.389 [DEBUG] [Thread-56096] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:44:13.265 [DEBUG] [Thread-56098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:44:16.499 [DEBUG] [Thread-56099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:44:28.305 [DEBUG] [Thread-56100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:44:33.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:44:33.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:44:33.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:44:34.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 44, 4), 29.63, 13.54, 0.0, 15.11, 23.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:44:34.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:44:04
2025-11-17T14:44:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:44:34.360 [DEBUG] [Thread-56101] [transport.py] [_log()] starting thread (client mode): 0xd0718940
2025-11-17T14:44:34.361 [DEBUG] [Thread-56101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:44:34.381 [DEBUG] [Thread-56101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:44:34.381 [INFO] [Thread-56101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:44:34.385 [DEBUG] [Thread-56101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] client lang: <none>
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] server lang: <none>
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] kex follows: False
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] Compression: none
2025-11-17T14:44:34.386 [DEBUG] [Thread-56101] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:44:34.402 [DEBUG] [Thread-56101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:44:34.402 [DEBUG] [Thread-56101] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:44:34.402 [DEBUG] [Thread-56101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:44:34.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:44:34.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:44:34.403 [DEBUG] [Thread-56101] [transport.py] [_log()] userauth is OK
2025-11-17T14:44:34.403 [DEBUG] [Thread-56101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:44:34.403 [DEBUG] [Thread-56101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:44:34.403 [DEBUG] [Thread-56101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:44:34.403 [DEBUG] [Thread-56101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:44:34.414 [INFO] [Thread-56101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:44:34.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:44:35.088 [DEBUG] [Thread-56101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:44:35.088 [DEBUG] [Thread-56101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:44:35.088 [DEBUG] [Thread-56101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:44:35.129 [DEBUG] [Thread-56101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:44:35.129 [DEBUG] [Thread-56101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:44:35.131 [DEBUG] [Thread-56101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:44:35.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:44:35.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:44:35.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:44:35.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:44:35.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:44:35.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:44:35.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:44:35.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.530255 -999.00  +23.50  22.70     18   -1.90 1 2 1 1 1   888    0 24.37 -57.62 ----- 22.7 22.7 291.0 23.6 29.7 -23.2 29.4 -21.8 29.8 -20.8 30.4 -21.0
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.530255
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:44:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:44:04', tmtdew=29.63, humidity=13.54, cloud=0.0, wind=15.11, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:43:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:44:35.150 [DEBUG] [Thread-56101] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:44:35.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:44:35.235 [DEBUG] [Thread-56104] [transport.py] [_log()] starting thread (client mode): 0xd070e650
2025-11-17T14:44:35.235 [DEBUG] [Thread-56104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:44:35.250 [DEBUG] [Thread-56104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:44:35.250 [INFO] [Thread-56104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] client lang: <none>
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] server lang: <none>
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] kex follows: False
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] Compression: none
2025-11-17T14:44:35.259 [DEBUG] [Thread-56104] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:44:35.321 [DEBUG] [Thread-56104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:44:35.321 [DEBUG] [Thread-56104] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:44:35.321 [DEBUG] [Thread-56104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:44:35.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:44:35.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:44:35.382 [DEBUG] [Thread-56104] [transport.py] [_log()] userauth is OK
2025-11-17T14:44:35.383 [DEBUG] [Thread-56104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:44:35.383 [DEBUG] [Thread-56104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:44:35.383 [DEBUG] [Thread-56104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:44:35.383 [DEBUG] [Thread-56104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:44:35.397 [INFO] [Thread-56104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:44:35.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:44:35.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:44:36.297 [DEBUG] [Thread-56104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:44:36.297 [DEBUG] [Thread-56104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:44:36.345 [DEBUG] [Thread-56104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:44:36.345 [DEBUG] [Thread-56104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:44:36.353 [DEBUG] [Thread-56104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:44:36.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:44: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')
2025-11-17T14:44:36.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:44:36.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:44:36.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:44:36.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:44:36.386 [DEBUG] [Thread-56104] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:44:43.334 [DEBUG] [Thread-56106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:44:58.386 [DEBUG] [Thread-56107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:45:02.507 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:45:02.508 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:45:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:45:06.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:45:06.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:45:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 44, 36), 29.38, 13.49, 0.0, 11.22, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:45:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:44:36
2025-11-17T14:45:07.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:45:07.327 [DEBUG] [Thread-56108] [transport.py] [_log()] starting thread (client mode): 0xd07cc400
2025-11-17T14:45:07.327 [DEBUG] [Thread-56108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:45:07.347 [DEBUG] [Thread-56108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:45:07.348 [INFO] [Thread-56108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:45:07.351 [DEBUG] [Thread-56108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] client lang: <none>
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] server lang: <none>
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] kex follows: False
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] Compression: none
2025-11-17T14:45:07.352 [DEBUG] [Thread-56108] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:45:07.361 [DEBUG] [Thread-56108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:45:07.362 [DEBUG] [Thread-56108] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:45:07.362 [DEBUG] [Thread-56108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:45:07.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:45:07.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:45:07.364 [DEBUG] [Thread-56108] [transport.py] [_log()] userauth is OK
2025-11-17T14:45:07.364 [DEBUG] [Thread-56108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:45:07.364 [DEBUG] [Thread-56108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:45:07.364 [DEBUG] [Thread-56108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:45:07.364 [DEBUG] [Thread-56108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:45:07.399 [INFO] [Thread-56108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:45:07.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:45:08.948 [DEBUG] [Thread-56108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:45:08.948 [DEBUG] [Thread-56108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:45:08.948 [DEBUG] [Thread-56108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:45:08.989 [DEBUG] [Thread-56108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:45:08.989 [DEBUG] [Thread-56108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:45:08.991 [DEBUG] [Thread-56108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:45:09.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:45:09.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:45:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:45:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:45:09.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:45:09.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:45:09.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.530603 -999.00  +23.10  19.73     18   -1.80 1 1 1 1 1   888    0 24.47 -49.21 ----- 19.7 19.7 287.8 24.1 29.8 -24.6 29.4 -23.0 29.4 -25.6 30.5 -23.1
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.530603
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:45:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:44:36', tmtdew=29.38, humidity=13.49, cloud=0.0, wind=11.22, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:44:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:45:09.005 [DEBUG] [Thread-56108] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:45:09.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:45:09.092 [DEBUG] [Thread-56111] [transport.py] [_log()] starting thread (client mode): 0xd31cf2b0
2025-11-17T14:45:09.092 [DEBUG] [Thread-56111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:45:09.107 [DEBUG] [Thread-56111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:45:09.108 [INFO] [Thread-56111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] client lang: <none>
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] server lang: <none>
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] kex follows: False
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] Compression: none
2025-11-17T14:45:09.115 [DEBUG] [Thread-56111] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:45:09.177 [DEBUG] [Thread-56111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:45:09.177 [DEBUG] [Thread-56111] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:45:09.178 [DEBUG] [Thread-56111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:45:09.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:45:09.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:45:09.235 [DEBUG] [Thread-56111] [transport.py] [_log()] userauth is OK
2025-11-17T14:45:09.235 [DEBUG] [Thread-56111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:45:09.235 [DEBUG] [Thread-56111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:45:09.235 [DEBUG] [Thread-56111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:45:09.235 [DEBUG] [Thread-56111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:45:09.252 [INFO] [Thread-56111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:45:09.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:45:09.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:45:10.154 [DEBUG] [Thread-56111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:45:10.154 [DEBUG] [Thread-56111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:45:10.203 [DEBUG] [Thread-56111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:45:10.203 [DEBUG] [Thread-56111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:45:10.211 [DEBUG] [Thread-56111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:45:10.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:45:10.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:45:10.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:45:10.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:45:10.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:45:10.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:45:10.243 [DEBUG] [Thread-56111] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:45:13.416 [DEBUG] [Thread-56113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:45:16.550 [DEBUG] [Thread-56114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:45:28.454 [DEBUG] [Thread-56115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:45:40.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:45:40.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:45:40.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:45:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 45, 8), 29.35, 13.52, 0.0, 11.03, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:45:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:45:08
2025-11-17T14:45:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:45:41.199 [DEBUG] [Thread-56116] [transport.py] [_log()] starting thread (client mode): 0xd07bfbe0
2025-11-17T14:45:41.199 [DEBUG] [Thread-56116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:45:41.218 [DEBUG] [Thread-56116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:45:41.219 [INFO] [Thread-56116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] client lang: <none>
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] server lang: <none>
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] kex follows: False
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:45:41.220 [DEBUG] [Thread-56116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:45:41.221 [DEBUG] [Thread-56116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:45:41.221 [DEBUG] [Thread-56116] [transport.py] [_log()] Compression: none
2025-11-17T14:45:41.221 [DEBUG] [Thread-56116] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:45:41.228 [DEBUG] [Thread-56116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:45:41.228 [DEBUG] [Thread-56116] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:45:41.229 [DEBUG] [Thread-56116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:45:41.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:45:41.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:45:41.230 [DEBUG] [Thread-56116] [transport.py] [_log()] userauth is OK
2025-11-17T14:45:41.230 [DEBUG] [Thread-56116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:45:41.230 [DEBUG] [Thread-56116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:45:41.230 [DEBUG] [Thread-56116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:45:41.230 [DEBUG] [Thread-56116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:45:41.241 [INFO] [Thread-56116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:45:41.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:45:41.857 [DEBUG] [Thread-56116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:45:41.857 [DEBUG] [Thread-56116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:45:41.857 [DEBUG] [Thread-56116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:45:41.898 [DEBUG] [Thread-56116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:45:41.898 [DEBUG] [Thread-56116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:45:41.900 [DEBUG] [Thread-56116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:45:41.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:45:41.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:45:41.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:45:41.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:45:41.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:45:41.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:45:41.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:45:41.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:45:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:45:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.530950 -999.00  +22.80  15.99     19   -1.90 1 1 1 1 1   888    0 23.88 -42.92 ----- 16.0 16.0 293.4 24.1 29.1 -28.4 28.9 -26.2 29.1 -25.1 29.9 -26.3
2025-11-17T14:45:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:45:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:45:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.530950
2025-11-17T14:45:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:45:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:45:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:45:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:45:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:45:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:45:08', tmtdew=29.35, humidity=13.52, cloud=0.0, wind=11.03, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:44:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:45:41.927 [DEBUG] [Thread-56116] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:45:42.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:45:42.013 [DEBUG] [Thread-56119] [transport.py] [_log()] starting thread (client mode): 0xd070feb0
2025-11-17T14:45:42.013 [DEBUG] [Thread-56119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:45:42.030 [DEBUG] [Thread-56119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:45:42.030 [INFO] [Thread-56119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] client lang: <none>
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] server lang: <none>
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] kex follows: False
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:45:42.037 [DEBUG] [Thread-56119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:45:42.038 [DEBUG] [Thread-56119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:45:42.038 [DEBUG] [Thread-56119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:45:42.038 [DEBUG] [Thread-56119] [transport.py] [_log()] Compression: none
2025-11-17T14:45:42.038 [DEBUG] [Thread-56119] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:45:42.097 [DEBUG] [Thread-56119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:45:42.097 [DEBUG] [Thread-56119] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:45:42.098 [DEBUG] [Thread-56119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:45:42.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:45:42.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:45:42.155 [DEBUG] [Thread-56119] [transport.py] [_log()] userauth is OK
2025-11-17T14:45:42.155 [DEBUG] [Thread-56119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:45:42.155 [DEBUG] [Thread-56119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:45:42.155 [DEBUG] [Thread-56119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:45:42.155 [DEBUG] [Thread-56119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:45:42.170 [INFO] [Thread-56119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:45:42.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:45:42.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:45:43.037 [DEBUG] [Thread-56119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:45:43.037 [DEBUG] [Thread-56119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:45:43.086 [DEBUG] [Thread-56119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:45:43.086 [DEBUG] [Thread-56119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:45:43.095 [DEBUG] [Thread-56119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:45:43.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:45: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')
2025-11-17T14:45: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
2025-11-17T14:45:43.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:45:43.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:45:43.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:45:43.130 [DEBUG] [Thread-56119] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:45:43.482 [DEBUG] [Thread-56121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:45:58.521 [DEBUG] [Thread-56122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:46:02.649 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:46:02.650 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:46:13.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:46:13.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:46:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:46:13.552 [DEBUG] [Thread-56123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:46:13.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 45, 40), 29.35, 13.47, 0.0, 6.39, 22.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:46:13.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:45:40
2025-11-17T14:46:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:46:14.151 [DEBUG] [Thread-56124] [transport.py] [_log()] starting thread (client mode): 0xd070e860
2025-11-17T14:46:14.151 [DEBUG] [Thread-56124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:46:14.172 [DEBUG] [Thread-56124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:46:14.172 [INFO] [Thread-56124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] client lang: <none>
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] server lang: <none>
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] kex follows: False
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] Compression: none
2025-11-17T14:46:14.175 [DEBUG] [Thread-56124] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:46:14.191 [DEBUG] [Thread-56124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:46:14.191 [DEBUG] [Thread-56124] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:46:14.192 [DEBUG] [Thread-56124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:46:14.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:46:14.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:46:14.192 [DEBUG] [Thread-56124] [transport.py] [_log()] userauth is OK
2025-11-17T14:46:14.192 [DEBUG] [Thread-56124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:46:14.192 [DEBUG] [Thread-56124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:46:14.192 [DEBUG] [Thread-56124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:46:14.192 [DEBUG] [Thread-56124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:46:14.208 [INFO] [Thread-56124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:46:14.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:46:14.850 [DEBUG] [Thread-56124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:46:14.850 [DEBUG] [Thread-56124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:46:14.851 [DEBUG] [Thread-56124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:46:14.891 [DEBUG] [Thread-56124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:46:14.891 [DEBUG] [Thread-56124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:46:14.895 [DEBUG] [Thread-56124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:46:14.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:46:14.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:46:14.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:46:14.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:46:14.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:46:14.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:46:14.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:46:14.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:46:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:46:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.531644 -999.00  +22.50   6.56     19   -2.00 1 2 1 1 1   888    0 24.49 -39.16 ----- 6.6 6.6 293.8 9.0 28.9 -25.8 28.7 -24.6 29.0 -18.9 29.4 -24.9
2025-11-17T14:46:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:46:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:46:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.531644
2025-11-17T14:46:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:46:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:46:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:46:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:46:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:46:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:45:40', tmtdew=29.35, humidity=13.47, cloud=0.0, wind=6.39, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:45:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:46:14.919 [DEBUG] [Thread-56124] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:46:15.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:46:15.016 [DEBUG] [Thread-56127] [transport.py] [_log()] starting thread (client mode): 0xd070f070
2025-11-17T14:46:15.016 [DEBUG] [Thread-56127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:46:15.032 [DEBUG] [Thread-56127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:46:15.032 [INFO] [Thread-56127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:46:15.040 [DEBUG] [Thread-56127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:46:15.040 [DEBUG] [Thread-56127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:46:15.040 [DEBUG] [Thread-56127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:46:15.040 [DEBUG] [Thread-56127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] client lang: <none>
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] server lang: <none>
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] kex follows: False
2025-11-17T14:46:15.041 [DEBUG] [Thread-56127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:46:15.042 [DEBUG] [Thread-56127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:46:15.042 [DEBUG] [Thread-56127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:46:15.042 [DEBUG] [Thread-56127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:46:15.042 [DEBUG] [Thread-56127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:46:15.042 [DEBUG] [Thread-56127] [transport.py] [_log()] Compression: none
2025-11-17T14:46:15.042 [DEBUG] [Thread-56127] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:46:15.098 [DEBUG] [Thread-56127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:46:15.098 [DEBUG] [Thread-56127] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:46:15.099 [DEBUG] [Thread-56127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:46:15.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:46:15.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:46:15.154 [DEBUG] [Thread-56127] [transport.py] [_log()] userauth is OK
2025-11-17T14:46:15.154 [DEBUG] [Thread-56127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:46:15.155 [DEBUG] [Thread-56127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:46:15.155 [DEBUG] [Thread-56127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:46:15.155 [DEBUG] [Thread-56127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:46:15.174 [INFO] [Thread-56127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:46:15.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:46:15.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:46:16.037 [DEBUG] [Thread-56127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:46:16.037 [DEBUG] [Thread-56127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:46:16.084 [DEBUG] [Thread-56127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:46:16.084 [DEBUG] [Thread-56127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:46:16.093 [DEBUG] [Thread-56127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:46:16.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:46:16.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:46:16.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:46:16.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:46:16.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:46:16.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:46:16.128 [DEBUG] [Thread-56127] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:46:16.609 [DEBUG] [Thread-56129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:46:28.573 [DEBUG] [Thread-56130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:46:43.609 [DEBUG] [Thread-56131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:46:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:46:46.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:46:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:46:46.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 46, 12), 29.3, 13.54, 0.0, 9.3, 23.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:46:46.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:46:12
2025-11-17T14:46:46.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:46:47.123 [DEBUG] [Thread-56132] [transport.py] [_log()] starting thread (client mode): 0xd3136b90
2025-11-17T14:46:47.123 [DEBUG] [Thread-56132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:46:47.144 [DEBUG] [Thread-56132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:46:47.144 [INFO] [Thread-56132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] client lang: <none>
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] server lang: <none>
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] kex follows: False
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:46:47.147 [DEBUG] [Thread-56132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:46:47.148 [DEBUG] [Thread-56132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:46:47.148 [DEBUG] [Thread-56132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:46:47.148 [DEBUG] [Thread-56132] [transport.py] [_log()] Compression: none
2025-11-17T14:46:47.148 [DEBUG] [Thread-56132] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:46:47.165 [DEBUG] [Thread-56132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:46:47.165 [DEBUG] [Thread-56132] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:46:47.165 [DEBUG] [Thread-56132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:46:47.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:46:47.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:46:47.167 [DEBUG] [Thread-56132] [transport.py] [_log()] userauth is OK
2025-11-17T14:46:47.168 [DEBUG] [Thread-56132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:46:47.168 [DEBUG] [Thread-56132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:46:47.168 [DEBUG] [Thread-56132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:46:47.168 [DEBUG] [Thread-56132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:46:47.183 [INFO] [Thread-56132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:46:47.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:46:47.838 [DEBUG] [Thread-56132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:46:47.838 [DEBUG] [Thread-56132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:46:47.838 [DEBUG] [Thread-56132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:46:47.879 [DEBUG] [Thread-56132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:46:47.880 [DEBUG] [Thread-56132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:46:47.883 [DEBUG] [Thread-56132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:46:47.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:46:47.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:46:47.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:46:47.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:46:47.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:46:47.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:46:47.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:46:47.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:46:47.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:46:47.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.531991 -999.00  +22.60   3.80     19   -1.90 1 2 1 1 1   888    0 24.38 -43.80 ----- 3.8 3.8 246.6 4.9 29.3 -21.8 29.1 -20.2 29.6 -16.9 29.9 -19.0
2025-11-17T14:46:47.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:46:47.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:46:47.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.531991
2025-11-17T14:46:47.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:46:47.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:46:47.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:46:47.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:46:47.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:46:47.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:46:12', tmtdew=29.3, humidity=13.54, cloud=0.0, wind=9.3, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:46:04.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:46:47.909 [DEBUG] [Thread-56132] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:46:47.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:46:48.006 [DEBUG] [Thread-56135] [transport.py] [_log()] starting thread (client mode): 0xd31cde70
2025-11-17T14:46:48.006 [DEBUG] [Thread-56135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:46:48.022 [DEBUG] [Thread-56135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:46:48.022 [INFO] [Thread-56135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:46:48.029 [DEBUG] [Thread-56135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] client lang: <none>
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] server lang: <none>
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] kex follows: False
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:46:48.030 [DEBUG] [Thread-56135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:46:48.031 [DEBUG] [Thread-56135] [transport.py] [_log()] Compression: none
2025-11-17T14:46:48.031 [DEBUG] [Thread-56135] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:46:48.090 [DEBUG] [Thread-56135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:46:48.091 [DEBUG] [Thread-56135] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:46:48.091 [DEBUG] [Thread-56135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:46:48.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:46:48.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:46:48.150 [DEBUG] [Thread-56135] [transport.py] [_log()] userauth is OK
2025-11-17T14:46:48.150 [DEBUG] [Thread-56135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:46:48.151 [DEBUG] [Thread-56135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:46:48.151 [DEBUG] [Thread-56135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:46:48.151 [DEBUG] [Thread-56135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:46:48.170 [INFO] [Thread-56135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:46:48.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:46:48.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:46:49.080 [DEBUG] [Thread-56135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:46:49.081 [DEBUG] [Thread-56135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:46:49.128 [DEBUG] [Thread-56135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:46:49.128 [DEBUG] [Thread-56135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:46:49.137 [DEBUG] [Thread-56135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:46:49.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:46:49.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:46:49.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:46:49.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:46:49.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:46:49.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:46:49.172 [DEBUG] [Thread-56135] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:46:58.640 [DEBUG] [Thread-56137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:47:02.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:47:02.791 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:47:13.686 [DEBUG] [Thread-56138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:47:16.664 [DEBUG] [Thread-56139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:47:19.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:47:19.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:47:19.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:47:19.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 47, 16), 29.72, 13.44, 0.0, 11.22, 23.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:47:19.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:47:16
2025-11-17T14:47:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:47:20.122 [DEBUG] [Thread-56140] [transport.py] [_log()] starting thread (client mode): 0xd31348e0
2025-11-17T14:47:20.122 [DEBUG] [Thread-56140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:47:20.141 [DEBUG] [Thread-56140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:47:20.141 [INFO] [Thread-56140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:47:20.144 [DEBUG] [Thread-56140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] client lang: <none>
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] server lang: <none>
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] kex follows: False
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:47:20.145 [DEBUG] [Thread-56140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:47:20.146 [DEBUG] [Thread-56140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:47:20.146 [DEBUG] [Thread-56140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:47:20.146 [DEBUG] [Thread-56140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:47:20.146 [DEBUG] [Thread-56140] [transport.py] [_log()] Compression: none
2025-11-17T14:47:20.146 [DEBUG] [Thread-56140] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:47:20.166 [DEBUG] [Thread-56140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:47:20.166 [DEBUG] [Thread-56140] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:47:20.167 [DEBUG] [Thread-56140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:47:20.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:47:20.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:47:20.169 [DEBUG] [Thread-56140] [transport.py] [_log()] userauth is OK
2025-11-17T14:47:20.169 [DEBUG] [Thread-56140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:47:20.169 [DEBUG] [Thread-56140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:47:20.169 [DEBUG] [Thread-56140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:47:20.169 [DEBUG] [Thread-56140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:47:20.183 [INFO] [Thread-56140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:47:20.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:47:20.826 [DEBUG] [Thread-56140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:47:20.827 [DEBUG] [Thread-56140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:47:20.827 [DEBUG] [Thread-56140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:47:20.867 [DEBUG] [Thread-56140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:47:20.867 [DEBUG] [Thread-56140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:47:20.871 [DEBUG] [Thread-56140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:47:20.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:47:20.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:47:20.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:47:20.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:47:20.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:47:20.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:47:20.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:47:20.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:47:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:47:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.532339 -999.00  +22.70   8.71     19   -1.70 1 2 1 1 1   888    0 24.31 -51.27 ----- 8.7 8.7 260.2 13.3 29.6 -20.8 29.3 -19.8 29.8 -16.9 30.2 -18.4
2025-11-17T14:47:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:47:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:47:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.532339
2025-11-17T14:47:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:47:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:47:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:47:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:47:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:47:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:47:16', tmtdew=29.72, humidity=13.44, cloud=0.0, wind=11.22, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:46:34.090', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:47:20.896 [DEBUG] [Thread-56140] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:47:20.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:47:20.992 [DEBUG] [Thread-56143] [transport.py] [_log()] starting thread (client mode): 0xd0758c10
2025-11-17T14:47:20.992 [DEBUG] [Thread-56143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:47:21.008 [DEBUG] [Thread-56143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:47:21.008 [INFO] [Thread-56143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:47:21.015 [DEBUG] [Thread-56143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:47:21.016 [DEBUG] [Thread-56143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:47:21.016 [DEBUG] [Thread-56143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:47:21.016 [DEBUG] [Thread-56143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:47:21.016 [DEBUG] [Thread-56143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:47:21.016 [DEBUG] [Thread-56143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:47:21.016 [DEBUG] [Thread-56143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:47:21.016 [DEBUG] [Thread-56143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:47:21.016 [DEBUG] [Thread-56143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] client lang: <none>
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] server lang: <none>
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] kex follows: False
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:47:21.017 [DEBUG] [Thread-56143] [transport.py] [_log()] Compression: none
2025-11-17T14:47:21.018 [DEBUG] [Thread-56143] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:47:21.075 [DEBUG] [Thread-56143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:47:21.075 [DEBUG] [Thread-56143] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:47:21.076 [DEBUG] [Thread-56143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:47:21.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:47:21.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:47:21.130 [DEBUG] [Thread-56143] [transport.py] [_log()] userauth is OK
2025-11-17T14:47:21.130 [DEBUG] [Thread-56143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:47:21.131 [DEBUG] [Thread-56143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:47:21.131 [DEBUG] [Thread-56143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:47:21.131 [DEBUG] [Thread-56143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:47:21.150 [INFO] [Thread-56143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:47:21.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:47:21.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:47:22.051 [DEBUG] [Thread-56143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:47:22.051 [DEBUG] [Thread-56143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:47:22.098 [DEBUG] [Thread-56143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:47:22.098 [DEBUG] [Thread-56143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:47:22.107 [DEBUG] [Thread-56143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:47:22.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:47:22.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:47:22.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:47:22.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:47:22.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:47:22.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:47:22.142 [DEBUG] [Thread-56143] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:47:28.716 [DEBUG] [Thread-56145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:47:43.762 [DEBUG] [Thread-56146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:47:52.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:47:52.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:47:52.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:47:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 47, 48), 29.35, 13.4, 0.0, 12.92, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:47:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:47:48
2025-11-17T14:47:52.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:47:53.090 [DEBUG] [Thread-56147] [transport.py] [_log()] starting thread (client mode): 0xd0759930
2025-11-17T14:47:53.090 [DEBUG] [Thread-56147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:47:53.110 [DEBUG] [Thread-56147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:47:53.110 [INFO] [Thread-56147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:47:53.113 [DEBUG] [Thread-56147] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:47:53.113 [DEBUG] [Thread-56147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:47:53.113 [DEBUG] [Thread-56147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:47:53.113 [DEBUG] [Thread-56147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:47:53.113 [DEBUG] [Thread-56147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] client lang: <none>
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] server lang: <none>
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] kex follows: False
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:47:53.114 [DEBUG] [Thread-56147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:47:53.115 [DEBUG] [Thread-56147] [transport.py] [_log()] Compression: none
2025-11-17T14:47:53.115 [DEBUG] [Thread-56147] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:47:53.134 [DEBUG] [Thread-56147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:47:53.135 [DEBUG] [Thread-56147] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:47:53.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:47:53.136 [DEBUG] [Thread-56147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:47:53.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:47:53.138 [DEBUG] [Thread-56147] [transport.py] [_log()] userauth is OK
2025-11-17T14:47:53.138 [DEBUG] [Thread-56147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:47:53.138 [DEBUG] [Thread-56147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:47:53.138 [DEBUG] [Thread-56147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:47:53.138 [DEBUG] [Thread-56147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:47:53.172 [INFO] [Thread-56147] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:47:53.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:47:53.804 [DEBUG] [Thread-56147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:47:53.805 [DEBUG] [Thread-56147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:47:53.805 [DEBUG] [Thread-56147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:47:53.845 [DEBUG] [Thread-56147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:47:53.846 [DEBUG] [Thread-56147] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:47:53.848 [DEBUG] [Thread-56147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:47:53.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:47:53.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:47:53.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:47:53.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:47:53.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:47:53.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:47:53.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:47:53.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:47:53.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:47:53.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.532686 -999.00  +23.00   8.16     19   -1.60 1 2 1 1 1   888    0 23.78 -53.62 ----- 8.2 8.2 271.6 11.2 29.8 -20.2 29.5 -19.0 30.0 -22.3 30.4 -18.6
2025-11-17T14:47:53.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:47:53.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:47:53.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.532686
2025-11-17T14:47:53.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:47:53.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:47:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:47:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:47:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:47:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:47:48', tmtdew=29.35, humidity=13.4, cloud=0.0, wind=12.92, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:47:04.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:47:53.873 [DEBUG] [Thread-56147] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:47:53.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:47:53.969 [DEBUG] [Thread-56150] [transport.py] [_log()] starting thread (client mode): 0xd07cd150
2025-11-17T14:47:53.969 [DEBUG] [Thread-56150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:47:53.984 [DEBUG] [Thread-56150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:47:53.984 [INFO] [Thread-56150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:47:53.992 [DEBUG] [Thread-56150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:47:53.992 [DEBUG] [Thread-56150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:47:53.992 [DEBUG] [Thread-56150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:47:53.992 [DEBUG] [Thread-56150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:47:53.992 [DEBUG] [Thread-56150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:47:53.992 [DEBUG] [Thread-56150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] client lang: <none>
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] server lang: <none>
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] kex follows: False
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] Compression: none
2025-11-17T14:47:53.993 [DEBUG] [Thread-56150] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:47:54.050 [DEBUG] [Thread-56150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:47:54.051 [DEBUG] [Thread-56150] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:47:54.051 [DEBUG] [Thread-56150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:47:54.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:47:54.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:47:54.110 [DEBUG] [Thread-56150] [transport.py] [_log()] userauth is OK
2025-11-17T14:47:54.110 [DEBUG] [Thread-56150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:47:54.110 [DEBUG] [Thread-56150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:47:54.111 [DEBUG] [Thread-56150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:47:54.111 [DEBUG] [Thread-56150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:47:54.130 [INFO] [Thread-56150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:47:54.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:47:54.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:47:55.040 [DEBUG] [Thread-56150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:47:55.040 [DEBUG] [Thread-56150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:47:55.087 [DEBUG] [Thread-56150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:47:55.087 [DEBUG] [Thread-56150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:47:55.096 [DEBUG] [Thread-56150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:47:55.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:47:55.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:47:55.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:47:55.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:47:55.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:47:55.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:47:55.130 [DEBUG] [Thread-56150] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:47:58.786 [DEBUG] [Thread-56152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:48:02.935 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:48:02.936 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:48:13.831 [DEBUG] [Thread-56153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:48:16.726 [DEBUG] [Thread-56154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:48:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:48:25.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:48:25.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:48:25.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 48, 20), 29.29, 13.49, 0.0, 14.49, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:48:25.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:48:20
2025-11-17T14:48:25.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:48:26.090 [DEBUG] [Thread-56155] [transport.py] [_log()] starting thread (client mode): 0xd31379d0
2025-11-17T14:48:26.090 [DEBUG] [Thread-56155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:48:26.111 [DEBUG] [Thread-56155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:48:26.111 [INFO] [Thread-56155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] client lang: <none>
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] server lang: <none>
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] kex follows: False
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] Compression: none
2025-11-17T14:48:26.113 [DEBUG] [Thread-56155] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:48:26.129 [DEBUG] [Thread-56155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:48:26.129 [DEBUG] [Thread-56155] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:48:26.129 [DEBUG] [Thread-56155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:48:26.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:48:26.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:48:26.130 [DEBUG] [Thread-56155] [transport.py] [_log()] userauth is OK
2025-11-17T14:48:26.130 [DEBUG] [Thread-56155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:48:26.130 [DEBUG] [Thread-56155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:48:26.130 [DEBUG] [Thread-56155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:48:26.130 [DEBUG] [Thread-56155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:48:26.149 [INFO] [Thread-56155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:48:26.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:48:26.782 [DEBUG] [Thread-56155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:48:26.782 [DEBUG] [Thread-56155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:48:26.782 [DEBUG] [Thread-56155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:48:26.823 [DEBUG] [Thread-56155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:48:26.823 [DEBUG] [Thread-56155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:48:26.825 [DEBUG] [Thread-56155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:48:26.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:48:26.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:48:26.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:48:26.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:48:26.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:48:26.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:48:26.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:48:26.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:48:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:48:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.533033 -999.00  +23.10  10.27     19   -1.50 1 2 1 1 1   888    0 23.56 -56.60 ----- 10.3 10.3 286.4 14.6 29.5 -25.2 29.3 -23.4 29.4 -22.4 30.2 -24.3
2025-11-17T14:48:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:48:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:48:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.533033
2025-11-17T14:48:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:48:26.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:48:26.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:48:26.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:48:26.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:48:26.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:48:20', tmtdew=29.29, humidity=13.49, cloud=0.0, wind=14.49, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:47:34.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:48:26.844 [DEBUG] [Thread-56155] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:48:26.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:48:26.929 [DEBUG] [Thread-56158] [transport.py] [_log()] starting thread (client mode): 0xd3136200
2025-11-17T14:48:26.929 [DEBUG] [Thread-56158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:48:26.947 [DEBUG] [Thread-56158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:48:26.947 [INFO] [Thread-56158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:48:26.954 [DEBUG] [Thread-56158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] client lang: <none>
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] server lang: <none>
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] kex follows: False
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] Compression: none
2025-11-17T14:48:26.955 [DEBUG] [Thread-56158] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:48:27.012 [DEBUG] [Thread-56158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:48:27.013 [DEBUG] [Thread-56158] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:48:27.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:48:27.013 [DEBUG] [Thread-56158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:48:27.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:48:27.070 [DEBUG] [Thread-56158] [transport.py] [_log()] userauth is OK
2025-11-17T14:48:27.070 [DEBUG] [Thread-56158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:48:27.070 [DEBUG] [Thread-56158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:48:27.070 [DEBUG] [Thread-56158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:48:27.070 [DEBUG] [Thread-56158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:48:27.084 [INFO] [Thread-56158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:48:27.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:48:27.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:48:27.915 [DEBUG] [Thread-56158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:48:27.915 [DEBUG] [Thread-56158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:48:27.964 [DEBUG] [Thread-56158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:48:27.965 [DEBUG] [Thread-56158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:48:27.975 [DEBUG] [Thread-56158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:48:27.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:48:27.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:48:27.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:48:28.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:48:28.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:48:28.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:48:28.011 [DEBUG] [Thread-56158] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:48:28.859 [DEBUG] [Thread-56160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:48:43.898 [DEBUG] [Thread-56161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:48:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:48:58.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:48:58.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:48:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 48, 52), 29.01, 14.04, 29.3, 11.49, 22.81, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:48:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:48:52
2025-11-17T14:48:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:48:58.930 [DEBUG] [Thread-56162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:48:58.957 [DEBUG] [Thread-56163] [transport.py] [_log()] starting thread (client mode): 0xd078dd20
2025-11-17T14:48:58.957 [DEBUG] [Thread-56163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:48:58.977 [DEBUG] [Thread-56163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:48:58.978 [INFO] [Thread-56163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] client lang: <none>
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] server lang: <none>
2025-11-17T14:48:58.981 [DEBUG] [Thread-56163] [transport.py] [_log()] kex follows: False
2025-11-17T14:48:58.982 [DEBUG] [Thread-56163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:48:58.982 [DEBUG] [Thread-56163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:48:58.982 [DEBUG] [Thread-56163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:48:58.982 [DEBUG] [Thread-56163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:48:58.982 [DEBUG] [Thread-56163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:48:58.982 [DEBUG] [Thread-56163] [transport.py] [_log()] Compression: none
2025-11-17T14:48:58.982 [DEBUG] [Thread-56163] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:48:58.995 [DEBUG] [Thread-56163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:48:58.995 [DEBUG] [Thread-56163] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:48:58.996 [DEBUG] [Thread-56163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:48:58.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:48:58.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:48:58.998 [DEBUG] [Thread-56163] [transport.py] [_log()] userauth is OK
2025-11-17T14:48:58.998 [DEBUG] [Thread-56163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:48:58.998 [DEBUG] [Thread-56163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:48:58.998 [DEBUG] [Thread-56163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:48:58.998 [DEBUG] [Thread-56163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:48:59.022 [INFO] [Thread-56163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:48:59.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:48:59.640 [DEBUG] [Thread-56163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:48:59.640 [DEBUG] [Thread-56163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:48:59.641 [DEBUG] [Thread-56163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:48:59.681 [DEBUG] [Thread-56163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:48:59.682 [DEBUG] [Thread-56163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:48:59.685 [DEBUG] [Thread-56163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:48:59.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:48:59.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:48:59.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:48:59.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:48:59.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:48:59.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:48:59.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:48:59.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:48:59.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:48:59.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.533380 -999.00  +23.10  12.85     19   -1.40 1 2 1 1 1   888    0 23.69 -56.66 ----- 12.8 12.8 278.4 17.4 29.2 -25.0 29.1 -23.2 28.9 -21.8 30.0 -23.6
2025-11-17T14:48:59.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:48:59.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:48:59.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.533380
2025-11-17T14:48:59.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:48:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:48:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:48:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:48:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:48:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:48:52', tmtdew=29.01, humidity=14.04, cloud=29.3, wind=11.49, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:48:04.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:48:59.711 [DEBUG] [Thread-56163] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:48:59.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:48:59.806 [DEBUG] [Thread-56166] [transport.py] [_log()] starting thread (client mode): 0xd078d9f0
2025-11-17T14:48:59.807 [DEBUG] [Thread-56166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:48:59.821 [DEBUG] [Thread-56166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:48:59.821 [INFO] [Thread-56166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:48:59.829 [DEBUG] [Thread-56166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:48:59.829 [DEBUG] [Thread-56166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:48:59.829 [DEBUG] [Thread-56166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:48:59.829 [DEBUG] [Thread-56166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] client lang: <none>
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] server lang: <none>
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] kex follows: False
2025-11-17T14:48:59.830 [DEBUG] [Thread-56166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:48:59.831 [DEBUG] [Thread-56166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:48:59.831 [DEBUG] [Thread-56166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:48:59.831 [DEBUG] [Thread-56166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:48:59.831 [DEBUG] [Thread-56166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:48:59.831 [DEBUG] [Thread-56166] [transport.py] [_log()] Compression: none
2025-11-17T14:48:59.831 [DEBUG] [Thread-56166] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:48:59.887 [DEBUG] [Thread-56166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:48:59.887 [DEBUG] [Thread-56166] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:48:59.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:48:59.888 [DEBUG] [Thread-56166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:48:59.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:48:59.946 [DEBUG] [Thread-56166] [transport.py] [_log()] userauth is OK
2025-11-17T14:48:59.946 [DEBUG] [Thread-56166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:48:59.947 [DEBUG] [Thread-56166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:48:59.947 [DEBUG] [Thread-56166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:48:59.947 [DEBUG] [Thread-56166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:48:59.969 [INFO] [Thread-56166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:48:59.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:48:59.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:49:00.815 [DEBUG] [Thread-56166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:49:00.815 [DEBUG] [Thread-56166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:49:00.863 [DEBUG] [Thread-56166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:49:00.863 [DEBUG] [Thread-56166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:49:00.871 [DEBUG] [Thread-56166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:49:00.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:49:00.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:49:00.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:49:00.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:49:00.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:49:00.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:49:00.903 [DEBUG] [Thread-56166] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:49:03.077 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:49:03.078 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:49:13.957 [DEBUG] [Thread-56168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:49:16.784 [DEBUG] [Thread-56169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:49:28.999 [DEBUG] [Thread-56170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:49:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:49:30.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:49:30.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:49:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 49, 24), 28.95, 14.1, 29.3, 12.3, 22.82, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:49:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:49:24
2025-11-17T14:49:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:49:31.834 [DEBUG] [Thread-56171] [transport.py] [_log()] starting thread (client mode): 0xd0776560
2025-11-17T14:49:31.834 [DEBUG] [Thread-56171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:49:31.854 [DEBUG] [Thread-56171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:49:31.854 [INFO] [Thread-56171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:49:31.857 [DEBUG] [Thread-56171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] client lang: <none>
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] server lang: <none>
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] kex follows: False
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:49:31.858 [DEBUG] [Thread-56171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:49:31.859 [DEBUG] [Thread-56171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:49:31.859 [DEBUG] [Thread-56171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:49:31.859 [DEBUG] [Thread-56171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:49:31.859 [DEBUG] [Thread-56171] [transport.py] [_log()] Compression: none
2025-11-17T14:49:31.859 [DEBUG] [Thread-56171] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:49:31.876 [DEBUG] [Thread-56171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:49:31.876 [DEBUG] [Thread-56171] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:49:31.877 [DEBUG] [Thread-56171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:49:31.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:49:31.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:49:31.879 [DEBUG] [Thread-56171] [transport.py] [_log()] userauth is OK
2025-11-17T14:49:31.879 [DEBUG] [Thread-56171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:49:31.879 [DEBUG] [Thread-56171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:49:31.879 [DEBUG] [Thread-56171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:49:31.879 [DEBUG] [Thread-56171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:49:31.903 [INFO] [Thread-56171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:49:31.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:49:32.522 [DEBUG] [Thread-56171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:49:32.522 [DEBUG] [Thread-56171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:49:32.522 [DEBUG] [Thread-56171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:49:32.563 [DEBUG] [Thread-56171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:49:32.563 [DEBUG] [Thread-56171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:49:32.566 [DEBUG] [Thread-56171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:49:32.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:49:32.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:49:32.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:49:32.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:49:32.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:49:32.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:49:32.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:49:32.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:49:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:49:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.533727 -999.00  +22.90   8.09     19   -1.50 1 2 1 1 1   888    0 23.83 -63.54 ----- 8.1 8.1 264.5 17.0 29.2 -22.6 29.1 -21.0 29.5 -16.8 29.9 -21.4
2025-11-17T14:49:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:49:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:49:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.533727
2025-11-17T14:49:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:49:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:49:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:49:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:49:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:49:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:49:24', tmtdew=28.95, humidity=14.1, cloud=29.3, wind=12.3, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:48:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:49:32.592 [DEBUG] [Thread-56171] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:49:32.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:49:32.686 [DEBUG] [Thread-56174] [transport.py] [_log()] starting thread (client mode): 0xd078d840
2025-11-17T14:49:32.686 [DEBUG] [Thread-56174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:49:32.704 [DEBUG] [Thread-56174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:49:32.705 [INFO] [Thread-56174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] client lang: <none>
2025-11-17T14:49:32.712 [DEBUG] [Thread-56174] [transport.py] [_log()] server lang: <none>
2025-11-17T14:49:32.713 [DEBUG] [Thread-56174] [transport.py] [_log()] kex follows: False
2025-11-17T14:49:32.713 [DEBUG] [Thread-56174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:49:32.713 [DEBUG] [Thread-56174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:49:32.713 [DEBUG] [Thread-56174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:49:32.713 [DEBUG] [Thread-56174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:49:32.713 [DEBUG] [Thread-56174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:49:32.713 [DEBUG] [Thread-56174] [transport.py] [_log()] Compression: none
2025-11-17T14:49:32.713 [DEBUG] [Thread-56174] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:49:32.770 [DEBUG] [Thread-56174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:49:32.770 [DEBUG] [Thread-56174] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:49:32.771 [DEBUG] [Thread-56174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:49:32.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:49:32.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:49:32.826 [DEBUG] [Thread-56174] [transport.py] [_log()] userauth is OK
2025-11-17T14:49:32.826 [DEBUG] [Thread-56174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:49:32.826 [DEBUG] [Thread-56174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:49:32.826 [DEBUG] [Thread-56174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:49:32.827 [DEBUG] [Thread-56174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:49:32.845 [INFO] [Thread-56174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:49:32.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:49:32.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:49:33.716 [DEBUG] [Thread-56174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:49:33.716 [DEBUG] [Thread-56174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:49:33.763 [DEBUG] [Thread-56174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:49:33.763 [DEBUG] [Thread-56174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:49:33.772 [DEBUG] [Thread-56174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:49:33.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:49:33.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:49:33.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:49:33.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:49:33.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:49:33.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:49:33.807 [DEBUG] [Thread-56174] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:49:44.029 [DEBUG] [Thread-56176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:49:59.064 [DEBUG] [Thread-56177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:50:03.220 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:50:03.221 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:50:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:50:03.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:50:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:50:04.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 49, 56), 28.88, 14.04, 29.3, 10.02, 22.84, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:50:04.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:49:56
2025-11-17T14:50:04.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:50:04.757 [DEBUG] [Thread-56178] [transport.py] [_log()] starting thread (client mode): 0xd075a4a0
2025-11-17T14:50:04.757 [DEBUG] [Thread-56178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:50:04.778 [DEBUG] [Thread-56178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:50:04.778 [INFO] [Thread-56178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:50:04.781 [DEBUG] [Thread-56178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:50:04.781 [DEBUG] [Thread-56178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:50:04.781 [DEBUG] [Thread-56178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:50:04.781 [DEBUG] [Thread-56178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:50:04.781 [DEBUG] [Thread-56178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:50:04.781 [DEBUG] [Thread-56178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:50:04.781 [DEBUG] [Thread-56178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] client lang: <none>
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] server lang: <none>
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] kex follows: False
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] Compression: none
2025-11-17T14:50:04.782 [DEBUG] [Thread-56178] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:50:04.800 [DEBUG] [Thread-56178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:50:04.801 [DEBUG] [Thread-56178] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:50:04.802 [DEBUG] [Thread-56178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:50:04.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:50:04.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:50:04.804 [DEBUG] [Thread-56178] [transport.py] [_log()] userauth is OK
2025-11-17T14:50:04.805 [DEBUG] [Thread-56178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:50:04.805 [DEBUG] [Thread-56178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:50:04.805 [DEBUG] [Thread-56178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:50:04.805 [DEBUG] [Thread-56178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:50:04.830 [INFO] [Thread-56178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:50:04.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:50:06.889 [DEBUG] [Thread-56178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:50:06.889 [DEBUG] [Thread-56178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:50:06.889 [DEBUG] [Thread-56178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:50:06.929 [DEBUG] [Thread-56178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:50:06.930 [DEBUG] [Thread-56178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:50:06.932 [DEBUG] [Thread-56178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:50:06.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:50:06.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:50:06.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:50:06.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:50:06.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:50:06.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:50:06.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:50:06.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:50:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:50:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.534075 -999.00  +22.70  11.97     19   -1.60 1 2 1 1 1   888    0 23.49 -70.04 ----- 12.0 12.0 265.0 16.6 29.6 -20.3 29.4 -18.5 29.8 -16.4 30.2 -18.1
2025-11-17T14:50:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:50:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:50:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.534075
2025-11-17T14:50:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:50:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:50:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:50:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:50:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:50:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:49:56', tmtdew=28.88, humidity=14.04, cloud=29.3, wind=10.02, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:49:04.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:50:06.967 [DEBUG] [Thread-56178] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:50:07.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:50:07.063 [DEBUG] [Thread-56181] [transport.py] [_log()] starting thread (client mode): 0xd3136650
2025-11-17T14:50:07.063 [DEBUG] [Thread-56181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:50:07.078 [DEBUG] [Thread-56181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:50:07.078 [INFO] [Thread-56181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] client lang: <none>
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] server lang: <none>
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] kex follows: False
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:50:07.086 [DEBUG] [Thread-56181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:50:07.087 [DEBUG] [Thread-56181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:50:07.087 [DEBUG] [Thread-56181] [transport.py] [_log()] Compression: none
2025-11-17T14:50:07.087 [DEBUG] [Thread-56181] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:50:07.146 [DEBUG] [Thread-56181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:50:07.147 [DEBUG] [Thread-56181] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:50:07.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:50:07.148 [DEBUG] [Thread-56181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:50:07.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:50:07.202 [DEBUG] [Thread-56181] [transport.py] [_log()] userauth is OK
2025-11-17T14:50:07.202 [DEBUG] [Thread-56181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:50:07.202 [DEBUG] [Thread-56181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:50:07.202 [DEBUG] [Thread-56181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:50:07.202 [DEBUG] [Thread-56181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:50:07.220 [INFO] [Thread-56181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:50:07.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:50:07.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:50:08.083 [DEBUG] [Thread-56181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:50:08.083 [DEBUG] [Thread-56181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:50:08.131 [DEBUG] [Thread-56181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:50:08.131 [DEBUG] [Thread-56181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:50:08.141 [DEBUG] [Thread-56181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:50:08.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:50:08.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:50:08.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:50:08.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:50:08.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:50:08.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:50:08.177 [DEBUG] [Thread-56181] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:50:14.095 [DEBUG] [Thread-56183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:50:16.837 [DEBUG] [Thread-56184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:50:29.141 [DEBUG] [Thread-56185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:50:38.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:50:38.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:50:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:50:38.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 50, 28), 28.98, 13.94, 29.3, 9.99, 22.84, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:50:38.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:50:28
2025-11-17T14:50:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:50:39.108 [DEBUG] [Thread-56186] [transport.py] [_log()] starting thread (client mode): 0xd07591e0
2025-11-17T14:50:39.108 [DEBUG] [Thread-56186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:50:39.128 [DEBUG] [Thread-56186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:50:39.128 [INFO] [Thread-56186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] client lang: <none>
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] server lang: <none>
2025-11-17T14:50:39.130 [DEBUG] [Thread-56186] [transport.py] [_log()] kex follows: False
2025-11-17T14:50:39.131 [DEBUG] [Thread-56186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:50:39.131 [DEBUG] [Thread-56186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:50:39.131 [DEBUG] [Thread-56186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:50:39.131 [DEBUG] [Thread-56186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:50:39.131 [DEBUG] [Thread-56186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:50:39.131 [DEBUG] [Thread-56186] [transport.py] [_log()] Compression: none
2025-11-17T14:50:39.131 [DEBUG] [Thread-56186] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:50:39.149 [DEBUG] [Thread-56186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:50:39.149 [DEBUG] [Thread-56186] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:50:39.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:50:39.150 [DEBUG] [Thread-56186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:50:39.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:50:39.152 [DEBUG] [Thread-56186] [transport.py] [_log()] userauth is OK
2025-11-17T14:50:39.152 [DEBUG] [Thread-56186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:50:39.152 [DEBUG] [Thread-56186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:50:39.152 [DEBUG] [Thread-56186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:50:39.152 [DEBUG] [Thread-56186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:50:39.175 [INFO] [Thread-56186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:50:39.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:50:39.800 [DEBUG] [Thread-56186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:50:39.800 [DEBUG] [Thread-56186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:50:39.801 [DEBUG] [Thread-56186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:50:39.841 [DEBUG] [Thread-56186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:50:39.841 [DEBUG] [Thread-56186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:50:39.844 [DEBUG] [Thread-56186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:50:39.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:50:39.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:50:39.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:50:39.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:50:39.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:50:39.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:50:39.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:50:39.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:50:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:50:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.534422 -999.00  +22.80   7.86     19   -1.40 1 2 1 1 1   888    0 23.15 -74.75 ----- 7.9 7.9 249.5 11.6 30.0 -18.9 29.6 -18.2 29.7 -18.9 30.6 -17.7
2025-11-17T14:50:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:50:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:50:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.534422
2025-11-17T14:50:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:50:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:50:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:50:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:50:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:50:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:50:28', tmtdew=28.98, humidity=13.94, cloud=29.3, wind=9.99, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:49:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:50:39.870 [DEBUG] [Thread-56186] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:50:39.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:50:39.966 [DEBUG] [Thread-56189] [transport.py] [_log()] starting thread (client mode): 0xd31ee2c0
2025-11-17T14:50:39.967 [DEBUG] [Thread-56189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:50:39.981 [DEBUG] [Thread-56189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:50:39.981 [INFO] [Thread-56189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:50:39.988 [DEBUG] [Thread-56189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] client lang: <none>
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] server lang: <none>
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] kex follows: False
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] Compression: none
2025-11-17T14:50:39.989 [DEBUG] [Thread-56189] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:50:40.048 [DEBUG] [Thread-56189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:50:40.049 [DEBUG] [Thread-56189] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:50:40.049 [DEBUG] [Thread-56189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:50:40.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:50:40.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:50:40.106 [DEBUG] [Thread-56189] [transport.py] [_log()] userauth is OK
2025-11-17T14:50:40.106 [DEBUG] [Thread-56189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:50:40.107 [DEBUG] [Thread-56189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:50:40.107 [DEBUG] [Thread-56189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:50:40.107 [DEBUG] [Thread-56189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:50:40.125 [INFO] [Thread-56189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:50:40.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:50:40.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:50:40.991 [DEBUG] [Thread-56189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:50:40.991 [DEBUG] [Thread-56189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:50:41.040 [DEBUG] [Thread-56189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:50:41.040 [DEBUG] [Thread-56189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:50:41.049 [DEBUG] [Thread-56189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:50:41.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:50:41.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:50:41.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:50:41.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:50:41.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:50:41.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:50:41.084 [DEBUG] [Thread-56189] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:50:44.169 [DEBUG] [Thread-56191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:50:59.211 [DEBUG] [Thread-56192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:51:03.363 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:51:03.364 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:51:11.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:51:11.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:51:11.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:51:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 51), 28.79, 14.0, 29.3, 9.95, 22.79, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:51:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:51:00
2025-11-17T14:51:11.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:51:12.000 [DEBUG] [Thread-56193] [transport.py] [_log()] starting thread (client mode): 0xd07770a0
2025-11-17T14:51:12.000 [DEBUG] [Thread-56193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:51:12.020 [DEBUG] [Thread-56193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:51:12.020 [INFO] [Thread-56193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] client lang: <none>
2025-11-17T14:51:12.023 [DEBUG] [Thread-56193] [transport.py] [_log()] server lang: <none>
2025-11-17T14:51:12.024 [DEBUG] [Thread-56193] [transport.py] [_log()] kex follows: False
2025-11-17T14:51:12.024 [DEBUG] [Thread-56193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:51:12.024 [DEBUG] [Thread-56193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:51:12.024 [DEBUG] [Thread-56193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:51:12.024 [DEBUG] [Thread-56193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:51:12.024 [DEBUG] [Thread-56193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:51:12.024 [DEBUG] [Thread-56193] [transport.py] [_log()] Compression: none
2025-11-17T14:51:12.024 [DEBUG] [Thread-56193] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:51:12.041 [DEBUG] [Thread-56193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:51:12.041 [DEBUG] [Thread-56193] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:51:12.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:51:12.042 [DEBUG] [Thread-56193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:51:12.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:51:12.044 [DEBUG] [Thread-56193] [transport.py] [_log()] userauth is OK
2025-11-17T14:51:12.044 [DEBUG] [Thread-56193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:51:12.044 [DEBUG] [Thread-56193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:51:12.044 [DEBUG] [Thread-56193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:51:12.044 [DEBUG] [Thread-56193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:51:12.068 [INFO] [Thread-56193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:51:12.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:51:12.705 [DEBUG] [Thread-56193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:51:12.707 [DEBUG] [Thread-56193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:51:12.708 [DEBUG] [Thread-56193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:51:12.746 [DEBUG] [Thread-56193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:51:12.747 [DEBUG] [Thread-56193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:51:12.749 [DEBUG] [Thread-56193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:51:12.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:51:12.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:51:12.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:51:12.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:51:12.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:51:12.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:51:12.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:51:12.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:51:12.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:51:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.535116 -999.00  +22.50  12.97     19   -1.50 1 2 1 1 1   888    0 22.82 -75.82 ----- 13.0 13.0 278.4 14.7 29.3 -24.8 29.0 -22.8 28.9 -22.3 29.8 -23.4
2025-11-17T14:51:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:51:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:51:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.535116
2025-11-17T14:51:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:51:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:51:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:51:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:51:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:51:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:51:00', tmtdew=28.79, humidity=14.0, cloud=29.3, wind=9.95, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:50:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:51:12.773 [DEBUG] [Thread-56193] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:51:12.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:51:12.869 [DEBUG] [Thread-56196] [transport.py] [_log()] starting thread (client mode): 0xd075b520
2025-11-17T14:51:12.869 [DEBUG] [Thread-56196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:51:12.884 [DEBUG] [Thread-56196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:51:12.884 [INFO] [Thread-56196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:51:12.892 [DEBUG] [Thread-56196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:51:12.892 [DEBUG] [Thread-56196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:51:12.892 [DEBUG] [Thread-56196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:51:12.892 [DEBUG] [Thread-56196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] client lang: <none>
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] server lang: <none>
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] kex follows: False
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:51:12.893 [DEBUG] [Thread-56196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:51:12.894 [DEBUG] [Thread-56196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:51:12.894 [DEBUG] [Thread-56196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:51:12.894 [DEBUG] [Thread-56196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:51:12.894 [DEBUG] [Thread-56196] [transport.py] [_log()] Compression: none
2025-11-17T14:51:12.894 [DEBUG] [Thread-56196] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:51:12.951 [DEBUG] [Thread-56196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:51:12.951 [DEBUG] [Thread-56196] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:51:12.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:51:12.952 [DEBUG] [Thread-56196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:51:12.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:51:13.006 [DEBUG] [Thread-56196] [transport.py] [_log()] userauth is OK
2025-11-17T14:51:13.007 [DEBUG] [Thread-56196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:51:13.007 [DEBUG] [Thread-56196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:51:13.007 [DEBUG] [Thread-56196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:51:13.007 [DEBUG] [Thread-56196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:51:13.026 [INFO] [Thread-56196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:51:13.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:51:13.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:51:13.908 [DEBUG] [Thread-56196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:51:13.909 [DEBUG] [Thread-56196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:51:13.956 [DEBUG] [Thread-56196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:51:13.956 [DEBUG] [Thread-56196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:51:13.965 [DEBUG] [Thread-56196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:51:13.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:51:13.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:51:13.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:51:13.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:51:13.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:51:13.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:51:14.002 [DEBUG] [Thread-56196] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:51:14.242 [DEBUG] [Thread-56198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:51:16.870 [DEBUG] [Thread-56199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:51:29.282 [DEBUG] [Thread-56200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:51:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:51:44.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:51:44.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:51:44.308 [DEBUG] [Thread-56201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:51:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 51, 32), 28.65, 14.12, 29.3, 13.74, 22.67, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:51:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:51:32
2025-11-17T14:51:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:51:44.919 [DEBUG] [Thread-56202] [transport.py] [_log()] starting thread (client mode): 0xd071a260
2025-11-17T14:51:44.919 [DEBUG] [Thread-56202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:51:44.940 [DEBUG] [Thread-56202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:51:44.940 [INFO] [Thread-56202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:51:44.943 [DEBUG] [Thread-56202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:51:44.943 [DEBUG] [Thread-56202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:51:44.943 [DEBUG] [Thread-56202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:51:44.943 [DEBUG] [Thread-56202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:51:44.943 [DEBUG] [Thread-56202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:51:44.943 [DEBUG] [Thread-56202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:51:44.943 [DEBUG] [Thread-56202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] client lang: <none>
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] server lang: <none>
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] kex follows: False
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:51:44.944 [DEBUG] [Thread-56202] [transport.py] [_log()] Compression: none
2025-11-17T14:51:44.945 [DEBUG] [Thread-56202] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:51:44.963 [DEBUG] [Thread-56202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:51:44.963 [DEBUG] [Thread-56202] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:51:44.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:51:44.965 [DEBUG] [Thread-56202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:51:44.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:51:44.967 [DEBUG] [Thread-56202] [transport.py] [_log()] userauth is OK
2025-11-17T14:51:44.967 [DEBUG] [Thread-56202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:51:44.967 [DEBUG] [Thread-56202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:51:44.967 [DEBUG] [Thread-56202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:51:44.968 [DEBUG] [Thread-56202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:51:44.997 [INFO] [Thread-56202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:51:44.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:51:45.650 [DEBUG] [Thread-56202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:51:45.650 [DEBUG] [Thread-56202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:51:45.651 [DEBUG] [Thread-56202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:51:45.692 [DEBUG] [Thread-56202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:51:45.692 [DEBUG] [Thread-56202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:51:45.695 [DEBUG] [Thread-56202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:51:45.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:51:45.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:51:45.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:51:45.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:51:45.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:51:45.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:51:45.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:51:45.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:51:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:51:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.535464 -999.00  +22.70  12.04     20   -1.30 1 2 1 1 1   888    0 22.29 -79.84 ----- 12.0 12.0 309.8 13.9 29.1 -24.2 28.9 -22.4 28.9 -22.3 29.5 -23.0
2025-11-17T14:51:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:51:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:51:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.535464
2025-11-17T14:51:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:51:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:51:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:51:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:51:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:51:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:51:32', tmtdew=28.65, humidity=14.12, cloud=29.3, wind=13.74, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:51:04.090', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:51:45.723 [DEBUG] [Thread-56202] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:51:45.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:51:45.820 [DEBUG] [Thread-56205] [transport.py] [_log()] starting thread (client mode): 0xd0759900
2025-11-17T14:51:45.820 [DEBUG] [Thread-56205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:51:45.835 [DEBUG] [Thread-56205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:51:45.835 [INFO] [Thread-56205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:51:45.842 [DEBUG] [Thread-56205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:51:45.842 [DEBUG] [Thread-56205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] client lang: <none>
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] server lang: <none>
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] kex follows: False
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] Compression: none
2025-11-17T14:51:45.843 [DEBUG] [Thread-56205] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:51:45.903 [DEBUG] [Thread-56205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:51:45.904 [DEBUG] [Thread-56205] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:51:45.904 [DEBUG] [Thread-56205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:51:45.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:51:45.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:51:45.962 [DEBUG] [Thread-56205] [transport.py] [_log()] userauth is OK
2025-11-17T14:51:45.962 [DEBUG] [Thread-56205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:51:45.962 [DEBUG] [Thread-56205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:51:45.962 [DEBUG] [Thread-56205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:51:45.963 [DEBUG] [Thread-56205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:51:45.981 [INFO] [Thread-56205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:51:45.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:51:45.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:51:46.823 [DEBUG] [Thread-56205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:51:46.823 [DEBUG] [Thread-56205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:51:46.871 [DEBUG] [Thread-56205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:51:46.871 [DEBUG] [Thread-56205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:51:46.880 [DEBUG] [Thread-56205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:51:46.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:51:46.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:51:46.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:51:46.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:51:46.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:51:46.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:51:46.914 [DEBUG] [Thread-56205] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:51:59.337 [DEBUG] [Thread-56207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:52:03.503 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:52:03.504 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:52:14.381 [DEBUG] [Thread-56208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:52:16.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:52:16.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:52:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:52:16.919 [DEBUG] [Thread-56209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:52:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 52, 4), 28.53, 14.24, 29.3, 12.55, 22.61, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:52:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:52:04
2025-11-17T14:52:17.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:52:17.890 [DEBUG] [Thread-56210] [transport.py] [_log()] starting thread (client mode): 0xd07bd960
2025-11-17T14:52:17.890 [DEBUG] [Thread-56210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:52:17.911 [DEBUG] [Thread-56210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:52:17.911 [INFO] [Thread-56210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] client lang: <none>
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] server lang: <none>
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] kex follows: False
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] Compression: none
2025-11-17T14:52:17.914 [DEBUG] [Thread-56210] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:52:17.921 [DEBUG] [Thread-56210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:52:17.921 [DEBUG] [Thread-56210] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:52:17.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:52:17.921 [DEBUG] [Thread-56210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:52:17.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:52:17.922 [DEBUG] [Thread-56210] [transport.py] [_log()] userauth is OK
2025-11-17T14:52:17.922 [DEBUG] [Thread-56210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:52:17.922 [DEBUG] [Thread-56210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:52:17.922 [DEBUG] [Thread-56210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:52:17.922 [DEBUG] [Thread-56210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:52:17.932 [INFO] [Thread-56210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:52:17.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:52:18.573 [DEBUG] [Thread-56210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:52:18.573 [DEBUG] [Thread-56210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:52:18.573 [DEBUG] [Thread-56210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:52:18.614 [DEBUG] [Thread-56210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:52:18.614 [DEBUG] [Thread-56210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:52:18.616 [DEBUG] [Thread-56210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:52:18.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:52:18.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:52:18.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:52:18.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:52:18.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:52:18.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:52:18.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:52:18.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:52:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:52:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.535811 -999.00  +22.60  18.81     20   -1.10 1 1 1 1 1   888    0 23.02 -88.42 ----- 18.8 18.8 319.4 27.7 28.9 -24.8 28.7 -23.7 28.6 -22.4 29.3 -23.4
2025-11-17T14:52:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:52:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:52:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.535811
2025-11-17T14:52:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:52:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:52:18.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:52:18.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:52:18.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:52:18.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:52:04', tmtdew=28.53, humidity=14.24, cloud=29.3, wind=12.55, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:51:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:52:18.636 [DEBUG] [Thread-56210] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:52:18.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:52:18.726 [DEBUG] [Thread-56213] [transport.py] [_log()] starting thread (client mode): 0xd3137460
2025-11-17T14:52:18.726 [DEBUG] [Thread-56213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:52:18.742 [DEBUG] [Thread-56213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:52:18.742 [INFO] [Thread-56213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:52:18.749 [DEBUG] [Thread-56213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:52:18.749 [DEBUG] [Thread-56213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] client lang: <none>
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] server lang: <none>
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] kex follows: False
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] Compression: none
2025-11-17T14:52:18.750 [DEBUG] [Thread-56213] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:52:18.809 [DEBUG] [Thread-56213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:52:18.809 [DEBUG] [Thread-56213] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:52:18.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:52:18.809 [DEBUG] [Thread-56213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:52:18.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:52:18.866 [DEBUG] [Thread-56213] [transport.py] [_log()] userauth is OK
2025-11-17T14:52:18.866 [DEBUG] [Thread-56213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:52:18.866 [DEBUG] [Thread-56213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:52:18.866 [DEBUG] [Thread-56213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:52:18.866 [DEBUG] [Thread-56213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:52:18.881 [INFO] [Thread-56213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:52:18.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:52:18.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:52:19.714 [DEBUG] [Thread-56213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:52:19.715 [DEBUG] [Thread-56213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:52:19.762 [DEBUG] [Thread-56213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:52:19.762 [DEBUG] [Thread-56213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:52:19.772 [DEBUG] [Thread-56213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:52:19.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:52:19.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:52:19.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:52:19.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:52:19.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:52:19.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:52:19.807 [DEBUG] [Thread-56213] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:52:29.406 [DEBUG] [Thread-56215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:52:44.448 [DEBUG] [Thread-56216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:52:49.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:52:49.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:52:49.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:52:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 52, 36), 28.54, 14.3, 29.3, 16.83, 22.79, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:52:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:52:36
2025-11-17T14:52:50.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:52:50.737 [DEBUG] [Thread-56217] [transport.py] [_log()] starting thread (client mode): 0xd3134df0
2025-11-17T14:52:50.737 [DEBUG] [Thread-56217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:52:50.757 [DEBUG] [Thread-56217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:52:50.757 [INFO] [Thread-56217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] client lang: <none>
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] server lang: <none>
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] kex follows: False
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] Compression: none
2025-11-17T14:52:50.761 [DEBUG] [Thread-56217] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:52:50.780 [DEBUG] [Thread-56217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:52:50.781 [DEBUG] [Thread-56217] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:52:50.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:52:50.782 [DEBUG] [Thread-56217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:52:50.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:52:50.783 [DEBUG] [Thread-56217] [transport.py] [_log()] userauth is OK
2025-11-17T14:52:50.783 [DEBUG] [Thread-56217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:52:50.784 [DEBUG] [Thread-56217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:52:50.784 [DEBUG] [Thread-56217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:52:50.784 [DEBUG] [Thread-56217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:52:50.808 [INFO] [Thread-56217] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:52:50.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:52:51.425 [DEBUG] [Thread-56217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:52:51.426 [DEBUG] [Thread-56217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:52:51.426 [DEBUG] [Thread-56217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:52:51.467 [DEBUG] [Thread-56217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:52:51.467 [DEBUG] [Thread-56217] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:52:51.470 [DEBUG] [Thread-56217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:52:51.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:52:51.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:52:51.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:52:51.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:52:51.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:52:51.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:52:51.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:52:51.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:52:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:52:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.536158 -999.00  +22.60  22.31     20   -1.00 1 1 1 1 1   888    0 22.74 -92.97 ----- 22.3 22.3 290.2 26.0 28.8 -23.6 28.5 -22.7 28.3 -23.8 29.0 -22.7
2025-11-17T14:52:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:52:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:52:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.536158
2025-11-17T14:52:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:52:51.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:52:51.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:52:51.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:52:51.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:52:51.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:52:36', tmtdew=28.54, humidity=14.3, cloud=29.3, wind=16.83, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:52:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:52:51.496 [DEBUG] [Thread-56217] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:52:51.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:52:51.592 [DEBUG] [Thread-56220] [transport.py] [_log()] starting thread (client mode): 0xd0775ae0
2025-11-17T14:52:51.592 [DEBUG] [Thread-56220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:52:51.607 [DEBUG] [Thread-56220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:52:51.608 [INFO] [Thread-56220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] client lang: <none>
2025-11-17T14:52:51.615 [DEBUG] [Thread-56220] [transport.py] [_log()] server lang: <none>
2025-11-17T14:52:51.616 [DEBUG] [Thread-56220] [transport.py] [_log()] kex follows: False
2025-11-17T14:52:51.616 [DEBUG] [Thread-56220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:52:51.616 [DEBUG] [Thread-56220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:52:51.616 [DEBUG] [Thread-56220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:52:51.616 [DEBUG] [Thread-56220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:52:51.616 [DEBUG] [Thread-56220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:52:51.616 [DEBUG] [Thread-56220] [transport.py] [_log()] Compression: none
2025-11-17T14:52:51.616 [DEBUG] [Thread-56220] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:52:51.674 [DEBUG] [Thread-56220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:52:51.675 [DEBUG] [Thread-56220] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:52:51.675 [DEBUG] [Thread-56220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:52:51.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:52:51.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:52:51.730 [DEBUG] [Thread-56220] [transport.py] [_log()] userauth is OK
2025-11-17T14:52:51.730 [DEBUG] [Thread-56220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:52:51.730 [DEBUG] [Thread-56220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:52:51.730 [DEBUG] [Thread-56220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:52:51.730 [DEBUG] [Thread-56220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:52:51.752 [INFO] [Thread-56220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:52:51.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:52:51.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:52:52.637 [DEBUG] [Thread-56220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:52:52.637 [DEBUG] [Thread-56220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:52:52.685 [DEBUG] [Thread-56220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:52:52.685 [DEBUG] [Thread-56220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:52:52.693 [DEBUG] [Thread-56220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:52:52.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:52:52.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:52:52.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:52:52.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:52:52.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:52:52.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:52:52.725 [DEBUG] [Thread-56220] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:52:59.475 [DEBUG] [Thread-56222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:53:03.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:53:03.647 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:53:14.526 [DEBUG] [Thread-56223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:53:16.974 [DEBUG] [Thread-56224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:53:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:53:22.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:53:22.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:53:23.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 53, 8), 28.2, 14.63, 29.3, 16.66, 22.69, 0, 0, 0, 0, 0, 0),)
2025-11-17T14:53:23.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:53:08
2025-11-17T14:53:23.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:53:23.689 [DEBUG] [Thread-56225] [transport.py] [_log()] starting thread (client mode): 0xd07be680
2025-11-17T14:53:23.689 [DEBUG] [Thread-56225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:53:23.704 [DEBUG] [Thread-56225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:53:23.704 [INFO] [Thread-56225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] client lang: <none>
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] server lang: <none>
2025-11-17T14:53:23.708 [DEBUG] [Thread-56225] [transport.py] [_log()] kex follows: False
2025-11-17T14:53:23.709 [DEBUG] [Thread-56225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:53:23.709 [DEBUG] [Thread-56225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:53:23.709 [DEBUG] [Thread-56225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:53:23.709 [DEBUG] [Thread-56225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:53:23.709 [DEBUG] [Thread-56225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:53:23.709 [DEBUG] [Thread-56225] [transport.py] [_log()] Compression: none
2025-11-17T14:53:23.709 [DEBUG] [Thread-56225] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:53:23.726 [DEBUG] [Thread-56225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:53:23.727 [DEBUG] [Thread-56225] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:53:23.727 [DEBUG] [Thread-56225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:53:23.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:53:23.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:53:23.729 [DEBUG] [Thread-56225] [transport.py] [_log()] userauth is OK
2025-11-17T14:53:23.729 [DEBUG] [Thread-56225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:53:23.729 [DEBUG] [Thread-56225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:53:23.729 [DEBUG] [Thread-56225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:53:23.729 [DEBUG] [Thread-56225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:53:23.753 [INFO] [Thread-56225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:53:23.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:53:24.404 [DEBUG] [Thread-56225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:53:24.404 [DEBUG] [Thread-56225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:53:24.404 [DEBUG] [Thread-56225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:53:24.445 [DEBUG] [Thread-56225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:53:24.445 [DEBUG] [Thread-56225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:53:24.448 [DEBUG] [Thread-56225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:53:24.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:53:24.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:53:24.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:53:24.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:53:24.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:53:24.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:53:24.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:53:24.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:53:24.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:53:24.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.536505 -999.00  +22.80  33.36     20   -1.00 1 1 2 1 1   888    0 22.78 -95.40 ----- 33.4 33.4 294.6 35.0 28.6 -23.5 28.3 -22.3 28.0 -24.9 28.8 -22.7
2025-11-17T14:53:24.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:53:24.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:53:24.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.536505
2025-11-17T14:53:24.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:53:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:53:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:53:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:53:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:53:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:53:08', tmtdew=28.2, humidity=14.63, cloud=29.3, wind=16.66, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:52:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:53:24.472 [DEBUG] [Thread-56225] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:53:24.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:53:24.568 [DEBUG] [Thread-56228] [transport.py] [_log()] starting thread (client mode): 0xd0722cb0
2025-11-17T14:53:24.568 [DEBUG] [Thread-56228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:53:24.583 [DEBUG] [Thread-56228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:53:24.583 [INFO] [Thread-56228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] client lang: <none>
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] server lang: <none>
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] kex follows: False
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:53:24.591 [DEBUG] [Thread-56228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:53:24.592 [DEBUG] [Thread-56228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:53:24.592 [DEBUG] [Thread-56228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:53:24.592 [DEBUG] [Thread-56228] [transport.py] [_log()] Compression: none
2025-11-17T14:53:24.592 [DEBUG] [Thread-56228] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:53:24.654 [DEBUG] [Thread-56228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:53:24.654 [DEBUG] [Thread-56228] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:53:24.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:53:24.655 [DEBUG] [Thread-56228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:53:24.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:53:24.710 [DEBUG] [Thread-56228] [transport.py] [_log()] userauth is OK
2025-11-17T14:53:24.710 [DEBUG] [Thread-56228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:53:24.710 [DEBUG] [Thread-56228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:53:24.710 [DEBUG] [Thread-56228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:53:24.710 [DEBUG] [Thread-56228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:53:24.730 [INFO] [Thread-56228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:53:24.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:53:24.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:53:25.607 [DEBUG] [Thread-56228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:53:25.608 [DEBUG] [Thread-56228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:53:25.655 [DEBUG] [Thread-56228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:53:25.655 [DEBUG] [Thread-56228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:53:25.664 [DEBUG] [Thread-56228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:53:25.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:53:25.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:53: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
2025-11-17T14:53:25.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:53:25.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:53:25.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:53:25.698 [DEBUG] [Thread-56228] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:53:29.559 [DEBUG] [Thread-56230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:53:44.608 [DEBUG] [Thread-56231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:53:55.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:53:55.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:53:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:53:56.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 53, 40), 28.49, 14.43, 0.0, 18.12, 22.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:53:56.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:53:40
2025-11-17T14:53:56.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:53:56.650 [DEBUG] [Thread-56232] [transport.py] [_log()] starting thread (client mode): 0xd078cf10
2025-11-17T14:53:56.650 [DEBUG] [Thread-56232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:53:56.671 [DEBUG] [Thread-56232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:53:56.671 [INFO] [Thread-56232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:53:56.673 [DEBUG] [Thread-56232] [transport.py] [_log()] client lang: <none>
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] server lang: <none>
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] kex follows: False
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] Compression: none
2025-11-17T14:53:56.674 [DEBUG] [Thread-56232] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:53:56.692 [DEBUG] [Thread-56232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:53:56.692 [DEBUG] [Thread-56232] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:53:56.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:53:56.693 [DEBUG] [Thread-56232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:53:56.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:53:56.695 [DEBUG] [Thread-56232] [transport.py] [_log()] userauth is OK
2025-11-17T14:53:56.695 [DEBUG] [Thread-56232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:53:56.695 [DEBUG] [Thread-56232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:53:56.695 [DEBUG] [Thread-56232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:53:56.695 [DEBUG] [Thread-56232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:53:56.711 [INFO] [Thread-56232] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:53:56.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:53:57.346 [DEBUG] [Thread-56232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:53:57.347 [DEBUG] [Thread-56232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:53:57.347 [DEBUG] [Thread-56232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:53:57.387 [DEBUG] [Thread-56232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:53:57.388 [DEBUG] [Thread-56232] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:53:57.390 [DEBUG] [Thread-56232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:53:57.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:53:57.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:53:57.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:53:57.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:53:57.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:53:57.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:53:57.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:53:57.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:53:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:53:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.536852 -999.00  +22.70  19.00     20   -0.80 1 1 1 1 1   888    0 22.11 -92.88 ----- 19.0 19.0 307.0 33.9 28.2 -24.1 28.1 -23.1 27.9 -23.2 28.4 -23.2
2025-11-17T14:53:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:53:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:53:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.536852
2025-11-17T14:53:57.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:53:57.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:53:57.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:53:57.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:53:57.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T14:53:57.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:53:40', tmtdew=28.49, humidity=14.43, cloud=0.0, wind=18.12, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:53:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:53:57.417 [DEBUG] [Thread-56232] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:53:57.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:53:57.515 [DEBUG] [Thread-56235] [transport.py] [_log()] starting thread (client mode): 0xd07bf2b0
2025-11-17T14:53:57.515 [DEBUG] [Thread-56235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:53:57.532 [DEBUG] [Thread-56235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:53:57.533 [INFO] [Thread-56235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:53:57.540 [DEBUG] [Thread-56235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:53:57.540 [DEBUG] [Thread-56235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:53:57.541 [DEBUG] [Thread-56235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:53:57.541 [DEBUG] [Thread-56235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:53:57.541 [DEBUG] [Thread-56235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:53:57.541 [DEBUG] [Thread-56235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:53:57.541 [DEBUG] [Thread-56235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:53:57.541 [DEBUG] [Thread-56235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:53:57.541 [DEBUG] [Thread-56235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:53:57.541 [DEBUG] [Thread-56235] [transport.py] [_log()] client lang: <none>
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] server lang: <none>
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] kex follows: False
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] Compression: none
2025-11-17T14:53:57.542 [DEBUG] [Thread-56235] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:53:57.598 [DEBUG] [Thread-56235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:53:57.598 [DEBUG] [Thread-56235] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:53:57.599 [DEBUG] [Thread-56235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:53:57.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:53:57.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:53:57.654 [DEBUG] [Thread-56235] [transport.py] [_log()] userauth is OK
2025-11-17T14:53:57.655 [DEBUG] [Thread-56235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:53:57.655 [DEBUG] [Thread-56235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:53:57.655 [DEBUG] [Thread-56235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:53:57.655 [DEBUG] [Thread-56235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:53:57.675 [INFO] [Thread-56235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:53:57.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:53:57.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:53:58.611 [DEBUG] [Thread-56235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:53:58.611 [DEBUG] [Thread-56235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:53:58.659 [DEBUG] [Thread-56235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:53:58.659 [DEBUG] [Thread-56235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:53:58.668 [DEBUG] [Thread-56235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:53:58.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:53:58.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:53:58.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:53:58.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:53:58.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:53:58.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:53:58.703 [DEBUG] [Thread-56235] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:53:59.640 [DEBUG] [Thread-56237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:54:03.791 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:54:03.792 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:54:14.681 [DEBUG] [Thread-56238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:54:17.025 [DEBUG] [Thread-56239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:54:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:54:28.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:54:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:54:29.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 54, 13), 28.39, 14.57, 0.0, 18.19, 22.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:54:29.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:54:13
2025-11-17T14:54:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:54:29.643 [DEBUG] [Thread-56240] [transport.py] [_log()] starting thread (client mode): 0xd07beb00
2025-11-17T14:54:29.643 [DEBUG] [Thread-56240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:54:29.663 [DEBUG] [Thread-56240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:54:29.663 [INFO] [Thread-56240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] client lang: <none>
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] server lang: <none>
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] kex follows: False
2025-11-17T14:54:29.666 [DEBUG] [Thread-56240] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:54:29.667 [DEBUG] [Thread-56240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:54:29.667 [DEBUG] [Thread-56240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:54:29.667 [DEBUG] [Thread-56240] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:54:29.667 [DEBUG] [Thread-56240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:54:29.667 [DEBUG] [Thread-56240] [transport.py] [_log()] Compression: none
2025-11-17T14:54:29.667 [DEBUG] [Thread-56240] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:54:29.684 [DEBUG] [Thread-56240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:54:29.685 [DEBUG] [Thread-56240] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:54:29.685 [DEBUG] [Thread-56240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:54:29.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:54:29.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:54:29.709 [DEBUG] [Thread-56242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:54:29.728 [DEBUG] [Thread-56240] [transport.py] [_log()] userauth is OK
2025-11-17T14:54:29.728 [DEBUG] [Thread-56240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:54:29.728 [DEBUG] [Thread-56240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:54:29.729 [DEBUG] [Thread-56240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:54:29.729 [DEBUG] [Thread-56240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:54:29.763 [INFO] [Thread-56240] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:54:29.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:54:30.347 [DEBUG] [Thread-56240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:54:30.347 [DEBUG] [Thread-56240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:54:30.348 [DEBUG] [Thread-56240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:54:30.389 [DEBUG] [Thread-56240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:54:30.389 [DEBUG] [Thread-56240] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:54:30.392 [DEBUG] [Thread-56240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:54:30.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:54:30.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:54:30.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:54:30.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:54:30.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:54:30.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:54:30.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:54:30.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:54:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:54:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.537200 -999.00  +22.50  10.70     20   -0.90 1 2 1 1 1   888    0 22.41 -87.93 ----- 10.7 10.7 337.4 21.5 28.2 -23.6 28.0 -22.7 27.9 -22.5 28.3 -22.9
2025-11-17T14:54:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:54:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:54:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.537200
2025-11-17T14:54:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:54:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:54:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:54:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:54:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:54:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:54:13', tmtdew=28.39, humidity=14.57, cloud=0.0, wind=18.19, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:53:34.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:54:30.412 [DEBUG] [Thread-56240] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:54:30.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:54:30.509 [DEBUG] [Thread-56244] [transport.py] [_log()] starting thread (client mode): 0xd0787a60
2025-11-17T14:54:30.509 [DEBUG] [Thread-56244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:54:30.524 [DEBUG] [Thread-56244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:54:30.524 [INFO] [Thread-56244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:54:30.533 [DEBUG] [Thread-56244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] client lang: <none>
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] server lang: <none>
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] kex follows: False
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:54:30.534 [DEBUG] [Thread-56244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:54:30.535 [DEBUG] [Thread-56244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:54:30.535 [DEBUG] [Thread-56244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:54:30.535 [DEBUG] [Thread-56244] [transport.py] [_log()] Compression: none
2025-11-17T14:54:30.535 [DEBUG] [Thread-56244] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:54:30.590 [DEBUG] [Thread-56244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:54:30.590 [DEBUG] [Thread-56244] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:54:30.591 [DEBUG] [Thread-56244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:54:30.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:54:30.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:54:30.646 [DEBUG] [Thread-56244] [transport.py] [_log()] userauth is OK
2025-11-17T14:54:30.646 [DEBUG] [Thread-56244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:54:30.646 [DEBUG] [Thread-56244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:54:30.646 [DEBUG] [Thread-56244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:54:30.646 [DEBUG] [Thread-56244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:54:30.665 [INFO] [Thread-56244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:54:30.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:54:30.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:54:31.521 [DEBUG] [Thread-56244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:54:31.521 [DEBUG] [Thread-56244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:54:31.569 [DEBUG] [Thread-56244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:54:31.569 [DEBUG] [Thread-56244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:54:31.577 [DEBUG] [Thread-56244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:54:31.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:54:31.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:54:31.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:54:31.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:54:31.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:54:31.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:54:31.612 [DEBUG] [Thread-56244] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:54:44.745 [DEBUG] [Thread-56246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:54:59.778 [DEBUG] [Thread-56247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:55:01.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:55:01.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:55:01.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:55:02.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 54, 45), 28.76, 13.98, 0.0, 16.62, 23.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:55:02.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:54:45
2025-11-17T14:55:02.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:55:02.552 [DEBUG] [Thread-56248] [transport.py] [_log()] starting thread (client mode): 0xd0786200
2025-11-17T14:55:02.552 [DEBUG] [Thread-56248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:55:02.568 [DEBUG] [Thread-56248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:55:02.568 [INFO] [Thread-56248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:55:02.571 [DEBUG] [Thread-56248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] client lang: <none>
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] server lang: <none>
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] kex follows: False
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] Compression: none
2025-11-17T14:55:02.572 [DEBUG] [Thread-56248] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:55:02.589 [DEBUG] [Thread-56248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:55:02.589 [DEBUG] [Thread-56248] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:55:02.590 [DEBUG] [Thread-56248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:55:02.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:55:02.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:55:02.592 [DEBUG] [Thread-56248] [transport.py] [_log()] userauth is OK
2025-11-17T14:55:02.592 [DEBUG] [Thread-56248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:55:02.592 [DEBUG] [Thread-56248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:55:02.592 [DEBUG] [Thread-56248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:55:02.592 [DEBUG] [Thread-56248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:55:02.609 [INFO] [Thread-56248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:55:02.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:55:03.933 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:55:03.935 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:55:08.252 [DEBUG] [Thread-56248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:55:08.253 [DEBUG] [Thread-56248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:55:08.253 [DEBUG] [Thread-56248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:55:08.293 [DEBUG] [Thread-56248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:55:08.293 [DEBUG] [Thread-56248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:55:08.296 [DEBUG] [Thread-56248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:55:08.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:55:08.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:55:08.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:55:08.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:55:08.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:55:08.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:55:08.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:55:08.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:55:08.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:55:08.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.537894 -999.00  +22.60  15.24     21   -0.70 1 2 1 1 1   888    0 21.99 -93.99 ----- 15.2 15.2 306.4 17.6 28.1 -23.5 27.8 -22.2 27.8 -23.1 28.1 -22.6
2025-11-17T14:55:08.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:55:08.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:55:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.537894
2025-11-17T14:55:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:55:08.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:55:08.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:55:08.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:55:08.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:55:08.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:54:45', tmtdew=28.76, humidity=13.98, cloud=0.0, wind=16.62, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:54:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:55:08.409 [DEBUG] [Thread-56248] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:55:08.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:55:08.506 [DEBUG] [Thread-56251] [transport.py] [_log()] starting thread (client mode): 0xd0777250
2025-11-17T14:55:08.506 [DEBUG] [Thread-56251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:55:08.522 [DEBUG] [Thread-56251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:55:08.522 [INFO] [Thread-56251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:55:08.529 [DEBUG] [Thread-56251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:55:08.529 [DEBUG] [Thread-56251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:55:08.529 [DEBUG] [Thread-56251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:55:08.529 [DEBUG] [Thread-56251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] client lang: <none>
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] server lang: <none>
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] kex follows: False
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] Compression: none
2025-11-17T14:55:08.530 [DEBUG] [Thread-56251] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:55:08.595 [DEBUG] [Thread-56251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:55:08.596 [DEBUG] [Thread-56251] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:55:08.596 [DEBUG] [Thread-56251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:55:08.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:55:08.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:55:08.658 [DEBUG] [Thread-56251] [transport.py] [_log()] userauth is OK
2025-11-17T14:55:08.658 [DEBUG] [Thread-56251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:55:08.658 [DEBUG] [Thread-56251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:55:08.658 [DEBUG] [Thread-56251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:55:08.659 [DEBUG] [Thread-56251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:55:08.678 [INFO] [Thread-56251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:55:08.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:55:08.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:55:09.518 [DEBUG] [Thread-56251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:55:09.518 [DEBUG] [Thread-56251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:55:09.565 [DEBUG] [Thread-56251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:55:09.566 [DEBUG] [Thread-56251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:55:09.574 [DEBUG] [Thread-56251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:55:09.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:55:09.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:55:09.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:55:09.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:55:09.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:55:09.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:55:09.612 [DEBUG] [Thread-56251] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:55:14.810 [DEBUG] [Thread-56253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:55:17.074 [DEBUG] [Thread-56254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:55:29.847 [DEBUG] [Thread-56255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:55:39.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:55:39.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:55:39.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:55:40.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 55, 17), 28.72, 14.03, 0.0, 15.83, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:55:40.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:55:17
2025-11-17T14:55:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:55:40.530 [DEBUG] [Thread-56256] [transport.py] [_log()] starting thread (client mode): 0xd07bc910
2025-11-17T14:55:40.530 [DEBUG] [Thread-56256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:55:40.551 [DEBUG] [Thread-56256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:55:40.551 [INFO] [Thread-56256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:55:40.553 [DEBUG] [Thread-56256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] client lang: <none>
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] server lang: <none>
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] kex follows: False
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:55:40.554 [DEBUG] [Thread-56256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:55:40.555 [DEBUG] [Thread-56256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:55:40.555 [DEBUG] [Thread-56256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:55:40.555 [DEBUG] [Thread-56256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:55:40.555 [DEBUG] [Thread-56256] [transport.py] [_log()] Compression: none
2025-11-17T14:55:40.555 [DEBUG] [Thread-56256] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:55:40.572 [DEBUG] [Thread-56256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:55:40.573 [DEBUG] [Thread-56256] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:55:40.573 [DEBUG] [Thread-56256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:55:40.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:55:40.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:55:40.575 [DEBUG] [Thread-56256] [transport.py] [_log()] userauth is OK
2025-11-17T14:55:40.575 [DEBUG] [Thread-56256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:55:40.575 [DEBUG] [Thread-56256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:55:40.575 [DEBUG] [Thread-56256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:55:40.575 [DEBUG] [Thread-56256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:55:40.598 [INFO] [Thread-56256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:55:40.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:55:41.358 [DEBUG] [Thread-56256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:55:41.359 [DEBUG] [Thread-56256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:55:41.359 [DEBUG] [Thread-56256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:55:41.399 [DEBUG] [Thread-56256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:55:41.400 [DEBUG] [Thread-56256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:55:41.403 [DEBUG] [Thread-56256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:55:41.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:55:41.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:55:41.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:55:41.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:55:41.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:55:41.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:55:41.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:55:41.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:55:41.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:55:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.537894 -999.00  +22.60  15.24     21   -0.70 1 2 1 1 1   888    0 21.99 -93.99 ----- 15.2 15.2 306.4 17.6 28.1 -23.5 27.8 -22.2 27.8 -23.1 28.1 -22.6
2025-11-17T14:55:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:55:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:55:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.537894
2025-11-17T14:55:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:55:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:55:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:55:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:55:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:55:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:55:17', tmtdew=28.72, humidity=14.03, cloud=0.0, wind=15.83, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:54:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:55:41.428 [DEBUG] [Thread-56256] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:55:41.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:55:41.528 [DEBUG] [Thread-56259] [transport.py] [_log()] starting thread (client mode): 0xd0722050
2025-11-17T14:55:41.528 [DEBUG] [Thread-56259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:55:41.543 [DEBUG] [Thread-56259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:55:41.543 [INFO] [Thread-56259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:55:41.551 [DEBUG] [Thread-56259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:55:41.551 [DEBUG] [Thread-56259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] client lang: <none>
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] server lang: <none>
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] kex follows: False
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:55:41.552 [DEBUG] [Thread-56259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:55:41.553 [DEBUG] [Thread-56259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:55:41.553 [DEBUG] [Thread-56259] [transport.py] [_log()] Compression: none
2025-11-17T14:55:41.553 [DEBUG] [Thread-56259] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:55:41.611 [DEBUG] [Thread-56259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:55:41.611 [DEBUG] [Thread-56259] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:55:41.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:55:41.612 [DEBUG] [Thread-56259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:55:41.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:55:41.666 [DEBUG] [Thread-56259] [transport.py] [_log()] userauth is OK
2025-11-17T14:55:41.666 [DEBUG] [Thread-56259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:55:41.666 [DEBUG] [Thread-56259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:55:41.667 [DEBUG] [Thread-56259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:55:41.667 [DEBUG] [Thread-56259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:55:41.687 [INFO] [Thread-56259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:55:41.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:55:42.554 [DEBUG] [Thread-56259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:55:42.554 [DEBUG] [Thread-56259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:55:42.601 [DEBUG] [Thread-56259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:55:42.602 [DEBUG] [Thread-56259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:55:42.612 [DEBUG] [Thread-56259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:55:42.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:55:42.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:55: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
2025-11-17T14:55:42.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:55:42.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:55:42.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:55:42.648 [DEBUG] [Thread-56259] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:55:44.873 [DEBUG] [Thread-56261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:55:59.914 [DEBUG] [Thread-56262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:56:04.074 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:56:04.076 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:56:12.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:56:12.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:56:12.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:56:13.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 55, 49), 27.94, 15.22, 0.0, 12.35, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:56:13.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:55:49
2025-11-17T14:56:13.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:56:13.600 [DEBUG] [Thread-56263] [transport.py] [_log()] starting thread (client mode): 0xd07223e0
2025-11-17T14:56:13.600 [DEBUG] [Thread-56263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:56:13.619 [DEBUG] [Thread-56263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:56:13.619 [INFO] [Thread-56263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:56:13.622 [DEBUG] [Thread-56263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] client lang: <none>
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] server lang: <none>
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] kex follows: False
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] Compression: none
2025-11-17T14:56:13.623 [DEBUG] [Thread-56263] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:56:13.641 [DEBUG] [Thread-56263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:56:13.641 [DEBUG] [Thread-56263] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:56:13.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:56:13.642 [DEBUG] [Thread-56263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:56:13.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:56:13.644 [DEBUG] [Thread-56263] [transport.py] [_log()] userauth is OK
2025-11-17T14:56:13.645 [DEBUG] [Thread-56263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:56:13.645 [DEBUG] [Thread-56263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:56:13.645 [DEBUG] [Thread-56263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:56:13.645 [DEBUG] [Thread-56263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:56:13.670 [INFO] [Thread-56263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:56:13.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:56:14.306 [DEBUG] [Thread-56263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:56:14.306 [DEBUG] [Thread-56263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:56:14.307 [DEBUG] [Thread-56263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:56:14.347 [DEBUG] [Thread-56263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:56:14.348 [DEBUG] [Thread-56263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:56:14.351 [DEBUG] [Thread-56263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:56:14.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:56:14.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:56:14.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:56:14.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:56:14.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:56:14.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:56:14.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:56:14.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:56:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:56:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.538588 -999.00  +22.90  15.18     20   -0.60 1 2 1 1 1   888    0 22.45 -91.24 ----- 15.2 15.2 310.4 19.0 27.9 -23.4 27.7 -21.9 27.5 -21.6 27.9 -22.5
2025-11-17T14:56:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:56:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:56:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.538588
2025-11-17T14:56:14.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:56:14.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:56:14.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:56:14.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:56:14.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:56:14.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:55:49', tmtdew=27.94, humidity=15.22, cloud=0.0, wind=12.35, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:55:34.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:56:14.377 [DEBUG] [Thread-56263] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:56:14.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:56:14.474 [DEBUG] [Thread-56266] [transport.py] [_log()] starting thread (client mode): 0xd31b2560
2025-11-17T14:56:14.474 [DEBUG] [Thread-56266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:56:14.490 [DEBUG] [Thread-56266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:56:14.491 [INFO] [Thread-56266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] client lang: <none>
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] server lang: <none>
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] kex follows: False
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:56:14.498 [DEBUG] [Thread-56266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:56:14.499 [DEBUG] [Thread-56266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:56:14.499 [DEBUG] [Thread-56266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:56:14.499 [DEBUG] [Thread-56266] [transport.py] [_log()] Compression: none
2025-11-17T14:56:14.499 [DEBUG] [Thread-56266] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:56:14.557 [DEBUG] [Thread-56266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:56:14.558 [DEBUG] [Thread-56266] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:56:14.558 [DEBUG] [Thread-56266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:56:14.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:56:14.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:56:14.614 [DEBUG] [Thread-56266] [transport.py] [_log()] userauth is OK
2025-11-17T14:56:14.614 [DEBUG] [Thread-56266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:56:14.614 [DEBUG] [Thread-56266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:56:14.614 [DEBUG] [Thread-56266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:56:14.614 [DEBUG] [Thread-56266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:56:14.633 [INFO] [Thread-56266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:56:14.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:56:14.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:56:14.945 [DEBUG] [Thread-56268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:56:15.510 [DEBUG] [Thread-56266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:56:15.511 [DEBUG] [Thread-56266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:56:15.559 [DEBUG] [Thread-56266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:56:15.559 [DEBUG] [Thread-56266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:56:15.568 [DEBUG] [Thread-56266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:56:15.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:56:15.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:56:15.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:56:15.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:56:15.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:56:15.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:56:15.603 [DEBUG] [Thread-56266] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:56:17.125 [DEBUG] [Thread-56269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:56:29.995 [DEBUG] [Thread-56270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:56:45.028 [DEBUG] [Thread-56271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:56:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:56:45.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:56:45.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:56:46.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 56, 21), 27.82, 15.33, 0.0, 15.39, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:56:46.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:56:21
2025-11-17T14:56:46.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:56:46.611 [DEBUG] [Thread-56272] [transport.py] [_log()] starting thread (client mode): 0xd0722320
2025-11-17T14:56:46.611 [DEBUG] [Thread-56272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:56:46.626 [DEBUG] [Thread-56272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:56:46.627 [INFO] [Thread-56272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] client lang: <none>
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] server lang: <none>
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] kex follows: False
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] Compression: none
2025-11-17T14:56:46.630 [DEBUG] [Thread-56272] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:56:46.642 [DEBUG] [Thread-56272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:56:46.642 [DEBUG] [Thread-56272] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:56:46.643 [DEBUG] [Thread-56272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:56:46.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:56:46.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:56:46.644 [DEBUG] [Thread-56272] [transport.py] [_log()] userauth is OK
2025-11-17T14:56:46.644 [DEBUG] [Thread-56272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:56:46.644 [DEBUG] [Thread-56272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:56:46.644 [DEBUG] [Thread-56272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:56:46.644 [DEBUG] [Thread-56272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:56:46.656 [INFO] [Thread-56272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:56:46.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:56:47.440 [DEBUG] [Thread-56272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:56:47.440 [DEBUG] [Thread-56272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:56:47.440 [DEBUG] [Thread-56272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:56:47.481 [DEBUG] [Thread-56272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:56:47.481 [DEBUG] [Thread-56272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:56:47.483 [DEBUG] [Thread-56272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:56:47.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:56:47.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:56:47.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:56:47.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:56:47.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:56:47.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:56:47.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:56:47.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:56:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:56:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.538936 -999.00  +22.90  15.78     20   -0.60 1 2 1 1 1   888    0 22.34 -89.06 ----- 15.8 15.8 283.4 22.1 27.8 -23.1 27.6 -21.8 27.5 -21.6 27.8 -22.4
2025-11-17T14:56:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:56:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:56:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.538936
2025-11-17T14:56:47.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:56:47.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:56:47.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:56:47.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:56:47.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:56:47.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:56:21', tmtdew=27.82, humidity=15.33, cloud=0.0, wind=15.39, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:56:04.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:56:47.501 [DEBUG] [Thread-56272] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:56:47.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:56:47.591 [DEBUG] [Thread-56275] [transport.py] [_log()] starting thread (client mode): 0xd0722d10
2025-11-17T14:56:47.591 [DEBUG] [Thread-56275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:56:47.609 [DEBUG] [Thread-56275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:56:47.609 [INFO] [Thread-56275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:56:47.616 [DEBUG] [Thread-56275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:56:47.616 [DEBUG] [Thread-56275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] client lang: <none>
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] server lang: <none>
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] kex follows: False
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] Compression: none
2025-11-17T14:56:47.617 [DEBUG] [Thread-56275] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:56:47.672 [DEBUG] [Thread-56275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:56:47.672 [DEBUG] [Thread-56275] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:56:47.672 [DEBUG] [Thread-56275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:56:47.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:56:47.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:56:47.733 [DEBUG] [Thread-56275] [transport.py] [_log()] userauth is OK
2025-11-17T14:56:47.733 [DEBUG] [Thread-56275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:56:47.734 [DEBUG] [Thread-56275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:56:47.734 [DEBUG] [Thread-56275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:56:47.734 [DEBUG] [Thread-56275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:56:47.748 [INFO] [Thread-56275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:56:47.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:56:47.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:56:48.697 [DEBUG] [Thread-56275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:56:48.697 [DEBUG] [Thread-56275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:56:48.745 [DEBUG] [Thread-56275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:56:48.745 [DEBUG] [Thread-56275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:56:48.753 [DEBUG] [Thread-56275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:56:48.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:56:48.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:56:48.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:56:48.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:56:48.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:56:48.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:56:48.784 [DEBUG] [Thread-56275] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:57:00.053 [DEBUG] [Thread-56277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:57:04.216 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:57:04.217 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:57:15.102 [DEBUG] [Thread-56278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:57:17.176 [DEBUG] [Thread-56279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:57:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:57:18.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:57:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:57:19.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 56, 53), 27.83, 15.4, 0.0, 18.78, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:57:19.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:56:53
2025-11-17T14:57:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:57:19.728 [DEBUG] [Thread-56280] [transport.py] [_log()] starting thread (client mode): 0xd31b22f0
2025-11-17T14:57:19.728 [DEBUG] [Thread-56280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:57:19.749 [DEBUG] [Thread-56280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:57:19.749 [INFO] [Thread-56280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:57:19.753 [DEBUG] [Thread-56280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] client lang: <none>
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] server lang: <none>
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] kex follows: False
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] Compression: none
2025-11-17T14:57:19.754 [DEBUG] [Thread-56280] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:57:19.776 [DEBUG] [Thread-56280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:57:19.777 [DEBUG] [Thread-56280] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:57:19.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:57:19.778 [DEBUG] [Thread-56280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:57:19.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:57:19.780 [DEBUG] [Thread-56280] [transport.py] [_log()] userauth is OK
2025-11-17T14:57:19.780 [DEBUG] [Thread-56280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:57:19.780 [DEBUG] [Thread-56280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:57:19.780 [DEBUG] [Thread-56280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:57:19.781 [DEBUG] [Thread-56280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:57:19.807 [INFO] [Thread-56280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:57:19.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:57:20.445 [DEBUG] [Thread-56280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:57:20.446 [DEBUG] [Thread-56280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:57:20.446 [DEBUG] [Thread-56280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:57:20.486 [DEBUG] [Thread-56280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:57:20.486 [DEBUG] [Thread-56280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:57:20.489 [DEBUG] [Thread-56280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:57:20.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:57:20.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:57:20.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:57:20.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:57:20.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:57:20.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:57:20.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:57:20.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:57:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:57:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.539283 -999.00  +22.70  18.00     21   -0.70 1 2 1 1 1   888    0 22.15 -86.71 ----- 18.0 18.0 286.2 21.5 27.6 -23.3 27.5 -21.8 27.2 -23.3 27.6 -22.2
2025-11-17T14:57:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:57:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:57:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.539283
2025-11-17T14:57:20.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:57:20.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:57:20.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:57:20.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:57:20.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:57:20.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:56:53', tmtdew=27.83, humidity=15.4, cloud=0.0, wind=18.78, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:56:34.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:57:20.513 [DEBUG] [Thread-56280] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:57:20.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:57:20.610 [DEBUG] [Thread-56283] [transport.py] [_log()] starting thread (client mode): 0xd0723be0
2025-11-17T14:57:20.610 [DEBUG] [Thread-56283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:57:20.625 [DEBUG] [Thread-56283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:57:20.625 [INFO] [Thread-56283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:57:20.635 [DEBUG] [Thread-56283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:57:20.635 [DEBUG] [Thread-56283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:57:20.635 [DEBUG] [Thread-56283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:57:20.635 [DEBUG] [Thread-56283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:57:20.635 [DEBUG] [Thread-56283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:57:20.635 [DEBUG] [Thread-56283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] client lang: <none>
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] server lang: <none>
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] kex follows: False
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:57:20.636 [DEBUG] [Thread-56283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:57:20.637 [DEBUG] [Thread-56283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:57:20.637 [DEBUG] [Thread-56283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:57:20.637 [DEBUG] [Thread-56283] [transport.py] [_log()] Compression: none
2025-11-17T14:57:20.637 [DEBUG] [Thread-56283] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:57:20.702 [DEBUG] [Thread-56283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:57:20.702 [DEBUG] [Thread-56283] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:57:20.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:57:20.703 [DEBUG] [Thread-56283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:57:20.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:57:20.762 [DEBUG] [Thread-56283] [transport.py] [_log()] userauth is OK
2025-11-17T14:57:20.762 [DEBUG] [Thread-56283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:57:20.762 [DEBUG] [Thread-56283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:57:20.762 [DEBUG] [Thread-56283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:57:20.762 [DEBUG] [Thread-56283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:57:20.780 [INFO] [Thread-56283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:57:20.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:57:20.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:57:21.619 [DEBUG] [Thread-56283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:57:21.619 [DEBUG] [Thread-56283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:57:21.670 [DEBUG] [Thread-56283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:57:21.671 [DEBUG] [Thread-56283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:57:21.685 [DEBUG] [Thread-56283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:57:21.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:57:21.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:57:21.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:57:21.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:57:21.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:57:21.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:57:21.721 [DEBUG] [Thread-56283] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:57:30.131 [DEBUG] [Thread-56285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:57:45.172 [DEBUG] [Thread-56286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:57:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:57:51.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:57:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:57:52.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 57, 25), 27.69, 15.55, 0.0, 20.06, 22.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:57:52.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:57:25
2025-11-17T14:57:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:57:52.685 [DEBUG] [Thread-56287] [transport.py] [_log()] starting thread (client mode): 0xd3162a70
2025-11-17T14:57:52.685 [DEBUG] [Thread-56287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:57:52.700 [DEBUG] [Thread-56287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:57:52.700 [INFO] [Thread-56287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:57:52.703 [DEBUG] [Thread-56287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:57:52.703 [DEBUG] [Thread-56287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:57:52.703 [DEBUG] [Thread-56287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] client lang: <none>
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] server lang: <none>
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] kex follows: False
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] Compression: none
2025-11-17T14:57:52.704 [DEBUG] [Thread-56287] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:57:52.720 [DEBUG] [Thread-56287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:57:52.721 [DEBUG] [Thread-56287] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:57:52.721 [DEBUG] [Thread-56287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:57:52.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:57:52.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:57:52.723 [DEBUG] [Thread-56287] [transport.py] [_log()] userauth is OK
2025-11-17T14:57:52.723 [DEBUG] [Thread-56287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:57:52.723 [DEBUG] [Thread-56287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:57:52.723 [DEBUG] [Thread-56287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:57:52.723 [DEBUG] [Thread-56287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:57:52.747 [INFO] [Thread-56287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:57:52.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:57:53.529 [DEBUG] [Thread-56287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:57:53.530 [DEBUG] [Thread-56287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:57:53.530 [DEBUG] [Thread-56287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:57:53.571 [DEBUG] [Thread-56287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:57:53.571 [DEBUG] [Thread-56287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:57:53.574 [DEBUG] [Thread-56287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:57:53.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:57:53.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:57:53.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:57:53.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:57:53.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:57:53.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:57:53.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:57:53.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:57:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:57:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.539630 -999.00  +22.60  17.84     21   -0.60 1 2 1 1 1   888    0 22.34 -90.52 ----- 17.8 17.8 286.9 21.9 27.4 -24.2 27.4 -21.7 27.1 -24.3 27.5 -22.8
2025-11-17T14:57:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:57:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:57:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.539630
2025-11-17T14:57:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:57:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:57:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:57:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:57:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:57:53.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:57:25', tmtdew=27.69, humidity=15.55, cloud=0.0, wind=20.06, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:57:04.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:57:53.600 [DEBUG] [Thread-56287] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:57:53.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:57:53.697 [DEBUG] [Thread-56290] [transport.py] [_log()] starting thread (client mode): 0xd07bdbd0
2025-11-17T14:57:53.697 [DEBUG] [Thread-56290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:57:53.711 [DEBUG] [Thread-56290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:57:53.712 [INFO] [Thread-56290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:57:53.719 [DEBUG] [Thread-56290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:57:53.719 [DEBUG] [Thread-56290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:57:53.719 [DEBUG] [Thread-56290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:57:53.719 [DEBUG] [Thread-56290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:57:53.719 [DEBUG] [Thread-56290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:57:53.719 [DEBUG] [Thread-56290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] client lang: <none>
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] server lang: <none>
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] kex follows: False
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] Compression: none
2025-11-17T14:57:53.720 [DEBUG] [Thread-56290] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:57:53.777 [DEBUG] [Thread-56290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:57:53.778 [DEBUG] [Thread-56290] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:57:53.778 [DEBUG] [Thread-56290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:57:53.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:57:53.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:57:53.834 [DEBUG] [Thread-56290] [transport.py] [_log()] userauth is OK
2025-11-17T14:57:53.834 [DEBUG] [Thread-56290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:57:53.834 [DEBUG] [Thread-56290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:57:53.834 [DEBUG] [Thread-56290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:57:53.834 [DEBUG] [Thread-56290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:57:53.853 [INFO] [Thread-56290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:57:53.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:57:53.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:57:54.694 [DEBUG] [Thread-56290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:57:54.694 [DEBUG] [Thread-56290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:57:54.741 [DEBUG] [Thread-56290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:57:54.741 [DEBUG] [Thread-56290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:57:54.750 [DEBUG] [Thread-56290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:57:54.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:57:54.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:57:54.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:57:54.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:57:54.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:57:54.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:57:54.786 [DEBUG] [Thread-56290] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:58:00.202 [DEBUG] [Thread-56292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:58:04.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:58:04.359 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:58:15.241 [DEBUG] [Thread-56293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:58:17.240 [DEBUG] [Thread-56294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:58:24.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:58:24.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:58:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:58:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 57, 57), 27.33, 15.56, 0.0, 19.73, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:58:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:57:57
2025-11-17T14:58:25.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:58:25.743 [DEBUG] [Thread-56295] [transport.py] [_log()] starting thread (client mode): 0xd070eb30
2025-11-17T14:58:25.743 [DEBUG] [Thread-56295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:58:25.765 [DEBUG] [Thread-56295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:58:25.765 [INFO] [Thread-56295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] client lang: <none>
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] server lang: <none>
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] kex follows: False
2025-11-17T14:58:25.768 [DEBUG] [Thread-56295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:58:25.769 [DEBUG] [Thread-56295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:58:25.769 [DEBUG] [Thread-56295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:58:25.769 [DEBUG] [Thread-56295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:58:25.769 [DEBUG] [Thread-56295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:58:25.769 [DEBUG] [Thread-56295] [transport.py] [_log()] Compression: none
2025-11-17T14:58:25.769 [DEBUG] [Thread-56295] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:58:25.786 [DEBUG] [Thread-56295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:58:25.786 [DEBUG] [Thread-56295] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:58:25.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:58:25.787 [DEBUG] [Thread-56295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:58:25.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:58:25.789 [DEBUG] [Thread-56295] [transport.py] [_log()] userauth is OK
2025-11-17T14:58:25.790 [DEBUG] [Thread-56295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:58:25.790 [DEBUG] [Thread-56295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:58:25.790 [DEBUG] [Thread-56295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:58:25.790 [DEBUG] [Thread-56295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:58:25.825 [INFO] [Thread-56295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:58:25.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:58:26.458 [DEBUG] [Thread-56295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:58:26.458 [DEBUG] [Thread-56295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:58:26.459 [DEBUG] [Thread-56295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:58:26.499 [DEBUG] [Thread-56295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:58:26.500 [DEBUG] [Thread-56295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:58:26.502 [DEBUG] [Thread-56295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:58:26.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:58:26.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:58:26.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:58:26.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:58:26.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:58:26.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:58:26.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:58:26.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:58:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:58:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.539977 -999.00  +22.60  18.78     20   -0.80 1 2 1 1 1   888    0 21.75 -91.76 ----- 18.8 18.8 278.6 24.8 27.4 -24.1 27.3 -22.0 26.9 -21.9 27.4 -22.4
2025-11-17T14:58:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:58:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:58:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.539977
2025-11-17T14:58:26.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:58:26.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:58:26.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:58:26.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:58:26.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:58:26.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:57:57', tmtdew=27.33, humidity=15.56, cloud=0.0, wind=19.73, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:57:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:58:26.528 [DEBUG] [Thread-56295] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:58:26.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:58:26.626 [DEBUG] [Thread-56298] [transport.py] [_log()] starting thread (client mode): 0xd070e890
2025-11-17T14:58:26.626 [DEBUG] [Thread-56298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:58:26.640 [DEBUG] [Thread-56298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:58:26.641 [INFO] [Thread-56298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:58:26.648 [DEBUG] [Thread-56298] [transport.py] [_log()] client lang: <none>
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] server lang: <none>
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] kex follows: False
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] Compression: none
2025-11-17T14:58:26.649 [DEBUG] [Thread-56298] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:58:26.711 [DEBUG] [Thread-56298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:58:26.711 [DEBUG] [Thread-56298] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:58:26.712 [DEBUG] [Thread-56298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:58:26.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:58:26.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:58:26.766 [DEBUG] [Thread-56298] [transport.py] [_log()] userauth is OK
2025-11-17T14:58:26.767 [DEBUG] [Thread-56298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:58:26.767 [DEBUG] [Thread-56298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:58:26.767 [DEBUG] [Thread-56298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:58:26.767 [DEBUG] [Thread-56298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:58:26.789 [INFO] [Thread-56298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:58:26.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:58:26.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:58:27.665 [DEBUG] [Thread-56298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:58:27.665 [DEBUG] [Thread-56298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:58:27.713 [DEBUG] [Thread-56298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:58:27.713 [DEBUG] [Thread-56298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:58:27.722 [DEBUG] [Thread-56298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:58:27.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:58:27.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:58:27.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:58:27.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:58:27.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:58:27.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:58:27.756 [DEBUG] [Thread-56298] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:58:30.270 [DEBUG] [Thread-56300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:58:45.301 [DEBUG] [Thread-56301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:58:57.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:58:57.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:58:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T14:58:58.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 58, 29), 27.73, 15.18, 0.0, 18.76, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:58:58.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:58:29
2025-11-17T14:58:58.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:58:58.723 [DEBUG] [Thread-56302] [transport.py] [_log()] starting thread (client mode): 0xd31b3eb0
2025-11-17T14:58:58.723 [DEBUG] [Thread-56302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:58:58.742 [DEBUG] [Thread-56302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:58:58.743 [INFO] [Thread-56302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:58:58.746 [DEBUG] [Thread-56302] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:58:58.746 [DEBUG] [Thread-56302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:58:58.746 [DEBUG] [Thread-56302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:58:58.746 [DEBUG] [Thread-56302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:58:58.746 [DEBUG] [Thread-56302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:58:58.746 [DEBUG] [Thread-56302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] client lang: <none>
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] server lang: <none>
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] kex follows: False
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] Compression: none
2025-11-17T14:58:58.747 [DEBUG] [Thread-56302] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:58:58.767 [DEBUG] [Thread-56302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:58:58.767 [DEBUG] [Thread-56302] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:58:58.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:58:58.768 [DEBUG] [Thread-56302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:58:58.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:58:58.808 [DEBUG] [Thread-56302] [transport.py] [_log()] userauth is OK
2025-11-17T14:58:58.808 [DEBUG] [Thread-56302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:58:58.808 [DEBUG] [Thread-56302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:58:58.809 [DEBUG] [Thread-56302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:58:58.809 [DEBUG] [Thread-56302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:58:58.828 [INFO] [Thread-56302] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:58:58.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:58:59.609 [DEBUG] [Thread-56302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:58:59.609 [DEBUG] [Thread-56302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:58:59.609 [DEBUG] [Thread-56302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:58:59.649 [DEBUG] [Thread-56302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:58:59.649 [DEBUG] [Thread-56302] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:58:59.652 [DEBUG] [Thread-56302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:58:59.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:58:59.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:58:59.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:58:59.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:58:59.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:58:59.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:58:59.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:58:59.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:58:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:58:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.540325 -999.00  +22.20  14.53     21   -0.90 1 2 1 1 1   888    0 21.69 -98.40 ----- 14.5 14.5 293.8 18.0 27.4 -22.7 27.4 -20.3 26.6 -24.5 27.5 -20.3
2025-11-17T14:58:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:58:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:58:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.540325
2025-11-17T14:58:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:58:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:58:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:58:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:58:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:58:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:58:29', tmtdew=27.73, humidity=15.18, cloud=0.0, wind=18.76, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:58:04.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:58:59.676 [DEBUG] [Thread-56302] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:58:59.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:58:59.772 [DEBUG] [Thread-56305] [transport.py] [_log()] starting thread (client mode): 0xd0786c20
2025-11-17T14:58:59.772 [DEBUG] [Thread-56305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:58:59.786 [DEBUG] [Thread-56305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:58:59.786 [INFO] [Thread-56305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] client lang: <none>
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] server lang: <none>
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] kex follows: False
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:58:59.794 [DEBUG] [Thread-56305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:58:59.795 [DEBUG] [Thread-56305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:58:59.795 [DEBUG] [Thread-56305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:58:59.795 [DEBUG] [Thread-56305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:58:59.795 [DEBUG] [Thread-56305] [transport.py] [_log()] Compression: none
2025-11-17T14:58:59.795 [DEBUG] [Thread-56305] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:58:59.859 [DEBUG] [Thread-56305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:58:59.859 [DEBUG] [Thread-56305] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:58:59.860 [DEBUG] [Thread-56305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:58:59.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:58:59.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:58:59.914 [DEBUG] [Thread-56305] [transport.py] [_log()] userauth is OK
2025-11-17T14:58:59.914 [DEBUG] [Thread-56305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:58:59.914 [DEBUG] [Thread-56305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:58:59.914 [DEBUG] [Thread-56305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:58:59.914 [DEBUG] [Thread-56305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:58:59.934 [INFO] [Thread-56305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:58:59.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:58:59.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:59:00.327 [DEBUG] [Thread-56307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:59:00.852 [DEBUG] [Thread-56305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:59:00.853 [DEBUG] [Thread-56305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:59:00.900 [DEBUG] [Thread-56305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:59:00.900 [DEBUG] [Thread-56305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:59:00.909 [DEBUG] [Thread-56305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:59:00.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:59:00.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:59:00.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:59:00.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:59:00.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:59:00.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:59:00.944 [DEBUG] [Thread-56305] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:59:04.499 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:59:04.500 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:59:15.369 [DEBUG] [Thread-56308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:59:17.292 [DEBUG] [Thread-56309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:59:30.399 [DEBUG] [Thread-56310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T14:59:30.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T14:59:30.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T14:59: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
2025-11-17T14:59:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 59, 1), 27.79, 15.2, 0.0, 14.61, 22.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T14:59:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:59:01
2025-11-17T14:59:31.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T14:59:31.879 [DEBUG] [Thread-56311] [transport.py] [_log()] starting thread (client mode): 0xd3160970
2025-11-17T14:59:31.879 [DEBUG] [Thread-56311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:59:31.899 [DEBUG] [Thread-56311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T14:59:31.900 [INFO] [Thread-56311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T14:59:31.903 [DEBUG] [Thread-56311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:59:31.903 [DEBUG] [Thread-56311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T14:59:31.903 [DEBUG] [Thread-56311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:59:31.903 [DEBUG] [Thread-56311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:59:31.903 [DEBUG] [Thread-56311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:59:31.903 [DEBUG] [Thread-56311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:59:31.903 [DEBUG] [Thread-56311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] client lang: <none>
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] server lang: <none>
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] kex follows: False
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] Compression: none
2025-11-17T14:59:31.904 [DEBUG] [Thread-56311] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:59:31.923 [DEBUG] [Thread-56311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:59:31.923 [DEBUG] [Thread-56311] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:59:31.924 [DEBUG] [Thread-56311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T14:59:31.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T14:59:31.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:59:31.926 [DEBUG] [Thread-56311] [transport.py] [_log()] userauth is OK
2025-11-17T14:59:31.926 [DEBUG] [Thread-56311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:59:31.926 [DEBUG] [Thread-56311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:59:31.926 [DEBUG] [Thread-56311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T14:59:31.926 [DEBUG] [Thread-56311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:59:31.959 [INFO] [Thread-56311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:59:31.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:59:32.592 [DEBUG] [Thread-56311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:59:32.592 [DEBUG] [Thread-56311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:59:32.593 [DEBUG] [Thread-56311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T14:59:32.632 [DEBUG] [Thread-56311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:59:32.633 [DEBUG] [Thread-56311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:59:32.635 [DEBUG] [Thread-56311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:59:32.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:59:32.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T14:59:32.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T14:59:32.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T14:59:32.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:59:32.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T14:59:32.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:59:32.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:59:32.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T14:59:32.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.540672 -999.00  +22.10  16.70     21   -0.90 1 2 1 1 1   888    0 21.48 -98.45 ----- 16.7 16.7 292.6 22.1 27.4 -22.2 27.3 -21.1 27.0 -20.7 27.4 -20.2
2025-11-17T14:59:32.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T14:59:32.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T14:59:32.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.540672
2025-11-17T14:59:32.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T14:59:32.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T14:59:32.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T14:59:32.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T14:59:32.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T14:59:32.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:59:01', tmtdew=27.79, humidity=15.2, cloud=0.0, wind=14.61, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:58:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T14:59:32.658 [DEBUG] [Thread-56311] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:59:32.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T14:59:32.755 [DEBUG] [Thread-56314] [transport.py] [_log()] starting thread (client mode): 0xd31608b0
2025-11-17T14:59:32.755 [DEBUG] [Thread-56314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T14:59:32.770 [DEBUG] [Thread-56314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T14:59:32.770 [INFO] [Thread-56314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T14:59:32.777 [DEBUG] [Thread-56314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T14:59:32.778 [DEBUG] [Thread-56314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T14:59:32.778 [DEBUG] [Thread-56314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T14:59:32.778 [DEBUG] [Thread-56314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:59:32.778 [DEBUG] [Thread-56314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T14:59:32.778 [DEBUG] [Thread-56314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:59:32.778 [DEBUG] [Thread-56314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T14:59:32.778 [DEBUG] [Thread-56314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] client lang: <none>
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] server lang: <none>
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] kex follows: False
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] Compression: none
2025-11-17T14:59:32.779 [DEBUG] [Thread-56314] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T14:59:32.834 [DEBUG] [Thread-56314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T14:59:32.834 [DEBUG] [Thread-56314] [transport.py] [_log()] Switch to new keys ...
2025-11-17T14:59:32.834 [DEBUG] [Thread-56314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T14:59:32.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T14:59:32.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T14:59:32.890 [DEBUG] [Thread-56314] [transport.py] [_log()] userauth is OK
2025-11-17T14:59:32.890 [DEBUG] [Thread-56314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T14:59:32.890 [DEBUG] [Thread-56314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T14:59:32.890 [DEBUG] [Thread-56314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T14:59:32.891 [DEBUG] [Thread-56314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T14:59:32.910 [INFO] [Thread-56314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T14:59:32.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T14:59:32.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T14:59:33.736 [DEBUG] [Thread-56314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T14:59:33.736 [DEBUG] [Thread-56314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T14:59:33.784 [DEBUG] [Thread-56314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T14:59:33.784 [DEBUG] [Thread-56314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T14:59:33.793 [DEBUG] [Thread-56314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T14:59:33.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T14:59:33.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T14:59:33.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T14:59:33.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T14:59:33.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T14:59:33.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T14:59:33.828 [DEBUG] [Thread-56314] [transport.py] [_log()] EOF in transport thread
2025-11-17T14:59:45.432 [DEBUG] [Thread-56316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:00:00.472 [DEBUG] [Thread-56317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:00:03.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:00:03.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:00:03.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:00:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 14, 59, 33), 28.44, 14.63, 0.0, 19.97, 23.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:00:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 14:59:33
2025-11-17T15:00:04.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:00:04.639 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:00:04.640 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:00:04.763 [DEBUG] [Thread-56318] [transport.py] [_log()] starting thread (client mode): 0xd070dc00
2025-11-17T15:00:04.763 [DEBUG] [Thread-56318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:00:04.782 [DEBUG] [Thread-56318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:00:04.782 [INFO] [Thread-56318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:00:04.786 [DEBUG] [Thread-56318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:00:04.786 [DEBUG] [Thread-56318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:00:04.786 [DEBUG] [Thread-56318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] client lang: <none>
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] server lang: <none>
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] kex follows: False
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] Compression: none
2025-11-17T15:00:04.787 [DEBUG] [Thread-56318] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:00:04.804 [DEBUG] [Thread-56318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:00:04.804 [DEBUG] [Thread-56318] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:00:04.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:00:04.805 [DEBUG] [Thread-56318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:00:04.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:00:04.807 [DEBUG] [Thread-56318] [transport.py] [_log()] userauth is OK
2025-11-17T15:00:04.807 [DEBUG] [Thread-56318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:00:04.807 [DEBUG] [Thread-56318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:00:04.807 [DEBUG] [Thread-56318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:00:04.807 [DEBUG] [Thread-56318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:00:04.831 [INFO] [Thread-56318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:00:04.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:00:06.959 [DEBUG] [Thread-56318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:00:06.959 [DEBUG] [Thread-56318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:00:06.959 [DEBUG] [Thread-56318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:00:07.000 [DEBUG] [Thread-56318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:00:07.000 [DEBUG] [Thread-56318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:00:07.001 [DEBUG] [Thread-56318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:00:07.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:00:07.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:00:07.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:00:07.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:00:07.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:00:07.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:00:07.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.541019 -999.00  +22.40  18.24     21   -0.70 1 2 1 1 1   888    0 21.25 -114.93 ----- 18.2 18.2 316.6 21.2 27.3 -23.4 27.2 -22.6 27.1 -21.2 27.4 -22.2
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.541019
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:00:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T14:59:33', tmtdew=28.44, humidity=14.63, cloud=0.0, wind=19.97, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:59:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:00:07.020 [DEBUG] [Thread-56318] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:00:07.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:00:07.106 [DEBUG] [Thread-56321] [transport.py] [_log()] starting thread (client mode): 0xd078d1e0
2025-11-17T15:00:07.106 [DEBUG] [Thread-56321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:00:07.124 [DEBUG] [Thread-56321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:00:07.124 [INFO] [Thread-56321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:00:07.132 [DEBUG] [Thread-56321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:00:07.132 [DEBUG] [Thread-56321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:00:07.132 [DEBUG] [Thread-56321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:00:07.132 [DEBUG] [Thread-56321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:00:07.132 [DEBUG] [Thread-56321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:00:07.132 [DEBUG] [Thread-56321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:00:07.132 [DEBUG] [Thread-56321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:00:07.132 [DEBUG] [Thread-56321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] client lang: <none>
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] server lang: <none>
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] kex follows: False
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] Compression: none
2025-11-17T15:00:07.133 [DEBUG] [Thread-56321] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:00:07.189 [DEBUG] [Thread-56321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:00:07.189 [DEBUG] [Thread-56321] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:00:07.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:00:07.190 [DEBUG] [Thread-56321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:00:07.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:00:07.246 [DEBUG] [Thread-56321] [transport.py] [_log()] userauth is OK
2025-11-17T15:00:07.246 [DEBUG] [Thread-56321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:00:07.246 [DEBUG] [Thread-56321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:00:07.246 [DEBUG] [Thread-56321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:00:07.246 [DEBUG] [Thread-56321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:00:07.264 [INFO] [Thread-56321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:00:07.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:00:07.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:00:08.172 [DEBUG] [Thread-56321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:00:08.172 [DEBUG] [Thread-56321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:00:08.220 [DEBUG] [Thread-56321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:00:08.220 [DEBUG] [Thread-56321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:00:08.228 [DEBUG] [Thread-56321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:00:08.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:00:08.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:00:08.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:00:08.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:00:08.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:00:08.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:00:08.260 [DEBUG] [Thread-56321] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:00:15.500 [DEBUG] [Thread-56323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:00:17.344 [DEBUG] [Thread-56324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:00:30.542 [DEBUG] [Thread-56325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:00:38.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:00:38.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:00:38.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:00:39.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 0, 5), 27.7, 15.31, 0.0, 21.51, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:00:39.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:00:05
2025-11-17T15:00:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:00:39.286 [DEBUG] [Thread-56326] [transport.py] [_log()] starting thread (client mode): 0xd070fb20
2025-11-17T15:00:39.286 [DEBUG] [Thread-56326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:00:39.308 [DEBUG] [Thread-56326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:00:39.308 [INFO] [Thread-56326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:00:39.311 [DEBUG] [Thread-56326] [transport.py] [_log()] client lang: <none>
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] server lang: <none>
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] kex follows: False
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] Compression: none
2025-11-17T15:00:39.312 [DEBUG] [Thread-56326] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:00:39.328 [DEBUG] [Thread-56326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:00:39.328 [DEBUG] [Thread-56326] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:00:39.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:00:39.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:00:39.328 [DEBUG] [Thread-56326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:00:39.329 [DEBUG] [Thread-56326] [transport.py] [_log()] userauth is OK
2025-11-17T15:00:39.329 [DEBUG] [Thread-56326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:00:39.329 [DEBUG] [Thread-56326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:00:39.329 [DEBUG] [Thread-56326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:00:39.329 [DEBUG] [Thread-56326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:00:39.346 [INFO] [Thread-56326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:00:39.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:00:39.947 [DEBUG] [Thread-56326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:00:39.947 [DEBUG] [Thread-56326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:00:39.947 [DEBUG] [Thread-56326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:00:39.988 [DEBUG] [Thread-56326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:00:39.988 [DEBUG] [Thread-56326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:00:39.990 [DEBUG] [Thread-56326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:00:40.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:00:40.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:00:40.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:00:40.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:00:40.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:00:40.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:00:40.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.541366 -999.00  +22.30  19.11     21   -0.60 1 2 1 1 1   888    0 20.83 -123.86 ----- 19.1 19.1 304.2 22.1 27.2 -23.4 27.0 -22.5 26.9 -22.1 27.3 -21.8
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.541366
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:00:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:00:05', tmtdew=27.7, humidity=15.31, cloud=0.0, wind=21.51, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T12:59:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:00:40.008 [DEBUG] [Thread-56326] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:00:40.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:00:40.094 [DEBUG] [Thread-56329] [transport.py] [_log()] starting thread (client mode): 0xd31b01c0
2025-11-17T15:00:40.094 [DEBUG] [Thread-56329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:00:40.110 [DEBUG] [Thread-56329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:00:40.110 [INFO] [Thread-56329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] client lang: <none>
2025-11-17T15:00:40.117 [DEBUG] [Thread-56329] [transport.py] [_log()] server lang: <none>
2025-11-17T15:00:40.118 [DEBUG] [Thread-56329] [transport.py] [_log()] kex follows: False
2025-11-17T15:00:40.118 [DEBUG] [Thread-56329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:00:40.118 [DEBUG] [Thread-56329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:00:40.118 [DEBUG] [Thread-56329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:00:40.118 [DEBUG] [Thread-56329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:00:40.118 [DEBUG] [Thread-56329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:00:40.118 [DEBUG] [Thread-56329] [transport.py] [_log()] Compression: none
2025-11-17T15:00:40.118 [DEBUG] [Thread-56329] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:00:40.173 [DEBUG] [Thread-56329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:00:40.173 [DEBUG] [Thread-56329] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:00:40.174 [DEBUG] [Thread-56329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:00:40.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:00:40.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:00:40.230 [DEBUG] [Thread-56329] [transport.py] [_log()] userauth is OK
2025-11-17T15:00:40.230 [DEBUG] [Thread-56329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:00:40.230 [DEBUG] [Thread-56329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:00:40.230 [DEBUG] [Thread-56329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:00:40.230 [DEBUG] [Thread-56329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:00:40.248 [INFO] [Thread-56329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:00:40.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:00:40.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:00:41.109 [DEBUG] [Thread-56329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:00:41.109 [DEBUG] [Thread-56329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:00:41.157 [DEBUG] [Thread-56329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:00:41.157 [DEBUG] [Thread-56329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:00:41.165 [DEBUG] [Thread-56329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:00:41.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:00:41.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:00:41.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:00:41.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:00:41.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:00:41.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:00:41.196 [DEBUG] [Thread-56329] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:00:45.573 [DEBUG] [Thread-56331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:01:00.626 [DEBUG] [Thread-56332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:01:04.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:01:04.782 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:01:11.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:01:11.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:01:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:01:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 0, 38), 28.06, 14.78, 0.0, 25.66, 22.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:01:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:00:38
2025-11-17T15:01:12.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:01:12.213 [DEBUG] [Thread-56333] [transport.py] [_log()] starting thread (client mode): 0xd0784070
2025-11-17T15:01:12.213 [DEBUG] [Thread-56333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:01:12.235 [DEBUG] [Thread-56333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:01:12.235 [INFO] [Thread-56333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] client lang: <none>
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] server lang: <none>
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] kex follows: False
2025-11-17T15:01:12.237 [DEBUG] [Thread-56333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:01:12.238 [DEBUG] [Thread-56333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:01:12.238 [DEBUG] [Thread-56333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:01:12.238 [DEBUG] [Thread-56333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:01:12.238 [DEBUG] [Thread-56333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:01:12.238 [DEBUG] [Thread-56333] [transport.py] [_log()] Compression: none
2025-11-17T15:01:12.238 [DEBUG] [Thread-56333] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:01:12.245 [DEBUG] [Thread-56333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:01:12.245 [DEBUG] [Thread-56333] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:01:12.246 [DEBUG] [Thread-56333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:01:12.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:01:12.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:01:12.246 [DEBUG] [Thread-56333] [transport.py] [_log()] userauth is OK
2025-11-17T15:01:12.247 [DEBUG] [Thread-56333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:01:12.247 [DEBUG] [Thread-56333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:01:12.247 [DEBUG] [Thread-56333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:01:12.247 [DEBUG] [Thread-56333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:01:12.259 [INFO] [Thread-56333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:01:12.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:01:12.936 [DEBUG] [Thread-56333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:01:12.936 [DEBUG] [Thread-56333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:01:12.937 [DEBUG] [Thread-56333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:01:12.977 [DEBUG] [Thread-56333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:01:12.977 [DEBUG] [Thread-56333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:01:12.980 [DEBUG] [Thread-56333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:01:12.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:01:12.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:01:12.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:01:12.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:01:13.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:01:13.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:01:13.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:01:13.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:01:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:01:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.542061 -999.00  +22.50  23.67     21   -0.80 1 2 1 1 1   888    0 20.05 -141.30 ----- 23.7 23.7 292.2 28.4 27.0 -24.3 26.8 -23.0 26.8 -21.8 27.1 -22.9
2025-11-17T15:01:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:01:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:01:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.542061
2025-11-17T15:01:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:01:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:01:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:01:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:01:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:01:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:00:38', tmtdew=28.06, humidity=14.78, cloud=0.0, wind=25.66, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:00:34.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:01:13.006 [DEBUG] [Thread-56333] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:01:13.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:01:13.103 [DEBUG] [Thread-56336] [transport.py] [_log()] starting thread (client mode): 0xd31b22f0
2025-11-17T15:01:13.103 [DEBUG] [Thread-56336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:01:13.122 [DEBUG] [Thread-56336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:01:13.123 [INFO] [Thread-56336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] client lang: <none>
2025-11-17T15:01:13.130 [DEBUG] [Thread-56336] [transport.py] [_log()] server lang: <none>
2025-11-17T15:01:13.131 [DEBUG] [Thread-56336] [transport.py] [_log()] kex follows: False
2025-11-17T15:01:13.131 [DEBUG] [Thread-56336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:01:13.131 [DEBUG] [Thread-56336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:01:13.131 [DEBUG] [Thread-56336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:01:13.131 [DEBUG] [Thread-56336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:01:13.131 [DEBUG] [Thread-56336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:01:13.131 [DEBUG] [Thread-56336] [transport.py] [_log()] Compression: none
2025-11-17T15:01:13.131 [DEBUG] [Thread-56336] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:01:13.190 [DEBUG] [Thread-56336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:01:13.191 [DEBUG] [Thread-56336] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:01:13.191 [DEBUG] [Thread-56336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:01:13.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:01:13.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:01:13.247 [DEBUG] [Thread-56336] [transport.py] [_log()] userauth is OK
2025-11-17T15:01:13.247 [DEBUG] [Thread-56336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:01:13.247 [DEBUG] [Thread-56336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:01:13.247 [DEBUG] [Thread-56336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:01:13.247 [DEBUG] [Thread-56336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:01:13.266 [INFO] [Thread-56336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:01:13.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:01:13.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:01:14.169 [DEBUG] [Thread-56336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:01:14.169 [DEBUG] [Thread-56336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:01:14.217 [DEBUG] [Thread-56336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:01:14.217 [DEBUG] [Thread-56336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:01:14.226 [DEBUG] [Thread-56336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:01:14.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:01:14.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:01:14.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:01:14.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:01:14.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:01:14.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:01:14.259 [DEBUG] [Thread-56336] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:01:15.658 [DEBUG] [Thread-56338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:01:17.393 [DEBUG] [Thread-56339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:01:30.691 [DEBUG] [Thread-56340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:01:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:01:44.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:01:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:01:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 1, 10), 28.04, 14.85, 0.0, 24.3, 23.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:01:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:01:10
2025-11-17T15:01:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:01:45.213 [DEBUG] [Thread-56341] [transport.py] [_log()] starting thread (client mode): 0xd078c3a0
2025-11-17T15:01:45.213 [DEBUG] [Thread-56341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:01:45.235 [DEBUG] [Thread-56341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:01:45.235 [INFO] [Thread-56341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] client lang: <none>
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] server lang: <none>
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] kex follows: False
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:01:45.238 [DEBUG] [Thread-56341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:01:45.239 [DEBUG] [Thread-56341] [transport.py] [_log()] Compression: none
2025-11-17T15:01:45.239 [DEBUG] [Thread-56341] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:01:45.256 [DEBUG] [Thread-56341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:01:45.256 [DEBUG] [Thread-56341] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:01:45.257 [DEBUG] [Thread-56341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:01:45.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:01:45.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:01:45.259 [DEBUG] [Thread-56341] [transport.py] [_log()] userauth is OK
2025-11-17T15:01:45.259 [DEBUG] [Thread-56341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:01:45.259 [DEBUG] [Thread-56341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:01:45.259 [DEBUG] [Thread-56341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:01:45.259 [DEBUG] [Thread-56341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:01:45.283 [INFO] [Thread-56341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:01:45.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:01:45.721 [DEBUG] [Thread-56343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:01:45.940 [DEBUG] [Thread-56341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:01:45.941 [DEBUG] [Thread-56341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:01:45.941 [DEBUG] [Thread-56341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:01:45.981 [DEBUG] [Thread-56341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:01:45.981 [DEBUG] [Thread-56341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:01:45.985 [DEBUG] [Thread-56341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:01:45.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:01:45.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:01:45.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:01:46.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:01:46.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:01:46.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:01:46.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:01:46.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:01:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:01:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.542408 -999.00  +22.30  16.37     21   -0.90 1 2 1 1 1   888    0 20.06 -136.63 ----- 16.4 16.4 285.2 26.9 26.9 -25.3 26.7 -22.7 26.5 -22.3 26.9 -23.3
2025-11-17T15:01:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:01:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:01:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.542408
2025-11-17T15:01:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:01:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:01:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:01:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:01:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:01:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:01:10', tmtdew=28.04, humidity=14.85, cloud=0.0, wind=24.3, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:01:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:01:46.011 [DEBUG] [Thread-56341] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:01:46.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:01:46.111 [DEBUG] [Thread-56345] [transport.py] [_log()] starting thread (client mode): 0xd0723a90
2025-11-17T15:01:46.111 [DEBUG] [Thread-56345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:01:46.128 [DEBUG] [Thread-56345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:01:46.128 [INFO] [Thread-56345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:01:46.137 [DEBUG] [Thread-56345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:01:46.137 [DEBUG] [Thread-56345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:01:46.137 [DEBUG] [Thread-56345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:01:46.137 [DEBUG] [Thread-56345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:01:46.137 [DEBUG] [Thread-56345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] client lang: <none>
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] server lang: <none>
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] kex follows: False
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:01:46.138 [DEBUG] [Thread-56345] [transport.py] [_log()] Compression: none
2025-11-17T15:01:46.139 [DEBUG] [Thread-56345] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:01:46.202 [DEBUG] [Thread-56345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:01:46.202 [DEBUG] [Thread-56345] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:01:46.203 [DEBUG] [Thread-56345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:01:46.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:01:46.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:01:46.260 [DEBUG] [Thread-56345] [transport.py] [_log()] userauth is OK
2025-11-17T15:01:46.261 [DEBUG] [Thread-56345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:01:46.261 [DEBUG] [Thread-56345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:01:46.261 [DEBUG] [Thread-56345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:01:46.261 [DEBUG] [Thread-56345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:01:46.280 [INFO] [Thread-56345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:01:46.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:01:46.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:01:47.147 [DEBUG] [Thread-56345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:01:47.147 [DEBUG] [Thread-56345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:01:47.194 [DEBUG] [Thread-56345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:01:47.194 [DEBUG] [Thread-56345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:01:47.203 [DEBUG] [Thread-56345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:01:47.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:01:47.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:01:47.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:01:47.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:01:47.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:01:47.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:01:47.238 [DEBUG] [Thread-56345] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:02:00.750 [DEBUG] [Thread-56347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:02:04.923 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:02:04.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:02:15.790 [DEBUG] [Thread-56348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:02:17.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:02:17.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:02:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:02:17.445 [DEBUG] [Thread-56349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:02:17.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 2, 14), 27.58, 15.38, 0.0, 19.83, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:02:17.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:02:14
2025-11-17T15:02:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:02:18.217 [DEBUG] [Thread-56350] [transport.py] [_log()] starting thread (client mode): 0xd0721f60
2025-11-17T15:02:18.217 [DEBUG] [Thread-56350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:02:18.238 [DEBUG] [Thread-56350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:02:18.238 [INFO] [Thread-56350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] client lang: <none>
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] server lang: <none>
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] kex follows: False
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:02:18.241 [DEBUG] [Thread-56350] [transport.py] [_log()] Compression: none
2025-11-17T15:02:18.242 [DEBUG] [Thread-56350] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:02:18.258 [DEBUG] [Thread-56350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:02:18.258 [DEBUG] [Thread-56350] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:02:18.259 [DEBUG] [Thread-56350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:02:18.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:02:18.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:02:18.262 [DEBUG] [Thread-56350] [transport.py] [_log()] userauth is OK
2025-11-17T15:02:18.263 [DEBUG] [Thread-56350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:02:18.263 [DEBUG] [Thread-56350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:02:18.263 [DEBUG] [Thread-56350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:02:18.263 [DEBUG] [Thread-56350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:02:18.281 [INFO] [Thread-56350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:02:18.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:02:19.000 [DEBUG] [Thread-56350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:02:19.000 [DEBUG] [Thread-56350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:02:19.000 [DEBUG] [Thread-56350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:02:19.041 [DEBUG] [Thread-56350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:02:19.041 [DEBUG] [Thread-56350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:02:19.044 [DEBUG] [Thread-56350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:02:19.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:02:19.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:02:19.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:02:19.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:02:19.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:02:19.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:02:19.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:02:19.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:02:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:02:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.542755 -999.00  +22.50  16.59     21   -0.80 1 2 1 1 1   888    0 19.98 -158.67 ----- 16.6 16.6 287.6 18.1 26.9 -22.4 26.9 -21.0 26.4 -21.0 27.1 -20.4
2025-11-17T15:02:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:02:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:02:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.542755
2025-11-17T15:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:02:14', tmtdew=27.58, humidity=15.38, cloud=0.0, wind=19.83, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:01:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:02:19.075 [DEBUG] [Thread-56350] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:02:19.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:02:19.174 [DEBUG] [Thread-56353] [transport.py] [_log()] starting thread (client mode): 0xd31b0e80
2025-11-17T15:02:19.174 [DEBUG] [Thread-56353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:02:19.192 [DEBUG] [Thread-56353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:02:19.192 [INFO] [Thread-56353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:02:19.202 [DEBUG] [Thread-56353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] client lang: <none>
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] server lang: <none>
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] kex follows: False
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:02:19.203 [DEBUG] [Thread-56353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:02:19.204 [DEBUG] [Thread-56353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:02:19.204 [DEBUG] [Thread-56353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:02:19.204 [DEBUG] [Thread-56353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:02:19.204 [DEBUG] [Thread-56353] [transport.py] [_log()] Compression: none
2025-11-17T15:02:19.204 [DEBUG] [Thread-56353] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:02:19.261 [DEBUG] [Thread-56353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:02:19.262 [DEBUG] [Thread-56353] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:02:19.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:02:19.263 [DEBUG] [Thread-56353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:02:19.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:02:19.319 [DEBUG] [Thread-56353] [transport.py] [_log()] userauth is OK
2025-11-17T15:02:19.319 [DEBUG] [Thread-56353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:02:19.319 [DEBUG] [Thread-56353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:02:19.319 [DEBUG] [Thread-56353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:02:19.319 [DEBUG] [Thread-56353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:02:19.339 [INFO] [Thread-56353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:02:19.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:02:19.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:02:20.180 [DEBUG] [Thread-56353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:02:20.180 [DEBUG] [Thread-56353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:02:20.228 [DEBUG] [Thread-56353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:02:20.229 [DEBUG] [Thread-56353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:02:20.237 [DEBUG] [Thread-56353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:02:20.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:02:20.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:02:20.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:02:20.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:02:20.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:02:20.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:02:20.272 [DEBUG] [Thread-56353] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:02:30.817 [DEBUG] [Thread-56355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:02:45.856 [DEBUG] [Thread-56356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:02:50.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:02:50.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:02:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:02:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 2, 46), 27.38, 15.93, 0.0, 25.25, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:02:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:02:46
2025-11-17T15:02:51.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:02:51.220 [DEBUG] [Thread-56357] [transport.py] [_log()] starting thread (client mode): 0xd31b39d0
2025-11-17T15:02:51.220 [DEBUG] [Thread-56357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:02:51.238 [DEBUG] [Thread-56357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:02:51.238 [INFO] [Thread-56357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:02:51.241 [DEBUG] [Thread-56357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:02:51.241 [DEBUG] [Thread-56357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:02:51.241 [DEBUG] [Thread-56357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:02:51.241 [DEBUG] [Thread-56357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:02:51.241 [DEBUG] [Thread-56357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:02:51.241 [DEBUG] [Thread-56357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:02:51.241 [DEBUG] [Thread-56357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:02:51.241 [DEBUG] [Thread-56357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] client lang: <none>
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] server lang: <none>
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] kex follows: False
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] Compression: none
2025-11-17T15:02:51.242 [DEBUG] [Thread-56357] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:02:51.251 [DEBUG] [Thread-56357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:02:51.251 [DEBUG] [Thread-56357] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:02:51.252 [DEBUG] [Thread-56357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:02:51.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:02:51.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:02:51.253 [DEBUG] [Thread-56357] [transport.py] [_log()] userauth is OK
2025-11-17T15:02:51.253 [DEBUG] [Thread-56357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:02:51.254 [DEBUG] [Thread-56357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:02:51.254 [DEBUG] [Thread-56357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:02:51.254 [DEBUG] [Thread-56357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:02:51.271 [INFO] [Thread-56357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:02:51.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:02:51.887 [DEBUG] [Thread-56357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:02:51.888 [DEBUG] [Thread-56357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:02:51.888 [DEBUG] [Thread-56357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:02:51.928 [DEBUG] [Thread-56357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:02:51.929 [DEBUG] [Thread-56357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:02:51.932 [DEBUG] [Thread-56357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:02:51.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:02:51.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:02:51.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:02:51.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:02:51.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:02:51.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:02:51.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.543102 -999.00  +22.60  24.94     21   -0.60 1 2 1 1 1   888    0 19.81 -165.89 ----- 24.9 24.9 272.6 28.0 26.9 -24.9 26.9 -22.2 26.6 -21.4 27.1 -22.0
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.543102
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:02:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:02:46', tmtdew=27.38, humidity=15.93, cloud=0.0, wind=25.25, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:02:04.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:02:51.954 [DEBUG] [Thread-56357] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:02:52.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:02:52.047 [DEBUG] [Thread-56360] [transport.py] [_log()] starting thread (client mode): 0xd071b760
2025-11-17T15:02:52.047 [DEBUG] [Thread-56360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:02:52.062 [DEBUG] [Thread-56360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:02:52.062 [INFO] [Thread-56360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] client lang: <none>
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] server lang: <none>
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] kex follows: False
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:02:52.070 [DEBUG] [Thread-56360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:02:52.071 [DEBUG] [Thread-56360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:02:52.071 [DEBUG] [Thread-56360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:02:52.071 [DEBUG] [Thread-56360] [transport.py] [_log()] Compression: none
2025-11-17T15:02:52.071 [DEBUG] [Thread-56360] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:02:52.127 [DEBUG] [Thread-56360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:02:52.127 [DEBUG] [Thread-56360] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:02:52.128 [DEBUG] [Thread-56360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:02:52.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:02:52.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:02:52.183 [DEBUG] [Thread-56360] [transport.py] [_log()] userauth is OK
2025-11-17T15:02:52.183 [DEBUG] [Thread-56360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:02:52.183 [DEBUG] [Thread-56360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:02:52.183 [DEBUG] [Thread-56360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:02:52.183 [DEBUG] [Thread-56360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:02:52.202 [INFO] [Thread-56360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:02:52.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:02:52.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:02:53.092 [DEBUG] [Thread-56360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:02:53.093 [DEBUG] [Thread-56360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:02:53.140 [DEBUG] [Thread-56360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:02:53.140 [DEBUG] [Thread-56360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:02:53.149 [DEBUG] [Thread-56360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:02:53.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:02:53.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:02:53.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:02:53.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:02:53.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:02:53.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:02:53.183 [DEBUG] [Thread-56360] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:03:00.886 [DEBUG] [Thread-56362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:03:05.067 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:03:05.068 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:03:15.926 [DEBUG] [Thread-56363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:03:17.498 [DEBUG] [Thread-56364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:03:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:03:23.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:03:23.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:03:23.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 3, 18), 27.41, 15.93, 0.0, 22.73, 22.86, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:03:23.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:03:18
2025-11-17T15:03:23.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:03:24.125 [DEBUG] [Thread-56365] [transport.py] [_log()] starting thread (client mode): 0xd078d9f0
2025-11-17T15:03:24.125 [DEBUG] [Thread-56365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:03:24.144 [DEBUG] [Thread-56365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:03:24.144 [INFO] [Thread-56365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:03:24.147 [DEBUG] [Thread-56365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:03:24.147 [DEBUG] [Thread-56365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:03:24.147 [DEBUG] [Thread-56365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:03:24.147 [DEBUG] [Thread-56365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:03:24.147 [DEBUG] [Thread-56365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:03:24.147 [DEBUG] [Thread-56365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:03:24.147 [DEBUG] [Thread-56365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] client lang: <none>
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] server lang: <none>
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] kex follows: False
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] Compression: none
2025-11-17T15:03:24.148 [DEBUG] [Thread-56365] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:03:24.167 [DEBUG] [Thread-56365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:03:24.168 [DEBUG] [Thread-56365] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:03:24.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:03:24.169 [DEBUG] [Thread-56365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:03:24.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:03:24.171 [DEBUG] [Thread-56365] [transport.py] [_log()] userauth is OK
2025-11-17T15:03:24.171 [DEBUG] [Thread-56365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:03:24.171 [DEBUG] [Thread-56365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:03:24.171 [DEBUG] [Thread-56365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:03:24.171 [DEBUG] [Thread-56365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:03:24.196 [INFO] [Thread-56365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:03:24.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:03:24.909 [DEBUG] [Thread-56365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:03:24.909 [DEBUG] [Thread-56365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:03:24.910 [DEBUG] [Thread-56365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:03:24.950 [DEBUG] [Thread-56365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:03:24.950 [DEBUG] [Thread-56365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:03:24.953 [DEBUG] [Thread-56365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:03:24.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:03:24.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:03:24.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:03:24.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:03:24.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:03:24.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:03:24.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:03:24.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:03:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:03:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.543450 -999.00  +22.40  18.30     21   -0.50 1 2 1 1 1   888    0 19.35 -170.86 ----- 18.3 18.3 276.4 32.3 26.9 -25.1 26.9 -22.6 26.6 -17.8 27.2 -22.0
2025-11-17T15:03:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:03:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:03:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.543450
2025-11-17T15:03:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:03:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:03:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:03:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:03:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:03:24.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:03:18', tmtdew=27.41, humidity=15.93, cloud=0.0, wind=22.73, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:02:34.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:03:24.980 [DEBUG] [Thread-56365] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:03:25.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:03:25.077 [DEBUG] [Thread-56368] [transport.py] [_log()] starting thread (client mode): 0xd078ca30
2025-11-17T15:03:25.077 [DEBUG] [Thread-56368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:03:25.092 [DEBUG] [Thread-56368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:03:25.092 [INFO] [Thread-56368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:03:25.099 [DEBUG] [Thread-56368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] client lang: <none>
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] server lang: <none>
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] kex follows: False
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:03:25.100 [DEBUG] [Thread-56368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:03:25.101 [DEBUG] [Thread-56368] [transport.py] [_log()] Compression: none
2025-11-17T15:03:25.101 [DEBUG] [Thread-56368] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:03:25.159 [DEBUG] [Thread-56368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:03:25.160 [DEBUG] [Thread-56368] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:03:25.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:03:25.160 [DEBUG] [Thread-56368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:03:25.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:03:25.215 [DEBUG] [Thread-56368] [transport.py] [_log()] userauth is OK
2025-11-17T15:03:25.215 [DEBUG] [Thread-56368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:03:25.215 [DEBUG] [Thread-56368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:03:25.215 [DEBUG] [Thread-56368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:03:25.215 [DEBUG] [Thread-56368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:03:25.229 [INFO] [Thread-56368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:03:25.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:03:25.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:03:26.132 [DEBUG] [Thread-56368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:03:26.133 [DEBUG] [Thread-56368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:03:26.181 [DEBUG] [Thread-56368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:03:26.181 [DEBUG] [Thread-56368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:03:26.190 [DEBUG] [Thread-56368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:03:26.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:03:26.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:03:26.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:03:26.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:03:26.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:03:26.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:03:26.224 [DEBUG] [Thread-56368] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:03:30.956 [DEBUG] [Thread-56370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:03:45.998 [DEBUG] [Thread-56371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:03:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:03:56.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:03:56.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:03:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 3, 50), 27.55, 15.51, 0.0, 20.45, 23.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:03:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:03:50
2025-11-17T15:03:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:03:57.169 [DEBUG] [Thread-56372] [transport.py] [_log()] starting thread (client mode): 0xd07be3e0
2025-11-17T15:03:57.169 [DEBUG] [Thread-56372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:03:57.190 [DEBUG] [Thread-56372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:03:57.190 [INFO] [Thread-56372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:03:57.193 [DEBUG] [Thread-56372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:03:57.193 [DEBUG] [Thread-56372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] client lang: <none>
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] server lang: <none>
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] kex follows: False
2025-11-17T15:03:57.194 [DEBUG] [Thread-56372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:03:57.195 [DEBUG] [Thread-56372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:03:57.195 [DEBUG] [Thread-56372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:03:57.195 [DEBUG] [Thread-56372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:03:57.195 [DEBUG] [Thread-56372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:03:57.195 [DEBUG] [Thread-56372] [transport.py] [_log()] Compression: none
2025-11-17T15:03:57.195 [DEBUG] [Thread-56372] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:03:57.210 [DEBUG] [Thread-56372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:03:57.211 [DEBUG] [Thread-56372] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:03:57.211 [DEBUG] [Thread-56372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:03:57.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:03:57.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:03:57.215 [DEBUG] [Thread-56372] [transport.py] [_log()] userauth is OK
2025-11-17T15:03:57.215 [DEBUG] [Thread-56372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:03:57.215 [DEBUG] [Thread-56372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:03:57.215 [DEBUG] [Thread-56372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:03:57.215 [DEBUG] [Thread-56372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:03:57.234 [INFO] [Thread-56372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:03:57.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:03:57.864 [DEBUG] [Thread-56372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:03:57.864 [DEBUG] [Thread-56372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:03:57.864 [DEBUG] [Thread-56372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:03:57.904 [DEBUG] [Thread-56372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:03:57.904 [DEBUG] [Thread-56372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:03:57.908 [DEBUG] [Thread-56372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:03:57.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:03:57.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:03:57.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:03:57.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:03:57.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:03:57.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:03:57.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:03:57.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:03:57.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:03:57.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.543797 -999.00  +22.60  20.67     21   -0.30 1 2 1 1 1   888    0 19.31 -182.15 ----- 20.7 20.7 297.8 23.6 27.3 -21.4 27.1 -19.8 26.7 -19.2 27.6 -18.3
2025-11-17T15:03:57.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:03:57.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:03:57.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.543797
2025-11-17T15:03:57.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:03:57.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:03:57.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:03:57.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:03:57.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:03:57.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:03:50', tmtdew=27.55, humidity=15.51, cloud=0.0, wind=20.45, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:03:04.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:03:57.932 [DEBUG] [Thread-56372] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:03:58.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:03:58.029 [DEBUG] [Thread-56375] [transport.py] [_log()] starting thread (client mode): 0xd07234f0
2025-11-17T15:03:58.029 [DEBUG] [Thread-56375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:03:58.044 [DEBUG] [Thread-56375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:03:58.045 [INFO] [Thread-56375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:03:58.052 [DEBUG] [Thread-56375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:03:58.052 [DEBUG] [Thread-56375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] client lang: <none>
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] server lang: <none>
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] kex follows: False
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:03:58.053 [DEBUG] [Thread-56375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:03:58.054 [DEBUG] [Thread-56375] [transport.py] [_log()] Compression: none
2025-11-17T15:03:58.054 [DEBUG] [Thread-56375] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:03:58.111 [DEBUG] [Thread-56375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:03:58.112 [DEBUG] [Thread-56375] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:03:58.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:03:58.113 [DEBUG] [Thread-56375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:03:58.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:03:58.167 [DEBUG] [Thread-56375] [transport.py] [_log()] userauth is OK
2025-11-17T15:03:58.167 [DEBUG] [Thread-56375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:03:58.167 [DEBUG] [Thread-56375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:03:58.167 [DEBUG] [Thread-56375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:03:58.168 [DEBUG] [Thread-56375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:03:58.187 [INFO] [Thread-56375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:03:58.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:03:58.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:03:59.079 [DEBUG] [Thread-56375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:03:59.079 [DEBUG] [Thread-56375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:03:59.126 [DEBUG] [Thread-56375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:03:59.126 [DEBUG] [Thread-56375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:03:59.135 [DEBUG] [Thread-56375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:03:59.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:03:59.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:03:59.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:03:59.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:03:59.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:03:59.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:03:59.170 [DEBUG] [Thread-56375] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:04:01.026 [DEBUG] [Thread-56377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:04:05.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:04:05.211 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:04:16.079 [DEBUG] [Thread-56378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:04:17.554 [DEBUG] [Thread-56379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:04:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:04:29.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:04:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:04:29.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 4, 22), 28.01, 15.15, 0.0, 26.61, 23.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:04:29.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:04:22
2025-11-17T15:04:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:04:30.158 [DEBUG] [Thread-56380] [transport.py] [_log()] starting thread (client mode): 0xd071ab00
2025-11-17T15:04:30.158 [DEBUG] [Thread-56380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:04:30.177 [DEBUG] [Thread-56380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:04:30.177 [INFO] [Thread-56380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] client lang: <none>
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] server lang: <none>
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] kex follows: False
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:04:30.184 [DEBUG] [Thread-56380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:04:30.185 [DEBUG] [Thread-56380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:04:30.185 [DEBUG] [Thread-56380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:04:30.185 [DEBUG] [Thread-56380] [transport.py] [_log()] Compression: none
2025-11-17T15:04:30.185 [DEBUG] [Thread-56380] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:04:30.192 [DEBUG] [Thread-56380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:04:30.193 [DEBUG] [Thread-56380] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:04:30.193 [DEBUG] [Thread-56380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:04:30.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:04:30.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:04:30.193 [DEBUG] [Thread-56380] [transport.py] [_log()] userauth is OK
2025-11-17T15:04:30.193 [DEBUG] [Thread-56380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:04:30.193 [DEBUG] [Thread-56380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:04:30.193 [DEBUG] [Thread-56380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:04:30.193 [DEBUG] [Thread-56380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:04:30.203 [INFO] [Thread-56380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:04:30.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:04:30.872 [DEBUG] [Thread-56380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:04:30.872 [DEBUG] [Thread-56380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:04:30.872 [DEBUG] [Thread-56380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:04:30.913 [DEBUG] [Thread-56380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:04:30.913 [DEBUG] [Thread-56380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:04:30.916 [DEBUG] [Thread-56380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:04:30.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:04:30.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:04:30.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:04:30.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:04:30.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:04:30.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:04:30.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.544144 -999.00  +22.60  19.00     21   -0.50 1 1 1 1 1   888    0 19.09 -177.88 ----- 19.0 19.0 297.8 24.9 27.1 -24.2 26.9 -23.6 27.1 -23.3 27.4 -22.9
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.544144
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:04:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:04:22', tmtdew=28.01, humidity=15.15, cloud=0.0, wind=26.61, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:03:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:04:30.935 [DEBUG] [Thread-56380] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:04:31.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:04:31.020 [DEBUG] [Thread-56383] [transport.py] [_log()] starting thread (client mode): 0xd31ee770
2025-11-17T15:04:31.020 [DEBUG] [Thread-56383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:04:31.036 [DEBUG] [Thread-56383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:04:31.036 [INFO] [Thread-56383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] client lang: <none>
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] server lang: <none>
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] kex follows: False
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:04:31.043 [DEBUG] [Thread-56383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:04:31.044 [DEBUG] [Thread-56383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:04:31.044 [DEBUG] [Thread-56383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:04:31.044 [DEBUG] [Thread-56383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:04:31.044 [DEBUG] [Thread-56383] [transport.py] [_log()] Compression: none
2025-11-17T15:04:31.044 [DEBUG] [Thread-56383] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:04:31.102 [DEBUG] [Thread-56383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:04:31.102 [DEBUG] [Thread-56383] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:04:31.102 [DEBUG] [Thread-56383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:04:31.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:04:31.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:04:31.111 [DEBUG] [Thread-56385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:04:31.160 [DEBUG] [Thread-56383] [transport.py] [_log()] userauth is OK
2025-11-17T15:04:31.160 [DEBUG] [Thread-56383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:04:31.160 [DEBUG] [Thread-56383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:04:31.160 [DEBUG] [Thread-56383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:04:31.160 [DEBUG] [Thread-56383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:04:31.176 [INFO] [Thread-56383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:04:31.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:04:31.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:04:32.049 [DEBUG] [Thread-56383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:04:32.049 [DEBUG] [Thread-56383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:04:32.102 [DEBUG] [Thread-56383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:04:32.102 [DEBUG] [Thread-56383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:04:32.113 [DEBUG] [Thread-56383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:04:32.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:04:32.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:04:32.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:04:32.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:04:32.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:04:32.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:04:32.156 [DEBUG] [Thread-56383] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:04:46.154 [DEBUG] [Thread-56386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:05:01.182 [DEBUG] [Thread-56387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:05:02.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:05:02.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:05:02.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:05:02.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 4, 54), 27.99, 14.98, 0.0, 25.41, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:05:02.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:04:54
2025-11-17T15:05:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:05:03.107 [DEBUG] [Thread-56388] [transport.py] [_log()] starting thread (client mode): 0xd0723af0
2025-11-17T15:05:03.107 [DEBUG] [Thread-56388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:05:03.127 [DEBUG] [Thread-56388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:05:03.127 [INFO] [Thread-56388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:05:03.130 [DEBUG] [Thread-56388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:05:03.130 [DEBUG] [Thread-56388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:05:03.130 [DEBUG] [Thread-56388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:05:03.130 [DEBUG] [Thread-56388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:05:03.130 [DEBUG] [Thread-56388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:05:03.130 [DEBUG] [Thread-56388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:05:03.130 [DEBUG] [Thread-56388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] client lang: <none>
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] server lang: <none>
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] kex follows: False
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] Compression: none
2025-11-17T15:05:03.131 [DEBUG] [Thread-56388] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:05:03.148 [DEBUG] [Thread-56388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:05:03.148 [DEBUG] [Thread-56388] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:05:03.149 [DEBUG] [Thread-56388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:05:03.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:05:03.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:05:03.192 [DEBUG] [Thread-56388] [transport.py] [_log()] userauth is OK
2025-11-17T15:05:03.192 [DEBUG] [Thread-56388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:05:03.192 [DEBUG] [Thread-56388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:05:03.193 [DEBUG] [Thread-56388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:05:03.193 [DEBUG] [Thread-56388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:05:03.212 [INFO] [Thread-56388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:05:03.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:05:04.770 [DEBUG] [Thread-56388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:05:04.770 [DEBUG] [Thread-56388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:05:04.770 [DEBUG] [Thread-56388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:05:04.810 [DEBUG] [Thread-56388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:05:04.810 [DEBUG] [Thread-56388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:05:04.813 [DEBUG] [Thread-56388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:05:04.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:05:04.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:05:04.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:05:04.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:05:04.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:05:04.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:05:04.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:05:04.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:05:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:05:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.544491 -999.00  +22.70  19.35     21   -0.50 1 1 1 1 1   888    0 18.32 -180.37 ----- 19.4 19.4 273.4 21.0 26.9 -25.9 26.8 -24.0 26.8 -22.9 27.2 -24.6
2025-11-17T15:05:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:05:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:05:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.544491
2025-11-17T15:05:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:05:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:05:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:05:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:05:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:05:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:04:54', tmtdew=27.99, humidity=14.98, cloud=0.0, wind=25.41, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:04:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:05:04.840 [DEBUG] [Thread-56388] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:05:04.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:05:04.934 [DEBUG] [Thread-56391] [transport.py] [_log()] starting thread (client mode): 0xd0721e70
2025-11-17T15:05:04.934 [DEBUG] [Thread-56391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:05:04.951 [DEBUG] [Thread-56391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:05:04.951 [INFO] [Thread-56391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] client lang: <none>
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] server lang: <none>
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] kex follows: False
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] Compression: none
2025-11-17T15:05:04.959 [DEBUG] [Thread-56391] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:05:05.019 [DEBUG] [Thread-56391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:05:05.019 [DEBUG] [Thread-56391] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:05:05.020 [DEBUG] [Thread-56391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:05:05.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:05:05.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:05:05.079 [DEBUG] [Thread-56391] [transport.py] [_log()] userauth is OK
2025-11-17T15:05:05.079 [DEBUG] [Thread-56391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:05:05.079 [DEBUG] [Thread-56391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:05:05.079 [DEBUG] [Thread-56391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:05:05.079 [DEBUG] [Thread-56391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:05:05.094 [INFO] [Thread-56391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:05:05.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:05:05.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:05:05.352 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:05:05.353 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:05:05.990 [DEBUG] [Thread-56391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:05:05.990 [DEBUG] [Thread-56391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:05:06.038 [DEBUG] [Thread-56391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:05:06.038 [DEBUG] [Thread-56391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:05:06.047 [DEBUG] [Thread-56391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:05:06.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:05: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')
2025-11-17T15:05: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
2025-11-17T15:05:06.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:05:06.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:05:06.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:05:06.082 [DEBUG] [Thread-56391] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:05:16.213 [DEBUG] [Thread-56393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:05:17.607 [DEBUG] [Thread-56394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:05:31.265 [DEBUG] [Thread-56395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:05:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:05:36.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:05:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:05:36.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 5, 26), 27.4, 15.51, 0.0, 25.58, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:05:36.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:05:26
2025-11-17T15:05:36.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:05:37.035 [DEBUG] [Thread-56396] [transport.py] [_log()] starting thread (client mode): 0xd071a0e0
2025-11-17T15:05:37.035 [DEBUG] [Thread-56396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:05:37.054 [DEBUG] [Thread-56396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:05:37.055 [INFO] [Thread-56396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] client lang: <none>
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] server lang: <none>
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] kex follows: False
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] Compression: none
2025-11-17T15:05:37.058 [DEBUG] [Thread-56396] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:05:37.075 [DEBUG] [Thread-56396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:05:37.076 [DEBUG] [Thread-56396] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:05:37.076 [DEBUG] [Thread-56396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:05:37.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:05:37.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:05:37.078 [DEBUG] [Thread-56396] [transport.py] [_log()] userauth is OK
2025-11-17T15:05:37.078 [DEBUG] [Thread-56396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:05:37.078 [DEBUG] [Thread-56396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:05:37.078 [DEBUG] [Thread-56396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:05:37.078 [DEBUG] [Thread-56396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:05:37.095 [INFO] [Thread-56396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:05:37.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:05:37.800 [DEBUG] [Thread-56396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:05:37.800 [DEBUG] [Thread-56396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:05:37.800 [DEBUG] [Thread-56396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:05:37.840 [DEBUG] [Thread-56396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:05:37.840 [DEBUG] [Thread-56396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:05:37.843 [DEBUG] [Thread-56396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:05:37.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:05:37.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:05:37.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:05:37.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:05:37.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:05:37.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:05:37.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:05:37.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:05:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:05:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.544838 -999.00  +22.70  17.22     21   -0.60 1 1 1 1 1   888    0 18.62 -182.05 ----- 17.2 17.2 281.9 22.2 26.8 -25.6 26.7 -24.4 26.5 -24.4 27.1 -24.1
2025-11-17T15:05:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:05:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:05:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.544838
2025-11-17T15:05:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:05:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:05:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:05:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:05:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:05:37.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:05:26', tmtdew=27.4, humidity=15.51, cloud=0.0, wind=25.58, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:04:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:05:37.870 [DEBUG] [Thread-56396] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:05:37.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:05:37.966 [DEBUG] [Thread-56399] [transport.py] [_log()] starting thread (client mode): 0xd0758610
2025-11-17T15:05:37.967 [DEBUG] [Thread-56399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:05:37.982 [DEBUG] [Thread-56399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:05:37.982 [INFO] [Thread-56399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:05:37.989 [DEBUG] [Thread-56399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] client lang: <none>
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] server lang: <none>
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] kex follows: False
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] Compression: none
2025-11-17T15:05:37.990 [DEBUG] [Thread-56399] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:05:38.047 [DEBUG] [Thread-56399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:05:38.047 [DEBUG] [Thread-56399] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:05:38.048 [DEBUG] [Thread-56399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:05:38.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:05:38.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:05:38.108 [DEBUG] [Thread-56399] [transport.py] [_log()] userauth is OK
2025-11-17T15:05:38.108 [DEBUG] [Thread-56399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:05:38.108 [DEBUG] [Thread-56399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:05:38.108 [DEBUG] [Thread-56399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:05:38.108 [DEBUG] [Thread-56399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:05:38.128 [INFO] [Thread-56399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:05:38.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:05:38.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:05:39.000 [DEBUG] [Thread-56399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:05:39.000 [DEBUG] [Thread-56399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:05:39.049 [DEBUG] [Thread-56399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:05:39.049 [DEBUG] [Thread-56399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:05:39.058 [DEBUG] [Thread-56399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:05:39.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:05:39.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:05: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') -> 00000000
2025-11-17T15:05:39.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:05:39.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:05:39.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:05:39.092 [DEBUG] [Thread-56399] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:05:46.299 [DEBUG] [Thread-56401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:06:01.335 [DEBUG] [Thread-56402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:06:05.495 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:06:05.496 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:06:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:06:09.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:06:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:06:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 5, 58), 27.1, 15.79, 0.0, 24.01, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:06:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:05:58
2025-11-17T15:06:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:06:10.021 [DEBUG] [Thread-56403] [transport.py] [_log()] starting thread (client mode): 0xd0776380
2025-11-17T15:06:10.021 [DEBUG] [Thread-56403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:06:10.040 [DEBUG] [Thread-56403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:06:10.040 [INFO] [Thread-56403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] client lang: <none>
2025-11-17T15:06:10.043 [DEBUG] [Thread-56403] [transport.py] [_log()] server lang: <none>
2025-11-17T15:06:10.044 [DEBUG] [Thread-56403] [transport.py] [_log()] kex follows: False
2025-11-17T15:06:10.044 [DEBUG] [Thread-56403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:06:10.044 [DEBUG] [Thread-56403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:06:10.044 [DEBUG] [Thread-56403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:06:10.044 [DEBUG] [Thread-56403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:06:10.044 [DEBUG] [Thread-56403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:06:10.044 [DEBUG] [Thread-56403] [transport.py] [_log()] Compression: none
2025-11-17T15:06:10.044 [DEBUG] [Thread-56403] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:06:10.062 [DEBUG] [Thread-56403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:06:10.063 [DEBUG] [Thread-56403] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:06:10.063 [DEBUG] [Thread-56403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:06:10.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:06:10.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:06:10.065 [DEBUG] [Thread-56403] [transport.py] [_log()] userauth is OK
2025-11-17T15:06:10.065 [DEBUG] [Thread-56403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:06:10.065 [DEBUG] [Thread-56403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:06:10.065 [DEBUG] [Thread-56403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:06:10.066 [DEBUG] [Thread-56403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:06:10.101 [INFO] [Thread-56403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:06:10.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:06:10.718 [DEBUG] [Thread-56403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:06:10.718 [DEBUG] [Thread-56403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:06:10.719 [DEBUG] [Thread-56403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:06:10.759 [DEBUG] [Thread-56403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:06:10.760 [DEBUG] [Thread-56403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:06:10.762 [DEBUG] [Thread-56403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:06:10.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:06:10.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:06:10.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:06:10.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:06:10.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:06:10.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:06:10.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:06:10.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:06:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:06:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.545533 -999.00  +22.40  20.10     21   -0.50 1 1 1 1 1   888    0 18.78 -190.55 ----- 20.1 20.1 273.8 25.5 26.6 -26.1 26.4 -24.5 26.2 -23.1 26.6 -25.0
2025-11-17T15:06:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:06:10.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:06:10.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.545533
2025-11-17T15:06:10.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:06:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:06:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:06:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:06:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:06:10.790 [DEBUG] [Thread-56403] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:06:10.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:05:58', tmtdew=27.1, humidity=15.79, cloud=0.0, wind=24.01, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:05:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:06:10.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:06:10.887 [DEBUG] [Thread-56406] [transport.py] [_log()] starting thread (client mode): 0xd0776260
2025-11-17T15:06:10.887 [DEBUG] [Thread-56406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:06:10.901 [DEBUG] [Thread-56406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:06:10.902 [INFO] [Thread-56406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:06:10.909 [DEBUG] [Thread-56406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:06:10.909 [DEBUG] [Thread-56406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:06:10.910 [DEBUG] [Thread-56406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:06:10.910 [DEBUG] [Thread-56406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:06:10.910 [DEBUG] [Thread-56406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:06:10.910 [DEBUG] [Thread-56406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:06:10.910 [DEBUG] [Thread-56406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:06:10.910 [DEBUG] [Thread-56406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:06:10.910 [DEBUG] [Thread-56406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:06:10.910 [DEBUG] [Thread-56406] [transport.py] [_log()] client lang: <none>
2025-11-17T15:06:10.911 [DEBUG] [Thread-56406] [transport.py] [_log()] server lang: <none>
2025-11-17T15:06:10.911 [DEBUG] [Thread-56406] [transport.py] [_log()] kex follows: False
2025-11-17T15:06:10.911 [DEBUG] [Thread-56406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:06:10.911 [DEBUG] [Thread-56406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:06:10.911 [DEBUG] [Thread-56406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:06:10.911 [DEBUG] [Thread-56406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:06:10.911 [DEBUG] [Thread-56406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:06:10.912 [DEBUG] [Thread-56406] [transport.py] [_log()] Compression: none
2025-11-17T15:06:10.912 [DEBUG] [Thread-56406] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:06:10.972 [DEBUG] [Thread-56406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:06:10.972 [DEBUG] [Thread-56406] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:06:10.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:06:10.973 [DEBUG] [Thread-56406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:06:10.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:06:11.027 [DEBUG] [Thread-56406] [transport.py] [_log()] userauth is OK
2025-11-17T15:06:11.027 [DEBUG] [Thread-56406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:06:11.028 [DEBUG] [Thread-56406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:06:11.028 [DEBUG] [Thread-56406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:06:11.028 [DEBUG] [Thread-56406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:06:11.047 [INFO] [Thread-56406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:06:11.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:06:11.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:06:11.906 [DEBUG] [Thread-56406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:06:11.906 [DEBUG] [Thread-56406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:06:11.954 [DEBUG] [Thread-56406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:06:11.954 [DEBUG] [Thread-56406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:06:11.963 [DEBUG] [Thread-56406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:06:11.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:06:11.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:06:11.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:06:11.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:06:11.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:06:11.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:06:11.998 [DEBUG] [Thread-56406] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:06:16.366 [DEBUG] [Thread-56408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:06:17.667 [DEBUG] [Thread-56409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:06:31.411 [DEBUG] [Thread-56410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:06:41.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:06:41.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:06:41.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:06:42.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 6, 30), 26.76, 16.13, 0.0, 22.99, 22.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:06:42.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:06:30
2025-11-17T15:06:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:06:42.911 [DEBUG] [Thread-56411] [transport.py] [_log()] starting thread (client mode): 0xd0722740
2025-11-17T15:06:42.911 [DEBUG] [Thread-56411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:06:42.931 [DEBUG] [Thread-56411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:06:42.931 [INFO] [Thread-56411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] client lang: <none>
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] server lang: <none>
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] kex follows: False
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] Compression: none
2025-11-17T15:06:42.935 [DEBUG] [Thread-56411] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:06:42.952 [DEBUG] [Thread-56411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:06:42.953 [DEBUG] [Thread-56411] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:06:42.953 [DEBUG] [Thread-56411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:06:42.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:06:42.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:06:43.000 [DEBUG] [Thread-56411] [transport.py] [_log()] userauth is OK
2025-11-17T15:06:43.000 [DEBUG] [Thread-56411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:06:43.000 [DEBUG] [Thread-56411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:06:43.000 [DEBUG] [Thread-56411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:06:43.000 [DEBUG] [Thread-56411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:06:43.017 [INFO] [Thread-56411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:06:43.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:06:43.768 [DEBUG] [Thread-56411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:06:43.768 [DEBUG] [Thread-56411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:06:43.769 [DEBUG] [Thread-56411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:06:43.810 [DEBUG] [Thread-56411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:06:43.810 [DEBUG] [Thread-56411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:06:43.812 [DEBUG] [Thread-56411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:06:43.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:06:43.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:06:43.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:06:43.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:06:43.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:06:43.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:06:43.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:06:43.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:06:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:06:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.545880 -999.00  +22.40  29.25     21   -0.50 1 1 1 1 1   888    0 18.17 -174.59 ----- 29.2 29.2 274.0 31.9 26.4 -26.6 26.3 -24.5 26.1 -22.8 26.4 -25.7
2025-11-17T15:06:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:06:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:06:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.545880
2025-11-17T15:06:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:06:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:06:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:06:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:06:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:06:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:06:30', tmtdew=26.76, humidity=16.13, cloud=0.0, wind=22.99, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:06:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:06:43.838 [DEBUG] [Thread-56411] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:06:43.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:06:43.933 [DEBUG] [Thread-56414] [transport.py] [_log()] starting thread (client mode): 0xd31b2770
2025-11-17T15:06:43.933 [DEBUG] [Thread-56414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:06:43.948 [DEBUG] [Thread-56414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:06:43.948 [INFO] [Thread-56414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:06:43.956 [DEBUG] [Thread-56414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:06:43.956 [DEBUG] [Thread-56414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:06:43.956 [DEBUG] [Thread-56414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:06:43.956 [DEBUG] [Thread-56414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] client lang: <none>
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] server lang: <none>
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] kex follows: False
2025-11-17T15:06:43.957 [DEBUG] [Thread-56414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:06:43.958 [DEBUG] [Thread-56414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:06:43.958 [DEBUG] [Thread-56414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:06:43.958 [DEBUG] [Thread-56414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:06:43.958 [DEBUG] [Thread-56414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:06:43.958 [DEBUG] [Thread-56414] [transport.py] [_log()] Compression: none
2025-11-17T15:06:43.958 [DEBUG] [Thread-56414] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:06:44.016 [DEBUG] [Thread-56414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:06:44.016 [DEBUG] [Thread-56414] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:06:44.017 [DEBUG] [Thread-56414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:06:44.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:06:44.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:06:44.071 [DEBUG] [Thread-56414] [transport.py] [_log()] userauth is OK
2025-11-17T15:06:44.071 [DEBUG] [Thread-56414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:06:44.071 [DEBUG] [Thread-56414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:06:44.071 [DEBUG] [Thread-56414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:06:44.071 [DEBUG] [Thread-56414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:06:44.095 [INFO] [Thread-56414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:06:44.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:06:44.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:06:44.965 [DEBUG] [Thread-56414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:06:44.965 [DEBUG] [Thread-56414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:06:45.014 [DEBUG] [Thread-56414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:06:45.014 [DEBUG] [Thread-56414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:06:45.023 [DEBUG] [Thread-56414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:06:45.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:06:45.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:06:45.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:06:45.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:06:45.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:06:45.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:06:45.057 [DEBUG] [Thread-56414] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:06:46.439 [DEBUG] [Thread-56416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:07:01.481 [DEBUG] [Thread-56417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:07:05.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:07:05.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:07:15.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:07:15.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:07:15.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:07:15.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 7, 2), 26.78, 16.13, 0.0, 21.05, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:07:15.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:07:02
2025-11-17T15:07:15.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:07:15.988 [DEBUG] [Thread-56418] [transport.py] [_log()] starting thread (client mode): 0xd0759900
2025-11-17T15:07:15.988 [DEBUG] [Thread-56418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:07:16.007 [DEBUG] [Thread-56418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:07:16.008 [INFO] [Thread-56418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:07:16.011 [DEBUG] [Thread-56418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:07:16.011 [DEBUG] [Thread-56418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:07:16.011 [DEBUG] [Thread-56418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:07:16.011 [DEBUG] [Thread-56418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] client lang: <none>
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] server lang: <none>
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] kex follows: False
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] Compression: none
2025-11-17T15:07:16.012 [DEBUG] [Thread-56418] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:07:16.027 [DEBUG] [Thread-56418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:07:16.028 [DEBUG] [Thread-56418] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:07:16.028 [DEBUG] [Thread-56418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:07:16.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:07:16.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:07:16.030 [DEBUG] [Thread-56418] [transport.py] [_log()] userauth is OK
2025-11-17T15:07:16.030 [DEBUG] [Thread-56418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:07:16.030 [DEBUG] [Thread-56418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:07:16.031 [DEBUG] [Thread-56418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:07:16.031 [DEBUG] [Thread-56418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:07:16.054 [INFO] [Thread-56418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:07:16.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:07:16.511 [DEBUG] [Thread-56420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:07:16.702 [DEBUG] [Thread-56418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:07:16.702 [DEBUG] [Thread-56418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:07:16.702 [DEBUG] [Thread-56418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:07:16.742 [DEBUG] [Thread-56418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:07:16.743 [DEBUG] [Thread-56418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:07:16.745 [DEBUG] [Thread-56418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:07:16.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:07:16.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:07:16.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:07:16.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:07:16.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:07:16.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:07:16.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:07:16.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:07:16.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:07:16.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.546227 -999.00  +22.00  18.66     22   -0.60 1 1 1 1 1   888    0 18.56 -168.60 ----- 18.7 18.7 275.4 22.3 26.2 -26.6 26.2 -24.0 25.7 -24.9 26.2 -24.6
2025-11-17T15:07:16.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:07:16.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:07:16.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.546227
2025-11-17T15:07:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:07:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:07:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:07:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:07:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:07:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:07:02', tmtdew=26.78, humidity=16.13, cloud=0.0, wind=21.05, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:06:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:07:16.770 [DEBUG] [Thread-56418] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:07:16.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:07:16.867 [DEBUG] [Thread-56422] [transport.py] [_log()] starting thread (client mode): 0xd31cf460
2025-11-17T15:07:16.867 [DEBUG] [Thread-56422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:07:16.882 [DEBUG] [Thread-56422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:07:16.882 [INFO] [Thread-56422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] client lang: <none>
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] server lang: <none>
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] kex follows: False
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:07:16.890 [DEBUG] [Thread-56422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:07:16.891 [DEBUG] [Thread-56422] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:07:16.891 [DEBUG] [Thread-56422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:07:16.891 [DEBUG] [Thread-56422] [transport.py] [_log()] Compression: none
2025-11-17T15:07:16.891 [DEBUG] [Thread-56422] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:07:16.951 [DEBUG] [Thread-56422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:07:16.952 [DEBUG] [Thread-56422] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:07:16.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:07:16.953 [DEBUG] [Thread-56422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:07:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:07:17.007 [DEBUG] [Thread-56422] [transport.py] [_log()] userauth is OK
2025-11-17T15:07:17.007 [DEBUG] [Thread-56422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:07:17.008 [DEBUG] [Thread-56422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:07:17.008 [DEBUG] [Thread-56422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:07:17.008 [DEBUG] [Thread-56422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:07:17.032 [INFO] [Thread-56422] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:07:17.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:07:17.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:07:17.720 [DEBUG] [Thread-56424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:07:17.922 [DEBUG] [Thread-56422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:07:17.922 [DEBUG] [Thread-56422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:07:17.970 [DEBUG] [Thread-56422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:07:17.970 [DEBUG] [Thread-56422] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:07:17.979 [DEBUG] [Thread-56422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:07:17.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:07:17.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:07:17.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:07:18.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:07:18.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:07:18.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:07:18.014 [DEBUG] [Thread-56422] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:07:31.541 [DEBUG] [Thread-56425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:07:46.588 [DEBUG] [Thread-56426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:07:48.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:07:48.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:07:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:07:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 7, 34), 26.66, 16.39, 0.0, 18.69, 22.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:07:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:07:34
2025-11-17T15:07:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:07:48.918 [DEBUG] [Thread-56427] [transport.py] [_log()] starting thread (client mode): 0xd070e170
2025-11-17T15:07:48.919 [DEBUG] [Thread-56427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:07:48.938 [DEBUG] [Thread-56427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:07:48.939 [INFO] [Thread-56427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:07:48.942 [DEBUG] [Thread-56427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:07:48.942 [DEBUG] [Thread-56427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:07:48.942 [DEBUG] [Thread-56427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:07:48.942 [DEBUG] [Thread-56427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:07:48.942 [DEBUG] [Thread-56427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] client lang: <none>
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] server lang: <none>
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] kex follows: False
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] Compression: none
2025-11-17T15:07:48.943 [DEBUG] [Thread-56427] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:07:48.958 [DEBUG] [Thread-56427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:07:48.958 [DEBUG] [Thread-56427] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:07:48.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:07:48.959 [DEBUG] [Thread-56427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:07:48.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:07:48.960 [DEBUG] [Thread-56427] [transport.py] [_log()] userauth is OK
2025-11-17T15:07:48.961 [DEBUG] [Thread-56427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:07:48.961 [DEBUG] [Thread-56427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:07:48.961 [DEBUG] [Thread-56427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:07:48.961 [DEBUG] [Thread-56427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:07:48.984 [INFO] [Thread-56427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:07:48.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:07:49.743 [DEBUG] [Thread-56427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:07:49.743 [DEBUG] [Thread-56427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:07:49.744 [DEBUG] [Thread-56427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:07:49.785 [DEBUG] [Thread-56427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:07:49.785 [DEBUG] [Thread-56427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:07:49.787 [DEBUG] [Thread-56427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:07:49.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:07:49.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:07:49.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:07:49.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:07:49.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:07:49.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:07:49.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:07:49.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:07:49.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:07:49.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.546575 -999.00  +21.90  20.93     22   -0.50 1 1 1 1 1   888    0 18.78 -153.53 ----- 20.9 20.9 272.0 28.4 26.0 -26.0 26.0 -24.7 25.6 -24.9 26.0 -23.5
2025-11-17T15:07:49.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:07:49.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:07:49.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.546575
2025-11-17T15:07:49.810 [DEBUG] [Thread-56427] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:07:49.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:07:49.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:07:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:07:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:07:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:07:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:07:34', tmtdew=26.66, humidity=16.39, cloud=0.0, wind=18.69, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:07:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:07:49.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:07:49.909 [DEBUG] [Thread-56430] [transport.py] [_log()] starting thread (client mode): 0xd070e230
2025-11-17T15:07:49.909 [DEBUG] [Thread-56430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:07:49.924 [DEBUG] [Thread-56430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:07:49.925 [INFO] [Thread-56430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:07:49.932 [DEBUG] [Thread-56430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:07:49.932 [DEBUG] [Thread-56430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] client lang: <none>
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] server lang: <none>
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] kex follows: False
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:07:49.933 [DEBUG] [Thread-56430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:07:49.934 [DEBUG] [Thread-56430] [transport.py] [_log()] Compression: none
2025-11-17T15:07:49.934 [DEBUG] [Thread-56430] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:07:49.991 [DEBUG] [Thread-56430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:07:49.992 [DEBUG] [Thread-56430] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:07:49.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:07:49.993 [DEBUG] [Thread-56430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:07:49.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:07:50.048 [DEBUG] [Thread-56430] [transport.py] [_log()] userauth is OK
2025-11-17T15:07:50.048 [DEBUG] [Thread-56430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:07:50.048 [DEBUG] [Thread-56430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:07:50.048 [DEBUG] [Thread-56430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:07:50.048 [DEBUG] [Thread-56430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:07:50.068 [INFO] [Thread-56430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:07:50.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:07:50.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:07:50.993 [DEBUG] [Thread-56430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:07:50.993 [DEBUG] [Thread-56430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:07:51.044 [DEBUG] [Thread-56430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:07:51.044 [DEBUG] [Thread-56430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:07:51.053 [DEBUG] [Thread-56430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:07:51.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:07:51.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:07:51.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:07:51.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:07:51.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:07:51.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:07:51.087 [DEBUG] [Thread-56430] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:08:01.613 [DEBUG] [Thread-56432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:08:05.778 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:08:05.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:08:16.648 [DEBUG] [Thread-56433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:08:17.781 [DEBUG] [Thread-56434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:08:21.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:08:21.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:08:21.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:08:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 8, 7), 26.76, 16.29, 0.0, 20.22, 22.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:08:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:08:07
2025-11-17T15:08:21.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:08:22.064 [DEBUG] [Thread-56435] [transport.py] [_log()] starting thread (client mode): 0xd07bf0a0
2025-11-17T15:08:22.064 [DEBUG] [Thread-56435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:08:22.085 [DEBUG] [Thread-56435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:08:22.085 [INFO] [Thread-56435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] client lang: <none>
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] server lang: <none>
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] kex follows: False
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] Compression: none
2025-11-17T15:08:22.088 [DEBUG] [Thread-56435] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:08:22.105 [DEBUG] [Thread-56435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:08:22.105 [DEBUG] [Thread-56435] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:08:22.105 [DEBUG] [Thread-56435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:08:22.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:08:22.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:08:22.106 [DEBUG] [Thread-56435] [transport.py] [_log()] userauth is OK
2025-11-17T15:08:22.106 [DEBUG] [Thread-56435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:08:22.106 [DEBUG] [Thread-56435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:08:22.106 [DEBUG] [Thread-56435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:08:22.106 [DEBUG] [Thread-56435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:08:22.121 [INFO] [Thread-56435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:08:22.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:08:22.763 [DEBUG] [Thread-56435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:08:22.763 [DEBUG] [Thread-56435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:08:22.763 [DEBUG] [Thread-56435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:08:22.804 [DEBUG] [Thread-56435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:08:22.804 [DEBUG] [Thread-56435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:08:22.806 [DEBUG] [Thread-56435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:08:22.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:08:22.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:08:22.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:08:22.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:08:22.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:08:22.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:08:22.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.546922 -999.00  +21.80  15.12     22   -0.40 1 1 1 1 1   888    0 19.23 -151.78 ----- 15.1 15.1 262.6 26.5 26.0 -25.0 26.0 -23.3 25.4 -22.8 25.9 -23.4
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.546922
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:08:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:08:07', tmtdew=26.76, humidity=16.29, cloud=0.0, wind=20.22, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:07:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:08:22.828 [DEBUG] [Thread-56435] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:08:22.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:08:22.913 [DEBUG] [Thread-56438] [transport.py] [_log()] starting thread (client mode): 0xd070f9d0
2025-11-17T15:08:22.914 [DEBUG] [Thread-56438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:08:22.928 [DEBUG] [Thread-56438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:08:22.928 [INFO] [Thread-56438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:08:22.935 [DEBUG] [Thread-56438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] client lang: <none>
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] server lang: <none>
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] kex follows: False
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] Compression: none
2025-11-17T15:08:22.936 [DEBUG] [Thread-56438] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:08:22.995 [DEBUG] [Thread-56438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:08:22.995 [DEBUG] [Thread-56438] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:08:22.995 [DEBUG] [Thread-56438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:08:22.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:08:22.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:08:23.052 [DEBUG] [Thread-56438] [transport.py] [_log()] userauth is OK
2025-11-17T15:08:23.052 [DEBUG] [Thread-56438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:08:23.052 [DEBUG] [Thread-56438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:08:23.052 [DEBUG] [Thread-56438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:08:23.052 [DEBUG] [Thread-56438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:08:23.069 [INFO] [Thread-56438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:08:23.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:08:23.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:08:23.906 [DEBUG] [Thread-56438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:08:23.906 [DEBUG] [Thread-56438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:08:23.954 [DEBUG] [Thread-56438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:08:23.954 [DEBUG] [Thread-56438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:08:23.962 [DEBUG] [Thread-56438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:08:23.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:08:23.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:08: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
2025-11-17T15:08:23.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:08:23.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:08:23.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:08:23.994 [DEBUG] [Thread-56438] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:08:31.681 [DEBUG] [Thread-56440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:08:46.724 [DEBUG] [Thread-56441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:08:54.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:08:54.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:08:54.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:08:54.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 8, 39), 26.62, 16.79, 0.0, 16.5, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:08:54.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:08:39
2025-11-17T15:08:54.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:08:54.936 [DEBUG] [Thread-56442] [transport.py] [_log()] starting thread (client mode): 0xd0776110
2025-11-17T15:08:54.936 [DEBUG] [Thread-56442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:08:54.955 [DEBUG] [Thread-56442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:08:54.955 [INFO] [Thread-56442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] client lang: <none>
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] server lang: <none>
2025-11-17T15:08:54.959 [DEBUG] [Thread-56442] [transport.py] [_log()] kex follows: False
2025-11-17T15:08:54.960 [DEBUG] [Thread-56442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:08:54.960 [DEBUG] [Thread-56442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:08:54.960 [DEBUG] [Thread-56442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:08:54.960 [DEBUG] [Thread-56442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:08:54.960 [DEBUG] [Thread-56442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:08:54.960 [DEBUG] [Thread-56442] [transport.py] [_log()] Compression: none
2025-11-17T15:08:54.960 [DEBUG] [Thread-56442] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:08:54.977 [DEBUG] [Thread-56442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:08:54.978 [DEBUG] [Thread-56442] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:08:54.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:08:54.979 [DEBUG] [Thread-56442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:08:54.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:08:54.981 [DEBUG] [Thread-56442] [transport.py] [_log()] userauth is OK
2025-11-17T15:08:54.981 [DEBUG] [Thread-56442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:08:54.981 [DEBUG] [Thread-56442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:08:54.981 [DEBUG] [Thread-56442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:08:54.982 [DEBUG] [Thread-56442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:08:54.999 [INFO] [Thread-56442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:08:54.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:08:55.705 [DEBUG] [Thread-56442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:08:55.705 [DEBUG] [Thread-56442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:08:55.705 [DEBUG] [Thread-56442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:08:55.746 [DEBUG] [Thread-56442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:08:55.746 [DEBUG] [Thread-56442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:08:55.749 [DEBUG] [Thread-56442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:08:55.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:08:55.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:08:55.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:08:55.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:08:55.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:08:55.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:08:55.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:08:55.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:08:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:08:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.547269 -999.00  +21.80  14.79     22   -0.40 1 2 1 1 1   888    0 19.02 -148.76 ----- 14.8 14.8 268.0 21.1 26.1 -23.4 26.0 -22.0 25.7 -21.2 26.0 -20.4
2025-11-17T15:08:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:08:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:08:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.547269
2025-11-17T15:08:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:08:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:08:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:08:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:08:55.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:08:55.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:08:39', tmtdew=26.62, humidity=16.79, cloud=0.0, wind=16.5, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:08:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:08:55.785 [DEBUG] [Thread-56442] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:08:55.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:08:55.881 [DEBUG] [Thread-56445] [transport.py] [_log()] starting thread (client mode): 0xd075b820
2025-11-17T15:08:55.881 [DEBUG] [Thread-56445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:08:55.895 [DEBUG] [Thread-56445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:08:55.896 [INFO] [Thread-56445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:08:55.903 [DEBUG] [Thread-56445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:08:55.903 [DEBUG] [Thread-56445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] client lang: <none>
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] server lang: <none>
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] kex follows: False
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:08:55.904 [DEBUG] [Thread-56445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:08:55.905 [DEBUG] [Thread-56445] [transport.py] [_log()] Compression: none
2025-11-17T15:08:55.905 [DEBUG] [Thread-56445] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:08:55.964 [DEBUG] [Thread-56445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:08:55.965 [DEBUG] [Thread-56445] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:08:55.965 [DEBUG] [Thread-56445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:08:55.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:08:55.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:08:56.020 [DEBUG] [Thread-56445] [transport.py] [_log()] userauth is OK
2025-11-17T15:08:56.020 [DEBUG] [Thread-56445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:08:56.022 [DEBUG] [Thread-56445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:08:56.022 [DEBUG] [Thread-56445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:08:56.022 [DEBUG] [Thread-56445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:08:56.039 [INFO] [Thread-56445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:08:56.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:08:56.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:08:56.862 [DEBUG] [Thread-56445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:08:56.862 [DEBUG] [Thread-56445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:08:56.910 [DEBUG] [Thread-56445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:08:56.911 [DEBUG] [Thread-56445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:08:56.919 [DEBUG] [Thread-56445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:08:56.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:08:56.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:08:56.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:08:56.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:08:56.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:08:56.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:08:56.955 [DEBUG] [Thread-56445] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:09:01.752 [DEBUG] [Thread-56447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:09:05.918 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:09:05.920 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:09:16.783 [DEBUG] [Thread-56448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:09:17.834 [DEBUG] [Thread-56449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:09:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:09:26.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:09:26.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:09:27.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 9, 11), 26.54, 16.88, 0.0, 14.22, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:09:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:09:11
2025-11-17T15:09:27.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:09:27.862 [DEBUG] [Thread-56450] [transport.py] [_log()] starting thread (client mode): 0xd07cc520
2025-11-17T15:09:27.862 [DEBUG] [Thread-56450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:09:27.882 [DEBUG] [Thread-56450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:09:27.882 [INFO] [Thread-56450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:09:27.885 [DEBUG] [Thread-56450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] client lang: <none>
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] server lang: <none>
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] kex follows: False
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] Compression: none
2025-11-17T15:09:27.886 [DEBUG] [Thread-56450] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:09:27.903 [DEBUG] [Thread-56450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:09:27.904 [DEBUG] [Thread-56450] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:09:27.904 [DEBUG] [Thread-56450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:09:27.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:09:27.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:09:27.906 [DEBUG] [Thread-56450] [transport.py] [_log()] userauth is OK
2025-11-17T15:09:27.907 [DEBUG] [Thread-56450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:09:27.907 [DEBUG] [Thread-56450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:09:27.907 [DEBUG] [Thread-56450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:09:27.907 [DEBUG] [Thread-56450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:09:27.925 [INFO] [Thread-56450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:09:27.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:09:28.593 [DEBUG] [Thread-56450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:09:28.593 [DEBUG] [Thread-56450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:09:28.593 [DEBUG] [Thread-56450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:09:28.634 [DEBUG] [Thread-56450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:09:28.634 [DEBUG] [Thread-56450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:09:28.637 [DEBUG] [Thread-56450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:09:28.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:09:28.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:09:28.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:09:28.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:09:28.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:09:28.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:09:28.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:09:28.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:09:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:09:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.547616 -999.00  +21.80  17.26     22   -0.40 1 2 1 1 1   888    0 19.25 -152.50 ----- 17.3 17.3 304.8 23.6 26.1 -24.6 26.1 -21.6 25.7 -21.9 26.2 -22.4
2025-11-17T15:09:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:09:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:09:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.547616
2025-11-17T15:09:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:09:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:09:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:09:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:09:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:09:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:09:11', tmtdew=26.54, humidity=16.88, cloud=0.0, wind=14.22, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:08:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:09:28.665 [DEBUG] [Thread-56450] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:09:28.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:09:28.760 [DEBUG] [Thread-56453] [transport.py] [_log()] starting thread (client mode): 0xd0718940
2025-11-17T15:09:28.761 [DEBUG] [Thread-56453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:09:28.775 [DEBUG] [Thread-56453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:09:28.775 [INFO] [Thread-56453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] client lang: <none>
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] server lang: <none>
2025-11-17T15:09:28.783 [DEBUG] [Thread-56453] [transport.py] [_log()] kex follows: False
2025-11-17T15:09:28.784 [DEBUG] [Thread-56453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:09:28.784 [DEBUG] [Thread-56453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:09:28.784 [DEBUG] [Thread-56453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:09:28.784 [DEBUG] [Thread-56453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:09:28.784 [DEBUG] [Thread-56453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:09:28.784 [DEBUG] [Thread-56453] [transport.py] [_log()] Compression: none
2025-11-17T15:09:28.784 [DEBUG] [Thread-56453] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:09:28.839 [DEBUG] [Thread-56453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:09:28.840 [DEBUG] [Thread-56453] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:09:28.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:09:28.841 [DEBUG] [Thread-56453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:09:28.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:09:28.896 [DEBUG] [Thread-56453] [transport.py] [_log()] userauth is OK
2025-11-17T15:09:28.896 [DEBUG] [Thread-56453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:09:28.896 [DEBUG] [Thread-56453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:09:28.896 [DEBUG] [Thread-56453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:09:28.896 [DEBUG] [Thread-56453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:09:28.915 [INFO] [Thread-56453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:09:28.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:09:28.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:09:29.816 [DEBUG] [Thread-56453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:09:29.816 [DEBUG] [Thread-56453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:09:29.864 [DEBUG] [Thread-56453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:09:29.864 [DEBUG] [Thread-56453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:09:29.873 [DEBUG] [Thread-56453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:09:29.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:09:29.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:09:29.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:09:29.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:09:29.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:09:29.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:09:29.912 [DEBUG] [Thread-56453] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:09:31.815 [DEBUG] [Thread-56455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:09:46.871 [DEBUG] [Thread-56456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:09:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:09:59.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:09:59.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:10:00.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 9, 43), 26.69, 16.38, 0.0, 15.95, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:10:00.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:09:43
2025-11-17T15:10:00.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:10:00.846 [DEBUG] [Thread-56457] [transport.py] [_log()] starting thread (client mode): 0xd071a3b0
2025-11-17T15:10:00.846 [DEBUG] [Thread-56457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:10:00.866 [DEBUG] [Thread-56457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:10:00.866 [INFO] [Thread-56457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] client lang: <none>
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] server lang: <none>
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] kex follows: False
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] Compression: none
2025-11-17T15:10:00.869 [DEBUG] [Thread-56457] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:10:00.878 [DEBUG] [Thread-56457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:10:00.879 [DEBUG] [Thread-56457] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:10:00.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:10:00.879 [DEBUG] [Thread-56457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:10:00.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:10:00.883 [DEBUG] [Thread-56457] [transport.py] [_log()] userauth is OK
2025-11-17T15:10:00.883 [DEBUG] [Thread-56457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:10:00.884 [DEBUG] [Thread-56457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:10:00.884 [DEBUG] [Thread-56457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:10:00.884 [DEBUG] [Thread-56457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:10:00.897 [INFO] [Thread-56457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:10:00.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:10:01.620 [DEBUG] [Thread-56457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:10:01.620 [DEBUG] [Thread-56457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:10:01.620 [DEBUG] [Thread-56457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:10:01.661 [DEBUG] [Thread-56457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:10:01.661 [DEBUG] [Thread-56457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:10:01.664 [DEBUG] [Thread-56457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:10:01.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:10:01.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:10:01.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:10:01.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:10:01.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:10:01.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:10:01.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:10:01.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:10:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:10:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.547963 -999.00  +22.10  19.35     22   -0.20 1 2 1 1 1   888    0 19.27 -150.56 ----- 19.4 19.4 292.8 24.3 26.1 -24.2 26.0 -23.1 25.8 -22.9 26.1 -22.5
2025-11-17T15:10:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:10:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:10:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.547963
2025-11-17T15:10:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:10:01.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:10:01.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:10:01.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:10:01.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:10:01.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:09:43', tmtdew=26.69, humidity=16.38, cloud=0.0, wind=15.95, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:09:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:10:01.683 [DEBUG] [Thread-56457] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:10:01.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:10:01.769 [DEBUG] [Thread-56460] [transport.py] [_log()] starting thread (client mode): 0xd07cee60
2025-11-17T15:10:01.769 [DEBUG] [Thread-56460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:10:01.783 [DEBUG] [Thread-56460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:10:01.783 [INFO] [Thread-56460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:10:01.790 [DEBUG] [Thread-56460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] client lang: <none>
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] server lang: <none>
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] kex follows: False
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:10:01.791 [DEBUG] [Thread-56460] [transport.py] [_log()] Compression: none
2025-11-17T15:10:01.792 [DEBUG] [Thread-56460] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:10:01.848 [DEBUG] [Thread-56460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:10:01.849 [DEBUG] [Thread-56460] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:10:01.849 [DEBUG] [Thread-56460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:10:01.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:10:01.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:10:01.903 [DEBUG] [Thread-56462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:10:01.905 [DEBUG] [Thread-56460] [transport.py] [_log()] userauth is OK
2025-11-17T15:10:01.905 [DEBUG] [Thread-56460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:10:01.905 [DEBUG] [Thread-56460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:10:01.905 [DEBUG] [Thread-56460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:10:01.905 [DEBUG] [Thread-56460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:10:01.929 [INFO] [Thread-56460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:10:01.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:10:01.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:10:02.802 [DEBUG] [Thread-56460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:10:02.803 [DEBUG] [Thread-56460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:10:02.850 [DEBUG] [Thread-56460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:10:02.850 [DEBUG] [Thread-56460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:10:02.862 [DEBUG] [Thread-56460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:10:02.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:10:02.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:10:02.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:10:02.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:10:02.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:10:02.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:10:02.902 [DEBUG] [Thread-56460] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:10:06.060 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:10:06.061 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:10:16.941 [DEBUG] [Thread-56463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:10:17.896 [DEBUG] [Thread-56464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:10:31.971 [DEBUG] [Thread-56465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:10:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:10:32.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:10:32.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:10:33.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 10, 15), 26.56, 16.49, 0.0, 15.83, 22.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:10:33.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:10:15
2025-11-17T15:10:33.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:10:33.824 [DEBUG] [Thread-56466] [transport.py] [_log()] starting thread (client mode): 0xd0775150
2025-11-17T15:10:33.824 [DEBUG] [Thread-56466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:10:33.845 [DEBUG] [Thread-56466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:10:33.845 [INFO] [Thread-56466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:10:33.848 [DEBUG] [Thread-56466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] client lang: <none>
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] server lang: <none>
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] kex follows: False
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] Compression: none
2025-11-17T15:10:33.849 [DEBUG] [Thread-56466] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:10:33.858 [DEBUG] [Thread-56466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:10:33.858 [DEBUG] [Thread-56466] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:10:33.859 [DEBUG] [Thread-56466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:10:33.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:10:33.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:10:33.860 [DEBUG] [Thread-56466] [transport.py] [_log()] userauth is OK
2025-11-17T15:10:33.860 [DEBUG] [Thread-56466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:10:33.861 [DEBUG] [Thread-56466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:10:33.861 [DEBUG] [Thread-56466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:10:33.861 [DEBUG] [Thread-56466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:10:33.885 [INFO] [Thread-56466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:10:33.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:10:34.521 [DEBUG] [Thread-56466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:10:34.522 [DEBUG] [Thread-56466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:10:34.522 [DEBUG] [Thread-56466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:10:34.562 [DEBUG] [Thread-56466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:10:34.562 [DEBUG] [Thread-56466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:10:34.565 [DEBUG] [Thread-56466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:10:34.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:10:34.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:10:34.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:10:34.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:10:34.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:10:34.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:10:34.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:10:34.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:10:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:10:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.548311 -999.00  +21.90  15.69     22   -0.30 1 1 1 1 1   888    0 19.13 -145.62 ----- 15.7 15.7 284.6 21.9 25.9 -25.7 25.9 -23.4 25.6 -27.3 25.9 -23.2
2025-11-17T15:10:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:10:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:10:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.548311
2025-11-17T15:10:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:10:34.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:10:34.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:10:34.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:10:34.589 [DEBUG] [Thread-56466] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:10:34.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:10:34.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:10:15', tmtdew=26.56, humidity=16.49, cloud=0.0, wind=15.83, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:09:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:10:34.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:10:34.694 [DEBUG] [Thread-56469] [transport.py] [_log()] starting thread (client mode): 0xd07766b0
2025-11-17T15:10:34.694 [DEBUG] [Thread-56469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:10:34.709 [DEBUG] [Thread-56469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:10:34.709 [INFO] [Thread-56469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:10:34.716 [DEBUG] [Thread-56469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:10:34.717 [DEBUG] [Thread-56469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:10:34.717 [DEBUG] [Thread-56469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:10:34.717 [DEBUG] [Thread-56469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:10:34.717 [DEBUG] [Thread-56469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:10:34.717 [DEBUG] [Thread-56469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:10:34.717 [DEBUG] [Thread-56469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:10:34.717 [DEBUG] [Thread-56469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:10:34.717 [DEBUG] [Thread-56469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:10:34.718 [DEBUG] [Thread-56469] [transport.py] [_log()] client lang: <none>
2025-11-17T15:10:34.718 [DEBUG] [Thread-56469] [transport.py] [_log()] server lang: <none>
2025-11-17T15:10:34.718 [DEBUG] [Thread-56469] [transport.py] [_log()] kex follows: False
2025-11-17T15:10:34.718 [DEBUG] [Thread-56469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:10:34.718 [DEBUG] [Thread-56469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:10:34.718 [DEBUG] [Thread-56469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:10:34.718 [DEBUG] [Thread-56469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:10:34.718 [DEBUG] [Thread-56469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:10:34.719 [DEBUG] [Thread-56469] [transport.py] [_log()] Compression: none
2025-11-17T15:10:34.719 [DEBUG] [Thread-56469] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:10:34.779 [DEBUG] [Thread-56469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:10:34.779 [DEBUG] [Thread-56469] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:10:34.779 [DEBUG] [Thread-56469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:10:34.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:10:34.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:10:34.836 [DEBUG] [Thread-56469] [transport.py] [_log()] userauth is OK
2025-11-17T15:10:34.836 [DEBUG] [Thread-56469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:10:34.836 [DEBUG] [Thread-56469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:10:34.836 [DEBUG] [Thread-56469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:10:34.837 [DEBUG] [Thread-56469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:10:34.855 [INFO] [Thread-56469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:10:34.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:10:34.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:10:35.723 [DEBUG] [Thread-56469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:10:35.723 [DEBUG] [Thread-56469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:10:35.774 [DEBUG] [Thread-56469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:10:35.775 [DEBUG] [Thread-56469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:10:35.786 [DEBUG] [Thread-56469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:10:35.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:10:35.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:10:35.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:10:35.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:10:35.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:10:35.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:10:35.821 [DEBUG] [Thread-56469] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:10:47.003 [DEBUG] [Thread-56471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:11:02.050 [DEBUG] [Thread-56472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:11:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:11:05.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:11:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:11:06.201 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:11:06.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:11:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 10, 47), 26.66, 16.49, 0.0, 16.34, 22.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:11:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:10:47
2025-11-17T15:11:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:11:06.763 [DEBUG] [Thread-56473] [transport.py] [_log()] starting thread (client mode): 0xd078f340
2025-11-17T15:11:06.764 [DEBUG] [Thread-56473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:11:06.782 [DEBUG] [Thread-56473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:11:06.782 [INFO] [Thread-56473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] client lang: <none>
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] server lang: <none>
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] kex follows: False
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] Compression: none
2025-11-17T15:11:06.785 [DEBUG] [Thread-56473] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:11:06.802 [DEBUG] [Thread-56473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:11:06.802 [DEBUG] [Thread-56473] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:11:06.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:11:06.804 [DEBUG] [Thread-56473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:11:06.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:11:06.805 [DEBUG] [Thread-56473] [transport.py] [_log()] userauth is OK
2025-11-17T15:11:06.806 [DEBUG] [Thread-56473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:11:06.806 [DEBUG] [Thread-56473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:11:06.806 [DEBUG] [Thread-56473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:11:06.806 [DEBUG] [Thread-56473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:11:06.841 [INFO] [Thread-56473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:11:06.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:11:07.414 [DEBUG] [Thread-56473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:11:07.415 [DEBUG] [Thread-56473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:11:07.415 [DEBUG] [Thread-56473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:11:07.455 [DEBUG] [Thread-56473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:11:07.455 [DEBUG] [Thread-56473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:11:07.458 [DEBUG] [Thread-56473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:11:07.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:11:07.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:11:07.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:11:07.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:11:07.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:11:07.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:11:07.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:11:07.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:11:07.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:11:07.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.549005 -999.00  +21.90  22.69     22   -0.10 1 2 1 1 1   888    0 18.45 -149.66 ----- 22.7 22.7 294.6 27.4 25.9 -24.2 25.8 -22.9 25.5 -22.3 25.9 -22.1
2025-11-17T15:11:07.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:11:07.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:11:07.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.549005
2025-11-17T15:11:07.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:11:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:11:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:11:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:11:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:11:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:10:47', tmtdew=26.66, humidity=16.49, cloud=0.0, wind=16.34, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:10:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:11:07.480 [DEBUG] [Thread-56473] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:11:07.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:11:07.584 [DEBUG] [Thread-56476] [transport.py] [_log()] starting thread (client mode): 0xd31b1360
2025-11-17T15:11:07.584 [DEBUG] [Thread-56476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:11:07.599 [DEBUG] [Thread-56476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:11:07.599 [INFO] [Thread-56476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:11:07.607 [DEBUG] [Thread-56476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:11:07.607 [DEBUG] [Thread-56476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:11:07.607 [DEBUG] [Thread-56476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:11:07.607 [DEBUG] [Thread-56476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:11:07.607 [DEBUG] [Thread-56476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] client lang: <none>
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] server lang: <none>
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] kex follows: False
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:11:07.608 [DEBUG] [Thread-56476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:11:07.609 [DEBUG] [Thread-56476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:11:07.609 [DEBUG] [Thread-56476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:11:07.609 [DEBUG] [Thread-56476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:11:07.609 [DEBUG] [Thread-56476] [transport.py] [_log()] Compression: none
2025-11-17T15:11:07.609 [DEBUG] [Thread-56476] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:11:07.664 [DEBUG] [Thread-56476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:11:07.665 [DEBUG] [Thread-56476] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:11:07.665 [DEBUG] [Thread-56476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:11:07.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:11:07.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:11:07.720 [DEBUG] [Thread-56476] [transport.py] [_log()] userauth is OK
2025-11-17T15:11:07.720 [DEBUG] [Thread-56476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:11:07.720 [DEBUG] [Thread-56476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:11:07.720 [DEBUG] [Thread-56476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:11:07.720 [DEBUG] [Thread-56476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:11:07.739 [INFO] [Thread-56476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:11:07.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:11:07.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:11:08.680 [DEBUG] [Thread-56476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:11:08.681 [DEBUG] [Thread-56476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:11:08.728 [DEBUG] [Thread-56476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:11:08.728 [DEBUG] [Thread-56476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:11:08.737 [DEBUG] [Thread-56476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:11:08.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:11:08.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:11:08.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:11:08.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:11:08.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:11:08.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:11:08.772 [DEBUG] [Thread-56476] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:11:17.081 [DEBUG] [Thread-56478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:11:17.953 [DEBUG] [Thread-56479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:11:32.114 [DEBUG] [Thread-56480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:11:38.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:11:38.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:11:38.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:11:39.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 11, 19), 26.66, 16.51, 0.0, 18.69, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:11:39.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:11:19
2025-11-17T15:11:39.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:11:39.720 [DEBUG] [Thread-56481] [transport.py] [_log()] starting thread (client mode): 0xd0776da0
2025-11-17T15:11:39.720 [DEBUG] [Thread-56481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:11:39.741 [DEBUG] [Thread-56481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:11:39.741 [INFO] [Thread-56481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:11:39.744 [DEBUG] [Thread-56481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:11:39.744 [DEBUG] [Thread-56481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:11:39.744 [DEBUG] [Thread-56481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:11:39.744 [DEBUG] [Thread-56481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:11:39.744 [DEBUG] [Thread-56481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] client lang: <none>
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] server lang: <none>
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] kex follows: False
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] Compression: none
2025-11-17T15:11:39.745 [DEBUG] [Thread-56481] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:11:39.761 [DEBUG] [Thread-56481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:11:39.761 [DEBUG] [Thread-56481] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:11:39.762 [DEBUG] [Thread-56481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:11:39.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:11:39.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:11:39.764 [DEBUG] [Thread-56481] [transport.py] [_log()] userauth is OK
2025-11-17T15:11:39.764 [DEBUG] [Thread-56481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:11:39.764 [DEBUG] [Thread-56481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:11:39.764 [DEBUG] [Thread-56481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:11:39.764 [DEBUG] [Thread-56481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:11:39.796 [INFO] [Thread-56481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:11:39.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:11:40.431 [DEBUG] [Thread-56481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:11:40.431 [DEBUG] [Thread-56481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:11:40.431 [DEBUG] [Thread-56481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:11:40.471 [DEBUG] [Thread-56481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:11:40.472 [DEBUG] [Thread-56481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:11:40.475 [DEBUG] [Thread-56481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:11:40.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:11:40.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:11:40.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:11:40.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:11:40.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:11:40.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:11:40.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:11:40.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:11:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:11:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.549352 -999.00  +22.20  14.21     22   +0.00 1 2 1 1 1   888    0 18.69 -139.52 ----- 14.2 14.2 291.8 23.4 26.0 -21.7 25.8 -21.4 25.6 -20.4 26.1 -18.9
2025-11-17T15:11:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:11:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:11:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.549352
2025-11-17T15:11:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:11:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:11:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:11:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:11:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:11:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:11:19', tmtdew=26.66, humidity=16.51, cloud=0.0, wind=18.69, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:11:04.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:11:40.502 [DEBUG] [Thread-56481] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:11:40.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:11:40.598 [DEBUG] [Thread-56484] [transport.py] [_log()] starting thread (client mode): 0xd0774cd0
2025-11-17T15:11:40.598 [DEBUG] [Thread-56484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:11:40.613 [DEBUG] [Thread-56484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:11:40.614 [INFO] [Thread-56484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] client lang: <none>
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] server lang: <none>
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] kex follows: False
2025-11-17T15:11:40.621 [DEBUG] [Thread-56484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:11:40.622 [DEBUG] [Thread-56484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:11:40.622 [DEBUG] [Thread-56484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:11:40.622 [DEBUG] [Thread-56484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:11:40.622 [DEBUG] [Thread-56484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:11:40.622 [DEBUG] [Thread-56484] [transport.py] [_log()] Compression: none
2025-11-17T15:11:40.622 [DEBUG] [Thread-56484] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:11:40.679 [DEBUG] [Thread-56484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:11:40.680 [DEBUG] [Thread-56484] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:11:40.680 [DEBUG] [Thread-56484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:11:40.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:11:40.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:11:40.736 [DEBUG] [Thread-56484] [transport.py] [_log()] userauth is OK
2025-11-17T15:11:40.736 [DEBUG] [Thread-56484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:11:40.736 [DEBUG] [Thread-56484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:11:40.736 [DEBUG] [Thread-56484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:11:40.736 [DEBUG] [Thread-56484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:11:40.755 [INFO] [Thread-56484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:11:40.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:11:40.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:11:41.595 [DEBUG] [Thread-56484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:11:41.595 [DEBUG] [Thread-56484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:11:41.643 [DEBUG] [Thread-56484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:11:41.643 [DEBUG] [Thread-56484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:11:41.652 [DEBUG] [Thread-56484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:11:41.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:11:41.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:11:41.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:11:41.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:11:41.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:11:41.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:11:41.692 [DEBUG] [Thread-56484] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:11:47.145 [DEBUG] [Thread-56486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:12:02.183 [DEBUG] [Thread-56487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:12:06.343 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:12:06.344 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:12:11.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:12:11.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:12:11.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:12:12.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 11, 51), 26.91, 16.23, 0.0, 18.12, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:12:12.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:11:51
2025-11-17T15:12:12.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:12:12.662 [DEBUG] [Thread-56488] [transport.py] [_log()] starting thread (client mode): 0xd078e410
2025-11-17T15:12:12.662 [DEBUG] [Thread-56488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:12:12.687 [DEBUG] [Thread-56488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:12:12.687 [INFO] [Thread-56488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:12:12.689 [DEBUG] [Thread-56488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:12:12.689 [DEBUG] [Thread-56488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:12:12.689 [DEBUG] [Thread-56488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:12:12.689 [DEBUG] [Thread-56488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:12:12.689 [DEBUG] [Thread-56488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:12:12.689 [DEBUG] [Thread-56488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] client lang: <none>
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] server lang: <none>
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] kex follows: False
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] Compression: none
2025-11-17T15:12:12.690 [DEBUG] [Thread-56488] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:12:12.697 [DEBUG] [Thread-56488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:12:12.698 [DEBUG] [Thread-56488] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:12:12.698 [DEBUG] [Thread-56488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:12:12.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:12:12.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:12:12.698 [DEBUG] [Thread-56488] [transport.py] [_log()] userauth is OK
2025-11-17T15:12:12.698 [DEBUG] [Thread-56488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:12:12.698 [DEBUG] [Thread-56488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:12:12.698 [DEBUG] [Thread-56488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:12:12.698 [DEBUG] [Thread-56488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:12:12.707 [INFO] [Thread-56488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:12:12.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:12:13.270 [DEBUG] [Thread-56488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:12:13.270 [DEBUG] [Thread-56488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:12:13.271 [DEBUG] [Thread-56488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:12:13.311 [DEBUG] [Thread-56488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:12:13.311 [DEBUG] [Thread-56488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:12:13.313 [DEBUG] [Thread-56488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:12:13.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:12:13.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:12:13.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:12:13.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:12:13.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:12:13.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:12:13.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:12:13.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:12:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:12:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.549700 -999.00  +22.30  20.71     22   +0.00 1 2 1 1 1   888    0 19.14 -145.93 ----- 20.7 20.7 310.8 27.2 26.6 -20.3 26.3 -19.0 26.2 -15.6 26.7 -16.9
2025-11-17T15:12:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:12:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:12:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.549700
2025-11-17T15:12:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:12:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:12:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:12:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:12:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:12:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:11:51', tmtdew=26.91, humidity=16.23, cloud=0.0, wind=18.12, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:11:34.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:12:13.330 [DEBUG] [Thread-56488] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:12:13.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:12:13.416 [DEBUG] [Thread-56491] [transport.py] [_log()] starting thread (client mode): 0xd07cee60
2025-11-17T15:12:13.416 [DEBUG] [Thread-56491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:12:13.431 [DEBUG] [Thread-56491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:12:13.431 [INFO] [Thread-56491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] client lang: <none>
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] server lang: <none>
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] kex follows: False
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] Compression: none
2025-11-17T15:12:13.439 [DEBUG] [Thread-56491] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:12:13.495 [DEBUG] [Thread-56491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:12:13.495 [DEBUG] [Thread-56491] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:12:13.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:12:13.495 [DEBUG] [Thread-56491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:12:13.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:12:13.551 [DEBUG] [Thread-56491] [transport.py] [_log()] userauth is OK
2025-11-17T15:12:13.551 [DEBUG] [Thread-56491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:12:13.551 [DEBUG] [Thread-56491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:12:13.551 [DEBUG] [Thread-56491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:12:13.551 [DEBUG] [Thread-56491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:12:13.569 [INFO] [Thread-56491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:12:13.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:12:13.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:12:14.430 [DEBUG] [Thread-56491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:12:14.430 [DEBUG] [Thread-56491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:12:14.478 [DEBUG] [Thread-56491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:12:14.478 [DEBUG] [Thread-56491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:12:14.487 [DEBUG] [Thread-56491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:12:14.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:12:14.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:12:14.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:12:14.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:12:14.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:12:14.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:12:14.518 [DEBUG] [Thread-56491] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:12:17.213 [DEBUG] [Thread-56493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:12:18.007 [DEBUG] [Thread-56494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:12:32.243 [DEBUG] [Thread-56495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:12:44.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:12:44.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:12:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:12:45.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 12, 23), 26.65, 16.46, 0.0, 15.9, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:12:45.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:12:23
2025-11-17T15:12:45.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:12:45.463 [DEBUG] [Thread-56496] [transport.py] [_log()] starting thread (client mode): 0xd31b2b60
2025-11-17T15:12:45.464 [DEBUG] [Thread-56496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:12:45.483 [DEBUG] [Thread-56496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:12:45.483 [INFO] [Thread-56496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:12:45.486 [DEBUG] [Thread-56496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:12:45.486 [DEBUG] [Thread-56496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:12:45.486 [DEBUG] [Thread-56496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:12:45.486 [DEBUG] [Thread-56496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:12:45.486 [DEBUG] [Thread-56496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:12:45.486 [DEBUG] [Thread-56496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] client lang: <none>
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] server lang: <none>
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] kex follows: False
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] Compression: none
2025-11-17T15:12:45.487 [DEBUG] [Thread-56496] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:12:45.503 [DEBUG] [Thread-56496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:12:45.504 [DEBUG] [Thread-56496] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:12:45.504 [DEBUG] [Thread-56496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:12:45.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:12:45.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:12:45.506 [DEBUG] [Thread-56496] [transport.py] [_log()] userauth is OK
2025-11-17T15:12:45.507 [DEBUG] [Thread-56496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:12:45.507 [DEBUG] [Thread-56496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:12:45.507 [DEBUG] [Thread-56496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:12:45.507 [DEBUG] [Thread-56496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:12:45.531 [INFO] [Thread-56496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:12:45.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:12:46.164 [DEBUG] [Thread-56496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:12:46.164 [DEBUG] [Thread-56496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:12:46.164 [DEBUG] [Thread-56496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:12:46.206 [DEBUG] [Thread-56496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:12:46.206 [DEBUG] [Thread-56496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:12:46.209 [DEBUG] [Thread-56496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:12:46.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:12:46.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:12:46.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:12:46.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:12:46.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:12:46.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:12:46.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:12:46.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:12:46.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:12:46.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.550047 -999.00  +22.50  20.94     22   +0.10 1 2 1 1 1   888    0 19.28 -145.77 ----- 20.9 20.9 307.8 27.2 26.8 -20.1 26.4 -18.8 26.6 -16.9 27.2 -17.0
2025-11-17T15:12:46.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:12:46.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:12:46.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.550047
2025-11-17T15:12:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:12:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:12:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:12:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:12:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:12:46.237 [DEBUG] [Thread-56496] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:12:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:12:23', tmtdew=26.65, humidity=16.46, cloud=0.0, wind=15.9, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:12:04.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:12:46.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:12:47.273 [DEBUG] [Thread-56499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:13:02.322 [DEBUG] [Thread-56500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:13:06.485 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:13:06.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:13:17.353 [DEBUG] [Thread-56501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:13:18.062 [DEBUG] [Thread-56502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:13:32.383 [DEBUG] [Thread-56503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:13:47.414 [DEBUG] [Thread-56504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:14:02.442 [DEBUG] [Thread-56505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:14:06.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:14:06.631 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:14:17.475 [DEBUG] [Thread-56506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:14:18.115 [DEBUG] [Thread-56507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:14:32.506 [DEBUG] [Thread-56508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:14:47.535 [DEBUG] [Thread-56509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:14:59.643 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T15:15:02.562 [DEBUG] [Thread-56510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:15:06.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:15:06.774 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:15:17.588 [DEBUG] [Thread-56511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:15:18.168 [DEBUG] [Thread-56512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:15:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:15:29.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:15:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:15:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 15, 3), 27.47, 15.63, 0.0, 13.34, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:15:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:15:03
2025-11-17T15:15:30.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:15:30.609 [DEBUG] [Thread-56513] [transport.py] [_log()] starting thread (client mode): 0xd078e110
2025-11-17T15:15:30.609 [DEBUG] [Thread-56513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:15:30.623 [DEBUG] [Thread-56513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:15:30.623 [INFO] [Thread-56513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] client lang: <none>
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] server lang: <none>
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] kex follows: False
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] Compression: none
2025-11-17T15:15:30.625 [DEBUG] [Thread-56513] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:15:30.633 [DEBUG] [Thread-56513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:15:30.633 [DEBUG] [Thread-56513] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:15:30.633 [DEBUG] [Thread-56513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:15:30.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:15:30.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:15:30.634 [DEBUG] [Thread-56513] [transport.py] [_log()] userauth is OK
2025-11-17T15:15:30.635 [DEBUG] [Thread-56513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:15:30.635 [DEBUG] [Thread-56513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:15:30.635 [DEBUG] [Thread-56513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:15:30.635 [DEBUG] [Thread-56513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:15:30.649 [INFO] [Thread-56513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:15:30.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:15:31.461 [DEBUG] [Thread-56513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:15:31.461 [DEBUG] [Thread-56513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:15:31.461 [DEBUG] [Thread-56513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:15:31.501 [DEBUG] [Thread-56513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:15:31.501 [DEBUG] [Thread-56513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:15:31.504 [DEBUG] [Thread-56513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:15:31.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:15:31.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:15:31.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:15:31.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:15:31.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:15:31.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:15:31.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:15:31.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:15:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:15:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.551783 -999.00  +22.90  14.71     22   +0.20 1 2 1 1 1   888    0 19.16 -130.10 ----- 14.7 14.7 279.7 20.8 28.0 -20.0 27.6 -18.3 28.0 -16.5 28.9 -17.7
2025-11-17T15:15:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:15:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:15:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.551783
2025-11-17T15:15:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:15:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:15:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:15:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:15:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:15:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:15:03', tmtdew=27.47, humidity=15.63, cloud=0.0, wind=13.34, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:14:34.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:15:31.528 [DEBUG] [Thread-56513] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:15:31.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:15:31.625 [DEBUG] [Thread-56516] [transport.py] [_log()] starting thread (client mode): 0xd0718040
2025-11-17T15:15:31.625 [DEBUG] [Thread-56516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:15:31.640 [DEBUG] [Thread-56516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:15:31.640 [INFO] [Thread-56516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:15:31.647 [DEBUG] [Thread-56516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] client lang: <none>
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] server lang: <none>
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] kex follows: False
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:15:31.648 [DEBUG] [Thread-56516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:15:31.649 [DEBUG] [Thread-56516] [transport.py] [_log()] Compression: none
2025-11-17T15:15:31.649 [DEBUG] [Thread-56516] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:15:31.707 [DEBUG] [Thread-56516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:15:31.707 [DEBUG] [Thread-56516] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:15:31.708 [DEBUG] [Thread-56516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:15:31.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:15:31.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:15:31.764 [DEBUG] [Thread-56516] [transport.py] [_log()] userauth is OK
2025-11-17T15:15:31.764 [DEBUG] [Thread-56516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:15:31.764 [DEBUG] [Thread-56516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:15:31.764 [DEBUG] [Thread-56516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:15:31.764 [DEBUG] [Thread-56516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:15:31.784 [INFO] [Thread-56516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:15:31.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:15:31.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:15:32.614 [DEBUG] [Thread-56516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:15:32.614 [DEBUG] [Thread-56516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:15:32.619 [DEBUG] [Thread-56518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:15:32.662 [DEBUG] [Thread-56516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:15:32.663 [DEBUG] [Thread-56516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:15:32.671 [DEBUG] [Thread-56516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:15:32.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:15:32.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:15:32.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:15:32.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:15:32.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:15:32.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:15:32.710 [DEBUG] [Thread-56516] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:15:47.658 [DEBUG] [Thread-56519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:16:02.687 [DEBUG] [Thread-56520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:16:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:16:02.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:16: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
2025-11-17T15:16:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 15, 35), 26.95, 16.23, 0.0, 13.48, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:16:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:15:35
2025-11-17T15:16:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:16:03.729 [DEBUG] [Thread-56521] [transport.py] [_log()] starting thread (client mode): 0xd31ec7c0
2025-11-17T15:16:03.729 [DEBUG] [Thread-56521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:16:03.741 [DEBUG] [Thread-56521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:16:03.741 [INFO] [Thread-56521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] client lang: <none>
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] server lang: <none>
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] kex follows: False
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:16:03.744 [DEBUG] [Thread-56521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:16:03.745 [DEBUG] [Thread-56521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:16:03.745 [DEBUG] [Thread-56521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:16:03.745 [DEBUG] [Thread-56521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:16:03.745 [DEBUG] [Thread-56521] [transport.py] [_log()] Compression: none
2025-11-17T15:16:03.745 [DEBUG] [Thread-56521] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:16:03.759 [DEBUG] [Thread-56521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:16:03.760 [DEBUG] [Thread-56521] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:16:03.760 [DEBUG] [Thread-56521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:16:03.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:16:03.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:16:03.760 [DEBUG] [Thread-56521] [transport.py] [_log()] userauth is OK
2025-11-17T15:16:03.760 [DEBUG] [Thread-56521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:16:03.760 [DEBUG] [Thread-56521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:16:03.760 [DEBUG] [Thread-56521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:16:03.760 [DEBUG] [Thread-56521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:16:03.769 [INFO] [Thread-56521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:16:03.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:16:04.391 [DEBUG] [Thread-56521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:16:04.391 [DEBUG] [Thread-56521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:16:04.391 [DEBUG] [Thread-56521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:16:04.432 [DEBUG] [Thread-56521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:16:04.432 [DEBUG] [Thread-56521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:16:04.434 [DEBUG] [Thread-56521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:16:04.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:16:04.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:16:04.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:16:04.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:16:04.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:16:04.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:16:04.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.552477 -999.00  +23.50  15.47     21   +0.20 1 2 1 1 1   888    0 19.58 -122.65 ----- 15.5 15.5 292.2 21.5 28.4 -21.0 28.0 -20.0 28.7 -17.5 29.4 -18.7
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.552477
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:16:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:15:35', tmtdew=26.95, humidity=16.23, cloud=0.0, wind=13.48, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:15:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:16:04.451 [DEBUG] [Thread-56521] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:16:04.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:16:04.539 [DEBUG] [Thread-56524] [transport.py] [_log()] starting thread (client mode): 0xd0775c90
2025-11-17T15:16:04.540 [DEBUG] [Thread-56524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:16:04.554 [DEBUG] [Thread-56524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:16:04.554 [INFO] [Thread-56524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] client lang: <none>
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] server lang: <none>
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] kex follows: False
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] Compression: none
2025-11-17T15:16:04.562 [DEBUG] [Thread-56524] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:16:04.618 [DEBUG] [Thread-56524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:16:04.618 [DEBUG] [Thread-56524] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:16:04.618 [DEBUG] [Thread-56524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:16:04.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:16:04.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:16:04.675 [DEBUG] [Thread-56524] [transport.py] [_log()] userauth is OK
2025-11-17T15:16:04.675 [DEBUG] [Thread-56524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:16:04.675 [DEBUG] [Thread-56524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:16:04.675 [DEBUG] [Thread-56524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:16:04.675 [DEBUG] [Thread-56524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:16:04.689 [INFO] [Thread-56524] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:16:04.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:16:04.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:16:05.562 [DEBUG] [Thread-56524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:16:05.562 [DEBUG] [Thread-56524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:16:05.610 [DEBUG] [Thread-56524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:16:05.610 [DEBUG] [Thread-56524] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:16:05.618 [DEBUG] [Thread-56524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:16:05.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:16:05.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:16:05.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:16:05.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:16:05.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:16:05.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:16:05.649 [DEBUG] [Thread-56524] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:16:06.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:16:06.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:16:17.713 [DEBUG] [Thread-56526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:16:18.210 [DEBUG] [Thread-56527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:16:32.753 [DEBUG] [Thread-56528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:16:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:16:35.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:16:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:16:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 16, 7), 26.92, 16.23, 0.0, 12.3, 22.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:16:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:16:07
2025-11-17T15:16:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:16:36.610 [DEBUG] [Thread-56529] [transport.py] [_log()] starting thread (client mode): 0xd31cda50
2025-11-17T15:16:36.610 [DEBUG] [Thread-56529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:16:36.631 [DEBUG] [Thread-56529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:16:36.631 [INFO] [Thread-56529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:16:36.634 [DEBUG] [Thread-56529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:16:36.634 [DEBUG] [Thread-56529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:16:36.634 [DEBUG] [Thread-56529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:16:36.634 [DEBUG] [Thread-56529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:16:36.634 [DEBUG] [Thread-56529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:16:36.634 [DEBUG] [Thread-56529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] client lang: <none>
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] server lang: <none>
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] kex follows: False
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] Compression: none
2025-11-17T15:16:36.635 [DEBUG] [Thread-56529] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:16:36.650 [DEBUG] [Thread-56529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:16:36.651 [DEBUG] [Thread-56529] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:16:36.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:16:36.652 [DEBUG] [Thread-56529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:16:36.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:16:36.654 [DEBUG] [Thread-56529] [transport.py] [_log()] userauth is OK
2025-11-17T15:16:36.654 [DEBUG] [Thread-56529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:16:36.654 [DEBUG] [Thread-56529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:16:36.654 [DEBUG] [Thread-56529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:16:36.654 [DEBUG] [Thread-56529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:16:36.672 [INFO] [Thread-56529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:16:36.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:16:37.439 [DEBUG] [Thread-56529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:16:37.439 [DEBUG] [Thread-56529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:16:37.440 [DEBUG] [Thread-56529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:16:37.480 [DEBUG] [Thread-56529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:16:37.481 [DEBUG] [Thread-56529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:16:37.483 [DEBUG] [Thread-56529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:16:37.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:16:37.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:16:37.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:16:37.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:16:37.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:16:37.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:16:37.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:16:37.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:16:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:16:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.552824 -999.00  +23.10  11.03     21   +0.00 1 2 1 1 1   888    0 19.53 -117.21 ----- 11.0 11.0 301.4 17.2 28.6 -20.3 28.1 -19.4 28.8 -20.2 29.7 -18.3
2025-11-17T15:16:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:16:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:16:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.552824
2025-11-17T15:16:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:16:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:16:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:16:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:16:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:16:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:16:07', tmtdew=26.92, humidity=16.23, cloud=0.0, wind=12.3, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:16:03.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:16:37.510 [DEBUG] [Thread-56529] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:16:37.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:16:37.603 [DEBUG] [Thread-56532] [transport.py] [_log()] starting thread (client mode): 0xd07be6e0
2025-11-17T15:16:37.603 [DEBUG] [Thread-56532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:16:37.623 [DEBUG] [Thread-56532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:16:37.623 [INFO] [Thread-56532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:16:37.630 [DEBUG] [Thread-56532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:16:37.631 [DEBUG] [Thread-56532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:16:37.631 [DEBUG] [Thread-56532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:16:37.631 [DEBUG] [Thread-56532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:16:37.631 [DEBUG] [Thread-56532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:16:37.631 [DEBUG] [Thread-56532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:16:37.631 [DEBUG] [Thread-56532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:16:37.631 [DEBUG] [Thread-56532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:16:37.631 [DEBUG] [Thread-56532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] client lang: <none>
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] server lang: <none>
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] kex follows: False
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:16:37.632 [DEBUG] [Thread-56532] [transport.py] [_log()] Compression: none
2025-11-17T15:16:37.633 [DEBUG] [Thread-56532] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:16:37.689 [DEBUG] [Thread-56532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:16:37.689 [DEBUG] [Thread-56532] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:16:37.690 [DEBUG] [Thread-56532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:16:37.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:16:37.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:16:37.748 [DEBUG] [Thread-56532] [transport.py] [_log()] userauth is OK
2025-11-17T15:16:37.748 [DEBUG] [Thread-56532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:16:37.748 [DEBUG] [Thread-56532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:16:37.748 [DEBUG] [Thread-56532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:16:37.748 [DEBUG] [Thread-56532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:16:37.768 [INFO] [Thread-56532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:16:37.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:16:37.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:16:38.600 [DEBUG] [Thread-56532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:16:38.601 [DEBUG] [Thread-56532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:16:38.648 [DEBUG] [Thread-56532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:16:38.648 [DEBUG] [Thread-56532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:16:38.658 [DEBUG] [Thread-56532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:16:38.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:16:38.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:16: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
2025-11-17T15:16:38.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:16:38.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:16:38.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:16:38.692 [DEBUG] [Thread-56532] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:16:47.790 [DEBUG] [Thread-56534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:17:02.841 [DEBUG] [Thread-56535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:17:07.056 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:17:07.057 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:17:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:17:08.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:17:08.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:17:09.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 16, 39), 27.12, 15.84, 0.0, 12.88, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:17:09.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:16:39
2025-11-17T15:17:09.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:17:09.639 [DEBUG] [Thread-56536] [transport.py] [_log()] starting thread (client mode): 0xd07bc460
2025-11-17T15:17:09.639 [DEBUG] [Thread-56536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:17:09.660 [DEBUG] [Thread-56536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:17:09.660 [INFO] [Thread-56536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] client lang: <none>
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] server lang: <none>
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] kex follows: False
2025-11-17T15:17:09.663 [DEBUG] [Thread-56536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:17:09.664 [DEBUG] [Thread-56536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:17:09.664 [DEBUG] [Thread-56536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:17:09.664 [DEBUG] [Thread-56536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:17:09.664 [DEBUG] [Thread-56536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:17:09.664 [DEBUG] [Thread-56536] [transport.py] [_log()] Compression: none
2025-11-17T15:17:09.664 [DEBUG] [Thread-56536] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:17:09.682 [DEBUG] [Thread-56536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:17:09.682 [DEBUG] [Thread-56536] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:17:09.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:17:09.683 [DEBUG] [Thread-56536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:17:09.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:17:09.685 [DEBUG] [Thread-56536] [transport.py] [_log()] userauth is OK
2025-11-17T15:17:09.685 [DEBUG] [Thread-56536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:17:09.685 [DEBUG] [Thread-56536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:17:09.686 [DEBUG] [Thread-56536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:17:09.686 [DEBUG] [Thread-56536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:17:09.709 [INFO] [Thread-56536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:17:09.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:17:10.351 [DEBUG] [Thread-56536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:17:10.352 [DEBUG] [Thread-56536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:17:10.352 [DEBUG] [Thread-56536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:17:10.392 [DEBUG] [Thread-56536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:17:10.393 [DEBUG] [Thread-56536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:17:10.395 [DEBUG] [Thread-56536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:17:10.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:17:10.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:17:10.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:17:10.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:17:10.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:17:10.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:17:10.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:17:10.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:17:10.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:17:10.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.553172 -999.00  +23.50  14.56     21   +0.40 1 2 1 1 1   888    0 19.83 -101.23 ----- 14.6 14.6 277.2 17.6 28.8 -20.8 28.4 -19.2 29.1 -17.5 29.9 -18.7
2025-11-17T15:17:10.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:17:10.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:17:10.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.553172
2025-11-17T15:17:10.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:17:10.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:17:10.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:17:10.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:17:10.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:17:10.417 [DEBUG] [Thread-56536] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:17:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:16:39', tmtdew=27.12, humidity=15.84, cloud=0.0, wind=12.88, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:16:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:17:10.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:17:10.512 [DEBUG] [Thread-56539] [transport.py] [_log()] starting thread (client mode): 0xd31ce5f0
2025-11-17T15:17:10.512 [DEBUG] [Thread-56539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:17:10.527 [DEBUG] [Thread-56539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:17:10.527 [INFO] [Thread-56539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:17:10.534 [DEBUG] [Thread-56539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:17:10.534 [DEBUG] [Thread-56539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] client lang: <none>
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] server lang: <none>
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] kex follows: False
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] Compression: none
2025-11-17T15:17:10.535 [DEBUG] [Thread-56539] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:17:10.591 [DEBUG] [Thread-56539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:17:10.592 [DEBUG] [Thread-56539] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:17:10.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:17:10.593 [DEBUG] [Thread-56539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:17:10.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:17:10.652 [DEBUG] [Thread-56539] [transport.py] [_log()] userauth is OK
2025-11-17T15:17:10.652 [DEBUG] [Thread-56539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:17:10.652 [DEBUG] [Thread-56539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:17:10.652 [DEBUG] [Thread-56539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:17:10.652 [DEBUG] [Thread-56539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:17:10.672 [INFO] [Thread-56539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:17:10.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:17:10.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:17:11.518 [DEBUG] [Thread-56539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:17:11.518 [DEBUG] [Thread-56539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:17:11.566 [DEBUG] [Thread-56539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:17:11.566 [DEBUG] [Thread-56539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:17:11.574 [DEBUG] [Thread-56539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:17:11.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:17:11.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:17:11.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:17:11.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:17:11.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:17:11.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:17:11.606 [DEBUG] [Thread-56539] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:17:17.872 [DEBUG] [Thread-56541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:17:18.263 [DEBUG] [Thread-56542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:17:32.913 [DEBUG] [Thread-56543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:17:41.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:17:41.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:17:41.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:17:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 17, 11), 27.03, 15.96, 0.0, 13.66, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:17:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:17:11
2025-11-17T15:17:42.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:17:42.566 [DEBUG] [Thread-56544] [transport.py] [_log()] starting thread (client mode): 0xd3162d40
2025-11-17T15:17:42.566 [DEBUG] [Thread-56544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:17:42.586 [DEBUG] [Thread-56544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:17:42.586 [INFO] [Thread-56544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:17:42.589 [DEBUG] [Thread-56544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:17:42.589 [DEBUG] [Thread-56544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:17:42.589 [DEBUG] [Thread-56544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:17:42.589 [DEBUG] [Thread-56544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:17:42.589 [DEBUG] [Thread-56544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] client lang: <none>
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] server lang: <none>
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] kex follows: False
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] Compression: none
2025-11-17T15:17:42.590 [DEBUG] [Thread-56544] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:17:42.607 [DEBUG] [Thread-56544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:17:42.608 [DEBUG] [Thread-56544] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:17:42.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:17:42.609 [DEBUG] [Thread-56544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:17:42.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:17:42.611 [DEBUG] [Thread-56544] [transport.py] [_log()] userauth is OK
2025-11-17T15:17:42.611 [DEBUG] [Thread-56544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:17:42.611 [DEBUG] [Thread-56544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:17:42.611 [DEBUG] [Thread-56544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:17:42.611 [DEBUG] [Thread-56544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:17:42.635 [INFO] [Thread-56544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:17:42.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:17:43.443 [DEBUG] [Thread-56544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:17:43.443 [DEBUG] [Thread-56544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:17:43.443 [DEBUG] [Thread-56544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:17:43.483 [DEBUG] [Thread-56544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:17:43.483 [DEBUG] [Thread-56544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:17:43.486 [DEBUG] [Thread-56544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:17:43.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:17:43.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:17:43.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:17:43.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:17:43.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:17:43.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:17:43.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:17:43.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:17:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:17:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.553519 -999.00  +23.80  16.22     21   +0.50 1 2 1 1 1   888    0 20.87 -91.34 ----- 16.2 16.2 282.6 18.2 28.9 -20.4 28.5 -19.6 29.1 -17.6 30.1 -18.7
2025-11-17T15:17:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:17:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:17:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.553519
2025-11-17T15:17:43.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:17:43.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:17:43.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:17:43.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:17:43.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:17:43.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:17:11', tmtdew=27.03, humidity=15.96, cloud=0.0, wind=13.66, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:17:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:17:43.509 [DEBUG] [Thread-56544] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:17:43.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:17:43.599 [DEBUG] [Thread-56547] [transport.py] [_log()] starting thread (client mode): 0xd0774190
2025-11-17T15:17:43.599 [DEBUG] [Thread-56547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:17:43.616 [DEBUG] [Thread-56547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:17:43.616 [INFO] [Thread-56547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] client lang: <none>
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] server lang: <none>
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] kex follows: False
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] Compression: none
2025-11-17T15:17:43.624 [DEBUG] [Thread-56547] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:17:43.683 [DEBUG] [Thread-56547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:17:43.683 [DEBUG] [Thread-56547] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:17:43.683 [DEBUG] [Thread-56547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:17:43.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:17:43.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:17:43.743 [DEBUG] [Thread-56547] [transport.py] [_log()] userauth is OK
2025-11-17T15:17:43.743 [DEBUG] [Thread-56547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:17:43.743 [DEBUG] [Thread-56547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:17:43.744 [DEBUG] [Thread-56547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:17:43.744 [DEBUG] [Thread-56547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:17:43.758 [INFO] [Thread-56547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:17:43.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:17:43.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:17:44.590 [DEBUG] [Thread-56547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:17:44.590 [DEBUG] [Thread-56547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:17:44.638 [DEBUG] [Thread-56547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:17:44.638 [DEBUG] [Thread-56547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:17:44.646 [DEBUG] [Thread-56547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:17:44.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:17:44.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:17:44.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:17:44.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:17:44.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:17:44.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:17:44.677 [DEBUG] [Thread-56547] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:17:47.944 [DEBUG] [Thread-56549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:18:02.982 [DEBUG] [Thread-56550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:18:07.198 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:18:07.199 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:18:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:18:14.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:18:14.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:18:15.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 17, 43), 27.25, 15.78, 0.0, 18.88, 23.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:18:15.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:17:43
2025-11-17T15:18:15.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:18:15.609 [DEBUG] [Thread-56551] [transport.py] [_log()] starting thread (client mode): 0xd31cda80
2025-11-17T15:18:15.609 [DEBUG] [Thread-56551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:18:15.631 [DEBUG] [Thread-56551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:18:15.631 [INFO] [Thread-56551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:18:15.634 [DEBUG] [Thread-56551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] client lang: <none>
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] server lang: <none>
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] kex follows: False
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] Compression: none
2025-11-17T15:18:15.635 [DEBUG] [Thread-56551] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:18:15.649 [DEBUG] [Thread-56551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:18:15.649 [DEBUG] [Thread-56551] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:18:15.649 [DEBUG] [Thread-56551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:18:15.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:18:15.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:18:15.650 [DEBUG] [Thread-56551] [transport.py] [_log()] userauth is OK
2025-11-17T15:18:15.650 [DEBUG] [Thread-56551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:18:15.650 [DEBUG] [Thread-56551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:18:15.650 [DEBUG] [Thread-56551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:18:15.650 [DEBUG] [Thread-56551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:18:15.667 [INFO] [Thread-56551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:18:15.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:18:16.295 [DEBUG] [Thread-56551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:18:16.295 [DEBUG] [Thread-56551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:18:16.296 [DEBUG] [Thread-56551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:18:16.336 [DEBUG] [Thread-56551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:18:16.336 [DEBUG] [Thread-56551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:18:16.338 [DEBUG] [Thread-56551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:18:16.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:18:16.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:18:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:18:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:18:16.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:18:16.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:18:16.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.553866 -999.00  +23.50  15.88     21   +0.00 1 2 1 1 1   888    0 20.19 -76.26 ----- 15.9 15.9 267.1 27.3 28.8 -22.5 28.5 -21.1 29.1 -19.6 30.0 -20.1
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.553866
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:18:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:17:43', tmtdew=27.25, humidity=15.78, cloud=0.0, wind=18.88, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:17:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:18:16.355 [DEBUG] [Thread-56551] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:18:16.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:18:16.442 [DEBUG] [Thread-56554] [transport.py] [_log()] starting thread (client mode): 0xd0775a20
2025-11-17T15:18:16.442 [DEBUG] [Thread-56554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:18:16.460 [DEBUG] [Thread-56554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:18:16.460 [INFO] [Thread-56554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:18:16.467 [DEBUG] [Thread-56554] [transport.py] [_log()] client lang: <none>
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] server lang: <none>
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] kex follows: False
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] Compression: none
2025-11-17T15:18:16.468 [DEBUG] [Thread-56554] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:18:16.522 [DEBUG] [Thread-56554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:18:16.522 [DEBUG] [Thread-56554] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:18:16.523 [DEBUG] [Thread-56554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:18:16.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:18:16.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:18:16.579 [DEBUG] [Thread-56554] [transport.py] [_log()] userauth is OK
2025-11-17T15:18:16.579 [DEBUG] [Thread-56554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:18:16.580 [DEBUG] [Thread-56554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:18:16.580 [DEBUG] [Thread-56554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:18:16.580 [DEBUG] [Thread-56554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:18:16.594 [INFO] [Thread-56554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:18:16.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:18:16.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:18:17.458 [DEBUG] [Thread-56554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:18:17.458 [DEBUG] [Thread-56554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:18:17.505 [DEBUG] [Thread-56554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:18:17.505 [DEBUG] [Thread-56554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:18:17.515 [DEBUG] [Thread-56554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:18:17.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:18:17.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:18:17.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:18:17.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:18:17.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:18:17.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:18:17.549 [DEBUG] [Thread-56554] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:18:18.009 [DEBUG] [Thread-56556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:18:18.325 [DEBUG] [Thread-56557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:18:33.053 [DEBUG] [Thread-56558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:18:47.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:18:47.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:18:47.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:18:48.082 [DEBUG] [Thread-56559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:18:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 18, 15), 27.14, 15.91, 0.0, 21.7, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:18:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:18:15
2025-11-17T15:18:48.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:18:48.558 [DEBUG] [Thread-56560] [transport.py] [_log()] starting thread (client mode): 0xd31b13f0
2025-11-17T15:18:48.558 [DEBUG] [Thread-56560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:18:48.578 [DEBUG] [Thread-56560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:18:48.578 [INFO] [Thread-56560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] client lang: <none>
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] server lang: <none>
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] kex follows: False
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] Compression: none
2025-11-17T15:18:48.581 [DEBUG] [Thread-56560] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:18:48.596 [DEBUG] [Thread-56560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:18:48.596 [DEBUG] [Thread-56560] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:18:48.597 [DEBUG] [Thread-56560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:18:48.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:18:48.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:18:48.597 [DEBUG] [Thread-56560] [transport.py] [_log()] userauth is OK
2025-11-17T15:18:48.597 [DEBUG] [Thread-56560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:18:48.597 [DEBUG] [Thread-56560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:18:48.597 [DEBUG] [Thread-56560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:18:48.597 [DEBUG] [Thread-56560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:18:48.610 [INFO] [Thread-56560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:18:48.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:18:49.408 [DEBUG] [Thread-56560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:18:49.409 [DEBUG] [Thread-56560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:18:49.409 [DEBUG] [Thread-56560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:18:49.449 [DEBUG] [Thread-56560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:18:49.449 [DEBUG] [Thread-56560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:18:49.451 [DEBUG] [Thread-56560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:18:49.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:18:49.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:18:49.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:18:49.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:18:49.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:18:49.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:18:49.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:18:49.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:18:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:18:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.554213 -999.00  +23.50  21.88     21   +0.30 1 2 1 1 1   888    0 20.63 -74.99 ----- 21.9 21.9 294.8 27.1 29.0 -20.5 28.6 -20.8 29.0 -18.6 30.1 -19.3
2025-11-17T15:18:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:18:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:18:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.554213
2025-11-17T15:18:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:18:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:18:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:18:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:18:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:18:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:18:15', tmtdew=27.14, humidity=15.91, cloud=0.0, wind=21.7, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:18:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:18:49.470 [DEBUG] [Thread-56560] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:18:49.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:18:49.564 [DEBUG] [Thread-56563] [transport.py] [_log()] starting thread (client mode): 0xd3136c20
2025-11-17T15:18:49.565 [DEBUG] [Thread-56563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:18:49.580 [DEBUG] [Thread-56563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:18:49.580 [INFO] [Thread-56563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:18:49.587 [DEBUG] [Thread-56563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] client lang: <none>
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] server lang: <none>
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] kex follows: False
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] Compression: none
2025-11-17T15:18:49.588 [DEBUG] [Thread-56563] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:18:49.648 [DEBUG] [Thread-56563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:18:49.648 [DEBUG] [Thread-56563] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:18:49.648 [DEBUG] [Thread-56563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:18:49.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:18:49.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:18:49.708 [DEBUG] [Thread-56563] [transport.py] [_log()] userauth is OK
2025-11-17T15:18:49.708 [DEBUG] [Thread-56563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:18:49.708 [DEBUG] [Thread-56563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:18:49.708 [DEBUG] [Thread-56563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:18:49.708 [DEBUG] [Thread-56563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:18:49.728 [INFO] [Thread-56563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:18:49.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:18:49.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:18:50.627 [DEBUG] [Thread-56563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:18:50.627 [DEBUG] [Thread-56563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:18:50.674 [DEBUG] [Thread-56563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:18:50.674 [DEBUG] [Thread-56563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:18:50.683 [DEBUG] [Thread-56563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:18:50.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:18:50.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:18:50.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:18:50.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:18:50.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:18:50.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:18:50.717 [DEBUG] [Thread-56563] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:19:03.105 [DEBUG] [Thread-56565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:19:07.338 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:19:07.340 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:19:18.140 [DEBUG] [Thread-56566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:19:18.366 [DEBUG] [Thread-56567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:19:20.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:19:20.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:19:20.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:19:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 18, 47), 27.06, 16.39, 0.0, 24.44, 23.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:19:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:18:47
2025-11-17T15:19:21.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:19:21.730 [DEBUG] [Thread-56568] [transport.py] [_log()] starting thread (client mode): 0xd0775c90
2025-11-17T15:19:21.730 [DEBUG] [Thread-56568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:19:21.751 [DEBUG] [Thread-56568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:19:21.752 [INFO] [Thread-56568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:19:21.755 [DEBUG] [Thread-56568] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:19:21.755 [DEBUG] [Thread-56568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] client lang: <none>
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] server lang: <none>
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] kex follows: False
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] Compression: none
2025-11-17T15:19:21.756 [DEBUG] [Thread-56568] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:19:21.773 [DEBUG] [Thread-56568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:19:21.773 [DEBUG] [Thread-56568] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:19:21.774 [DEBUG] [Thread-56568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:19:21.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:19:21.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:19:21.776 [DEBUG] [Thread-56568] [transport.py] [_log()] userauth is OK
2025-11-17T15:19:21.776 [DEBUG] [Thread-56568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:19:21.776 [DEBUG] [Thread-56568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:19:21.776 [DEBUG] [Thread-56568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:19:21.776 [DEBUG] [Thread-56568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:19:21.799 [INFO] [Thread-56568] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:19:21.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:19:22.404 [DEBUG] [Thread-56568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:19:22.404 [DEBUG] [Thread-56568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:19:22.405 [DEBUG] [Thread-56568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:19:22.445 [DEBUG] [Thread-56568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:19:22.445 [DEBUG] [Thread-56568] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:19:22.448 [DEBUG] [Thread-56568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:19:22.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:19:22.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:19:22.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:19:22.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:19:22.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:19:22.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:19:22.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:19:22.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:19:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:19:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.554561 -999.00  +23.50  21.92     21   +0.10 1 2 1 1 1   888    0 21.32 -63.11 ----- 21.9 21.9 283.0 30.8 29.0 -23.6 28.7 -22.0 29.4 -21.9 30.1 -20.8
2025-11-17T15:19:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:19:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:19:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.554561
2025-11-17T15:19:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:19:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:19:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:19:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:19:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:19:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:18:47', tmtdew=27.06, humidity=16.39, cloud=0.0, wind=24.44, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:18:34.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:19:22.473 [DEBUG] [Thread-56568] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:19:22.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:19:22.569 [DEBUG] [Thread-56571] [transport.py] [_log()] starting thread (client mode): 0xd07bcfa0
2025-11-17T15:19:22.569 [DEBUG] [Thread-56571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:19:22.585 [DEBUG] [Thread-56571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:19:22.585 [INFO] [Thread-56571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:19:22.592 [DEBUG] [Thread-56571] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] client lang: <none>
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] server lang: <none>
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] kex follows: False
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] Compression: none
2025-11-17T15:19:22.593 [DEBUG] [Thread-56571] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:19:22.651 [DEBUG] [Thread-56571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:19:22.652 [DEBUG] [Thread-56571] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:19:22.652 [DEBUG] [Thread-56571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:19:22.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:19:22.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:19:22.708 [DEBUG] [Thread-56571] [transport.py] [_log()] userauth is OK
2025-11-17T15:19:22.708 [DEBUG] [Thread-56571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:19:22.709 [DEBUG] [Thread-56571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:19:22.709 [DEBUG] [Thread-56571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:19:22.709 [DEBUG] [Thread-56571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:19:22.728 [INFO] [Thread-56571] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:19:22.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:19:22.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:19:23.598 [DEBUG] [Thread-56571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:19:23.598 [DEBUG] [Thread-56571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:19:23.646 [DEBUG] [Thread-56571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:19:23.646 [DEBUG] [Thread-56571] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:19:23.655 [DEBUG] [Thread-56571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:19:23.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:19:23.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:19:23.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:19:23.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:19:23.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:19:23.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:19:23.689 [DEBUG] [Thread-56571] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:19:33.165 [DEBUG] [Thread-56573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:19:48.204 [DEBUG] [Thread-56574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:19:53.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:19:53.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:19:53.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:19:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 19, 51), 26.99, 16.11, 0.0, 18.05, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:19:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:19:51
2025-11-17T15:19:54.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:19:54.667 [DEBUG] [Thread-56575] [transport.py] [_log()] starting thread (client mode): 0xd0787f10
2025-11-17T15:19:54.668 [DEBUG] [Thread-56575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:19:54.687 [DEBUG] [Thread-56575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:19:54.687 [INFO] [Thread-56575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] client lang: <none>
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] server lang: <none>
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] kex follows: False
2025-11-17T15:19:54.690 [DEBUG] [Thread-56575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:19:54.691 [DEBUG] [Thread-56575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:19:54.691 [DEBUG] [Thread-56575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:19:54.691 [DEBUG] [Thread-56575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:19:54.691 [DEBUG] [Thread-56575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:19:54.691 [DEBUG] [Thread-56575] [transport.py] [_log()] Compression: none
2025-11-17T15:19:54.691 [DEBUG] [Thread-56575] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:19:54.706 [DEBUG] [Thread-56575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:19:54.706 [DEBUG] [Thread-56575] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:19:54.707 [DEBUG] [Thread-56575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:19:54.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:19:54.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:19:54.707 [DEBUG] [Thread-56575] [transport.py] [_log()] userauth is OK
2025-11-17T15:19:54.707 [DEBUG] [Thread-56575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:19:54.707 [DEBUG] [Thread-56575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:19:54.707 [DEBUG] [Thread-56575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:19:54.707 [DEBUG] [Thread-56575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:19:54.716 [INFO] [Thread-56575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:19:54.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:19:55.423 [DEBUG] [Thread-56575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:19:55.423 [DEBUG] [Thread-56575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:19:55.423 [DEBUG] [Thread-56575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:19:55.464 [DEBUG] [Thread-56575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:19:55.464 [DEBUG] [Thread-56575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:19:55.466 [DEBUG] [Thread-56575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:19:55.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:19:55.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:19:55.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:19:55.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:19:55.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:19:55.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:19:55.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:19:55.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:19:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:19:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.554908 -999.00  +23.20  17.41     21   +0.10 1 1 1 1 1   888    0 20.83 -58.22 ----- 17.4 17.4 271.2 27.1 28.9 -22.4 28.6 -20.6 28.8 -27.4 30.1 -20.7
2025-11-17T15:19:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:19:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:19:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.554908
2025-11-17T15:19:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:19:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:19:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:19:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:19:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:19:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:19:51', tmtdew=26.99, humidity=16.11, cloud=0.0, wind=18.05, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:19:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:19:55.483 [DEBUG] [Thread-56575] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:19:55.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:19:55.570 [DEBUG] [Thread-56578] [transport.py] [_log()] starting thread (client mode): 0xd07870d0
2025-11-17T15:19:55.570 [DEBUG] [Thread-56578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:19:55.585 [DEBUG] [Thread-56578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:19:55.585 [INFO] [Thread-56578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] client lang: <none>
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] server lang: <none>
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] kex follows: False
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] Compression: none
2025-11-17T15:19:55.593 [DEBUG] [Thread-56578] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:19:55.651 [DEBUG] [Thread-56578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:19:55.651 [DEBUG] [Thread-56578] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:19:55.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:19:55.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:19:55.652 [DEBUG] [Thread-56578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:19:55.708 [DEBUG] [Thread-56578] [transport.py] [_log()] userauth is OK
2025-11-17T15:19:55.708 [DEBUG] [Thread-56578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:19:55.708 [DEBUG] [Thread-56578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:19:55.708 [DEBUG] [Thread-56578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:19:55.708 [DEBUG] [Thread-56578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:19:55.726 [INFO] [Thread-56578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:19:55.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:19:55.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:19:56.590 [DEBUG] [Thread-56578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:19:56.590 [DEBUG] [Thread-56578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:19:56.638 [DEBUG] [Thread-56578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:19:56.638 [DEBUG] [Thread-56578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:19:56.646 [DEBUG] [Thread-56578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:19:56.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:19:56.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:19:56.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:19:56.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:19:56.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:19:56.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:19:56.677 [DEBUG] [Thread-56578] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:20:03.232 [DEBUG] [Thread-56580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:20:07.480 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:20:07.481 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:20:18.274 [DEBUG] [Thread-56581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:20:18.420 [DEBUG] [Thread-56582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:20:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:20:26.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:20: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
2025-11-17T15:20:27.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 20, 23), 27.06, 16.05, 0.0, 21.17, 23.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:20:27.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:20:23
2025-11-17T15:20:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:20:27.611 [DEBUG] [Thread-56583] [transport.py] [_log()] starting thread (client mode): 0xd078e050
2025-11-17T15:20:27.612 [DEBUG] [Thread-56583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:20:27.631 [DEBUG] [Thread-56583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:20:27.632 [INFO] [Thread-56583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:20:27.634 [DEBUG] [Thread-56583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:20:27.634 [DEBUG] [Thread-56583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] client lang: <none>
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] server lang: <none>
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] kex follows: False
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] Compression: none
2025-11-17T15:20:27.635 [DEBUG] [Thread-56583] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:20:27.651 [DEBUG] [Thread-56583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:20:27.652 [DEBUG] [Thread-56583] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:20:27.652 [DEBUG] [Thread-56583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:20:27.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:20:27.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:20:27.654 [DEBUG] [Thread-56583] [transport.py] [_log()] userauth is OK
2025-11-17T15:20:27.654 [DEBUG] [Thread-56583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:20:27.654 [DEBUG] [Thread-56583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:20:27.655 [DEBUG] [Thread-56583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:20:27.655 [DEBUG] [Thread-56583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:20:27.679 [INFO] [Thread-56583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:20:27.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:20:28.331 [DEBUG] [Thread-56583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:20:28.331 [DEBUG] [Thread-56583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:20:28.331 [DEBUG] [Thread-56583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:20:28.371 [DEBUG] [Thread-56583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:20:28.371 [DEBUG] [Thread-56583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:20:28.374 [DEBUG] [Thread-56583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:20:28.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:20:28.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:20:28.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:20:28.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:20:28.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:20:28.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:20:28.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:20:28.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:20:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:20:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.555255 -999.00  +22.80  11.89     22   +0.00 1 2 1 1 1   888    0 21.07 -50.84 ----- 11.9 11.9 261.6 16.7 29.1 -21.6 28.7 -20.1 28.9 -24.9 30.2 -20.3
2025-11-17T15:20:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:20:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:20:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.555255
2025-11-17T15:20:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:20:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:20:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:20:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:20:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:20:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:20:23', tmtdew=27.06, humidity=16.05, cloud=0.0, wind=21.17, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:19:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:20:28.400 [DEBUG] [Thread-56583] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:20:28.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:20:28.495 [DEBUG] [Thread-56586] [transport.py] [_log()] starting thread (client mode): 0xd07234f0
2025-11-17T15:20:28.495 [DEBUG] [Thread-56586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:20:28.510 [DEBUG] [Thread-56586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:20:28.510 [INFO] [Thread-56586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:20:28.518 [DEBUG] [Thread-56586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:20:28.518 [DEBUG] [Thread-56586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] client lang: <none>
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] server lang: <none>
2025-11-17T15:20:28.519 [DEBUG] [Thread-56586] [transport.py] [_log()] kex follows: False
2025-11-17T15:20:28.520 [DEBUG] [Thread-56586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:20:28.520 [DEBUG] [Thread-56586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:20:28.520 [DEBUG] [Thread-56586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:20:28.520 [DEBUG] [Thread-56586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:20:28.520 [DEBUG] [Thread-56586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:20:28.520 [DEBUG] [Thread-56586] [transport.py] [_log()] Compression: none
2025-11-17T15:20:28.520 [DEBUG] [Thread-56586] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:20:28.576 [DEBUG] [Thread-56586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:20:28.577 [DEBUG] [Thread-56586] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:20:28.578 [DEBUG] [Thread-56586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:20:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:20:28.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:20:28.636 [DEBUG] [Thread-56586] [transport.py] [_log()] userauth is OK
2025-11-17T15:20:28.636 [DEBUG] [Thread-56586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:20:28.636 [DEBUG] [Thread-56586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:20:28.636 [DEBUG] [Thread-56586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:20:28.636 [DEBUG] [Thread-56586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:20:28.667 [INFO] [Thread-56586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:20:28.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:20:28.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:20:29.514 [DEBUG] [Thread-56586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:20:29.514 [DEBUG] [Thread-56586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:20:29.566 [DEBUG] [Thread-56586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:20:29.566 [DEBUG] [Thread-56586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:20:29.575 [DEBUG] [Thread-56586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:20:29.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15: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')
2025-11-17T15:20:29.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:20:29.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:20:29.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:20:29.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:20:29.613 [DEBUG] [Thread-56586] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:20:33.301 [DEBUG] [Thread-56588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:20:48.333 [DEBUG] [Thread-56589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:20:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:20:59.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:20:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:21:00.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 20, 55), 27.45, 15.55, 0.0, 20.36, 23.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:21:00.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:20:55
2025-11-17T15:21:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:21:00.573 [DEBUG] [Thread-56590] [transport.py] [_log()] starting thread (client mode): 0xd070ff70
2025-11-17T15:21:00.573 [DEBUG] [Thread-56590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:21:00.594 [DEBUG] [Thread-56590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:21:00.594 [INFO] [Thread-56590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:21:00.597 [DEBUG] [Thread-56590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:21:00.597 [DEBUG] [Thread-56590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] client lang: <none>
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] server lang: <none>
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] kex follows: False
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:21:00.598 [DEBUG] [Thread-56590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:21:00.599 [DEBUG] [Thread-56590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:21:00.599 [DEBUG] [Thread-56590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:21:00.599 [DEBUG] [Thread-56590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:21:00.599 [DEBUG] [Thread-56590] [transport.py] [_log()] Compression: none
2025-11-17T15:21:00.599 [DEBUG] [Thread-56590] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:21:00.618 [DEBUG] [Thread-56590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:21:00.618 [DEBUG] [Thread-56590] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:21:00.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:21:00.619 [DEBUG] [Thread-56590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:21:00.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:21:00.622 [DEBUG] [Thread-56590] [transport.py] [_log()] userauth is OK
2025-11-17T15:21:00.622 [DEBUG] [Thread-56590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:21:00.622 [DEBUG] [Thread-56590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:21:00.622 [DEBUG] [Thread-56590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:21:00.622 [DEBUG] [Thread-56590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:21:00.646 [INFO] [Thread-56590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:21:00.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:21:01.406 [DEBUG] [Thread-56590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:21:01.407 [DEBUG] [Thread-56590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:21:01.407 [DEBUG] [Thread-56590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:21:01.447 [DEBUG] [Thread-56590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:21:01.447 [DEBUG] [Thread-56590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:21:01.450 [DEBUG] [Thread-56590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:21:01.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:21:01.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:21:01.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:21:01.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:21:01.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:21:01.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:21:01.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:21:01.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:21:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:21:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.555949 -999.00  +23.60  21.07     21   +0.40 1 2 1 1 1   888    0 21.84 -39.93 ----- 21.1 21.1 269.8 24.4 29.4 -21.4 29.0 -19.9 29.7 -18.2 30.4 -20.2
2025-11-17T15:21:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:21:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:21:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.555949
2025-11-17T15:21:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:21:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:21:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:21:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:21:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:21:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:20:55', tmtdew=27.45, humidity=15.55, cloud=0.0, wind=20.36, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:20:33.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:21:01.476 [DEBUG] [Thread-56590] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:21:01.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:21:01.572 [DEBUG] [Thread-56593] [transport.py] [_log()] starting thread (client mode): 0xd07cfd00
2025-11-17T15:21:01.572 [DEBUG] [Thread-56593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:21:01.586 [DEBUG] [Thread-56593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:21:01.587 [INFO] [Thread-56593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:21:01.594 [DEBUG] [Thread-56593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] client lang: <none>
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] server lang: <none>
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] kex follows: False
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] Compression: none
2025-11-17T15:21:01.595 [DEBUG] [Thread-56593] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:21:01.650 [DEBUG] [Thread-56593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:21:01.650 [DEBUG] [Thread-56593] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:21:01.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:21:01.650 [DEBUG] [Thread-56593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:21:01.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:21:01.707 [DEBUG] [Thread-56593] [transport.py] [_log()] userauth is OK
2025-11-17T15:21:01.707 [DEBUG] [Thread-56593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:21:01.707 [DEBUG] [Thread-56593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:21:01.707 [DEBUG] [Thread-56593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:21:01.707 [DEBUG] [Thread-56593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:21:01.721 [INFO] [Thread-56593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:21:01.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:21:01.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:21:02.647 [DEBUG] [Thread-56593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:21:02.647 [DEBUG] [Thread-56593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:21:02.695 [DEBUG] [Thread-56593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:21:02.695 [DEBUG] [Thread-56593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:21:02.704 [DEBUG] [Thread-56593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:21:02.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:21:02.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')
2025-11-17T15:21:02.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:21:02.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:21:02.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:21:02.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:21:02.739 [DEBUG] [Thread-56593] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:21:03.367 [DEBUG] [Thread-56595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:21:07.623 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:21:07.624 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:21:18.420 [DEBUG] [Thread-56596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:21:18.474 [DEBUG] [Thread-56597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:21:32.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:21:32.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:21:32.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:21:33.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 21, 27), 27.51, 15.5, 0.0, 22.55, 23.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:21:33.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:21:27
2025-11-17T15:21:33.454 [DEBUG] [Thread-56598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:21:33.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:21:33.691 [DEBUG] [Thread-56599] [transport.py] [_log()] starting thread (client mode): 0xd07cc070
2025-11-17T15:21:33.691 [DEBUG] [Thread-56599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:21:33.710 [DEBUG] [Thread-56599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:21:33.710 [INFO] [Thread-56599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] client lang: <none>
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] server lang: <none>
2025-11-17T15:21:33.714 [DEBUG] [Thread-56599] [transport.py] [_log()] kex follows: False
2025-11-17T15:21:33.715 [DEBUG] [Thread-56599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:21:33.715 [DEBUG] [Thread-56599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:21:33.715 [DEBUG] [Thread-56599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:21:33.715 [DEBUG] [Thread-56599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:21:33.715 [DEBUG] [Thread-56599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:21:33.715 [DEBUG] [Thread-56599] [transport.py] [_log()] Compression: none
2025-11-17T15:21:33.715 [DEBUG] [Thread-56599] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:21:33.735 [DEBUG] [Thread-56599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:21:33.736 [DEBUG] [Thread-56599] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:21:33.736 [DEBUG] [Thread-56599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:21:33.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:21:33.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:21:33.738 [DEBUG] [Thread-56599] [transport.py] [_log()] userauth is OK
2025-11-17T15:21:33.739 [DEBUG] [Thread-56599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:21:33.739 [DEBUG] [Thread-56599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:21:33.739 [DEBUG] [Thread-56599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:21:33.739 [DEBUG] [Thread-56599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:21:33.773 [INFO] [Thread-56599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:21:33.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:21:34.391 [DEBUG] [Thread-56599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:21:34.391 [DEBUG] [Thread-56599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:21:34.391 [DEBUG] [Thread-56599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:21:34.431 [DEBUG] [Thread-56599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:21:34.431 [DEBUG] [Thread-56599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:21:34.435 [DEBUG] [Thread-56599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:21:34.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:21:34.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:21:34.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:21:34.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:21:34.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:21:34.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:21:34.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:21:34.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:21:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:21:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.556297 -999.00  +23.60  25.95     21   +0.00 1 2 1 1 1   888    0 21.99 -34.04 ----- 25.9 25.9 267.2 31.9 29.3 -22.5 29.0 -22.4 29.6 -22.8 30.4 -21.1
2025-11-17T15:21:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:21:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:21:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.556297
2025-11-17T15:21:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:21:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:21:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:21:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:21:34.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:21:34.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:21:27', tmtdew=27.51, humidity=15.5, cloud=0.0, wind=22.55, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:21:04.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:21:34.461 [DEBUG] [Thread-56599] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:21:34.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:21:34.555 [DEBUG] [Thread-56602] [transport.py] [_log()] starting thread (client mode): 0xd31b3880
2025-11-17T15:21:34.555 [DEBUG] [Thread-56602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:21:34.570 [DEBUG] [Thread-56602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:21:34.570 [INFO] [Thread-56602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:21:34.579 [DEBUG] [Thread-56602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:21:34.579 [DEBUG] [Thread-56602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:21:34.579 [DEBUG] [Thread-56602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:21:34.579 [DEBUG] [Thread-56602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:21:34.579 [DEBUG] [Thread-56602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:21:34.579 [DEBUG] [Thread-56602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:21:34.579 [DEBUG] [Thread-56602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:21:34.579 [DEBUG] [Thread-56602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] client lang: <none>
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] server lang: <none>
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] kex follows: False
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:21:34.580 [DEBUG] [Thread-56602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:21:34.581 [DEBUG] [Thread-56602] [transport.py] [_log()] Compression: none
2025-11-17T15:21:34.581 [DEBUG] [Thread-56602] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:21:34.636 [DEBUG] [Thread-56602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:21:34.637 [DEBUG] [Thread-56602] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:21:34.637 [DEBUG] [Thread-56602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:21:34.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:21:34.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:21:34.696 [DEBUG] [Thread-56602] [transport.py] [_log()] userauth is OK
2025-11-17T15:21:34.696 [DEBUG] [Thread-56602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:21:34.696 [DEBUG] [Thread-56602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:21:34.696 [DEBUG] [Thread-56602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:21:34.696 [DEBUG] [Thread-56602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:21:34.716 [INFO] [Thread-56602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:21:34.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:21:34.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:21:35.556 [DEBUG] [Thread-56602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:21:35.556 [DEBUG] [Thread-56602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:21:35.604 [DEBUG] [Thread-56602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:21:35.604 [DEBUG] [Thread-56602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:21:35.613 [DEBUG] [Thread-56602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:21:35.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:21:35.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:21:35.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:21:35.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:21:35.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:21:35.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:21:35.648 [DEBUG] [Thread-56602] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:21:48.487 [DEBUG] [Thread-56604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:22:03.534 [DEBUG] [Thread-56605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:22:05.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:22:05.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:22:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:22:06.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 21, 59), 27.52, 15.53, 0.0, 24.12, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:22:06.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:21:59
2025-11-17T15:22:06.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:22:06.595 [DEBUG] [Thread-56606] [transport.py] [_log()] starting thread (client mode): 0xd0723c10
2025-11-17T15:22:06.595 [DEBUG] [Thread-56606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:22:06.616 [DEBUG] [Thread-56606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:22:06.617 [INFO] [Thread-56606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] client lang: <none>
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] server lang: <none>
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] kex follows: False
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] Compression: none
2025-11-17T15:22:06.620 [DEBUG] [Thread-56606] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:22:06.637 [DEBUG] [Thread-56606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:22:06.637 [DEBUG] [Thread-56606] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:22:06.638 [DEBUG] [Thread-56606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:22:06.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:22:06.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:22:06.640 [DEBUG] [Thread-56606] [transport.py] [_log()] userauth is OK
2025-11-17T15:22:06.640 [DEBUG] [Thread-56606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:22:06.640 [DEBUG] [Thread-56606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:22:06.640 [DEBUG] [Thread-56606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:22:06.640 [DEBUG] [Thread-56606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:22:06.675 [INFO] [Thread-56606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:22:06.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:22:07.442 [DEBUG] [Thread-56606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:22:07.442 [DEBUG] [Thread-56606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:22:07.442 [DEBUG] [Thread-56606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:22:07.483 [DEBUG] [Thread-56606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:22:07.483 [DEBUG] [Thread-56606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:22:07.486 [DEBUG] [Thread-56606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:22:07.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:22:07.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:22:07.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:22:07.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:22:07.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:22:07.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:22:07.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:22:07.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:22:07.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:22:07.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.556644 -999.00  +23.10  28.43     21   +0.00 1 2 1 1 1   888    0 21.60 -27.92 ----- 28.4 28.4 274.0 33.5 29.1 -22.1 28.9 -20.9 29.1 -22.4 30.2 -19.9
2025-11-17T15:22:07.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:22:07.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:22:07.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.556644
2025-11-17T15:22:07.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:22:07.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:22:07.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:22:07.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:22:07.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:22:07.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:21:59', tmtdew=27.52, humidity=15.53, cloud=0.0, wind=24.12, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:21:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:22:07.512 [DEBUG] [Thread-56606] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:22:07.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:22:07.609 [DEBUG] [Thread-56609] [transport.py] [_log()] starting thread (client mode): 0xd0721d50
2025-11-17T15:22:07.609 [DEBUG] [Thread-56609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:22:07.623 [DEBUG] [Thread-56609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:22:07.623 [INFO] [Thread-56609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] client lang: <none>
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] server lang: <none>
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] kex follows: False
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:22:07.631 [DEBUG] [Thread-56609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:22:07.632 [DEBUG] [Thread-56609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:22:07.632 [DEBUG] [Thread-56609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:22:07.632 [DEBUG] [Thread-56609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:22:07.632 [DEBUG] [Thread-56609] [transport.py] [_log()] Compression: none
2025-11-17T15:22:07.632 [DEBUG] [Thread-56609] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:22:07.687 [DEBUG] [Thread-56609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:22:07.688 [DEBUG] [Thread-56609] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:22:07.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:22:07.689 [DEBUG] [Thread-56609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:22:07.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:22:07.744 [DEBUG] [Thread-56609] [transport.py] [_log()] userauth is OK
2025-11-17T15:22:07.744 [DEBUG] [Thread-56609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:22:07.744 [DEBUG] [Thread-56609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:22:07.744 [DEBUG] [Thread-56609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:22:07.744 [DEBUG] [Thread-56609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:22:07.763 [INFO] [Thread-56609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:22:07.773 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:22:07.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:22:07.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:22:07.774 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:22:08.598 [DEBUG] [Thread-56609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:22:08.598 [DEBUG] [Thread-56609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:22:08.645 [DEBUG] [Thread-56609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:22:08.645 [DEBUG] [Thread-56609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:22:08.654 [DEBUG] [Thread-56609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:22:08.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:22:08.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:22:08.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:22:08.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:22:08.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:22:08.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:22:08.697 [DEBUG] [Thread-56609] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:22:18.526 [DEBUG] [Thread-56611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:22:18.568 [DEBUG] [Thread-56612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:22:33.617 [DEBUG] [Thread-56613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:22:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:22:38.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:22:38.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:22:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 22, 31), 27.74, 15.36, 0.0, 26.22, 23.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:22:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:22:31
2025-11-17T15:22:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:22:39.649 [DEBUG] [Thread-56614] [transport.py] [_log()] starting thread (client mode): 0xd0756860
2025-11-17T15:22:39.649 [DEBUG] [Thread-56614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:22:39.668 [DEBUG] [Thread-56614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:22:39.669 [INFO] [Thread-56614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:22:39.672 [DEBUG] [Thread-56614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:22:39.672 [DEBUG] [Thread-56614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:22:39.672 [DEBUG] [Thread-56614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:22:39.672 [DEBUG] [Thread-56614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:22:39.672 [DEBUG] [Thread-56614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:22:39.672 [DEBUG] [Thread-56614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:22:39.672 [DEBUG] [Thread-56614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] client lang: <none>
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] server lang: <none>
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] kex follows: False
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] Compression: none
2025-11-17T15:22:39.673 [DEBUG] [Thread-56614] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:22:39.690 [DEBUG] [Thread-56614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:22:39.691 [DEBUG] [Thread-56614] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:22:39.691 [DEBUG] [Thread-56614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:22:39.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:22:39.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:22:39.693 [DEBUG] [Thread-56614] [transport.py] [_log()] userauth is OK
2025-11-17T15:22:39.693 [DEBUG] [Thread-56614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:22:39.693 [DEBUG] [Thread-56614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:22:39.693 [DEBUG] [Thread-56614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:22:39.693 [DEBUG] [Thread-56614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:22:39.717 [INFO] [Thread-56614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:22:39.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:22:40.358 [DEBUG] [Thread-56614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:22:40.359 [DEBUG] [Thread-56614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:22:40.359 [DEBUG] [Thread-56614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:22:40.399 [DEBUG] [Thread-56614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:22:40.400 [DEBUG] [Thread-56614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:22:40.402 [DEBUG] [Thread-56614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:22:40.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:22:40.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:22:40.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:22:40.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:22:40.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:22:40.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:22:40.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:22:40.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:22:40.436 [DEBUG] [Thread-56614] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:22:40.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:22:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.556991 -999.00  +22.90  19.30     21   +0.00 1 2 1 1 1   888    0 22.47 -25.64 ----- 19.3 19.3 289.2 32.4 29.1 -21.1 28.8 -21.0 29.1 -22.2 30.2 -19.9
2025-11-17T15:22:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:22:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:22:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.556991
2025-11-17T15:22:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:22:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:22:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:22:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:22:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:22:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:22:31', tmtdew=27.74, humidity=15.36, cloud=0.0, wind=26.22, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:22:04.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:22:40.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:22:40.533 [DEBUG] [Thread-56617] [transport.py] [_log()] starting thread (client mode): 0xd07564d0
2025-11-17T15:22:40.533 [DEBUG] [Thread-56617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:22:40.547 [DEBUG] [Thread-56617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:22:40.547 [INFO] [Thread-56617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:22:40.555 [DEBUG] [Thread-56617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:22:40.555 [DEBUG] [Thread-56617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:22:40.555 [DEBUG] [Thread-56617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:22:40.555 [DEBUG] [Thread-56617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:22:40.555 [DEBUG] [Thread-56617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] client lang: <none>
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] server lang: <none>
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] kex follows: False
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] Compression: none
2025-11-17T15:22:40.556 [DEBUG] [Thread-56617] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:22:40.615 [DEBUG] [Thread-56617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:22:40.616 [DEBUG] [Thread-56617] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:22:40.616 [DEBUG] [Thread-56617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:22:40.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:22:40.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:22:40.672 [DEBUG] [Thread-56617] [transport.py] [_log()] userauth is OK
2025-11-17T15:22:40.672 [DEBUG] [Thread-56617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:22:40.672 [DEBUG] [Thread-56617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:22:40.672 [DEBUG] [Thread-56617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:22:40.672 [DEBUG] [Thread-56617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:22:40.695 [INFO] [Thread-56617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:22:40.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:22:40.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:22:41.541 [DEBUG] [Thread-56617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:22:41.541 [DEBUG] [Thread-56617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:22:41.589 [DEBUG] [Thread-56617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:22:41.589 [DEBUG] [Thread-56617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:22:41.598 [DEBUG] [Thread-56617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:22:41.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:22:41.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:22:41.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:22:41.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:22:41.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:22:41.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:22:41.633 [DEBUG] [Thread-56617] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:22:48.644 [DEBUG] [Thread-56619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:23:03.683 [DEBUG] [Thread-56620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:23:07.919 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:23:07.920 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:23:11.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:23:11.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:23:11.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:23:12.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 23, 3), 28.09, 15.02, 0.0, 27.07, 23.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:23:12.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:23:03
2025-11-17T15:23:12.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:23:12.608 [DEBUG] [Thread-56621] [transport.py] [_log()] starting thread (client mode): 0xd07548b0
2025-11-17T15:23:12.608 [DEBUG] [Thread-56621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:23:12.620 [DEBUG] [Thread-56621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:23:12.620 [INFO] [Thread-56621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] client lang: <none>
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] server lang: <none>
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] kex follows: False
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] Compression: none
2025-11-17T15:23:12.622 [DEBUG] [Thread-56621] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:23:12.632 [DEBUG] [Thread-56621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:23:12.632 [DEBUG] [Thread-56621] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:23:12.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:23:12.633 [DEBUG] [Thread-56621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:23:12.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:23:12.633 [DEBUG] [Thread-56621] [transport.py] [_log()] userauth is OK
2025-11-17T15:23:12.634 [DEBUG] [Thread-56621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:23:12.634 [DEBUG] [Thread-56621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:23:12.634 [DEBUG] [Thread-56621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:23:12.634 [DEBUG] [Thread-56621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:23:12.664 [INFO] [Thread-56621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:23:12.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:23:13.281 [DEBUG] [Thread-56621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:23:13.281 [DEBUG] [Thread-56621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:23:13.281 [DEBUG] [Thread-56621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:23:13.322 [DEBUG] [Thread-56621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:23:13.322 [DEBUG] [Thread-56621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:23:13.324 [DEBUG] [Thread-56621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:23:13.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:23:13.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:23:13.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:23:13.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:23:13.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:23:13.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:23:13.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:23:13.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:23:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:23:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.557338 -999.00  +23.30  15.49     21   +0.00 1 2 1 1 1   888    0 22.17 -22.85 ----- 15.5 15.5 285.6 21.1 29.4 -20.2 28.9 -20.1 29.3 -24.5 30.4 -19.3
2025-11-17T15:23:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:23:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:23:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.557338
2025-11-17T15:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:23:03', tmtdew=28.09, humidity=15.02, cloud=0.0, wind=27.07, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:22:34.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:23:13.334 [DEBUG] [Thread-56621] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:23:13.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:23:13.419 [DEBUG] [Thread-56624] [transport.py] [_log()] starting thread (client mode): 0xd07573d0
2025-11-17T15:23:13.419 [DEBUG] [Thread-56624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:23:13.434 [DEBUG] [Thread-56624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:23:13.434 [INFO] [Thread-56624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] client lang: <none>
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] server lang: <none>
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] kex follows: False
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:23:13.441 [DEBUG] [Thread-56624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:23:13.442 [DEBUG] [Thread-56624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:23:13.442 [DEBUG] [Thread-56624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:23:13.442 [DEBUG] [Thread-56624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:23:13.442 [DEBUG] [Thread-56624] [transport.py] [_log()] Compression: none
2025-11-17T15:23:13.442 [DEBUG] [Thread-56624] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:23:13.503 [DEBUG] [Thread-56624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:23:13.503 [DEBUG] [Thread-56624] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:23:13.503 [DEBUG] [Thread-56624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:23:13.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:23:13.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:23:13.560 [DEBUG] [Thread-56624] [transport.py] [_log()] userauth is OK
2025-11-17T15:23:13.560 [DEBUG] [Thread-56624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:23:13.560 [DEBUG] [Thread-56624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:23:13.560 [DEBUG] [Thread-56624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:23:13.560 [DEBUG] [Thread-56624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:23:13.574 [INFO] [Thread-56624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:23:13.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:23:13.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:23:14.406 [DEBUG] [Thread-56624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:23:14.406 [DEBUG] [Thread-56624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:23:14.453 [DEBUG] [Thread-56624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:23:14.453 [DEBUG] [Thread-56624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:23:14.462 [DEBUG] [Thread-56624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:23:14.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:23:14.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:23:14.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:23:14.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:23:14.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:23:14.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:23:14.497 [DEBUG] [Thread-56624] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:23:18.582 [DEBUG] [Thread-56626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:23:18.709 [DEBUG] [Thread-56627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:23:33.760 [DEBUG] [Thread-56628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:23:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:23:44.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:23:44.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:23:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 23, 35), 28.05, 15.15, 0.0, 25.53, 23.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:23:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:23:35
2025-11-17T15:23:45.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:23:45.460 [DEBUG] [Thread-56629] [transport.py] [_log()] starting thread (client mode): 0xd0756590
2025-11-17T15:23:45.460 [DEBUG] [Thread-56629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:23:45.480 [DEBUG] [Thread-56629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:23:45.480 [INFO] [Thread-56629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:23:45.483 [DEBUG] [Thread-56629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] client lang: <none>
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] server lang: <none>
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] kex follows: False
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:23:45.484 [DEBUG] [Thread-56629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:23:45.485 [DEBUG] [Thread-56629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:23:45.485 [DEBUG] [Thread-56629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:23:45.485 [DEBUG] [Thread-56629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:23:45.485 [DEBUG] [Thread-56629] [transport.py] [_log()] Compression: none
2025-11-17T15:23:45.485 [DEBUG] [Thread-56629] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:23:45.502 [DEBUG] [Thread-56629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:23:45.503 [DEBUG] [Thread-56629] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:23:45.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:23:45.504 [DEBUG] [Thread-56629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:23:45.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:23:45.506 [DEBUG] [Thread-56629] [transport.py] [_log()] userauth is OK
2025-11-17T15:23:45.506 [DEBUG] [Thread-56629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:23:45.506 [DEBUG] [Thread-56629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:23:45.506 [DEBUG] [Thread-56629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:23:45.506 [DEBUG] [Thread-56629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:23:45.531 [INFO] [Thread-56629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:23:45.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:23:46.176 [DEBUG] [Thread-56629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:23:46.177 [DEBUG] [Thread-56629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:23:46.177 [DEBUG] [Thread-56629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:23:46.217 [DEBUG] [Thread-56629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:23:46.217 [DEBUG] [Thread-56629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:23:46.221 [DEBUG] [Thread-56629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:23:46.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:23:46.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:23:46.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:23:46.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:23:46.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:23:46.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:23:46.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:23:46.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:23:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:23:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.557686 -999.00  +23.40  23.53     21   +0.00 1 2 1 1 1   888    0 22.48 -16.29 ----- 23.5 23.5 277.4 29.1 29.3 -21.0 28.9 -20.8 29.4 -19.4 30.4 -19.7
2025-11-17T15:23:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:23:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:23:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.557686
2025-11-17T15:23:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:23:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:23:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:23:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:23:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:23:46.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:23:35', tmtdew=28.05, humidity=15.15, cloud=0.0, wind=25.53, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:23:04.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:23:46.247 [DEBUG] [Thread-56629] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:23:46.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:23:46.346 [DEBUG] [Thread-56632] [transport.py] [_log()] starting thread (client mode): 0xd0756470
2025-11-17T15:23:46.346 [DEBUG] [Thread-56632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:23:46.361 [DEBUG] [Thread-56632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:23:46.361 [INFO] [Thread-56632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] client lang: <none>
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] server lang: <none>
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] kex follows: False
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:23:46.369 [DEBUG] [Thread-56632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:23:46.370 [DEBUG] [Thread-56632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:23:46.370 [DEBUG] [Thread-56632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:23:46.370 [DEBUG] [Thread-56632] [transport.py] [_log()] Compression: none
2025-11-17T15:23:46.370 [DEBUG] [Thread-56632] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:23:46.427 [DEBUG] [Thread-56632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:23:46.428 [DEBUG] [Thread-56632] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:23:46.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:23:46.429 [DEBUG] [Thread-56632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:23:46.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:23:46.486 [DEBUG] [Thread-56632] [transport.py] [_log()] userauth is OK
2025-11-17T15:23:46.486 [DEBUG] [Thread-56632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:23:46.486 [DEBUG] [Thread-56632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:23:46.486 [DEBUG] [Thread-56632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:23:46.486 [DEBUG] [Thread-56632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:23:46.504 [INFO] [Thread-56632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:23:46.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:23:46.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:23:47.354 [DEBUG] [Thread-56632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:23:47.355 [DEBUG] [Thread-56632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:23:47.402 [DEBUG] [Thread-56632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:23:47.402 [DEBUG] [Thread-56632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:23:47.410 [DEBUG] [Thread-56632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:23:47.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:23: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')
2025-11-17T15:23:47.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:23:47.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:23:47.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:23:47.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:23:47.442 [DEBUG] [Thread-56632] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:23:48.791 [DEBUG] [Thread-56634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:24:03.834 [DEBUG] [Thread-56635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:24:08.061 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:24:08.062 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:24:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:24:17.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:24:17.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:24:18.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 24, 7), 28.02, 15.15, 0.0, 23.06, 23.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:24:18.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:24:07
2025-11-17T15:24:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:24:18.382 [DEBUG] [Thread-56636] [transport.py] [_log()] starting thread (client mode): 0xd07553f0
2025-11-17T15:24:18.382 [DEBUG] [Thread-56636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:24:18.392 [DEBUG] [Thread-56636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:24:18.392 [INFO] [Thread-56636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:24:18.393 [DEBUG] [Thread-56636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:24:18.393 [DEBUG] [Thread-56636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:24:18.393 [DEBUG] [Thread-56636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:24:18.393 [DEBUG] [Thread-56636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:24:18.393 [DEBUG] [Thread-56636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:24:18.393 [DEBUG] [Thread-56636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:24:18.393 [DEBUG] [Thread-56636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] client lang: <none>
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] server lang: <none>
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] kex follows: False
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] Compression: none
2025-11-17T15:24:18.394 [DEBUG] [Thread-56636] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:24:18.401 [DEBUG] [Thread-56636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:24:18.401 [DEBUG] [Thread-56636] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:24:18.401 [DEBUG] [Thread-56636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:24:18.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:24:18.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:24:18.402 [DEBUG] [Thread-56636] [transport.py] [_log()] userauth is OK
2025-11-17T15:24:18.402 [DEBUG] [Thread-56636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:24:18.402 [DEBUG] [Thread-56636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:24:18.402 [DEBUG] [Thread-56636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:24:18.402 [DEBUG] [Thread-56636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:24:18.415 [INFO] [Thread-56636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:24:18.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:24:18.636 [DEBUG] [Thread-56638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:24:18.865 [DEBUG] [Thread-56639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:24:19.007 [DEBUG] [Thread-56636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:24:19.007 [DEBUG] [Thread-56636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:24:19.007 [DEBUG] [Thread-56636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:24:19.047 [DEBUG] [Thread-56636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:24:19.048 [DEBUG] [Thread-56636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:24:19.050 [DEBUG] [Thread-56636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:24:19.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:24:19.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:24:19.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:24:19.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:24:19.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:24:19.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:24:19.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:24:19.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:24:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:24:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.558033 -999.00  +23.00  20.63     21   -0.10 1 2 1 1 1   888    0 22.10 -12.03 ----- 20.6 20.6 289.2 29.5 29.3 -21.3 29.0 -21.2 29.4 -21.8 30.4 -20.1
2025-11-17T15:24:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:24:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:24:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.558033
2025-11-17T15:24:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:24:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:24:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:24:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:24:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:24:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:24:07', tmtdew=28.02, humidity=15.15, cloud=0.0, wind=23.06, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:23:34.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:24:19.075 [DEBUG] [Thread-56636] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:24:19.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:24:19.172 [DEBUG] [Thread-56641] [transport.py] [_log()] starting thread (client mode): 0xd0787f40
2025-11-17T15:24:19.173 [DEBUG] [Thread-56641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:24:19.188 [DEBUG] [Thread-56641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:24:19.188 [INFO] [Thread-56641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] client lang: <none>
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] server lang: <none>
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] kex follows: False
2025-11-17T15:24:19.196 [DEBUG] [Thread-56641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:24:19.197 [DEBUG] [Thread-56641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:24:19.197 [DEBUG] [Thread-56641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:24:19.197 [DEBUG] [Thread-56641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:24:19.197 [DEBUG] [Thread-56641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:24:19.197 [DEBUG] [Thread-56641] [transport.py] [_log()] Compression: none
2025-11-17T15:24:19.197 [DEBUG] [Thread-56641] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:24:19.252 [DEBUG] [Thread-56641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:24:19.252 [DEBUG] [Thread-56641] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:24:19.253 [DEBUG] [Thread-56641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:24:19.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:24:19.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:24:19.308 [DEBUG] [Thread-56641] [transport.py] [_log()] userauth is OK
2025-11-17T15:24:19.308 [DEBUG] [Thread-56641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:24:19.308 [DEBUG] [Thread-56641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:24:19.308 [DEBUG] [Thread-56641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:24:19.308 [DEBUG] [Thread-56641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:24:19.327 [INFO] [Thread-56641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:24:19.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:24:19.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:24:20.183 [DEBUG] [Thread-56641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:24:20.183 [DEBUG] [Thread-56641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:24:20.231 [DEBUG] [Thread-56641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:24:20.231 [DEBUG] [Thread-56641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:24:20.240 [DEBUG] [Thread-56641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:24:20.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:24:20.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:24:20.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:24:20.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:24:20.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:24:20.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:24:20.276 [DEBUG] [Thread-56641] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:24:33.895 [DEBUG] [Thread-56643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:24:48.938 [DEBUG] [Thread-56644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:24:50.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:24:50.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:24:50.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:24:50.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 24, 39), 27.65, 15.83, 0.0, 24.91, 23.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:24:50.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:24:39
2025-11-17T15:24:51.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:24:51.222 [DEBUG] [Thread-56645] [transport.py] [_log()] starting thread (client mode): 0xd07cd390
2025-11-17T15:24:51.222 [DEBUG] [Thread-56645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:24:51.242 [DEBUG] [Thread-56645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:24:51.242 [INFO] [Thread-56645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] client lang: <none>
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] server lang: <none>
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] kex follows: False
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:24:51.245 [DEBUG] [Thread-56645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:24:51.246 [DEBUG] [Thread-56645] [transport.py] [_log()] Compression: none
2025-11-17T15:24:51.246 [DEBUG] [Thread-56645] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:24:51.263 [DEBUG] [Thread-56645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:24:51.264 [DEBUG] [Thread-56645] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:24:51.264 [DEBUG] [Thread-56645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:24:51.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:24:51.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:24:51.266 [DEBUG] [Thread-56645] [transport.py] [_log()] userauth is OK
2025-11-17T15:24:51.266 [DEBUG] [Thread-56645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:24:51.266 [DEBUG] [Thread-56645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:24:51.266 [DEBUG] [Thread-56645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:24:51.266 [DEBUG] [Thread-56645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:24:51.290 [INFO] [Thread-56645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:24:51.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:24:51.904 [DEBUG] [Thread-56645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:24:51.904 [DEBUG] [Thread-56645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:24:51.905 [DEBUG] [Thread-56645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:24:51.945 [DEBUG] [Thread-56645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:24:51.945 [DEBUG] [Thread-56645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:24:51.948 [DEBUG] [Thread-56645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:24:51.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:24:51.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:24:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:24:51.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:24:51.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:24:51.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:24:51.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:24:51.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:24:51.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:24:51.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.558380 -999.00  +23.20  21.36     21   +0.00 1 2 1 1 1   888    0 22.14 -8.71 ----- 21.4 21.4 299.8 25.7 29.3 -21.6 29.1 -21.0 29.7 -21.4 30.4 -20.1
2025-11-17T15:24:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:24:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:24:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.558380
2025-11-17T15:24:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:24:51.972 [DEBUG] [Thread-56645] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:24:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:24:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:24:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:24:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:24:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:24:39', tmtdew=27.65, humidity=15.83, cloud=0.0, wind=24.91, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:24:04.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:24:52.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:24:52.075 [DEBUG] [Thread-56648] [transport.py] [_log()] starting thread (client mode): 0xd0784850
2025-11-17T15:24:52.075 [DEBUG] [Thread-56648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:24:52.090 [DEBUG] [Thread-56648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:24:52.090 [INFO] [Thread-56648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:24:52.097 [DEBUG] [Thread-56648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] client lang: <none>
2025-11-17T15:24:52.098 [DEBUG] [Thread-56648] [transport.py] [_log()] server lang: <none>
2025-11-17T15:24:52.099 [DEBUG] [Thread-56648] [transport.py] [_log()] kex follows: False
2025-11-17T15:24:52.099 [DEBUG] [Thread-56648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:24:52.099 [DEBUG] [Thread-56648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:24:52.099 [DEBUG] [Thread-56648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:24:52.099 [DEBUG] [Thread-56648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:24:52.099 [DEBUG] [Thread-56648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:24:52.099 [DEBUG] [Thread-56648] [transport.py] [_log()] Compression: none
2025-11-17T15:24:52.099 [DEBUG] [Thread-56648] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:24:52.156 [DEBUG] [Thread-56648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:24:52.157 [DEBUG] [Thread-56648] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:24:52.157 [DEBUG] [Thread-56648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:24:52.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:24:52.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:24:52.212 [DEBUG] [Thread-56648] [transport.py] [_log()] userauth is OK
2025-11-17T15:24:52.212 [DEBUG] [Thread-56648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:24:52.212 [DEBUG] [Thread-56648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:24:52.212 [DEBUG] [Thread-56648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:24:52.212 [DEBUG] [Thread-56648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:24:52.231 [INFO] [Thread-56648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:24:52.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:24:52.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:24:53.097 [DEBUG] [Thread-56648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:24:53.097 [DEBUG] [Thread-56648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:24:53.145 [DEBUG] [Thread-56648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:24:53.145 [DEBUG] [Thread-56648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:24:53.154 [DEBUG] [Thread-56648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:24:53.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:24:53.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:24:53.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:24:53.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:24:53.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:24:53.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:24:53.189 [DEBUG] [Thread-56648] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:25:03.965 [DEBUG] [Thread-56650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:25:08.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:25:08.204 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:25:18.688 [DEBUG] [Thread-56651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:25:19.001 [DEBUG] [Thread-56652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:25:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:25:23.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:25:23.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:25:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 25, 11), 27.52, 15.9, 0.0, 19.34, 23.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:25:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:25:11
2025-11-17T15:25:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:25:24.125 [DEBUG] [Thread-56653] [transport.py] [_log()] starting thread (client mode): 0xd31b2b60
2025-11-17T15:25:24.125 [DEBUG] [Thread-56653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:25:24.146 [DEBUG] [Thread-56653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:25:24.146 [INFO] [Thread-56653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:25:24.150 [DEBUG] [Thread-56653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:25:24.150 [DEBUG] [Thread-56653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:25:24.150 [DEBUG] [Thread-56653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:25:24.150 [DEBUG] [Thread-56653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] client lang: <none>
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] server lang: <none>
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] kex follows: False
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:25:24.151 [DEBUG] [Thread-56653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:25:24.152 [DEBUG] [Thread-56653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:25:24.152 [DEBUG] [Thread-56653] [transport.py] [_log()] Compression: none
2025-11-17T15:25:24.152 [DEBUG] [Thread-56653] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:25:24.160 [DEBUG] [Thread-56653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:25:24.161 [DEBUG] [Thread-56653] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:25:24.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:25:24.162 [DEBUG] [Thread-56653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:25:24.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:25:24.164 [DEBUG] [Thread-56653] [transport.py] [_log()] userauth is OK
2025-11-17T15:25:24.164 [DEBUG] [Thread-56653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:25:24.164 [DEBUG] [Thread-56653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:25:24.164 [DEBUG] [Thread-56653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:25:24.164 [DEBUG] [Thread-56653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:25:24.187 [INFO] [Thread-56653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:25:24.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:25:24.777 [DEBUG] [Thread-56653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:25:24.777 [DEBUG] [Thread-56653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:25:24.778 [DEBUG] [Thread-56653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:25:24.818 [DEBUG] [Thread-56653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:25:24.819 [DEBUG] [Thread-56653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:25:24.822 [DEBUG] [Thread-56653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:25:24.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:25:24.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:25:24.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:25:24.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:25:24.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:25:24.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:25:24.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:25:24.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:25:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:25:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.558727 -999.00  +23.10  23.36     21   +0.00 1 2 1 1 1   888    0 23.07 -5.64 ----- 23.4 23.4 289.6 28.7 29.5 -21.2 29.1 -21.0 29.6 -21.5 30.6 -20.3
2025-11-17T15:25:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:25:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:25:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.558727
2025-11-17T15:25:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:25:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:25:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:25:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:25:24.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:25:24.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:25:11', tmtdew=27.52, humidity=15.9, cloud=0.0, wind=19.34, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:24:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:25:24.847 [DEBUG] [Thread-56653] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:25:24.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:25:24.942 [DEBUG] [Thread-56656] [transport.py] [_log()] starting thread (client mode): 0xd31cd2a0
2025-11-17T15:25:24.943 [DEBUG] [Thread-56656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:25:24.958 [DEBUG] [Thread-56656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:25:24.958 [INFO] [Thread-56656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] client lang: <none>
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] server lang: <none>
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] kex follows: False
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] Compression: none
2025-11-17T15:25:24.966 [DEBUG] [Thread-56656] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:25:25.028 [DEBUG] [Thread-56656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:25:25.028 [DEBUG] [Thread-56656] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:25:25.029 [DEBUG] [Thread-56656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:25:25.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:25:25.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:25:25.084 [DEBUG] [Thread-56656] [transport.py] [_log()] userauth is OK
2025-11-17T15:25:25.084 [DEBUG] [Thread-56656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:25:25.084 [DEBUG] [Thread-56656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:25:25.084 [DEBUG] [Thread-56656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:25:25.084 [DEBUG] [Thread-56656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:25:25.102 [INFO] [Thread-56656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:25:25.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:25:25.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:25:25.940 [DEBUG] [Thread-56656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:25:25.941 [DEBUG] [Thread-56656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:25:25.988 [DEBUG] [Thread-56656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:25:25.988 [DEBUG] [Thread-56656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:25:25.997 [DEBUG] [Thread-56656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:25:26.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:25:26.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:25:26.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:25:26.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:25:26.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:25:26.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:25:26.031 [DEBUG] [Thread-56656] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:25:34.035 [DEBUG] [Thread-56658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:25:49.078 [DEBUG] [Thread-56659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:25:56.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:25:56.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:25:56.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:25:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 25, 43), 27.55, 15.63, 0.0, 14.96, 23.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:25:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:25:43
2025-11-17T15:25:56.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:25:56.980 [DEBUG] [Thread-56660] [transport.py] [_log()] starting thread (client mode): 0xd0754910
2025-11-17T15:25:56.980 [DEBUG] [Thread-56660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:25:57.001 [DEBUG] [Thread-56660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:25:57.001 [INFO] [Thread-56660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:25:57.005 [DEBUG] [Thread-56660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:25:57.005 [DEBUG] [Thread-56660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:25:57.005 [DEBUG] [Thread-56660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:25:57.005 [DEBUG] [Thread-56660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:25:57.005 [DEBUG] [Thread-56660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:25:57.005 [DEBUG] [Thread-56660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:25:57.005 [DEBUG] [Thread-56660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:25:57.005 [DEBUG] [Thread-56660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] client lang: <none>
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] server lang: <none>
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] kex follows: False
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] Compression: none
2025-11-17T15:25:57.006 [DEBUG] [Thread-56660] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:25:57.024 [DEBUG] [Thread-56660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:25:57.025 [DEBUG] [Thread-56660] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:25:57.025 [DEBUG] [Thread-56660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:25:57.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:25:57.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:25:57.027 [DEBUG] [Thread-56660] [transport.py] [_log()] userauth is OK
2025-11-17T15:25:57.028 [DEBUG] [Thread-56660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:25:57.028 [DEBUG] [Thread-56660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:25:57.028 [DEBUG] [Thread-56660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:25:57.028 [DEBUG] [Thread-56660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:25:57.047 [INFO] [Thread-56660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:25:57.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:25:57.676 [DEBUG] [Thread-56660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:25:57.676 [DEBUG] [Thread-56660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:25:57.676 [DEBUG] [Thread-56660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:25:57.717 [DEBUG] [Thread-56660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:25:57.718 [DEBUG] [Thread-56660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:25:57.721 [DEBUG] [Thread-56660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:25:57.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:25:57.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:25:57.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:25:57.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:25:57.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:25:57.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:25:57.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:25:57.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:25:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:25:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.559422 -999.00  +23.10  11.35     21   -0.10 1 2 1 1 1   888    0 23.17 1.95 ----- 11.3 11.3 237.4 24.4 29.4 -23.5 29.1 -22.0 29.6 -20.6 30.2 -23.1
2025-11-17T15:25:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:25:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:25:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.559422
2025-11-17T15:25:57.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:25:57.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:25:57.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:25:57.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:25:57.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:25:57.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:25:43', tmtdew=27.55, humidity=15.63, cloud=0.0, wind=14.96, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:25:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:25:57.747 [DEBUG] [Thread-56660] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:25:57.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:25:57.842 [DEBUG] [Thread-56663] [transport.py] [_log()] starting thread (client mode): 0xd0756e60
2025-11-17T15:25:57.842 [DEBUG] [Thread-56663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:25:57.857 [DEBUG] [Thread-56663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:25:57.857 [INFO] [Thread-56663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:25:57.865 [DEBUG] [Thread-56663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:25:57.865 [DEBUG] [Thread-56663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:25:57.865 [DEBUG] [Thread-56663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:25:57.865 [DEBUG] [Thread-56663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:25:57.865 [DEBUG] [Thread-56663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:25:57.865 [DEBUG] [Thread-56663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:25:57.865 [DEBUG] [Thread-56663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] client lang: <none>
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] server lang: <none>
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] kex follows: False
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:25:57.866 [DEBUG] [Thread-56663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:25:57.867 [DEBUG] [Thread-56663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:25:57.867 [DEBUG] [Thread-56663] [transport.py] [_log()] Compression: none
2025-11-17T15:25:57.867 [DEBUG] [Thread-56663] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:25:57.924 [DEBUG] [Thread-56663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:25:57.924 [DEBUG] [Thread-56663] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:25:57.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:25:57.925 [DEBUG] [Thread-56663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:25:57.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:25:57.980 [DEBUG] [Thread-56663] [transport.py] [_log()] userauth is OK
2025-11-17T15:25:57.980 [DEBUG] [Thread-56663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:25:57.980 [DEBUG] [Thread-56663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:25:57.980 [DEBUG] [Thread-56663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:25:57.980 [DEBUG] [Thread-56663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:25:58.000 [INFO] [Thread-56663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:25:58.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:25:58.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:25:58.817 [DEBUG] [Thread-56663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:25:58.817 [DEBUG] [Thread-56663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:25:58.864 [DEBUG] [Thread-56663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:25:58.864 [DEBUG] [Thread-56663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:25:58.873 [DEBUG] [Thread-56663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:25:58.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:25:58.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:25:58.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:25:58.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:25:58.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:25:58.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:25:58.910 [DEBUG] [Thread-56663] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:26:04.112 [DEBUG] [Thread-56665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:26:08.344 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:26:08.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:26:18.742 [DEBUG] [Thread-56666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:26:19.152 [DEBUG] [Thread-56667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:26:28.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:26:28.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:26:28.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:26:29.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 26, 15), 27.59, 15.6, 0.0, 16.81, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:26:29.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:26:15
2025-11-17T15:26:29.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:26:29.853 [DEBUG] [Thread-56668] [transport.py] [_log()] starting thread (client mode): 0xd31b31f0
2025-11-17T15:26:29.854 [DEBUG] [Thread-56668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:26:29.871 [DEBUG] [Thread-56668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:26:29.871 [INFO] [Thread-56668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:26:29.874 [DEBUG] [Thread-56668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:26:29.874 [DEBUG] [Thread-56668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:26:29.874 [DEBUG] [Thread-56668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] client lang: <none>
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] server lang: <none>
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] kex follows: False
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] Compression: none
2025-11-17T15:26:29.875 [DEBUG] [Thread-56668] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:26:29.892 [DEBUG] [Thread-56668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:26:29.893 [DEBUG] [Thread-56668] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:26:29.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:26:29.894 [DEBUG] [Thread-56668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:26:29.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:26:29.896 [DEBUG] [Thread-56668] [transport.py] [_log()] userauth is OK
2025-11-17T15:26:29.896 [DEBUG] [Thread-56668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:26:29.896 [DEBUG] [Thread-56668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:26:29.896 [DEBUG] [Thread-56668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:26:29.896 [DEBUG] [Thread-56668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:26:29.932 [INFO] [Thread-56668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:26:29.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:26:30.583 [DEBUG] [Thread-56668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:26:30.583 [DEBUG] [Thread-56668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:26:30.583 [DEBUG] [Thread-56668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:26:30.623 [DEBUG] [Thread-56668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:26:30.624 [DEBUG] [Thread-56668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:26:30.626 [DEBUG] [Thread-56668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:26:30.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:26:30.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:26:30.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:26:30.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:26:30.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:26:30.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:26:30.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:26:30.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:26:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:26:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.559769 -999.00  +22.80  17.59     21   -0.00 1 2 1 1 1   888    0 23.27 4.49 ----- 17.6 17.6 272.4 22.0 29.6 -22.7 29.2 -21.4 29.9 -20.0 30.6 -21.3
2025-11-17T15:26:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:26:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:26:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.559769
2025-11-17T15:26:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:26:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:26:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:26:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:26:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:26:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:26:15', tmtdew=27.59, humidity=15.6, cloud=0.0, wind=16.81, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:26:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:26:30.652 [DEBUG] [Thread-56668] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:26:30.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:26:30.751 [DEBUG] [Thread-56671] [transport.py] [_log()] starting thread (client mode): 0xd0786f50
2025-11-17T15:26:30.751 [DEBUG] [Thread-56671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:26:30.766 [DEBUG] [Thread-56671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:26:30.766 [INFO] [Thread-56671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:26:30.774 [DEBUG] [Thread-56671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:26:30.774 [DEBUG] [Thread-56671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:26:30.774 [DEBUG] [Thread-56671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:26:30.774 [DEBUG] [Thread-56671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:26:30.774 [DEBUG] [Thread-56671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:26:30.774 [DEBUG] [Thread-56671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] client lang: <none>
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] server lang: <none>
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] kex follows: False
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:26:30.775 [DEBUG] [Thread-56671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:26:30.776 [DEBUG] [Thread-56671] [transport.py] [_log()] Compression: none
2025-11-17T15:26:30.776 [DEBUG] [Thread-56671] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:26:30.831 [DEBUG] [Thread-56671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:26:30.832 [DEBUG] [Thread-56671] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:26:30.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:26:30.832 [DEBUG] [Thread-56671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:26:30.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:26:30.889 [DEBUG] [Thread-56671] [transport.py] [_log()] userauth is OK
2025-11-17T15:26:30.889 [DEBUG] [Thread-56671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:26:30.889 [DEBUG] [Thread-56671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:26:30.889 [DEBUG] [Thread-56671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:26:30.889 [DEBUG] [Thread-56671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:26:30.909 [INFO] [Thread-56671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:26:30.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:26:30.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:26:31.844 [DEBUG] [Thread-56671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:26:31.844 [DEBUG] [Thread-56671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:26:31.892 [DEBUG] [Thread-56671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:26:31.892 [DEBUG] [Thread-56671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:26:31.901 [DEBUG] [Thread-56671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:26:31.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:26:31.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:26:31.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:26:31.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:26:31.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:26:31.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:26:31.942 [DEBUG] [Thread-56671] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:26:34.183 [DEBUG] [Thread-56673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:26:49.219 [DEBUG] [Thread-56674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:27:01.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:27:01.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:27:01.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:27:02.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 26, 47), 28.08, 15.25, 0.0, 16.55, 23.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:27:02.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:26:47
2025-11-17T15:27:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:27:02.964 [DEBUG] [Thread-56675] [transport.py] [_log()] starting thread (client mode): 0xd07842b0
2025-11-17T15:27:02.964 [DEBUG] [Thread-56675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:27:02.985 [DEBUG] [Thread-56675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:27:02.985 [INFO] [Thread-56675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] client lang: <none>
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] server lang: <none>
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] kex follows: False
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] Compression: none
2025-11-17T15:27:02.988 [DEBUG] [Thread-56675] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:27:03.003 [DEBUG] [Thread-56675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:27:03.003 [DEBUG] [Thread-56675] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:27:03.004 [DEBUG] [Thread-56675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:27:03.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:27:03.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:27:03.004 [DEBUG] [Thread-56675] [transport.py] [_log()] userauth is OK
2025-11-17T15:27:03.004 [DEBUG] [Thread-56675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:27:03.004 [DEBUG] [Thread-56675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:27:03.004 [DEBUG] [Thread-56675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:27:03.004 [DEBUG] [Thread-56675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:27:03.013 [INFO] [Thread-56675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:27:03.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:27:03.576 [DEBUG] [Thread-56675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:27:03.576 [DEBUG] [Thread-56675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:27:03.576 [DEBUG] [Thread-56675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:27:03.617 [DEBUG] [Thread-56675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:27:03.617 [DEBUG] [Thread-56675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:27:03.619 [DEBUG] [Thread-56675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:27:03.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:27:03.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:27:03.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:27:03.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:27:03.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:27:03.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:27:03.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:27:03.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:27:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:27:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.560116 -999.00  +22.70  20.79     21   -0.00 1 1 1 1 1   888    0 22.98 5.87 ----- 20.8 20.8 268.6 23.5 29.5 -25.1 29.2 -22.1 29.5 -24.1 30.6 -23.6
2025-11-17T15:27:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:27:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:27:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.560116
2025-11-17T15:27:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:27:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:27:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:27:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:27:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:27:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:26:47', tmtdew=28.08, humidity=15.25, cloud=0.0, wind=16.55, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:26:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:27:03.641 [DEBUG] [Thread-56675] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:27:03.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:27:03.740 [DEBUG] [Thread-56678] [transport.py] [_log()] starting thread (client mode): 0xd31b1ab0
2025-11-17T15:27:03.740 [DEBUG] [Thread-56678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:27:03.755 [DEBUG] [Thread-56678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:27:03.755 [INFO] [Thread-56678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:27:03.763 [DEBUG] [Thread-56678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:27:03.763 [DEBUG] [Thread-56678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:27:03.763 [DEBUG] [Thread-56678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] client lang: <none>
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] server lang: <none>
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] kex follows: False
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] Compression: none
2025-11-17T15:27:03.764 [DEBUG] [Thread-56678] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:27:03.819 [DEBUG] [Thread-56678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:27:03.819 [DEBUG] [Thread-56678] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:27:03.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:27:03.819 [DEBUG] [Thread-56678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:27:03.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:27:03.876 [DEBUG] [Thread-56678] [transport.py] [_log()] userauth is OK
2025-11-17T15:27:03.876 [DEBUG] [Thread-56678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:27:03.876 [DEBUG] [Thread-56678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:27:03.876 [DEBUG] [Thread-56678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:27:03.876 [DEBUG] [Thread-56678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:27:03.890 [INFO] [Thread-56678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:27:03.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:27:03.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:27:04.244 [DEBUG] [Thread-56680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:27:04.814 [DEBUG] [Thread-56678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:27:04.814 [DEBUG] [Thread-56678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:27:04.865 [DEBUG] [Thread-56678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:27:04.865 [DEBUG] [Thread-56678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:27:04.878 [DEBUG] [Thread-56678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:27:04.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:27:04.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:27:04.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:27:04.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:27:04.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:27:04.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:27:04.910 [DEBUG] [Thread-56678] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:27:08.486 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:27:08.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:27:18.795 [DEBUG] [Thread-56681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:27:19.285 [DEBUG] [Thread-56682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:27:34.316 [DEBUG] [Thread-56683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:27:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:27:34.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:27:34.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:27:35.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 27, 19), 28.19, 15.15, 0.0, 18.49, 23.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:27:35.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:27:19
2025-11-17T15:27:35.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:27:35.854 [DEBUG] [Thread-56684] [transport.py] [_log()] starting thread (client mode): 0xd0721e70
2025-11-17T15:27:35.854 [DEBUG] [Thread-56684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:27:35.874 [DEBUG] [Thread-56684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:27:35.875 [INFO] [Thread-56684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] client lang: <none>
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] server lang: <none>
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] kex follows: False
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] Compression: none
2025-11-17T15:27:35.878 [DEBUG] [Thread-56684] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:27:35.895 [DEBUG] [Thread-56684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:27:35.896 [DEBUG] [Thread-56684] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:27:35.896 [DEBUG] [Thread-56684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:27:35.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:27:35.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:27:35.898 [DEBUG] [Thread-56684] [transport.py] [_log()] userauth is OK
2025-11-17T15:27:35.898 [DEBUG] [Thread-56684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:27:35.899 [DEBUG] [Thread-56684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:27:35.899 [DEBUG] [Thread-56684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:27:35.899 [DEBUG] [Thread-56684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:27:35.922 [INFO] [Thread-56684] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:27:35.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:27:36.567 [DEBUG] [Thread-56684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:27:36.567 [DEBUG] [Thread-56684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:27:36.568 [DEBUG] [Thread-56684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:27:36.608 [DEBUG] [Thread-56684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:27:36.609 [DEBUG] [Thread-56684] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:27:36.611 [DEBUG] [Thread-56684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:27:36.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:27:36.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:27:36.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:27:36.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:27:36.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:27:36.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:27:36.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:27:36.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:27:36.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:27:36.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.560463 -999.00  +23.10  13.43     21   +0.00 1 2 1 1 1   888    0 23.11 7.01 ----- 13.4 13.4 244.0 17.1 29.7 -24.1 29.3 -21.9 29.8 -22.3 30.6 -23.3
2025-11-17T15:27:36.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:27:36.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:27:36.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.560463
2025-11-17T15:27:36.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:27:36.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:27:36.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:27:36.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:27:36.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:27:36.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:27:19', tmtdew=28.19, humidity=15.15, cloud=0.0, wind=18.49, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:27:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:27:36.639 [DEBUG] [Thread-56684] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:27:36.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:27:36.737 [DEBUG] [Thread-56687] [transport.py] [_log()] starting thread (client mode): 0xd0784280
2025-11-17T15:27:36.737 [DEBUG] [Thread-56687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:27:36.754 [DEBUG] [Thread-56687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:27:36.754 [INFO] [Thread-56687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:27:36.761 [DEBUG] [Thread-56687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] client lang: <none>
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] server lang: <none>
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] kex follows: False
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:27:36.762 [DEBUG] [Thread-56687] [transport.py] [_log()] Compression: none
2025-11-17T15:27:36.763 [DEBUG] [Thread-56687] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:27:36.819 [DEBUG] [Thread-56687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:27:36.819 [DEBUG] [Thread-56687] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:27:36.819 [DEBUG] [Thread-56687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:27:36.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:27:36.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:27:36.876 [DEBUG] [Thread-56687] [transport.py] [_log()] userauth is OK
2025-11-17T15:27:36.876 [DEBUG] [Thread-56687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:27:36.876 [DEBUG] [Thread-56687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:27:36.876 [DEBUG] [Thread-56687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:27:36.877 [DEBUG] [Thread-56687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:27:36.899 [INFO] [Thread-56687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:27:36.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:27:36.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:27:37.729 [DEBUG] [Thread-56687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:27:37.729 [DEBUG] [Thread-56687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:27:37.777 [DEBUG] [Thread-56687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:27:37.777 [DEBUG] [Thread-56687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:27:37.786 [DEBUG] [Thread-56687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:27:37.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:27:37.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:27:37.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:27:37.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:27:37.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:27:37.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:27:37.821 [DEBUG] [Thread-56687] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:27:49.345 [DEBUG] [Thread-56689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:28:04.388 [DEBUG] [Thread-56690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:28:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:28:07.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:28:07.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:28:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 27, 51), 27.62, 15.75, 0.0, 11.96, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:28:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:27:51
2025-11-17T15:28:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:28:08.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:28:08.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:28:08.749 [DEBUG] [Thread-56691] [transport.py] [_log()] starting thread (client mode): 0xd0787f40
2025-11-17T15:28:08.749 [DEBUG] [Thread-56691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:28:08.765 [DEBUG] [Thread-56691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:28:08.765 [INFO] [Thread-56691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:28:08.768 [DEBUG] [Thread-56691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:28:08.768 [DEBUG] [Thread-56691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:28:08.768 [DEBUG] [Thread-56691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:28:08.768 [DEBUG] [Thread-56691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:28:08.768 [DEBUG] [Thread-56691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:28:08.768 [DEBUG] [Thread-56691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:28:08.768 [DEBUG] [Thread-56691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] client lang: <none>
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] server lang: <none>
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] kex follows: False
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] Compression: none
2025-11-17T15:28:08.769 [DEBUG] [Thread-56691] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:28:08.787 [DEBUG] [Thread-56691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:28:08.787 [DEBUG] [Thread-56691] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:28:08.788 [DEBUG] [Thread-56691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:28:08.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:28:08.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:28:08.790 [DEBUG] [Thread-56691] [transport.py] [_log()] userauth is OK
2025-11-17T15:28:08.790 [DEBUG] [Thread-56691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:28:08.790 [DEBUG] [Thread-56691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:28:08.791 [DEBUG] [Thread-56691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:28:08.791 [DEBUG] [Thread-56691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:28:08.815 [INFO] [Thread-56691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:28:08.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:28:09.486 [DEBUG] [Thread-56691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:28:09.486 [DEBUG] [Thread-56691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:28:09.486 [DEBUG] [Thread-56691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:28:09.527 [DEBUG] [Thread-56691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:28:09.527 [DEBUG] [Thread-56691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:28:09.530 [DEBUG] [Thread-56691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:28:09.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:28:09.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:28:09.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:28:09.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:28:09.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:28:09.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:28:09.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:28:09.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:28:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:28:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.560810 -999.00  +22.70  10.40     21   -0.10 1 2 1 1 1   888    0 23.46 9.80 ----- 10.4 10.4 279.4 15.1 29.7 -22.6 29.4 -22.6 30.0 -20.5 30.8 -21.2
2025-11-17T15:28:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:28:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:28:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.560810
2025-11-17T15:28:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:27:51', tmtdew=27.62, humidity=15.75, cloud=0.0, wind=11.96, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:27:33.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:28:09.553 [DEBUG] [Thread-56691] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:28:09.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:28:09.651 [DEBUG] [Thread-56694] [transport.py] [_log()] starting thread (client mode): 0xd070ee00
2025-11-17T15:28:09.651 [DEBUG] [Thread-56694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:28:09.669 [DEBUG] [Thread-56694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:28:09.669 [INFO] [Thread-56694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:28:09.676 [DEBUG] [Thread-56694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:28:09.676 [DEBUG] [Thread-56694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] client lang: <none>
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] server lang: <none>
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] kex follows: False
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] Compression: none
2025-11-17T15:28:09.677 [DEBUG] [Thread-56694] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:28:09.735 [DEBUG] [Thread-56694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:28:09.736 [DEBUG] [Thread-56694] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:28:09.736 [DEBUG] [Thread-56694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:28:09.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:28:09.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:28:09.792 [DEBUG] [Thread-56694] [transport.py] [_log()] userauth is OK
2025-11-17T15:28:09.792 [DEBUG] [Thread-56694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:28:09.793 [DEBUG] [Thread-56694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:28:09.793 [DEBUG] [Thread-56694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:28:09.793 [DEBUG] [Thread-56694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:28:09.813 [INFO] [Thread-56694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:28:09.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:28:09.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:28:10.695 [DEBUG] [Thread-56694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:28:10.695 [DEBUG] [Thread-56694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:28:10.743 [DEBUG] [Thread-56694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:28:10.743 [DEBUG] [Thread-56694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:28:10.752 [DEBUG] [Thread-56694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:28:10.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:28:10.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:28:10.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:28:10.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:28:10.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:28:10.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:28:10.789 [DEBUG] [Thread-56694] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:28:18.846 [DEBUG] [Thread-56696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:28:19.416 [DEBUG] [Thread-56697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:28:34.451 [DEBUG] [Thread-56698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:28:40.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:28:40.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:28:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:28:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 28, 23), 27.61, 15.73, 0.0, 11.43, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:28:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:28:23
2025-11-17T15:28:41.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:28:41.730 [DEBUG] [Thread-56699] [transport.py] [_log()] starting thread (client mode): 0xd07571c0
2025-11-17T15:28:41.730 [DEBUG] [Thread-56699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:28:41.751 [DEBUG] [Thread-56699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:28:41.751 [INFO] [Thread-56699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] client lang: <none>
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] server lang: <none>
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] kex follows: False
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:28:41.754 [DEBUG] [Thread-56699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:28:41.755 [DEBUG] [Thread-56699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:28:41.755 [DEBUG] [Thread-56699] [transport.py] [_log()] Compression: none
2025-11-17T15:28:41.755 [DEBUG] [Thread-56699] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:28:41.773 [DEBUG] [Thread-56699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:28:41.773 [DEBUG] [Thread-56699] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:28:41.774 [DEBUG] [Thread-56699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:28:41.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:28:41.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:28:41.775 [DEBUG] [Thread-56699] [transport.py] [_log()] userauth is OK
2025-11-17T15:28:41.776 [DEBUG] [Thread-56699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:28:41.776 [DEBUG] [Thread-56699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:28:41.776 [DEBUG] [Thread-56699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:28:41.776 [DEBUG] [Thread-56699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:28:41.799 [INFO] [Thread-56699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:28:41.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:28:42.395 [DEBUG] [Thread-56699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:28:42.395 [DEBUG] [Thread-56699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:28:42.396 [DEBUG] [Thread-56699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:28:42.437 [DEBUG] [Thread-56699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:28:42.437 [DEBUG] [Thread-56699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:28:42.440 [DEBUG] [Thread-56699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:28:42.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:28:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:28:42.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:28:42.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:28:42.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:28:42.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:28:42.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:28:42.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:28:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:28:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.561158 -999.00  +22.70   2.26     22   +0.00 1 2 1 1 1   888    0 22.83 10.16 ----- 2.3 2.3 272.6 7.2 30.0 -23.1 29.6 -22.6 30.2 -20.3 31.1 -21.2
2025-11-17T15:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.561158
2025-11-17T15:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:28:23', tmtdew=27.61, humidity=15.73, cloud=0.0, wind=11.43, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:28:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:28:42.464 [DEBUG] [Thread-56699] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:28:42.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:28:42.561 [DEBUG] [Thread-56702] [transport.py] [_log()] starting thread (client mode): 0xd0757a60
2025-11-17T15:28:42.561 [DEBUG] [Thread-56702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:28:42.576 [DEBUG] [Thread-56702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:28:42.576 [INFO] [Thread-56702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:28:42.583 [DEBUG] [Thread-56702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:28:42.583 [DEBUG] [Thread-56702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] client lang: <none>
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] server lang: <none>
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] kex follows: False
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] Compression: none
2025-11-17T15:28:42.584 [DEBUG] [Thread-56702] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:28:42.644 [DEBUG] [Thread-56702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:28:42.644 [DEBUG] [Thread-56702] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:28:42.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:28:42.645 [DEBUG] [Thread-56702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:28:42.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:28:42.700 [DEBUG] [Thread-56702] [transport.py] [_log()] userauth is OK
2025-11-17T15:28:42.700 [DEBUG] [Thread-56702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:28:42.700 [DEBUG] [Thread-56702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:28:42.700 [DEBUG] [Thread-56702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:28:42.700 [DEBUG] [Thread-56702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:28:42.719 [INFO] [Thread-56702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:28:42.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:28:42.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:28:43.534 [DEBUG] [Thread-56702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:28:43.534 [DEBUG] [Thread-56702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:28:43.583 [DEBUG] [Thread-56702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:28:43.583 [DEBUG] [Thread-56702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:28:43.591 [DEBUG] [Thread-56702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:28:43.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:28:43.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:28:43.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:28:43.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:28:43.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:28:43.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:28:43.625 [DEBUG] [Thread-56702] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:28:49.485 [DEBUG] [Thread-56704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:29:04.526 [DEBUG] [Thread-56705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:29:08.770 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:29:08.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:29:13.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:29:13.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:29:13.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:29:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 28, 55), 27.56, 15.88, 0.0, 8.21, 23.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:29:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:28:55
2025-11-17T15:29:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:29:14.545 [DEBUG] [Thread-56706] [transport.py] [_log()] starting thread (client mode): 0xd07563e0
2025-11-17T15:29:14.545 [DEBUG] [Thread-56706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:29:14.565 [DEBUG] [Thread-56706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:29:14.566 [INFO] [Thread-56706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] client lang: <none>
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] server lang: <none>
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] kex follows: False
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] Compression: none
2025-11-17T15:29:14.569 [DEBUG] [Thread-56706] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:29:14.587 [DEBUG] [Thread-56706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:29:14.587 [DEBUG] [Thread-56706] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:29:14.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:29:14.588 [DEBUG] [Thread-56706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:29:14.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:29:14.590 [DEBUG] [Thread-56706] [transport.py] [_log()] userauth is OK
2025-11-17T15:29:14.591 [DEBUG] [Thread-56706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:29:14.591 [DEBUG] [Thread-56706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:29:14.591 [DEBUG] [Thread-56706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:29:14.591 [DEBUG] [Thread-56706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:29:14.627 [INFO] [Thread-56706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:29:14.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:29:15.206 [DEBUG] [Thread-56706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:29:15.207 [DEBUG] [Thread-56706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:29:15.207 [DEBUG] [Thread-56706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:29:15.248 [DEBUG] [Thread-56706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:29:15.248 [DEBUG] [Thread-56706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:29:15.251 [DEBUG] [Thread-56706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:29:15.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:29:15.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:29:15.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:29:15.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:29:15.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:29:15.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:29:15.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:29:15.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:29:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:29:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.561505 -999.00  +22.90   3.12     21   +0.00 1 1 1 1 1   888    0 23.07 10.98 ----- 3.1 3.1 251.3 6.3 29.7 -26.9 29.4 -28.1 30.3 -23.5 30.8 -27.8
2025-11-17T15:29:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:29:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:29:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.561505
2025-11-17T15:29:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:29:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:29:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:29:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:29:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:29:15.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:28:55', tmtdew=27.56, humidity=15.88, cloud=0.0, wind=8.21, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:28:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:29:15.278 [DEBUG] [Thread-56706] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:29:15.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:29:15.376 [DEBUG] [Thread-56709] [transport.py] [_log()] starting thread (client mode): 0xd0754820
2025-11-17T15:29:15.376 [DEBUG] [Thread-56709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:29:15.392 [DEBUG] [Thread-56709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:29:15.392 [INFO] [Thread-56709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:29:15.400 [DEBUG] [Thread-56709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:29:15.400 [DEBUG] [Thread-56709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:29:15.400 [DEBUG] [Thread-56709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:29:15.400 [DEBUG] [Thread-56709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:29:15.400 [DEBUG] [Thread-56709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:29:15.400 [DEBUG] [Thread-56709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] client lang: <none>
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] server lang: <none>
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] kex follows: False
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:29:15.401 [DEBUG] [Thread-56709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:29:15.402 [DEBUG] [Thread-56709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:29:15.402 [DEBUG] [Thread-56709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:29:15.402 [DEBUG] [Thread-56709] [transport.py] [_log()] Compression: none
2025-11-17T15:29:15.402 [DEBUG] [Thread-56709] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:29:15.460 [DEBUG] [Thread-56709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:29:15.461 [DEBUG] [Thread-56709] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:29:15.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:29:15.462 [DEBUG] [Thread-56709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:29:15.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:29:15.516 [DEBUG] [Thread-56709] [transport.py] [_log()] userauth is OK
2025-11-17T15:29:15.517 [DEBUG] [Thread-56709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:29:15.517 [DEBUG] [Thread-56709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:29:15.517 [DEBUG] [Thread-56709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:29:15.517 [DEBUG] [Thread-56709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:29:15.536 [INFO] [Thread-56709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:29:15.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:29:15.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:29:16.375 [DEBUG] [Thread-56709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:29:16.375 [DEBUG] [Thread-56709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:29:16.423 [DEBUG] [Thread-56709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:29:16.423 [DEBUG] [Thread-56709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:29:16.432 [DEBUG] [Thread-56709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:29:16.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:29:16.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:29:16.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:29:16.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:29:16.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:29:16.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:29:16.468 [DEBUG] [Thread-56709] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:29:18.902 [DEBUG] [Thread-56711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:29:19.561 [DEBUG] [Thread-56712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:29:34.601 [DEBUG] [Thread-56713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:29:46.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:29:46.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:29:46.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:29:47.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 29, 27), 27.27, 16.13, 0.0, 5.63, 23.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:29:47.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:29:27
2025-11-17T15:29:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:29:47.406 [DEBUG] [Thread-56714] [transport.py] [_log()] starting thread (client mode): 0xd070e7a0
2025-11-17T15:29:47.406 [DEBUG] [Thread-56714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:29:47.425 [DEBUG] [Thread-56714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:29:47.426 [INFO] [Thread-56714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:29:47.429 [DEBUG] [Thread-56714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] client lang: <none>
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] server lang: <none>
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] kex follows: False
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] Compression: none
2025-11-17T15:29:47.430 [DEBUG] [Thread-56714] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:29:47.447 [DEBUG] [Thread-56714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:29:47.448 [DEBUG] [Thread-56714] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:29:47.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:29:47.448 [DEBUG] [Thread-56714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:29:47.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:29:47.450 [DEBUG] [Thread-56714] [transport.py] [_log()] userauth is OK
2025-11-17T15:29:47.450 [DEBUG] [Thread-56714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:29:47.451 [DEBUG] [Thread-56714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:29:47.451 [DEBUG] [Thread-56714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:29:47.451 [DEBUG] [Thread-56714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:29:47.475 [INFO] [Thread-56714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:29:47.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:29:48.116 [DEBUG] [Thread-56714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:29:48.117 [DEBUG] [Thread-56714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:29:48.117 [DEBUG] [Thread-56714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:29:48.157 [DEBUG] [Thread-56714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:29:48.157 [DEBUG] [Thread-56714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:29:48.160 [DEBUG] [Thread-56714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:29:48.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:29:48.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:29:48.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:29:48.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:29:48.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:29:48.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:29:48.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:29:48.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:29:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:29:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.561852 -999.00  +23.10   3.09     21   +0.00 1 1 1 1 1   888    0 23.13 12.47 ----- 3.1 3.1 239.2 9.4 29.5 -26.7 29.2 -25.6 29.9 -25.0 30.4 -27.6
2025-11-17T15:29:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:29:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:29:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.561852
2025-11-17T15:29:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:29:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:29:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:29:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:29:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:29:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:29:27', tmtdew=27.27, humidity=16.13, cloud=0.0, wind=5.63, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:29:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:29:48.182 [DEBUG] [Thread-56714] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:29:48.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:29:48.276 [DEBUG] [Thread-56717] [transport.py] [_log()] starting thread (client mode): 0xd07bcd00
2025-11-17T15:29:48.277 [DEBUG] [Thread-56717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:29:48.291 [DEBUG] [Thread-56717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:29:48.291 [INFO] [Thread-56717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:29:48.299 [DEBUG] [Thread-56717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:29:48.299 [DEBUG] [Thread-56717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] client lang: <none>
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] server lang: <none>
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] kex follows: False
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] Compression: none
2025-11-17T15:29:48.300 [DEBUG] [Thread-56717] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:29:48.366 [DEBUG] [Thread-56717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:29:48.366 [DEBUG] [Thread-56717] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:29:48.367 [DEBUG] [Thread-56717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:29:48.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:29:48.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:29:48.428 [DEBUG] [Thread-56717] [transport.py] [_log()] userauth is OK
2025-11-17T15:29:48.428 [DEBUG] [Thread-56717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:29:48.428 [DEBUG] [Thread-56717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:29:48.428 [DEBUG] [Thread-56717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:29:48.428 [DEBUG] [Thread-56717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:29:48.448 [INFO] [Thread-56717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:29:48.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:29:48.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:29:49.323 [DEBUG] [Thread-56717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:29:49.323 [DEBUG] [Thread-56717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:29:49.371 [DEBUG] [Thread-56717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:29:49.371 [DEBUG] [Thread-56717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:29:49.380 [DEBUG] [Thread-56717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:29:49.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:29:49.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:29:49.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:29:49.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:29:49.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:29:49.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:29:49.413 [DEBUG] [Thread-56717] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:29:49.633 [DEBUG] [Thread-56719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:30:04.674 [DEBUG] [Thread-56720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:30:08.912 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:30:08.914 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:30:18.956 [DEBUG] [Thread-56721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:30:19.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:30:19.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:30:19.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:30:19.697 [DEBUG] [Thread-56722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:30:20.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 29, 59), 27.32, 15.78, 0.0, 17.01, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:30:20.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:29:59
2025-11-17T15:30:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:30:20.358 [DEBUG] [Thread-56723] [transport.py] [_log()] starting thread (client mode): 0xd07bd2d0
2025-11-17T15:30:20.358 [DEBUG] [Thread-56723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:30:20.382 [DEBUG] [Thread-56723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:30:20.382 [INFO] [Thread-56723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:30:20.384 [DEBUG] [Thread-56723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:30:20.384 [DEBUG] [Thread-56723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:30:20.384 [DEBUG] [Thread-56723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:30:20.384 [DEBUG] [Thread-56723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:30:20.384 [DEBUG] [Thread-56723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:30:20.384 [DEBUG] [Thread-56723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:30:20.384 [DEBUG] [Thread-56723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:30:20.384 [DEBUG] [Thread-56723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] client lang: <none>
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] server lang: <none>
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] kex follows: False
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:30:20.385 [DEBUG] [Thread-56723] [transport.py] [_log()] Compression: none
2025-11-17T15:30:20.386 [DEBUG] [Thread-56723] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:30:20.405 [DEBUG] [Thread-56723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:30:20.406 [DEBUG] [Thread-56723] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:30:20.407 [DEBUG] [Thread-56723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:30:20.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:30:20.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:30:20.408 [DEBUG] [Thread-56723] [transport.py] [_log()] userauth is OK
2025-11-17T15:30:20.409 [DEBUG] [Thread-56723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:30:20.409 [DEBUG] [Thread-56723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:30:20.409 [DEBUG] [Thread-56723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:30:20.409 [DEBUG] [Thread-56723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:30:20.444 [INFO] [Thread-56723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:30:20.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:30:21.104 [DEBUG] [Thread-56723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:30:21.104 [DEBUG] [Thread-56723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:30:21.105 [DEBUG] [Thread-56723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:30:21.145 [DEBUG] [Thread-56723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:30:21.146 [DEBUG] [Thread-56723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:30:21.149 [DEBUG] [Thread-56723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:30:21.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:30:21.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:30:21.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:30:21.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:30:21.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:30:21.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:30:21.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:30:21.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:30:21.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:30:21.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.562547 -999.00  +23.50  22.26     21   +0.00 1 1 1 1 1   888    0 23.23 15.63 ----- 22.3 22.3 264.6 29.7 29.0 -28.5 29.0 -26.1 29.4 -24.8 29.8 -28.3
2025-11-17T15:30:21.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:30:21.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:30:21.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.562547
2025-11-17T15:30:21.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:30:21.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:30:21.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:30:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:30:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:30:21.175 [DEBUG] [Thread-56723] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:30:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:29:59', tmtdew=27.32, humidity=15.78, cloud=0.0, wind=17.01, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:30:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:30:21.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:30:21.271 [DEBUG] [Thread-56726] [transport.py] [_log()] starting thread (client mode): 0xd07cf5b0
2025-11-17T15:30:21.271 [DEBUG] [Thread-56726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:30:21.286 [DEBUG] [Thread-56726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:30:21.286 [INFO] [Thread-56726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] client lang: <none>
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] server lang: <none>
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] kex follows: False
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:30:21.294 [DEBUG] [Thread-56726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:30:21.295 [DEBUG] [Thread-56726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:30:21.295 [DEBUG] [Thread-56726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:30:21.295 [DEBUG] [Thread-56726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:30:21.295 [DEBUG] [Thread-56726] [transport.py] [_log()] Compression: none
2025-11-17T15:30:21.295 [DEBUG] [Thread-56726] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:30:21.352 [DEBUG] [Thread-56726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:30:21.352 [DEBUG] [Thread-56726] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:30:21.353 [DEBUG] [Thread-56726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:30:21.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:30:21.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:30:21.408 [DEBUG] [Thread-56726] [transport.py] [_log()] userauth is OK
2025-11-17T15:30:21.408 [DEBUG] [Thread-56726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:30:21.408 [DEBUG] [Thread-56726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:30:21.408 [DEBUG] [Thread-56726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:30:21.408 [DEBUG] [Thread-56726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:30:21.428 [INFO] [Thread-56726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:30:21.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:30:21.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:30:22.299 [DEBUG] [Thread-56726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:30:22.299 [DEBUG] [Thread-56726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:30:22.347 [DEBUG] [Thread-56726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:30:22.347 [DEBUG] [Thread-56726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:30:22.357 [DEBUG] [Thread-56726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:30:22.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:30:22.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:30:22.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:30:22.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:30:22.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:30:22.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:30:22.392 [DEBUG] [Thread-56726] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:30:34.730 [DEBUG] [Thread-56728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:30:49.773 [DEBUG] [Thread-56729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:30:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:30:52.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:30:52.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:30:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 30, 31), 27.24, 15.84, 0.0, 22.69, 23.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:30:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:30:31
2025-11-17T15:30:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:30:53.381 [DEBUG] [Thread-56730] [transport.py] [_log()] starting thread (client mode): 0xd31ce5f0
2025-11-17T15:30:53.381 [DEBUG] [Thread-56730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:30:53.401 [DEBUG] [Thread-56730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:30:53.401 [INFO] [Thread-56730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] client lang: <none>
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] server lang: <none>
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] kex follows: False
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] Compression: none
2025-11-17T15:30:53.404 [DEBUG] [Thread-56730] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:30:53.422 [DEBUG] [Thread-56730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:30:53.422 [DEBUG] [Thread-56730] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:30:53.422 [DEBUG] [Thread-56730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:30:53.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:30:53.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:30:53.423 [DEBUG] [Thread-56730] [transport.py] [_log()] userauth is OK
2025-11-17T15:30:53.423 [DEBUG] [Thread-56730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:30:53.423 [DEBUG] [Thread-56730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:30:53.423 [DEBUG] [Thread-56730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:30:53.423 [DEBUG] [Thread-56730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:30:53.433 [INFO] [Thread-56730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:30:53.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:30:54.064 [DEBUG] [Thread-56730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:30:54.064 [DEBUG] [Thread-56730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:30:54.064 [DEBUG] [Thread-56730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:30:54.105 [DEBUG] [Thread-56730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:30:54.105 [DEBUG] [Thread-56730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:30:54.107 [DEBUG] [Thread-56730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:30:54.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:30:54.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:30:54.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:30:54.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:30:54.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:30:54.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:30:54.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:30:54.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:30:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:30:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.562894 -999.00  +23.10  22.21     21   -0.20 1 1 1 1 1   888    0 23.53 20.83 ----- 22.2 22.2 260.8 27.1 28.7 -27.4 28.8 -25.7 28.9 -24.4 29.1 -27.6
2025-11-17T15:30:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:30:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:30:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.562894
2025-11-17T15:30:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:30:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:30:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:30:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:30:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:30:54.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:30:31', tmtdew=27.24, humidity=15.84, cloud=0.0, wind=22.69, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:30:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:30:54.128 [DEBUG] [Thread-56730] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:30:54.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:30:54.214 [DEBUG] [Thread-56733] [transport.py] [_log()] starting thread (client mode): 0xd078cb20
2025-11-17T15:30:54.214 [DEBUG] [Thread-56733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:30:54.230 [DEBUG] [Thread-56733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:30:54.230 [INFO] [Thread-56733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] client lang: <none>
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] server lang: <none>
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] kex follows: False
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] Compression: none
2025-11-17T15:30:54.237 [DEBUG] [Thread-56733] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:30:54.294 [DEBUG] [Thread-56733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:30:54.295 [DEBUG] [Thread-56733] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:30:54.295 [DEBUG] [Thread-56733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:30:54.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:30:54.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:30:54.351 [DEBUG] [Thread-56733] [transport.py] [_log()] userauth is OK
2025-11-17T15:30:54.352 [DEBUG] [Thread-56733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:30:54.352 [DEBUG] [Thread-56733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:30:54.352 [DEBUG] [Thread-56733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:30:54.352 [DEBUG] [Thread-56733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:30:54.370 [INFO] [Thread-56733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:30:54.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:30:54.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:30:55.235 [DEBUG] [Thread-56733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:30:55.235 [DEBUG] [Thread-56733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:30:55.283 [DEBUG] [Thread-56733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:30:55.283 [DEBUG] [Thread-56733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:30:55.291 [DEBUG] [Thread-56733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:30:55.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:30:55.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:30:55.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:30:55.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:30:55.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:30:55.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:30:55.322 [DEBUG] [Thread-56733] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:31:04.798 [DEBUG] [Thread-56735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:31:09.062 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:31:09.063 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:31:19.008 [DEBUG] [Thread-56736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:31:19.830 [DEBUG] [Thread-56737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:31:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:31:25.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:31:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:31:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 31, 3), 27.3, 15.81, 0.0, 27.54, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:31:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:31:03
2025-11-17T15:31:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:31:26.267 [DEBUG] [Thread-56738] [transport.py] [_log()] starting thread (client mode): 0xd31ccdc0
2025-11-17T15:31:26.267 [DEBUG] [Thread-56738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:31:26.287 [DEBUG] [Thread-56738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:31:26.287 [INFO] [Thread-56738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:31:26.290 [DEBUG] [Thread-56738] [transport.py] [_log()] client lang: <none>
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] server lang: <none>
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] kex follows: False
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] Compression: none
2025-11-17T15:31:26.291 [DEBUG] [Thread-56738] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:31:26.309 [DEBUG] [Thread-56738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:31:26.310 [DEBUG] [Thread-56738] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:31:26.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:31:26.311 [DEBUG] [Thread-56738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:31:26.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:31:26.313 [DEBUG] [Thread-56738] [transport.py] [_log()] userauth is OK
2025-11-17T15:31:26.313 [DEBUG] [Thread-56738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:31:26.313 [DEBUG] [Thread-56738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:31:26.313 [DEBUG] [Thread-56738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:31:26.313 [DEBUG] [Thread-56738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:31:26.338 [INFO] [Thread-56738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:31:26.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:31:26.967 [DEBUG] [Thread-56738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:31:26.967 [DEBUG] [Thread-56738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:31:26.968 [DEBUG] [Thread-56738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:31:27.008 [DEBUG] [Thread-56738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:31:27.008 [DEBUG] [Thread-56738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:31:27.011 [DEBUG] [Thread-56738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:31:27.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:31:27.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:31:27.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:31:27.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:31:27.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:31:27.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:31:27.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.563241 -999.00  +22.50  17.91     21   -0.20 1 1 1 1 1   888    0 23.26 21.86 ----- 17.9 17.9 264.8 31.4 28.4 -26.5 28.4 -25.1 28.6 -24.0 28.8 -25.4
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.563241
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:31:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:31:03', tmtdew=27.3, humidity=15.81, cloud=0.0, wind=27.54, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:31:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:31:27.032 [DEBUG] [Thread-56738] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:31:27.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:31:27.115 [DEBUG] [Thread-56741] [transport.py] [_log()] starting thread (client mode): 0xd31cda50
2025-11-17T15:31:27.115 [DEBUG] [Thread-56741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:31:27.130 [DEBUG] [Thread-56741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:31:27.130 [INFO] [Thread-56741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:31:27.137 [DEBUG] [Thread-56741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] client lang: <none>
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] server lang: <none>
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] kex follows: False
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:31:27.138 [DEBUG] [Thread-56741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:31:27.139 [DEBUG] [Thread-56741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:31:27.139 [DEBUG] [Thread-56741] [transport.py] [_log()] Compression: none
2025-11-17T15:31:27.139 [DEBUG] [Thread-56741] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:31:27.195 [DEBUG] [Thread-56741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:31:27.195 [DEBUG] [Thread-56741] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:31:27.195 [DEBUG] [Thread-56741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:31:27.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:31:27.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:31:27.252 [DEBUG] [Thread-56741] [transport.py] [_log()] userauth is OK
2025-11-17T15:31:27.252 [DEBUG] [Thread-56741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:31:27.252 [DEBUG] [Thread-56741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:31:27.252 [DEBUG] [Thread-56741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:31:27.253 [DEBUG] [Thread-56741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:31:27.272 [INFO] [Thread-56741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:31:27.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:31:27.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:31:28.165 [DEBUG] [Thread-56741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:31:28.165 [DEBUG] [Thread-56741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:31:28.212 [DEBUG] [Thread-56741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:31:28.212 [DEBUG] [Thread-56741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:31:28.221 [DEBUG] [Thread-56741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:31:28.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:31:28.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:31:28.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:31:28.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:31:28.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:31:28.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:31:28.257 [DEBUG] [Thread-56741] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:31:34.859 [DEBUG] [Thread-56743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:31:49.901 [DEBUG] [Thread-56744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:31:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:31:58.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:31: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
2025-11-17T15:31:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 31, 35), 27.03, 16.08, 0.0, 23.63, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:31:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:31:35
2025-11-17T15:31:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:31:59.189 [DEBUG] [Thread-56745] [transport.py] [_log()] starting thread (client mode): 0xd0757100
2025-11-17T15:31:59.189 [DEBUG] [Thread-56745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:31:59.209 [DEBUG] [Thread-56745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:31:59.209 [INFO] [Thread-56745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] client lang: <none>
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] server lang: <none>
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] kex follows: False
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] Compression: none
2025-11-17T15:31:59.213 [DEBUG] [Thread-56745] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:31:59.230 [DEBUG] [Thread-56745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:31:59.231 [DEBUG] [Thread-56745] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:31:59.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:31:59.232 [DEBUG] [Thread-56745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:31:59.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:31:59.234 [DEBUG] [Thread-56745] [transport.py] [_log()] userauth is OK
2025-11-17T15:31:59.234 [DEBUG] [Thread-56745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:31:59.234 [DEBUG] [Thread-56745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:31:59.235 [DEBUG] [Thread-56745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:31:59.235 [DEBUG] [Thread-56745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:31:59.255 [INFO] [Thread-56745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:31:59.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:31:59.893 [DEBUG] [Thread-56745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:31:59.893 [DEBUG] [Thread-56745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:31:59.894 [DEBUG] [Thread-56745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:31:59.934 [DEBUG] [Thread-56745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:31:59.935 [DEBUG] [Thread-56745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:31:59.938 [DEBUG] [Thread-56745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:31:59.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:31:59.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:31:59.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:31:59.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:31:59.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:31:59.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:31:59.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:31:59.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:31:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:31:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.563588 -999.00  +22.30  12.43     22   -0.20 1 1 1 1 1   888    0 23.55 23.47 ----- 12.4 12.4 255.8 16.6 28.4 -25.2 28.4 -23.8 28.3 -22.5 28.6 -24.1
2025-11-17T15:31:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:31:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:31:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.563588
2025-11-17T15:31:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:31:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:31:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:31:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:31:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:31:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:31:35', tmtdew=27.03, humidity=16.08, cloud=0.0, wind=23.63, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:31:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:31:59.965 [DEBUG] [Thread-56745] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:32:00.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:32:00.062 [DEBUG] [Thread-56748] [transport.py] [_log()] starting thread (client mode): 0xd0721900
2025-11-17T15:32:00.062 [DEBUG] [Thread-56748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:32:00.078 [DEBUG] [Thread-56748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:32:00.078 [INFO] [Thread-56748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:32:00.085 [DEBUG] [Thread-56748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] client lang: <none>
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] server lang: <none>
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] kex follows: False
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:32:00.086 [DEBUG] [Thread-56748] [transport.py] [_log()] Compression: none
2025-11-17T15:32:00.087 [DEBUG] [Thread-56748] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:32:00.147 [DEBUG] [Thread-56748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:32:00.148 [DEBUG] [Thread-56748] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:32:00.148 [DEBUG] [Thread-56748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:32:00.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:32:00.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:32:00.204 [DEBUG] [Thread-56748] [transport.py] [_log()] userauth is OK
2025-11-17T15:32:00.204 [DEBUG] [Thread-56748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:32:00.204 [DEBUG] [Thread-56748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:32:00.204 [DEBUG] [Thread-56748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:32:00.204 [DEBUG] [Thread-56748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:32:00.224 [INFO] [Thread-56748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:32:00.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:32:00.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:32:01.105 [DEBUG] [Thread-56748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:32:01.106 [DEBUG] [Thread-56748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:32:01.153 [DEBUG] [Thread-56748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:32:01.153 [DEBUG] [Thread-56748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:32:01.162 [DEBUG] [Thread-56748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:32:01.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:32:01.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:32:01.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:32:01.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:32:01.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:32:01.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:32:01.197 [DEBUG] [Thread-56748] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:32:04.933 [DEBUG] [Thread-56750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:32:09.204 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:32:09.205 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:32:19.057 [DEBUG] [Thread-56751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:32:19.981 [DEBUG] [Thread-56752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:32:31.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:32:31.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:32:31.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:32:31.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 32, 7), 27.15, 15.96, 0.0, 19.39, 22.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:32:31.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:32:07
2025-11-17T15:32:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:32:32.127 [DEBUG] [Thread-56753] [transport.py] [_log()] starting thread (client mode): 0xd078fd90
2025-11-17T15:32:32.128 [DEBUG] [Thread-56753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:32:32.147 [DEBUG] [Thread-56753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:32:32.148 [INFO] [Thread-56753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:32:32.151 [DEBUG] [Thread-56753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:32:32.151 [DEBUG] [Thread-56753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:32:32.151 [DEBUG] [Thread-56753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:32:32.151 [DEBUG] [Thread-56753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:32:32.151 [DEBUG] [Thread-56753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:32:32.151 [DEBUG] [Thread-56753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:32:32.151 [DEBUG] [Thread-56753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:32:32.151 [DEBUG] [Thread-56753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] client lang: <none>
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] server lang: <none>
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] kex follows: False
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] Compression: none
2025-11-17T15:32:32.152 [DEBUG] [Thread-56753] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:32:32.168 [DEBUG] [Thread-56753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:32:32.169 [DEBUG] [Thread-56753] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:32:32.169 [DEBUG] [Thread-56753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:32:32.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:32:32.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:32:32.171 [DEBUG] [Thread-56753] [transport.py] [_log()] userauth is OK
2025-11-17T15:32:32.172 [DEBUG] [Thread-56753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:32:32.172 [DEBUG] [Thread-56753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:32:32.172 [DEBUG] [Thread-56753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:32:32.172 [DEBUG] [Thread-56753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:32:32.190 [INFO] [Thread-56753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:32:32.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:32:32.784 [DEBUG] [Thread-56753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:32:32.784 [DEBUG] [Thread-56753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:32:32.784 [DEBUG] [Thread-56753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:32:32.824 [DEBUG] [Thread-56753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:32:32.824 [DEBUG] [Thread-56753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:32:32.827 [DEBUG] [Thread-56753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:32:32.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:32:32.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:32:32.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:32:32.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:32:32.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:32:32.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:32:32.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:32:32.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:32:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:32:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.563935 -999.00  +22.50  14.34     22   -0.10 1 2 1 1 1   888    0 23.91 23.99 ----- 14.3 14.3 270.4 18.7 28.4 -23.3 28.4 -22.6 28.2 -21.9 28.6 -21.7
2025-11-17T15:32:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:32:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:32:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.563935
2025-11-17T15:32:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:32:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:32:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:32:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:32:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:32:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:32:07', tmtdew=27.15, humidity=15.96, cloud=0.0, wind=19.39, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:32:03.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:32:32.854 [DEBUG] [Thread-56753] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:32:32.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:32:32.950 [DEBUG] [Thread-56756] [transport.py] [_log()] starting thread (client mode): 0xd07bcd00
2025-11-17T15:32:32.950 [DEBUG] [Thread-56756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:32:32.968 [DEBUG] [Thread-56756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:32:32.968 [INFO] [Thread-56756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:32:32.977 [DEBUG] [Thread-56756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:32:32.977 [DEBUG] [Thread-56756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:32:32.977 [DEBUG] [Thread-56756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:32:32.977 [DEBUG] [Thread-56756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:32:32.977 [DEBUG] [Thread-56756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:32:32.977 [DEBUG] [Thread-56756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:32:32.977 [DEBUG] [Thread-56756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] client lang: <none>
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] server lang: <none>
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] kex follows: False
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:32:32.978 [DEBUG] [Thread-56756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:32:32.979 [DEBUG] [Thread-56756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:32:32.979 [DEBUG] [Thread-56756] [transport.py] [_log()] Compression: none
2025-11-17T15:32:32.979 [DEBUG] [Thread-56756] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:32:33.040 [DEBUG] [Thread-56756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:32:33.041 [DEBUG] [Thread-56756] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:32:33.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:32:33.042 [DEBUG] [Thread-56756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:32:33.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:32:33.096 [DEBUG] [Thread-56756] [transport.py] [_log()] userauth is OK
2025-11-17T15:32:33.096 [DEBUG] [Thread-56756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:32:33.097 [DEBUG] [Thread-56756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:32:33.097 [DEBUG] [Thread-56756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:32:33.097 [DEBUG] [Thread-56756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:32:33.116 [INFO] [Thread-56756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:32:33.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:32:33.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:32:33.969 [DEBUG] [Thread-56756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:32:33.969 [DEBUG] [Thread-56756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:32:34.017 [DEBUG] [Thread-56756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:32:34.017 [DEBUG] [Thread-56756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:32:34.026 [DEBUG] [Thread-56756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:32:34.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:32:34.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:32:34.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:32:34.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:32:34.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:32:34.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:32:34.060 [DEBUG] [Thread-56756] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:32:35.014 [DEBUG] [Thread-56758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:32:50.065 [DEBUG] [Thread-56759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:33:04.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:33:04.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:33:04.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:33:04.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 32, 39), 27.41, 15.55, 0.0, 19.99, 22.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:33:04.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:32:39
2025-11-17T15:33:04.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:33:04.994 [DEBUG] [Thread-56760] [transport.py] [_log()] starting thread (client mode): 0xd3162320
2025-11-17T15:33:04.995 [DEBUG] [Thread-56760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:33:05.015 [DEBUG] [Thread-56760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:33:05.015 [INFO] [Thread-56760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:33:05.018 [DEBUG] [Thread-56760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:33:05.018 [DEBUG] [Thread-56760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:33:05.018 [DEBUG] [Thread-56760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:33:05.018 [DEBUG] [Thread-56760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:33:05.018 [DEBUG] [Thread-56760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] client lang: <none>
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] server lang: <none>
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] kex follows: False
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] Compression: none
2025-11-17T15:33:05.019 [DEBUG] [Thread-56760] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:33:05.036 [DEBUG] [Thread-56760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:33:05.036 [DEBUG] [Thread-56760] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:33:05.037 [DEBUG] [Thread-56760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:33:05.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:33:05.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:33:05.038 [DEBUG] [Thread-56760] [transport.py] [_log()] userauth is OK
2025-11-17T15:33:05.039 [DEBUG] [Thread-56760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:33:05.039 [DEBUG] [Thread-56760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:33:05.039 [DEBUG] [Thread-56760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:33:05.039 [DEBUG] [Thread-56760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:33:05.056 [INFO] [Thread-56760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:33:05.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:33:05.092 [DEBUG] [Thread-56762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:33:05.718 [DEBUG] [Thread-56760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:33:05.718 [DEBUG] [Thread-56760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:33:05.719 [DEBUG] [Thread-56760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:33:05.760 [DEBUG] [Thread-56760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:33:05.760 [DEBUG] [Thread-56760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:33:05.763 [DEBUG] [Thread-56760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:33:05.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:33:05.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:33:05.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:33:05.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:33:05.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:33:05.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:33:05.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:33:05.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:33:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:33:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.564283 -999.00  +23.10  20.74     21   -0.00 1 2 1 1 1   888    0 23.99 26.38 ----- 20.7 20.7 254.4 24.6 28.6 -21.8 28.4 -21.4 28.2 -19.7 28.8 -19.9
2025-11-17T15:33:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:33:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:33:05.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.564283
2025-11-17T15:33:05.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:33:05.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:33:05.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:33:05.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:33:05.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:33:05.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:32:39', tmtdew=27.41, humidity=15.55, cloud=0.0, wind=19.99, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:32:34.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:33:05.797 [DEBUG] [Thread-56760] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:33:05.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:33:05.896 [DEBUG] [Thread-56764] [transport.py] [_log()] starting thread (client mode): 0xd078e800
2025-11-17T15:33:05.896 [DEBUG] [Thread-56764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:33:05.914 [DEBUG] [Thread-56764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:33:05.914 [INFO] [Thread-56764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:33:05.925 [DEBUG] [Thread-56764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:33:05.925 [DEBUG] [Thread-56764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:33:05.925 [DEBUG] [Thread-56764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:33:05.925 [DEBUG] [Thread-56764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] client lang: <none>
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] server lang: <none>
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] kex follows: False
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:33:05.926 [DEBUG] [Thread-56764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:33:05.927 [DEBUG] [Thread-56764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:33:05.927 [DEBUG] [Thread-56764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:33:05.927 [DEBUG] [Thread-56764] [transport.py] [_log()] Compression: none
2025-11-17T15:33:05.927 [DEBUG] [Thread-56764] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:33:05.991 [DEBUG] [Thread-56764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:33:05.991 [DEBUG] [Thread-56764] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:33:05.991 [DEBUG] [Thread-56764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:33:05.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:33:05.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:33:06.051 [DEBUG] [Thread-56764] [transport.py] [_log()] userauth is OK
2025-11-17T15:33:06.052 [DEBUG] [Thread-56764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:33:06.052 [DEBUG] [Thread-56764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:33:06.052 [DEBUG] [Thread-56764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:33:06.052 [DEBUG] [Thread-56764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:33:06.076 [INFO] [Thread-56764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:33:06.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:33:06.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:33:06.939 [DEBUG] [Thread-56764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:33:06.939 [DEBUG] [Thread-56764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:33:06.987 [DEBUG] [Thread-56764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:33:06.987 [DEBUG] [Thread-56764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:33:06.996 [DEBUG] [Thread-56764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:33:07.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:33:07.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:33:07.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:33:07.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:33:07.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:33:07.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:33:07.031 [DEBUG] [Thread-56764] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:33:09.347 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:33:09.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:33:19.108 [DEBUG] [Thread-56766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:33:20.118 [DEBUG] [Thread-56767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:33:35.158 [DEBUG] [Thread-56768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:33:37.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:33:37.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:33:37.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:33:37.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 33, 11), 27.44, 15.53, 0.0, 23.34, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:33:37.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:33:11
2025-11-17T15:33:37.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:33:37.967 [DEBUG] [Thread-56769] [transport.py] [_log()] starting thread (client mode): 0xd078fd00
2025-11-17T15:33:37.967 [DEBUG] [Thread-56769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:33:37.987 [DEBUG] [Thread-56769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:33:37.987 [INFO] [Thread-56769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] client lang: <none>
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] server lang: <none>
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] kex follows: False
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] Compression: none
2025-11-17T15:33:37.991 [DEBUG] [Thread-56769] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:33:38.008 [DEBUG] [Thread-56769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:33:38.009 [DEBUG] [Thread-56769] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:33:38.009 [DEBUG] [Thread-56769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:33:38.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:33:38.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:33:38.052 [DEBUG] [Thread-56769] [transport.py] [_log()] userauth is OK
2025-11-17T15:33:38.053 [DEBUG] [Thread-56769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:33:38.053 [DEBUG] [Thread-56769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:33:38.053 [DEBUG] [Thread-56769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:33:38.053 [DEBUG] [Thread-56769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:33:38.084 [INFO] [Thread-56769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:33:38.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:33:38.674 [DEBUG] [Thread-56769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:33:38.674 [DEBUG] [Thread-56769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:33:38.675 [DEBUG] [Thread-56769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:33:38.716 [DEBUG] [Thread-56769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:33:38.717 [DEBUG] [Thread-56769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:33:38.719 [DEBUG] [Thread-56769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:33:38.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:33:38.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:33:38.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:33:38.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:33:38.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:33:38.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:33:38.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:33:38.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:33:38.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:33:38.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.564630 -999.00  +23.00  18.78     21   -0.30 1 2 1 1 1   888    0 23.78 26.44 ----- 18.8 18.8 275.6 26.0 28.4 -23.8 28.5 -22.7 28.6 -22.4 28.7 -22.3
2025-11-17T15:33:38.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:33:38.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:33:38.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.564630
2025-11-17T15:33:38.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:33:38.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:33:38.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:33:38.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:33:38.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:33:38.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:33:11', tmtdew=27.44, humidity=15.53, cloud=0.0, wind=23.34, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:33:04.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:33:38.745 [DEBUG] [Thread-56769] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:33:38.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:33:38.844 [DEBUG] [Thread-56772] [transport.py] [_log()] starting thread (client mode): 0xd078fd90
2025-11-17T15:33:38.844 [DEBUG] [Thread-56772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:33:38.863 [DEBUG] [Thread-56772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:33:38.863 [INFO] [Thread-56772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:33:38.870 [DEBUG] [Thread-56772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:33:38.870 [DEBUG] [Thread-56772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] client lang: <none>
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] server lang: <none>
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] kex follows: False
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:33:38.871 [DEBUG] [Thread-56772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:33:38.872 [DEBUG] [Thread-56772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:33:38.872 [DEBUG] [Thread-56772] [transport.py] [_log()] Compression: none
2025-11-17T15:33:38.872 [DEBUG] [Thread-56772] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:33:38.929 [DEBUG] [Thread-56772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:33:38.929 [DEBUG] [Thread-56772] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:33:38.929 [DEBUG] [Thread-56772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:33:38.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:33:38.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:33:38.985 [DEBUG] [Thread-56772] [transport.py] [_log()] userauth is OK
2025-11-17T15:33:38.985 [DEBUG] [Thread-56772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:33:38.985 [DEBUG] [Thread-56772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:33:38.985 [DEBUG] [Thread-56772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:33:38.985 [DEBUG] [Thread-56772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:33:39.004 [INFO] [Thread-56772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:33:39.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:33:39.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:33:39.849 [DEBUG] [Thread-56772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:33:39.849 [DEBUG] [Thread-56772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:33:39.897 [DEBUG] [Thread-56772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:33:39.897 [DEBUG] [Thread-56772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:33:39.908 [DEBUG] [Thread-56772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:33:39.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:33:39.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:33:39.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:33:39.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:33:39.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:33:39.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:33:39.947 [DEBUG] [Thread-56772] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:33:50.189 [DEBUG] [Thread-56774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:34:05.230 [DEBUG] [Thread-56775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:34:09.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:34:09.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:34:09.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:34:09.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:34:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:34:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 33, 43), 27.21, 16.0, 0.0, 21.26, 22.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:34:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:33:43
2025-11-17T15:34:10.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:34:10.866 [DEBUG] [Thread-56776] [transport.py] [_log()] starting thread (client mode): 0xd0777430
2025-11-17T15:34:10.866 [DEBUG] [Thread-56776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:34:10.884 [DEBUG] [Thread-56776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:34:10.884 [INFO] [Thread-56776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] client lang: <none>
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] server lang: <none>
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] kex follows: False
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] Compression: none
2025-11-17T15:34:10.886 [DEBUG] [Thread-56776] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:34:10.895 [DEBUG] [Thread-56776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:34:10.896 [DEBUG] [Thread-56776] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:34:10.896 [DEBUG] [Thread-56776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:34:10.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:34:10.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:34:10.896 [DEBUG] [Thread-56776] [transport.py] [_log()] userauth is OK
2025-11-17T15:34:10.896 [DEBUG] [Thread-56776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:34:10.896 [DEBUG] [Thread-56776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:34:10.896 [DEBUG] [Thread-56776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:34:10.896 [DEBUG] [Thread-56776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:34:10.905 [INFO] [Thread-56776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:34:10.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:34:11.550 [DEBUG] [Thread-56776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:34:11.551 [DEBUG] [Thread-56776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:34:11.551 [DEBUG] [Thread-56776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:34:11.591 [DEBUG] [Thread-56776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:34:11.591 [DEBUG] [Thread-56776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:34:11.594 [DEBUG] [Thread-56776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:34:11.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:34:11.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:34:11.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:34:11.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:34:11.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:34:11.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:34:11.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:34:11.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:34:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:34:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.564977 -999.00  +22.90  20.80     21   -0.20 1 2 1 1 1   888    0 23.53 30.00 ----- 20.8 20.8 267.8 23.2 28.2 -25.6 28.3 -23.7 28.4 -20.8 28.4 -25.1
2025-11-17T15:34:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:34:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:34:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.564977
2025-11-17T15:34:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:34:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:34:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:34:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:34:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:34:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:33:43', tmtdew=27.21, humidity=16.0, cloud=0.0, wind=21.26, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:33:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:34:11.620 [DEBUG] [Thread-56776] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:34:11.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:34:11.715 [DEBUG] [Thread-56779] [transport.py] [_log()] starting thread (client mode): 0xd07757b0
2025-11-17T15:34:11.716 [DEBUG] [Thread-56779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:34:11.733 [DEBUG] [Thread-56779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:34:11.733 [INFO] [Thread-56779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:34:11.740 [DEBUG] [Thread-56779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] client lang: <none>
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] server lang: <none>
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] kex follows: False
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:34:11.741 [DEBUG] [Thread-56779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:34:11.742 [DEBUG] [Thread-56779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:34:11.742 [DEBUG] [Thread-56779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:34:11.742 [DEBUG] [Thread-56779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:34:11.742 [DEBUG] [Thread-56779] [transport.py] [_log()] Compression: none
2025-11-17T15:34:11.742 [DEBUG] [Thread-56779] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:34:11.797 [DEBUG] [Thread-56779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:34:11.797 [DEBUG] [Thread-56779] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:34:11.798 [DEBUG] [Thread-56779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:34:11.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:34:11.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:34:11.853 [DEBUG] [Thread-56779] [transport.py] [_log()] userauth is OK
2025-11-17T15:34:11.853 [DEBUG] [Thread-56779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:34:11.853 [DEBUG] [Thread-56779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:34:11.853 [DEBUG] [Thread-56779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:34:11.853 [DEBUG] [Thread-56779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:34:11.876 [INFO] [Thread-56779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:34:11.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:34:11.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:34:12.742 [DEBUG] [Thread-56779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:34:12.743 [DEBUG] [Thread-56779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:34:12.790 [DEBUG] [Thread-56779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:34:12.790 [DEBUG] [Thread-56779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:34:12.800 [DEBUG] [Thread-56779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:34:12.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:34:12.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:34:12.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:34:12.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:34:12.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:34:12.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:34:12.836 [DEBUG] [Thread-56779] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:34:19.160 [DEBUG] [Thread-56781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:34:20.257 [DEBUG] [Thread-56782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:34:35.310 [DEBUG] [Thread-56783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:34:42.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:34:42.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:34:42.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:34:43.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 34, 15), 27.18, 16.01, 0.0, 20.1, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:34:43.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:34:15
2025-11-17T15:34:43.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:34:43.794 [DEBUG] [Thread-56784] [transport.py] [_log()] starting thread (client mode): 0xd31ee830
2025-11-17T15:34:43.794 [DEBUG] [Thread-56784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:34:43.814 [DEBUG] [Thread-56784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:34:43.814 [INFO] [Thread-56784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] client lang: <none>
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] server lang: <none>
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] kex follows: False
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] Compression: none
2025-11-17T15:34:43.817 [DEBUG] [Thread-56784] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:34:43.832 [DEBUG] [Thread-56784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:34:43.833 [DEBUG] [Thread-56784] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:34:43.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:34:43.833 [DEBUG] [Thread-56784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:34:43.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:34:43.834 [DEBUG] [Thread-56784] [transport.py] [_log()] userauth is OK
2025-11-17T15:34:43.834 [DEBUG] [Thread-56784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:34:43.834 [DEBUG] [Thread-56784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:34:43.834 [DEBUG] [Thread-56784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:34:43.834 [DEBUG] [Thread-56784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:34:43.843 [INFO] [Thread-56784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:34:43.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:34:44.487 [DEBUG] [Thread-56784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:34:44.487 [DEBUG] [Thread-56784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:34:44.487 [DEBUG] [Thread-56784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:34:44.528 [DEBUG] [Thread-56784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:34:44.528 [DEBUG] [Thread-56784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:34:44.530 [DEBUG] [Thread-56784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:34:44.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:34:44.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:34:44.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:34:44.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:34:44.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:34:44.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:34:44.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.565672 -999.00  +22.70  19.03     21   -0.30 1 2 1 1 1   888    0 23.91 34.22 ----- 19.0 19.0 236.8 25.9 27.8 -26.9 27.9 -23.3 27.9 -22.3 27.9 -25.6
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.565672
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:34:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:34:15', tmtdew=27.18, humidity=16.01, cloud=0.0, wind=20.1, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:34:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:34:44.548 [DEBUG] [Thread-56784] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:34:44.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:34:44.632 [DEBUG] [Thread-56787] [transport.py] [_log()] starting thread (client mode): 0xd31ec9a0
2025-11-17T15:34:44.632 [DEBUG] [Thread-56787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:34:44.646 [DEBUG] [Thread-56787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:34:44.646 [INFO] [Thread-56787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:34:44.653 [DEBUG] [Thread-56787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] client lang: <none>
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] server lang: <none>
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] kex follows: False
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] Compression: none
2025-11-17T15:34:44.654 [DEBUG] [Thread-56787] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:34:44.716 [DEBUG] [Thread-56787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:34:44.716 [DEBUG] [Thread-56787] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:34:44.716 [DEBUG] [Thread-56787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:34:44.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:34:44.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:34:44.773 [DEBUG] [Thread-56787] [transport.py] [_log()] userauth is OK
2025-11-17T15:34:44.774 [DEBUG] [Thread-56787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:34:44.774 [DEBUG] [Thread-56787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:34:44.774 [DEBUG] [Thread-56787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:34:44.774 [DEBUG] [Thread-56787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:34:44.788 [INFO] [Thread-56787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:34:44.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:34:44.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:34:45.632 [DEBUG] [Thread-56787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:34:45.632 [DEBUG] [Thread-56787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:34:45.680 [DEBUG] [Thread-56787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:34:45.680 [DEBUG] [Thread-56787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:34:45.688 [DEBUG] [Thread-56787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:34:45.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:34:45.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:34:45.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:34:45.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:34:45.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:34:45.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:34:45.723 [DEBUG] [Thread-56787] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:34:50.338 [DEBUG] [Thread-56789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:35:05.378 [DEBUG] [Thread-56790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:35:09.632 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:35:09.633 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:35:15.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:35:15.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:35:15.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:35:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 34, 47), 27.13, 16.1, 0.0, 18.86, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:35:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:34:47
2025-11-17T15:35:16.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:35:16.657 [DEBUG] [Thread-56791] [transport.py] [_log()] starting thread (client mode): 0xd0777940
2025-11-17T15:35:16.657 [DEBUG] [Thread-56791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:35:16.677 [DEBUG] [Thread-56791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:35:16.677 [INFO] [Thread-56791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:35:16.678 [DEBUG] [Thread-56791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] client lang: <none>
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] server lang: <none>
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] kex follows: False
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:35:16.679 [DEBUG] [Thread-56791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:35:16.680 [DEBUG] [Thread-56791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:35:16.680 [DEBUG] [Thread-56791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:35:16.680 [DEBUG] [Thread-56791] [transport.py] [_log()] Compression: none
2025-11-17T15:35:16.680 [DEBUG] [Thread-56791] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:35:16.691 [DEBUG] [Thread-56791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:35:16.691 [DEBUG] [Thread-56791] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:35:16.692 [DEBUG] [Thread-56791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:35:16.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:35:16.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:35:16.694 [DEBUG] [Thread-56791] [transport.py] [_log()] userauth is OK
2025-11-17T15:35:16.694 [DEBUG] [Thread-56791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:35:16.694 [DEBUG] [Thread-56791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:35:16.694 [DEBUG] [Thread-56791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:35:16.694 [DEBUG] [Thread-56791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:35:16.715 [INFO] [Thread-56791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:35:16.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:35:17.325 [DEBUG] [Thread-56791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:35:17.326 [DEBUG] [Thread-56791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:35:17.326 [DEBUG] [Thread-56791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:35:17.366 [DEBUG] [Thread-56791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:35:17.367 [DEBUG] [Thread-56791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:35:17.369 [DEBUG] [Thread-56791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:35:17.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:35:17.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:35:17.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:35:17.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:35:17.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:35:17.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:35:17.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:35:17.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:35:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:35:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.566019 -999.00  +22.50  14.40     21   -0.40 1 2 1 1 1   888    0 23.72 32.85 ----- 14.4 14.4 243.0 25.7 27.6 -25.1 27.7 -23.1 27.7 -22.0 27.8 -24.7
2025-11-17T15:35:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:35:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:35:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.566019
2025-11-17T15:35:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:35:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:35:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:35:17.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:35:17.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:35:17.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:34:47', tmtdew=27.13, humidity=16.1, cloud=0.0, wind=18.86, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:35:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:35:17.395 [DEBUG] [Thread-56791] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:35:17.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:35:17.492 [DEBUG] [Thread-56794] [transport.py] [_log()] starting thread (client mode): 0xd07bfee0
2025-11-17T15:35:17.492 [DEBUG] [Thread-56794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:35:17.511 [DEBUG] [Thread-56794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:35:17.512 [INFO] [Thread-56794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:35:17.519 [DEBUG] [Thread-56794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:35:17.519 [DEBUG] [Thread-56794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:35:17.519 [DEBUG] [Thread-56794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:35:17.519 [DEBUG] [Thread-56794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:35:17.519 [DEBUG] [Thread-56794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:35:17.519 [DEBUG] [Thread-56794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:35:17.519 [DEBUG] [Thread-56794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:35:17.519 [DEBUG] [Thread-56794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] client lang: <none>
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] server lang: <none>
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] kex follows: False
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] Compression: none
2025-11-17T15:35:17.520 [DEBUG] [Thread-56794] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:35:17.582 [DEBUG] [Thread-56794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:35:17.582 [DEBUG] [Thread-56794] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:35:17.583 [DEBUG] [Thread-56794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:35:17.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:35:17.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:35:17.638 [DEBUG] [Thread-56794] [transport.py] [_log()] userauth is OK
2025-11-17T15:35:17.638 [DEBUG] [Thread-56794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:35:17.638 [DEBUG] [Thread-56794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:35:17.638 [DEBUG] [Thread-56794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:35:17.638 [DEBUG] [Thread-56794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:35:17.659 [INFO] [Thread-56794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:35:17.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:35:17.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:35:18.531 [DEBUG] [Thread-56794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:35:18.531 [DEBUG] [Thread-56794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:35:18.578 [DEBUG] [Thread-56794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:35:18.578 [DEBUG] [Thread-56794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:35:18.587 [DEBUG] [Thread-56794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:35:18.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:35:18.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:35:18.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:35:18.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:35:18.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:35:18.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:35:18.623 [DEBUG] [Thread-56794] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:35:19.223 [DEBUG] [Thread-56796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:35:20.406 [DEBUG] [Thread-56797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:35:35.441 [DEBUG] [Thread-56798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:35:48.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:35:48.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:35: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
2025-11-17T15:35:49.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 35, 19), 27.16, 16.06, 0.0, 16.76, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:35:49.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:35:19
2025-11-17T15:35:49.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:35:49.536 [DEBUG] [Thread-56799] [transport.py] [_log()] starting thread (client mode): 0xd31ec1c0
2025-11-17T15:35:49.536 [DEBUG] [Thread-56799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:35:49.556 [DEBUG] [Thread-56799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:35:49.556 [INFO] [Thread-56799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:35:49.559 [DEBUG] [Thread-56799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:35:49.559 [DEBUG] [Thread-56799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:35:49.559 [DEBUG] [Thread-56799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:35:49.559 [DEBUG] [Thread-56799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] client lang: <none>
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] server lang: <none>
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] kex follows: False
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] Compression: none
2025-11-17T15:35:49.560 [DEBUG] [Thread-56799] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:35:49.581 [DEBUG] [Thread-56799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:35:49.581 [DEBUG] [Thread-56799] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:35:49.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:35:49.582 [DEBUG] [Thread-56799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:35:49.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:35:49.584 [DEBUG] [Thread-56799] [transport.py] [_log()] userauth is OK
2025-11-17T15:35:49.584 [DEBUG] [Thread-56799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:35:49.585 [DEBUG] [Thread-56799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:35:49.585 [DEBUG] [Thread-56799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:35:49.585 [DEBUG] [Thread-56799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:35:49.603 [INFO] [Thread-56799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:35:49.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:35:50.178 [DEBUG] [Thread-56799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:35:50.179 [DEBUG] [Thread-56799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:35:50.179 [DEBUG] [Thread-56799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:35:50.219 [DEBUG] [Thread-56799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:35:50.219 [DEBUG] [Thread-56799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:35:50.223 [DEBUG] [Thread-56799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:35:50.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:35:50.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:35:50.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:35:50.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:35:50.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:35:50.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:35:50.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:35:50.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:35:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:35:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.566371 -999.00  +22.70  11.82     21   -0.30 1 2 1 1 1   888    0 23.61 32.26 ----- 11.8 11.8 235.0 14.2 27.6 -25.0 27.5 -23.0 27.5 -22.2 27.7 -24.2
2025-11-17T15:35:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:35:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:35:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.566371
2025-11-17T15:35:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:35:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:35:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:35:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:35:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:35:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:35:19', tmtdew=27.16, humidity=16.06, cloud=0.0, wind=16.76, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:35:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:35:50.240 [DEBUG] [Thread-56799] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:35:50.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:35:50.336 [DEBUG] [Thread-56802] [transport.py] [_log()] starting thread (client mode): 0xd078d9c0
2025-11-17T15:35:50.336 [DEBUG] [Thread-56802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:35:50.351 [DEBUG] [Thread-56802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:35:50.351 [INFO] [Thread-56802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:35:50.358 [DEBUG] [Thread-56802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] client lang: <none>
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] server lang: <none>
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] kex follows: False
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] Compression: none
2025-11-17T15:35:50.359 [DEBUG] [Thread-56802] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:35:50.418 [DEBUG] [Thread-56802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:35:50.418 [DEBUG] [Thread-56802] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:35:50.418 [DEBUG] [Thread-56802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:35:50.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:35:50.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:35:50.473 [DEBUG] [Thread-56802] [transport.py] [_log()] userauth is OK
2025-11-17T15:35:50.474 [DEBUG] [Thread-56802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:35:50.474 [DEBUG] [Thread-56802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:35:50.474 [DEBUG] [Thread-56802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:35:50.474 [DEBUG] [Thread-56802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:35:50.476 [DEBUG] [Thread-56804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:35:50.497 [INFO] [Thread-56802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:35:50.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:35:50.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:35:51.410 [DEBUG] [Thread-56802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:35:51.410 [DEBUG] [Thread-56802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:35:51.458 [DEBUG] [Thread-56802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:35:51.458 [DEBUG] [Thread-56802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:35:51.467 [DEBUG] [Thread-56802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:35:51.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:35:51.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:35:51.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:35:51.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:35:51.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:35:51.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:35:51.502 [DEBUG] [Thread-56802] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:36:05.518 [DEBUG] [Thread-56805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:36:09.775 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:36:09.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:36:19.274 [DEBUG] [Thread-56806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:36:20.547 [DEBUG] [Thread-56807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:36:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:36:21.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:36:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:36:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 35, 52), 27.21, 15.66, 0.0, 16.15, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:36:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:35:52
2025-11-17T15:36:22.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:36:22.422 [DEBUG] [Thread-56808] [transport.py] [_log()] starting thread (client mode): 0xd070e050
2025-11-17T15:36:22.423 [DEBUG] [Thread-56808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:36:22.443 [DEBUG] [Thread-56808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:36:22.443 [INFO] [Thread-56808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:36:22.446 [DEBUG] [Thread-56808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:36:22.446 [DEBUG] [Thread-56808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:36:22.446 [DEBUG] [Thread-56808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:36:22.446 [DEBUG] [Thread-56808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:36:22.446 [DEBUG] [Thread-56808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] client lang: <none>
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] server lang: <none>
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] kex follows: False
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:36:22.447 [DEBUG] [Thread-56808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:36:22.448 [DEBUG] [Thread-56808] [transport.py] [_log()] Compression: none
2025-11-17T15:36:22.448 [DEBUG] [Thread-56808] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:36:22.467 [DEBUG] [Thread-56808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:36:22.467 [DEBUG] [Thread-56808] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:36:22.468 [DEBUG] [Thread-56808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:36:22.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:36:22.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:36:22.470 [DEBUG] [Thread-56808] [transport.py] [_log()] userauth is OK
2025-11-17T15:36:22.470 [DEBUG] [Thread-56808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:36:22.470 [DEBUG] [Thread-56808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:36:22.470 [DEBUG] [Thread-56808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:36:22.470 [DEBUG] [Thread-56808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:36:22.488 [INFO] [Thread-56808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:36:22.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:36:23.060 [DEBUG] [Thread-56808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:36:23.060 [DEBUG] [Thread-56808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:36:23.060 [DEBUG] [Thread-56808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:36:23.101 [DEBUG] [Thread-56808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:36:23.101 [DEBUG] [Thread-56808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:36:23.104 [DEBUG] [Thread-56808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:36:23.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:36:23.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:36:23.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:36:23.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:36:23.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:36:23.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:36:23.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:36:23.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:36:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:36:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.566713 -999.00  +22.90   6.62     21   -0.30 1 2 1 1 1   888    0 24.09 32.05 ----- 6.6 6.6 269.2 14.2 27.5 -24.0 27.5 -22.4 27.4 -22.1 27.8 -23.3
2025-11-17T15:36:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:36:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:36:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.566713
2025-11-17T15:36:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:36:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:36:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:36:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:36:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:36:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:35:52', tmtdew=27.21, humidity=15.66, cloud=0.0, wind=16.15, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:36:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:36:23.122 [DEBUG] [Thread-56808] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:36:23.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:36:23.219 [DEBUG] [Thread-56811] [transport.py] [_log()] starting thread (client mode): 0xd31ef340
2025-11-17T15:36:23.219 [DEBUG] [Thread-56811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:36:23.233 [DEBUG] [Thread-56811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:36:23.234 [INFO] [Thread-56811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] client lang: <none>
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] server lang: <none>
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] kex follows: False
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:36:23.241 [DEBUG] [Thread-56811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:36:23.242 [DEBUG] [Thread-56811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:36:23.242 [DEBUG] [Thread-56811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:36:23.242 [DEBUG] [Thread-56811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:36:23.242 [DEBUG] [Thread-56811] [transport.py] [_log()] Compression: none
2025-11-17T15:36:23.242 [DEBUG] [Thread-56811] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:36:23.300 [DEBUG] [Thread-56811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:36:23.300 [DEBUG] [Thread-56811] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:36:23.300 [DEBUG] [Thread-56811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:36:23.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:36:23.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:36:23.357 [DEBUG] [Thread-56811] [transport.py] [_log()] userauth is OK
2025-11-17T15:36:23.357 [DEBUG] [Thread-56811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:36:23.358 [DEBUG] [Thread-56811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:36:23.358 [DEBUG] [Thread-56811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:36:23.358 [DEBUG] [Thread-56811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:36:23.376 [INFO] [Thread-56811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:36:23.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:36:23.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:36:24.230 [DEBUG] [Thread-56811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:36:24.231 [DEBUG] [Thread-56811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:36:24.278 [DEBUG] [Thread-56811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:36:24.278 [DEBUG] [Thread-56811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:36:24.286 [DEBUG] [Thread-56811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:36:24.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:36:24.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:36:24.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:36:24.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:36:24.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:36:24.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:36:24.319 [DEBUG] [Thread-56811] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:36:35.576 [DEBUG] [Thread-56813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:36:50.618 [DEBUG] [Thread-56814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:36:54.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:36:54.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:36:54.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:36:54.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 36, 24), 27.15, 15.73, 0.0, 18.35, 22.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:36:54.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:36:24
2025-11-17T15:36:55.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:36:55.230 [DEBUG] [Thread-56815] [transport.py] [_log()] starting thread (client mode): 0xd0776e60
2025-11-17T15:36:55.230 [DEBUG] [Thread-56815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:36:55.244 [DEBUG] [Thread-56815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:36:55.244 [INFO] [Thread-56815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] client lang: <none>
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] server lang: <none>
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] kex follows: False
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:36:55.246 [DEBUG] [Thread-56815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:36:55.247 [DEBUG] [Thread-56815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:36:55.247 [DEBUG] [Thread-56815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:36:55.247 [DEBUG] [Thread-56815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:36:55.247 [DEBUG] [Thread-56815] [transport.py] [_log()] Compression: none
2025-11-17T15:36:55.247 [DEBUG] [Thread-56815] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:36:55.260 [DEBUG] [Thread-56815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:36:55.260 [DEBUG] [Thread-56815] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:36:55.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:36:55.261 [DEBUG] [Thread-56815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:36:55.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:36:55.262 [DEBUG] [Thread-56815] [transport.py] [_log()] userauth is OK
2025-11-17T15:36:55.263 [DEBUG] [Thread-56815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:36:55.263 [DEBUG] [Thread-56815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:36:55.263 [DEBUG] [Thread-56815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:36:55.263 [DEBUG] [Thread-56815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:36:55.286 [INFO] [Thread-56815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:36:55.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:36:55.839 [DEBUG] [Thread-56815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:36:55.840 [DEBUG] [Thread-56815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:36:55.840 [DEBUG] [Thread-56815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:36:55.880 [DEBUG] [Thread-56815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:36:55.881 [DEBUG] [Thread-56815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:36:55.884 [DEBUG] [Thread-56815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:36:55.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:36:55.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:36:55.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:36:55.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:36:55.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:36:55.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:36:55.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:36:55.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:36:55.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:36:55.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.567060 -999.00  +23.00   9.99     21   -0.20 1 2 1 1 1   888    0 23.76 31.70 ----- 10.0 10.0 264.2 11.2 27.4 -25.0 27.5 -22.6 27.4 -22.2 27.6 -23.9
2025-11-17T15:36:55.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:36:55.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:36:55.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.567060
2025-11-17T15:36:55.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:36:55.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:36:55.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:36:55.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:36:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:36:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:36:24', tmtdew=27.15, humidity=15.73, cloud=0.0, wind=18.35, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:36:33.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:36:55.901 [DEBUG] [Thread-56815] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:36:55.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:36:55.997 [DEBUG] [Thread-56818] [transport.py] [_log()] starting thread (client mode): 0xd071b2e0
2025-11-17T15:36:55.998 [DEBUG] [Thread-56818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:36:56.012 [DEBUG] [Thread-56818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:36:56.013 [INFO] [Thread-56818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] client lang: <none>
2025-11-17T15:36:56.020 [DEBUG] [Thread-56818] [transport.py] [_log()] server lang: <none>
2025-11-17T15:36:56.021 [DEBUG] [Thread-56818] [transport.py] [_log()] kex follows: False
2025-11-17T15:36:56.021 [DEBUG] [Thread-56818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:36:56.021 [DEBUG] [Thread-56818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:36:56.021 [DEBUG] [Thread-56818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:36:56.021 [DEBUG] [Thread-56818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:36:56.021 [DEBUG] [Thread-56818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:36:56.021 [DEBUG] [Thread-56818] [transport.py] [_log()] Compression: none
2025-11-17T15:36:56.021 [DEBUG] [Thread-56818] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:36:56.077 [DEBUG] [Thread-56818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:36:56.078 [DEBUG] [Thread-56818] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:36:56.078 [DEBUG] [Thread-56818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:36:56.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:36:56.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:36:56.133 [DEBUG] [Thread-56818] [transport.py] [_log()] userauth is OK
2025-11-17T15:36:56.134 [DEBUG] [Thread-56818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:36:56.134 [DEBUG] [Thread-56818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:36:56.134 [DEBUG] [Thread-56818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:36:56.134 [DEBUG] [Thread-56818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:36:56.152 [INFO] [Thread-56818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:36:56.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:36:56.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:36:57.057 [DEBUG] [Thread-56818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:36:57.057 [DEBUG] [Thread-56818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:36:57.105 [DEBUG] [Thread-56818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:36:57.105 [DEBUG] [Thread-56818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:36:57.113 [DEBUG] [Thread-56818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:36:57.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:36:57.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:36:57.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:36:57.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:36:57.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:36:57.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:36:57.144 [DEBUG] [Thread-56818] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:37:05.650 [DEBUG] [Thread-56820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:37:09.918 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:37:09.919 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:37:19.331 [DEBUG] [Thread-56821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:37:20.687 [DEBUG] [Thread-56822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:37:27.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:37:27.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:37:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:37:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 36, 56), 27.03, 16.25, 0.0, 14.56, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:37:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:36:56
2025-11-17T15:37:27.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:37:28.062 [DEBUG] [Thread-56823] [transport.py] [_log()] starting thread (client mode): 0xd07bf0a0
2025-11-17T15:37:28.062 [DEBUG] [Thread-56823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:37:28.087 [DEBUG] [Thread-56823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:37:28.087 [INFO] [Thread-56823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:37:28.090 [DEBUG] [Thread-56823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:37:28.090 [DEBUG] [Thread-56823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:37:28.090 [DEBUG] [Thread-56823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] client lang: <none>
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] server lang: <none>
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] kex follows: False
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] Compression: none
2025-11-17T15:37:28.091 [DEBUG] [Thread-56823] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:37:28.107 [DEBUG] [Thread-56823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:37:28.107 [DEBUG] [Thread-56823] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:37:28.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:37:28.108 [DEBUG] [Thread-56823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:37:28.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:37:28.110 [DEBUG] [Thread-56823] [transport.py] [_log()] userauth is OK
2025-11-17T15:37:28.111 [DEBUG] [Thread-56823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:37:28.111 [DEBUG] [Thread-56823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:37:28.111 [DEBUG] [Thread-56823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:37:28.111 [DEBUG] [Thread-56823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:37:28.125 [INFO] [Thread-56823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:37:28.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:37:28.735 [DEBUG] [Thread-56823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:37:28.735 [DEBUG] [Thread-56823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:37:28.735 [DEBUG] [Thread-56823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:37:28.776 [DEBUG] [Thread-56823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:37:28.776 [DEBUG] [Thread-56823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:37:28.778 [DEBUG] [Thread-56823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:37:28.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:37:28.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:37:28.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:37:28.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:37:28.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:37:28.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:37:28.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:37:28.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:37:28.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:37:28.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.567408 -999.00  +22.90   7.45     21   -0.20 1 2 1 1 1   888    0 23.96 31.11 ----- 7.5 7.5 228.9 9.7 27.5 -24.7 27.5 -22.7 27.3 -21.1 27.6 -24.1
2025-11-17T15:37:28.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:37:28.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:37:28.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.567408
2025-11-17T15:37:28.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:37:28.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:37:28.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:37:28.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:37:28.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:37:28.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:36:56', tmtdew=27.03, humidity=16.25, cloud=0.0, wind=14.56, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:37:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:37:28.795 [DEBUG] [Thread-56823] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:37:28.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:37:28.881 [DEBUG] [Thread-56826] [transport.py] [_log()] starting thread (client mode): 0xd078d7b0
2025-11-17T15:37:28.881 [DEBUG] [Thread-56826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:37:28.896 [DEBUG] [Thread-56826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:37:28.896 [INFO] [Thread-56826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:37:28.904 [DEBUG] [Thread-56826] [transport.py] [_log()] client lang: <none>
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] server lang: <none>
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] kex follows: False
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] Compression: none
2025-11-17T15:37:28.905 [DEBUG] [Thread-56826] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:37:28.961 [DEBUG] [Thread-56826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:37:28.961 [DEBUG] [Thread-56826] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:37:28.962 [DEBUG] [Thread-56826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:37:28.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:37:28.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:37:29.017 [DEBUG] [Thread-56826] [transport.py] [_log()] userauth is OK
2025-11-17T15:37:29.018 [DEBUG] [Thread-56826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:37:29.018 [DEBUG] [Thread-56826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:37:29.018 [DEBUG] [Thread-56826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:37:29.018 [DEBUG] [Thread-56826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:37:29.032 [INFO] [Thread-56826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:37:29.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:37:29.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:37:29.883 [DEBUG] [Thread-56826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:37:29.883 [DEBUG] [Thread-56826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:37:29.931 [DEBUG] [Thread-56826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:37:29.931 [DEBUG] [Thread-56826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:37:29.939 [DEBUG] [Thread-56826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:37:29.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:37:29.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:37:29.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:37:29.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:37:29.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:37:29.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:37:29.970 [DEBUG] [Thread-56826] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:37:35.719 [DEBUG] [Thread-56828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:37:50.769 [DEBUG] [Thread-56829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:37:59.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:37:59.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:37:59.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:38:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 37, 28), 26.84, 16.43, 0.0, 12.7, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:38:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:37:28
2025-11-17T15:38:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:38:00.978 [DEBUG] [Thread-56830] [transport.py] [_log()] starting thread (client mode): 0xd070dc90
2025-11-17T15:38:00.979 [DEBUG] [Thread-56830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:38:00.998 [DEBUG] [Thread-56830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:38:00.999 [INFO] [Thread-56830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] client lang: <none>
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] server lang: <none>
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] kex follows: False
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] Compression: none
2025-11-17T15:38:01.002 [DEBUG] [Thread-56830] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:38:01.019 [DEBUG] [Thread-56830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:38:01.019 [DEBUG] [Thread-56830] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:38:01.019 [DEBUG] [Thread-56830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:38:01.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:38:01.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:38:01.020 [DEBUG] [Thread-56830] [transport.py] [_log()] userauth is OK
2025-11-17T15:38:01.020 [DEBUG] [Thread-56830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:38:01.020 [DEBUG] [Thread-56830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:38:01.020 [DEBUG] [Thread-56830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:38:01.020 [DEBUG] [Thread-56830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:38:01.039 [INFO] [Thread-56830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:38:01.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:38:01.640 [DEBUG] [Thread-56830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:38:01.640 [DEBUG] [Thread-56830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:38:01.640 [DEBUG] [Thread-56830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:38:01.681 [DEBUG] [Thread-56830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:38:01.681 [DEBUG] [Thread-56830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:38:01.683 [DEBUG] [Thread-56830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:38:01.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:38:01.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:38:01.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:38:01.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:38:01.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:38:01.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:38:01.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.567755 -999.00  +23.10   9.89     21   -0.00 1 2 1 1 1   888    0 23.54 28.26 ----- 9.9 9.9 249.6 13.9 27.4 -25.1 27.4 -22.4 27.3 -21.2 27.6 -24.7
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.567755
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:38:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:37:28', tmtdew=26.84, humidity=16.43, cloud=0.0, wind=12.7, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:37:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:38:01.693 [DEBUG] [Thread-56830] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:38:01.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:38:01.780 [DEBUG] [Thread-56833] [transport.py] [_log()] starting thread (client mode): 0xd0721120
2025-11-17T15:38:01.780 [DEBUG] [Thread-56833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:38:01.796 [DEBUG] [Thread-56833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:38:01.796 [INFO] [Thread-56833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] client lang: <none>
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] server lang: <none>
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] kex follows: False
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:38:01.803 [DEBUG] [Thread-56833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:38:01.804 [DEBUG] [Thread-56833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:38:01.804 [DEBUG] [Thread-56833] [transport.py] [_log()] Compression: none
2025-11-17T15:38:01.804 [DEBUG] [Thread-56833] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:38:01.865 [DEBUG] [Thread-56833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:38:01.865 [DEBUG] [Thread-56833] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:38:01.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:38:01.866 [DEBUG] [Thread-56833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:38:01.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:38:01.926 [DEBUG] [Thread-56833] [transport.py] [_log()] userauth is OK
2025-11-17T15:38:01.926 [DEBUG] [Thread-56833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:38:01.926 [DEBUG] [Thread-56833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:38:01.926 [DEBUG] [Thread-56833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:38:01.926 [DEBUG] [Thread-56833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:38:01.942 [INFO] [Thread-56833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:38:01.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:38:01.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:38:02.848 [DEBUG] [Thread-56833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:38:02.848 [DEBUG] [Thread-56833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:38:02.895 [DEBUG] [Thread-56833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:38:02.895 [DEBUG] [Thread-56833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:38:02.905 [DEBUG] [Thread-56833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:38:02.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:38:02.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:38:02.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:38:02.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:38:02.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:38:02.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:38:02.941 [DEBUG] [Thread-56833] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:38:05.798 [DEBUG] [Thread-56835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:38:10.061 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:38:10.062 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:38:19.388 [DEBUG] [Thread-56836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:38:20.837 [DEBUG] [Thread-56837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:38:32.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:38:32.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:38:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:38:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 37, 28), 26.84, 16.43, 0.0, 12.7, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:38:33.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:37:28
2025-11-17T15:38:33.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:38:33.966 [DEBUG] [Thread-56838] [transport.py] [_log()] starting thread (client mode): 0xd07bd030
2025-11-17T15:38:33.966 [DEBUG] [Thread-56838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:38:33.981 [DEBUG] [Thread-56838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:38:33.982 [INFO] [Thread-56838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] client lang: <none>
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] server lang: <none>
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] kex follows: False
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] Compression: none
2025-11-17T15:38:33.985 [DEBUG] [Thread-56838] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:38:33.992 [DEBUG] [Thread-56838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:38:33.992 [DEBUG] [Thread-56838] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:38:33.993 [DEBUG] [Thread-56838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:38:33.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:38:33.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:38:33.993 [DEBUG] [Thread-56838] [transport.py] [_log()] userauth is OK
2025-11-17T15:38:33.993 [DEBUG] [Thread-56838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:38:33.993 [DEBUG] [Thread-56838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:38:33.993 [DEBUG] [Thread-56838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:38:33.993 [DEBUG] [Thread-56838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:38:34.008 [INFO] [Thread-56838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:38:34.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:38:34.600 [DEBUG] [Thread-56838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:38:34.601 [DEBUG] [Thread-56838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:38:34.601 [DEBUG] [Thread-56838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:38:34.641 [DEBUG] [Thread-56838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:38:34.641 [DEBUG] [Thread-56838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:38:34.643 [DEBUG] [Thread-56838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:38:34.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:38:34.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:38:34.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:38:34.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:38:34.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:38:34.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:38:34.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.568102 -999.00  +23.10  14.44     21   +0.00 1 2 1 1 1   888    0 23.48 24.19 ----- 14.4 14.4 265.2 17.4 27.4 -24.4 27.4 -22.8 27.2 -21.4 27.4 -23.5
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.568102
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:38:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:37:28', tmtdew=26.84, humidity=16.43, cloud=0.0, wind=12.7, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:38:04.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:38:34.662 [DEBUG] [Thread-56838] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:38:34.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:38:34.747 [DEBUG] [Thread-56841] [transport.py] [_log()] starting thread (client mode): 0xd071bfd0
2025-11-17T15:38:34.748 [DEBUG] [Thread-56841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:38:34.763 [DEBUG] [Thread-56841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:38:34.763 [INFO] [Thread-56841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] client lang: <none>
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] server lang: <none>
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] kex follows: False
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:38:34.770 [DEBUG] [Thread-56841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:38:34.771 [DEBUG] [Thread-56841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:38:34.771 [DEBUG] [Thread-56841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:38:34.771 [DEBUG] [Thread-56841] [transport.py] [_log()] Compression: none
2025-11-17T15:38:34.771 [DEBUG] [Thread-56841] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:38:34.829 [DEBUG] [Thread-56841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:38:34.829 [DEBUG] [Thread-56841] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:38:34.829 [DEBUG] [Thread-56841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:38:34.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:38:34.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:38:34.886 [DEBUG] [Thread-56841] [transport.py] [_log()] userauth is OK
2025-11-17T15:38:34.886 [DEBUG] [Thread-56841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:38:34.886 [DEBUG] [Thread-56841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:38:34.886 [DEBUG] [Thread-56841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:38:34.886 [DEBUG] [Thread-56841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:38:34.899 [INFO] [Thread-56841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:38:34.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:38:34.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:38:35.750 [DEBUG] [Thread-56841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:38:35.750 [DEBUG] [Thread-56841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:38:35.798 [DEBUG] [Thread-56841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:38:35.798 [DEBUG] [Thread-56841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:38:35.806 [DEBUG] [Thread-56841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:38:35.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:38:35.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:38:35.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:38:35.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:38:35.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:38:35.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:38:35.838 [DEBUG] [Thread-56841] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:38:35.873 [DEBUG] [Thread-56843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:38:50.907 [DEBUG] [Thread-56844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:39:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:39:05.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:39:05.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:39:05.937 [DEBUG] [Thread-56845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:39:06.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 38, 32), 26.65, 16.59, 0.0, 16.32, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:39:06.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:38:32
2025-11-17T15:39:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:39:06.806 [DEBUG] [Thread-56846] [transport.py] [_log()] starting thread (client mode): 0xd070f2e0
2025-11-17T15:39:06.807 [DEBUG] [Thread-56846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:39:06.826 [DEBUG] [Thread-56846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:39:06.826 [INFO] [Thread-56846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] client lang: <none>
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] server lang: <none>
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] kex follows: False
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] Compression: none
2025-11-17T15:39:06.830 [DEBUG] [Thread-56846] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:39:06.843 [DEBUG] [Thread-56846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:39:06.844 [DEBUG] [Thread-56846] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:39:06.844 [DEBUG] [Thread-56846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:39:06.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:39:06.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:39:06.846 [DEBUG] [Thread-56846] [transport.py] [_log()] userauth is OK
2025-11-17T15:39:06.846 [DEBUG] [Thread-56846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:39:06.846 [DEBUG] [Thread-56846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:39:06.846 [DEBUG] [Thread-56846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:39:06.846 [DEBUG] [Thread-56846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:39:06.870 [INFO] [Thread-56846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:39:06.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:39:07.518 [DEBUG] [Thread-56846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:39:07.518 [DEBUG] [Thread-56846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:39:07.518 [DEBUG] [Thread-56846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:39:07.558 [DEBUG] [Thread-56846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:39:07.558 [DEBUG] [Thread-56846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:39:07.560 [DEBUG] [Thread-56846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:39:07.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:39:07.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:39:07.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:39:07.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:39:07.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:39:07.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:39:07.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:39:07.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:39:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:39:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.568449 -999.00  +23.10  15.88     21   -0.10 1 1 1 1 1   888    0 23.62 21.64 ----- 15.9 15.9 272.2 22.7 27.3 -24.0 27.3 -23.1 26.9 -24.2 27.4 -22.0
2025-11-17T15:39:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:39:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:39:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.568449
2025-11-17T15:39:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:39:07.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:39:07.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:39:07.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:39:07.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:39:07.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:38:32', tmtdew=26.65, humidity=16.59, cloud=0.0, wind=16.32, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:38:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:39:07.585 [DEBUG] [Thread-56846] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:39:07.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:39:07.682 [DEBUG] [Thread-56849] [transport.py] [_log()] starting thread (client mode): 0xd31b19c0
2025-11-17T15:39:07.682 [DEBUG] [Thread-56849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:39:07.701 [DEBUG] [Thread-56849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:39:07.701 [INFO] [Thread-56849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:39:07.709 [DEBUG] [Thread-56849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:39:07.709 [DEBUG] [Thread-56849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:39:07.709 [DEBUG] [Thread-56849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:39:07.709 [DEBUG] [Thread-56849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:39:07.709 [DEBUG] [Thread-56849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:39:07.709 [DEBUG] [Thread-56849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] client lang: <none>
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] server lang: <none>
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] kex follows: False
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] Compression: none
2025-11-17T15:39:07.710 [DEBUG] [Thread-56849] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:39:07.767 [DEBUG] [Thread-56849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:39:07.767 [DEBUG] [Thread-56849] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:39:07.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:39:07.768 [DEBUG] [Thread-56849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:39:07.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:39:07.822 [DEBUG] [Thread-56849] [transport.py] [_log()] userauth is OK
2025-11-17T15:39:07.823 [DEBUG] [Thread-56849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:39:07.823 [DEBUG] [Thread-56849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:39:07.823 [DEBUG] [Thread-56849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:39:07.823 [DEBUG] [Thread-56849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:39:07.844 [INFO] [Thread-56849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:39:07.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:39:07.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:39:08.705 [DEBUG] [Thread-56849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:39:08.706 [DEBUG] [Thread-56849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:39:08.753 [DEBUG] [Thread-56849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:39:08.753 [DEBUG] [Thread-56849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:39:08.762 [DEBUG] [Thread-56849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:39:08.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:39:08.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:39:08.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:39:08.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:39:08.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:39:08.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:39:08.797 [DEBUG] [Thread-56849] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:39:10.204 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:39:10.205 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:39:19.447 [DEBUG] [Thread-56851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:39:20.966 [DEBUG] [Thread-56852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:39:36.010 [DEBUG] [Thread-56853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:39:38.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:39:38.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:39: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
2025-11-17T15:39:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 39, 36), 27.45, 15.81, 0.0, 22.87, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:39:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:39:36
2025-11-17T15:39:39.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:39:39.717 [DEBUG] [Thread-56854] [transport.py] [_log()] starting thread (client mode): 0xd070dea0
2025-11-17T15:39:39.717 [DEBUG] [Thread-56854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:39:39.728 [DEBUG] [Thread-56854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:39:39.728 [INFO] [Thread-56854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] client lang: <none>
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] server lang: <none>
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] kex follows: False
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] Compression: none
2025-11-17T15:39:39.731 [DEBUG] [Thread-56854] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:39:39.742 [DEBUG] [Thread-56854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:39:39.742 [DEBUG] [Thread-56854] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:39:39.743 [DEBUG] [Thread-56854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:39:39.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:39:39.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:39:39.744 [DEBUG] [Thread-56854] [transport.py] [_log()] userauth is OK
2025-11-17T15:39:39.744 [DEBUG] [Thread-56854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:39:39.744 [DEBUG] [Thread-56854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:39:39.744 [DEBUG] [Thread-56854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:39:39.744 [DEBUG] [Thread-56854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:39:39.760 [INFO] [Thread-56854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:39:39.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:39:40.370 [DEBUG] [Thread-56854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:39:40.370 [DEBUG] [Thread-56854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:39:40.371 [DEBUG] [Thread-56854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:39:40.411 [DEBUG] [Thread-56854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:39:40.411 [DEBUG] [Thread-56854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:39:40.413 [DEBUG] [Thread-56854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:39:40.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:39:40.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:39:40.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:39:40.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:39:40.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:39:40.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:39:40.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:39:40.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:39:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:39:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.569144 -999.00  +23.10  11.81     21   +0.00 1 2 1 1 1   888    0 23.88 21.27 ----- 11.8 11.8 280.8 19.9 27.9 -20.4 27.7 -19.9 27.4 -18.8 28.3 -18.6
2025-11-17T15:39:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:39:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:39:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.569144
2025-11-17T15:39:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:39:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:39:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:39:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:39:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:39:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:39:36', tmtdew=27.45, humidity=15.81, cloud=0.0, wind=22.87, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:39:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:39:40.436 [DEBUG] [Thread-56854] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:39:40.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:39:40.534 [DEBUG] [Thread-56857] [transport.py] [_log()] starting thread (client mode): 0xd31eeef0
2025-11-17T15:39:40.534 [DEBUG] [Thread-56857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:39:40.551 [DEBUG] [Thread-56857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:39:40.551 [INFO] [Thread-56857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] client lang: <none>
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] server lang: <none>
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] kex follows: False
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:39:40.559 [DEBUG] [Thread-56857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:39:40.560 [DEBUG] [Thread-56857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:39:40.560 [DEBUG] [Thread-56857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:39:40.560 [DEBUG] [Thread-56857] [transport.py] [_log()] Compression: none
2025-11-17T15:39:40.560 [DEBUG] [Thread-56857] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:39:40.622 [DEBUG] [Thread-56857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:39:40.622 [DEBUG] [Thread-56857] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:39:40.623 [DEBUG] [Thread-56857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:39:40.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:39:40.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:39:40.678 [DEBUG] [Thread-56857] [transport.py] [_log()] userauth is OK
2025-11-17T15:39:40.679 [DEBUG] [Thread-56857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:39:40.679 [DEBUG] [Thread-56857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:39:40.679 [DEBUG] [Thread-56857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:39:40.679 [DEBUG] [Thread-56857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:39:40.699 [INFO] [Thread-56857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:39:40.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:39:40.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:39:41.533 [DEBUG] [Thread-56857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:39:41.534 [DEBUG] [Thread-56857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:39:41.583 [DEBUG] [Thread-56857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:39:41.583 [DEBUG] [Thread-56857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:39:41.596 [DEBUG] [Thread-56857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:39:41.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:39:41.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:39:41.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:39:41.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:39:41.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:39:41.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:39:41.635 [DEBUG] [Thread-56857] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:39:51.039 [DEBUG] [Thread-56859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:40:06.080 [DEBUG] [Thread-56860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:40:10.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:40:10.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:40:11.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:40:11.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:40:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:40:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 40, 8), 27.85, 15.41, 0.0, 22.21, 23.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:40:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:40:08
2025-11-17T15:40:12.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:40:12.563 [DEBUG] [Thread-56861] [transport.py] [_log()] starting thread (client mode): 0xd07bcc70
2025-11-17T15:40:12.563 [DEBUG] [Thread-56861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:40:12.583 [DEBUG] [Thread-56861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:40:12.584 [INFO] [Thread-56861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] client lang: <none>
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] server lang: <none>
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] kex follows: False
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] Compression: none
2025-11-17T15:40:12.585 [DEBUG] [Thread-56861] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:40:12.598 [DEBUG] [Thread-56861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:40:12.599 [DEBUG] [Thread-56861] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:40:12.599 [DEBUG] [Thread-56861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:40:12.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:40:12.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:40:12.600 [DEBUG] [Thread-56861] [transport.py] [_log()] userauth is OK
2025-11-17T15:40:12.600 [DEBUG] [Thread-56861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:40:12.601 [DEBUG] [Thread-56861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:40:12.601 [DEBUG] [Thread-56861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:40:12.601 [DEBUG] [Thread-56861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:40:12.620 [INFO] [Thread-56861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:40:12.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:40:19.457 [DEBUG] [Thread-56861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:40:19.458 [DEBUG] [Thread-56861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:40:19.458 [DEBUG] [Thread-56861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:40:19.498 [DEBUG] [Thread-56861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:40:19.498 [DEBUG] [Thread-56861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:40:19.500 [DEBUG] [Thread-56863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:40:19.501 [DEBUG] [Thread-56861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:40:19.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:40:19.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:40:19.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:40:19.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:40:19.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:40:19.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:40:19.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:40:19.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.569144 -999.00  +23.10  11.81     21   +0.00 1 2 1 1 1   888    0 23.88 21.27 ----- 11.8 11.8 280.8 19.9 27.9 -20.4 27.7 -19.9 27.4 -18.8 28.3 -18.6
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.569144
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:40:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:40:08', tmtdew=27.85, humidity=15.41, cloud=0.0, wind=22.21, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:39:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:40:19.522 [DEBUG] [Thread-56861] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:40:19.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:40:19.616 [DEBUG] [Thread-56865] [transport.py] [_log()] starting thread (client mode): 0xd0775420
2025-11-17T15:40:19.616 [DEBUG] [Thread-56865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:40:19.632 [DEBUG] [Thread-56865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:40:19.633 [INFO] [Thread-56865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] client lang: <none>
2025-11-17T15:40:19.640 [DEBUG] [Thread-56865] [transport.py] [_log()] server lang: <none>
2025-11-17T15:40:19.641 [DEBUG] [Thread-56865] [transport.py] [_log()] kex follows: False
2025-11-17T15:40:19.641 [DEBUG] [Thread-56865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:40:19.641 [DEBUG] [Thread-56865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:40:19.641 [DEBUG] [Thread-56865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:40:19.641 [DEBUG] [Thread-56865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:40:19.641 [DEBUG] [Thread-56865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:40:19.641 [DEBUG] [Thread-56865] [transport.py] [_log()] Compression: none
2025-11-17T15:40:19.641 [DEBUG] [Thread-56865] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:40:19.702 [DEBUG] [Thread-56865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:40:19.703 [DEBUG] [Thread-56865] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:40:19.703 [DEBUG] [Thread-56865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:40:19.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:40:19.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:40:19.759 [DEBUG] [Thread-56865] [transport.py] [_log()] userauth is OK
2025-11-17T15:40:19.759 [DEBUG] [Thread-56865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:40:19.760 [DEBUG] [Thread-56865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:40:19.760 [DEBUG] [Thread-56865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:40:19.760 [DEBUG] [Thread-56865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:40:19.779 [INFO] [Thread-56865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:40:19.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:40:19.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:40:20.630 [DEBUG] [Thread-56865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:40:20.630 [DEBUG] [Thread-56865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:40:20.677 [DEBUG] [Thread-56865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:40:20.677 [DEBUG] [Thread-56865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:40:20.686 [DEBUG] [Thread-56865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:40:20.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:40:20.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:40:20.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:40:20.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:40:20.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:40:20.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:40:20.721 [DEBUG] [Thread-56865] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:40:21.109 [DEBUG] [Thread-56867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:40:36.159 [DEBUG] [Thread-56868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:40:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:40:50.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:40:50.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:40:51.189 [DEBUG] [Thread-56869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:40:51.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 40, 40), 28.06, 15.32, 0.0, 14.96, 23.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:40:51.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:40:40
2025-11-17T15:40:51.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:40:51.643 [DEBUG] [Thread-56870] [transport.py] [_log()] starting thread (client mode): 0xd31b14e0
2025-11-17T15:40:51.643 [DEBUG] [Thread-56870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:40:51.664 [DEBUG] [Thread-56870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:40:51.664 [INFO] [Thread-56870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:40:51.667 [DEBUG] [Thread-56870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] client lang: <none>
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] server lang: <none>
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] kex follows: False
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] Compression: none
2025-11-17T15:40:51.668 [DEBUG] [Thread-56870] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:40:51.683 [DEBUG] [Thread-56870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:40:51.684 [DEBUG] [Thread-56870] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:40:51.684 [DEBUG] [Thread-56870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:40:51.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:40:51.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:40:51.685 [DEBUG] [Thread-56870] [transport.py] [_log()] userauth is OK
2025-11-17T15:40:51.686 [DEBUG] [Thread-56870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:40:51.686 [DEBUG] [Thread-56870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:40:51.686 [DEBUG] [Thread-56870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:40:51.686 [DEBUG] [Thread-56870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:40:51.708 [INFO] [Thread-56870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:40:51.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:40:52.329 [DEBUG] [Thread-56870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:40:52.329 [DEBUG] [Thread-56870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:40:52.329 [DEBUG] [Thread-56870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:40:52.370 [DEBUG] [Thread-56870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:40:52.370 [DEBUG] [Thread-56870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:40:52.373 [DEBUG] [Thread-56870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:40:52.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:40:52.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:40:52.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:40:52.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:40:52.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:40:52.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:40:52.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:40:52.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:40:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:40:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.569496 -999.00  +23.20  18.23     21   -0.20 1 2 1 1 1   888    0 23.46 17.65 ----- 18.2 18.2 317.8 23.2 28.2 -21.9 27.9 -21.0 28.1 -17.9 28.6 -19.7
2025-11-17T15:40:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:40:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:40:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.569496
2025-11-17T15:40:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:40:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:40:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:40:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:40:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:40:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:40:40', tmtdew=28.06, humidity=15.32, cloud=0.0, wind=14.96, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:40:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:40:52.396 [DEBUG] [Thread-56870] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:40:52.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:40:52.492 [DEBUG] [Thread-56873] [transport.py] [_log()] starting thread (client mode): 0xd3163f70
2025-11-17T15:40:52.492 [DEBUG] [Thread-56873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:40:52.507 [DEBUG] [Thread-56873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:40:52.508 [INFO] [Thread-56873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:40:52.515 [DEBUG] [Thread-56873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:40:52.515 [DEBUG] [Thread-56873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] client lang: <none>
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] server lang: <none>
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] kex follows: False
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:40:52.516 [DEBUG] [Thread-56873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:40:52.517 [DEBUG] [Thread-56873] [transport.py] [_log()] Compression: none
2025-11-17T15:40:52.517 [DEBUG] [Thread-56873] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:40:52.575 [DEBUG] [Thread-56873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:40:52.575 [DEBUG] [Thread-56873] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:40:52.576 [DEBUG] [Thread-56873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:40:52.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:40:52.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:40:52.630 [DEBUG] [Thread-56873] [transport.py] [_log()] userauth is OK
2025-11-17T15:40:52.630 [DEBUG] [Thread-56873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:40:52.630 [DEBUG] [Thread-56873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:40:52.630 [DEBUG] [Thread-56873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:40:52.630 [DEBUG] [Thread-56873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:40:52.645 [INFO] [Thread-56873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:40:52.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:40:52.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:40:53.575 [DEBUG] [Thread-56873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:40:53.575 [DEBUG] [Thread-56873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:40:53.622 [DEBUG] [Thread-56873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:40:53.622 [DEBUG] [Thread-56873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:40:53.631 [DEBUG] [Thread-56873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:40:53.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:40: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')
2025-11-17T15:40:53.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:40:53.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:40:53.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:40:53.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:40:53.666 [DEBUG] [Thread-56873] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:41:06.221 [DEBUG] [Thread-56875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:41:10.489 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:41:10.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:41:19.534 [DEBUG] [Thread-56876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:41:21.263 [DEBUG] [Thread-56877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:41:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:41:23.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:41:23.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:41:24.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 41, 12), 28.11, 15.25, 0.0, 9.55, 23.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:41:24.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:41:12
2025-11-17T15:41:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:41:24.586 [DEBUG] [Thread-56878] [transport.py] [_log()] starting thread (client mode): 0xd0720850
2025-11-17T15:41:24.587 [DEBUG] [Thread-56878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:41:24.606 [DEBUG] [Thread-56878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:41:24.606 [INFO] [Thread-56878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] client lang: <none>
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] server lang: <none>
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] kex follows: False
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] Compression: none
2025-11-17T15:41:24.610 [DEBUG] [Thread-56878] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:41:24.625 [DEBUG] [Thread-56878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:41:24.625 [DEBUG] [Thread-56878] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:41:24.625 [DEBUG] [Thread-56878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:41:24.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:41:24.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:41:24.626 [DEBUG] [Thread-56878] [transport.py] [_log()] userauth is OK
2025-11-17T15:41:24.626 [DEBUG] [Thread-56878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:41:24.627 [DEBUG] [Thread-56878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:41:24.627 [DEBUG] [Thread-56878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:41:24.627 [DEBUG] [Thread-56878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:41:24.636 [INFO] [Thread-56878] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:41:24.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:41:25.403 [DEBUG] [Thread-56878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:41:25.403 [DEBUG] [Thread-56878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:41:25.403 [DEBUG] [Thread-56878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:41:25.444 [DEBUG] [Thread-56878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:41:25.444 [DEBUG] [Thread-56878] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:41:25.447 [DEBUG] [Thread-56878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:41:25.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:41:25.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:41:25.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:41:25.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:41:25.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:41:25.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:41:25.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:41:25.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:41:25.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:41:25.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.569838 -999.00  +23.00  14.08     21   -0.40 1 2 1 1 1   888    0 23.79 17.97 ----- 14.1 14.1 319.2 22.1 28.4 -22.0 28.0 -20.0 28.4 -18.4 28.9 -20.5
2025-11-17T15:41:25.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:41:25.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:41:25.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.569838
2025-11-17T15:41:25.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:41:25.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:41:25.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:41:25.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:41:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:41:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:41:12', tmtdew=28.11, humidity=15.25, cloud=0.0, wind=9.55, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:40:34.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:41:25.471 [DEBUG] [Thread-56878] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:41:25.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:41:25.566 [DEBUG] [Thread-56881] [transport.py] [_log()] starting thread (client mode): 0xd31ef6a0
2025-11-17T15:41:25.566 [DEBUG] [Thread-56881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:41:25.581 [DEBUG] [Thread-56881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:41:25.581 [INFO] [Thread-56881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] client lang: <none>
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] server lang: <none>
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] kex follows: False
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:41:25.589 [DEBUG] [Thread-56881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:41:25.590 [DEBUG] [Thread-56881] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:41:25.590 [DEBUG] [Thread-56881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:41:25.590 [DEBUG] [Thread-56881] [transport.py] [_log()] Compression: none
2025-11-17T15:41:25.590 [DEBUG] [Thread-56881] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:41:25.646 [DEBUG] [Thread-56881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:41:25.647 [DEBUG] [Thread-56881] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:41:25.647 [DEBUG] [Thread-56881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:41:25.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:41:25.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:41:25.702 [DEBUG] [Thread-56881] [transport.py] [_log()] userauth is OK
2025-11-17T15:41:25.703 [DEBUG] [Thread-56881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:41:25.703 [DEBUG] [Thread-56881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:41:25.703 [DEBUG] [Thread-56881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:41:25.703 [DEBUG] [Thread-56881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:41:25.722 [INFO] [Thread-56881] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:41:25.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:41:25.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:41:26.736 [DEBUG] [Thread-56881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:41:26.736 [DEBUG] [Thread-56881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:41:26.784 [DEBUG] [Thread-56881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:41:26.784 [DEBUG] [Thread-56881] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:41:26.793 [DEBUG] [Thread-56881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:41:26.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:41:26.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:41:26.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:41:26.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:41:26.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:41:26.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:41:26.827 [DEBUG] [Thread-56881] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:41:36.295 [DEBUG] [Thread-56883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:41:51.344 [DEBUG] [Thread-56884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:41:56.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:41:56.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:41:56.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:41:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 41, 44), 28.39, 14.85, 0.0, 14.57, 23.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:41:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:41:44
2025-11-17T15:41:57.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:41:57.751 [DEBUG] [Thread-56885] [transport.py] [_log()] starting thread (client mode): 0xd31efbe0
2025-11-17T15:41:57.751 [DEBUG] [Thread-56885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:41:57.770 [DEBUG] [Thread-56885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:41:57.771 [INFO] [Thread-56885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:41:57.774 [DEBUG] [Thread-56885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:41:57.774 [DEBUG] [Thread-56885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:41:57.774 [DEBUG] [Thread-56885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:41:57.774 [DEBUG] [Thread-56885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:41:57.774 [DEBUG] [Thread-56885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:41:57.774 [DEBUG] [Thread-56885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:41:57.774 [DEBUG] [Thread-56885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:41:57.774 [DEBUG] [Thread-56885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] client lang: <none>
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] server lang: <none>
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] kex follows: False
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] Compression: none
2025-11-17T15:41:57.775 [DEBUG] [Thread-56885] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:41:57.792 [DEBUG] [Thread-56885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:41:57.793 [DEBUG] [Thread-56885] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:41:57.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:41:57.793 [DEBUG] [Thread-56885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:41:57.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:41:57.795 [DEBUG] [Thread-56885] [transport.py] [_log()] userauth is OK
2025-11-17T15:41:57.795 [DEBUG] [Thread-56885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:41:57.795 [DEBUG] [Thread-56885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:41:57.796 [DEBUG] [Thread-56885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:41:57.796 [DEBUG] [Thread-56885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:41:57.820 [INFO] [Thread-56885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:41:57.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:41:58.463 [DEBUG] [Thread-56885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:41:58.464 [DEBUG] [Thread-56885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:41:58.464 [DEBUG] [Thread-56885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:41:58.504 [DEBUG] [Thread-56885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:41:58.504 [DEBUG] [Thread-56885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:41:58.507 [DEBUG] [Thread-56885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:41:58.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:41:58.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:41:58.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:41:58.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:41:58.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:41:58.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:41:58.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:41:58.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:41:58.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:41:58.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.570185 -999.00  +22.70   9.07     20   -0.70 1 2 1 1 1   888    0 23.40 14.85 ----- 9.1 9.1 322.3 20.0 28.4 -23.1 28.1 -21.6 28.6 -18.9 29.0 -24.9
2025-11-17T15:41:58.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:41:58.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:41:58.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.570185
2025-11-17T15:41:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:41:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:41:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:41:58.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:41:58.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:41:58.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:41:44', tmtdew=28.39, humidity=14.85, cloud=0.0, wind=14.57, temperature=23.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:41:03.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:41:58.533 [DEBUG] [Thread-56885] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:41:58.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:41:58.629 [DEBUG] [Thread-56888] [transport.py] [_log()] starting thread (client mode): 0xd31ef970
2025-11-17T15:41:58.629 [DEBUG] [Thread-56888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:41:58.644 [DEBUG] [Thread-56888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:41:58.644 [INFO] [Thread-56888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:41:58.652 [DEBUG] [Thread-56888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:41:58.652 [DEBUG] [Thread-56888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:41:58.652 [DEBUG] [Thread-56888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:41:58.652 [DEBUG] [Thread-56888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:41:58.652 [DEBUG] [Thread-56888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:41:58.652 [DEBUG] [Thread-56888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] client lang: <none>
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] server lang: <none>
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] kex follows: False
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] Compression: none
2025-11-17T15:41:58.653 [DEBUG] [Thread-56888] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:41:58.711 [DEBUG] [Thread-56888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:41:58.711 [DEBUG] [Thread-56888] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:41:58.712 [DEBUG] [Thread-56888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:41:58.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:41:58.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:41:58.767 [DEBUG] [Thread-56888] [transport.py] [_log()] userauth is OK
2025-11-17T15:41:58.767 [DEBUG] [Thread-56888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:41:58.767 [DEBUG] [Thread-56888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:41:58.767 [DEBUG] [Thread-56888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:41:58.767 [DEBUG] [Thread-56888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:41:58.786 [INFO] [Thread-56888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:41:58.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:41:58.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:41:59.633 [DEBUG] [Thread-56888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:41:59.633 [DEBUG] [Thread-56888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:41:59.681 [DEBUG] [Thread-56888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:41:59.681 [DEBUG] [Thread-56888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:41:59.691 [DEBUG] [Thread-56888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:41:59.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:41:59.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:41:59.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:41:59.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:41:59.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:41:59.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:41:59.726 [DEBUG] [Thread-56888] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:42:06.372 [DEBUG] [Thread-56890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:42:10.635 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:42:10.637 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:42:19.595 [DEBUG] [Thread-56891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:42:21.423 [DEBUG] [Thread-56892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:42:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:42:29.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:42:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:42:30.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 42, 16), 28.47, 14.75, 0.0, 11.65, 23.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:42:30.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:42:16
2025-11-17T15:42:30.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:42:30.678 [DEBUG] [Thread-56893] [transport.py] [_log()] starting thread (client mode): 0xd0720580
2025-11-17T15:42:30.678 [DEBUG] [Thread-56893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:42:30.692 [DEBUG] [Thread-56893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:42:30.693 [INFO] [Thread-56893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:42:30.696 [DEBUG] [Thread-56893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:42:30.696 [DEBUG] [Thread-56893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:42:30.696 [DEBUG] [Thread-56893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:42:30.696 [DEBUG] [Thread-56893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:42:30.696 [DEBUG] [Thread-56893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:42:30.696 [DEBUG] [Thread-56893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:42:30.696 [DEBUG] [Thread-56893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] client lang: <none>
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] server lang: <none>
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] kex follows: False
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] Compression: none
2025-11-17T15:42:30.697 [DEBUG] [Thread-56893] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:42:30.713 [DEBUG] [Thread-56893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:42:30.714 [DEBUG] [Thread-56893] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:42:30.714 [DEBUG] [Thread-56893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:42:30.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:42:30.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:42:30.716 [DEBUG] [Thread-56893] [transport.py] [_log()] userauth is OK
2025-11-17T15:42:30.717 [DEBUG] [Thread-56893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:42:30.717 [DEBUG] [Thread-56893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:42:30.717 [DEBUG] [Thread-56893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:42:30.717 [DEBUG] [Thread-56893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:42:30.737 [INFO] [Thread-56893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:42:30.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:42:31.326 [DEBUG] [Thread-56893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:42:31.326 [DEBUG] [Thread-56893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:42:31.326 [DEBUG] [Thread-56893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:42:31.366 [DEBUG] [Thread-56893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:42:31.366 [DEBUG] [Thread-56893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:42:31.368 [DEBUG] [Thread-56893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:42:31.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:42:31.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:42:31.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:42:31.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:42:31.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:42:31.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:42:31.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:42:31.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:42:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:42:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.570533 -999.00  +22.80  11.96     21   -0.50 1 2 1 1 1   888    0 23.65 13.78 ----- 12.0 12.0 342.2 17.5 28.5 -22.7 28.1 -22.2 28.8 -18.7 29.2 -21.6
2025-11-17T15:42:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:42:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:42:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.570533
2025-11-17T15:42:31.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:42:31.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:42:31.394 [DEBUG] [Thread-56893] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:42:31.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:42:31.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:42:31.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:42:31.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:42:16', tmtdew=28.47, humidity=14.75, cloud=0.0, wind=11.65, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:41:34.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:42:31.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:42:31.492 [DEBUG] [Thread-56896] [transport.py] [_log()] starting thread (client mode): 0xd0784fd0
2025-11-17T15:42:31.492 [DEBUG] [Thread-56896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:42:31.509 [DEBUG] [Thread-56896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:42:31.509 [INFO] [Thread-56896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:42:31.516 [DEBUG] [Thread-56896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:42:31.516 [DEBUG] [Thread-56896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] client lang: <none>
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] server lang: <none>
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] kex follows: False
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] Compression: none
2025-11-17T15:42:31.517 [DEBUG] [Thread-56896] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:42:31.575 [DEBUG] [Thread-56896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:42:31.575 [DEBUG] [Thread-56896] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:42:31.576 [DEBUG] [Thread-56896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:42:31.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:42:31.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:42:31.631 [DEBUG] [Thread-56896] [transport.py] [_log()] userauth is OK
2025-11-17T15:42:31.631 [DEBUG] [Thread-56896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:42:31.631 [DEBUG] [Thread-56896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:42:31.631 [DEBUG] [Thread-56896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:42:31.631 [DEBUG] [Thread-56896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:42:31.650 [INFO] [Thread-56896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:42:31.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:42:31.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:42:32.538 [DEBUG] [Thread-56896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:42:32.539 [DEBUG] [Thread-56896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:42:32.586 [DEBUG] [Thread-56896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:42:32.586 [DEBUG] [Thread-56896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:42:32.595 [DEBUG] [Thread-56896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:42:32.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:42:32.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:42:32.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:42:32.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:42:32.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:42:32.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:42:32.630 [DEBUG] [Thread-56896] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:42:36.456 [DEBUG] [Thread-56898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:42:51.503 [DEBUG] [Thread-56899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:43:02.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:43:02.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:43:02.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:43:03.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 42, 48), 28.24, 15.0, 0.0, 13.25, 23.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:43:03.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:42:48
2025-11-17T15:43:03.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:43:03.579 [DEBUG] [Thread-56900] [transport.py] [_log()] starting thread (client mode): 0xd0722c20
2025-11-17T15:43:03.580 [DEBUG] [Thread-56900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:43:03.599 [DEBUG] [Thread-56900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:43:03.599 [INFO] [Thread-56900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:43:03.602 [DEBUG] [Thread-56900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:43:03.602 [DEBUG] [Thread-56900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:43:03.602 [DEBUG] [Thread-56900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:43:03.602 [DEBUG] [Thread-56900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] client lang: <none>
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] server lang: <none>
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] kex follows: False
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] Compression: none
2025-11-17T15:43:03.603 [DEBUG] [Thread-56900] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:43:03.619 [DEBUG] [Thread-56900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:43:03.619 [DEBUG] [Thread-56900] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:43:03.619 [DEBUG] [Thread-56900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:43:03.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:43:03.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:43:03.620 [DEBUG] [Thread-56900] [transport.py] [_log()] userauth is OK
2025-11-17T15:43:03.620 [DEBUG] [Thread-56900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:43:03.620 [DEBUG] [Thread-56900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:43:03.620 [DEBUG] [Thread-56900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:43:03.620 [DEBUG] [Thread-56900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:43:03.629 [INFO] [Thread-56900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:43:03.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:43:04.272 [DEBUG] [Thread-56900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:43:04.272 [DEBUG] [Thread-56900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:43:04.272 [DEBUG] [Thread-56900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:43:04.313 [DEBUG] [Thread-56900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:43:04.313 [DEBUG] [Thread-56900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:43:04.315 [DEBUG] [Thread-56900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:43:04.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:43:04.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:43:04.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:43:04.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:43:04.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:43:04.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:43:04.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:43:04.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:43:04.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:43:04.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.570880 -999.00  +22.90  16.15     21   -0.30 1 2 1 1 1   888    0 22.95 11.22 ----- 16.1 16.1 311.6 17.8 28.7 -22.3 28.3 -20.7 29.1 -19.5 29.6 -20.9
2025-11-17T15:43:04.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:43:04.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:43:04.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.570880
2025-11-17T15:43:04.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:43:04.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:43:04.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:43:04.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:43:04.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:43:04.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:42:48', tmtdew=28.24, humidity=15.0, cloud=0.0, wind=13.25, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:42:04.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:43:04.334 [DEBUG] [Thread-56900] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:43:04.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:43:04.424 [DEBUG] [Thread-56903] [transport.py] [_log()] starting thread (client mode): 0xd0786e90
2025-11-17T15:43:04.424 [DEBUG] [Thread-56903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:43:04.438 [DEBUG] [Thread-56903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:43:04.438 [INFO] [Thread-56903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] client lang: <none>
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] server lang: <none>
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] kex follows: False
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] Compression: none
2025-11-17T15:43:04.446 [DEBUG] [Thread-56903] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:43:04.501 [DEBUG] [Thread-56903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:43:04.501 [DEBUG] [Thread-56903] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:43:04.502 [DEBUG] [Thread-56903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:43:04.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:43:04.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:43:04.563 [DEBUG] [Thread-56903] [transport.py] [_log()] userauth is OK
2025-11-17T15:43:04.563 [DEBUG] [Thread-56903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:43:04.563 [DEBUG] [Thread-56903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:43:04.563 [DEBUG] [Thread-56903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:43:04.563 [DEBUG] [Thread-56903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:43:04.577 [INFO] [Thread-56903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:43:04.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:43:04.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:43:05.403 [DEBUG] [Thread-56903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:43:05.403 [DEBUG] [Thread-56903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:43:05.451 [DEBUG] [Thread-56903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:43:05.451 [DEBUG] [Thread-56903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:43:05.462 [DEBUG] [Thread-56903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:43:05.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:43:05.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:43:05.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:43:05.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:43:05.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:43:05.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:43:05.493 [DEBUG] [Thread-56903] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:43:06.532 [DEBUG] [Thread-56905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:43:10.778 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:43:10.779 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:43:19.629 [DEBUG] [Thread-56906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:43:21.560 [DEBUG] [Thread-56907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:43:35.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:43:35.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:43:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:43:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 43, 20), 28.13, 15.13, 0.0, 13.25, 23.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:43:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:43:20
2025-11-17T15:43:36.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:43:36.449 [DEBUG] [Thread-56908] [transport.py] [_log()] starting thread (client mode): 0xd31b38e0
2025-11-17T15:43:36.450 [DEBUG] [Thread-56908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:43:36.469 [DEBUG] [Thread-56908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:43:36.469 [INFO] [Thread-56908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:43:36.472 [DEBUG] [Thread-56908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] client lang: <none>
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] server lang: <none>
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] kex follows: False
2025-11-17T15:43:36.473 [DEBUG] [Thread-56908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:43:36.474 [DEBUG] [Thread-56908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:43:36.474 [DEBUG] [Thread-56908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:43:36.474 [DEBUG] [Thread-56908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:43:36.474 [DEBUG] [Thread-56908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:43:36.474 [DEBUG] [Thread-56908] [transport.py] [_log()] Compression: none
2025-11-17T15:43:36.474 [DEBUG] [Thread-56908] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:43:36.493 [DEBUG] [Thread-56908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:43:36.493 [DEBUG] [Thread-56908] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:43:36.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:43:36.494 [DEBUG] [Thread-56908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:43:36.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:43:36.495 [DEBUG] [Thread-56908] [transport.py] [_log()] userauth is OK
2025-11-17T15:43:36.496 [DEBUG] [Thread-56908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:43:36.496 [DEBUG] [Thread-56908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:43:36.496 [DEBUG] [Thread-56908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:43:36.496 [DEBUG] [Thread-56908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:43:36.518 [INFO] [Thread-56908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:43:36.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:43:36.586 [DEBUG] [Thread-56910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:43:37.215 [DEBUG] [Thread-56908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:43:37.216 [DEBUG] [Thread-56908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:43:37.216 [DEBUG] [Thread-56908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:43:37.256 [DEBUG] [Thread-56908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:43:37.256 [DEBUG] [Thread-56908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:43:37.259 [DEBUG] [Thread-56908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:43:37.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:43:37.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:43:37.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:43:37.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:43:37.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:43:37.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:43:37.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:43:37.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:43:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:43:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.571227 -999.00  +23.30  14.59     21   -0.10 1 2 1 1 1   888    0 23.46 10.01 ----- 14.6 14.6 313.0 17.9 28.9 -23.0 28.4 -21.1 29.3 -19.4 29.9 -22.1
2025-11-17T15:43:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:43:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:43:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.571227
2025-11-17T15:43:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:43:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:43:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:43:37.284 [DEBUG] [Thread-56908] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:43:37.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:43:37.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:43:37.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:43:20', tmtdew=28.13, humidity=15.13, cloud=0.0, wind=13.25, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:42:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:43:37.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:43:37.381 [DEBUG] [Thread-56912] [transport.py] [_log()] starting thread (client mode): 0xd070f220
2025-11-17T15:43:37.381 [DEBUG] [Thread-56912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:43:37.395 [DEBUG] [Thread-56912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:43:37.396 [INFO] [Thread-56912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:43:37.403 [DEBUG] [Thread-56912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:43:37.403 [DEBUG] [Thread-56912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:43:37.403 [DEBUG] [Thread-56912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] client lang: <none>
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] server lang: <none>
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] kex follows: False
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] Compression: none
2025-11-17T15:43:37.404 [DEBUG] [Thread-56912] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:43:37.467 [DEBUG] [Thread-56912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:43:37.467 [DEBUG] [Thread-56912] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:43:37.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:43:37.468 [DEBUG] [Thread-56912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:43:37.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:43:37.523 [DEBUG] [Thread-56912] [transport.py] [_log()] userauth is OK
2025-11-17T15:43:37.523 [DEBUG] [Thread-56912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:43:37.523 [DEBUG] [Thread-56912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:43:37.523 [DEBUG] [Thread-56912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:43:37.523 [DEBUG] [Thread-56912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:43:37.542 [INFO] [Thread-56912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:43:37.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:43:37.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:43:38.378 [DEBUG] [Thread-56912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:43:38.378 [DEBUG] [Thread-56912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:43:38.426 [DEBUG] [Thread-56912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:43:38.426 [DEBUG] [Thread-56912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:43:38.435 [DEBUG] [Thread-56912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:43:38.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:43:38.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:43: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') -> 00000000
2025-11-17T15:43:38.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:43:38.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:43:38.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:43:38.469 [DEBUG] [Thread-56912] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:43:51.623 [DEBUG] [Thread-56914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:44:06.665 [DEBUG] [Thread-56915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:44:08.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:44:08.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:44:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:44:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 43, 52), 28.03, 14.95, 0.0, 14.12, 23.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:44:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:43:52
2025-11-17T15:44:09.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:44:09.405 [DEBUG] [Thread-56916] [transport.py] [_log()] starting thread (client mode): 0xd31ee9b0
2025-11-17T15:44:09.405 [DEBUG] [Thread-56916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:44:09.425 [DEBUG] [Thread-56916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:44:09.425 [INFO] [Thread-56916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:44:09.429 [DEBUG] [Thread-56916] [transport.py] [_log()] client lang: <none>
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] server lang: <none>
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] kex follows: False
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] Compression: none
2025-11-17T15:44:09.430 [DEBUG] [Thread-56916] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:44:09.449 [DEBUG] [Thread-56916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:44:09.449 [DEBUG] [Thread-56916] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:44:09.450 [DEBUG] [Thread-56916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:44:09.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:44:09.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:44:09.451 [DEBUG] [Thread-56916] [transport.py] [_log()] userauth is OK
2025-11-17T15:44:09.452 [DEBUG] [Thread-56916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:44:09.452 [DEBUG] [Thread-56916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:44:09.452 [DEBUG] [Thread-56916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:44:09.452 [DEBUG] [Thread-56916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:44:09.469 [INFO] [Thread-56916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:44:09.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:44:10.092 [DEBUG] [Thread-56916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:44:10.092 [DEBUG] [Thread-56916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:44:10.093 [DEBUG] [Thread-56916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:44:10.133 [DEBUG] [Thread-56916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:44:10.133 [DEBUG] [Thread-56916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:44:10.136 [DEBUG] [Thread-56916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:44:10.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:44:10.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:44:10.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:44:10.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:44:10.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:44:10.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:44:10.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:44:10.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:44:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:44:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.571574 -999.00  +23.60  18.42     21   +0.00 1 2 1 1 1   888    0 23.02 8.22 ----- 18.4 18.4 307.8 25.4 29.0 -23.6 28.7 -21.4 29.5 -19.6 30.1 -22.5
2025-11-17T15:44:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:44:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:44:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.571574
2025-11-17T15:44:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:44:10.168 [DEBUG] [Thread-56916] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:44:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:44:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:44:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:44:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:44:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:43:52', tmtdew=28.03, humidity=14.95, cloud=0.0, wind=14.12, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:43:03.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:44:10.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:44:10.273 [DEBUG] [Thread-56919] [transport.py] [_log()] starting thread (client mode): 0xd0755ab0
2025-11-17T15:44:10.273 [DEBUG] [Thread-56919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:44:10.288 [DEBUG] [Thread-56919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:44:10.288 [INFO] [Thread-56919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] client lang: <none>
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] server lang: <none>
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] kex follows: False
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:44:10.296 [DEBUG] [Thread-56919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:44:10.297 [DEBUG] [Thread-56919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:44:10.297 [DEBUG] [Thread-56919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:44:10.297 [DEBUG] [Thread-56919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:44:10.297 [DEBUG] [Thread-56919] [transport.py] [_log()] Compression: none
2025-11-17T15:44:10.297 [DEBUG] [Thread-56919] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:44:10.355 [DEBUG] [Thread-56919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:44:10.355 [DEBUG] [Thread-56919] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:44:10.356 [DEBUG] [Thread-56919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:44:10.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:44:10.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:44:10.411 [DEBUG] [Thread-56919] [transport.py] [_log()] userauth is OK
2025-11-17T15:44:10.411 [DEBUG] [Thread-56919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:44:10.412 [DEBUG] [Thread-56919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:44:10.412 [DEBUG] [Thread-56919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:44:10.412 [DEBUG] [Thread-56919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:44:10.431 [INFO] [Thread-56919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:44:10.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:44:10.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:44:10.920 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:44:10.921 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:44:11.287 [DEBUG] [Thread-56919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:44:11.288 [DEBUG] [Thread-56919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:44:11.335 [DEBUG] [Thread-56919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:44:11.335 [DEBUG] [Thread-56919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:44:11.344 [DEBUG] [Thread-56919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:44:11.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:44:11.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:44:11.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:44:11.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:44:11.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:44:11.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:44:11.379 [DEBUG] [Thread-56919] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:44:19.686 [DEBUG] [Thread-56921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:44:21.692 [DEBUG] [Thread-56922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:44:36.722 [DEBUG] [Thread-56923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:44:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:44:41.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:44:41.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:44:42.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 44, 24), 27.97, 15.01, 0.0, 13.08, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:44:42.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:44:24
2025-11-17T15:44:42.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:44:42.326 [DEBUG] [Thread-56924] [transport.py] [_log()] starting thread (client mode): 0xd0755090
2025-11-17T15:44:42.326 [DEBUG] [Thread-56924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:44:42.345 [DEBUG] [Thread-56924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:44:42.346 [INFO] [Thread-56924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] client lang: <none>
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] server lang: <none>
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] kex follows: False
2025-11-17T15:44:42.349 [DEBUG] [Thread-56924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:44:42.350 [DEBUG] [Thread-56924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:44:42.350 [DEBUG] [Thread-56924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:44:42.350 [DEBUG] [Thread-56924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:44:42.350 [DEBUG] [Thread-56924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:44:42.350 [DEBUG] [Thread-56924] [transport.py] [_log()] Compression: none
2025-11-17T15:44:42.350 [DEBUG] [Thread-56924] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:44:42.370 [DEBUG] [Thread-56924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:44:42.370 [DEBUG] [Thread-56924] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:44:42.371 [DEBUG] [Thread-56924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:44:42.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:44:42.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:44:42.373 [DEBUG] [Thread-56924] [transport.py] [_log()] userauth is OK
2025-11-17T15:44:42.373 [DEBUG] [Thread-56924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:44:42.373 [DEBUG] [Thread-56924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:44:42.373 [DEBUG] [Thread-56924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:44:42.373 [DEBUG] [Thread-56924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:44:42.397 [INFO] [Thread-56924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:44:42.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:44:43.136 [DEBUG] [Thread-56924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:44:43.137 [DEBUG] [Thread-56924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:44:43.137 [DEBUG] [Thread-56924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:44:43.177 [DEBUG] [Thread-56924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:44:43.178 [DEBUG] [Thread-56924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:44:43.180 [DEBUG] [Thread-56924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:44:43.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:44:43.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:44:43.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:44:43.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:44:43.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:44:43.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:44:43.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:44:43.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:44:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:44:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.572269 -999.00  +23.50  14.73     21   +0.00 1 2 1 1 1   888    0 23.66 7.91 ----- 14.7 14.7 293.8 19.8 29.1 -24.7 28.8 -22.7 29.6 -21.8 30.2 -23.6
2025-11-17T15:44:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:44:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:44:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.572269
2025-11-17T15:44:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:44:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:44:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:44:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:44:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:44:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:44:24', tmtdew=27.97, humidity=15.01, cloud=0.0, wind=13.08, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:44:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:44:43.206 [DEBUG] [Thread-56924] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:44:43.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:44:43.302 [DEBUG] [Thread-56927] [transport.py] [_log()] starting thread (client mode): 0xd31b05e0
2025-11-17T15:44:43.303 [DEBUG] [Thread-56927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:44:43.320 [DEBUG] [Thread-56927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:44:43.320 [INFO] [Thread-56927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:44:43.327 [DEBUG] [Thread-56927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] client lang: <none>
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] server lang: <none>
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] kex follows: False
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:44:43.328 [DEBUG] [Thread-56927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:44:43.329 [DEBUG] [Thread-56927] [transport.py] [_log()] Compression: none
2025-11-17T15:44:43.329 [DEBUG] [Thread-56927] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:44:43.387 [DEBUG] [Thread-56927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:44:43.387 [DEBUG] [Thread-56927] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:44:43.387 [DEBUG] [Thread-56927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:44:43.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:44:43.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:44:43.443 [DEBUG] [Thread-56927] [transport.py] [_log()] userauth is OK
2025-11-17T15:44:43.443 [DEBUG] [Thread-56927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:44:43.444 [DEBUG] [Thread-56927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:44:43.444 [DEBUG] [Thread-56927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:44:43.444 [DEBUG] [Thread-56927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:44:43.463 [INFO] [Thread-56927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:44:43.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:44:43.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:44:44.338 [DEBUG] [Thread-56927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:44:44.338 [DEBUG] [Thread-56927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:44:44.387 [DEBUG] [Thread-56927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:44:44.387 [DEBUG] [Thread-56927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:44:44.396 [DEBUG] [Thread-56927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:44:44.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:44:44.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:44: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
2025-11-17T15:44:44.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:44:44.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:44:44.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:44:44.441 [DEBUG] [Thread-56927] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:44:51.753 [DEBUG] [Thread-56929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:45:06.791 [DEBUG] [Thread-56930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:45:11.062 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:45:11.064 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:45:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:45:14.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:45:14.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:45:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 44, 56), 27.72, 15.61, 0.0, 13.73, 23.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:45:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:44:56
2025-11-17T15:45:15.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:45:15.379 [DEBUG] [Thread-56931] [transport.py] [_log()] starting thread (client mode): 0xd0757070
2025-11-17T15:45:15.379 [DEBUG] [Thread-56931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:45:15.404 [DEBUG] [Thread-56931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:45:15.404 [INFO] [Thread-56931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] client lang: <none>
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] server lang: <none>
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] kex follows: False
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] Compression: none
2025-11-17T15:45:15.407 [DEBUG] [Thread-56931] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:45:15.425 [DEBUG] [Thread-56931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:45:15.426 [DEBUG] [Thread-56931] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:45:15.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:45:15.426 [DEBUG] [Thread-56931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:45:15.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:45:15.469 [DEBUG] [Thread-56931] [transport.py] [_log()] userauth is OK
2025-11-17T15:45:15.469 [DEBUG] [Thread-56931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:45:15.469 [DEBUG] [Thread-56931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:45:15.469 [DEBUG] [Thread-56931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:45:15.469 [DEBUG] [Thread-56931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:45:15.501 [INFO] [Thread-56931] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:45:15.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:45:16.170 [DEBUG] [Thread-56931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:45:16.170 [DEBUG] [Thread-56931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:45:16.171 [DEBUG] [Thread-56931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:45:16.211 [DEBUG] [Thread-56931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:45:16.212 [DEBUG] [Thread-56931] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:45:16.214 [DEBUG] [Thread-56931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:45:16.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:45:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:45:16.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:45:16.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:45:16.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:45:16.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:45:16.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:45:16.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:45:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:45:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.572616 -999.00  +23.40  14.81     21   +0.00 1 1 1 1 1   888    0 23.27 7.23 ----- 14.8 14.8 302.6 20.1 29.2 -24.3 28.9 -23.4 29.6 -22.7 30.3 -23.3
2025-11-17T15:45:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:45:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:45:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.572616
2025-11-17T15:45:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:45:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:45:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:45:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:45:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:45:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:44:56', tmtdew=27.72, humidity=15.61, cloud=0.0, wind=13.73, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:44:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:45:16.241 [DEBUG] [Thread-56931] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:45:16.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:45:16.337 [DEBUG] [Thread-56934] [transport.py] [_log()] starting thread (client mode): 0xd0756f20
2025-11-17T15:45:16.337 [DEBUG] [Thread-56934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:45:16.354 [DEBUG] [Thread-56934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:45:16.354 [INFO] [Thread-56934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] client lang: <none>
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] server lang: <none>
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] kex follows: False
2025-11-17T15:45:16.365 [DEBUG] [Thread-56934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:45:16.366 [DEBUG] [Thread-56934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:45:16.366 [DEBUG] [Thread-56934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:45:16.366 [DEBUG] [Thread-56934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:45:16.366 [DEBUG] [Thread-56934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:45:16.366 [DEBUG] [Thread-56934] [transport.py] [_log()] Compression: none
2025-11-17T15:45:16.366 [DEBUG] [Thread-56934] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:45:16.424 [DEBUG] [Thread-56934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:45:16.424 [DEBUG] [Thread-56934] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:45:16.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:45:16.425 [DEBUG] [Thread-56934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:45:16.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:45:16.480 [DEBUG] [Thread-56934] [transport.py] [_log()] userauth is OK
2025-11-17T15:45:16.480 [DEBUG] [Thread-56934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:45:16.481 [DEBUG] [Thread-56934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:45:16.481 [DEBUG] [Thread-56934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:45:16.481 [DEBUG] [Thread-56934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:45:16.500 [INFO] [Thread-56934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:45:16.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:45:16.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:45:17.355 [DEBUG] [Thread-56934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:45:17.355 [DEBUG] [Thread-56934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:45:17.404 [DEBUG] [Thread-56934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:45:17.404 [DEBUG] [Thread-56934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:45:17.414 [DEBUG] [Thread-56934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:45:17.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:45:17.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:45:17.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:45:17.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:45:17.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:45:17.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:45:17.448 [DEBUG] [Thread-56934] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:45:19.742 [DEBUG] [Thread-56936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:45:21.822 [DEBUG] [Thread-56937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:45:36.876 [DEBUG] [Thread-56938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:45:47.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:45:47.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:45:47.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:45:48.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 45, 28), 27.91, 15.45, 0.0, 16.41, 23.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:45:48.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:45:28
2025-11-17T15:45:48.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:45:48.392 [DEBUG] [Thread-56939] [transport.py] [_log()] starting thread (client mode): 0xd31ed630
2025-11-17T15:45:48.392 [DEBUG] [Thread-56939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:45:48.402 [DEBUG] [Thread-56939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:45:48.403 [INFO] [Thread-56939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] client lang: <none>
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] server lang: <none>
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] kex follows: False
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] Compression: none
2025-11-17T15:45:48.404 [DEBUG] [Thread-56939] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:45:48.413 [DEBUG] [Thread-56939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:45:48.414 [DEBUG] [Thread-56939] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:45:48.414 [DEBUG] [Thread-56939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:45:48.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:45:48.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:45:48.415 [DEBUG] [Thread-56939] [transport.py] [_log()] userauth is OK
2025-11-17T15:45:48.415 [DEBUG] [Thread-56939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:45:48.415 [DEBUG] [Thread-56939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:45:48.415 [DEBUG] [Thread-56939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:45:48.415 [DEBUG] [Thread-56939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:45:48.430 [INFO] [Thread-56939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:45:48.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:45:49.195 [DEBUG] [Thread-56939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:45:49.196 [DEBUG] [Thread-56939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:45:49.196 [DEBUG] [Thread-56939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:45:49.236 [DEBUG] [Thread-56939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:45:49.236 [DEBUG] [Thread-56939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:45:49.239 [DEBUG] [Thread-56939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:45:49.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:45:49.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:45:49.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:45:49.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:45:49.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:45:49.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:45:49.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:45:49.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:45:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:45:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.572963 -999.00  +23.70  17.70     20   +0.00 1 1 1 1 1   888    0 23.48 7.95 ----- 17.7 17.7 278.6 21.9 29.1 -26.2 29.0 -23.4 29.6 -25.3 30.3 -24.8
2025-11-17T15:45:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:45:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:45:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.572963
2025-11-17T15:45:49.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:45:49.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:45:49.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:45:49.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:45:49.264 [DEBUG] [Thread-56939] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:45:49.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:45:49.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:45:28', tmtdew=27.91, humidity=15.45, cloud=0.0, wind=16.41, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:45:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:45:49.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:45:49.360 [DEBUG] [Thread-56942] [transport.py] [_log()] starting thread (client mode): 0xd31ee680
2025-11-17T15:45:49.360 [DEBUG] [Thread-56942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:45:49.375 [DEBUG] [Thread-56942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:45:49.375 [INFO] [Thread-56942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] client lang: <none>
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] server lang: <none>
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] kex follows: False
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] Compression: none
2025-11-17T15:45:49.383 [DEBUG] [Thread-56942] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:45:49.439 [DEBUG] [Thread-56942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:45:49.440 [DEBUG] [Thread-56942] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:45:49.440 [DEBUG] [Thread-56942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:45:49.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:45:49.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:45:49.495 [DEBUG] [Thread-56942] [transport.py] [_log()] userauth is OK
2025-11-17T15:45:49.495 [DEBUG] [Thread-56942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:45:49.496 [DEBUG] [Thread-56942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:45:49.496 [DEBUG] [Thread-56942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:45:49.496 [DEBUG] [Thread-56942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:45:49.515 [INFO] [Thread-56942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:45:49.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:45:49.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:45:50.398 [DEBUG] [Thread-56942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:45:50.399 [DEBUG] [Thread-56942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:45:50.446 [DEBUG] [Thread-56942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:45:50.446 [DEBUG] [Thread-56942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:45:50.455 [DEBUG] [Thread-56942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:45:50.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:45:50.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:45:50.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:45:50.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:45:50.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:45:50.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:45:50.489 [DEBUG] [Thread-56942] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:45:51.920 [DEBUG] [Thread-56944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:46:06.959 [DEBUG] [Thread-56945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:46:11.205 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:46:11.206 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:46:19.791 [DEBUG] [Thread-56946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:46:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:46:20.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:46:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:46:21.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 45, 28), 27.91, 15.45, 0.0, 16.41, 23.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:46:21.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:45:28
2025-11-17T15:46:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:46:21.400 [DEBUG] [Thread-56947] [transport.py] [_log()] starting thread (client mode): 0xd0755c60
2025-11-17T15:46:21.400 [DEBUG] [Thread-56947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:46:21.422 [DEBUG] [Thread-56947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:46:21.422 [INFO] [Thread-56947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] client lang: <none>
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] server lang: <none>
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] kex follows: False
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] Compression: none
2025-11-17T15:46:21.425 [DEBUG] [Thread-56947] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:46:21.442 [DEBUG] [Thread-56947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:46:21.443 [DEBUG] [Thread-56947] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:46:21.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:46:21.444 [DEBUG] [Thread-56947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:46:21.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:46:21.446 [DEBUG] [Thread-56947] [transport.py] [_log()] userauth is OK
2025-11-17T15:46:21.446 [DEBUG] [Thread-56947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:46:21.446 [DEBUG] [Thread-56947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:46:21.446 [DEBUG] [Thread-56947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:46:21.446 [DEBUG] [Thread-56947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:46:21.470 [INFO] [Thread-56947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:46:21.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:46:21.989 [DEBUG] [Thread-56949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:46:22.091 [DEBUG] [Thread-56947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:46:22.091 [DEBUG] [Thread-56947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:46:22.092 [DEBUG] [Thread-56947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:46:22.132 [DEBUG] [Thread-56947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:46:22.133 [DEBUG] [Thread-56947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:46:22.136 [DEBUG] [Thread-56947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:46:22.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:46:22.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:46:22.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:46:22.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:46:22.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:46:22.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:46:22.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:46:22.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:46:22.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:46:22.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.573310 -999.00  +23.40  19.76     20   -0.20 1 1 1 1 1   888    0 23.47 10.87 ----- 19.8 19.8 276.0 27.1 28.8 -28.6 28.9 -24.8 29.3 -24.6 30.0 -26.5
2025-11-17T15:46:22.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:46:22.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:46:22.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.573310
2025-11-17T15:46:22.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:46:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:46:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:46:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:46:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:46:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:45:28', tmtdew=27.91, humidity=15.45, cloud=0.0, wind=16.41, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:45:33.984', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:46:22.160 [DEBUG] [Thread-56947] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:46:22.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:46:22.256 [DEBUG] [Thread-56951] [transport.py] [_log()] starting thread (client mode): 0xd0784af0
2025-11-17T15:46:22.256 [DEBUG] [Thread-56951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:46:22.271 [DEBUG] [Thread-56951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:46:22.271 [INFO] [Thread-56951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] client lang: <none>
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] server lang: <none>
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] kex follows: False
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:46:22.281 [DEBUG] [Thread-56951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:46:22.282 [DEBUG] [Thread-56951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:46:22.282 [DEBUG] [Thread-56951] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:46:22.282 [DEBUG] [Thread-56951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:46:22.282 [DEBUG] [Thread-56951] [transport.py] [_log()] Compression: none
2025-11-17T15:46:22.282 [DEBUG] [Thread-56951] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:46:22.335 [DEBUG] [Thread-56951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:46:22.335 [DEBUG] [Thread-56951] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:46:22.336 [DEBUG] [Thread-56951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:46:22.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:46:22.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:46:22.392 [DEBUG] [Thread-56951] [transport.py] [_log()] userauth is OK
2025-11-17T15:46:22.392 [DEBUG] [Thread-56951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:46:22.392 [DEBUG] [Thread-56951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:46:22.392 [DEBUG] [Thread-56951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:46:22.392 [DEBUG] [Thread-56951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:46:22.411 [INFO] [Thread-56951] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:46:22.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:46:22.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:46:23.249 [DEBUG] [Thread-56951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:46:23.249 [DEBUG] [Thread-56951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:46:23.297 [DEBUG] [Thread-56951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:46:23.297 [DEBUG] [Thread-56951] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:46:23.308 [DEBUG] [Thread-56951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:46:23.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:46:23.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:46:23.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:46:23.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:46:23.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:46:23.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:46:23.347 [DEBUG] [Thread-56951] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:46:37.023 [DEBUG] [Thread-56953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:46:52.069 [DEBUG] [Thread-56954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:46:53.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:46:53.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:46:53.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:46:54.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 46, 32), 27.79, 15.4, 0.0, 16.45, 23.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:46:54.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:46:32
2025-11-17T15:46:54.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:46:54.276 [DEBUG] [Thread-56955] [transport.py] [_log()] starting thread (client mode): 0xd0784c10
2025-11-17T15:46:54.277 [DEBUG] [Thread-56955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:46:54.296 [DEBUG] [Thread-56955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:46:54.296 [INFO] [Thread-56955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:46:54.299 [DEBUG] [Thread-56955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] client lang: <none>
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] server lang: <none>
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] kex follows: False
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:46:54.300 [DEBUG] [Thread-56955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:46:54.301 [DEBUG] [Thread-56955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:46:54.301 [DEBUG] [Thread-56955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:46:54.301 [DEBUG] [Thread-56955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:46:54.301 [DEBUG] [Thread-56955] [transport.py] [_log()] Compression: none
2025-11-17T15:46:54.301 [DEBUG] [Thread-56955] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:46:54.321 [DEBUG] [Thread-56955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:46:54.322 [DEBUG] [Thread-56955] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:46:54.322 [DEBUG] [Thread-56955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:46:54.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:46:54.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:46:54.324 [DEBUG] [Thread-56955] [transport.py] [_log()] userauth is OK
2025-11-17T15:46:54.325 [DEBUG] [Thread-56955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:46:54.325 [DEBUG] [Thread-56955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:46:54.325 [DEBUG] [Thread-56955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:46:54.325 [DEBUG] [Thread-56955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:46:54.347 [INFO] [Thread-56955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:46:54.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:46:55.137 [DEBUG] [Thread-56955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:46:55.137 [DEBUG] [Thread-56955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:46:55.138 [DEBUG] [Thread-56955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:46:55.178 [DEBUG] [Thread-56955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:46:55.178 [DEBUG] [Thread-56955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:46:55.181 [DEBUG] [Thread-56955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:46:55.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:46:55.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:46:55.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:46:55.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:46:55.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:46:55.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:46:55.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.573658 -999.00  +22.90  16.47     21   -0.30 1 1 1 1 1   888    0 23.06 12.50 ----- 16.5 16.5 278.0 21.9 28.8 -26.8 28.8 -25.0 29.0 -24.5 30.0 -25.0
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.573658
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:46:55.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:46:32', tmtdew=27.79, humidity=15.4, cloud=0.0, wind=16.45, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:46:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:46:55.201 [DEBUG] [Thread-56955] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:46:55.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:46:55.288 [DEBUG] [Thread-56958] [transport.py] [_log()] starting thread (client mode): 0xd0784070
2025-11-17T15:46:55.288 [DEBUG] [Thread-56958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:46:55.303 [DEBUG] [Thread-56958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:46:55.303 [INFO] [Thread-56958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:46:55.310 [DEBUG] [Thread-56958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:46:55.310 [DEBUG] [Thread-56958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:46:55.310 [DEBUG] [Thread-56958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:46:55.310 [DEBUG] [Thread-56958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:46:55.310 [DEBUG] [Thread-56958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:46:55.310 [DEBUG] [Thread-56958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:46:55.310 [DEBUG] [Thread-56958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] client lang: <none>
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] server lang: <none>
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] kex follows: False
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] Compression: none
2025-11-17T15:46:55.311 [DEBUG] [Thread-56958] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:46:55.366 [DEBUG] [Thread-56958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:46:55.366 [DEBUG] [Thread-56958] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:46:55.366 [DEBUG] [Thread-56958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:46:55.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:46:55.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:46:55.423 [DEBUG] [Thread-56958] [transport.py] [_log()] userauth is OK
2025-11-17T15:46:55.423 [DEBUG] [Thread-56958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:46:55.423 [DEBUG] [Thread-56958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:46:55.423 [DEBUG] [Thread-56958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:46:55.423 [DEBUG] [Thread-56958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:46:55.437 [INFO] [Thread-56958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:46:55.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:46:55.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:46:56.323 [DEBUG] [Thread-56958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:46:56.323 [DEBUG] [Thread-56958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:46:56.371 [DEBUG] [Thread-56958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:46:56.371 [DEBUG] [Thread-56958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:46:56.379 [DEBUG] [Thread-56958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:46:56.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:46:56.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:46:56.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:46:56.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:46:56.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:46:56.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:46:56.411 [DEBUG] [Thread-56958] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:47:07.096 [DEBUG] [Thread-56960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:47:11.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:47:11.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:47:19.846 [DEBUG] [Thread-56961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:47:22.143 [DEBUG] [Thread-56962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:47:26.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:47:26.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:47:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:47:27.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 47, 4), 27.88, 15.3, 0.0, 15.67, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:47:27.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:47:04
2025-11-17T15:47:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:47:27.343 [DEBUG] [Thread-56963] [transport.py] [_log()] starting thread (client mode): 0xd07555d0
2025-11-17T15:47:27.343 [DEBUG] [Thread-56963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:47:27.364 [DEBUG] [Thread-56963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:47:27.364 [INFO] [Thread-56963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] client lang: <none>
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] server lang: <none>
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] kex follows: False
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] Compression: none
2025-11-17T15:47:27.368 [DEBUG] [Thread-56963] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:47:27.386 [DEBUG] [Thread-56963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:47:27.387 [DEBUG] [Thread-56963] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:47:27.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:47:27.388 [DEBUG] [Thread-56963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:47:27.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:47:27.390 [DEBUG] [Thread-56963] [transport.py] [_log()] userauth is OK
2025-11-17T15:47:27.391 [DEBUG] [Thread-56963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:47:27.391 [DEBUG] [Thread-56963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:47:27.391 [DEBUG] [Thread-56963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:47:27.391 [DEBUG] [Thread-56963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:47:27.417 [INFO] [Thread-56963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:47:27.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:47:28.025 [DEBUG] [Thread-56963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:47:28.025 [DEBUG] [Thread-56963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:47:28.025 [DEBUG] [Thread-56963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:47:28.066 [DEBUG] [Thread-56963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:47:28.067 [DEBUG] [Thread-56963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:47:28.070 [DEBUG] [Thread-56963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:47:28.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:47:28.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:47:28.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:47:28.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:47:28.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:47:28.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:47:28.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:47:28.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:47:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:47:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.574005 -999.00  +22.80  16.25     21   -0.50 1 1 1 1 1   888    0 23.81 12.55 ----- 16.2 16.2 309.6 23.7 29.0 -26.0 28.7 -25.0 29.3 -23.0 30.0 -25.2
2025-11-17T15:47:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:47:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:47:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.574005
2025-11-17T15:47:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:47:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:47:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:47:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:47:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:47:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:47:04', tmtdew=27.88, humidity=15.3, cloud=0.0, wind=15.67, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:46:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:47:28.095 [DEBUG] [Thread-56963] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:47:28.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:47:28.191 [DEBUG] [Thread-56966] [transport.py] [_log()] starting thread (client mode): 0xd07546d0
2025-11-17T15:47:28.191 [DEBUG] [Thread-56966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:47:28.206 [DEBUG] [Thread-56966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:47:28.206 [INFO] [Thread-56966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:47:28.214 [DEBUG] [Thread-56966] [transport.py] [_log()] client lang: <none>
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] server lang: <none>
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] kex follows: False
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] Compression: none
2025-11-17T15:47:28.215 [DEBUG] [Thread-56966] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:47:28.271 [DEBUG] [Thread-56966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:47:28.272 [DEBUG] [Thread-56966] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:47:28.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:47:28.273 [DEBUG] [Thread-56966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:47:28.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:47:28.327 [DEBUG] [Thread-56966] [transport.py] [_log()] userauth is OK
2025-11-17T15:47:28.328 [DEBUG] [Thread-56966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:47:28.328 [DEBUG] [Thread-56966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:47:28.328 [DEBUG] [Thread-56966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:47:28.328 [DEBUG] [Thread-56966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:47:28.347 [INFO] [Thread-56966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:47:28.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:47:28.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:47:29.241 [DEBUG] [Thread-56966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:47:29.242 [DEBUG] [Thread-56966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:47:29.290 [DEBUG] [Thread-56966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:47:29.291 [DEBUG] [Thread-56966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:47:29.300 [DEBUG] [Thread-56966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:47:29.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:47: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')
2025-11-17T15:47:29.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:47:29.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:47:29.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:47:29.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:47:29.334 [DEBUG] [Thread-56966] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:47:37.174 [DEBUG] [Thread-56968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:47:52.216 [DEBUG] [Thread-56969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:47:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:47:59.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:47:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:47:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 47, 36), 28.15, 15.18, 0.0, 9.32, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:47:59.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:47:36
2025-11-17T15:48:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:48:00.260 [DEBUG] [Thread-56970] [transport.py] [_log()] starting thread (client mode): 0xd0754d00
2025-11-17T15:48:00.260 [DEBUG] [Thread-56970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:48:00.280 [DEBUG] [Thread-56970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:48:00.280 [INFO] [Thread-56970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:48:00.283 [DEBUG] [Thread-56970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:48:00.283 [DEBUG] [Thread-56970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:48:00.283 [DEBUG] [Thread-56970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:48:00.283 [DEBUG] [Thread-56970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:48:00.283 [DEBUG] [Thread-56970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:48:00.283 [DEBUG] [Thread-56970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] client lang: <none>
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] server lang: <none>
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] kex follows: False
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] Compression: none
2025-11-17T15:48:00.284 [DEBUG] [Thread-56970] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:48:00.304 [DEBUG] [Thread-56970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:48:00.304 [DEBUG] [Thread-56970] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:48:00.305 [DEBUG] [Thread-56970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:48:00.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:48:00.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:48:00.306 [DEBUG] [Thread-56970] [transport.py] [_log()] userauth is OK
2025-11-17T15:48:00.307 [DEBUG] [Thread-56970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:48:00.307 [DEBUG] [Thread-56970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:48:00.307 [DEBUG] [Thread-56970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:48:00.307 [DEBUG] [Thread-56970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:48:00.333 [INFO] [Thread-56970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:48:00.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:48:01.167 [DEBUG] [Thread-56970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:48:01.167 [DEBUG] [Thread-56970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:48:01.168 [DEBUG] [Thread-56970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:48:01.208 [DEBUG] [Thread-56970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:48:01.208 [DEBUG] [Thread-56970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:48:01.211 [DEBUG] [Thread-56970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:48:01.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:48:01.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:48:01.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:48:01.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:48:01.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:48:01.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:48:01.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:48:01.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:48:01.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:48:01.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.574352 -999.00  +22.60  13.81     21   -0.50 1 1 1 1 1   888    0 23.71 12.56 ----- 13.8 13.8 291.8 24.0 29.0 -26.6 28.7 -25.4 29.3 -24.7 30.1 -24.6
2025-11-17T15:48:01.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:48:01.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:48:01.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.574352
2025-11-17T15:48:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:48:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:48:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:48:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:48:01.234 [DEBUG] [Thread-56970] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:48:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:48:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:47:36', tmtdew=28.15, humidity=15.18, cloud=0.0, wind=9.32, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:47:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:48:01.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:48:01.330 [DEBUG] [Thread-56973] [transport.py] [_log()] starting thread (client mode): 0xd0786fb0
2025-11-17T15:48:01.330 [DEBUG] [Thread-56973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:48:01.344 [DEBUG] [Thread-56973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:48:01.345 [INFO] [Thread-56973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] client lang: <none>
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] server lang: <none>
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] kex follows: False
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:48:01.352 [DEBUG] [Thread-56973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:48:01.353 [DEBUG] [Thread-56973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:48:01.353 [DEBUG] [Thread-56973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:48:01.353 [DEBUG] [Thread-56973] [transport.py] [_log()] Compression: none
2025-11-17T15:48:01.353 [DEBUG] [Thread-56973] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:48:01.411 [DEBUG] [Thread-56973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:48:01.412 [DEBUG] [Thread-56973] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:48:01.412 [DEBUG] [Thread-56973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:48:01.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:48:01.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:48:01.471 [DEBUG] [Thread-56973] [transport.py] [_log()] userauth is OK
2025-11-17T15:48:01.472 [DEBUG] [Thread-56973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:48:01.472 [DEBUG] [Thread-56973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:48:01.472 [DEBUG] [Thread-56973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:48:01.472 [DEBUG] [Thread-56973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:48:01.495 [INFO] [Thread-56973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:48:01.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:48:01.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:48:02.466 [DEBUG] [Thread-56973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:48:02.467 [DEBUG] [Thread-56973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:48:02.514 [DEBUG] [Thread-56973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:48:02.514 [DEBUG] [Thread-56973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:48:02.522 [DEBUG] [Thread-56973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:48:02.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:48:02.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:48:02.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:48:02.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:48:02.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:48:02.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:48:02.553 [DEBUG] [Thread-56973] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:48:07.245 [DEBUG] [Thread-56975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:48:11.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:48:11.491 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:48:19.899 [DEBUG] [Thread-56976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:48:22.288 [DEBUG] [Thread-56977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:48:32.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:48:32.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:48:32.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:48:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 48, 8), 28.62, 14.74, 0.0, 10.36, 23.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:48:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:48:08
2025-11-17T15:48:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:48:33.492 [DEBUG] [Thread-56978] [transport.py] [_log()] starting thread (client mode): 0xd0785360
2025-11-17T15:48:33.492 [DEBUG] [Thread-56978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:48:33.512 [DEBUG] [Thread-56978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:48:33.512 [INFO] [Thread-56978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:48:33.514 [DEBUG] [Thread-56978] [transport.py] [_log()] client lang: <none>
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] server lang: <none>
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] kex follows: False
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] Compression: none
2025-11-17T15:48:33.515 [DEBUG] [Thread-56978] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:48:33.523 [DEBUG] [Thread-56978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:48:33.523 [DEBUG] [Thread-56978] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:48:33.524 [DEBUG] [Thread-56978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:48:33.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:48:33.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:48:33.525 [DEBUG] [Thread-56978] [transport.py] [_log()] userauth is OK
2025-11-17T15:48:33.526 [DEBUG] [Thread-56978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:48:33.526 [DEBUG] [Thread-56978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:48:33.526 [DEBUG] [Thread-56978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:48:33.526 [DEBUG] [Thread-56978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:48:33.550 [INFO] [Thread-56978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:48:33.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:48:34.144 [DEBUG] [Thread-56978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:48:34.144 [DEBUG] [Thread-56978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:48:34.144 [DEBUG] [Thread-56978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:48:34.185 [DEBUG] [Thread-56978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:48:34.185 [DEBUG] [Thread-56978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:48:34.188 [DEBUG] [Thread-56978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:48:34.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:48:34.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:48:34.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:48:34.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:48:34.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:48:34.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:48:34.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:48:34.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:48:34.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:48:34.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.574699 -999.00  +22.90   3.30     21   -0.40 1 1 1 1 1   888    0 23.52 13.51 ----- 3.3 3.3 164.8 7.3 29.1 -28.5 28.9 -24.3 29.6 -22.4 30.1 -28.5
2025-11-17T15:48:34.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:48:34.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:48:34.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.574699
2025-11-17T15:48:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:48:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:48:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:48:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:48:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:48:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:48:08', tmtdew=28.62, humidity=14.74, cloud=0.0, wind=10.36, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:47:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:48:34.208 [DEBUG] [Thread-56978] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:48:34.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:48:34.292 [DEBUG] [Thread-56981] [transport.py] [_log()] starting thread (client mode): 0xd0785f60
2025-11-17T15:48:34.293 [DEBUG] [Thread-56981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:48:34.307 [DEBUG] [Thread-56981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:48:34.308 [INFO] [Thread-56981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:48:34.315 [DEBUG] [Thread-56981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:48:34.315 [DEBUG] [Thread-56981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:48:34.315 [DEBUG] [Thread-56981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:48:34.315 [DEBUG] [Thread-56981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:48:34.315 [DEBUG] [Thread-56981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] client lang: <none>
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] server lang: <none>
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] kex follows: False
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] Compression: none
2025-11-17T15:48:34.316 [DEBUG] [Thread-56981] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:48:34.371 [DEBUG] [Thread-56981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:48:34.372 [DEBUG] [Thread-56981] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:48:34.372 [DEBUG] [Thread-56981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:48:34.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:48:34.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:48:34.428 [DEBUG] [Thread-56981] [transport.py] [_log()] userauth is OK
2025-11-17T15:48:34.428 [DEBUG] [Thread-56981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:48:34.428 [DEBUG] [Thread-56981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:48:34.428 [DEBUG] [Thread-56981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:48:34.428 [DEBUG] [Thread-56981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:48:34.446 [INFO] [Thread-56981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:48:34.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:48:34.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:48:35.326 [DEBUG] [Thread-56981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:48:35.326 [DEBUG] [Thread-56981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:48:35.374 [DEBUG] [Thread-56981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:48:35.374 [DEBUG] [Thread-56981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:48:35.382 [DEBUG] [Thread-56981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:48:35.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:48:35.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:48:35.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:48:35.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:48:35.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:48:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:48:35.414 [DEBUG] [Thread-56981] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:48:37.317 [DEBUG] [Thread-56983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:48:52.364 [DEBUG] [Thread-56984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:49:05.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:49:05.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:49:05.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:49:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 48, 40), 28.28, 14.9, 0.0, 12.95, 23.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:49:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:48:40
2025-11-17T15:49:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:49:06.361 [DEBUG] [Thread-56985] [transport.py] [_log()] starting thread (client mode): 0xd0718b50
2025-11-17T15:49:06.361 [DEBUG] [Thread-56985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:49:06.382 [DEBUG] [Thread-56985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:49:06.382 [INFO] [Thread-56985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] client lang: <none>
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] server lang: <none>
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] kex follows: False
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] Compression: none
2025-11-17T15:49:06.384 [DEBUG] [Thread-56985] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:49:06.393 [DEBUG] [Thread-56985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:49:06.393 [DEBUG] [Thread-56985] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:49:06.393 [DEBUG] [Thread-56985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:49:06.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:49:06.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:49:06.395 [DEBUG] [Thread-56985] [transport.py] [_log()] userauth is OK
2025-11-17T15:49:06.395 [DEBUG] [Thread-56985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:49:06.396 [DEBUG] [Thread-56985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:49:06.396 [DEBUG] [Thread-56985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:49:06.396 [DEBUG] [Thread-56985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:49:06.413 [INFO] [Thread-56985] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:49:06.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:49:07.182 [DEBUG] [Thread-56985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:49:07.182 [DEBUG] [Thread-56985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:49:07.183 [DEBUG] [Thread-56985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:49:07.223 [DEBUG] [Thread-56985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:49:07.224 [DEBUG] [Thread-56985] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:49:07.227 [DEBUG] [Thread-56985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:49:07.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:49:07.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:49:07.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:49:07.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:49:07.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:49:07.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:49:07.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:49:07.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:49:07.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:49:07.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.575046 -999.00  +23.00   3.93     20   -0.50 1 1 1 1 1   888    0 23.78 17.08 ----- 3.9 3.9 277.1 11.9 29.0 -28.6 28.8 -25.2 29.5 -22.7 30.1 -28.2
2025-11-17T15:49:07.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:49:07.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:49:07.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.575046
2025-11-17T15:49:07.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:49:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:49:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:49:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:49:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:49:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:48:40', tmtdew=28.28, humidity=14.9, cloud=0.0, wind=12.95, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:48:03.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:49:07.252 [DEBUG] [Thread-56985] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:49:07.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:49:07.346 [DEBUG] [Thread-56988] [transport.py] [_log()] starting thread (client mode): 0xd071ad40
2025-11-17T15:49:07.346 [DEBUG] [Thread-56988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:49:07.361 [DEBUG] [Thread-56988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:49:07.361 [INFO] [Thread-56988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:49:07.368 [DEBUG] [Thread-56988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] client lang: <none>
2025-11-17T15:49:07.369 [DEBUG] [Thread-56988] [transport.py] [_log()] server lang: <none>
2025-11-17T15:49:07.370 [DEBUG] [Thread-56988] [transport.py] [_log()] kex follows: False
2025-11-17T15:49:07.370 [DEBUG] [Thread-56988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:49:07.370 [DEBUG] [Thread-56988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:49:07.370 [DEBUG] [Thread-56988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:49:07.370 [DEBUG] [Thread-56988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:49:07.370 [DEBUG] [Thread-56988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:49:07.370 [DEBUG] [Thread-56988] [transport.py] [_log()] Compression: none
2025-11-17T15:49:07.370 [DEBUG] [Thread-56988] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:49:07.393 [DEBUG] [Thread-56990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:49:07.432 [DEBUG] [Thread-56988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:49:07.432 [DEBUG] [Thread-56988] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:49:07.433 [DEBUG] [Thread-56988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:49:07.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:49:07.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:49:07.488 [DEBUG] [Thread-56988] [transport.py] [_log()] userauth is OK
2025-11-17T15:49:07.488 [DEBUG] [Thread-56988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:49:07.488 [DEBUG] [Thread-56988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:49:07.488 [DEBUG] [Thread-56988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:49:07.488 [DEBUG] [Thread-56988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:49:07.508 [INFO] [Thread-56988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:49:07.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:49:07.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:49:08.436 [DEBUG] [Thread-56988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:49:08.437 [DEBUG] [Thread-56988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:49:08.491 [DEBUG] [Thread-56988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:49:08.491 [DEBUG] [Thread-56988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:49:08.503 [DEBUG] [Thread-56988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:49:08.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:49:08.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:49:08.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:49:08.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:49:08.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:49:08.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:49:08.552 [DEBUG] [Thread-56988] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:49:11.631 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:49:11.632 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:49:19.956 [DEBUG] [Thread-56991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:49:22.436 [DEBUG] [Thread-56992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:49:37.469 [DEBUG] [Thread-56993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:49:38.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:49:38.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:49:38.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:49:39.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 49, 12), 28.05, 15.1, 0.0, 10.5, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:49:39.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:49:12
2025-11-17T15:49:39.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:49:39.485 [DEBUG] [Thread-56994] [transport.py] [_log()] starting thread (client mode): 0xd0719de0
2025-11-17T15:49:39.485 [DEBUG] [Thread-56994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:49:39.505 [DEBUG] [Thread-56994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:49:39.506 [INFO] [Thread-56994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] client lang: <none>
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] server lang: <none>
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] kex follows: False
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] Compression: none
2025-11-17T15:49:39.509 [DEBUG] [Thread-56994] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:49:39.526 [DEBUG] [Thread-56994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:49:39.527 [DEBUG] [Thread-56994] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:49:39.527 [DEBUG] [Thread-56994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:49:39.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:49:39.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:49:39.529 [DEBUG] [Thread-56994] [transport.py] [_log()] userauth is OK
2025-11-17T15:49:39.529 [DEBUG] [Thread-56994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:49:39.529 [DEBUG] [Thread-56994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:49:39.529 [DEBUG] [Thread-56994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:49:39.529 [DEBUG] [Thread-56994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:49:39.550 [INFO] [Thread-56994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:49:39.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:49:40.183 [DEBUG] [Thread-56994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:49:40.183 [DEBUG] [Thread-56994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:49:40.184 [DEBUG] [Thread-56994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:49:40.224 [DEBUG] [Thread-56994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:49:40.224 [DEBUG] [Thread-56994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:49:40.227 [DEBUG] [Thread-56994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:49:40.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:49:40.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:49:40.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:49:40.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:49:40.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:49:40.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:49:40.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:49:40.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:49:40.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:49:40.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.575741 -999.00  +22.90  11.10     21   -0.40 1 1 1 1 1   888    0 23.53 19.75 ----- 11.1 11.1 281.2 14.3 29.0 -27.2 28.8 -25.0 29.3 -24.3 30.0 -25.0
2025-11-17T15:49:40.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:49:40.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:49:40.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.575741
2025-11-17T15:49:40.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:49:12', tmtdew=28.05, humidity=15.1, cloud=0.0, wind=10.5, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:49:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:49:40.253 [DEBUG] [Thread-56994] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:49:40.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:49:40.349 [DEBUG] [Thread-56997] [transport.py] [_log()] starting thread (client mode): 0xd0721f30
2025-11-17T15:49:40.349 [DEBUG] [Thread-56997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:49:40.364 [DEBUG] [Thread-56997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:49:40.365 [INFO] [Thread-56997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:49:40.372 [DEBUG] [Thread-56997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:49:40.372 [DEBUG] [Thread-56997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:49:40.372 [DEBUG] [Thread-56997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:49:40.372 [DEBUG] [Thread-56997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:49:40.372 [DEBUG] [Thread-56997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] client lang: <none>
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] server lang: <none>
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] kex follows: False
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] Compression: none
2025-11-17T15:49:40.373 [DEBUG] [Thread-56997] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:49:40.432 [DEBUG] [Thread-56997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:49:40.432 [DEBUG] [Thread-56997] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:49:40.433 [DEBUG] [Thread-56997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:49:40.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:49:40.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:49:40.488 [DEBUG] [Thread-56997] [transport.py] [_log()] userauth is OK
2025-11-17T15:49:40.488 [DEBUG] [Thread-56997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:49:40.488 [DEBUG] [Thread-56997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:49:40.488 [DEBUG] [Thread-56997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:49:40.489 [DEBUG] [Thread-56997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:49:40.508 [INFO] [Thread-56997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:49:40.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:49:40.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:49:41.357 [DEBUG] [Thread-56997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:49:41.357 [DEBUG] [Thread-56997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:49:41.405 [DEBUG] [Thread-56997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:49:41.405 [DEBUG] [Thread-56997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:49:41.414 [DEBUG] [Thread-56997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:49:41.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:49:41.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:49:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:49:41.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:49:41.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:49:41.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:49:41.449 [DEBUG] [Thread-56997] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:49:52.501 [DEBUG] [Thread-56999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:50:07.547 [DEBUG] [Thread-57000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:50:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:50:11.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:50:11.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:50:11.773 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:50:11.774 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:50:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 49, 44), 27.7, 15.41, 0.0, 7.82, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:50:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:49:44
2025-11-17T15:50:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:50:12.435 [DEBUG] [Thread-57001] [transport.py] [_log()] starting thread (client mode): 0xd071b970
2025-11-17T15:50:12.435 [DEBUG] [Thread-57001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:50:12.457 [DEBUG] [Thread-57001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:50:12.457 [INFO] [Thread-57001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] client lang: <none>
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] server lang: <none>
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] kex follows: False
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:50:12.460 [DEBUG] [Thread-57001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:50:12.461 [DEBUG] [Thread-57001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:50:12.461 [DEBUG] [Thread-57001] [transport.py] [_log()] Compression: none
2025-11-17T15:50:12.461 [DEBUG] [Thread-57001] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:50:12.476 [DEBUG] [Thread-57001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:50:12.476 [DEBUG] [Thread-57001] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:50:12.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:50:12.476 [DEBUG] [Thread-57001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:50:12.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:50:12.477 [DEBUG] [Thread-57001] [transport.py] [_log()] userauth is OK
2025-11-17T15:50:12.477 [DEBUG] [Thread-57001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:50:12.477 [DEBUG] [Thread-57001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:50:12.477 [DEBUG] [Thread-57001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:50:12.477 [DEBUG] [Thread-57001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:50:12.491 [INFO] [Thread-57001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:50:12.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:50:14.617 [DEBUG] [Thread-57001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:50:14.617 [DEBUG] [Thread-57001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:50:14.617 [DEBUG] [Thread-57001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:50:14.657 [DEBUG] [Thread-57001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:50:14.658 [DEBUG] [Thread-57001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:50:14.660 [DEBUG] [Thread-57001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:50:14.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:50:14.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:50:14.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:50:14.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:50:14.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:50:14.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:50:14.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:50:14.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:50:14.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:50:14.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.576088 -999.00  +23.00  10.68     21   -0.40 1 1 1 1 1   888    0 24.07 20.40 ----- 10.7 10.7 287.0 17.2 29.0 -25.9 28.8 -25.3 29.2 -26.8 30.0 -24.4
2025-11-17T15:50:14.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:50:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:50:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.576088
2025-11-17T15:50:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:50:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:50:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:50:14.756 [DEBUG] [Thread-57001] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:50:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:50:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:50:14.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:49:44', tmtdew=27.7, humidity=15.41, cloud=0.0, wind=7.82, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:49:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:50:14.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:50:14.853 [DEBUG] [Thread-57004] [transport.py] [_log()] starting thread (client mode): 0xd0723be0
2025-11-17T15:50:14.853 [DEBUG] [Thread-57004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:50:14.867 [DEBUG] [Thread-57004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:50:14.867 [INFO] [Thread-57004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] client lang: <none>
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] server lang: <none>
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] kex follows: False
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:50:14.875 [DEBUG] [Thread-57004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:50:14.876 [DEBUG] [Thread-57004] [transport.py] [_log()] Compression: none
2025-11-17T15:50:14.876 [DEBUG] [Thread-57004] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:50:14.932 [DEBUG] [Thread-57004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:50:14.932 [DEBUG] [Thread-57004] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:50:14.933 [DEBUG] [Thread-57004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:50:14.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:50:14.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:50:14.988 [DEBUG] [Thread-57004] [transport.py] [_log()] userauth is OK
2025-11-17T15:50:14.988 [DEBUG] [Thread-57004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:50:14.988 [DEBUG] [Thread-57004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:50:14.988 [DEBUG] [Thread-57004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:50:14.988 [DEBUG] [Thread-57004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:50:15.007 [INFO] [Thread-57004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:50:15.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:50:15.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:50:15.832 [DEBUG] [Thread-57004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:50:15.832 [DEBUG] [Thread-57004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:50:15.880 [DEBUG] [Thread-57004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:50:15.880 [DEBUG] [Thread-57004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:50:15.889 [DEBUG] [Thread-57004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:50:15.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:50:15.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:50: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
2025-11-17T15:50:15.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:50:15.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:50:15.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:50:15.923 [DEBUG] [Thread-57004] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:50:20.012 [DEBUG] [Thread-57006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:50:22.575 [DEBUG] [Thread-57007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:50:37.623 [DEBUG] [Thread-57008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:50:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:50:45.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:50:45.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
2025-11-17T15:50:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 50, 16), 27.64, 15.48, 0.0, 9.25, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:50:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:50:16
2025-11-17T15:50:46.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:50:46.880 [DEBUG] [Thread-57009] [transport.py] [_log()] starting thread (client mode): 0xd0754160
2025-11-17T15:50:46.880 [DEBUG] [Thread-57009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:50:46.900 [DEBUG] [Thread-57009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:50:46.900 [INFO] [Thread-57009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:50:46.903 [DEBUG] [Thread-57009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:50:46.903 [DEBUG] [Thread-57009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] client lang: <none>
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] server lang: <none>
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] kex follows: False
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] Compression: none
2025-11-17T15:50:46.904 [DEBUG] [Thread-57009] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:50:46.919 [DEBUG] [Thread-57009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:50:46.919 [DEBUG] [Thread-57009] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:50:46.920 [DEBUG] [Thread-57009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:50:46.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:50:46.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:50:46.921 [DEBUG] [Thread-57009] [transport.py] [_log()] userauth is OK
2025-11-17T15:50:46.921 [DEBUG] [Thread-57009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:50:46.921 [DEBUG] [Thread-57009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:50:46.921 [DEBUG] [Thread-57009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:50:46.921 [DEBUG] [Thread-57009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:50:46.934 [INFO] [Thread-57009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:50:46.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:50:47.576 [DEBUG] [Thread-57009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:50:47.577 [DEBUG] [Thread-57009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:50:47.577 [DEBUG] [Thread-57009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:50:47.617 [DEBUG] [Thread-57009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:50:47.617 [DEBUG] [Thread-57009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:50:47.619 [DEBUG] [Thread-57009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:50:47.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:50:47.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:50:47.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:50:47.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:50:47.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:50:47.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:50:47.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:50:47.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:50:47.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:50:47.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.576435 -999.00  +22.90  19.33     21   -0.50 1 1 1 1 1   888    0 23.74 20.24 ----- 16.1 19.3 270.2 22.3 28.7 -28.0 28.7 -27.1 29.1 -27.9 29.6 -27.0
2025-11-17T15:50:47.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:50:47.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:50:47.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.576435
2025-11-17T15:50:47.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:50:47.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:50:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:50:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:50:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:50:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:50:16', tmtdew=27.64, humidity=15.48, cloud=0.0, wind=9.25, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:50:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:50:47.637 [DEBUG] [Thread-57009] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:50:47.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:50:47.727 [DEBUG] [Thread-57012] [transport.py] [_log()] starting thread (client mode): 0xd07870d0
2025-11-17T15:50:47.728 [DEBUG] [Thread-57012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:50:47.744 [DEBUG] [Thread-57012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:50:47.744 [INFO] [Thread-57012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:50:47.751 [DEBUG] [Thread-57012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:50:47.751 [DEBUG] [Thread-57012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:50:47.751 [DEBUG] [Thread-57012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:50:47.751 [DEBUG] [Thread-57012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:50:47.751 [DEBUG] [Thread-57012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:50:47.751 [DEBUG] [Thread-57012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:50:47.751 [DEBUG] [Thread-57012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] client lang: <none>
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] server lang: <none>
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] kex follows: False
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] Compression: none
2025-11-17T15:50:47.752 [DEBUG] [Thread-57012] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:50:47.807 [DEBUG] [Thread-57012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:50:47.807 [DEBUG] [Thread-57012] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:50:47.807 [DEBUG] [Thread-57012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:50:47.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:50:47.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:50:47.868 [DEBUG] [Thread-57012] [transport.py] [_log()] userauth is OK
2025-11-17T15:50:47.868 [DEBUG] [Thread-57012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:50:47.868 [DEBUG] [Thread-57012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:50:47.868 [DEBUG] [Thread-57012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:50:47.868 [DEBUG] [Thread-57012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:50:47.883 [INFO] [Thread-57012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:50:47.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:50:47.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:50:48.879 [DEBUG] [Thread-57012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:50:48.879 [DEBUG] [Thread-57012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:50:48.927 [DEBUG] [Thread-57012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:50:48.927 [DEBUG] [Thread-57012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:50:48.935 [DEBUG] [Thread-57012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:50:48.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:50:48.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:50:48.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:50:48.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:50:48.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:50:48.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:50:48.967 [DEBUG] [Thread-57012] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:50:52.659 [DEBUG] [Thread-57014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:51:07.705 [DEBUG] [Thread-57015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:51:11.914 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:51:11.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:51:18.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:51:18.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:51:18.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:51:19.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 50, 48), 27.76, 15.38, 0.0, 19.48, 23.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:51:19.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:50:48
2025-11-17T15:51:19.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:51:19.886 [DEBUG] [Thread-57016] [transport.py] [_log()] starting thread (client mode): 0xd071abc0
2025-11-17T15:51:19.886 [DEBUG] [Thread-57016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:51:19.907 [DEBUG] [Thread-57016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:51:19.907 [INFO] [Thread-57016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] client lang: <none>
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] server lang: <none>
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] kex follows: False
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] Compression: none
2025-11-17T15:51:19.911 [DEBUG] [Thread-57016] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:51:19.929 [DEBUG] [Thread-57016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:51:19.930 [DEBUG] [Thread-57016] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:51:19.930 [DEBUG] [Thread-57016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:51:19.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:51:19.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:51:19.932 [DEBUG] [Thread-57016] [transport.py] [_log()] userauth is OK
2025-11-17T15:51:19.932 [DEBUG] [Thread-57016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:51:19.933 [DEBUG] [Thread-57016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:51:19.933 [DEBUG] [Thread-57016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:51:19.933 [DEBUG] [Thread-57016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:51:19.956 [INFO] [Thread-57016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:51:19.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:51:20.073 [DEBUG] [Thread-57018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:51:20.719 [DEBUG] [Thread-57016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:51:20.719 [DEBUG] [Thread-57016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:51:20.719 [DEBUG] [Thread-57016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:51:20.760 [DEBUG] [Thread-57016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:51:20.760 [DEBUG] [Thread-57016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:51:20.762 [DEBUG] [Thread-57016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:51:20.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:51:20.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:51:20.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:51:20.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:51:20.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:51:20.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:51:20.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:51:20.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:51:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:51:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.576783 -999.00  +22.50  20.36     21   -0.60 1 1 1 1 1   888    0 23.81 19.17 ----- 15.6 20.4 270.0 25.5 28.2 -29.7 28.4 -27.2 28.4 -31.1 29.1 -28.2
2025-11-17T15:51:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:51:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:51:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.576783
2025-11-17T15:51:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:51:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:51:20.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:51:20.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:51:20.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:51:20.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:50:48', tmtdew=27.76, humidity=15.38, cloud=0.0, wind=19.48, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:50:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:51:20.780 [DEBUG] [Thread-57016] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:51:20.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:51:20.884 [DEBUG] [Thread-57020] [transport.py] [_log()] starting thread (client mode): 0xd0784a90
2025-11-17T15:51:20.884 [DEBUG] [Thread-57020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:51:20.899 [DEBUG] [Thread-57020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:51:20.899 [INFO] [Thread-57020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] client lang: <none>
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] server lang: <none>
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] kex follows: False
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:51:20.907 [DEBUG] [Thread-57020] [transport.py] [_log()] Compression: none
2025-11-17T15:51:20.908 [DEBUG] [Thread-57020] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:51:20.963 [DEBUG] [Thread-57020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:51:20.963 [DEBUG] [Thread-57020] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:51:20.963 [DEBUG] [Thread-57020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:51:20.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:51:20.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:51:21.021 [DEBUG] [Thread-57020] [transport.py] [_log()] userauth is OK
2025-11-17T15:51:21.021 [DEBUG] [Thread-57020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:51:21.021 [DEBUG] [Thread-57020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:51:21.021 [DEBUG] [Thread-57020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:51:21.021 [DEBUG] [Thread-57020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:51:21.035 [INFO] [Thread-57020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:51:21.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:51:21.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:51:21.887 [DEBUG] [Thread-57020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:51:21.887 [DEBUG] [Thread-57020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:51:21.935 [DEBUG] [Thread-57020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:51:21.935 [DEBUG] [Thread-57020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:51:21.944 [DEBUG] [Thread-57020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:51:21.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:51:21.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:51:21.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:51:21.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:51:21.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:51:21.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:51:21.975 [DEBUG] [Thread-57020] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:51:22.734 [DEBUG] [Thread-57022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:51:37.781 [DEBUG] [Thread-57023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:51:51.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:51:51.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:51:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:51:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 51, 20), 27.88, 15.28, 0.0, 18.62, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:51:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:51:20
2025-11-17T15:51:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:51:52.817 [DEBUG] [Thread-57024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:51:52.943 [DEBUG] [Thread-57025] [transport.py] [_log()] starting thread (client mode): 0xd070f520
2025-11-17T15:51:52.943 [DEBUG] [Thread-57025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:51:52.963 [DEBUG] [Thread-57025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:51:52.963 [INFO] [Thread-57025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] client lang: <none>
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] server lang: <none>
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] kex follows: False
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] Compression: none
2025-11-17T15:51:52.967 [DEBUG] [Thread-57025] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:51:52.984 [DEBUG] [Thread-57025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:51:52.984 [DEBUG] [Thread-57025] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:51:52.984 [DEBUG] [Thread-57025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:51:52.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:51:52.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:51:53.028 [DEBUG] [Thread-57025] [transport.py] [_log()] userauth is OK
2025-11-17T15:51:53.028 [DEBUG] [Thread-57025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:51:53.028 [DEBUG] [Thread-57025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:51:53.028 [DEBUG] [Thread-57025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:51:53.028 [DEBUG] [Thread-57025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:51:53.058 [INFO] [Thread-57025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:51:53.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:51:53.679 [DEBUG] [Thread-57025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:51:53.679 [DEBUG] [Thread-57025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:51:53.679 [DEBUG] [Thread-57025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:51:53.720 [DEBUG] [Thread-57025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:51:53.720 [DEBUG] [Thread-57025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:51:53.722 [DEBUG] [Thread-57025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:51:53.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:51:53.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:51:53.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:51:53.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:51:53.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:51:53.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:51:53.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:51:53.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.577130 -999.00  +22.50  12.64     21   -0.50 1 1 1 1 1   888    0 23.49 18.45 ----- 18.6 12.6 280.0 19.3 28.1 -28.7 28.2 -27.5 28.2 -26.0 28.8 -28.1
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.577130
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:51:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:51:20', tmtdew=27.88, humidity=15.28, cloud=0.0, wind=18.62, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:51:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:51:53.750 [DEBUG] [Thread-57025] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:51:53.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:51:53.837 [DEBUG] [Thread-57028] [transport.py] [_log()] starting thread (client mode): 0xd07be3e0
2025-11-17T15:51:53.837 [DEBUG] [Thread-57028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:51:53.852 [DEBUG] [Thread-57028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:51:53.852 [INFO] [Thread-57028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] client lang: <none>
2025-11-17T15:51:53.859 [DEBUG] [Thread-57028] [transport.py] [_log()] server lang: <none>
2025-11-17T15:51:53.860 [DEBUG] [Thread-57028] [transport.py] [_log()] kex follows: False
2025-11-17T15:51:53.860 [DEBUG] [Thread-57028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:51:53.860 [DEBUG] [Thread-57028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:51:53.860 [DEBUG] [Thread-57028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:51:53.860 [DEBUG] [Thread-57028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:51:53.860 [DEBUG] [Thread-57028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:51:53.860 [DEBUG] [Thread-57028] [transport.py] [_log()] Compression: none
2025-11-17T15:51:53.860 [DEBUG] [Thread-57028] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:51:53.915 [DEBUG] [Thread-57028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:51:53.915 [DEBUG] [Thread-57028] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:51:53.915 [DEBUG] [Thread-57028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:51:53.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:51:53.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:51:53.972 [DEBUG] [Thread-57028] [transport.py] [_log()] userauth is OK
2025-11-17T15:51:53.972 [DEBUG] [Thread-57028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:51:53.972 [DEBUG] [Thread-57028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:51:53.972 [DEBUG] [Thread-57028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:51:53.972 [DEBUG] [Thread-57028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:51:53.986 [INFO] [Thread-57028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:51:53.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:51:53.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:51:54.902 [DEBUG] [Thread-57028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:51:54.902 [DEBUG] [Thread-57028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:51:54.950 [DEBUG] [Thread-57028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:51:54.951 [DEBUG] [Thread-57028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:51:54.959 [DEBUG] [Thread-57028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:51:54.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:51:54.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:51:54.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:51:54.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:51:54.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:51:54.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:51:54.994 [DEBUG] [Thread-57028] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:52:07.840 [DEBUG] [Thread-57030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:52:12.057 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:52:12.058 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:52:20.123 [DEBUG] [Thread-57031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:52:22.870 [DEBUG] [Thread-57032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:52:25.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:52:25.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:52:25.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:52:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 51, 52), 27.83, 15.05, 0.0, 15.03, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:52:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:51:52
2025-11-17T15:52:25.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:52:25.995 [DEBUG] [Thread-57033] [transport.py] [_log()] starting thread (client mode): 0xd070f4f0
2025-11-17T15:52:25.995 [DEBUG] [Thread-57033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:52:26.007 [DEBUG] [Thread-57033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:52:26.008 [INFO] [Thread-57033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] client lang: <none>
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] server lang: <none>
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] kex follows: False
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] Compression: none
2025-11-17T15:52:26.009 [DEBUG] [Thread-57033] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:52:26.016 [DEBUG] [Thread-57033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:52:26.016 [DEBUG] [Thread-57033] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:52:26.016 [DEBUG] [Thread-57033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:52:26.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:52:26.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:52:26.017 [DEBUG] [Thread-57033] [transport.py] [_log()] userauth is OK
2025-11-17T15:52:26.017 [DEBUG] [Thread-57033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:52:26.017 [DEBUG] [Thread-57033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:52:26.017 [DEBUG] [Thread-57033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:52:26.017 [DEBUG] [Thread-57033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:52:26.026 [INFO] [Thread-57033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:52:26.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:52:26.675 [DEBUG] [Thread-57033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:52:26.675 [DEBUG] [Thread-57033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:52:26.675 [DEBUG] [Thread-57033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:52:26.716 [DEBUG] [Thread-57033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:52:26.716 [DEBUG] [Thread-57033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:52:26.719 [DEBUG] [Thread-57033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:52:26.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:52:26.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:52:26.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:52:26.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:52:26.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:52:26.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:52:26.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:52:26.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:52:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:52:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.577477 -999.00  +22.50  16.25     21   -0.50 1 1 1 1 1   888    0 23.55 19.23 ----- 16.2 16.2 270.8 19.3 27.9 -30.8 27.9 -27.5 28.1 -30.5 28.4 -29.5
2025-11-17T15:52:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:52:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:52:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.577477
2025-11-17T15:52:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:52:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:52:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:52:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:52:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:52:26.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:51:52', tmtdew=27.83, humidity=15.05, cloud=0.0, wind=15.03, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:51:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:52:26.748 [DEBUG] [Thread-57033] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:52:26.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:52:26.843 [DEBUG] [Thread-57036] [transport.py] [_log()] starting thread (client mode): 0xd070dd20
2025-11-17T15:52:26.844 [DEBUG] [Thread-57036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:52:26.860 [DEBUG] [Thread-57036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:52:26.860 [INFO] [Thread-57036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:52:26.867 [DEBUG] [Thread-57036] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] client lang: <none>
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] server lang: <none>
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] kex follows: False
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:52:26.868 [DEBUG] [Thread-57036] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:52:26.869 [DEBUG] [Thread-57036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:52:26.869 [DEBUG] [Thread-57036] [transport.py] [_log()] Compression: none
2025-11-17T15:52:26.869 [DEBUG] [Thread-57036] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:52:26.924 [DEBUG] [Thread-57036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:52:26.924 [DEBUG] [Thread-57036] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:52:26.925 [DEBUG] [Thread-57036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:52:26.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:52:26.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:52:26.980 [DEBUG] [Thread-57036] [transport.py] [_log()] userauth is OK
2025-11-17T15:52:26.980 [DEBUG] [Thread-57036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:52:26.980 [DEBUG] [Thread-57036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:52:26.980 [DEBUG] [Thread-57036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:52:26.980 [DEBUG] [Thread-57036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:52:27.000 [INFO] [Thread-57036] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:52:27.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:52:27.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:52:27.917 [DEBUG] [Thread-57036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:52:27.917 [DEBUG] [Thread-57036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:52:27.967 [DEBUG] [Thread-57036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:52:27.967 [DEBUG] [Thread-57036] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:52:27.977 [DEBUG] [Thread-57036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:52:27.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:52:27.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:52:28.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:52:28.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:52:28.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:52:28.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:52:28.021 [DEBUG] [Thread-57036] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:52:37.904 [DEBUG] [Thread-57038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:52:52.943 [DEBUG] [Thread-57039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:52:58.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:52:58.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:52:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:52:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 52, 24), 27.71, 15.15, 0.0, 13.73, 22.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:52:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:52:24
2025-11-17T15:52:58.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:52:59.006 [DEBUG] [Thread-57040] [transport.py] [_log()] starting thread (client mode): 0xd070f850
2025-11-17T15:52:59.006 [DEBUG] [Thread-57040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:52:59.025 [DEBUG] [Thread-57040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:52:59.025 [INFO] [Thread-57040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:52:59.028 [DEBUG] [Thread-57040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] client lang: <none>
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] server lang: <none>
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] kex follows: False
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] Compression: none
2025-11-17T15:52:59.029 [DEBUG] [Thread-57040] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:52:59.046 [DEBUG] [Thread-57040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:52:59.046 [DEBUG] [Thread-57040] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:52:59.047 [DEBUG] [Thread-57040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:52:59.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:52:59.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:52:59.048 [DEBUG] [Thread-57040] [transport.py] [_log()] userauth is OK
2025-11-17T15:52:59.049 [DEBUG] [Thread-57040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:52:59.049 [DEBUG] [Thread-57040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:52:59.049 [DEBUG] [Thread-57040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:52:59.049 [DEBUG] [Thread-57040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:52:59.073 [INFO] [Thread-57040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:52:59.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:52:59.705 [DEBUG] [Thread-57040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:52:59.706 [DEBUG] [Thread-57040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:52:59.706 [DEBUG] [Thread-57040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:52:59.746 [DEBUG] [Thread-57040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:52:59.747 [DEBUG] [Thread-57040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:52:59.749 [DEBUG] [Thread-57040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:52:59.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:52:59.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:52:59.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:52:59.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:52:59.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:52:59.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:52:59.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:52:59.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:52:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:52:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.577824 -999.00  +22.30  11.99     21   -0.50 1 1 1 1 1   888    0 23.55 15.97 ----- 10.1 12.0 284.6 19.0 27.7 -28.9 27.8 -27.2 27.5 -30.1 28.1 -27.9
2025-11-17T15:52:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:52:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:52:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.577824
2025-11-17T15:52:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:52:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:52:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:52:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:52:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:52:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:52:24', tmtdew=27.71, humidity=15.15, cloud=0.0, wind=13.73, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:52:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:52:59.776 [DEBUG] [Thread-57040] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:52:59.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:52:59.874 [DEBUG] [Thread-57043] [transport.py] [_log()] starting thread (client mode): 0xd0755cf0
2025-11-17T15:52:59.874 [DEBUG] [Thread-57043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:52:59.890 [DEBUG] [Thread-57043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:52:59.890 [INFO] [Thread-57043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] client lang: <none>
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] server lang: <none>
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] kex follows: False
2025-11-17T15:52:59.898 [DEBUG] [Thread-57043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:52:59.899 [DEBUG] [Thread-57043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:52:59.899 [DEBUG] [Thread-57043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:52:59.899 [DEBUG] [Thread-57043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:52:59.899 [DEBUG] [Thread-57043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:52:59.899 [DEBUG] [Thread-57043] [transport.py] [_log()] Compression: none
2025-11-17T15:52:59.899 [DEBUG] [Thread-57043] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:52:59.956 [DEBUG] [Thread-57043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:52:59.956 [DEBUG] [Thread-57043] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:52:59.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:52:59.957 [DEBUG] [Thread-57043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:52:59.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:53:00.012 [DEBUG] [Thread-57043] [transport.py] [_log()] userauth is OK
2025-11-17T15:53:00.012 [DEBUG] [Thread-57043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:53:00.013 [DEBUG] [Thread-57043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:53:00.013 [DEBUG] [Thread-57043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:53:00.013 [DEBUG] [Thread-57043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:53:00.032 [INFO] [Thread-57043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:53:00.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:53:00.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:53:00.929 [DEBUG] [Thread-57043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:53:00.929 [DEBUG] [Thread-57043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:53:00.977 [DEBUG] [Thread-57043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:53:00.978 [DEBUG] [Thread-57043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:53:00.987 [DEBUG] [Thread-57043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:53:00.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:53:00.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:53: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
2025-11-17T15:53:01.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:53:01.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:53:01.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:53:01.021 [DEBUG] [Thread-57043] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:53:07.972 [DEBUG] [Thread-57045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:53:12.199 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:53:12.199 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:53:20.188 [DEBUG] [Thread-57046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:53:23.015 [DEBUG] [Thread-57047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:53:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:53:31.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:53:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:53:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 53, 28), 27.29, 15.98, 0.0, 14.8, 22.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:53:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:53:28
2025-11-17T15:53:31.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:53:31.959 [DEBUG] [Thread-57048] [transport.py] [_log()] starting thread (client mode): 0xd070ebc0
2025-11-17T15:53:31.959 [DEBUG] [Thread-57048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:53:31.972 [DEBUG] [Thread-57048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:53:31.972 [INFO] [Thread-57048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] client lang: <none>
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] server lang: <none>
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] kex follows: False
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:53:31.973 [DEBUG] [Thread-57048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:53:31.974 [DEBUG] [Thread-57048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:53:31.974 [DEBUG] [Thread-57048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:53:31.974 [DEBUG] [Thread-57048] [transport.py] [_log()] Compression: none
2025-11-17T15:53:31.974 [DEBUG] [Thread-57048] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:53:31.989 [DEBUG] [Thread-57048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:53:31.989 [DEBUG] [Thread-57048] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:53:31.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:53:31.990 [DEBUG] [Thread-57048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:53:31.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:53:31.991 [DEBUG] [Thread-57048] [transport.py] [_log()] userauth is OK
2025-11-17T15:53:31.991 [DEBUG] [Thread-57048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:53:31.991 [DEBUG] [Thread-57048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:53:31.991 [DEBUG] [Thread-57048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:53:31.991 [DEBUG] [Thread-57048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:53:32.009 [INFO] [Thread-57048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:53:32.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:53:32.623 [DEBUG] [Thread-57048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:53:32.623 [DEBUG] [Thread-57048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:53:32.623 [DEBUG] [Thread-57048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:53:32.663 [DEBUG] [Thread-57048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:53:32.664 [DEBUG] [Thread-57048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:53:32.667 [DEBUG] [Thread-57048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:53:32.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:53:32.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:53:32.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:53:32.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:53:32.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:53:32.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:53:32.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:53:32.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:53:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:53:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.578171 -999.00  +22.50  15.22     21   -0.40 1 1 1 1 1   888    0 23.78 13.35 ----- 15.2 15.2 261.4 16.2 27.6 -29.5 27.7 -27.0 27.5 -25.5 27.8 -27.7
2025-11-17T15:53:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:53:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:53:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.578171
2025-11-17T15:53:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:53:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:53:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:53:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:53:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:53:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:53:28', tmtdew=27.29, humidity=15.98, cloud=0.0, wind=14.8, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:52:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:53:32.693 [DEBUG] [Thread-57048] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:53:32.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:53:32.789 [DEBUG] [Thread-57051] [transport.py] [_log()] starting thread (client mode): 0xd07bc1c0
2025-11-17T15:53:32.789 [DEBUG] [Thread-57051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:53:32.806 [DEBUG] [Thread-57051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:53:32.806 [INFO] [Thread-57051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:53:32.814 [DEBUG] [Thread-57051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] client lang: <none>
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] server lang: <none>
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] kex follows: False
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] Compression: none
2025-11-17T15:53:32.815 [DEBUG] [Thread-57051] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:53:32.871 [DEBUG] [Thread-57051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:53:32.872 [DEBUG] [Thread-57051] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:53:32.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:53:32.873 [DEBUG] [Thread-57051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:53:32.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:53:32.928 [DEBUG] [Thread-57051] [transport.py] [_log()] userauth is OK
2025-11-17T15:53:32.928 [DEBUG] [Thread-57051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:53:32.929 [DEBUG] [Thread-57051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:53:32.929 [DEBUG] [Thread-57051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:53:32.929 [DEBUG] [Thread-57051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:53:32.947 [INFO] [Thread-57051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:53:32.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:53:32.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:53:33.838 [DEBUG] [Thread-57051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:53:33.838 [DEBUG] [Thread-57051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:53:33.886 [DEBUG] [Thread-57051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:53:33.886 [DEBUG] [Thread-57051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:53:33.895 [DEBUG] [Thread-57051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:53:33.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:53:33.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:53:33.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:53:33.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:53:33.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:53:33.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:53:33.929 [DEBUG] [Thread-57051] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:53:38.045 [DEBUG] [Thread-57053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:53:53.091 [DEBUG] [Thread-57054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:54:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:54:03.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:54:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:54:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 53, 28), 27.29, 15.98, 0.0, 14.8, 22.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:54:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:53:28
2025-11-17T15:54:04.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:54:04.920 [DEBUG] [Thread-57055] [transport.py] [_log()] starting thread (client mode): 0xd07bfdc0
2025-11-17T15:54:04.920 [DEBUG] [Thread-57055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:54:04.940 [DEBUG] [Thread-57055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:54:04.940 [INFO] [Thread-57055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:54:04.943 [DEBUG] [Thread-57055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:54:04.943 [DEBUG] [Thread-57055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:54:04.943 [DEBUG] [Thread-57055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:54:04.943 [DEBUG] [Thread-57055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:54:04.943 [DEBUG] [Thread-57055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] client lang: <none>
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] server lang: <none>
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] kex follows: False
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] Compression: none
2025-11-17T15:54:04.944 [DEBUG] [Thread-57055] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:54:04.961 [DEBUG] [Thread-57055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:54:04.961 [DEBUG] [Thread-57055] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:54:04.961 [DEBUG] [Thread-57055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:54:04.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:54:04.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:54:04.962 [DEBUG] [Thread-57055] [transport.py] [_log()] userauth is OK
2025-11-17T15:54:04.962 [DEBUG] [Thread-57055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:54:04.962 [DEBUG] [Thread-57055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:54:04.962 [DEBUG] [Thread-57055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:54:04.962 [DEBUG] [Thread-57055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:54:04.972 [INFO] [Thread-57055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:54:04.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:54:05.599 [DEBUG] [Thread-57055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:54:05.599 [DEBUG] [Thread-57055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:54:05.599 [DEBUG] [Thread-57055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:54:05.639 [DEBUG] [Thread-57055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:54:05.639 [DEBUG] [Thread-57055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:54:05.643 [DEBUG] [Thread-57055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:54:05.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:54:05.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:54:05.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:54:05.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:54:05.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:54:05.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:54:05.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:54:05.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:54:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:54:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.578519 -999.00  +22.50  10.45     21   -0.40 1 1 1 1 1   888    0 23.94 11.95 ----- 11.4 10.4 279.4 16.2 27.6 -29.5 27.5 -26.7 27.3 -25.4 27.7 -27.4
2025-11-17T15:54:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:54:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:54:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.578519
2025-11-17T15:54:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:54:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:54:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:54:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:54:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:54:05.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:53:28', tmtdew=27.29, humidity=15.98, cloud=0.0, wind=14.8, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:53:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:54:05.668 [DEBUG] [Thread-57055] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:54:05.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:54:05.766 [DEBUG] [Thread-57058] [transport.py] [_log()] starting thread (client mode): 0xd07be800
2025-11-17T15:54:05.766 [DEBUG] [Thread-57058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:54:05.781 [DEBUG] [Thread-57058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:54:05.781 [INFO] [Thread-57058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:54:05.790 [DEBUG] [Thread-57058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:54:05.790 [DEBUG] [Thread-57058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:54:05.790 [DEBUG] [Thread-57058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:54:05.790 [DEBUG] [Thread-57058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:54:05.790 [DEBUG] [Thread-57058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] client lang: <none>
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] server lang: <none>
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] kex follows: False
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:54:05.791 [DEBUG] [Thread-57058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:54:05.792 [DEBUG] [Thread-57058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:54:05.792 [DEBUG] [Thread-57058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:54:05.792 [DEBUG] [Thread-57058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:54:05.792 [DEBUG] [Thread-57058] [transport.py] [_log()] Compression: none
2025-11-17T15:54:05.792 [DEBUG] [Thread-57058] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:54:05.849 [DEBUG] [Thread-57058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:54:05.849 [DEBUG] [Thread-57058] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:54:05.850 [DEBUG] [Thread-57058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:54:05.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:54:05.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:54:05.908 [DEBUG] [Thread-57058] [transport.py] [_log()] userauth is OK
2025-11-17T15:54:05.909 [DEBUG] [Thread-57058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:54:05.909 [DEBUG] [Thread-57058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:54:05.909 [DEBUG] [Thread-57058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:54:05.909 [DEBUG] [Thread-57058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:54:05.928 [INFO] [Thread-57058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:54:05.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:54:05.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:54:06.821 [DEBUG] [Thread-57058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:54:06.821 [DEBUG] [Thread-57058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:54:06.868 [DEBUG] [Thread-57058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:54:06.868 [DEBUG] [Thread-57058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:54:06.877 [DEBUG] [Thread-57058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:54:06.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:54:06.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:54:06.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:54:06.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:54:06.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:54:06.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:54:06.911 [DEBUG] [Thread-57058] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:54:08.123 [DEBUG] [Thread-57060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:54:12.340 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:54:12.341 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:54:20.242 [DEBUG] [Thread-57061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:54:23.167 [DEBUG] [Thread-57062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:54:36.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:54:36.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:54:36.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:54:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 54, 32), 27.06, 16.01, 0.0, 9.21, 22.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:54:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:54:32
2025-11-17T15:54:37.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:54:37.852 [DEBUG] [Thread-57063] [transport.py] [_log()] starting thread (client mode): 0xd071ab00
2025-11-17T15:54:37.852 [DEBUG] [Thread-57063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:54:37.871 [DEBUG] [Thread-57063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:54:37.871 [INFO] [Thread-57063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] client lang: <none>
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] server lang: <none>
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] kex follows: False
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] Compression: none
2025-11-17T15:54:37.873 [DEBUG] [Thread-57063] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:54:37.884 [DEBUG] [Thread-57063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:54:37.885 [DEBUG] [Thread-57063] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:54:37.885 [DEBUG] [Thread-57063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:54:37.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:54:37.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:54:37.887 [DEBUG] [Thread-57063] [transport.py] [_log()] userauth is OK
2025-11-17T15:54:37.887 [DEBUG] [Thread-57063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:54:37.887 [DEBUG] [Thread-57063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:54:37.887 [DEBUG] [Thread-57063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:54:37.887 [DEBUG] [Thread-57063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:54:37.906 [INFO] [Thread-57063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:54:37.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:54:38.199 [DEBUG] [Thread-57065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:54:38.605 [DEBUG] [Thread-57063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:54:38.605 [DEBUG] [Thread-57063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:54:38.605 [DEBUG] [Thread-57063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:54:38.646 [DEBUG] [Thread-57063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:54:38.646 [DEBUG] [Thread-57063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:54:38.649 [DEBUG] [Thread-57063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:54:38.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:54:38.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:54:38.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:54:38.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:54:38.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:54:38.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:54:38.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:54:38.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:54:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:54:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.578866 -999.00  +22.30   8.88     21   -0.40 1 1 1 1 1   888    0 23.71 10.50 ----- 8.9 8.9 269.6 12.5 27.4 -29.4 27.4 -26.6 27.1 -25.7 27.5 -27.7
2025-11-17T15:54:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:54:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:54:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.578866
2025-11-17T15:54:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:54:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:54:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:54:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:54:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:54:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:54:32', tmtdew=27.06, humidity=16.01, cloud=0.0, wind=9.21, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:53:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:54:38.670 [DEBUG] [Thread-57063] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:54:38.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:54:38.756 [DEBUG] [Thread-57067] [transport.py] [_log()] starting thread (client mode): 0xd070f640
2025-11-17T15:54:38.756 [DEBUG] [Thread-57067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:54:38.771 [DEBUG] [Thread-57067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:54:38.771 [INFO] [Thread-57067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:54:38.778 [DEBUG] [Thread-57067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:54:38.778 [DEBUG] [Thread-57067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:54:38.778 [DEBUG] [Thread-57067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:54:38.778 [DEBUG] [Thread-57067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:54:38.778 [DEBUG] [Thread-57067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] client lang: <none>
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] server lang: <none>
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] kex follows: False
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] Compression: none
2025-11-17T15:54:38.779 [DEBUG] [Thread-57067] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:54:38.839 [DEBUG] [Thread-57067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:54:38.839 [DEBUG] [Thread-57067] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:54:38.839 [DEBUG] [Thread-57067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:54:38.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:54:38.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:54:38.896 [DEBUG] [Thread-57067] [transport.py] [_log()] userauth is OK
2025-11-17T15:54:38.896 [DEBUG] [Thread-57067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:54:38.896 [DEBUG] [Thread-57067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:54:38.896 [DEBUG] [Thread-57067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:54:38.896 [DEBUG] [Thread-57067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:54:38.911 [INFO] [Thread-57067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:54:38.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:54:38.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:54:39.746 [DEBUG] [Thread-57067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:54:39.746 [DEBUG] [Thread-57067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:54:39.794 [DEBUG] [Thread-57067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:54:39.794 [DEBUG] [Thread-57067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:54:39.802 [DEBUG] [Thread-57067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:54:39.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:54:39.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:54:39.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:54:39.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:54:39.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:54:39.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:54:39.835 [DEBUG] [Thread-57067] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:54:53.233 [DEBUG] [Thread-57069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:55:08.274 [DEBUG] [Thread-57070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:55:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:55:09.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:55:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:55:10.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 55, 4), 27.02, 16.05, 0.0, 8.29, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:55:10.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:55:04
2025-11-17T15:55:10.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:55:10.798 [DEBUG] [Thread-57071] [transport.py] [_log()] starting thread (client mode): 0xd071a3b0
2025-11-17T15:55:10.798 [DEBUG] [Thread-57071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:55:10.817 [DEBUG] [Thread-57071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:55:10.818 [INFO] [Thread-57071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] client lang: <none>
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] server lang: <none>
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] kex follows: False
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] Compression: none
2025-11-17T15:55:10.821 [DEBUG] [Thread-57071] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:55:10.837 [DEBUG] [Thread-57071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:55:10.837 [DEBUG] [Thread-57071] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:55:10.838 [DEBUG] [Thread-57071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:55:10.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:55:10.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:55:10.840 [DEBUG] [Thread-57071] [transport.py] [_log()] userauth is OK
2025-11-17T15:55:10.840 [DEBUG] [Thread-57071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:55:10.840 [DEBUG] [Thread-57071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:55:10.840 [DEBUG] [Thread-57071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:55:10.840 [DEBUG] [Thread-57071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:55:10.858 [INFO] [Thread-57071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:55:10.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:55:12.482 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:55:12.483 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:55:13.612 [DEBUG] [Thread-57071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:55:13.621 [DEBUG] [Thread-57071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:55:13.622 [DEBUG] [Thread-57071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:55:13.653 [DEBUG] [Thread-57071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:55:13.654 [DEBUG] [Thread-57071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:55:13.657 [DEBUG] [Thread-57071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:55:13.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:55:13.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:55:13.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:55:13.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:55:13.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:55:13.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:55:13.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:55:13.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:55:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:55:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.579560 -999.00  +22.40   6.52     21   -0.40 1 1 1 1 1   888    0 23.35 6.65 ----- 6.5 6.5 281.0 7.7 27.4 -28.4 27.4 -25.3 27.2 -23.6 27.4 -26.4
2025-11-17T15:55:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:55:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:55:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.579560
2025-11-17T15:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:55:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:55:04', tmtdew=27.02, humidity=16.05, cloud=0.0, wind=8.29, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:54:33.984', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:55:13.687 [DEBUG] [Thread-57071] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:55:13.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:55:13.785 [DEBUG] [Thread-57074] [transport.py] [_log()] starting thread (client mode): 0xd0777580
2025-11-17T15:55:13.785 [DEBUG] [Thread-57074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:55:13.800 [DEBUG] [Thread-57074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:55:13.800 [INFO] [Thread-57074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] client lang: <none>
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] server lang: <none>
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] kex follows: False
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:55:13.808 [DEBUG] [Thread-57074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:55:13.809 [DEBUG] [Thread-57074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:55:13.809 [DEBUG] [Thread-57074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:55:13.809 [DEBUG] [Thread-57074] [transport.py] [_log()] Compression: none
2025-11-17T15:55:13.809 [DEBUG] [Thread-57074] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:55:13.864 [DEBUG] [Thread-57074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:55:13.865 [DEBUG] [Thread-57074] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:55:13.865 [DEBUG] [Thread-57074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:55:13.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:55:13.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:55:13.924 [DEBUG] [Thread-57074] [transport.py] [_log()] userauth is OK
2025-11-17T15:55:13.925 [DEBUG] [Thread-57074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:55:13.925 [DEBUG] [Thread-57074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:55:13.925 [DEBUG] [Thread-57074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:55:13.925 [DEBUG] [Thread-57074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:55:13.947 [INFO] [Thread-57074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:55:13.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:55:13.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:55:14.815 [DEBUG] [Thread-57074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:55:14.815 [DEBUG] [Thread-57074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:55:14.862 [DEBUG] [Thread-57074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:55:14.863 [DEBUG] [Thread-57074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:55:14.871 [DEBUG] [Thread-57074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:55:14.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:55:14.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:55:14.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:55:14.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:55:14.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:55:14.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:55:14.919 [DEBUG] [Thread-57074] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:55:20.289 [DEBUG] [Thread-57076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:55:23.302 [DEBUG] [Thread-57077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:55:38.341 [DEBUG] [Thread-57078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:55:44.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:55:44.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:55:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:55:45.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 55, 36), 27.11, 16.11, 0.0, 6.85, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:55:45.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:55:36
2025-11-17T15:55:45.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:55:45.881 [DEBUG] [Thread-57079] [transport.py] [_log()] starting thread (client mode): 0xd070e380
2025-11-17T15:55:45.882 [DEBUG] [Thread-57079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:55:45.901 [DEBUG] [Thread-57079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:55:45.901 [INFO] [Thread-57079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:55:45.904 [DEBUG] [Thread-57079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:55:45.904 [DEBUG] [Thread-57079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:55:45.904 [DEBUG] [Thread-57079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:55:45.904 [DEBUG] [Thread-57079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:55:45.904 [DEBUG] [Thread-57079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] client lang: <none>
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] server lang: <none>
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] kex follows: False
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] Compression: none
2025-11-17T15:55:45.905 [DEBUG] [Thread-57079] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:55:45.921 [DEBUG] [Thread-57079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:55:45.921 [DEBUG] [Thread-57079] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:55:45.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:55:45.922 [DEBUG] [Thread-57079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:55:45.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:55:45.924 [DEBUG] [Thread-57079] [transport.py] [_log()] userauth is OK
2025-11-17T15:55:45.924 [DEBUG] [Thread-57079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:55:45.924 [DEBUG] [Thread-57079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:55:45.924 [DEBUG] [Thread-57079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:55:45.925 [DEBUG] [Thread-57079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:55:45.942 [INFO] [Thread-57079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:55:45.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:55:46.576 [DEBUG] [Thread-57079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:55:46.576 [DEBUG] [Thread-57079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:55:46.577 [DEBUG] [Thread-57079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:55:46.617 [DEBUG] [Thread-57079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:55:46.618 [DEBUG] [Thread-57079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:55:46.621 [DEBUG] [Thread-57079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:55:46.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:55:46.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:55:46.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:55:46.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:55:46.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:55:46.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:55:46.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:55:46.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:55:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:55:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.579908 -999.00  +22.50   6.18     21   -0.40 1 2 1 1 1   888    0 22.95 6.08 ----- 7.5 6.2 275.2 11.0 27.7 -24.8 27.7 -23.5 27.6 -20.9 27.9 -21.4
2025-11-17T15:55:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:55:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:55:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.579908
2025-11-17T15:55:46.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:55:46.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:55:46.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:55:46.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:55:46.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T15:55:46.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:55:36', tmtdew=27.11, humidity=16.11, cloud=0.0, wind=6.85, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:55:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:55:46.649 [DEBUG] [Thread-57079] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:55:46.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:55:46.746 [DEBUG] [Thread-57082] [transport.py] [_log()] starting thread (client mode): 0xd071b460
2025-11-17T15:55:46.746 [DEBUG] [Thread-57082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:55:46.762 [DEBUG] [Thread-57082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:55:46.762 [INFO] [Thread-57082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:55:46.769 [DEBUG] [Thread-57082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] client lang: <none>
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] server lang: <none>
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] kex follows: False
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:55:46.770 [DEBUG] [Thread-57082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:55:46.771 [DEBUG] [Thread-57082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:55:46.771 [DEBUG] [Thread-57082] [transport.py] [_log()] Compression: none
2025-11-17T15:55:46.771 [DEBUG] [Thread-57082] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:55:46.832 [DEBUG] [Thread-57082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:55:46.833 [DEBUG] [Thread-57082] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:55:46.833 [DEBUG] [Thread-57082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:55:46.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:55:46.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:55:46.892 [DEBUG] [Thread-57082] [transport.py] [_log()] userauth is OK
2025-11-17T15:55:46.892 [DEBUG] [Thread-57082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:55:46.893 [DEBUG] [Thread-57082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:55:46.893 [DEBUG] [Thread-57082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:55:46.893 [DEBUG] [Thread-57082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:55:46.911 [INFO] [Thread-57082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:55:46.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:55:46.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:55:47.824 [DEBUG] [Thread-57082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:55:47.824 [DEBUG] [Thread-57082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:55:47.872 [DEBUG] [Thread-57082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:55:47.872 [DEBUG] [Thread-57082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:55:47.881 [DEBUG] [Thread-57082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:55:47.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:55:47.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:55:47.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:55:47.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:55:47.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:55:47.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:55:47.915 [DEBUG] [Thread-57082] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:55:53.370 [DEBUG] [Thread-57084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:56:08.418 [DEBUG] [Thread-57085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:56:12.624 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:56:12.625 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:56:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:56:17.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:56:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:56:18.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 56, 8), 26.97, 16.25, 0.0, 5.49, 22.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:56:18.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:56:08
2025-11-17T15:56:18.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:56:18.883 [DEBUG] [Thread-57086] [transport.py] [_log()] starting thread (client mode): 0xd0774bb0
2025-11-17T15:56:18.883 [DEBUG] [Thread-57086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:56:18.902 [DEBUG] [Thread-57086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:56:18.902 [INFO] [Thread-57086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] client lang: <none>
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] server lang: <none>
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] kex follows: False
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] Compression: none
2025-11-17T15:56:18.906 [DEBUG] [Thread-57086] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:56:18.925 [DEBUG] [Thread-57086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:56:18.925 [DEBUG] [Thread-57086] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:56:18.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:56:18.926 [DEBUG] [Thread-57086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:56:18.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:56:18.928 [DEBUG] [Thread-57086] [transport.py] [_log()] userauth is OK
2025-11-17T15:56:18.928 [DEBUG] [Thread-57086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:56:18.928 [DEBUG] [Thread-57086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:56:18.928 [DEBUG] [Thread-57086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:56:18.928 [DEBUG] [Thread-57086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:56:18.944 [INFO] [Thread-57086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:56:18.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:56:19.585 [DEBUG] [Thread-57086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:56:19.585 [DEBUG] [Thread-57086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:56:19.586 [DEBUG] [Thread-57086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:56:19.626 [DEBUG] [Thread-57086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:56:19.627 [DEBUG] [Thread-57086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:56:19.629 [DEBUG] [Thread-57086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:56:19.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:56:19.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:56:19.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:56:19.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:56:19.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:56:19.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:56:19.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:56:19.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:56:19.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:56:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.580260 -999.00  +22.60   7.48     21   -0.40 1 1 1 1 1   888    0 23.29 5.91 ----- 7.5 7.5 290.8 9.6 27.9 -25.7 27.7 -25.5 27.8 -25.4 28.2 -23.2
2025-11-17T15:56:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:56:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:56:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.580260
2025-11-17T15:56:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:56:19.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:56:19.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:56:19.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:56:19.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:56:19.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:56:08', tmtdew=26.97, humidity=16.25, cloud=0.0, wind=5.49, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:55:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:56:19.651 [DEBUG] [Thread-57086] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:56:19.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:56:19.746 [DEBUG] [Thread-57089] [transport.py] [_log()] starting thread (client mode): 0xd0775e10
2025-11-17T15:56:19.746 [DEBUG] [Thread-57089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:56:19.762 [DEBUG] [Thread-57089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:56:19.762 [INFO] [Thread-57089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] client lang: <none>
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] server lang: <none>
2025-11-17T15:56:19.769 [DEBUG] [Thread-57089] [transport.py] [_log()] kex follows: False
2025-11-17T15:56:19.770 [DEBUG] [Thread-57089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:56:19.770 [DEBUG] [Thread-57089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:56:19.770 [DEBUG] [Thread-57089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:56:19.770 [DEBUG] [Thread-57089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:56:19.770 [DEBUG] [Thread-57089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:56:19.770 [DEBUG] [Thread-57089] [transport.py] [_log()] Compression: none
2025-11-17T15:56:19.770 [DEBUG] [Thread-57089] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:56:19.828 [DEBUG] [Thread-57089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:56:19.828 [DEBUG] [Thread-57089] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:56:19.829 [DEBUG] [Thread-57089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:56:19.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:56:19.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:56:19.884 [DEBUG] [Thread-57089] [transport.py] [_log()] userauth is OK
2025-11-17T15:56:19.885 [DEBUG] [Thread-57089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:56:19.885 [DEBUG] [Thread-57089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:56:19.885 [DEBUG] [Thread-57089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:56:19.885 [DEBUG] [Thread-57089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:56:19.908 [INFO] [Thread-57089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:56:19.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:56:19.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:56:20.345 [DEBUG] [Thread-57091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:56:20.783 [DEBUG] [Thread-57089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:56:20.783 [DEBUG] [Thread-57089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:56:20.831 [DEBUG] [Thread-57089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:56:20.831 [DEBUG] [Thread-57089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:56:20.840 [DEBUG] [Thread-57089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:56:20.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:56:20.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:56:20.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:56:20.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:56:20.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:56:20.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:56:20.875 [DEBUG] [Thread-57089] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:56:23.447 [DEBUG] [Thread-57092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:56:38.487 [DEBUG] [Thread-57093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:56:50.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:56:50.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:56:50.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
2025-11-17T15:56:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 56, 40), 27.45, 15.76, 0.0, 13.34, 22.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:56:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:56:40
2025-11-17T15:56:51.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:56:51.805 [DEBUG] [Thread-57094] [transport.py] [_log()] starting thread (client mode): 0xd071a0b0
2025-11-17T15:56:51.805 [DEBUG] [Thread-57094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:56:51.823 [DEBUG] [Thread-57094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:56:51.823 [INFO] [Thread-57094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:56:51.824 [DEBUG] [Thread-57094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:56:51.824 [DEBUG] [Thread-57094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:56:51.824 [DEBUG] [Thread-57094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:56:51.824 [DEBUG] [Thread-57094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:56:51.824 [DEBUG] [Thread-57094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:56:51.824 [DEBUG] [Thread-57094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:56:51.824 [DEBUG] [Thread-57094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] client lang: <none>
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] server lang: <none>
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] kex follows: False
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] Compression: none
2025-11-17T15:56:51.825 [DEBUG] [Thread-57094] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:56:51.832 [DEBUG] [Thread-57094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:56:51.832 [DEBUG] [Thread-57094] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:56:51.832 [DEBUG] [Thread-57094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:56:51.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:56:51.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:56:51.833 [DEBUG] [Thread-57094] [transport.py] [_log()] userauth is OK
2025-11-17T15:56:51.833 [DEBUG] [Thread-57094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:56:51.833 [DEBUG] [Thread-57094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:56:51.833 [DEBUG] [Thread-57094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:56:51.833 [DEBUG] [Thread-57094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:56:51.848 [INFO] [Thread-57094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:56:51.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:56:52.501 [DEBUG] [Thread-57094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:56:52.502 [DEBUG] [Thread-57094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:56:52.502 [DEBUG] [Thread-57094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:56:52.542 [DEBUG] [Thread-57094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:56:52.543 [DEBUG] [Thread-57094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:56:52.545 [DEBUG] [Thread-57094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:56:52.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:56:52.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:56:52.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:56:52.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:56:52.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:56:52.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:56:52.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:56:52.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:56:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:56:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.580602 -999.00  +22.80  17.78     21   -0.50 1 1 1 1 1   888    0 23.42 5.41 ----- 17.8 17.8 301.4 19.3 27.7 -27.7 27.6 -25.4 27.7 -23.4 28.1 -26.4
2025-11-17T15:56:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:56:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:56:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.580602
2025-11-17T15:56:52.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:56:52.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:56:52.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:56:52.570 [DEBUG] [Thread-57094] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:56:52.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:56:52.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:56:52.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:56:40', tmtdew=27.45, humidity=15.76, cloud=0.0, wind=13.34, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:56:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:56:52.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:56:52.666 [DEBUG] [Thread-57097] [transport.py] [_log()] starting thread (client mode): 0xd07bf370
2025-11-17T15:56:52.667 [DEBUG] [Thread-57097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:56:52.681 [DEBUG] [Thread-57097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:56:52.681 [INFO] [Thread-57097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] client lang: <none>
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] server lang: <none>
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] kex follows: False
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:56:52.689 [DEBUG] [Thread-57097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:56:52.690 [DEBUG] [Thread-57097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:56:52.690 [DEBUG] [Thread-57097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:56:52.690 [DEBUG] [Thread-57097] [transport.py] [_log()] Compression: none
2025-11-17T15:56:52.690 [DEBUG] [Thread-57097] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:56:52.748 [DEBUG] [Thread-57097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:56:52.749 [DEBUG] [Thread-57097] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:56:52.749 [DEBUG] [Thread-57097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:56:52.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:56:52.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:56:52.805 [DEBUG] [Thread-57097] [transport.py] [_log()] userauth is OK
2025-11-17T15:56:52.806 [DEBUG] [Thread-57097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:56:52.806 [DEBUG] [Thread-57097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:56:52.806 [DEBUG] [Thread-57097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:56:52.806 [DEBUG] [Thread-57097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:56:52.825 [INFO] [Thread-57097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:56:52.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:56:52.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:56:53.513 [DEBUG] [Thread-57099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:56:53.702 [DEBUG] [Thread-57097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:56:53.702 [DEBUG] [Thread-57097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:56:53.750 [DEBUG] [Thread-57097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:56:53.750 [DEBUG] [Thread-57097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:56:53.759 [DEBUG] [Thread-57097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:56:53.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:56:53.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:56:53.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:56:53.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:56:53.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:56:53.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:56:53.794 [DEBUG] [Thread-57097] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:57:08.554 [DEBUG] [Thread-57100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:57:12.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:57:12.767 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:57:20.397 [DEBUG] [Thread-57101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:57:23.582 [DEBUG] [Thread-57102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:57:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:57:23.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:57:23.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:57:24.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 57, 12), 27.51, 15.7, 0.0, 15.05, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:57:24.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:57:12
2025-11-17T15:57:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:57:24.746 [DEBUG] [Thread-57103] [transport.py] [_log()] starting thread (client mode): 0xd07bea40
2025-11-17T15:57:24.746 [DEBUG] [Thread-57103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:57:24.766 [DEBUG] [Thread-57103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:57:24.767 [INFO] [Thread-57103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] client lang: <none>
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] server lang: <none>
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] kex follows: False
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] Compression: none
2025-11-17T15:57:24.770 [DEBUG] [Thread-57103] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:57:24.790 [DEBUG] [Thread-57103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:57:24.791 [DEBUG] [Thread-57103] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:57:24.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:57:24.792 [DEBUG] [Thread-57103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:57:24.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:57:24.794 [DEBUG] [Thread-57103] [transport.py] [_log()] userauth is OK
2025-11-17T15:57:24.794 [DEBUG] [Thread-57103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:57:24.795 [DEBUG] [Thread-57103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:57:24.795 [DEBUG] [Thread-57103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:57:24.795 [DEBUG] [Thread-57103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:57:24.819 [INFO] [Thread-57103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:57:24.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:57:25.422 [DEBUG] [Thread-57103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:57:25.423 [DEBUG] [Thread-57103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:57:25.423 [DEBUG] [Thread-57103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:57:25.463 [DEBUG] [Thread-57103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:57:25.464 [DEBUG] [Thread-57103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:57:25.467 [DEBUG] [Thread-57103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:57:25.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:57:25.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:57:25.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:57:25.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:57:25.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:57:25.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:57:25.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:57:25.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:57:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:57:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.580949 -999.00  +23.10  18.71     20   -0.60 1 1 1 1 1   888    0 23.54 5.03 ----- 18.7 18.7 296.8 21.2 27.8 -27.5 27.6 -25.5 27.8 -24.1 28.2 -24.3
2025-11-17T15:57:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:57:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:57:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.580949
2025-11-17T15:57:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:57:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:57:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:57:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:57:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:57:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:57:12', tmtdew=27.51, humidity=15.7, cloud=0.0, wind=15.05, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:56:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:57:25.494 [DEBUG] [Thread-57103] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:57:25.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:57:25.590 [DEBUG] [Thread-57106] [transport.py] [_log()] starting thread (client mode): 0xd3160fa0
2025-11-17T15:57:25.590 [DEBUG] [Thread-57106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:57:25.605 [DEBUG] [Thread-57106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:57:25.606 [INFO] [Thread-57106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:57:25.613 [DEBUG] [Thread-57106] [transport.py] [_log()] client lang: <none>
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] server lang: <none>
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] kex follows: False
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] Compression: none
2025-11-17T15:57:25.614 [DEBUG] [Thread-57106] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:57:25.676 [DEBUG] [Thread-57106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:57:25.676 [DEBUG] [Thread-57106] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:57:25.677 [DEBUG] [Thread-57106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:57:25.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:57:25.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:57:25.733 [DEBUG] [Thread-57106] [transport.py] [_log()] userauth is OK
2025-11-17T15:57:25.733 [DEBUG] [Thread-57106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:57:25.733 [DEBUG] [Thread-57106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:57:25.733 [DEBUG] [Thread-57106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:57:25.733 [DEBUG] [Thread-57106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:57:25.753 [INFO] [Thread-57106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:57:25.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:57:25.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:57:26.640 [DEBUG] [Thread-57106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:57:26.640 [DEBUG] [Thread-57106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:57:26.687 [DEBUG] [Thread-57106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:57:26.687 [DEBUG] [Thread-57106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:57:26.696 [DEBUG] [Thread-57106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:57:26.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:57:26.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:57:26.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:57:26.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:57:26.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:57:26.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:57:26.731 [DEBUG] [Thread-57106] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:57:38.613 [DEBUG] [Thread-57108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:57:53.658 [DEBUG] [Thread-57109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:57:56.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:57:56.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:57:56.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:57:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 57, 44), 28.04, 14.96, 0.0, 18.1, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:57:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:57:44
2025-11-17T15:57:57.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:57:57.679 [DEBUG] [Thread-57110] [transport.py] [_log()] starting thread (client mode): 0xd070eb60
2025-11-17T15:57:57.679 [DEBUG] [Thread-57110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:57:57.699 [DEBUG] [Thread-57110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:57:57.699 [INFO] [Thread-57110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] client lang: <none>
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] server lang: <none>
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] kex follows: False
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] Compression: none
2025-11-17T15:57:57.700 [DEBUG] [Thread-57110] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:57:57.713 [DEBUG] [Thread-57110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:57:57.713 [DEBUG] [Thread-57110] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:57:57.714 [DEBUG] [Thread-57110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:57:57.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:57:57.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:57:57.717 [DEBUG] [Thread-57110] [transport.py] [_log()] userauth is OK
2025-11-17T15:57:57.717 [DEBUG] [Thread-57110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:57:57.717 [DEBUG] [Thread-57110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:57:57.718 [DEBUG] [Thread-57110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:57:57.718 [DEBUG] [Thread-57110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:57:57.736 [INFO] [Thread-57110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:57:57.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:57:58.385 [DEBUG] [Thread-57110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:57:58.385 [DEBUG] [Thread-57110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:57:58.385 [DEBUG] [Thread-57110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:57:58.426 [DEBUG] [Thread-57110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:57:58.427 [DEBUG] [Thread-57110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:57:58.429 [DEBUG] [Thread-57110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:57:58.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:57:58.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:57:58.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:57:58.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:57:58.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:57:58.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:57:58.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:57:58.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:57:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:57:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.581296 -999.00  +23.20  15.12     20   -0.60 1 1 1 1 1   888    0 23.31 5.79 ----- 15.6 15.1 291.8 21.2 27.6 -27.8 27.5 -26.4 27.6 -25.9 28.1 -26.2
2025-11-17T15:57:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:57:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:57:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.581296
2025-11-17T15:57:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:57:58.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:57:58.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:57:58.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:57:58.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:57:58.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:57:44', tmtdew=28.04, humidity=14.96, cloud=0.0, wind=18.1, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:57:03.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:57:58.454 [DEBUG] [Thread-57110] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:57:58.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:57:58.550 [DEBUG] [Thread-57113] [transport.py] [_log()] starting thread (client mode): 0xd07bd990
2025-11-17T15:57:58.550 [DEBUG] [Thread-57113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:57:58.568 [DEBUG] [Thread-57113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:57:58.568 [INFO] [Thread-57113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:57:58.575 [DEBUG] [Thread-57113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] client lang: <none>
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] server lang: <none>
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] kex follows: False
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:57:58.576 [DEBUG] [Thread-57113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:57:58.577 [DEBUG] [Thread-57113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:57:58.577 [DEBUG] [Thread-57113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:57:58.577 [DEBUG] [Thread-57113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:57:58.577 [DEBUG] [Thread-57113] [transport.py] [_log()] Compression: none
2025-11-17T15:57:58.577 [DEBUG] [Thread-57113] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:57:58.632 [DEBUG] [Thread-57113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:57:58.633 [DEBUG] [Thread-57113] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:57:58.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:57:58.634 [DEBUG] [Thread-57113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:57:58.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:57:58.688 [DEBUG] [Thread-57113] [transport.py] [_log()] userauth is OK
2025-11-17T15:57:58.689 [DEBUG] [Thread-57113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:57:58.689 [DEBUG] [Thread-57113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:57:58.689 [DEBUG] [Thread-57113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:57:58.689 [DEBUG] [Thread-57113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:57:58.708 [INFO] [Thread-57113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:57:58.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:57:58.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:57:59.582 [DEBUG] [Thread-57113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:57:59.582 [DEBUG] [Thread-57113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:57:59.630 [DEBUG] [Thread-57113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:57:59.630 [DEBUG] [Thread-57113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:57:59.639 [DEBUG] [Thread-57113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:57:59.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:57:59.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:57:59.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:57:59.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:57:59.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:57:59.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:57:59.675 [DEBUG] [Thread-57113] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:58:08.687 [DEBUG] [Thread-57115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:58:12.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:58:12.911 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:58:20.452 [DEBUG] [Thread-57116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:58:23.727 [DEBUG] [Thread-57117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:58:29.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:58:29.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:58:29.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:58:30.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 58, 16), 28.26, 14.75, 0.0, 19.36, 23.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:58:30.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:58:16
2025-11-17T15:58:30.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:58:30.680 [DEBUG] [Thread-57118] [transport.py] [_log()] starting thread (client mode): 0xd07bdd20
2025-11-17T15:58:30.680 [DEBUG] [Thread-57118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:58:30.700 [DEBUG] [Thread-57118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:58:30.700 [INFO] [Thread-57118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] client lang: <none>
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] server lang: <none>
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] kex follows: False
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] Compression: none
2025-11-17T15:58:30.703 [DEBUG] [Thread-57118] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:58:30.715 [DEBUG] [Thread-57118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:58:30.715 [DEBUG] [Thread-57118] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:58:30.716 [DEBUG] [Thread-57118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:58:30.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:58:30.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:58:30.716 [DEBUG] [Thread-57118] [transport.py] [_log()] userauth is OK
2025-11-17T15:58:30.716 [DEBUG] [Thread-57118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:58:30.716 [DEBUG] [Thread-57118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:58:30.716 [DEBUG] [Thread-57118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:58:30.716 [DEBUG] [Thread-57118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:58:30.731 [INFO] [Thread-57118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:58:30.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:58:31.362 [DEBUG] [Thread-57118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:58:31.362 [DEBUG] [Thread-57118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:58:31.362 [DEBUG] [Thread-57118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:58:31.403 [DEBUG] [Thread-57118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:58:31.403 [DEBUG] [Thread-57118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:58:31.405 [DEBUG] [Thread-57118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:58:31.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:58:31.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:58:31.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:58:31.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:58:31.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:58:31.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:58:31.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.581644 -999.00  +23.30  14.86     20   -0.70 1 1 1 1 1   888    0 23.59 7.81 ----- 18.8 14.9 287.0 19.3 27.4 -28.4 27.3 -26.2 27.3 -26.4 27.9 -26.5
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.581644
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:58:31.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:58:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:58:16', tmtdew=28.26, humidity=14.75, cloud=0.0, wind=19.36, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:57:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:58:31.423 [DEBUG] [Thread-57118] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:58:31.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:58:31.508 [DEBUG] [Thread-57121] [transport.py] [_log()] starting thread (client mode): 0xd07bec50
2025-11-17T15:58:31.508 [DEBUG] [Thread-57121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:58:31.523 [DEBUG] [Thread-57121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:58:31.523 [INFO] [Thread-57121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] client lang: <none>
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] server lang: <none>
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] kex follows: False
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] Compression: none
2025-11-17T15:58:31.531 [DEBUG] [Thread-57121] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:58:31.587 [DEBUG] [Thread-57121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:58:31.587 [DEBUG] [Thread-57121] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:58:31.587 [DEBUG] [Thread-57121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:58:31.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:58:31.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:58:31.644 [DEBUG] [Thread-57121] [transport.py] [_log()] userauth is OK
2025-11-17T15:58:31.644 [DEBUG] [Thread-57121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:58:31.644 [DEBUG] [Thread-57121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:58:31.644 [DEBUG] [Thread-57121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:58:31.644 [DEBUG] [Thread-57121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:58:31.658 [INFO] [Thread-57121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:58:31.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:58:31.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:58:32.543 [DEBUG] [Thread-57121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:58:32.543 [DEBUG] [Thread-57121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:58:32.591 [DEBUG] [Thread-57121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:58:32.591 [DEBUG] [Thread-57121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:58:32.599 [DEBUG] [Thread-57121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:58:32.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:58:32.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:58:32.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:58:32.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:58:32.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:58:32.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:58:32.631 [DEBUG] [Thread-57121] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:58:38.759 [DEBUG] [Thread-57123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:58:53.804 [DEBUG] [Thread-57124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:59:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:59:02.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:59:02.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:59:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 58, 48), 28.02, 15.12, 0.0, 13.46, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:59:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:58:48
2025-11-17T15:59:03.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:59:03.589 [DEBUG] [Thread-57125] [transport.py] [_log()] starting thread (client mode): 0xd0776920
2025-11-17T15:59:03.589 [DEBUG] [Thread-57125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:59:03.605 [DEBUG] [Thread-57125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:59:03.605 [INFO] [Thread-57125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] client lang: <none>
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] server lang: <none>
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] kex follows: False
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:59:03.607 [DEBUG] [Thread-57125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:59:03.608 [DEBUG] [Thread-57125] [transport.py] [_log()] Compression: none
2025-11-17T15:59:03.608 [DEBUG] [Thread-57125] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:59:03.617 [DEBUG] [Thread-57125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:59:03.617 [DEBUG] [Thread-57125] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:59:03.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:59:03.619 [DEBUG] [Thread-57125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:59:03.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:59:03.620 [DEBUG] [Thread-57125] [transport.py] [_log()] userauth is OK
2025-11-17T15:59:03.621 [DEBUG] [Thread-57125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:59:03.621 [DEBUG] [Thread-57125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:59:03.621 [DEBUG] [Thread-57125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:59:03.621 [DEBUG] [Thread-57125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:59:03.644 [INFO] [Thread-57125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:59:03.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:59:04.256 [DEBUG] [Thread-57125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:59:04.256 [DEBUG] [Thread-57125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:59:04.257 [DEBUG] [Thread-57125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:59:04.296 [DEBUG] [Thread-57125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:59:04.297 [DEBUG] [Thread-57125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:59:04.300 [DEBUG] [Thread-57125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:59:04.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:59:04.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:59:04.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:59:04.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:59:04.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:59:04.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:59:04.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:59:04.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:59:04.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:59:04.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.581991 -999.00  +23.30  15.57     20   -0.70 1 1 1 1 1   888    0 23.94 9.49 ----- 15.6 15.6 285.3 21.0 27.4 -27.7 27.2 -26.6 27.2 -28.0 27.7 -26.3
2025-11-17T15:59:04.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:59:04.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:59:04.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.581991
2025-11-17T15:59:04.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:59:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:59:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:59:04.327 [DEBUG] [Thread-57125] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:59:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:59:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:59:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:58:48', tmtdew=28.02, humidity=15.12, cloud=0.0, wind=13.46, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:58:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:59:04.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:59:04.426 [DEBUG] [Thread-57128] [transport.py] [_log()] starting thread (client mode): 0xd070ee00
2025-11-17T15:59:04.426 [DEBUG] [Thread-57128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:59:04.441 [DEBUG] [Thread-57128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:59:04.441 [INFO] [Thread-57128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:59:04.448 [DEBUG] [Thread-57128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:59:04.448 [DEBUG] [Thread-57128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] client lang: <none>
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] server lang: <none>
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] kex follows: False
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] Compression: none
2025-11-17T15:59:04.449 [DEBUG] [Thread-57128] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:59:04.504 [DEBUG] [Thread-57128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:59:04.505 [DEBUG] [Thread-57128] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:59:04.505 [DEBUG] [Thread-57128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:59:04.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:59:04.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:59:04.561 [DEBUG] [Thread-57128] [transport.py] [_log()] userauth is OK
2025-11-17T15:59:04.561 [DEBUG] [Thread-57128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:59:04.561 [DEBUG] [Thread-57128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:59:04.561 [DEBUG] [Thread-57128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:59:04.562 [DEBUG] [Thread-57128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:59:04.581 [INFO] [Thread-57128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:59:04.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:59:04.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:59:05.449 [DEBUG] [Thread-57128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:59:05.449 [DEBUG] [Thread-57128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:59:05.497 [DEBUG] [Thread-57128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:59:05.497 [DEBUG] [Thread-57128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:59:05.506 [DEBUG] [Thread-57128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:59:05.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:59:05.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:59:05.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
2025-11-17T15:59:05.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:59:05.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:59:05.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:59:05.542 [DEBUG] [Thread-57128] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:59:08.834 [DEBUG] [Thread-57130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:59:13.053 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:59:13.054 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:59:20.504 [DEBUG] [Thread-57131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:59:23.861 [DEBUG] [Thread-57132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:59:35.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T15:59:35.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T15:59:35.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T15:59:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 59, 20), 27.92, 15.2, 0.0, 12.97, 22.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T15:59:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:59:20
2025-11-17T15:59:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T15:59:36.499 [DEBUG] [Thread-57133] [transport.py] [_log()] starting thread (client mode): 0xd070ef20
2025-11-17T15:59:36.499 [DEBUG] [Thread-57133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:59:36.522 [DEBUG] [Thread-57133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T15:59:36.522 [INFO] [Thread-57133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T15:59:36.526 [DEBUG] [Thread-57133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:59:36.526 [DEBUG] [Thread-57133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T15:59:36.526 [DEBUG] [Thread-57133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:59:36.526 [DEBUG] [Thread-57133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:59:36.526 [DEBUG] [Thread-57133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:59:36.526 [DEBUG] [Thread-57133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:59:36.526 [DEBUG] [Thread-57133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:59:36.527 [DEBUG] [Thread-57133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:59:36.527 [DEBUG] [Thread-57133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:59:36.527 [DEBUG] [Thread-57133] [transport.py] [_log()] client lang: <none>
2025-11-17T15:59:36.527 [DEBUG] [Thread-57133] [transport.py] [_log()] server lang: <none>
2025-11-17T15:59:36.527 [DEBUG] [Thread-57133] [transport.py] [_log()] kex follows: False
2025-11-17T15:59:36.527 [DEBUG] [Thread-57133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:59:36.527 [DEBUG] [Thread-57133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:59:36.527 [DEBUG] [Thread-57133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:59:36.528 [DEBUG] [Thread-57133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:59:36.528 [DEBUG] [Thread-57133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:59:36.528 [DEBUG] [Thread-57133] [transport.py] [_log()] Compression: none
2025-11-17T15:59:36.528 [DEBUG] [Thread-57133] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:59:36.549 [DEBUG] [Thread-57133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:59:36.549 [DEBUG] [Thread-57133] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:59:36.550 [DEBUG] [Thread-57133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T15:59:36.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T15:59:36.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:59:36.552 [DEBUG] [Thread-57133] [transport.py] [_log()] userauth is OK
2025-11-17T15:59:36.552 [DEBUG] [Thread-57133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:59:36.552 [DEBUG] [Thread-57133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:59:36.552 [DEBUG] [Thread-57133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T15:59:36.552 [DEBUG] [Thread-57133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:59:36.589 [INFO] [Thread-57133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:59:36.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:59:37.248 [DEBUG] [Thread-57133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:59:37.248 [DEBUG] [Thread-57133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:59:37.248 [DEBUG] [Thread-57133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T15:59:37.288 [DEBUG] [Thread-57133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:59:37.289 [DEBUG] [Thread-57133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:59:37.291 [DEBUG] [Thread-57133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:59:37.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:59:37.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T15:59:37.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T15:59:37.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T15:59:37.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:59:37.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T15:59:37.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:59:37.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:59:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T15:59:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.582338 -999.00  +22.70  18.01     20   -1.00 1 1 1 1 1   888    0 23.42 10.89 ----- 15.5 18.0 269.2 27.0 27.2 -28.8 27.0 -26.6 26.6 -28.3 27.5 -28.3
2025-11-17T15:59:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T15:59:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T15:59:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.582338
2025-11-17T15:59:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T15:59:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T15:59:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T15:59:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T15:59:37.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T15:59:37.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:59:20', tmtdew=27.92, humidity=15.2, cloud=0.0, wind=12.97, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:58:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T15:59:37.315 [DEBUG] [Thread-57133] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:59:37.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T15:59:37.411 [DEBUG] [Thread-57136] [transport.py] [_log()] starting thread (client mode): 0xd070da80
2025-11-17T15:59:37.411 [DEBUG] [Thread-57136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T15:59:37.426 [DEBUG] [Thread-57136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T15:59:37.426 [INFO] [Thread-57136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T15:59:37.434 [DEBUG] [Thread-57136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T15:59:37.434 [DEBUG] [Thread-57136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] client lang: <none>
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] server lang: <none>
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] kex follows: False
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] Compression: none
2025-11-17T15:59:37.435 [DEBUG] [Thread-57136] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T15:59:37.492 [DEBUG] [Thread-57136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T15:59:37.493 [DEBUG] [Thread-57136] [transport.py] [_log()] Switch to new keys ...
2025-11-17T15:59:37.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T15:59:37.494 [DEBUG] [Thread-57136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T15:59:37.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T15:59:37.548 [DEBUG] [Thread-57136] [transport.py] [_log()] userauth is OK
2025-11-17T15:59:37.548 [DEBUG] [Thread-57136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T15:59:37.549 [DEBUG] [Thread-57136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T15:59:37.549 [DEBUG] [Thread-57136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T15:59:37.549 [DEBUG] [Thread-57136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T15:59:37.567 [INFO] [Thread-57136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T15:59:37.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T15:59:37.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T15:59:38.457 [DEBUG] [Thread-57136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T15:59:38.457 [DEBUG] [Thread-57136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T15:59:38.505 [DEBUG] [Thread-57136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T15:59:38.505 [DEBUG] [Thread-57136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T15:59:38.514 [DEBUG] [Thread-57136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T15:59:38.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T15:59:38.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T15:59:38.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T15:59:38.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T15:59:38.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T15:59:38.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T15:59:38.547 [DEBUG] [Thread-57136] [transport.py] [_log()] EOF in transport thread
2025-11-17T15:59:38.893 [DEBUG] [Thread-57138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T15:59:53.930 [DEBUG] [Thread-57139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:00:08.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:00:08.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:00:08.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:00:08.955 [DEBUG] [Thread-57140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:00:09.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 15, 59, 52), 27.98, 15.2, 0.0, 17.66, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:00:09.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 15:59:52
2025-11-17T16:00:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:00:09.511 [DEBUG] [Thread-57141] [transport.py] [_log()] starting thread (client mode): 0xd070f820
2025-11-17T16:00:09.511 [DEBUG] [Thread-57141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:00:09.531 [DEBUG] [Thread-57141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:00:09.531 [INFO] [Thread-57141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:00:09.534 [DEBUG] [Thread-57141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:00:09.534 [DEBUG] [Thread-57141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] client lang: <none>
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] server lang: <none>
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] kex follows: False
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:00:09.535 [DEBUG] [Thread-57141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:00:09.536 [DEBUG] [Thread-57141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:00:09.536 [DEBUG] [Thread-57141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:00:09.536 [DEBUG] [Thread-57141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:00:09.536 [DEBUG] [Thread-57141] [transport.py] [_log()] Compression: none
2025-11-17T16:00:09.536 [DEBUG] [Thread-57141] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:00:09.555 [DEBUG] [Thread-57141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:00:09.555 [DEBUG] [Thread-57141] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:00:09.556 [DEBUG] [Thread-57141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:00:09.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:00:09.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:00:09.558 [DEBUG] [Thread-57141] [transport.py] [_log()] userauth is OK
2025-11-17T16:00:09.558 [DEBUG] [Thread-57141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:00:09.558 [DEBUG] [Thread-57141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:00:09.558 [DEBUG] [Thread-57141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:00:09.559 [DEBUG] [Thread-57141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:00:09.576 [INFO] [Thread-57141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:00:09.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:00:13.194 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:00:13.194 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:00:18.150 [DEBUG] [Thread-57141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:00:18.150 [DEBUG] [Thread-57141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:00:18.151 [DEBUG] [Thread-57141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:00:18.191 [DEBUG] [Thread-57141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:00:18.191 [DEBUG] [Thread-57141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:00:18.194 [DEBUG] [Thread-57141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:00:18.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:00:18.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:00:18.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:00:18.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:00:18.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:00:18.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:00:18.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:00:18.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:00:18.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:00:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.583033 -999.00  +22.40  19.53     20   -1.00 1 1 1 1 1   888    0 23.93 12.43 ----- 16.1 19.5 284.2 26.9 26.9 -27.5 26.7 -26.5 26.4 -28.9 27.1 -25.9
2025-11-17T16:00:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:00:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:00:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.583033
2025-11-17T16:00:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:00:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:00:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:00:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:00:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:00:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T15:59:52', tmtdew=27.98, humidity=15.2, cloud=0.0, wind=17.66, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T13:59:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:00:18.218 [DEBUG] [Thread-57141] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:00:18.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:00:18.315 [DEBUG] [Thread-57144] [transport.py] [_log()] starting thread (client mode): 0xd3136110
2025-11-17T16:00:18.315 [DEBUG] [Thread-57144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:00:18.335 [DEBUG] [Thread-57144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:00:18.335 [INFO] [Thread-57144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] client lang: <none>
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] server lang: <none>
2025-11-17T16:00:18.343 [DEBUG] [Thread-57144] [transport.py] [_log()] kex follows: False
2025-11-17T16:00:18.344 [DEBUG] [Thread-57144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:00:18.344 [DEBUG] [Thread-57144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:00:18.344 [DEBUG] [Thread-57144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:00:18.344 [DEBUG] [Thread-57144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:00:18.344 [DEBUG] [Thread-57144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:00:18.344 [DEBUG] [Thread-57144] [transport.py] [_log()] Compression: none
2025-11-17T16:00:18.344 [DEBUG] [Thread-57144] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:00:18.400 [DEBUG] [Thread-57144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:00:18.401 [DEBUG] [Thread-57144] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:00:18.401 [DEBUG] [Thread-57144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:00:18.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:00:18.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:00:18.457 [DEBUG] [Thread-57144] [transport.py] [_log()] userauth is OK
2025-11-17T16:00:18.457 [DEBUG] [Thread-57144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:00:18.457 [DEBUG] [Thread-57144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:00:18.457 [DEBUG] [Thread-57144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:00:18.457 [DEBUG] [Thread-57144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:00:18.476 [INFO] [Thread-57144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:00:18.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:00:18.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:00:19.340 [DEBUG] [Thread-57144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:00:19.340 [DEBUG] [Thread-57144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:00:19.387 [DEBUG] [Thread-57144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:00:19.387 [DEBUG] [Thread-57144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:00:19.396 [DEBUG] [Thread-57144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:00:19.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:00:19.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:00: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') -> 00000000
2025-11-17T16:00:19.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:00:19.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:00:19.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:00:19.431 [DEBUG] [Thread-57144] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:00:20.561 [DEBUG] [Thread-57146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:00:23.984 [DEBUG] [Thread-57147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:00:39.027 [DEBUG] [Thread-57148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:00:49.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:00:49.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:00:49.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:00:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 0, 24), 27.95, 15.25, 0.0, 18.02, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:00:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:00:24
2025-11-17T16:00:50.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:00:50.366 [DEBUG] [Thread-57150] [transport.py] [_log()] starting thread (client mode): 0xd0723130
2025-11-17T16:00:50.367 [DEBUG] [Thread-57150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:00:50.387 [DEBUG] [Thread-57150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:00:50.387 [INFO] [Thread-57150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:00:50.390 [DEBUG] [Thread-57150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:00:50.390 [DEBUG] [Thread-57150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:00:50.390 [DEBUG] [Thread-57150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:00:50.390 [DEBUG] [Thread-57150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:00:50.390 [DEBUG] [Thread-57150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:00:50.390 [DEBUG] [Thread-57150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:00:50.390 [DEBUG] [Thread-57150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:00:50.390 [DEBUG] [Thread-57150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] client lang: <none>
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] server lang: <none>
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] kex follows: False
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] Compression: none
2025-11-17T16:00:50.391 [DEBUG] [Thread-57150] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:00:50.408 [DEBUG] [Thread-57150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:00:50.409 [DEBUG] [Thread-57150] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:00:50.409 [DEBUG] [Thread-57150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:00:50.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:00:50.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:00:50.411 [DEBUG] [Thread-57150] [transport.py] [_log()] userauth is OK
2025-11-17T16:00:50.411 [DEBUG] [Thread-57150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:00:50.411 [DEBUG] [Thread-57150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:00:50.411 [DEBUG] [Thread-57150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:00:50.411 [DEBUG] [Thread-57150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:00:50.428 [INFO] [Thread-57150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:00:50.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:00:51.024 [DEBUG] [Thread-57150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:00:51.024 [DEBUG] [Thread-57150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:00:51.025 [DEBUG] [Thread-57150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:00:51.065 [DEBUG] [Thread-57150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:00:51.065 [DEBUG] [Thread-57150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:00:51.069 [DEBUG] [Thread-57150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:00:51.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:00:51.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:00:51.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:00:51.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:00:51.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:00:51.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:00:51.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:00:51.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:00:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:00:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.583385 -999.00  +22.20  19.53     21   -0.90 1 1 1 1 1   888    0 23.56 14.19 ----- 23.0 19.5 276.6 24.4 26.7 -28.1 26.7 -25.2 26.4 -22.7 26.9 -25.2
2025-11-17T16:00:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:00:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:00:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.583385
2025-11-17T16:00:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:00:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:00:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:00:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:00:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:00:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:00:24', tmtdew=27.95, humidity=15.25, cloud=0.0, wind=18.02, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:00:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:00:51.090 [DEBUG] [Thread-57150] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:00:51.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:00:51.187 [DEBUG] [Thread-57153] [transport.py] [_log()] starting thread (client mode): 0xd0721f60
2025-11-17T16:00:51.187 [DEBUG] [Thread-57153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:00:51.202 [DEBUG] [Thread-57153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:00:51.202 [INFO] [Thread-57153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:00:51.209 [DEBUG] [Thread-57153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:00:51.209 [DEBUG] [Thread-57153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:00:51.209 [DEBUG] [Thread-57153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] client lang: <none>
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] server lang: <none>
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] kex follows: False
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] Compression: none
2025-11-17T16:00:51.210 [DEBUG] [Thread-57153] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:00:51.272 [DEBUG] [Thread-57153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:00:51.273 [DEBUG] [Thread-57153] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:00:51.273 [DEBUG] [Thread-57153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:00:51.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:00:51.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:00:51.329 [DEBUG] [Thread-57153] [transport.py] [_log()] userauth is OK
2025-11-17T16:00:51.329 [DEBUG] [Thread-57153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:00:51.329 [DEBUG] [Thread-57153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:00:51.329 [DEBUG] [Thread-57153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:00:51.329 [DEBUG] [Thread-57153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:00:51.348 [INFO] [Thread-57153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:00:51.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:00:51.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:00:52.229 [DEBUG] [Thread-57153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:00:52.229 [DEBUG] [Thread-57153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:00:52.277 [DEBUG] [Thread-57153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:00:52.277 [DEBUG] [Thread-57153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:00:52.286 [DEBUG] [Thread-57153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:00:52.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:00:52.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:00:52.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:00:52.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:00:52.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:00:52.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:00:52.320 [DEBUG] [Thread-57153] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:00:54.060 [DEBUG] [Thread-57155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:00:59.235 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:09.107 [DEBUG] [Thread-57156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:13.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:13.337 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:20.609 [DEBUG] [Thread-57157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:01:22.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:01:22.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:01:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 0, 56), 27.8, 15.25, 0.0, 15.39, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:01:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:00:56
2025-11-17T16:01:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:01:23.269 [DEBUG] [Thread-57158] [transport.py] [_log()] starting thread (client mode): 0xd071b460
2025-11-17T16:01:23.270 [DEBUG] [Thread-57158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:01:23.290 [DEBUG] [Thread-57158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:01:23.290 [INFO] [Thread-57158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:01:23.293 [DEBUG] [Thread-57158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:01:23.293 [DEBUG] [Thread-57158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:01:23.293 [DEBUG] [Thread-57158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:01:23.293 [DEBUG] [Thread-57158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:01:23.293 [DEBUG] [Thread-57158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:01:23.293 [DEBUG] [Thread-57158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:01:23.293 [DEBUG] [Thread-57158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] client lang: <none>
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] server lang: <none>
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] kex follows: False
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] Compression: none
2025-11-17T16:01:23.294 [DEBUG] [Thread-57158] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:01:23.310 [DEBUG] [Thread-57158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:01:23.311 [DEBUG] [Thread-57158] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:01:23.311 [DEBUG] [Thread-57158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:01:23.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:01:23.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:01:23.313 [DEBUG] [Thread-57158] [transport.py] [_log()] userauth is OK
2025-11-17T16:01:23.313 [DEBUG] [Thread-57158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:01:23.314 [DEBUG] [Thread-57158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:01:23.314 [DEBUG] [Thread-57158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:01:23.314 [DEBUG] [Thread-57158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:01:23.339 [INFO] [Thread-57158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:01:23.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:01:24.047 [DEBUG] [Thread-57158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:01:24.047 [DEBUG] [Thread-57158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:01:24.048 [DEBUG] [Thread-57158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:01:24.088 [DEBUG] [Thread-57158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:01:24.089 [DEBUG] [Thread-57158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:01:24.092 [DEBUG] [Thread-57158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:01:24.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:01:24.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:01:24.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:01:24.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:01:24.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:01:24.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:01:24.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:01:24.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:01:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:01:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.583727 -999.00  +22.10  10.63     21   -0.90 1 1 1 1 1   888    0 23.53 14.19 ----- 6.6 10.6 294.1 26.5 26.5 -28.1 26.6 -25.6 26.3 -23.4 26.7 -25.4
2025-11-17T16:01:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:01:24.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:01:24.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.583727
2025-11-17T16:01:24.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:01:24.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:01:24.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:01:24.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:01:24.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:01:24.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:00:56', tmtdew=27.8, humidity=15.25, cloud=0.0, wind=15.39, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:00:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:01:24.116 [DEBUG] [Thread-57158] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:01:24.134 [DEBUG] [Thread-57161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:24.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:01:24.214 [DEBUG] [Thread-57162] [transport.py] [_log()] starting thread (client mode): 0xd0786bc0
2025-11-17T16:01:24.214 [DEBUG] [Thread-57162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:01:24.234 [DEBUG] [Thread-57162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:01:24.235 [INFO] [Thread-57162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:01:24.242 [DEBUG] [Thread-57162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:01:24.242 [DEBUG] [Thread-57162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:01:24.242 [DEBUG] [Thread-57162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:01:24.242 [DEBUG] [Thread-57162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:01:24.242 [DEBUG] [Thread-57162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:01:24.242 [DEBUG] [Thread-57162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:01:24.242 [DEBUG] [Thread-57162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] client lang: <none>
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] server lang: <none>
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] kex follows: False
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] Compression: none
2025-11-17T16:01:24.243 [DEBUG] [Thread-57162] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:01:24.304 [DEBUG] [Thread-57162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:01:24.305 [DEBUG] [Thread-57162] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:01:24.305 [DEBUG] [Thread-57162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:01:24.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:01:24.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:01:24.361 [DEBUG] [Thread-57162] [transport.py] [_log()] userauth is OK
2025-11-17T16:01:24.361 [DEBUG] [Thread-57162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:01:24.361 [DEBUG] [Thread-57162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:01:24.361 [DEBUG] [Thread-57162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:01:24.362 [DEBUG] [Thread-57162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:01:24.384 [INFO] [Thread-57162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:01:24.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:01:24.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:01:25.251 [DEBUG] [Thread-57162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:01:25.251 [DEBUG] [Thread-57162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:01:25.299 [DEBUG] [Thread-57162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:01:25.299 [DEBUG] [Thread-57162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:01:25.308 [DEBUG] [Thread-57162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:01:25.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:01:25.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:01:25.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:01:25.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:01:25.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:01:25.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:01:25.350 [DEBUG] [Thread-57162] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:01:39.167 [DEBUG] [Thread-57164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:39.775 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:54.196 [DEBUG] [Thread-57165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:01:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:01:55.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:01:55.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:01:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 1, 28), 27.78, 15.28, 0.0, 16.13, 22.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:01:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:01:28
2025-11-17T16:01:56.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:01:56.299 [DEBUG] [Thread-57166] [transport.py] [_log()] starting thread (client mode): 0xd0777cd0
2025-11-17T16:01:56.299 [DEBUG] [Thread-57166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:01:56.319 [DEBUG] [Thread-57166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:01:56.319 [INFO] [Thread-57166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:01:56.322 [DEBUG] [Thread-57166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] client lang: <none>
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] server lang: <none>
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] kex follows: False
2025-11-17T16:01:56.323 [DEBUG] [Thread-57166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:01:56.324 [DEBUG] [Thread-57166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:01:56.324 [DEBUG] [Thread-57166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:01:56.324 [DEBUG] [Thread-57166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:01:56.324 [DEBUG] [Thread-57166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:01:56.324 [DEBUG] [Thread-57166] [transport.py] [_log()] Compression: none
2025-11-17T16:01:56.324 [DEBUG] [Thread-57166] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:01:56.342 [DEBUG] [Thread-57166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:01:56.343 [DEBUG] [Thread-57166] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:01:56.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:01:56.344 [DEBUG] [Thread-57166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:01:56.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:01:56.346 [DEBUG] [Thread-57166] [transport.py] [_log()] userauth is OK
2025-11-17T16:01:56.346 [DEBUG] [Thread-57166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:01:56.346 [DEBUG] [Thread-57166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:01:56.346 [DEBUG] [Thread-57166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:01:56.346 [DEBUG] [Thread-57166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:01:56.372 [INFO] [Thread-57166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:01:56.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:01:57.007 [DEBUG] [Thread-57166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:01:57.007 [DEBUG] [Thread-57166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:01:57.007 [DEBUG] [Thread-57166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:01:57.049 [DEBUG] [Thread-57166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:01:57.049 [DEBUG] [Thread-57166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:01:57.052 [DEBUG] [Thread-57166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:01:57.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:01:57.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:01:57.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:01:57.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:01:57.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:01:57.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:01:57.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:01:57.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:01:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:01:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.584074 -999.00  +22.40  10.63     21   -0.80 1 1 1 1 1   888    0 23.67 12.47 ----- 13.4 10.6 269.4 12.6 26.6 -26.6 26.6 -25.0 26.4 -23.1 26.8 -24.5
2025-11-17T16:01:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:01:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:01:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.584074
2025-11-17T16:01:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:01:57.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:01:57.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:01:57.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:01:57.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:01:57.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:01:28', tmtdew=27.78, humidity=15.28, cloud=0.0, wind=16.13, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:01:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:01:57.080 [DEBUG] [Thread-57166] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:01:57.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:01:57.177 [DEBUG] [Thread-57169] [transport.py] [_log()] starting thread (client mode): 0xd070fe50
2025-11-17T16:01:57.177 [DEBUG] [Thread-57169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:01:57.192 [DEBUG] [Thread-57169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:01:57.192 [INFO] [Thread-57169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:01:57.200 [DEBUG] [Thread-57169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:01:57.200 [DEBUG] [Thread-57169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:01:57.200 [DEBUG] [Thread-57169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:01:57.200 [DEBUG] [Thread-57169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:01:57.200 [DEBUG] [Thread-57169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] client lang: <none>
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] server lang: <none>
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] kex follows: False
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:01:57.201 [DEBUG] [Thread-57169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:01:57.202 [DEBUG] [Thread-57169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:01:57.202 [DEBUG] [Thread-57169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:01:57.202 [DEBUG] [Thread-57169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:01:57.202 [DEBUG] [Thread-57169] [transport.py] [_log()] Compression: none
2025-11-17T16:01:57.203 [DEBUG] [Thread-57169] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:01:57.259 [DEBUG] [Thread-57169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:01:57.260 [DEBUG] [Thread-57169] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:01:57.261 [DEBUG] [Thread-57169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:01:57.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:01:57.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:01:57.317 [DEBUG] [Thread-57169] [transport.py] [_log()] userauth is OK
2025-11-17T16:01:57.318 [DEBUG] [Thread-57169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:01:57.318 [DEBUG] [Thread-57169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:01:57.318 [DEBUG] [Thread-57169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:01:57.318 [DEBUG] [Thread-57169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:01:57.337 [INFO] [Thread-57169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:01:57.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:01:57.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:01:58.212 [DEBUG] [Thread-57169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:01:58.213 [DEBUG] [Thread-57169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:01:58.260 [DEBUG] [Thread-57169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:01:58.260 [DEBUG] [Thread-57169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:01:58.269 [DEBUG] [Thread-57169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:01:58.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:01:58.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:01:58.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:01:58.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:01:58.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:01:58.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:01:58.304 [DEBUG] [Thread-57169] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:02:09.224 [DEBUG] [Thread-57171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:02:13.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:02:13.479 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:02:20.659 [DEBUG] [Thread-57172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:02:24.261 [DEBUG] [Thread-57173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:02:28.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:02:28.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:02:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:02:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 2), 27.71, 15.3, 0.0, 17.03, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:02:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:02:00
2025-11-17T16:02:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:02:29.260 [DEBUG] [Thread-57174] [transport.py] [_log()] starting thread (client mode): 0xd0723ac0
2025-11-17T16:02:29.261 [DEBUG] [Thread-57174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:02:29.273 [DEBUG] [Thread-57174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:02:29.273 [INFO] [Thread-57174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:02:29.274 [DEBUG] [Thread-57174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:02:29.274 [DEBUG] [Thread-57174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:02:29.274 [DEBUG] [Thread-57174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:02:29.274 [DEBUG] [Thread-57174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:02:29.274 [DEBUG] [Thread-57174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:02:29.274 [DEBUG] [Thread-57174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] client lang: <none>
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] server lang: <none>
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] kex follows: False
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] Compression: none
2025-11-17T16:02:29.275 [DEBUG] [Thread-57174] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:02:29.290 [DEBUG] [Thread-57174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:02:29.290 [DEBUG] [Thread-57174] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:02:29.291 [DEBUG] [Thread-57174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:02:29.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:02:29.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:02:29.292 [DEBUG] [Thread-57174] [transport.py] [_log()] userauth is OK
2025-11-17T16:02:29.292 [DEBUG] [Thread-57174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:02:29.292 [DEBUG] [Thread-57174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:02:29.292 [DEBUG] [Thread-57174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:02:29.292 [DEBUG] [Thread-57174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:02:29.311 [INFO] [Thread-57174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:02:29.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:02:29.962 [DEBUG] [Thread-57174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:02:29.962 [DEBUG] [Thread-57174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:02:29.962 [DEBUG] [Thread-57174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:02:30.002 [DEBUG] [Thread-57174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:02:30.003 [DEBUG] [Thread-57174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:02:30.006 [DEBUG] [Thread-57174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:02:30.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:02:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:02:30.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:02:30.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:02:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:02:30.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:02:30.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:02:30.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:02:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:02:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.584421 -999.00  +22.50  20.45     20   -0.90 1 1 1 1 1   888    0 23.48 10.36 ----- 20.4 20.4 267.0 24.3 26.6 -25.9 26.6 -24.3 26.6 -22.2 26.7 -24.0
2025-11-17T16:02:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:02:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:02:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.584421
2025-11-17T16:02:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:02:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:02:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:02:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:02:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:02:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:02:00', tmtdew=27.71, humidity=15.3, cloud=0.0, wind=17.03, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:01:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:02:30.029 [DEBUG] [Thread-57174] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:02:30.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:02:30.126 [DEBUG] [Thread-57177] [transport.py] [_log()] starting thread (client mode): 0xd07872b0
2025-11-17T16:02:30.126 [DEBUG] [Thread-57177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:02:30.143 [DEBUG] [Thread-57177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:02:30.144 [INFO] [Thread-57177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] client lang: <none>
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] server lang: <none>
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] kex follows: False
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:02:30.151 [DEBUG] [Thread-57177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:02:30.152 [DEBUG] [Thread-57177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:02:30.152 [DEBUG] [Thread-57177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:02:30.152 [DEBUG] [Thread-57177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:02:30.152 [DEBUG] [Thread-57177] [transport.py] [_log()] Compression: none
2025-11-17T16:02:30.152 [DEBUG] [Thread-57177] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:02:30.212 [DEBUG] [Thread-57177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:02:30.213 [DEBUG] [Thread-57177] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:02:30.213 [DEBUG] [Thread-57177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:02:30.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:02:30.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:02:30.269 [DEBUG] [Thread-57177] [transport.py] [_log()] userauth is OK
2025-11-17T16:02:30.269 [DEBUG] [Thread-57177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:02:30.269 [DEBUG] [Thread-57177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:02:30.269 [DEBUG] [Thread-57177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:02:30.269 [DEBUG] [Thread-57177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:02:30.289 [INFO] [Thread-57177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:02:30.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:02:30.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:02:31.177 [DEBUG] [Thread-57177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:02:31.177 [DEBUG] [Thread-57177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:02:31.225 [DEBUG] [Thread-57177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:02:31.225 [DEBUG] [Thread-57177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:02:31.234 [DEBUG] [Thread-57177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:02:31.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:02:31.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:02:31.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:02:31.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:02:31.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:02:31.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:02:31.269 [DEBUG] [Thread-57177] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:02:39.289 [DEBUG] [Thread-57179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:02:42.811 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:02:54.329 [DEBUG] [Thread-57180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:01.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:03:01.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:03:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:03:01.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 2, 32), 27.64, 15.38, 0.0, 16.48, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:03:01.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:02:32
2025-11-17T16:03:02.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:03:02.280 [DEBUG] [Thread-57181] [transport.py] [_log()] starting thread (client mode): 0xd0786260
2025-11-17T16:03:02.280 [DEBUG] [Thread-57181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:03:02.299 [DEBUG] [Thread-57181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:03:02.299 [INFO] [Thread-57181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] client lang: <none>
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] server lang: <none>
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] kex follows: False
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] Compression: none
2025-11-17T16:03:02.303 [DEBUG] [Thread-57181] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:03:02.319 [DEBUG] [Thread-57181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:03:02.319 [DEBUG] [Thread-57181] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:03:02.319 [DEBUG] [Thread-57181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:03:02.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:03:02.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:03:02.320 [DEBUG] [Thread-57181] [transport.py] [_log()] userauth is OK
2025-11-17T16:03:02.320 [DEBUG] [Thread-57181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:03:02.320 [DEBUG] [Thread-57181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:03:02.320 [DEBUG] [Thread-57181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:03:02.320 [DEBUG] [Thread-57181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:03:02.337 [INFO] [Thread-57181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:03:02.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:03:02.956 [DEBUG] [Thread-57181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:03:02.956 [DEBUG] [Thread-57181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:03:02.957 [DEBUG] [Thread-57181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:03:02.997 [DEBUG] [Thread-57181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:03:02.997 [DEBUG] [Thread-57181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:03:03.000 [DEBUG] [Thread-57181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:03:03.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:03:03.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:03:03.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:03:03.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:03:03.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:03:03.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:03:03.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.584769 -999.00  +22.50  14.64     21   -0.60 1 2 1 1 1   888    0 23.52 6.08 ----- 11.8 14.6 268.0 23.8 26.8 -24.3 26.9 -22.3 26.9 -18.7 27.0 -20.4
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.584769
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:03:03.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:02:32', tmtdew=27.64, humidity=15.38, cloud=0.0, wind=16.48, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:02:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:03:03.018 [DEBUG] [Thread-57181] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:03:03.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:03:03.107 [DEBUG] [Thread-57184] [transport.py] [_log()] starting thread (client mode): 0xd07239a0
2025-11-17T16:03:03.107 [DEBUG] [Thread-57184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:03:03.126 [DEBUG] [Thread-57184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:03:03.126 [INFO] [Thread-57184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] client lang: <none>
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] server lang: <none>
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] kex follows: False
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] Compression: none
2025-11-17T16:03:03.134 [DEBUG] [Thread-57184] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:03:03.196 [DEBUG] [Thread-57184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:03:03.196 [DEBUG] [Thread-57184] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:03:03.196 [DEBUG] [Thread-57184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:03:03.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:03:03.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:03:03.253 [DEBUG] [Thread-57184] [transport.py] [_log()] userauth is OK
2025-11-17T16:03:03.253 [DEBUG] [Thread-57184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:03:03.253 [DEBUG] [Thread-57184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:03:03.253 [DEBUG] [Thread-57184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:03:03.253 [DEBUG] [Thread-57184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:03:03.270 [INFO] [Thread-57184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:03:03.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:03:03.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:03:04.193 [DEBUG] [Thread-57184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:03:04.193 [DEBUG] [Thread-57184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:03:04.241 [DEBUG] [Thread-57184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:03:04.241 [DEBUG] [Thread-57184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:03:04.250 [DEBUG] [Thread-57184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:03:04.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:03:04.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')
2025-11-17T16:03:04.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:03:04.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:03:04.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:03:04.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:03:04.287 [DEBUG] [Thread-57184] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:03:07.344 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:09.357 [DEBUG] [Thread-57186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:13.619 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:13.620 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:20.710 [DEBUG] [Thread-57187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:24.400 [DEBUG] [Thread-57188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:29.826 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:34.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:03:34.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:03:34.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:03:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 3, 4), 28.02, 15.03, 0.0, 18.47, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:03:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:03:04
2025-11-17T16:03:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:03:35.230 [DEBUG] [Thread-57189] [transport.py] [_log()] starting thread (client mode): 0xd0774d00
2025-11-17T16:03:35.231 [DEBUG] [Thread-57189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:03:35.251 [DEBUG] [Thread-57189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:03:35.251 [INFO] [Thread-57189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] client lang: <none>
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] server lang: <none>
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] kex follows: False
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] Compression: none
2025-11-17T16:03:35.255 [DEBUG] [Thread-57189] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:03:35.270 [DEBUG] [Thread-57189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:03:35.270 [DEBUG] [Thread-57189] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:03:35.270 [DEBUG] [Thread-57189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:03:35.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:03:35.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:03:35.271 [DEBUG] [Thread-57189] [transport.py] [_log()] userauth is OK
2025-11-17T16:03:35.271 [DEBUG] [Thread-57189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:03:35.271 [DEBUG] [Thread-57189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:03:35.271 [DEBUG] [Thread-57189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:03:35.271 [DEBUG] [Thread-57189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:03:35.286 [INFO] [Thread-57189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:03:35.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:03:36.007 [DEBUG] [Thread-57189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:03:36.007 [DEBUG] [Thread-57189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:03:36.007 [DEBUG] [Thread-57189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:03:36.048 [DEBUG] [Thread-57189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:03:36.049 [DEBUG] [Thread-57189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:03:36.051 [DEBUG] [Thread-57189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:03:36.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:03:36.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:03:36.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:03:36.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:03:36.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:03:36.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:03:36.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.585116 -999.00  +22.70   9.20     21   -0.70 1 2 1 1 1   888    0 23.67 5.05 ----- 5.3 9.2 211.4 18.1 27.1 -23.8 27.1 -22.1 27.4 -19.0 27.4 -20.8
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.585116
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:03:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:03:04', tmtdew=28.02, humidity=15.03, cloud=0.0, wind=18.47, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:02:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:03:36.068 [DEBUG] [Thread-57189] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:03:36.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:03:36.152 [DEBUG] [Thread-57192] [transport.py] [_log()] starting thread (client mode): 0xd0777370
2025-11-17T16:03:36.152 [DEBUG] [Thread-57192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:03:36.167 [DEBUG] [Thread-57192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:03:36.167 [INFO] [Thread-57192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:03:36.174 [DEBUG] [Thread-57192] [transport.py] [_log()] client lang: <none>
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] server lang: <none>
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] kex follows: False
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] Compression: none
2025-11-17T16:03:36.175 [DEBUG] [Thread-57192] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:03:36.232 [DEBUG] [Thread-57192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:03:36.232 [DEBUG] [Thread-57192] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:03:36.233 [DEBUG] [Thread-57192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:03:36.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:03:36.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:03:36.289 [DEBUG] [Thread-57192] [transport.py] [_log()] userauth is OK
2025-11-17T16:03:36.289 [DEBUG] [Thread-57192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:03:36.289 [DEBUG] [Thread-57192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:03:36.289 [DEBUG] [Thread-57192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:03:36.289 [DEBUG] [Thread-57192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:03:36.303 [INFO] [Thread-57192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:03:36.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:03:36.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:03:37.191 [DEBUG] [Thread-57192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:03:37.191 [DEBUG] [Thread-57192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:03:37.239 [DEBUG] [Thread-57192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:03:37.239 [DEBUG] [Thread-57192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:03:37.247 [DEBUG] [Thread-57192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:03:37.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:03:37.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:03:37.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:03:37.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:03:37.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:03:37.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:03:37.278 [DEBUG] [Thread-57192] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:03:39.428 [DEBUG] [Thread-57194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:52.334 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:03:54.458 [DEBUG] [Thread-57195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:07.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:04:07.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:04:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:04:07.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 3, 36), 28.19, 15.12, 0.0, 16.02, 23.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:04:07.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:03:36
2025-11-17T16:04:08.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:04:08.231 [DEBUG] [Thread-57196] [transport.py] [_log()] starting thread (client mode): 0xd07767a0
2025-11-17T16:04:08.231 [DEBUG] [Thread-57196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:04:08.251 [DEBUG] [Thread-57196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:04:08.252 [INFO] [Thread-57196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:04:08.255 [DEBUG] [Thread-57196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:04:08.255 [DEBUG] [Thread-57196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:04:08.255 [DEBUG] [Thread-57196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] client lang: <none>
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] server lang: <none>
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] kex follows: False
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] Compression: none
2025-11-17T16:04:08.256 [DEBUG] [Thread-57196] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:04:08.265 [DEBUG] [Thread-57196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:04:08.265 [DEBUG] [Thread-57196] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:04:08.266 [DEBUG] [Thread-57196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:04:08.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:04:08.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:04:08.268 [DEBUG] [Thread-57196] [transport.py] [_log()] userauth is OK
2025-11-17T16:04:08.268 [DEBUG] [Thread-57196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:04:08.268 [DEBUG] [Thread-57196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:04:08.268 [DEBUG] [Thread-57196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:04:08.268 [DEBUG] [Thread-57196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:04:08.286 [INFO] [Thread-57196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:04:08.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:04:08.888 [DEBUG] [Thread-57196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:04:08.888 [DEBUG] [Thread-57196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:04:08.888 [DEBUG] [Thread-57196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:04:08.929 [DEBUG] [Thread-57196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:04:08.929 [DEBUG] [Thread-57196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:04:08.931 [DEBUG] [Thread-57196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:04:08.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:04:08.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:04:08.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:04:08.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:04:08.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:04:08.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:04:08.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:04:08.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:04:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:04:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.585463 -999.00  +23.00  12.33     20   -0.50 1 2 1 1 1   888    0 23.68 6.01 ----- 11.6 12.3 264.5 15.8 27.3 -22.5 27.3 -22.4 27.6 -19.5 27.9 -19.7
2025-11-17T16:04:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:04:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:04:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.585463
2025-11-17T16:04:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:04:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:04:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:04:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:04:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:04:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:03:36', tmtdew=28.19, humidity=15.12, cloud=0.0, wind=16.02, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:03:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:04:08.947 [DEBUG] [Thread-57196] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:04:09.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:04:09.033 [DEBUG] [Thread-57199] [transport.py] [_log()] starting thread (client mode): 0xd0787790
2025-11-17T16:04:09.034 [DEBUG] [Thread-57199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:04:09.048 [DEBUG] [Thread-57199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:04:09.048 [INFO] [Thread-57199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] client lang: <none>
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] server lang: <none>
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] kex follows: False
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] Compression: none
2025-11-17T16:04:09.056 [DEBUG] [Thread-57199] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:04:09.116 [DEBUG] [Thread-57199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:04:09.116 [DEBUG] [Thread-57199] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:04:09.116 [DEBUG] [Thread-57199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:04:09.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:04:09.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:04:09.173 [DEBUG] [Thread-57199] [transport.py] [_log()] userauth is OK
2025-11-17T16:04:09.173 [DEBUG] [Thread-57199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:04:09.173 [DEBUG] [Thread-57199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:04:09.173 [DEBUG] [Thread-57199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:04:09.173 [DEBUG] [Thread-57199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:04:09.187 [INFO] [Thread-57199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:04:09.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:04:09.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:04:09.484 [DEBUG] [Thread-57201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:10.077 [DEBUG] [Thread-57199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:04:10.077 [DEBUG] [Thread-57199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:04:10.127 [DEBUG] [Thread-57199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:04:10.127 [DEBUG] [Thread-57199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:04:10.135 [DEBUG] [Thread-57199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:04:10.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:04:10.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:04:10.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:04:10.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:04:10.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:04:10.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:04:10.178 [DEBUG] [Thread-57199] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:04:13.762 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:13.763 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:14.830 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:20.756 [DEBUG] [Thread-57202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:24.517 [DEBUG] [Thread-57203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:37.308 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:39.548 [DEBUG] [Thread-57204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:04:40.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:04:40.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:04:40.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 4, 8), 28.13, 15.17, 0.0, 14.31, 23.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:04:40.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:04:08
2025-11-17T16:04:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:04:41.172 [DEBUG] [Thread-57205] [transport.py] [_log()] starting thread (client mode): 0xd0722f50
2025-11-17T16:04:41.172 [DEBUG] [Thread-57205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:04:41.182 [DEBUG] [Thread-57205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:04:41.182 [INFO] [Thread-57205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] client lang: <none>
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] server lang: <none>
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] kex follows: False
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] Compression: none
2025-11-17T16:04:41.183 [DEBUG] [Thread-57205] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:04:41.193 [DEBUG] [Thread-57205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:04:41.193 [DEBUG] [Thread-57205] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:04:41.194 [DEBUG] [Thread-57205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:04:41.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:04:41.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:04:41.194 [DEBUG] [Thread-57205] [transport.py] [_log()] userauth is OK
2025-11-17T16:04:41.194 [DEBUG] [Thread-57205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:04:41.194 [DEBUG] [Thread-57205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:04:41.194 [DEBUG] [Thread-57205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:04:41.194 [DEBUG] [Thread-57205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:04:41.210 [INFO] [Thread-57205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:04:41.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:04:41.841 [DEBUG] [Thread-57205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:04:41.841 [DEBUG] [Thread-57205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:04:41.841 [DEBUG] [Thread-57205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:04:41.882 [DEBUG] [Thread-57205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:04:41.882 [DEBUG] [Thread-57205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:04:41.884 [DEBUG] [Thread-57205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:04:41.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:04:41.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:04:41.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:04:41.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:04:41.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:04:41.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:04:41.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:04:41.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:04:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:04:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.586158 -999.00  +23.50  14.13     20   -0.30 1 2 1 1 1   888    0 23.57 7.82 ----- 21.3 14.1 278.6 24.9 27.6 -23.2 27.5 -22.1 28.1 -18.9 28.4 -20.3
2025-11-17T16:04:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:04:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:04:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.586158
2025-11-17T16:04:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:04:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:04:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:04:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:04:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:04:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:04:08', tmtdew=28.13, humidity=15.17, cloud=0.0, wind=14.31, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:04:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:04:41.901 [DEBUG] [Thread-57205] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:04:41.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:04:41.988 [DEBUG] [Thread-57208] [transport.py] [_log()] starting thread (client mode): 0xd0721c00
2025-11-17T16:04:41.988 [DEBUG] [Thread-57208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:04:42.002 [DEBUG] [Thread-57208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:04:42.002 [INFO] [Thread-57208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] client lang: <none>
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] server lang: <none>
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] kex follows: False
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] Compression: none
2025-11-17T16:04:42.010 [DEBUG] [Thread-57208] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:04:42.071 [DEBUG] [Thread-57208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:04:42.071 [DEBUG] [Thread-57208] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:04:42.071 [DEBUG] [Thread-57208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:04:42.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:04:42.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:04:42.131 [DEBUG] [Thread-57208] [transport.py] [_log()] userauth is OK
2025-11-17T16:04:42.131 [DEBUG] [Thread-57208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:04:42.131 [DEBUG] [Thread-57208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:04:42.131 [DEBUG] [Thread-57208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:04:42.131 [DEBUG] [Thread-57208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:04:42.145 [INFO] [Thread-57208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:04:42.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:04:42.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:04:42.966 [DEBUG] [Thread-57208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:04:42.966 [DEBUG] [Thread-57208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:04:43.014 [DEBUG] [Thread-57208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:04:43.014 [DEBUG] [Thread-57208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:04:43.023 [DEBUG] [Thread-57208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:04:43.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:04:43.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:04:43.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:04:43.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:04:43.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:04:43.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:04:43.058 [DEBUG] [Thread-57208] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:04:54.580 [DEBUG] [Thread-57210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:04:59.769 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:09.622 [DEBUG] [Thread-57211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:05:13.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:05:13.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:05:13.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 4, 40), 28.21, 15.1, 0.0, 19.32, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:05:13.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:04:40
2025-11-17T16:05:13.904 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:13.904 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:05:14.063 [DEBUG] [Thread-57212] [transport.py] [_log()] starting thread (client mode): 0xd0777940
2025-11-17T16:05:14.063 [DEBUG] [Thread-57212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:05:14.085 [DEBUG] [Thread-57212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:05:14.086 [INFO] [Thread-57212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] client lang: <none>
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] server lang: <none>
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] kex follows: False
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] Compression: none
2025-11-17T16:05:14.089 [DEBUG] [Thread-57212] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:05:14.105 [DEBUG] [Thread-57212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:05:14.105 [DEBUG] [Thread-57212] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:05:14.105 [DEBUG] [Thread-57212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:05:14.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:05:14.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:05:14.106 [DEBUG] [Thread-57212] [transport.py] [_log()] userauth is OK
2025-11-17T16:05:14.106 [DEBUG] [Thread-57212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:05:14.106 [DEBUG] [Thread-57212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:05:14.106 [DEBUG] [Thread-57212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:05:14.106 [DEBUG] [Thread-57212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:05:14.115 [INFO] [Thread-57212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:05:14.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:05:14.781 [DEBUG] [Thread-57212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:05:14.781 [DEBUG] [Thread-57212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:05:14.782 [DEBUG] [Thread-57212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:05:14.823 [DEBUG] [Thread-57212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:05:14.823 [DEBUG] [Thread-57212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:05:14.826 [DEBUG] [Thread-57212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:05:14.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:05:14.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:05:14.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:05:14.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:05:14.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:05:14.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:05:14.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:05:14.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:05:14.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:05:14.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.586505 -999.00  +23.20  14.98     20   -0.60 1 2 1 1 1   888    0 23.71 9.16 ----- 12.1 15.0 279.2 22.2 27.6 -23.5 27.6 -22.6 28.0 -22.5 28.6 -20.9
2025-11-17T16:05:14.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:05:14.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:05:14.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.586505
2025-11-17T16:05:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:05:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:05:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:05:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:05:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:05:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:04:40', tmtdew=28.21, humidity=15.1, cloud=0.0, wind=19.32, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:04:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:05:14.851 [DEBUG] [Thread-57212] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:05:14.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:05:14.952 [DEBUG] [Thread-57215] [transport.py] [_log()] starting thread (client mode): 0xd07763e0
2025-11-17T16:05:14.952 [DEBUG] [Thread-57215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:05:14.967 [DEBUG] [Thread-57215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:05:14.967 [INFO] [Thread-57215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] client lang: <none>
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] server lang: <none>
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] kex follows: False
2025-11-17T16:05:14.976 [DEBUG] [Thread-57215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:05:14.977 [DEBUG] [Thread-57215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:05:14.977 [DEBUG] [Thread-57215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:05:14.977 [DEBUG] [Thread-57215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:05:14.977 [DEBUG] [Thread-57215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:05:14.977 [DEBUG] [Thread-57215] [transport.py] [_log()] Compression: none
2025-11-17T16:05:14.977 [DEBUG] [Thread-57215] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:05:15.037 [DEBUG] [Thread-57215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:05:15.038 [DEBUG] [Thread-57215] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:05:15.038 [DEBUG] [Thread-57215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:05:15.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:05:15.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:05:15.093 [DEBUG] [Thread-57215] [transport.py] [_log()] userauth is OK
2025-11-17T16:05:15.093 [DEBUG] [Thread-57215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:05:15.094 [DEBUG] [Thread-57215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:05:15.094 [DEBUG] [Thread-57215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:05:15.094 [DEBUG] [Thread-57215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:05:15.113 [INFO] [Thread-57215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:05:15.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:05:15.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:05:15.996 [DEBUG] [Thread-57215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:05:15.996 [DEBUG] [Thread-57215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:05:16.044 [DEBUG] [Thread-57215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:05:16.044 [DEBUG] [Thread-57215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:05:16.053 [DEBUG] [Thread-57215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:05:16.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:05: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')
2025-11-17T16:05:16.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:05:16.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:05:16.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:05:16.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:05:16.088 [DEBUG] [Thread-57215] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:05:20.805 [DEBUG] [Thread-57217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:22.241 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:24.656 [DEBUG] [Thread-57218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:39.697 [DEBUG] [Thread-57219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:44.733 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:05:46.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:05:46.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:05:46.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:05:46.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 5, 12), 28.36, 14.95, 0.0, 17.98, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:05:46.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:05:12
2025-11-17T16:05:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:05:47.073 [DEBUG] [Thread-57220] [transport.py] [_log()] starting thread (client mode): 0xd0757c70
2025-11-17T16:05:47.073 [DEBUG] [Thread-57220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:05:47.093 [DEBUG] [Thread-57220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:05:47.093 [INFO] [Thread-57220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:05:47.096 [DEBUG] [Thread-57220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:05:47.096 [DEBUG] [Thread-57220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:05:47.096 [DEBUG] [Thread-57220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] client lang: <none>
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] server lang: <none>
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] kex follows: False
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:05:47.097 [DEBUG] [Thread-57220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:05:47.098 [DEBUG] [Thread-57220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:05:47.098 [DEBUG] [Thread-57220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:05:47.098 [DEBUG] [Thread-57220] [transport.py] [_log()] Compression: none
2025-11-17T16:05:47.098 [DEBUG] [Thread-57220] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:05:47.116 [DEBUG] [Thread-57220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:05:47.117 [DEBUG] [Thread-57220] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:05:47.117 [DEBUG] [Thread-57220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:05:47.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:05:47.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:05:47.119 [DEBUG] [Thread-57220] [transport.py] [_log()] userauth is OK
2025-11-17T16:05:47.119 [DEBUG] [Thread-57220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:05:47.119 [DEBUG] [Thread-57220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:05:47.119 [DEBUG] [Thread-57220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:05:47.119 [DEBUG] [Thread-57220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:05:47.143 [INFO] [Thread-57220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:05:47.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:05:47.924 [DEBUG] [Thread-57220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:05:47.924 [DEBUG] [Thread-57220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:05:47.925 [DEBUG] [Thread-57220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:05:47.965 [DEBUG] [Thread-57220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:05:47.966 [DEBUG] [Thread-57220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:05:47.968 [DEBUG] [Thread-57220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:05:47.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:05:47.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:05:47.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:05:47.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:05:47.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:05:47.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:05:47.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:05:47.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:05:47.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:05:47.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.586852 -999.00  +23.10   8.34     20   -0.50 1 2 1 1 1   888    0 23.36 8.86 ----- 11.6 8.3 272.4 13.0 27.7 -23.5 27.7 -21.7 28.1 -20.2 28.8 -20.0
2025-11-17T16:05:47.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:05:47.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:05:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.586852
2025-11-17T16:05:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:05:47.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:05:47.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:05:47.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:05:47.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:05:47.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:05:12', tmtdew=28.36, humidity=14.95, cloud=0.0, wind=17.98, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:05:04.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:05:47.994 [DEBUG] [Thread-57220] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:05:48.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:05:48.090 [DEBUG] [Thread-57223] [transport.py] [_log()] starting thread (client mode): 0xd0722110
2025-11-17T16:05:48.090 [DEBUG] [Thread-57223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:05:48.110 [DEBUG] [Thread-57223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:05:48.110 [INFO] [Thread-57223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:05:48.118 [DEBUG] [Thread-57223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:05:48.118 [DEBUG] [Thread-57223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] client lang: <none>
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] server lang: <none>
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] kex follows: False
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:05:48.119 [DEBUG] [Thread-57223] [transport.py] [_log()] Compression: none
2025-11-17T16:05:48.120 [DEBUG] [Thread-57223] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:05:48.178 [DEBUG] [Thread-57223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:05:48.178 [DEBUG] [Thread-57223] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:05:48.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:05:48.179 [DEBUG] [Thread-57223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:05:48.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:05:48.237 [DEBUG] [Thread-57223] [transport.py] [_log()] userauth is OK
2025-11-17T16:05:48.237 [DEBUG] [Thread-57223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:05:48.238 [DEBUG] [Thread-57223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:05:48.238 [DEBUG] [Thread-57223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:05:48.238 [DEBUG] [Thread-57223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:05:48.260 [INFO] [Thread-57223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:05:48.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:05:48.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:05:49.138 [DEBUG] [Thread-57223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:05:49.138 [DEBUG] [Thread-57223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:05:49.186 [DEBUG] [Thread-57223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:05:49.186 [DEBUG] [Thread-57223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:05:49.195 [DEBUG] [Thread-57223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:05:49.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:05:49.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')
2025-11-17T16:05:49.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:05:49.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:05:49.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:05:49.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:05:49.232 [DEBUG] [Thread-57223] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:05:54.724 [DEBUG] [Thread-57225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:07.227 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:09.767 [DEBUG] [Thread-57226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:14.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:14.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:19.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:06:19.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:06:19.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:06:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 6, 16), 28.02, 15.25, 0.0, 10.41, 23.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:06:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:06:16
2025-11-17T16:06:20.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:06:20.180 [DEBUG] [Thread-57227] [transport.py] [_log()] starting thread (client mode): 0xd07779d0
2025-11-17T16:06:20.181 [DEBUG] [Thread-57227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:06:20.199 [DEBUG] [Thread-57227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:06:20.200 [INFO] [Thread-57227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] client lang: <none>
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] server lang: <none>
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] kex follows: False
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] Compression: none
2025-11-17T16:06:20.201 [DEBUG] [Thread-57227] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:06:20.211 [DEBUG] [Thread-57227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:06:20.211 [DEBUG] [Thread-57227] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:06:20.211 [DEBUG] [Thread-57227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:06:20.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:06:20.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:06:20.213 [DEBUG] [Thread-57227] [transport.py] [_log()] userauth is OK
2025-11-17T16:06:20.213 [DEBUG] [Thread-57227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:06:20.213 [DEBUG] [Thread-57227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:06:20.213 [DEBUG] [Thread-57227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:06:20.213 [DEBUG] [Thread-57227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:06:20.237 [INFO] [Thread-57227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:06:20.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:06:20.841 [DEBUG] [Thread-57229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:20.912 [DEBUG] [Thread-57227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:06:20.912 [DEBUG] [Thread-57227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:06:20.913 [DEBUG] [Thread-57227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:06:20.954 [DEBUG] [Thread-57227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:06:20.954 [DEBUG] [Thread-57227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:06:20.957 [DEBUG] [Thread-57227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:06:20.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:06:20.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:06:20.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:06:20.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:06:20.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:06:20.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:06:20.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:06:20.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:06:20.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:06:20.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.587199 -999.00  +23.40  13.14     20   -0.50 1 2 1 1 1   888    0 24.21 9.41 ----- 13.5 13.1 267.2 14.9 27.9 -21.8 27.9 -22.9 28.5 -21.7 29.1 -19.2
2025-11-17T16:06:20.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:06:20.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:06:20.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.587199
2025-11-17T16:06:20.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:06:20.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:06:20.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:06:20.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:06:20.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:06:20.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:06:16', tmtdew=28.02, humidity=15.25, cloud=0.0, wind=10.41, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:05:33.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:06:20.981 [DEBUG] [Thread-57227] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:06:21.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:06:21.076 [DEBUG] [Thread-57231] [transport.py] [_log()] starting thread (client mode): 0xd07558d0
2025-11-17T16:06:21.077 [DEBUG] [Thread-57231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:06:21.092 [DEBUG] [Thread-57231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:06:21.092 [INFO] [Thread-57231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:06:21.099 [DEBUG] [Thread-57231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:06:21.099 [DEBUG] [Thread-57231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] client lang: <none>
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] server lang: <none>
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] kex follows: False
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:06:21.100 [DEBUG] [Thread-57231] [transport.py] [_log()] Compression: none
2025-11-17T16:06:21.101 [DEBUG] [Thread-57231] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:06:21.161 [DEBUG] [Thread-57231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:06:21.161 [DEBUG] [Thread-57231] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:06:21.162 [DEBUG] [Thread-57231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:06:21.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:06:21.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:06:21.217 [DEBUG] [Thread-57231] [transport.py] [_log()] userauth is OK
2025-11-17T16:06:21.217 [DEBUG] [Thread-57231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:06:21.217 [DEBUG] [Thread-57231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:06:21.217 [DEBUG] [Thread-57231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:06:21.217 [DEBUG] [Thread-57231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:06:21.236 [INFO] [Thread-57231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:06:21.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:06:21.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:06:22.134 [DEBUG] [Thread-57231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:06:22.135 [DEBUG] [Thread-57231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:06:22.182 [DEBUG] [Thread-57231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:06:22.182 [DEBUG] [Thread-57231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:06:22.191 [DEBUG] [Thread-57231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:06:22.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:06:22.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:06:22.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:06:22.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:06:22.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:06:22.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:06:22.226 [DEBUG] [Thread-57231] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:06:24.796 [DEBUG] [Thread-57233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:29.700 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:30.601 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:33.024 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:34.496 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:35.928 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:37.353 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:38.786 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:39.842 [DEBUG] [Thread-57234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:40.217 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:41.649 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:43.071 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:44.541 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:45.968 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:46.131 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:06:52.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:06:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:06:52.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 6, 48), 28.07, 14.83, 0.0, 6.23, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:06:52.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:06:48
2025-11-17T16:06:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:06:53.206 [DEBUG] [Thread-57235] [transport.py] [_log()] starting thread (client mode): 0xd31b3eb0
2025-11-17T16:06:53.206 [DEBUG] [Thread-57235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:06:53.226 [DEBUG] [Thread-57235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:06:53.226 [INFO] [Thread-57235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:06:53.227 [DEBUG] [Thread-57235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] client lang: <none>
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] server lang: <none>
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] kex follows: False
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] Compression: none
2025-11-17T16:06:53.228 [DEBUG] [Thread-57235] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:06:53.236 [DEBUG] [Thread-57235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:06:53.236 [DEBUG] [Thread-57235] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:06:53.236 [DEBUG] [Thread-57235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:06:53.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:06:53.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:06:53.236 [DEBUG] [Thread-57235] [transport.py] [_log()] userauth is OK
2025-11-17T16:06:53.237 [DEBUG] [Thread-57235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:06:53.237 [DEBUG] [Thread-57235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:06:53.237 [DEBUG] [Thread-57235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:06:53.237 [DEBUG] [Thread-57235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:06:53.251 [INFO] [Thread-57235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:06:53.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:06:54.045 [DEBUG] [Thread-57235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:06:54.046 [DEBUG] [Thread-57235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:06:54.046 [DEBUG] [Thread-57235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:06:54.087 [DEBUG] [Thread-57235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:06:54.087 [DEBUG] [Thread-57235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:06:54.089 [DEBUG] [Thread-57235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:06:54.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:06:54.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:06:54.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:06:54.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:06:54.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:06:54.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:06:54.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.587546 -999.00  +23.00  13.41     20   -0.80 1 1 1 1 1   888    0 23.84 11.55 ----- 10.9 13.4 284.8 18.2 27.7 -24.5 27.6 -25.0 28.1 -23.4 28.9 -23.0
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.587546
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:06:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:06:48', tmtdew=28.07, humidity=14.83, cloud=0.0, wind=6.23, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:06:03.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:06:54.107 [DEBUG] [Thread-57235] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:06:54.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:06:54.193 [DEBUG] [Thread-57238] [transport.py] [_log()] starting thread (client mode): 0xd0754730
2025-11-17T16:06:54.193 [DEBUG] [Thread-57238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:06:54.212 [DEBUG] [Thread-57238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:06:54.212 [INFO] [Thread-57238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] client lang: <none>
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] server lang: <none>
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] kex follows: False
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] Compression: none
2025-11-17T16:06:54.220 [DEBUG] [Thread-57238] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:06:54.280 [DEBUG] [Thread-57238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:06:54.280 [DEBUG] [Thread-57238] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:06:54.280 [DEBUG] [Thread-57238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:06:54.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:06:54.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:06:54.336 [DEBUG] [Thread-57238] [transport.py] [_log()] userauth is OK
2025-11-17T16:06:54.336 [DEBUG] [Thread-57238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:06:54.336 [DEBUG] [Thread-57238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:06:54.336 [DEBUG] [Thread-57238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:06:54.336 [DEBUG] [Thread-57238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:06:54.351 [INFO] [Thread-57238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:06:54.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:06:54.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:06:54.560 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:54.879 [DEBUG] [Thread-57240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:06:55.254 [DEBUG] [Thread-57238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:06:55.254 [DEBUG] [Thread-57238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:06:55.302 [DEBUG] [Thread-57238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:06:55.302 [DEBUG] [Thread-57238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:06:55.310 [DEBUG] [Thread-57238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:06:55.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:06:55.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:06:55.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:06:55.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:06:55.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:06:55.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:06:55.340 [DEBUG] [Thread-57238] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:07:01.017 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:07.457 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:09.911 [DEBUG] [Thread-57241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:13.888 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:14.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:14.191 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:20.316 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:20.869 [DEBUG] [Thread-57242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:24.939 [DEBUG] [Thread-57243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:25.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:07:25.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:07:25.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
2025-11-17T16:07:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 7, 20), 28.08, 14.83, 0.0, 5.59, 22.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:07:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:07:20
2025-11-17T16:07:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:07:26.304 [DEBUG] [Thread-57244] [transport.py] [_log()] starting thread (client mode): 0xd0757ca0
2025-11-17T16:07:26.304 [DEBUG] [Thread-57244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:07:26.324 [DEBUG] [Thread-57244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:07:26.325 [INFO] [Thread-57244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] client lang: <none>
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] server lang: <none>
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] kex follows: False
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] Compression: none
2025-11-17T16:07:26.328 [DEBUG] [Thread-57244] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:07:26.346 [DEBUG] [Thread-57244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:07:26.346 [DEBUG] [Thread-57244] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:07:26.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:07:26.347 [DEBUG] [Thread-57244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:07:26.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:07:26.349 [DEBUG] [Thread-57244] [transport.py] [_log()] userauth is OK
2025-11-17T16:07:26.349 [DEBUG] [Thread-57244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:07:26.349 [DEBUG] [Thread-57244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:07:26.349 [DEBUG] [Thread-57244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:07:26.349 [DEBUG] [Thread-57244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:07:26.366 [INFO] [Thread-57244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:07:26.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:07:26.739 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:27.352 [DEBUG] [Thread-57244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:07:27.352 [DEBUG] [Thread-57244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:07:27.352 [DEBUG] [Thread-57244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:07:27.394 [DEBUG] [Thread-57244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:07:27.394 [DEBUG] [Thread-57244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:07:27.397 [DEBUG] [Thread-57244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:07:27.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:07:27.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:07:27.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:07:27.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:07:27.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:07:27.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:07:27.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:07:27.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:07:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:07:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.587894 -999.00  +22.90  10.85     20   -0.80 1 1 1 1 1   888    0 23.26 12.35 ----- 8.8 10.8 263.2 15.7 27.6 -24.2 27.5 -23.9 27.9 -23.8 28.6 -23.3
2025-11-17T16:07:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:07:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:07:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.587894
2025-11-17T16:07:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:07:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:07:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:07:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:07:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:07:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:07:20', tmtdew=28.08, humidity=14.83, cloud=0.0, wind=5.59, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:06:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:07:27.423 [DEBUG] [Thread-57244] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:07:27.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:07:27.520 [DEBUG] [Thread-57247] [transport.py] [_log()] starting thread (client mode): 0xd0755db0
2025-11-17T16:07:27.520 [DEBUG] [Thread-57247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:07:27.538 [DEBUG] [Thread-57247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:07:27.538 [INFO] [Thread-57247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:07:27.545 [DEBUG] [Thread-57247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:07:27.545 [DEBUG] [Thread-57247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:07:27.545 [DEBUG] [Thread-57247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:07:27.545 [DEBUG] [Thread-57247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:07:27.545 [DEBUG] [Thread-57247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:07:27.545 [DEBUG] [Thread-57247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:07:27.545 [DEBUG] [Thread-57247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] client lang: <none>
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] server lang: <none>
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] kex follows: False
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] Compression: none
2025-11-17T16:07:27.546 [DEBUG] [Thread-57247] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:07:27.604 [DEBUG] [Thread-57247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:07:27.604 [DEBUG] [Thread-57247] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:07:27.604 [DEBUG] [Thread-57247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:07:27.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:07:27.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:07:27.660 [DEBUG] [Thread-57247] [transport.py] [_log()] userauth is OK
2025-11-17T16:07:27.660 [DEBUG] [Thread-57247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:07:27.660 [DEBUG] [Thread-57247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:07:27.660 [DEBUG] [Thread-57247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:07:27.660 [DEBUG] [Thread-57247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:07:27.677 [INFO] [Thread-57247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:07:27.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:07:27.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:07:28.675 [DEBUG] [Thread-57247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:07:28.675 [DEBUG] [Thread-57247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:07:28.722 [DEBUG] [Thread-57247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:07:28.722 [DEBUG] [Thread-57247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:07:28.731 [DEBUG] [Thread-57247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:07:28.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:07:28.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:07:28.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:07:28.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:07:28.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:07:28.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:07:28.768 [DEBUG] [Thread-57247] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:07:33.151 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:39.561 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:39.967 [DEBUG] [Thread-57249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:45.994 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:52.425 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:52.724 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:54.134 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:54.546 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:54.927 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:55.009 [DEBUG] [Thread-57250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:55.357 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:55.754 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:56.167 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:56.582 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:56.994 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:57.478 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:57.862 [DEBUG] [Thread-57149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:07:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:07:58.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:07:58.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:07:59.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 7, 52), 27.81, 15.35, 0.0, 11.38, 23.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:07:59.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:07:52
2025-11-17T16:07:59.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:07:59.731 [DEBUG] [Thread-57251] [transport.py] [_log()] starting thread (client mode): 0xd07544f0
2025-11-17T16:07:59.731 [DEBUG] [Thread-57251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:07:59.750 [DEBUG] [Thread-57251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:07:59.750 [INFO] [Thread-57251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] client lang: <none>
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] server lang: <none>
2025-11-17T16:07:59.753 [DEBUG] [Thread-57251] [transport.py] [_log()] kex follows: False
2025-11-17T16:07:59.754 [DEBUG] [Thread-57251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:07:59.754 [DEBUG] [Thread-57251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:07:59.754 [DEBUG] [Thread-57251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:07:59.754 [DEBUG] [Thread-57251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:07:59.754 [DEBUG] [Thread-57251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:07:59.754 [DEBUG] [Thread-57251] [transport.py] [_log()] Compression: none
2025-11-17T16:07:59.754 [DEBUG] [Thread-57251] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:07:59.771 [DEBUG] [Thread-57251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:07:59.771 [DEBUG] [Thread-57251] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:07:59.772 [DEBUG] [Thread-57251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:07:59.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:07:59.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:07:59.774 [DEBUG] [Thread-57251] [transport.py] [_log()] userauth is OK
2025-11-17T16:07:59.774 [DEBUG] [Thread-57251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:07:59.774 [DEBUG] [Thread-57251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:07:59.774 [DEBUG] [Thread-57251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:07:59.774 [DEBUG] [Thread-57251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:07:59.792 [INFO] [Thread-57251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:07:59.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:08:00.589 [DEBUG] [Thread-57251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:08:00.589 [DEBUG] [Thread-57251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:08:00.590 [DEBUG] [Thread-57251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:08:00.630 [DEBUG] [Thread-57251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:08:00.630 [DEBUG] [Thread-57251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:08:00.632 [DEBUG] [Thread-57251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:08:00.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:08:00.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:08:00.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:08:00.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:08:00.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:08:00.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:08:00.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:08:00.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:08:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:08:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.588241 -999.00  +22.70   5.22     20   -0.80 1 2 1 1 1   888    0 23.36 12.24 ----- 4.5 5.2 232.6 10.2 27.6 -23.3 27.5 -22.8 27.9 -20.8 28.4 -22.2
2025-11-17T16:08:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:08:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:08:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.588241
2025-11-17T16:08:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:08:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:08:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:08:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:08:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:08:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:07:52', tmtdew=27.81, humidity=15.35, cloud=0.0, wind=11.38, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:07:04.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:08:00.655 [DEBUG] [Thread-57251] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:08:00.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:08:00.751 [DEBUG] [Thread-57254] [transport.py] [_log()] starting thread (client mode): 0xd0756050
2025-11-17T16:08:00.752 [DEBUG] [Thread-57254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:08:00.767 [DEBUG] [Thread-57254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:08:00.767 [INFO] [Thread-57254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] client lang: <none>
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] server lang: <none>
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] kex follows: False
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:08:00.775 [DEBUG] [Thread-57254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:08:00.776 [DEBUG] [Thread-57254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:08:00.776 [DEBUG] [Thread-57254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:08:00.776 [DEBUG] [Thread-57254] [transport.py] [_log()] Compression: none
2025-11-17T16:08:00.776 [DEBUG] [Thread-57254] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:08:00.832 [DEBUG] [Thread-57254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:08:00.832 [DEBUG] [Thread-57254] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:08:00.833 [DEBUG] [Thread-57254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:08:00.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:08:00.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:08:00.888 [DEBUG] [Thread-57254] [transport.py] [_log()] userauth is OK
2025-11-17T16:08:00.888 [DEBUG] [Thread-57254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:08:00.888 [DEBUG] [Thread-57254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:08:00.889 [DEBUG] [Thread-57254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:08:00.889 [DEBUG] [Thread-57254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:08:00.909 [INFO] [Thread-57254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:08:00.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:08:00.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:08:01.785 [DEBUG] [Thread-57254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:08:01.785 [DEBUG] [Thread-57254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:08:01.833 [DEBUG] [Thread-57254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:08:01.833 [DEBUG] [Thread-57254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:08:01.842 [DEBUG] [Thread-57254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:08:01.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:08:01.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:08:01.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:08:01.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:08:01.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:08:01.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:08:01.874 [DEBUG] [Thread-57254] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:08:10.036 [DEBUG] [Thread-57256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:08:14.331 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:08:14.332 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:08:20.921 [DEBUG] [Thread-57257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:08:25.075 [DEBUG] [Thread-57258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:08:31.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:08:31.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:08:31.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:08:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 8, 24), 27.93, 15.23, 0.0, 12.04, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:08:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:08:24
2025-11-17T16:08:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:08:32.818 [DEBUG] [Thread-57259] [transport.py] [_log()] starting thread (client mode): 0xd0756170
2025-11-17T16:08:32.819 [DEBUG] [Thread-57259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:08:32.839 [DEBUG] [Thread-57259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:08:32.839 [INFO] [Thread-57259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] client lang: <none>
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] server lang: <none>
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] kex follows: False
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] Compression: none
2025-11-17T16:08:32.843 [DEBUG] [Thread-57259] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:08:32.859 [DEBUG] [Thread-57259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:08:32.860 [DEBUG] [Thread-57259] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:08:32.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:08:32.861 [DEBUG] [Thread-57259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:08:32.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:08:32.862 [DEBUG] [Thread-57259] [transport.py] [_log()] userauth is OK
2025-11-17T16:08:32.863 [DEBUG] [Thread-57259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:08:32.863 [DEBUG] [Thread-57259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:08:32.863 [DEBUG] [Thread-57259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:08:32.863 [DEBUG] [Thread-57259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:08:32.887 [INFO] [Thread-57259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:08:32.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:08:33.529 [DEBUG] [Thread-57259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:08:33.529 [DEBUG] [Thread-57259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:08:33.529 [DEBUG] [Thread-57259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:08:33.570 [DEBUG] [Thread-57259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:08:33.571 [DEBUG] [Thread-57259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:08:33.574 [DEBUG] [Thread-57259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:08:33.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:08:33.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:08:33.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:08:33.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:08:33.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:08:33.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:08:33.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:08:33.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:08:33.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:08:33.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.588588 -999.00  +22.60  12.41     20   -0.80 1 2 1 1 1   888    0 23.47 11.47 ----- 19.0 12.4 251.4 15.9 27.9 -21.6 27.7 -22.7 28.2 -21.4 28.7 -19.9
2025-11-17T16:08:33.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:08:33.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:08:33.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.588588
2025-11-17T16:08:33.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:08:33.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:08:33.599 [DEBUG] [Thread-57259] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:08:33.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:08:33.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:08:33.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:08:33.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:08:24', tmtdew=27.93, humidity=15.23, cloud=0.0, wind=12.04, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:07:34.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:08:33.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:08:33.694 [DEBUG] [Thread-57262] [transport.py] [_log()] starting thread (client mode): 0xd0787dc0
2025-11-17T16:08:33.694 [DEBUG] [Thread-57262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:08:33.709 [DEBUG] [Thread-57262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:08:33.709 [INFO] [Thread-57262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:08:33.716 [DEBUG] [Thread-57262] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:08:33.716 [DEBUG] [Thread-57262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] client lang: <none>
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] server lang: <none>
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] kex follows: False
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] Compression: none
2025-11-17T16:08:33.717 [DEBUG] [Thread-57262] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:08:33.780 [DEBUG] [Thread-57262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:08:33.781 [DEBUG] [Thread-57262] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:08:33.781 [DEBUG] [Thread-57262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:08:33.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:08:33.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:08:33.836 [DEBUG] [Thread-57262] [transport.py] [_log()] userauth is OK
2025-11-17T16:08:33.837 [DEBUG] [Thread-57262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:08:33.837 [DEBUG] [Thread-57262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:08:33.837 [DEBUG] [Thread-57262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:08:33.837 [DEBUG] [Thread-57262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:08:33.855 [INFO] [Thread-57262] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:08:33.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:08:33.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:08:34.727 [DEBUG] [Thread-57262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:08:34.728 [DEBUG] [Thread-57262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:08:34.778 [DEBUG] [Thread-57262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:08:34.778 [DEBUG] [Thread-57262] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:08:34.787 [DEBUG] [Thread-57262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:08:34.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:08:34.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')
2025-11-17T16:08:34.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:08:34.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:08:34.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:08:34.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:08:34.824 [DEBUG] [Thread-57262] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:08:40.100 [DEBUG] [Thread-57264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:08:55.141 [DEBUG] [Thread-57265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:09:04.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:09:04.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:09:04.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:09:05.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 8, 56), 27.95, 15.27, 0.0, 15.41, 22.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:09:05.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:08:56
2025-11-17T16:09:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:09:05.790 [DEBUG] [Thread-57266] [transport.py] [_log()] starting thread (client mode): 0xd0787e80
2025-11-17T16:09:05.790 [DEBUG] [Thread-57266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:09:05.809 [DEBUG] [Thread-57266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:09:05.809 [INFO] [Thread-57266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:09:05.812 [DEBUG] [Thread-57266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:09:05.812 [DEBUG] [Thread-57266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:09:05.812 [DEBUG] [Thread-57266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:09:05.812 [DEBUG] [Thread-57266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] client lang: <none>
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] server lang: <none>
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] kex follows: False
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] Compression: none
2025-11-17T16:09:05.813 [DEBUG] [Thread-57266] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:09:05.831 [DEBUG] [Thread-57266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:09:05.832 [DEBUG] [Thread-57266] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:09:05.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:09:05.832 [DEBUG] [Thread-57266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:09:05.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:09:05.834 [DEBUG] [Thread-57266] [transport.py] [_log()] userauth is OK
2025-11-17T16:09:05.834 [DEBUG] [Thread-57266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:09:05.834 [DEBUG] [Thread-57266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:09:05.835 [DEBUG] [Thread-57266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:09:05.835 [DEBUG] [Thread-57266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:09:05.852 [INFO] [Thread-57266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:09:05.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:09:06.577 [DEBUG] [Thread-57266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:09:06.577 [DEBUG] [Thread-57266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:09:06.578 [DEBUG] [Thread-57266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:09:06.618 [DEBUG] [Thread-57266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:09:06.619 [DEBUG] [Thread-57266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:09:06.621 [DEBUG] [Thread-57266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:09:06.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:09:06.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:09:06.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:09:06.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:09:06.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:09:06.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:09:06.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:09:06.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:09:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:09:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.588935 -999.00  +22.70  15.79     21   -0.50 1 1 1 1 1   888    0 23.79 9.92 ----- 15.5 15.8 259.2 21.1 27.6 -23.3 27.5 -23.7 27.9 -22.4 28.3 -23.5
2025-11-17T16:09:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:09:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:09:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.588935
2025-11-17T16:09:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:09:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:09:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:09:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:09:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:09:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:08:56', tmtdew=27.95, humidity=15.27, cloud=0.0, wind=15.41, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:08:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:09:06.650 [DEBUG] [Thread-57266] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:09:06.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:09:06.745 [DEBUG] [Thread-57269] [transport.py] [_log()] starting thread (client mode): 0xd0757f40
2025-11-17T16:09:06.745 [DEBUG] [Thread-57269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:09:06.760 [DEBUG] [Thread-57269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:09:06.761 [INFO] [Thread-57269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:09:06.768 [DEBUG] [Thread-57269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:09:06.768 [DEBUG] [Thread-57269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:09:06.768 [DEBUG] [Thread-57269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] client lang: <none>
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] server lang: <none>
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] kex follows: False
2025-11-17T16:09:06.769 [DEBUG] [Thread-57269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:09:06.770 [DEBUG] [Thread-57269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:09:06.770 [DEBUG] [Thread-57269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:09:06.770 [DEBUG] [Thread-57269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:09:06.770 [DEBUG] [Thread-57269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:09:06.770 [DEBUG] [Thread-57269] [transport.py] [_log()] Compression: none
2025-11-17T16:09:06.770 [DEBUG] [Thread-57269] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:09:06.827 [DEBUG] [Thread-57269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:09:06.828 [DEBUG] [Thread-57269] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:09:06.828 [DEBUG] [Thread-57269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:09:06.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:09:06.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:09:06.887 [DEBUG] [Thread-57269] [transport.py] [_log()] userauth is OK
2025-11-17T16:09:06.888 [DEBUG] [Thread-57269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:09:06.888 [DEBUG] [Thread-57269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:09:06.888 [DEBUG] [Thread-57269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:09:06.888 [DEBUG] [Thread-57269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:09:06.911 [INFO] [Thread-57269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:09:06.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:09:06.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:09:07.859 [DEBUG] [Thread-57269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:09:07.860 [DEBUG] [Thread-57269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:09:07.907 [DEBUG] [Thread-57269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:09:07.907 [DEBUG] [Thread-57269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:09:07.915 [DEBUG] [Thread-57269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:09:07.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:09:07.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:09:07.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:09:07.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:09:07.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:09:07.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:09:07.947 [DEBUG] [Thread-57269] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:09:10.172 [DEBUG] [Thread-57271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:09:14.473 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:09:14.474 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:09:20.957 [DEBUG] [Thread-57272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:09:25.212 [DEBUG] [Thread-57273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:09:37.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:09:37.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:09:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:09:38.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 9, 28), 27.89, 15.31, 0.0, 17.61, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:09:38.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:09:28
2025-11-17T16:09:38.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:09:38.891 [DEBUG] [Thread-57274] [transport.py] [_log()] starting thread (client mode): 0xd0754880
2025-11-17T16:09:38.891 [DEBUG] [Thread-57274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:09:38.910 [DEBUG] [Thread-57274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:09:38.911 [INFO] [Thread-57274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:09:38.913 [DEBUG] [Thread-57274] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:09:38.913 [DEBUG] [Thread-57274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:09:38.913 [DEBUG] [Thread-57274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:09:38.913 [DEBUG] [Thread-57274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:09:38.913 [DEBUG] [Thread-57274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:09:38.913 [DEBUG] [Thread-57274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:09:38.913 [DEBUG] [Thread-57274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:09:38.913 [DEBUG] [Thread-57274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] client lang: <none>
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] server lang: <none>
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] kex follows: False
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] Compression: none
2025-11-17T16:09:38.914 [DEBUG] [Thread-57274] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:09:38.933 [DEBUG] [Thread-57274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:09:38.934 [DEBUG] [Thread-57274] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:09:38.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:09:38.935 [DEBUG] [Thread-57274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:09:38.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:09:38.937 [DEBUG] [Thread-57274] [transport.py] [_log()] userauth is OK
2025-11-17T16:09:38.937 [DEBUG] [Thread-57274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:09:38.938 [DEBUG] [Thread-57274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:09:38.938 [DEBUG] [Thread-57274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:09:38.938 [DEBUG] [Thread-57274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:09:38.962 [INFO] [Thread-57274] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:09:38.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:09:39.601 [DEBUG] [Thread-57274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:09:39.601 [DEBUG] [Thread-57274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:09:39.602 [DEBUG] [Thread-57274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:09:39.643 [DEBUG] [Thread-57274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:09:39.643 [DEBUG] [Thread-57274] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:09:39.646 [DEBUG] [Thread-57274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:09:39.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:09:39.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:09:39.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:09:39.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:09:39.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:09:39.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:09:39.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:09:39.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:09:39.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:09:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.589282 -999.00  +22.60  19.78     21   -0.70 1 2 1 1 1   888    0 23.59 8.15 ----- 23.2 19.8 243.0 27.3 27.5 -23.8 27.3 -23.5 27.6 -22.3 28.1 -23.5
2025-11-17T16:09:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:09:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:09:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.589282
2025-11-17T16:09:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:09:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:09:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:09:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:09:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:09:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:09:28', tmtdew=27.89, humidity=15.31, cloud=0.0, wind=17.61, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:08:33.965', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:09:39.674 [DEBUG] [Thread-57274] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:09:39.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:09:39.771 [DEBUG] [Thread-57277] [transport.py] [_log()] starting thread (client mode): 0xd0723c10
2025-11-17T16:09:39.771 [DEBUG] [Thread-57277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:09:39.788 [DEBUG] [Thread-57277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:09:39.788 [INFO] [Thread-57277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:09:39.796 [DEBUG] [Thread-57277] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:09:39.796 [DEBUG] [Thread-57277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] client lang: <none>
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] server lang: <none>
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] kex follows: False
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:09:39.797 [DEBUG] [Thread-57277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:09:39.798 [DEBUG] [Thread-57277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:09:39.798 [DEBUG] [Thread-57277] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:09:39.798 [DEBUG] [Thread-57277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:09:39.798 [DEBUG] [Thread-57277] [transport.py] [_log()] Compression: none
2025-11-17T16:09:39.798 [DEBUG] [Thread-57277] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:09:39.856 [DEBUG] [Thread-57277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:09:39.857 [DEBUG] [Thread-57277] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:09:39.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:09:39.858 [DEBUG] [Thread-57277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:09:39.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:09:39.912 [DEBUG] [Thread-57277] [transport.py] [_log()] userauth is OK
2025-11-17T16:09:39.912 [DEBUG] [Thread-57277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:09:39.912 [DEBUG] [Thread-57277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:09:39.912 [DEBUG] [Thread-57277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:09:39.912 [DEBUG] [Thread-57277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:09:39.933 [INFO] [Thread-57277] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:09:39.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:09:39.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:09:40.242 [DEBUG] [Thread-57279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:09:40.820 [DEBUG] [Thread-57277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:09:40.820 [DEBUG] [Thread-57277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:09:40.867 [DEBUG] [Thread-57277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:09:40.867 [DEBUG] [Thread-57277] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:09:40.877 [DEBUG] [Thread-57277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:09:40.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:09:40.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:09:40.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:09:40.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:09:40.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:09:40.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:09:40.912 [DEBUG] [Thread-57277] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:09:55.287 [DEBUG] [Thread-57280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:10:10.318 [DEBUG] [Thread-57281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:10:10.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:10:10.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:10:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:10:11.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 10), 27.75, 15.35, 0.0, 15.49, 23.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:10:11.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:10:00
2025-11-17T16:10:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:10:11.862 [DEBUG] [Thread-57282] [transport.py] [_log()] starting thread (client mode): 0xd0721120
2025-11-17T16:10:11.862 [DEBUG] [Thread-57282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:10:11.883 [DEBUG] [Thread-57282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:10:11.883 [INFO] [Thread-57282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:10:11.886 [DEBUG] [Thread-57282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:10:11.886 [DEBUG] [Thread-57282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:10:11.886 [DEBUG] [Thread-57282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] client lang: <none>
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] server lang: <none>
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] kex follows: False
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] Compression: none
2025-11-17T16:10:11.887 [DEBUG] [Thread-57282] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:10:11.903 [DEBUG] [Thread-57282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:10:11.903 [DEBUG] [Thread-57282] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:10:11.904 [DEBUG] [Thread-57282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:10:11.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:10:11.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:10:11.906 [DEBUG] [Thread-57282] [transport.py] [_log()] userauth is OK
2025-11-17T16:10:11.906 [DEBUG] [Thread-57282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:10:11.906 [DEBUG] [Thread-57282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:10:11.906 [DEBUG] [Thread-57282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:10:11.906 [DEBUG] [Thread-57282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:10:11.930 [INFO] [Thread-57282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:10:11.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:10:12.823 [DEBUG] [Thread-57282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:10:12.823 [DEBUG] [Thread-57282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:10:12.824 [DEBUG] [Thread-57282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:10:12.864 [DEBUG] [Thread-57282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:10:12.864 [DEBUG] [Thread-57282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:10:12.867 [DEBUG] [Thread-57282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:10:12.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:10:12.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:10:12.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:10:12.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:10:12.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:10:12.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:10:12.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:10:12.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:10:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:10:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.589977 -999.00  +22.80  19.92     21   -0.50 1 1 1 1 1   888    0 24.11 6.07 ----- 21.6 19.9 271.4 21.3 27.2 -21.8 27.1 -22.5 27.2 -26.0 27.6 -21.4
2025-11-17T16:10:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:10:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:10:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.589977
2025-11-17T16:10:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:10:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:10:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:10:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:10:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:10:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:10:00', tmtdew=27.75, humidity=15.35, cloud=0.0, wind=15.49, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:09:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:10:12.914 [DEBUG] [Thread-57282] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:10:12.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:10:13.013 [DEBUG] [Thread-57285] [transport.py] [_log()] starting thread (client mode): 0xd07556c0
2025-11-17T16:10:13.013 [DEBUG] [Thread-57285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:10:13.029 [DEBUG] [Thread-57285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:10:13.029 [INFO] [Thread-57285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:10:13.037 [DEBUG] [Thread-57285] [transport.py] [_log()] client lang: <none>
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] server lang: <none>
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] kex follows: False
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] Compression: none
2025-11-17T16:10:13.038 [DEBUG] [Thread-57285] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:10:13.095 [DEBUG] [Thread-57285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:10:13.095 [DEBUG] [Thread-57285] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:10:13.096 [DEBUG] [Thread-57285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:10:13.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:10:13.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:10:13.151 [DEBUG] [Thread-57285] [transport.py] [_log()] userauth is OK
2025-11-17T16:10:13.152 [DEBUG] [Thread-57285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:10:13.152 [DEBUG] [Thread-57285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:10:13.152 [DEBUG] [Thread-57285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:10:13.152 [DEBUG] [Thread-57285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:10:13.171 [INFO] [Thread-57285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:10:13.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:10:13.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:10:14.015 [DEBUG] [Thread-57285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:10:14.016 [DEBUG] [Thread-57285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:10:14.063 [DEBUG] [Thread-57285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:10:14.063 [DEBUG] [Thread-57285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:10:14.073 [DEBUG] [Thread-57285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:10:14.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:10:14.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:10:14.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:10:14.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:10:14.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:10:14.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:10:14.107 [DEBUG] [Thread-57285] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:10:14.615 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:10:14.616 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:10:21.014 [DEBUG] [Thread-57287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:10:25.345 [DEBUG] [Thread-57288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:10:40.384 [DEBUG] [Thread-57289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:10:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:10:44.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:10:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:10:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 10, 32), 27.92, 15.22, 0.0, 17.82, 23.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:10:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:10:32
2025-11-17T16:10:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:10:45.115 [DEBUG] [Thread-57290] [transport.py] [_log()] starting thread (client mode): 0xd0785360
2025-11-17T16:10:45.115 [DEBUG] [Thread-57290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:10:45.134 [DEBUG] [Thread-57290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:10:45.134 [INFO] [Thread-57290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] client lang: <none>
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] server lang: <none>
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] kex follows: False
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:10:45.137 [DEBUG] [Thread-57290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:10:45.138 [DEBUG] [Thread-57290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:10:45.138 [DEBUG] [Thread-57290] [transport.py] [_log()] Compression: none
2025-11-17T16:10:45.138 [DEBUG] [Thread-57290] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:10:45.154 [DEBUG] [Thread-57290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:10:45.154 [DEBUG] [Thread-57290] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:10:45.154 [DEBUG] [Thread-57290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:10:45.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:10:45.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:10:45.155 [DEBUG] [Thread-57290] [transport.py] [_log()] userauth is OK
2025-11-17T16:10:45.155 [DEBUG] [Thread-57290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:10:45.155 [DEBUG] [Thread-57290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:10:45.155 [DEBUG] [Thread-57290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:10:45.155 [DEBUG] [Thread-57290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:10:45.173 [INFO] [Thread-57290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:10:45.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:10:45.799 [DEBUG] [Thread-57290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:10:45.799 [DEBUG] [Thread-57290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:10:45.799 [DEBUG] [Thread-57290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:10:45.840 [DEBUG] [Thread-57290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:10:45.840 [DEBUG] [Thread-57290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:10:45.842 [DEBUG] [Thread-57290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:10:45.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:10:45.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:10:45.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:10:45.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:10:45.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:10:45.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:10:45.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.590330 -999.00  +22.50  16.52     21   -0.60 1 2 1 1 1   888    0 23.86 4.79 ----- 17.1 16.5 271.0 22.2 26.9 -23.1 26.9 -21.3 26.8 -19.7 27.4 -21.6
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.590330
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:10:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:10:32', tmtdew=27.92, humidity=15.22, cloud=0.0, wind=17.82, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:10:04.512', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:10:45.862 [DEBUG] [Thread-57290] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:10:45.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:10:45.953 [DEBUG] [Thread-57293] [transport.py] [_log()] starting thread (client mode): 0xd0785f30
2025-11-17T16:10:45.953 [DEBUG] [Thread-57293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:10:45.969 [DEBUG] [Thread-57293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:10:45.969 [INFO] [Thread-57293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] client lang: <none>
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] server lang: <none>
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] kex follows: False
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] Compression: none
2025-11-17T16:10:45.977 [DEBUG] [Thread-57293] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:10:46.037 [DEBUG] [Thread-57293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:10:46.037 [DEBUG] [Thread-57293] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:10:46.037 [DEBUG] [Thread-57293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:10:46.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:10:46.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:10:46.095 [DEBUG] [Thread-57293] [transport.py] [_log()] userauth is OK
2025-11-17T16:10:46.095 [DEBUG] [Thread-57293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:10:46.095 [DEBUG] [Thread-57293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:10:46.095 [DEBUG] [Thread-57293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:10:46.095 [DEBUG] [Thread-57293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:10:46.110 [INFO] [Thread-57293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:10:46.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:10:46.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:10:47.003 [DEBUG] [Thread-57293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:10:47.003 [DEBUG] [Thread-57293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:10:47.052 [DEBUG] [Thread-57293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:10:47.052 [DEBUG] [Thread-57293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:10:47.061 [DEBUG] [Thread-57293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:10:47.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:10:47.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:10:47.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:10:47.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:10:47.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:10:47.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:10:47.092 [DEBUG] [Thread-57293] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:10:55.414 [DEBUG] [Thread-57295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:11:10.453 [DEBUG] [Thread-57296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:11:14.759 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:11:14.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:11:17.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:11:17.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:11:17.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:11:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 11, 4), 27.84, 15.28, 0.0, 15.53, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:11:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:11:04
2025-11-17T16:11:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:11:18.057 [DEBUG] [Thread-57297] [transport.py] [_log()] starting thread (client mode): 0xd07210f0
2025-11-17T16:11:18.057 [DEBUG] [Thread-57297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:11:18.070 [DEBUG] [Thread-57297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:11:18.070 [INFO] [Thread-57297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] client lang: <none>
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] server lang: <none>
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] kex follows: False
2025-11-17T16:11:18.072 [DEBUG] [Thread-57297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:11:18.073 [DEBUG] [Thread-57297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:11:18.073 [DEBUG] [Thread-57297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:11:18.073 [DEBUG] [Thread-57297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:11:18.073 [DEBUG] [Thread-57297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:11:18.073 [DEBUG] [Thread-57297] [transport.py] [_log()] Compression: none
2025-11-17T16:11:18.073 [DEBUG] [Thread-57297] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:11:18.084 [DEBUG] [Thread-57297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:11:18.085 [DEBUG] [Thread-57297] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:11:18.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:11:18.086 [DEBUG] [Thread-57297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:11:18.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:11:18.088 [DEBUG] [Thread-57297] [transport.py] [_log()] userauth is OK
2025-11-17T16:11:18.088 [DEBUG] [Thread-57297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:11:18.088 [DEBUG] [Thread-57297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:11:18.088 [DEBUG] [Thread-57297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:11:18.088 [DEBUG] [Thread-57297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:11:18.108 [INFO] [Thread-57297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:11:18.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:11:18.660 [DEBUG] [Thread-57297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:11:18.660 [DEBUG] [Thread-57297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:11:18.660 [DEBUG] [Thread-57297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:11:18.701 [DEBUG] [Thread-57297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:11:18.701 [DEBUG] [Thread-57297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:11:18.704 [DEBUG] [Thread-57297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:11:18.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:11:18.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:11:18.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:11:18.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:11:18.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:11:18.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:11:18.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:11:18.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:11:18.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:11:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.590671 -999.00  +22.40  11.23     21   -0.60 1 2 1 1 1   888    0 23.45 3.94 ----- 12.6 11.2 270.4 17.0 27.2 -19.4 27.2 -19.8 27.3 -21.0 27.6 -17.4
2025-11-17T16:11:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:11:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:11:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.590671
2025-11-17T16:11:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:11:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:11:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:11:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:11:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:11:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:11:04', tmtdew=27.84, humidity=15.28, cloud=0.0, wind=15.53, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:10:33.974', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:11:18.736 [DEBUG] [Thread-57297] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:11:18.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:11:18.832 [DEBUG] [Thread-57300] [transport.py] [_log()] starting thread (client mode): 0xd078e410
2025-11-17T16:11:18.833 [DEBUG] [Thread-57300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:11:18.846 [DEBUG] [Thread-57300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:11:18.846 [INFO] [Thread-57300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] client lang: <none>
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] server lang: <none>
2025-11-17T16:11:18.854 [DEBUG] [Thread-57300] [transport.py] [_log()] kex follows: False
2025-11-17T16:11:18.855 [DEBUG] [Thread-57300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:11:18.855 [DEBUG] [Thread-57300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:11:18.855 [DEBUG] [Thread-57300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:11:18.855 [DEBUG] [Thread-57300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:11:18.855 [DEBUG] [Thread-57300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:11:18.855 [DEBUG] [Thread-57300] [transport.py] [_log()] Compression: none
2025-11-17T16:11:18.855 [DEBUG] [Thread-57300] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:11:18.912 [DEBUG] [Thread-57300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:11:18.913 [DEBUG] [Thread-57300] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:11:18.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:11:18.914 [DEBUG] [Thread-57300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:11:18.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:11:18.972 [DEBUG] [Thread-57300] [transport.py] [_log()] userauth is OK
2025-11-17T16:11:18.972 [DEBUG] [Thread-57300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:11:18.972 [DEBUG] [Thread-57300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:11:18.972 [DEBUG] [Thread-57300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:11:18.973 [DEBUG] [Thread-57300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:11:18.992 [INFO] [Thread-57300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:11:18.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:11:18.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:11:19.892 [DEBUG] [Thread-57300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:11:19.892 [DEBUG] [Thread-57300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:11:19.939 [DEBUG] [Thread-57300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:11:19.939 [DEBUG] [Thread-57300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:11:19.949 [DEBUG] [Thread-57300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:11:19.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:11:19.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:11:19.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:11:19.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:11:19.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:11:19.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:11:19.984 [DEBUG] [Thread-57300] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:11:21.071 [DEBUG] [Thread-57302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:11:25.482 [DEBUG] [Thread-57303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:11:40.513 [DEBUG] [Thread-57304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:11:50.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:11:50.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:11:50.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:11:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 11, 36), 27.89, 15.38, 0.0, 15.97, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:11:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:11:36
2025-11-17T16:11:50.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:11:50.941 [DEBUG] [Thread-57305] [transport.py] [_log()] starting thread (client mode): 0xd0785240
2025-11-17T16:11:50.941 [DEBUG] [Thread-57305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:11:50.963 [DEBUG] [Thread-57305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:11:50.964 [INFO] [Thread-57305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:11:50.965 [DEBUG] [Thread-57305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:11:50.965 [DEBUG] [Thread-57305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:11:50.965 [DEBUG] [Thread-57305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:11:50.965 [DEBUG] [Thread-57305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] client lang: <none>
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] server lang: <none>
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] kex follows: False
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:11:50.966 [DEBUG] [Thread-57305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:11:50.967 [DEBUG] [Thread-57305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:11:50.967 [DEBUG] [Thread-57305] [transport.py] [_log()] Compression: none
2025-11-17T16:11:50.967 [DEBUG] [Thread-57305] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:11:50.975 [DEBUG] [Thread-57305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:11:50.976 [DEBUG] [Thread-57305] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:11:50.976 [DEBUG] [Thread-57305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:11:50.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:11:50.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:11:50.978 [DEBUG] [Thread-57305] [transport.py] [_log()] userauth is OK
2025-11-17T16:11:50.978 [DEBUG] [Thread-57305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:11:50.978 [DEBUG] [Thread-57305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:11:50.978 [DEBUG] [Thread-57305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:11:50.978 [DEBUG] [Thread-57305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:11:50.996 [INFO] [Thread-57305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:11:50.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:11:51.642 [DEBUG] [Thread-57305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:11:51.643 [DEBUG] [Thread-57305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:11:51.643 [DEBUG] [Thread-57305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:11:51.683 [DEBUG] [Thread-57305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:11:51.683 [DEBUG] [Thread-57305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:11:51.686 [DEBUG] [Thread-57305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:11:51.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:11:51.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:11:51.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:11:51.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:11:51.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:11:51.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:11:51.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:11:51.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:11:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:11:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.591019 -999.00  +22.50  11.90     21   -0.50 1 2 1 1 1   888    0 23.20 2.67 ----- 13.0 11.9 285.0 16.1 27.4 -19.6 27.1 -21.1 27.3 -20.1 27.9 -18.1
2025-11-17T16:11:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:11:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:11:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.591019
2025-11-17T16:11:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:11:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:11:51.709 [DEBUG] [Thread-57305] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:11:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:11:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:11:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:11:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:11:36', tmtdew=27.89, humidity=15.38, cloud=0.0, wind=15.97, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:11:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:11:51.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:11:51.809 [DEBUG] [Thread-57308] [transport.py] [_log()] starting thread (client mode): 0xd0721e40
2025-11-17T16:11:51.809 [DEBUG] [Thread-57308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:11:51.825 [DEBUG] [Thread-57308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:11:51.825 [INFO] [Thread-57308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:11:51.833 [DEBUG] [Thread-57308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:11:51.833 [DEBUG] [Thread-57308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:11:51.833 [DEBUG] [Thread-57308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:11:51.833 [DEBUG] [Thread-57308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:11:51.833 [DEBUG] [Thread-57308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:11:51.833 [DEBUG] [Thread-57308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] client lang: <none>
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] server lang: <none>
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] kex follows: False
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:11:51.834 [DEBUG] [Thread-57308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:11:51.835 [DEBUG] [Thread-57308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:11:51.835 [DEBUG] [Thread-57308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:11:51.835 [DEBUG] [Thread-57308] [transport.py] [_log()] Compression: none
2025-11-17T16:11:51.835 [DEBUG] [Thread-57308] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:11:51.891 [DEBUG] [Thread-57308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:11:51.892 [DEBUG] [Thread-57308] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:11:51.892 [DEBUG] [Thread-57308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:11:51.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:11:51.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:11:51.951 [DEBUG] [Thread-57308] [transport.py] [_log()] userauth is OK
2025-11-17T16:11:51.951 [DEBUG] [Thread-57308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:11:51.951 [DEBUG] [Thread-57308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:11:51.951 [DEBUG] [Thread-57308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:11:51.951 [DEBUG] [Thread-57308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:11:51.969 [INFO] [Thread-57308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:11:51.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:11:51.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:11:52.910 [DEBUG] [Thread-57308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:11:52.910 [DEBUG] [Thread-57308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:11:52.958 [DEBUG] [Thread-57308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:11:52.958 [DEBUG] [Thread-57308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:11:52.966 [DEBUG] [Thread-57308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:11:52.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:11:52.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:11:52.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:11:52.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:11:52.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:11:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:11:53.000 [DEBUG] [Thread-57308] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:11:55.545 [DEBUG] [Thread-57310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:12:10.582 [DEBUG] [Thread-57311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:12:14.901 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:12:14.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:12:21.124 [DEBUG] [Thread-57312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:12:23.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:12:23.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:12:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:12:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 12, 8), 27.75, 15.5, 0.0, 15.4, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:12:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:12:08
2025-11-17T16:12:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:12:23.947 [DEBUG] [Thread-57313] [transport.py] [_log()] starting thread (client mode): 0xd07212a0
2025-11-17T16:12:23.948 [DEBUG] [Thread-57313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:12:23.968 [DEBUG] [Thread-57313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:12:23.969 [INFO] [Thread-57313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:12:23.970 [DEBUG] [Thread-57313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] client lang: <none>
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] server lang: <none>
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] kex follows: False
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] Compression: none
2025-11-17T16:12:23.971 [DEBUG] [Thread-57313] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:12:23.979 [DEBUG] [Thread-57313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:12:23.980 [DEBUG] [Thread-57313] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:12:23.980 [DEBUG] [Thread-57313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:12:23.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:12:23.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:12:23.982 [DEBUG] [Thread-57313] [transport.py] [_log()] userauth is OK
2025-11-17T16:12:23.982 [DEBUG] [Thread-57313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:12:23.982 [DEBUG] [Thread-57313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:12:23.982 [DEBUG] [Thread-57313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:12:23.982 [DEBUG] [Thread-57313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:12:24.006 [INFO] [Thread-57313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:12:24.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:12:24.588 [DEBUG] [Thread-57313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:12:24.588 [DEBUG] [Thread-57313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:12:24.588 [DEBUG] [Thread-57313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:12:24.628 [DEBUG] [Thread-57313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:12:24.628 [DEBUG] [Thread-57313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:12:24.631 [DEBUG] [Thread-57313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:12:24.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:12:24.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:12:24.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:12:24.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:12:24.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:12:24.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:12:24.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:12:24.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:12:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:12:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.591366 -999.00  +22.80  15.60     21   -0.50 1 2 1 1 1   888    0 23.05 1.98 ----- 16.0 15.6 270.8 18.6 27.2 -20.0 27.1 -21.4 27.0 -23.1 27.6 -19.3
2025-11-17T16:12:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:12:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:12:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.591366
2025-11-17T16:12:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:12:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:12:24.655 [DEBUG] [Thread-57313] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:12:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:12:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:12:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:12:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:12:08', tmtdew=27.75, humidity=15.5, cloud=0.0, wind=15.4, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:11:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:12:24.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:12:24.754 [DEBUG] [Thread-57316] [transport.py] [_log()] starting thread (client mode): 0xd070eb60
2025-11-17T16:12:24.754 [DEBUG] [Thread-57316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:12:24.769 [DEBUG] [Thread-57316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:12:24.770 [INFO] [Thread-57316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] client lang: <none>
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] server lang: <none>
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] kex follows: False
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:12:24.778 [DEBUG] [Thread-57316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:12:24.779 [DEBUG] [Thread-57316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:12:24.779 [DEBUG] [Thread-57316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:12:24.779 [DEBUG] [Thread-57316] [transport.py] [_log()] Compression: none
2025-11-17T16:12:24.779 [DEBUG] [Thread-57316] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:12:24.835 [DEBUG] [Thread-57316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:12:24.835 [DEBUG] [Thread-57316] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:12:24.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:12:24.836 [DEBUG] [Thread-57316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:12:24.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:12:24.891 [DEBUG] [Thread-57316] [transport.py] [_log()] userauth is OK
2025-11-17T16:12:24.891 [DEBUG] [Thread-57316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:12:24.891 [DEBUG] [Thread-57316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:12:24.891 [DEBUG] [Thread-57316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:12:24.892 [DEBUG] [Thread-57316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:12:24.915 [INFO] [Thread-57316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:12:24.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:12:24.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:12:25.609 [DEBUG] [Thread-57318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:12:25.831 [DEBUG] [Thread-57316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:12:25.831 [DEBUG] [Thread-57316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:12:25.879 [DEBUG] [Thread-57316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:12:25.879 [DEBUG] [Thread-57316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:12:25.888 [DEBUG] [Thread-57316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:12:25.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:12:25.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:12:25.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:12:25.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:12:25.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:12:25.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:12:25.922 [DEBUG] [Thread-57316] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:12:40.649 [DEBUG] [Thread-57319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:12:55.677 [DEBUG] [Thread-57320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:12:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:12:55.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:12:55.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:12:56.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 12, 40), 27.63, 15.53, 0.0, 14.84, 22.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:12:56.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:12:40
2025-11-17T16:12:56.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:12:56.869 [DEBUG] [Thread-57321] [transport.py] [_log()] starting thread (client mode): 0xd070e200
2025-11-17T16:12:56.869 [DEBUG] [Thread-57321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:12:56.890 [DEBUG] [Thread-57321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:12:56.890 [INFO] [Thread-57321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:12:56.893 [DEBUG] [Thread-57321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:12:56.893 [DEBUG] [Thread-57321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] client lang: <none>
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] server lang: <none>
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] kex follows: False
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] Compression: none
2025-11-17T16:12:56.894 [DEBUG] [Thread-57321] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:12:56.910 [DEBUG] [Thread-57321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:12:56.910 [DEBUG] [Thread-57321] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:12:56.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:12:56.911 [DEBUG] [Thread-57321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:12:56.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:12:56.913 [DEBUG] [Thread-57321] [transport.py] [_log()] userauth is OK
2025-11-17T16:12:56.913 [DEBUG] [Thread-57321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:12:56.914 [DEBUG] [Thread-57321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:12:56.914 [DEBUG] [Thread-57321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:12:56.914 [DEBUG] [Thread-57321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:12:56.949 [INFO] [Thread-57321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:12:56.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:12:57.611 [DEBUG] [Thread-57321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:12:57.611 [DEBUG] [Thread-57321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:12:57.612 [DEBUG] [Thread-57321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:12:57.653 [DEBUG] [Thread-57321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:12:57.653 [DEBUG] [Thread-57321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:12:57.656 [DEBUG] [Thread-57321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:12:57.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:12:57.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:12:57.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:12:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:12:57.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:12:57.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:12:57.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:12:57.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:12:57.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:12:57.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.591713 -999.00  +22.70   9.77     21   -0.60 1 2 1 1 1   888    0 23.56 1.53 ----- 10.9 9.8 268.6 14.9 27.1 -20.3 26.9 -20.8 26.9 -20.5 27.4 -19.9
2025-11-17T16:12:57.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:12:57.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:12:57.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.591713
2025-11-17T16:12:57.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:12:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:12:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:12:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:12:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:12:57.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:12:40', tmtdew=27.63, humidity=15.53, cloud=0.0, wind=14.84, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:12:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:12:57.680 [DEBUG] [Thread-57321] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:12:57.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:12:57.776 [DEBUG] [Thread-57324] [transport.py] [_log()] starting thread (client mode): 0xd0784cd0
2025-11-17T16:12:57.776 [DEBUG] [Thread-57324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:12:57.791 [DEBUG] [Thread-57324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:12:57.791 [INFO] [Thread-57324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] client lang: <none>
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] server lang: <none>
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] kex follows: False
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:12:57.799 [DEBUG] [Thread-57324] [transport.py] [_log()] Compression: none
2025-11-17T16:12:57.800 [DEBUG] [Thread-57324] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:12:57.858 [DEBUG] [Thread-57324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:12:57.859 [DEBUG] [Thread-57324] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:12:57.859 [DEBUG] [Thread-57324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:12:57.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:12:57.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:12:57.915 [DEBUG] [Thread-57324] [transport.py] [_log()] userauth is OK
2025-11-17T16:12:57.915 [DEBUG] [Thread-57324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:12:57.915 [DEBUG] [Thread-57324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:12:57.915 [DEBUG] [Thread-57324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:12:57.915 [DEBUG] [Thread-57324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:12:57.935 [INFO] [Thread-57324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:12:57.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:12:57.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:12:58.799 [DEBUG] [Thread-57324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:12:58.800 [DEBUG] [Thread-57324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:12:58.847 [DEBUG] [Thread-57324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:12:58.847 [DEBUG] [Thread-57324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:12:58.856 [DEBUG] [Thread-57324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:12:58.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:12:58.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:12:58.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:12:58.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:12:58.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:12:58.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:12:58.890 [DEBUG] [Thread-57324] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:13:10.709 [DEBUG] [Thread-57326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:13:15.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:13:15.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:13:21.171 [DEBUG] [Thread-57327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:13:25.752 [DEBUG] [Thread-57328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:13:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:13:28.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:13:28.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:13:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 13, 12), 27.86, 15.31, 0.0, 14.7, 23.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:13:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:13:12
2025-11-17T16:13:29.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:13:29.835 [DEBUG] [Thread-57329] [transport.py] [_log()] starting thread (client mode): 0xd0755480
2025-11-17T16:13:29.836 [DEBUG] [Thread-57329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:13:29.856 [DEBUG] [Thread-57329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:13:29.856 [INFO] [Thread-57329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] client lang: <none>
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] server lang: <none>
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] kex follows: False
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] Compression: none
2025-11-17T16:13:29.859 [DEBUG] [Thread-57329] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:13:29.874 [DEBUG] [Thread-57329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:13:29.874 [DEBUG] [Thread-57329] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:13:29.874 [DEBUG] [Thread-57329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:13:29.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:13:29.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:13:29.917 [DEBUG] [Thread-57329] [transport.py] [_log()] userauth is OK
2025-11-17T16:13:29.917 [DEBUG] [Thread-57329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:13:29.917 [DEBUG] [Thread-57329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:13:29.917 [DEBUG] [Thread-57329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:13:29.917 [DEBUG] [Thread-57329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:13:29.933 [INFO] [Thread-57329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:13:29.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:13:30.636 [DEBUG] [Thread-57329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:13:30.636 [DEBUG] [Thread-57329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:13:30.637 [DEBUG] [Thread-57329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:13:30.677 [DEBUG] [Thread-57329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:13:30.678 [DEBUG] [Thread-57329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:13:30.680 [DEBUG] [Thread-57329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:13:30.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:13:30.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:13:30.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:13:30.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:13:30.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:13:30.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:13:30.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:13:30.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:13:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:13:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.592060 -999.00  +22.80  13.88     21   -0.50 1 2 1 1 1   888    0 23.61 1.26 ----- 14.9 13.9 269.2 16.5 27.0 -19.7 26.9 -21.1 26.7 -22.0 27.3 -19.4
2025-11-17T16:13:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:13:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:13:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.592060
2025-11-17T16:13:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:13:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:13:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:13:30.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:13:30.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:13:30.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:13:12', tmtdew=27.86, humidity=15.31, cloud=0.0, wind=14.7, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:12:33.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:13:30.704 [DEBUG] [Thread-57329] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:13:30.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:13:30.800 [DEBUG] [Thread-57332] [transport.py] [_log()] starting thread (client mode): 0xd078cca0
2025-11-17T16:13:30.800 [DEBUG] [Thread-57332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:13:30.815 [DEBUG] [Thread-57332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:13:30.815 [INFO] [Thread-57332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:13:30.823 [DEBUG] [Thread-57332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:13:30.823 [DEBUG] [Thread-57332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:13:30.823 [DEBUG] [Thread-57332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:13:30.823 [DEBUG] [Thread-57332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:13:30.823 [DEBUG] [Thread-57332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:13:30.823 [DEBUG] [Thread-57332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] client lang: <none>
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] server lang: <none>
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] kex follows: False
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:13:30.824 [DEBUG] [Thread-57332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:13:30.825 [DEBUG] [Thread-57332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:13:30.825 [DEBUG] [Thread-57332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:13:30.825 [DEBUG] [Thread-57332] [transport.py] [_log()] Compression: none
2025-11-17T16:13:30.825 [DEBUG] [Thread-57332] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:13:30.893 [DEBUG] [Thread-57332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:13:30.894 [DEBUG] [Thread-57332] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:13:30.895 [DEBUG] [Thread-57332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:13:30.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:13:30.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:13:30.951 [DEBUG] [Thread-57332] [transport.py] [_log()] userauth is OK
2025-11-17T16:13:30.951 [DEBUG] [Thread-57332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:13:30.951 [DEBUG] [Thread-57332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:13:30.951 [DEBUG] [Thread-57332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:13:30.951 [DEBUG] [Thread-57332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:13:30.975 [INFO] [Thread-57332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:13:30.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:13:30.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:13:31.827 [DEBUG] [Thread-57332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:13:31.827 [DEBUG] [Thread-57332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:13:31.875 [DEBUG] [Thread-57332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:13:31.875 [DEBUG] [Thread-57332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:13:31.884 [DEBUG] [Thread-57332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:13:31.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:13:31.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:13:31.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:13:31.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:13:31.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:13:31.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:13:31.919 [DEBUG] [Thread-57332] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:13:40.781 [DEBUG] [Thread-57334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:13:55.829 [DEBUG] [Thread-57335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:14:01.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:14:01.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:14:01.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
2025-11-17T16:14:02.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 13, 44), 27.56, 15.41, 0.0, 16.02, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:14:02.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:13:44
2025-11-17T16:14:02.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:14:02.886 [DEBUG] [Thread-57336] [transport.py] [_log()] starting thread (client mode): 0xd078d120
2025-11-17T16:14:02.887 [DEBUG] [Thread-57336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:14:02.906 [DEBUG] [Thread-57336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:14:02.906 [INFO] [Thread-57336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] client lang: <none>
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] server lang: <none>
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] kex follows: False
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] Compression: none
2025-11-17T16:14:02.909 [DEBUG] [Thread-57336] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:14:02.928 [DEBUG] [Thread-57336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:14:02.928 [DEBUG] [Thread-57336] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:14:02.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:14:02.929 [DEBUG] [Thread-57336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:14:02.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:14:02.931 [DEBUG] [Thread-57336] [transport.py] [_log()] userauth is OK
2025-11-17T16:14:02.931 [DEBUG] [Thread-57336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:14:02.931 [DEBUG] [Thread-57336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:14:02.931 [DEBUG] [Thread-57336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:14:02.931 [DEBUG] [Thread-57336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:14:02.955 [INFO] [Thread-57336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:14:02.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:14:03.638 [DEBUG] [Thread-57336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:14:03.639 [DEBUG] [Thread-57336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:14:03.639 [DEBUG] [Thread-57336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:14:03.679 [DEBUG] [Thread-57336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:14:03.680 [DEBUG] [Thread-57336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:14:03.682 [DEBUG] [Thread-57336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:14:03.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:14:03.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:14:03.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:14:03.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:14:03.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:14:03.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:14:03.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:14:03.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:14:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:14:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.592407 -999.00  +22.50  12.84     21   -0.60 1 2 1 1 1   888    0 23.44 1.70 ----- 10.9 12.8 238.2 18.5 26.9 -20.2 26.8 -20.7 26.6 -19.7 27.1 -20.1
2025-11-17T16:14:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:14:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:14:03.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.592407
2025-11-17T16:14:03.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:14:03.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:14:03.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:14:03.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:14:03.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:14:03.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:13:44', tmtdew=27.56, humidity=15.41, cloud=0.0, wind=16.02, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:13:03.965', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:14:03.706 [DEBUG] [Thread-57336] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:14:03.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:14:03.803 [DEBUG] [Thread-57339] [transport.py] [_log()] starting thread (client mode): 0xd07bdc60
2025-11-17T16:14:03.803 [DEBUG] [Thread-57339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:14:03.821 [DEBUG] [Thread-57339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:14:03.822 [INFO] [Thread-57339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:14:03.830 [DEBUG] [Thread-57339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] client lang: <none>
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] server lang: <none>
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] kex follows: False
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:14:03.831 [DEBUG] [Thread-57339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:14:03.832 [DEBUG] [Thread-57339] [transport.py] [_log()] Compression: none
2025-11-17T16:14:03.832 [DEBUG] [Thread-57339] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:14:03.887 [DEBUG] [Thread-57339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:14:03.887 [DEBUG] [Thread-57339] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:14:03.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:14:03.888 [DEBUG] [Thread-57339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:14:03.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:14:03.944 [DEBUG] [Thread-57339] [transport.py] [_log()] userauth is OK
2025-11-17T16:14:03.944 [DEBUG] [Thread-57339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:14:03.945 [DEBUG] [Thread-57339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:14:03.945 [DEBUG] [Thread-57339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:14:03.945 [DEBUG] [Thread-57339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:14:03.967 [INFO] [Thread-57339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:14:03.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:14:03.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:14:04.836 [DEBUG] [Thread-57339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:14:04.837 [DEBUG] [Thread-57339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:14:04.884 [DEBUG] [Thread-57339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:14:04.884 [DEBUG] [Thread-57339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:14:04.893 [DEBUG] [Thread-57339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:14:04.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:14:04.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:14:04.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:14:04.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:14:04.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:14:04.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:14:04.928 [DEBUG] [Thread-57339] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:14:10.858 [DEBUG] [Thread-57341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:14:15.186 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:14:15.187 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:14:21.227 [DEBUG] [Thread-57342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:14:25.899 [DEBUG] [Thread-57343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:14:34.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:14:34.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:14:34.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:14:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 14, 16), 27.53, 15.43, 0.0, 15.67, 22.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:14:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:14:16
2025-11-17T16:14:35.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:14:35.916 [DEBUG] [Thread-57344] [transport.py] [_log()] starting thread (client mode): 0xd07563b0
2025-11-17T16:14:35.916 [DEBUG] [Thread-57344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:14:35.927 [DEBUG] [Thread-57344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:14:35.927 [INFO] [Thread-57344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] client lang: <none>
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] server lang: <none>
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] kex follows: False
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] Compression: none
2025-11-17T16:14:35.930 [DEBUG] [Thread-57344] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:14:35.941 [DEBUG] [Thread-57344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:14:35.941 [DEBUG] [Thread-57344] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:14:35.942 [DEBUG] [Thread-57344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:14:35.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:14:35.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:14:35.942 [DEBUG] [Thread-57344] [transport.py] [_log()] userauth is OK
2025-11-17T16:14:35.942 [DEBUG] [Thread-57344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:14:35.942 [DEBUG] [Thread-57344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:14:35.942 [DEBUG] [Thread-57344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:14:35.942 [DEBUG] [Thread-57344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:14:35.952 [INFO] [Thread-57344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:14:35.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:14:36.591 [DEBUG] [Thread-57344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:14:36.591 [DEBUG] [Thread-57344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:14:36.591 [DEBUG] [Thread-57344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:14:36.632 [DEBUG] [Thread-57344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:14:36.632 [DEBUG] [Thread-57344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:14:36.634 [DEBUG] [Thread-57344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:14:36.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:14:36.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:14:36.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:14:36.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:14:36.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:14:36.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:14:36.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.592755 -999.00  +22.50   9.41     21   -0.60 1 2 1 1 1   888    0 23.67 1.88 ----- 12.4 9.4 277.4 14.5 26.8 -19.2 26.8 -20.1 26.6 -19.8 26.9 -19.0
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.592755
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:14:36.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:14:16', tmtdew=27.53, humidity=15.43, cloud=0.0, wind=15.67, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:13:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:14:36.652 [DEBUG] [Thread-57344] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:14:36.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:14:36.737 [DEBUG] [Thread-57347] [transport.py] [_log()] starting thread (client mode): 0xd078cc10
2025-11-17T16:14:36.737 [DEBUG] [Thread-57347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:14:36.752 [DEBUG] [Thread-57347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:14:36.752 [INFO] [Thread-57347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:14:36.759 [DEBUG] [Thread-57347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] client lang: <none>
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] server lang: <none>
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] kex follows: False
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] Compression: none
2025-11-17T16:14:36.760 [DEBUG] [Thread-57347] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:14:36.817 [DEBUG] [Thread-57347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:14:36.817 [DEBUG] [Thread-57347] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:14:36.817 [DEBUG] [Thread-57347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:14:36.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:14:36.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:14:36.874 [DEBUG] [Thread-57347] [transport.py] [_log()] userauth is OK
2025-11-17T16:14:36.874 [DEBUG] [Thread-57347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:14:36.874 [DEBUG] [Thread-57347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:14:36.874 [DEBUG] [Thread-57347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:14:36.874 [DEBUG] [Thread-57347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:14:36.888 [INFO] [Thread-57347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:14:36.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:14:36.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:14:37.804 [DEBUG] [Thread-57347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:14:37.804 [DEBUG] [Thread-57347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:14:37.852 [DEBUG] [Thread-57347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:14:37.852 [DEBUG] [Thread-57347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:14:37.860 [DEBUG] [Thread-57347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:14:37.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:14:37.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:14:37.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:14:37.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:14:37.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:14:37.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:14:37.892 [DEBUG] [Thread-57347] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:14:40.927 [DEBUG] [Thread-57349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:14:55.965 [DEBUG] [Thread-57350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:15:07.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:15:07.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:15:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:15:08.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 14, 48), 27.57, 15.58, 0.0, 20.7, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:15:08.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:14:48
2025-11-17T16:15:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:15:08.841 [DEBUG] [Thread-57351] [transport.py] [_log()] starting thread (client mode): 0xd070e170
2025-11-17T16:15:08.841 [DEBUG] [Thread-57351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:15:08.864 [DEBUG] [Thread-57351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:15:08.864 [INFO] [Thread-57351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:15:08.866 [DEBUG] [Thread-57351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:15:08.866 [DEBUG] [Thread-57351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:15:08.866 [DEBUG] [Thread-57351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:15:08.866 [DEBUG] [Thread-57351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:15:08.866 [DEBUG] [Thread-57351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:15:08.866 [DEBUG] [Thread-57351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:15:08.866 [DEBUG] [Thread-57351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:15:08.866 [DEBUG] [Thread-57351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] client lang: <none>
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] server lang: <none>
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] kex follows: False
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:15:08.867 [DEBUG] [Thread-57351] [transport.py] [_log()] Compression: none
2025-11-17T16:15:08.868 [DEBUG] [Thread-57351] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:15:08.882 [DEBUG] [Thread-57351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:15:08.883 [DEBUG] [Thread-57351] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:15:08.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:15:08.884 [DEBUG] [Thread-57351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:15:08.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:15:08.886 [DEBUG] [Thread-57351] [transport.py] [_log()] userauth is OK
2025-11-17T16:15:08.886 [DEBUG] [Thread-57351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:15:08.887 [DEBUG] [Thread-57351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:15:08.887 [DEBUG] [Thread-57351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:15:08.887 [DEBUG] [Thread-57351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:15:08.910 [INFO] [Thread-57351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:15:08.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:15:11.005 [DEBUG] [Thread-57353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:15:11.080 [DEBUG] [Thread-57351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:15:11.080 [DEBUG] [Thread-57351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:15:11.080 [DEBUG] [Thread-57351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:15:11.121 [DEBUG] [Thread-57351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:15:11.121 [DEBUG] [Thread-57351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:15:11.124 [DEBUG] [Thread-57351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:15:11.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:15:11.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:15:11.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:15:11.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:15:11.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:15:11.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:15:11.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:15:11.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:15:11.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:15:11.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.593449 -999.00  +22.50  12.59     21   -0.50 1 2 1 1 1   888    0 23.21 0.91 ----- 15.1 12.6 249.2 17.0 26.6 -19.1 26.6 -19.7 26.3 -19.6 26.6 -18.8
2025-11-17T16:15:11.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:15:11.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:15:11.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.593449
2025-11-17T16:15:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:15:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:15:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:15:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:15:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:15:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:14:48', tmtdew=27.57, humidity=15.58, cloud=0.0, wind=20.7, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:14:33.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:15:11.238 [DEBUG] [Thread-57351] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:15:11.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:15:11.335 [DEBUG] [Thread-57355] [transport.py] [_log()] starting thread (client mode): 0xd078c520
2025-11-17T16:15:11.335 [DEBUG] [Thread-57355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:15:11.350 [DEBUG] [Thread-57355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:15:11.350 [INFO] [Thread-57355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:15:11.358 [DEBUG] [Thread-57355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:15:11.358 [DEBUG] [Thread-57355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:15:11.358 [DEBUG] [Thread-57355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:15:11.358 [DEBUG] [Thread-57355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:15:11.358 [DEBUG] [Thread-57355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:15:11.358 [DEBUG] [Thread-57355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:15:11.358 [DEBUG] [Thread-57355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:15:11.358 [DEBUG] [Thread-57355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] client lang: <none>
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] server lang: <none>
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] kex follows: False
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:15:11.359 [DEBUG] [Thread-57355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:15:11.360 [DEBUG] [Thread-57355] [transport.py] [_log()] Compression: none
2025-11-17T16:15:11.360 [DEBUG] [Thread-57355] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:15:11.414 [DEBUG] [Thread-57355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:15:11.415 [DEBUG] [Thread-57355] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:15:11.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:15:11.416 [DEBUG] [Thread-57355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:15:11.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:15:11.470 [DEBUG] [Thread-57355] [transport.py] [_log()] userauth is OK
2025-11-17T16:15:11.471 [DEBUG] [Thread-57355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:15:11.471 [DEBUG] [Thread-57355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:15:11.471 [DEBUG] [Thread-57355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:15:11.471 [DEBUG] [Thread-57355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:15:11.490 [INFO] [Thread-57355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:15:11.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:15:11.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:15:12.347 [DEBUG] [Thread-57355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:15:12.347 [DEBUG] [Thread-57355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:15:12.396 [DEBUG] [Thread-57355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:15:12.396 [DEBUG] [Thread-57355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:15:12.405 [DEBUG] [Thread-57355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:15:12.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:15:12.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:15: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') -> 00000000
2025-11-17T16:15:12.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:15:12.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:15:12.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:15:12.440 [DEBUG] [Thread-57355] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:15:15.332 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:15:15.332 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:15:21.274 [DEBUG] [Thread-57357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:15:26.033 [DEBUG] [Thread-57358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:15:41.075 [DEBUG] [Thread-57359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:15:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:15:42.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:15:42.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:15:43.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 15, 20), 27.53, 15.63, 0.0, 19.62, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:15:43.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:15:20
2025-11-17T16:15:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:15:43.380 [DEBUG] [Thread-57360] [transport.py] [_log()] starting thread (client mode): 0xd0784f10
2025-11-17T16:15:43.380 [DEBUG] [Thread-57360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:15:43.400 [DEBUG] [Thread-57360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:15:43.400 [INFO] [Thread-57360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:15:43.401 [DEBUG] [Thread-57360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] client lang: <none>
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] server lang: <none>
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] kex follows: False
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] Compression: none
2025-11-17T16:15:43.402 [DEBUG] [Thread-57360] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:15:43.410 [DEBUG] [Thread-57360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:15:43.411 [DEBUG] [Thread-57360] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:15:43.411 [DEBUG] [Thread-57360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:15:43.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:15:43.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:15:43.413 [DEBUG] [Thread-57360] [transport.py] [_log()] userauth is OK
2025-11-17T16:15:43.413 [DEBUG] [Thread-57360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:15:43.413 [DEBUG] [Thread-57360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:15:43.413 [DEBUG] [Thread-57360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:15:43.413 [DEBUG] [Thread-57360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:15:43.428 [INFO] [Thread-57360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:15:43.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:15:44.074 [DEBUG] [Thread-57360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:15:44.075 [DEBUG] [Thread-57360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:15:44.075 [DEBUG] [Thread-57360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:15:44.115 [DEBUG] [Thread-57360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:15:44.116 [DEBUG] [Thread-57360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:15:44.118 [DEBUG] [Thread-57360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:15:44.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:15:44.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:15:44.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:15:44.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:15:44.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:15:44.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:15:44.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:15:44.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:15:44.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:15:44.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.593796 -999.00  +22.70  13.05     21   -0.50 1 2 1 1 1   888    0 22.97 1.60 ----- 15.5 13.1 260.6 17.9 26.5 -18.7 26.5 -19.5 26.2 -19.0 26.6 -18.6
2025-11-17T16:15:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:15:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:15:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.593796
2025-11-17T16:15:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:15:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:15:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:15:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:15:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:15:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:15:20', tmtdew=27.53, humidity=15.63, cloud=0.0, wind=19.62, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:15:03.974', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:15:44.143 [DEBUG] [Thread-57360] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:15:44.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:15:44.239 [DEBUG] [Thread-57363] [transport.py] [_log()] starting thread (client mode): 0xd070f7f0
2025-11-17T16:15:44.239 [DEBUG] [Thread-57363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:15:44.253 [DEBUG] [Thread-57363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:15:44.254 [INFO] [Thread-57363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] client lang: <none>
2025-11-17T16:15:44.261 [DEBUG] [Thread-57363] [transport.py] [_log()] server lang: <none>
2025-11-17T16:15:44.262 [DEBUG] [Thread-57363] [transport.py] [_log()] kex follows: False
2025-11-17T16:15:44.262 [DEBUG] [Thread-57363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:15:44.262 [DEBUG] [Thread-57363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:15:44.262 [DEBUG] [Thread-57363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:15:44.262 [DEBUG] [Thread-57363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:15:44.262 [DEBUG] [Thread-57363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:15:44.262 [DEBUG] [Thread-57363] [transport.py] [_log()] Compression: none
2025-11-17T16:15:44.262 [DEBUG] [Thread-57363] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:15:44.323 [DEBUG] [Thread-57363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:15:44.323 [DEBUG] [Thread-57363] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:15:44.324 [DEBUG] [Thread-57363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:15:44.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:15:44.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:15:44.378 [DEBUG] [Thread-57363] [transport.py] [_log()] userauth is OK
2025-11-17T16:15:44.378 [DEBUG] [Thread-57363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:15:44.378 [DEBUG] [Thread-57363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:15:44.378 [DEBUG] [Thread-57363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:15:44.379 [DEBUG] [Thread-57363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:15:44.397 [INFO] [Thread-57363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:15:44.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:15:44.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:15:45.285 [DEBUG] [Thread-57363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:15:45.285 [DEBUG] [Thread-57363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:15:45.333 [DEBUG] [Thread-57363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:15:45.333 [DEBUG] [Thread-57363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:15:45.342 [DEBUG] [Thread-57363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:15:45.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:15:45.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:15:45.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:15:45.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:15:45.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:15:45.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:15:45.378 [DEBUG] [Thread-57363] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:15:56.104 [DEBUG] [Thread-57365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:16:11.135 [DEBUG] [Thread-57366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:16:15.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:16:15.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:16:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:16:15.472 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:16:15.473 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:16:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 15, 52), 27.56, 15.53, 0.0, 21.16, 22.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:16:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:15:52
2025-11-17T16:16:16.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:16:16.302 [DEBUG] [Thread-57367] [transport.py] [_log()] starting thread (client mode): 0xd070e3b0
2025-11-17T16:16:16.303 [DEBUG] [Thread-57367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:16:16.323 [DEBUG] [Thread-57367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:16:16.323 [INFO] [Thread-57367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:16:16.326 [DEBUG] [Thread-57367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] client lang: <none>
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] server lang: <none>
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] kex follows: False
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] Compression: none
2025-11-17T16:16:16.327 [DEBUG] [Thread-57367] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:16:16.343 [DEBUG] [Thread-57367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:16:16.343 [DEBUG] [Thread-57367] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:16:16.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:16:16.344 [DEBUG] [Thread-57367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:16:16.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:16:16.346 [DEBUG] [Thread-57367] [transport.py] [_log()] userauth is OK
2025-11-17T16:16:16.347 [DEBUG] [Thread-57367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:16:16.347 [DEBUG] [Thread-57367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:16:16.347 [DEBUG] [Thread-57367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:16:16.347 [DEBUG] [Thread-57367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:16:16.382 [INFO] [Thread-57367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:16:16.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:16:17.028 [DEBUG] [Thread-57367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:16:17.028 [DEBUG] [Thread-57367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:16:17.028 [DEBUG] [Thread-57367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:16:17.069 [DEBUG] [Thread-57367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:16:17.070 [DEBUG] [Thread-57367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:16:17.073 [DEBUG] [Thread-57367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:16:17.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:16:17.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:16:17.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:16:17.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:16:17.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:16:17.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:16:17.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:16:17.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:16:17.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:16:17.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.594144 -999.00  +22.90  14.97     20   -0.60 1 2 1 1 1   888    0 23.47 4.13 ----- 12.3 15.0 255.0 21.4 26.5 -18.8 26.4 -19.4 26.2 -18.9 26.5 -18.6
2025-11-17T16:16:17.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:16:17.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:16:17.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.594144
2025-11-17T16:16:17.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:16:17.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:16:17.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:16:17.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:16:17.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:16:17.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:15:52', tmtdew=27.56, humidity=15.53, cloud=0.0, wind=21.16, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:15:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:16:17.100 [DEBUG] [Thread-57367] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:16:17.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:16:17.197 [DEBUG] [Thread-57370] [transport.py] [_log()] starting thread (client mode): 0xd07bd0c0
2025-11-17T16:16:17.197 [DEBUG] [Thread-57370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:16:17.212 [DEBUG] [Thread-57370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:16:17.212 [INFO] [Thread-57370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:16:17.219 [DEBUG] [Thread-57370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:16:17.219 [DEBUG] [Thread-57370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] client lang: <none>
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] server lang: <none>
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] kex follows: False
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] Compression: none
2025-11-17T16:16:17.220 [DEBUG] [Thread-57370] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:16:17.277 [DEBUG] [Thread-57370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:16:17.278 [DEBUG] [Thread-57370] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:16:17.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:16:17.279 [DEBUG] [Thread-57370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:16:17.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:16:17.334 [DEBUG] [Thread-57370] [transport.py] [_log()] userauth is OK
2025-11-17T16:16:17.334 [DEBUG] [Thread-57370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:16:17.334 [DEBUG] [Thread-57370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:16:17.335 [DEBUG] [Thread-57370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:16:17.335 [DEBUG] [Thread-57370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:16:17.354 [INFO] [Thread-57370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:16:17.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:16:17.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:16:18.241 [DEBUG] [Thread-57370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:16:18.241 [DEBUG] [Thread-57370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:16:18.289 [DEBUG] [Thread-57370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:16:18.289 [DEBUG] [Thread-57370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:16:18.298 [DEBUG] [Thread-57370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:16:18.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:16:18.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:16:18.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:16:18.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:16:18.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:16:18.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:16:18.337 [DEBUG] [Thread-57370] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:16:21.328 [DEBUG] [Thread-57372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:16:26.163 [DEBUG] [Thread-57373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:16:41.196 [DEBUG] [Thread-57374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:16:48.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:16:48.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:16:48.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:16:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 16, 24), 27.53, 15.56, 0.0, 21.9, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:16:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:16:24
2025-11-17T16:16:49.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:16:49.287 [DEBUG] [Thread-57375] [transport.py] [_log()] starting thread (client mode): 0xd07bcb80
2025-11-17T16:16:49.287 [DEBUG] [Thread-57375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:16:49.307 [DEBUG] [Thread-57375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:16:49.307 [INFO] [Thread-57375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:16:49.310 [DEBUG] [Thread-57375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:16:49.310 [DEBUG] [Thread-57375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:16:49.310 [DEBUG] [Thread-57375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] client lang: <none>
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] server lang: <none>
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] kex follows: False
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] Compression: none
2025-11-17T16:16:49.311 [DEBUG] [Thread-57375] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:16:49.329 [DEBUG] [Thread-57375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:16:49.330 [DEBUG] [Thread-57375] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:16:49.330 [DEBUG] [Thread-57375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:16:49.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:16:49.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:16:49.332 [DEBUG] [Thread-57375] [transport.py] [_log()] userauth is OK
2025-11-17T16:16:49.332 [DEBUG] [Thread-57375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:16:49.333 [DEBUG] [Thread-57375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:16:49.333 [DEBUG] [Thread-57375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:16:49.333 [DEBUG] [Thread-57375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:16:49.367 [INFO] [Thread-57375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:16:49.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:16:50.003 [DEBUG] [Thread-57375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:16:50.003 [DEBUG] [Thread-57375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:16:50.004 [DEBUG] [Thread-57375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:16:50.045 [DEBUG] [Thread-57375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:16:50.045 [DEBUG] [Thread-57375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:16:50.048 [DEBUG] [Thread-57375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:16:50.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:16:50.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:16:50.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:16:50.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:16:50.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:16:50.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:16:50.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:16:50.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:16:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:16:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.594496 -999.00  +22.90  15.03     21   -0.50 1 2 1 1 1   888    0 23.20 5.45 ----- 12.0 15.0 268.2 17.8 26.4 -18.9 26.4 -18.9 26.1 -18.5 26.4 -18.5
2025-11-17T16:16:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:16:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:16:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.594496
2025-11-17T16:16:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:16:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:16:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:16:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:16:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:16:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:16:24', tmtdew=27.53, humidity=15.56, cloud=0.0, wind=21.9, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:16:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:16:50.069 [DEBUG] [Thread-57375] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:16:50.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:16:50.164 [DEBUG] [Thread-57378] [transport.py] [_log()] starting thread (client mode): 0xd070f7c0
2025-11-17T16:16:50.164 [DEBUG] [Thread-57378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:16:50.179 [DEBUG] [Thread-57378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:16:50.179 [INFO] [Thread-57378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:16:50.187 [DEBUG] [Thread-57378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] client lang: <none>
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] server lang: <none>
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] kex follows: False
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] Compression: none
2025-11-17T16:16:50.188 [DEBUG] [Thread-57378] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:16:50.246 [DEBUG] [Thread-57378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:16:50.247 [DEBUG] [Thread-57378] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:16:50.247 [DEBUG] [Thread-57378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:16:50.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:16:50.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:16:50.306 [DEBUG] [Thread-57378] [transport.py] [_log()] userauth is OK
2025-11-17T16:16:50.306 [DEBUG] [Thread-57378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:16:50.306 [DEBUG] [Thread-57378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:16:50.306 [DEBUG] [Thread-57378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:16:50.307 [DEBUG] [Thread-57378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:16:50.325 [INFO] [Thread-57378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:16:50.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:16:50.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:16:51.238 [DEBUG] [Thread-57378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:16:51.238 [DEBUG] [Thread-57378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:16:51.286 [DEBUG] [Thread-57378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:16:51.286 [DEBUG] [Thread-57378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:16:51.295 [DEBUG] [Thread-57378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:16:51.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:16:51.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:16:51.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:16:51.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:16:51.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:16:51.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:16:51.329 [DEBUG] [Thread-57378] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:16:56.229 [DEBUG] [Thread-57380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:17:11.269 [DEBUG] [Thread-57381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:17:15.614 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:17:15.614 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:17:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:17:21.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:17:21.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:17:21.394 [DEBUG] [Thread-57382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:17:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 16, 56), 27.58, 15.51, 0.0, 20.1, 22.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:17:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:16:56
2025-11-17T16:17:22.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:17:22.269 [DEBUG] [Thread-57383] [transport.py] [_log()] starting thread (client mode): 0xd0787f40
2025-11-17T16:17:22.270 [DEBUG] [Thread-57383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:17:22.291 [DEBUG] [Thread-57383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:17:22.291 [INFO] [Thread-57383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] client lang: <none>
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] server lang: <none>
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] kex follows: False
2025-11-17T16:17:22.294 [DEBUG] [Thread-57383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:17:22.295 [DEBUG] [Thread-57383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:17:22.295 [DEBUG] [Thread-57383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:17:22.295 [DEBUG] [Thread-57383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:17:22.295 [DEBUG] [Thread-57383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:17:22.295 [DEBUG] [Thread-57383] [transport.py] [_log()] Compression: none
2025-11-17T16:17:22.295 [DEBUG] [Thread-57383] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:17:22.313 [DEBUG] [Thread-57383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:17:22.313 [DEBUG] [Thread-57383] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:17:22.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:17:22.314 [DEBUG] [Thread-57383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:17:22.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:17:22.316 [DEBUG] [Thread-57383] [transport.py] [_log()] userauth is OK
2025-11-17T16:17:22.317 [DEBUG] [Thread-57383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:17:22.317 [DEBUG] [Thread-57383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:17:22.317 [DEBUG] [Thread-57383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:17:22.317 [DEBUG] [Thread-57383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:17:22.352 [INFO] [Thread-57383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:17:22.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:17:22.986 [DEBUG] [Thread-57383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:17:22.987 [DEBUG] [Thread-57383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:17:22.987 [DEBUG] [Thread-57383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:17:23.027 [DEBUG] [Thread-57383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:17:23.028 [DEBUG] [Thread-57383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:17:23.031 [DEBUG] [Thread-57383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:17:23.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:17:23.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:17:23.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:17:23.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:17:23.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:17:23.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:17:23.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:17:23.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:17:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:17:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.594844 -999.00  +23.10   9.12     20   -0.50 1 2 1 1 1   888    0 23.25 6.43 ----- 10.0 9.1 252.2 18.3 26.4 -18.2 26.4 -18.9 26.1 -18.5 26.4 -17.8
2025-11-17T16:17:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:17:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:17:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.594844
2025-11-17T16:17:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:17:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:17:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:17:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:17:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:17:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:16:56', tmtdew=27.58, humidity=15.51, cloud=0.0, wind=20.1, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:16:34.522', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:17:23.057 [DEBUG] [Thread-57383] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:17:23.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:17:23.155 [DEBUG] [Thread-57386] [transport.py] [_log()] starting thread (client mode): 0xd0776d70
2025-11-17T16:17:23.155 [DEBUG] [Thread-57386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:17:23.171 [DEBUG] [Thread-57386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:17:23.171 [INFO] [Thread-57386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:17:23.182 [DEBUG] [Thread-57386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:17:23.182 [DEBUG] [Thread-57386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:17:23.182 [DEBUG] [Thread-57386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] client lang: <none>
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] server lang: <none>
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] kex follows: False
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] Compression: none
2025-11-17T16:17:23.183 [DEBUG] [Thread-57386] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:17:23.245 [DEBUG] [Thread-57386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:17:23.245 [DEBUG] [Thread-57386] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:17:23.246 [DEBUG] [Thread-57386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:17:23.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:17:23.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:17:23.309 [DEBUG] [Thread-57386] [transport.py] [_log()] userauth is OK
2025-11-17T16:17:23.309 [DEBUG] [Thread-57386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:17:23.309 [DEBUG] [Thread-57386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:17:23.309 [DEBUG] [Thread-57386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:17:23.309 [DEBUG] [Thread-57386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:17:23.331 [INFO] [Thread-57386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:17:23.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:17:23.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:17:24.168 [DEBUG] [Thread-57386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:17:24.169 [DEBUG] [Thread-57386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:17:24.216 [DEBUG] [Thread-57386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:17:24.216 [DEBUG] [Thread-57386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:17:24.226 [DEBUG] [Thread-57386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:17:24.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:17:24.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:17:24.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:17:24.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:17:24.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:17:24.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:17:24.262 [DEBUG] [Thread-57386] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:17:26.296 [DEBUG] [Thread-57388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:17:41.333 [DEBUG] [Thread-57389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:17:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:17:54.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:17:54.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:17:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 17, 28), 27.48, 15.61, 0.0, 16.6, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:17:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:17:28
2025-11-17T16:17:55.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:17:55.197 [DEBUG] [Thread-57390] [transport.py] [_log()] starting thread (client mode): 0xd07bf670
2025-11-17T16:17:55.197 [DEBUG] [Thread-57390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:17:55.224 [DEBUG] [Thread-57390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:17:55.225 [INFO] [Thread-57390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:17:55.227 [DEBUG] [Thread-57390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] client lang: <none>
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] server lang: <none>
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] kex follows: False
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] Compression: none
2025-11-17T16:17:55.228 [DEBUG] [Thread-57390] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:17:55.244 [DEBUG] [Thread-57390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:17:55.245 [DEBUG] [Thread-57390] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:17:55.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:17:55.246 [DEBUG] [Thread-57390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:17:55.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:17:55.248 [DEBUG] [Thread-57390] [transport.py] [_log()] userauth is OK
2025-11-17T16:17:55.249 [DEBUG] [Thread-57390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:17:55.249 [DEBUG] [Thread-57390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:17:55.249 [DEBUG] [Thread-57390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:17:55.249 [DEBUG] [Thread-57390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:17:55.285 [INFO] [Thread-57390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:17:55.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:17:55.949 [DEBUG] [Thread-57390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:17:55.949 [DEBUG] [Thread-57390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:17:55.949 [DEBUG] [Thread-57390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:17:55.990 [DEBUG] [Thread-57390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:17:55.991 [DEBUG] [Thread-57390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:17:55.994 [DEBUG] [Thread-57390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:17:56.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:17:56.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:17:56.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:17:56.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:17:56.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:17:56.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:17:56.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:17:56.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:17:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:17:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.595185 -999.00  +23.00  10.09     20   -0.60 1 2 1 1 1   888    0 23.38 7.53 ----- 11.5 10.1 270.6 17.2 26.5 -18.6 26.3 -18.9 26.1 -20.8 26.4 -18.1
2025-11-17T16:17:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:17:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:17:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.595185
2025-11-17T16:17:56.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:17:56.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:17:56.019 [DEBUG] [Thread-57390] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:17:56.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:17:56.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:17:56.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:17:56.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:17:28', tmtdew=27.48, humidity=15.61, cloud=0.0, wind=16.6, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:17:03.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:17:56.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:17:56.128 [DEBUG] [Thread-57393] [transport.py] [_log()] starting thread (client mode): 0xd07e90f0
2025-11-17T16:17:56.128 [DEBUG] [Thread-57393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:17:56.143 [DEBUG] [Thread-57393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:17:56.143 [INFO] [Thread-57393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:17:56.151 [DEBUG] [Thread-57393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:17:56.151 [DEBUG] [Thread-57393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:17:56.151 [DEBUG] [Thread-57393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:17:56.151 [DEBUG] [Thread-57393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:17:56.151 [DEBUG] [Thread-57393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:17:56.151 [DEBUG] [Thread-57393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:17:56.151 [DEBUG] [Thread-57393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:17:56.151 [DEBUG] [Thread-57393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:17:56.152 [DEBUG] [Thread-57393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:17:56.152 [DEBUG] [Thread-57393] [transport.py] [_log()] client lang: <none>
2025-11-17T16:17:56.152 [DEBUG] [Thread-57393] [transport.py] [_log()] server lang: <none>
2025-11-17T16:17:56.152 [DEBUG] [Thread-57393] [transport.py] [_log()] kex follows: False
2025-11-17T16:17:56.152 [DEBUG] [Thread-57393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:17:56.152 [DEBUG] [Thread-57393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:17:56.152 [DEBUG] [Thread-57393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:17:56.152 [DEBUG] [Thread-57393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:17:56.153 [DEBUG] [Thread-57393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:17:56.153 [DEBUG] [Thread-57393] [transport.py] [_log()] Compression: none
2025-11-17T16:17:56.153 [DEBUG] [Thread-57393] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:17:56.213 [DEBUG] [Thread-57393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:17:56.214 [DEBUG] [Thread-57393] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:17:56.215 [DEBUG] [Thread-57393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:17:56.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:17:56.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:17:56.274 [DEBUG] [Thread-57393] [transport.py] [_log()] userauth is OK
2025-11-17T16:17:56.274 [DEBUG] [Thread-57393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:17:56.275 [DEBUG] [Thread-57393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:17:56.275 [DEBUG] [Thread-57393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:17:56.275 [DEBUG] [Thread-57393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:17:56.294 [INFO] [Thread-57393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:17:56.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:17:56.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:17:56.359 [DEBUG] [Thread-57395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:17:57.160 [DEBUG] [Thread-57393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:17:57.160 [DEBUG] [Thread-57393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:17:57.208 [DEBUG] [Thread-57393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:17:57.208 [DEBUG] [Thread-57393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:17:57.217 [DEBUG] [Thread-57393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:17:57.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:17:57.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:17:57.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:17:57.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:17:57.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:17:57.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:17:57.252 [DEBUG] [Thread-57393] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:18:11.407 [DEBUG] [Thread-57396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:18:15.763 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:18:15.764 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:18:21.449 [DEBUG] [Thread-57397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:18:26.435 [DEBUG] [Thread-57398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:18:27.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:18:27.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:18:27.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:18:27.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 18), 27.22, 15.68, 0.0, 14.84, 22.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:18:27.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:18:00
2025-11-17T16:18:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:18:28.235 [DEBUG] [Thread-57399] [transport.py] [_log()] starting thread (client mode): 0xd07eb2b0
2025-11-17T16:18:28.235 [DEBUG] [Thread-57399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:18:28.254 [DEBUG] [Thread-57399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:18:28.254 [INFO] [Thread-57399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:18:28.257 [DEBUG] [Thread-57399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:18:28.257 [DEBUG] [Thread-57399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:18:28.257 [DEBUG] [Thread-57399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] client lang: <none>
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] server lang: <none>
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] kex follows: False
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] Compression: none
2025-11-17T16:18:28.258 [DEBUG] [Thread-57399] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:18:28.276 [DEBUG] [Thread-57399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:18:28.276 [DEBUG] [Thread-57399] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:18:28.276 [DEBUG] [Thread-57399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:18:28.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:18:28.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:18:28.276 [DEBUG] [Thread-57399] [transport.py] [_log()] userauth is OK
2025-11-17T16:18:28.276 [DEBUG] [Thread-57399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:18:28.276 [DEBUG] [Thread-57399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:18:28.276 [DEBUG] [Thread-57399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:18:28.276 [DEBUG] [Thread-57399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:18:28.287 [INFO] [Thread-57399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:18:28.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:18:28.921 [DEBUG] [Thread-57399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:18:28.921 [DEBUG] [Thread-57399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:18:28.921 [DEBUG] [Thread-57399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:18:28.962 [DEBUG] [Thread-57399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:18:28.962 [DEBUG] [Thread-57399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:18:28.964 [DEBUG] [Thread-57399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:18:28.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:18:28.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:18:28.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:18:28.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:18:28.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:18:28.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:18:28.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:18:28.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:18:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:18:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.595532 -999.00  +22.80  14.99     21   -0.60 1 2 1 1 1   888    0 23.63 7.81 ----- 8.2 15.0 271.2 19.0 26.4 -19.6 26.3 -19.0 25.9 -18.5 26.2 -19.0
2025-11-17T16:18:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:18:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:18:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.595532
2025-11-17T16:18:28.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:18:28.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:18:28.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:18:28.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:18:28.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:18:28.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:18:00', tmtdew=27.22, humidity=15.68, cloud=0.0, wind=14.84, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:17:33.965', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:18:28.982 [DEBUG] [Thread-57399] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:18:29.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:18:29.068 [DEBUG] [Thread-57402] [transport.py] [_log()] starting thread (client mode): 0xd07eb9a0
2025-11-17T16:18:29.068 [DEBUG] [Thread-57402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:18:29.083 [DEBUG] [Thread-57402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:18:29.083 [INFO] [Thread-57402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:18:29.090 [DEBUG] [Thread-57402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] client lang: <none>
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] server lang: <none>
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] kex follows: False
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] Compression: none
2025-11-17T16:18:29.091 [DEBUG] [Thread-57402] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:18:29.152 [DEBUG] [Thread-57402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:18:29.152 [DEBUG] [Thread-57402] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:18:29.152 [DEBUG] [Thread-57402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:18:29.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:18:29.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:18:29.213 [DEBUG] [Thread-57402] [transport.py] [_log()] userauth is OK
2025-11-17T16:18:29.213 [DEBUG] [Thread-57402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:18:29.213 [DEBUG] [Thread-57402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:18:29.213 [DEBUG] [Thread-57402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:18:29.213 [DEBUG] [Thread-57402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:18:29.227 [INFO] [Thread-57402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:18:29.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:18:29.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:18:30.089 [DEBUG] [Thread-57402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:18:30.089 [DEBUG] [Thread-57402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:18:30.137 [DEBUG] [Thread-57402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:18:30.137 [DEBUG] [Thread-57402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:18:30.145 [DEBUG] [Thread-57402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:18:30.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:18:30.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:18:30.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:18:30.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:18:30.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:18:30.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:18:30.177 [DEBUG] [Thread-57402] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:18:41.460 [DEBUG] [Thread-57404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:18:56.509 [DEBUG] [Thread-57405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:19:00.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:19:00.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:19:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:19:00.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 18, 32), 27.2, 15.68, 0.0, 13.75, 22.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:19:00.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:18:32
2025-11-17T16:19:00.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:19:01.133 [DEBUG] [Thread-57406] [transport.py] [_log()] starting thread (client mode): 0xd07e8a00
2025-11-17T16:19:01.134 [DEBUG] [Thread-57406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:19:01.154 [DEBUG] [Thread-57406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:19:01.154 [INFO] [Thread-57406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:19:01.157 [DEBUG] [Thread-57406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:19:01.157 [DEBUG] [Thread-57406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:19:01.157 [DEBUG] [Thread-57406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:19:01.157 [DEBUG] [Thread-57406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:19:01.157 [DEBUG] [Thread-57406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:19:01.157 [DEBUG] [Thread-57406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:19:01.157 [DEBUG] [Thread-57406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:19:01.157 [DEBUG] [Thread-57406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] client lang: <none>
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] server lang: <none>
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] kex follows: False
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] Compression: none
2025-11-17T16:19:01.158 [DEBUG] [Thread-57406] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:19:01.173 [DEBUG] [Thread-57406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:19:01.173 [DEBUG] [Thread-57406] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:19:01.174 [DEBUG] [Thread-57406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:19:01.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:19:01.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:19:01.176 [DEBUG] [Thread-57406] [transport.py] [_log()] userauth is OK
2025-11-17T16:19:01.176 [DEBUG] [Thread-57406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:19:01.176 [DEBUG] [Thread-57406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:19:01.176 [DEBUG] [Thread-57406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:19:01.176 [DEBUG] [Thread-57406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:19:01.200 [INFO] [Thread-57406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:19:01.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:19:01.828 [DEBUG] [Thread-57406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:19:01.828 [DEBUG] [Thread-57406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:19:01.829 [DEBUG] [Thread-57406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:19:01.869 [DEBUG] [Thread-57406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:19:01.869 [DEBUG] [Thread-57406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:19:01.871 [DEBUG] [Thread-57406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:19:01.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:19:01.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:19:01.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:19:01.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:19:01.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:19:01.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:19:01.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:19:01.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:19:01.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:19:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.595885 -999.00  +22.60   8.96     21   -0.60 1 2 1 1 1   888    0 23.45 8.11 ----- 7.9 9.0 252.2 12.8 26.4 -17.9 26.3 -17.9 26.1 -17.6 26.2 -17.5
2025-11-17T16:19:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:19:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:19:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.595885
2025-11-17T16:19:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:19:01.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:19:01.892 [DEBUG] [Thread-57406] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:19:01.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:19:01.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:19:01.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:19:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:18:32', tmtdew=27.2, humidity=15.68, cloud=0.0, wind=13.75, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:18:04.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:19:01.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:19:01.992 [DEBUG] [Thread-57409] [transport.py] [_log()] starting thread (client mode): 0xd07e89a0
2025-11-17T16:19:01.992 [DEBUG] [Thread-57409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:19:02.007 [DEBUG] [Thread-57409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:19:02.008 [INFO] [Thread-57409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] client lang: <none>
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] server lang: <none>
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] kex follows: False
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:19:02.015 [DEBUG] [Thread-57409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:19:02.016 [DEBUG] [Thread-57409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:19:02.016 [DEBUG] [Thread-57409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:19:02.016 [DEBUG] [Thread-57409] [transport.py] [_log()] Compression: none
2025-11-17T16:19:02.016 [DEBUG] [Thread-57409] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:19:02.076 [DEBUG] [Thread-57409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:19:02.076 [DEBUG] [Thread-57409] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:19:02.077 [DEBUG] [Thread-57409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:19:02.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:19:02.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:19:02.134 [DEBUG] [Thread-57409] [transport.py] [_log()] userauth is OK
2025-11-17T16:19:02.135 [DEBUG] [Thread-57409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:19:02.135 [DEBUG] [Thread-57409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:19:02.135 [DEBUG] [Thread-57409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:19:02.135 [DEBUG] [Thread-57409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:19:02.153 [INFO] [Thread-57409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:19:02.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:19:02.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:19:03.047 [DEBUG] [Thread-57409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:19:03.047 [DEBUG] [Thread-57409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:19:03.094 [DEBUG] [Thread-57409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:19:03.094 [DEBUG] [Thread-57409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:19:03.103 [DEBUG] [Thread-57409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:19:03.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:19:03.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:19:03.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:19:03.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:19:03.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:19:03.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:19:03.136 [DEBUG] [Thread-57409] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:19:11.538 [DEBUG] [Thread-57411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:19:15.904 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:19:15.905 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:19:21.501 [DEBUG] [Thread-57412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:19:26.580 [DEBUG] [Thread-57413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:19:33.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:19:33.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:19:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:19:33.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 19, 4), 27.27, 15.61, 0.0, 15.63, 22.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:19:33.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:19:04
2025-11-17T16:19:33.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:19:34.085 [DEBUG] [Thread-57414] [transport.py] [_log()] starting thread (client mode): 0xd07ebee0
2025-11-17T16:19:34.085 [DEBUG] [Thread-57414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:19:34.105 [DEBUG] [Thread-57414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:19:34.105 [INFO] [Thread-57414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:19:34.108 [DEBUG] [Thread-57414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] client lang: <none>
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] server lang: <none>
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] kex follows: False
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] Compression: none
2025-11-17T16:19:34.109 [DEBUG] [Thread-57414] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:19:34.126 [DEBUG] [Thread-57414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:19:34.126 [DEBUG] [Thread-57414] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:19:34.127 [DEBUG] [Thread-57414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:19:34.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:19:34.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:19:34.129 [DEBUG] [Thread-57414] [transport.py] [_log()] userauth is OK
2025-11-17T16:19:34.129 [DEBUG] [Thread-57414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:19:34.129 [DEBUG] [Thread-57414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:19:34.129 [DEBUG] [Thread-57414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:19:34.129 [DEBUG] [Thread-57414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:19:34.165 [INFO] [Thread-57414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:19:34.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:19:34.814 [DEBUG] [Thread-57414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:19:34.814 [DEBUG] [Thread-57414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:19:34.815 [DEBUG] [Thread-57414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:19:34.855 [DEBUG] [Thread-57414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:19:34.855 [DEBUG] [Thread-57414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:19:34.858 [DEBUG] [Thread-57414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:19:34.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:19:34.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:19:34.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:19:34.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:19:34.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:19:34.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:19:34.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:19:34.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:19:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:19:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.596233 -999.00  +22.50  19.57     21   -0.60 1 2 1 1 1   888    0 23.09 8.72 ----- 15.2 19.6 258.2 24.4 26.4 -19.0 26.2 -19.0 26.0 -18.6 26.3 -18.5
2025-11-17T16:19:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:19:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:19:34.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.596233
2025-11-17T16:19:34.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:19:34.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:19:34.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:19:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:19:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:19:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:19:04', tmtdew=27.27, humidity=15.61, cloud=0.0, wind=15.63, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:18:34.531', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:19:34.884 [DEBUG] [Thread-57414] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:19:34.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:19:34.993 [DEBUG] [Thread-57417] [transport.py] [_log()] starting thread (client mode): 0xd07bcbe0
2025-11-17T16:19:34.993 [DEBUG] [Thread-57417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:19:35.010 [DEBUG] [Thread-57417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:19:35.010 [INFO] [Thread-57417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] client lang: <none>
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] server lang: <none>
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] kex follows: False
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:19:35.018 [DEBUG] [Thread-57417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:19:35.019 [DEBUG] [Thread-57417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:19:35.019 [DEBUG] [Thread-57417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:19:35.019 [DEBUG] [Thread-57417] [transport.py] [_log()] Compression: none
2025-11-17T16:19:35.019 [DEBUG] [Thread-57417] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:19:35.077 [DEBUG] [Thread-57417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:19:35.077 [DEBUG] [Thread-57417] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:19:35.078 [DEBUG] [Thread-57417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:19:35.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:19:35.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:19:35.134 [DEBUG] [Thread-57417] [transport.py] [_log()] userauth is OK
2025-11-17T16:19:35.134 [DEBUG] [Thread-57417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:19:35.134 [DEBUG] [Thread-57417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:19:35.134 [DEBUG] [Thread-57417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:19:35.134 [DEBUG] [Thread-57417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:19:35.153 [INFO] [Thread-57417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:19:35.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:19:35.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:19:36.040 [DEBUG] [Thread-57417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:19:36.040 [DEBUG] [Thread-57417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:19:36.088 [DEBUG] [Thread-57417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:19:36.088 [DEBUG] [Thread-57417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:19:36.097 [DEBUG] [Thread-57417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:19:36.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:19:36.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:19:36.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:19:36.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:19:36.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:19:36.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:19:36.131 [DEBUG] [Thread-57417] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:19:41.607 [DEBUG] [Thread-57419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:19:56.646 [DEBUG] [Thread-57420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:20:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:20:06.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:20:06.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:20:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 19, 36), 27.37, 15.63, 0.0, 18.44, 22.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:20:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:19:36
2025-11-17T16:20:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:20:07.083 [DEBUG] [Thread-57421] [transport.py] [_log()] starting thread (client mode): 0xd0776380
2025-11-17T16:20:07.083 [DEBUG] [Thread-57421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:20:07.103 [DEBUG] [Thread-57421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:20:07.103 [INFO] [Thread-57421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:20:07.106 [DEBUG] [Thread-57421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:20:07.106 [DEBUG] [Thread-57421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] client lang: <none>
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] server lang: <none>
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] kex follows: False
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] Compression: none
2025-11-17T16:20:07.107 [DEBUG] [Thread-57421] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:20:07.115 [DEBUG] [Thread-57421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:20:07.116 [DEBUG] [Thread-57421] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:20:07.116 [DEBUG] [Thread-57421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:20:07.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:20:07.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:20:07.118 [DEBUG] [Thread-57421] [transport.py] [_log()] userauth is OK
2025-11-17T16:20:07.118 [DEBUG] [Thread-57421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:20:07.118 [DEBUG] [Thread-57421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:20:07.118 [DEBUG] [Thread-57421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:20:07.118 [DEBUG] [Thread-57421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:20:07.141 [INFO] [Thread-57421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:20:07.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:20:11.676 [DEBUG] [Thread-57423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:20:12.080 [DEBUG] [Thread-57421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:20:12.081 [DEBUG] [Thread-57421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:20:12.081 [DEBUG] [Thread-57421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:20:12.121 [DEBUG] [Thread-57421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:20:12.121 [DEBUG] [Thread-57421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:20:12.124 [DEBUG] [Thread-57421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:20:12.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:20:12.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:20:12.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:20:12.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:20:12.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:20:12.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:20:12.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:20:12.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:20:12.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:20:12.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.596574 -999.00  +22.50  16.95     21   -0.60 1 2 1 1 1   888    0 23.16 8.39 ----- 19.7 16.9 258.8 24.9 26.2 -18.6 26.2 -18.4 25.9 -18.3 26.2 -18.2
2025-11-17T16:20:12.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:20:12.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:20:12.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.596574
2025-11-17T16:20:12.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:20:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:20:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:20:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:20:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:20:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:19:36', tmtdew=27.37, humidity=15.63, cloud=0.0, wind=18.44, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:19:03.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:20:12.184 [DEBUG] [Thread-57421] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:20:12.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:20:12.283 [DEBUG] [Thread-57425] [transport.py] [_log()] starting thread (client mode): 0xd0777b50
2025-11-17T16:20:12.283 [DEBUG] [Thread-57425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:20:12.297 [DEBUG] [Thread-57425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:20:12.297 [INFO] [Thread-57425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:20:12.304 [DEBUG] [Thread-57425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:20:12.304 [DEBUG] [Thread-57425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] client lang: <none>
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] server lang: <none>
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] kex follows: False
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] Compression: none
2025-11-17T16:20:12.305 [DEBUG] [Thread-57425] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:20:12.362 [DEBUG] [Thread-57425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:20:12.363 [DEBUG] [Thread-57425] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:20:12.363 [DEBUG] [Thread-57425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:20:12.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:20:12.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:20:12.418 [DEBUG] [Thread-57425] [transport.py] [_log()] userauth is OK
2025-11-17T16:20:12.418 [DEBUG] [Thread-57425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:20:12.418 [DEBUG] [Thread-57425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:20:12.418 [DEBUG] [Thread-57425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:20:12.418 [DEBUG] [Thread-57425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:20:12.437 [INFO] [Thread-57425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:20:12.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:20:12.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:20:13.310 [DEBUG] [Thread-57425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:20:13.310 [DEBUG] [Thread-57425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:20:13.357 [DEBUG] [Thread-57425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:20:13.357 [DEBUG] [Thread-57425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:20:13.366 [DEBUG] [Thread-57425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:20:13.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:20:13.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:20: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') -> 00000000
2025-11-17T16:20:13.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:20:13.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:20:13.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:20:13.400 [DEBUG] [Thread-57425] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:20:16.047 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:20:16.048 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:20:21.554 [DEBUG] [Thread-57427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:20:26.702 [DEBUG] [Thread-57428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:20:41.730 [DEBUG] [Thread-57429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:20:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:20:43.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:20:43.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:20:44.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 20, 40), 27.43, 15.56, 0.0, 17.82, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:20:44.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:20:40
2025-11-17T16:20:44.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:20:44.358 [DEBUG] [Thread-57430] [transport.py] [_log()] starting thread (client mode): 0xd070e4d0
2025-11-17T16:20:44.358 [DEBUG] [Thread-57430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:20:44.378 [DEBUG] [Thread-57430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:20:44.378 [INFO] [Thread-57430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:20:44.381 [DEBUG] [Thread-57430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:20:44.381 [DEBUG] [Thread-57430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:20:44.381 [DEBUG] [Thread-57430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:20:44.381 [DEBUG] [Thread-57430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:20:44.381 [DEBUG] [Thread-57430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:20:44.381 [DEBUG] [Thread-57430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:20:44.381 [DEBUG] [Thread-57430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] client lang: <none>
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] server lang: <none>
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] kex follows: False
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] Compression: none
2025-11-17T16:20:44.382 [DEBUG] [Thread-57430] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:20:44.399 [DEBUG] [Thread-57430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:20:44.399 [DEBUG] [Thread-57430] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:20:44.400 [DEBUG] [Thread-57430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:20:44.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:20:44.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:20:44.402 [DEBUG] [Thread-57430] [transport.py] [_log()] userauth is OK
2025-11-17T16:20:44.402 [DEBUG] [Thread-57430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:20:44.402 [DEBUG] [Thread-57430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:20:44.402 [DEBUG] [Thread-57430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:20:44.402 [DEBUG] [Thread-57430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:20:44.420 [INFO] [Thread-57430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:20:44.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:20:45.004 [DEBUG] [Thread-57430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:20:45.004 [DEBUG] [Thread-57430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:20:45.005 [DEBUG] [Thread-57430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:20:45.045 [DEBUG] [Thread-57430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:20:45.045 [DEBUG] [Thread-57430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:20:45.048 [DEBUG] [Thread-57430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:20:45.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:20:45.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:20:45.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:20:45.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:20:45.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:20:45.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:20:45.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:20:45.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:20:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:20:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.597274 -999.00  +22.50  16.20     21   -0.60 1 2 1 1 1   888    0 23.73 7.08 ----- 14.9 16.2 261.0 19.9 26.2 -19.2 26.1 -18.5 25.9 -18.1 26.1 -18.4
2025-11-17T16:20:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:20:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:20:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.597274
2025-11-17T16:20:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:20:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:20:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:20:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:20:45.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:20:45.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:20:40', tmtdew=27.43, humidity=15.56, cloud=0.0, wind=17.82, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:20:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:20:45.074 [DEBUG] [Thread-57430] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:20:45.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:20:45.172 [DEBUG] [Thread-57433] [transport.py] [_log()] starting thread (client mode): 0xd07e9750
2025-11-17T16:20:45.172 [DEBUG] [Thread-57433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:20:45.187 [DEBUG] [Thread-57433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:20:45.187 [INFO] [Thread-57433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:20:45.194 [DEBUG] [Thread-57433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:20:45.194 [DEBUG] [Thread-57433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] client lang: <none>
2025-11-17T16:20:45.195 [DEBUG] [Thread-57433] [transport.py] [_log()] server lang: <none>
2025-11-17T16:20:45.196 [DEBUG] [Thread-57433] [transport.py] [_log()] kex follows: False
2025-11-17T16:20:45.196 [DEBUG] [Thread-57433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:20:45.196 [DEBUG] [Thread-57433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:20:45.196 [DEBUG] [Thread-57433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:20:45.196 [DEBUG] [Thread-57433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:20:45.196 [DEBUG] [Thread-57433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:20:45.196 [DEBUG] [Thread-57433] [transport.py] [_log()] Compression: none
2025-11-17T16:20:45.196 [DEBUG] [Thread-57433] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:20:45.254 [DEBUG] [Thread-57433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:20:45.254 [DEBUG] [Thread-57433] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:20:45.255 [DEBUG] [Thread-57433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:20:45.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:20:45.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:20:45.310 [DEBUG] [Thread-57433] [transport.py] [_log()] userauth is OK
2025-11-17T16:20:45.310 [DEBUG] [Thread-57433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:20:45.310 [DEBUG] [Thread-57433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:20:45.310 [DEBUG] [Thread-57433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:20:45.310 [DEBUG] [Thread-57433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:20:45.329 [INFO] [Thread-57433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:20:45.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:20:45.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:20:46.175 [DEBUG] [Thread-57433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:20:46.175 [DEBUG] [Thread-57433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:20:46.223 [DEBUG] [Thread-57433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:20:46.223 [DEBUG] [Thread-57433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:20:46.232 [DEBUG] [Thread-57433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:20:46.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:20:46.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:20:46.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:20:46.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:20:46.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:20:46.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:20:46.267 [DEBUG] [Thread-57433] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:20:56.757 [DEBUG] [Thread-57435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:21:11.797 [DEBUG] [Thread-57436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:21:16.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:21:16.190 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:21:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:21:16.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:21:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:21:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 21, 12), 27.46, 15.53, 0.0, 16.96, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:21:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:21:12
2025-11-17T16:21:17.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:21:17.201 [DEBUG] [Thread-57437] [transport.py] [_log()] starting thread (client mode): 0xd07ea710
2025-11-17T16:21:17.201 [DEBUG] [Thread-57437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:21:17.212 [DEBUG] [Thread-57437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:21:17.212 [INFO] [Thread-57437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] client lang: <none>
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] server lang: <none>
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] kex follows: False
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:21:17.215 [DEBUG] [Thread-57437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:21:17.216 [DEBUG] [Thread-57437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:21:17.216 [DEBUG] [Thread-57437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:21:17.216 [DEBUG] [Thread-57437] [transport.py] [_log()] Compression: none
2025-11-17T16:21:17.216 [DEBUG] [Thread-57437] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:21:17.223 [DEBUG] [Thread-57437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:21:17.223 [DEBUG] [Thread-57437] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:21:17.224 [DEBUG] [Thread-57437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:21:17.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:21:17.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:21:17.224 [DEBUG] [Thread-57437] [transport.py] [_log()] userauth is OK
2025-11-17T16:21:17.224 [DEBUG] [Thread-57437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:21:17.224 [DEBUG] [Thread-57437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:21:17.224 [DEBUG] [Thread-57437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:21:17.225 [DEBUG] [Thread-57437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:21:17.236 [INFO] [Thread-57437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:21:17.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:21:17.912 [DEBUG] [Thread-57437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:21:17.912 [DEBUG] [Thread-57437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:21:17.912 [DEBUG] [Thread-57437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:21:17.953 [DEBUG] [Thread-57437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:21:17.953 [DEBUG] [Thread-57437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:21:17.955 [DEBUG] [Thread-57437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:21:17.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:21:17.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:21:17.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:21:17.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:21:17.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:21:17.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:21:17.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:21:17.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.597616 -999.00  +22.60  10.40     21   -0.50 1 2 1 1 1   888    0 23.22 5.88 ----- 17.3 10.4 251.2 22.4 26.2 -18.7 26.1 -18.5 25.8 -18.1 26.1 -17.7
2025-11-17T16:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.597616
2025-11-17T16:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:21:17.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:21:12', tmtdew=27.46, humidity=15.53, cloud=0.0, wind=16.96, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:20:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:21:17.976 [DEBUG] [Thread-57437] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:21:18.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:21:18.071 [DEBUG] [Thread-57440] [transport.py] [_log()] starting thread (client mode): 0xd07e8910
2025-11-17T16:21:18.071 [DEBUG] [Thread-57440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:21:18.085 [DEBUG] [Thread-57440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:21:18.086 [INFO] [Thread-57440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:21:18.093 [DEBUG] [Thread-57440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:21:18.093 [DEBUG] [Thread-57440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:21:18.093 [DEBUG] [Thread-57440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:21:18.093 [DEBUG] [Thread-57440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:21:18.093 [DEBUG] [Thread-57440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:21:18.093 [DEBUG] [Thread-57440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] client lang: <none>
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] server lang: <none>
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] kex follows: False
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] Compression: none
2025-11-17T16:21:18.094 [DEBUG] [Thread-57440] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:21:18.149 [DEBUG] [Thread-57440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:21:18.149 [DEBUG] [Thread-57440] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:21:18.150 [DEBUG] [Thread-57440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:21:18.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:21:18.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:21:18.206 [DEBUG] [Thread-57440] [transport.py] [_log()] userauth is OK
2025-11-17T16:21:18.206 [DEBUG] [Thread-57440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:21:18.206 [DEBUG] [Thread-57440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:21:18.206 [DEBUG] [Thread-57440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:21:18.206 [DEBUG] [Thread-57440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:21:18.225 [INFO] [Thread-57440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:21:18.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:21:18.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:21:19.103 [DEBUG] [Thread-57440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:21:19.104 [DEBUG] [Thread-57440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:21:19.151 [DEBUG] [Thread-57440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:21:19.151 [DEBUG] [Thread-57440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:21:19.161 [DEBUG] [Thread-57440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:21:19.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:21:19.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:21:19.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:21:19.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:21:19.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:21:19.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:21:19.197 [DEBUG] [Thread-57440] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:21:21.607 [DEBUG] [Thread-57442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:21:26.827 [DEBUG] [Thread-57443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:21:41.869 [DEBUG] [Thread-57444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:21:49.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:21:49.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:21:49.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:21:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 21, 44), 27.49, 15.66, 0.0, 20.47, 22.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:21:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:21:44
2025-11-17T16:21:50.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:21:50.157 [DEBUG] [Thread-57445] [transport.py] [_log()] starting thread (client mode): 0xd0776fb0
2025-11-17T16:21:50.157 [DEBUG] [Thread-57445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:21:50.177 [DEBUG] [Thread-57445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:21:50.177 [INFO] [Thread-57445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] client lang: <none>
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] server lang: <none>
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] kex follows: False
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] Compression: none
2025-11-17T16:21:50.180 [DEBUG] [Thread-57445] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:21:50.197 [DEBUG] [Thread-57445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:21:50.197 [DEBUG] [Thread-57445] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:21:50.198 [DEBUG] [Thread-57445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:21:50.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:21:50.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:21:50.199 [DEBUG] [Thread-57445] [transport.py] [_log()] userauth is OK
2025-11-17T16:21:50.199 [DEBUG] [Thread-57445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:21:50.200 [DEBUG] [Thread-57445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:21:50.200 [DEBUG] [Thread-57445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:21:50.200 [DEBUG] [Thread-57445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:21:50.223 [INFO] [Thread-57445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:21:50.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:21:50.829 [DEBUG] [Thread-57445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:21:50.829 [DEBUG] [Thread-57445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:21:50.829 [DEBUG] [Thread-57445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:21:50.869 [DEBUG] [Thread-57445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:21:50.869 [DEBUG] [Thread-57445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:21:50.872 [DEBUG] [Thread-57445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:21:50.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:21:50.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:21:50.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:21:50.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:21:50.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:21:50.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:21:50.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:21:50.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:21:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:21:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.597969 -999.00  +22.70  13.33     21   -0.50 1 2 1 1 1   888    0 23.48 3.83 ----- 17.8 13.3 246.3 17.6 26.2 -18.5 26.1 -18.5 25.8 -18.5 26.1 -18.1
2025-11-17T16:21:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:21:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:21:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.597969
2025-11-17T16:21:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:21:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:21:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:21:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:21:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:21:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:21:44', tmtdew=27.49, humidity=15.66, cloud=0.0, wind=20.47, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:21:04.522', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:21:50.898 [DEBUG] [Thread-57445] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:21:50.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:21:50.999 [DEBUG] [Thread-57448] [transport.py] [_log()] starting thread (client mode): 0xd07755a0
2025-11-17T16:21:50.999 [DEBUG] [Thread-57448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:21:51.014 [DEBUG] [Thread-57448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:21:51.014 [INFO] [Thread-57448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:21:51.021 [DEBUG] [Thread-57448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:21:51.021 [DEBUG] [Thread-57448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] client lang: <none>
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] server lang: <none>
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] kex follows: False
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] Compression: none
2025-11-17T16:21:51.022 [DEBUG] [Thread-57448] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:21:51.082 [DEBUG] [Thread-57448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:21:51.082 [DEBUG] [Thread-57448] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:21:51.083 [DEBUG] [Thread-57448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:21:51.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:21:51.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:21:51.137 [DEBUG] [Thread-57448] [transport.py] [_log()] userauth is OK
2025-11-17T16:21:51.138 [DEBUG] [Thread-57448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:21:51.138 [DEBUG] [Thread-57448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:21:51.138 [DEBUG] [Thread-57448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:21:51.138 [DEBUG] [Thread-57448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:21:51.164 [INFO] [Thread-57448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:21:51.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:21:51.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:21:52.069 [DEBUG] [Thread-57448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:21:52.070 [DEBUG] [Thread-57448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:21:52.117 [DEBUG] [Thread-57448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:21:52.117 [DEBUG] [Thread-57448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:21:52.125 [DEBUG] [Thread-57448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:21:52.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:21:52.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:21:52.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:21:52.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:21:52.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:21:52.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:21:52.158 [DEBUG] [Thread-57448] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:21:56.893 [DEBUG] [Thread-57450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:22:11.937 [DEBUG] [Thread-57451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:22:16.331 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:22:16.332 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:22:21.655 [DEBUG] [Thread-57452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:22:22.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:22:22.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:22:22.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:22:22.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 22, 16), 27.54, 15.6, 0.0, 21.88, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:22:22.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:22:16
2025-11-17T16:22:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:22:23.152 [DEBUG] [Thread-57453] [transport.py] [_log()] starting thread (client mode): 0xd07eb0d0
2025-11-17T16:22:23.152 [DEBUG] [Thread-57453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:22:23.171 [DEBUG] [Thread-57453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:22:23.172 [INFO] [Thread-57453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] client lang: <none>
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] server lang: <none>
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] kex follows: False
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] Compression: none
2025-11-17T16:22:23.175 [DEBUG] [Thread-57453] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:22:23.195 [DEBUG] [Thread-57453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:22:23.195 [DEBUG] [Thread-57453] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:22:23.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:22:23.195 [DEBUG] [Thread-57453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:22:23.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:22:23.240 [DEBUG] [Thread-57453] [transport.py] [_log()] userauth is OK
2025-11-17T16:22:23.240 [DEBUG] [Thread-57453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:22:23.240 [DEBUG] [Thread-57453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:22:23.240 [DEBUG] [Thread-57453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:22:23.240 [DEBUG] [Thread-57453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:22:23.249 [INFO] [Thread-57453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:22:23.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:22:23.916 [DEBUG] [Thread-57453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:22:23.916 [DEBUG] [Thread-57453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:22:23.916 [DEBUG] [Thread-57453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:22:23.957 [DEBUG] [Thread-57453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:22:23.957 [DEBUG] [Thread-57453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:22:23.959 [DEBUG] [Thread-57453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:22:23.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:22:23.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:22:23.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:22:23.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:22:23.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:22:23.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:22:23.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.598316 -999.00  +22.90   6.83     21   -0.40 1 2 1 1 1   888    0 23.05 2.08 ----- 9.8 6.8 257.0 16.3 26.2 -18.4 26.1 -18.3 25.9 -17.7 26.1 -17.8
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.598316
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:22:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:22:16', tmtdew=27.54, humidity=15.6, cloud=0.0, wind=21.88, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:21:34.502', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:22:23.978 [DEBUG] [Thread-57453] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:22:24.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:22:24.063 [DEBUG] [Thread-57456] [transport.py] [_log()] starting thread (client mode): 0xd3161ba0
2025-11-17T16:22:24.063 [DEBUG] [Thread-57456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:22:24.078 [DEBUG] [Thread-57456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:22:24.078 [INFO] [Thread-57456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] client lang: <none>
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] server lang: <none>
2025-11-17T16:22:24.085 [DEBUG] [Thread-57456] [transport.py] [_log()] kex follows: False
2025-11-17T16:22:24.086 [DEBUG] [Thread-57456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:22:24.086 [DEBUG] [Thread-57456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:22:24.086 [DEBUG] [Thread-57456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:22:24.086 [DEBUG] [Thread-57456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:22:24.086 [DEBUG] [Thread-57456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:22:24.086 [DEBUG] [Thread-57456] [transport.py] [_log()] Compression: none
2025-11-17T16:22:24.086 [DEBUG] [Thread-57456] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:22:24.145 [DEBUG] [Thread-57456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:22:24.145 [DEBUG] [Thread-57456] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:22:24.145 [DEBUG] [Thread-57456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:22:24.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:22:24.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:22:24.202 [DEBUG] [Thread-57456] [transport.py] [_log()] userauth is OK
2025-11-17T16:22:24.202 [DEBUG] [Thread-57456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:22:24.202 [DEBUG] [Thread-57456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:22:24.202 [DEBUG] [Thread-57456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:22:24.202 [DEBUG] [Thread-57456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:22:24.216 [INFO] [Thread-57456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:22:24.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:22:24.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:22:25.050 [DEBUG] [Thread-57456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:22:25.050 [DEBUG] [Thread-57456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:22:25.098 [DEBUG] [Thread-57456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:22:25.098 [DEBUG] [Thread-57456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:22:25.106 [DEBUG] [Thread-57456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:22:25.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:22:25.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:22:25.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:22:25.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:22:25.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:22:25.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:22:25.137 [DEBUG] [Thread-57456] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:22:26.966 [DEBUG] [Thread-57458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:22:42.006 [DEBUG] [Thread-57459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:22:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:22:55.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:22:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:22:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 22, 48), 27.96, 14.95, 0.0, 20.5, 23.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:22:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:22:48
2025-11-17T16:22:55.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:22:56.085 [DEBUG] [Thread-57460] [transport.py] [_log()] starting thread (client mode): 0xd07756f0
2025-11-17T16:22:56.085 [DEBUG] [Thread-57460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:22:56.106 [DEBUG] [Thread-57460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:22:56.106 [INFO] [Thread-57460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] client lang: <none>
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] server lang: <none>
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] kex follows: False
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:22:56.109 [DEBUG] [Thread-57460] [transport.py] [_log()] Compression: none
2025-11-17T16:22:56.110 [DEBUG] [Thread-57460] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:22:56.125 [DEBUG] [Thread-57460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:22:56.125 [DEBUG] [Thread-57460] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:22:56.125 [DEBUG] [Thread-57460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:22:56.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:22:56.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:22:56.126 [DEBUG] [Thread-57460] [transport.py] [_log()] userauth is OK
2025-11-17T16:22:56.126 [DEBUG] [Thread-57460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:22:56.126 [DEBUG] [Thread-57460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:22:56.126 [DEBUG] [Thread-57460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:22:56.126 [DEBUG] [Thread-57460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:22:56.137 [INFO] [Thread-57460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:22:56.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:22:56.753 [DEBUG] [Thread-57460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:22:56.754 [DEBUG] [Thread-57460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:22:56.754 [DEBUG] [Thread-57460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:22:56.794 [DEBUG] [Thread-57460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:22:56.795 [DEBUG] [Thread-57460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:22:56.798 [DEBUG] [Thread-57460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:22:56.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:22:56.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:22:56.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:22:56.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:22:56.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:22:56.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:22:56.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:22:56.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:22:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:22:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.598663 -999.00  +23.20  17.99     20   -0.40 1 2 1 1 1   888    0 23.37 0.96 ----- 23.5 18.0 276.8 21.8 26.2 -18.7 26.1 -18.9 25.8 -18.7 26.2 -18.0
2025-11-17T16:22:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:22:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:22:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.598663
2025-11-17T16:22:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:22:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:22:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:22:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:22:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:22:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:22:48', tmtdew=27.96, humidity=14.95, cloud=0.0, wind=20.5, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:22:04.483', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:22:56.823 [DEBUG] [Thread-57460] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:22:56.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:22:56.923 [DEBUG] [Thread-57463] [transport.py] [_log()] starting thread (client mode): 0xd070dc00
2025-11-17T16:22:56.923 [DEBUG] [Thread-57463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:22:56.938 [DEBUG] [Thread-57463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:22:56.938 [INFO] [Thread-57463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] client lang: <none>
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] server lang: <none>
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] kex follows: False
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] Compression: none
2025-11-17T16:22:56.946 [DEBUG] [Thread-57463] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:22:57.005 [DEBUG] [Thread-57463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:22:57.005 [DEBUG] [Thread-57463] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:22:57.006 [DEBUG] [Thread-57463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:22:57.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:22:57.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:22:57.036 [DEBUG] [Thread-57465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:22:57.062 [DEBUG] [Thread-57463] [transport.py] [_log()] userauth is OK
2025-11-17T16:22:57.062 [DEBUG] [Thread-57463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:22:57.062 [DEBUG] [Thread-57463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:22:57.062 [DEBUG] [Thread-57463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:22:57.062 [DEBUG] [Thread-57463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:22:57.085 [INFO] [Thread-57463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:22:57.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:22:57.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:22:57.921 [DEBUG] [Thread-57463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:22:57.921 [DEBUG] [Thread-57463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:22:57.969 [DEBUG] [Thread-57463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:22:57.969 [DEBUG] [Thread-57463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:22:57.978 [DEBUG] [Thread-57463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:22:57.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:22:57.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:22:58.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:22:58.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:22:58.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:22:58.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:22:58.018 [DEBUG] [Thread-57463] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:23:12.078 [DEBUG] [Thread-57466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:23:16.473 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:23:16.474 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:23:21.704 [DEBUG] [Thread-57467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:23:27.107 [DEBUG] [Thread-57468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:23:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:23:28.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:23:28.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:23:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 23, 20), 28.02, 14.88, 0.0, 20.47, 23.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:23:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:23:20
2025-11-17T16:23:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:23:28.965 [DEBUG] [Thread-57469] [transport.py] [_log()] starting thread (client mode): 0xd070ecb0
2025-11-17T16:23:28.965 [DEBUG] [Thread-57469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:23:28.985 [DEBUG] [Thread-57469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:23:28.985 [INFO] [Thread-57469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:23:28.988 [DEBUG] [Thread-57469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] client lang: <none>
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] server lang: <none>
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] kex follows: False
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] Compression: none
2025-11-17T16:23:28.989 [DEBUG] [Thread-57469] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:23:29.009 [DEBUG] [Thread-57469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:23:29.010 [DEBUG] [Thread-57469] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:23:29.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:23:29.011 [DEBUG] [Thread-57469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:23:29.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:23:29.013 [DEBUG] [Thread-57469] [transport.py] [_log()] userauth is OK
2025-11-17T16:23:29.013 [DEBUG] [Thread-57469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:23:29.013 [DEBUG] [Thread-57469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:23:29.013 [DEBUG] [Thread-57469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:23:29.013 [DEBUG] [Thread-57469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:23:29.031 [INFO] [Thread-57469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:23:29.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:23:29.757 [DEBUG] [Thread-57469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:23:29.757 [DEBUG] [Thread-57469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:23:29.758 [DEBUG] [Thread-57469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:23:29.798 [DEBUG] [Thread-57469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:23:29.799 [DEBUG] [Thread-57469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:23:29.802 [DEBUG] [Thread-57469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:23:29.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:23:29.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:23:29.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:23:29.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:23:29.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:23:29.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:23:29.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:23:29.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:23:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:23:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.599010 -999.00  +22.80  13.74     21   -0.50 1 2 1 1 1   888    0 23.10 -0.26 ----- 12.5 13.7 274.2 23.8 26.1 -19.4 26.0 -18.4 25.8 -17.6 26.1 -18.5
2025-11-17T16:23:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:23:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:23:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.599010
2025-11-17T16:23:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:23:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:23:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:23:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:23:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:23:29.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:23:20', tmtdew=28.02, humidity=14.88, cloud=0.0, wind=20.47, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:22:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:23:29.824 [DEBUG] [Thread-57469] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:23:29.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:23:29.920 [DEBUG] [Thread-57472] [transport.py] [_log()] starting thread (client mode): 0xd07e8760
2025-11-17T16:23:29.920 [DEBUG] [Thread-57472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:23:29.935 [DEBUG] [Thread-57472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:23:29.935 [INFO] [Thread-57472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:23:29.943 [DEBUG] [Thread-57472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:23:29.943 [DEBUG] [Thread-57472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:23:29.943 [DEBUG] [Thread-57472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:23:29.943 [DEBUG] [Thread-57472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:23:29.943 [DEBUG] [Thread-57472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:23:29.943 [DEBUG] [Thread-57472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:23:29.943 [DEBUG] [Thread-57472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:23:29.943 [DEBUG] [Thread-57472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] client lang: <none>
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] server lang: <none>
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] kex follows: False
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:23:29.944 [DEBUG] [Thread-57472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:23:29.945 [DEBUG] [Thread-57472] [transport.py] [_log()] Compression: none
2025-11-17T16:23:29.945 [DEBUG] [Thread-57472] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:23:30.005 [DEBUG] [Thread-57472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:23:30.005 [DEBUG] [Thread-57472] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:23:30.005 [DEBUG] [Thread-57472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:23:30.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:23:30.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:23:30.062 [DEBUG] [Thread-57472] [transport.py] [_log()] userauth is OK
2025-11-17T16:23:30.062 [DEBUG] [Thread-57472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:23:30.062 [DEBUG] [Thread-57472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:23:30.062 [DEBUG] [Thread-57472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:23:30.063 [DEBUG] [Thread-57472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:23:30.081 [INFO] [Thread-57472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:23:30.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:23:30.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:23:30.945 [DEBUG] [Thread-57472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:23:30.945 [DEBUG] [Thread-57472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:23:30.993 [DEBUG] [Thread-57472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:23:30.993 [DEBUG] [Thread-57472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:23:31.002 [DEBUG] [Thread-57472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:23:31.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:23:31.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:23:31.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:23:31.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:23:31.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:23:31.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:23:31.037 [DEBUG] [Thread-57472] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:23:42.134 [DEBUG] [Thread-57474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:23:57.163 [DEBUG] [Thread-57475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:24:01.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:24:01.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:24:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:24:01.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 23, 52), 27.86, 15.36, 0.0, 21.61, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:24:01.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:23:52
2025-11-17T16:24:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:24:01.985 [DEBUG] [Thread-57476] [transport.py] [_log()] starting thread (client mode): 0xd07743d0
2025-11-17T16:24:01.985 [DEBUG] [Thread-57476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:24:02.005 [DEBUG] [Thread-57476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:24:02.005 [INFO] [Thread-57476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] client lang: <none>
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] server lang: <none>
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] kex follows: False
2025-11-17T16:24:02.009 [DEBUG] [Thread-57476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:24:02.010 [DEBUG] [Thread-57476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:24:02.010 [DEBUG] [Thread-57476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:24:02.010 [DEBUG] [Thread-57476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:24:02.010 [DEBUG] [Thread-57476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:24:02.010 [DEBUG] [Thread-57476] [transport.py] [_log()] Compression: none
2025-11-17T16:24:02.010 [DEBUG] [Thread-57476] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:24:02.029 [DEBUG] [Thread-57476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:24:02.030 [DEBUG] [Thread-57476] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:24:02.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:24:02.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:24:02.032 [DEBUG] [Thread-57476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:24:02.033 [DEBUG] [Thread-57476] [transport.py] [_log()] userauth is OK
2025-11-17T16:24:02.033 [DEBUG] [Thread-57476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:24:02.033 [DEBUG] [Thread-57476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:24:02.033 [DEBUG] [Thread-57476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:24:02.033 [DEBUG] [Thread-57476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:24:02.056 [INFO] [Thread-57476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:24:02.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:24:02.694 [DEBUG] [Thread-57476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:24:02.694 [DEBUG] [Thread-57476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:24:02.695 [DEBUG] [Thread-57476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:24:02.735 [DEBUG] [Thread-57476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:24:02.736 [DEBUG] [Thread-57476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:24:02.738 [DEBUG] [Thread-57476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:24:02.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:24:02.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:24:02.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:24:02.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:24:02.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:24:02.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:24:02.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:24:02.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.599358 -999.00  +23.00  17.00     20   -0.40 1 2 1 1 1   888    0 23.35 -1.61 ----- 21.1 17.0 276.1 18.6 26.2 -18.3 26.1 -18.2 25.9 -18.4 26.1 -17.3
2025-11-17T16:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.599358
2025-11-17T16:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:23:52', tmtdew=27.86, humidity=15.36, cloud=0.0, wind=21.61, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:23:04.531', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:24:02.763 [DEBUG] [Thread-57476] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:24:02.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:24:02.859 [DEBUG] [Thread-57479] [transport.py] [_log()] starting thread (client mode): 0xd07748e0
2025-11-17T16:24:02.859 [DEBUG] [Thread-57479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:24:02.874 [DEBUG] [Thread-57479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:24:02.874 [INFO] [Thread-57479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:24:02.882 [DEBUG] [Thread-57479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:24:02.882 [DEBUG] [Thread-57479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:24:02.882 [DEBUG] [Thread-57479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:24:02.882 [DEBUG] [Thread-57479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:24:02.882 [DEBUG] [Thread-57479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] client lang: <none>
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] server lang: <none>
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] kex follows: False
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:24:02.883 [DEBUG] [Thread-57479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:24:02.884 [DEBUG] [Thread-57479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:24:02.884 [DEBUG] [Thread-57479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:24:02.884 [DEBUG] [Thread-57479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:24:02.884 [DEBUG] [Thread-57479] [transport.py] [_log()] Compression: none
2025-11-17T16:24:02.884 [DEBUG] [Thread-57479] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:24:02.942 [DEBUG] [Thread-57479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:24:02.942 [DEBUG] [Thread-57479] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:24:02.943 [DEBUG] [Thread-57479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:24:02.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:24:02.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:24:02.997 [DEBUG] [Thread-57479] [transport.py] [_log()] userauth is OK
2025-11-17T16:24:02.998 [DEBUG] [Thread-57479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:24:02.998 [DEBUG] [Thread-57479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:24:02.998 [DEBUG] [Thread-57479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:24:02.998 [DEBUG] [Thread-57479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:24:03.020 [INFO] [Thread-57479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:24:03.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:24:03.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:24:03.943 [DEBUG] [Thread-57479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:24:03.943 [DEBUG] [Thread-57479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:24:03.992 [DEBUG] [Thread-57479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:24:03.992 [DEBUG] [Thread-57479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:24:04.004 [DEBUG] [Thread-57479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:24:04.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:24: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')
2025-11-17T16:24:04.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:24:04.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:24:04.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:24:04.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:24:04.048 [DEBUG] [Thread-57479] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:24:12.193 [DEBUG] [Thread-57481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:24:16.616 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:24:16.617 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:24:21.752 [DEBUG] [Thread-57482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:24:27.233 [DEBUG] [Thread-57483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:24:34.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:24:34.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:24:34.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:24:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 24, 24), 27.9, 15.33, 0.0, 21.37, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:24:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:24:24
2025-11-17T16:24:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:24:34.970 [DEBUG] [Thread-57484] [transport.py] [_log()] starting thread (client mode): 0xd07778e0
2025-11-17T16:24:34.970 [DEBUG] [Thread-57484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:24:34.991 [DEBUG] [Thread-57484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:24:34.992 [INFO] [Thread-57484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] client lang: <none>
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] server lang: <none>
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] kex follows: False
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] Compression: none
2025-11-17T16:24:34.995 [DEBUG] [Thread-57484] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:24:35.012 [DEBUG] [Thread-57484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:24:35.012 [DEBUG] [Thread-57484] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:24:35.013 [DEBUG] [Thread-57484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:24:35.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:24:35.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:24:35.015 [DEBUG] [Thread-57484] [transport.py] [_log()] userauth is OK
2025-11-17T16:24:35.015 [DEBUG] [Thread-57484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:24:35.015 [DEBUG] [Thread-57484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:24:35.015 [DEBUG] [Thread-57484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:24:35.015 [DEBUG] [Thread-57484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:24:35.025 [INFO] [Thread-57484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:24:35.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:24:35.737 [DEBUG] [Thread-57484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:24:35.737 [DEBUG] [Thread-57484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:24:35.738 [DEBUG] [Thread-57484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:24:35.778 [DEBUG] [Thread-57484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:24:35.778 [DEBUG] [Thread-57484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:24:35.782 [DEBUG] [Thread-57484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:24:35.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:24:35.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:24:35.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:24:35.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:24:35.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:24:35.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:24:35.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:24:35.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:24:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:24:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.599705 -999.00  +23.10  20.43     20   -0.50 1 2 1 1 1   888    0 23.05 -3.10 ----- 19.4 20.4 268.2 24.7 26.2 -18.4 26.1 -18.9 25.7 -20.7 26.2 -17.5
2025-11-17T16:24:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:24:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:24:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.599705
2025-11-17T16:24:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:24:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:24:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:24:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:24:35.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:24:35.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:24:24', tmtdew=27.9, humidity=15.33, cloud=0.0, wind=21.37, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:23:34.512', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:24:35.809 [DEBUG] [Thread-57484] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:24:35.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:24:35.906 [DEBUG] [Thread-57487] [transport.py] [_log()] starting thread (client mode): 0xd3160c10
2025-11-17T16:24:35.906 [DEBUG] [Thread-57487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:24:35.924 [DEBUG] [Thread-57487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:24:35.924 [INFO] [Thread-57487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:24:35.931 [DEBUG] [Thread-57487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:24:35.932 [DEBUG] [Thread-57487] [transport.py] [_log()] client lang: <none>
2025-11-17T16:24:35.933 [DEBUG] [Thread-57487] [transport.py] [_log()] server lang: <none>
2025-11-17T16:24:35.933 [DEBUG] [Thread-57487] [transport.py] [_log()] kex follows: False
2025-11-17T16:24:35.933 [DEBUG] [Thread-57487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:24:35.933 [DEBUG] [Thread-57487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:24:35.933 [DEBUG] [Thread-57487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:24:35.933 [DEBUG] [Thread-57487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:24:35.933 [DEBUG] [Thread-57487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:24:35.934 [DEBUG] [Thread-57487] [transport.py] [_log()] Compression: none
2025-11-17T16:24:35.934 [DEBUG] [Thread-57487] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:24:35.990 [DEBUG] [Thread-57487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:24:35.990 [DEBUG] [Thread-57487] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:24:35.991 [DEBUG] [Thread-57487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:24:35.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:24:35.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:24:36.045 [DEBUG] [Thread-57487] [transport.py] [_log()] userauth is OK
2025-11-17T16:24:36.046 [DEBUG] [Thread-57487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:24:36.046 [DEBUG] [Thread-57487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:24:36.046 [DEBUG] [Thread-57487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:24:36.046 [DEBUG] [Thread-57487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:24:36.065 [INFO] [Thread-57487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:24:36.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:24:36.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:24:36.910 [DEBUG] [Thread-57487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:24:36.910 [DEBUG] [Thread-57487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:24:36.957 [DEBUG] [Thread-57487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:24:36.957 [DEBUG] [Thread-57487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:24:36.966 [DEBUG] [Thread-57487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:24:36.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:24:36.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:24:36.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:24:36.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:24:36.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:24:36.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:24:37.000 [DEBUG] [Thread-57487] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:24:42.263 [DEBUG] [Thread-57489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:24:57.302 [DEBUG] [Thread-57490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:25:07.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:25:07.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:25:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:25:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 24, 56), 28.14, 15.2, 0.0, 25.88, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:25:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:24:56
2025-11-17T16:25:07.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:25:07.939 [DEBUG] [Thread-57491] [transport.py] [_log()] starting thread (client mode): 0xd070eb60
2025-11-17T16:25:07.939 [DEBUG] [Thread-57491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:25:07.959 [DEBUG] [Thread-57491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:25:07.959 [INFO] [Thread-57491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] client lang: <none>
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] server lang: <none>
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] kex follows: False
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:25:07.962 [DEBUG] [Thread-57491] [transport.py] [_log()] Compression: none
2025-11-17T16:25:07.963 [DEBUG] [Thread-57491] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:25:07.978 [DEBUG] [Thread-57491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:25:07.978 [DEBUG] [Thread-57491] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:25:07.978 [DEBUG] [Thread-57491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:25:07.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:25:07.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:25:07.979 [DEBUG] [Thread-57491] [transport.py] [_log()] userauth is OK
2025-11-17T16:25:07.979 [DEBUG] [Thread-57491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:25:07.979 [DEBUG] [Thread-57491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:25:07.979 [DEBUG] [Thread-57491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:25:07.979 [DEBUG] [Thread-57491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:25:07.988 [INFO] [Thread-57491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:25:07.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:25:11.003 [DEBUG] [Thread-57491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:25:11.004 [DEBUG] [Thread-57491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:25:11.004 [DEBUG] [Thread-57491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:25:11.044 [DEBUG] [Thread-57491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:25:11.045 [DEBUG] [Thread-57491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:25:11.048 [DEBUG] [Thread-57491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:25:11.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:25:11.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:25:11.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:25:11.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:25:11.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:25:11.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:25:11.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:25:11.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:25:11.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:25:11.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.600746 -999.00  +23.40  18.11     20   -0.40 1 2 1 1 1   888    0 23.18 -6.65 ----- 18.0 18.1 283.4 23.8 26.6 -16.6 26.6 -16.5 26.6 -15.8 26.9 -14.0
2025-11-17T16:25:11.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:25:11.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:25:11.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.600746
2025-11-17T16:25:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:25:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:25:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:25:11.073 [DEBUG] [Thread-57491] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:25:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:25:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:25:11.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:24:56', tmtdew=28.14, humidity=15.2, cloud=0.0, wind=25.88, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:25:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:25:11.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:25:11.163 [DEBUG] [Thread-57494] [transport.py] [_log()] starting thread (client mode): 0xd07868c0
2025-11-17T16:25:11.163 [DEBUG] [Thread-57494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:25:11.179 [DEBUG] [Thread-57494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:25:11.179 [INFO] [Thread-57494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:25:11.187 [DEBUG] [Thread-57494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:25:11.187 [DEBUG] [Thread-57494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:25:11.187 [DEBUG] [Thread-57494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:25:11.187 [DEBUG] [Thread-57494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:25:11.187 [DEBUG] [Thread-57494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:25:11.187 [DEBUG] [Thread-57494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:25:11.187 [DEBUG] [Thread-57494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] client lang: <none>
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] server lang: <none>
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] kex follows: False
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:25:11.188 [DEBUG] [Thread-57494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:25:11.189 [DEBUG] [Thread-57494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:25:11.189 [DEBUG] [Thread-57494] [transport.py] [_log()] Compression: none
2025-11-17T16:25:11.189 [DEBUG] [Thread-57494] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:25:11.250 [DEBUG] [Thread-57494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:25:11.250 [DEBUG] [Thread-57494] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:25:11.251 [DEBUG] [Thread-57494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:25:11.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:25:11.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:25:11.306 [DEBUG] [Thread-57494] [transport.py] [_log()] userauth is OK
2025-11-17T16:25:11.306 [DEBUG] [Thread-57494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:25:11.306 [DEBUG] [Thread-57494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:25:11.306 [DEBUG] [Thread-57494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:25:11.306 [DEBUG] [Thread-57494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:25:11.326 [INFO] [Thread-57494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:25:11.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:25:11.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:25:12.167 [DEBUG] [Thread-57494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:25:12.167 [DEBUG] [Thread-57494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:25:12.216 [DEBUG] [Thread-57494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:25:12.216 [DEBUG] [Thread-57494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:25:12.225 [DEBUG] [Thread-57494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:25:12.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:25:12.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:25: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') -> 00000000
2025-11-17T16:25:12.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:25:12.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:25:12.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:25:12.259 [DEBUG] [Thread-57494] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:25:12.333 [DEBUG] [Thread-57496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:25:16.757 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:25:16.758 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:25:21.814 [DEBUG] [Thread-57497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:25:27.384 [DEBUG] [Thread-57498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:25:42.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:25:42.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:25:42.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:25:42.411 [DEBUG] [Thread-57499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:25:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 25, 28), 28.1, 15.25, 0.0, 23.87, 23.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:25:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:25:28
2025-11-17T16:25:43.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:25:43.211 [DEBUG] [Thread-57500] [transport.py] [_log()] starting thread (client mode): 0xd0777970
2025-11-17T16:25:43.211 [DEBUG] [Thread-57500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:25:43.231 [DEBUG] [Thread-57500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:25:43.231 [INFO] [Thread-57500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:25:43.234 [DEBUG] [Thread-57500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:25:43.234 [DEBUG] [Thread-57500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:25:43.234 [DEBUG] [Thread-57500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:25:43.234 [DEBUG] [Thread-57500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:25:43.234 [DEBUG] [Thread-57500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:25:43.234 [DEBUG] [Thread-57500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:25:43.234 [DEBUG] [Thread-57500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] client lang: <none>
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] server lang: <none>
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] kex follows: False
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] Compression: none
2025-11-17T16:25:43.235 [DEBUG] [Thread-57500] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:25:43.253 [DEBUG] [Thread-57500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:25:43.254 [DEBUG] [Thread-57500] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:25:43.255 [DEBUG] [Thread-57500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:25:43.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:25:43.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:25:43.257 [DEBUG] [Thread-57500] [transport.py] [_log()] userauth is OK
2025-11-17T16:25:43.258 [DEBUG] [Thread-57500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:25:43.258 [DEBUG] [Thread-57500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:25:43.258 [DEBUG] [Thread-57500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:25:43.258 [DEBUG] [Thread-57500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:25:43.282 [INFO] [Thread-57500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:25:43.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:25:43.854 [DEBUG] [Thread-57500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:25:43.854 [DEBUG] [Thread-57500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:25:43.854 [DEBUG] [Thread-57500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:25:43.894 [DEBUG] [Thread-57500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:25:43.895 [DEBUG] [Thread-57500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:25:43.897 [DEBUG] [Thread-57500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:25:43.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:25:43.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:25:43.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:25:43.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:25:43.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:25:43.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:25:43.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:25:43.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:25:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:25:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.600746 -999.00  +23.40  18.11     20   -0.40 1 2 1 1 1   888    0 23.18 -6.65 ----- 18.0 18.1 283.4 23.8 26.6 -16.6 26.6 -16.5 26.6 -15.8 26.9 -14.0
2025-11-17T16:25:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:25:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:25:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.600746
2025-11-17T16:25:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:25:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:25:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:25:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:25:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:25:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:25:28', tmtdew=28.1, humidity=15.25, cloud=0.0, wind=23.87, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:25:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:25:43.919 [DEBUG] [Thread-57500] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:25:44.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:25:44.015 [DEBUG] [Thread-57503] [transport.py] [_log()] starting thread (client mode): 0xd07757b0
2025-11-17T16:25:44.015 [DEBUG] [Thread-57503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:25:44.030 [DEBUG] [Thread-57503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:25:44.030 [INFO] [Thread-57503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:25:44.037 [DEBUG] [Thread-57503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] client lang: <none>
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] server lang: <none>
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] kex follows: False
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] Compression: none
2025-11-17T16:25:44.038 [DEBUG] [Thread-57503] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:25:44.101 [DEBUG] [Thread-57503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:25:44.102 [DEBUG] [Thread-57503] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:25:44.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:25:44.103 [DEBUG] [Thread-57503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:25:44.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:25:44.157 [DEBUG] [Thread-57503] [transport.py] [_log()] userauth is OK
2025-11-17T16:25:44.157 [DEBUG] [Thread-57503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:25:44.157 [DEBUG] [Thread-57503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:25:44.157 [DEBUG] [Thread-57503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:25:44.157 [DEBUG] [Thread-57503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:25:44.177 [INFO] [Thread-57503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:25:44.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:25:44.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:25:45.045 [DEBUG] [Thread-57503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:25:45.045 [DEBUG] [Thread-57503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:25:45.092 [DEBUG] [Thread-57503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:25:45.092 [DEBUG] [Thread-57503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:25:45.101 [DEBUG] [Thread-57503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:25:45.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:25:45.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:25:45.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:25:45.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:25:45.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:25:45.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:25:45.136 [DEBUG] [Thread-57503] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:25:57.440 [DEBUG] [Thread-57505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:26:12.482 [DEBUG] [Thread-57506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:26:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:26:15.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:26:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:26:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 26), 28.04, 15.25, 0.0, 24.77, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:26:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:26:00
2025-11-17T16:26:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:26:16.092 [DEBUG] [Thread-57507] [transport.py] [_log()] starting thread (client mode): 0xd3163430
2025-11-17T16:26:16.092 [DEBUG] [Thread-57507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:26:16.113 [DEBUG] [Thread-57507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:26:16.113 [INFO] [Thread-57507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:26:16.116 [DEBUG] [Thread-57507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:26:16.116 [DEBUG] [Thread-57507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:26:16.116 [DEBUG] [Thread-57507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] client lang: <none>
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] server lang: <none>
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] kex follows: False
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] Compression: none
2025-11-17T16:26:16.117 [DEBUG] [Thread-57507] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:26:16.132 [DEBUG] [Thread-57507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:26:16.132 [DEBUG] [Thread-57507] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:26:16.132 [DEBUG] [Thread-57507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:26:16.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:26:16.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:26:16.133 [DEBUG] [Thread-57507] [transport.py] [_log()] userauth is OK
2025-11-17T16:26:16.133 [DEBUG] [Thread-57507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:26:16.133 [DEBUG] [Thread-57507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:26:16.133 [DEBUG] [Thread-57507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:26:16.133 [DEBUG] [Thread-57507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:26:16.142 [INFO] [Thread-57507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:26:16.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:26:16.783 [DEBUG] [Thread-57507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:26:16.783 [DEBUG] [Thread-57507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:26:16.784 [DEBUG] [Thread-57507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:26:16.824 [DEBUG] [Thread-57507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:26:16.824 [DEBUG] [Thread-57507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:26:16.826 [DEBUG] [Thread-57507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:26:16.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:26:16.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:26:16.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:26:16.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:26:16.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:26:16.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:26:16.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:26:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:26:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:26:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.601094 -999.00  +23.30  16.10     20   -0.40 1 2 1 1 1   888    0 22.70 -7.42 ----- 15.9 16.1 280.8 23.3 26.7 -16.7 26.7 -16.1 26.8 -14.9 27.1 -14.3
2025-11-17T16:26:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:26:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:26:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.601094
2025-11-17T16:26:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:26:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:26:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:26:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:26:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:26:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:26:00', tmtdew=28.04, humidity=15.25, cloud=0.0, wind=24.77, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:25:34.522', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:26:16.844 [DEBUG] [Thread-57507] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:26:16.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:26:16.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:26:16.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:26:16.930 [DEBUG] [Thread-57510] [transport.py] [_log()] starting thread (client mode): 0xd070ee00
2025-11-17T16:26:16.930 [DEBUG] [Thread-57510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:26:16.950 [DEBUG] [Thread-57510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:26:16.950 [INFO] [Thread-57510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] client lang: <none>
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] server lang: <none>
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] kex follows: False
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] Compression: none
2025-11-17T16:26:16.958 [DEBUG] [Thread-57510] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:26:17.017 [DEBUG] [Thread-57510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:26:17.017 [DEBUG] [Thread-57510] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:26:17.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:26:17.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:26:17.018 [DEBUG] [Thread-57510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:26:17.073 [DEBUG] [Thread-57510] [transport.py] [_log()] userauth is OK
2025-11-17T16:26:17.073 [DEBUG] [Thread-57510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:26:17.073 [DEBUG] [Thread-57510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:26:17.073 [DEBUG] [Thread-57510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:26:17.073 [DEBUG] [Thread-57510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:26:17.093 [INFO] [Thread-57510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:26:17.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:26:17.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:26:17.989 [DEBUG] [Thread-57510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:26:17.989 [DEBUG] [Thread-57510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:26:18.037 [DEBUG] [Thread-57510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:26:18.037 [DEBUG] [Thread-57510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:26:18.046 [DEBUG] [Thread-57510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:26:18.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:26:18.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:26:18.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:26:18.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:26:18.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:26:18.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:26:18.081 [DEBUG] [Thread-57510] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:26:21.874 [DEBUG] [Thread-57512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:26:27.507 [DEBUG] [Thread-57513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:26:42.556 [DEBUG] [Thread-57514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:26:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:26:48.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:26:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:26:48.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 26, 32), 28.11, 15.18, 0.0, 22.62, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:26:48.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:26:32
2025-11-17T16:26:48.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:26:49.039 [DEBUG] [Thread-57515] [transport.py] [_log()] starting thread (client mode): 0xd07778e0
2025-11-17T16:26:49.039 [DEBUG] [Thread-57515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:26:49.059 [DEBUG] [Thread-57515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:26:49.059 [INFO] [Thread-57515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:26:49.062 [DEBUG] [Thread-57515] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:26:49.062 [DEBUG] [Thread-57515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:26:49.062 [DEBUG] [Thread-57515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] client lang: <none>
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] server lang: <none>
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] kex follows: False
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] Compression: none
2025-11-17T16:26:49.063 [DEBUG] [Thread-57515] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:26:49.081 [DEBUG] [Thread-57515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:26:49.082 [DEBUG] [Thread-57515] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:26:49.082 [DEBUG] [Thread-57515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:26:49.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:26:49.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:26:49.084 [DEBUG] [Thread-57515] [transport.py] [_log()] userauth is OK
2025-11-17T16:26:49.084 [DEBUG] [Thread-57515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:26:49.084 [DEBUG] [Thread-57515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:26:49.084 [DEBUG] [Thread-57515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:26:49.084 [DEBUG] [Thread-57515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:26:49.119 [INFO] [Thread-57515] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:26:49.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:26:49.758 [DEBUG] [Thread-57515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:26:49.758 [DEBUG] [Thread-57515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:26:49.759 [DEBUG] [Thread-57515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:26:49.800 [DEBUG] [Thread-57515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:26:49.800 [DEBUG] [Thread-57515] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:26:49.802 [DEBUG] [Thread-57515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:26:49.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:26:49.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:26:49.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:26:49.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:26:49.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:26:49.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:26:49.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:26:49.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:26:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:26:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.601441 -999.00  +23.40  25.16     20   -0.40 1 2 1 1 1   888    0 22.70 -6.58 ----- 19.5 25.2 278.2 29.4 26.9 -16.9 26.8 -16.5 27.0 -15.2 27.4 -15.4
2025-11-17T16:26:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:26:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:26:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.601441
2025-11-17T16:26:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:26:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:26:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:26:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:26:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:26:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:26:32', tmtdew=28.11, humidity=15.18, cloud=0.0, wind=22.62, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:26:04.502', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:26:49.829 [DEBUG] [Thread-57515] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:26:49.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:26:49.925 [DEBUG] [Thread-57518] [transport.py] [_log()] starting thread (client mode): 0xd3163fd0
2025-11-17T16:26:49.925 [DEBUG] [Thread-57518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:26:49.943 [DEBUG] [Thread-57518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:26:49.943 [INFO] [Thread-57518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:26:49.951 [DEBUG] [Thread-57518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:26:49.951 [DEBUG] [Thread-57518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:26:49.951 [DEBUG] [Thread-57518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:26:49.951 [DEBUG] [Thread-57518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:26:49.951 [DEBUG] [Thread-57518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:26:49.951 [DEBUG] [Thread-57518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] client lang: <none>
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] server lang: <none>
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] kex follows: False
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:26:49.952 [DEBUG] [Thread-57518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:26:49.953 [DEBUG] [Thread-57518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:26:49.953 [DEBUG] [Thread-57518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:26:49.953 [DEBUG] [Thread-57518] [transport.py] [_log()] Compression: none
2025-11-17T16:26:49.953 [DEBUG] [Thread-57518] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:26:50.009 [DEBUG] [Thread-57518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:26:50.009 [DEBUG] [Thread-57518] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:26:50.010 [DEBUG] [Thread-57518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:26:50.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:26:50.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:26:50.065 [DEBUG] [Thread-57518] [transport.py] [_log()] userauth is OK
2025-11-17T16:26:50.065 [DEBUG] [Thread-57518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:26:50.066 [DEBUG] [Thread-57518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:26:50.066 [DEBUG] [Thread-57518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:26:50.066 [DEBUG] [Thread-57518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:26:50.089 [INFO] [Thread-57518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:26:50.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:26:50.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:26:51.139 [DEBUG] [Thread-57518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:26:51.139 [DEBUG] [Thread-57518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:26:51.187 [DEBUG] [Thread-57518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:26:51.187 [DEBUG] [Thread-57518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:26:51.196 [DEBUG] [Thread-57518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:26:51.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:26:51.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:26:51.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:26:51.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:26:51.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:26:51.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:26:51.227 [DEBUG] [Thread-57518] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:26:57.586 [DEBUG] [Thread-57520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:27:12.631 [DEBUG] [Thread-57521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:27:17.040 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:27:17.041 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:27:21.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:27:21.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:27:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:27:21.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 27, 4), 28.26, 15.08, 0.0, 25.6, 23.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:27:21.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:27:04
2025-11-17T16:27:21.920 [DEBUG] [Thread-57522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:27:22.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:27:22.166 [DEBUG] [Thread-57523] [transport.py] [_log()] starting thread (client mode): 0xd31619f0
2025-11-17T16:27:22.166 [DEBUG] [Thread-57523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:27:22.188 [DEBUG] [Thread-57523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:27:22.188 [INFO] [Thread-57523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:27:22.191 [DEBUG] [Thread-57523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:27:22.191 [DEBUG] [Thread-57523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:27:22.191 [DEBUG] [Thread-57523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:27:22.191 [DEBUG] [Thread-57523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:27:22.191 [DEBUG] [Thread-57523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:27:22.191 [DEBUG] [Thread-57523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:27:22.191 [DEBUG] [Thread-57523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:27:22.191 [DEBUG] [Thread-57523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] client lang: <none>
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] server lang: <none>
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] kex follows: False
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:27:22.192 [DEBUG] [Thread-57523] [transport.py] [_log()] Compression: none
2025-11-17T16:27:22.193 [DEBUG] [Thread-57523] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:27:22.212 [DEBUG] [Thread-57523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:27:22.212 [DEBUG] [Thread-57523] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:27:22.213 [DEBUG] [Thread-57523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:27:22.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:27:22.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:27:22.215 [DEBUG] [Thread-57523] [transport.py] [_log()] userauth is OK
2025-11-17T16:27:22.215 [DEBUG] [Thread-57523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:27:22.215 [DEBUG] [Thread-57523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:27:22.215 [DEBUG] [Thread-57523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:27:22.215 [DEBUG] [Thread-57523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:27:22.232 [INFO] [Thread-57523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:27:22.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:27:22.826 [DEBUG] [Thread-57523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:27:22.826 [DEBUG] [Thread-57523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:27:22.827 [DEBUG] [Thread-57523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:27:22.868 [DEBUG] [Thread-57523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:27:22.868 [DEBUG] [Thread-57523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:27:22.870 [DEBUG] [Thread-57523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:27:22.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:27:22.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:27:22.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:27:22.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:27:22.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:27:22.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:27:22.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:27:22.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:27:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:27:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.601788 -999.00  +23.50  17.03     20   -0.30 1 2 1 1 1   888    0 22.81 -4.64 ----- 21.7 17.0 276.8 21.6 27.1 -16.0 27.1 -15.9 27.4 -14.8 27.7 -13.7
2025-11-17T16:27:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:27:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:27:22.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.601788
2025-11-17T16:27:22.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:27:22.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:27:22.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:27:22.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:27:22.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:27:22.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:27:04', tmtdew=28.26, humidity=15.08, cloud=0.0, wind=25.6, temperature=23.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:26:34.483', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:27:22.897 [DEBUG] [Thread-57523] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:27:22.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:27:22.996 [DEBUG] [Thread-57526] [transport.py] [_log()] starting thread (client mode): 0xd0784c40
2025-11-17T16:27:22.996 [DEBUG] [Thread-57526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:27:23.012 [DEBUG] [Thread-57526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:27:23.012 [INFO] [Thread-57526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:27:23.019 [DEBUG] [Thread-57526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:27:23.019 [DEBUG] [Thread-57526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:27:23.019 [DEBUG] [Thread-57526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] client lang: <none>
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] server lang: <none>
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] kex follows: False
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] Compression: none
2025-11-17T16:27:23.020 [DEBUG] [Thread-57526] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:27:23.077 [DEBUG] [Thread-57526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:27:23.077 [DEBUG] [Thread-57526] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:27:23.078 [DEBUG] [Thread-57526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:27:23.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:27:23.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:27:23.133 [DEBUG] [Thread-57526] [transport.py] [_log()] userauth is OK
2025-11-17T16:27:23.133 [DEBUG] [Thread-57526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:27:23.134 [DEBUG] [Thread-57526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:27:23.134 [DEBUG] [Thread-57526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:27:23.134 [DEBUG] [Thread-57526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:27:23.153 [INFO] [Thread-57526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:27:23.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:27:23.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:27:24.024 [DEBUG] [Thread-57526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:27:24.024 [DEBUG] [Thread-57526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:27:24.071 [DEBUG] [Thread-57526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:27:24.071 [DEBUG] [Thread-57526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:27:24.080 [DEBUG] [Thread-57526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:27:24.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:27:24.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')
2025-11-17T16:27:24.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:27:24.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:27:24.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:27:24.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:27:24.115 [DEBUG] [Thread-57526] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:27:27.662 [DEBUG] [Thread-57528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:27:42.705 [DEBUG] [Thread-57529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:27:54.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:27:54.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:27:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:27:54.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 27, 36), 28.3, 14.9, 0.0, 20.15, 23.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:27:54.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:27:36
2025-11-17T16:27:54.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:27:55.054 [DEBUG] [Thread-57530] [transport.py] [_log()] starting thread (client mode): 0xd07239a0
2025-11-17T16:27:55.055 [DEBUG] [Thread-57530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:27:55.075 [DEBUG] [Thread-57530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:27:55.075 [INFO] [Thread-57530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] client lang: <none>
2025-11-17T16:27:55.079 [DEBUG] [Thread-57530] [transport.py] [_log()] server lang: <none>
2025-11-17T16:27:55.080 [DEBUG] [Thread-57530] [transport.py] [_log()] kex follows: False
2025-11-17T16:27:55.080 [DEBUG] [Thread-57530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:27:55.080 [DEBUG] [Thread-57530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:27:55.080 [DEBUG] [Thread-57530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:27:55.080 [DEBUG] [Thread-57530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:27:55.080 [DEBUG] [Thread-57530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:27:55.080 [DEBUG] [Thread-57530] [transport.py] [_log()] Compression: none
2025-11-17T16:27:55.080 [DEBUG] [Thread-57530] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:27:55.100 [DEBUG] [Thread-57530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:27:55.100 [DEBUG] [Thread-57530] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:27:55.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:27:55.101 [DEBUG] [Thread-57530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:27:55.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:27:55.103 [DEBUG] [Thread-57530] [transport.py] [_log()] userauth is OK
2025-11-17T16:27:55.103 [DEBUG] [Thread-57530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:27:55.103 [DEBUG] [Thread-57530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:27:55.103 [DEBUG] [Thread-57530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:27:55.104 [DEBUG] [Thread-57530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:27:55.127 [INFO] [Thread-57530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:27:55.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:27:55.747 [DEBUG] [Thread-57530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:27:55.748 [DEBUG] [Thread-57530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:27:55.748 [DEBUG] [Thread-57530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:27:55.788 [DEBUG] [Thread-57530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:27:55.788 [DEBUG] [Thread-57530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:27:55.791 [DEBUG] [Thread-57530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:27:55.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:27:55.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:27:55.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:27:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:27:55.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:27:55.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:27:55.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:27:55.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:27:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:27:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.602135 -999.00  +23.10  18.59     20   -0.50 1 2 1 1 1   888    0 23.55 -1.48 ----- 18.1 18.6 278.4 27.0 27.2 -16.7 27.1 -16.4 27.2 -17.3 27.9 -14.1
2025-11-17T16:27:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:27:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:27:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.602135
2025-11-17T16:27:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:27:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:27:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:27:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:27:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:27:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:27:36', tmtdew=28.3, humidity=14.9, cloud=0.0, wind=20.15, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:27:04.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:27:55.815 [DEBUG] [Thread-57530] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:27:55.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:27:55.923 [DEBUG] [Thread-57533] [transport.py] [_log()] starting thread (client mode): 0xd31619f0
2025-11-17T16:27:55.924 [DEBUG] [Thread-57533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:27:55.939 [DEBUG] [Thread-57533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:27:55.940 [INFO] [Thread-57533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] client lang: <none>
2025-11-17T16:27:55.947 [DEBUG] [Thread-57533] [transport.py] [_log()] server lang: <none>
2025-11-17T16:27:55.948 [DEBUG] [Thread-57533] [transport.py] [_log()] kex follows: False
2025-11-17T16:27:55.948 [DEBUG] [Thread-57533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:27:55.948 [DEBUG] [Thread-57533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:27:55.948 [DEBUG] [Thread-57533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:27:55.948 [DEBUG] [Thread-57533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:27:55.948 [DEBUG] [Thread-57533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:27:55.948 [DEBUG] [Thread-57533] [transport.py] [_log()] Compression: none
2025-11-17T16:27:55.948 [DEBUG] [Thread-57533] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:27:56.005 [DEBUG] [Thread-57533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:27:56.006 [DEBUG] [Thread-57533] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:27:56.006 [DEBUG] [Thread-57533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:27:56.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:27:56.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:27:56.062 [DEBUG] [Thread-57533] [transport.py] [_log()] userauth is OK
2025-11-17T16:27:56.062 [DEBUG] [Thread-57533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:27:56.062 [DEBUG] [Thread-57533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:27:56.062 [DEBUG] [Thread-57533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:27:56.062 [DEBUG] [Thread-57533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:27:56.082 [INFO] [Thread-57533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:27:56.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:27:56.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:27:56.967 [DEBUG] [Thread-57533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:27:56.967 [DEBUG] [Thread-57533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:27:57.015 [DEBUG] [Thread-57533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:27:57.015 [DEBUG] [Thread-57533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:27:57.024 [DEBUG] [Thread-57533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:27:57.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:27:57.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:27:57.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:27:57.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:27:57.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:27:57.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:27:57.059 [DEBUG] [Thread-57533] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:27:57.731 [DEBUG] [Thread-57535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:28:12.780 [DEBUG] [Thread-57536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:28:17.182 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:28:17.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:28:21.974 [DEBUG] [Thread-57537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:28:27.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:28:27.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:28:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:28:27.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 28, 8), 28.09, 15.1, 0.0, 21.09, 23.4, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:28:27.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:28:08
2025-11-17T16:28:27.805 [DEBUG] [Thread-57538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:28:27.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:28:27.984 [DEBUG] [Thread-57539] [transport.py] [_log()] starting thread (client mode): 0xd078de40
2025-11-17T16:28:27.985 [DEBUG] [Thread-57539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:28:28.004 [DEBUG] [Thread-57539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:28:28.004 [INFO] [Thread-57539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:28:28.007 [DEBUG] [Thread-57539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:28:28.007 [DEBUG] [Thread-57539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] client lang: <none>
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] server lang: <none>
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] kex follows: False
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] Compression: none
2025-11-17T16:28:28.008 [DEBUG] [Thread-57539] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:28:28.025 [DEBUG] [Thread-57539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:28:28.025 [DEBUG] [Thread-57539] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:28:28.026 [DEBUG] [Thread-57539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:28:28.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:28:28.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:28:28.028 [DEBUG] [Thread-57539] [transport.py] [_log()] userauth is OK
2025-11-17T16:28:28.028 [DEBUG] [Thread-57539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:28:28.028 [DEBUG] [Thread-57539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:28:28.028 [DEBUG] [Thread-57539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:28:28.028 [DEBUG] [Thread-57539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:28:28.064 [INFO] [Thread-57539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:28:28.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:28:28.689 [DEBUG] [Thread-57539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:28:28.689 [DEBUG] [Thread-57539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:28:28.689 [DEBUG] [Thread-57539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:28:28.729 [DEBUG] [Thread-57539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:28:28.729 [DEBUG] [Thread-57539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:28:28.732 [DEBUG] [Thread-57539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:28:28.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:28:28.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:28:28.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:28:28.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:28:28.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:28:28.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:28:28.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:28:28.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:28:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:28:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.602483 -999.00  +23.10  16.66     20   -0.40 1 2 1 1 1   888    0 23.34 1.22 ----- 16.1 16.7 295.8 21.2 27.3 -16.0 27.2 -15.7 27.7 -15.4 28.1 -13.8
2025-11-17T16:28:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:28:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:28:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.602483
2025-11-17T16:28:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:28:28.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:28:28.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:28:28.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:28:28.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:28:28.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:28:08', tmtdew=28.09, humidity=15.1, cloud=0.0, wind=21.09, temperature=23.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:27:34.531', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:28:28.756 [DEBUG] [Thread-57539] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:28:28.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:28:28.852 [DEBUG] [Thread-57542] [transport.py] [_log()] starting thread (client mode): 0xd0755c90
2025-11-17T16:28:28.853 [DEBUG] [Thread-57542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:28:28.869 [DEBUG] [Thread-57542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:28:28.869 [INFO] [Thread-57542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] client lang: <none>
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] server lang: <none>
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] kex follows: False
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:28:28.877 [DEBUG] [Thread-57542] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:28:28.878 [DEBUG] [Thread-57542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:28:28.878 [DEBUG] [Thread-57542] [transport.py] [_log()] Compression: none
2025-11-17T16:28:28.878 [DEBUG] [Thread-57542] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:28:28.937 [DEBUG] [Thread-57542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:28:28.937 [DEBUG] [Thread-57542] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:28:28.938 [DEBUG] [Thread-57542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:28:28.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:28:28.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:28:28.994 [DEBUG] [Thread-57542] [transport.py] [_log()] userauth is OK
2025-11-17T16:28:28.994 [DEBUG] [Thread-57542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:28:28.994 [DEBUG] [Thread-57542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:28:28.994 [DEBUG] [Thread-57542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:28:28.994 [DEBUG] [Thread-57542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:28:29.014 [INFO] [Thread-57542] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:28:29.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:28:29.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:28:29.905 [DEBUG] [Thread-57542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:28:29.906 [DEBUG] [Thread-57542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:28:29.953 [DEBUG] [Thread-57542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:28:29.953 [DEBUG] [Thread-57542] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:28:29.962 [DEBUG] [Thread-57542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:28:29.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:28:29.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:28:29.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:28:29.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:28:29.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:28:29.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:28:29.997 [DEBUG] [Thread-57542] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:28:42.829 [DEBUG] [Thread-57544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:28:57.859 [DEBUG] [Thread-57545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:29:00.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:29:00.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:29:00.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:29:00.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 28, 40), 28.38, 15.0, 0.0, 17.43, 23.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:29:00.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:28:40
2025-11-17T16:29:00.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:29:00.920 [DEBUG] [Thread-57546] [transport.py] [_log()] starting thread (client mode): 0xd0755b40
2025-11-17T16:29:00.920 [DEBUG] [Thread-57546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:29:00.940 [DEBUG] [Thread-57546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:29:00.940 [INFO] [Thread-57546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:29:00.941 [DEBUG] [Thread-57546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] client lang: <none>
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] server lang: <none>
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] kex follows: False
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:29:00.942 [DEBUG] [Thread-57546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:29:00.943 [DEBUG] [Thread-57546] [transport.py] [_log()] Compression: none
2025-11-17T16:29:00.943 [DEBUG] [Thread-57546] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:29:00.952 [DEBUG] [Thread-57546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:29:00.952 [DEBUG] [Thread-57546] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:29:00.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:29:00.954 [DEBUG] [Thread-57546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:29:00.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:29:00.956 [DEBUG] [Thread-57546] [transport.py] [_log()] userauth is OK
2025-11-17T16:29:00.956 [DEBUG] [Thread-57546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:29:00.956 [DEBUG] [Thread-57546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:29:00.956 [DEBUG] [Thread-57546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:29:00.956 [DEBUG] [Thread-57546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:29:00.975 [INFO] [Thread-57546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:29:00.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:29:01.603 [DEBUG] [Thread-57546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:29:01.603 [DEBUG] [Thread-57546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:29:01.604 [DEBUG] [Thread-57546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:29:01.645 [DEBUG] [Thread-57546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:29:01.645 [DEBUG] [Thread-57546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:29:01.648 [DEBUG] [Thread-57546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:29:01.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:29:01.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:29:01.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:29:01.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:29:01.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:29:01.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:29:01.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:29:01.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:29:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:29:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.602830 -999.00  +23.20  14.11     20   -0.50 1 2 1 1 1   888    0 23.48 4.80 ----- 13.1 14.1 283.0 20.7 27.4 -17.8 27.3 -16.0 27.7 -13.7 28.3 -14.9
2025-11-17T16:29:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:29:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:29:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.602830
2025-11-17T16:29:01.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:29:01.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:29:01.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:29:01.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:29:01.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:29:01.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:28:40', tmtdew=28.38, humidity=15.0, cloud=0.0, wind=17.43, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:28:04.512', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:29:01.673 [DEBUG] [Thread-57546] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:29:01.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:29:01.761 [DEBUG] [Thread-57549] [transport.py] [_log()] starting thread (client mode): 0xd0754ca0
2025-11-17T16:29:01.762 [DEBUG] [Thread-57549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:29:01.778 [DEBUG] [Thread-57549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:29:01.778 [INFO] [Thread-57549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:29:01.785 [DEBUG] [Thread-57549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] client lang: <none>
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] server lang: <none>
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] kex follows: False
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] Compression: none
2025-11-17T16:29:01.786 [DEBUG] [Thread-57549] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:29:01.845 [DEBUG] [Thread-57549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:29:01.845 [DEBUG] [Thread-57549] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:29:01.845 [DEBUG] [Thread-57549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:29:01.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:29:01.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:29:01.901 [DEBUG] [Thread-57549] [transport.py] [_log()] userauth is OK
2025-11-17T16:29:01.901 [DEBUG] [Thread-57549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:29:01.902 [DEBUG] [Thread-57549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:29:01.902 [DEBUG] [Thread-57549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:29:01.902 [DEBUG] [Thread-57549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:29:01.925 [INFO] [Thread-57549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:29:01.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:29:01.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:29:02.877 [DEBUG] [Thread-57549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:29:02.877 [DEBUG] [Thread-57549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:29:02.924 [DEBUG] [Thread-57549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:29:02.924 [DEBUG] [Thread-57549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:29:02.933 [DEBUG] [Thread-57549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:29:02.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:29:02.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:29:02.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:29:02.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:29:02.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:29:02.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:29:02.967 [DEBUG] [Thread-57549] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:29:12.893 [DEBUG] [Thread-57551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:29:17.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:29:17.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:29:22.029 [DEBUG] [Thread-57552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:29:27.932 [DEBUG] [Thread-57553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:29:32.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:29:32.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:29:32.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:29:33.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 29, 12), 28.49, 14.9, 0.0, 21.07, 23.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:29:33.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:29:12
2025-11-17T16:29:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:29:33.913 [DEBUG] [Thread-57554] [transport.py] [_log()] starting thread (client mode): 0xd0755150
2025-11-17T16:29:33.914 [DEBUG] [Thread-57554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:29:33.933 [DEBUG] [Thread-57554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:29:33.933 [INFO] [Thread-57554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] client lang: <none>
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] server lang: <none>
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] kex follows: False
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] Compression: none
2025-11-17T16:29:33.937 [DEBUG] [Thread-57554] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:29:33.956 [DEBUG] [Thread-57554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:29:33.957 [DEBUG] [Thread-57554] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:29:33.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:29:33.957 [DEBUG] [Thread-57554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:29:33.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:29:33.959 [DEBUG] [Thread-57554] [transport.py] [_log()] userauth is OK
2025-11-17T16:29:33.959 [DEBUG] [Thread-57554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:29:33.959 [DEBUG] [Thread-57554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:29:33.959 [DEBUG] [Thread-57554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:29:33.959 [DEBUG] [Thread-57554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:29:33.980 [INFO] [Thread-57554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:29:33.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:29:34.631 [DEBUG] [Thread-57554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:29:34.632 [DEBUG] [Thread-57554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:29:34.632 [DEBUG] [Thread-57554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:29:34.672 [DEBUG] [Thread-57554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:29:34.672 [DEBUG] [Thread-57554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:29:34.676 [DEBUG] [Thread-57554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:29:34.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:29:34.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:29:34.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:29:34.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:29:34.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:29:34.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:29:34.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:29:34.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:29:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:29:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.603177 -999.00  +23.20  14.61     20   -0.40 1 2 1 1 1   888    0 23.94 8.38 ----- 18.2 14.6 281.8 18.4 27.6 -16.3 27.4 -15.9 28.1 -14.2 28.6 -14.5
2025-11-17T16:29:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:29:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:29:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.603177
2025-11-17T16:29:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:29:34.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:29:34.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:29:34.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:29:34.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:29:34.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:29:12', tmtdew=28.49, humidity=14.9, cloud=0.0, wind=21.07, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:28:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:29:34.703 [DEBUG] [Thread-57554] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:29:34.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:29:34.796 [DEBUG] [Thread-57557] [transport.py] [_log()] starting thread (client mode): 0xd0756ec0
2025-11-17T16:29:34.796 [DEBUG] [Thread-57557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:29:34.811 [DEBUG] [Thread-57557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:29:34.811 [INFO] [Thread-57557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] client lang: <none>
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] server lang: <none>
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] kex follows: False
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:29:34.819 [DEBUG] [Thread-57557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:29:34.820 [DEBUG] [Thread-57557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:29:34.820 [DEBUG] [Thread-57557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:29:34.820 [DEBUG] [Thread-57557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:29:34.820 [DEBUG] [Thread-57557] [transport.py] [_log()] Compression: none
2025-11-17T16:29:34.820 [DEBUG] [Thread-57557] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:29:34.881 [DEBUG] [Thread-57557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:29:34.882 [DEBUG] [Thread-57557] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:29:34.882 [DEBUG] [Thread-57557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:29:34.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:29:34.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:29:34.937 [DEBUG] [Thread-57557] [transport.py] [_log()] userauth is OK
2025-11-17T16:29:34.937 [DEBUG] [Thread-57557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:29:34.938 [DEBUG] [Thread-57557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:29:34.938 [DEBUG] [Thread-57557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:29:34.938 [DEBUG] [Thread-57557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:29:34.956 [INFO] [Thread-57557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:29:34.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:29:34.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:29:35.848 [DEBUG] [Thread-57557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:29:35.848 [DEBUG] [Thread-57557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:29:35.896 [DEBUG] [Thread-57557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:29:35.896 [DEBUG] [Thread-57557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:29:35.906 [DEBUG] [Thread-57557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:29:35.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:29:35.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:29:35.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:29:35.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:29:35.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:29:35.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:29:35.946 [DEBUG] [Thread-57557] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:29:42.960 [DEBUG] [Thread-57559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:29:58.001 [DEBUG] [Thread-57560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:30:05.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:30:05.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:30:05.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:30:06.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 29, 44), 28.09, 14.75, 0.0, 18.35, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:30:06.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:29:44
2025-11-17T16:30:06.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:30:06.936 [DEBUG] [Thread-57561] [transport.py] [_log()] starting thread (client mode): 0xd0784c40
2025-11-17T16:30:06.936 [DEBUG] [Thread-57561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:30:06.956 [DEBUG] [Thread-57561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:30:06.956 [INFO] [Thread-57561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:30:06.959 [DEBUG] [Thread-57561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:30:06.959 [DEBUG] [Thread-57561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:30:06.959 [DEBUG] [Thread-57561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:30:06.959 [DEBUG] [Thread-57561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:30:06.959 [DEBUG] [Thread-57561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:30:06.959 [DEBUG] [Thread-57561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:30:06.959 [DEBUG] [Thread-57561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:30:06.959 [DEBUG] [Thread-57561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] client lang: <none>
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] server lang: <none>
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] kex follows: False
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] Compression: none
2025-11-17T16:30:06.960 [DEBUG] [Thread-57561] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:30:06.975 [DEBUG] [Thread-57561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:30:06.976 [DEBUG] [Thread-57561] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:30:06.976 [DEBUG] [Thread-57561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:30:06.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:30:06.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:30:06.976 [DEBUG] [Thread-57561] [transport.py] [_log()] userauth is OK
2025-11-17T16:30:06.976 [DEBUG] [Thread-57561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:30:06.976 [DEBUG] [Thread-57561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:30:06.976 [DEBUG] [Thread-57561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:30:06.976 [DEBUG] [Thread-57561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:30:06.986 [INFO] [Thread-57561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:30:06.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:30:07.651 [DEBUG] [Thread-57561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:30:07.651 [DEBUG] [Thread-57561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:30:07.651 [DEBUG] [Thread-57561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:30:07.692 [DEBUG] [Thread-57561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:30:07.692 [DEBUG] [Thread-57561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:30:07.694 [DEBUG] [Thread-57561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:30:07.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:30:07.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:30:07.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:30:07.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:30:07.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:30:07.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:30:07.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:30:07.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:30:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:30:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.603524 -999.00  +23.20  25.44     20   -0.50 1 2 1 1 1   888    0 23.72 10.01 ----- 22.5 25.4 270.4 28.8 27.4 -19.7 27.3 -17.9 27.7 -15.4 28.5 -19.3
2025-11-17T16:30:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:30:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:30:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.603524
2025-11-17T16:30:07.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:30:07.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:30:07.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:30:07.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:30:07.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:30:07.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:29:44', tmtdew=28.09, humidity=14.75, cloud=0.0, wind=18.35, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:29:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:30:07.705 [DEBUG] [Thread-57561] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:30:07.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:30:07.791 [DEBUG] [Thread-57564] [transport.py] [_log()] starting thread (client mode): 0xd0785300
2025-11-17T16:30:07.791 [DEBUG] [Thread-57564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:30:07.806 [DEBUG] [Thread-57564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:30:07.806 [INFO] [Thread-57564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] client lang: <none>
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] server lang: <none>
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] kex follows: False
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] Compression: none
2025-11-17T16:30:07.814 [DEBUG] [Thread-57564] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:30:07.876 [DEBUG] [Thread-57564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:30:07.876 [DEBUG] [Thread-57564] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:30:07.877 [DEBUG] [Thread-57564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:30:07.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:30:07.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:30:07.933 [DEBUG] [Thread-57564] [transport.py] [_log()] userauth is OK
2025-11-17T16:30:07.933 [DEBUG] [Thread-57564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:30:07.933 [DEBUG] [Thread-57564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:30:07.933 [DEBUG] [Thread-57564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:30:07.933 [DEBUG] [Thread-57564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:30:07.947 [INFO] [Thread-57564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:30:07.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:30:07.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:30:08.840 [DEBUG] [Thread-57564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:30:08.840 [DEBUG] [Thread-57564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:30:08.888 [DEBUG] [Thread-57564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:30:08.888 [DEBUG] [Thread-57564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:30:08.896 [DEBUG] [Thread-57564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:30:08.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:30:08.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:30:08.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:30:08.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:30:08.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:30:08.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:30:08.928 [DEBUG] [Thread-57564] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:30:13.032 [DEBUG] [Thread-57566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:30:17.470 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:30:17.471 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:30:22.084 [DEBUG] [Thread-57567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:30:28.069 [DEBUG] [Thread-57568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:30:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:30:38.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:30:38.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:30:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 30, 16), 27.97, 14.86, 0.0, 17.31, 23.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:30:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:30:16
2025-11-17T16:30:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:30:39.899 [DEBUG] [Thread-57569] [transport.py] [_log()] starting thread (client mode): 0xd0754970
2025-11-17T16:30:39.899 [DEBUG] [Thread-57569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:30:39.919 [DEBUG] [Thread-57569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:30:39.919 [INFO] [Thread-57569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:30:39.922 [DEBUG] [Thread-57569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:30:39.922 [DEBUG] [Thread-57569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:30:39.922 [DEBUG] [Thread-57569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] client lang: <none>
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] server lang: <none>
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] kex follows: False
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] Compression: none
2025-11-17T16:30:39.923 [DEBUG] [Thread-57569] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:30:39.942 [DEBUG] [Thread-57569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:30:39.942 [DEBUG] [Thread-57569] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:30:39.943 [DEBUG] [Thread-57569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:30:39.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:30:39.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:30:39.944 [DEBUG] [Thread-57569] [transport.py] [_log()] userauth is OK
2025-11-17T16:30:39.945 [DEBUG] [Thread-57569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:30:39.945 [DEBUG] [Thread-57569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:30:39.945 [DEBUG] [Thread-57569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:30:39.945 [DEBUG] [Thread-57569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:30:39.969 [INFO] [Thread-57569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:30:39.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:30:40.644 [DEBUG] [Thread-57569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:30:40.645 [DEBUG] [Thread-57569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:30:40.645 [DEBUG] [Thread-57569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:30:40.686 [DEBUG] [Thread-57569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:30:40.686 [DEBUG] [Thread-57569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:30:40.689 [DEBUG] [Thread-57569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:30:40.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:30:40.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:30:40.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:30:40.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:30:40.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:30:40.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:30:40.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:30:40.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:30:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:30:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.603866 -999.00  +22.70  19.84     21   -0.60 1 2 1 1 1   888    0 23.58 9.39 ----- 21.1 19.8 272.4 23.1 27.2 -20.3 27.1 -18.4 27.2 -21.2 28.2 -19.9
2025-11-17T16:30:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:30:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:30:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.603866
2025-11-17T16:30:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:30:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:30:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:30:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:30:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:30:40.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:30:16', tmtdew=27.97, humidity=14.86, cloud=0.0, wind=17.31, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:29:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:30:40.714 [DEBUG] [Thread-57569] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:30:40.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:30:40.808 [DEBUG] [Thread-57572] [transport.py] [_log()] starting thread (client mode): 0xd3163fd0
2025-11-17T16:30:40.808 [DEBUG] [Thread-57572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:30:40.823 [DEBUG] [Thread-57572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:30:40.823 [INFO] [Thread-57572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:30:40.830 [DEBUG] [Thread-57572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] client lang: <none>
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] server lang: <none>
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] kex follows: False
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] Compression: none
2025-11-17T16:30:40.831 [DEBUG] [Thread-57572] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:30:40.889 [DEBUG] [Thread-57572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:30:40.890 [DEBUG] [Thread-57572] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:30:40.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:30:40.890 [DEBUG] [Thread-57572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:30:40.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:30:40.949 [DEBUG] [Thread-57572] [transport.py] [_log()] userauth is OK
2025-11-17T16:30:40.949 [DEBUG] [Thread-57572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:30:40.949 [DEBUG] [Thread-57572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:30:40.949 [DEBUG] [Thread-57572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:30:40.949 [DEBUG] [Thread-57572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:30:40.966 [INFO] [Thread-57572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:30:40.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:30:40.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:30:41.807 [DEBUG] [Thread-57572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:30:41.807 [DEBUG] [Thread-57572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:30:41.858 [DEBUG] [Thread-57572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:30:41.858 [DEBUG] [Thread-57572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:30:41.867 [DEBUG] [Thread-57572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:30:41.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:30:41.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:30:41.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:30:41.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:30:41.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:30:41.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:30:41.901 [DEBUG] [Thread-57572] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:30:43.101 [DEBUG] [Thread-57574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:30:58.144 [DEBUG] [Thread-57575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:31:11.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:31:11.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:31:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:31:12.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 30, 48), 27.8, 15.28, 0.0, 12.46, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:31:12.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:30:48
2025-11-17T16:31:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:31:12.833 [DEBUG] [Thread-57576] [transport.py] [_log()] starting thread (client mode): 0xd07870d0
2025-11-17T16:31:12.833 [DEBUG] [Thread-57576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:31:12.848 [DEBUG] [Thread-57576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:31:12.848 [INFO] [Thread-57576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:31:12.851 [DEBUG] [Thread-57576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:31:12.851 [DEBUG] [Thread-57576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:31:12.851 [DEBUG] [Thread-57576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:31:12.851 [DEBUG] [Thread-57576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:31:12.851 [DEBUG] [Thread-57576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] client lang: <none>
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] server lang: <none>
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] kex follows: False
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] Compression: none
2025-11-17T16:31:12.852 [DEBUG] [Thread-57576] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:31:12.872 [DEBUG] [Thread-57576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:31:12.873 [DEBUG] [Thread-57576] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:31:12.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:31:12.874 [DEBUG] [Thread-57576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:31:12.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:31:12.877 [DEBUG] [Thread-57576] [transport.py] [_log()] userauth is OK
2025-11-17T16:31:12.877 [DEBUG] [Thread-57576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:31:12.877 [DEBUG] [Thread-57576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:31:12.877 [DEBUG] [Thread-57576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:31:12.878 [DEBUG] [Thread-57576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:31:12.900 [INFO] [Thread-57576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:31:12.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:31:13.179 [DEBUG] [Thread-57578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:31:13.532 [DEBUG] [Thread-57576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:31:13.532 [DEBUG] [Thread-57576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:31:13.533 [DEBUG] [Thread-57576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:31:13.573 [DEBUG] [Thread-57576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:31:13.573 [DEBUG] [Thread-57576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:31:13.576 [DEBUG] [Thread-57576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:31:13.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:31:13.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:31:13.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:31:13.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:31:13.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:31:13.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:31:13.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:31:13.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:31:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:31:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.604565 -999.00  +22.30  14.34     21   -0.70 1 2 1 1 1   888    0 23.33 5.22 ----- 17.0 14.3 296.4 15.8 27.0 -18.7 26.9 -18.3 26.9 -18.7 27.6 -17.9
2025-11-17T16:31:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:31:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:31:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.604565
2025-11-17T16:31:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:31:13.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:31:13.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:31:13.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:31:13.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:31:13.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:30:48', tmtdew=27.8, humidity=15.28, cloud=0.0, wind=12.46, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:30:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:31:13.602 [DEBUG] [Thread-57576] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:31:13.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:31:13.699 [DEBUG] [Thread-57580] [transport.py] [_log()] starting thread (client mode): 0xd0754c70
2025-11-17T16:31:13.699 [DEBUG] [Thread-57580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:31:13.714 [DEBUG] [Thread-57580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:31:13.714 [INFO] [Thread-57580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] client lang: <none>
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] server lang: <none>
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] kex follows: False
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:31:13.722 [DEBUG] [Thread-57580] [transport.py] [_log()] Compression: none
2025-11-17T16:31:13.723 [DEBUG] [Thread-57580] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:31:13.787 [DEBUG] [Thread-57580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:31:13.788 [DEBUG] [Thread-57580] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:31:13.788 [DEBUG] [Thread-57580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:31:13.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:31:13.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:31:13.845 [DEBUG] [Thread-57580] [transport.py] [_log()] userauth is OK
2025-11-17T16:31:13.845 [DEBUG] [Thread-57580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:31:13.846 [DEBUG] [Thread-57580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:31:13.846 [DEBUG] [Thread-57580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:31:13.846 [DEBUG] [Thread-57580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:31:13.865 [INFO] [Thread-57580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:31:13.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:31:13.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:31:14.711 [DEBUG] [Thread-57580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:31:14.711 [DEBUG] [Thread-57580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:31:14.759 [DEBUG] [Thread-57580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:31:14.759 [DEBUG] [Thread-57580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:31:14.768 [DEBUG] [Thread-57580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:31:14.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:31:14.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:31:14.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:31:14.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:31:14.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:31:14.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:31:14.812 [DEBUG] [Thread-57580] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:31:17.613 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:31:17.614 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:31:22.112 [DEBUG] [Thread-57582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:31:28.207 [DEBUG] [Thread-57583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:31:43.252 [DEBUG] [Thread-57584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:31:44.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:31:44.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:31:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:31:45.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 31, 20), 27.87, 15.22, 0.0, 15.56, 23.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:31:45.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:31:20
2025-11-17T16:31:45.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:31:45.742 [DEBUG] [Thread-57585] [transport.py] [_log()] starting thread (client mode): 0xd3134a00
2025-11-17T16:31:45.743 [DEBUG] [Thread-57585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:31:45.763 [DEBUG] [Thread-57585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:31:45.764 [INFO] [Thread-57585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] client lang: <none>
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] server lang: <none>
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] kex follows: False
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:31:45.765 [DEBUG] [Thread-57585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:31:45.766 [DEBUG] [Thread-57585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:31:45.766 [DEBUG] [Thread-57585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:31:45.766 [DEBUG] [Thread-57585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:31:45.766 [DEBUG] [Thread-57585] [transport.py] [_log()] Compression: none
2025-11-17T16:31:45.766 [DEBUG] [Thread-57585] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:31:45.782 [DEBUG] [Thread-57585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:31:45.782 [DEBUG] [Thread-57585] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:31:45.783 [DEBUG] [Thread-57585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:31:45.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:31:45.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:31:45.784 [DEBUG] [Thread-57585] [transport.py] [_log()] userauth is OK
2025-11-17T16:31:45.785 [DEBUG] [Thread-57585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:31:45.785 [DEBUG] [Thread-57585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:31:45.785 [DEBUG] [Thread-57585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:31:45.785 [DEBUG] [Thread-57585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:31:45.820 [INFO] [Thread-57585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:31:45.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:31:46.427 [DEBUG] [Thread-57585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:31:46.427 [DEBUG] [Thread-57585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:31:46.428 [DEBUG] [Thread-57585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:31:46.468 [DEBUG] [Thread-57585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:31:46.468 [DEBUG] [Thread-57585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:31:46.471 [DEBUG] [Thread-57585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:31:46.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:31:46.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:31:46.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:31:46.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:31:46.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:31:46.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:31:46.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:31:46.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:31:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:31:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.604913 -999.00  +22.10  12.97     21   -0.70 1 2 1 1 1   888    0 23.45 2.03 ----- 12.6 13.0 316.6 18.4 26.9 -18.7 26.7 -17.9 26.8 -17.5 27.4 -17.9
2025-11-17T16:31:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:31:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:31:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.604913
2025-11-17T16:31:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:31:46.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:31:46.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:31:46.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:31:46.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:31:46.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:31:20', tmtdew=27.87, humidity=15.22, cloud=0.0, wind=15.56, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:31:04.483', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:31:46.498 [DEBUG] [Thread-57585] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:31:46.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:31:46.595 [DEBUG] [Thread-57588] [transport.py] [_log()] starting thread (client mode): 0xd3134dc0
2025-11-17T16:31:46.595 [DEBUG] [Thread-57588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:31:46.611 [DEBUG] [Thread-57588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:31:46.611 [INFO] [Thread-57588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:31:46.619 [DEBUG] [Thread-57588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:31:46.619 [DEBUG] [Thread-57588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:31:46.619 [DEBUG] [Thread-57588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:31:46.619 [DEBUG] [Thread-57588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:31:46.619 [DEBUG] [Thread-57588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:31:46.619 [DEBUG] [Thread-57588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:31:46.619 [DEBUG] [Thread-57588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] client lang: <none>
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] server lang: <none>
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] kex follows: False
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] Compression: none
2025-11-17T16:31:46.620 [DEBUG] [Thread-57588] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:31:46.677 [DEBUG] [Thread-57588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:31:46.677 [DEBUG] [Thread-57588] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:31:46.678 [DEBUG] [Thread-57588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:31:46.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:31:46.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:31:46.733 [DEBUG] [Thread-57588] [transport.py] [_log()] userauth is OK
2025-11-17T16:31:46.733 [DEBUG] [Thread-57588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:31:46.733 [DEBUG] [Thread-57588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:31:46.734 [DEBUG] [Thread-57588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:31:46.734 [DEBUG] [Thread-57588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:31:46.752 [INFO] [Thread-57588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:31:46.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:31:46.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:31:47.626 [DEBUG] [Thread-57588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:31:47.627 [DEBUG] [Thread-57588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:31:47.674 [DEBUG] [Thread-57588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:31:47.674 [DEBUG] [Thread-57588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:31:47.683 [DEBUG] [Thread-57588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:31:47.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:31:47.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:31:47.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:31:47.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:31:47.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:31:47.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:31:47.717 [DEBUG] [Thread-57588] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:31:58.284 [DEBUG] [Thread-57590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:32:13.330 [DEBUG] [Thread-57591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:32:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:32:17.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:32:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:32:17.756 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:32:17.756 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:32:18.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 31, 52), 27.7, 15.36, 0.0, 13.22, 22.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:32:18.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:31:52
2025-11-17T16:32:18.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:32:18.673 [DEBUG] [Thread-57592] [transport.py] [_log()] starting thread (client mode): 0xd0756950
2025-11-17T16:32:18.673 [DEBUG] [Thread-57592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:32:18.694 [DEBUG] [Thread-57592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:32:18.694 [INFO] [Thread-57592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] client lang: <none>
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] server lang: <none>
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] kex follows: False
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:32:18.697 [DEBUG] [Thread-57592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:32:18.698 [DEBUG] [Thread-57592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:32:18.698 [DEBUG] [Thread-57592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:32:18.698 [DEBUG] [Thread-57592] [transport.py] [_log()] Compression: none
2025-11-17T16:32:18.698 [DEBUG] [Thread-57592] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:32:18.715 [DEBUG] [Thread-57592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:32:18.715 [DEBUG] [Thread-57592] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:32:18.716 [DEBUG] [Thread-57592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:32:18.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:32:18.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:32:18.718 [DEBUG] [Thread-57592] [transport.py] [_log()] userauth is OK
2025-11-17T16:32:18.718 [DEBUG] [Thread-57592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:32:18.718 [DEBUG] [Thread-57592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:32:18.718 [DEBUG] [Thread-57592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:32:18.718 [DEBUG] [Thread-57592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:32:18.741 [INFO] [Thread-57592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:32:18.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:32:19.391 [DEBUG] [Thread-57592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:32:19.392 [DEBUG] [Thread-57592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:32:19.392 [DEBUG] [Thread-57592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:32:19.433 [DEBUG] [Thread-57592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:32:19.433 [DEBUG] [Thread-57592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:32:19.436 [DEBUG] [Thread-57592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:32:19.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:32:19.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:32:19.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:32:19.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:32:19.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:32:19.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:32:19.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:32:19.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:32:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:32:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.605260 -999.00  +22.10  12.75     21   -0.60 1 2 1 1 1   888    0 22.84 -0.62 ----- 11.2 12.8 317.2 16.4 26.9 -18.0 26.6 -17.8 26.7 -17.4 27.2 -17.3
2025-11-17T16:32:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:32:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:32:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.605260
2025-11-17T16:32:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:32:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:32:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:32:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:32:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:32:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:31:52', tmtdew=27.7, humidity=15.36, cloud=0.0, wind=13.22, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:31:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:32:19.460 [DEBUG] [Thread-57592] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:32:19.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:32:19.557 [DEBUG] [Thread-57595] [transport.py] [_log()] starting thread (client mode): 0xd07848b0
2025-11-17T16:32:19.558 [DEBUG] [Thread-57595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:32:19.573 [DEBUG] [Thread-57595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:32:19.573 [INFO] [Thread-57595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:32:19.580 [DEBUG] [Thread-57595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] client lang: <none>
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] server lang: <none>
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] kex follows: False
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:32:19.581 [DEBUG] [Thread-57595] [transport.py] [_log()] Compression: none
2025-11-17T16:32:19.582 [DEBUG] [Thread-57595] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:32:19.642 [DEBUG] [Thread-57595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:32:19.642 [DEBUG] [Thread-57595] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:32:19.643 [DEBUG] [Thread-57595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:32:19.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:32:19.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:32:19.701 [DEBUG] [Thread-57595] [transport.py] [_log()] userauth is OK
2025-11-17T16:32:19.701 [DEBUG] [Thread-57595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:32:19.702 [DEBUG] [Thread-57595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:32:19.702 [DEBUG] [Thread-57595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:32:19.702 [DEBUG] [Thread-57595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:32:19.725 [INFO] [Thread-57595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:32:19.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:32:19.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:32:20.579 [DEBUG] [Thread-57595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:32:20.579 [DEBUG] [Thread-57595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:32:20.627 [DEBUG] [Thread-57595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:32:20.627 [DEBUG] [Thread-57595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:32:20.637 [DEBUG] [Thread-57595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:32:20.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:32:20.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:32:20.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:32:20.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:32:20.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:32:20.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:32:20.671 [DEBUG] [Thread-57595] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:32:22.167 [DEBUG] [Thread-57597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:32:28.360 [DEBUG] [Thread-57598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:32:43.396 [DEBUG] [Thread-57599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:32:50.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:32:50.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:32:50.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:32:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 32, 24), 27.56, 15.46, 0.0, 11.35, 22.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:32:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:32:24
2025-11-17T16:32:51.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:32:51.631 [DEBUG] [Thread-57600] [transport.py] [_log()] starting thread (client mode): 0xd078caf0
2025-11-17T16:32:51.631 [DEBUG] [Thread-57600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:32:51.651 [DEBUG] [Thread-57600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:32:51.651 [INFO] [Thread-57600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] client lang: <none>
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] server lang: <none>
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] kex follows: False
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] Compression: none
2025-11-17T16:32:51.655 [DEBUG] [Thread-57600] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:32:51.671 [DEBUG] [Thread-57600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:32:51.671 [DEBUG] [Thread-57600] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:32:51.672 [DEBUG] [Thread-57600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:32:51.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:32:51.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:32:51.674 [DEBUG] [Thread-57600] [transport.py] [_log()] userauth is OK
2025-11-17T16:32:51.674 [DEBUG] [Thread-57600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:32:51.674 [DEBUG] [Thread-57600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:32:51.674 [DEBUG] [Thread-57600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:32:51.674 [DEBUG] [Thread-57600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:32:51.692 [INFO] [Thread-57600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:32:51.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:32:52.335 [DEBUG] [Thread-57600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:32:52.335 [DEBUG] [Thread-57600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:32:52.335 [DEBUG] [Thread-57600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:32:52.375 [DEBUG] [Thread-57600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:32:52.375 [DEBUG] [Thread-57600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:32:52.378 [DEBUG] [Thread-57600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:32:52.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:32:52.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:32:52.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:32:52.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:32:52.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:32:52.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:32:52.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:32:52.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:32:52.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:32:52.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.605608 -999.00  +22.40  14.68     21   -0.50 1 2 1 1 1   888    0 23.54 -4.51 ----- 15.1 14.7 284.1 20.7 26.8 -18.4 26.6 -17.5 26.4 -20.3 27.1 -17.6
2025-11-17T16:32:52.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:32:52.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:32:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.605608
2025-11-17T16:32:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:32:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:32:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:32:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:32:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:32:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:32:24', tmtdew=27.56, humidity=15.46, cloud=0.0, wind=11.35, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:32:04.531', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:32:52.403 [DEBUG] [Thread-57600] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:32:52.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:32:52.501 [DEBUG] [Thread-57603] [transport.py] [_log()] starting thread (client mode): 0xd31639a0
2025-11-17T16:32:52.501 [DEBUG] [Thread-57603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:32:52.516 [DEBUG] [Thread-57603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:32:52.516 [INFO] [Thread-57603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:32:52.523 [DEBUG] [Thread-57603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] client lang: <none>
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] server lang: <none>
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] kex follows: False
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:32:52.524 [DEBUG] [Thread-57603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:32:52.525 [DEBUG] [Thread-57603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:32:52.525 [DEBUG] [Thread-57603] [transport.py] [_log()] Compression: none
2025-11-17T16:32:52.525 [DEBUG] [Thread-57603] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:32:52.581 [DEBUG] [Thread-57603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:32:52.581 [DEBUG] [Thread-57603] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:32:52.582 [DEBUG] [Thread-57603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:32:52.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:32:52.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:32:52.637 [DEBUG] [Thread-57603] [transport.py] [_log()] userauth is OK
2025-11-17T16:32:52.637 [DEBUG] [Thread-57603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:32:52.638 [DEBUG] [Thread-57603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:32:52.638 [DEBUG] [Thread-57603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:32:52.638 [DEBUG] [Thread-57603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:32:52.657 [INFO] [Thread-57603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:32:52.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:32:52.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:32:53.500 [DEBUG] [Thread-57603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:32:53.501 [DEBUG] [Thread-57603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:32:53.548 [DEBUG] [Thread-57603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:32:53.548 [DEBUG] [Thread-57603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:32:53.557 [DEBUG] [Thread-57603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:32:53.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:32:53.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:32:53.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:32:53.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:32:53.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:32:53.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:32:53.592 [DEBUG] [Thread-57603] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:32:58.422 [DEBUG] [Thread-57605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:33:13.456 [DEBUG] [Thread-57606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:33:17.898 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:33:17.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:33:22.212 [DEBUG] [Thread-57607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:33:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:33:23.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:33:23.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:33:24.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 32, 56), 27.62, 15.56, 0.0, 12.48, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:33:24.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:32:56
2025-11-17T16:33:24.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:33:24.546 [DEBUG] [Thread-57608] [transport.py] [_log()] starting thread (client mode): 0xd3137460
2025-11-17T16:33:24.546 [DEBUG] [Thread-57608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:33:24.566 [DEBUG] [Thread-57608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:33:24.566 [INFO] [Thread-57608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:33:24.567 [DEBUG] [Thread-57608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:33:24.567 [DEBUG] [Thread-57608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:33:24.567 [DEBUG] [Thread-57608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:33:24.567 [DEBUG] [Thread-57608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] client lang: <none>
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] server lang: <none>
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] kex follows: False
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] Compression: none
2025-11-17T16:33:24.568 [DEBUG] [Thread-57608] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:33:24.578 [DEBUG] [Thread-57608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:33:24.579 [DEBUG] [Thread-57608] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:33:24.579 [DEBUG] [Thread-57608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:33:24.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:33:24.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:33:24.581 [DEBUG] [Thread-57608] [transport.py] [_log()] userauth is OK
2025-11-17T16:33:24.581 [DEBUG] [Thread-57608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:33:24.581 [DEBUG] [Thread-57608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:33:24.581 [DEBUG] [Thread-57608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:33:24.582 [DEBUG] [Thread-57608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:33:24.605 [INFO] [Thread-57608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:33:24.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:33:25.239 [DEBUG] [Thread-57608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:33:25.240 [DEBUG] [Thread-57608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:33:25.240 [DEBUG] [Thread-57608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:33:25.280 [DEBUG] [Thread-57608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:33:25.280 [DEBUG] [Thread-57608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:33:25.283 [DEBUG] [Thread-57608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:33:25.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:33:25.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:33:25.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:33:25.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:33:25.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:33:25.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:33:25.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:33:25.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:33:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:33:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.605955 -999.00  +22.40  15.46     21   -0.60 1 2 1 1 1   888    0 22.85 -7.03 ----- 14.2 15.5 275.4 19.2 26.6 -19.1 26.6 -18.2 26.2 -17.4 26.9 -17.6
2025-11-17T16:33:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:33:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:33:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.605955
2025-11-17T16:33:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:33:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:33:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:33:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:33:25.307 [DEBUG] [Thread-57608] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:33:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:33:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:32:56', tmtdew=27.62, humidity=15.56, cloud=0.0, wind=12.48, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:32:34.512', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:33:25.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:33:25.402 [DEBUG] [Thread-57611] [transport.py] [_log()] starting thread (client mode): 0xd070e7a0
2025-11-17T16:33:25.402 [DEBUG] [Thread-57611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:33:25.417 [DEBUG] [Thread-57611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:33:25.417 [INFO] [Thread-57611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:33:25.425 [DEBUG] [Thread-57611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:33:25.425 [DEBUG] [Thread-57611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:33:25.425 [DEBUG] [Thread-57611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:33:25.425 [DEBUG] [Thread-57611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] client lang: <none>
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] server lang: <none>
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] kex follows: False
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] Compression: none
2025-11-17T16:33:25.426 [DEBUG] [Thread-57611] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:33:25.485 [DEBUG] [Thread-57611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:33:25.486 [DEBUG] [Thread-57611] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:33:25.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:33:25.487 [DEBUG] [Thread-57611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:33:25.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:33:25.541 [DEBUG] [Thread-57611] [transport.py] [_log()] userauth is OK
2025-11-17T16:33:25.541 [DEBUG] [Thread-57611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:33:25.541 [DEBUG] [Thread-57611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:33:25.542 [DEBUG] [Thread-57611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:33:25.542 [DEBUG] [Thread-57611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:33:25.561 [INFO] [Thread-57611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:33:25.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:33:25.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:33:26.494 [DEBUG] [Thread-57611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:33:26.494 [DEBUG] [Thread-57611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:33:26.542 [DEBUG] [Thread-57611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:33:26.542 [DEBUG] [Thread-57611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:33:26.552 [DEBUG] [Thread-57611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:33:26.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:33:26.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:33:26.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
2025-11-17T16:33:26.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:33:26.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:33:26.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:33:26.594 [DEBUG] [Thread-57611] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:33:28.489 [DEBUG] [Thread-57613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:33:43.539 [DEBUG] [Thread-57614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:33:56.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:33:56.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:33:56.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:33:57.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 33, 28), 27.49, 15.7, 0.0, 14.19, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:33:57.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:33:28
2025-11-17T16:33:57.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:33:57.598 [DEBUG] [Thread-57615] [transport.py] [_log()] starting thread (client mode): 0xd0723850
2025-11-17T16:33:57.599 [DEBUG] [Thread-57615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:33:57.618 [DEBUG] [Thread-57615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:33:57.618 [INFO] [Thread-57615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:33:57.619 [DEBUG] [Thread-57615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] client lang: <none>
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] server lang: <none>
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] kex follows: False
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] Compression: none
2025-11-17T16:33:57.620 [DEBUG] [Thread-57615] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:33:57.637 [DEBUG] [Thread-57615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:33:57.637 [DEBUG] [Thread-57615] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:33:57.637 [DEBUG] [Thread-57615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:33:57.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:33:57.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:33:57.638 [DEBUG] [Thread-57615] [transport.py] [_log()] userauth is OK
2025-11-17T16:33:57.638 [DEBUG] [Thread-57615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:33:57.638 [DEBUG] [Thread-57615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:33:57.638 [DEBUG] [Thread-57615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:33:57.638 [DEBUG] [Thread-57615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:33:57.647 [INFO] [Thread-57615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:33:57.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:33:58.207 [DEBUG] [Thread-57615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:33:58.207 [DEBUG] [Thread-57615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:33:58.207 [DEBUG] [Thread-57615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:33:58.248 [DEBUG] [Thread-57615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:33:58.248 [DEBUG] [Thread-57615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:33:58.250 [DEBUG] [Thread-57615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:33:58.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:33:58.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:33:58.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:33:58.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:33:58.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:33:58.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:33:58.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.606302 -999.00  +22.20  13.71     21   -0.70 1 2 1 1 1   888    0 23.16 -8.42 ----- 13.6 13.7 300.4 18.9 26.5 -18.5 26.4 -17.7 26.2 -16.9 26.7 -17.3
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.606302
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:33:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:33:28', tmtdew=27.49, humidity=15.7, cloud=0.0, wind=14.19, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:33:04.493', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:33:58.268 [DEBUG] [Thread-57615] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:33:58.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:33:58.354 [DEBUG] [Thread-57618] [transport.py] [_log()] starting thread (client mode): 0xd3162980
2025-11-17T16:33:58.354 [DEBUG] [Thread-57618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:33:58.369 [DEBUG] [Thread-57618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:33:58.369 [INFO] [Thread-57618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:33:58.376 [DEBUG] [Thread-57618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] client lang: <none>
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] server lang: <none>
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] kex follows: False
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] Compression: none
2025-11-17T16:33:58.377 [DEBUG] [Thread-57618] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:33:58.432 [DEBUG] [Thread-57618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:33:58.432 [DEBUG] [Thread-57618] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:33:58.432 [DEBUG] [Thread-57618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:33:58.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:33:58.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:33:58.489 [DEBUG] [Thread-57618] [transport.py] [_log()] userauth is OK
2025-11-17T16:33:58.489 [DEBUG] [Thread-57618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:33:58.489 [DEBUG] [Thread-57618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:33:58.489 [DEBUG] [Thread-57618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:33:58.489 [DEBUG] [Thread-57618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:33:58.503 [INFO] [Thread-57618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:33:58.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:33:58.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:33:58.569 [DEBUG] [Thread-57620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:33:59.374 [DEBUG] [Thread-57618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:33:59.374 [DEBUG] [Thread-57618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:33:59.422 [DEBUG] [Thread-57618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:33:59.422 [DEBUG] [Thread-57618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:33:59.430 [DEBUG] [Thread-57618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:33:59.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:33:59.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:33:59.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:33:59.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:33:59.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:33:59.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:33:59.462 [DEBUG] [Thread-57618] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:34:13.597 [DEBUG] [Thread-57621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:34:18.042 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:34:18.043 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:34:22.254 [DEBUG] [Thread-57622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:34:28.628 [DEBUG] [Thread-57623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:34:29.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:34:29.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:34:29.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:34:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 34), 27.29, 15.7, 0.0, 11.43, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:34:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:34:00
2025-11-17T16:34:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:34:30.421 [DEBUG] [Thread-57624] [transport.py] [_log()] starting thread (client mode): 0xd3134730
2025-11-17T16:34:30.421 [DEBUG] [Thread-57624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:34:30.431 [DEBUG] [Thread-57624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:34:30.431 [INFO] [Thread-57624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:34:30.433 [DEBUG] [Thread-57624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] client lang: <none>
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] server lang: <none>
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] kex follows: False
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] Compression: none
2025-11-17T16:34:30.434 [DEBUG] [Thread-57624] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:34:30.450 [DEBUG] [Thread-57624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:34:30.450 [DEBUG] [Thread-57624] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:34:30.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:34:30.451 [DEBUG] [Thread-57624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:34:30.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:34:30.452 [DEBUG] [Thread-57624] [transport.py] [_log()] userauth is OK
2025-11-17T16:34:30.452 [DEBUG] [Thread-57624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:34:30.452 [DEBUG] [Thread-57624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:34:30.452 [DEBUG] [Thread-57624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:34:30.452 [DEBUG] [Thread-57624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:34:30.464 [INFO] [Thread-57624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:34:30.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:34:31.105 [DEBUG] [Thread-57624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:34:31.105 [DEBUG] [Thread-57624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:34:31.106 [DEBUG] [Thread-57624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:34:31.146 [DEBUG] [Thread-57624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:34:31.146 [DEBUG] [Thread-57624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:34:31.149 [DEBUG] [Thread-57624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:34:31.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:34:31.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:34:31.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:34:31.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:34:31.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:34:31.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:34:31.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:34:31.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:34:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:34:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.606649 -999.00  +22.30   8.83     21   -0.60 1 2 1 1 1   888    0 23.05 -10.10 ----- 7.2 8.8 296.2 17.1 26.5 -17.9 26.4 -17.6 26.2 -16.6 26.6 -16.9
2025-11-17T16:34:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:34:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:34:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.606649
2025-11-17T16:34:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:34:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:34:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:34:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:34:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:34:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:34:00', tmtdew=27.29, humidity=15.7, cloud=0.0, wind=11.43, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:33:34.474', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:34:31.170 [DEBUG] [Thread-57624] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:34:31.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:34:31.259 [DEBUG] [Thread-57627] [transport.py] [_log()] starting thread (client mode): 0xd0721270
2025-11-17T16:34:31.259 [DEBUG] [Thread-57627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:34:31.274 [DEBUG] [Thread-57627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:34:31.274 [INFO] [Thread-57627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:34:31.281 [DEBUG] [Thread-57627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] client lang: <none>
2025-11-17T16:34:31.282 [DEBUG] [Thread-57627] [transport.py] [_log()] server lang: <none>
2025-11-17T16:34:31.283 [DEBUG] [Thread-57627] [transport.py] [_log()] kex follows: False
2025-11-17T16:34:31.283 [DEBUG] [Thread-57627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:34:31.283 [DEBUG] [Thread-57627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:34:31.283 [DEBUG] [Thread-57627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:34:31.283 [DEBUG] [Thread-57627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:34:31.283 [DEBUG] [Thread-57627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:34:31.283 [DEBUG] [Thread-57627] [transport.py] [_log()] Compression: none
2025-11-17T16:34:31.283 [DEBUG] [Thread-57627] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:34:31.345 [DEBUG] [Thread-57627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:34:31.345 [DEBUG] [Thread-57627] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:34:31.346 [DEBUG] [Thread-57627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:34:31.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:34:31.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:34:31.401 [DEBUG] [Thread-57627] [transport.py] [_log()] userauth is OK
2025-11-17T16:34:31.401 [DEBUG] [Thread-57627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:34:31.401 [DEBUG] [Thread-57627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:34:31.401 [DEBUG] [Thread-57627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:34:31.402 [DEBUG] [Thread-57627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:34:31.421 [INFO] [Thread-57627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:34:31.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:34:31.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:34:32.293 [DEBUG] [Thread-57627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:34:32.293 [DEBUG] [Thread-57627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:34:32.341 [DEBUG] [Thread-57627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:34:32.341 [DEBUG] [Thread-57627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:34:32.350 [DEBUG] [Thread-57627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:34:32.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:34:32.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:34:32.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:34:32.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:34:32.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:34:32.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:34:32.384 [DEBUG] [Thread-57627] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:34:43.659 [DEBUG] [Thread-57629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:34:58.700 [DEBUG] [Thread-57630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:35:02.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:35:02.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:35:02.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:35:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 34, 32), 27.2, 15.78, 0.0, 11.1, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:35:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:34:32
2025-11-17T16:35:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:35:03.352 [DEBUG] [Thread-57631] [transport.py] [_log()] starting thread (client mode): 0xd0756410
2025-11-17T16:35:03.352 [DEBUG] [Thread-57631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:35:03.372 [DEBUG] [Thread-57631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:35:03.373 [INFO] [Thread-57631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:35:03.376 [DEBUG] [Thread-57631] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:35:03.376 [DEBUG] [Thread-57631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:35:03.376 [DEBUG] [Thread-57631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:35:03.376 [DEBUG] [Thread-57631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] client lang: <none>
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] server lang: <none>
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] kex follows: False
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] Compression: none
2025-11-17T16:35:03.377 [DEBUG] [Thread-57631] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:35:03.386 [DEBUG] [Thread-57631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:35:03.386 [DEBUG] [Thread-57631] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:35:03.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:35:03.387 [DEBUG] [Thread-57631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:35:03.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:35:03.389 [DEBUG] [Thread-57631] [transport.py] [_log()] userauth is OK
2025-11-17T16:35:03.389 [DEBUG] [Thread-57631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:35:03.389 [DEBUG] [Thread-57631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:35:03.389 [DEBUG] [Thread-57631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:35:03.389 [DEBUG] [Thread-57631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:35:03.400 [INFO] [Thread-57631] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:35:03.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:35:08.228 [DEBUG] [Thread-57631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:35:08.228 [DEBUG] [Thread-57631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:35:08.228 [DEBUG] [Thread-57631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:35:08.269 [DEBUG] [Thread-57631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:35:08.270 [DEBUG] [Thread-57631] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:35:08.273 [DEBUG] [Thread-57631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:35:08.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:35:08.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:35:08.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:35:08.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:35:08.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:35:08.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:35:08.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.606996 -999.00  +22.20  11.41     21   -0.70 1 2 1 1 1   888    0 22.72 -11.38 ----- 14.1 11.4 313.8 13.5 26.5 -17.5 26.4 -17.1 26.2 -16.7 26.6 -16.3
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.606996
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:35:08.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:35:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:35:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:34:32', tmtdew=27.2, humidity=15.78, cloud=0.0, wind=11.1, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:34:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:35:08.402 [DEBUG] [Thread-57631] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:35:08.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:35:08.487 [DEBUG] [Thread-57634] [transport.py] [_log()] starting thread (client mode): 0xd07555d0
2025-11-17T16:35:08.488 [DEBUG] [Thread-57634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:35:08.503 [DEBUG] [Thread-57634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:35:08.503 [INFO] [Thread-57634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:35:08.510 [DEBUG] [Thread-57634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:35:08.510 [DEBUG] [Thread-57634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:35:08.510 [DEBUG] [Thread-57634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] client lang: <none>
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] server lang: <none>
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] kex follows: False
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] Compression: none
2025-11-17T16:35:08.511 [DEBUG] [Thread-57634] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:35:08.568 [DEBUG] [Thread-57634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:35:08.568 [DEBUG] [Thread-57634] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:35:08.569 [DEBUG] [Thread-57634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:35:08.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:35:08.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:35:08.625 [DEBUG] [Thread-57634] [transport.py] [_log()] userauth is OK
2025-11-17T16:35:08.625 [DEBUG] [Thread-57634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:35:08.625 [DEBUG] [Thread-57634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:35:08.625 [DEBUG] [Thread-57634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:35:08.625 [DEBUG] [Thread-57634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:35:08.639 [INFO] [Thread-57634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:35:08.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:35:08.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:35:09.493 [DEBUG] [Thread-57634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:35:09.493 [DEBUG] [Thread-57634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:35:09.541 [DEBUG] [Thread-57634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:35:09.541 [DEBUG] [Thread-57634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:35:09.551 [DEBUG] [Thread-57634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:35:09.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:35:09.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:35:09.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:35:09.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:35:09.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:35:09.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:35:09.585 [DEBUG] [Thread-57634] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:35:13.726 [DEBUG] [Thread-57636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:35:18.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:35:18.184 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:35:22.307 [DEBUG] [Thread-57637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:35:28.762 [DEBUG] [Thread-57638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:35:39.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:35:39.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:35:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:35:40.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 35, 36), 27.43, 15.8, 0.0, 8.33, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:35:40.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:35:36
2025-11-17T16:35:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:35:40.520 [DEBUG] [Thread-57639] [transport.py] [_log()] starting thread (client mode): 0xd31370d0
2025-11-17T16:35:40.520 [DEBUG] [Thread-57639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:35:40.540 [DEBUG] [Thread-57639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:35:40.540 [INFO] [Thread-57639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] client lang: <none>
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] server lang: <none>
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] kex follows: False
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:35:40.544 [DEBUG] [Thread-57639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:35:40.545 [DEBUG] [Thread-57639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:35:40.545 [DEBUG] [Thread-57639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:35:40.545 [DEBUG] [Thread-57639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:35:40.545 [DEBUG] [Thread-57639] [transport.py] [_log()] Compression: none
2025-11-17T16:35:40.545 [DEBUG] [Thread-57639] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:35:40.562 [DEBUG] [Thread-57639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:35:40.562 [DEBUG] [Thread-57639] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:35:40.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:35:40.563 [DEBUG] [Thread-57639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:35:40.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:35:40.565 [DEBUG] [Thread-57639] [transport.py] [_log()] userauth is OK
2025-11-17T16:35:40.565 [DEBUG] [Thread-57639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:35:40.565 [DEBUG] [Thread-57639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:35:40.566 [DEBUG] [Thread-57639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:35:40.566 [DEBUG] [Thread-57639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:35:40.583 [INFO] [Thread-57639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:35:40.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:35:41.188 [DEBUG] [Thread-57639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:35:41.188 [DEBUG] [Thread-57639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:35:41.188 [DEBUG] [Thread-57639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:35:41.229 [DEBUG] [Thread-57639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:35:41.229 [DEBUG] [Thread-57639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:35:41.231 [DEBUG] [Thread-57639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:35:41.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:35:41.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:35:41.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:35:41.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:35:41.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:35:41.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:35:41.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:35:41.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:35:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:35:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.607344 -999.00  +22.10  10.31     21   -0.70 1 2 1 1 1   888    0 22.90 -10.71 ----- 8.8 10.3 301.2 15.0 26.4 -17.5 26.3 -17.1 26.1 -17.3 26.6 -16.5
2025-11-17T16:35:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:35:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:35:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.607344
2025-11-17T16:35:41.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:35:41.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:35:41.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:35:41.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:35:41.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:35:41.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:35:36', tmtdew=27.43, humidity=15.8, cloud=0.0, wind=8.33, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:34:34.522', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:35:41.247 [DEBUG] [Thread-57639] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:35:41.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:35:41.333 [DEBUG] [Thread-57642] [transport.py] [_log()] starting thread (client mode): 0xd07573a0
2025-11-17T16:35:41.333 [DEBUG] [Thread-57642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:35:41.348 [DEBUG] [Thread-57642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:35:41.348 [INFO] [Thread-57642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:35:41.355 [DEBUG] [Thread-57642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:35:41.355 [DEBUG] [Thread-57642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:35:41.355 [DEBUG] [Thread-57642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:35:41.355 [DEBUG] [Thread-57642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:35:41.355 [DEBUG] [Thread-57642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] client lang: <none>
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] server lang: <none>
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] kex follows: False
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] Compression: none
2025-11-17T16:35:41.356 [DEBUG] [Thread-57642] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:35:41.412 [DEBUG] [Thread-57642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:35:41.412 [DEBUG] [Thread-57642] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:35:41.413 [DEBUG] [Thread-57642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:35:41.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:35:41.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:35:41.469 [DEBUG] [Thread-57642] [transport.py] [_log()] userauth is OK
2025-11-17T16:35:41.470 [DEBUG] [Thread-57642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:35:41.470 [DEBUG] [Thread-57642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:35:41.470 [DEBUG] [Thread-57642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:35:41.470 [DEBUG] [Thread-57642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:35:41.491 [INFO] [Thread-57642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:35:41.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:35:41.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:35:42.340 [DEBUG] [Thread-57642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:35:42.341 [DEBUG] [Thread-57642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:35:42.388 [DEBUG] [Thread-57642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:35:42.389 [DEBUG] [Thread-57642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:35:42.397 [DEBUG] [Thread-57642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:35:42.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:35:42.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:35:42.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:35:42.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:35:42.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:35:42.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:35:42.432 [DEBUG] [Thread-57642] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:35:43.794 [DEBUG] [Thread-57644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:35:58.836 [DEBUG] [Thread-57645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:36:12.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:36:12.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:36:12.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:36:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 36, 8), 27.44, 15.78, 0.0, 8.45, 22.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:36:13.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:36:08
2025-11-17T16:36:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:36:13.376 [DEBUG] [Thread-57646] [transport.py] [_log()] starting thread (client mode): 0xd070ee00
2025-11-17T16:36:13.376 [DEBUG] [Thread-57646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:36:13.398 [DEBUG] [Thread-57646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:36:13.398 [INFO] [Thread-57646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:36:13.402 [DEBUG] [Thread-57646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:36:13.402 [DEBUG] [Thread-57646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:36:13.402 [DEBUG] [Thread-57646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] client lang: <none>
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] server lang: <none>
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] kex follows: False
2025-11-17T16:36:13.403 [DEBUG] [Thread-57646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:36:13.404 [DEBUG] [Thread-57646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:36:13.404 [DEBUG] [Thread-57646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:36:13.404 [DEBUG] [Thread-57646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:36:13.404 [DEBUG] [Thread-57646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:36:13.404 [DEBUG] [Thread-57646] [transport.py] [_log()] Compression: none
2025-11-17T16:36:13.404 [DEBUG] [Thread-57646] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:36:13.423 [DEBUG] [Thread-57646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:36:13.423 [DEBUG] [Thread-57646] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:36:13.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:36:13.424 [DEBUG] [Thread-57646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:36:13.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:36:13.426 [DEBUG] [Thread-57646] [transport.py] [_log()] userauth is OK
2025-11-17T16:36:13.426 [DEBUG] [Thread-57646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:36:13.426 [DEBUG] [Thread-57646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:36:13.426 [DEBUG] [Thread-57646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:36:13.427 [DEBUG] [Thread-57646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:36:13.440 [INFO] [Thread-57646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:36:13.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:36:13.866 [DEBUG] [Thread-57648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:36:14.106 [DEBUG] [Thread-57646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:36:14.106 [DEBUG] [Thread-57646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:36:14.106 [DEBUG] [Thread-57646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:36:14.146 [DEBUG] [Thread-57646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:36:14.146 [DEBUG] [Thread-57646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:36:14.149 [DEBUG] [Thread-57646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:36:14.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:36:14.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:36:14.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:36:14.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:36:14.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:36:14.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:36:14.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:36:14.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:36:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:36:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.608038 -999.00  +22.20  13.08     21   -0.60 1 2 1 1 1   888    0 23.35 -14.28 ----- 10.9 13.1 302.4 14.4 26.4 -17.3 26.3 -16.7 26.0 -16.2 26.4 -16.2
2025-11-17T16:36:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:36:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:36:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.608038
2025-11-17T16:36:14.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:36:14.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:36:14.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:36:14.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:36:14.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:36:14.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:36:08', tmtdew=27.44, humidity=15.78, cloud=0.0, wind=8.45, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:35:34.483', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:36:14.173 [DEBUG] [Thread-57646] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:36:14.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:36:14.269 [DEBUG] [Thread-57650] [transport.py] [_log()] starting thread (client mode): 0xd078cb80
2025-11-17T16:36:14.270 [DEBUG] [Thread-57650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:36:14.285 [DEBUG] [Thread-57650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:36:14.285 [INFO] [Thread-57650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:36:14.292 [DEBUG] [Thread-57650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:36:14.292 [DEBUG] [Thread-57650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:36:14.292 [DEBUG] [Thread-57650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:36:14.292 [DEBUG] [Thread-57650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:36:14.292 [DEBUG] [Thread-57650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] client lang: <none>
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] server lang: <none>
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] kex follows: False
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] Compression: none
2025-11-17T16:36:14.293 [DEBUG] [Thread-57650] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:36:14.353 [DEBUG] [Thread-57650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:36:14.354 [DEBUG] [Thread-57650] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:36:14.354 [DEBUG] [Thread-57650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:36:14.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:36:14.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:36:14.410 [DEBUG] [Thread-57650] [transport.py] [_log()] userauth is OK
2025-11-17T16:36:14.410 [DEBUG] [Thread-57650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:36:14.410 [DEBUG] [Thread-57650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:36:14.410 [DEBUG] [Thread-57650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:36:14.410 [DEBUG] [Thread-57650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:36:14.433 [INFO] [Thread-57650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:36:14.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:36:14.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:36:15.292 [DEBUG] [Thread-57650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:36:15.292 [DEBUG] [Thread-57650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:36:15.340 [DEBUG] [Thread-57650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:36:15.340 [DEBUG] [Thread-57650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:36:15.349 [DEBUG] [Thread-57650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:36:15.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:36:15.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:36:15.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:36:15.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:36:15.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:36:15.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:36:15.384 [DEBUG] [Thread-57650] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:36:18.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:36:18.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:36:22.359 [DEBUG] [Thread-57652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:36:28.899 [DEBUG] [Thread-57653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:36:43.937 [DEBUG] [Thread-57654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:36:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:36:45.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:36:45.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:36:46.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 36, 40), 27.46, 15.31, 0.0, 14.21, 22.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:36:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:36:40
2025-11-17T16:36:46.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:36:46.326 [DEBUG] [Thread-57655] [transport.py] [_log()] starting thread (client mode): 0xd0777910
2025-11-17T16:36:46.326 [DEBUG] [Thread-57655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:36:46.347 [DEBUG] [Thread-57655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:36:46.347 [INFO] [Thread-57655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:36:46.349 [DEBUG] [Thread-57655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] client lang: <none>
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] server lang: <none>
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] kex follows: False
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] Compression: none
2025-11-17T16:36:46.350 [DEBUG] [Thread-57655] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:36:46.363 [DEBUG] [Thread-57655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:36:46.364 [DEBUG] [Thread-57655] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:36:46.365 [DEBUG] [Thread-57655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:36:46.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:36:46.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:36:46.367 [DEBUG] [Thread-57655] [transport.py] [_log()] userauth is OK
2025-11-17T16:36:46.367 [DEBUG] [Thread-57655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:36:46.367 [DEBUG] [Thread-57655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:36:46.367 [DEBUG] [Thread-57655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:36:46.367 [DEBUG] [Thread-57655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:36:46.388 [INFO] [Thread-57655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:36:46.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:36:46.999 [DEBUG] [Thread-57655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:36:46.999 [DEBUG] [Thread-57655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:36:46.999 [DEBUG] [Thread-57655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:36:47.041 [DEBUG] [Thread-57655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:36:47.041 [DEBUG] [Thread-57655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:36:47.044 [DEBUG] [Thread-57655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:36:47.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:36:47.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:36:47.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:36:47.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:36:47.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:36:47.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:36:47.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:36:47.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:36:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:36:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.608385 -999.00  +22.20  14.30     21   -0.70 1 2 1 1 1   888    0 23.12 -12.95 ----- 13.3 14.3 295.2 17.0 26.4 -17.0 26.2 -16.6 26.0 -16.5 26.4 -16.0
2025-11-17T16:36:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:36:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:36:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.608385
2025-11-17T16:36:47.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:36:47.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:36:47.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:36:47.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:36:47.069 [DEBUG] [Thread-57655] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:36:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:36:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:36:40', tmtdew=27.46, humidity=15.31, cloud=0.0, wind=14.21, temperature=22.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:36:04.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:36:47.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:36:47.155 [DEBUG] [Thread-57658] [transport.py] [_log()] starting thread (client mode): 0xd0787310
2025-11-17T16:36:47.156 [DEBUG] [Thread-57658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:36:47.171 [DEBUG] [Thread-57658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:36:47.171 [INFO] [Thread-57658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:36:47.178 [DEBUG] [Thread-57658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:36:47.178 [DEBUG] [Thread-57658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] client lang: <none>
2025-11-17T16:36:47.179 [DEBUG] [Thread-57658] [transport.py] [_log()] server lang: <none>
2025-11-17T16:36:47.180 [DEBUG] [Thread-57658] [transport.py] [_log()] kex follows: False
2025-11-17T16:36:47.180 [DEBUG] [Thread-57658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:36:47.180 [DEBUG] [Thread-57658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:36:47.180 [DEBUG] [Thread-57658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:36:47.180 [DEBUG] [Thread-57658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:36:47.180 [DEBUG] [Thread-57658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:36:47.180 [DEBUG] [Thread-57658] [transport.py] [_log()] Compression: none
2025-11-17T16:36:47.180 [DEBUG] [Thread-57658] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:36:47.238 [DEBUG] [Thread-57658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:36:47.238 [DEBUG] [Thread-57658] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:36:47.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:36:47.240 [DEBUG] [Thread-57658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:36:47.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:36:47.293 [DEBUG] [Thread-57658] [transport.py] [_log()] userauth is OK
2025-11-17T16:36:47.293 [DEBUG] [Thread-57658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:36:47.293 [DEBUG] [Thread-57658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:36:47.293 [DEBUG] [Thread-57658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:36:47.294 [DEBUG] [Thread-57658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:36:47.312 [INFO] [Thread-57658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:36:47.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:36:47.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:36:48.221 [DEBUG] [Thread-57658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:36:48.221 [DEBUG] [Thread-57658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:36:48.269 [DEBUG] [Thread-57658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:36:48.269 [DEBUG] [Thread-57658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:36:48.278 [DEBUG] [Thread-57658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:36:48.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:36:48.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:36:48.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:36:48.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:36:48.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:36:48.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:36:48.313 [DEBUG] [Thread-57658] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:36:58.966 [DEBUG] [Thread-57660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:37:14.015 [DEBUG] [Thread-57661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:37:18.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:37:18.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:37:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:37:18.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:37:18.466 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:37:18.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 37, 12), 27.41, 15.38, 0.0, 15.19, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:37:18.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:37:12
2025-11-17T16:37:19.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:37:19.235 [DEBUG] [Thread-57662] [transport.py] [_log()] starting thread (client mode): 0xd0785360
2025-11-17T16:37:19.235 [DEBUG] [Thread-57662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:37:19.256 [DEBUG] [Thread-57662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:37:19.256 [INFO] [Thread-57662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] client lang: <none>
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] server lang: <none>
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] kex follows: False
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:37:19.259 [DEBUG] [Thread-57662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:37:19.260 [DEBUG] [Thread-57662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:37:19.260 [DEBUG] [Thread-57662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:37:19.260 [DEBUG] [Thread-57662] [transport.py] [_log()] Compression: none
2025-11-17T16:37:19.260 [DEBUG] [Thread-57662] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:37:19.276 [DEBUG] [Thread-57662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:37:19.277 [DEBUG] [Thread-57662] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:37:19.277 [DEBUG] [Thread-57662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:37:19.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:37:19.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:37:19.279 [DEBUG] [Thread-57662] [transport.py] [_log()] userauth is OK
2025-11-17T16:37:19.279 [DEBUG] [Thread-57662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:37:19.279 [DEBUG] [Thread-57662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:37:19.279 [DEBUG] [Thread-57662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:37:19.279 [DEBUG] [Thread-57662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:37:19.303 [INFO] [Thread-57662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:37:19.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:37:19.920 [DEBUG] [Thread-57662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:37:19.920 [DEBUG] [Thread-57662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:37:19.921 [DEBUG] [Thread-57662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:37:19.961 [DEBUG] [Thread-57662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:37:19.961 [DEBUG] [Thread-57662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:37:19.964 [DEBUG] [Thread-57662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:37:19.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:37:19.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:37:19.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:37:19.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:37:19.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:37:19.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:37:19.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:37:19.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:37:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:37:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.608732 -999.00  +22.20  19.13     21   -0.70 1 2 1 1 1   888    0 22.56 -13.42 ----- 16.3 19.1 268.0 26.5 26.4 -16.7 26.1 -16.6 25.7 -17.1 26.3 -15.8
2025-11-17T16:37:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:37:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:37:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.608732
2025-11-17T16:37:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:37:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:37:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:37:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:37:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:37:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:37:12', tmtdew=27.41, humidity=15.38, cloud=0.0, wind=15.19, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:36:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:37:19.990 [DEBUG] [Thread-57662] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:37:20.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:37:20.085 [DEBUG] [Thread-57665] [transport.py] [_log()] starting thread (client mode): 0xd0784880
2025-11-17T16:37:20.086 [DEBUG] [Thread-57665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:37:20.107 [DEBUG] [Thread-57665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:37:20.108 [INFO] [Thread-57665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:37:20.115 [DEBUG] [Thread-57665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:37:20.115 [DEBUG] [Thread-57665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:37:20.115 [DEBUG] [Thread-57665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:37:20.115 [DEBUG] [Thread-57665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:37:20.115 [DEBUG] [Thread-57665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:37:20.115 [DEBUG] [Thread-57665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:37:20.115 [DEBUG] [Thread-57665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:37:20.115 [DEBUG] [Thread-57665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] client lang: <none>
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] server lang: <none>
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] kex follows: False
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] Compression: none
2025-11-17T16:37:20.116 [DEBUG] [Thread-57665] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:37:20.173 [DEBUG] [Thread-57665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:37:20.173 [DEBUG] [Thread-57665] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:37:20.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:37:20.174 [DEBUG] [Thread-57665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:37:20.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:37:20.229 [DEBUG] [Thread-57665] [transport.py] [_log()] userauth is OK
2025-11-17T16:37:20.230 [DEBUG] [Thread-57665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:37:20.230 [DEBUG] [Thread-57665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:37:20.230 [DEBUG] [Thread-57665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:37:20.230 [DEBUG] [Thread-57665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:37:20.251 [INFO] [Thread-57665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:37:20.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:37:20.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:37:21.157 [DEBUG] [Thread-57665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:37:21.157 [DEBUG] [Thread-57665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:37:21.205 [DEBUG] [Thread-57665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:37:21.205 [DEBUG] [Thread-57665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:37:21.215 [DEBUG] [Thread-57665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:37:21.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:37:21.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:37:21.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:37:21.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:37:21.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:37:21.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:37:21.249 [DEBUG] [Thread-57665] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:37:22.414 [DEBUG] [Thread-57667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:37:29.041 [DEBUG] [Thread-57668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:37:44.082 [DEBUG] [Thread-57669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:37:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:37:51.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:37:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:37:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 37, 44), 27.3, 15.71, 0.0, 15.7, 22.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:37:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:37:44
2025-11-17T16:37:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:37:52.230 [DEBUG] [Thread-57670] [transport.py] [_log()] starting thread (client mode): 0xd0757ac0
2025-11-17T16:37:52.230 [DEBUG] [Thread-57670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:37:52.250 [DEBUG] [Thread-57670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:37:52.250 [INFO] [Thread-57670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:37:52.253 [DEBUG] [Thread-57670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] client lang: <none>
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] server lang: <none>
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] kex follows: False
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] Compression: none
2025-11-17T16:37:52.254 [DEBUG] [Thread-57670] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:37:52.270 [DEBUG] [Thread-57670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:37:52.270 [DEBUG] [Thread-57670] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:37:52.270 [DEBUG] [Thread-57670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:37:52.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:37:52.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:37:52.271 [DEBUG] [Thread-57670] [transport.py] [_log()] userauth is OK
2025-11-17T16:37:52.271 [DEBUG] [Thread-57670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:37:52.272 [DEBUG] [Thread-57670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:37:52.272 [DEBUG] [Thread-57670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:37:52.272 [DEBUG] [Thread-57670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:37:52.283 [INFO] [Thread-57670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:37:52.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:37:52.929 [DEBUG] [Thread-57670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:37:52.929 [DEBUG] [Thread-57670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:37:52.930 [DEBUG] [Thread-57670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:37:52.970 [DEBUG] [Thread-57670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:37:52.971 [DEBUG] [Thread-57670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:37:52.974 [DEBUG] [Thread-57670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:37:52.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:37:52.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:37:52.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:37:52.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:37:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:37:52.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:37:52.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:37:52.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:37:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:37:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.609080 -999.00  +22.30  14.95     21   -0.80 1 2 1 1 1   888    0 22.52 -13.83 ----- 19.8 14.9 263.2 18.8 26.2 -16.7 26.2 -16.2 25.6 -18.0 26.1 -15.7
2025-11-17T16:37:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:37:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:37:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.609080
2025-11-17T16:37:52.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:37:52.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:37:52.997 [DEBUG] [Thread-57670] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:37:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:37:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:37:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:37:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:37:44', tmtdew=27.3, humidity=15.71, cloud=0.0, wind=15.7, temperature=22.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:37:04.512', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:37:53.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:37:53.095 [DEBUG] [Thread-57673] [transport.py] [_log()] starting thread (client mode): 0xd3160b80
2025-11-17T16:37:53.095 [DEBUG] [Thread-57673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:37:53.111 [DEBUG] [Thread-57673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:37:53.111 [INFO] [Thread-57673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:37:53.118 [DEBUG] [Thread-57673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:37:53.118 [DEBUG] [Thread-57673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] client lang: <none>
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] server lang: <none>
2025-11-17T16:37:53.119 [DEBUG] [Thread-57673] [transport.py] [_log()] kex follows: False
2025-11-17T16:37:53.120 [DEBUG] [Thread-57673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:37:53.120 [DEBUG] [Thread-57673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:37:53.120 [DEBUG] [Thread-57673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:37:53.120 [DEBUG] [Thread-57673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:37:53.120 [DEBUG] [Thread-57673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:37:53.120 [DEBUG] [Thread-57673] [transport.py] [_log()] Compression: none
2025-11-17T16:37:53.120 [DEBUG] [Thread-57673] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:37:53.178 [DEBUG] [Thread-57673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:37:53.178 [DEBUG] [Thread-57673] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:37:53.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:37:53.180 [DEBUG] [Thread-57673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:37:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:37:53.233 [DEBUG] [Thread-57673] [transport.py] [_log()] userauth is OK
2025-11-17T16:37:53.234 [DEBUG] [Thread-57673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:37:53.234 [DEBUG] [Thread-57673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:37:53.234 [DEBUG] [Thread-57673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:37:53.234 [DEBUG] [Thread-57673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:37:53.254 [INFO] [Thread-57673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:37:53.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:37:53.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:37:54.104 [DEBUG] [Thread-57673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:37:54.104 [DEBUG] [Thread-57673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:37:54.151 [DEBUG] [Thread-57673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:37:54.152 [DEBUG] [Thread-57673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:37:54.161 [DEBUG] [Thread-57673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:37:54.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:37:54.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:37:54.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:37:54.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:37:54.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:37:54.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:37:54.196 [DEBUG] [Thread-57673] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:37:59.113 [DEBUG] [Thread-57675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:38:14.156 [DEBUG] [Thread-57676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:38:18.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:38:18.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:38:22.465 [DEBUG] [Thread-57677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:38:24.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:38:24.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:38:24.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:38:24.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 38, 16), 27.26, 15.76, 0.0, 14.59, 22.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:38:24.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:38:16
2025-11-17T16:38:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:38:25.152 [DEBUG] [Thread-57678] [transport.py] [_log()] starting thread (client mode): 0xd07563e0
2025-11-17T16:38:25.152 [DEBUG] [Thread-57678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:38:25.172 [DEBUG] [Thread-57678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:38:25.172 [INFO] [Thread-57678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:38:25.175 [DEBUG] [Thread-57678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:38:25.175 [DEBUG] [Thread-57678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] client lang: <none>
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] server lang: <none>
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] kex follows: False
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:38:25.176 [DEBUG] [Thread-57678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:38:25.177 [DEBUG] [Thread-57678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:38:25.177 [DEBUG] [Thread-57678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:38:25.177 [DEBUG] [Thread-57678] [transport.py] [_log()] Compression: none
2025-11-17T16:38:25.177 [DEBUG] [Thread-57678] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:38:25.196 [DEBUG] [Thread-57678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:38:25.196 [DEBUG] [Thread-57678] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:38:25.197 [DEBUG] [Thread-57678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:38:25.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:38:25.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:38:25.237 [DEBUG] [Thread-57678] [transport.py] [_log()] userauth is OK
2025-11-17T16:38:25.237 [DEBUG] [Thread-57678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:38:25.237 [DEBUG] [Thread-57678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:38:25.237 [DEBUG] [Thread-57678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:38:25.237 [DEBUG] [Thread-57678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:38:25.269 [INFO] [Thread-57678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:38:25.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:38:25.894 [DEBUG] [Thread-57678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:38:25.894 [DEBUG] [Thread-57678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:38:25.894 [DEBUG] [Thread-57678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:38:25.935 [DEBUG] [Thread-57678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:38:25.935 [DEBUG] [Thread-57678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:38:25.937 [DEBUG] [Thread-57678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:38:25.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:38:25.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:38:25.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:38:25.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:38:25.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:38:25.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:38:25.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:38:25.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.609427 -999.00  +22.20  16.24     21   -1.00 1 2 1 1 1   887    0 23.10 -13.99 ----- 13.5 16.2 274.1 25.0 26.0 -17.1 26.0 -16.1 25.5 -16.3 26.0 -16.2
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.609427
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:38:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:38:16', tmtdew=27.26, humidity=15.76, cloud=0.0, wind=14.59, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:37:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:38:25.954 [DEBUG] [Thread-57678] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:38:26.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:38:26.045 [DEBUG] [Thread-57681] [transport.py] [_log()] starting thread (client mode): 0xd07552a0
2025-11-17T16:38:26.045 [DEBUG] [Thread-57681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:38:26.060 [DEBUG] [Thread-57681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:38:26.060 [INFO] [Thread-57681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] client lang: <none>
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] server lang: <none>
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] kex follows: False
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] Compression: none
2025-11-17T16:38:26.068 [DEBUG] [Thread-57681] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:38:26.124 [DEBUG] [Thread-57681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:38:26.125 [DEBUG] [Thread-57681] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:38:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:38:26.125 [DEBUG] [Thread-57681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:38:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:38:26.181 [DEBUG] [Thread-57681] [transport.py] [_log()] userauth is OK
2025-11-17T16:38:26.181 [DEBUG] [Thread-57681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:38:26.181 [DEBUG] [Thread-57681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:38:26.181 [DEBUG] [Thread-57681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:38:26.181 [DEBUG] [Thread-57681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:38:26.195 [INFO] [Thread-57681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:38:26.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:38:26.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:38:27.070 [DEBUG] [Thread-57681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:38:27.070 [DEBUG] [Thread-57681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:38:27.118 [DEBUG] [Thread-57681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:38:27.118 [DEBUG] [Thread-57681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:38:27.126 [DEBUG] [Thread-57681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:38:27.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:38:27.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:38:27.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:38:27.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:38:27.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:38:27.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:38:27.158 [DEBUG] [Thread-57681] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:38:29.183 [DEBUG] [Thread-57683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:38:44.218 [DEBUG] [Thread-57684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:38:57.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:38:57.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:38:57.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:38:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 38, 48), 27.58, 15.65, 0.0, 23.63, 22.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:38:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:38:48
2025-11-17T16:38:57.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:38:58.077 [DEBUG] [Thread-57685] [transport.py] [_log()] starting thread (client mode): 0xd0776020
2025-11-17T16:38:58.077 [DEBUG] [Thread-57685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:38:58.098 [DEBUG] [Thread-57685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:38:58.098 [INFO] [Thread-57685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:38:58.101 [DEBUG] [Thread-57685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:38:58.101 [DEBUG] [Thread-57685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:38:58.101 [DEBUG] [Thread-57685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] client lang: <none>
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] server lang: <none>
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] kex follows: False
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] Compression: none
2025-11-17T16:38:58.102 [DEBUG] [Thread-57685] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:38:58.110 [DEBUG] [Thread-57685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:38:58.111 [DEBUG] [Thread-57685] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:38:58.111 [DEBUG] [Thread-57685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:38:58.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:38:58.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:38:58.113 [DEBUG] [Thread-57685] [transport.py] [_log()] userauth is OK
2025-11-17T16:38:58.113 [DEBUG] [Thread-57685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:38:58.113 [DEBUG] [Thread-57685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:38:58.113 [DEBUG] [Thread-57685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:38:58.113 [DEBUG] [Thread-57685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:38:58.126 [INFO] [Thread-57685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:38:58.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:38:58.797 [DEBUG] [Thread-57685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:38:58.797 [DEBUG] [Thread-57685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:38:58.798 [DEBUG] [Thread-57685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:38:58.838 [DEBUG] [Thread-57685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:38:58.838 [DEBUG] [Thread-57685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:38:58.841 [DEBUG] [Thread-57685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:38:58.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:38:58.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:38:58.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:38:58.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:38:58.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:38:58.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:38:58.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:38:58.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:38:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:38:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.609774 -999.00  +22.30  21.70     21   -0.90 1 2 1 1 1   887    0 22.71 -14.07 ----- 25.9 21.7 286.1 28.8 26.0 -16.8 25.9 -15.7 25.4 -15.8 25.9 -15.6
2025-11-17T16:38:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:38:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:38:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.609774
2025-11-17T16:38:58.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:38:58.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:38:58.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:38:58.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:38:58.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:38:58.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:38:48', tmtdew=27.58, humidity=15.65, cloud=0.0, wind=23.63, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:38:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:38:58.866 [DEBUG] [Thread-57685] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:38:58.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:38:58.962 [DEBUG] [Thread-57688] [transport.py] [_log()] starting thread (client mode): 0xd0784a60
2025-11-17T16:38:58.962 [DEBUG] [Thread-57688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:38:58.977 [DEBUG] [Thread-57688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:38:58.978 [INFO] [Thread-57688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:38:58.985 [DEBUG] [Thread-57688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:38:58.986 [DEBUG] [Thread-57688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:38:58.986 [DEBUG] [Thread-57688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:38:58.986 [DEBUG] [Thread-57688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:38:58.986 [DEBUG] [Thread-57688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:38:58.986 [DEBUG] [Thread-57688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:38:58.986 [DEBUG] [Thread-57688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:38:58.986 [DEBUG] [Thread-57688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] client lang: <none>
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] server lang: <none>
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] kex follows: False
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] Compression: none
2025-11-17T16:38:58.987 [DEBUG] [Thread-57688] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:38:59.045 [DEBUG] [Thread-57688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:38:59.045 [DEBUG] [Thread-57688] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:38:59.046 [DEBUG] [Thread-57688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:38:59.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:38:59.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:38:59.101 [DEBUG] [Thread-57688] [transport.py] [_log()] userauth is OK
2025-11-17T16:38:59.102 [DEBUG] [Thread-57688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:38:59.102 [DEBUG] [Thread-57688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:38:59.102 [DEBUG] [Thread-57688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:38:59.102 [DEBUG] [Thread-57688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:38:59.120 [INFO] [Thread-57688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:38:59.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:38:59.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:38:59.248 [DEBUG] [Thread-57690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:38:59.988 [DEBUG] [Thread-57688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:38:59.988 [DEBUG] [Thread-57688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:39:00.036 [DEBUG] [Thread-57688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:39:00.036 [DEBUG] [Thread-57688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:39:00.045 [DEBUG] [Thread-57688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:39:00.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:39:00.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:39:00.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:39:00.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:39:00.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:39:00.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:39:00.078 [DEBUG] [Thread-57688] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:39:14.287 [DEBUG] [Thread-57691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:39:18.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:39:18.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:39:22.514 [DEBUG] [Thread-57692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:39:29.319 [DEBUG] [Thread-57693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:39:30.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:39:30.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:39:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:39:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 39, 20), 27.73, 15.5, 0.0, 22.36, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:39:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:39:20
2025-11-17T16:39:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:39:31.012 [DEBUG] [Thread-57694] [transport.py] [_log()] starting thread (client mode): 0xd07bd060
2025-11-17T16:39:31.012 [DEBUG] [Thread-57694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:39:31.032 [DEBUG] [Thread-57694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:39:31.033 [INFO] [Thread-57694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:39:31.036 [DEBUG] [Thread-57694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:39:31.036 [DEBUG] [Thread-57694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:39:31.036 [DEBUG] [Thread-57694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] client lang: <none>
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] server lang: <none>
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] kex follows: False
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] Compression: none
2025-11-17T16:39:31.037 [DEBUG] [Thread-57694] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:39:31.054 [DEBUG] [Thread-57694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:39:31.054 [DEBUG] [Thread-57694] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:39:31.055 [DEBUG] [Thread-57694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:39:31.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:39:31.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:39:31.057 [DEBUG] [Thread-57694] [transport.py] [_log()] userauth is OK
2025-11-17T16:39:31.057 [DEBUG] [Thread-57694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:39:31.057 [DEBUG] [Thread-57694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:39:31.057 [DEBUG] [Thread-57694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:39:31.057 [DEBUG] [Thread-57694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:39:31.080 [INFO] [Thread-57694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:39:31.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:39:31.695 [DEBUG] [Thread-57694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:39:31.695 [DEBUG] [Thread-57694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:39:31.696 [DEBUG] [Thread-57694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:39:31.736 [DEBUG] [Thread-57694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:39:31.736 [DEBUG] [Thread-57694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:39:31.739 [DEBUG] [Thread-57694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:39:31.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:39:31.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:39:31.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:39:31.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:39:31.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:39:31.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:39:31.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:39:31.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:39:31.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:39:31.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.610121 -999.00  +22.30  16.54     21   -0.80 1 2 1 1 1   887    0 23.07 -14.68 ----- 13.0 16.5 276.4 27.0 25.9 -16.4 25.9 -15.3 25.5 -14.8 25.8 -15.6
2025-11-17T16:39:31.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:39:31.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:39:31.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.610121
2025-11-17T16:39:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:39:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:39:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:39:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:39:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:39:31.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:39:20', tmtdew=27.73, humidity=15.5, cloud=0.0, wind=22.36, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:38:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:39:31.765 [DEBUG] [Thread-57694] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:39:31.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:39:31.871 [DEBUG] [Thread-57697] [transport.py] [_log()] starting thread (client mode): 0xd07e9870
2025-11-17T16:39:31.871 [DEBUG] [Thread-57697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:39:31.888 [DEBUG] [Thread-57697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:39:31.888 [INFO] [Thread-57697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:39:31.904 [DEBUG] [Thread-57697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] client lang: <none>
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] server lang: <none>
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] kex follows: False
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:39:31.905 [DEBUG] [Thread-57697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:39:31.906 [DEBUG] [Thread-57697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:39:31.906 [DEBUG] [Thread-57697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:39:31.906 [DEBUG] [Thread-57697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:39:31.906 [DEBUG] [Thread-57697] [transport.py] [_log()] Compression: none
2025-11-17T16:39:31.906 [DEBUG] [Thread-57697] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:39:31.954 [DEBUG] [Thread-57697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:39:31.954 [DEBUG] [Thread-57697] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:39:31.954 [DEBUG] [Thread-57697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:39:31.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:39:31.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:39:32.009 [DEBUG] [Thread-57697] [transport.py] [_log()] userauth is OK
2025-11-17T16:39:32.009 [DEBUG] [Thread-57697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:39:32.009 [DEBUG] [Thread-57697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:39:32.010 [DEBUG] [Thread-57697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:39:32.010 [DEBUG] [Thread-57697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:39:32.029 [INFO] [Thread-57697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:39:32.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:39:32.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:39:32.907 [DEBUG] [Thread-57697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:39:32.907 [DEBUG] [Thread-57697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:39:32.954 [DEBUG] [Thread-57697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:39:32.954 [DEBUG] [Thread-57697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:39:32.963 [DEBUG] [Thread-57697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:39:32.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:39:32.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:39:32.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:39:32.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:39:32.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:39:32.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:39:32.998 [DEBUG] [Thread-57697] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:39:44.346 [DEBUG] [Thread-57699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:39:59.385 [DEBUG] [Thread-57700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:40:03.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:40:03.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:40:03.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:40:03.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 39, 52), 27.56, 15.41, 0.0, 25.3, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:40:03.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:39:52
2025-11-17T16:40:03.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:40:03.943 [DEBUG] [Thread-57701] [transport.py] [_log()] starting thread (client mode): 0xd07ebf10
2025-11-17T16:40:03.943 [DEBUG] [Thread-57701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:40:03.963 [DEBUG] [Thread-57701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:40:03.963 [INFO] [Thread-57701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] client lang: <none>
2025-11-17T16:40:03.966 [DEBUG] [Thread-57701] [transport.py] [_log()] server lang: <none>
2025-11-17T16:40:03.967 [DEBUG] [Thread-57701] [transport.py] [_log()] kex follows: False
2025-11-17T16:40:03.967 [DEBUG] [Thread-57701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:40:03.967 [DEBUG] [Thread-57701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:40:03.967 [DEBUG] [Thread-57701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:40:03.967 [DEBUG] [Thread-57701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:40:03.967 [DEBUG] [Thread-57701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:40:03.967 [DEBUG] [Thread-57701] [transport.py] [_log()] Compression: none
2025-11-17T16:40:03.967 [DEBUG] [Thread-57701] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:40:03.983 [DEBUG] [Thread-57701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:40:03.983 [DEBUG] [Thread-57701] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:40:03.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:40:03.984 [DEBUG] [Thread-57701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:40:03.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:40:03.986 [DEBUG] [Thread-57701] [transport.py] [_log()] userauth is OK
2025-11-17T16:40:03.986 [DEBUG] [Thread-57701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:40:03.986 [DEBUG] [Thread-57701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:40:03.986 [DEBUG] [Thread-57701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:40:03.986 [DEBUG] [Thread-57701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:40:04.004 [INFO] [Thread-57701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:40:04.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:40:05.222 [DEBUG] [Thread-57701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:40:05.222 [DEBUG] [Thread-57701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:40:05.223 [DEBUG] [Thread-57701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:40:05.263 [DEBUG] [Thread-57701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:40:05.264 [DEBUG] [Thread-57701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:40:05.267 [DEBUG] [Thread-57701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:40:05.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:40:05.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:40:05.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:40:05.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:40:05.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:40:05.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:40:05.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:40:05.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:40:05.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:40:05.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.610469 -999.00  +22.40  19.83     21   -0.90 1 2 1 1 1   887    0 22.45 -15.55 ----- 18.9 19.8 266.0 22.7 25.9 -16.1 25.8 -15.3 25.4 -14.7 25.8 -15.4
2025-11-17T16:40:05.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:40:05.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:40:05.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.610469
2025-11-17T16:40:05.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:40:05.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:40:05.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:40:05.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:40:05.329 [DEBUG] [Thread-57701] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:40:05.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:40:05.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:39:52', tmtdew=27.56, humidity=15.41, cloud=0.0, wind=25.3, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:39:04.522', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:40:05.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:40:05.427 [DEBUG] [Thread-57704] [transport.py] [_log()] starting thread (client mode): 0xd31346d0
2025-11-17T16:40:05.427 [DEBUG] [Thread-57704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:40:05.445 [DEBUG] [Thread-57704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:40:05.445 [INFO] [Thread-57704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:40:05.452 [DEBUG] [Thread-57704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:40:05.452 [DEBUG] [Thread-57704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:40:05.452 [DEBUG] [Thread-57704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] client lang: <none>
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] server lang: <none>
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] kex follows: False
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] Compression: none
2025-11-17T16:40:05.453 [DEBUG] [Thread-57704] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:40:05.509 [DEBUG] [Thread-57704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:40:05.510 [DEBUG] [Thread-57704] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:40:05.510 [DEBUG] [Thread-57704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:40:05.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:40:05.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:40:05.565 [DEBUG] [Thread-57704] [transport.py] [_log()] userauth is OK
2025-11-17T16:40:05.565 [DEBUG] [Thread-57704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:40:05.565 [DEBUG] [Thread-57704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:40:05.566 [DEBUG] [Thread-57704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:40:05.566 [DEBUG] [Thread-57704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:40:05.585 [INFO] [Thread-57704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:40:05.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:40:05.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:40:06.523 [DEBUG] [Thread-57704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:40:06.523 [DEBUG] [Thread-57704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:40:06.571 [DEBUG] [Thread-57704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:40:06.571 [DEBUG] [Thread-57704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:40:06.580 [DEBUG] [Thread-57704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:40:06.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:40:06.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:40:06.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:40:06.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:40:06.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:40:06.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:40:06.614 [DEBUG] [Thread-57704] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:40:14.419 [DEBUG] [Thread-57706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:40:18.892 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:40:18.894 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:40:22.572 [DEBUG] [Thread-57707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:40:29.457 [DEBUG] [Thread-57708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:40:36.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:40:36.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:40:36.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:40:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 40, 24), 27.66, 15.33, 0.0, 27.46, 22.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:40:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:40:24
2025-11-17T16:40:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:40:37.557 [DEBUG] [Thread-57709] [transport.py] [_log()] starting thread (client mode): 0xd07eb2e0
2025-11-17T16:40:37.557 [DEBUG] [Thread-57709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:40:37.578 [DEBUG] [Thread-57709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:40:37.579 [INFO] [Thread-57709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:40:37.582 [DEBUG] [Thread-57709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] client lang: <none>
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] server lang: <none>
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] kex follows: False
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] Compression: none
2025-11-17T16:40:37.583 [DEBUG] [Thread-57709] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:40:37.601 [DEBUG] [Thread-57709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:40:37.601 [DEBUG] [Thread-57709] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:40:37.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:40:37.602 [DEBUG] [Thread-57709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:40:37.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:40:37.604 [DEBUG] [Thread-57709] [transport.py] [_log()] userauth is OK
2025-11-17T16:40:37.604 [DEBUG] [Thread-57709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:40:37.604 [DEBUG] [Thread-57709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:40:37.604 [DEBUG] [Thread-57709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:40:37.604 [DEBUG] [Thread-57709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:40:37.636 [INFO] [Thread-57709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:40:37.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:40:38.417 [DEBUG] [Thread-57709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:40:38.417 [DEBUG] [Thread-57709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:40:38.417 [DEBUG] [Thread-57709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:40:38.458 [DEBUG] [Thread-57709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:40:38.459 [DEBUG] [Thread-57709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:40:38.462 [DEBUG] [Thread-57709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:40:38.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:40:38.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:40:38.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:40:38.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:40:38.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:40:38.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:40:38.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:40:38.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:40:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:40:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.610816 -999.00  +22.40  21.69     21   -0.90 1 2 1 1 1   887    0 23.28 -14.86 ----- 21.5 21.7 269.4 24.8 25.9 -15.8 25.8 -15.4 25.2 -16.1 25.7 -15.3
2025-11-17T16:40:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:40:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:40:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.610816
2025-11-17T16:40:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:40:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:40:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:40:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:40:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:40:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:40:24', tmtdew=27.66, humidity=15.33, cloud=0.0, wind=27.46, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:39:34.502', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:40:38.484 [DEBUG] [Thread-57709] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:40:38.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:40:38.584 [DEBUG] [Thread-57712] [transport.py] [_log()] starting thread (client mode): 0xd07e8490
2025-11-17T16:40:38.584 [DEBUG] [Thread-57712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:40:38.599 [DEBUG] [Thread-57712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:40:38.600 [INFO] [Thread-57712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] client lang: <none>
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] server lang: <none>
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] kex follows: False
2025-11-17T16:40:38.607 [DEBUG] [Thread-57712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:40:38.608 [DEBUG] [Thread-57712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:40:38.608 [DEBUG] [Thread-57712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:40:38.608 [DEBUG] [Thread-57712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:40:38.608 [DEBUG] [Thread-57712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:40:38.608 [DEBUG] [Thread-57712] [transport.py] [_log()] Compression: none
2025-11-17T16:40:38.608 [DEBUG] [Thread-57712] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:40:38.665 [DEBUG] [Thread-57712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:40:38.666 [DEBUG] [Thread-57712] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:40:38.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:40:38.667 [DEBUG] [Thread-57712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:40:38.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:40:38.721 [DEBUG] [Thread-57712] [transport.py] [_log()] userauth is OK
2025-11-17T16:40:38.721 [DEBUG] [Thread-57712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:40:38.722 [DEBUG] [Thread-57712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:40:38.722 [DEBUG] [Thread-57712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:40:38.722 [DEBUG] [Thread-57712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:40:38.740 [INFO] [Thread-57712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:40:38.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:40:38.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:40:39.587 [DEBUG] [Thread-57712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:40:39.587 [DEBUG] [Thread-57712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:40:39.637 [DEBUG] [Thread-57712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:40:39.637 [DEBUG] [Thread-57712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:40:39.651 [DEBUG] [Thread-57712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:40:39.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:40:39.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:40:39.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:40:39.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:40:39.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:40:39.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:40:39.685 [DEBUG] [Thread-57712] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:40:44.490 [DEBUG] [Thread-57714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:40:59.529 [DEBUG] [Thread-57715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:41:09.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:41:09.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:41:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:41:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 40, 56), 27.62, 15.3, 0.0, 22.62, 22.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:41:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:40:56
2025-11-17T16:41:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:41:10.636 [DEBUG] [Thread-57716] [transport.py] [_log()] starting thread (client mode): 0xd3163c70
2025-11-17T16:41:10.636 [DEBUG] [Thread-57716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:41:10.655 [DEBUG] [Thread-57716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:41:10.655 [INFO] [Thread-57716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] client lang: <none>
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] server lang: <none>
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] kex follows: False
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] Compression: none
2025-11-17T16:41:10.659 [DEBUG] [Thread-57716] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:41:10.675 [DEBUG] [Thread-57716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:41:10.675 [DEBUG] [Thread-57716] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:41:10.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:41:10.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:41:10.677 [DEBUG] [Thread-57716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:41:10.677 [DEBUG] [Thread-57716] [transport.py] [_log()] userauth is OK
2025-11-17T16:41:10.677 [DEBUG] [Thread-57716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:41:10.677 [DEBUG] [Thread-57716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:41:10.677 [DEBUG] [Thread-57716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:41:10.677 [DEBUG] [Thread-57716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:41:10.695 [INFO] [Thread-57716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:41:10.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:41:11.287 [DEBUG] [Thread-57716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:41:11.288 [DEBUG] [Thread-57716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:41:11.288 [DEBUG] [Thread-57716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:41:11.328 [DEBUG] [Thread-57716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:41:11.328 [DEBUG] [Thread-57716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:41:11.331 [DEBUG] [Thread-57716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:41:11.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:41:11.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:41:11.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:41:11.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:41:11.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:41:11.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:41:11.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:41:11.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:41:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:41:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.611510 -999.00  +22.20  16.79     21   -0.90 1 2 1 1 1   887    0 22.54 -14.13 ----- 19.2 16.8 250.6 28.1 25.8 -16.2 25.7 -15.0 25.4 -14.7 25.5 -15.8
2025-11-17T16:41:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:41:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:41:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.611510
2025-11-17T16:41:11.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:41:11.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:41:11.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:41:11.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:41:11.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:41:11.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:40:56', tmtdew=27.62, humidity=15.3, cloud=0.0, wind=22.62, temperature=22.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:40:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:41:11.356 [DEBUG] [Thread-57716] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:41:11.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:41:11.451 [DEBUG] [Thread-57719] [transport.py] [_log()] starting thread (client mode): 0xd31620b0
2025-11-17T16:41:11.451 [DEBUG] [Thread-57719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:41:11.467 [DEBUG] [Thread-57719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:41:11.468 [INFO] [Thread-57719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:41:11.475 [DEBUG] [Thread-57719] [transport.py] [_log()] client lang: <none>
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] server lang: <none>
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] kex follows: False
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] Compression: none
2025-11-17T16:41:11.476 [DEBUG] [Thread-57719] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:41:11.536 [DEBUG] [Thread-57719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:41:11.537 [DEBUG] [Thread-57719] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:41:11.537 [DEBUG] [Thread-57719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:41:11.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:41:11.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:41:11.594 [DEBUG] [Thread-57719] [transport.py] [_log()] userauth is OK
2025-11-17T16:41:11.594 [DEBUG] [Thread-57719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:41:11.594 [DEBUG] [Thread-57719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:41:11.594 [DEBUG] [Thread-57719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:41:11.594 [DEBUG] [Thread-57719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:41:11.614 [INFO] [Thread-57719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:41:11.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:41:11.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:41:12.484 [DEBUG] [Thread-57719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:41:12.484 [DEBUG] [Thread-57719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:41:12.532 [DEBUG] [Thread-57719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:41:12.532 [DEBUG] [Thread-57719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:41:12.541 [DEBUG] [Thread-57719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:41:12.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:41:12.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:41:12.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:41:12.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:41:12.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:41:12.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:41:12.576 [DEBUG] [Thread-57719] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:41:14.561 [DEBUG] [Thread-57721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:41:19.034 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:41:19.035 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:41:22.632 [DEBUG] [Thread-57722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:41:29.599 [DEBUG] [Thread-57723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:41:42.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:41:42.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:41: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
2025-11-17T16:41:43.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 41, 28), 27.63, 15.3, 0.0, 20.45, 22.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:41:43.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:41:28
2025-11-17T16:41:43.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:41:43.533 [DEBUG] [Thread-57724] [transport.py] [_log()] starting thread (client mode): 0xd3136b90
2025-11-17T16:41:43.533 [DEBUG] [Thread-57724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:41:43.554 [DEBUG] [Thread-57724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:41:43.554 [INFO] [Thread-57724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] client lang: <none>
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] server lang: <none>
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] kex follows: False
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] Compression: none
2025-11-17T16:41:43.558 [DEBUG] [Thread-57724] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:41:43.574 [DEBUG] [Thread-57724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:41:43.574 [DEBUG] [Thread-57724] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:41:43.574 [DEBUG] [Thread-57724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:41:43.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:41:43.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:41:43.575 [DEBUG] [Thread-57724] [transport.py] [_log()] userauth is OK
2025-11-17T16:41:43.575 [DEBUG] [Thread-57724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:41:43.575 [DEBUG] [Thread-57724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:41:43.575 [DEBUG] [Thread-57724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:41:43.575 [DEBUG] [Thread-57724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:41:43.586 [INFO] [Thread-57724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:41:43.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:41:44.153 [DEBUG] [Thread-57724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:41:44.153 [DEBUG] [Thread-57724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:41:44.153 [DEBUG] [Thread-57724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:41:44.194 [DEBUG] [Thread-57724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:41:44.194 [DEBUG] [Thread-57724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:41:44.196 [DEBUG] [Thread-57724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:41:44.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:41:44.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:41:44.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:41:44.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:41:44.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:41:44.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:41:44.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:41:44.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.611857 -999.00  +22.10  16.39     21   -0.90 1 2 1 1 1   887    0 23.06 -15.55 ----- 14.8 16.4 267.6 22.0 25.8 -15.7 25.7 -15.1 25.3 -15.0 25.6 -15.4
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.611857
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:41:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:41:28', tmtdew=27.63, humidity=15.3, cloud=0.0, wind=20.45, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:41:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:41:44.215 [DEBUG] [Thread-57724] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:41:44.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:41:44.628 [DEBUG] [Thread-57727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:41:59.676 [DEBUG] [Thread-57728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:42:14.711 [DEBUG] [Thread-57729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:42:19.185 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:42:19.186 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:42:22.683 [DEBUG] [Thread-57730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:42:29.740 [DEBUG] [Thread-57731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:42:44.769 [DEBUG] [Thread-57732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:42:59.796 [DEBUG] [Thread-57733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:43:14.825 [DEBUG] [Thread-57734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:43:19.328 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:43:19.329 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:43:22.733 [DEBUG] [Thread-57735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:43:29.855 [DEBUG] [Thread-57736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:43:44.883 [DEBUG] [Thread-57737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:43:56.731 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T16:43:59.913 [DEBUG] [Thread-57738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:44:14.942 [DEBUG] [Thread-57739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:44:19.471 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:44:19.472 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:44:22.787 [DEBUG] [Thread-57740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:44:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:44:26.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:44:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:44:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 44, 8), 28.35, 14.65, 0.0, 19.45, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:44:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:44:08
2025-11-17T16:44:27.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:44:27.704 [DEBUG] [Thread-57741] [transport.py] [_log()] starting thread (client mode): 0xd0775ed0
2025-11-17T16:44:27.704 [DEBUG] [Thread-57741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:44:27.723 [DEBUG] [Thread-57741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:44:27.724 [INFO] [Thread-57741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:44:27.727 [DEBUG] [Thread-57741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:44:27.727 [DEBUG] [Thread-57741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:44:27.727 [DEBUG] [Thread-57741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:44:27.727 [DEBUG] [Thread-57741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:44:27.727 [DEBUG] [Thread-57741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:44:27.727 [DEBUG] [Thread-57741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] client lang: <none>
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] server lang: <none>
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] kex follows: False
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] Compression: none
2025-11-17T16:44:27.728 [DEBUG] [Thread-57741] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:44:27.745 [DEBUG] [Thread-57741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:44:27.745 [DEBUG] [Thread-57741] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:44:27.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:44:27.746 [DEBUG] [Thread-57741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:44:27.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:44:27.748 [DEBUG] [Thread-57741] [transport.py] [_log()] userauth is OK
2025-11-17T16:44:27.748 [DEBUG] [Thread-57741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:44:27.749 [DEBUG] [Thread-57741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:44:27.749 [DEBUG] [Thread-57741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:44:27.749 [DEBUG] [Thread-57741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:44:27.772 [INFO] [Thread-57741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:44:27.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:44:28.371 [DEBUG] [Thread-57741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:44:28.371 [DEBUG] [Thread-57741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:44:28.371 [DEBUG] [Thread-57741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:44:28.412 [DEBUG] [Thread-57741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:44:28.412 [DEBUG] [Thread-57741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:44:28.415 [DEBUG] [Thread-57741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:44:28.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:44:28.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:44:28.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:44:28.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:44:28.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:44:28.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:44:28.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:44:28.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:44:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:44:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.613594 -999.00  +22.50  35.37     20   -0.90 1 2 2 1 1   887    0 22.39 -17.76 ----- 35.6 35.4 274.0 42.3 25.9 -16.5 25.7 -15.8 25.2 -15.0 25.8 -15.3
2025-11-17T16:44:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:44:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:44:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.613594
2025-11-17T16:44:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:44:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:44:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:44:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:44:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:44:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:44:08', tmtdew=28.35, humidity=14.65, cloud=0.0, wind=19.45, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:43:34.522', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:44:28.440 [DEBUG] [Thread-57741] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:44:28.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:44:28.538 [DEBUG] [Thread-57744] [transport.py] [_log()] starting thread (client mode): 0xd31359c0
2025-11-17T16:44:28.538 [DEBUG] [Thread-57744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:44:28.554 [DEBUG] [Thread-57744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:44:28.554 [INFO] [Thread-57744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:44:28.562 [DEBUG] [Thread-57744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:44:28.563 [DEBUG] [Thread-57744] [transport.py] [_log()] client lang: <none>
2025-11-17T16:44:28.564 [DEBUG] [Thread-57744] [transport.py] [_log()] server lang: <none>
2025-11-17T16:44:28.564 [DEBUG] [Thread-57744] [transport.py] [_log()] kex follows: False
2025-11-17T16:44:28.564 [DEBUG] [Thread-57744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:44:28.564 [DEBUG] [Thread-57744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:44:28.564 [DEBUG] [Thread-57744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:44:28.564 [DEBUG] [Thread-57744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:44:28.564 [DEBUG] [Thread-57744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:44:28.564 [DEBUG] [Thread-57744] [transport.py] [_log()] Compression: none
2025-11-17T16:44:28.565 [DEBUG] [Thread-57744] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:44:28.618 [DEBUG] [Thread-57744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:44:28.619 [DEBUG] [Thread-57744] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:44:28.619 [DEBUG] [Thread-57744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:44:28.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:44:28.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:44:28.675 [DEBUG] [Thread-57744] [transport.py] [_log()] userauth is OK
2025-11-17T16:44:28.675 [DEBUG] [Thread-57744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:44:28.675 [DEBUG] [Thread-57744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:44:28.675 [DEBUG] [Thread-57744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:44:28.675 [DEBUG] [Thread-57744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:44:28.694 [INFO] [Thread-57744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:44:28.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:44:28.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:44:29.556 [DEBUG] [Thread-57744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:44:29.556 [DEBUG] [Thread-57744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:44:29.604 [DEBUG] [Thread-57744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:44:29.604 [DEBUG] [Thread-57744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:44:29.613 [DEBUG] [Thread-57744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:44:29.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:44:29.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:44:29.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:44:29.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:44:29.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:44:29.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:44:29.648 [DEBUG] [Thread-57744] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:44:29.971 [DEBUG] [Thread-57746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:44:45.017 [DEBUG] [Thread-57747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:44:59.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:44:59.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:44:59.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:45:00.043 [DEBUG] [Thread-57748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:45:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 44, 40), 28.09, 14.77, 0.0, 25.04, 22.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:45:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:44:40
2025-11-17T16:45:00.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:45:00.607 [DEBUG] [Thread-57749] [transport.py] [_log()] starting thread (client mode): 0xd07bc280
2025-11-17T16:45:00.607 [DEBUG] [Thread-57749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:45:00.626 [DEBUG] [Thread-57749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:45:00.626 [INFO] [Thread-57749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:45:00.629 [DEBUG] [Thread-57749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:45:00.629 [DEBUG] [Thread-57749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] client lang: <none>
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] server lang: <none>
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] kex follows: False
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:45:00.630 [DEBUG] [Thread-57749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:45:00.631 [DEBUG] [Thread-57749] [transport.py] [_log()] Compression: none
2025-11-17T16:45:00.631 [DEBUG] [Thread-57749] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:45:00.647 [DEBUG] [Thread-57749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:45:00.648 [DEBUG] [Thread-57749] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:45:00.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:45:00.649 [DEBUG] [Thread-57749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:45:00.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:45:00.651 [DEBUG] [Thread-57749] [transport.py] [_log()] userauth is OK
2025-11-17T16:45:00.651 [DEBUG] [Thread-57749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:45:00.652 [DEBUG] [Thread-57749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:45:00.652 [DEBUG] [Thread-57749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:45:00.652 [DEBUG] [Thread-57749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:45:00.666 [INFO] [Thread-57749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:45:00.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:45:01.295 [DEBUG] [Thread-57749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:45:01.295 [DEBUG] [Thread-57749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:45:01.295 [DEBUG] [Thread-57749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:45:01.336 [DEBUG] [Thread-57749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:45:01.337 [DEBUG] [Thread-57749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:45:01.339 [DEBUG] [Thread-57749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:45:01.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:45:01.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:45:01.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:45:01.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:45:01.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:45:01.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:45:01.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:45:01.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:45:01.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:45:01.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.613941 -999.00  +22.50  27.55     21   -0.90 1 2 1 1 1   887    0 22.68 -16.09 ----- 31.7 27.6 272.2 42.5 25.8 -16.3 25.8 -14.9 25.3 -18.1 25.9 -14.2
2025-11-17T16:45:01.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:45:01.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:45:01.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.613941
2025-11-17T16:45:01.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:45:01.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:45:01.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:45:01.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:45:01.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:45:01.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:44:40', tmtdew=28.09, humidity=14.77, cloud=0.0, wind=25.04, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:44:04.502', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:45:01.365 [DEBUG] [Thread-57749] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:45:01.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:45:01.463 [DEBUG] [Thread-57752] [transport.py] [_log()] starting thread (client mode): 0xd0776da0
2025-11-17T16:45:01.463 [DEBUG] [Thread-57752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:45:01.478 [DEBUG] [Thread-57752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:45:01.478 [INFO] [Thread-57752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] client lang: <none>
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] server lang: <none>
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] kex follows: False
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:45:01.485 [DEBUG] [Thread-57752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:45:01.486 [DEBUG] [Thread-57752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:45:01.486 [DEBUG] [Thread-57752] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:45:01.486 [DEBUG] [Thread-57752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:45:01.486 [DEBUG] [Thread-57752] [transport.py] [_log()] Compression: none
2025-11-17T16:45:01.486 [DEBUG] [Thread-57752] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:45:01.545 [DEBUG] [Thread-57752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:45:01.545 [DEBUG] [Thread-57752] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:45:01.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:45:01.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:45:01.545 [DEBUG] [Thread-57752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:45:01.602 [DEBUG] [Thread-57752] [transport.py] [_log()] userauth is OK
2025-11-17T16:45:01.602 [DEBUG] [Thread-57752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:45:01.602 [DEBUG] [Thread-57752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:45:01.602 [DEBUG] [Thread-57752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:45:01.602 [DEBUG] [Thread-57752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:45:01.617 [INFO] [Thread-57752] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:45:01.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:45:01.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:45:02.494 [DEBUG] [Thread-57752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:45:02.494 [DEBUG] [Thread-57752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:45:02.542 [DEBUG] [Thread-57752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:45:02.542 [DEBUG] [Thread-57752] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:45:02.551 [DEBUG] [Thread-57752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:45:02.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:45:02.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:45:02.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:45:02.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:45:02.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:45:02.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:45:02.585 [DEBUG] [Thread-57752] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:45:15.071 [DEBUG] [Thread-57754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:45:19.612 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:45:19.613 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:45:22.821 [DEBUG] [Thread-57755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:45:30.109 [DEBUG] [Thread-57756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:45:32.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:45:32.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:45:32.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:45:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 45, 13), 28.39, 14.53, 0.0, 31.62, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:45:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:45:13
2025-11-17T16:45:33.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:45:33.607 [DEBUG] [Thread-57757] [transport.py] [_log()] starting thread (client mode): 0xd07e87c0
2025-11-17T16:45:33.608 [DEBUG] [Thread-57757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:45:33.627 [DEBUG] [Thread-57757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:45:33.627 [INFO] [Thread-57757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] client lang: <none>
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] server lang: <none>
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] kex follows: False
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] Compression: none
2025-11-17T16:45:33.631 [DEBUG] [Thread-57757] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:45:33.647 [DEBUG] [Thread-57757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:45:33.647 [DEBUG] [Thread-57757] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:45:33.647 [DEBUG] [Thread-57757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:45:33.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:45:33.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:45:33.689 [DEBUG] [Thread-57757] [transport.py] [_log()] userauth is OK
2025-11-17T16:45:33.689 [DEBUG] [Thread-57757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:45:33.689 [DEBUG] [Thread-57757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:45:33.689 [DEBUG] [Thread-57757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:45:33.689 [DEBUG] [Thread-57757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:45:33.705 [INFO] [Thread-57757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:45:33.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:45:34.380 [DEBUG] [Thread-57757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:45:34.380 [DEBUG] [Thread-57757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:45:34.380 [DEBUG] [Thread-57757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:45:34.421 [DEBUG] [Thread-57757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:45:34.421 [DEBUG] [Thread-57757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:45:34.423 [DEBUG] [Thread-57757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:45:34.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:45:34.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:45:34.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:45:34.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:45:34.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:45:34.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:45:34.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:45:34.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.614288 -999.00  +22.50  25.29     21   -0.80 1 2 1 1 1   887    0 22.61 -15.11 ----- 25.2 25.3 280.2 42.6 26.0 -15.4 25.9 -14.8 25.9 -17.2 26.2 -14.2
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.614288
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:45:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:45:13', tmtdew=28.39, humidity=14.53, cloud=0.0, wind=31.62, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:44:34.483', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:45:34.444 [DEBUG] [Thread-57757] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:45:34.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:45:34.533 [DEBUG] [Thread-57760] [transport.py] [_log()] starting thread (client mode): 0xd07e85e0
2025-11-17T16:45:34.533 [DEBUG] [Thread-57760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:45:34.552 [DEBUG] [Thread-57760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:45:34.553 [INFO] [Thread-57760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] client lang: <none>
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] server lang: <none>
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] kex follows: False
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:45:34.560 [DEBUG] [Thread-57760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:45:34.561 [DEBUG] [Thread-57760] [transport.py] [_log()] Compression: none
2025-11-17T16:45:34.561 [DEBUG] [Thread-57760] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:45:34.617 [DEBUG] [Thread-57760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:45:34.617 [DEBUG] [Thread-57760] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:45:34.618 [DEBUG] [Thread-57760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:45:34.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:45:34.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:45:34.674 [DEBUG] [Thread-57760] [transport.py] [_log()] userauth is OK
2025-11-17T16:45:34.674 [DEBUG] [Thread-57760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:45:34.674 [DEBUG] [Thread-57760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:45:34.674 [DEBUG] [Thread-57760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:45:34.674 [DEBUG] [Thread-57760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:45:34.692 [INFO] [Thread-57760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:45:34.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:45:34.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:45:35.575 [DEBUG] [Thread-57760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:45:35.575 [DEBUG] [Thread-57760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:45:35.625 [DEBUG] [Thread-57760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:45:35.625 [DEBUG] [Thread-57760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:45:35.633 [DEBUG] [Thread-57760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:45:35.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:45:35.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:45:35.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
2025-11-17T16:45:35.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:45:35.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:45:35.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:45:35.675 [DEBUG] [Thread-57760] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:45:45.145 [DEBUG] [Thread-57762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:46:00.196 [DEBUG] [Thread-57763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:46:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:46:05.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:46:05.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:46:06.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 45, 45), 28.54, 14.7, 0.0, 25.9, 23.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:46:06.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:45:45
2025-11-17T16:46:06.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:46:06.610 [DEBUG] [Thread-57764] [transport.py] [_log()] starting thread (client mode): 0xd07e8820
2025-11-17T16:46:06.610 [DEBUG] [Thread-57764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:46:06.631 [DEBUG] [Thread-57764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:46:06.631 [INFO] [Thread-57764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:46:06.634 [DEBUG] [Thread-57764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:46:06.634 [DEBUG] [Thread-57764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:46:06.634 [DEBUG] [Thread-57764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:46:06.634 [DEBUG] [Thread-57764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:46:06.634 [DEBUG] [Thread-57764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] client lang: <none>
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] server lang: <none>
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] kex follows: False
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:46:06.635 [DEBUG] [Thread-57764] [transport.py] [_log()] Compression: none
2025-11-17T16:46:06.636 [DEBUG] [Thread-57764] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:46:06.654 [DEBUG] [Thread-57764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:46:06.655 [DEBUG] [Thread-57764] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:46:06.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:46:06.656 [DEBUG] [Thread-57764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:46:06.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:46:06.658 [DEBUG] [Thread-57764] [transport.py] [_log()] userauth is OK
2025-11-17T16:46:06.658 [DEBUG] [Thread-57764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:46:06.658 [DEBUG] [Thread-57764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:46:06.658 [DEBUG] [Thread-57764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:46:06.658 [DEBUG] [Thread-57764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:46:06.677 [INFO] [Thread-57764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:46:06.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:46:07.312 [DEBUG] [Thread-57764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:46:07.313 [DEBUG] [Thread-57764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:46:07.313 [DEBUG] [Thread-57764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:46:07.353 [DEBUG] [Thread-57764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:46:07.354 [DEBUG] [Thread-57764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:46:07.357 [DEBUG] [Thread-57764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:46:07.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:46:07.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:46:07.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:46:07.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:46:07.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:46:07.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:46:07.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:46:07.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:46:07.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:46:07.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.614982 -999.00  +22.50  14.37     21   -0.70 1 2 1 1 1   887    0 23.13 -15.26 ----- 17.9 14.4 283.4 28.9 26.2 -14.9 26.2 -14.6 26.4 -14.6 26.6 -14.0
2025-11-17T16:46:07.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:46:07.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:46:07.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.614982
2025-11-17T16:46:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:46:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:46:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:46:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:46:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:46:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:45:45', tmtdew=28.54, humidity=14.7, cloud=0.0, wind=25.9, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:45:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:46:07.381 [DEBUG] [Thread-57764] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:46:07.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:46:07.479 [DEBUG] [Thread-57767] [transport.py] [_log()] starting thread (client mode): 0xd070e6b0
2025-11-17T16:46:07.480 [DEBUG] [Thread-57767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:46:07.495 [DEBUG] [Thread-57767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:46:07.496 [INFO] [Thread-57767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:46:07.503 [DEBUG] [Thread-57767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:46:07.504 [DEBUG] [Thread-57767] [transport.py] [_log()] client lang: <none>
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] server lang: <none>
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] kex follows: False
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] Compression: none
2025-11-17T16:46:07.505 [DEBUG] [Thread-57767] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:46:07.568 [DEBUG] [Thread-57767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:46:07.568 [DEBUG] [Thread-57767] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:46:07.569 [DEBUG] [Thread-57767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:46:07.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:46:07.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:46:07.627 [DEBUG] [Thread-57767] [transport.py] [_log()] userauth is OK
2025-11-17T16:46:07.627 [DEBUG] [Thread-57767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:46:07.627 [DEBUG] [Thread-57767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:46:07.627 [DEBUG] [Thread-57767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:46:07.627 [DEBUG] [Thread-57767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:46:07.645 [INFO] [Thread-57767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:46:07.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:46:07.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:46:08.498 [DEBUG] [Thread-57767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:46:08.498 [DEBUG] [Thread-57767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:46:08.545 [DEBUG] [Thread-57767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:46:08.545 [DEBUG] [Thread-57767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:46:08.554 [DEBUG] [Thread-57767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:46:08.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:46:08.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')
2025-11-17T16:46:08.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:46:08.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:46:08.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:46:08.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:46:08.593 [DEBUG] [Thread-57767] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:46:15.227 [DEBUG] [Thread-57769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:46:19.755 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:46:19.756 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:46:22.870 [DEBUG] [Thread-57770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:46:30.278 [DEBUG] [Thread-57771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:46:38.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:46:38.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:46:38.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:46:39.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 46, 17), 28.45, 14.77, 0.0, 24.12, 23.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:46:39.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:46:17
2025-11-17T16:46:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:46:39.555 [DEBUG] [Thread-57772] [transport.py] [_log()] starting thread (client mode): 0xd07eb700
2025-11-17T16:46:39.555 [DEBUG] [Thread-57772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:46:39.575 [DEBUG] [Thread-57772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:46:39.575 [INFO] [Thread-57772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] client lang: <none>
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] server lang: <none>
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] kex follows: False
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] Compression: none
2025-11-17T16:46:39.579 [DEBUG] [Thread-57772] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:46:39.597 [DEBUG] [Thread-57772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:46:39.597 [DEBUG] [Thread-57772] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:46:39.598 [DEBUG] [Thread-57772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:46:39.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:46:39.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:46:39.641 [DEBUG] [Thread-57772] [transport.py] [_log()] userauth is OK
2025-11-17T16:46:39.641 [DEBUG] [Thread-57772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:46:39.642 [DEBUG] [Thread-57772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:46:39.642 [DEBUG] [Thread-57772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:46:39.642 [DEBUG] [Thread-57772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:46:39.674 [INFO] [Thread-57772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:46:39.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:46:40.306 [DEBUG] [Thread-57772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:46:40.306 [DEBUG] [Thread-57772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:46:40.307 [DEBUG] [Thread-57772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:46:40.347 [DEBUG] [Thread-57772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:46:40.348 [DEBUG] [Thread-57772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:46:40.351 [DEBUG] [Thread-57772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:46:40.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:46:40.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:46:40.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:46:40.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:46:40.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:46:40.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:46:40.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:46:40.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:46:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:46:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.615330 -999.00  +22.70  26.31     20   -0.90 1 2 1 1 1   887    0 22.84 -14.12 ----- 28.3 26.3 257.8 32.6 26.4 -16.3 26.3 -15.3 26.6 -14.7 26.8 -16.9
2025-11-17T16:46:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:46:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:46:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.615330
2025-11-17T16:46:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:46:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:46:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:46:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:46:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:46:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:46:17', tmtdew=28.45, humidity=14.77, cloud=0.0, wind=24.12, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:46:04.512', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:46:40.374 [DEBUG] [Thread-57772] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:46:40.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:46:40.476 [DEBUG] [Thread-57775] [transport.py] [_log()] starting thread (client mode): 0xd07eb9a0
2025-11-17T16:46:40.476 [DEBUG] [Thread-57775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:46:40.491 [DEBUG] [Thread-57775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:46:40.492 [INFO] [Thread-57775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] client lang: <none>
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] server lang: <none>
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] kex follows: False
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:46:40.499 [DEBUG] [Thread-57775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:46:40.500 [DEBUG] [Thread-57775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:46:40.500 [DEBUG] [Thread-57775] [transport.py] [_log()] Compression: none
2025-11-17T16:46:40.500 [DEBUG] [Thread-57775] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:46:40.558 [DEBUG] [Thread-57775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:46:40.558 [DEBUG] [Thread-57775] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:46:40.558 [DEBUG] [Thread-57775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:46:40.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:46:40.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:46:40.615 [DEBUG] [Thread-57775] [transport.py] [_log()] userauth is OK
2025-11-17T16:46:40.615 [DEBUG] [Thread-57775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:46:40.615 [DEBUG] [Thread-57775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:46:40.615 [DEBUG] [Thread-57775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:46:40.615 [DEBUG] [Thread-57775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:46:40.634 [INFO] [Thread-57775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:46:40.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:46:40.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:46:41.506 [DEBUG] [Thread-57775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:46:41.507 [DEBUG] [Thread-57775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:46:41.554 [DEBUG] [Thread-57775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:46:41.554 [DEBUG] [Thread-57775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:46:41.563 [DEBUG] [Thread-57775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:46:41.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:46:41.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:46: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
2025-11-17T16:46:41.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:46:41.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:46:41.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:46:41.598 [DEBUG] [Thread-57775] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:46:45.308 [DEBUG] [Thread-57777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:47:00.346 [DEBUG] [Thread-57778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:47:11.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:47:11.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:47:11.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:47:12.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 46, 49), 28.4, 14.9, 0.0, 24.38, 23.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:47:12.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:46:49
2025-11-17T16:47:12.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:47:12.550 [DEBUG] [Thread-57779] [transport.py] [_log()] starting thread (client mode): 0xd078ce80
2025-11-17T16:47:12.550 [DEBUG] [Thread-57779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:47:12.571 [DEBUG] [Thread-57779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:47:12.571 [INFO] [Thread-57779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] client lang: <none>
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] server lang: <none>
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] kex follows: False
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] Compression: none
2025-11-17T16:47:12.574 [DEBUG] [Thread-57779] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:47:12.591 [DEBUG] [Thread-57779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:47:12.591 [DEBUG] [Thread-57779] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:47:12.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:47:12.592 [DEBUG] [Thread-57779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:47:12.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:47:12.594 [DEBUG] [Thread-57779] [transport.py] [_log()] userauth is OK
2025-11-17T16:47:12.594 [DEBUG] [Thread-57779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:47:12.594 [DEBUG] [Thread-57779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:47:12.594 [DEBUG] [Thread-57779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:47:12.594 [DEBUG] [Thread-57779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:47:12.626 [INFO] [Thread-57779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:47:12.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:47:13.274 [DEBUG] [Thread-57779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:47:13.274 [DEBUG] [Thread-57779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:47:13.274 [DEBUG] [Thread-57779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:47:13.315 [DEBUG] [Thread-57779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:47:13.315 [DEBUG] [Thread-57779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:47:13.318 [DEBUG] [Thread-57779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:47:13.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:47:13.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:47:13.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:47:13.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:47:13.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:47:13.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:47:13.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:47:13.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:47:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:47:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.615677 -999.00  +22.50  22.33     20   -0.90 1 2 1 1 1   887    0 22.62 -12.32 ----- 20.3 22.3 253.0 26.9 26.4 -15.7 26.4 -15.6 26.8 -14.5 27.1 -14.9
2025-11-17T16:47:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:47:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:47:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.615677
2025-11-17T16:47:13.342 [DEBUG] [Thread-57779] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:47:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:47:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:47:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:47:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:47:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:47:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:46:49', tmtdew=28.4, humidity=14.9, cloud=0.0, wind=24.38, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:46:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:47:13.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:47:13.441 [DEBUG] [Thread-57782] [transport.py] [_log()] starting thread (client mode): 0xd0775540
2025-11-17T16:47:13.442 [DEBUG] [Thread-57782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:47:13.456 [DEBUG] [Thread-57782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:47:13.456 [INFO] [Thread-57782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:47:13.464 [DEBUG] [Thread-57782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:47:13.464 [DEBUG] [Thread-57782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:47:13.464 [DEBUG] [Thread-57782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:47:13.464 [DEBUG] [Thread-57782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:47:13.464 [DEBUG] [Thread-57782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] client lang: <none>
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] server lang: <none>
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] kex follows: False
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:47:13.465 [DEBUG] [Thread-57782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:47:13.466 [DEBUG] [Thread-57782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:47:13.466 [DEBUG] [Thread-57782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:47:13.466 [DEBUG] [Thread-57782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:47:13.466 [DEBUG] [Thread-57782] [transport.py] [_log()] Compression: none
2025-11-17T16:47:13.466 [DEBUG] [Thread-57782] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:47:13.526 [DEBUG] [Thread-57782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:47:13.527 [DEBUG] [Thread-57782] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:47:13.527 [DEBUG] [Thread-57782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:47:13.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:47:13.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:47:13.582 [DEBUG] [Thread-57782] [transport.py] [_log()] userauth is OK
2025-11-17T16:47:13.583 [DEBUG] [Thread-57782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:47:13.583 [DEBUG] [Thread-57782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:47:13.583 [DEBUG] [Thread-57782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:47:13.583 [DEBUG] [Thread-57782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:47:13.602 [INFO] [Thread-57782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:47:13.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:47:13.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:47:14.472 [DEBUG] [Thread-57782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:47:14.472 [DEBUG] [Thread-57782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:47:14.520 [DEBUG] [Thread-57782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:47:14.520 [DEBUG] [Thread-57782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:47:14.529 [DEBUG] [Thread-57782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:47:14.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:47:14.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:47:14.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:47:14.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:47:14.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:47:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:47:14.562 [DEBUG] [Thread-57782] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:47:15.377 [DEBUG] [Thread-57784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:47:19.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:47:19.898 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:47:22.918 [DEBUG] [Thread-57785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:47:30.414 [DEBUG] [Thread-57786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:47:44.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:47:44.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:47:44.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:47:45.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 47, 21), 28.4, 14.9, 0.0, 18.37, 23.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:47:45.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:47:21
2025-11-17T16:47:45.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:47:45.441 [DEBUG] [Thread-57787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:47:45.511 [DEBUG] [Thread-57788] [transport.py] [_log()] starting thread (client mode): 0xd0775c60
2025-11-17T16:47:45.512 [DEBUG] [Thread-57788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:47:45.532 [DEBUG] [Thread-57788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:47:45.532 [INFO] [Thread-57788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:47:45.536 [DEBUG] [Thread-57788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:47:45.536 [DEBUG] [Thread-57788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:47:45.536 [DEBUG] [Thread-57788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:47:45.536 [DEBUG] [Thread-57788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:47:45.536 [DEBUG] [Thread-57788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:47:45.536 [DEBUG] [Thread-57788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:47:45.536 [DEBUG] [Thread-57788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:47:45.536 [DEBUG] [Thread-57788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] client lang: <none>
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] server lang: <none>
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] kex follows: False
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] Compression: none
2025-11-17T16:47:45.537 [DEBUG] [Thread-57788] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:47:45.556 [DEBUG] [Thread-57788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:47:45.557 [DEBUG] [Thread-57788] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:47:45.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:47:45.558 [DEBUG] [Thread-57788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:47:45.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:47:45.561 [DEBUG] [Thread-57788] [transport.py] [_log()] userauth is OK
2025-11-17T16:47:45.561 [DEBUG] [Thread-57788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:47:45.561 [DEBUG] [Thread-57788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:47:45.561 [DEBUG] [Thread-57788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:47:45.561 [DEBUG] [Thread-57788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:47:45.581 [INFO] [Thread-57788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:47:45.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:47:46.234 [DEBUG] [Thread-57788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:47:46.235 [DEBUG] [Thread-57788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:47:46.235 [DEBUG] [Thread-57788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:47:46.275 [DEBUG] [Thread-57788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:47:46.275 [DEBUG] [Thread-57788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:47:46.278 [DEBUG] [Thread-57788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:47:46.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:47:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:47:46.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:47:46.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:47:46.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:47:46.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:47:46.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:47:46.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:47:46.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:47:46.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.616024 -999.00  +22.50  17.83     20   -0.90 1 2 1 1 1   887    0 22.66 -9.90 ----- 16.0 17.8 236.6 25.2 26.5 -16.9 26.5 -15.2 27.1 -14.8 27.2 -16.0
2025-11-17T16:47:46.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:47:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:47:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.616024
2025-11-17T16:47:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:47:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:47:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:47:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:47:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:47:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:47:21', tmtdew=28.4, humidity=14.9, cloud=0.0, wind=18.37, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:47:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:47:46.302 [DEBUG] [Thread-57788] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:47:46.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:47:46.400 [DEBUG] [Thread-57791] [transport.py] [_log()] starting thread (client mode): 0xd0722f50
2025-11-17T16:47:46.400 [DEBUG] [Thread-57791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:47:46.419 [DEBUG] [Thread-57791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:47:46.419 [INFO] [Thread-57791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:47:46.426 [DEBUG] [Thread-57791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] client lang: <none>
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] server lang: <none>
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] kex follows: False
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:47:46.427 [DEBUG] [Thread-57791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:47:46.428 [DEBUG] [Thread-57791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:47:46.428 [DEBUG] [Thread-57791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:47:46.428 [DEBUG] [Thread-57791] [transport.py] [_log()] Compression: none
2025-11-17T16:47:46.428 [DEBUG] [Thread-57791] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:47:46.486 [DEBUG] [Thread-57791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:47:46.487 [DEBUG] [Thread-57791] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:47:46.487 [DEBUG] [Thread-57791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:47:46.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:47:46.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:47:46.543 [DEBUG] [Thread-57791] [transport.py] [_log()] userauth is OK
2025-11-17T16:47:46.543 [DEBUG] [Thread-57791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:47:46.543 [DEBUG] [Thread-57791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:47:46.543 [DEBUG] [Thread-57791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:47:46.543 [DEBUG] [Thread-57791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:47:46.563 [INFO] [Thread-57791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:47:46.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:47:46.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:47:47.419 [DEBUG] [Thread-57791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:47:47.420 [DEBUG] [Thread-57791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:47:47.468 [DEBUG] [Thread-57791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:47:47.468 [DEBUG] [Thread-57791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:47:47.478 [DEBUG] [Thread-57791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:47:47.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:47:47.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:47: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
2025-11-17T16:47:47.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:47:47.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:47:47.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:47:47.513 [DEBUG] [Thread-57791] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:48:00.468 [DEBUG] [Thread-57793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:48:15.510 [DEBUG] [Thread-57794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:48:17.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:48:17.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:48:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:48:18.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 47, 53), 28.37, 14.47, 0.0, 24.6, 23.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:48:18.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:47:53
2025-11-17T16:48:18.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:48:18.448 [DEBUG] [Thread-57795] [transport.py] [_log()] starting thread (client mode): 0xd070e3b0
2025-11-17T16:48:18.448 [DEBUG] [Thread-57795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:48:18.468 [DEBUG] [Thread-57795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:48:18.468 [INFO] [Thread-57795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:48:18.471 [DEBUG] [Thread-57795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] client lang: <none>
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] server lang: <none>
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] kex follows: False
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] Compression: none
2025-11-17T16:48:18.472 [DEBUG] [Thread-57795] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:48:18.482 [DEBUG] [Thread-57795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:48:18.482 [DEBUG] [Thread-57795] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:48:18.483 [DEBUG] [Thread-57795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:48:18.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:48:18.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:48:18.484 [DEBUG] [Thread-57795] [transport.py] [_log()] userauth is OK
2025-11-17T16:48:18.484 [DEBUG] [Thread-57795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:48:18.485 [DEBUG] [Thread-57795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:48:18.485 [DEBUG] [Thread-57795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:48:18.485 [DEBUG] [Thread-57795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:48:18.503 [INFO] [Thread-57795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:48:18.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:48:19.138 [DEBUG] [Thread-57795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:48:19.138 [DEBUG] [Thread-57795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:48:19.138 [DEBUG] [Thread-57795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:48:19.179 [DEBUG] [Thread-57795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:48:19.180 [DEBUG] [Thread-57795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:48:19.183 [DEBUG] [Thread-57795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:48:19.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:48:19.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:48:19.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:48:19.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:48:19.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:48:19.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:48:19.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:48:19.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:48:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:48:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.616371 -999.00  +22.70  24.15     20   -0.80 1 2 1 1 1   887    0 22.77 -8.41 ----- 22.4 24.1 250.6 30.3 26.6 -17.0 26.6 -16.1 27.2 -15.7 27.4 -16.6
2025-11-17T16:48:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:48:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:48:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.616371
2025-11-17T16:48:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:48:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:48:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:48:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:48:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:48:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:47:53', tmtdew=28.37, humidity=14.47, cloud=0.0, wind=24.6, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:47:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:48:19.207 [DEBUG] [Thread-57795] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:48:19.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:48:19.303 [DEBUG] [Thread-57798] [transport.py] [_log()] starting thread (client mode): 0xd078c520
2025-11-17T16:48:19.304 [DEBUG] [Thread-57798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:48:19.320 [DEBUG] [Thread-57798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:48:19.320 [INFO] [Thread-57798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:48:19.329 [DEBUG] [Thread-57798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:48:19.329 [DEBUG] [Thread-57798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:48:19.329 [DEBUG] [Thread-57798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] client lang: <none>
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] server lang: <none>
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] kex follows: False
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] Compression: none
2025-11-17T16:48:19.330 [DEBUG] [Thread-57798] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:48:19.387 [DEBUG] [Thread-57798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:48:19.387 [DEBUG] [Thread-57798] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:48:19.388 [DEBUG] [Thread-57798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:48:19.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:48:19.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:48:19.443 [DEBUG] [Thread-57798] [transport.py] [_log()] userauth is OK
2025-11-17T16:48:19.443 [DEBUG] [Thread-57798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:48:19.443 [DEBUG] [Thread-57798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:48:19.443 [DEBUG] [Thread-57798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:48:19.443 [DEBUG] [Thread-57798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:48:19.463 [INFO] [Thread-57798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:48:19.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:48:19.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:48:20.040 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:48:20.041 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:48:20.312 [DEBUG] [Thread-57798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:48:20.312 [DEBUG] [Thread-57798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:48:20.359 [DEBUG] [Thread-57798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:48:20.359 [DEBUG] [Thread-57798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:48:20.368 [DEBUG] [Thread-57798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:48:20.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:48:20.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:48:20.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:48:20.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:48:20.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:48:20.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:48:20.403 [DEBUG] [Thread-57798] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:48:22.971 [DEBUG] [Thread-57800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:48:30.540 [DEBUG] [Thread-57801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:48:45.581 [DEBUG] [Thread-57802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:48:50.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:48:50.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:48:50.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:48:51.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 48, 25), 28.34, 14.5, 0.0, 27.07, 23.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:48:51.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:48:25
2025-11-17T16:48:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:48:51.339 [DEBUG] [Thread-57803] [transport.py] [_log()] starting thread (client mode): 0xd078d0f0
2025-11-17T16:48:51.339 [DEBUG] [Thread-57803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:48:51.359 [DEBUG] [Thread-57803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:48:51.359 [INFO] [Thread-57803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:48:51.362 [DEBUG] [Thread-57803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:48:51.362 [DEBUG] [Thread-57803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:48:51.362 [DEBUG] [Thread-57803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:48:51.362 [DEBUG] [Thread-57803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] client lang: <none>
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] server lang: <none>
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] kex follows: False
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] Compression: none
2025-11-17T16:48:51.363 [DEBUG] [Thread-57803] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:48:51.380 [DEBUG] [Thread-57803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:48:51.380 [DEBUG] [Thread-57803] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:48:51.381 [DEBUG] [Thread-57803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:48:51.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:48:51.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:48:51.383 [DEBUG] [Thread-57803] [transport.py] [_log()] userauth is OK
2025-11-17T16:48:51.383 [DEBUG] [Thread-57803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:48:51.383 [DEBUG] [Thread-57803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:48:51.383 [DEBUG] [Thread-57803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:48:51.383 [DEBUG] [Thread-57803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:48:51.401 [INFO] [Thread-57803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:48:51.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:48:52.073 [DEBUG] [Thread-57803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:48:52.073 [DEBUG] [Thread-57803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:48:52.073 [DEBUG] [Thread-57803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:48:52.115 [DEBUG] [Thread-57803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:48:52.115 [DEBUG] [Thread-57803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:48:52.118 [DEBUG] [Thread-57803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:48:52.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:48:52.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:48:52.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:48:52.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:48:52.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:48:52.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:48:52.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:48:52.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:48:52.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:48:52.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.616718 -999.00  +22.60  16.24     20   -0.80 1 2 1 1 1   887    0 22.75 -7.61 ----- 14.3 16.2 188.4 28.0 26.6 -16.0 26.4 -17.6 27.3 -16.2 27.4 -16.4
2025-11-17T16:48:52.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:48:52.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:48:52.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.616718
2025-11-17T16:48:52.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:48:52.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:48:52.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:48:52.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:48:52.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:48:52.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:48:25', tmtdew=28.34, humidity=14.5, cloud=0.0, wind=27.07, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:48:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:48:52.141 [DEBUG] [Thread-57803] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:48:52.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:48:52.237 [DEBUG] [Thread-57806] [transport.py] [_log()] starting thread (client mode): 0xd0787250
2025-11-17T16:48:52.237 [DEBUG] [Thread-57806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:48:52.252 [DEBUG] [Thread-57806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:48:52.252 [INFO] [Thread-57806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:48:52.259 [DEBUG] [Thread-57806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:48:52.259 [DEBUG] [Thread-57806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:48:52.259 [DEBUG] [Thread-57806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:48:52.259 [DEBUG] [Thread-57806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:48:52.259 [DEBUG] [Thread-57806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] client lang: <none>
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] server lang: <none>
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] kex follows: False
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] Compression: none
2025-11-17T16:48:52.260 [DEBUG] [Thread-57806] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:48:52.319 [DEBUG] [Thread-57806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:48:52.319 [DEBUG] [Thread-57806] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:48:52.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:48:52.320 [DEBUG] [Thread-57806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:48:52.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:48:52.379 [DEBUG] [Thread-57806] [transport.py] [_log()] userauth is OK
2025-11-17T16:48:52.379 [DEBUG] [Thread-57806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:48:52.379 [DEBUG] [Thread-57806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:48:52.379 [DEBUG] [Thread-57806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:48:52.379 [DEBUG] [Thread-57806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:48:52.399 [INFO] [Thread-57806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:48:52.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:48:52.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:48:53.282 [DEBUG] [Thread-57806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:48:53.282 [DEBUG] [Thread-57806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:48:53.330 [DEBUG] [Thread-57806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:48:53.330 [DEBUG] [Thread-57806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:48:53.339 [DEBUG] [Thread-57806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:48:53.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:48:53.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:48: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
2025-11-17T16:48:53.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:48:53.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:48:53.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:48:53.373 [DEBUG] [Thread-57806] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:49:00.611 [DEBUG] [Thread-57808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:49:15.662 [DEBUG] [Thread-57809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:49:20.181 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:49:20.182 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:49:23.021 [DEBUG] [Thread-57810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:49:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:49:23.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:49:23.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
2025-11-17T16:49:24.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 48, 57), 28.38, 14.9, 0.0, 26.84, 23.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:49:24.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:48:57
2025-11-17T16:49:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:49:24.377 [DEBUG] [Thread-57811] [transport.py] [_log()] starting thread (client mode): 0xd07770d0
2025-11-17T16:49:24.377 [DEBUG] [Thread-57811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:49:24.398 [DEBUG] [Thread-57811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:49:24.398 [INFO] [Thread-57811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] client lang: <none>
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] server lang: <none>
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] kex follows: False
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] Compression: none
2025-11-17T16:49:24.401 [DEBUG] [Thread-57811] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:49:24.418 [DEBUG] [Thread-57811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:49:24.419 [DEBUG] [Thread-57811] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:49:24.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:49:24.419 [DEBUG] [Thread-57811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:49:24.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:49:24.419 [DEBUG] [Thread-57811] [transport.py] [_log()] userauth is OK
2025-11-17T16:49:24.419 [DEBUG] [Thread-57811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:49:24.419 [DEBUG] [Thread-57811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:49:24.419 [DEBUG] [Thread-57811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:49:24.419 [DEBUG] [Thread-57811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:49:24.428 [INFO] [Thread-57811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:49:24.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:49:25.033 [DEBUG] [Thread-57811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:49:25.033 [DEBUG] [Thread-57811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:49:25.033 [DEBUG] [Thread-57811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:49:25.074 [DEBUG] [Thread-57811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:49:25.074 [DEBUG] [Thread-57811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:49:25.076 [DEBUG] [Thread-57811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:49:25.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:49:25.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:49:25.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:49:25.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:49:25.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:49:25.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:49:25.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:49:25.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:49:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:49:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.617066 -999.00  +22.90  13.71     20   -0.80 1 2 1 1 1   887    0 22.88 -6.70 ----- 17.0 13.7 233.2 19.9 26.7 -16.3 26.6 -16.0 27.6 -15.8 27.8 -16.7
2025-11-17T16:49:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:49:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:49:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.617066
2025-11-17T16:49:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:49:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:49:25.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:49:25.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:49:25.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:49:25.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:48:57', tmtdew=28.38, humidity=14.9, cloud=0.0, wind=26.84, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:48:34.502', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:49:25.095 [DEBUG] [Thread-57811] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:49:25.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:49:25.181 [DEBUG] [Thread-57814] [transport.py] [_log()] starting thread (client mode): 0xd070dfc0
2025-11-17T16:49:25.181 [DEBUG] [Thread-57814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:49:25.197 [DEBUG] [Thread-57814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:49:25.197 [INFO] [Thread-57814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] client lang: <none>
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] server lang: <none>
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] kex follows: False
2025-11-17T16:49:25.204 [DEBUG] [Thread-57814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:49:25.205 [DEBUG] [Thread-57814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:49:25.205 [DEBUG] [Thread-57814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:49:25.205 [DEBUG] [Thread-57814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:49:25.205 [DEBUG] [Thread-57814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:49:25.205 [DEBUG] [Thread-57814] [transport.py] [_log()] Compression: none
2025-11-17T16:49:25.205 [DEBUG] [Thread-57814] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:49:25.269 [DEBUG] [Thread-57814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:49:25.269 [DEBUG] [Thread-57814] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:49:25.269 [DEBUG] [Thread-57814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:49:25.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:49:25.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:49:25.327 [DEBUG] [Thread-57814] [transport.py] [_log()] userauth is OK
2025-11-17T16:49:25.327 [DEBUG] [Thread-57814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:49:25.327 [DEBUG] [Thread-57814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:49:25.327 [DEBUG] [Thread-57814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:49:25.327 [DEBUG] [Thread-57814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:49:25.343 [INFO] [Thread-57814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:49:25.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:49:25.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:49:26.249 [DEBUG] [Thread-57814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:49:26.249 [DEBUG] [Thread-57814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:49:26.297 [DEBUG] [Thread-57814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:49:26.297 [DEBUG] [Thread-57814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:49:26.305 [DEBUG] [Thread-57814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:49:26.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:49:26.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:49:26.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:49:26.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:49:26.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:49:26.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:49:26.336 [DEBUG] [Thread-57814] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:49:30.688 [DEBUG] [Thread-57816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:49:45.727 [DEBUG] [Thread-57817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:49:56.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:49:56.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:49:56.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:49:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 49, 29), 28.09, 15.15, 0.0, 22.97, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:49:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:49:29
2025-11-17T16:49:57.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:49:57.295 [DEBUG] [Thread-57818] [transport.py] [_log()] starting thread (client mode): 0xd0721d50
2025-11-17T16:49:57.295 [DEBUG] [Thread-57818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:49:57.315 [DEBUG] [Thread-57818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:49:57.315 [INFO] [Thread-57818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:49:57.318 [DEBUG] [Thread-57818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] client lang: <none>
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] server lang: <none>
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] kex follows: False
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] Compression: none
2025-11-17T16:49:57.319 [DEBUG] [Thread-57818] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:49:57.338 [DEBUG] [Thread-57818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:49:57.339 [DEBUG] [Thread-57818] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:49:57.339 [DEBUG] [Thread-57818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:49:57.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:49:57.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:49:57.341 [DEBUG] [Thread-57818] [transport.py] [_log()] userauth is OK
2025-11-17T16:49:57.341 [DEBUG] [Thread-57818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:49:57.341 [DEBUG] [Thread-57818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:49:57.341 [DEBUG] [Thread-57818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:49:57.341 [DEBUG] [Thread-57818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:49:57.365 [INFO] [Thread-57818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:49:57.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:49:57.981 [DEBUG] [Thread-57818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:49:57.981 [DEBUG] [Thread-57818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:49:57.981 [DEBUG] [Thread-57818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:49:58.021 [DEBUG] [Thread-57818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:49:58.021 [DEBUG] [Thread-57818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:49:58.024 [DEBUG] [Thread-57818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:49:58.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:49:58.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:49:58.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:49:58.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:49:58.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:49:58.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:49:58.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:49:58.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:49:58.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:49:58.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.617413 -999.00  +22.90  22.78     20   -0.80 1 2 1 1 1   887    0 23.03 -6.20 ----- 21.0 22.8 254.2 26.9 26.7 -17.0 26.7 -16.3 27.5 -16.8 27.9 -17.9
2025-11-17T16:49:58.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:49:58.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:49:58.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.617413
2025-11-17T16:49:58.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:49:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:49:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:49:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:49:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:49:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:49:29', tmtdew=28.09, humidity=15.15, cloud=0.0, wind=22.97, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:49:04.483', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:49:58.048 [DEBUG] [Thread-57818] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:49:58.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:49:58.142 [DEBUG] [Thread-57821] [transport.py] [_log()] starting thread (client mode): 0xd0723b80
2025-11-17T16:49:58.142 [DEBUG] [Thread-57821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:49:58.159 [DEBUG] [Thread-57821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:49:58.159 [INFO] [Thread-57821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:49:58.166 [DEBUG] [Thread-57821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:49:58.166 [DEBUG] [Thread-57821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] client lang: <none>
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] server lang: <none>
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] kex follows: False
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] Compression: none
2025-11-17T16:49:58.167 [DEBUG] [Thread-57821] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:49:58.222 [DEBUG] [Thread-57821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:49:58.223 [DEBUG] [Thread-57821] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:49:58.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:49:58.224 [DEBUG] [Thread-57821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:49:58.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:49:58.283 [DEBUG] [Thread-57821] [transport.py] [_log()] userauth is OK
2025-11-17T16:49:58.283 [DEBUG] [Thread-57821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:49:58.283 [DEBUG] [Thread-57821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:49:58.284 [DEBUG] [Thread-57821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:49:58.284 [DEBUG] [Thread-57821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:49:58.303 [INFO] [Thread-57821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:49:58.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:49:58.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:49:59.175 [DEBUG] [Thread-57821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:49:59.176 [DEBUG] [Thread-57821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:49:59.223 [DEBUG] [Thread-57821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:49:59.223 [DEBUG] [Thread-57821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:49:59.232 [DEBUG] [Thread-57821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:49:59.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:49:59.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:49:59.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:49:59.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:49:59.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:49:59.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:49:59.266 [DEBUG] [Thread-57821] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:50:00.756 [DEBUG] [Thread-57823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:50:15.798 [DEBUG] [Thread-57824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:50:20.324 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:50:20.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:50:23.073 [DEBUG] [Thread-57825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:50:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:50:29.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:50:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:50:29.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 50, 1), 28.52, 14.6, 0.0, 26.62, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:50:29.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:50:01
2025-11-17T16:50:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:50:30.215 [DEBUG] [Thread-57826] [transport.py] [_log()] starting thread (client mode): 0xd0722860
2025-11-17T16:50:30.216 [DEBUG] [Thread-57826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:50:30.235 [DEBUG] [Thread-57826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:50:30.235 [INFO] [Thread-57826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:50:30.238 [DEBUG] [Thread-57826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] client lang: <none>
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] server lang: <none>
2025-11-17T16:50:30.239 [DEBUG] [Thread-57826] [transport.py] [_log()] kex follows: False
2025-11-17T16:50:30.240 [DEBUG] [Thread-57826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:50:30.240 [DEBUG] [Thread-57826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:50:30.240 [DEBUG] [Thread-57826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:50:30.240 [DEBUG] [Thread-57826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:50:30.240 [DEBUG] [Thread-57826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:50:30.240 [DEBUG] [Thread-57826] [transport.py] [_log()] Compression: none
2025-11-17T16:50:30.240 [DEBUG] [Thread-57826] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:50:30.259 [DEBUG] [Thread-57826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:50:30.259 [DEBUG] [Thread-57826] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:50:30.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:50:30.260 [DEBUG] [Thread-57826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:50:30.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:50:30.301 [DEBUG] [Thread-57826] [transport.py] [_log()] userauth is OK
2025-11-17T16:50:30.301 [DEBUG] [Thread-57826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:50:30.301 [DEBUG] [Thread-57826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:50:30.301 [DEBUG] [Thread-57826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:50:30.301 [DEBUG] [Thread-57826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:50:30.325 [INFO] [Thread-57826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:50:30.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:50:30.824 [DEBUG] [Thread-57828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:50:30.950 [DEBUG] [Thread-57826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:50:30.951 [DEBUG] [Thread-57826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:50:30.951 [DEBUG] [Thread-57826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:50:30.991 [DEBUG] [Thread-57826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:50:30.991 [DEBUG] [Thread-57826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:50:30.994 [DEBUG] [Thread-57826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:50:31.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:50:31.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:50:31.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:50:31.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:50:31.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:50:31.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:50:31.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:50:31.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:50:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:50:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.617760 -999.00  +23.10  21.82     20   -0.90 1 2 1 1 1   887    0 23.17 -4.19 ----- 20.6 21.8 269.2 29.8 26.8 -16.7 26.8 -16.5 27.6 -17.5 27.9 -17.8
2025-11-17T16:50:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:50:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:50:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.617760
2025-11-17T16:50:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:50:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:50:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:50:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:50:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:50:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:50:01', tmtdew=28.52, humidity=14.6, cloud=0.0, wind=26.62, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:49:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:50:31.018 [DEBUG] [Thread-57826] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:50:31.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:50:31.117 [DEBUG] [Thread-57830] [transport.py] [_log()] starting thread (client mode): 0xd0777790
2025-11-17T16:50:31.118 [DEBUG] [Thread-57830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:50:31.133 [DEBUG] [Thread-57830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:50:31.133 [INFO] [Thread-57830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:50:31.140 [DEBUG] [Thread-57830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:50:31.140 [DEBUG] [Thread-57830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:50:31.140 [DEBUG] [Thread-57830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] client lang: <none>
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] server lang: <none>
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] kex follows: False
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] Compression: none
2025-11-17T16:50:31.141 [DEBUG] [Thread-57830] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:50:31.204 [DEBUG] [Thread-57830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:50:31.204 [DEBUG] [Thread-57830] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:50:31.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:50:31.205 [DEBUG] [Thread-57830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:50:31.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:50:31.260 [DEBUG] [Thread-57830] [transport.py] [_log()] userauth is OK
2025-11-17T16:50:31.260 [DEBUG] [Thread-57830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:50:31.260 [DEBUG] [Thread-57830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:50:31.260 [DEBUG] [Thread-57830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:50:31.261 [DEBUG] [Thread-57830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:50:31.281 [INFO] [Thread-57830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:50:31.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:50:31.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:50:32.156 [DEBUG] [Thread-57830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:50:32.157 [DEBUG] [Thread-57830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:50:32.204 [DEBUG] [Thread-57830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:50:32.204 [DEBUG] [Thread-57830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:50:32.213 [DEBUG] [Thread-57830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:50:32.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:50:32.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:50: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') -> 00000000
2025-11-17T16:50:32.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:50:32.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:50:32.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:50:32.247 [DEBUG] [Thread-57830] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:50:45.856 [DEBUG] [Thread-57832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:51:00.898 [DEBUG] [Thread-57833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:51:02.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:51:02.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:51:02.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:51:02.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 50, 33), 28.59, 14.53, 0.0, 20.06, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:51:02.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:50:33
2025-11-17T16:51:03.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:51:03.211 [DEBUG] [Thread-57834] [transport.py] [_log()] starting thread (client mode): 0xd0721bd0
2025-11-17T16:51:03.211 [DEBUG] [Thread-57834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:51:03.224 [DEBUG] [Thread-57834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:51:03.225 [INFO] [Thread-57834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:51:03.226 [DEBUG] [Thread-57834] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:51:03.226 [DEBUG] [Thread-57834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:51:03.226 [DEBUG] [Thread-57834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:51:03.226 [DEBUG] [Thread-57834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:51:03.226 [DEBUG] [Thread-57834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] client lang: <none>
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] server lang: <none>
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] kex follows: False
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] Compression: none
2025-11-17T16:51:03.227 [DEBUG] [Thread-57834] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:51:03.237 [DEBUG] [Thread-57834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:51:03.238 [DEBUG] [Thread-57834] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:51:03.238 [DEBUG] [Thread-57834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:51:03.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:51:03.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:51:03.239 [DEBUG] [Thread-57834] [transport.py] [_log()] userauth is OK
2025-11-17T16:51:03.240 [DEBUG] [Thread-57834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:51:03.240 [DEBUG] [Thread-57834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:51:03.240 [DEBUG] [Thread-57834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:51:03.240 [DEBUG] [Thread-57834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:51:03.262 [INFO] [Thread-57834] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:51:03.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:51:03.891 [DEBUG] [Thread-57834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:51:03.892 [DEBUG] [Thread-57834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:51:03.892 [DEBUG] [Thread-57834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:51:03.932 [DEBUG] [Thread-57834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:51:03.932 [DEBUG] [Thread-57834] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:51:03.936 [DEBUG] [Thread-57834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:51:03.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:51:03.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:51:03.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:51:03.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:51:03.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:51:03.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:51:03.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:51:03.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:51:03.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:51:03.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.618455 -999.00  +23.10  13.89     20   -0.90 1 2 1 1 1   887    0 23.35 -0.85 ----- 11.8 13.9 240.9 23.1 27.0 -17.4 27.0 -16.9 27.9 -16.6 28.1 -17.9
2025-11-17T16:51:03.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:51:03.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:51:03.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.618455
2025-11-17T16:51:03.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:51:03.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:51:03.959 [DEBUG] [Thread-57834] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:51:03.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:51:03.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:51:03.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:51:03.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:50:33', tmtdew=28.59, humidity=14.53, cloud=0.0, wind=20.06, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:50:34.512', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:51:04.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:51:04.055 [DEBUG] [Thread-57837] [transport.py] [_log()] starting thread (client mode): 0xd0786710
2025-11-17T16:51:04.055 [DEBUG] [Thread-57837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:51:04.070 [DEBUG] [Thread-57837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:51:04.070 [INFO] [Thread-57837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:51:04.078 [DEBUG] [Thread-57837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:51:04.078 [DEBUG] [Thread-57837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:51:04.078 [DEBUG] [Thread-57837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:51:04.078 [DEBUG] [Thread-57837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:51:04.078 [DEBUG] [Thread-57837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:51:04.078 [DEBUG] [Thread-57837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:51:04.078 [DEBUG] [Thread-57837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] client lang: <none>
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] server lang: <none>
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] kex follows: False
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:51:04.079 [DEBUG] [Thread-57837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:51:04.080 [DEBUG] [Thread-57837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:51:04.080 [DEBUG] [Thread-57837] [transport.py] [_log()] Compression: none
2025-11-17T16:51:04.080 [DEBUG] [Thread-57837] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:51:04.136 [DEBUG] [Thread-57837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:51:04.136 [DEBUG] [Thread-57837] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:51:04.137 [DEBUG] [Thread-57837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:51:04.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:51:04.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:51:04.191 [DEBUG] [Thread-57837] [transport.py] [_log()] userauth is OK
2025-11-17T16:51:04.191 [DEBUG] [Thread-57837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:51:04.192 [DEBUG] [Thread-57837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:51:04.192 [DEBUG] [Thread-57837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:51:04.192 [DEBUG] [Thread-57837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:51:04.213 [INFO] [Thread-57837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:51:04.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:51:04.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:51:05.128 [DEBUG] [Thread-57837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:51:05.128 [DEBUG] [Thread-57837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:51:05.176 [DEBUG] [Thread-57837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:51:05.176 [DEBUG] [Thread-57837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:51:05.186 [DEBUG] [Thread-57837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:51:05.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:51:05.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:51:05.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:51:05.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:51:05.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:51:05.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:51:05.220 [DEBUG] [Thread-57837] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:51:15.928 [DEBUG] [Thread-57839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:51:20.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:51:20.466 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:51:23.117 [DEBUG] [Thread-57840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:51:30.965 [DEBUG] [Thread-57841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:51:35.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:51:35.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:51:35.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:51:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 51, 5), 28.57, 14.53, 0.0, 23.08, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:51:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:51:05
2025-11-17T16:51:36.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:51:36.173 [DEBUG] [Thread-57842] [transport.py] [_log()] starting thread (client mode): 0xd070fee0
2025-11-17T16:51:36.173 [DEBUG] [Thread-57842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:51:36.192 [DEBUG] [Thread-57842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:51:36.192 [INFO] [Thread-57842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:51:36.195 [DEBUG] [Thread-57842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:51:36.195 [DEBUG] [Thread-57842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] client lang: <none>
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] server lang: <none>
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] kex follows: False
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] Compression: none
2025-11-17T16:51:36.196 [DEBUG] [Thread-57842] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:51:36.212 [DEBUG] [Thread-57842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:51:36.213 [DEBUG] [Thread-57842] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:51:36.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:51:36.214 [DEBUG] [Thread-57842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:51:36.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:51:36.216 [DEBUG] [Thread-57842] [transport.py] [_log()] userauth is OK
2025-11-17T16:51:36.216 [DEBUG] [Thread-57842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:51:36.216 [DEBUG] [Thread-57842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:51:36.216 [DEBUG] [Thread-57842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:51:36.216 [DEBUG] [Thread-57842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:51:36.240 [INFO] [Thread-57842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:51:36.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:51:36.854 [DEBUG] [Thread-57842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:51:36.854 [DEBUG] [Thread-57842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:51:36.855 [DEBUG] [Thread-57842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:51:36.895 [DEBUG] [Thread-57842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:51:36.895 [DEBUG] [Thread-57842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:51:36.898 [DEBUG] [Thread-57842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:51:36.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:51:36.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:51:36.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:51:36.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:51:36.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:51:36.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:51:36.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:51:36.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:51:36.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:51:36.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.618802 -999.00  +23.10  18.69     20   -1.00 1 2 1 1 1   887    0 23.58 2.01 ----- 17.3 18.7 252.0 22.9 27.1 -16.8 27.1 -16.2 28.0 -16.8 28.3 -17.8
2025-11-17T16:51:36.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:51:36.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:51:36.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.618802
2025-11-17T16:51:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:51:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:51:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:51:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:51:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:51:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:51:05', tmtdew=28.57, humidity=14.53, cloud=0.0, wind=23.08, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:51:04.493', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:51:36.924 [DEBUG] [Thread-57842] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:51:37.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:51:37.022 [DEBUG] [Thread-57845] [transport.py] [_log()] starting thread (client mode): 0xd07842b0
2025-11-17T16:51:37.022 [DEBUG] [Thread-57845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:51:37.039 [DEBUG] [Thread-57845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:51:37.039 [INFO] [Thread-57845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:51:37.046 [DEBUG] [Thread-57845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:51:37.046 [DEBUG] [Thread-57845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] client lang: <none>
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] server lang: <none>
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] kex follows: False
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] Compression: none
2025-11-17T16:51:37.047 [DEBUG] [Thread-57845] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:51:37.111 [DEBUG] [Thread-57845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:51:37.111 [DEBUG] [Thread-57845] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:51:37.112 [DEBUG] [Thread-57845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:51:37.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:51:37.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:51:37.170 [DEBUG] [Thread-57845] [transport.py] [_log()] userauth is OK
2025-11-17T16:51:37.170 [DEBUG] [Thread-57845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:51:37.170 [DEBUG] [Thread-57845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:51:37.170 [DEBUG] [Thread-57845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:51:37.171 [DEBUG] [Thread-57845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:51:37.190 [INFO] [Thread-57845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:51:37.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:51:37.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:51:38.042 [DEBUG] [Thread-57845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:51:38.042 [DEBUG] [Thread-57845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:51:38.090 [DEBUG] [Thread-57845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:51:38.090 [DEBUG] [Thread-57845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:51:38.099 [DEBUG] [Thread-57845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:51:38.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:51:38.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:51:38.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:51:38.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:51:38.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:51:38.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:51:38.130 [DEBUG] [Thread-57845] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:51:45.998 [DEBUG] [Thread-57847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:52:01.039 [DEBUG] [Thread-57848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:52:08.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:52:08.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:52:08.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:52:08.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 51, 37), 28.67, 14.53, 0.0, 25.87, 23.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:52:08.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:51:37
2025-11-17T16:52:08.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:52:09.078 [DEBUG] [Thread-57849] [transport.py] [_log()] starting thread (client mode): 0xd07ebd00
2025-11-17T16:52:09.078 [DEBUG] [Thread-57849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:52:09.098 [DEBUG] [Thread-57849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:52:09.098 [INFO] [Thread-57849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:52:09.101 [DEBUG] [Thread-57849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:52:09.101 [DEBUG] [Thread-57849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:52:09.101 [DEBUG] [Thread-57849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:52:09.101 [DEBUG] [Thread-57849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:52:09.101 [DEBUG] [Thread-57849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:52:09.101 [DEBUG] [Thread-57849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] client lang: <none>
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] server lang: <none>
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] kex follows: False
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] Compression: none
2025-11-17T16:52:09.102 [DEBUG] [Thread-57849] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:52:09.120 [DEBUG] [Thread-57849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:52:09.120 [DEBUG] [Thread-57849] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:52:09.121 [DEBUG] [Thread-57849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:52:09.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:52:09.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:52:09.123 [DEBUG] [Thread-57849] [transport.py] [_log()] userauth is OK
2025-11-17T16:52:09.123 [DEBUG] [Thread-57849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:52:09.123 [DEBUG] [Thread-57849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:52:09.123 [DEBUG] [Thread-57849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:52:09.123 [DEBUG] [Thread-57849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:52:09.147 [INFO] [Thread-57849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:52:09.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:52:09.781 [DEBUG] [Thread-57849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:52:09.781 [DEBUG] [Thread-57849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:52:09.781 [DEBUG] [Thread-57849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:52:09.823 [DEBUG] [Thread-57849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:52:09.823 [DEBUG] [Thread-57849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:52:09.826 [DEBUG] [Thread-57849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:52:09.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:52:09.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:52:09.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:52:09.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:52:09.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:52:09.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:52:09.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.619148 -999.00  +23.30  17.29     20   -0.80 1 2 1 1 1   887    0 23.69 4.88 ----- 11.3 17.3 197.6 28.8 27.2 -16.2 27.1 -16.8 28.1 -17.3 28.4 -17.4
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.619148
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:52:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:51:37', tmtdew=28.67, humidity=14.53, cloud=0.0, wind=25.87, temperature=23.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:51:34.387', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:52:09.848 [DEBUG] [Thread-57849] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:52:09.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:52:09.943 [DEBUG] [Thread-57852] [transport.py] [_log()] starting thread (client mode): 0xd0784c10
2025-11-17T16:52:09.944 [DEBUG] [Thread-57852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:52:09.958 [DEBUG] [Thread-57852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:52:09.958 [INFO] [Thread-57852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] client lang: <none>
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] server lang: <none>
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] kex follows: False
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] Compression: none
2025-11-17T16:52:09.967 [DEBUG] [Thread-57852] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:52:10.028 [DEBUG] [Thread-57852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:52:10.028 [DEBUG] [Thread-57852] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:52:10.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:52:10.028 [DEBUG] [Thread-57852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:52:10.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:52:10.088 [DEBUG] [Thread-57852] [transport.py] [_log()] userauth is OK
2025-11-17T16:52:10.088 [DEBUG] [Thread-57852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:52:10.088 [DEBUG] [Thread-57852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:52:10.088 [DEBUG] [Thread-57852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:52:10.088 [DEBUG] [Thread-57852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:52:10.105 [INFO] [Thread-57852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:52:10.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:52:10.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:52:10.958 [DEBUG] [Thread-57852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:52:10.958 [DEBUG] [Thread-57852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:52:11.006 [DEBUG] [Thread-57852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:52:11.006 [DEBUG] [Thread-57852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:52:11.015 [DEBUG] [Thread-57852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:52:11.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:52:11.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:52:11.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:52:11.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:52:11.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:52:11.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:52:11.046 [DEBUG] [Thread-57852] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:52:16.071 [DEBUG] [Thread-57854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:52:20.606 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:52:20.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:52:23.168 [DEBUG] [Thread-57855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:52:31.112 [DEBUG] [Thread-57856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:52:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:52:41.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:52:41.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:52:41.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 52, 9), 28.51, 14.68, 0.0, 23.77, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:52:41.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:52:09
2025-11-17T16:52:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:52:42.005 [DEBUG] [Thread-57857] [transport.py] [_log()] starting thread (client mode): 0xd0786c20
2025-11-17T16:52:42.005 [DEBUG] [Thread-57857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:52:42.024 [DEBUG] [Thread-57857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:52:42.024 [INFO] [Thread-57857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] client lang: <none>
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] server lang: <none>
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] kex follows: False
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] Compression: none
2025-11-17T16:52:42.028 [DEBUG] [Thread-57857] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:52:42.043 [DEBUG] [Thread-57857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:52:42.043 [DEBUG] [Thread-57857] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:52:42.044 [DEBUG] [Thread-57857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:52:42.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:52:42.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:52:42.044 [DEBUG] [Thread-57857] [transport.py] [_log()] userauth is OK
2025-11-17T16:52:42.044 [DEBUG] [Thread-57857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:52:42.044 [DEBUG] [Thread-57857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:52:42.044 [DEBUG] [Thread-57857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:52:42.044 [DEBUG] [Thread-57857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:52:42.053 [INFO] [Thread-57857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:52:42.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:52:42.704 [DEBUG] [Thread-57857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:52:42.704 [DEBUG] [Thread-57857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:52:42.704 [DEBUG] [Thread-57857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:52:42.745 [DEBUG] [Thread-57857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:52:42.745 [DEBUG] [Thread-57857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:52:42.747 [DEBUG] [Thread-57857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:52:42.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:52:42.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:52:42.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:52:42.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:52:42.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:52:42.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:52:42.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.619496 -999.00  +23.60  11.46     19   -0.80 1 2 1 1 1   887    0 23.36 10.49 ----- 7.7 11.5 230.6 20.7 27.3 -17.0 27.2 -17.3 28.2 -18.0 28.5 -18.0
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.619496
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:52:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:52:09', tmtdew=28.51, humidity=14.68, cloud=0.0, wind=23.77, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:52:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:52:42.767 [DEBUG] [Thread-57857] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:52:42.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:52:42.852 [DEBUG] [Thread-57860] [transport.py] [_log()] starting thread (client mode): 0xd0775ae0
2025-11-17T16:52:42.852 [DEBUG] [Thread-57860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:52:42.867 [DEBUG] [Thread-57860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:52:42.867 [INFO] [Thread-57860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] client lang: <none>
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] server lang: <none>
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] kex follows: False
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] Compression: none
2025-11-17T16:52:42.875 [DEBUG] [Thread-57860] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:52:42.930 [DEBUG] [Thread-57860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:52:42.931 [DEBUG] [Thread-57860] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:52:42.931 [DEBUG] [Thread-57860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:52:42.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:52:42.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:52:42.987 [DEBUG] [Thread-57860] [transport.py] [_log()] userauth is OK
2025-11-17T16:52:42.987 [DEBUG] [Thread-57860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:52:42.987 [DEBUG] [Thread-57860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:52:42.988 [DEBUG] [Thread-57860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:52:42.988 [DEBUG] [Thread-57860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:52:43.002 [INFO] [Thread-57860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:52:43.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:52:43.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:52:43.836 [DEBUG] [Thread-57860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:52:43.836 [DEBUG] [Thread-57860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:52:43.884 [DEBUG] [Thread-57860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:52:43.885 [DEBUG] [Thread-57860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:52:43.893 [DEBUG] [Thread-57860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:52:43.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:52:43.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:52:43.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:52:43.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:52:43.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:52:43.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:52:43.928 [DEBUG] [Thread-57860] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:52:46.142 [DEBUG] [Thread-57862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:53:01.183 [DEBUG] [Thread-57863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:53:13.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:53:13.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:53:13.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:53:14.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 52, 41), 28.87, 13.98, 0.0, 20.7, 23.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:53:14.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:52:41
2025-11-17T16:53:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:53:14.937 [DEBUG] [Thread-57864] [transport.py] [_log()] starting thread (client mode): 0xd0776380
2025-11-17T16:53:14.938 [DEBUG] [Thread-57864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:53:14.957 [DEBUG] [Thread-57864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:53:14.957 [INFO] [Thread-57864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:53:14.961 [DEBUG] [Thread-57864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:53:14.961 [DEBUG] [Thread-57864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:53:14.961 [DEBUG] [Thread-57864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] client lang: <none>
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] server lang: <none>
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] kex follows: False
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] Compression: none
2025-11-17T16:53:14.962 [DEBUG] [Thread-57864] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:53:14.976 [DEBUG] [Thread-57864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:53:14.976 [DEBUG] [Thread-57864] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:53:14.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:53:14.977 [DEBUG] [Thread-57864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:53:14.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:53:14.978 [DEBUG] [Thread-57864] [transport.py] [_log()] userauth is OK
2025-11-17T16:53:14.978 [DEBUG] [Thread-57864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:53:14.978 [DEBUG] [Thread-57864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:53:14.978 [DEBUG] [Thread-57864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:53:14.978 [DEBUG] [Thread-57864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:53:14.995 [INFO] [Thread-57864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:53:14.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:53:15.618 [DEBUG] [Thread-57864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:53:15.618 [DEBUG] [Thread-57864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:53:15.618 [DEBUG] [Thread-57864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:53:15.659 [DEBUG] [Thread-57864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:53:15.659 [DEBUG] [Thread-57864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:53:15.661 [DEBUG] [Thread-57864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:53:15.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:53:15.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:53:15.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:53:15.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:53:15.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:53:15.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:53:15.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.619843 -999.00  +23.60  10.89     19   -0.90 1 2 1 1 1   887    0 23.64 20.12 ----- 7.8 10.9 240.2 20.2 27.4 -16.7 27.3 -16.7 28.4 -17.9 28.6 -18.9
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.619843
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:53:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:52:41', tmtdew=28.87, humidity=13.98, cloud=0.0, wind=20.7, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:52:34.435', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:53:15.680 [DEBUG] [Thread-57864] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:53:15.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:53:15.766 [DEBUG] [Thread-57867] [transport.py] [_log()] starting thread (client mode): 0xd31363e0
2025-11-17T16:53:15.766 [DEBUG] [Thread-57867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:53:15.781 [DEBUG] [Thread-57867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:53:15.781 [INFO] [Thread-57867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:53:15.788 [DEBUG] [Thread-57867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:53:15.788 [DEBUG] [Thread-57867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] client lang: <none>
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] server lang: <none>
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] kex follows: False
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] Compression: none
2025-11-17T16:53:15.789 [DEBUG] [Thread-57867] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:53:15.847 [DEBUG] [Thread-57867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:53:15.847 [DEBUG] [Thread-57867] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:53:15.847 [DEBUG] [Thread-57867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:53:15.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:53:15.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:53:15.903 [DEBUG] [Thread-57867] [transport.py] [_log()] userauth is OK
2025-11-17T16:53:15.903 [DEBUG] [Thread-57867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:53:15.903 [DEBUG] [Thread-57867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:53:15.903 [DEBUG] [Thread-57867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:53:15.903 [DEBUG] [Thread-57867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:53:15.917 [INFO] [Thread-57867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:53:15.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:53:15.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:53:16.218 [DEBUG] [Thread-57869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:53:16.742 [DEBUG] [Thread-57867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:53:16.742 [DEBUG] [Thread-57867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:53:16.790 [DEBUG] [Thread-57867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:53:16.790 [DEBUG] [Thread-57867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:53:16.798 [DEBUG] [Thread-57867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:53:16.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:53:16.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:53:16.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:53:16.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:53:16.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:53:16.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:53:16.830 [DEBUG] [Thread-57867] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:53:20.748 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:53:20.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:53:23.220 [DEBUG] [Thread-57870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:53:31.259 [DEBUG] [Thread-57871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:53:46.287 [DEBUG] [Thread-57872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:53:46.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:53:46.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:53:46.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:53:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 53, 13), 28.94, 13.9, 0.0, 17.72, 23.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:53:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:53:13
2025-11-17T16:53:47.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:53:47.821 [DEBUG] [Thread-57873] [transport.py] [_log()] starting thread (client mode): 0xd0757100
2025-11-17T16:53:47.821 [DEBUG] [Thread-57873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:53:47.842 [DEBUG] [Thread-57873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:53:47.842 [INFO] [Thread-57873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:53:47.844 [DEBUG] [Thread-57873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] client lang: <none>
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] server lang: <none>
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] kex follows: False
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] Compression: none
2025-11-17T16:53:47.845 [DEBUG] [Thread-57873] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:53:47.858 [DEBUG] [Thread-57873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:53:47.858 [DEBUG] [Thread-57873] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:53:47.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:53:47.859 [DEBUG] [Thread-57873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:53:47.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:53:47.859 [DEBUG] [Thread-57873] [transport.py] [_log()] userauth is OK
2025-11-17T16:53:47.859 [DEBUG] [Thread-57873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:53:47.859 [DEBUG] [Thread-57873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:53:47.859 [DEBUG] [Thread-57873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:53:47.859 [DEBUG] [Thread-57873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:53:47.874 [INFO] [Thread-57873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:53:47.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:53:48.477 [DEBUG] [Thread-57873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:53:48.477 [DEBUG] [Thread-57873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:53:48.477 [DEBUG] [Thread-57873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:53:48.518 [DEBUG] [Thread-57873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:53:48.519 [DEBUG] [Thread-57873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:53:48.522 [DEBUG] [Thread-57873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:53:48.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:53:48.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:53:48.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:53:48.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:53:48.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:53:48.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:53:48.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:53:48.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:53:48.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:53:48.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.620191 -999.00  +23.60  17.63     19   -1.00 1 2 1 1 1   887    0 24.12 25.55 ----- 14.2 17.6 255.2 24.2 27.5 -16.9 27.4 -16.7 28.4 -18.6 28.8 -19.1
2025-11-17T16:53:48.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:53:48.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:53:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.620191
2025-11-17T16:53:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:53:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:53:48.547 [DEBUG] [Thread-57873] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:53:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:53:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:53:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:53:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:53:13', tmtdew=28.94, humidity=13.9, cloud=0.0, wind=17.72, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:53:04.502', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:53:48.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:53:48.643 [DEBUG] [Thread-57876] [transport.py] [_log()] starting thread (client mode): 0xd0756200
2025-11-17T16:53:48.643 [DEBUG] [Thread-57876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:53:48.657 [DEBUG] [Thread-57876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:53:48.657 [INFO] [Thread-57876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] client lang: <none>
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] server lang: <none>
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] kex follows: False
2025-11-17T16:53:48.665 [DEBUG] [Thread-57876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:53:48.666 [DEBUG] [Thread-57876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:53:48.666 [DEBUG] [Thread-57876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:53:48.666 [DEBUG] [Thread-57876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:53:48.666 [DEBUG] [Thread-57876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:53:48.666 [DEBUG] [Thread-57876] [transport.py] [_log()] Compression: none
2025-11-17T16:53:48.666 [DEBUG] [Thread-57876] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:53:48.723 [DEBUG] [Thread-57876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:53:48.724 [DEBUG] [Thread-57876] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:53:48.724 [DEBUG] [Thread-57876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:53:48.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:53:48.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:53:48.784 [DEBUG] [Thread-57876] [transport.py] [_log()] userauth is OK
2025-11-17T16:53:48.784 [DEBUG] [Thread-57876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:53:48.784 [DEBUG] [Thread-57876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:53:48.784 [DEBUG] [Thread-57876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:53:48.784 [DEBUG] [Thread-57876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:53:48.803 [INFO] [Thread-57876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:53:48.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:53:48.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:53:49.718 [DEBUG] [Thread-57876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:53:49.718 [DEBUG] [Thread-57876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:53:49.766 [DEBUG] [Thread-57876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:53:49.766 [DEBUG] [Thread-57876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:53:49.776 [DEBUG] [Thread-57876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:53:49.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:53: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')
2025-11-17T16:53: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
2025-11-17T16:53:49.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:53:49.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:53:49.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:53:49.810 [DEBUG] [Thread-57876] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:54:01.314 [DEBUG] [Thread-57878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:54:16.364 [DEBUG] [Thread-57879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:54:19.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:54:19.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:54:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:54:20.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 53, 45), 29.14, 13.93, 0.0, 22.16, 23.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:54:20.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:53:45
2025-11-17T16:54:20.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:54:20.734 [DEBUG] [Thread-57880] [transport.py] [_log()] starting thread (client mode): 0xd07568f0
2025-11-17T16:54:20.734 [DEBUG] [Thread-57880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:54:20.753 [DEBUG] [Thread-57880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:54:20.753 [INFO] [Thread-57880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:54:20.756 [DEBUG] [Thread-57880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:54:20.756 [DEBUG] [Thread-57880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:54:20.756 [DEBUG] [Thread-57880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] client lang: <none>
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] server lang: <none>
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] kex follows: False
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:54:20.757 [DEBUG] [Thread-57880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:54:20.758 [DEBUG] [Thread-57880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:54:20.758 [DEBUG] [Thread-57880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:54:20.758 [DEBUG] [Thread-57880] [transport.py] [_log()] Compression: none
2025-11-17T16:54:20.758 [DEBUG] [Thread-57880] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:54:20.776 [DEBUG] [Thread-57880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:54:20.776 [DEBUG] [Thread-57880] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:54:20.777 [DEBUG] [Thread-57880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:54:20.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:54:20.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:54:20.779 [DEBUG] [Thread-57880] [transport.py] [_log()] userauth is OK
2025-11-17T16:54:20.779 [DEBUG] [Thread-57880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:54:20.779 [DEBUG] [Thread-57880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:54:20.779 [DEBUG] [Thread-57880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:54:20.779 [DEBUG] [Thread-57880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:54:20.803 [INFO] [Thread-57880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:54:20.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:54:20.901 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:54:20.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:54:21.426 [DEBUG] [Thread-57880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:54:21.426 [DEBUG] [Thread-57880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:54:21.427 [DEBUG] [Thread-57880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:54:21.467 [DEBUG] [Thread-57880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:54:21.467 [DEBUG] [Thread-57880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:54:21.470 [DEBUG] [Thread-57880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:54:21.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:54:21.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:54:21.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:54:21.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:54:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:54:21.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:54:21.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:54:21.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:54:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:54:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.620538 -999.00  +23.50  22.10     19   -1.00 1 2 1 1 1   887    0 24.38 33.78 ----- 16.5 22.1 247.2 25.9 27.5 -17.9 27.4 -18.0 28.5 -18.5 28.7 -19.9
2025-11-17T16:54:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:54:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:54:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.620538
2025-11-17T16:54:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:54:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:54:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:54:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:54:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:54:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:53:45', tmtdew=29.14, humidity=13.93, cloud=0.0, wind=22.16, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:53:34.483', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:54:21.495 [DEBUG] [Thread-57880] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:54:21.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:54:21.591 [DEBUG] [Thread-57883] [transport.py] [_log()] starting thread (client mode): 0xd31606d0
2025-11-17T16:54:21.591 [DEBUG] [Thread-57883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:54:21.607 [DEBUG] [Thread-57883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:54:21.607 [INFO] [Thread-57883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] client lang: <none>
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] server lang: <none>
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] kex follows: False
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:54:21.619 [DEBUG] [Thread-57883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:54:21.620 [DEBUG] [Thread-57883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:54:21.620 [DEBUG] [Thread-57883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:54:21.620 [DEBUG] [Thread-57883] [transport.py] [_log()] Compression: none
2025-11-17T16:54:21.620 [DEBUG] [Thread-57883] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:54:21.672 [DEBUG] [Thread-57883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:54:21.672 [DEBUG] [Thread-57883] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:54:21.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:54:21.673 [DEBUG] [Thread-57883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:54:21.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:54:21.728 [DEBUG] [Thread-57883] [transport.py] [_log()] userauth is OK
2025-11-17T16:54:21.728 [DEBUG] [Thread-57883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:54:21.728 [DEBUG] [Thread-57883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:54:21.728 [DEBUG] [Thread-57883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:54:21.728 [DEBUG] [Thread-57883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:54:21.747 [INFO] [Thread-57883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:54:21.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:54:21.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:54:22.630 [DEBUG] [Thread-57883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:54:22.630 [DEBUG] [Thread-57883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:54:22.678 [DEBUG] [Thread-57883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:54:22.678 [DEBUG] [Thread-57883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:54:22.687 [DEBUG] [Thread-57883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:54:22.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:54:22.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:54:22.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:54:22.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:54:22.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:54:22.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:54:22.722 [DEBUG] [Thread-57883] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:54:23.286 [DEBUG] [Thread-57885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:54:31.392 [DEBUG] [Thread-57886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:54:46.427 [DEBUG] [Thread-57887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:54:52.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:54:52.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:54:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:54:53.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 54, 49), 29.27, 13.65, 0.0, 23.19, 23.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:54:53.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:54:49
2025-11-17T16:54:53.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:54:53.667 [DEBUG] [Thread-57888] [transport.py] [_log()] starting thread (client mode): 0xd0757370
2025-11-17T16:54:53.667 [DEBUG] [Thread-57888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:54:53.688 [DEBUG] [Thread-57888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:54:53.688 [INFO] [Thread-57888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] client lang: <none>
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] server lang: <none>
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] kex follows: False
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:54:53.691 [DEBUG] [Thread-57888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:54:53.692 [DEBUG] [Thread-57888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:54:53.692 [DEBUG] [Thread-57888] [transport.py] [_log()] Compression: none
2025-11-17T16:54:53.692 [DEBUG] [Thread-57888] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:54:53.708 [DEBUG] [Thread-57888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:54:53.708 [DEBUG] [Thread-57888] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:54:53.709 [DEBUG] [Thread-57888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:54:53.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:54:53.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:54:53.711 [DEBUG] [Thread-57888] [transport.py] [_log()] userauth is OK
2025-11-17T16:54:53.711 [DEBUG] [Thread-57888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:54:53.711 [DEBUG] [Thread-57888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:54:53.711 [DEBUG] [Thread-57888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:54:53.711 [DEBUG] [Thread-57888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:54:53.747 [INFO] [Thread-57888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:54:53.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:54:54.421 [DEBUG] [Thread-57888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:54:54.421 [DEBUG] [Thread-57888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:54:54.422 [DEBUG] [Thread-57888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:54:54.462 [DEBUG] [Thread-57888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:54:54.463 [DEBUG] [Thread-57888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:54:54.466 [DEBUG] [Thread-57888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:54:54.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:54:54.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:54:54.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:54:54.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:54:54.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:54:54.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:54:54.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:54:54.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:54:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:54:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.620885 -999.00  +23.60   9.48     19   -0.90 1 2 1 1 1   887    0 24.54 37.52 ----- 7.2 9.5 227.2 18.7 27.6 -18.0 27.5 -17.8 28.6 -18.6 28.9 -20.2
2025-11-17T16:54:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:54:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:54:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.620885
2025-11-17T16:54:54.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:54:54.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:54:54.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:54:54.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:54:54.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:54:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:54:49', tmtdew=29.27, humidity=13.65, cloud=0.0, wind=23.19, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:54:04.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:54:54.492 [DEBUG] [Thread-57888] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:54:54.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:54:54.588 [DEBUG] [Thread-57891] [transport.py] [_log()] starting thread (client mode): 0xd0756800
2025-11-17T16:54:54.589 [DEBUG] [Thread-57891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:54:54.603 [DEBUG] [Thread-57891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:54:54.603 [INFO] [Thread-57891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:54:54.611 [DEBUG] [Thread-57891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] client lang: <none>
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] server lang: <none>
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] kex follows: False
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] Compression: none
2025-11-17T16:54:54.612 [DEBUG] [Thread-57891] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:54:54.667 [DEBUG] [Thread-57891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:54:54.667 [DEBUG] [Thread-57891] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:54:54.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:54:54.668 [DEBUG] [Thread-57891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:54:54.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:54:54.724 [DEBUG] [Thread-57891] [transport.py] [_log()] userauth is OK
2025-11-17T16:54:54.724 [DEBUG] [Thread-57891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:54:54.724 [DEBUG] [Thread-57891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:54:54.724 [DEBUG] [Thread-57891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:54:54.724 [DEBUG] [Thread-57891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:54:54.743 [INFO] [Thread-57891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:54:54.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:54:54.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:54:55.594 [DEBUG] [Thread-57891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:54:55.594 [DEBUG] [Thread-57891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:54:55.642 [DEBUG] [Thread-57891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:54:55.642 [DEBUG] [Thread-57891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:54:55.651 [DEBUG] [Thread-57891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:54:55.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:54:55.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:54:55.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:54:55.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:54:55.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:54:55.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:54:55.686 [DEBUG] [Thread-57891] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:55:01.457 [DEBUG] [Thread-57893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:55:16.498 [DEBUG] [Thread-57894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:55:21.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:55:21.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:55:23.335 [DEBUG] [Thread-57895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:55:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:55:25.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:55:25.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:55:26.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 55, 21), 29.22, 13.69, 0.0, 19.57, 23.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:55:26.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:55:21
2025-11-17T16:55:26.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:55:26.626 [DEBUG] [Thread-57896] [transport.py] [_log()] starting thread (client mode): 0xd07bd030
2025-11-17T16:55:26.626 [DEBUG] [Thread-57896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:55:26.646 [DEBUG] [Thread-57896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:55:26.647 [INFO] [Thread-57896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:55:26.649 [DEBUG] [Thread-57896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:55:26.649 [DEBUG] [Thread-57896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:55:26.649 [DEBUG] [Thread-57896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:55:26.649 [DEBUG] [Thread-57896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] client lang: <none>
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] server lang: <none>
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] kex follows: False
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] Compression: none
2025-11-17T16:55:26.650 [DEBUG] [Thread-57896] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:55:26.666 [DEBUG] [Thread-57896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:55:26.667 [DEBUG] [Thread-57896] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:55:26.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:55:26.667 [DEBUG] [Thread-57896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:55:26.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:55:26.669 [DEBUG] [Thread-57896] [transport.py] [_log()] userauth is OK
2025-11-17T16:55:26.670 [DEBUG] [Thread-57896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:55:26.670 [DEBUG] [Thread-57896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:55:26.670 [DEBUG] [Thread-57896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:55:26.670 [DEBUG] [Thread-57896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:55:26.705 [INFO] [Thread-57896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:55:26.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:55:27.277 [DEBUG] [Thread-57896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:55:27.277 [DEBUG] [Thread-57896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:55:27.278 [DEBUG] [Thread-57896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:55:27.318 [DEBUG] [Thread-57896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:55:27.318 [DEBUG] [Thread-57896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:55:27.321 [DEBUG] [Thread-57896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:55:27.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:55:27.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:55:27.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:55:27.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:55:27.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:55:27.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:55:27.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:55:27.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:55:27.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:55:27.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.621232 -999.00  +23.90   6.26     19   -0.80 1 2 1 1 1   887    0 24.54 45.17 ----- 13.3 6.3 182.7 12.5 27.7 -17.6 27.6 -18.7 28.6 -19.9 29.1 -19.6
2025-11-17T16:55:27.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:55:27.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:55:27.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.621232
2025-11-17T16:55:27.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:55:27.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:55:27.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:55:27.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:55:27.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:55:27.346 [DEBUG] [Thread-57896] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:55:27.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:55:21', tmtdew=29.22, humidity=13.69, cloud=0.0, wind=19.57, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:54:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:55:27.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:55:27.442 [DEBUG] [Thread-57899] [transport.py] [_log()] starting thread (client mode): 0xd0784310
2025-11-17T16:55:27.442 [DEBUG] [Thread-57899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:55:27.457 [DEBUG] [Thread-57899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:55:27.458 [INFO] [Thread-57899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] client lang: <none>
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] server lang: <none>
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] kex follows: False
2025-11-17T16:55:27.465 [DEBUG] [Thread-57899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:55:27.466 [DEBUG] [Thread-57899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:55:27.466 [DEBUG] [Thread-57899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:55:27.466 [DEBUG] [Thread-57899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:55:27.466 [DEBUG] [Thread-57899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:55:27.466 [DEBUG] [Thread-57899] [transport.py] [_log()] Compression: none
2025-11-17T16:55:27.466 [DEBUG] [Thread-57899] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:55:27.523 [DEBUG] [Thread-57899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:55:27.524 [DEBUG] [Thread-57899] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:55:27.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:55:27.524 [DEBUG] [Thread-57899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:55:27.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:55:27.580 [DEBUG] [Thread-57899] [transport.py] [_log()] userauth is OK
2025-11-17T16:55:27.580 [DEBUG] [Thread-57899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:55:27.580 [DEBUG] [Thread-57899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:55:27.580 [DEBUG] [Thread-57899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:55:27.580 [DEBUG] [Thread-57899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:55:27.599 [INFO] [Thread-57899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:55:27.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:55:27.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:55:28.472 [DEBUG] [Thread-57899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:55:28.472 [DEBUG] [Thread-57899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:55:28.519 [DEBUG] [Thread-57899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:55:28.519 [DEBUG] [Thread-57899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:55:28.528 [DEBUG] [Thread-57899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:55:28.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:55:28.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:55:28.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:55:28.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:55:28.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:55:28.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:55:28.563 [DEBUG] [Thread-57899] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:55:31.532 [DEBUG] [Thread-57901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:55:46.578 [DEBUG] [Thread-57902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:55:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:55:58.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:55:58.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:55:59.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 55, 53), 29.04, 14.14, 0.0, 15.55, 23.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:55:59.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:55:53
2025-11-17T16:55:59.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:55:59.499 [DEBUG] [Thread-57903] [transport.py] [_log()] starting thread (client mode): 0xd0754ca0
2025-11-17T16:55:59.499 [DEBUG] [Thread-57903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:55:59.520 [DEBUG] [Thread-57903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:55:59.520 [INFO] [Thread-57903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:55:59.523 [DEBUG] [Thread-57903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:55:59.523 [DEBUG] [Thread-57903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:55:59.523 [DEBUG] [Thread-57903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:55:59.523 [DEBUG] [Thread-57903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:55:59.523 [DEBUG] [Thread-57903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:55:59.523 [DEBUG] [Thread-57903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] client lang: <none>
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] server lang: <none>
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] kex follows: False
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:55:59.524 [DEBUG] [Thread-57903] [transport.py] [_log()] Compression: none
2025-11-17T16:55:59.525 [DEBUG] [Thread-57903] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:55:59.545 [DEBUG] [Thread-57903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:55:59.546 [DEBUG] [Thread-57903] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:55:59.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:55:59.547 [DEBUG] [Thread-57903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:55:59.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:55:59.549 [DEBUG] [Thread-57903] [transport.py] [_log()] userauth is OK
2025-11-17T16:55:59.549 [DEBUG] [Thread-57903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:55:59.549 [DEBUG] [Thread-57903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:55:59.549 [DEBUG] [Thread-57903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:55:59.549 [DEBUG] [Thread-57903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:55:59.573 [INFO] [Thread-57903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:55:59.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:56:00.196 [DEBUG] [Thread-57903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:56:00.196 [DEBUG] [Thread-57903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:56:00.197 [DEBUG] [Thread-57903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:56:00.238 [DEBUG] [Thread-57903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:56:00.238 [DEBUG] [Thread-57903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:56:00.241 [DEBUG] [Thread-57903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:56:00.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:56:00.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:56:00.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:56:00.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:56:00.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:56:00.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:56:00.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:56:00.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:56:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:56:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.621927 -999.00  +23.50  13.92     19   -1.00 1 2 1 1 1   887    0 25.16 59.55 ----- 12.4 13.9 258.6 19.9 27.7 -18.7 27.7 -18.6 28.8 -19.7 29.1 -21.0
2025-11-17T16:56:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:56:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:56:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.621927
2025-11-17T16:56:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:56:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:56:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:56:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:56:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:56:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:55:53', tmtdew=29.04, humidity=14.14, cloud=0.0, wind=15.55, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:55:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:56:00.266 [DEBUG] [Thread-57903] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:56:00.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:56:00.367 [DEBUG] [Thread-57906] [transport.py] [_log()] starting thread (client mode): 0xd0723b80
2025-11-17T16:56:00.367 [DEBUG] [Thread-57906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:56:00.383 [DEBUG] [Thread-57906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:56:00.383 [INFO] [Thread-57906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:56:00.390 [DEBUG] [Thread-57906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:56:00.390 [DEBUG] [Thread-57906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] client lang: <none>
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] server lang: <none>
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] kex follows: False
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] Compression: none
2025-11-17T16:56:00.391 [DEBUG] [Thread-57906] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:56:00.450 [DEBUG] [Thread-57906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:56:00.451 [DEBUG] [Thread-57906] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:56:00.451 [DEBUG] [Thread-57906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:56:00.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:56:00.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:56:00.508 [DEBUG] [Thread-57906] [transport.py] [_log()] userauth is OK
2025-11-17T16:56:00.508 [DEBUG] [Thread-57906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:56:00.508 [DEBUG] [Thread-57906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:56:00.508 [DEBUG] [Thread-57906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:56:00.508 [DEBUG] [Thread-57906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:56:00.527 [INFO] [Thread-57906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:56:00.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:56:00.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:56:01.377 [DEBUG] [Thread-57906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:56:01.377 [DEBUG] [Thread-57906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:56:01.425 [DEBUG] [Thread-57906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:56:01.425 [DEBUG] [Thread-57906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:56:01.434 [DEBUG] [Thread-57906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:56:01.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:56:01.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:56:01.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:56:01.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:56:01.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:56:01.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:56:01.469 [DEBUG] [Thread-57906] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:56:01.606 [DEBUG] [Thread-57908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:56:16.657 [DEBUG] [Thread-57909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:56:21.188 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:56:21.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:56:23.363 [DEBUG] [Thread-57910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:56:31.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:56:31.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:56:31.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:56:31.689 [DEBUG] [Thread-57911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:56:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 56, 25), 29.08, 14.09, 0.0, 17.77, 23.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:56:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:56:25
2025-11-17T16:56:32.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:56:32.400 [DEBUG] [Thread-57912] [transport.py] [_log()] starting thread (client mode): 0xd3160910
2025-11-17T16:56:32.400 [DEBUG] [Thread-57912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:56:32.420 [DEBUG] [Thread-57912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:56:32.420 [INFO] [Thread-57912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:56:32.423 [DEBUG] [Thread-57912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:56:32.423 [DEBUG] [Thread-57912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] client lang: <none>
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] server lang: <none>
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] kex follows: False
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:56:32.424 [DEBUG] [Thread-57912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:56:32.425 [DEBUG] [Thread-57912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:56:32.425 [DEBUG] [Thread-57912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:56:32.425 [DEBUG] [Thread-57912] [transport.py] [_log()] Compression: none
2025-11-17T16:56:32.425 [DEBUG] [Thread-57912] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:56:32.445 [DEBUG] [Thread-57912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:56:32.445 [DEBUG] [Thread-57912] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:56:32.446 [DEBUG] [Thread-57912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:56:32.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:56:32.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:56:32.448 [DEBUG] [Thread-57912] [transport.py] [_log()] userauth is OK
2025-11-17T16:56:32.448 [DEBUG] [Thread-57912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:56:32.448 [DEBUG] [Thread-57912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:56:32.448 [DEBUG] [Thread-57912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:56:32.448 [DEBUG] [Thread-57912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:56:32.476 [INFO] [Thread-57912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:56:32.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:56:33.125 [DEBUG] [Thread-57912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:56:33.125 [DEBUG] [Thread-57912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:56:33.125 [DEBUG] [Thread-57912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:56:33.165 [DEBUG] [Thread-57912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:56:33.165 [DEBUG] [Thread-57912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:56:33.168 [DEBUG] [Thread-57912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:56:33.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:56:33.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:56:33.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:56:33.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:56:33.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:56:33.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:56:33.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:56:33.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:56:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:56:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.622274 -999.00  +23.50  12.73     19   -0.80 1 2 1 1 1   887    0 25.83 70.22 ----- 9.7 12.7 265.8 14.3 27.9 -18.9 27.9 -18.8 28.9 -20.2 29.3 -20.6
2025-11-17T16:56:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.622274
2025-11-17T16:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:56:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:56:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:56:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:56:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:56:25', tmtdew=29.08, humidity=14.09, cloud=0.0, wind=17.77, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:56:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:56:33.187 [DEBUG] [Thread-57912] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:56:33.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:56:33.282 [DEBUG] [Thread-57915] [transport.py] [_log()] starting thread (client mode): 0xd0785fc0
2025-11-17T16:56:33.283 [DEBUG] [Thread-57915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:56:33.298 [DEBUG] [Thread-57915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:56:33.298 [INFO] [Thread-57915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:56:33.305 [DEBUG] [Thread-57915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] client lang: <none>
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] server lang: <none>
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] kex follows: False
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:56:33.306 [DEBUG] [Thread-57915] [transport.py] [_log()] Compression: none
2025-11-17T16:56:33.307 [DEBUG] [Thread-57915] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:56:33.364 [DEBUG] [Thread-57915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:56:33.364 [DEBUG] [Thread-57915] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:56:33.365 [DEBUG] [Thread-57915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:56:33.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:56:33.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:56:33.420 [DEBUG] [Thread-57915] [transport.py] [_log()] userauth is OK
2025-11-17T16:56:33.420 [DEBUG] [Thread-57915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:56:33.420 [DEBUG] [Thread-57915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:56:33.420 [DEBUG] [Thread-57915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:56:33.420 [DEBUG] [Thread-57915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:56:33.440 [INFO] [Thread-57915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:56:33.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:56:33.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:56:34.329 [DEBUG] [Thread-57915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:56:34.329 [DEBUG] [Thread-57915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:56:34.377 [DEBUG] [Thread-57915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:56:34.377 [DEBUG] [Thread-57915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:56:34.386 [DEBUG] [Thread-57915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:56:34.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:56:34.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:56:34.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:56:34.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:56:34.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:56:34.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:56:34.425 [DEBUG] [Thread-57915] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:56:46.717 [DEBUG] [Thread-57917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:57:01.758 [DEBUG] [Thread-57918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:57:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:57:04.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:57:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:57:05.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 56, 57), 29.21, 13.7, 0.0, 25.18, 23.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:57:05.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:56:57
2025-11-17T16:57:05.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:57:05.420 [DEBUG] [Thread-57919] [transport.py] [_log()] starting thread (client mode): 0xd0720790
2025-11-17T16:57:05.420 [DEBUG] [Thread-57919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:57:05.439 [DEBUG] [Thread-57919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:57:05.439 [INFO] [Thread-57919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:57:05.442 [DEBUG] [Thread-57919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:57:05.442 [DEBUG] [Thread-57919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:57:05.442 [DEBUG] [Thread-57919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:57:05.442 [DEBUG] [Thread-57919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:57:05.442 [DEBUG] [Thread-57919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:57:05.442 [DEBUG] [Thread-57919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:57:05.442 [DEBUG] [Thread-57919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:57:05.442 [DEBUG] [Thread-57919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] client lang: <none>
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] server lang: <none>
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] kex follows: False
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] Compression: none
2025-11-17T16:57:05.443 [DEBUG] [Thread-57919] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:57:05.459 [DEBUG] [Thread-57919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:57:05.459 [DEBUG] [Thread-57919] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:57:05.459 [DEBUG] [Thread-57919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:57:05.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:57:05.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:57:05.460 [DEBUG] [Thread-57919] [transport.py] [_log()] userauth is OK
2025-11-17T16:57:05.460 [DEBUG] [Thread-57919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:57:05.460 [DEBUG] [Thread-57919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:57:05.460 [DEBUG] [Thread-57919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:57:05.460 [DEBUG] [Thread-57919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:57:05.476 [INFO] [Thread-57919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:57:05.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:57:06.141 [DEBUG] [Thread-57919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:57:06.142 [DEBUG] [Thread-57919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:57:06.142 [DEBUG] [Thread-57919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:57:06.184 [DEBUG] [Thread-57919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:57:06.184 [DEBUG] [Thread-57919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:57:06.186 [DEBUG] [Thread-57919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:57:06.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:57:06.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:57:06.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:57:06.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:57:06.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:57:06.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:57:06.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.622621 -999.00  +24.00  13.83     19   -0.80 1 2 1 1 1   887    0 25.79 72.48 ----- 16.7 13.8 264.0 18.1 28.1 -19.6 28.0 -20.2 29.0 -22.8 29.5 -20.8
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.622621
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:57:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:57:06.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:57:06.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:57:06.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:56:57', tmtdew=29.21, humidity=13.7, cloud=0.0, wind=25.18, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:56:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:57:06.205 [DEBUG] [Thread-57919] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:57:06.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:57:06.292 [DEBUG] [Thread-57922] [transport.py] [_log()] starting thread (client mode): 0xd31606d0
2025-11-17T16:57:06.292 [DEBUG] [Thread-57922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:57:06.307 [DEBUG] [Thread-57922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:57:06.307 [INFO] [Thread-57922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:57:06.315 [DEBUG] [Thread-57922] [transport.py] [_log()] client lang: <none>
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] server lang: <none>
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] kex follows: False
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] Compression: none
2025-11-17T16:57:06.316 [DEBUG] [Thread-57922] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:57:06.370 [DEBUG] [Thread-57922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:57:06.371 [DEBUG] [Thread-57922] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:57:06.371 [DEBUG] [Thread-57922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:57:06.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:57:06.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:57:06.427 [DEBUG] [Thread-57922] [transport.py] [_log()] userauth is OK
2025-11-17T16:57:06.427 [DEBUG] [Thread-57922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:57:06.427 [DEBUG] [Thread-57922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:57:06.427 [DEBUG] [Thread-57922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:57:06.428 [DEBUG] [Thread-57922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:57:06.442 [INFO] [Thread-57922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:57:06.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:57:06.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:57:07.327 [DEBUG] [Thread-57922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:57:07.327 [DEBUG] [Thread-57922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:57:07.375 [DEBUG] [Thread-57922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:57:07.375 [DEBUG] [Thread-57922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:57:07.383 [DEBUG] [Thread-57922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:57:07.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:57:07.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:57:07.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:57:07.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:57:07.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:57:07.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:57:07.414 [DEBUG] [Thread-57922] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:57:16.789 [DEBUG] [Thread-57924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:57:21.330 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:57:21.331 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:57:23.418 [DEBUG] [Thread-57925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:57:31.829 [DEBUG] [Thread-57926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:57:37.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:57:37.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:57:37.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:57:38.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 57, 29), 29.28, 13.64, 0.0, 23.56, 23.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:57:38.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:57:29
2025-11-17T16:57:38.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:57:38.369 [DEBUG] [Thread-57927] [transport.py] [_log()] starting thread (client mode): 0xd31614b0
2025-11-17T16:57:38.369 [DEBUG] [Thread-57927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:57:38.389 [DEBUG] [Thread-57927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:57:38.389 [INFO] [Thread-57927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:57:38.391 [DEBUG] [Thread-57927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:57:38.391 [DEBUG] [Thread-57927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] client lang: <none>
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] server lang: <none>
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] kex follows: False
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] Compression: none
2025-11-17T16:57:38.392 [DEBUG] [Thread-57927] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:57:38.408 [DEBUG] [Thread-57927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:57:38.408 [DEBUG] [Thread-57927] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:57:38.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:57:38.409 [DEBUG] [Thread-57927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:57:38.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:57:38.411 [DEBUG] [Thread-57927] [transport.py] [_log()] userauth is OK
2025-11-17T16:57:38.412 [DEBUG] [Thread-57927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:57:38.412 [DEBUG] [Thread-57927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:57:38.412 [DEBUG] [Thread-57927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:57:38.412 [DEBUG] [Thread-57927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:57:38.435 [INFO] [Thread-57927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:57:38.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:57:39.039 [DEBUG] [Thread-57927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:57:39.039 [DEBUG] [Thread-57927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:57:39.040 [DEBUG] [Thread-57927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:57:39.081 [DEBUG] [Thread-57927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:57:39.081 [DEBUG] [Thread-57927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:57:39.083 [DEBUG] [Thread-57927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:57:39.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:57:39.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:57:39.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:57:39.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:57:39.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:57:39.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:57:39.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:57:39.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:57:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:57:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.622968 -999.00  +24.00  23.26     19   -0.90 1 2 1 1 1   887    0 25.95 76.92 ----- 18.6 23.3 281.2 26.3 27.9 -20.6 28.0 -20.3 28.7 -24.8 29.4 -21.8
2025-11-17T16:57:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:57:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:57:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.622968
2025-11-17T16:57:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:57:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:57:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:57:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:57:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:57:39.105 [DEBUG] [Thread-57927] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:57:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:57:29', tmtdew=29.28, humidity=13.64, cloud=0.0, wind=23.56, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:57:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:57:39.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:57:39.202 [DEBUG] [Thread-57930] [transport.py] [_log()] starting thread (client mode): 0xd078cb20
2025-11-17T16:57:39.202 [DEBUG] [Thread-57930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:57:39.218 [DEBUG] [Thread-57930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:57:39.218 [INFO] [Thread-57930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:57:39.225 [DEBUG] [Thread-57930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] client lang: <none>
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] server lang: <none>
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] kex follows: False
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:57:39.226 [DEBUG] [Thread-57930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:57:39.227 [DEBUG] [Thread-57930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:57:39.227 [DEBUG] [Thread-57930] [transport.py] [_log()] Compression: none
2025-11-17T16:57:39.227 [DEBUG] [Thread-57930] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:57:39.284 [DEBUG] [Thread-57930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:57:39.284 [DEBUG] [Thread-57930] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:57:39.285 [DEBUG] [Thread-57930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:57:39.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:57:39.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:57:39.340 [DEBUG] [Thread-57930] [transport.py] [_log()] userauth is OK
2025-11-17T16:57:39.340 [DEBUG] [Thread-57930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:57:39.340 [DEBUG] [Thread-57930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:57:39.341 [DEBUG] [Thread-57930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:57:39.341 [DEBUG] [Thread-57930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:57:39.359 [INFO] [Thread-57930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:57:39.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:57:39.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:57:40.222 [DEBUG] [Thread-57930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:57:40.222 [DEBUG] [Thread-57930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:57:40.269 [DEBUG] [Thread-57930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:57:40.269 [DEBUG] [Thread-57930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:57:40.278 [DEBUG] [Thread-57930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:57:40.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:57:40.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:57:40.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:57:40.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:57:40.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:57:40.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:57:40.314 [DEBUG] [Thread-57930] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:57:46.854 [DEBUG] [Thread-57932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:58:01.885 [DEBUG] [Thread-57933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:58:10.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:58:10.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:58:10.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:58:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 58, 1), 30.01, 13.47, 0.0, 20.38, 24.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:58:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:58:01
2025-11-17T16:58:11.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:58:11.271 [DEBUG] [Thread-57934] [transport.py] [_log()] starting thread (client mode): 0xd0720d00
2025-11-17T16:58:11.272 [DEBUG] [Thread-57934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:58:11.293 [DEBUG] [Thread-57934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:58:11.293 [INFO] [Thread-57934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:58:11.296 [DEBUG] [Thread-57934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:58:11.296 [DEBUG] [Thread-57934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:58:11.296 [DEBUG] [Thread-57934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] client lang: <none>
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] server lang: <none>
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] kex follows: False
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] Compression: none
2025-11-17T16:58:11.297 [DEBUG] [Thread-57934] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:58:11.320 [DEBUG] [Thread-57934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:58:11.321 [DEBUG] [Thread-57934] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:58:11.321 [DEBUG] [Thread-57934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:58:11.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:58:11.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:58:11.323 [DEBUG] [Thread-57934] [transport.py] [_log()] userauth is OK
2025-11-17T16:58:11.323 [DEBUG] [Thread-57934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:58:11.323 [DEBUG] [Thread-57934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:58:11.323 [DEBUG] [Thread-57934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:58:11.323 [DEBUG] [Thread-57934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:58:11.337 [INFO] [Thread-57934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:58:11.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:58:11.990 [DEBUG] [Thread-57934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:58:11.990 [DEBUG] [Thread-57934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:58:11.990 [DEBUG] [Thread-57934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:58:12.031 [DEBUG] [Thread-57934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:58:12.031 [DEBUG] [Thread-57934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:58:12.034 [DEBUG] [Thread-57934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:58:12.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:58:12.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:58:12.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:58:12.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:58:12.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:58:12.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:58:12.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:58:12.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:58:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:58:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.623316 -999.00  +24.00  19.30     19   -0.90 1 2 1 1 1   887    0 25.92 85.09 ----- 20.1 19.3 272.4 23.3 28.0 -21.2 28.0 -21.0 28.7 -23.9 29.4 -22.7
2025-11-17T16:58:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:58:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:58:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.623316
2025-11-17T16:58:12.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:58:12.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:58:12.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:58:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:58:12.054 [DEBUG] [Thread-57934] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:58:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T16:58:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:58:01', tmtdew=30.01, humidity=13.47, cloud=0.0, wind=20.38, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:57:34.502', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:58:12.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:58:12.153 [DEBUG] [Thread-57937] [transport.py] [_log()] starting thread (client mode): 0xd0755b70
2025-11-17T16:58:12.153 [DEBUG] [Thread-57937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:58:12.169 [DEBUG] [Thread-57937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:58:12.169 [INFO] [Thread-57937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:58:12.176 [DEBUG] [Thread-57937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] client lang: <none>
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] server lang: <none>
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] kex follows: False
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:58:12.177 [DEBUG] [Thread-57937] [transport.py] [_log()] Compression: none
2025-11-17T16:58:12.178 [DEBUG] [Thread-57937] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:58:12.236 [DEBUG] [Thread-57937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:58:12.236 [DEBUG] [Thread-57937] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:58:12.237 [DEBUG] [Thread-57937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:58:12.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:58:12.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:58:12.292 [DEBUG] [Thread-57937] [transport.py] [_log()] userauth is OK
2025-11-17T16:58:12.292 [DEBUG] [Thread-57937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:58:12.292 [DEBUG] [Thread-57937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:58:12.292 [DEBUG] [Thread-57937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:58:12.292 [DEBUG] [Thread-57937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:58:12.312 [INFO] [Thread-57937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:58:12.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:58:12.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:58:13.171 [DEBUG] [Thread-57937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:58:13.172 [DEBUG] [Thread-57937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:58:13.228 [DEBUG] [Thread-57937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:58:13.228 [DEBUG] [Thread-57937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:58:13.241 [DEBUG] [Thread-57937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:58:13.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:58: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')
2025-11-17T16:58:13.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:58:13.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:58:13.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:58:13.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:58:13.284 [DEBUG] [Thread-57937] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:58:16.914 [DEBUG] [Thread-57939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:58:21.474 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:58:21.475 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:58:23.468 [DEBUG] [Thread-57940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:58:31.962 [DEBUG] [Thread-57941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:58:43.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:58:43.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:58:43.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:58:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 58, 33), 30.82, 12.61, 0.0, 34.47, 25.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:58:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:58:33
2025-11-17T16:58:44.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:58:44.211 [DEBUG] [Thread-57942] [transport.py] [_log()] starting thread (client mode): 0xd0757b80
2025-11-17T16:58:44.212 [DEBUG] [Thread-57942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:58:44.231 [DEBUG] [Thread-57942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:58:44.231 [INFO] [Thread-57942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:58:44.234 [DEBUG] [Thread-57942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:58:44.234 [DEBUG] [Thread-57942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:58:44.234 [DEBUG] [Thread-57942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:58:44.234 [DEBUG] [Thread-57942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] client lang: <none>
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] server lang: <none>
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] kex follows: False
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] Compression: none
2025-11-17T16:58:44.235 [DEBUG] [Thread-57942] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:58:44.252 [DEBUG] [Thread-57942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:58:44.253 [DEBUG] [Thread-57942] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:58:44.253 [DEBUG] [Thread-57942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:58:44.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:58:44.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:58:44.297 [DEBUG] [Thread-57942] [transport.py] [_log()] userauth is OK
2025-11-17T16:58:44.297 [DEBUG] [Thread-57942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:58:44.297 [DEBUG] [Thread-57942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:58:44.297 [DEBUG] [Thread-57942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:58:44.297 [DEBUG] [Thread-57942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:58:44.333 [INFO] [Thread-57942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:58:44.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:58:44.934 [DEBUG] [Thread-57942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:58:44.934 [DEBUG] [Thread-57942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:58:44.934 [DEBUG] [Thread-57942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:58:44.975 [DEBUG] [Thread-57942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:58:44.975 [DEBUG] [Thread-57942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:58:44.978 [DEBUG] [Thread-57942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:58:44.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:58:44.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:58:44.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:58:44.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:58:44.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:58:45.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:58:45.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:58:45.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:58:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:58:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.623663 -999.00  +24.10  23.70     19   -0.90 1 1 1 1 1   887    0 26.37 93.60 ----- 25.7 23.7 281.4 28.6 28.1 -21.3 28.1 -21.0 28.6 -26.6 29.4 -21.5
2025-11-17T16:58:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:58:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:58:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.623663
2025-11-17T16:58:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:58:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:58:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:58:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:58:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:58:45.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:58:33', tmtdew=30.82, humidity=12.61, cloud=0.0, wind=34.47, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:58:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:58:45.003 [DEBUG] [Thread-57942] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:58:45.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:58:45.101 [DEBUG] [Thread-57945] [transport.py] [_log()] starting thread (client mode): 0xd0786530
2025-11-17T16:58:45.101 [DEBUG] [Thread-57945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:58:45.116 [DEBUG] [Thread-57945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:58:45.116 [INFO] [Thread-57945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:58:45.123 [DEBUG] [Thread-57945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:58:45.123 [DEBUG] [Thread-57945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:58:45.123 [DEBUG] [Thread-57945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] client lang: <none>
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] server lang: <none>
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] kex follows: False
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] Compression: none
2025-11-17T16:58:45.124 [DEBUG] [Thread-57945] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:58:45.179 [DEBUG] [Thread-57945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:58:45.180 [DEBUG] [Thread-57945] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:58:45.180 [DEBUG] [Thread-57945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:58:45.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:58:45.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:58:45.236 [DEBUG] [Thread-57945] [transport.py] [_log()] userauth is OK
2025-11-17T16:58:45.236 [DEBUG] [Thread-57945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:58:45.236 [DEBUG] [Thread-57945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:58:45.236 [DEBUG] [Thread-57945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:58:45.236 [DEBUG] [Thread-57945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:58:45.256 [INFO] [Thread-57945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:58:45.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:58:45.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:58:46.120 [DEBUG] [Thread-57945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:58:46.120 [DEBUG] [Thread-57945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:58:46.168 [DEBUG] [Thread-57945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:58:46.169 [DEBUG] [Thread-57945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:58:46.178 [DEBUG] [Thread-57945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:58:46.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:58:46.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:58:46.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:58:46.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:58:46.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:58:46.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:58:46.212 [DEBUG] [Thread-57945] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:58:46.993 [DEBUG] [Thread-57947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:59:02.031 [DEBUG] [Thread-57948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:59:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:59:16.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:59:16.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:59:16.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 59, 5), 30.26, 13.26, 0.0, 32.45, 24.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:59:16.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:59:05
2025-11-17T16:59:17.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:59:17.060 [DEBUG] [Thread-57949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:59:17.177 [DEBUG] [Thread-57950] [transport.py] [_log()] starting thread (client mode): 0xd070e530
2025-11-17T16:59:17.177 [DEBUG] [Thread-57950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:59:17.196 [DEBUG] [Thread-57950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:59:17.196 [INFO] [Thread-57950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:59:17.199 [DEBUG] [Thread-57950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:59:17.199 [DEBUG] [Thread-57950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] client lang: <none>
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] server lang: <none>
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] kex follows: False
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] Compression: none
2025-11-17T16:59:17.200 [DEBUG] [Thread-57950] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:59:17.217 [DEBUG] [Thread-57950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:59:17.217 [DEBUG] [Thread-57950] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:59:17.217 [DEBUG] [Thread-57950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:59:17.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:59:17.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:59:17.219 [DEBUG] [Thread-57950] [transport.py] [_log()] userauth is OK
2025-11-17T16:59:17.219 [DEBUG] [Thread-57950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:59:17.220 [DEBUG] [Thread-57950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:59:17.220 [DEBUG] [Thread-57950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:59:17.220 [DEBUG] [Thread-57950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:59:17.255 [INFO] [Thread-57950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:59:17.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:59:17.867 [DEBUG] [Thread-57950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:59:17.868 [DEBUG] [Thread-57950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:59:17.868 [DEBUG] [Thread-57950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:59:17.908 [DEBUG] [Thread-57950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:59:17.909 [DEBUG] [Thread-57950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:59:17.912 [DEBUG] [Thread-57950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:59:17.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:59:17.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:59:17.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:59:17.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:59:17.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:59:17.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:59:17.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:59:17.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:59:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:59:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.624010 -999.00  +24.10  22.08     19   -0.90 1 1 1 1 1   887    0 26.96 106.14 ----- 30.0 22.1 276.6 28.3 28.0 -21.7 28.0 -22.3 28.4 -25.5 29.3 -22.2
2025-11-17T16:59:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:59:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:59:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.624010
2025-11-17T16:59:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:59:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:59:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:59:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:59:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:59:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:59:05', tmtdew=30.26, humidity=13.26, cloud=0.0, wind=32.45, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:58:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:59:17.938 [DEBUG] [Thread-57950] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:59:18.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:59:18.040 [DEBUG] [Thread-57953] [transport.py] [_log()] starting thread (client mode): 0xd070f0a0
2025-11-17T16:59:18.040 [DEBUG] [Thread-57953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:59:18.060 [DEBUG] [Thread-57953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:59:18.061 [INFO] [Thread-57953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:59:18.068 [DEBUG] [Thread-57953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:59:18.068 [DEBUG] [Thread-57953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:59:18.068 [DEBUG] [Thread-57953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] client lang: <none>
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] server lang: <none>
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] kex follows: False
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:59:18.069 [DEBUG] [Thread-57953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:59:18.070 [DEBUG] [Thread-57953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:59:18.070 [DEBUG] [Thread-57953] [transport.py] [_log()] Compression: none
2025-11-17T16:59:18.070 [DEBUG] [Thread-57953] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:59:18.128 [DEBUG] [Thread-57953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:59:18.128 [DEBUG] [Thread-57953] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:59:18.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:59:18.129 [DEBUG] [Thread-57953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:59:18.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:59:18.184 [DEBUG] [Thread-57953] [transport.py] [_log()] userauth is OK
2025-11-17T16:59:18.184 [DEBUG] [Thread-57953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:59:18.184 [DEBUG] [Thread-57953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:59:18.184 [DEBUG] [Thread-57953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:59:18.185 [DEBUG] [Thread-57953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:59:18.204 [INFO] [Thread-57953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:59:18.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:59:18.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:59:19.064 [DEBUG] [Thread-57953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:59:19.064 [DEBUG] [Thread-57953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:59:19.112 [DEBUG] [Thread-57953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:59:19.112 [DEBUG] [Thread-57953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:59:19.121 [DEBUG] [Thread-57953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:59:19.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:59:19.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:59:19.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:59:19.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:59:19.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:59:19.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:59:19.155 [DEBUG] [Thread-57953] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:59:21.614 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:59:21.615 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:59:23.512 [DEBUG] [Thread-57955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:59:32.088 [DEBUG] [Thread-57956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:59:47.137 [DEBUG] [Thread-57957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T16:59:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T16:59:49.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T16:59:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T16:59:49.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 16, 59, 37), 30.37, 12.74, 0.0, 35.99, 24.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T16:59:49.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 16:59:37
2025-11-17T16:59:49.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T16:59:50.084 [DEBUG] [Thread-57958] [transport.py] [_log()] starting thread (client mode): 0xd07578e0
2025-11-17T16:59:50.084 [DEBUG] [Thread-57958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:59:50.103 [DEBUG] [Thread-57958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T16:59:50.104 [INFO] [Thread-57958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T16:59:50.106 [DEBUG] [Thread-57958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] client lang: <none>
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] server lang: <none>
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] kex follows: False
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] Compression: none
2025-11-17T16:59:50.107 [DEBUG] [Thread-57958] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:59:50.124 [DEBUG] [Thread-57958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:59:50.125 [DEBUG] [Thread-57958] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:59:50.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T16:59:50.126 [DEBUG] [Thread-57958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T16:59:50.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:59:50.127 [DEBUG] [Thread-57958] [transport.py] [_log()] userauth is OK
2025-11-17T16:59:50.127 [DEBUG] [Thread-57958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:59:50.127 [DEBUG] [Thread-57958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:59:50.127 [DEBUG] [Thread-57958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T16:59:50.128 [DEBUG] [Thread-57958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:59:50.145 [INFO] [Thread-57958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:59:50.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:59:50.695 [DEBUG] [Thread-57958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:59:50.695 [DEBUG] [Thread-57958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:59:50.695 [DEBUG] [Thread-57958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T16:59:50.736 [DEBUG] [Thread-57958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:59:50.736 [DEBUG] [Thread-57958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:59:50.739 [DEBUG] [Thread-57958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:59:50.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:59:50.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T16:59:50.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T16:59:50.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T16:59:50.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:59:50.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T16:59:50.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:59:50.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:59:50.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T16:59:50.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.624705 -999.00  +23.60  34.35     19   -1.10 1 1 2 1 1   887    0 26.98 108.68 ----- 36.5 34.4 280.0 45.1 27.7 -25.4 27.7 -23.7 28.3 -24.4 28.9 -23.5
2025-11-17T16:59:50.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T16:59:50.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T16:59:50.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.624705
2025-11-17T16:59:50.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T16:59:50.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T16:59:50.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T16:59:50.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T16:59:50.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T16:59:50.759 [DEBUG] [Thread-57958] [transport.py] [_log()] EOF in transport thread
2025-11-17T16:59:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T16:59:37', tmtdew=30.37, humidity=12.74, cloud=0.0, wind=35.99, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T14:59:34.512', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T16:59:50.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T16:59:50.857 [DEBUG] [Thread-57961] [transport.py] [_log()] starting thread (client mode): 0xd0775420
2025-11-17T16:59:50.857 [DEBUG] [Thread-57961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T16:59:50.873 [DEBUG] [Thread-57961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T16:59:50.873 [INFO] [Thread-57961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T16:59:50.880 [DEBUG] [Thread-57961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T16:59:50.880 [DEBUG] [Thread-57961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T16:59:50.880 [DEBUG] [Thread-57961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] client lang: <none>
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] server lang: <none>
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] kex follows: False
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] Compression: none
2025-11-17T16:59:50.881 [DEBUG] [Thread-57961] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T16:59:50.939 [DEBUG] [Thread-57961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T16:59:50.940 [DEBUG] [Thread-57961] [transport.py] [_log()] Switch to new keys ...
2025-11-17T16:59:50.940 [DEBUG] [Thread-57961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T16:59:50.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T16:59:50.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T16:59:50.996 [DEBUG] [Thread-57961] [transport.py] [_log()] userauth is OK
2025-11-17T16:59:50.996 [DEBUG] [Thread-57961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T16:59:50.996 [DEBUG] [Thread-57961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T16:59:50.996 [DEBUG] [Thread-57961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T16:59:50.996 [DEBUG] [Thread-57961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T16:59:51.015 [INFO] [Thread-57961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T16:59:51.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T16:59:51.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T16:59:51.865 [DEBUG] [Thread-57961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T16:59:51.865 [DEBUG] [Thread-57961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T16:59:51.913 [DEBUG] [Thread-57961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T16:59:51.913 [DEBUG] [Thread-57961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T16:59:51.922 [DEBUG] [Thread-57961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T16:59:51.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T16:59:51.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T16:59:51.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T16:59:51.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T16:59:51.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T16:59:51.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T16:59:51.956 [DEBUG] [Thread-57961] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:00:02.166 [DEBUG] [Thread-57963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:00:17.219 [DEBUG] [Thread-57964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:00:21.755 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:00:21.756 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:00:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:00:21.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:00:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:00:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 0, 9), 30.15, 12.92, 0.0, 33.91, 24.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:00:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:00:09
2025-11-17T17:00:22.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:00:22.959 [DEBUG] [Thread-57965] [transport.py] [_log()] starting thread (client mode): 0xd07564a0
2025-11-17T17:00:22.959 [DEBUG] [Thread-57965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:00:22.979 [DEBUG] [Thread-57965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:00:22.979 [INFO] [Thread-57965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:00:22.982 [DEBUG] [Thread-57965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:00:22.982 [DEBUG] [Thread-57965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:00:22.982 [DEBUG] [Thread-57965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:00:22.982 [DEBUG] [Thread-57965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] client lang: <none>
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] server lang: <none>
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] kex follows: False
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] Compression: none
2025-11-17T17:00:22.983 [DEBUG] [Thread-57965] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:00:23.001 [DEBUG] [Thread-57965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:00:23.001 [DEBUG] [Thread-57965] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:00:23.001 [DEBUG] [Thread-57965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:00:23.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:00:23.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:00:23.044 [DEBUG] [Thread-57965] [transport.py] [_log()] userauth is OK
2025-11-17T17:00:23.044 [DEBUG] [Thread-57965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:00:23.044 [DEBUG] [Thread-57965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:00:23.044 [DEBUG] [Thread-57965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:00:23.044 [DEBUG] [Thread-57965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:00:23.071 [INFO] [Thread-57965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:00:23.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:00:23.567 [DEBUG] [Thread-57967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:00:23.722 [DEBUG] [Thread-57965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:00:23.722 [DEBUG] [Thread-57965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:00:23.722 [DEBUG] [Thread-57965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:00:23.763 [DEBUG] [Thread-57965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:00:23.764 [DEBUG] [Thread-57965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:00:23.767 [DEBUG] [Thread-57965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:00:23.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:00:23.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:00:23.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:00:23.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:00:23.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:00:23.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:00:23.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:00:23.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:00:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:00:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.625051 -999.00  +23.20  26.53     19   -1.10 1 1 1 1 1   887    0 27.07 113.01 ----- 26.0 26.5 278.0 32.8 27.5 -24.1 27.5 -23.4 27.9 -24.9 28.8 -24.0
2025-11-17T17:00:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:00:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:00:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.625051
2025-11-17T17:00:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:00:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:00:23.793 [DEBUG] [Thread-57965] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:00:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:00:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:00:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:00:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:00:09', tmtdew=30.15, humidity=12.92, cloud=0.0, wind=33.91, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:00:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:00:23.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:00:23.893 [DEBUG] [Thread-57969] [transport.py] [_log()] starting thread (client mode): 0xd070f280
2025-11-17T17:00:23.894 [DEBUG] [Thread-57969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:00:23.909 [DEBUG] [Thread-57969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:00:23.909 [INFO] [Thread-57969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:00:23.917 [DEBUG] [Thread-57969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:00:23.917 [DEBUG] [Thread-57969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:00:23.917 [DEBUG] [Thread-57969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] client lang: <none>
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] server lang: <none>
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] kex follows: False
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:00:23.918 [DEBUG] [Thread-57969] [transport.py] [_log()] Compression: none
2025-11-17T17:00:23.919 [DEBUG] [Thread-57969] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:00:23.976 [DEBUG] [Thread-57969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:00:23.977 [DEBUG] [Thread-57969] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:00:23.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:00:23.978 [DEBUG] [Thread-57969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:00:23.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:00:24.032 [DEBUG] [Thread-57969] [transport.py] [_log()] userauth is OK
2025-11-17T17:00:24.032 [DEBUG] [Thread-57969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:00:24.032 [DEBUG] [Thread-57969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:00:24.032 [DEBUG] [Thread-57969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:00:24.032 [DEBUG] [Thread-57969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:00:24.055 [INFO] [Thread-57969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:00:24.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:00:24.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:00:24.946 [DEBUG] [Thread-57969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:00:24.946 [DEBUG] [Thread-57969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:00:24.993 [DEBUG] [Thread-57969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:00:24.993 [DEBUG] [Thread-57969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:00:25.002 [DEBUG] [Thread-57969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:00:25.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:00:25.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:00:25.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:00:25.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:00:25.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:00:25.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:00:25.036 [DEBUG] [Thread-57969] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:00:32.252 [DEBUG] [Thread-57971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:00:47.306 [DEBUG] [Thread-57972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:00:55.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:00:55.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:00:55.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:00:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 0, 41), 29.48, 13.47, 0.0, 28.32, 24.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:00:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:00:41
2025-11-17T17:00:55.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:00:56.002 [DEBUG] [Thread-57973] [transport.py] [_log()] starting thread (client mode): 0xd0786530
2025-11-17T17:00:56.002 [DEBUG] [Thread-57973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:00:56.023 [DEBUG] [Thread-57973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:00:56.024 [INFO] [Thread-57973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] client lang: <none>
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] server lang: <none>
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] kex follows: False
2025-11-17T17:00:56.027 [DEBUG] [Thread-57973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:00:56.028 [DEBUG] [Thread-57973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:00:56.028 [DEBUG] [Thread-57973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:00:56.028 [DEBUG] [Thread-57973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:00:56.028 [DEBUG] [Thread-57973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:00:56.028 [DEBUG] [Thread-57973] [transport.py] [_log()] Compression: none
2025-11-17T17:00:56.028 [DEBUG] [Thread-57973] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:00:56.046 [DEBUG] [Thread-57973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:00:56.047 [DEBUG] [Thread-57973] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:00:56.047 [DEBUG] [Thread-57973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:00:56.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:00:56.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:00:56.049 [DEBUG] [Thread-57973] [transport.py] [_log()] userauth is OK
2025-11-17T17:00:56.050 [DEBUG] [Thread-57973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:00:56.050 [DEBUG] [Thread-57973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:00:56.050 [DEBUG] [Thread-57973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:00:56.050 [DEBUG] [Thread-57973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:00:56.074 [INFO] [Thread-57973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:00:56.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:00:56.694 [DEBUG] [Thread-57973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:00:56.695 [DEBUG] [Thread-57973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:00:56.695 [DEBUG] [Thread-57973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:00:56.736 [DEBUG] [Thread-57973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:00:56.736 [DEBUG] [Thread-57973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:00:56.738 [DEBUG] [Thread-57973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:00:56.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:00:56.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:00:56.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:00:56.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:00:56.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:00:56.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:00:56.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.625399 -999.00  +23.10  31.02     19   -1.10 1 1 2 1 1   887    0 27.56 112.33 ----- 31.9 31.0 272.8 37.5 27.4 -23.9 27.5 -23.3 27.9 -22.9 28.6 -23.4
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.625399
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:00:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:00:41', tmtdew=29.48, humidity=13.47, cloud=0.0, wind=28.32, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:00:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:00:56.756 [DEBUG] [Thread-57973] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:00:56.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:00:56.840 [DEBUG] [Thread-57976] [transport.py] [_log()] starting thread (client mode): 0xd070e8c0
2025-11-17T17:00:56.841 [DEBUG] [Thread-57976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:00:56.855 [DEBUG] [Thread-57976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:00:56.855 [INFO] [Thread-57976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:00:56.862 [DEBUG] [Thread-57976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] client lang: <none>
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] server lang: <none>
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] kex follows: False
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] Compression: none
2025-11-17T17:00:56.863 [DEBUG] [Thread-57976] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:00:56.923 [DEBUG] [Thread-57976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:00:56.923 [DEBUG] [Thread-57976] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:00:56.923 [DEBUG] [Thread-57976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:00:56.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:00:56.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:00:56.980 [DEBUG] [Thread-57976] [transport.py] [_log()] userauth is OK
2025-11-17T17:00:56.980 [DEBUG] [Thread-57976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:00:56.980 [DEBUG] [Thread-57976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:00:56.980 [DEBUG] [Thread-57976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:00:56.980 [DEBUG] [Thread-57976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:00:56.994 [INFO] [Thread-57976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:00:56.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:00:56.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:00:57.856 [DEBUG] [Thread-57976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:00:57.856 [DEBUG] [Thread-57976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:00:57.904 [DEBUG] [Thread-57976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:00:57.904 [DEBUG] [Thread-57976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:00:57.912 [DEBUG] [Thread-57976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:00:57.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:00:57.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:00:57.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:00:57.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:00:57.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:00:57.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:00:57.945 [DEBUG] [Thread-57976] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:01:02.334 [DEBUG] [Thread-57978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:01:17.380 [DEBUG] [Thread-57979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:01:21.898 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:01:21.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:01:23.618 [DEBUG] [Thread-57980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:01:27.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:01:27.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:01:27.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:01:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 1, 13), 29.44, 13.5, 0.0, 30.12, 24.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:01:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:01:13
2025-11-17T17:01:28.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:01:28.907 [DEBUG] [Thread-57981] [transport.py] [_log()] starting thread (client mode): 0xd070f430
2025-11-17T17:01:28.907 [DEBUG] [Thread-57981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:01:28.928 [DEBUG] [Thread-57981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:01:28.929 [INFO] [Thread-57981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:01:28.931 [DEBUG] [Thread-57981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] client lang: <none>
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] server lang: <none>
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] kex follows: False
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] Compression: none
2025-11-17T17:01:28.932 [DEBUG] [Thread-57981] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:01:28.949 [DEBUG] [Thread-57981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:01:28.950 [DEBUG] [Thread-57981] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:01:28.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:01:28.950 [DEBUG] [Thread-57981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:01:28.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:01:28.952 [DEBUG] [Thread-57981] [transport.py] [_log()] userauth is OK
2025-11-17T17:01:28.952 [DEBUG] [Thread-57981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:01:28.953 [DEBUG] [Thread-57981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:01:28.953 [DEBUG] [Thread-57981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:01:28.953 [DEBUG] [Thread-57981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:01:28.977 [INFO] [Thread-57981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:01:28.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:01:29.586 [DEBUG] [Thread-57981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:01:29.586 [DEBUG] [Thread-57981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:01:29.586 [DEBUG] [Thread-57981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:01:29.627 [DEBUG] [Thread-57981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:01:29.627 [DEBUG] [Thread-57981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:01:29.630 [DEBUG] [Thread-57981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:01:29.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:01:29.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:01:29.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:01:29.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:01:29.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:01:29.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:01:29.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:01:29.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:01:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:01:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.625746 -999.00  +23.00  32.14     19   -1.20 1 1 2 1 1   887    0 28.01 128.03 ----- 34.6 32.1 280.4 42.8 27.2 -23.5 27.3 -23.1 27.6 -23.8 28.3 -24.2
2025-11-17T17:01:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:01:29.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:01:29.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.625746
2025-11-17T17:01:29.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:01:29.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:01:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:01:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:01:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:01:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:01:13', tmtdew=29.44, humidity=13.5, cloud=0.0, wind=30.12, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:01:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:01:29.655 [DEBUG] [Thread-57981] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:01:29.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:01:29.750 [DEBUG] [Thread-57984] [transport.py] [_log()] starting thread (client mode): 0xd0723730
2025-11-17T17:01:29.750 [DEBUG] [Thread-57984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:01:29.765 [DEBUG] [Thread-57984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:01:29.765 [INFO] [Thread-57984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:01:29.772 [DEBUG] [Thread-57984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:01:29.772 [DEBUG] [Thread-57984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] client lang: <none>
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] server lang: <none>
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] kex follows: False
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:01:29.773 [DEBUG] [Thread-57984] [transport.py] [_log()] Compression: none
2025-11-17T17:01:29.774 [DEBUG] [Thread-57984] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:01:29.832 [DEBUG] [Thread-57984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:01:29.832 [DEBUG] [Thread-57984] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:01:29.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:01:29.833 [DEBUG] [Thread-57984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:01:29.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:01:29.889 [DEBUG] [Thread-57984] [transport.py] [_log()] userauth is OK
2025-11-17T17:01:29.889 [DEBUG] [Thread-57984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:01:29.889 [DEBUG] [Thread-57984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:01:29.889 [DEBUG] [Thread-57984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:01:29.889 [DEBUG] [Thread-57984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:01:29.909 [INFO] [Thread-57984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:01:29.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:01:29.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:01:30.727 [DEBUG] [Thread-57984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:01:30.728 [DEBUG] [Thread-57984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:01:30.775 [DEBUG] [Thread-57984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:01:30.775 [DEBUG] [Thread-57984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:01:30.784 [DEBUG] [Thread-57984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:01:30.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:01:30.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:01:30.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:01:30.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:01:30.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:01:30.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:01:30.819 [DEBUG] [Thread-57984] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:01:32.411 [DEBUG] [Thread-57986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:01:47.453 [DEBUG] [Thread-57987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:02:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:02:00.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:02:00.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:02:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 1, 45), 29.51, 13.59, 0.0, 40.05, 23.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:02:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:01:45
2025-11-17T17:02:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:02:01.759 [DEBUG] [Thread-57988] [transport.py] [_log()] starting thread (client mode): 0xd07877c0
2025-11-17T17:02:01.759 [DEBUG] [Thread-57988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:02:01.770 [DEBUG] [Thread-57988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:02:01.770 [INFO] [Thread-57988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:02:01.771 [DEBUG] [Thread-57988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] client lang: <none>
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] server lang: <none>
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] kex follows: False
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] Compression: none
2025-11-17T17:02:01.772 [DEBUG] [Thread-57988] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:02:01.790 [DEBUG] [Thread-57988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:02:01.790 [DEBUG] [Thread-57988] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:02:01.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:02:01.790 [DEBUG] [Thread-57988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:02:01.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:02:01.791 [DEBUG] [Thread-57988] [transport.py] [_log()] userauth is OK
2025-11-17T17:02:01.791 [DEBUG] [Thread-57988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:02:01.791 [DEBUG] [Thread-57988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:02:01.791 [DEBUG] [Thread-57988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:02:01.791 [DEBUG] [Thread-57988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:02:01.804 [INFO] [Thread-57988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:02:01.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:02:02.436 [DEBUG] [Thread-57988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:02:02.436 [DEBUG] [Thread-57988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:02:02.437 [DEBUG] [Thread-57988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:02:02.477 [DEBUG] [Thread-57988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:02:02.478 [DEBUG] [Thread-57988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:02:02.481 [DEBUG] [Thread-57988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:02:02.481 [DEBUG] [Thread-57990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:02:02.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:02:02.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:02:02.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:02:02.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:02:02.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:02:02.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:02:02.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:02:02.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:02:02.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:02:02.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.626093 -999.00  +23.30  34.10     19   -1.00 1 2 2 1 1   887    0 27.60 128.12 ----- 31.4 34.1 285.8 37.4 27.2 -22.7 27.2 -22.9 27.6 -21.7 28.3 -23.0
2025-11-17T17:02:02.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:02:02.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:02:02.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.626093
2025-11-17T17:02:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:02:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:02:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:02:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:02:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:02:02.500 [DEBUG] [Thread-57988] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:02:02.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:01:45', tmtdew=29.51, humidity=13.59, cloud=0.0, wind=40.05, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:01:34.435', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:02:02.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:02:02.612 [DEBUG] [Thread-57992] [transport.py] [_log()] starting thread (client mode): 0xd0754910
2025-11-17T17:02:02.612 [DEBUG] [Thread-57992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:02:02.627 [DEBUG] [Thread-57992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:02:02.627 [INFO] [Thread-57992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:02:02.634 [DEBUG] [Thread-57992] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] client lang: <none>
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] server lang: <none>
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] kex follows: False
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] Compression: none
2025-11-17T17:02:02.635 [DEBUG] [Thread-57992] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:02:02.696 [DEBUG] [Thread-57992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:02:02.696 [DEBUG] [Thread-57992] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:02:02.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:02:02.697 [DEBUG] [Thread-57992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:02:02.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:02:02.752 [DEBUG] [Thread-57992] [transport.py] [_log()] userauth is OK
2025-11-17T17:02:02.752 [DEBUG] [Thread-57992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:02:02.752 [DEBUG] [Thread-57992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:02:02.753 [DEBUG] [Thread-57992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:02:02.753 [DEBUG] [Thread-57992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:02:02.771 [INFO] [Thread-57992] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:02:02.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:02:02.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:02:03.632 [DEBUG] [Thread-57992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:02:03.632 [DEBUG] [Thread-57992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:02:03.679 [DEBUG] [Thread-57992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:02:03.679 [DEBUG] [Thread-57992] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:02:03.688 [DEBUG] [Thread-57992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:02:03.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:02:03.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:02:03.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:02:03.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:02:03.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:02:03.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:02:03.721 [DEBUG] [Thread-57992] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:02:17.515 [DEBUG] [Thread-57994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:02:22.040 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:02:22.041 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:02:23.682 [DEBUG] [Thread-57995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:02:32.555 [DEBUG] [Thread-57996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:02:33.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:02:33.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:02:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:02:34.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 2, 17), 29.39, 13.69, 0.0, 37.94, 23.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:02:34.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:02:17
2025-11-17T17:02:34.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:02:34.675 [DEBUG] [Thread-57997] [transport.py] [_log()] starting thread (client mode): 0xd0757790
2025-11-17T17:02:34.675 [DEBUG] [Thread-57997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:02:34.697 [DEBUG] [Thread-57997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:02:34.698 [INFO] [Thread-57997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] client lang: <none>
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] server lang: <none>
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] kex follows: False
2025-11-17T17:02:34.701 [DEBUG] [Thread-57997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:02:34.702 [DEBUG] [Thread-57997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:02:34.702 [DEBUG] [Thread-57997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:02:34.702 [DEBUG] [Thread-57997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:02:34.702 [DEBUG] [Thread-57997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:02:34.702 [DEBUG] [Thread-57997] [transport.py] [_log()] Compression: none
2025-11-17T17:02:34.702 [DEBUG] [Thread-57997] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:02:34.718 [DEBUG] [Thread-57997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:02:34.719 [DEBUG] [Thread-57997] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:02:34.719 [DEBUG] [Thread-57997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:02:34.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:02:34.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:02:34.721 [DEBUG] [Thread-57997] [transport.py] [_log()] userauth is OK
2025-11-17T17:02:34.721 [DEBUG] [Thread-57997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:02:34.721 [DEBUG] [Thread-57997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:02:34.722 [DEBUG] [Thread-57997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:02:34.722 [DEBUG] [Thread-57997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:02:34.745 [INFO] [Thread-57997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:02:34.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:02:35.375 [DEBUG] [Thread-57997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:02:35.376 [DEBUG] [Thread-57997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:02:35.376 [DEBUG] [Thread-57997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:02:35.416 [DEBUG] [Thread-57997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:02:35.416 [DEBUG] [Thread-57997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:02:35.418 [DEBUG] [Thread-57997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:02:35.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:02:35.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:02:35.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:02:35.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:02:35.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:02:35.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:02:35.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.626441 -999.00  +23.20  33.49     19   -1.10 1 1 2 1 1   887    0 27.59 126.40 ----- 28.3 33.5 282.4 39.1 27.1 -24.6 27.2 -23.7 27.6 -23.5 28.2 -23.2
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.626441
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:02:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:02:17', tmtdew=29.39, humidity=13.69, cloud=0.0, wind=37.94, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:02:04.502', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:02:35.436 [DEBUG] [Thread-57997] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:02:35.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:02:35.527 [DEBUG] [Thread-58000] [transport.py] [_log()] starting thread (client mode): 0xd0756140
2025-11-17T17:02:35.527 [DEBUG] [Thread-58000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:02:35.541 [DEBUG] [Thread-58000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:02:35.542 [INFO] [Thread-58000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:02:35.549 [DEBUG] [Thread-58000] [transport.py] [_log()] client lang: <none>
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] server lang: <none>
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] kex follows: False
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] Compression: none
2025-11-17T17:02:35.550 [DEBUG] [Thread-58000] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:02:35.607 [DEBUG] [Thread-58000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:02:35.608 [DEBUG] [Thread-58000] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:02:35.608 [DEBUG] [Thread-58000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:02:35.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:02:35.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:02:35.664 [DEBUG] [Thread-58000] [transport.py] [_log()] userauth is OK
2025-11-17T17:02:35.664 [DEBUG] [Thread-58000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:02:35.665 [DEBUG] [Thread-58000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:02:35.665 [DEBUG] [Thread-58000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:02:35.665 [DEBUG] [Thread-58000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:02:35.683 [INFO] [Thread-58000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:02:35.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:02:35.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:02:36.554 [DEBUG] [Thread-58000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:02:36.554 [DEBUG] [Thread-58000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:02:36.601 [DEBUG] [Thread-58000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:02:36.601 [DEBUG] [Thread-58000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:02:36.610 [DEBUG] [Thread-58000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:02:36.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:02:36.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:02:36.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:02:36.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:02:36.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:02:36.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:02:36.642 [DEBUG] [Thread-58000] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:02:47.587 [DEBUG] [Thread-58002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:03:02.623 [DEBUG] [Thread-58003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:03:06.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:03:06.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:03:06.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:03:07.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 2, 49), 28.82, 14.17, 0.0, 31.57, 23.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:03:07.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:02:49
2025-11-17T17:03:07.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:03:07.581 [DEBUG] [Thread-58004] [transport.py] [_log()] starting thread (client mode): 0xd07e8220
2025-11-17T17:03:07.581 [DEBUG] [Thread-58004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:03:07.595 [DEBUG] [Thread-58004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:03:07.595 [INFO] [Thread-58004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:03:07.597 [DEBUG] [Thread-58004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:03:07.597 [DEBUG] [Thread-58004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:03:07.597 [DEBUG] [Thread-58004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:03:07.597 [DEBUG] [Thread-58004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:03:07.597 [DEBUG] [Thread-58004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:03:07.597 [DEBUG] [Thread-58004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:03:07.597 [DEBUG] [Thread-58004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:03:07.597 [DEBUG] [Thread-58004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] client lang: <none>
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] server lang: <none>
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] kex follows: False
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] Compression: none
2025-11-17T17:03:07.598 [DEBUG] [Thread-58004] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:03:07.611 [DEBUG] [Thread-58004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:03:07.611 [DEBUG] [Thread-58004] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:03:07.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:03:07.612 [DEBUG] [Thread-58004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:03:07.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:03:07.614 [DEBUG] [Thread-58004] [transport.py] [_log()] userauth is OK
2025-11-17T17:03:07.614 [DEBUG] [Thread-58004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:03:07.614 [DEBUG] [Thread-58004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:03:07.614 [DEBUG] [Thread-58004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:03:07.614 [DEBUG] [Thread-58004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:03:07.628 [INFO] [Thread-58004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:03:07.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:03:08.268 [DEBUG] [Thread-58004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:03:08.269 [DEBUG] [Thread-58004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:03:08.269 [DEBUG] [Thread-58004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:03:08.309 [DEBUG] [Thread-58004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:03:08.309 [DEBUG] [Thread-58004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:03:08.312 [DEBUG] [Thread-58004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:03:08.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:03:08.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:03:08.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:03:08.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:03:08.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:03:08.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:03:08.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:03:08.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:03:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:03:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.626788 -999.00  +22.70  23.74     20   -1.20 1 1 1 1 1   887    0 27.48 113.66 ----- 30.9 23.7 280.2 38.3 27.0 -22.5 27.1 -23.3 27.3 -27.2 28.1 -22.1
2025-11-17T17:03:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:03:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:03:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.626788
2025-11-17T17:03:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:03:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:03:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:03:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:03:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:03:08.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:02:49', tmtdew=28.82, humidity=14.17, cloud=0.0, wind=31.57, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:02:34.483', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:03:08.339 [DEBUG] [Thread-58004] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:03:08.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:03:08.437 [DEBUG] [Thread-58007] [transport.py] [_log()] starting thread (client mode): 0xd07773a0
2025-11-17T17:03:08.437 [DEBUG] [Thread-58007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:03:08.455 [DEBUG] [Thread-58007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:03:08.455 [INFO] [Thread-58007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:03:08.462 [DEBUG] [Thread-58007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] client lang: <none>
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] server lang: <none>
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] kex follows: False
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:03:08.463 [DEBUG] [Thread-58007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:03:08.464 [DEBUG] [Thread-58007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:03:08.464 [DEBUG] [Thread-58007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:03:08.464 [DEBUG] [Thread-58007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:03:08.464 [DEBUG] [Thread-58007] [transport.py] [_log()] Compression: none
2025-11-17T17:03:08.464 [DEBUG] [Thread-58007] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:03:08.535 [DEBUG] [Thread-58007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:03:08.536 [DEBUG] [Thread-58007] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:03:08.536 [DEBUG] [Thread-58007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:03:08.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:03:08.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:03:08.598 [DEBUG] [Thread-58007] [transport.py] [_log()] userauth is OK
2025-11-17T17:03:08.598 [DEBUG] [Thread-58007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:03:08.598 [DEBUG] [Thread-58007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:03:08.598 [DEBUG] [Thread-58007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:03:08.598 [DEBUG] [Thread-58007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:03:08.624 [INFO] [Thread-58007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:03:08.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:03:08.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:03:09.480 [DEBUG] [Thread-58007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:03:09.480 [DEBUG] [Thread-58007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:03:09.531 [DEBUG] [Thread-58007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:03:09.531 [DEBUG] [Thread-58007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:03:09.543 [DEBUG] [Thread-58007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:03:09.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:03:09.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:03:09.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:03:09.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:03:09.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:03:09.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:03:09.587 [DEBUG] [Thread-58007] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:03:17.653 [DEBUG] [Thread-58009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:03:22.181 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:03:22.182 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:03:23.731 [DEBUG] [Thread-58010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:03:32.697 [DEBUG] [Thread-58011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:03:39.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:03:39.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:03:39.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:03:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 3, 23), 28.98, 14.02, 0.0, 30.84, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:03:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:03:23
2025-11-17T17:03:40.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:03:40.494 [DEBUG] [Thread-58012] [transport.py] [_log()] starting thread (client mode): 0xd07213c0
2025-11-17T17:03:40.494 [DEBUG] [Thread-58012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:03:40.514 [DEBUG] [Thread-58012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:03:40.514 [INFO] [Thread-58012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:03:40.517 [DEBUG] [Thread-58012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:03:40.517 [DEBUG] [Thread-58012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:03:40.517 [DEBUG] [Thread-58012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] client lang: <none>
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] server lang: <none>
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] kex follows: False
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] Compression: none
2025-11-17T17:03:40.518 [DEBUG] [Thread-58012] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:03:40.537 [DEBUG] [Thread-58012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:03:40.537 [DEBUG] [Thread-58012] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:03:40.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:03:40.538 [DEBUG] [Thread-58012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:03:40.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:03:40.540 [DEBUG] [Thread-58012] [transport.py] [_log()] userauth is OK
2025-11-17T17:03:40.541 [DEBUG] [Thread-58012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:03:40.541 [DEBUG] [Thread-58012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:03:40.541 [DEBUG] [Thread-58012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:03:40.541 [DEBUG] [Thread-58012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:03:40.554 [INFO] [Thread-58012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:03:40.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:03:41.209 [DEBUG] [Thread-58012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:03:41.209 [DEBUG] [Thread-58012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:03:41.210 [DEBUG] [Thread-58012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:03:41.250 [DEBUG] [Thread-58012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:03:41.251 [DEBUG] [Thread-58012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:03:41.254 [DEBUG] [Thread-58012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:03:41.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:03:41.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:03:41.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:03:41.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:03:41.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:03:41.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:03:41.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:03:41.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:03:41.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:03:41.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.627135 -999.00  +22.60  24.16     20   -1.20 1 1 1 1 1   887    0 27.39 109.96 ----- 27.9 24.2 290.3 33.6 26.9 -22.3 27.1 -23.5 27.3 -25.0 28.0 -23.3
2025-11-17T17:03:41.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:03:41.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:03:41.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.627135
2025-11-17T17:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:03:41.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:03:23', tmtdew=28.98, humidity=14.02, cloud=0.0, wind=30.84, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:03:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:03:41.279 [DEBUG] [Thread-58012] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:03:41.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:03:41.375 [DEBUG] [Thread-58015] [transport.py] [_log()] starting thread (client mode): 0xd07763e0
2025-11-17T17:03:41.375 [DEBUG] [Thread-58015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:03:41.394 [DEBUG] [Thread-58015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:03:41.394 [INFO] [Thread-58015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:03:41.402 [DEBUG] [Thread-58015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:03:41.402 [DEBUG] [Thread-58015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:03:41.402 [DEBUG] [Thread-58015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:03:41.402 [DEBUG] [Thread-58015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] client lang: <none>
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] server lang: <none>
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] kex follows: False
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:03:41.403 [DEBUG] [Thread-58015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:03:41.404 [DEBUG] [Thread-58015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:03:41.404 [DEBUG] [Thread-58015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:03:41.404 [DEBUG] [Thread-58015] [transport.py] [_log()] Compression: none
2025-11-17T17:03:41.404 [DEBUG] [Thread-58015] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:03:41.461 [DEBUG] [Thread-58015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:03:41.462 [DEBUG] [Thread-58015] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:03:41.462 [DEBUG] [Thread-58015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:03:41.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:03:41.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:03:41.523 [DEBUG] [Thread-58015] [transport.py] [_log()] userauth is OK
2025-11-17T17:03:41.523 [DEBUG] [Thread-58015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:03:41.523 [DEBUG] [Thread-58015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:03:41.523 [DEBUG] [Thread-58015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:03:41.523 [DEBUG] [Thread-58015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:03:41.542 [INFO] [Thread-58015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:03:41.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:03:41.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:03:42.401 [DEBUG] [Thread-58015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:03:42.401 [DEBUG] [Thread-58015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:03:42.448 [DEBUG] [Thread-58015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:03:42.448 [DEBUG] [Thread-58015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:03:42.457 [DEBUG] [Thread-58015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:03:42.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:03:42.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:03:42.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:03:42.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:03:42.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:03:42.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:03:42.492 [DEBUG] [Thread-58015] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:03:47.723 [DEBUG] [Thread-58017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:04:02.761 [DEBUG] [Thread-58018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:04:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:04:12.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:04:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:04:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 3, 55), 29.09, 13.97, 0.0, 22.13, 23.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:04:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:03:55
2025-11-17T17:04:13.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:04:13.488 [DEBUG] [Thread-58019] [transport.py] [_log()] starting thread (client mode): 0xd07eada0
2025-11-17T17:04:13.489 [DEBUG] [Thread-58019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:04:13.509 [DEBUG] [Thread-58019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:04:13.509 [INFO] [Thread-58019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:04:13.510 [DEBUG] [Thread-58019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:04:13.510 [DEBUG] [Thread-58019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:04:13.510 [DEBUG] [Thread-58019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:04:13.510 [DEBUG] [Thread-58019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] client lang: <none>
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] server lang: <none>
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] kex follows: False
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] Compression: none
2025-11-17T17:04:13.511 [DEBUG] [Thread-58019] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:04:13.519 [DEBUG] [Thread-58019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:04:13.519 [DEBUG] [Thread-58019] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:04:13.520 [DEBUG] [Thread-58019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:04:13.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:04:13.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:04:13.520 [DEBUG] [Thread-58019] [transport.py] [_log()] userauth is OK
2025-11-17T17:04:13.520 [DEBUG] [Thread-58019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:04:13.520 [DEBUG] [Thread-58019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:04:13.520 [DEBUG] [Thread-58019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:04:13.520 [DEBUG] [Thread-58019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:04:13.538 [INFO] [Thread-58019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:04:13.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:04:14.200 [DEBUG] [Thread-58019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:04:14.200 [DEBUG] [Thread-58019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:04:14.200 [DEBUG] [Thread-58019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:04:14.241 [DEBUG] [Thread-58019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:04:14.241 [DEBUG] [Thread-58019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:04:14.243 [DEBUG] [Thread-58019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:04:14.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:04:14.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:04:14.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:04:14.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:04:14.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:04:14.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:04:14.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:04:14.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.627482 -999.00  +22.50  26.06     20   -1.20 1 2 1 1 1   887    0 27.45 106.01 ----- 23.8 26.1 276.6 31.6 26.8 -23.8 26.9 -23.6 27.4 -22.4 27.9 -24.1
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.627482
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:04:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:03:55', tmtdew=29.09, humidity=13.97, cloud=0.0, wind=22.13, temperature=23.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:03:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:04:14.262 [DEBUG] [Thread-58019] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:04:14.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:04:14.348 [DEBUG] [Thread-58022] [transport.py] [_log()] starting thread (client mode): 0xd3134580
2025-11-17T17:04:14.348 [DEBUG] [Thread-58022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:04:14.363 [DEBUG] [Thread-58022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:04:14.363 [INFO] [Thread-58022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] client lang: <none>
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] server lang: <none>
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] kex follows: False
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] Compression: none
2025-11-17T17:04:14.370 [DEBUG] [Thread-58022] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:04:14.426 [DEBUG] [Thread-58022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:04:14.426 [DEBUG] [Thread-58022] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:04:14.427 [DEBUG] [Thread-58022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:04:14.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:04:14.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:04:14.484 [DEBUG] [Thread-58022] [transport.py] [_log()] userauth is OK
2025-11-17T17:04:14.484 [DEBUG] [Thread-58022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:04:14.484 [DEBUG] [Thread-58022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:04:14.484 [DEBUG] [Thread-58022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:04:14.484 [DEBUG] [Thread-58022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:04:14.497 [INFO] [Thread-58022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:04:14.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:04:14.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:04:15.414 [DEBUG] [Thread-58022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:04:15.414 [DEBUG] [Thread-58022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:04:15.462 [DEBUG] [Thread-58022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:04:15.462 [DEBUG] [Thread-58022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:04:15.471 [DEBUG] [Thread-58022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:04:15.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:04:15.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:04:15.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:04:15.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:04:15.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:04:15.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:04:15.505 [DEBUG] [Thread-58022] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:04:17.787 [DEBUG] [Thread-58024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:04:22.324 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:04:22.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:04:23.781 [DEBUG] [Thread-58025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:04:32.834 [DEBUG] [Thread-58026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:04:45.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:04:45.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:04:45.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
2025-11-17T17:04:46.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 4, 27), 29.06, 13.99, 0.0, 26.59, 23.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:04:46.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:04:27
2025-11-17T17:04:46.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:04:46.460 [DEBUG] [Thread-58027] [transport.py] [_log()] starting thread (client mode): 0xd0733df0
2025-11-17T17:04:46.460 [DEBUG] [Thread-58027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:04:46.480 [DEBUG] [Thread-58027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:04:46.480 [INFO] [Thread-58027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:04:46.483 [DEBUG] [Thread-58027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] client lang: <none>
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] server lang: <none>
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] kex follows: False
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] Compression: none
2025-11-17T17:04:46.484 [DEBUG] [Thread-58027] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:04:46.503 [DEBUG] [Thread-58027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:04:46.503 [DEBUG] [Thread-58027] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:04:46.504 [DEBUG] [Thread-58027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:04:46.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:04:46.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:04:46.505 [DEBUG] [Thread-58027] [transport.py] [_log()] userauth is OK
2025-11-17T17:04:46.505 [DEBUG] [Thread-58027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:04:46.505 [DEBUG] [Thread-58027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:04:46.506 [DEBUG] [Thread-58027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:04:46.506 [DEBUG] [Thread-58027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:04:46.529 [INFO] [Thread-58027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:04:46.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:04:47.185 [DEBUG] [Thread-58027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:04:47.185 [DEBUG] [Thread-58027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:04:47.185 [DEBUG] [Thread-58027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:04:47.225 [DEBUG] [Thread-58027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:04:47.225 [DEBUG] [Thread-58027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:04:47.229 [DEBUG] [Thread-58027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:04:47.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:04:47.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:04:47.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:04:47.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:04:47.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:04:47.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:04:47.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:04:47.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:04:47.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:04:47.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.628177 -999.00  +23.10  22.01     20   -1.00 1 2 1 1 1   887    0 26.96 99.48 ----- 21.3 22.0 271.2 26.1 26.9 -22.6 26.9 -23.0 27.3 -22.7 27.9 -22.7
2025-11-17T17:04:47.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:04:47.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:04:47.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.628177
2025-11-17T17:04:47.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:04:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:04:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:04:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:04:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:04:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:04:27', tmtdew=29.06, humidity=13.99, cloud=0.0, wind=26.59, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:04:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:04:47.255 [DEBUG] [Thread-58027] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:04:47.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:04:47.351 [DEBUG] [Thread-58030] [transport.py] [_log()] starting thread (client mode): 0xd07312a0
2025-11-17T17:04:47.351 [DEBUG] [Thread-58030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:04:47.366 [DEBUG] [Thread-58030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:04:47.366 [INFO] [Thread-58030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] client lang: <none>
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] server lang: <none>
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] kex follows: False
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:04:47.374 [DEBUG] [Thread-58030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:04:47.375 [DEBUG] [Thread-58030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:04:47.375 [DEBUG] [Thread-58030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:04:47.375 [DEBUG] [Thread-58030] [transport.py] [_log()] Compression: none
2025-11-17T17:04:47.375 [DEBUG] [Thread-58030] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:04:47.432 [DEBUG] [Thread-58030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:04:47.432 [DEBUG] [Thread-58030] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:04:47.433 [DEBUG] [Thread-58030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:04:47.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:04:47.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:04:47.488 [DEBUG] [Thread-58030] [transport.py] [_log()] userauth is OK
2025-11-17T17:04:47.488 [DEBUG] [Thread-58030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:04:47.489 [DEBUG] [Thread-58030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:04:47.489 [DEBUG] [Thread-58030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:04:47.489 [DEBUG] [Thread-58030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:04:47.508 [INFO] [Thread-58030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:04:47.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:04:47.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:04:47.864 [DEBUG] [Thread-58032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:04:48.392 [DEBUG] [Thread-58030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:04:48.392 [DEBUG] [Thread-58030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:04:48.440 [DEBUG] [Thread-58030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:04:48.440 [DEBUG] [Thread-58030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:04:48.448 [DEBUG] [Thread-58030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:04:48.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:04:48.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:04:48.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:04:48.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:04:48.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:04:48.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:04:48.479 [DEBUG] [Thread-58030] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:05:02.892 [DEBUG] [Thread-58033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:05:17.923 [DEBUG] [Thread-58034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:05:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:05:18.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:05:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:05:19.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 4, 59), 29.32, 13.5, 0.0, 24.67, 23.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:05:19.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:04:59
2025-11-17T17:05:19.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:05:19.423 [DEBUG] [Thread-58035] [transport.py] [_log()] starting thread (client mode): 0xd0731210
2025-11-17T17:05:19.423 [DEBUG] [Thread-58035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:05:19.443 [DEBUG] [Thread-58035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:05:19.443 [INFO] [Thread-58035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:05:19.447 [DEBUG] [Thread-58035] [transport.py] [_log()] client lang: <none>
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] server lang: <none>
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] kex follows: False
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] Compression: none
2025-11-17T17:05:19.448 [DEBUG] [Thread-58035] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:05:19.468 [DEBUG] [Thread-58035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:05:19.469 [DEBUG] [Thread-58035] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:05:19.469 [DEBUG] [Thread-58035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:05:19.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:05:19.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:05:19.471 [DEBUG] [Thread-58035] [transport.py] [_log()] userauth is OK
2025-11-17T17:05:19.472 [DEBUG] [Thread-58035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:05:19.472 [DEBUG] [Thread-58035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:05:19.472 [DEBUG] [Thread-58035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:05:19.472 [DEBUG] [Thread-58035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:05:19.509 [INFO] [Thread-58035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:05:19.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:05:20.165 [DEBUG] [Thread-58035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:05:20.166 [DEBUG] [Thread-58035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:05:20.166 [DEBUG] [Thread-58035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:05:20.206 [DEBUG] [Thread-58035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:05:20.206 [DEBUG] [Thread-58035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:05:20.210 [DEBUG] [Thread-58035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:05:20.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:05:20.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:05:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:05:20.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:05:20.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:05:20.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:05:20.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:05:20.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:05:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:05:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.628524 -999.00  +23.10  21.80     19   -1.10 1 1 1 1 1   887    0 27.14 90.77 ----- 16.4 21.8 286.4 35.3 26.8 -22.7 26.9 -23.1 27.3 -26.9 27.8 -22.8
2025-11-17T17:05:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:05:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:05:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.628524
2025-11-17T17:05:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:05:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:05:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:05:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:05:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:05:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:04:59', tmtdew=29.32, humidity=13.5, cloud=0.0, wind=24.67, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:05:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:05:20.235 [DEBUG] [Thread-58035] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:05:20.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:05:20.332 [DEBUG] [Thread-58038] [transport.py] [_log()] starting thread (client mode): 0xd0733040
2025-11-17T17:05:20.332 [DEBUG] [Thread-58038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:05:20.347 [DEBUG] [Thread-58038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:05:20.347 [INFO] [Thread-58038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:05:20.355 [DEBUG] [Thread-58038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:05:20.355 [DEBUG] [Thread-58038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:05:20.355 [DEBUG] [Thread-58038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:05:20.355 [DEBUG] [Thread-58038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:05:20.355 [DEBUG] [Thread-58038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:05:20.355 [DEBUG] [Thread-58038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:05:20.355 [DEBUG] [Thread-58038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:05:20.356 [DEBUG] [Thread-58038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:05:20.356 [DEBUG] [Thread-58038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:05:20.356 [DEBUG] [Thread-58038] [transport.py] [_log()] client lang: <none>
2025-11-17T17:05:20.356 [DEBUG] [Thread-58038] [transport.py] [_log()] server lang: <none>
2025-11-17T17:05:20.356 [DEBUG] [Thread-58038] [transport.py] [_log()] kex follows: False
2025-11-17T17:05:20.356 [DEBUG] [Thread-58038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:05:20.356 [DEBUG] [Thread-58038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:05:20.356 [DEBUG] [Thread-58038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:05:20.357 [DEBUG] [Thread-58038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:05:20.357 [DEBUG] [Thread-58038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:05:20.357 [DEBUG] [Thread-58038] [transport.py] [_log()] Compression: none
2025-11-17T17:05:20.357 [DEBUG] [Thread-58038] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:05:20.414 [DEBUG] [Thread-58038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:05:20.415 [DEBUG] [Thread-58038] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:05:20.415 [DEBUG] [Thread-58038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:05:20.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:05:20.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:05:20.478 [DEBUG] [Thread-58038] [transport.py] [_log()] userauth is OK
2025-11-17T17:05:20.478 [DEBUG] [Thread-58038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:05:20.478 [DEBUG] [Thread-58038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:05:20.478 [DEBUG] [Thread-58038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:05:20.479 [DEBUG] [Thread-58038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:05:20.501 [INFO] [Thread-58038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:05:20.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:05:20.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:05:21.367 [DEBUG] [Thread-58038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:05:21.368 [DEBUG] [Thread-58038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:05:21.415 [DEBUG] [Thread-58038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:05:21.416 [DEBUG] [Thread-58038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:05:21.424 [DEBUG] [Thread-58038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:05:21.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:05:21.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:05:21.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:05:21.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:05:21.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:05:21.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:05:21.460 [DEBUG] [Thread-58038] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:05:22.466 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:05:22.467 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:05:23.842 [DEBUG] [Thread-58040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:05:32.953 [DEBUG] [Thread-58041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:05:47.993 [DEBUG] [Thread-58042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:05:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:05:51.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:05:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:05:52.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 5, 31), 28.98, 13.79, 0.0, 26.71, 23.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:05:52.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:05:31
2025-11-17T17:05:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:05:52.399 [DEBUG] [Thread-58043] [transport.py] [_log()] starting thread (client mode): 0xd0730070
2025-11-17T17:05:52.399 [DEBUG] [Thread-58043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:05:52.419 [DEBUG] [Thread-58043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:05:52.419 [INFO] [Thread-58043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:05:52.422 [DEBUG] [Thread-58043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] client lang: <none>
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] server lang: <none>
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] kex follows: False
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:05:52.423 [DEBUG] [Thread-58043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:05:52.424 [DEBUG] [Thread-58043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:05:52.424 [DEBUG] [Thread-58043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:05:52.424 [DEBUG] [Thread-58043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:05:52.424 [DEBUG] [Thread-58043] [transport.py] [_log()] Compression: none
2025-11-17T17:05:52.424 [DEBUG] [Thread-58043] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:05:52.441 [DEBUG] [Thread-58043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:05:52.441 [DEBUG] [Thread-58043] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:05:52.442 [DEBUG] [Thread-58043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:05:52.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:05:52.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:05:52.444 [DEBUG] [Thread-58043] [transport.py] [_log()] userauth is OK
2025-11-17T17:05:52.444 [DEBUG] [Thread-58043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:05:52.444 [DEBUG] [Thread-58043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:05:52.444 [DEBUG] [Thread-58043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:05:52.444 [DEBUG] [Thread-58043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:05:52.467 [INFO] [Thread-58043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:05:52.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:05:53.089 [DEBUG] [Thread-58043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:05:53.089 [DEBUG] [Thread-58043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:05:53.089 [DEBUG] [Thread-58043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:05:53.130 [DEBUG] [Thread-58043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:05:53.130 [DEBUG] [Thread-58043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:05:53.133 [DEBUG] [Thread-58043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:05:53.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:05:53.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:05:53.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:05:53.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:05:53.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:05:53.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:05:53.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:05:53.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:05:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:05:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.628871 -999.00  +23.00  18.86     19   -1.10 1 1 1 1 1   887    0 26.32 79.39 ----- 18.3 18.9 284.0 28.4 26.7 -22.7 26.8 -23.5 27.1 -24.3 27.7 -23.4
2025-11-17T17:05:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:05:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:05:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.628871
2025-11-17T17:05:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:05:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:05:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:05:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:05:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:05:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:05:31', tmtdew=28.98, humidity=13.79, cloud=0.0, wind=26.71, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:05:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:05:53.156 [DEBUG] [Thread-58043] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:05:53.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:05:53.253 [DEBUG] [Thread-58046] [transport.py] [_log()] starting thread (client mode): 0xd0731f30
2025-11-17T17:05:53.254 [DEBUG] [Thread-58046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:05:53.268 [DEBUG] [Thread-58046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:05:53.269 [INFO] [Thread-58046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:05:53.276 [DEBUG] [Thread-58046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:05:53.276 [DEBUG] [Thread-58046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:05:53.276 [DEBUG] [Thread-58046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:05:53.276 [DEBUG] [Thread-58046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] client lang: <none>
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] server lang: <none>
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] kex follows: False
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] Compression: none
2025-11-17T17:05:53.277 [DEBUG] [Thread-58046] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:05:53.332 [DEBUG] [Thread-58046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:05:53.332 [DEBUG] [Thread-58046] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:05:53.333 [DEBUG] [Thread-58046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:05:53.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:05:53.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:05:53.388 [DEBUG] [Thread-58046] [transport.py] [_log()] userauth is OK
2025-11-17T17:05:53.388 [DEBUG] [Thread-58046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:05:53.388 [DEBUG] [Thread-58046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:05:53.388 [DEBUG] [Thread-58046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:05:53.388 [DEBUG] [Thread-58046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:05:53.402 [INFO] [Thread-58046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:05:53.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:05:53.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:05:54.263 [DEBUG] [Thread-58046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:05:54.263 [DEBUG] [Thread-58046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:05:54.311 [DEBUG] [Thread-58046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:05:54.311 [DEBUG] [Thread-58046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:05:54.320 [DEBUG] [Thread-58046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:05:54.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:05:54.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:05:54.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:05:54.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:05:54.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:05:54.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:05:54.354 [DEBUG] [Thread-58046] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:06:03.025 [DEBUG] [Thread-58048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:06:18.072 [DEBUG] [Thread-58049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:06:22.618 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:06:22.619 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:06:23.901 [DEBUG] [Thread-58050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:06:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:06:24.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:06: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
2025-11-17T17:06:25.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 6, 4), 28.9, 13.87, 0.0, 26.61, 23.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:06:25.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:06:04
2025-11-17T17:06:25.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:06:25.313 [DEBUG] [Thread-58051] [transport.py] [_log()] starting thread (client mode): 0xd07eac50
2025-11-17T17:06:25.313 [DEBUG] [Thread-58051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:06:25.334 [DEBUG] [Thread-58051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:06:25.334 [INFO] [Thread-58051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:06:25.337 [DEBUG] [Thread-58051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:06:25.337 [DEBUG] [Thread-58051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] client lang: <none>
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] server lang: <none>
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] kex follows: False
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] Compression: none
2025-11-17T17:06:25.338 [DEBUG] [Thread-58051] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:06:25.356 [DEBUG] [Thread-58051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:06:25.357 [DEBUG] [Thread-58051] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:06:25.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:06:25.358 [DEBUG] [Thread-58051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:06:25.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:06:25.359 [DEBUG] [Thread-58051] [transport.py] [_log()] userauth is OK
2025-11-17T17:06:25.359 [DEBUG] [Thread-58051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:06:25.360 [DEBUG] [Thread-58051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:06:25.360 [DEBUG] [Thread-58051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:06:25.360 [DEBUG] [Thread-58051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:06:25.377 [INFO] [Thread-58051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:06:25.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:06:25.985 [DEBUG] [Thread-58051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:06:25.985 [DEBUG] [Thread-58051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:06:25.985 [DEBUG] [Thread-58051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:06:26.025 [DEBUG] [Thread-58051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:06:26.025 [DEBUG] [Thread-58051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:06:26.028 [DEBUG] [Thread-58051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:06:26.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:06:26.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:06:26.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:06:26.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:06:26.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:06:26.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:06:26.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:06:26.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:06:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:06:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.629218 -999.00  +23.10  25.37     19   -1.10 1 1 1 1 1   887    0 26.66 78.22 ----- 23.3 25.4 267.6 27.7 26.6 -23.6 26.8 -23.5 26.9 -25.2 27.6 -24.6
2025-11-17T17:06:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:06:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:06:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.629218
2025-11-17T17:06:26.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:06:26.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:06:26.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:06:26.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:06:26.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:06:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:06:04', tmtdew=28.9, humidity=13.87, cloud=0.0, wind=26.61, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:06:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:06:26.056 [DEBUG] [Thread-58051] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:06:26.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:06:26.152 [DEBUG] [Thread-58054] [transport.py] [_log()] starting thread (client mode): 0xd07e96c0
2025-11-17T17:06:26.152 [DEBUG] [Thread-58054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:06:26.167 [DEBUG] [Thread-58054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:06:26.168 [INFO] [Thread-58054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:06:26.175 [DEBUG] [Thread-58054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:06:26.175 [DEBUG] [Thread-58054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] client lang: <none>
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] server lang: <none>
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] kex follows: False
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:06:26.176 [DEBUG] [Thread-58054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:06:26.177 [DEBUG] [Thread-58054] [transport.py] [_log()] Compression: none
2025-11-17T17:06:26.177 [DEBUG] [Thread-58054] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:06:26.233 [DEBUG] [Thread-58054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:06:26.233 [DEBUG] [Thread-58054] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:06:26.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:06:26.234 [DEBUG] [Thread-58054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:06:26.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:06:26.293 [DEBUG] [Thread-58054] [transport.py] [_log()] userauth is OK
2025-11-17T17:06:26.293 [DEBUG] [Thread-58054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:06:26.293 [DEBUG] [Thread-58054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:06:26.293 [DEBUG] [Thread-58054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:06:26.293 [DEBUG] [Thread-58054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:06:26.317 [INFO] [Thread-58054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:06:26.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:06:26.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:06:27.194 [DEBUG] [Thread-58054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:06:27.194 [DEBUG] [Thread-58054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:06:27.242 [DEBUG] [Thread-58054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:06:27.242 [DEBUG] [Thread-58054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:06:27.251 [DEBUG] [Thread-58054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:06:27.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:06:27.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:06:27.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:06:27.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:06:27.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:06:27.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:06:27.289 [DEBUG] [Thread-58054] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:06:33.104 [DEBUG] [Thread-58056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:06:48.146 [DEBUG] [Thread-58057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:06:57.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:06:57.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:06:57.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:06:57.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 6, 36), 29.3, 13.79, 0.0, 22.58, 23.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:06:57.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:06:36
2025-11-17T17:06:58.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:06:58.246 [DEBUG] [Thread-58058] [transport.py] [_log()] starting thread (client mode): 0xd0731c60
2025-11-17T17:06:58.246 [DEBUG] [Thread-58058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:06:58.267 [DEBUG] [Thread-58058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:06:58.267 [INFO] [Thread-58058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:06:58.270 [DEBUG] [Thread-58058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] client lang: <none>
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] server lang: <none>
2025-11-17T17:06:58.271 [DEBUG] [Thread-58058] [transport.py] [_log()] kex follows: False
2025-11-17T17:06:58.272 [DEBUG] [Thread-58058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:06:58.272 [DEBUG] [Thread-58058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:06:58.272 [DEBUG] [Thread-58058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:06:58.272 [DEBUG] [Thread-58058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:06:58.272 [DEBUG] [Thread-58058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:06:58.272 [DEBUG] [Thread-58058] [transport.py] [_log()] Compression: none
2025-11-17T17:06:58.272 [DEBUG] [Thread-58058] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:06:58.285 [DEBUG] [Thread-58058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:06:58.286 [DEBUG] [Thread-58058] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:06:58.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:06:58.287 [DEBUG] [Thread-58058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:06:58.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:06:58.289 [DEBUG] [Thread-58058] [transport.py] [_log()] userauth is OK
2025-11-17T17:06:58.289 [DEBUG] [Thread-58058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:06:58.289 [DEBUG] [Thread-58058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:06:58.289 [DEBUG] [Thread-58058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:06:58.289 [DEBUG] [Thread-58058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:06:58.311 [INFO] [Thread-58058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:06:58.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:06:58.905 [DEBUG] [Thread-58058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:06:58.906 [DEBUG] [Thread-58058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:06:58.906 [DEBUG] [Thread-58058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:06:58.946 [DEBUG] [Thread-58058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:06:58.946 [DEBUG] [Thread-58058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:06:58.949 [DEBUG] [Thread-58058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:06:58.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:06:58.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:06:58.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:06:58.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:06:58.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:06:58.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:06:58.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:06:58.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:06:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:06:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.629566 -999.00  +23.30  11.42     19   -1.00 1 1 1 1 1   887    0 26.42 76.07 ----- 9.1 11.4 272.2 26.1 26.8 -22.6 26.8 -23.4 27.0 -23.1 27.6 -23.2
2025-11-17T17:06:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:06:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:06:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.629566
2025-11-17T17:06:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:06:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:06:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:06:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:06:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:06:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:06:36', tmtdew=29.3, humidity=13.79, cloud=0.0, wind=22.58, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:06:34.502', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:06:58.974 [DEBUG] [Thread-58058] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:06:59.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:06:59.069 [DEBUG] [Thread-58061] [transport.py] [_log()] starting thread (client mode): 0xd3136ef0
2025-11-17T17:06:59.069 [DEBUG] [Thread-58061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:06:59.084 [DEBUG] [Thread-58061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:06:59.084 [INFO] [Thread-58061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:06:59.092 [DEBUG] [Thread-58061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:06:59.092 [DEBUG] [Thread-58061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:06:59.092 [DEBUG] [Thread-58061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:06:59.092 [DEBUG] [Thread-58061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:06:59.092 [DEBUG] [Thread-58061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:06:59.092 [DEBUG] [Thread-58061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] client lang: <none>
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] server lang: <none>
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] kex follows: False
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] Compression: none
2025-11-17T17:06:59.093 [DEBUG] [Thread-58061] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:06:59.148 [DEBUG] [Thread-58061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:06:59.148 [DEBUG] [Thread-58061] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:06:59.149 [DEBUG] [Thread-58061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:06:59.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:06:59.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:06:59.205 [DEBUG] [Thread-58061] [transport.py] [_log()] userauth is OK
2025-11-17T17:06:59.205 [DEBUG] [Thread-58061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:06:59.205 [DEBUG] [Thread-58061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:06:59.205 [DEBUG] [Thread-58061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:06:59.205 [DEBUG] [Thread-58061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:06:59.224 [INFO] [Thread-58061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:06:59.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:06:59.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:07:00.063 [DEBUG] [Thread-58061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:07:00.063 [DEBUG] [Thread-58061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:07:00.111 [DEBUG] [Thread-58061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:07:00.112 [DEBUG] [Thread-58061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:07:00.120 [DEBUG] [Thread-58061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:07:00.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:07:00.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:07:00.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:07:00.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:07:00.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:07:00.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:07:00.155 [DEBUG] [Thread-58061] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:07:03.173 [DEBUG] [Thread-58063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:07:18.216 [DEBUG] [Thread-58064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:07:22.759 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:07:22.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:07:23.959 [DEBUG] [Thread-58065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:07:30.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:07:30.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:07:30.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:07:30.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 7, 8), 29.33, 13.75, 0.0, 21.51, 23.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:07:30.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:07:08
2025-11-17T17:07:31.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:07:31.168 [DEBUG] [Thread-58066] [transport.py] [_log()] starting thread (client mode): 0xd07e90c0
2025-11-17T17:07:31.168 [DEBUG] [Thread-58066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:07:31.188 [DEBUG] [Thread-58066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:07:31.188 [INFO] [Thread-58066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] client lang: <none>
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] server lang: <none>
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] kex follows: False
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] Compression: none
2025-11-17T17:07:31.189 [DEBUG] [Thread-58066] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:07:31.198 [DEBUG] [Thread-58066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:07:31.198 [DEBUG] [Thread-58066] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:07:31.198 [DEBUG] [Thread-58066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:07:31.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:07:31.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:07:31.199 [DEBUG] [Thread-58066] [transport.py] [_log()] userauth is OK
2025-11-17T17:07:31.199 [DEBUG] [Thread-58066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:07:31.199 [DEBUG] [Thread-58066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:07:31.199 [DEBUG] [Thread-58066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:07:31.199 [DEBUG] [Thread-58066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:07:31.214 [INFO] [Thread-58066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:07:31.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:07:31.891 [DEBUG] [Thread-58066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:07:31.892 [DEBUG] [Thread-58066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:07:31.892 [DEBUG] [Thread-58066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:07:31.933 [DEBUG] [Thread-58066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:07:31.934 [DEBUG] [Thread-58066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:07:31.937 [DEBUG] [Thread-58066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:07:31.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:07:31.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:07:31.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:07:31.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:07:31.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:07:31.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:07:31.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:07:31.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:07:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:07:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.629913 -999.00  +23.20  13.21     19   -1.10 1 1 1 1 1   887    0 26.56 79.78 ----- 12.2 13.2 258.6 22.9 26.7 -23.8 26.8 -24.0 27.2 -23.7 27.5 -24.4
2025-11-17T17:07:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:07:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:07:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.629913
2025-11-17T17:07:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:07:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:07:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:07:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:07:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:07:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:07:08', tmtdew=29.33, humidity=13.75, cloud=0.0, wind=21.51, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:07:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:07:31.963 [DEBUG] [Thread-58066] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:07:32.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:07:32.061 [DEBUG] [Thread-58069] [transport.py] [_log()] starting thread (client mode): 0xd07e8640
2025-11-17T17:07:32.061 [DEBUG] [Thread-58069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:07:32.075 [DEBUG] [Thread-58069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:07:32.076 [INFO] [Thread-58069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] client lang: <none>
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] server lang: <none>
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] kex follows: False
2025-11-17T17:07:32.083 [DEBUG] [Thread-58069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:07:32.084 [DEBUG] [Thread-58069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:07:32.084 [DEBUG] [Thread-58069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:07:32.084 [DEBUG] [Thread-58069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:07:32.084 [DEBUG] [Thread-58069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:07:32.084 [DEBUG] [Thread-58069] [transport.py] [_log()] Compression: none
2025-11-17T17:07:32.084 [DEBUG] [Thread-58069] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:07:32.143 [DEBUG] [Thread-58069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:07:32.144 [DEBUG] [Thread-58069] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:07:32.144 [DEBUG] [Thread-58069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:07:32.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:07:32.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:07:32.205 [DEBUG] [Thread-58069] [transport.py] [_log()] userauth is OK
2025-11-17T17:07:32.205 [DEBUG] [Thread-58069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:07:32.205 [DEBUG] [Thread-58069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:07:32.205 [DEBUG] [Thread-58069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:07:32.205 [DEBUG] [Thread-58069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:07:32.224 [INFO] [Thread-58069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:07:32.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:07:32.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:07:33.093 [DEBUG] [Thread-58069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:07:33.094 [DEBUG] [Thread-58069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:07:33.144 [DEBUG] [Thread-58069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:07:33.144 [DEBUG] [Thread-58069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:07:33.154 [DEBUG] [Thread-58069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:07:33.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:07:33.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:07:33.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:07:33.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:07:33.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:07:33.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:07:33.195 [DEBUG] [Thread-58069] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:07:33.247 [DEBUG] [Thread-58071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:07:48.289 [DEBUG] [Thread-58072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:08:03.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:08:03.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:08: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
2025-11-17T17:08:03.318 [DEBUG] [Thread-58073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:08:03.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 7, 39), 28.94, 13.79, 0.0, 24.47, 23.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:08:03.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:07:39
2025-11-17T17:08:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:08:04.156 [DEBUG] [Thread-58074] [transport.py] [_log()] starting thread (client mode): 0xd31359c0
2025-11-17T17:08:04.156 [DEBUG] [Thread-58074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:08:04.167 [DEBUG] [Thread-58074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:08:04.167 [INFO] [Thread-58074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:08:04.168 [DEBUG] [Thread-58074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:08:04.168 [DEBUG] [Thread-58074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:08:04.168 [DEBUG] [Thread-58074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:08:04.168 [DEBUG] [Thread-58074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:08:04.168 [DEBUG] [Thread-58074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] client lang: <none>
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] server lang: <none>
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] kex follows: False
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] Compression: none
2025-11-17T17:08:04.169 [DEBUG] [Thread-58074] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:08:04.180 [DEBUG] [Thread-58074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:08:04.180 [DEBUG] [Thread-58074] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:08:04.180 [DEBUG] [Thread-58074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:08:04.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:08:04.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:08:04.181 [DEBUG] [Thread-58074] [transport.py] [_log()] userauth is OK
2025-11-17T17:08:04.181 [DEBUG] [Thread-58074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:08:04.182 [DEBUG] [Thread-58074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:08:04.182 [DEBUG] [Thread-58074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:08:04.182 [DEBUG] [Thread-58074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:08:04.199 [INFO] [Thread-58074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:08:04.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:08:04.861 [DEBUG] [Thread-58074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:08:04.861 [DEBUG] [Thread-58074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:08:04.862 [DEBUG] [Thread-58074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:08:04.902 [DEBUG] [Thread-58074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:08:04.902 [DEBUG] [Thread-58074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:08:04.904 [DEBUG] [Thread-58074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:08:04.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:08:04.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:08:04.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:08:04.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:08:04.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:08:04.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:08:04.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:08:04.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:08:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:08:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.630260 -999.00  +23.30  17.32     19   -1.00 1 1 1 1 1   887    0 26.36 84.90 ----- 17.7 17.3 274.6 22.2 26.7 -24.4 26.7 -24.3 27.1 -24.4 27.5 -24.8
2025-11-17T17:08:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:08:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:08:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.630260
2025-11-17T17:08:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:08:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:08:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:08:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:08:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:08:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:07:39', tmtdew=28.94, humidity=13.79, cloud=0.0, wind=24.47, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:07:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:08:04.925 [DEBUG] [Thread-58074] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:08:05.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:08:05.027 [DEBUG] [Thread-58077] [transport.py] [_log()] starting thread (client mode): 0xd0776650
2025-11-17T17:08:05.027 [DEBUG] [Thread-58077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:08:05.042 [DEBUG] [Thread-58077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:08:05.042 [INFO] [Thread-58077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:08:05.049 [DEBUG] [Thread-58077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] client lang: <none>
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] server lang: <none>
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] kex follows: False
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] Compression: none
2025-11-17T17:08:05.050 [DEBUG] [Thread-58077] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:08:05.112 [DEBUG] [Thread-58077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:08:05.112 [DEBUG] [Thread-58077] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:08:05.112 [DEBUG] [Thread-58077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:08:05.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:08:05.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:08:05.168 [DEBUG] [Thread-58077] [transport.py] [_log()] userauth is OK
2025-11-17T17:08:05.168 [DEBUG] [Thread-58077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:08:05.168 [DEBUG] [Thread-58077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:08:05.168 [DEBUG] [Thread-58077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:08:05.168 [DEBUG] [Thread-58077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:08:05.183 [INFO] [Thread-58077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:08:05.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:08:05.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:08:06.031 [DEBUG] [Thread-58077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:08:06.031 [DEBUG] [Thread-58077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:08:06.079 [DEBUG] [Thread-58077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:08:06.079 [DEBUG] [Thread-58077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:08:06.087 [DEBUG] [Thread-58077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:08:06.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:08:06.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:08:06.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:08:06.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:08:06.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:08:06.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:08:06.120 [DEBUG] [Thread-58077] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:08:18.346 [DEBUG] [Thread-58079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:08:22.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:08:22.903 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:08:24.014 [DEBUG] [Thread-58080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:08:33.391 [DEBUG] [Thread-58081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:08:36.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:08:36.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:08:36.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:08:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 8, 11), 29.02, 13.72, 0.0, 19.07, 23.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:08:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:08:11
2025-11-17T17:08:36.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:08:37.056 [DEBUG] [Thread-58082] [transport.py] [_log()] starting thread (client mode): 0xd07e87c0
2025-11-17T17:08:37.057 [DEBUG] [Thread-58082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:08:37.067 [DEBUG] [Thread-58082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:08:37.067 [INFO] [Thread-58082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] client lang: <none>
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] server lang: <none>
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] kex follows: False
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] Compression: none
2025-11-17T17:08:37.070 [DEBUG] [Thread-58082] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:08:37.077 [DEBUG] [Thread-58082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:08:37.078 [DEBUG] [Thread-58082] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:08:37.078 [DEBUG] [Thread-58082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:08:37.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:08:37.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:08:37.079 [DEBUG] [Thread-58082] [transport.py] [_log()] userauth is OK
2025-11-17T17:08:37.079 [DEBUG] [Thread-58082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:08:37.079 [DEBUG] [Thread-58082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:08:37.079 [DEBUG] [Thread-58082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:08:37.079 [DEBUG] [Thread-58082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:08:37.092 [INFO] [Thread-58082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:08:37.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:08:37.750 [DEBUG] [Thread-58082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:08:37.750 [DEBUG] [Thread-58082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:08:37.751 [DEBUG] [Thread-58082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:08:37.792 [DEBUG] [Thread-58082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:08:37.792 [DEBUG] [Thread-58082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:08:37.795 [DEBUG] [Thread-58082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:08:37.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:08:37.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:08:37.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:08:37.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:08:37.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:08:37.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:08:37.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:08:37.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:08:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:08:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.630607 -999.00  +23.30  16.26     19   -0.90 1 1 1 1 1   887    0 26.55 75.18 ----- 15.8 16.3 284.2 33.2 26.7 -23.1 26.8 -23.2 27.1 -23.0 27.5 -22.9
2025-11-17T17:08:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:08:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:08:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.630607
2025-11-17T17:08:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:08:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:08:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:08:37.820 [DEBUG] [Thread-58082] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:08:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:08:37.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:08:37.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:08:11', tmtdew=29.02, humidity=13.72, cloud=0.0, wind=19.07, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:08:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:08:37.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:08:37.928 [DEBUG] [Thread-58085] [transport.py] [_log()] starting thread (client mode): 0xd0732b30
2025-11-17T17:08:37.928 [DEBUG] [Thread-58085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:08:37.947 [DEBUG] [Thread-58085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:08:37.948 [INFO] [Thread-58085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:08:37.955 [DEBUG] [Thread-58085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] client lang: <none>
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] server lang: <none>
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] kex follows: False
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] Compression: none
2025-11-17T17:08:37.956 [DEBUG] [Thread-58085] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:08:38.012 [DEBUG] [Thread-58085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:08:38.013 [DEBUG] [Thread-58085] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:08:38.013 [DEBUG] [Thread-58085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:08:38.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:08:38.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:08:38.069 [DEBUG] [Thread-58085] [transport.py] [_log()] userauth is OK
2025-11-17T17:08:38.069 [DEBUG] [Thread-58085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:08:38.069 [DEBUG] [Thread-58085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:08:38.069 [DEBUG] [Thread-58085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:08:38.069 [DEBUG] [Thread-58085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:08:38.089 [INFO] [Thread-58085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:08:38.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:08:38.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:08:38.937 [DEBUG] [Thread-58085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:08:38.937 [DEBUG] [Thread-58085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:08:38.984 [DEBUG] [Thread-58085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:08:38.984 [DEBUG] [Thread-58085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:08:38.993 [DEBUG] [Thread-58085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:08:39.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:08:39.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:08:39.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:08:39.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:08:39.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:08:39.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:08:39.028 [DEBUG] [Thread-58085] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:08:48.424 [DEBUG] [Thread-58087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:09:03.464 [DEBUG] [Thread-58088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:09:09.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:09:09.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:09:09.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:09:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 8, 43), 29.21, 13.7, 0.0, 28.64, 23.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:09:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:08:43
2025-11-17T17:09:09.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:09:09.949 [DEBUG] [Thread-58089] [transport.py] [_log()] starting thread (client mode): 0xd3136140
2025-11-17T17:09:09.949 [DEBUG] [Thread-58089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:09:09.969 [DEBUG] [Thread-58089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:09:09.969 [INFO] [Thread-58089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:09:09.972 [DEBUG] [Thread-58089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] client lang: <none>
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] server lang: <none>
2025-11-17T17:09:09.973 [DEBUG] [Thread-58089] [transport.py] [_log()] kex follows: False
2025-11-17T17:09:09.974 [DEBUG] [Thread-58089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:09:09.974 [DEBUG] [Thread-58089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:09:09.974 [DEBUG] [Thread-58089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:09:09.974 [DEBUG] [Thread-58089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:09:09.974 [DEBUG] [Thread-58089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:09:09.974 [DEBUG] [Thread-58089] [transport.py] [_log()] Compression: none
2025-11-17T17:09:09.974 [DEBUG] [Thread-58089] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:09:09.993 [DEBUG] [Thread-58089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:09:09.993 [DEBUG] [Thread-58089] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:09:09.994 [DEBUG] [Thread-58089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:09:09.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:09:09.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:09:09.996 [DEBUG] [Thread-58089] [transport.py] [_log()] userauth is OK
2025-11-17T17:09:09.996 [DEBUG] [Thread-58089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:09:09.996 [DEBUG] [Thread-58089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:09:09.996 [DEBUG] [Thread-58089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:09:09.997 [DEBUG] [Thread-58089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:09:10.012 [INFO] [Thread-58089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:09:10.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:09:10.621 [DEBUG] [Thread-58089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:09:10.621 [DEBUG] [Thread-58089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:09:10.622 [DEBUG] [Thread-58089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:09:10.662 [DEBUG] [Thread-58089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:09:10.662 [DEBUG] [Thread-58089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:09:10.665 [DEBUG] [Thread-58089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:09:10.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:09:10.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:09:10.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:09:10.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:09:10.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:09:10.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:09:10.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:09:10.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:09:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:09:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.630954 -999.00  +23.30  33.44     19   -1.10 1 1 2 1 1   887    0 26.15 70.05 ----- 30.7 33.4 271.0 41.1 26.6 -24.0 26.8 -23.3 27.0 -25.9 27.4 -24.2
2025-11-17T17:09:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:09:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:09:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.630954
2025-11-17T17:09:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:09:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:09:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:09:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:09:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:09:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:08:43', tmtdew=29.21, humidity=13.7, cloud=0.0, wind=28.64, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:08:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:09:10.688 [DEBUG] [Thread-58089] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:09:10.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:09:10.784 [DEBUG] [Thread-58092] [transport.py] [_log()] starting thread (client mode): 0xd07320e0
2025-11-17T17:09:10.784 [DEBUG] [Thread-58092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:09:10.803 [DEBUG] [Thread-58092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:09:10.803 [INFO] [Thread-58092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:09:10.811 [DEBUG] [Thread-58092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] client lang: <none>
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] server lang: <none>
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] kex follows: False
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] Compression: none
2025-11-17T17:09:10.812 [DEBUG] [Thread-58092] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:09:10.874 [DEBUG] [Thread-58092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:09:10.875 [DEBUG] [Thread-58092] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:09:10.875 [DEBUG] [Thread-58092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:09:10.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:09:10.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:09:10.936 [DEBUG] [Thread-58092] [transport.py] [_log()] userauth is OK
2025-11-17T17:09:10.937 [DEBUG] [Thread-58092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:09:10.937 [DEBUG] [Thread-58092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:09:10.937 [DEBUG] [Thread-58092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:09:10.937 [DEBUG] [Thread-58092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:09:10.956 [INFO] [Thread-58092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:09:10.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:09:10.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:09:11.775 [DEBUG] [Thread-58092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:09:11.775 [DEBUG] [Thread-58092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:09:11.825 [DEBUG] [Thread-58092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:09:11.825 [DEBUG] [Thread-58092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:09:11.838 [DEBUG] [Thread-58092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:09:11.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:09:11.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:09:11.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:09:11.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:09:11.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:09:11.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:09:11.888 [DEBUG] [Thread-58092] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:09:18.495 [DEBUG] [Thread-58094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:09:23.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:09:23.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:09:24.061 [DEBUG] [Thread-58095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:09:33.536 [DEBUG] [Thread-58096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:09:41.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:09:41.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:09:41.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
2025-11-17T17:09:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 9, 16), 29.19, 13.72, 0.0, 32.87, 23.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:09:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:09:16
2025-11-17T17:09:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:09:42.835 [DEBUG] [Thread-58097] [transport.py] [_log()] starting thread (client mode): 0xd070fc70
2025-11-17T17:09:42.835 [DEBUG] [Thread-58097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:09:42.854 [DEBUG] [Thread-58097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:09:42.855 [INFO] [Thread-58097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:09:42.858 [DEBUG] [Thread-58097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:09:42.858 [DEBUG] [Thread-58097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:09:42.858 [DEBUG] [Thread-58097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:09:42.858 [DEBUG] [Thread-58097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:09:42.858 [DEBUG] [Thread-58097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:09:42.858 [DEBUG] [Thread-58097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] client lang: <none>
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] server lang: <none>
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] kex follows: False
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] Compression: none
2025-11-17T17:09:42.859 [DEBUG] [Thread-58097] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:09:42.876 [DEBUG] [Thread-58097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:09:42.877 [DEBUG] [Thread-58097] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:09:42.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:09:42.878 [DEBUG] [Thread-58097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:09:42.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:09:42.879 [DEBUG] [Thread-58097] [transport.py] [_log()] userauth is OK
2025-11-17T17:09:42.879 [DEBUG] [Thread-58097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:09:42.879 [DEBUG] [Thread-58097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:09:42.879 [DEBUG] [Thread-58097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:09:42.879 [DEBUG] [Thread-58097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:09:42.894 [INFO] [Thread-58097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:09:42.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:09:43.490 [DEBUG] [Thread-58097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:09:43.490 [DEBUG] [Thread-58097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:09:43.490 [DEBUG] [Thread-58097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:09:43.531 [DEBUG] [Thread-58097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:09:43.531 [DEBUG] [Thread-58097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:09:43.534 [DEBUG] [Thread-58097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:09:43.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:09:43.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:09:43.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:09:43.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:09:43.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:09:43.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:09:43.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.631649 -999.00  +23.50  21.17     19   -0.90 1 1 1 1 1   887    0 26.12 60.89 ----- 18.6 21.2 287.5 28.3 26.6 -23.8 26.7 -23.9 26.9 -25.4 27.5 -23.9
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.631649
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:09:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:09:16', tmtdew=29.19, humidity=13.72, cloud=0.0, wind=32.87, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:09:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:09:43.554 [DEBUG] [Thread-58097] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:09:43.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:09:43.638 [DEBUG] [Thread-58100] [transport.py] [_log()] starting thread (client mode): 0xd3135270
2025-11-17T17:09:43.638 [DEBUG] [Thread-58100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:09:43.657 [DEBUG] [Thread-58100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:09:43.657 [INFO] [Thread-58100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] client lang: <none>
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] server lang: <none>
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] kex follows: False
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] Compression: none
2025-11-17T17:09:43.665 [DEBUG] [Thread-58100] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:09:43.729 [DEBUG] [Thread-58100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:09:43.729 [DEBUG] [Thread-58100] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:09:43.729 [DEBUG] [Thread-58100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:09:43.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:09:43.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:09:43.784 [DEBUG] [Thread-58100] [transport.py] [_log()] userauth is OK
2025-11-17T17:09:43.784 [DEBUG] [Thread-58100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:09:43.784 [DEBUG] [Thread-58100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:09:43.784 [DEBUG] [Thread-58100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:09:43.784 [DEBUG] [Thread-58100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:09:43.801 [INFO] [Thread-58100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:09:43.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:09:43.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:09:44.672 [DEBUG] [Thread-58100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:09:44.672 [DEBUG] [Thread-58100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:09:44.720 [DEBUG] [Thread-58100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:09:44.720 [DEBUG] [Thread-58100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:09:44.730 [DEBUG] [Thread-58100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:09:44.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:09:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:09:44.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:09:44.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:09:44.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:09:44.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:09:44.765 [DEBUG] [Thread-58100] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:09:48.569 [DEBUG] [Thread-58102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:10:03.596 [DEBUG] [Thread-58103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:10:14.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:10:14.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:10:14.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:10:15.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 9, 48), 29.42, 13.77, 0.0, 30.72, 23.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:10:15.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:09:48
2025-11-17T17:10:15.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:10:15.687 [DEBUG] [Thread-58104] [transport.py] [_log()] starting thread (client mode): 0xd070fca0
2025-11-17T17:10:15.688 [DEBUG] [Thread-58104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:10:15.704 [DEBUG] [Thread-58104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:10:15.704 [INFO] [Thread-58104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] client lang: <none>
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] server lang: <none>
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] kex follows: False
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] Compression: none
2025-11-17T17:10:15.706 [DEBUG] [Thread-58104] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:10:15.715 [DEBUG] [Thread-58104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:10:15.715 [DEBUG] [Thread-58104] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:10:15.715 [DEBUG] [Thread-58104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:10:15.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:10:15.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:10:15.717 [DEBUG] [Thread-58104] [transport.py] [_log()] userauth is OK
2025-11-17T17:10:15.717 [DEBUG] [Thread-58104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:10:15.717 [DEBUG] [Thread-58104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:10:15.717 [DEBUG] [Thread-58104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:10:15.717 [DEBUG] [Thread-58104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:10:15.733 [INFO] [Thread-58104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:10:15.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:10:16.307 [DEBUG] [Thread-58104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:10:16.308 [DEBUG] [Thread-58104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:10:16.308 [DEBUG] [Thread-58104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:10:16.348 [DEBUG] [Thread-58104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:10:16.348 [DEBUG] [Thread-58104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:10:16.351 [DEBUG] [Thread-58104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:10:16.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:10:16.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:10:16.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:10:16.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:10:16.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:10:16.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:10:16.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:10:16.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:10:16.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:10:16.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.631996 -999.00  +23.50  24.40     19   -1.00 1 1 1 1 1   887    0 26.35 65.50 ----- 17.8 24.4 275.2 28.4 26.6 -24.4 26.6 -23.9 26.9 -26.5 27.4 -24.6
2025-11-17T17:10:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:10:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:10:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.631996
2025-11-17T17:10:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:10:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:10:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:10:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:10:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:10:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:09:48', tmtdew=29.42, humidity=13.77, cloud=0.0, wind=30.72, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:10:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:10:16.372 [DEBUG] [Thread-58104] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:10:16.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:10:16.471 [DEBUG] [Thread-58107] [transport.py] [_log()] starting thread (client mode): 0xd07337c0
2025-11-17T17:10:16.471 [DEBUG] [Thread-58107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:10:16.487 [DEBUG] [Thread-58107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:10:16.487 [INFO] [Thread-58107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:10:16.494 [DEBUG] [Thread-58107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:10:16.495 [DEBUG] [Thread-58107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:10:16.495 [DEBUG] [Thread-58107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:10:16.495 [DEBUG] [Thread-58107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:10:16.495 [DEBUG] [Thread-58107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:10:16.495 [DEBUG] [Thread-58107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:10:16.495 [DEBUG] [Thread-58107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:10:16.495 [DEBUG] [Thread-58107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:10:16.495 [DEBUG] [Thread-58107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] client lang: <none>
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] server lang: <none>
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] kex follows: False
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:10:16.496 [DEBUG] [Thread-58107] [transport.py] [_log()] Compression: none
2025-11-17T17:10:16.497 [DEBUG] [Thread-58107] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:10:16.553 [DEBUG] [Thread-58107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:10:16.553 [DEBUG] [Thread-58107] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:10:16.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:10:16.554 [DEBUG] [Thread-58107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:10:16.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:10:16.609 [DEBUG] [Thread-58107] [transport.py] [_log()] userauth is OK
2025-11-17T17:10:16.609 [DEBUG] [Thread-58107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:10:16.609 [DEBUG] [Thread-58107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:10:16.609 [DEBUG] [Thread-58107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:10:16.609 [DEBUG] [Thread-58107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:10:16.628 [INFO] [Thread-58107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:10:16.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:10:16.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:10:17.478 [DEBUG] [Thread-58107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:10:17.478 [DEBUG] [Thread-58107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:10:17.526 [DEBUG] [Thread-58107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:10:17.526 [DEBUG] [Thread-58107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:10:17.535 [DEBUG] [Thread-58107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:10:17.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:10:17.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:10:17.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:10:17.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:10:17.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:10:17.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:10:17.570 [DEBUG] [Thread-58107] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:10:18.626 [DEBUG] [Thread-58109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:10:23.186 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:10:23.188 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:10:24.112 [DEBUG] [Thread-58110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:10:33.665 [DEBUG] [Thread-58111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:10:47.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:10:47.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:10:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:10:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 10, 20), 29.38, 13.84, 0.0, 27.74, 23.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:10:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:10:20
2025-11-17T17:10:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:10:48.502 [DEBUG] [Thread-58112] [transport.py] [_log()] starting thread (client mode): 0xd0731120
2025-11-17T17:10:48.502 [DEBUG] [Thread-58112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:10:48.522 [DEBUG] [Thread-58112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:10:48.522 [INFO] [Thread-58112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:10:48.525 [DEBUG] [Thread-58112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:10:48.525 [DEBUG] [Thread-58112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:10:48.525 [DEBUG] [Thread-58112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:10:48.525 [DEBUG] [Thread-58112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] client lang: <none>
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] server lang: <none>
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] kex follows: False
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] Compression: none
2025-11-17T17:10:48.526 [DEBUG] [Thread-58112] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:10:48.543 [DEBUG] [Thread-58112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:10:48.543 [DEBUG] [Thread-58112] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:10:48.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:10:48.544 [DEBUG] [Thread-58112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:10:48.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:10:48.546 [DEBUG] [Thread-58112] [transport.py] [_log()] userauth is OK
2025-11-17T17:10:48.546 [DEBUG] [Thread-58112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:10:48.547 [DEBUG] [Thread-58112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:10:48.547 [DEBUG] [Thread-58112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:10:48.547 [DEBUG] [Thread-58112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:10:48.565 [INFO] [Thread-58112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:10:48.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:10:48.698 [DEBUG] [Thread-58114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:10:49.133 [DEBUG] [Thread-58112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:10:49.133 [DEBUG] [Thread-58112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:10:49.133 [DEBUG] [Thread-58112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:10:49.174 [DEBUG] [Thread-58112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:10:49.175 [DEBUG] [Thread-58112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:10:49.177 [DEBUG] [Thread-58112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:10:49.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:10:49.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:10:49.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:10:49.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:10:49.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:10:49.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:10:49.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:10:49.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:10:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:10:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.632343 -999.00  +23.50  21.59     19   -1.00 1 1 1 1 1   887    0 25.87 59.68 ----- 23.7 21.6 270.6 24.5 26.5 -24.6 26.6 -24.5 26.8 -27.0 27.4 -24.8
2025-11-17T17:10:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:10:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:10:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.632343
2025-11-17T17:10:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:10:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:10:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:10:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:10:49.202 [DEBUG] [Thread-58112] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:10:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:10:49.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:10:20', tmtdew=29.38, humidity=13.84, cloud=0.0, wind=27.74, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:10:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:10:49.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:10:49.298 [DEBUG] [Thread-58116] [transport.py] [_log()] starting thread (client mode): 0xd0787370
2025-11-17T17:10:49.298 [DEBUG] [Thread-58116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:10:49.313 [DEBUG] [Thread-58116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:10:49.313 [INFO] [Thread-58116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:10:49.321 [DEBUG] [Thread-58116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:10:49.321 [DEBUG] [Thread-58116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:10:49.321 [DEBUG] [Thread-58116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] client lang: <none>
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] server lang: <none>
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] kex follows: False
2025-11-17T17:10:49.322 [DEBUG] [Thread-58116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:10:49.323 [DEBUG] [Thread-58116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:10:49.323 [DEBUG] [Thread-58116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:10:49.323 [DEBUG] [Thread-58116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:10:49.323 [DEBUG] [Thread-58116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:10:49.323 [DEBUG] [Thread-58116] [transport.py] [_log()] Compression: none
2025-11-17T17:10:49.323 [DEBUG] [Thread-58116] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:10:49.382 [DEBUG] [Thread-58116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:10:49.383 [DEBUG] [Thread-58116] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:10:49.384 [DEBUG] [Thread-58116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:10:49.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:10:49.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:10:49.441 [DEBUG] [Thread-58116] [transport.py] [_log()] userauth is OK
2025-11-17T17:10:49.441 [DEBUG] [Thread-58116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:10:49.441 [DEBUG] [Thread-58116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:10:49.442 [DEBUG] [Thread-58116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:10:49.442 [DEBUG] [Thread-58116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:10:49.461 [INFO] [Thread-58116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:10:49.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:10:49.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:10:50.336 [DEBUG] [Thread-58116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:10:50.336 [DEBUG] [Thread-58116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:10:50.383 [DEBUG] [Thread-58116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:10:50.383 [DEBUG] [Thread-58116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:10:50.392 [DEBUG] [Thread-58116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:10:50.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:10:50.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:10:50.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:10:50.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:10:50.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:10:50.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:10:50.427 [DEBUG] [Thread-58116] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:11:03.726 [DEBUG] [Thread-58118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:11:18.764 [DEBUG] [Thread-58119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:11:20.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:11:20.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:11:20.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:11:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 10, 52), 28.91, 13.9, 0.0, 22.99, 23.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:11:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:10:52
2025-11-17T17:11:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:11:21.383 [DEBUG] [Thread-58120] [transport.py] [_log()] starting thread (client mode): 0xd07ea8f0
2025-11-17T17:11:21.383 [DEBUG] [Thread-58120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:11:21.402 [DEBUG] [Thread-58120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:11:21.402 [INFO] [Thread-58120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] client lang: <none>
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] server lang: <none>
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] kex follows: False
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] Compression: none
2025-11-17T17:11:21.405 [DEBUG] [Thread-58120] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:11:21.417 [DEBUG] [Thread-58120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:11:21.417 [DEBUG] [Thread-58120] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:11:21.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:11:21.418 [DEBUG] [Thread-58120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:11:21.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:11:21.418 [DEBUG] [Thread-58120] [transport.py] [_log()] userauth is OK
2025-11-17T17:11:21.418 [DEBUG] [Thread-58120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:11:21.418 [DEBUG] [Thread-58120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:11:21.418 [DEBUG] [Thread-58120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:11:21.418 [DEBUG] [Thread-58120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:11:21.428 [INFO] [Thread-58120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:11:21.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:11:22.020 [DEBUG] [Thread-58120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:11:22.020 [DEBUG] [Thread-58120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:11:22.020 [DEBUG] [Thread-58120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:11:22.061 [DEBUG] [Thread-58120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:11:22.061 [DEBUG] [Thread-58120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:11:22.063 [DEBUG] [Thread-58120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:11:22.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:11:22.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:11:22.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:11:22.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:11:22.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:11:22.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:11:22.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:11:22.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.632691 -999.00  +23.50  19.51     19   -0.90 1 1 1 1 1   887    0 25.27 62.68 ----- 19.6 19.5 266.0 22.8 26.6 -25.3 26.6 -24.9 26.9 -25.0 27.4 -25.7
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.632691
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:11:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:10:52', tmtdew=28.91, humidity=13.9, cloud=0.0, wind=22.99, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:11:04.502', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:11:22.082 [DEBUG] [Thread-58120] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:11:22.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:11:22.166 [DEBUG] [Thread-58123] [transport.py] [_log()] starting thread (client mode): 0xd07e8460
2025-11-17T17:11:22.166 [DEBUG] [Thread-58123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:11:22.181 [DEBUG] [Thread-58123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:11:22.181 [INFO] [Thread-58123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] client lang: <none>
2025-11-17T17:11:22.188 [DEBUG] [Thread-58123] [transport.py] [_log()] server lang: <none>
2025-11-17T17:11:22.189 [DEBUG] [Thread-58123] [transport.py] [_log()] kex follows: False
2025-11-17T17:11:22.189 [DEBUG] [Thread-58123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:11:22.189 [DEBUG] [Thread-58123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:11:22.189 [DEBUG] [Thread-58123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:11:22.189 [DEBUG] [Thread-58123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:11:22.189 [DEBUG] [Thread-58123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:11:22.189 [DEBUG] [Thread-58123] [transport.py] [_log()] Compression: none
2025-11-17T17:11:22.189 [DEBUG] [Thread-58123] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:11:22.243 [DEBUG] [Thread-58123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:11:22.244 [DEBUG] [Thread-58123] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:11:22.244 [DEBUG] [Thread-58123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:11:22.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:11:22.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:11:22.301 [DEBUG] [Thread-58123] [transport.py] [_log()] userauth is OK
2025-11-17T17:11:22.301 [DEBUG] [Thread-58123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:11:22.301 [DEBUG] [Thread-58123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:11:22.301 [DEBUG] [Thread-58123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:11:22.301 [DEBUG] [Thread-58123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:11:22.315 [INFO] [Thread-58123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:11:22.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:11:22.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:11:23.209 [DEBUG] [Thread-58123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:11:23.210 [DEBUG] [Thread-58123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:11:23.257 [DEBUG] [Thread-58123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:11:23.257 [DEBUG] [Thread-58123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:11:23.266 [DEBUG] [Thread-58123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:11:23.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:11:23.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:11:23.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:11:23.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:11:23.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:11:23.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:11:23.300 [DEBUG] [Thread-58123] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:11:23.328 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:11:23.329 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:11:24.173 [DEBUG] [Thread-58125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:11:33.793 [DEBUG] [Thread-58126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:11:48.835 [DEBUG] [Thread-58127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:11:53.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:11:53.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:11:53.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:11:53.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 11, 24), 28.7, 14.12, 0.0, 24.7, 23.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:11:53.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:11:24
2025-11-17T17:11:54.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:11:54.244 [DEBUG] [Thread-58128] [transport.py] [_log()] starting thread (client mode): 0xd070eef0
2025-11-17T17:11:54.244 [DEBUG] [Thread-58128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:11:54.263 [DEBUG] [Thread-58128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:11:54.263 [INFO] [Thread-58128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:11:54.266 [DEBUG] [Thread-58128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:11:54.266 [DEBUG] [Thread-58128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:11:54.266 [DEBUG] [Thread-58128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] client lang: <none>
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] server lang: <none>
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] kex follows: False
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:11:54.267 [DEBUG] [Thread-58128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:11:54.268 [DEBUG] [Thread-58128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:11:54.268 [DEBUG] [Thread-58128] [transport.py] [_log()] Compression: none
2025-11-17T17:11:54.268 [DEBUG] [Thread-58128] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:11:54.285 [DEBUG] [Thread-58128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:11:54.286 [DEBUG] [Thread-58128] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:11:54.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:11:54.287 [DEBUG] [Thread-58128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:11:54.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:11:54.289 [DEBUG] [Thread-58128] [transport.py] [_log()] userauth is OK
2025-11-17T17:11:54.289 [DEBUG] [Thread-58128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:11:54.289 [DEBUG] [Thread-58128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:11:54.290 [DEBUG] [Thread-58128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:11:54.290 [DEBUG] [Thread-58128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:11:54.307 [INFO] [Thread-58128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:11:54.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:11:54.864 [DEBUG] [Thread-58128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:11:54.864 [DEBUG] [Thread-58128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:11:54.864 [DEBUG] [Thread-58128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:11:54.905 [DEBUG] [Thread-58128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:11:54.906 [DEBUG] [Thread-58128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:11:54.908 [DEBUG] [Thread-58128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:11:54.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:11:54.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:11:54.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:11:54.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:11:54.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:11:54.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:11:54.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:11:54.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:11:54.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:11:54.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.633038 -999.00  +23.40  18.52     20   -0.80 1 1 1 1 1   887    0 26.01 57.67 ----- 14.6 18.5 300.5 21.9 26.6 -24.5 26.6 -24.3 26.8 -26.9 27.4 -24.6
2025-11-17T17:11:54.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:11:54.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:11:54.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.633038
2025-11-17T17:11:54.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:11:54.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:11:54.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:11:54.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:11:54.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:11:54.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:11:24', tmtdew=28.7, humidity=14.12, cloud=0.0, wind=24.7, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:11:34.483', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:11:54.928 [DEBUG] [Thread-58128] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:11:55.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:11:55.025 [DEBUG] [Thread-58131] [transport.py] [_log()] starting thread (client mode): 0xd070f910
2025-11-17T17:11:55.025 [DEBUG] [Thread-58131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:11:55.042 [DEBUG] [Thread-58131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:11:55.042 [INFO] [Thread-58131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:11:55.050 [DEBUG] [Thread-58131] [transport.py] [_log()] client lang: <none>
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] server lang: <none>
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] kex follows: False
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] Compression: none
2025-11-17T17:11:55.051 [DEBUG] [Thread-58131] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:11:55.111 [DEBUG] [Thread-58131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:11:55.112 [DEBUG] [Thread-58131] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:11:55.112 [DEBUG] [Thread-58131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:11:55.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:11:55.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:11:55.169 [DEBUG] [Thread-58131] [transport.py] [_log()] userauth is OK
2025-11-17T17:11:55.169 [DEBUG] [Thread-58131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:11:55.169 [DEBUG] [Thread-58131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:11:55.169 [DEBUG] [Thread-58131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:11:55.169 [DEBUG] [Thread-58131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:11:55.189 [INFO] [Thread-58131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:11:55.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:11:55.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:11:56.086 [DEBUG] [Thread-58131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:11:56.086 [DEBUG] [Thread-58131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:11:56.134 [DEBUG] [Thread-58131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:11:56.134 [DEBUG] [Thread-58131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:11:56.142 [DEBUG] [Thread-58131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:11:56.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:11:56.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:11:56.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:11:56.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:11:56.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:11:56.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:11:56.174 [DEBUG] [Thread-58131] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:12:03.868 [DEBUG] [Thread-58133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:12:18.912 [DEBUG] [Thread-58134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:12:23.471 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:12:23.472 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:12:24.230 [DEBUG] [Thread-58135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:12:26.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:12:26.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:12:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:12:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 11, 56), 28.57, 14.5, 0.0, 24.51, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:12:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:11:56
2025-11-17T17:12:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:12:27.132 [DEBUG] [Thread-58136] [transport.py] [_log()] starting thread (client mode): 0xd3136b90
2025-11-17T17:12:27.132 [DEBUG] [Thread-58136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:12:27.146 [DEBUG] [Thread-58136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:12:27.146 [INFO] [Thread-58136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] client lang: <none>
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] server lang: <none>
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] kex follows: False
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] Compression: none
2025-11-17T17:12:27.148 [DEBUG] [Thread-58136] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:12:27.160 [DEBUG] [Thread-58136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:12:27.160 [DEBUG] [Thread-58136] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:12:27.160 [DEBUG] [Thread-58136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:12:27.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:12:27.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:12:27.162 [DEBUG] [Thread-58136] [transport.py] [_log()] userauth is OK
2025-11-17T17:12:27.162 [DEBUG] [Thread-58136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:12:27.162 [DEBUG] [Thread-58136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:12:27.162 [DEBUG] [Thread-58136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:12:27.162 [DEBUG] [Thread-58136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:12:27.179 [INFO] [Thread-58136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:12:27.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:12:27.719 [DEBUG] [Thread-58136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:12:27.719 [DEBUG] [Thread-58136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:12:27.719 [DEBUG] [Thread-58136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:12:27.760 [DEBUG] [Thread-58136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:12:27.760 [DEBUG] [Thread-58136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:12:27.763 [DEBUG] [Thread-58136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:12:27.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:12:27.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:12:27.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:12:27.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:12:27.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:12:27.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:12:27.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:12:27.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:12:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:12:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.633380 -999.00  +23.40  23.29     19   -0.80 1 1 1 1 1   887    0 25.87 52.95 ----- 24.4 23.3 294.6 27.9 26.5 -25.4 26.5 -25.4 26.9 -26.0 27.3 -25.5
2025-11-17T17:12:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:12:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:12:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.633380
2025-11-17T17:12:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:12:27.788 [DEBUG] [Thread-58136] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:12:27.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:12:27.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:12:27.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:12:27.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:12:27.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:11:56', tmtdew=28.57, humidity=14.5, cloud=0.0, wind=24.51, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:12:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:12:27.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:12:27.885 [DEBUG] [Thread-58139] [transport.py] [_log()] starting thread (client mode): 0xd0731180
2025-11-17T17:12:27.885 [DEBUG] [Thread-58139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:12:27.900 [DEBUG] [Thread-58139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:12:27.900 [INFO] [Thread-58139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] client lang: <none>
2025-11-17T17:12:27.908 [DEBUG] [Thread-58139] [transport.py] [_log()] server lang: <none>
2025-11-17T17:12:27.909 [DEBUG] [Thread-58139] [transport.py] [_log()] kex follows: False
2025-11-17T17:12:27.909 [DEBUG] [Thread-58139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:12:27.909 [DEBUG] [Thread-58139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:12:27.909 [DEBUG] [Thread-58139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:12:27.909 [DEBUG] [Thread-58139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:12:27.909 [DEBUG] [Thread-58139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:12:27.909 [DEBUG] [Thread-58139] [transport.py] [_log()] Compression: none
2025-11-17T17:12:27.909 [DEBUG] [Thread-58139] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:12:27.965 [DEBUG] [Thread-58139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:12:27.965 [DEBUG] [Thread-58139] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:12:27.966 [DEBUG] [Thread-58139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:12:27.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:12:27.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:12:28.021 [DEBUG] [Thread-58139] [transport.py] [_log()] userauth is OK
2025-11-17T17:12:28.021 [DEBUG] [Thread-58139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:12:28.021 [DEBUG] [Thread-58139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:12:28.021 [DEBUG] [Thread-58139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:12:28.021 [DEBUG] [Thread-58139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:12:28.041 [INFO] [Thread-58139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:12:28.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:12:28.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:12:28.941 [DEBUG] [Thread-58139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:12:28.941 [DEBUG] [Thread-58139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:12:28.989 [DEBUG] [Thread-58139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:12:28.989 [DEBUG] [Thread-58139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:12:28.997 [DEBUG] [Thread-58139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:12:29.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:12:29.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:12:29.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:12:29.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:12:29.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:12:29.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:12:29.029 [DEBUG] [Thread-58139] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:12:33.941 [DEBUG] [Thread-58141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:12:48.987 [DEBUG] [Thread-58142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:12:59.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:12:59.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:12:59.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:12:59.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 12, 28), 28.55, 14.52, 0.0, 22.57, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:12:59.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:12:28
2025-11-17T17:12:59.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:12:59.978 [DEBUG] [Thread-58143] [transport.py] [_log()] starting thread (client mode): 0xd07bd990
2025-11-17T17:12:59.978 [DEBUG] [Thread-58143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:12:59.998 [DEBUG] [Thread-58143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:12:59.998 [INFO] [Thread-58143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:13:00.001 [DEBUG] [Thread-58143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:13:00.001 [DEBUG] [Thread-58143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:13:00.001 [DEBUG] [Thread-58143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:13:00.001 [DEBUG] [Thread-58143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:13:00.001 [DEBUG] [Thread-58143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:13:00.001 [DEBUG] [Thread-58143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:13:00.001 [DEBUG] [Thread-58143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:13:00.001 [DEBUG] [Thread-58143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] client lang: <none>
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] server lang: <none>
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] kex follows: False
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] Compression: none
2025-11-17T17:13:00.002 [DEBUG] [Thread-58143] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:13:00.012 [DEBUG] [Thread-58143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:13:00.012 [DEBUG] [Thread-58143] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:13:00.013 [DEBUG] [Thread-58143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:13:00.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:13:00.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:13:00.015 [DEBUG] [Thread-58143] [transport.py] [_log()] userauth is OK
2025-11-17T17:13:00.016 [DEBUG] [Thread-58143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:13:00.016 [DEBUG] [Thread-58143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:13:00.016 [DEBUG] [Thread-58143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:13:00.016 [DEBUG] [Thread-58143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:13:00.040 [INFO] [Thread-58143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:13:00.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:13:00.647 [DEBUG] [Thread-58143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:13:00.647 [DEBUG] [Thread-58143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:13:00.647 [DEBUG] [Thread-58143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:13:00.688 [DEBUG] [Thread-58143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:13:00.688 [DEBUG] [Thread-58143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:13:00.689 [DEBUG] [Thread-58143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:13:00.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:13:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:13:00.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:13:00.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:13:00.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:13:00.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:13:00.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:13:00.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:13:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:13:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.633732 -999.00  +22.90  23.13     20   -1.00 1 1 1 1 1   887    0 25.53 46.76 ----- 16.9 23.1 305.8 34.1 26.4 -24.3 26.5 -24.3 26.8 -26.4 27.2 -24.6
2025-11-17T17:13:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:13:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:13:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.633732
2025-11-17T17:13:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:13:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:13:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:13:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:13:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:13:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:12:28', tmtdew=28.55, humidity=14.52, cloud=0.0, wind=22.57, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:12:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:13:00.706 [DEBUG] [Thread-58143] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:13:00.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:13:00.792 [DEBUG] [Thread-58146] [transport.py] [_log()] starting thread (client mode): 0xd0757760
2025-11-17T17:13:00.792 [DEBUG] [Thread-58146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:13:00.814 [DEBUG] [Thread-58146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:13:00.814 [INFO] [Thread-58146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] client lang: <none>
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] server lang: <none>
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] kex follows: False
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] Compression: none
2025-11-17T17:13:00.823 [DEBUG] [Thread-58146] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:13:00.879 [DEBUG] [Thread-58146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:13:00.879 [DEBUG] [Thread-58146] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:13:00.879 [DEBUG] [Thread-58146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:13:00.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:13:00.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:13:00.936 [DEBUG] [Thread-58146] [transport.py] [_log()] userauth is OK
2025-11-17T17:13:00.936 [DEBUG] [Thread-58146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:13:00.937 [DEBUG] [Thread-58146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:13:00.937 [DEBUG] [Thread-58146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:13:00.937 [DEBUG] [Thread-58146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:13:00.950 [INFO] [Thread-58146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:13:00.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:13:00.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:13:01.795 [DEBUG] [Thread-58146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:13:01.795 [DEBUG] [Thread-58146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:13:01.843 [DEBUG] [Thread-58146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:13:01.844 [DEBUG] [Thread-58146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:13:01.852 [DEBUG] [Thread-58146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:13:01.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:13:01.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:13:01.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:13:01.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:13:01.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:13:01.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:13:01.882 [DEBUG] [Thread-58146] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:13:04.017 [DEBUG] [Thread-58148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:13:19.059 [DEBUG] [Thread-58149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:13:23.613 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:13:23.614 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:13:24.281 [DEBUG] [Thread-58150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:13:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:13:31.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:13:31.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:13:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 12, 28), 28.75, 14.02, 0.0, 22.57, 23.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:13:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:12:28
2025-11-17T17:13:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:13:32.897 [DEBUG] [Thread-58151] [transport.py] [_log()] starting thread (client mode): 0xd0754be0
2025-11-17T17:13:32.897 [DEBUG] [Thread-58151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:13:32.915 [DEBUG] [Thread-58151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:13:32.916 [INFO] [Thread-58151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] client lang: <none>
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] server lang: <none>
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] kex follows: False
2025-11-17T17:13:32.917 [DEBUG] [Thread-58151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:13:32.918 [DEBUG] [Thread-58151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:13:32.918 [DEBUG] [Thread-58151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:13:32.918 [DEBUG] [Thread-58151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:13:32.918 [DEBUG] [Thread-58151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:13:32.918 [DEBUG] [Thread-58151] [transport.py] [_log()] Compression: none
2025-11-17T17:13:32.918 [DEBUG] [Thread-58151] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:13:32.928 [DEBUG] [Thread-58151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:13:32.928 [DEBUG] [Thread-58151] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:13:32.929 [DEBUG] [Thread-58151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:13:32.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:13:32.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:13:32.930 [DEBUG] [Thread-58151] [transport.py] [_log()] userauth is OK
2025-11-17T17:13:32.930 [DEBUG] [Thread-58151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:13:32.930 [DEBUG] [Thread-58151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:13:32.930 [DEBUG] [Thread-58151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:13:32.930 [DEBUG] [Thread-58151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:13:32.948 [INFO] [Thread-58151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:13:32.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:13:33.549 [DEBUG] [Thread-58151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:13:33.549 [DEBUG] [Thread-58151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:13:33.549 [DEBUG] [Thread-58151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:13:33.590 [DEBUG] [Thread-58151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:13:33.590 [DEBUG] [Thread-58151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:13:33.593 [DEBUG] [Thread-58151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:13:33.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:13:33.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:13:33.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:13:33.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:13:33.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:13:33.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:13:33.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.634079 -999.00  +23.10  27.15     20   -0.80 1 1 1 1 1   887    0 25.18 39.58 ----- 24.7 27.1 296.6 29.4 26.5 -24.1 26.6 -23.8 26.8 -24.3 27.3 -24.0
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.634079
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:13:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:12:28', tmtdew=28.75, humidity=14.02, cloud=0.0, wind=22.57, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:13:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:13:33.607 [DEBUG] [Thread-58151] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:13:33.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:13:33.690 [DEBUG] [Thread-58154] [transport.py] [_log()] starting thread (client mode): 0xd070f1c0
2025-11-17T17:13:33.690 [DEBUG] [Thread-58154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:13:33.704 [DEBUG] [Thread-58154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:13:33.704 [INFO] [Thread-58154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] client lang: <none>
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] server lang: <none>
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] kex follows: False
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] Compression: none
2025-11-17T17:13:33.712 [DEBUG] [Thread-58154] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:13:33.772 [DEBUG] [Thread-58154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:13:33.772 [DEBUG] [Thread-58154] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:13:33.772 [DEBUG] [Thread-58154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:13:33.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:13:33.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:13:33.829 [DEBUG] [Thread-58154] [transport.py] [_log()] userauth is OK
2025-11-17T17:13:33.829 [DEBUG] [Thread-58154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:13:33.829 [DEBUG] [Thread-58154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:13:33.829 [DEBUG] [Thread-58154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:13:33.829 [DEBUG] [Thread-58154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:13:33.843 [INFO] [Thread-58154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:13:33.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:13:33.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:13:34.085 [DEBUG] [Thread-58156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:13:34.699 [DEBUG] [Thread-58154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:13:34.700 [DEBUG] [Thread-58154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:13:34.747 [DEBUG] [Thread-58154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:13:34.747 [DEBUG] [Thread-58154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:13:34.756 [DEBUG] [Thread-58154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:13:34.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:13:34.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:13:34.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:13:34.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:13:34.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:13:34.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:13:34.795 [DEBUG] [Thread-58154] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:13:49.127 [DEBUG] [Thread-58157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:14:04.154 [DEBUG] [Thread-58158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:14:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:14:04.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:14:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:14:05.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 13, 32), 29.01, 13.79, 0.0, 25.37, 23.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:14:05.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:13:32
2025-11-17T17:14:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:14:05.797 [DEBUG] [Thread-58159] [transport.py] [_log()] starting thread (client mode): 0xd0776260
2025-11-17T17:14:05.797 [DEBUG] [Thread-58159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:14:05.817 [DEBUG] [Thread-58159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:14:05.817 [INFO] [Thread-58159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:14:05.818 [DEBUG] [Thread-58159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:14:05.818 [DEBUG] [Thread-58159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:14:05.818 [DEBUG] [Thread-58159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:14:05.818 [DEBUG] [Thread-58159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:14:05.818 [DEBUG] [Thread-58159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:14:05.818 [DEBUG] [Thread-58159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:14:05.818 [DEBUG] [Thread-58159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] client lang: <none>
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] server lang: <none>
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] kex follows: False
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] Compression: none
2025-11-17T17:14:05.819 [DEBUG] [Thread-58159] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:14:05.836 [DEBUG] [Thread-58159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:14:05.836 [DEBUG] [Thread-58159] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:14:05.836 [DEBUG] [Thread-58159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:14:05.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:14:05.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:14:05.837 [DEBUG] [Thread-58159] [transport.py] [_log()] userauth is OK
2025-11-17T17:14:05.837 [DEBUG] [Thread-58159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:14:05.837 [DEBUG] [Thread-58159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:14:05.837 [DEBUG] [Thread-58159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:14:05.837 [DEBUG] [Thread-58159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:14:05.846 [INFO] [Thread-58159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:14:05.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:14:06.453 [DEBUG] [Thread-58159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:14:06.453 [DEBUG] [Thread-58159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:14:06.454 [DEBUG] [Thread-58159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:14:06.494 [DEBUG] [Thread-58159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:14:06.495 [DEBUG] [Thread-58159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:14:06.497 [DEBUG] [Thread-58159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:14:06.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:14:06.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:14:06.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:14:06.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:14:06.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:14:06.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:14:06.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:14:06.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:14:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:14:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.634427 -999.00  +23.20  15.77     20   -0.90 1 1 1 1 1   887    0 25.41 33.78 ----- 16.9 15.8 306.2 29.0 26.5 -24.4 26.6 -24.3 26.9 -25.8 27.4 -24.4
2025-11-17T17:14:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:14:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:14:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.634427
2025-11-17T17:14:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:14:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:14:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:14:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:14:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:14:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:13:32', tmtdew=29.01, humidity=13.79, cloud=0.0, wind=25.37, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:13:34.493', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:14:06.521 [DEBUG] [Thread-58159] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:14:06.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:14:06.616 [DEBUG] [Thread-58162] [transport.py] [_log()] starting thread (client mode): 0xd07578b0
2025-11-17T17:14:06.616 [DEBUG] [Thread-58162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:14:06.632 [DEBUG] [Thread-58162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:14:06.632 [INFO] [Thread-58162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:14:06.639 [DEBUG] [Thread-58162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:14:06.640 [DEBUG] [Thread-58162] [transport.py] [_log()] client lang: <none>
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] server lang: <none>
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] kex follows: False
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] Compression: none
2025-11-17T17:14:06.641 [DEBUG] [Thread-58162] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:14:06.698 [DEBUG] [Thread-58162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:14:06.698 [DEBUG] [Thread-58162] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:14:06.699 [DEBUG] [Thread-58162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:14:06.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:14:06.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:14:06.761 [DEBUG] [Thread-58162] [transport.py] [_log()] userauth is OK
2025-11-17T17:14:06.761 [DEBUG] [Thread-58162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:14:06.761 [DEBUG] [Thread-58162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:14:06.761 [DEBUG] [Thread-58162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:14:06.761 [DEBUG] [Thread-58162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:14:06.780 [INFO] [Thread-58162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:14:06.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:14:06.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:14:07.604 [DEBUG] [Thread-58162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:14:07.604 [DEBUG] [Thread-58162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:14:07.656 [DEBUG] [Thread-58162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:14:07.656 [DEBUG] [Thread-58162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:14:07.665 [DEBUG] [Thread-58162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:14:07.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:14:07.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:14:07.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:14:07.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:14:07.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:14:07.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:14:07.699 [DEBUG] [Thread-58162] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:14:19.183 [DEBUG] [Thread-58164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:14:23.755 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:14:23.756 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:14:24.336 [DEBUG] [Thread-58165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:14:34.225 [DEBUG] [Thread-58166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:14:37.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:14:37.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:14:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:14:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 14, 4), 29.0, 13.79, 0.0, 24.19, 23.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:14:38.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:14:04
2025-11-17T17:14:38.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:14:38.670 [DEBUG] [Thread-58167] [transport.py] [_log()] starting thread (client mode): 0xd07573d0
2025-11-17T17:14:38.670 [DEBUG] [Thread-58167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:14:38.682 [DEBUG] [Thread-58167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:14:38.682 [INFO] [Thread-58167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] client lang: <none>
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] server lang: <none>
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] kex follows: False
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:14:38.685 [DEBUG] [Thread-58167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:14:38.686 [DEBUG] [Thread-58167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:14:38.686 [DEBUG] [Thread-58167] [transport.py] [_log()] Compression: none
2025-11-17T17:14:38.686 [DEBUG] [Thread-58167] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:14:38.700 [DEBUG] [Thread-58167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:14:38.701 [DEBUG] [Thread-58167] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:14:38.701 [DEBUG] [Thread-58167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:14:38.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:14:38.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:14:38.702 [DEBUG] [Thread-58167] [transport.py] [_log()] userauth is OK
2025-11-17T17:14:38.703 [DEBUG] [Thread-58167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:14:38.703 [DEBUG] [Thread-58167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:14:38.703 [DEBUG] [Thread-58167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:14:38.703 [DEBUG] [Thread-58167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:14:38.720 [INFO] [Thread-58167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:14:38.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:14:39.317 [DEBUG] [Thread-58167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:14:39.317 [DEBUG] [Thread-58167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:14:39.318 [DEBUG] [Thread-58167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:14:39.358 [DEBUG] [Thread-58167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:14:39.358 [DEBUG] [Thread-58167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:14:39.360 [DEBUG] [Thread-58167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:14:39.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:14:39.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:14:39.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:14:39.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:14:39.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:14:39.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:14:39.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:14:39.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:14:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:14:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.634774 -999.00  +23.00  13.99     20   -0.90 1 1 1 1 1   887    0 25.05 29.53 ----- 15.3 14.0 323.8 20.7 26.4 -24.5 26.5 -24.3 27.0 -25.4 27.3 -24.9
2025-11-17T17:14:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:14:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:14:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.634774
2025-11-17T17:14:39.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:14:39.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:14:39.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:14:39.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:14:39.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:14:39.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:14:04', tmtdew=29.0, humidity=13.79, cloud=0.0, wind=24.19, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:14:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:14:39.388 [DEBUG] [Thread-58167] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:14:39.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:14:39.490 [DEBUG] [Thread-58170] [transport.py] [_log()] starting thread (client mode): 0xd0784eb0
2025-11-17T17:14:39.490 [DEBUG] [Thread-58170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:14:39.504 [DEBUG] [Thread-58170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:14:39.504 [INFO] [Thread-58170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:14:39.512 [DEBUG] [Thread-58170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:14:39.512 [DEBUG] [Thread-58170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] client lang: <none>
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] server lang: <none>
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] kex follows: False
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] Compression: none
2025-11-17T17:14:39.513 [DEBUG] [Thread-58170] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:14:39.572 [DEBUG] [Thread-58170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:14:39.573 [DEBUG] [Thread-58170] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:14:39.573 [DEBUG] [Thread-58170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:14:39.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:14:39.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:14:39.629 [DEBUG] [Thread-58170] [transport.py] [_log()] userauth is OK
2025-11-17T17:14:39.629 [DEBUG] [Thread-58170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:14:39.629 [DEBUG] [Thread-58170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:14:39.629 [DEBUG] [Thread-58170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:14:39.629 [DEBUG] [Thread-58170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:14:39.648 [INFO] [Thread-58170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:14:39.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:14:39.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:14:40.479 [DEBUG] [Thread-58170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:14:40.479 [DEBUG] [Thread-58170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:14:40.527 [DEBUG] [Thread-58170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:14:40.527 [DEBUG] [Thread-58170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:14:40.536 [DEBUG] [Thread-58170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:14:40.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:14:40.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:14:40.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:14:40.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:14:40.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:14:40.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:14:40.570 [DEBUG] [Thread-58170] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:14:49.253 [DEBUG] [Thread-58172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:15:04.294 [DEBUG] [Thread-58173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:15:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:15:10.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:15:10.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:15:11.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 15, 8), 28.31, 14.75, 0.0, 20.01, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:15:11.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:15:08
2025-11-17T17:15:11.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:15:11.562 [DEBUG] [Thread-58174] [transport.py] [_log()] starting thread (client mode): 0xd0787c10
2025-11-17T17:15:11.562 [DEBUG] [Thread-58174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:15:11.581 [DEBUG] [Thread-58174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:15:11.582 [INFO] [Thread-58174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] client lang: <none>
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] server lang: <none>
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] kex follows: False
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] Compression: none
2025-11-17T17:15:11.591 [DEBUG] [Thread-58174] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:15:11.602 [DEBUG] [Thread-58174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:15:11.602 [DEBUG] [Thread-58174] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:15:11.602 [DEBUG] [Thread-58174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:15:11.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:15:11.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:15:11.603 [DEBUG] [Thread-58174] [transport.py] [_log()] userauth is OK
2025-11-17T17:15:11.603 [DEBUG] [Thread-58174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:15:11.603 [DEBUG] [Thread-58174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:15:11.603 [DEBUG] [Thread-58174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:15:11.603 [DEBUG] [Thread-58174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:15:11.618 [INFO] [Thread-58174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:15:11.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:15:12.230 [DEBUG] [Thread-58174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:15:12.230 [DEBUG] [Thread-58174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:15:12.230 [DEBUG] [Thread-58174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:15:12.271 [DEBUG] [Thread-58174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:15:12.271 [DEBUG] [Thread-58174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:15:12.273 [DEBUG] [Thread-58174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:15:12.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:15:12.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:15:12.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:15:12.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:15:12.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:15:12.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:15:12.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.635468 -999.00  +22.90  21.47     20   -0.80 1 1 1 1 1   887    0 24.88 16.99 ----- 21.0 21.5 310.5 27.5 26.4 -24.5 26.4 -24.4 26.9 -25.2 27.2 -24.8
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.635468
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:15:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:15:08', tmtdew=28.31, humidity=14.75, cloud=0.0, wind=20.01, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:15:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:15:12.297 [DEBUG] [Thread-58174] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:15:12.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:15:12.383 [DEBUG] [Thread-58177] [transport.py] [_log()] starting thread (client mode): 0xd3162e30
2025-11-17T17:15:12.383 [DEBUG] [Thread-58177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:15:12.398 [DEBUG] [Thread-58177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:15:12.398 [INFO] [Thread-58177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] client lang: <none>
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] server lang: <none>
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] kex follows: False
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] Compression: none
2025-11-17T17:15:12.406 [DEBUG] [Thread-58177] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:15:12.463 [DEBUG] [Thread-58177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:15:12.463 [DEBUG] [Thread-58177] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:15:12.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:15:12.463 [DEBUG] [Thread-58177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:15:12.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:15:12.524 [DEBUG] [Thread-58177] [transport.py] [_log()] userauth is OK
2025-11-17T17:15:12.524 [DEBUG] [Thread-58177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:15:12.524 [DEBUG] [Thread-58177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:15:12.524 [DEBUG] [Thread-58177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:15:12.524 [DEBUG] [Thread-58177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:15:12.538 [INFO] [Thread-58177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:15:12.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:15:12.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:15:13.442 [DEBUG] [Thread-58177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:15:13.442 [DEBUG] [Thread-58177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:15:13.490 [DEBUG] [Thread-58177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:15:13.490 [DEBUG] [Thread-58177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:15:13.498 [DEBUG] [Thread-58177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:15:13.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:15:13.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:15:13.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:15:13.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:15:13.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:15:13.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:15:13.529 [DEBUG] [Thread-58177] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:15:19.324 [DEBUG] [Thread-58179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:15:23.896 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:15:23.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:15:24.386 [DEBUG] [Thread-58180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:15:34.369 [DEBUG] [Thread-58181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:15:43.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:15:43.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:15:43.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:15:44.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 15, 40), 28.3, 14.77, 0.0, 24.31, 22.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:15:44.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:15:40
2025-11-17T17:15:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:15:44.483 [DEBUG] [Thread-58182] [transport.py] [_log()] starting thread (client mode): 0xd0723280
2025-11-17T17:15:44.483 [DEBUG] [Thread-58182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:15:44.504 [DEBUG] [Thread-58182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:15:44.504 [INFO] [Thread-58182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:15:44.505 [DEBUG] [Thread-58182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:15:44.505 [DEBUG] [Thread-58182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:15:44.505 [DEBUG] [Thread-58182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:15:44.505 [DEBUG] [Thread-58182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:15:44.505 [DEBUG] [Thread-58182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:15:44.505 [DEBUG] [Thread-58182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] client lang: <none>
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] server lang: <none>
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] kex follows: False
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] Compression: none
2025-11-17T17:15:44.506 [DEBUG] [Thread-58182] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:15:44.514 [DEBUG] [Thread-58182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:15:44.515 [DEBUG] [Thread-58182] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:15:44.515 [DEBUG] [Thread-58182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:15:44.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:15:44.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:15:44.517 [DEBUG] [Thread-58182] [transport.py] [_log()] userauth is OK
2025-11-17T17:15:44.517 [DEBUG] [Thread-58182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:15:44.517 [DEBUG] [Thread-58182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:15:44.517 [DEBUG] [Thread-58182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:15:44.517 [DEBUG] [Thread-58182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:15:44.534 [INFO] [Thread-58182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:15:44.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:15:45.112 [DEBUG] [Thread-58182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:15:45.113 [DEBUG] [Thread-58182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:15:45.113 [DEBUG] [Thread-58182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:15:45.153 [DEBUG] [Thread-58182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:15:45.153 [DEBUG] [Thread-58182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:15:45.155 [DEBUG] [Thread-58182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:15:45.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:15:45.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:15:45.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:15:45.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:15:45.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:15:45.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:15:45.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:15:45.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:15:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:15:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.635815 -999.00  +23.00  27.99     20   -1.00 1 1 1 1 1   887    0 24.42 11.65 ----- 24.1 28.0 287.2 30.4 26.2 -25.7 26.3 -25.2 26.7 -26.5 27.0 -26.1
2025-11-17T17:15:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:15:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:15:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.635815
2025-11-17T17:15:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:15:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:15:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:15:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:15:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:15:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:15:40', tmtdew=28.3, humidity=14.77, cloud=0.0, wind=24.31, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:15:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:15:45.173 [DEBUG] [Thread-58182] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:15:45.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:15:45.267 [DEBUG] [Thread-58185] [transport.py] [_log()] starting thread (client mode): 0xd0721c00
2025-11-17T17:15:45.267 [DEBUG] [Thread-58185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:15:45.281 [DEBUG] [Thread-58185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:15:45.281 [INFO] [Thread-58185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:15:45.289 [DEBUG] [Thread-58185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:15:45.289 [DEBUG] [Thread-58185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:15:45.289 [DEBUG] [Thread-58185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:15:45.289 [DEBUG] [Thread-58185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:15:45.289 [DEBUG] [Thread-58185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:15:45.289 [DEBUG] [Thread-58185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:15:45.290 [DEBUG] [Thread-58185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:15:45.290 [DEBUG] [Thread-58185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:15:45.290 [DEBUG] [Thread-58185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:15:45.290 [DEBUG] [Thread-58185] [transport.py] [_log()] client lang: <none>
2025-11-17T17:15:45.290 [DEBUG] [Thread-58185] [transport.py] [_log()] server lang: <none>
2025-11-17T17:15:45.290 [DEBUG] [Thread-58185] [transport.py] [_log()] kex follows: False
2025-11-17T17:15:45.290 [DEBUG] [Thread-58185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:15:45.290 [DEBUG] [Thread-58185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:15:45.291 [DEBUG] [Thread-58185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:15:45.291 [DEBUG] [Thread-58185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:15:45.291 [DEBUG] [Thread-58185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:15:45.291 [DEBUG] [Thread-58185] [transport.py] [_log()] Compression: none
2025-11-17T17:15:45.291 [DEBUG] [Thread-58185] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:15:45.352 [DEBUG] [Thread-58185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:15:45.352 [DEBUG] [Thread-58185] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:15:45.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:15:45.353 [DEBUG] [Thread-58185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:15:45.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:15:45.408 [DEBUG] [Thread-58185] [transport.py] [_log()] userauth is OK
2025-11-17T17:15:45.408 [DEBUG] [Thread-58185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:15:45.408 [DEBUG] [Thread-58185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:15:45.408 [DEBUG] [Thread-58185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:15:45.409 [DEBUG] [Thread-58185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:15:45.428 [INFO] [Thread-58185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:15:45.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:15:45.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:15:46.256 [DEBUG] [Thread-58185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:15:46.256 [DEBUG] [Thread-58185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:15:46.304 [DEBUG] [Thread-58185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:15:46.304 [DEBUG] [Thread-58185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:15:46.313 [DEBUG] [Thread-58185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:15:46.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:15:46.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:15:46.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:15:46.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:15:46.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:15:46.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:15:46.347 [DEBUG] [Thread-58185] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:15:49.407 [DEBUG] [Thread-58187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:16:04.441 [DEBUG] [Thread-58188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:16:16.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:16:16.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:16:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:16:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 16, 12), 28.37, 14.68, 0.0, 26.77, 22.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:16:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:16:12
2025-11-17T17:16:17.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:16:17.299 [DEBUG] [Thread-58189] [transport.py] [_log()] starting thread (client mode): 0xd0722b60
2025-11-17T17:16:17.299 [DEBUG] [Thread-58189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:16:17.319 [DEBUG] [Thread-58189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:16:17.319 [INFO] [Thread-58189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:16:17.322 [DEBUG] [Thread-58189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] client lang: <none>
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] server lang: <none>
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] kex follows: False
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] Compression: none
2025-11-17T17:16:17.323 [DEBUG] [Thread-58189] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:16:17.340 [DEBUG] [Thread-58189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:16:17.341 [DEBUG] [Thread-58189] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:16:17.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:16:17.342 [DEBUG] [Thread-58189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:16:17.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:16:17.344 [DEBUG] [Thread-58189] [transport.py] [_log()] userauth is OK
2025-11-17T17:16:17.344 [DEBUG] [Thread-58189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:16:17.344 [DEBUG] [Thread-58189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:16:17.344 [DEBUG] [Thread-58189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:16:17.344 [DEBUG] [Thread-58189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:16:17.369 [INFO] [Thread-58189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:16:17.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:16:18.004 [DEBUG] [Thread-58189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:16:18.004 [DEBUG] [Thread-58189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:16:18.004 [DEBUG] [Thread-58189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:16:18.045 [DEBUG] [Thread-58189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:16:18.046 [DEBUG] [Thread-58189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:16:18.048 [DEBUG] [Thread-58189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:16:18.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:16:18.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:16:18.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:16:18.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:16:18.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:16:18.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:16:18.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:16:18.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:16:18.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:16:18.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.635815 -999.00  +23.00  27.99     20   -1.00 1 1 1 1 1   887    0 24.42 11.65 ----- 24.1 28.0 287.2 30.4 26.2 -25.7 26.3 -25.2 26.7 -26.5 27.0 -26.1
2025-11-17T17:16:18.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:16:18.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:16:18.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.635815
2025-11-17T17:16:18.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:16:18.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:16:18.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:16:18.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:16:18.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:16:18.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:16:12', tmtdew=28.37, humidity=14.68, cloud=0.0, wind=26.77, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:15:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:16:18.074 [DEBUG] [Thread-58189] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:16:18.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:16:18.170 [DEBUG] [Thread-58192] [transport.py] [_log()] starting thread (client mode): 0xd0720580
2025-11-17T17:16:18.171 [DEBUG] [Thread-58192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:16:18.190 [DEBUG] [Thread-58192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:16:18.190 [INFO] [Thread-58192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:16:18.200 [DEBUG] [Thread-58192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:16:18.200 [DEBUG] [Thread-58192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:16:18.200 [DEBUG] [Thread-58192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:16:18.200 [DEBUG] [Thread-58192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:16:18.200 [DEBUG] [Thread-58192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:16:18.200 [DEBUG] [Thread-58192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] client lang: <none>
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] server lang: <none>
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] kex follows: False
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] Compression: none
2025-11-17T17:16:18.201 [DEBUG] [Thread-58192] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:16:18.255 [DEBUG] [Thread-58192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:16:18.256 [DEBUG] [Thread-58192] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:16:18.256 [DEBUG] [Thread-58192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:16:18.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:16:18.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:16:18.312 [DEBUG] [Thread-58192] [transport.py] [_log()] userauth is OK
2025-11-17T17:16:18.312 [DEBUG] [Thread-58192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:16:18.312 [DEBUG] [Thread-58192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:16:18.312 [DEBUG] [Thread-58192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:16:18.312 [DEBUG] [Thread-58192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:16:18.331 [INFO] [Thread-58192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:16:18.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:16:18.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:16:19.154 [DEBUG] [Thread-58192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:16:19.154 [DEBUG] [Thread-58192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:16:19.202 [DEBUG] [Thread-58192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:16:19.202 [DEBUG] [Thread-58192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:16:19.211 [DEBUG] [Thread-58192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:16:19.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:16:19.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:16:19.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:16:19.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:16:19.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:16:19.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:16:19.246 [DEBUG] [Thread-58192] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:16:19.467 [DEBUG] [Thread-58194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:16:24.038 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:16:24.039 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:16:24.439 [DEBUG] [Thread-58195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:16:34.510 [DEBUG] [Thread-58196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:16:49.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:16:49.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:16:49.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:16:49.541 [DEBUG] [Thread-58197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:16:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 16, 44), 28.08, 14.73, 0.0, 27.15, 22.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:16:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:16:44
2025-11-17T17:16:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:16:50.188 [DEBUG] [Thread-58198] [transport.py] [_log()] starting thread (client mode): 0xd3160e80
2025-11-17T17:16:50.188 [DEBUG] [Thread-58198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:16:50.208 [DEBUG] [Thread-58198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:16:50.208 [INFO] [Thread-58198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] client lang: <none>
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] server lang: <none>
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] kex follows: False
2025-11-17T17:16:50.211 [DEBUG] [Thread-58198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:16:50.212 [DEBUG] [Thread-58198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:16:50.212 [DEBUG] [Thread-58198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:16:50.212 [DEBUG] [Thread-58198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:16:50.212 [DEBUG] [Thread-58198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:16:50.212 [DEBUG] [Thread-58198] [transport.py] [_log()] Compression: none
2025-11-17T17:16:50.212 [DEBUG] [Thread-58198] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:16:50.228 [DEBUG] [Thread-58198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:16:50.228 [DEBUG] [Thread-58198] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:16:50.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:16:50.229 [DEBUG] [Thread-58198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:16:50.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:16:50.231 [DEBUG] [Thread-58198] [transport.py] [_log()] userauth is OK
2025-11-17T17:16:50.231 [DEBUG] [Thread-58198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:16:50.231 [DEBUG] [Thread-58198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:16:50.232 [DEBUG] [Thread-58198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:16:50.232 [DEBUG] [Thread-58198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:16:50.249 [INFO] [Thread-58198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:16:50.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:16:50.904 [DEBUG] [Thread-58198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:16:50.904 [DEBUG] [Thread-58198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:16:50.904 [DEBUG] [Thread-58198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:16:50.945 [DEBUG] [Thread-58198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:16:50.946 [DEBUG] [Thread-58198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:16:50.948 [DEBUG] [Thread-58198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:16:50.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:16:50.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:16:50.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:16:50.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:16:50.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:16:50.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:16:50.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:16:50.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:16:50.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:16:50.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.636163 -999.00  +22.70  17.11     20   -1.00 1 1 1 1 1   887    0 24.22 6.15 ----- 19.0 17.1 291.6 27.5 26.2 -25.0 26.2 -24.2 26.4 -26.3 26.9 -24.7
2025-11-17T17:16:50.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:16:50.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:16:50.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.636163
2025-11-17T17:16:50.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:16:50.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:16:50.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:16:50.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:16:50.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:16:50.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:16:44', tmtdew=28.08, humidity=14.73, cloud=0.0, wind=27.15, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:16:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:16:50.972 [DEBUG] [Thread-58198] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:16:51.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:16:51.070 [DEBUG] [Thread-58201] [transport.py] [_log()] starting thread (client mode): 0xd0721cf0
2025-11-17T17:16:51.070 [DEBUG] [Thread-58201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:16:51.084 [DEBUG] [Thread-58201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:16:51.085 [INFO] [Thread-58201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:16:51.092 [DEBUG] [Thread-58201] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:16:51.092 [DEBUG] [Thread-58201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:16:51.092 [DEBUG] [Thread-58201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:16:51.093 [DEBUG] [Thread-58201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:16:51.093 [DEBUG] [Thread-58201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:16:51.093 [DEBUG] [Thread-58201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:16:51.093 [DEBUG] [Thread-58201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:16:51.093 [DEBUG] [Thread-58201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:16:51.093 [DEBUG] [Thread-58201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:16:51.093 [DEBUG] [Thread-58201] [transport.py] [_log()] client lang: <none>
2025-11-17T17:16:51.093 [DEBUG] [Thread-58201] [transport.py] [_log()] server lang: <none>
2025-11-17T17:16:51.094 [DEBUG] [Thread-58201] [transport.py] [_log()] kex follows: False
2025-11-17T17:16:51.094 [DEBUG] [Thread-58201] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:16:51.094 [DEBUG] [Thread-58201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:16:51.094 [DEBUG] [Thread-58201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:16:51.094 [DEBUG] [Thread-58201] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:16:51.094 [DEBUG] [Thread-58201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:16:51.094 [DEBUG] [Thread-58201] [transport.py] [_log()] Compression: none
2025-11-17T17:16:51.095 [DEBUG] [Thread-58201] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:16:51.157 [DEBUG] [Thread-58201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:16:51.158 [DEBUG] [Thread-58201] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:16:51.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:16:51.160 [DEBUG] [Thread-58201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:16:51.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:16:51.216 [DEBUG] [Thread-58201] [transport.py] [_log()] userauth is OK
2025-11-17T17:16:51.216 [DEBUG] [Thread-58201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:16:51.216 [DEBUG] [Thread-58201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:16:51.217 [DEBUG] [Thread-58201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:16:51.217 [DEBUG] [Thread-58201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:16:51.237 [INFO] [Thread-58201] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:16:51.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:16:51.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:16:52.095 [DEBUG] [Thread-58201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:16:52.095 [DEBUG] [Thread-58201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:16:52.142 [DEBUG] [Thread-58201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:16:52.142 [DEBUG] [Thread-58201] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:16:52.151 [DEBUG] [Thread-58201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:16:52.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:16:52.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:16:52.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:16:52.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:16:52.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:16:52.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:16:52.184 [DEBUG] [Thread-58201] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:17:04.570 [DEBUG] [Thread-58203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:17:19.618 [DEBUG] [Thread-58204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:17:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:17:22.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:17:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:17:22.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 17, 16), 28.04, 14.77, 0.0, 25.8, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:17:22.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:17:16
2025-11-17T17:17:22.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:17:23.136 [DEBUG] [Thread-58205] [transport.py] [_log()] starting thread (client mode): 0xd3160ca0
2025-11-17T17:17:23.136 [DEBUG] [Thread-58205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:17:23.147 [DEBUG] [Thread-58205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:17:23.147 [INFO] [Thread-58205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:17:23.150 [DEBUG] [Thread-58205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:17:23.150 [DEBUG] [Thread-58205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] client lang: <none>
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] server lang: <none>
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] kex follows: False
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] Compression: none
2025-11-17T17:17:23.151 [DEBUG] [Thread-58205] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:17:23.165 [DEBUG] [Thread-58205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:17:23.165 [DEBUG] [Thread-58205] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:17:23.166 [DEBUG] [Thread-58205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:17:23.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:17:23.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:17:23.167 [DEBUG] [Thread-58205] [transport.py] [_log()] userauth is OK
2025-11-17T17:17:23.167 [DEBUG] [Thread-58205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:17:23.167 [DEBUG] [Thread-58205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:17:23.167 [DEBUG] [Thread-58205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:17:23.168 [DEBUG] [Thread-58205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:17:23.196 [INFO] [Thread-58205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:17:23.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:17:23.803 [DEBUG] [Thread-58205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:17:23.803 [DEBUG] [Thread-58205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:17:23.803 [DEBUG] [Thread-58205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:17:23.843 [DEBUG] [Thread-58205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:17:23.844 [DEBUG] [Thread-58205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:17:23.846 [DEBUG] [Thread-58205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:17:23.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:17:23.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:17:23.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:17:23.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:17:23.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:17:23.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:17:23.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:17:23.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:17:23.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:17:23.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.636510 -999.00  +22.60  17.28     20   -1.00 1 1 1 1 1   887    0 24.37 -0.15 ----- 19.6 17.3 290.4 29.2 26.2 -24.2 26.2 -23.7 26.4 -24.5 26.9 -23.8
2025-11-17T17:17:23.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:17:23.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:17:23.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.636510
2025-11-17T17:17:23.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:17:23.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:17:23.871 [DEBUG] [Thread-58205] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:17:23.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:17:23.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:17:23.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:17:23.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:17:16', tmtdew=28.04, humidity=14.77, cloud=0.0, wind=25.8, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:16:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:17:23.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:17:23.967 [DEBUG] [Thread-58208] [transport.py] [_log()] starting thread (client mode): 0xd0723940
2025-11-17T17:17:23.968 [DEBUG] [Thread-58208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:17:23.986 [DEBUG] [Thread-58208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:17:23.986 [INFO] [Thread-58208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:17:23.994 [DEBUG] [Thread-58208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:17:23.994 [DEBUG] [Thread-58208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:17:23.994 [DEBUG] [Thread-58208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:17:23.994 [DEBUG] [Thread-58208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:17:23.994 [DEBUG] [Thread-58208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] client lang: <none>
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] server lang: <none>
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] kex follows: False
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:17:23.995 [DEBUG] [Thread-58208] [transport.py] [_log()] Compression: none
2025-11-17T17:17:23.996 [DEBUG] [Thread-58208] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:17:24.053 [DEBUG] [Thread-58208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:17:24.054 [DEBUG] [Thread-58208] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:17:24.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:17:24.055 [DEBUG] [Thread-58208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:17:24.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:17:24.111 [DEBUG] [Thread-58208] [transport.py] [_log()] userauth is OK
2025-11-17T17:17:24.112 [DEBUG] [Thread-58208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:17:24.112 [DEBUG] [Thread-58208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:17:24.112 [DEBUG] [Thread-58208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:17:24.112 [DEBUG] [Thread-58208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:17:24.133 [INFO] [Thread-58208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:17:24.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:17:24.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:17:24.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:17:24.181 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:17:24.496 [DEBUG] [Thread-58210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:17:24.980 [DEBUG] [Thread-58208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:17:24.980 [DEBUG] [Thread-58208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:17:25.028 [DEBUG] [Thread-58208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:17:25.028 [DEBUG] [Thread-58208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:17:25.038 [DEBUG] [Thread-58208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:17:25.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:17:25.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:17:25.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:17:25.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:17:25.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:17:25.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:17:25.073 [DEBUG] [Thread-58208] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:17:34.651 [DEBUG] [Thread-58211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:17:49.691 [DEBUG] [Thread-58212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:17:55.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:17:55.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:17:55.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:17:55.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 17, 47), 27.96, 14.85, 0.0, 24.05, 22.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:17:55.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:17:47
2025-11-17T17:17:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:17:56.012 [DEBUG] [Thread-58213] [transport.py] [_log()] starting thread (client mode): 0xd0755960
2025-11-17T17:17:56.012 [DEBUG] [Thread-58213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:17:56.033 [DEBUG] [Thread-58213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:17:56.033 [INFO] [Thread-58213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:17:56.036 [DEBUG] [Thread-58213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:17:56.036 [DEBUG] [Thread-58213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] client lang: <none>
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] server lang: <none>
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] kex follows: False
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:17:56.037 [DEBUG] [Thread-58213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:17:56.038 [DEBUG] [Thread-58213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:17:56.038 [DEBUG] [Thread-58213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:17:56.038 [DEBUG] [Thread-58213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:17:56.038 [DEBUG] [Thread-58213] [transport.py] [_log()] Compression: none
2025-11-17T17:17:56.038 [DEBUG] [Thread-58213] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:17:56.058 [DEBUG] [Thread-58213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:17:56.059 [DEBUG] [Thread-58213] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:17:56.059 [DEBUG] [Thread-58213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:17:56.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:17:56.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:17:56.061 [DEBUG] [Thread-58213] [transport.py] [_log()] userauth is OK
2025-11-17T17:17:56.061 [DEBUG] [Thread-58213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:17:56.061 [DEBUG] [Thread-58213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:17:56.061 [DEBUG] [Thread-58213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:17:56.061 [DEBUG] [Thread-58213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:17:56.097 [INFO] [Thread-58213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:17:56.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:17:56.697 [DEBUG] [Thread-58213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:17:56.697 [DEBUG] [Thread-58213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:17:56.698 [DEBUG] [Thread-58213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:17:56.738 [DEBUG] [Thread-58213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:17:56.739 [DEBUG] [Thread-58213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:17:56.741 [DEBUG] [Thread-58213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:17:56.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:17:56.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:17:56.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:17:56.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:17:56.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:17:56.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:17:56.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:17:56.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:17:56.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:17:56.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.636857 -999.00  +22.80  24.03     20   -0.90 1 1 1 1 1   887    0 23.74 -6.48 ----- 24.1 24.0 292.8 26.5 26.2 -24.6 26.2 -24.5 26.6 -23.0 26.9 -24.5
2025-11-17T17:17:56.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:17:56.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:17:56.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.636857
2025-11-17T17:17:56.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:17:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:17:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:17:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:17:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:17:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:17:47', tmtdew=27.96, humidity=14.85, cloud=0.0, wind=24.05, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:17:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:17:56.766 [DEBUG] [Thread-58213] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:17:56.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:17:56.863 [DEBUG] [Thread-58216] [transport.py] [_log()] starting thread (client mode): 0xd07878b0
2025-11-17T17:17:56.863 [DEBUG] [Thread-58216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:17:56.877 [DEBUG] [Thread-58216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:17:56.878 [INFO] [Thread-58216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:17:56.885 [DEBUG] [Thread-58216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:17:56.885 [DEBUG] [Thread-58216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:17:56.885 [DEBUG] [Thread-58216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] client lang: <none>
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] server lang: <none>
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] kex follows: False
2025-11-17T17:17:56.886 [DEBUG] [Thread-58216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:17:56.887 [DEBUG] [Thread-58216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:17:56.887 [DEBUG] [Thread-58216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:17:56.887 [DEBUG] [Thread-58216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:17:56.887 [DEBUG] [Thread-58216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:17:56.887 [DEBUG] [Thread-58216] [transport.py] [_log()] Compression: none
2025-11-17T17:17:56.887 [DEBUG] [Thread-58216] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:17:56.944 [DEBUG] [Thread-58216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:17:56.944 [DEBUG] [Thread-58216] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:17:56.945 [DEBUG] [Thread-58216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:17:56.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:17:56.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:17:57.000 [DEBUG] [Thread-58216] [transport.py] [_log()] userauth is OK
2025-11-17T17:17:57.000 [DEBUG] [Thread-58216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:17:57.000 [DEBUG] [Thread-58216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:17:57.000 [DEBUG] [Thread-58216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:17:57.001 [DEBUG] [Thread-58216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:17:57.021 [INFO] [Thread-58216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:17:57.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:17:57.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:17:57.885 [DEBUG] [Thread-58216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:17:57.885 [DEBUG] [Thread-58216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:17:57.933 [DEBUG] [Thread-58216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:17:57.933 [DEBUG] [Thread-58216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:17:57.942 [DEBUG] [Thread-58216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:17:57.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:17:57.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:17:57.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:17:57.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:17:57.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:17:57.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:17:57.977 [DEBUG] [Thread-58216] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:18:04.721 [DEBUG] [Thread-58218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:18:19.764 [DEBUG] [Thread-58219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:18:24.324 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:18:24.324 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:18:24.542 [DEBUG] [Thread-58220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:18:27.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:18:28.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:18:28.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:18:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 18, 20), 27.92, 14.9, 0.0, 25.51, 22.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:18:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:18:20
2025-11-17T17:18:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:18:28.919 [DEBUG] [Thread-58221] [transport.py] [_log()] starting thread (client mode): 0xd3160880
2025-11-17T17:18:28.919 [DEBUG] [Thread-58221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:18:28.938 [DEBUG] [Thread-58221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:18:28.938 [INFO] [Thread-58221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:18:28.939 [DEBUG] [Thread-58221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] client lang: <none>
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] server lang: <none>
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] kex follows: False
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] Compression: none
2025-11-17T17:18:28.940 [DEBUG] [Thread-58221] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:18:28.947 [DEBUG] [Thread-58221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:18:28.948 [DEBUG] [Thread-58221] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:18:28.948 [DEBUG] [Thread-58221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:18:28.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:18:28.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:18:28.949 [DEBUG] [Thread-58221] [transport.py] [_log()] userauth is OK
2025-11-17T17:18:28.950 [DEBUG] [Thread-58221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:18:28.950 [DEBUG] [Thread-58221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:18:28.950 [DEBUG] [Thread-58221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:18:28.950 [DEBUG] [Thread-58221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:18:28.972 [INFO] [Thread-58221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:18:28.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:18:29.623 [DEBUG] [Thread-58221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:18:29.623 [DEBUG] [Thread-58221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:18:29.623 [DEBUG] [Thread-58221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:18:29.663 [DEBUG] [Thread-58221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:18:29.663 [DEBUG] [Thread-58221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:18:29.666 [DEBUG] [Thread-58221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:18:29.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:18:29.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:18:29.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:18:29.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:18:29.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:18:29.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:18:29.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:18:29.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:18:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:18:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.637204 -999.00  +22.70  23.24     20   -1.00 1 1 1 1 1   887    0 24.05 -12.29 ----- 21.4 23.2 292.5 27.0 26.2 -23.9 26.3 -23.8 26.6 -25.4 27.1 -23.8
2025-11-17T17:18:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:18:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:18:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.637204
2025-11-17T17:18:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:18:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:18:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:18:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:18:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:18:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:18:20', tmtdew=27.92, humidity=14.9, cloud=0.0, wind=25.51, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:17:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:18:29.691 [DEBUG] [Thread-58221] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:18:29.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:18:29.787 [DEBUG] [Thread-58224] [transport.py] [_log()] starting thread (client mode): 0xd0755870
2025-11-17T17:18:29.787 [DEBUG] [Thread-58224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:18:29.802 [DEBUG] [Thread-58224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:18:29.802 [INFO] [Thread-58224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:18:29.810 [DEBUG] [Thread-58224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:18:29.810 [DEBUG] [Thread-58224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:18:29.810 [DEBUG] [Thread-58224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:18:29.810 [DEBUG] [Thread-58224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:18:29.810 [DEBUG] [Thread-58224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:18:29.810 [DEBUG] [Thread-58224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:18:29.810 [DEBUG] [Thread-58224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] client lang: <none>
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] server lang: <none>
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] kex follows: False
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] Compression: none
2025-11-17T17:18:29.811 [DEBUG] [Thread-58224] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:18:29.867 [DEBUG] [Thread-58224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:18:29.868 [DEBUG] [Thread-58224] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:18:29.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:18:29.868 [DEBUG] [Thread-58224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:18:29.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:18:29.925 [DEBUG] [Thread-58224] [transport.py] [_log()] userauth is OK
2025-11-17T17:18:29.926 [DEBUG] [Thread-58224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:18:29.926 [DEBUG] [Thread-58224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:18:29.926 [DEBUG] [Thread-58224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:18:29.926 [DEBUG] [Thread-58224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:18:29.946 [INFO] [Thread-58224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:18:29.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:18:29.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:18:30.822 [DEBUG] [Thread-58224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:18:30.822 [DEBUG] [Thread-58224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:18:30.869 [DEBUG] [Thread-58224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:18:30.870 [DEBUG] [Thread-58224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:18:30.879 [DEBUG] [Thread-58224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:18:30.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:18:30.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:18:30.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:18:30.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:18:30.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:18:30.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:18:30.914 [DEBUG] [Thread-58224] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:18:34.792 [DEBUG] [Thread-58226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:18:49.844 [DEBUG] [Thread-58227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:19:00.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:19:00.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:19:00.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:19:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 18, 52), 28.56, 14.18, 0.0, 19.16, 23.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:19:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:18:52
2025-11-17T17:19:01.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:19:01.917 [DEBUG] [Thread-58228] [transport.py] [_log()] starting thread (client mode): 0xd0757700
2025-11-17T17:19:01.917 [DEBUG] [Thread-58228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:19:01.938 [DEBUG] [Thread-58228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:19:01.938 [INFO] [Thread-58228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] client lang: <none>
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] server lang: <none>
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] kex follows: False
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] Compression: none
2025-11-17T17:19:01.942 [DEBUG] [Thread-58228] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:19:01.957 [DEBUG] [Thread-58228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:19:01.957 [DEBUG] [Thread-58228] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:19:01.958 [DEBUG] [Thread-58228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:19:01.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:19:01.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:19:01.958 [DEBUG] [Thread-58228] [transport.py] [_log()] userauth is OK
2025-11-17T17:19:01.958 [DEBUG] [Thread-58228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:19:01.958 [DEBUG] [Thread-58228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:19:01.958 [DEBUG] [Thread-58228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:19:01.959 [DEBUG] [Thread-58228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:19:01.975 [INFO] [Thread-58228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:19:01.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:19:02.605 [DEBUG] [Thread-58228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:19:02.605 [DEBUG] [Thread-58228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:19:02.605 [DEBUG] [Thread-58228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:19:02.646 [DEBUG] [Thread-58228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:19:02.646 [DEBUG] [Thread-58228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:19:02.648 [DEBUG] [Thread-58228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:19:02.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:19:02.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:19:02.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:19:02.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:19:02.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:19:02.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:19:02.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.637552 -999.00  +22.90  22.15     20   -0.90 1 1 1 1 1   887    0 23.90 -17.59 ----- 21.9 22.1 297.4 32.8 26.3 -23.7 26.4 -23.7 26.8 -22.8 27.2 -23.8
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.637552
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:19:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:18:52', tmtdew=28.56, humidity=14.18, cloud=0.0, wind=19.16, temperature=23.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:18:04.493', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:19:02.668 [DEBUG] [Thread-58228] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:19:02.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:19:02.753 [DEBUG] [Thread-58231] [transport.py] [_log()] starting thread (client mode): 0xd0756680
2025-11-17T17:19:02.753 [DEBUG] [Thread-58231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:19:02.769 [DEBUG] [Thread-58231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:19:02.769 [INFO] [Thread-58231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] client lang: <none>
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] server lang: <none>
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] kex follows: False
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] Compression: none
2025-11-17T17:19:02.776 [DEBUG] [Thread-58231] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:19:02.838 [DEBUG] [Thread-58231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:19:02.838 [DEBUG] [Thread-58231] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:19:02.838 [DEBUG] [Thread-58231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:19:02.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:19:02.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:19:02.898 [DEBUG] [Thread-58231] [transport.py] [_log()] userauth is OK
2025-11-17T17:19:02.899 [DEBUG] [Thread-58231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:19:02.899 [DEBUG] [Thread-58231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:19:02.899 [DEBUG] [Thread-58231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:19:02.899 [DEBUG] [Thread-58231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:19:02.913 [INFO] [Thread-58231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:19:02.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:19:02.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:19:03.753 [DEBUG] [Thread-58231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:19:03.754 [DEBUG] [Thread-58231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:19:03.801 [DEBUG] [Thread-58231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:19:03.801 [DEBUG] [Thread-58231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:19:03.809 [DEBUG] [Thread-58231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:19:03.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:19:03.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:19: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
2025-11-17T17:19:03.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:19:03.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:19:03.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:19:03.840 [DEBUG] [Thread-58231] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:19:04.875 [DEBUG] [Thread-58233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:19:19.907 [DEBUG] [Thread-58234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:19:24.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:19:24.466 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:19:24.589 [DEBUG] [Thread-58235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:19:33.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:19:33.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:19:33.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:19:34.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 19, 24), 28.49, 14.23, 0.0, 20.08, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:19:34.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:19:24
2025-11-17T17:19:34.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:19:34.795 [DEBUG] [Thread-58236] [transport.py] [_log()] starting thread (client mode): 0xd0755780
2025-11-17T17:19:34.795 [DEBUG] [Thread-58236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:19:34.815 [DEBUG] [Thread-58236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:19:34.815 [INFO] [Thread-58236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] client lang: <none>
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] server lang: <none>
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] kex follows: False
2025-11-17T17:19:34.816 [DEBUG] [Thread-58236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:19:34.817 [DEBUG] [Thread-58236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:19:34.817 [DEBUG] [Thread-58236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:19:34.817 [DEBUG] [Thread-58236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:19:34.817 [DEBUG] [Thread-58236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:19:34.817 [DEBUG] [Thread-58236] [transport.py] [_log()] Compression: none
2025-11-17T17:19:34.817 [DEBUG] [Thread-58236] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:19:34.824 [DEBUG] [Thread-58236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:19:34.825 [DEBUG] [Thread-58236] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:19:34.825 [DEBUG] [Thread-58236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:19:34.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:19:34.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:19:34.826 [DEBUG] [Thread-58236] [transport.py] [_log()] userauth is OK
2025-11-17T17:19:34.827 [DEBUG] [Thread-58236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:19:34.827 [DEBUG] [Thread-58236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:19:34.827 [DEBUG] [Thread-58236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:19:34.827 [DEBUG] [Thread-58236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:19:34.839 [INFO] [Thread-58236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:19:34.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:19:34.941 [DEBUG] [Thread-58238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:19:35.477 [DEBUG] [Thread-58236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:19:35.477 [DEBUG] [Thread-58236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:19:35.477 [DEBUG] [Thread-58236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:19:35.518 [DEBUG] [Thread-58236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:19:35.518 [DEBUG] [Thread-58236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:19:35.521 [DEBUG] [Thread-58236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:19:35.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:19:35.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:19:35.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:19:35.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:19:35.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:19:35.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:19:35.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:19:35.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:19:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:19:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.637899 -999.00  +23.00  17.25     20   -0.90 1 1 1 1 1   887    0 23.69 -21.04 ----- 16.6 17.2 303.4 25.7 26.4 -23.8 26.5 -23.8 27.0 -22.5 27.3 -23.5
2025-11-17T17:19:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:19:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:19:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.637899
2025-11-17T17:19:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:19:35.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:19:35.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:19:35.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:19:35.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:19:35.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:19:24', tmtdew=28.49, humidity=14.23, cloud=0.0, wind=20.08, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:18:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:19:35.546 [DEBUG] [Thread-58236] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:19:35.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:19:35.645 [DEBUG] [Thread-58240] [transport.py] [_log()] starting thread (client mode): 0xd0784520
2025-11-17T17:19:35.646 [DEBUG] [Thread-58240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:19:35.660 [DEBUG] [Thread-58240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:19:35.660 [INFO] [Thread-58240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:19:35.668 [DEBUG] [Thread-58240] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:19:35.668 [DEBUG] [Thread-58240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:19:35.668 [DEBUG] [Thread-58240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:19:35.668 [DEBUG] [Thread-58240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:19:35.668 [DEBUG] [Thread-58240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:19:35.668 [DEBUG] [Thread-58240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] client lang: <none>
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] server lang: <none>
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] kex follows: False
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] Compression: none
2025-11-17T17:19:35.669 [DEBUG] [Thread-58240] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:19:35.726 [DEBUG] [Thread-58240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:19:35.727 [DEBUG] [Thread-58240] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:19:35.727 [DEBUG] [Thread-58240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:19:35.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:19:35.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:19:35.785 [DEBUG] [Thread-58240] [transport.py] [_log()] userauth is OK
2025-11-17T17:19:35.785 [DEBUG] [Thread-58240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:19:35.785 [DEBUG] [Thread-58240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:19:35.785 [DEBUG] [Thread-58240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:19:35.785 [DEBUG] [Thread-58240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:19:35.805 [INFO] [Thread-58240] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:19:35.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:19:35.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:19:36.718 [DEBUG] [Thread-58240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:19:36.719 [DEBUG] [Thread-58240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:19:36.767 [DEBUG] [Thread-58240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:19:36.767 [DEBUG] [Thread-58240] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:19:36.776 [DEBUG] [Thread-58240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:19:36.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:19:36.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:19:36.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:19:36.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:19:36.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:19:36.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:19:36.814 [DEBUG] [Thread-58240] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:19:49.973 [DEBUG] [Thread-58242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:20:05.014 [DEBUG] [Thread-58243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:20:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:20:06.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:20:06.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:20:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 19, 55), 28.55, 14.36, 0.0, 23.96, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:20:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:19:55
2025-11-17T17:20:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:20:07.754 [DEBUG] [Thread-58244] [transport.py] [_log()] starting thread (client mode): 0xd0723ca0
2025-11-17T17:20:07.754 [DEBUG] [Thread-58244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:20:07.775 [DEBUG] [Thread-58244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:20:07.776 [INFO] [Thread-58244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:20:07.779 [DEBUG] [Thread-58244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:20:07.779 [DEBUG] [Thread-58244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] client lang: <none>
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] server lang: <none>
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] kex follows: False
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] Compression: none
2025-11-17T17:20:07.780 [DEBUG] [Thread-58244] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:20:07.796 [DEBUG] [Thread-58244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:20:07.796 [DEBUG] [Thread-58244] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:20:07.797 [DEBUG] [Thread-58244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:20:07.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:20:07.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:20:07.799 [DEBUG] [Thread-58244] [transport.py] [_log()] userauth is OK
2025-11-17T17:20:07.799 [DEBUG] [Thread-58244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:20:07.799 [DEBUG] [Thread-58244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:20:07.799 [DEBUG] [Thread-58244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:20:07.799 [DEBUG] [Thread-58244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:20:07.823 [INFO] [Thread-58244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:20:07.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:20:14.195 [DEBUG] [Thread-58244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:20:14.195 [DEBUG] [Thread-58244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:20:14.196 [DEBUG] [Thread-58244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:20:14.236 [DEBUG] [Thread-58244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:20:14.237 [DEBUG] [Thread-58244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:20:14.241 [DEBUG] [Thread-58244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:20:14.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:20:14.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:20:14.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:20:14.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:20:14.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:20:14.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:20:14.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:20:14.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:20:14.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:20:14.363 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-11-17T17:20:14.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:19:55', tmtdew=28.55, humidity=14.36, cloud=0.0, wind=23.96, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:20:14.364 [DEBUG] [Thread-58244] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:20:14.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:20:14.450 [DEBUG] [Thread-58247] [transport.py] [_log()] starting thread (client mode): 0xd070dd80
2025-11-17T17:20:14.450 [DEBUG] [Thread-58247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:20:14.465 [DEBUG] [Thread-58247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:20:14.465 [INFO] [Thread-58247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] client lang: <none>
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] server lang: <none>
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] kex follows: False
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:20:14.473 [DEBUG] [Thread-58247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:20:14.474 [DEBUG] [Thread-58247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:20:14.474 [DEBUG] [Thread-58247] [transport.py] [_log()] Compression: none
2025-11-17T17:20:14.474 [DEBUG] [Thread-58247] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:20:14.534 [DEBUG] [Thread-58247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:20:14.534 [DEBUG] [Thread-58247] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:20:14.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:20:14.535 [DEBUG] [Thread-58247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:20:14.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:20:14.591 [DEBUG] [Thread-58247] [transport.py] [_log()] userauth is OK
2025-11-17T17:20:14.591 [DEBUG] [Thread-58247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:20:14.591 [DEBUG] [Thread-58247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:20:14.591 [DEBUG] [Thread-58247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:20:14.591 [DEBUG] [Thread-58247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:20:14.611 [INFO] [Thread-58247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:20:14.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:20:14.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:20:15.463 [DEBUG] [Thread-58247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:20:15.463 [DEBUG] [Thread-58247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:20:15.510 [DEBUG] [Thread-58247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:20:15.510 [DEBUG] [Thread-58247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:20:15.520 [DEBUG] [Thread-58247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:20:15.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:20:15.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:20:15.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:20:15.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:20:15.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:20:15.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:20:15.553 [DEBUG] [Thread-58247] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:20:20.042 [DEBUG] [Thread-58249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:20:24.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:20:24.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:20:24.641 [DEBUG] [Thread-58250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:20:35.074 [DEBUG] [Thread-58251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:20:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:20:45.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:20: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
2025-11-17T17:20:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 20, 28), 28.52, 14.38, 0.0, 25.07, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:20:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:20:28
2025-11-17T17:20:46.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:20:46.506 [DEBUG] [Thread-58252] [transport.py] [_log()] starting thread (client mode): 0xd0721270
2025-11-17T17:20:46.506 [DEBUG] [Thread-58252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:20:46.526 [DEBUG] [Thread-58252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:20:46.526 [INFO] [Thread-58252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:20:46.529 [DEBUG] [Thread-58252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:20:46.529 [DEBUG] [Thread-58252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] client lang: <none>
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] server lang: <none>
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] kex follows: False
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:20:46.530 [DEBUG] [Thread-58252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:20:46.531 [DEBUG] [Thread-58252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:20:46.531 [DEBUG] [Thread-58252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:20:46.531 [DEBUG] [Thread-58252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:20:46.531 [DEBUG] [Thread-58252] [transport.py] [_log()] Compression: none
2025-11-17T17:20:46.531 [DEBUG] [Thread-58252] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:20:46.549 [DEBUG] [Thread-58252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:20:46.550 [DEBUG] [Thread-58252] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:20:46.550 [DEBUG] [Thread-58252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:20:46.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:20:46.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:20:46.552 [DEBUG] [Thread-58252] [transport.py] [_log()] userauth is OK
2025-11-17T17:20:46.552 [DEBUG] [Thread-58252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:20:46.552 [DEBUG] [Thread-58252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:20:46.553 [DEBUG] [Thread-58252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:20:46.553 [DEBUG] [Thread-58252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:20:46.587 [INFO] [Thread-58252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:20:46.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:20:47.204 [DEBUG] [Thread-58252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:20:47.204 [DEBUG] [Thread-58252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:20:47.204 [DEBUG] [Thread-58252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:20:47.245 [DEBUG] [Thread-58252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:20:47.246 [DEBUG] [Thread-58252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:20:47.249 [DEBUG] [Thread-58252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:20:47.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:20:47.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:20:47.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:20:47.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:20:47.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:20:47.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:20:47.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:20:47.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:20:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:20:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.638941 -999.00  +22.60  25.44     20   -1.00 1 1 1 1 1   887    0 23.59 -36.28 ----- 23.0 25.4 311.8 28.9 26.3 -25.8 26.4 -25.4 27.1 -25.0 27.3 -25.6
2025-11-17T17:20:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:20:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:20:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.638941
2025-11-17T17:20:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:20:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:20:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:20:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:20:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:20:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:20:28', tmtdew=28.52, humidity=14.38, cloud=0.0, wind=25.07, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:20:04.502', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:20:47.266 [DEBUG] [Thread-58252] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:20:47.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:20:47.363 [DEBUG] [Thread-58255] [transport.py] [_log()] starting thread (client mode): 0xd0786410
2025-11-17T17:20:47.363 [DEBUG] [Thread-58255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:20:47.378 [DEBUG] [Thread-58255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:20:47.378 [INFO] [Thread-58255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:20:47.385 [DEBUG] [Thread-58255] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:20:47.386 [DEBUG] [Thread-58255] [transport.py] [_log()] client lang: <none>
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] server lang: <none>
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] kex follows: False
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] Compression: none
2025-11-17T17:20:47.387 [DEBUG] [Thread-58255] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:20:47.447 [DEBUG] [Thread-58255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:20:47.447 [DEBUG] [Thread-58255] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:20:47.448 [DEBUG] [Thread-58255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:20:47.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:20:47.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:20:47.503 [DEBUG] [Thread-58255] [transport.py] [_log()] userauth is OK
2025-11-17T17:20:47.503 [DEBUG] [Thread-58255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:20:47.503 [DEBUG] [Thread-58255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:20:47.503 [DEBUG] [Thread-58255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:20:47.503 [DEBUG] [Thread-58255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:20:47.523 [INFO] [Thread-58255] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:20:47.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:20:47.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:20:48.411 [DEBUG] [Thread-58255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:20:48.411 [DEBUG] [Thread-58255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:20:48.459 [DEBUG] [Thread-58255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:20:48.459 [DEBUG] [Thread-58255] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:20:48.467 [DEBUG] [Thread-58255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:20:48.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:20:48.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:20:48.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:20:48.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:20:48.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:20:48.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:20:48.499 [DEBUG] [Thread-58255] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:20:50.111 [DEBUG] [Thread-58257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:21:05.158 [DEBUG] [Thread-58258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:21:18.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:21:18.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:21:18.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:21:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 20, 28), 28.57, 14.38, 0.0, 21.47, 23.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:21:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:20:28
2025-11-17T17:21:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:21:19.447 [DEBUG] [Thread-58259] [transport.py] [_log()] starting thread (client mode): 0xd0756140
2025-11-17T17:21:19.447 [DEBUG] [Thread-58259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:21:19.467 [DEBUG] [Thread-58259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:21:19.468 [INFO] [Thread-58259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:21:19.471 [DEBUG] [Thread-58259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:21:19.471 [DEBUG] [Thread-58259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:21:19.471 [DEBUG] [Thread-58259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:21:19.471 [DEBUG] [Thread-58259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:21:19.471 [DEBUG] [Thread-58259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:21:19.471 [DEBUG] [Thread-58259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] client lang: <none>
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] server lang: <none>
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] kex follows: False
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:21:19.472 [DEBUG] [Thread-58259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:21:19.473 [DEBUG] [Thread-58259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:21:19.473 [DEBUG] [Thread-58259] [transport.py] [_log()] Compression: none
2025-11-17T17:21:19.473 [DEBUG] [Thread-58259] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:21:19.490 [DEBUG] [Thread-58259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:21:19.490 [DEBUG] [Thread-58259] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:21:19.491 [DEBUG] [Thread-58259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:21:19.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:21:19.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:21:19.493 [DEBUG] [Thread-58259] [transport.py] [_log()] userauth is OK
2025-11-17T17:21:19.493 [DEBUG] [Thread-58259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:21:19.493 [DEBUG] [Thread-58259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:21:19.493 [DEBUG] [Thread-58259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:21:19.493 [DEBUG] [Thread-58259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:21:19.512 [INFO] [Thread-58259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:21:19.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:21:20.187 [DEBUG] [Thread-58261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:21:20.299 [DEBUG] [Thread-58259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:21:20.299 [DEBUG] [Thread-58259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:21:20.299 [DEBUG] [Thread-58259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:21:20.339 [DEBUG] [Thread-58259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:21:20.339 [DEBUG] [Thread-58259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:21:20.342 [DEBUG] [Thread-58259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:21:20.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:21:20.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:21:20.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:21:20.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:21:20.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:21:20.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:21:20.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:21:20.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:21:20.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:21:20.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.639282 -999.00  +22.50  20.56     21   -0.80 1 1 1 1 1   887    0 22.58 -44.06 ----- 20.0 20.6 309.6 25.9 26.2 -25.0 26.3 -24.9 26.9 -26.2 27.2 -25.6
2025-11-17T17:21:20.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:21:20.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:21:20.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.639282
2025-11-17T17:21:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:21:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:21:20.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:21:20.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:21:20.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:21:20.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:20:28', tmtdew=28.57, humidity=14.38, cloud=0.0, wind=21.47, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:20:33.965', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:21:20.368 [DEBUG] [Thread-58259] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:21:20.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:21:20.465 [DEBUG] [Thread-58263] [transport.py] [_log()] starting thread (client mode): 0xd0755e40
2025-11-17T17:21:20.465 [DEBUG] [Thread-58263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:21:20.484 [DEBUG] [Thread-58263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:21:20.484 [INFO] [Thread-58263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:21:20.491 [DEBUG] [Thread-58263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:21:20.491 [DEBUG] [Thread-58263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:21:20.491 [DEBUG] [Thread-58263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] client lang: <none>
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] server lang: <none>
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] kex follows: False
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] Compression: none
2025-11-17T17:21:20.492 [DEBUG] [Thread-58263] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:21:20.549 [DEBUG] [Thread-58263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:21:20.550 [DEBUG] [Thread-58263] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:21:20.550 [DEBUG] [Thread-58263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:21:20.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:21:20.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:21:20.606 [DEBUG] [Thread-58263] [transport.py] [_log()] userauth is OK
2025-11-17T17:21:20.607 [DEBUG] [Thread-58263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:21:20.607 [DEBUG] [Thread-58263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:21:20.607 [DEBUG] [Thread-58263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:21:20.607 [DEBUG] [Thread-58263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:21:20.626 [INFO] [Thread-58263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:21:20.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:21:20.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:21:21.467 [DEBUG] [Thread-58263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:21:21.467 [DEBUG] [Thread-58263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:21:21.515 [DEBUG] [Thread-58263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:21:21.515 [DEBUG] [Thread-58263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:21:21.529 [DEBUG] [Thread-58263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:21:21.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:21:21.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:21:21.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:21:21.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:21:21.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:21:21.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:21:21.563 [DEBUG] [Thread-58263] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:21:24.691 [DEBUG] [Thread-58265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:21:24.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:21:24.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:21:35.221 [DEBUG] [Thread-58266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:21:50.256 [DEBUG] [Thread-58267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:21:51.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:21:51.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:21:51.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:21:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 21, 32), 28.53, 14.43, 0.0, 19.76, 23.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:21:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:21:32
2025-11-17T17:21:52.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:21:52.487 [DEBUG] [Thread-58268] [transport.py] [_log()] starting thread (client mode): 0xd3160910
2025-11-17T17:21:52.487 [DEBUG] [Thread-58268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:21:52.508 [DEBUG] [Thread-58268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:21:52.509 [INFO] [Thread-58268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:21:52.512 [DEBUG] [Thread-58268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:21:52.512 [DEBUG] [Thread-58268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:21:52.512 [DEBUG] [Thread-58268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:21:52.512 [DEBUG] [Thread-58268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:21:52.512 [DEBUG] [Thread-58268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:21:52.512 [DEBUG] [Thread-58268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:21:52.512 [DEBUG] [Thread-58268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] client lang: <none>
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] server lang: <none>
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] kex follows: False
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:21:52.513 [DEBUG] [Thread-58268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:21:52.514 [DEBUG] [Thread-58268] [transport.py] [_log()] Compression: none
2025-11-17T17:21:52.514 [DEBUG] [Thread-58268] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:21:52.532 [DEBUG] [Thread-58268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:21:52.533 [DEBUG] [Thread-58268] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:21:52.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:21:52.533 [DEBUG] [Thread-58268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:21:52.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:21:52.536 [DEBUG] [Thread-58268] [transport.py] [_log()] userauth is OK
2025-11-17T17:21:52.536 [DEBUG] [Thread-58268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:21:52.536 [DEBUG] [Thread-58268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:21:52.536 [DEBUG] [Thread-58268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:21:52.536 [DEBUG] [Thread-58268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:21:52.556 [INFO] [Thread-58268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:21:52.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:21:53.194 [DEBUG] [Thread-58268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:21:53.194 [DEBUG] [Thread-58268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:21:53.194 [DEBUG] [Thread-58268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:21:53.235 [DEBUG] [Thread-58268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:21:53.235 [DEBUG] [Thread-58268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:21:53.238 [DEBUG] [Thread-58268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:21:53.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:21:53.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:21:53.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:21:53.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:21:53.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:21:53.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:21:53.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:21:53.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:21:53.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:21:53.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.639635 -999.00  +22.80  21.20     20   -0.80 1 1 1 1 1   887    0 22.11 -56.83 ----- 16.1 21.2 300.4 24.8 26.2 -24.8 26.3 -24.6 26.8 -26.1 27.1 -25.0
2025-11-17T17:21:53.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:21:53.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:21:53.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.639635
2025-11-17T17:21:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:21:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:21:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:21:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:21:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:21:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:21:32', tmtdew=28.53, humidity=14.43, cloud=0.0, wind=19.76, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:21:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:21:53.262 [DEBUG] [Thread-58268] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:21:53.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:21:53.358 [DEBUG] [Thread-58271] [transport.py] [_log()] starting thread (client mode): 0xd0722e30
2025-11-17T17:21:53.358 [DEBUG] [Thread-58271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:21:53.373 [DEBUG] [Thread-58271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:21:53.373 [INFO] [Thread-58271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] client lang: <none>
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] server lang: <none>
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] kex follows: False
2025-11-17T17:21:53.381 [DEBUG] [Thread-58271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:21:53.382 [DEBUG] [Thread-58271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:21:53.382 [DEBUG] [Thread-58271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:21:53.382 [DEBUG] [Thread-58271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:21:53.382 [DEBUG] [Thread-58271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:21:53.382 [DEBUG] [Thread-58271] [transport.py] [_log()] Compression: none
2025-11-17T17:21:53.382 [DEBUG] [Thread-58271] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:21:53.442 [DEBUG] [Thread-58271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:21:53.443 [DEBUG] [Thread-58271] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:21:53.443 [DEBUG] [Thread-58271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:21:53.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:21:53.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:21:53.498 [DEBUG] [Thread-58271] [transport.py] [_log()] userauth is OK
2025-11-17T17:21:53.498 [DEBUG] [Thread-58271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:21:53.499 [DEBUG] [Thread-58271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:21:53.499 [DEBUG] [Thread-58271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:21:53.499 [DEBUG] [Thread-58271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:21:53.519 [INFO] [Thread-58271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:21:53.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:21:53.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:21:54.382 [DEBUG] [Thread-58271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:21:54.383 [DEBUG] [Thread-58271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:21:54.430 [DEBUG] [Thread-58271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:21:54.430 [DEBUG] [Thread-58271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:21:54.439 [DEBUG] [Thread-58271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:21:54.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:21:54.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:21:54.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:21:54.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:21:54.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:21:54.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:21:54.472 [DEBUG] [Thread-58271] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:22:05.288 [DEBUG] [Thread-58273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:22:20.321 [DEBUG] [Thread-58274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:22:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:22:24.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:22:24.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:22:24.741 [DEBUG] [Thread-58275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:22:24.892 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:22:24.893 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:22:25.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 22, 4), 28.48, 14.46, 0.0, 15.69, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:22:25.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:22:04
2025-11-17T17:22:25.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:22:25.426 [DEBUG] [Thread-58276] [transport.py] [_log()] starting thread (client mode): 0xd3160c10
2025-11-17T17:22:25.426 [DEBUG] [Thread-58276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:22:25.447 [DEBUG] [Thread-58276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:22:25.447 [INFO] [Thread-58276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] client lang: <none>
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] server lang: <none>
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] kex follows: False
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] Compression: none
2025-11-17T17:22:25.451 [DEBUG] [Thread-58276] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:22:25.468 [DEBUG] [Thread-58276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:22:25.469 [DEBUG] [Thread-58276] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:22:25.469 [DEBUG] [Thread-58276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:22:25.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:22:25.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:22:25.471 [DEBUG] [Thread-58276] [transport.py] [_log()] userauth is OK
2025-11-17T17:22:25.471 [DEBUG] [Thread-58276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:22:25.472 [DEBUG] [Thread-58276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:22:25.472 [DEBUG] [Thread-58276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:22:25.472 [DEBUG] [Thread-58276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:22:25.489 [INFO] [Thread-58276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:22:25.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:22:26.255 [DEBUG] [Thread-58276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:22:26.256 [DEBUG] [Thread-58276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:22:26.256 [DEBUG] [Thread-58276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:22:26.296 [DEBUG] [Thread-58276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:22:26.297 [DEBUG] [Thread-58276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:22:26.300 [DEBUG] [Thread-58276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:22:26.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:22:26.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:22:26.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:22:26.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:22:26.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:22:26.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:22:26.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:22:26.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:22:26.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:22:26.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.639982 -999.00  +22.90  20.46     20   -0.80 1 1 1 1 1   887    0 22.27 -65.39 ----- 19.6 20.5 293.9 30.5 26.2 -24.8 26.2 -24.6 26.6 -25.2 27.1 -24.7
2025-11-17T17:22:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:22:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:22:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.639982
2025-11-17T17:22:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:22:26.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:22:26.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:22:26.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:22:26.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:22:26.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:22:04', tmtdew=28.48, humidity=14.46, cloud=0.0, wind=15.69, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:21:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:22:26.328 [DEBUG] [Thread-58276] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:22:26.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:22:26.425 [DEBUG] [Thread-58279] [transport.py] [_log()] starting thread (client mode): 0xd07578e0
2025-11-17T17:22:26.425 [DEBUG] [Thread-58279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:22:26.440 [DEBUG] [Thread-58279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:22:26.441 [INFO] [Thread-58279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:22:26.448 [DEBUG] [Thread-58279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:22:26.448 [DEBUG] [Thread-58279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] client lang: <none>
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] server lang: <none>
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] kex follows: False
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:22:26.449 [DEBUG] [Thread-58279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:22:26.450 [DEBUG] [Thread-58279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:22:26.450 [DEBUG] [Thread-58279] [transport.py] [_log()] Compression: none
2025-11-17T17:22:26.450 [DEBUG] [Thread-58279] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:22:26.510 [DEBUG] [Thread-58279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:22:26.511 [DEBUG] [Thread-58279] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:22:26.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:22:26.512 [DEBUG] [Thread-58279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:22:26.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:22:26.570 [DEBUG] [Thread-58279] [transport.py] [_log()] userauth is OK
2025-11-17T17:22:26.571 [DEBUG] [Thread-58279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:22:26.571 [DEBUG] [Thread-58279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:22:26.571 [DEBUG] [Thread-58279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:22:26.571 [DEBUG] [Thread-58279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:22:26.591 [INFO] [Thread-58279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:22:26.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:22:26.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:22:27.473 [DEBUG] [Thread-58279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:22:27.473 [DEBUG] [Thread-58279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:22:27.520 [DEBUG] [Thread-58279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:22:27.520 [DEBUG] [Thread-58279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:22:27.529 [DEBUG] [Thread-58279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:22:27.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:22:27.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:22:27.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:22:27.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:22:27.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:22:27.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:22:27.564 [DEBUG] [Thread-58279] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:22:35.352 [DEBUG] [Thread-58281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:22:50.385 [DEBUG] [Thread-58282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:22:57.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:22:57.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:22:57.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:22:58.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 22, 35), 27.7, 15.03, 0.0, 16.27, 22.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:22:58.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:22:35
2025-11-17T17:22:58.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:22:58.503 [DEBUG] [Thread-58283] [transport.py] [_log()] starting thread (client mode): 0xd070de70
2025-11-17T17:22:58.503 [DEBUG] [Thread-58283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:22:58.523 [DEBUG] [Thread-58283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:22:58.523 [INFO] [Thread-58283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:22:58.526 [DEBUG] [Thread-58283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:22:58.526 [DEBUG] [Thread-58283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:22:58.526 [DEBUG] [Thread-58283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:22:58.526 [DEBUG] [Thread-58283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:22:58.526 [DEBUG] [Thread-58283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:22:58.526 [DEBUG] [Thread-58283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:22:58.526 [DEBUG] [Thread-58283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] client lang: <none>
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] server lang: <none>
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] kex follows: False
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] Compression: none
2025-11-17T17:22:58.527 [DEBUG] [Thread-58283] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:22:58.543 [DEBUG] [Thread-58283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:22:58.544 [DEBUG] [Thread-58283] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:22:58.544 [DEBUG] [Thread-58283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:22:58.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:22:58.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:22:58.585 [DEBUG] [Thread-58283] [transport.py] [_log()] userauth is OK
2025-11-17T17:22:58.585 [DEBUG] [Thread-58283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:22:58.585 [DEBUG] [Thread-58283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:22:58.585 [DEBUG] [Thread-58283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:22:58.585 [DEBUG] [Thread-58283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:22:58.606 [INFO] [Thread-58283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:22:58.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:22:59.172 [DEBUG] [Thread-58283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:22:59.172 [DEBUG] [Thread-58283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:22:59.172 [DEBUG] [Thread-58283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:22:59.213 [DEBUG] [Thread-58283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:22:59.213 [DEBUG] [Thread-58283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:22:59.216 [DEBUG] [Thread-58283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:22:59.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:22:59.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:22:59.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:22:59.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:22:59.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:22:59.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:22:59.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:22:59.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:22:59.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:22:59.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.640329 -999.00  +22.90  14.33     20   -0.90 1 1 1 1 1   887    0 21.74 -71.86 ----- 20.1 14.3 284.4 26.5 26.1 -25.5 26.3 -24.7 26.8 -24.7 27.1 -24.8
2025-11-17T17:22:59.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:22:59.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:22:59.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.640329
2025-11-17T17:22:59.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:22:59.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:22:59.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:22:59.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:22:59.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:22:59.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:22:35', tmtdew=27.7, humidity=15.03, cloud=0.0, wind=16.27, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:22:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:22:59.241 [DEBUG] [Thread-58283] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:22:59.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:22:59.337 [DEBUG] [Thread-58286] [transport.py] [_log()] starting thread (client mode): 0xd070fca0
2025-11-17T17:22:59.337 [DEBUG] [Thread-58286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:22:59.354 [DEBUG] [Thread-58286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:22:59.354 [INFO] [Thread-58286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:22:59.361 [DEBUG] [Thread-58286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:22:59.361 [DEBUG] [Thread-58286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] client lang: <none>
2025-11-17T17:22:59.362 [DEBUG] [Thread-58286] [transport.py] [_log()] server lang: <none>
2025-11-17T17:22:59.363 [DEBUG] [Thread-58286] [transport.py] [_log()] kex follows: False
2025-11-17T17:22:59.363 [DEBUG] [Thread-58286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:22:59.363 [DEBUG] [Thread-58286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:22:59.363 [DEBUG] [Thread-58286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:22:59.363 [DEBUG] [Thread-58286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:22:59.363 [DEBUG] [Thread-58286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:22:59.363 [DEBUG] [Thread-58286] [transport.py] [_log()] Compression: none
2025-11-17T17:22:59.363 [DEBUG] [Thread-58286] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:22:59.419 [DEBUG] [Thread-58286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:22:59.419 [DEBUG] [Thread-58286] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:22:59.420 [DEBUG] [Thread-58286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:22:59.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:22:59.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:22:59.474 [DEBUG] [Thread-58286] [transport.py] [_log()] userauth is OK
2025-11-17T17:22:59.474 [DEBUG] [Thread-58286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:22:59.474 [DEBUG] [Thread-58286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:22:59.475 [DEBUG] [Thread-58286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:22:59.475 [DEBUG] [Thread-58286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:22:59.493 [INFO] [Thread-58286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:22:59.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:22:59.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:23:00.346 [DEBUG] [Thread-58286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:23:00.346 [DEBUG] [Thread-58286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:23:00.394 [DEBUG] [Thread-58286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:23:00.394 [DEBUG] [Thread-58286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:23:00.404 [DEBUG] [Thread-58286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:23:00.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:23:00.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:23:00.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:23:00.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:23:00.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:23:00.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:23:00.438 [DEBUG] [Thread-58286] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:23:05.415 [DEBUG] [Thread-58288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:23:20.455 [DEBUG] [Thread-58289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:23:24.802 [DEBUG] [Thread-58290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:23:25.039 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:23:25.040 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:23:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:23:30.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:23:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:23:31.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 23, 8), 27.69, 15.05, 0.0, 22.69, 22.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:23:31.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:23:08
2025-11-17T17:23:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:23:31.420 [DEBUG] [Thread-58291] [transport.py] [_log()] starting thread (client mode): 0xd07541c0
2025-11-17T17:23:31.420 [DEBUG] [Thread-58291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:23:31.443 [DEBUG] [Thread-58291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:23:31.443 [INFO] [Thread-58291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] client lang: <none>
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] server lang: <none>
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] kex follows: False
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] Compression: none
2025-11-17T17:23:31.446 [DEBUG] [Thread-58291] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:23:31.464 [DEBUG] [Thread-58291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:23:31.464 [DEBUG] [Thread-58291] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:23:31.464 [DEBUG] [Thread-58291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:23:31.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:23:31.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:23:31.465 [DEBUG] [Thread-58291] [transport.py] [_log()] userauth is OK
2025-11-17T17:23:31.466 [DEBUG] [Thread-58291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:23:31.466 [DEBUG] [Thread-58291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:23:31.466 [DEBUG] [Thread-58291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:23:31.466 [DEBUG] [Thread-58291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:23:31.475 [INFO] [Thread-58291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:23:31.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:23:32.210 [DEBUG] [Thread-58291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:23:32.210 [DEBUG] [Thread-58291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:23:32.210 [DEBUG] [Thread-58291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:23:32.251 [DEBUG] [Thread-58291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:23:32.251 [DEBUG] [Thread-58291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:23:32.253 [DEBUG] [Thread-58291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:23:32.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:23:32.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:23:32.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:23:32.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:23:32.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:23:32.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:23:32.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.640677 -999.00  +22.90  15.55     20   -0.90 1 1 1 1 1   887    0 21.82 -68.73 ----- 12.3 15.6 294.8 20.7 26.3 -24.9 26.4 -24.4 26.7 -23.7 27.1 -24.1
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.640677
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:23:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:23:08', tmtdew=27.69, humidity=15.05, cloud=0.0, wind=22.69, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:22:34.493', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:23:32.275 [DEBUG] [Thread-58291] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:23:32.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:23:32.358 [DEBUG] [Thread-58294] [transport.py] [_log()] starting thread (client mode): 0xd0754af0
2025-11-17T17:23:32.359 [DEBUG] [Thread-58294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:23:32.373 [DEBUG] [Thread-58294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:23:32.373 [INFO] [Thread-58294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] client lang: <none>
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] server lang: <none>
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] kex follows: False
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] Compression: none
2025-11-17T17:23:32.381 [DEBUG] [Thread-58294] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:23:32.440 [DEBUG] [Thread-58294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:23:32.441 [DEBUG] [Thread-58294] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:23:32.441 [DEBUG] [Thread-58294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:23:32.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:23:32.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:23:32.498 [DEBUG] [Thread-58294] [transport.py] [_log()] userauth is OK
2025-11-17T17:23:32.498 [DEBUG] [Thread-58294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:23:32.498 [DEBUG] [Thread-58294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:23:32.498 [DEBUG] [Thread-58294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:23:32.498 [DEBUG] [Thread-58294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:23:32.516 [INFO] [Thread-58294] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:23:32.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:23:32.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:23:33.358 [DEBUG] [Thread-58294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:23:33.358 [DEBUG] [Thread-58294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:23:33.406 [DEBUG] [Thread-58294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:23:33.406 [DEBUG] [Thread-58294] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:23:33.414 [DEBUG] [Thread-58294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:23:33.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:23:33.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:23:33.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:23:33.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:23:33.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:23:33.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:23:33.447 [DEBUG] [Thread-58294] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:23:35.481 [DEBUG] [Thread-58296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:23:50.517 [DEBUG] [Thread-58297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:24:03.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:24:03.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:24:03.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:24:04.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 23, 39), 27.97, 14.93, 0.0, 22.21, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:24:04.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:23:39
2025-11-17T17:24:04.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:24:04.413 [DEBUG] [Thread-58298] [transport.py] [_log()] starting thread (client mode): 0xd070e860
2025-11-17T17:24:04.414 [DEBUG] [Thread-58298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:24:04.433 [DEBUG] [Thread-58298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:24:04.433 [INFO] [Thread-58298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:24:04.436 [DEBUG] [Thread-58298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] client lang: <none>
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] server lang: <none>
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] kex follows: False
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] Compression: none
2025-11-17T17:24:04.437 [DEBUG] [Thread-58298] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:24:04.453 [DEBUG] [Thread-58298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:24:04.454 [DEBUG] [Thread-58298] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:24:04.454 [DEBUG] [Thread-58298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:24:04.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:24:04.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:24:04.456 [DEBUG] [Thread-58298] [transport.py] [_log()] userauth is OK
2025-11-17T17:24:04.457 [DEBUG] [Thread-58298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:24:04.457 [DEBUG] [Thread-58298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:24:04.457 [DEBUG] [Thread-58298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:24:04.457 [DEBUG] [Thread-58298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:24:04.481 [INFO] [Thread-58298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:24:04.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:24:05.114 [DEBUG] [Thread-58298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:24:05.115 [DEBUG] [Thread-58298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:24:05.115 [DEBUG] [Thread-58298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:24:05.156 [DEBUG] [Thread-58298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:24:05.156 [DEBUG] [Thread-58298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:24:05.158 [DEBUG] [Thread-58298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:24:05.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:24:05.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:24:05.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:24:05.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:24:05.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:24:05.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:24:05.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:24:05.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:24:05.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:24:05.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.641024 -999.00  +23.00  11.61     20   -0.80 1 1 1 1 1   887    0 21.55 -73.49 ----- 10.1 11.6 289.6 17.2 26.4 -25.2 26.4 -24.3 26.9 -23.4 27.3 -25.2
2025-11-17T17:24:05.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:24:05.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:24:05.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.641024
2025-11-17T17:24:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:24:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:24:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:24:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:24:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:24:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:23:39', tmtdew=27.97, humidity=14.93, cloud=0.0, wind=22.21, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:23:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:24:05.177 [DEBUG] [Thread-58298] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:24:05.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:24:05.266 [DEBUG] [Thread-58301] [transport.py] [_log()] starting thread (client mode): 0xd07755a0
2025-11-17T17:24:05.266 [DEBUG] [Thread-58301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:24:05.281 [DEBUG] [Thread-58301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:24:05.281 [INFO] [Thread-58301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:24:05.288 [DEBUG] [Thread-58301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] client lang: <none>
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] server lang: <none>
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] kex follows: False
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:24:05.289 [DEBUG] [Thread-58301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:24:05.290 [DEBUG] [Thread-58301] [transport.py] [_log()] Compression: none
2025-11-17T17:24:05.290 [DEBUG] [Thread-58301] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:24:05.345 [DEBUG] [Thread-58301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:24:05.346 [DEBUG] [Thread-58301] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:24:05.346 [DEBUG] [Thread-58301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:24:05.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:24:05.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:24:05.402 [DEBUG] [Thread-58301] [transport.py] [_log()] userauth is OK
2025-11-17T17:24:05.402 [DEBUG] [Thread-58301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:24:05.402 [DEBUG] [Thread-58301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:24:05.402 [DEBUG] [Thread-58301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:24:05.402 [DEBUG] [Thread-58301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:24:05.422 [INFO] [Thread-58301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:24:05.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:24:05.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:24:05.545 [DEBUG] [Thread-58303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:24:06.286 [DEBUG] [Thread-58301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:24:06.286 [DEBUG] [Thread-58301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:24:06.334 [DEBUG] [Thread-58301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:24:06.334 [DEBUG] [Thread-58301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:24:06.342 [DEBUG] [Thread-58301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:24:06.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:24:06.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:24:06.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:24:06.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:24:06.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:24:06.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:24:06.374 [DEBUG] [Thread-58301] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:24:20.586 [DEBUG] [Thread-58304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:24:24.835 [DEBUG] [Thread-58305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:24:25.182 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:24:25.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:24:35.617 [DEBUG] [Thread-58306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:24:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:24:36.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:24:36.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:24:37.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 24, 12), 28.05, 14.86, 0.0, 21.16, 22.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:24:37.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:24:12
2025-11-17T17:24:37.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:24:37.313 [DEBUG] [Thread-58307] [transport.py] [_log()] starting thread (client mode): 0xd07339a0
2025-11-17T17:24:37.313 [DEBUG] [Thread-58307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:24:37.333 [DEBUG] [Thread-58307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:24:37.333 [INFO] [Thread-58307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] client lang: <none>
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] server lang: <none>
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] kex follows: False
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:24:37.336 [DEBUG] [Thread-58307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:24:37.337 [DEBUG] [Thread-58307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:24:37.337 [DEBUG] [Thread-58307] [transport.py] [_log()] Compression: none
2025-11-17T17:24:37.337 [DEBUG] [Thread-58307] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:24:37.353 [DEBUG] [Thread-58307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:24:37.353 [DEBUG] [Thread-58307] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:24:37.354 [DEBUG] [Thread-58307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:24:37.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:24:37.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:24:37.356 [DEBUG] [Thread-58307] [transport.py] [_log()] userauth is OK
2025-11-17T17:24:37.356 [DEBUG] [Thread-58307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:24:37.356 [DEBUG] [Thread-58307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:24:37.356 [DEBUG] [Thread-58307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:24:37.356 [DEBUG] [Thread-58307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:24:37.379 [INFO] [Thread-58307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:24:37.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:24:38.115 [DEBUG] [Thread-58307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:24:38.115 [DEBUG] [Thread-58307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:24:38.115 [DEBUG] [Thread-58307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:24:38.155 [DEBUG] [Thread-58307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:24:38.156 [DEBUG] [Thread-58307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:24:38.159 [DEBUG] [Thread-58307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:24:38.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:24:38.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:24:38.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:24:38.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:24:38.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:24:38.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:24:38.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:24:38.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:24:38.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:24:38.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.641371 -999.00  +23.20  11.71     20   -0.80 1 1 1 1 1   887    0 22.03 -64.04 ----- 14.3 11.7 269.9 15.9 26.4 -25.5 26.5 -24.7 26.9 -24.2 27.4 -25.7
2025-11-17T17:24:38.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:24:38.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:24:38.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.641371
2025-11-17T17:24:38.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:24:38.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:24:38.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:24:38.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:24:38.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:24:38.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:24:12', tmtdew=28.05, humidity=14.86, cloud=0.0, wind=21.16, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:23:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:24:38.184 [DEBUG] [Thread-58307] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:24:38.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:24:38.280 [DEBUG] [Thread-58310] [transport.py] [_log()] starting thread (client mode): 0xd07325c0
2025-11-17T17:24:38.280 [DEBUG] [Thread-58310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:24:38.295 [DEBUG] [Thread-58310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:24:38.295 [INFO] [Thread-58310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:24:38.302 [DEBUG] [Thread-58310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:24:38.302 [DEBUG] [Thread-58310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] client lang: <none>
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] server lang: <none>
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] kex follows: False
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] Compression: none
2025-11-17T17:24:38.303 [DEBUG] [Thread-58310] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:24:38.361 [DEBUG] [Thread-58310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:24:38.362 [DEBUG] [Thread-58310] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:24:38.362 [DEBUG] [Thread-58310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:24:38.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:24:38.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:24:38.418 [DEBUG] [Thread-58310] [transport.py] [_log()] userauth is OK
2025-11-17T17:24:38.418 [DEBUG] [Thread-58310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:24:38.419 [DEBUG] [Thread-58310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:24:38.419 [DEBUG] [Thread-58310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:24:38.419 [DEBUG] [Thread-58310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:24:38.437 [INFO] [Thread-58310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:24:38.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:24:38.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:24:39.342 [DEBUG] [Thread-58310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:24:39.342 [DEBUG] [Thread-58310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:24:39.390 [DEBUG] [Thread-58310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:24:39.390 [DEBUG] [Thread-58310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:24:39.399 [DEBUG] [Thread-58310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:24:39.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:24:39.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:24:39.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:24:39.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:24:39.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:24:39.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:24:39.434 [DEBUG] [Thread-58310] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:24:50.649 [DEBUG] [Thread-58312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:25:05.687 [DEBUG] [Thread-58313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:25:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:25:09.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:25:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:25:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 24, 44), 28.56, 14.22, 0.0, 26.47, 22.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:25:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:24:44
2025-11-17T17:25:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:25:10.386 [DEBUG] [Thread-58314] [transport.py] [_log()] starting thread (client mode): 0xd0774ac0
2025-11-17T17:25:10.386 [DEBUG] [Thread-58314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:25:10.407 [DEBUG] [Thread-58314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:25:10.407 [INFO] [Thread-58314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:25:10.410 [DEBUG] [Thread-58314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] client lang: <none>
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] server lang: <none>
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] kex follows: False
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] Compression: none
2025-11-17T17:25:10.411 [DEBUG] [Thread-58314] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:25:10.428 [DEBUG] [Thread-58314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:25:10.429 [DEBUG] [Thread-58314] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:25:10.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:25:10.430 [DEBUG] [Thread-58314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:25:10.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:25:10.431 [DEBUG] [Thread-58314] [transport.py] [_log()] userauth is OK
2025-11-17T17:25:10.432 [DEBUG] [Thread-58314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:25:10.432 [DEBUG] [Thread-58314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:25:10.432 [DEBUG] [Thread-58314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:25:10.432 [DEBUG] [Thread-58314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:25:10.457 [INFO] [Thread-58314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:25:10.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:25:11.811 [DEBUG] [Thread-58314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:25:11.811 [DEBUG] [Thread-58314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:25:11.811 [DEBUG] [Thread-58314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:25:11.852 [DEBUG] [Thread-58314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:25:11.852 [DEBUG] [Thread-58314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:25:11.856 [DEBUG] [Thread-58314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:25:11.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:25:11.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:25:11.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:25:11.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:25:11.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:25:11.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:25:11.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:25:11.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:25:11.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:25:11.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.642412 -999.00  +22.80  24.08     19   -1.30 1 1 1 1 1   887    0 22.37 -56.24 ----- 24.1 24.1 274.4 28.4 26.2 -26.7 26.4 -25.5 26.9 -30.2 27.2 -25.8
2025-11-17T17:25:11.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:25:11.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:25:11.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.642412
2025-11-17T17:25:11.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:25:11.880 [DEBUG] [Thread-58314] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:25:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:25:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:25:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:25:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:25:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:24:44', tmtdew=28.56, humidity=14.22, cloud=0.0, wind=26.47, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:25:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:25:11.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:25:11.978 [DEBUG] [Thread-58317] [transport.py] [_log()] starting thread (client mode): 0xd0777040
2025-11-17T17:25:11.978 [DEBUG] [Thread-58317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:25:11.995 [DEBUG] [Thread-58317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:25:11.995 [INFO] [Thread-58317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:25:12.003 [DEBUG] [Thread-58317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:25:12.003 [DEBUG] [Thread-58317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:25:12.003 [DEBUG] [Thread-58317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:25:12.003 [DEBUG] [Thread-58317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:25:12.003 [DEBUG] [Thread-58317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:25:12.003 [DEBUG] [Thread-58317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] client lang: <none>
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] server lang: <none>
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] kex follows: False
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:25:12.004 [DEBUG] [Thread-58317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:25:12.005 [DEBUG] [Thread-58317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:25:12.005 [DEBUG] [Thread-58317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:25:12.005 [DEBUG] [Thread-58317] [transport.py] [_log()] Compression: none
2025-11-17T17:25:12.005 [DEBUG] [Thread-58317] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:25:12.062 [DEBUG] [Thread-58317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:25:12.062 [DEBUG] [Thread-58317] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:25:12.063 [DEBUG] [Thread-58317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:25:12.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:25:12.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:25:12.118 [DEBUG] [Thread-58317] [transport.py] [_log()] userauth is OK
2025-11-17T17:25:12.118 [DEBUG] [Thread-58317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:25:12.118 [DEBUG] [Thread-58317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:25:12.118 [DEBUG] [Thread-58317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:25:12.119 [DEBUG] [Thread-58317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:25:12.138 [INFO] [Thread-58317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:25:12.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:25:12.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:25:13.000 [DEBUG] [Thread-58317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:25:13.000 [DEBUG] [Thread-58317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:25:13.048 [DEBUG] [Thread-58317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:25:13.048 [DEBUG] [Thread-58317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:25:13.057 [DEBUG] [Thread-58317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:25:13.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:25:13.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:25:13.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:25:13.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:25:13.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:25:13.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:25:13.092 [DEBUG] [Thread-58317] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:25:20.720 [DEBUG] [Thread-58319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:25:24.895 [DEBUG] [Thread-58320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:25:25.324 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:25:25.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:25:35.769 [DEBUG] [Thread-58321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:25:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:25:43.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:25:43.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:25:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 25, 16), 28.55, 14.23, 0.0, 28.04, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:25:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:25:16
2025-11-17T17:25:43.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:25:44.033 [DEBUG] [Thread-58322] [transport.py] [_log()] starting thread (client mode): 0xd070fca0
2025-11-17T17:25:44.034 [DEBUG] [Thread-58322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:25:44.049 [DEBUG] [Thread-58322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:25:44.049 [INFO] [Thread-58322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] client lang: <none>
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] server lang: <none>
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] kex follows: False
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:25:44.053 [DEBUG] [Thread-58322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:25:44.054 [DEBUG] [Thread-58322] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:25:44.054 [DEBUG] [Thread-58322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:25:44.054 [DEBUG] [Thread-58322] [transport.py] [_log()] Compression: none
2025-11-17T17:25:44.054 [DEBUG] [Thread-58322] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:25:44.069 [DEBUG] [Thread-58322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:25:44.070 [DEBUG] [Thread-58322] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:25:44.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:25:44.070 [DEBUG] [Thread-58322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:25:44.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:25:44.072 [DEBUG] [Thread-58322] [transport.py] [_log()] userauth is OK
2025-11-17T17:25:44.072 [DEBUG] [Thread-58322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:25:44.072 [DEBUG] [Thread-58322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:25:44.072 [DEBUG] [Thread-58322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:25:44.072 [DEBUG] [Thread-58322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:25:44.090 [INFO] [Thread-58322] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:25:44.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:25:44.808 [DEBUG] [Thread-58322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:25:44.808 [DEBUG] [Thread-58322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:25:44.808 [DEBUG] [Thread-58322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:25:44.850 [DEBUG] [Thread-58322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:25:44.850 [DEBUG] [Thread-58322] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:25:44.852 [DEBUG] [Thread-58322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:25:44.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:25:44.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:25:44.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:25:44.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:25:44.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:25:44.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:25:44.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:25:44.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:25:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:25:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.642412 -999.00  +22.80  24.08     19   -1.30 1 1 1 1 1   887    0 22.37 -56.24 ----- 24.1 24.1 274.4 28.4 26.2 -26.7 26.4 -25.5 26.9 -30.2 27.2 -25.8
2025-11-17T17:25:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:25:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:25:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.642412
2025-11-17T17:25:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:25:44.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:25:44.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:25:44.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:25:44.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:25:44.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:25:16', tmtdew=28.55, humidity=14.23, cloud=0.0, wind=28.04, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:25:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:25:44.878 [DEBUG] [Thread-58322] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:25:44.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:25:44.984 [DEBUG] [Thread-58325] [transport.py] [_log()] starting thread (client mode): 0xd07757b0
2025-11-17T17:25:44.984 [DEBUG] [Thread-58325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:25:45.000 [DEBUG] [Thread-58325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:25:45.001 [INFO] [Thread-58325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:25:45.012 [DEBUG] [Thread-58325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] client lang: <none>
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] server lang: <none>
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] kex follows: False
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:25:45.013 [DEBUG] [Thread-58325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:25:45.014 [DEBUG] [Thread-58325] [transport.py] [_log()] Compression: none
2025-11-17T17:25:45.014 [DEBUG] [Thread-58325] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:25:45.070 [DEBUG] [Thread-58325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:25:45.070 [DEBUG] [Thread-58325] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:25:45.071 [DEBUG] [Thread-58325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:25:45.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:25:45.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:25:45.126 [DEBUG] [Thread-58325] [transport.py] [_log()] userauth is OK
2025-11-17T17:25:45.126 [DEBUG] [Thread-58325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:25:45.126 [DEBUG] [Thread-58325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:25:45.126 [DEBUG] [Thread-58325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:25:45.126 [DEBUG] [Thread-58325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:25:45.145 [INFO] [Thread-58325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:25:45.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:25:45.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:25:46.003 [DEBUG] [Thread-58325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:25:46.003 [DEBUG] [Thread-58325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:25:46.050 [DEBUG] [Thread-58325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:25:46.051 [DEBUG] [Thread-58325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:25:46.059 [DEBUG] [Thread-58325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:25:46.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:25:46.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:25:46.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:25:46.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:25:46.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:25:46.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:25:46.093 [DEBUG] [Thread-58325] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:25:50.804 [DEBUG] [Thread-58327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:26:05.845 [DEBUG] [Thread-58328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:26:16.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:26:16.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:26:16.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:26:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 25, 48), 28.58, 14.5, 0.0, 22.11, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:26:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:25:48
2025-11-17T17:26:16.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:26:17.057 [DEBUG] [Thread-58329] [transport.py] [_log()] starting thread (client mode): 0xd07774c0
2025-11-17T17:26:17.058 [DEBUG] [Thread-58329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:26:17.077 [DEBUG] [Thread-58329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:26:17.078 [INFO] [Thread-58329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:26:17.081 [DEBUG] [Thread-58329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:26:17.081 [DEBUG] [Thread-58329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:26:17.081 [DEBUG] [Thread-58329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:26:17.081 [DEBUG] [Thread-58329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:26:17.081 [DEBUG] [Thread-58329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:26:17.081 [DEBUG] [Thread-58329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:26:17.081 [DEBUG] [Thread-58329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] client lang: <none>
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] server lang: <none>
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] kex follows: False
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] Compression: none
2025-11-17T17:26:17.082 [DEBUG] [Thread-58329] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:26:17.098 [DEBUG] [Thread-58329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:26:17.098 [DEBUG] [Thread-58329] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:26:17.099 [DEBUG] [Thread-58329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:26:17.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:26:17.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:26:17.101 [DEBUG] [Thread-58329] [transport.py] [_log()] userauth is OK
2025-11-17T17:26:17.101 [DEBUG] [Thread-58329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:26:17.101 [DEBUG] [Thread-58329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:26:17.101 [DEBUG] [Thread-58329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:26:17.101 [DEBUG] [Thread-58329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:26:17.121 [INFO] [Thread-58329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:26:17.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:26:17.724 [DEBUG] [Thread-58329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:26:17.725 [DEBUG] [Thread-58329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:26:17.725 [DEBUG] [Thread-58329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:26:17.766 [DEBUG] [Thread-58329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:26:17.766 [DEBUG] [Thread-58329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:26:17.768 [DEBUG] [Thread-58329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:26:17.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:26:17.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:26:17.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:26:17.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:26:17.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:26:17.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:26:17.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:26:17.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:26:17.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:26:17.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.642760 -999.00  +22.80  21.31     20   -1.20 1 1 1 1 1   887    0 22.91 -51.32 ----- 20.7 21.3 279.8 28.8 26.2 -25.9 26.4 -25.1 26.6 -26.6 27.2 -25.3
2025-11-17T17:26:17.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:26:17.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:26:17.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.642760
2025-11-17T17:26:17.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:26:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:26:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:26:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:26:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:26:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:25:48', tmtdew=28.58, humidity=14.5, cloud=0.0, wind=22.11, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:25:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:26:17.785 [DEBUG] [Thread-58329] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:26:17.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:26:17.883 [DEBUG] [Thread-58332] [transport.py] [_log()] starting thread (client mode): 0xd3135cc0
2025-11-17T17:26:17.883 [DEBUG] [Thread-58332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:26:17.906 [DEBUG] [Thread-58332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:26:17.906 [INFO] [Thread-58332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:26:17.914 [DEBUG] [Thread-58332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] client lang: <none>
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] server lang: <none>
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] kex follows: False
2025-11-17T17:26:17.915 [DEBUG] [Thread-58332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:26:17.916 [DEBUG] [Thread-58332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:26:17.916 [DEBUG] [Thread-58332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:26:17.916 [DEBUG] [Thread-58332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:26:17.916 [DEBUG] [Thread-58332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:26:17.916 [DEBUG] [Thread-58332] [transport.py] [_log()] Compression: none
2025-11-17T17:26:17.916 [DEBUG] [Thread-58332] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:26:17.974 [DEBUG] [Thread-58332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:26:17.975 [DEBUG] [Thread-58332] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:26:17.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:26:17.976 [DEBUG] [Thread-58332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:26:17.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:26:18.030 [DEBUG] [Thread-58332] [transport.py] [_log()] userauth is OK
2025-11-17T17:26:18.030 [DEBUG] [Thread-58332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:26:18.030 [DEBUG] [Thread-58332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:26:18.030 [DEBUG] [Thread-58332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:26:18.031 [DEBUG] [Thread-58332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:26:18.050 [INFO] [Thread-58332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:26:18.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:26:18.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:26:18.915 [DEBUG] [Thread-58332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:26:18.916 [DEBUG] [Thread-58332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:26:18.963 [DEBUG] [Thread-58332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:26:18.963 [DEBUG] [Thread-58332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:26:18.972 [DEBUG] [Thread-58332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:26:18.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:26:18.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:26:18.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:26:18.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:26:18.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:26:18.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:26:19.007 [DEBUG] [Thread-58332] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:26:20.873 [DEBUG] [Thread-58334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:26:24.953 [DEBUG] [Thread-58335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:26:25.467 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:26:25.468 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:26:35.916 [DEBUG] [Thread-58336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:26:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:26:49.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:26:49.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:26:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 26, 20), 28.69, 14.4, 0.0, 24.84, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:26:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:26:20
2025-11-17T17:26:49.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:26:49.956 [DEBUG] [Thread-58337] [transport.py] [_log()] starting thread (client mode): 0xd07eac50
2025-11-17T17:26:49.956 [DEBUG] [Thread-58337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:26:49.977 [DEBUG] [Thread-58337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:26:49.977 [INFO] [Thread-58337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:26:49.980 [DEBUG] [Thread-58337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:26:49.980 [DEBUG] [Thread-58337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:26:49.980 [DEBUG] [Thread-58337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] client lang: <none>
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] server lang: <none>
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] kex follows: False
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] Compression: none
2025-11-17T17:26:49.981 [DEBUG] [Thread-58337] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:26:49.998 [DEBUG] [Thread-58337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:26:49.999 [DEBUG] [Thread-58337] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:26:50.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:26:50.000 [DEBUG] [Thread-58337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:26:50.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:26:50.002 [DEBUG] [Thread-58337] [transport.py] [_log()] userauth is OK
2025-11-17T17:26:50.002 [DEBUG] [Thread-58337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:26:50.002 [DEBUG] [Thread-58337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:26:50.002 [DEBUG] [Thread-58337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:26:50.002 [DEBUG] [Thread-58337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:26:50.021 [INFO] [Thread-58337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:26:50.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:26:50.779 [DEBUG] [Thread-58337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:26:50.779 [DEBUG] [Thread-58337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:26:50.779 [DEBUG] [Thread-58337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:26:50.819 [DEBUG] [Thread-58337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:26:50.820 [DEBUG] [Thread-58337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:26:50.822 [DEBUG] [Thread-58337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:26:50.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:26:50.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:26:50.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:26:50.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:26:50.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:26:50.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:26:50.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:26:50.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:26:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:26:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.643107 -999.00  +22.60  23.30     20   -1.40 1 1 1 1 1   887    0 22.00 -52.99 ----- 24.2 23.3 276.6 33.4 26.1 -26.5 26.3 -25.5 26.6 -27.1 27.1 -25.8
2025-11-17T17:26:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:26:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:26:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.643107
2025-11-17T17:26:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:26:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:26:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:26:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:26:50.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:26:50.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:26:20', tmtdew=28.69, humidity=14.4, cloud=0.0, wind=24.84, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:26:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:26:50.848 [DEBUG] [Thread-58337] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:26:50.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:26:50.944 [DEBUG] [Thread-58340] [transport.py] [_log()] starting thread (client mode): 0xd07eb670
2025-11-17T17:26:50.945 [DEBUG] [Thread-58340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:26:50.949 [DEBUG] [Thread-58341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:26:50.959 [DEBUG] [Thread-58340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:26:50.960 [INFO] [Thread-58340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:26:50.967 [DEBUG] [Thread-58340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:26:50.967 [DEBUG] [Thread-58340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:26:50.967 [DEBUG] [Thread-58340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:26:50.967 [DEBUG] [Thread-58340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:26:50.967 [DEBUG] [Thread-58340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] client lang: <none>
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] server lang: <none>
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] kex follows: False
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:26:50.968 [DEBUG] [Thread-58340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:26:50.969 [DEBUG] [Thread-58340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:26:50.969 [DEBUG] [Thread-58340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:26:50.969 [DEBUG] [Thread-58340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:26:50.969 [DEBUG] [Thread-58340] [transport.py] [_log()] Compression: none
2025-11-17T17:26:50.969 [DEBUG] [Thread-58340] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:26:51.025 [DEBUG] [Thread-58340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:26:51.026 [DEBUG] [Thread-58340] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:26:51.027 [DEBUG] [Thread-58340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:26:51.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:26:51.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:26:51.082 [DEBUG] [Thread-58340] [transport.py] [_log()] userauth is OK
2025-11-17T17:26:51.082 [DEBUG] [Thread-58340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:26:51.082 [DEBUG] [Thread-58340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:26:51.082 [DEBUG] [Thread-58340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:26:51.083 [DEBUG] [Thread-58340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:26:51.101 [INFO] [Thread-58340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:26:51.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:26:51.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:26:51.956 [DEBUG] [Thread-58340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:26:51.956 [DEBUG] [Thread-58340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:26:52.004 [DEBUG] [Thread-58340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:26:52.004 [DEBUG] [Thread-58340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:26:52.013 [DEBUG] [Thread-58340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:26:52.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:26:52.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:26:52.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:26:52.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:26:52.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:26:52.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:26:52.047 [DEBUG] [Thread-58340] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:27:05.982 [DEBUG] [Thread-58343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:27:21.017 [DEBUG] [Thread-58344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:27:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:27:22.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:27:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:27:22.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 26, 52), 28.74, 14.29, 0.0, 25.09, 22.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:27:22.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:26:52
2025-11-17T17:27:22.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:27:23.017 [DEBUG] [Thread-58345] [transport.py] [_log()] starting thread (client mode): 0xd0731000
2025-11-17T17:27:23.017 [DEBUG] [Thread-58345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:27:23.028 [DEBUG] [Thread-58345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:27:23.028 [INFO] [Thread-58345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] client lang: <none>
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] server lang: <none>
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] kex follows: False
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:27:23.029 [DEBUG] [Thread-58345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:27:23.030 [DEBUG] [Thread-58345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:27:23.030 [DEBUG] [Thread-58345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:27:23.030 [DEBUG] [Thread-58345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:27:23.030 [DEBUG] [Thread-58345] [transport.py] [_log()] Compression: none
2025-11-17T17:27:23.030 [DEBUG] [Thread-58345] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:27:23.047 [DEBUG] [Thread-58345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:27:23.047 [DEBUG] [Thread-58345] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:27:23.047 [DEBUG] [Thread-58345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:27:23.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:27:23.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:27:23.048 [DEBUG] [Thread-58345] [transport.py] [_log()] userauth is OK
2025-11-17T17:27:23.048 [DEBUG] [Thread-58345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:27:23.048 [DEBUG] [Thread-58345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:27:23.048 [DEBUG] [Thread-58345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:27:23.048 [DEBUG] [Thread-58345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:27:23.060 [INFO] [Thread-58345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:27:23.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:27:23.685 [DEBUG] [Thread-58345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:27:23.685 [DEBUG] [Thread-58345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:27:23.685 [DEBUG] [Thread-58345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:27:23.726 [DEBUG] [Thread-58345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:27:23.726 [DEBUG] [Thread-58345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:27:23.727 [DEBUG] [Thread-58345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:27:23.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:27:23.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:27:23.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:27:23.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:27:23.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:27:23.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:27:23.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.643454 -999.00  +22.70  21.84     20   -1.30 1 1 1 1 1   887    0 22.42 -47.45 ----- 21.8 21.8 272.8 24.7 26.0 -26.4 26.2 -25.9 26.6 -26.3 27.1 -26.3
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.643454
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:27:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:26:52', tmtdew=28.74, humidity=14.29, cloud=0.0, wind=25.09, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:26:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:27:23.741 [DEBUG] [Thread-58345] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:27:23.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:27:23.826 [DEBUG] [Thread-58348] [transport.py] [_log()] starting thread (client mode): 0xd0733ca0
2025-11-17T17:27:23.826 [DEBUG] [Thread-58348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:27:23.840 [DEBUG] [Thread-58348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:27:23.841 [INFO] [Thread-58348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] client lang: <none>
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] server lang: <none>
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] kex follows: False
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] Compression: none
2025-11-17T17:27:23.848 [DEBUG] [Thread-58348] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:27:23.905 [DEBUG] [Thread-58348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:27:23.905 [DEBUG] [Thread-58348] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:27:23.905 [DEBUG] [Thread-58348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:27:23.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:27:23.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:27:23.961 [DEBUG] [Thread-58348] [transport.py] [_log()] userauth is OK
2025-11-17T17:27:23.961 [DEBUG] [Thread-58348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:27:23.962 [DEBUG] [Thread-58348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:27:23.962 [DEBUG] [Thread-58348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:27:23.962 [DEBUG] [Thread-58348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:27:23.976 [INFO] [Thread-58348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:27:23.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:27:23.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:27:24.882 [DEBUG] [Thread-58348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:27:24.882 [DEBUG] [Thread-58348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:27:24.930 [DEBUG] [Thread-58348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:27:24.930 [DEBUG] [Thread-58348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:27:24.938 [DEBUG] [Thread-58348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:27:24.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:27:24.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:27:24.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:27:24.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:27:24.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:27:24.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:27:24.970 [DEBUG] [Thread-58348] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:27:25.003 [DEBUG] [Thread-58350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:27:25.610 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:27:25.610 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:27:36.051 [DEBUG] [Thread-58351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:27:51.103 [DEBUG] [Thread-58352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:27:54.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:27:54.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:27:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:27:55.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 27, 24), 28.84, 14.22, 0.0, 25.9, 23.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:27:55.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:27:24
2025-11-17T17:27:55.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:27:55.905 [DEBUG] [Thread-58353] [transport.py] [_log()] starting thread (client mode): 0xd07eb9a0
2025-11-17T17:27:55.905 [DEBUG] [Thread-58353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:27:55.926 [DEBUG] [Thread-58353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:27:55.926 [INFO] [Thread-58353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:27:55.929 [DEBUG] [Thread-58353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:27:55.929 [DEBUG] [Thread-58353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] client lang: <none>
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] server lang: <none>
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] kex follows: False
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:27:55.930 [DEBUG] [Thread-58353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:27:55.931 [DEBUG] [Thread-58353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:27:55.931 [DEBUG] [Thread-58353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:27:55.931 [DEBUG] [Thread-58353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:27:55.931 [DEBUG] [Thread-58353] [transport.py] [_log()] Compression: none
2025-11-17T17:27:55.931 [DEBUG] [Thread-58353] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:27:55.949 [DEBUG] [Thread-58353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:27:55.949 [DEBUG] [Thread-58353] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:27:55.950 [DEBUG] [Thread-58353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:27:55.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:27:55.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:27:55.952 [DEBUG] [Thread-58353] [transport.py] [_log()] userauth is OK
2025-11-17T17:27:55.952 [DEBUG] [Thread-58353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:27:55.952 [DEBUG] [Thread-58353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:27:55.952 [DEBUG] [Thread-58353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:27:55.952 [DEBUG] [Thread-58353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:27:55.970 [INFO] [Thread-58353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:27:55.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:27:56.755 [DEBUG] [Thread-58353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:27:56.755 [DEBUG] [Thread-58353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:27:56.755 [DEBUG] [Thread-58353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:27:56.796 [DEBUG] [Thread-58353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:27:56.796 [DEBUG] [Thread-58353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:27:56.798 [DEBUG] [Thread-58353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:27:56.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:27:56.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:27:56.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:27:56.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:27:56.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:27:56.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:27:56.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.643802 -999.00  +22.90  22.14     19   -1.20 1 1 1 1 1   887    0 22.88 -41.41 ----- 23.8 22.1 292.6 25.4 26.1 -26.5 26.2 -25.8 26.6 -24.8 27.1 -26.4
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.643802
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:27:24', tmtdew=28.84, humidity=14.22, cloud=0.0, wind=25.9, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:27:04.493', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:27:56.815 [DEBUG] [Thread-58353] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:27:56.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:27:56.901 [DEBUG] [Thread-58356] [transport.py] [_log()] starting thread (client mode): 0xd07eb550
2025-11-17T17:27:56.901 [DEBUG] [Thread-58356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:27:56.917 [DEBUG] [Thread-58356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:27:56.917 [INFO] [Thread-58356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:27:56.924 [DEBUG] [Thread-58356] [transport.py] [_log()] client lang: <none>
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] server lang: <none>
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] kex follows: False
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] Compression: none
2025-11-17T17:27:56.925 [DEBUG] [Thread-58356] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:27:56.980 [DEBUG] [Thread-58356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:27:56.981 [DEBUG] [Thread-58356] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:27:56.981 [DEBUG] [Thread-58356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:27:56.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:27:56.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:27:57.041 [DEBUG] [Thread-58356] [transport.py] [_log()] userauth is OK
2025-11-17T17:27:57.041 [DEBUG] [Thread-58356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:27:57.041 [DEBUG] [Thread-58356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:27:57.041 [DEBUG] [Thread-58356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:27:57.041 [DEBUG] [Thread-58356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:27:57.055 [INFO] [Thread-58356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:27:57.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:27:57.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:27:57.903 [DEBUG] [Thread-58356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:27:57.903 [DEBUG] [Thread-58356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:27:57.951 [DEBUG] [Thread-58356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:27:57.951 [DEBUG] [Thread-58356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:27:57.959 [DEBUG] [Thread-58356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:27:57.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:27: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')
2025-11-17T17:27:57.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:27:57.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:27:57.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:27:57.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:27:57.991 [DEBUG] [Thread-58356] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:28:06.133 [DEBUG] [Thread-58358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:28:21.176 [DEBUG] [Thread-58359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:28:25.053 [DEBUG] [Thread-58360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:28:25.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:28:25.752 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:28:27.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:28:27.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:28:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:28:28.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 27, 56), 28.57, 14.29, 0.0, 20.4, 22.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:28:28.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:27:56
2025-11-17T17:28:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:28:28.942 [DEBUG] [Thread-58361] [transport.py] [_log()] starting thread (client mode): 0xd07ea260
2025-11-17T17:28:28.943 [DEBUG] [Thread-58361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:28:28.962 [DEBUG] [Thread-58361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:28:28.962 [INFO] [Thread-58361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] client lang: <none>
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] server lang: <none>
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] kex follows: False
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] Compression: none
2025-11-17T17:28:28.964 [DEBUG] [Thread-58361] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:28:28.972 [DEBUG] [Thread-58361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:28:28.972 [DEBUG] [Thread-58361] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:28:28.972 [DEBUG] [Thread-58361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:28:28.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:28:28.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:28:28.973 [DEBUG] [Thread-58361] [transport.py] [_log()] userauth is OK
2025-11-17T17:28:28.973 [DEBUG] [Thread-58361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:28:28.973 [DEBUG] [Thread-58361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:28:28.973 [DEBUG] [Thread-58361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:28:28.973 [DEBUG] [Thread-58361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:28:28.982 [INFO] [Thread-58361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:28:28.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:28:29.614 [DEBUG] [Thread-58361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:28:29.614 [DEBUG] [Thread-58361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:28:29.614 [DEBUG] [Thread-58361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:28:29.655 [DEBUG] [Thread-58361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:28:29.655 [DEBUG] [Thread-58361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:28:29.657 [DEBUG] [Thread-58361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:28:29.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:28:29.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:28:29.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:28:29.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:28:29.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:28:29.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:28:29.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:28:29.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:28:29.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:28:29.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.644149 -999.00  +22.50  18.71     20   -1.40 1 1 1 1 1   887    0 22.94 -33.08 ----- 18.2 18.7 295.2 28.8 26.0 -26.2 26.1 -25.8 26.6 -26.1 26.9 -26.1
2025-11-17T17:28:29.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:28:29.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:28:29.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.644149
2025-11-17T17:28:29.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:28:29.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:28:29.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:28:29.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:28:29.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:28:29.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:27:56', tmtdew=28.57, humidity=14.29, cloud=0.0, wind=20.4, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:27:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:28:29.677 [DEBUG] [Thread-58361] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:28:29.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:28:29.762 [DEBUG] [Thread-58364] [transport.py] [_log()] starting thread (client mode): 0xd07eb2e0
2025-11-17T17:28:29.762 [DEBUG] [Thread-58364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:28:29.777 [DEBUG] [Thread-58364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:28:29.777 [INFO] [Thread-58364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] client lang: <none>
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] server lang: <none>
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] kex follows: False
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] Compression: none
2025-11-17T17:28:29.785 [DEBUG] [Thread-58364] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:28:29.841 [DEBUG] [Thread-58364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:28:29.841 [DEBUG] [Thread-58364] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:28:29.841 [DEBUG] [Thread-58364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:28:29.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:28:29.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:28:29.897 [DEBUG] [Thread-58364] [transport.py] [_log()] userauth is OK
2025-11-17T17:28:29.897 [DEBUG] [Thread-58364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:28:29.897 [DEBUG] [Thread-58364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:28:29.897 [DEBUG] [Thread-58364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:28:29.897 [DEBUG] [Thread-58364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:28:29.911 [INFO] [Thread-58364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:28:29.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:28:29.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:28:30.774 [DEBUG] [Thread-58364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:28:30.774 [DEBUG] [Thread-58364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:28:30.822 [DEBUG] [Thread-58364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:28:30.822 [DEBUG] [Thread-58364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:28:30.831 [DEBUG] [Thread-58364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:28:30.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:28:30.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:28:30.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:28:30.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:28:30.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:28:30.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:28:30.866 [DEBUG] [Thread-58364] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:28:36.206 [DEBUG] [Thread-58366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:28:51.250 [DEBUG] [Thread-58367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:29:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:29:00.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:29:00.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:29:01.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 28, 28), 28.47, 14.35, 0.0, 18.92, 22.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:29:01.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:28:28
2025-11-17T17:29:01.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:29:01.855 [DEBUG] [Thread-58368] [transport.py] [_log()] starting thread (client mode): 0xd07e80a0
2025-11-17T17:29:01.855 [DEBUG] [Thread-58368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:29:01.877 [DEBUG] [Thread-58368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:29:01.877 [INFO] [Thread-58368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] client lang: <none>
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] server lang: <none>
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] kex follows: False
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] Compression: none
2025-11-17T17:29:01.878 [DEBUG] [Thread-58368] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:29:01.893 [DEBUG] [Thread-58368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:29:01.893 [DEBUG] [Thread-58368] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:29:01.894 [DEBUG] [Thread-58368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:29:01.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:29:01.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:29:01.894 [DEBUG] [Thread-58368] [transport.py] [_log()] userauth is OK
2025-11-17T17:29:01.894 [DEBUG] [Thread-58368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:29:01.894 [DEBUG] [Thread-58368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:29:01.894 [DEBUG] [Thread-58368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:29:01.894 [DEBUG] [Thread-58368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:29:01.903 [INFO] [Thread-58368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:29:01.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:29:02.716 [DEBUG] [Thread-58368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:29:02.717 [DEBUG] [Thread-58368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:29:02.717 [DEBUG] [Thread-58368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:29:02.758 [DEBUG] [Thread-58368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:29:02.758 [DEBUG] [Thread-58368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:29:02.761 [DEBUG] [Thread-58368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:29:02.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:29:02.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:29:02.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:29:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:29:02.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:29:02.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:29:02.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:29:02.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:29:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:29:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.644496 -999.00  +22.50  25.18     20   -1.30 1 1 1 1 1   887    0 23.04 -29.92 ----- 19.4 25.2 292.2 33.5 25.9 -26.8 26.0 -25.9 26.5 -26.5 26.7 -26.6
2025-11-17T17:29:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:29:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:29:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.644496
2025-11-17T17:29:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:29:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:29:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:29:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:29:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:29:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:28:28', tmtdew=28.47, humidity=14.35, cloud=0.0, wind=18.92, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:28:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:29:02.786 [DEBUG] [Thread-58368] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:29:02.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:29:02.890 [DEBUG] [Thread-58371] [transport.py] [_log()] starting thread (client mode): 0xd0774400
2025-11-17T17:29:02.890 [DEBUG] [Thread-58371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:29:02.909 [DEBUG] [Thread-58371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:29:02.909 [INFO] [Thread-58371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] client lang: <none>
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] server lang: <none>
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] kex follows: False
2025-11-17T17:29:02.917 [DEBUG] [Thread-58371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:29:02.918 [DEBUG] [Thread-58371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:29:02.918 [DEBUG] [Thread-58371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:29:02.918 [DEBUG] [Thread-58371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:29:02.918 [DEBUG] [Thread-58371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:29:02.918 [DEBUG] [Thread-58371] [transport.py] [_log()] Compression: none
2025-11-17T17:29:02.918 [DEBUG] [Thread-58371] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:29:02.974 [DEBUG] [Thread-58371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:29:02.975 [DEBUG] [Thread-58371] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:29:02.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:29:02.976 [DEBUG] [Thread-58371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:29:02.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:29:03.030 [DEBUG] [Thread-58371] [transport.py] [_log()] userauth is OK
2025-11-17T17:29:03.030 [DEBUG] [Thread-58371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:29:03.030 [DEBUG] [Thread-58371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:29:03.030 [DEBUG] [Thread-58371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:29:03.030 [DEBUG] [Thread-58371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:29:03.053 [INFO] [Thread-58371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:29:03.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:29:03.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:29:03.926 [DEBUG] [Thread-58371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:29:03.926 [DEBUG] [Thread-58371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:29:03.974 [DEBUG] [Thread-58371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:29:03.975 [DEBUG] [Thread-58371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:29:03.983 [DEBUG] [Thread-58371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:29:03.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:29:03.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:29:04.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:29:04.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:29:04.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:29:04.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:29:04.018 [DEBUG] [Thread-58371] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:29:06.279 [DEBUG] [Thread-58373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:29:21.322 [DEBUG] [Thread-58374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:29:25.113 [DEBUG] [Thread-58375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:29:25.893 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:29:25.894 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:29:34.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:29:34.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:29: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
2025-11-17T17:29:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 28, 28), 28.77, 14.35, 0.0, 22.52, 23.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:29:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:28:28
2025-11-17T17:29:34.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:29:34.966 [DEBUG] [Thread-58376] [transport.py] [_log()] starting thread (client mode): 0xd0775ae0
2025-11-17T17:29:34.966 [DEBUG] [Thread-58376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:29:34.986 [DEBUG] [Thread-58376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:29:34.986 [INFO] [Thread-58376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:29:34.989 [DEBUG] [Thread-58376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:29:34.989 [DEBUG] [Thread-58376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] client lang: <none>
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] server lang: <none>
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] kex follows: False
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:29:34.990 [DEBUG] [Thread-58376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:29:34.991 [DEBUG] [Thread-58376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:29:34.991 [DEBUG] [Thread-58376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:29:34.991 [DEBUG] [Thread-58376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:29:34.991 [DEBUG] [Thread-58376] [transport.py] [_log()] Compression: none
2025-11-17T17:29:34.991 [DEBUG] [Thread-58376] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:29:35.010 [DEBUG] [Thread-58376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:29:35.010 [DEBUG] [Thread-58376] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:29:35.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:29:35.012 [DEBUG] [Thread-58376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:29:35.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:29:35.014 [DEBUG] [Thread-58376] [transport.py] [_log()] userauth is OK
2025-11-17T17:29:35.014 [DEBUG] [Thread-58376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:29:35.014 [DEBUG] [Thread-58376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:29:35.014 [DEBUG] [Thread-58376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:29:35.014 [DEBUG] [Thread-58376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:29:35.048 [INFO] [Thread-58376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:29:35.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:29:35.630 [DEBUG] [Thread-58376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:29:35.631 [DEBUG] [Thread-58376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:29:35.631 [DEBUG] [Thread-58376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:29:35.671 [DEBUG] [Thread-58376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:29:35.672 [DEBUG] [Thread-58376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:29:35.675 [DEBUG] [Thread-58376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:29:35.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:29:35.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:29:35.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:29:35.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:29:35.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:29:35.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:29:35.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:29:35.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:29:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:29:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.644843 -999.00  +22.70  26.95     20   -1.30 1 1 1 1 1   887    0 22.94 -23.97 ----- 24.7 26.9 277.6 31.0 25.8 -27.0 25.9 -26.6 26.3 -28.1 26.5 -27.1
2025-11-17T17:29:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:29:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:29:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.644843
2025-11-17T17:29:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:29:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:29:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:29:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:29:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:29:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:28:28', tmtdew=28.77, humidity=14.35, cloud=0.0, wind=22.52, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:28:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:29:35.700 [DEBUG] [Thread-58376] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:29:35.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:29:35.795 [DEBUG] [Thread-58379] [transport.py] [_log()] starting thread (client mode): 0xd07ebca0
2025-11-17T17:29:35.795 [DEBUG] [Thread-58379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:29:35.815 [DEBUG] [Thread-58379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:29:35.816 [INFO] [Thread-58379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:29:35.827 [DEBUG] [Thread-58379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] client lang: <none>
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] server lang: <none>
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] kex follows: False
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:29:35.828 [DEBUG] [Thread-58379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:29:35.829 [DEBUG] [Thread-58379] [transport.py] [_log()] Compression: none
2025-11-17T17:29:35.829 [DEBUG] [Thread-58379] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:29:35.885 [DEBUG] [Thread-58379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:29:35.885 [DEBUG] [Thread-58379] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:29:35.886 [DEBUG] [Thread-58379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:29:35.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:29:35.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:29:35.945 [DEBUG] [Thread-58379] [transport.py] [_log()] userauth is OK
2025-11-17T17:29:35.946 [DEBUG] [Thread-58379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:29:35.946 [DEBUG] [Thread-58379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:29:35.946 [DEBUG] [Thread-58379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:29:35.946 [DEBUG] [Thread-58379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:29:35.964 [INFO] [Thread-58379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:29:35.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:29:35.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:29:36.352 [DEBUG] [Thread-58381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:29:36.804 [DEBUG] [Thread-58379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:29:36.805 [DEBUG] [Thread-58379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:29:36.852 [DEBUG] [Thread-58379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:29:36.852 [DEBUG] [Thread-58379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:29:36.861 [DEBUG] [Thread-58379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:29:36.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:29:36.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:29:36.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:29:36.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:29:36.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:29:36.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:29:36.894 [DEBUG] [Thread-58379] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:29:51.393 [DEBUG] [Thread-58382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:30:06.424 [DEBUG] [Thread-58383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:30:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:30:06.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:30:06.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:30:07.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 30, 4), 28.75, 14.37, 0.0, 25.81, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:30:07.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:30:04
2025-11-17T17:30:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:30:07.835 [DEBUG] [Thread-58384] [transport.py] [_log()] starting thread (client mode): 0xd07eb4c0
2025-11-17T17:30:07.835 [DEBUG] [Thread-58384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:30:07.857 [DEBUG] [Thread-58384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:30:07.857 [INFO] [Thread-58384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:30:07.858 [DEBUG] [Thread-58384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] client lang: <none>
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] server lang: <none>
2025-11-17T17:30:07.859 [DEBUG] [Thread-58384] [transport.py] [_log()] kex follows: False
2025-11-17T17:30:07.860 [DEBUG] [Thread-58384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:30:07.860 [DEBUG] [Thread-58384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:30:07.860 [DEBUG] [Thread-58384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:30:07.860 [DEBUG] [Thread-58384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:30:07.860 [DEBUG] [Thread-58384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:30:07.860 [DEBUG] [Thread-58384] [transport.py] [_log()] Compression: none
2025-11-17T17:30:07.860 [DEBUG] [Thread-58384] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:30:07.870 [DEBUG] [Thread-58384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:30:07.871 [DEBUG] [Thread-58384] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:30:07.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:30:07.872 [DEBUG] [Thread-58384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:30:07.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:30:07.874 [DEBUG] [Thread-58384] [transport.py] [_log()] userauth is OK
2025-11-17T17:30:07.874 [DEBUG] [Thread-58384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:30:07.875 [DEBUG] [Thread-58384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:30:07.875 [DEBUG] [Thread-58384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:30:07.875 [DEBUG] [Thread-58384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:30:07.899 [INFO] [Thread-58384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:30:07.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:30:09.724 [DEBUG] [Thread-58384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:30:09.725 [DEBUG] [Thread-58384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:30:09.725 [DEBUG] [Thread-58384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:30:09.766 [DEBUG] [Thread-58384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:30:09.766 [DEBUG] [Thread-58384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:30:09.768 [DEBUG] [Thread-58384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:30:09.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:30:09.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:30:09.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:30:09.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:30:09.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:30:09.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:30:09.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:30:09.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:30:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:30:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.645190 -999.00  +22.30  30.85     20   -1.60 1 1 2 1 1   887    0 23.54 -20.26 ----- 25.8 30.9 272.4 42.0 25.6 -27.4 25.8 -26.2 25.8 -31.3 26.3 -26.6
2025-11-17T17:30:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:30:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:30:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.645190
2025-11-17T17:30:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:30:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:30:09.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:30:09.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:30:09.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:30:09.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:30:04', tmtdew=28.75, humidity=14.37, cloud=0.0, wind=25.81, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:29:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:30:09.888 [DEBUG] [Thread-58384] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:30:09.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:30:09.986 [DEBUG] [Thread-58387] [transport.py] [_log()] starting thread (client mode): 0xd07e9780
2025-11-17T17:30:09.986 [DEBUG] [Thread-58387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:30:10.001 [DEBUG] [Thread-58387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:30:10.002 [INFO] [Thread-58387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:30:10.009 [DEBUG] [Thread-58387] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] client lang: <none>
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] server lang: <none>
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] kex follows: False
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:30:10.010 [DEBUG] [Thread-58387] [transport.py] [_log()] Compression: none
2025-11-17T17:30:10.011 [DEBUG] [Thread-58387] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:30:10.069 [DEBUG] [Thread-58387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:30:10.070 [DEBUG] [Thread-58387] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:30:10.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:30:10.071 [DEBUG] [Thread-58387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:30:10.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:30:10.125 [DEBUG] [Thread-58387] [transport.py] [_log()] userauth is OK
2025-11-17T17:30:10.126 [DEBUG] [Thread-58387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:30:10.126 [DEBUG] [Thread-58387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:30:10.126 [DEBUG] [Thread-58387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:30:10.126 [DEBUG] [Thread-58387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:30:10.146 [INFO] [Thread-58387] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:30:10.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:30:10.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:30:11.017 [DEBUG] [Thread-58387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:30:11.017 [DEBUG] [Thread-58387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:30:11.064 [DEBUG] [Thread-58387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:30:11.064 [DEBUG] [Thread-58387] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:30:11.073 [DEBUG] [Thread-58387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:30:11.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:30:11.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:30:11.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:30:11.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:30:11.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:30:11.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:30:11.108 [DEBUG] [Thread-58387] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:30:21.454 [DEBUG] [Thread-58389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:30:25.166 [DEBUG] [Thread-58390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:30:26.042 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:30:26.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:30:36.493 [DEBUG] [Thread-58391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:30:41.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:30:41.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:30:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:30:41.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 30, 36), 28.98, 13.8, 0.0, 28.23, 23.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:30:41.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:30:36
2025-11-17T17:30:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:30:42.053 [DEBUG] [Thread-58392] [transport.py] [_log()] starting thread (client mode): 0xd3163a30
2025-11-17T17:30:42.053 [DEBUG] [Thread-58392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:30:42.072 [DEBUG] [Thread-58392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:30:42.073 [INFO] [Thread-58392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:30:42.076 [DEBUG] [Thread-58392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:30:42.076 [DEBUG] [Thread-58392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:30:42.076 [DEBUG] [Thread-58392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:30:42.076 [DEBUG] [Thread-58392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:30:42.076 [DEBUG] [Thread-58392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:30:42.076 [DEBUG] [Thread-58392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:30:42.076 [DEBUG] [Thread-58392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:30:42.076 [DEBUG] [Thread-58392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] client lang: <none>
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] server lang: <none>
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] kex follows: False
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] Compression: none
2025-11-17T17:30:42.077 [DEBUG] [Thread-58392] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:30:42.093 [DEBUG] [Thread-58392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:30:42.094 [DEBUG] [Thread-58392] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:30:42.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:30:42.095 [DEBUG] [Thread-58392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:30:42.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:30:42.096 [DEBUG] [Thread-58392] [transport.py] [_log()] userauth is OK
2025-11-17T17:30:42.096 [DEBUG] [Thread-58392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:30:42.096 [DEBUG] [Thread-58392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:30:42.097 [DEBUG] [Thread-58392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:30:42.097 [DEBUG] [Thread-58392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:30:42.117 [INFO] [Thread-58392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:30:42.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:30:42.707 [DEBUG] [Thread-58392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:30:42.707 [DEBUG] [Thread-58392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:30:42.707 [DEBUG] [Thread-58392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:30:42.748 [DEBUG] [Thread-58392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:30:42.749 [DEBUG] [Thread-58392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:30:42.751 [DEBUG] [Thread-58392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:30:42.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:30:42.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:30:42.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:30:42.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:30:42.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:30:42.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:30:42.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:30:42.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:30:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:30:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.645885 -999.00  +22.30  25.48     20   -1.40 1 1 1 1 1   887    0 23.60 -15.62 ----- 26.4 25.5 273.4 28.2 25.5 -27.0 25.7 -26.2 25.9 -26.3 26.2 -25.6
2025-11-17T17:30:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:30:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:30:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.645885
2025-11-17T17:30:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:30:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:30:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:30:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:30:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:30:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:30:36', tmtdew=28.98, humidity=13.8, cloud=0.0, wind=28.23, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:30:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:30:42.772 [DEBUG] [Thread-58392] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:30:42.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:30:42.867 [DEBUG] [Thread-58395] [transport.py] [_log()] starting thread (client mode): 0xd07778e0
2025-11-17T17:30:42.867 [DEBUG] [Thread-58395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:30:42.881 [DEBUG] [Thread-58395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:30:42.882 [INFO] [Thread-58395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] client lang: <none>
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] server lang: <none>
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] kex follows: False
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:30:42.889 [DEBUG] [Thread-58395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:30:42.890 [DEBUG] [Thread-58395] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:30:42.890 [DEBUG] [Thread-58395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:30:42.890 [DEBUG] [Thread-58395] [transport.py] [_log()] Compression: none
2025-11-17T17:30:42.890 [DEBUG] [Thread-58395] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:30:42.945 [DEBUG] [Thread-58395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:30:42.945 [DEBUG] [Thread-58395] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:30:42.946 [DEBUG] [Thread-58395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:30:42.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:30:42.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:30:43.001 [DEBUG] [Thread-58395] [transport.py] [_log()] userauth is OK
2025-11-17T17:30:43.001 [DEBUG] [Thread-58395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:30:43.002 [DEBUG] [Thread-58395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:30:43.002 [DEBUG] [Thread-58395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:30:43.002 [DEBUG] [Thread-58395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:30:43.020 [INFO] [Thread-58395] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:30:43.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:30:43.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:30:43.901 [DEBUG] [Thread-58395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:30:43.901 [DEBUG] [Thread-58395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:30:43.949 [DEBUG] [Thread-58395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:30:43.949 [DEBUG] [Thread-58395] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:30:43.958 [DEBUG] [Thread-58395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:30:43.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:30:43.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:30:43.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:30:43.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:30:43.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:30:43.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:30:43.991 [DEBUG] [Thread-58395] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:30:51.521 [DEBUG] [Thread-58397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:31:06.571 [DEBUG] [Thread-58398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:31:14.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:31:14.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:31:14.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:31:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 31, 8), 29.06, 13.74, 0.0, 26.45, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:31:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:31:08
2025-11-17T17:31:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:31:14.992 [DEBUG] [Thread-58399] [transport.py] [_log()] starting thread (client mode): 0xd07752d0
2025-11-17T17:31:14.992 [DEBUG] [Thread-58399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:31:15.013 [DEBUG] [Thread-58399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:31:15.013 [INFO] [Thread-58399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] client lang: <none>
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] server lang: <none>
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] kex follows: False
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] Compression: none
2025-11-17T17:31:15.015 [DEBUG] [Thread-58399] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:31:15.023 [DEBUG] [Thread-58399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:31:15.023 [DEBUG] [Thread-58399] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:31:15.023 [DEBUG] [Thread-58399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:31:15.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:31:15.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:31:15.024 [DEBUG] [Thread-58399] [transport.py] [_log()] userauth is OK
2025-11-17T17:31:15.024 [DEBUG] [Thread-58399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:31:15.024 [DEBUG] [Thread-58399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:31:15.024 [DEBUG] [Thread-58399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:31:15.024 [DEBUG] [Thread-58399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:31:15.035 [INFO] [Thread-58399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:31:15.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:31:15.781 [DEBUG] [Thread-58399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:31:15.781 [DEBUG] [Thread-58399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:31:15.781 [DEBUG] [Thread-58399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:31:15.823 [DEBUG] [Thread-58399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:31:15.823 [DEBUG] [Thread-58399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:31:15.825 [DEBUG] [Thread-58399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:31:15.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:31:15.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:31:15.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:31:15.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:31:15.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:31:15.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:31:15.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.646232 -999.00  +22.50  22.17     20   -1.30 1 1 1 1 1   887    0 23.48 -16.07 ----- 13.5 22.2 286.8 27.3 25.6 -26.4 25.8 -25.2 25.8 -26.6 26.4 -25.3
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.646232
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:31:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:31:08', tmtdew=29.06, humidity=13.74, cloud=0.0, wind=26.45, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:30:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:31:15.840 [DEBUG] [Thread-58399] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:31:15.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:31:15.926 [DEBUG] [Thread-58402] [transport.py] [_log()] starting thread (client mode): 0xd0730c70
2025-11-17T17:31:15.926 [DEBUG] [Thread-58402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:31:15.941 [DEBUG] [Thread-58402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:31:15.941 [INFO] [Thread-58402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] client lang: <none>
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] server lang: <none>
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] kex follows: False
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] Compression: none
2025-11-17T17:31:15.949 [DEBUG] [Thread-58402] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:31:16.004 [DEBUG] [Thread-58402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:31:16.004 [DEBUG] [Thread-58402] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:31:16.005 [DEBUG] [Thread-58402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:31:16.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:31:16.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:31:16.061 [DEBUG] [Thread-58402] [transport.py] [_log()] userauth is OK
2025-11-17T17:31:16.061 [DEBUG] [Thread-58402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:31:16.061 [DEBUG] [Thread-58402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:31:16.061 [DEBUG] [Thread-58402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:31:16.061 [DEBUG] [Thread-58402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:31:16.075 [INFO] [Thread-58402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:31:16.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:31:16.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:31:16.935 [DEBUG] [Thread-58402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:31:16.935 [DEBUG] [Thread-58402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:31:16.983 [DEBUG] [Thread-58402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:31:16.983 [DEBUG] [Thread-58402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:31:16.991 [DEBUG] [Thread-58402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:31:16.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:31:16.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:31:17.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:31:17.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:31:17.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:31:17.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:31:17.022 [DEBUG] [Thread-58402] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:31:21.599 [DEBUG] [Thread-58404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:31:25.219 [DEBUG] [Thread-58405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:31:26.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:31:26.184 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:31:36.643 [DEBUG] [Thread-58406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:31:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:31:47.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:31:47.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:31:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 31, 40), 29.15, 13.65, 0.0, 31.44, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:31:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:31:40
2025-11-17T17:31:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:31:47.989 [DEBUG] [Thread-58407] [transport.py] [_log()] starting thread (client mode): 0xd070e020
2025-11-17T17:31:47.989 [DEBUG] [Thread-58407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:31:48.009 [DEBUG] [Thread-58407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:31:48.009 [INFO] [Thread-58407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:31:48.012 [DEBUG] [Thread-58407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] client lang: <none>
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] server lang: <none>
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] kex follows: False
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:31:48.013 [DEBUG] [Thread-58407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:31:48.014 [DEBUG] [Thread-58407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:31:48.014 [DEBUG] [Thread-58407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:31:48.014 [DEBUG] [Thread-58407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:31:48.014 [DEBUG] [Thread-58407] [transport.py] [_log()] Compression: none
2025-11-17T17:31:48.014 [DEBUG] [Thread-58407] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:31:48.033 [DEBUG] [Thread-58407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:31:48.033 [DEBUG] [Thread-58407] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:31:48.034 [DEBUG] [Thread-58407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:31:48.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:31:48.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:31:48.036 [DEBUG] [Thread-58407] [transport.py] [_log()] userauth is OK
2025-11-17T17:31:48.036 [DEBUG] [Thread-58407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:31:48.036 [DEBUG] [Thread-58407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:31:48.036 [DEBUG] [Thread-58407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:31:48.036 [DEBUG] [Thread-58407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:31:48.062 [INFO] [Thread-58407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:31:48.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:31:48.701 [DEBUG] [Thread-58407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:31:48.701 [DEBUG] [Thread-58407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:31:48.701 [DEBUG] [Thread-58407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:31:48.742 [DEBUG] [Thread-58407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:31:48.743 [DEBUG] [Thread-58407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:31:48.745 [DEBUG] [Thread-58407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:31:48.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:31:48.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:31:48.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:31:48.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:31:48.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:31:48.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:31:48.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:31:48.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:31:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:31:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.646579 -999.00  +22.90  21.07     19   -1.20 1 1 1 1 1   887    0 23.87 -14.61 ----- 25.9 21.1 271.0 28.6 25.6 -26.0 25.8 -25.6 26.1 -24.0 26.4 -25.9
2025-11-17T17:31:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:31:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:31:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.646579
2025-11-17T17:31:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:31:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:31:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:31:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:31:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:31:48.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:31:40', tmtdew=29.15, humidity=13.65, cloud=0.0, wind=31.44, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:31:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:31:48.770 [DEBUG] [Thread-58407] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:31:48.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:31:48.869 [DEBUG] [Thread-58410] [transport.py] [_log()] starting thread (client mode): 0xd07868c0
2025-11-17T17:31:48.869 [DEBUG] [Thread-58410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:31:48.888 [DEBUG] [Thread-58410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:31:48.888 [INFO] [Thread-58410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] client lang: <none>
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] server lang: <none>
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] kex follows: False
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] Compression: none
2025-11-17T17:31:48.895 [DEBUG] [Thread-58410] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:31:48.953 [DEBUG] [Thread-58410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:31:48.954 [DEBUG] [Thread-58410] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:31:48.954 [DEBUG] [Thread-58410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:31:48.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:31:48.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:31:49.013 [DEBUG] [Thread-58410] [transport.py] [_log()] userauth is OK
2025-11-17T17:31:49.013 [DEBUG] [Thread-58410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:31:49.013 [DEBUG] [Thread-58410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:31:49.013 [DEBUG] [Thread-58410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:31:49.013 [DEBUG] [Thread-58410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:31:49.036 [INFO] [Thread-58410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:31:49.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:31:49.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:31:49.951 [DEBUG] [Thread-58410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:31:49.951 [DEBUG] [Thread-58410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:31:49.999 [DEBUG] [Thread-58410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:31:49.999 [DEBUG] [Thread-58410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:31:50.008 [DEBUG] [Thread-58410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:31:50.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:31:50.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:31:50.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:31:50.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:31:50.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:31:50.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:31:50.041 [DEBUG] [Thread-58410] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:31:51.671 [DEBUG] [Thread-58412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:32:06.704 [DEBUG] [Thread-58413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:32:20.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:32:20.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:32:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:32:20.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 32, 12), 29.23, 13.59, 0.0, 30.38, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:32:20.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:32:12
2025-11-17T17:32:20.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:32:20.993 [DEBUG] [Thread-58414] [transport.py] [_log()] starting thread (client mode): 0xd0777790
2025-11-17T17:32:20.993 [DEBUG] [Thread-58414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:32:21.013 [DEBUG] [Thread-58414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:32:21.013 [INFO] [Thread-58414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:32:21.014 [DEBUG] [Thread-58414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:32:21.014 [DEBUG] [Thread-58414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:32:21.014 [DEBUG] [Thread-58414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] client lang: <none>
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] server lang: <none>
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] kex follows: False
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:32:21.015 [DEBUG] [Thread-58414] [transport.py] [_log()] Compression: none
2025-11-17T17:32:21.016 [DEBUG] [Thread-58414] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:32:21.035 [DEBUG] [Thread-58414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:32:21.035 [DEBUG] [Thread-58414] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:32:21.036 [DEBUG] [Thread-58414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:32:21.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:32:21.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:32:21.038 [DEBUG] [Thread-58414] [transport.py] [_log()] userauth is OK
2025-11-17T17:32:21.038 [DEBUG] [Thread-58414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:32:21.038 [DEBUG] [Thread-58414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:32:21.038 [DEBUG] [Thread-58414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:32:21.038 [DEBUG] [Thread-58414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:32:21.062 [INFO] [Thread-58414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:32:21.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:32:21.734 [DEBUG] [Thread-58416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:32:21.830 [DEBUG] [Thread-58414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:32:21.830 [DEBUG] [Thread-58414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:32:21.831 [DEBUG] [Thread-58414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:32:21.871 [DEBUG] [Thread-58414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:32:21.871 [DEBUG] [Thread-58414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:32:21.873 [DEBUG] [Thread-58414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:32:21.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:32:21.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:32:21.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:32:21.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:32:21.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:32:21.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:32:21.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:32:21.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:32:21.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:32:21.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.646926 -999.00  +23.10  23.25     19   -1.20 1 1 1 1 1   887    0 23.42 -13.45 ----- 27.8 23.2 285.8 29.5 25.5 -26.5 25.8 -26.6 26.1 -24.6 26.4 -26.4
2025-11-17T17:32:21.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:32:21.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:32:21.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.646926
2025-11-17T17:32:21.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:32:21.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:32:21.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:32:21.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:32:21.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:32:21.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:32:12', tmtdew=29.23, humidity=13.59, cloud=0.0, wind=30.38, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:31:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:32:21.892 [DEBUG] [Thread-58414] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:32:21.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:32:21.988 [DEBUG] [Thread-58418] [transport.py] [_log()] starting thread (client mode): 0xd078cb80
2025-11-17T17:32:21.988 [DEBUG] [Thread-58418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:32:22.003 [DEBUG] [Thread-58418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:32:22.003 [INFO] [Thread-58418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:32:22.011 [DEBUG] [Thread-58418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] client lang: <none>
2025-11-17T17:32:22.012 [DEBUG] [Thread-58418] [transport.py] [_log()] server lang: <none>
2025-11-17T17:32:22.013 [DEBUG] [Thread-58418] [transport.py] [_log()] kex follows: False
2025-11-17T17:32:22.013 [DEBUG] [Thread-58418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:32:22.013 [DEBUG] [Thread-58418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:32:22.013 [DEBUG] [Thread-58418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:32:22.013 [DEBUG] [Thread-58418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:32:22.013 [DEBUG] [Thread-58418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:32:22.013 [DEBUG] [Thread-58418] [transport.py] [_log()] Compression: none
2025-11-17T17:32:22.013 [DEBUG] [Thread-58418] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:32:22.069 [DEBUG] [Thread-58418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:32:22.070 [DEBUG] [Thread-58418] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:32:22.070 [DEBUG] [Thread-58418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:32:22.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:32:22.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:32:22.126 [DEBUG] [Thread-58418] [transport.py] [_log()] userauth is OK
2025-11-17T17:32:22.127 [DEBUG] [Thread-58418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:32:22.127 [DEBUG] [Thread-58418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:32:22.127 [DEBUG] [Thread-58418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:32:22.127 [DEBUG] [Thread-58418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:32:22.147 [INFO] [Thread-58418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:32:22.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:32:22.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:32:23.080 [DEBUG] [Thread-58418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:32:23.080 [DEBUG] [Thread-58418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:32:23.128 [DEBUG] [Thread-58418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:32:23.128 [DEBUG] [Thread-58418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:32:23.137 [DEBUG] [Thread-58418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:32:23.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:32:23.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:32:23.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:32:23.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:32:23.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:32:23.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:32:23.172 [DEBUG] [Thread-58418] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:32:25.272 [DEBUG] [Thread-58420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:32:26.324 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:32:26.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:32:36.765 [DEBUG] [Thread-58421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:32:51.810 [DEBUG] [Thread-58422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:32:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:32:53.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:32:53.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:32:53.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 32, 44), 28.62, 14.38, 0.0, 22.67, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:32:53.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:32:44
2025-11-17T17:32:53.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:32:54.133 [DEBUG] [Thread-58423] [transport.py] [_log()] starting thread (client mode): 0xd0774940
2025-11-17T17:32:54.134 [DEBUG] [Thread-58423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:32:54.153 [DEBUG] [Thread-58423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:32:54.153 [INFO] [Thread-58423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:32:54.156 [DEBUG] [Thread-58423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:32:54.156 [DEBUG] [Thread-58423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:32:54.156 [DEBUG] [Thread-58423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:32:54.156 [DEBUG] [Thread-58423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] client lang: <none>
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] server lang: <none>
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] kex follows: False
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] Compression: none
2025-11-17T17:32:54.157 [DEBUG] [Thread-58423] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:32:54.166 [DEBUG] [Thread-58423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:32:54.167 [DEBUG] [Thread-58423] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:32:54.167 [DEBUG] [Thread-58423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:32:54.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:32:54.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:32:54.169 [DEBUG] [Thread-58423] [transport.py] [_log()] userauth is OK
2025-11-17T17:32:54.169 [DEBUG] [Thread-58423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:32:54.169 [DEBUG] [Thread-58423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:32:54.169 [DEBUG] [Thread-58423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:32:54.170 [DEBUG] [Thread-58423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:32:54.188 [INFO] [Thread-58423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:32:54.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:32:54.794 [DEBUG] [Thread-58423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:32:54.794 [DEBUG] [Thread-58423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:32:54.794 [DEBUG] [Thread-58423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:32:54.834 [DEBUG] [Thread-58423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:32:54.835 [DEBUG] [Thread-58423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:32:54.837 [DEBUG] [Thread-58423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:32:54.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:32:54.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:32:54.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:32:54.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:32:54.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:32:54.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:32:54.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:32:54.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:32:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:32:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.647274 -999.00  +22.70  28.38     19   -1.50 1 1 1 1 1   887    0 23.10 -10.80 ----- 26.3 28.4 273.6 35.9 25.4 -27.0 25.6 -26.9 25.9 -25.9 26.2 -26.6
2025-11-17T17:32:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:32:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:32:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.647274
2025-11-17T17:32:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:32:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:32:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:32:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:32:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:32:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:32:44', tmtdew=28.62, humidity=14.38, cloud=0.0, wind=22.67, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:32:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:32:54.858 [DEBUG] [Thread-58423] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:32:54.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:32:54.949 [DEBUG] [Thread-58426] [transport.py] [_log()] starting thread (client mode): 0xd0730cd0
2025-11-17T17:32:54.949 [DEBUG] [Thread-58426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:32:54.964 [DEBUG] [Thread-58426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:32:54.964 [INFO] [Thread-58426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] client lang: <none>
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] server lang: <none>
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] kex follows: False
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:32:54.972 [DEBUG] [Thread-58426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:32:54.973 [DEBUG] [Thread-58426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:32:54.973 [DEBUG] [Thread-58426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:32:54.973 [DEBUG] [Thread-58426] [transport.py] [_log()] Compression: none
2025-11-17T17:32:54.973 [DEBUG] [Thread-58426] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:32:55.029 [DEBUG] [Thread-58426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:32:55.029 [DEBUG] [Thread-58426] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:32:55.030 [DEBUG] [Thread-58426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:32:55.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:32:55.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:32:55.085 [DEBUG] [Thread-58426] [transport.py] [_log()] userauth is OK
2025-11-17T17:32:55.085 [DEBUG] [Thread-58426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:32:55.085 [DEBUG] [Thread-58426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:32:55.086 [DEBUG] [Thread-58426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:32:55.086 [DEBUG] [Thread-58426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:32:55.105 [INFO] [Thread-58426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:32:55.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:32:55.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:32:55.969 [DEBUG] [Thread-58426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:32:55.970 [DEBUG] [Thread-58426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:32:56.017 [DEBUG] [Thread-58426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:32:56.017 [DEBUG] [Thread-58426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:32:56.026 [DEBUG] [Thread-58426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:32:56.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:32:56.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:32: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
2025-11-17T17:32:56.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:32:56.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:32:56.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:32:56.062 [DEBUG] [Thread-58426] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:33:06.840 [DEBUG] [Thread-58428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:33:21.880 [DEBUG] [Thread-58429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:33:25.324 [DEBUG] [Thread-58430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:33:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:33:26.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:33:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:33:26.467 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:33:26.468 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:33:26.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 33, 16), 28.59, 14.38, 0.0, 24.68, 22.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:33:26.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:33:16
2025-11-17T17:33:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:33:27.015 [DEBUG] [Thread-58431] [transport.py] [_log()] starting thread (client mode): 0xd07ea200
2025-11-17T17:33:27.015 [DEBUG] [Thread-58431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:33:27.034 [DEBUG] [Thread-58431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:33:27.034 [INFO] [Thread-58431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] client lang: <none>
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] server lang: <none>
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] kex follows: False
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] Compression: none
2025-11-17T17:33:27.038 [DEBUG] [Thread-58431] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:33:27.055 [DEBUG] [Thread-58431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:33:27.055 [DEBUG] [Thread-58431] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:33:27.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:33:27.056 [DEBUG] [Thread-58431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:33:27.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:33:27.059 [DEBUG] [Thread-58431] [transport.py] [_log()] userauth is OK
2025-11-17T17:33:27.059 [DEBUG] [Thread-58431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:33:27.059 [DEBUG] [Thread-58431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:33:27.059 [DEBUG] [Thread-58431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:33:27.059 [DEBUG] [Thread-58431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:33:27.081 [INFO] [Thread-58431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:33:27.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:33:27.806 [DEBUG] [Thread-58431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:33:27.806 [DEBUG] [Thread-58431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:33:27.807 [DEBUG] [Thread-58431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:33:27.847 [DEBUG] [Thread-58431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:33:27.847 [DEBUG] [Thread-58431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:33:27.850 [DEBUG] [Thread-58431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:33:27.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:33:27.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:33:27.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:33:27.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:33:27.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:33:27.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:33:27.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:33:27.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:33:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:33:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.647621 -999.00  +22.40  26.58     20   -1.50 1 1 1 1 1   887    0 24.05 -9.33 ----- 25.7 26.6 268.0 30.2 25.2 -27.1 25.5 -26.6 25.7 -28.7 26.0 -27.2
2025-11-17T17:33:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:33:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:33:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.647621
2025-11-17T17:33:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:33:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:33:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:33:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:33:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:33:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:33:16', tmtdew=28.59, humidity=14.38, cloud=0.0, wind=24.68, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:32:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:33:27.877 [DEBUG] [Thread-58431] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:33:27.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:33:27.972 [DEBUG] [Thread-58434] [transport.py] [_log()] starting thread (client mode): 0xd07752a0
2025-11-17T17:33:27.972 [DEBUG] [Thread-58434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:33:27.986 [DEBUG] [Thread-58434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:33:27.986 [INFO] [Thread-58434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:33:27.994 [DEBUG] [Thread-58434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:33:27.994 [DEBUG] [Thread-58434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:33:27.994 [DEBUG] [Thread-58434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:33:27.994 [DEBUG] [Thread-58434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:33:27.994 [DEBUG] [Thread-58434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:33:27.994 [DEBUG] [Thread-58434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:33:27.994 [DEBUG] [Thread-58434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] client lang: <none>
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] server lang: <none>
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] kex follows: False
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:33:27.995 [DEBUG] [Thread-58434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:33:27.996 [DEBUG] [Thread-58434] [transport.py] [_log()] Compression: none
2025-11-17T17:33:27.996 [DEBUG] [Thread-58434] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:33:28.056 [DEBUG] [Thread-58434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:33:28.056 [DEBUG] [Thread-58434] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:33:28.057 [DEBUG] [Thread-58434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:33:28.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:33:28.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:33:28.113 [DEBUG] [Thread-58434] [transport.py] [_log()] userauth is OK
2025-11-17T17:33:28.113 [DEBUG] [Thread-58434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:33:28.113 [DEBUG] [Thread-58434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:33:28.113 [DEBUG] [Thread-58434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:33:28.113 [DEBUG] [Thread-58434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:33:28.127 [INFO] [Thread-58434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:33:28.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:33:28.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:33:28.986 [DEBUG] [Thread-58434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:33:28.986 [DEBUG] [Thread-58434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:33:29.034 [DEBUG] [Thread-58434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:33:29.034 [DEBUG] [Thread-58434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:33:29.043 [DEBUG] [Thread-58434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:33:29.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:33:29.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:33:29.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:33:29.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:33:29.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:33:29.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:33:29.078 [DEBUG] [Thread-58434] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:33:36.912 [DEBUG] [Thread-58436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:33:51.952 [DEBUG] [Thread-58437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:33:59.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:33:59.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:33:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:33:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 33, 48), 28.65, 14.4, 0.0, 26.04, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:33:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:33:48
2025-11-17T17:33:59.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:34:00.037 [DEBUG] [Thread-58438] [transport.py] [_log()] starting thread (client mode): 0xd07bcfa0
2025-11-17T17:34:00.037 [DEBUG] [Thread-58438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:34:00.057 [DEBUG] [Thread-58438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:34:00.057 [INFO] [Thread-58438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:34:00.060 [DEBUG] [Thread-58438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:34:00.060 [DEBUG] [Thread-58438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:34:00.060 [DEBUG] [Thread-58438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:34:00.060 [DEBUG] [Thread-58438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:34:00.060 [DEBUG] [Thread-58438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] client lang: <none>
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] server lang: <none>
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] kex follows: False
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] Compression: none
2025-11-17T17:34:00.061 [DEBUG] [Thread-58438] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:34:00.076 [DEBUG] [Thread-58438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:34:00.077 [DEBUG] [Thread-58438] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:34:00.077 [DEBUG] [Thread-58438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:34:00.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:34:00.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:34:00.079 [DEBUG] [Thread-58438] [transport.py] [_log()] userauth is OK
2025-11-17T17:34:00.079 [DEBUG] [Thread-58438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:34:00.079 [DEBUG] [Thread-58438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:34:00.079 [DEBUG] [Thread-58438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:34:00.079 [DEBUG] [Thread-58438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:34:00.104 [INFO] [Thread-58438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:34:00.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:34:00.743 [DEBUG] [Thread-58438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:34:00.744 [DEBUG] [Thread-58438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:34:00.744 [DEBUG] [Thread-58438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:34:00.784 [DEBUG] [Thread-58438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:34:00.784 [DEBUG] [Thread-58438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:34:00.787 [DEBUG] [Thread-58438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:34:00.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:34:00.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:34:00.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:34:00.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:34:00.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:34:00.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:34:00.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:34:00.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:34:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:34:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.647968 -999.00  +22.40  17.88     20   -1.30 1 1 1 1 1   887    0 23.21 -11.38 ----- 17.5 17.9 270.6 33.1 25.3 -26.4 25.5 -25.8 25.6 -24.8 26.0 -26.3
2025-11-17T17:34:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:34:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:34:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.647968
2025-11-17T17:34:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:34:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:34:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:34:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:34:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:34:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:33:48', tmtdew=28.65, humidity=14.4, cloud=0.0, wind=26.04, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:33:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:34:00.811 [DEBUG] [Thread-58438] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:34:00.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:34:00.909 [DEBUG] [Thread-58441] [transport.py] [_log()] starting thread (client mode): 0xd07e9ba0
2025-11-17T17:34:00.909 [DEBUG] [Thread-58441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:34:00.926 [DEBUG] [Thread-58441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:34:00.926 [INFO] [Thread-58441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:34:00.933 [DEBUG] [Thread-58441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:34:00.933 [DEBUG] [Thread-58441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] client lang: <none>
2025-11-17T17:34:00.934 [DEBUG] [Thread-58441] [transport.py] [_log()] server lang: <none>
2025-11-17T17:34:00.935 [DEBUG] [Thread-58441] [transport.py] [_log()] kex follows: False
2025-11-17T17:34:00.935 [DEBUG] [Thread-58441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:34:00.935 [DEBUG] [Thread-58441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:34:00.935 [DEBUG] [Thread-58441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:34:00.935 [DEBUG] [Thread-58441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:34:00.935 [DEBUG] [Thread-58441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:34:00.935 [DEBUG] [Thread-58441] [transport.py] [_log()] Compression: none
2025-11-17T17:34:00.936 [DEBUG] [Thread-58441] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:34:00.993 [DEBUG] [Thread-58441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:34:00.994 [DEBUG] [Thread-58441] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:34:00.994 [DEBUG] [Thread-58441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:34:00.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:34:00.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:34:01.049 [DEBUG] [Thread-58441] [transport.py] [_log()] userauth is OK
2025-11-17T17:34:01.049 [DEBUG] [Thread-58441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:34:01.049 [DEBUG] [Thread-58441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:34:01.049 [DEBUG] [Thread-58441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:34:01.049 [DEBUG] [Thread-58441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:34:01.062 [INFO] [Thread-58441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:34:01.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:34:01.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:34:01.897 [DEBUG] [Thread-58441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:34:01.897 [DEBUG] [Thread-58441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:34:01.945 [DEBUG] [Thread-58441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:34:01.946 [DEBUG] [Thread-58441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:34:01.955 [DEBUG] [Thread-58441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:34:01.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:34:01.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:34:01.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:34:01.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:34:01.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:34:01.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:34:01.989 [DEBUG] [Thread-58441] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:34:06.982 [DEBUG] [Thread-58443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:34:22.023 [DEBUG] [Thread-58444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:34:25.379 [DEBUG] [Thread-58445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:34:26.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:34:26.609 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:34:31.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:34:32.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:34:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:34:32.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 34, 20), 28.63, 14.42, 0.0, 23.91, 22.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:34:32.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:34:20
2025-11-17T17:34:32.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:34:32.910 [DEBUG] [Thread-58446] [transport.py] [_log()] starting thread (client mode): 0xd07ea260
2025-11-17T17:34:32.910 [DEBUG] [Thread-58446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:34:32.921 [DEBUG] [Thread-58446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:34:32.921 [INFO] [Thread-58446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:34:32.922 [DEBUG] [Thread-58446] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:34:32.922 [DEBUG] [Thread-58446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:34:32.922 [DEBUG] [Thread-58446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:34:32.922 [DEBUG] [Thread-58446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:34:32.922 [DEBUG] [Thread-58446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:34:32.922 [DEBUG] [Thread-58446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:34:32.922 [DEBUG] [Thread-58446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:34:32.922 [DEBUG] [Thread-58446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] client lang: <none>
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] server lang: <none>
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] kex follows: False
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] Compression: none
2025-11-17T17:34:32.923 [DEBUG] [Thread-58446] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:34:32.931 [DEBUG] [Thread-58446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:34:32.931 [DEBUG] [Thread-58446] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:34:32.931 [DEBUG] [Thread-58446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:34:32.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:34:32.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:34:32.933 [DEBUG] [Thread-58446] [transport.py] [_log()] userauth is OK
2025-11-17T17:34:32.933 [DEBUG] [Thread-58446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:34:32.933 [DEBUG] [Thread-58446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:34:32.933 [DEBUG] [Thread-58446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:34:32.933 [DEBUG] [Thread-58446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:34:32.947 [INFO] [Thread-58446] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:34:32.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:34:33.490 [DEBUG] [Thread-58446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:34:33.490 [DEBUG] [Thread-58446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:34:33.490 [DEBUG] [Thread-58446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:34:33.532 [DEBUG] [Thread-58446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:34:33.532 [DEBUG] [Thread-58446] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:34:33.534 [DEBUG] [Thread-58446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:34:33.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:34:33.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:34:33.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:34:33.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:34:33.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:34:33.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:34:33.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:34:33.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:34:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:34:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.648315 -999.00  +22.50  18.22     20   -1.40 1 1 1 1 1   887    0 23.23 -12.62 ----- 16.3 18.2 280.6 26.7 25.3 -27.1 25.4 -26.4 25.7 -25.7 25.9 -27.0
2025-11-17T17:34:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:34:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:34:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.648315
2025-11-17T17:34:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:34:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:34:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:34:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:34:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:34:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:34:20', tmtdew=28.63, humidity=14.42, cloud=0.0, wind=23.91, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:33:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:34:33.563 [DEBUG] [Thread-58446] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:34:33.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:34:33.659 [DEBUG] [Thread-58449] [transport.py] [_log()] starting thread (client mode): 0xd07868c0
2025-11-17T17:34:33.660 [DEBUG] [Thread-58449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:34:33.674 [DEBUG] [Thread-58449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:34:33.674 [INFO] [Thread-58449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:34:33.683 [DEBUG] [Thread-58449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:34:33.683 [DEBUG] [Thread-58449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:34:33.683 [DEBUG] [Thread-58449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:34:33.683 [DEBUG] [Thread-58449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:34:33.683 [DEBUG] [Thread-58449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] client lang: <none>
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] server lang: <none>
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] kex follows: False
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:34:33.684 [DEBUG] [Thread-58449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:34:33.685 [DEBUG] [Thread-58449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:34:33.685 [DEBUG] [Thread-58449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:34:33.685 [DEBUG] [Thread-58449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:34:33.685 [DEBUG] [Thread-58449] [transport.py] [_log()] Compression: none
2025-11-17T17:34:33.685 [DEBUG] [Thread-58449] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:34:33.741 [DEBUG] [Thread-58449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:34:33.741 [DEBUG] [Thread-58449] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:34:33.742 [DEBUG] [Thread-58449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:34:33.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:34:33.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:34:33.797 [DEBUG] [Thread-58449] [transport.py] [_log()] userauth is OK
2025-11-17T17:34:33.797 [DEBUG] [Thread-58449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:34:33.798 [DEBUG] [Thread-58449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:34:33.798 [DEBUG] [Thread-58449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:34:33.798 [DEBUG] [Thread-58449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:34:33.816 [INFO] [Thread-58449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:34:33.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:34:33.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:34:34.656 [DEBUG] [Thread-58449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:34:34.656 [DEBUG] [Thread-58449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:34:34.705 [DEBUG] [Thread-58449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:34:34.705 [DEBUG] [Thread-58449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:34:34.714 [DEBUG] [Thread-58449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:34:34.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:34:34.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:34: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
2025-11-17T17:34:34.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:34:34.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:34:34.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:34:34.748 [DEBUG] [Thread-58449] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:34:37.051 [DEBUG] [Thread-58451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:34:52.094 [DEBUG] [Thread-58452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:35:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:35:04.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:35:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:35:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 34, 52), 28.44, 14.48, 0.0, 17.79, 22.58, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:35:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:34:52
2025-11-17T17:35:05.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:35:05.692 [DEBUG] [Thread-58453] [transport.py] [_log()] starting thread (client mode): 0xd07239a0
2025-11-17T17:35:05.692 [DEBUG] [Thread-58453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:35:05.712 [DEBUG] [Thread-58453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:35:05.713 [INFO] [Thread-58453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:35:05.716 [DEBUG] [Thread-58453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:35:05.716 [DEBUG] [Thread-58453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:35:05.716 [DEBUG] [Thread-58453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] client lang: <none>
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] server lang: <none>
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] kex follows: False
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] Compression: none
2025-11-17T17:35:05.717 [DEBUG] [Thread-58453] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:35:05.733 [DEBUG] [Thread-58453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:35:05.734 [DEBUG] [Thread-58453] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:35:05.734 [DEBUG] [Thread-58453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:35:05.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:35:05.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:35:05.736 [DEBUG] [Thread-58453] [transport.py] [_log()] userauth is OK
2025-11-17T17:35:05.736 [DEBUG] [Thread-58453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:35:05.737 [DEBUG] [Thread-58453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:35:05.737 [DEBUG] [Thread-58453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:35:05.737 [DEBUG] [Thread-58453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:35:05.759 [INFO] [Thread-58453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:35:05.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:35:07.123 [DEBUG] [Thread-58455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:35:12.545 [DEBUG] [Thread-58453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:35:12.545 [DEBUG] [Thread-58453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:35:12.545 [DEBUG] [Thread-58453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:35:12.586 [DEBUG] [Thread-58453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:35:12.586 [DEBUG] [Thread-58453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:35:12.588 [DEBUG] [Thread-58453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:35:12.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:35:12.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:35:12.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:35:12.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:35:12.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:35:12.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:35:12.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.648662 -999.00  +22.50  15.42     20   -1.40 1 1 1 1 1   887    0 23.36 -14.70 ----- 19.2 15.4 268.3 23.4 25.3 -27.1 25.4 -26.1 25.6 -25.3 25.9 -27.0
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.648662
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:35:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:34:52', tmtdew=28.44, humidity=14.48, cloud=0.0, wind=17.79, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:34:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:35:12.618 [DEBUG] [Thread-58453] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:35:12.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:35:12.704 [DEBUG] [Thread-58457] [transport.py] [_log()] starting thread (client mode): 0xd078de40
2025-11-17T17:35:12.704 [DEBUG] [Thread-58457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:35:12.719 [DEBUG] [Thread-58457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:35:12.719 [INFO] [Thread-58457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:35:12.726 [DEBUG] [Thread-58457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:35:12.726 [DEBUG] [Thread-58457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:35:12.726 [DEBUG] [Thread-58457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:35:12.726 [DEBUG] [Thread-58457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] client lang: <none>
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] server lang: <none>
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] kex follows: False
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] Compression: none
2025-11-17T17:35:12.727 [DEBUG] [Thread-58457] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:35:12.786 [DEBUG] [Thread-58457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:35:12.786 [DEBUG] [Thread-58457] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:35:12.786 [DEBUG] [Thread-58457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:35:12.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:35:12.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:35:12.841 [DEBUG] [Thread-58457] [transport.py] [_log()] userauth is OK
2025-11-17T17:35:12.841 [DEBUG] [Thread-58457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:35:12.841 [DEBUG] [Thread-58457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:35:12.841 [DEBUG] [Thread-58457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:35:12.841 [DEBUG] [Thread-58457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:35:12.855 [INFO] [Thread-58457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:35:12.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:35:12.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:35:13.740 [DEBUG] [Thread-58457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:35:13.740 [DEBUG] [Thread-58457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:35:13.788 [DEBUG] [Thread-58457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:35:13.788 [DEBUG] [Thread-58457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:35:13.796 [DEBUG] [Thread-58457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:35:13.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:35:13.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')
2025-11-17T17:35:13.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
2025-11-17T17:35:13.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:35:13.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:35:13.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:35:13.828 [DEBUG] [Thread-58457] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:35:22.154 [DEBUG] [Thread-58459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:35:25.437 [DEBUG] [Thread-58460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:35:26.750 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:35:26.750 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:35:37.194 [DEBUG] [Thread-58461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:35:43.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:35:43.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:35:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:35:44.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 35, 25), 28.37, 14.55, 0.0, 20.04, 22.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:35:44.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:35:25
2025-11-17T17:35:44.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:35:44.779 [DEBUG] [Thread-58462] [transport.py] [_log()] starting thread (client mode): 0xd0757520
2025-11-17T17:35:44.779 [DEBUG] [Thread-58462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:35:44.799 [DEBUG] [Thread-58462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:35:44.799 [INFO] [Thread-58462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] client lang: <none>
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] server lang: <none>
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] kex follows: False
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] Compression: none
2025-11-17T17:35:44.803 [DEBUG] [Thread-58462] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:35:44.820 [DEBUG] [Thread-58462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:35:44.821 [DEBUG] [Thread-58462] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:35:44.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:35:44.822 [DEBUG] [Thread-58462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:35:44.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:35:44.824 [DEBUG] [Thread-58462] [transport.py] [_log()] userauth is OK
2025-11-17T17:35:44.824 [DEBUG] [Thread-58462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:35:44.824 [DEBUG] [Thread-58462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:35:44.824 [DEBUG] [Thread-58462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:35:44.824 [DEBUG] [Thread-58462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:35:44.841 [INFO] [Thread-58462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:35:44.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:35:45.436 [DEBUG] [Thread-58462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:35:45.436 [DEBUG] [Thread-58462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:35:45.436 [DEBUG] [Thread-58462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:35:45.477 [DEBUG] [Thread-58462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:35:45.478 [DEBUG] [Thread-58462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:35:45.480 [DEBUG] [Thread-58462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:35:45.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:35:45.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:35:45.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:35:45.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:35:45.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:35:45.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:35:45.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:35:45.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:35:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:35:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.649010 -999.00  +22.70  15.55     20   -1.30 1 1 1 1 1   887    0 23.46 -14.10 ----- 17.5 15.6 250.6 19.8 25.3 -26.7 25.4 -26.7 25.6 -25.1 25.8 -27.4
2025-11-17T17:35:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:35:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:35:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.649010
2025-11-17T17:35:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:35:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:35:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:35:45.504 [DEBUG] [Thread-58462] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:35:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:35:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:35:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:35:25', tmtdew=28.37, humidity=14.55, cloud=0.0, wind=20.04, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:34:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:35:45.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:35:45.600 [DEBUG] [Thread-58465] [transport.py] [_log()] starting thread (client mode): 0xd0754e50
2025-11-17T17:35:45.600 [DEBUG] [Thread-58465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:35:45.615 [DEBUG] [Thread-58465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:35:45.615 [INFO] [Thread-58465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:35:45.623 [DEBUG] [Thread-58465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:35:45.623 [DEBUG] [Thread-58465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:35:45.623 [DEBUG] [Thread-58465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:35:45.623 [DEBUG] [Thread-58465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:35:45.623 [DEBUG] [Thread-58465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] client lang: <none>
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] server lang: <none>
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] kex follows: False
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] Compression: none
2025-11-17T17:35:45.624 [DEBUG] [Thread-58465] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:35:45.685 [DEBUG] [Thread-58465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:35:45.686 [DEBUG] [Thread-58465] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:35:45.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:35:45.686 [DEBUG] [Thread-58465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:35:45.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:35:45.741 [DEBUG] [Thread-58465] [transport.py] [_log()] userauth is OK
2025-11-17T17:35:45.741 [DEBUG] [Thread-58465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:35:45.741 [DEBUG] [Thread-58465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:35:45.741 [DEBUG] [Thread-58465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:35:45.741 [DEBUG] [Thread-58465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:35:45.755 [INFO] [Thread-58465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:35:45.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:35:45.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:35:46.616 [DEBUG] [Thread-58465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:35:46.616 [DEBUG] [Thread-58465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:35:46.663 [DEBUG] [Thread-58465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:35:46.664 [DEBUG] [Thread-58465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:35:46.672 [DEBUG] [Thread-58465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:35:46.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:35:46.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:35:46.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:35:46.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:35:46.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:35:46.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:35:46.707 [DEBUG] [Thread-58465] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:35:52.225 [DEBUG] [Thread-58467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:36:07.253 [DEBUG] [Thread-58468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:36:16.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:36:16.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:36:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:36:17.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 35, 57), 28.39, 14.6, 0.0, 25.14, 22.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:36:17.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:35:57
2025-11-17T17:36:17.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:36:17.654 [DEBUG] [Thread-58469] [transport.py] [_log()] starting thread (client mode): 0xd070fa30
2025-11-17T17:36:17.654 [DEBUG] [Thread-58469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:36:17.673 [DEBUG] [Thread-58469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:36:17.673 [INFO] [Thread-58469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] client lang: <none>
2025-11-17T17:36:17.676 [DEBUG] [Thread-58469] [transport.py] [_log()] server lang: <none>
2025-11-17T17:36:17.677 [DEBUG] [Thread-58469] [transport.py] [_log()] kex follows: False
2025-11-17T17:36:17.677 [DEBUG] [Thread-58469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:36:17.677 [DEBUG] [Thread-58469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:36:17.677 [DEBUG] [Thread-58469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:36:17.677 [DEBUG] [Thread-58469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:36:17.677 [DEBUG] [Thread-58469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:36:17.677 [DEBUG] [Thread-58469] [transport.py] [_log()] Compression: none
2025-11-17T17:36:17.677 [DEBUG] [Thread-58469] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:36:17.691 [DEBUG] [Thread-58469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:36:17.692 [DEBUG] [Thread-58469] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:36:17.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:36:17.693 [DEBUG] [Thread-58469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:36:17.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:36:17.695 [DEBUG] [Thread-58469] [transport.py] [_log()] userauth is OK
2025-11-17T17:36:17.696 [DEBUG] [Thread-58469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:36:17.696 [DEBUG] [Thread-58469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:36:17.696 [DEBUG] [Thread-58469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:36:17.696 [DEBUG] [Thread-58469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:36:17.718 [INFO] [Thread-58469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:36:17.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:36:18.517 [DEBUG] [Thread-58469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:36:18.517 [DEBUG] [Thread-58469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:36:18.518 [DEBUG] [Thread-58469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:36:18.558 [DEBUG] [Thread-58469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:36:18.558 [DEBUG] [Thread-58469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:36:18.561 [DEBUG] [Thread-58469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:36:18.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:36:18.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:36:18.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:36:18.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:36:18.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:36:18.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:36:18.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:36:18.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:36:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:36:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.649704 -999.00  +22.50  16.20     20   -1.30 1 1 1 1 1   887    0 23.59 -14.72 ----- 17.8 16.2 260.4 22.4 25.2 -27.4 25.3 -26.2 25.4 -28.4 25.6 -26.9
2025-11-17T17:36:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:36:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:36:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.649704
2025-11-17T17:36:18.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:36:18.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:36:18.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:36:18.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:36:18.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:36:18.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:35:57', tmtdew=28.39, humidity=14.6, cloud=0.0, wind=25.14, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:35:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:36:18.587 [DEBUG] [Thread-58469] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:36:18.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:36:18.683 [DEBUG] [Thread-58472] [transport.py] [_log()] starting thread (client mode): 0xd0784a60
2025-11-17T17:36:18.684 [DEBUG] [Thread-58472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:36:18.703 [DEBUG] [Thread-58472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:36:18.704 [INFO] [Thread-58472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:36:18.711 [DEBUG] [Thread-58472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:36:18.711 [DEBUG] [Thread-58472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:36:18.711 [DEBUG] [Thread-58472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:36:18.711 [DEBUG] [Thread-58472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:36:18.711 [DEBUG] [Thread-58472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] client lang: <none>
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] server lang: <none>
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] kex follows: False
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:36:18.712 [DEBUG] [Thread-58472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:36:18.713 [DEBUG] [Thread-58472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:36:18.713 [DEBUG] [Thread-58472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:36:18.713 [DEBUG] [Thread-58472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:36:18.713 [DEBUG] [Thread-58472] [transport.py] [_log()] Compression: none
2025-11-17T17:36:18.713 [DEBUG] [Thread-58472] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:36:18.778 [DEBUG] [Thread-58472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:36:18.778 [DEBUG] [Thread-58472] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:36:18.779 [DEBUG] [Thread-58472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:36:18.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:36:18.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:36:18.837 [DEBUG] [Thread-58472] [transport.py] [_log()] userauth is OK
2025-11-17T17:36:18.837 [DEBUG] [Thread-58472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:36:18.838 [DEBUG] [Thread-58472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:36:18.838 [DEBUG] [Thread-58472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:36:18.838 [DEBUG] [Thread-58472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:36:18.857 [INFO] [Thread-58472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:36:18.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:36:18.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:36:19.709 [DEBUG] [Thread-58472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:36:19.709 [DEBUG] [Thread-58472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:36:19.757 [DEBUG] [Thread-58472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:36:19.757 [DEBUG] [Thread-58472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:36:19.765 [DEBUG] [Thread-58472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:36:19.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:36:19.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:36:19.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:36:19.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:36:19.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:36:19.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:36:19.799 [DEBUG] [Thread-58472] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:36:22.282 [DEBUG] [Thread-58474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:36:25.488 [DEBUG] [Thread-58475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:36:26.891 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:36:26.892 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:36:37.326 [DEBUG] [Thread-58476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:36:49.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:36:49.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:36:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:36:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 36, 29), 28.53, 14.45, 0.0, 26.96, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:36:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:36:29
2025-11-17T17:36:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:36:50.740 [DEBUG] [Thread-58477] [transport.py] [_log()] starting thread (client mode): 0xd0730220
2025-11-17T17:36:50.741 [DEBUG] [Thread-58477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:36:50.760 [DEBUG] [Thread-58477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:36:50.760 [INFO] [Thread-58477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] client lang: <none>
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] server lang: <none>
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] kex follows: False
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] Compression: none
2025-11-17T17:36:50.764 [DEBUG] [Thread-58477] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:36:50.783 [DEBUG] [Thread-58477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:36:50.783 [DEBUG] [Thread-58477] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:36:50.784 [DEBUG] [Thread-58477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:36:50.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:36:50.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:36:50.786 [DEBUG] [Thread-58477] [transport.py] [_log()] userauth is OK
2025-11-17T17:36:50.786 [DEBUG] [Thread-58477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:36:50.786 [DEBUG] [Thread-58477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:36:50.786 [DEBUG] [Thread-58477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:36:50.786 [DEBUG] [Thread-58477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:36:50.810 [INFO] [Thread-58477] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:36:50.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:36:51.434 [DEBUG] [Thread-58477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:36:51.434 [DEBUG] [Thread-58477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:36:51.435 [DEBUG] [Thread-58477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:36:51.475 [DEBUG] [Thread-58477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:36:51.475 [DEBUG] [Thread-58477] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:36:51.478 [DEBUG] [Thread-58477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:36:51.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:36:51.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:36:51.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:36:51.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:36:51.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:36:51.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:36:51.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:36:51.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:36:51.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:36:51.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.650051 -999.00  +22.70  28.47     19   -1.40 1 1 1 1 1   887    0 24.09 -15.12 ----- 24.3 28.5 274.6 31.0 25.1 -27.1 25.2 -27.4 25.2 -27.9 25.4 -28.4
2025-11-17T17:36:51.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:36:51.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:36:51.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.650051
2025-11-17T17:36:51.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:36:51.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:36:51.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:36:51.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:36:51.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:36:51.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:36:29', tmtdew=28.53, humidity=14.45, cloud=0.0, wind=26.96, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:36:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:36:51.503 [DEBUG] [Thread-58477] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:36:51.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:36:51.600 [DEBUG] [Thread-58480] [transport.py] [_log()] starting thread (client mode): 0xd070f8e0
2025-11-17T17:36:51.600 [DEBUG] [Thread-58480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:36:51.615 [DEBUG] [Thread-58480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:36:51.615 [INFO] [Thread-58480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:36:51.622 [DEBUG] [Thread-58480] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] client lang: <none>
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] server lang: <none>
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] kex follows: False
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] Compression: none
2025-11-17T17:36:51.623 [DEBUG] [Thread-58480] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:36:51.681 [DEBUG] [Thread-58480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:36:51.681 [DEBUG] [Thread-58480] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:36:51.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:36:51.682 [DEBUG] [Thread-58480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:36:51.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:36:51.737 [DEBUG] [Thread-58480] [transport.py] [_log()] userauth is OK
2025-11-17T17:36:51.737 [DEBUG] [Thread-58480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:36:51.737 [DEBUG] [Thread-58480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:36:51.737 [DEBUG] [Thread-58480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:36:51.737 [DEBUG] [Thread-58480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:36:51.757 [INFO] [Thread-58480] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:36:51.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:36:51.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:36:52.365 [DEBUG] [Thread-58482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:36:52.677 [DEBUG] [Thread-58480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:36:52.686 [DEBUG] [Thread-58480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:36:52.725 [DEBUG] [Thread-58480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:36:52.725 [DEBUG] [Thread-58480] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:36:52.734 [DEBUG] [Thread-58480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:36:52.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:36: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')
2025-11-17T17:36:52.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:36:52.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:36:52.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:36:52.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:36:52.769 [DEBUG] [Thread-58480] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:37:07.412 [DEBUG] [Thread-58483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:37:22.441 [DEBUG] [Thread-58484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:37:22.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:37:22.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:37:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:37:23.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 37, 1), 28.49, 14.47, 0.0, 24.01, 22.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:37:23.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:37:01
2025-11-17T17:37:23.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:37:23.695 [DEBUG] [Thread-58485] [transport.py] [_log()] starting thread (client mode): 0xd0732e00
2025-11-17T17:37:23.696 [DEBUG] [Thread-58485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:37:23.716 [DEBUG] [Thread-58485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:37:23.716 [INFO] [Thread-58485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:37:23.725 [DEBUG] [Thread-58485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:37:23.725 [DEBUG] [Thread-58485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:37:23.725 [DEBUG] [Thread-58485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:37:23.725 [DEBUG] [Thread-58485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:37:23.725 [DEBUG] [Thread-58485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:37:23.725 [DEBUG] [Thread-58485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:37:23.725 [DEBUG] [Thread-58485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:37:23.725 [DEBUG] [Thread-58485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] client lang: <none>
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] server lang: <none>
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] kex follows: False
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] Compression: none
2025-11-17T17:37:23.726 [DEBUG] [Thread-58485] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:37:23.744 [DEBUG] [Thread-58485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:37:23.744 [DEBUG] [Thread-58485] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:37:23.745 [DEBUG] [Thread-58485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:37:23.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:37:23.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:37:23.746 [DEBUG] [Thread-58485] [transport.py] [_log()] userauth is OK
2025-11-17T17:37:23.746 [DEBUG] [Thread-58485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:37:23.747 [DEBUG] [Thread-58485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:37:23.747 [DEBUG] [Thread-58485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:37:23.747 [DEBUG] [Thread-58485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:37:23.763 [INFO] [Thread-58485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:37:23.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:37:24.604 [DEBUG] [Thread-58485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:37:24.604 [DEBUG] [Thread-58485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:37:24.604 [DEBUG] [Thread-58485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:37:24.645 [DEBUG] [Thread-58485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:37:24.645 [DEBUG] [Thread-58485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:37:24.648 [DEBUG] [Thread-58485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:37:24.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:37:24.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:37:24.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:37:24.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:37:24.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:37:24.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:37:24.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:37:24.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:37:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:37:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.650399 -999.00  +22.40  18.61     20   -1.50 1 1 1 1 1   887    0 24.01 -13.90 ----- 17.4 18.6 276.8 27.6 25.0 -28.1 25.0 -26.7 25.1 -26.6 25.3 -27.4
2025-11-17T17:37:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:37:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:37:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.650399
2025-11-17T17:37:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:37:24.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:37:24.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:37:24.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:37:24.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:37:24.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:37:01', tmtdew=28.49, humidity=14.47, cloud=0.0, wind=24.01, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:36:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:37:24.670 [DEBUG] [Thread-58485] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:37:24.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:37:24.768 [DEBUG] [Thread-58488] [transport.py] [_log()] starting thread (client mode): 0xd07bea40
2025-11-17T17:37:24.768 [DEBUG] [Thread-58488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:37:24.783 [DEBUG] [Thread-58488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:37:24.784 [INFO] [Thread-58488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:37:24.791 [DEBUG] [Thread-58488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:37:24.791 [DEBUG] [Thread-58488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] client lang: <none>
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] server lang: <none>
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] kex follows: False
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:37:24.792 [DEBUG] [Thread-58488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:37:24.793 [DEBUG] [Thread-58488] [transport.py] [_log()] Compression: none
2025-11-17T17:37:24.793 [DEBUG] [Thread-58488] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:37:24.849 [DEBUG] [Thread-58488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:37:24.849 [DEBUG] [Thread-58488] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:37:24.850 [DEBUG] [Thread-58488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:37:24.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:37:24.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:37:24.905 [DEBUG] [Thread-58488] [transport.py] [_log()] userauth is OK
2025-11-17T17:37:24.905 [DEBUG] [Thread-58488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:37:24.905 [DEBUG] [Thread-58488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:37:24.905 [DEBUG] [Thread-58488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:37:24.905 [DEBUG] [Thread-58488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:37:24.926 [INFO] [Thread-58488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:37:24.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:37:24.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:37:25.547 [DEBUG] [Thread-58490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:37:25.786 [DEBUG] [Thread-58488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:37:25.786 [DEBUG] [Thread-58488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:37:25.834 [DEBUG] [Thread-58488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:37:25.834 [DEBUG] [Thread-58488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:37:25.843 [DEBUG] [Thread-58488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:37:25.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:37:25.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:37:25.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:37:25.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:37:25.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:37:25.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:37:25.879 [DEBUG] [Thread-58488] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:37:27.032 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:37:27.033 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:37:37.473 [DEBUG] [Thread-58491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:37:52.518 [DEBUG] [Thread-58492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:37:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:37:55.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:37:55.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:37:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 37, 33), 28.77, 14.17, 0.0, 22.3, 23.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:37:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:37:33
2025-11-17T17:37:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:37:56.818 [DEBUG] [Thread-58493] [transport.py] [_log()] starting thread (client mode): 0xd0757970
2025-11-17T17:37:56.818 [DEBUG] [Thread-58493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:37:56.838 [DEBUG] [Thread-58493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:37:56.838 [INFO] [Thread-58493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:37:56.841 [DEBUG] [Thread-58493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:37:56.841 [DEBUG] [Thread-58493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] client lang: <none>
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] server lang: <none>
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] kex follows: False
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] Compression: none
2025-11-17T17:37:56.842 [DEBUG] [Thread-58493] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:37:56.860 [DEBUG] [Thread-58493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:37:56.861 [DEBUG] [Thread-58493] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:37:56.861 [DEBUG] [Thread-58493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:37:56.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:37:56.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:37:56.863 [DEBUG] [Thread-58493] [transport.py] [_log()] userauth is OK
2025-11-17T17:37:56.864 [DEBUG] [Thread-58493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:37:56.864 [DEBUG] [Thread-58493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:37:56.864 [DEBUG] [Thread-58493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:37:56.864 [DEBUG] [Thread-58493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:37:56.899 [INFO] [Thread-58493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:37:56.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:37:57.523 [DEBUG] [Thread-58493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:37:57.523 [DEBUG] [Thread-58493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:37:57.523 [DEBUG] [Thread-58493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:37:57.564 [DEBUG] [Thread-58493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:37:57.565 [DEBUG] [Thread-58493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:37:57.567 [DEBUG] [Thread-58493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:37:57.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:37:57.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:37:57.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:37:57.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:37:57.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:37:57.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:37:57.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:37:57.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:37:57.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:37:57.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.650746 -999.00  +22.10  23.82     20   -1.60 1 1 1 1 1   887    0 23.55 -14.15 ----- 20.9 23.8 275.2 29.0 24.9 -27.6 24.9 -27.2 24.8 -27.2 25.1 -27.9
2025-11-17T17:37:57.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:37:57.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:37:57.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.650746
2025-11-17T17:37:57.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:37:57.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:37:57.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:37:57.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:37:57.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:37:57.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:37:33', tmtdew=28.77, humidity=14.17, cloud=0.0, wind=22.3, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:37:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:37:57.594 [DEBUG] [Thread-58493] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:37:57.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:37:57.691 [DEBUG] [Thread-58496] [transport.py] [_log()] starting thread (client mode): 0xd07568f0
2025-11-17T17:37:57.691 [DEBUG] [Thread-58496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:37:57.707 [DEBUG] [Thread-58496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:37:57.707 [INFO] [Thread-58496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] client lang: <none>
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] server lang: <none>
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] kex follows: False
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:37:57.715 [DEBUG] [Thread-58496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:37:57.716 [DEBUG] [Thread-58496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:37:57.716 [DEBUG] [Thread-58496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:37:57.716 [DEBUG] [Thread-58496] [transport.py] [_log()] Compression: none
2025-11-17T17:37:57.716 [DEBUG] [Thread-58496] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:37:57.773 [DEBUG] [Thread-58496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:37:57.773 [DEBUG] [Thread-58496] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:37:57.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:37:57.774 [DEBUG] [Thread-58496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:37:57.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:37:57.829 [DEBUG] [Thread-58496] [transport.py] [_log()] userauth is OK
2025-11-17T17:37:57.829 [DEBUG] [Thread-58496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:37:57.829 [DEBUG] [Thread-58496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:37:57.829 [DEBUG] [Thread-58496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:37:57.829 [DEBUG] [Thread-58496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:37:57.849 [INFO] [Thread-58496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:37:57.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:37:57.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:37:58.719 [DEBUG] [Thread-58496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:37:58.719 [DEBUG] [Thread-58496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:37:58.767 [DEBUG] [Thread-58496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:37:58.767 [DEBUG] [Thread-58496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:37:58.776 [DEBUG] [Thread-58496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:37:58.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:37: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')
2025-11-17T17:37:58.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:37:58.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:37:58.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:37:58.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:37:58.810 [DEBUG] [Thread-58496] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:38:07.550 [DEBUG] [Thread-58498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:38:22.590 [DEBUG] [Thread-58499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:38:25.595 [DEBUG] [Thread-58500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:38:27.174 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:38:27.175 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:38:28.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:38:28.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:38:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:38:29.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 38, 5), 28.05, 15.07, 0.0, 22.73, 22.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:38:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:38:05
2025-11-17T17:38:29.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:38:29.729 [DEBUG] [Thread-58501] [transport.py] [_log()] starting thread (client mode): 0xd0756350
2025-11-17T17:38:29.729 [DEBUG] [Thread-58501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:38:29.749 [DEBUG] [Thread-58501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:38:29.749 [INFO] [Thread-58501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:38:29.752 [DEBUG] [Thread-58501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:38:29.752 [DEBUG] [Thread-58501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:38:29.752 [DEBUG] [Thread-58501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:38:29.752 [DEBUG] [Thread-58501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:38:29.752 [DEBUG] [Thread-58501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:38:29.752 [DEBUG] [Thread-58501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:38:29.752 [DEBUG] [Thread-58501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] client lang: <none>
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] server lang: <none>
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] kex follows: False
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] Compression: none
2025-11-17T17:38:29.753 [DEBUG] [Thread-58501] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:38:29.772 [DEBUG] [Thread-58501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:38:29.773 [DEBUG] [Thread-58501] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:38:29.773 [DEBUG] [Thread-58501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:38:29.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:38:29.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:38:29.775 [DEBUG] [Thread-58501] [transport.py] [_log()] userauth is OK
2025-11-17T17:38:29.775 [DEBUG] [Thread-58501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:38:29.775 [DEBUG] [Thread-58501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:38:29.776 [DEBUG] [Thread-58501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:38:29.776 [DEBUG] [Thread-58501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:38:29.807 [INFO] [Thread-58501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:38:29.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:38:30.603 [DEBUG] [Thread-58501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:38:30.604 [DEBUG] [Thread-58501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:38:30.604 [DEBUG] [Thread-58501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:38:30.644 [DEBUG] [Thread-58501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:38:30.645 [DEBUG] [Thread-58501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:38:30.647 [DEBUG] [Thread-58501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:38:30.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:38:30.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:38:30.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:38:30.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:38:30.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:38:30.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:38:30.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:38:30.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:38:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:38:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.651093 -999.00  +22.00  19.71     20   -1.60 1 1 1 1 1   887    0 23.20 -14.34 ----- 19.8 19.7 274.4 25.3 24.7 -27.9 24.8 -26.7 24.6 -26.2 24.9 -27.6
2025-11-17T17:38:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:38:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:38:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.651093
2025-11-17T17:38:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:38:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:38:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:38:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:38:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:38:30.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:38:05', tmtdew=28.05, humidity=15.07, cloud=0.0, wind=22.73, temperature=22.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:37:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:38:30.668 [DEBUG] [Thread-58501] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:38:30.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:38:30.765 [DEBUG] [Thread-58504] [transport.py] [_log()] starting thread (client mode): 0xd078d480
2025-11-17T17:38:30.765 [DEBUG] [Thread-58504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:38:30.780 [DEBUG] [Thread-58504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:38:30.780 [INFO] [Thread-58504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] client lang: <none>
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] server lang: <none>
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] kex follows: False
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:38:30.788 [DEBUG] [Thread-58504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:38:30.789 [DEBUG] [Thread-58504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:38:30.789 [DEBUG] [Thread-58504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:38:30.789 [DEBUG] [Thread-58504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:38:30.789 [DEBUG] [Thread-58504] [transport.py] [_log()] Compression: none
2025-11-17T17:38:30.789 [DEBUG] [Thread-58504] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:38:30.850 [DEBUG] [Thread-58504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:38:30.850 [DEBUG] [Thread-58504] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:38:30.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:38:30.851 [DEBUG] [Thread-58504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:38:30.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:38:30.905 [DEBUG] [Thread-58504] [transport.py] [_log()] userauth is OK
2025-11-17T17:38:30.905 [DEBUG] [Thread-58504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:38:30.905 [DEBUG] [Thread-58504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:38:30.905 [DEBUG] [Thread-58504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:38:30.906 [DEBUG] [Thread-58504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:38:30.924 [INFO] [Thread-58504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:38:30.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:38:30.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:38:31.837 [DEBUG] [Thread-58504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:38:31.837 [DEBUG] [Thread-58504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:38:31.884 [DEBUG] [Thread-58504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:38:31.884 [DEBUG] [Thread-58504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:38:31.893 [DEBUG] [Thread-58504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:38:31.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:38:31.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:38:31.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:38:31.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:38:31.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:38:31.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:38:31.933 [DEBUG] [Thread-58504] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:38:37.617 [DEBUG] [Thread-58506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:38:52.657 [DEBUG] [Thread-58507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:39:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:39:01.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:39:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:39:02.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 38, 37), 27.98, 15.08, 0.0, 23.71, 22.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:39:02.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:38:37
2025-11-17T17:39:02.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:39:02.960 [DEBUG] [Thread-58508] [transport.py] [_log()] starting thread (client mode): 0xd0755150
2025-11-17T17:39:02.960 [DEBUG] [Thread-58508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:39:02.981 [DEBUG] [Thread-58508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:39:02.981 [INFO] [Thread-58508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] client lang: <none>
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] server lang: <none>
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] kex follows: False
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:39:02.984 [DEBUG] [Thread-58508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:39:02.985 [DEBUG] [Thread-58508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:39:02.985 [DEBUG] [Thread-58508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:39:02.985 [DEBUG] [Thread-58508] [transport.py] [_log()] Compression: none
2025-11-17T17:39:02.985 [DEBUG] [Thread-58508] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:39:03.001 [DEBUG] [Thread-58508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:39:03.001 [DEBUG] [Thread-58508] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:39:03.001 [DEBUG] [Thread-58508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:39:03.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:39:03.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:39:03.002 [DEBUG] [Thread-58508] [transport.py] [_log()] userauth is OK
2025-11-17T17:39:03.002 [DEBUG] [Thread-58508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:39:03.002 [DEBUG] [Thread-58508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:39:03.002 [DEBUG] [Thread-58508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:39:03.002 [DEBUG] [Thread-58508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:39:03.012 [INFO] [Thread-58508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:39:03.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:39:03.631 [DEBUG] [Thread-58508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:39:03.631 [DEBUG] [Thread-58508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:39:03.631 [DEBUG] [Thread-58508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:39:03.672 [DEBUG] [Thread-58508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:39:03.672 [DEBUG] [Thread-58508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:39:03.673 [DEBUG] [Thread-58508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:39:03.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:39:03.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:39:03.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:39:03.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:39:03.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:39:03.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:39:03.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:39:03.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:39:03.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:39:03.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.651440 -999.00  +22.10  17.35     20   -1.60 1 1 1 1 1   887    0 24.10 -14.88 ----- 28.0 17.4 260.6 24.8 24.6 -27.8 24.7 -26.9 24.6 -26.2 24.7 -27.6
2025-11-17T17:39:03.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:39:03.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:39:03.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.651440
2025-11-17T17:39:03.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:39:03.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:39:03.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:39:03.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:39:03.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:39:03.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:38:37', tmtdew=27.98, humidity=15.08, cloud=0.0, wind=23.71, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:38:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:39:03.689 [DEBUG] [Thread-58508] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:39:03.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:39:07.683 [DEBUG] [Thread-58511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:39:22.726 [DEBUG] [Thread-58512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:39:25.649 [DEBUG] [Thread-58513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:39:27.314 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:39:27.315 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:39:37.757 [DEBUG] [Thread-58514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:39:52.790 [DEBUG] [Thread-58515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:40:07.818 [DEBUG] [Thread-58516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:40:22.843 [DEBUG] [Thread-58517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:40:25.704 [DEBUG] [Thread-58518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:40:27.455 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:40:27.456 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:40:37.872 [DEBUG] [Thread-58519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:40:52.902 [DEBUG] [Thread-58520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:41:07.927 [DEBUG] [Thread-58521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:41:17.371 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T17:41:22.956 [DEBUG] [Thread-58522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:41:25.754 [DEBUG] [Thread-58523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:41:27.598 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:41:27.599 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:41:37.985 [DEBUG] [Thread-58524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:41:47.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:41:47.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:41:47.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:41:48.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 41, 17), 27.8, 15.28, 0.0, 20.41, 21.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:41:48.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:41:17
2025-11-17T17:41:48.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:41:48.332 [DEBUG] [Thread-58525] [transport.py] [_log()] starting thread (client mode): 0xd0755db0
2025-11-17T17:41:48.332 [DEBUG] [Thread-58525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:41:48.352 [DEBUG] [Thread-58525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:41:48.352 [INFO] [Thread-58525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:41:48.356 [DEBUG] [Thread-58525] [transport.py] [_log()] client lang: <none>
2025-11-17T17:41:48.357 [DEBUG] [Thread-58525] [transport.py] [_log()] server lang: <none>
2025-11-17T17:41:48.357 [DEBUG] [Thread-58525] [transport.py] [_log()] kex follows: False
2025-11-17T17:41:48.357 [DEBUG] [Thread-58525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:41:48.357 [DEBUG] [Thread-58525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:41:48.357 [DEBUG] [Thread-58525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:41:48.357 [DEBUG] [Thread-58525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:41:48.358 [DEBUG] [Thread-58525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:41:48.358 [DEBUG] [Thread-58525] [transport.py] [_log()] Compression: none
2025-11-17T17:41:48.358 [DEBUG] [Thread-58525] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:41:48.377 [DEBUG] [Thread-58525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:41:48.377 [DEBUG] [Thread-58525] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:41:48.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:41:48.378 [DEBUG] [Thread-58525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:41:48.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:41:48.381 [DEBUG] [Thread-58525] [transport.py] [_log()] userauth is OK
2025-11-17T17:41:48.381 [DEBUG] [Thread-58525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:41:48.381 [DEBUG] [Thread-58525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:41:48.381 [DEBUG] [Thread-58525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:41:48.381 [DEBUG] [Thread-58525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:41:48.401 [INFO] [Thread-58525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:41:48.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:41:49.179 [DEBUG] [Thread-58525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:41:49.179 [DEBUG] [Thread-58525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:41:49.179 [DEBUG] [Thread-58525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:41:49.220 [DEBUG] [Thread-58525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:41:49.221 [DEBUG] [Thread-58525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:41:49.223 [DEBUG] [Thread-58525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:41:49.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:41:49.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:41:49.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:41:49.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:41:49.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:41:49.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:41:49.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:41:49.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:41:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:41:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.653524 -999.00  +22.00  21.71     20   -1.60 1 1 1 1 1   887    0 23.39 -12.18 ----- 17.8 21.7 273.8 23.6 24.2 -27.3 24.2 -25.9 24.0 -27.5 24.2 -26.4
2025-11-17T17:41:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:41:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:41:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.653524
2025-11-17T17:41:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:41:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:41:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:41:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:41:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:41:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:41:17', tmtdew=27.8, humidity=15.28, cloud=0.0, wind=20.41, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:41:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:41:49.247 [DEBUG] [Thread-58525] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:41:49.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:41:49.343 [DEBUG] [Thread-58528] [transport.py] [_log()] starting thread (client mode): 0xd0720790
2025-11-17T17:41:49.343 [DEBUG] [Thread-58528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:41:49.358 [DEBUG] [Thread-58528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:41:49.358 [INFO] [Thread-58528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:41:49.365 [DEBUG] [Thread-58528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] client lang: <none>
2025-11-17T17:41:49.366 [DEBUG] [Thread-58528] [transport.py] [_log()] server lang: <none>
2025-11-17T17:41:49.367 [DEBUG] [Thread-58528] [transport.py] [_log()] kex follows: False
2025-11-17T17:41:49.367 [DEBUG] [Thread-58528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:41:49.367 [DEBUG] [Thread-58528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:41:49.367 [DEBUG] [Thread-58528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:41:49.367 [DEBUG] [Thread-58528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:41:49.367 [DEBUG] [Thread-58528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:41:49.367 [DEBUG] [Thread-58528] [transport.py] [_log()] Compression: none
2025-11-17T17:41:49.367 [DEBUG] [Thread-58528] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:41:49.425 [DEBUG] [Thread-58528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:41:49.426 [DEBUG] [Thread-58528] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:41:49.426 [DEBUG] [Thread-58528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:41:49.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:41:49.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:41:49.485 [DEBUG] [Thread-58528] [transport.py] [_log()] userauth is OK
2025-11-17T17:41:49.485 [DEBUG] [Thread-58528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:41:49.485 [DEBUG] [Thread-58528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:41:49.485 [DEBUG] [Thread-58528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:41:49.485 [DEBUG] [Thread-58528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:41:49.505 [INFO] [Thread-58528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:41:49.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:41:49.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:41:50.307 [DEBUG] [Thread-58528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:41:50.307 [DEBUG] [Thread-58528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:41:50.355 [DEBUG] [Thread-58528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:41:50.355 [DEBUG] [Thread-58528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:41:50.363 [DEBUG] [Thread-58528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:41:50.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:41:50.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:41:50.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
2025-11-17T17:41:50.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:41:50.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:41:50.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:41:50.393 [DEBUG] [Thread-58528] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:41:53.010 [DEBUG] [Thread-58530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:42:08.050 [DEBUG] [Thread-58531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:42:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:42:20.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:42:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:42:21.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 41, 49), 28.06, 14.73, 0.0, 22.27, 22.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:42:21.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:41:49
2025-11-17T17:42:21.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:42:21.357 [DEBUG] [Thread-58532] [transport.py] [_log()] starting thread (client mode): 0xd0723730
2025-11-17T17:42:21.358 [DEBUG] [Thread-58532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:42:21.377 [DEBUG] [Thread-58532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:42:21.377 [INFO] [Thread-58532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:42:21.380 [DEBUG] [Thread-58532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] client lang: <none>
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] server lang: <none>
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] kex follows: False
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] Compression: none
2025-11-17T17:42:21.381 [DEBUG] [Thread-58532] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:42:21.399 [DEBUG] [Thread-58532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:42:21.400 [DEBUG] [Thread-58532] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:42:21.400 [DEBUG] [Thread-58532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:42:21.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:42:21.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:42:21.402 [DEBUG] [Thread-58532] [transport.py] [_log()] userauth is OK
2025-11-17T17:42:21.402 [DEBUG] [Thread-58532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:42:21.402 [DEBUG] [Thread-58532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:42:21.402 [DEBUG] [Thread-58532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:42:21.402 [DEBUG] [Thread-58532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:42:21.437 [INFO] [Thread-58532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:42:21.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:42:22.075 [DEBUG] [Thread-58532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:42:22.075 [DEBUG] [Thread-58532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:42:22.075 [DEBUG] [Thread-58532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:42:22.116 [DEBUG] [Thread-58532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:42:22.116 [DEBUG] [Thread-58532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:42:22.118 [DEBUG] [Thread-58532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:42:22.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:42:22.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:42:22.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:42:22.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:42:22.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:42:22.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:42:22.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:42:22.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:42:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:42:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.653871 -999.00  +22.00  22.08     20   -1.50 1 1 1 1 1   887    0 23.00 -10.56 ----- 25.0 22.1 277.8 25.6 24.2 -26.9 24.2 -26.1 23.9 -25.8 24.2 -26.0
2025-11-17T17:42:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:42:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:42:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.653871
2025-11-17T17:42:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:42:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:42:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:42:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:42:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:42:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:41:49', tmtdew=28.06, humidity=14.73, cloud=0.0, wind=22.27, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:41:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:42:22.138 [DEBUG] [Thread-58532] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:42:22.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:42:22.223 [DEBUG] [Thread-58535] [transport.py] [_log()] starting thread (client mode): 0xd0757400
2025-11-17T17:42:22.223 [DEBUG] [Thread-58535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:42:22.238 [DEBUG] [Thread-58535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:42:22.238 [INFO] [Thread-58535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:42:22.245 [DEBUG] [Thread-58535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:42:22.245 [DEBUG] [Thread-58535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:42:22.245 [DEBUG] [Thread-58535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:42:22.245 [DEBUG] [Thread-58535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:42:22.245 [DEBUG] [Thread-58535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:42:22.245 [DEBUG] [Thread-58535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] client lang: <none>
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] server lang: <none>
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] kex follows: False
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] Compression: none
2025-11-17T17:42:22.246 [DEBUG] [Thread-58535] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:42:22.304 [DEBUG] [Thread-58535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:42:22.304 [DEBUG] [Thread-58535] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:42:22.304 [DEBUG] [Thread-58535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:42:22.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:42:22.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:42:22.361 [DEBUG] [Thread-58535] [transport.py] [_log()] userauth is OK
2025-11-17T17:42:22.361 [DEBUG] [Thread-58535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:42:22.361 [DEBUG] [Thread-58535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:42:22.361 [DEBUG] [Thread-58535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:42:22.361 [DEBUG] [Thread-58535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:42:22.375 [INFO] [Thread-58535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:42:22.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:42:22.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:42:23.078 [DEBUG] [Thread-58537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:42:23.260 [DEBUG] [Thread-58535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:42:23.260 [DEBUG] [Thread-58535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:42:23.308 [DEBUG] [Thread-58535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:42:23.308 [DEBUG] [Thread-58535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:42:23.316 [DEBUG] [Thread-58535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:42:23.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:42:23.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:42:23.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:42:23.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:42:23.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:42:23.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:42:23.348 [DEBUG] [Thread-58535] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:42:25.811 [DEBUG] [Thread-58538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:42:27.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:42:27.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:42:38.107 [DEBUG] [Thread-58539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:42:53.141 [DEBUG] [Thread-58540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:42:53.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:42:53.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:42:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:42:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 42, 21), 28.08, 14.73, 0.0, 24.12, 22.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:42:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:42:21
2025-11-17T17:42:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:42:54.346 [DEBUG] [Thread-58541] [transport.py] [_log()] starting thread (client mode): 0xd0785240
2025-11-17T17:42:54.346 [DEBUG] [Thread-58541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:42:54.365 [DEBUG] [Thread-58541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:42:54.365 [INFO] [Thread-58541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:42:54.368 [DEBUG] [Thread-58541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:42:54.368 [DEBUG] [Thread-58541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] client lang: <none>
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] server lang: <none>
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] kex follows: False
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] Compression: none
2025-11-17T17:42:54.369 [DEBUG] [Thread-58541] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:42:54.384 [DEBUG] [Thread-58541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:42:54.384 [DEBUG] [Thread-58541] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:42:54.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:42:54.384 [DEBUG] [Thread-58541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:42:54.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:42:54.385 [DEBUG] [Thread-58541] [transport.py] [_log()] userauth is OK
2025-11-17T17:42:54.385 [DEBUG] [Thread-58541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:42:54.385 [DEBUG] [Thread-58541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:42:54.385 [DEBUG] [Thread-58541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:42:54.385 [DEBUG] [Thread-58541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:42:54.396 [INFO] [Thread-58541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:42:54.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:42:55.204 [DEBUG] [Thread-58541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:42:55.205 [DEBUG] [Thread-58541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:42:55.205 [DEBUG] [Thread-58541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:42:55.245 [DEBUG] [Thread-58541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:42:55.245 [DEBUG] [Thread-58541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:42:55.247 [DEBUG] [Thread-58541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:42:55.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:42:55.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:42:55.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:42:55.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:42:55.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:42:55.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:42:55.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.654218 -999.00  +21.90  31.36     20   -1.60 1 1 2 1 1   887    0 23.75 -10.41 ----- 24.8 31.4 272.4 36.9 24.1 -26.8 24.1 -26.0 23.8 -28.0 24.2 -25.9
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.654218
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:42:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:42:55.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:42:55.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:42:55.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:42:21', tmtdew=28.08, humidity=14.73, cloud=0.0, wind=24.12, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:42:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:42:55.266 [DEBUG] [Thread-58541] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:42:55.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:42:55.355 [DEBUG] [Thread-58544] [transport.py] [_log()] starting thread (client mode): 0xd0784280
2025-11-17T17:42:55.355 [DEBUG] [Thread-58544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:42:55.370 [DEBUG] [Thread-58544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:42:55.370 [INFO] [Thread-58544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:42:55.377 [DEBUG] [Thread-58544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] client lang: <none>
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] server lang: <none>
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] kex follows: False
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] Compression: none
2025-11-17T17:42:55.378 [DEBUG] [Thread-58544] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:42:55.436 [DEBUG] [Thread-58544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:42:55.436 [DEBUG] [Thread-58544] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:42:55.436 [DEBUG] [Thread-58544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:42:55.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:42:55.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:42:55.494 [DEBUG] [Thread-58544] [transport.py] [_log()] userauth is OK
2025-11-17T17:42:55.494 [DEBUG] [Thread-58544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:42:55.494 [DEBUG] [Thread-58544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:42:55.494 [DEBUG] [Thread-58544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:42:55.494 [DEBUG] [Thread-58544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:42:55.510 [INFO] [Thread-58544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:42:55.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:42:55.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:42:56.373 [DEBUG] [Thread-58544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:42:56.373 [DEBUG] [Thread-58544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:42:56.421 [DEBUG] [Thread-58544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:42:56.421 [DEBUG] [Thread-58544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:42:56.430 [DEBUG] [Thread-58544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:42:56.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:42:56.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:42:56.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:42:56.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:42:56.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:42:56.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:42:56.461 [DEBUG] [Thread-58544] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:43:08.168 [DEBUG] [Thread-58546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:43:23.217 [DEBUG] [Thread-58547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:43:25.863 [DEBUG] [Thread-58548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:43:26.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:43:26.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:43:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:43:27.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 42, 53), 28.01, 14.68, 0.0, 28.67, 22.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:43:27.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:42:53
2025-11-17T17:43:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:43:27.492 [DEBUG] [Thread-58549] [transport.py] [_log()] starting thread (client mode): 0xd0756170
2025-11-17T17:43:27.492 [DEBUG] [Thread-58549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:43:27.515 [DEBUG] [Thread-58549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:43:27.515 [INFO] [Thread-58549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] client lang: <none>
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] server lang: <none>
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] kex follows: False
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] Compression: none
2025-11-17T17:43:27.519 [DEBUG] [Thread-58549] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:43:27.534 [DEBUG] [Thread-58549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:43:27.534 [DEBUG] [Thread-58549] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:43:27.534 [DEBUG] [Thread-58549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:43:27.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:43:27.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:43:27.535 [DEBUG] [Thread-58549] [transport.py] [_log()] userauth is OK
2025-11-17T17:43:27.535 [DEBUG] [Thread-58549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:43:27.536 [DEBUG] [Thread-58549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:43:27.536 [DEBUG] [Thread-58549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:43:27.536 [DEBUG] [Thread-58549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:43:27.551 [INFO] [Thread-58549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:43:27.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:43:27.882 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:43:27.883 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:43:28.153 [DEBUG] [Thread-58549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:43:28.153 [DEBUG] [Thread-58549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:43:28.153 [DEBUG] [Thread-58549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:43:28.194 [DEBUG] [Thread-58549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:43:28.194 [DEBUG] [Thread-58549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:43:28.197 [DEBUG] [Thread-58549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:43:28.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:43:28.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:43:28.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:43:28.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:43:28.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:43:28.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:43:28.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:43:28.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:43:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:43:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.654565 -999.00  +21.90  16.03     20   -1.60 1 1 1 1 1   887    0 23.63 -11.54 ----- 17.4 16.0 283.5 37.3 23.9 -27.9 24.0 -25.6 23.7 -26.2 24.0 -26.7
2025-11-17T17:43:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:43:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:43:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.654565
2025-11-17T17:43:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:43:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:43:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:43:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:43:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:43:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:42:53', tmtdew=28.01, humidity=14.68, cloud=0.0, wind=28.67, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:42:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:43:28.215 [DEBUG] [Thread-58549] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:43:28.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:43:28.301 [DEBUG] [Thread-58552] [transport.py] [_log()] starting thread (client mode): 0xd0755ba0
2025-11-17T17:43:28.301 [DEBUG] [Thread-58552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:43:28.320 [DEBUG] [Thread-58552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:43:28.320 [INFO] [Thread-58552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] client lang: <none>
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] server lang: <none>
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] kex follows: False
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:43:28.328 [DEBUG] [Thread-58552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:43:28.329 [DEBUG] [Thread-58552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:43:28.329 [DEBUG] [Thread-58552] [transport.py] [_log()] Compression: none
2025-11-17T17:43:28.329 [DEBUG] [Thread-58552] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:43:28.384 [DEBUG] [Thread-58552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:43:28.385 [DEBUG] [Thread-58552] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:43:28.385 [DEBUG] [Thread-58552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:43:28.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:43:28.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:43:28.441 [DEBUG] [Thread-58552] [transport.py] [_log()] userauth is OK
2025-11-17T17:43:28.441 [DEBUG] [Thread-58552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:43:28.441 [DEBUG] [Thread-58552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:43:28.441 [DEBUG] [Thread-58552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:43:28.441 [DEBUG] [Thread-58552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:43:28.464 [INFO] [Thread-58552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:43:28.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:43:28.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:43:29.284 [DEBUG] [Thread-58552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:43:29.284 [DEBUG] [Thread-58552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:43:29.332 [DEBUG] [Thread-58552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:43:29.332 [DEBUG] [Thread-58552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:43:29.341 [DEBUG] [Thread-58552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:43:29.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:43:29.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:43:29.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:43:29.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:43:29.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:43:29.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:43:29.376 [DEBUG] [Thread-58552] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:43:38.248 [DEBUG] [Thread-58554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:43:53.294 [DEBUG] [Thread-58555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:43:59.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:43:59.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:43:59.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
2025-11-17T17:44:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 43, 26), 27.85, 14.85, 0.0, 29.04, 21.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:44:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:43:26
2025-11-17T17:44:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:44:00.360 [DEBUG] [Thread-58556] [transport.py] [_log()] starting thread (client mode): 0xd078df90
2025-11-17T17:44:00.360 [DEBUG] [Thread-58556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:44:00.381 [DEBUG] [Thread-58556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:44:00.381 [INFO] [Thread-58556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] client lang: <none>
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] server lang: <none>
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] kex follows: False
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:44:00.384 [DEBUG] [Thread-58556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:44:00.385 [DEBUG] [Thread-58556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:44:00.385 [DEBUG] [Thread-58556] [transport.py] [_log()] Compression: none
2025-11-17T17:44:00.385 [DEBUG] [Thread-58556] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:44:00.401 [DEBUG] [Thread-58556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:44:00.401 [DEBUG] [Thread-58556] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:44:00.402 [DEBUG] [Thread-58556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:44:00.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:44:00.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:44:00.403 [DEBUG] [Thread-58556] [transport.py] [_log()] userauth is OK
2025-11-17T17:44:00.404 [DEBUG] [Thread-58556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:44:00.404 [DEBUG] [Thread-58556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:44:00.404 [DEBUG] [Thread-58556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:44:00.404 [DEBUG] [Thread-58556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:44:00.421 [INFO] [Thread-58556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:44:00.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:44:01.186 [DEBUG] [Thread-58556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:44:01.187 [DEBUG] [Thread-58556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:44:01.187 [DEBUG] [Thread-58556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:44:01.227 [DEBUG] [Thread-58556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:44:01.228 [DEBUG] [Thread-58556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:44:01.230 [DEBUG] [Thread-58556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:44:01.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:44:01.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:44:01.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:44:01.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:44:01.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:44:01.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:44:01.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:44:01.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:44:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:44:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.654912 -999.00  +22.10  18.40     20   -1.60 1 1 1 1 1   887    0 23.52 -12.75 ----- 22.3 18.4 285.3 26.3 24.0 -26.4 24.0 -25.5 23.8 -25.1 24.0 -25.5
2025-11-17T17:44:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:44:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:44:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.654912
2025-11-17T17:44:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:44:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:44:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:44:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:44:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:44:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:43:26', tmtdew=27.85, humidity=14.85, cloud=0.0, wind=29.04, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:43:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:44:01.254 [DEBUG] [Thread-58556] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:44:01.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:44:01.351 [DEBUG] [Thread-58559] [transport.py] [_log()] starting thread (client mode): 0xd0720820
2025-11-17T17:44:01.351 [DEBUG] [Thread-58559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:44:01.366 [DEBUG] [Thread-58559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:44:01.366 [INFO] [Thread-58559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:44:01.374 [DEBUG] [Thread-58559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:44:01.374 [DEBUG] [Thread-58559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:44:01.374 [DEBUG] [Thread-58559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:44:01.374 [DEBUG] [Thread-58559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:44:01.374 [DEBUG] [Thread-58559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:44:01.374 [DEBUG] [Thread-58559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:44:01.374 [DEBUG] [Thread-58559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:44:01.374 [DEBUG] [Thread-58559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] client lang: <none>
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] server lang: <none>
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] kex follows: False
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:44:01.375 [DEBUG] [Thread-58559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:44:01.376 [DEBUG] [Thread-58559] [transport.py] [_log()] Compression: none
2025-11-17T17:44:01.376 [DEBUG] [Thread-58559] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:44:01.434 [DEBUG] [Thread-58559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:44:01.435 [DEBUG] [Thread-58559] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:44:01.435 [DEBUG] [Thread-58559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:44:01.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:44:01.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:44:01.497 [DEBUG] [Thread-58559] [transport.py] [_log()] userauth is OK
2025-11-17T17:44:01.497 [DEBUG] [Thread-58559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:44:01.497 [DEBUG] [Thread-58559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:44:01.498 [DEBUG] [Thread-58559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:44:01.498 [DEBUG] [Thread-58559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:44:01.517 [INFO] [Thread-58559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:44:01.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:44:01.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:44:02.380 [DEBUG] [Thread-58559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:44:02.381 [DEBUG] [Thread-58559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:44:02.428 [DEBUG] [Thread-58559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:44:02.428 [DEBUG] [Thread-58559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:44:02.437 [DEBUG] [Thread-58559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:44:02.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:44:02.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:44:02.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:44:02.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:44:02.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:44:02.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:44:02.471 [DEBUG] [Thread-58559] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:44:08.324 [DEBUG] [Thread-58561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:44:23.370 [DEBUG] [Thread-58562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:44:25.914 [DEBUG] [Thread-58563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:44:28.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:44:28.025 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:44:32.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:44:32.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:44:32.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:44:33.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 44, 30), 27.98, 14.85, 0.0, 27.83, 22.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:44:33.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:44:30
2025-11-17T17:44:33.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:44:33.446 [DEBUG] [Thread-58564] [transport.py] [_log()] starting thread (client mode): 0xd07573d0
2025-11-17T17:44:33.446 [DEBUG] [Thread-58564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:44:33.467 [DEBUG] [Thread-58564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:44:33.467 [INFO] [Thread-58564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:44:33.470 [DEBUG] [Thread-58564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:44:33.470 [DEBUG] [Thread-58564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:44:33.470 [DEBUG] [Thread-58564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:44:33.470 [DEBUG] [Thread-58564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:44:33.470 [DEBUG] [Thread-58564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:44:33.470 [DEBUG] [Thread-58564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:44:33.470 [DEBUG] [Thread-58564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] client lang: <none>
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] server lang: <none>
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] kex follows: False
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] Compression: none
2025-11-17T17:44:33.471 [DEBUG] [Thread-58564] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:44:33.489 [DEBUG] [Thread-58564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:44:33.490 [DEBUG] [Thread-58564] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:44:33.490 [DEBUG] [Thread-58564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:44:33.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:44:33.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:44:33.492 [DEBUG] [Thread-58564] [transport.py] [_log()] userauth is OK
2025-11-17T17:44:33.492 [DEBUG] [Thread-58564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:44:33.492 [DEBUG] [Thread-58564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:44:33.492 [DEBUG] [Thread-58564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:44:33.492 [DEBUG] [Thread-58564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:44:33.510 [INFO] [Thread-58564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:44:33.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:44:34.125 [DEBUG] [Thread-58564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:44:34.125 [DEBUG] [Thread-58564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:44:34.125 [DEBUG] [Thread-58564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:44:34.165 [DEBUG] [Thread-58564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:44:34.166 [DEBUG] [Thread-58564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:44:34.168 [DEBUG] [Thread-58564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:44:34.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:44:34.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:44:34.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:44:34.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:44:34.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:44:34.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:44:34.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:44:34.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:44:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:44:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.655260 -999.00  +22.10  20.60     20   -1.50 1 1 1 1 1   887    0 23.27 -12.22 ----- 24.8 20.6 300.6 26.9 23.9 -26.6 24.0 -25.6 23.8 -24.0 24.0 -25.5
2025-11-17T17:44:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:44:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:44:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.655260
2025-11-17T17:44:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:44:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:44:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:44:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:44:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:44:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:44:30', tmtdew=27.98, humidity=14.85, cloud=0.0, wind=27.83, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:43:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:44:34.193 [DEBUG] [Thread-58564] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:44:34.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:44:34.289 [DEBUG] [Thread-58567] [transport.py] [_log()] starting thread (client mode): 0xd078e0b0
2025-11-17T17:44:34.289 [DEBUG] [Thread-58567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:44:34.304 [DEBUG] [Thread-58567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:44:34.304 [INFO] [Thread-58567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:44:34.311 [DEBUG] [Thread-58567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:44:34.311 [DEBUG] [Thread-58567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:44:34.311 [DEBUG] [Thread-58567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:44:34.311 [DEBUG] [Thread-58567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:44:34.311 [DEBUG] [Thread-58567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:44:34.311 [DEBUG] [Thread-58567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] client lang: <none>
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] server lang: <none>
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] kex follows: False
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] Compression: none
2025-11-17T17:44:34.312 [DEBUG] [Thread-58567] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:44:34.372 [DEBUG] [Thread-58567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:44:34.372 [DEBUG] [Thread-58567] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:44:34.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:44:34.373 [DEBUG] [Thread-58567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:44:34.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:44:34.429 [DEBUG] [Thread-58567] [transport.py] [_log()] userauth is OK
2025-11-17T17:44:34.429 [DEBUG] [Thread-58567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:44:34.429 [DEBUG] [Thread-58567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:44:34.429 [DEBUG] [Thread-58567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:44:34.429 [DEBUG] [Thread-58567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:44:34.448 [INFO] [Thread-58567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:44:34.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:44:34.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:44:35.299 [DEBUG] [Thread-58567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:44:35.299 [DEBUG] [Thread-58567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:44:35.347 [DEBUG] [Thread-58567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:44:35.347 [DEBUG] [Thread-58567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:44:35.356 [DEBUG] [Thread-58567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:44:35.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:44:35.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:44:35.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:44:35.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:44:35.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:44:35.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:44:35.388 [DEBUG] [Thread-58567] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:44:38.401 [DEBUG] [Thread-58569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:44:53.449 [DEBUG] [Thread-58570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:45:05.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:45:05.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:45:05.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:45:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 45, 2), 27.93, 14.91, 0.0, 28.97, 22.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:45:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:45:02
2025-11-17T17:45:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:45:06.345 [DEBUG] [Thread-58571] [transport.py] [_log()] starting thread (client mode): 0xd070f970
2025-11-17T17:45:06.345 [DEBUG] [Thread-58571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:45:06.365 [DEBUG] [Thread-58571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:45:06.365 [INFO] [Thread-58571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:45:06.368 [DEBUG] [Thread-58571] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:45:06.368 [DEBUG] [Thread-58571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] client lang: <none>
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] server lang: <none>
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] kex follows: False
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:45:06.369 [DEBUG] [Thread-58571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:45:06.370 [DEBUG] [Thread-58571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:45:06.370 [DEBUG] [Thread-58571] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:45:06.370 [DEBUG] [Thread-58571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:45:06.370 [DEBUG] [Thread-58571] [transport.py] [_log()] Compression: none
2025-11-17T17:45:06.370 [DEBUG] [Thread-58571] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:45:06.382 [DEBUG] [Thread-58571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:45:06.383 [DEBUG] [Thread-58571] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:45:06.384 [DEBUG] [Thread-58571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:45:06.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:45:06.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:45:06.386 [DEBUG] [Thread-58571] [transport.py] [_log()] userauth is OK
2025-11-17T17:45:06.386 [DEBUG] [Thread-58571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:45:06.387 [DEBUG] [Thread-58571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:45:06.387 [DEBUG] [Thread-58571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:45:06.387 [DEBUG] [Thread-58571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:45:06.411 [INFO] [Thread-58571] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:45:06.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:45:08.481 [DEBUG] [Thread-58573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:45:09.491 [DEBUG] [Thread-58571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:45:09.491 [DEBUG] [Thread-58571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:45:09.491 [DEBUG] [Thread-58571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:45:09.531 [DEBUG] [Thread-58571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:45:09.531 [DEBUG] [Thread-58571] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:45:09.534 [DEBUG] [Thread-58571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:45:09.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:45:09.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:45:09.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:45:09.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:45:09.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:45:09.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:45:09.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:45:09.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:45:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:45:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.655607 -999.00  +21.90  20.82     20   -1.60 1 1 1 1 1   887    0 23.20 -13.00 ----- 19.5 20.8 289.8 32.6 23.9 -26.6 23.9 -24.8 23.8 -24.2 24.0 -25.4
2025-11-17T17:45:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:45:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:45:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.655607
2025-11-17T17:45:09.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:45:09.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:45:09.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:45:09.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:45:09.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:45:09.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:45:02', tmtdew=27.93, humidity=14.91, cloud=0.0, wind=28.97, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:44:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:45:09.578 [DEBUG] [Thread-58571] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:45:09.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:45:09.678 [DEBUG] [Thread-58575] [transport.py] [_log()] starting thread (client mode): 0xd0723ac0
2025-11-17T17:45:09.679 [DEBUG] [Thread-58575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:45:09.693 [DEBUG] [Thread-58575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:45:09.693 [INFO] [Thread-58575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:45:09.701 [DEBUG] [Thread-58575] [transport.py] [_log()] client lang: <none>
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] server lang: <none>
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] kex follows: False
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] Compression: none
2025-11-17T17:45:09.702 [DEBUG] [Thread-58575] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:45:09.760 [DEBUG] [Thread-58575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:45:09.761 [DEBUG] [Thread-58575] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:45:09.761 [DEBUG] [Thread-58575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:45:09.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:45:09.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:45:09.817 [DEBUG] [Thread-58575] [transport.py] [_log()] userauth is OK
2025-11-17T17:45:09.817 [DEBUG] [Thread-58575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:45:09.817 [DEBUG] [Thread-58575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:45:09.817 [DEBUG] [Thread-58575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:45:09.817 [DEBUG] [Thread-58575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:45:09.840 [INFO] [Thread-58575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:45:09.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:45:09.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:45:10.705 [DEBUG] [Thread-58575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:45:10.705 [DEBUG] [Thread-58575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:45:10.753 [DEBUG] [Thread-58575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:45:10.753 [DEBUG] [Thread-58575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:45:10.762 [DEBUG] [Thread-58575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:45:10.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:45:10.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:45:10.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:45:10.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:45:10.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:45:10.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:45:10.797 [DEBUG] [Thread-58575] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:45:23.508 [DEBUG] [Thread-58577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:45:25.958 [DEBUG] [Thread-58578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:45:28.165 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:45:28.166 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:45:38.547 [DEBUG] [Thread-58579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:45:40.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:45:40.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:45:40.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:45:41.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 45, 34), 28.04, 14.86, 0.0, 31.16, 22.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:45:41.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:45:34
2025-11-17T17:45:41.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:45:41.759 [DEBUG] [Thread-58580] [transport.py] [_log()] starting thread (client mode): 0xd07eb490
2025-11-17T17:45:41.759 [DEBUG] [Thread-58580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:45:41.780 [DEBUG] [Thread-58580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:45:41.780 [INFO] [Thread-58580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:45:41.783 [DEBUG] [Thread-58580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] client lang: <none>
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] server lang: <none>
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] kex follows: False
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] Compression: none
2025-11-17T17:45:41.784 [DEBUG] [Thread-58580] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:45:41.801 [DEBUG] [Thread-58580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:45:41.802 [DEBUG] [Thread-58580] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:45:41.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:45:41.803 [DEBUG] [Thread-58580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:45:41.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:45:41.804 [DEBUG] [Thread-58580] [transport.py] [_log()] userauth is OK
2025-11-17T17:45:41.805 [DEBUG] [Thread-58580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:45:41.805 [DEBUG] [Thread-58580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:45:41.805 [DEBUG] [Thread-58580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:45:41.805 [DEBUG] [Thread-58580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:45:41.828 [INFO] [Thread-58580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:45:41.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:45:42.446 [DEBUG] [Thread-58580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:45:42.447 [DEBUG] [Thread-58580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:45:42.447 [DEBUG] [Thread-58580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:45:42.487 [DEBUG] [Thread-58580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:45:42.487 [DEBUG] [Thread-58580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:45:42.490 [DEBUG] [Thread-58580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:45:42.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:45:42.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:45:42.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:45:42.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:45:42.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:45:42.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:45:42.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:45:42.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:45:42.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:45:42.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.656301 -999.00  +22.10  18.72     20   -1.50 1 1 1 1 1   887    0 23.27 -16.41 ----- 20.3 18.7 288.0 26.3 23.9 -26.0 24.0 -24.7 23.9 -24.0 24.0 -24.7
2025-11-17T17:45:42.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:45:42.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:45:42.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.656301
2025-11-17T17:45:42.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:45:42.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:45:42.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:45:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:45:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:45:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:45:34', tmtdew=28.04, humidity=14.86, cloud=0.0, wind=31.16, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:45:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:45:42.509 [DEBUG] [Thread-58580] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:45:42.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:45:42.605 [DEBUG] [Thread-58583] [transport.py] [_log()] starting thread (client mode): 0xd07e9690
2025-11-17T17:45:42.606 [DEBUG] [Thread-58583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:45:42.621 [DEBUG] [Thread-58583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:45:42.621 [INFO] [Thread-58583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:45:42.628 [DEBUG] [Thread-58583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:45:42.628 [DEBUG] [Thread-58583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:45:42.628 [DEBUG] [Thread-58583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] client lang: <none>
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] server lang: <none>
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] kex follows: False
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] Compression: none
2025-11-17T17:45:42.629 [DEBUG] [Thread-58583] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:45:42.684 [DEBUG] [Thread-58583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:45:42.684 [DEBUG] [Thread-58583] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:45:42.685 [DEBUG] [Thread-58583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:45:42.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:45:42.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:45:42.741 [DEBUG] [Thread-58583] [transport.py] [_log()] userauth is OK
2025-11-17T17:45:42.741 [DEBUG] [Thread-58583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:45:42.741 [DEBUG] [Thread-58583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:45:42.741 [DEBUG] [Thread-58583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:45:42.741 [DEBUG] [Thread-58583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:45:42.760 [INFO] [Thread-58583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:45:42.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:45:42.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:45:43.588 [DEBUG] [Thread-58583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:45:43.588 [DEBUG] [Thread-58583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:45:43.635 [DEBUG] [Thread-58583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:45:43.635 [DEBUG] [Thread-58583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:45:43.644 [DEBUG] [Thread-58583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:45:43.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:45:43.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:45:43.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:45:43.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:45:43.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:45:43.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:45:43.679 [DEBUG] [Thread-58583] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:45:53.581 [DEBUG] [Thread-58585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:46:08.629 [DEBUG] [Thread-58586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:46:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:46:13.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:46:13.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:46:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 46, 6), 27.71, 14.88, 0.0, 24.37, 21.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:46:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:46:06
2025-11-17T17:46:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:46:14.636 [DEBUG] [Thread-58587] [transport.py] [_log()] starting thread (client mode): 0xd0784880
2025-11-17T17:46:14.637 [DEBUG] [Thread-58587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:46:14.658 [DEBUG] [Thread-58587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:46:14.658 [INFO] [Thread-58587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:46:14.661 [DEBUG] [Thread-58587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] client lang: <none>
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] server lang: <none>
2025-11-17T17:46:14.662 [DEBUG] [Thread-58587] [transport.py] [_log()] kex follows: False
2025-11-17T17:46:14.663 [DEBUG] [Thread-58587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:46:14.663 [DEBUG] [Thread-58587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:46:14.663 [DEBUG] [Thread-58587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:46:14.663 [DEBUG] [Thread-58587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:46:14.663 [DEBUG] [Thread-58587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:46:14.663 [DEBUG] [Thread-58587] [transport.py] [_log()] Compression: none
2025-11-17T17:46:14.663 [DEBUG] [Thread-58587] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:46:14.683 [DEBUG] [Thread-58587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:46:14.684 [DEBUG] [Thread-58587] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:46:14.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:46:14.684 [DEBUG] [Thread-58587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:46:14.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:46:14.686 [DEBUG] [Thread-58587] [transport.py] [_log()] userauth is OK
2025-11-17T17:46:14.687 [DEBUG] [Thread-58587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:46:14.687 [DEBUG] [Thread-58587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:46:14.687 [DEBUG] [Thread-58587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:46:14.687 [DEBUG] [Thread-58587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:46:14.722 [INFO] [Thread-58587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:46:14.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:46:15.455 [DEBUG] [Thread-58587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:46:15.455 [DEBUG] [Thread-58587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:46:15.455 [DEBUG] [Thread-58587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:46:15.496 [DEBUG] [Thread-58587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:46:15.496 [DEBUG] [Thread-58587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:46:15.498 [DEBUG] [Thread-58587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:46:15.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:46:15.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:46:15.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:46:15.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:46:15.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:46:15.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:46:15.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:46:15.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:46:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:46:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.656648 -999.00  +22.10  23.66     20   -1.50 1 1 1 1 1   887    0 22.70 -16.92 ----- 19.2 23.7 299.8 31.4 23.9 -25.8 24.0 -24.3 23.9 -23.5 24.1 -24.6
2025-11-17T17:46:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:46:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:46:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.656648
2025-11-17T17:46:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:46:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:46:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:46:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:46:15.521 [DEBUG] [Thread-58587] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:46:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:46:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:46:06', tmtdew=27.71, humidity=14.88, cloud=0.0, wind=24.37, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:45:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:46:15.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:46:15.618 [DEBUG] [Thread-58590] [transport.py] [_log()] starting thread (client mode): 0xd0757ac0
2025-11-17T17:46:15.618 [DEBUG] [Thread-58590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:46:15.633 [DEBUG] [Thread-58590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:46:15.633 [INFO] [Thread-58590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:46:15.640 [DEBUG] [Thread-58590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:46:15.640 [DEBUG] [Thread-58590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] client lang: <none>
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] server lang: <none>
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] kex follows: False
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] Compression: none
2025-11-17T17:46:15.641 [DEBUG] [Thread-58590] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:46:15.696 [DEBUG] [Thread-58590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:46:15.697 [DEBUG] [Thread-58590] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:46:15.697 [DEBUG] [Thread-58590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:46:15.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:46:15.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:46:15.757 [DEBUG] [Thread-58590] [transport.py] [_log()] userauth is OK
2025-11-17T17:46:15.757 [DEBUG] [Thread-58590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:46:15.758 [DEBUG] [Thread-58590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:46:15.758 [DEBUG] [Thread-58590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:46:15.758 [DEBUG] [Thread-58590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:46:15.777 [INFO] [Thread-58590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:46:15.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:46:15.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:46:16.656 [DEBUG] [Thread-58590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:46:16.656 [DEBUG] [Thread-58590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:46:16.704 [DEBUG] [Thread-58590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:46:16.704 [DEBUG] [Thread-58590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:46:16.713 [DEBUG] [Thread-58590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:46:16.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:46:16.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:46:16.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:46:16.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:46:16.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:46:16.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:46:16.748 [DEBUG] [Thread-58590] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:46:23.658 [DEBUG] [Thread-58592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:46:26.020 [DEBUG] [Thread-58593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:46:28.308 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:46:28.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:46:38.699 [DEBUG] [Thread-58594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:46:46.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:46:46.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:46:46.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:46:47.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 46, 38), 27.96, 14.85, 0.0, 25.06, 22.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:46:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:46:38
2025-11-17T17:46:47.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:46:47.760 [DEBUG] [Thread-58595] [transport.py] [_log()] starting thread (client mode): 0xd0754280
2025-11-17T17:46:47.760 [DEBUG] [Thread-58595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:46:47.780 [DEBUG] [Thread-58595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:46:47.780 [INFO] [Thread-58595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] client lang: <none>
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] server lang: <none>
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] kex follows: False
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] Compression: none
2025-11-17T17:46:47.784 [DEBUG] [Thread-58595] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:46:47.801 [DEBUG] [Thread-58595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:46:47.801 [DEBUG] [Thread-58595] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:46:47.802 [DEBUG] [Thread-58595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:46:47.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:46:47.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:46:47.802 [DEBUG] [Thread-58595] [transport.py] [_log()] userauth is OK
2025-11-17T17:46:47.802 [DEBUG] [Thread-58595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:46:47.802 [DEBUG] [Thread-58595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:46:47.802 [DEBUG] [Thread-58595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:46:47.802 [DEBUG] [Thread-58595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:46:47.811 [INFO] [Thread-58595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:46:47.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:46:48.451 [DEBUG] [Thread-58595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:46:48.451 [DEBUG] [Thread-58595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:46:48.451 [DEBUG] [Thread-58595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:46:48.491 [DEBUG] [Thread-58595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:46:48.492 [DEBUG] [Thread-58595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:46:48.495 [DEBUG] [Thread-58595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:46:48.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:46:48.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:46:48.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:46:48.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:46:48.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:46:48.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:46:48.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:46:48.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:46:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:46:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.656996 -999.00  +22.20  14.64     20   -1.40 1 1 1 1 1   887    0 23.85 -19.36 ----- 17.1 14.6 301.8 24.9 23.9 -25.6 24.1 -23.9 24.0 -22.6 24.1 -24.2
2025-11-17T17:46:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:46:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:46:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.656996
2025-11-17T17:46:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:46:48.518 [DEBUG] [Thread-58595] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:46:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:46:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:46:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:46:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:46:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:46:38', tmtdew=27.96, humidity=14.85, cloud=0.0, wind=25.06, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:46:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:46:48.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:46:48.617 [DEBUG] [Thread-58598] [transport.py] [_log()] starting thread (client mode): 0xd07bcfa0
2025-11-17T17:46:48.617 [DEBUG] [Thread-58598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:46:48.632 [DEBUG] [Thread-58598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:46:48.632 [INFO] [Thread-58598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] client lang: <none>
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] server lang: <none>
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] kex follows: False
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:46:48.640 [DEBUG] [Thread-58598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:46:48.641 [DEBUG] [Thread-58598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:46:48.641 [DEBUG] [Thread-58598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:46:48.641 [DEBUG] [Thread-58598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:46:48.641 [DEBUG] [Thread-58598] [transport.py] [_log()] Compression: none
2025-11-17T17:46:48.641 [DEBUG] [Thread-58598] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:46:48.696 [DEBUG] [Thread-58598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:46:48.697 [DEBUG] [Thread-58598] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:46:48.697 [DEBUG] [Thread-58598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:46:48.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:46:48.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:46:48.753 [DEBUG] [Thread-58598] [transport.py] [_log()] userauth is OK
2025-11-17T17:46:48.753 [DEBUG] [Thread-58598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:46:48.753 [DEBUG] [Thread-58598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:46:48.753 [DEBUG] [Thread-58598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:46:48.753 [DEBUG] [Thread-58598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:46:48.772 [INFO] [Thread-58598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:46:48.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:46:48.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:46:49.630 [DEBUG] [Thread-58598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:46:49.630 [DEBUG] [Thread-58598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:46:49.680 [DEBUG] [Thread-58598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:46:49.681 [DEBUG] [Thread-58598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:46:49.689 [DEBUG] [Thread-58598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:46:49.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:46:49.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:46:49.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:46:49.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:46:49.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:46:49.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:46:49.725 [DEBUG] [Thread-58598] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:46:53.727 [DEBUG] [Thread-58600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:47:08.768 [DEBUG] [Thread-58601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:47:19.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:47:19.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:47:19.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:47:20.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 47, 10), 28.0, 14.82, 0.0, 24.61, 22.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:47:20.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:47:10
2025-11-17T17:47:20.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:47:20.697 [DEBUG] [Thread-58602] [transport.py] [_log()] starting thread (client mode): 0xd07ead40
2025-11-17T17:47:20.697 [DEBUG] [Thread-58602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:47:20.716 [DEBUG] [Thread-58602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:47:20.716 [INFO] [Thread-58602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] client lang: <none>
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] server lang: <none>
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] kex follows: False
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] Compression: none
2025-11-17T17:47:20.719 [DEBUG] [Thread-58602] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:47:20.734 [DEBUG] [Thread-58602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:47:20.734 [DEBUG] [Thread-58602] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:47:20.734 [DEBUG] [Thread-58602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:47:20.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:47:20.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:47:20.735 [DEBUG] [Thread-58602] [transport.py] [_log()] userauth is OK
2025-11-17T17:47:20.735 [DEBUG] [Thread-58602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:47:20.735 [DEBUG] [Thread-58602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:47:20.735 [DEBUG] [Thread-58602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:47:20.735 [DEBUG] [Thread-58602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:47:20.766 [INFO] [Thread-58602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:47:20.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:47:21.483 [DEBUG] [Thread-58602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:47:21.483 [DEBUG] [Thread-58602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:47:21.483 [DEBUG] [Thread-58602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:47:21.524 [DEBUG] [Thread-58602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:47:21.524 [DEBUG] [Thread-58602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:47:21.527 [DEBUG] [Thread-58602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:47:21.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:47:21.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:47:21.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:47:21.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:47:21.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:47:21.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:47:21.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.657343 -999.00  +22.30  15.08     20   -1.40 1 1 1 1 1   887    0 23.19 -18.64 ----- 14.5 15.1 290.0 22.9 24.0 -25.2 24.1 -23.5 24.1 -23.1 24.2 -23.8
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.657343
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:47:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:47:10', tmtdew=28.0, humidity=14.82, cloud=0.0, wind=24.61, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:46:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:47:21.547 [DEBUG] [Thread-58602] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:47:21.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:47:21.632 [DEBUG] [Thread-58605] [transport.py] [_log()] starting thread (client mode): 0xd0787a60
2025-11-17T17:47:21.632 [DEBUG] [Thread-58605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:47:21.650 [DEBUG] [Thread-58605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:47:21.650 [INFO] [Thread-58605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] client lang: <none>
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] server lang: <none>
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] kex follows: False
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] Compression: none
2025-11-17T17:47:21.658 [DEBUG] [Thread-58605] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:47:21.716 [DEBUG] [Thread-58605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:47:21.716 [DEBUG] [Thread-58605] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:47:21.716 [DEBUG] [Thread-58605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:47:21.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:47:21.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:47:21.773 [DEBUG] [Thread-58605] [transport.py] [_log()] userauth is OK
2025-11-17T17:47:21.773 [DEBUG] [Thread-58605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:47:21.773 [DEBUG] [Thread-58605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:47:21.773 [DEBUG] [Thread-58605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:47:21.773 [DEBUG] [Thread-58605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:47:21.787 [INFO] [Thread-58605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:47:21.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:47:21.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:47:22.650 [DEBUG] [Thread-58605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:47:22.650 [DEBUG] [Thread-58605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:47:22.698 [DEBUG] [Thread-58605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:47:22.698 [DEBUG] [Thread-58605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:47:22.706 [DEBUG] [Thread-58605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:47:22.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:47:22.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:47:22.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:47:22.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:47:22.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:47:22.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:47:22.738 [DEBUG] [Thread-58605] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:47:23.794 [DEBUG] [Thread-58607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:47:26.074 [DEBUG] [Thread-58608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:47:28.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:47:28.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:47:38.828 [DEBUG] [Thread-58609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:47:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:47:52.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:47:52.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:47:53.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 47, 42), 28.0, 14.85, 0.0, 28.55, 22.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:47:53.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:47:42
2025-11-17T17:47:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:47:53.668 [DEBUG] [Thread-58610] [transport.py] [_log()] starting thread (client mode): 0xd0756440
2025-11-17T17:47:53.668 [DEBUG] [Thread-58610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:47:53.693 [DEBUG] [Thread-58610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:47:53.693 [INFO] [Thread-58610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:47:53.697 [DEBUG] [Thread-58610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:47:53.697 [DEBUG] [Thread-58610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:47:53.697 [DEBUG] [Thread-58610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:47:53.698 [DEBUG] [Thread-58610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:47:53.698 [DEBUG] [Thread-58610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:47:53.698 [DEBUG] [Thread-58610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:47:53.698 [DEBUG] [Thread-58610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:47:53.698 [DEBUG] [Thread-58610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:47:53.698 [DEBUG] [Thread-58610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:47:53.698 [DEBUG] [Thread-58610] [transport.py] [_log()] client lang: <none>
2025-11-17T17:47:53.698 [DEBUG] [Thread-58610] [transport.py] [_log()] server lang: <none>
2025-11-17T17:47:53.699 [DEBUG] [Thread-58610] [transport.py] [_log()] kex follows: False
2025-11-17T17:47:53.699 [DEBUG] [Thread-58610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:47:53.699 [DEBUG] [Thread-58610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:47:53.699 [DEBUG] [Thread-58610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:47:53.699 [DEBUG] [Thread-58610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:47:53.699 [DEBUG] [Thread-58610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:47:53.699 [DEBUG] [Thread-58610] [transport.py] [_log()] Compression: none
2025-11-17T17:47:53.699 [DEBUG] [Thread-58610] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:47:53.718 [DEBUG] [Thread-58610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:47:53.719 [DEBUG] [Thread-58610] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:47:53.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:47:53.719 [DEBUG] [Thread-58610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:47:53.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:47:53.721 [DEBUG] [Thread-58610] [transport.py] [_log()] userauth is OK
2025-11-17T17:47:53.722 [DEBUG] [Thread-58610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:47:53.722 [DEBUG] [Thread-58610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:47:53.722 [DEBUG] [Thread-58610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:47:53.722 [DEBUG] [Thread-58610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:47:53.756 [INFO] [Thread-58610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:47:53.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:47:53.861 [DEBUG] [Thread-58612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:47:54.403 [DEBUG] [Thread-58610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:47:54.403 [DEBUG] [Thread-58610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:47:54.404 [DEBUG] [Thread-58610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:47:54.445 [DEBUG] [Thread-58610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:47:54.445 [DEBUG] [Thread-58610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:47:54.449 [DEBUG] [Thread-58610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:47:54.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:47:54.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:47:54.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:47:54.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:47:54.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:47:54.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:47:54.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:47:54.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:47:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:47:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.657690 -999.00  +22.40  12.84     20   -1.40 1 2 1 1 1   887    0 23.18 -19.84 ----- 13.5 12.8 283.8 17.0 24.1 -24.8 24.2 -23.4 24.3 -21.9 24.4 -23.4
2025-11-17T17:47:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:47:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:47:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.657690
2025-11-17T17:47:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:47:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:47:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:47:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:47:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:47:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:47:42', tmtdew=28.0, humidity=14.85, cloud=0.0, wind=28.55, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:47:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:47:54.470 [DEBUG] [Thread-58610] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:47:54.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:47:54.567 [DEBUG] [Thread-58614] [transport.py] [_log()] starting thread (client mode): 0xd07ebdc0
2025-11-17T17:47:54.567 [DEBUG] [Thread-58614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:47:54.581 [DEBUG] [Thread-58614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:47:54.581 [INFO] [Thread-58614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:47:54.589 [DEBUG] [Thread-58614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:47:54.589 [DEBUG] [Thread-58614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:47:54.589 [DEBUG] [Thread-58614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:47:54.589 [DEBUG] [Thread-58614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:47:54.589 [DEBUG] [Thread-58614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:47:54.589 [DEBUG] [Thread-58614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:47:54.589 [DEBUG] [Thread-58614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] client lang: <none>
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] server lang: <none>
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] kex follows: False
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:47:54.590 [DEBUG] [Thread-58614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:47:54.591 [DEBUG] [Thread-58614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:47:54.591 [DEBUG] [Thread-58614] [transport.py] [_log()] Compression: none
2025-11-17T17:47:54.591 [DEBUG] [Thread-58614] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:47:54.649 [DEBUG] [Thread-58614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:47:54.649 [DEBUG] [Thread-58614] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:47:54.650 [DEBUG] [Thread-58614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:47:54.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:47:54.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:47:54.705 [DEBUG] [Thread-58614] [transport.py] [_log()] userauth is OK
2025-11-17T17:47:54.705 [DEBUG] [Thread-58614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:47:54.705 [DEBUG] [Thread-58614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:47:54.705 [DEBUG] [Thread-58614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:47:54.705 [DEBUG] [Thread-58614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:47:54.724 [INFO] [Thread-58614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:47:54.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:47:54.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:47:55.549 [DEBUG] [Thread-58614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:47:55.549 [DEBUG] [Thread-58614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:47:55.597 [DEBUG] [Thread-58614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:47:55.598 [DEBUG] [Thread-58614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:47:55.607 [DEBUG] [Thread-58614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:47:55.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:47:55.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:47:55.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:47:55.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:47:55.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:47:55.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:47:55.641 [DEBUG] [Thread-58614] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:48:08.895 [DEBUG] [Thread-58616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:48:23.945 [DEBUG] [Thread-58617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:48:25.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:48:25.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:48:25.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:48:26.103 [DEBUG] [Thread-58618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:48:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 48, 14), 28.1, 14.77, 0.0, 28.48, 22.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:48:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:48:14
2025-11-17T17:48:26.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:48:26.566 [DEBUG] [Thread-58619] [transport.py] [_log()] starting thread (client mode): 0xd07ea950
2025-11-17T17:48:26.566 [DEBUG] [Thread-58619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:48:26.587 [DEBUG] [Thread-58619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:48:26.587 [INFO] [Thread-58619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] client lang: <none>
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] server lang: <none>
2025-11-17T17:48:26.590 [DEBUG] [Thread-58619] [transport.py] [_log()] kex follows: False
2025-11-17T17:48:26.591 [DEBUG] [Thread-58619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:48:26.591 [DEBUG] [Thread-58619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:48:26.591 [DEBUG] [Thread-58619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:48:26.591 [DEBUG] [Thread-58619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:48:26.591 [DEBUG] [Thread-58619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:48:26.591 [DEBUG] [Thread-58619] [transport.py] [_log()] Compression: none
2025-11-17T17:48:26.591 [DEBUG] [Thread-58619] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:48:26.610 [DEBUG] [Thread-58619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:48:26.610 [DEBUG] [Thread-58619] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:48:26.611 [DEBUG] [Thread-58619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:48:26.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:48:26.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:48:26.612 [DEBUG] [Thread-58619] [transport.py] [_log()] userauth is OK
2025-11-17T17:48:26.613 [DEBUG] [Thread-58619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:48:26.613 [DEBUG] [Thread-58619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:48:26.613 [DEBUG] [Thread-58619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:48:26.613 [DEBUG] [Thread-58619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:48:26.637 [INFO] [Thread-58619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:48:26.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:48:27.345 [DEBUG] [Thread-58619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:48:27.345 [DEBUG] [Thread-58619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:48:27.346 [DEBUG] [Thread-58619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:48:27.386 [DEBUG] [Thread-58619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:48:27.387 [DEBUG] [Thread-58619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:48:27.390 [DEBUG] [Thread-58619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:48:27.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:48:27.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:48:27.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:48:27.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:48:27.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:48:27.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:48:27.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:48:27.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:48:27.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:48:27.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.658037 -999.00  +22.40  31.95     20   -1.50 1 1 2 1 1   887    0 23.36 -17.14 ----- 26.3 31.9 272.0 37.9 24.1 -25.1 24.2 -24.3 24.3 -24.7 24.5 -23.4
2025-11-17T17:48:27.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:48:27.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:48:27.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.658037
2025-11-17T17:48:27.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:48:27.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:48:27.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:48:27.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:48:27.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:48:27.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:48:14', tmtdew=28.1, humidity=14.77, cloud=0.0, wind=28.48, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:47:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:48:27.414 [DEBUG] [Thread-58619] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:48:27.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:48:27.511 [DEBUG] [Thread-58622] [transport.py] [_log()] starting thread (client mode): 0xd070f010
2025-11-17T17:48:27.511 [DEBUG] [Thread-58622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:48:27.530 [DEBUG] [Thread-58622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:48:27.530 [INFO] [Thread-58622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:48:27.537 [DEBUG] [Thread-58622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:48:27.537 [DEBUG] [Thread-58622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:48:27.537 [DEBUG] [Thread-58622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:48:27.537 [DEBUG] [Thread-58622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] client lang: <none>
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] server lang: <none>
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] kex follows: False
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] Compression: none
2025-11-17T17:48:27.538 [DEBUG] [Thread-58622] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:48:27.603 [DEBUG] [Thread-58622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:48:27.603 [DEBUG] [Thread-58622] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:48:27.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:48:27.604 [DEBUG] [Thread-58622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:48:27.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:48:27.661 [DEBUG] [Thread-58622] [transport.py] [_log()] userauth is OK
2025-11-17T17:48:27.661 [DEBUG] [Thread-58622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:48:27.661 [DEBUG] [Thread-58622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:48:27.661 [DEBUG] [Thread-58622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:48:27.661 [DEBUG] [Thread-58622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:48:27.681 [INFO] [Thread-58622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:48:27.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:48:27.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:48:28.584 [DEBUG] [Thread-58622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:48:28.584 [DEBUG] [Thread-58622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:48:28.592 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:48:28.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:48:28.633 [DEBUG] [Thread-58622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:48:28.633 [DEBUG] [Thread-58622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:48:28.642 [DEBUG] [Thread-58622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:48:28.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:48:28.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:48:28.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:48:28.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:48:28.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:48:28.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:48:28.681 [DEBUG] [Thread-58622] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:48:38.973 [DEBUG] [Thread-58624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:48:53.999 [DEBUG] [Thread-58625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:48:58.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:48:58.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:48:58.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:48:59.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 48, 46), 28.21, 14.62, 0.0, 30.61, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:48:59.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:48:46
2025-11-17T17:48:59.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:48:59.629 [DEBUG] [Thread-58626] [transport.py] [_log()] starting thread (client mode): 0xd0755c60
2025-11-17T17:48:59.629 [DEBUG] [Thread-58626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:48:59.648 [DEBUG] [Thread-58626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:48:59.648 [INFO] [Thread-58626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:48:59.651 [DEBUG] [Thread-58626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] client lang: <none>
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] server lang: <none>
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] kex follows: False
2025-11-17T17:48:59.652 [DEBUG] [Thread-58626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:48:59.653 [DEBUG] [Thread-58626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:48:59.653 [DEBUG] [Thread-58626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:48:59.653 [DEBUG] [Thread-58626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:48:59.653 [DEBUG] [Thread-58626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:48:59.653 [DEBUG] [Thread-58626] [transport.py] [_log()] Compression: none
2025-11-17T17:48:59.653 [DEBUG] [Thread-58626] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:48:59.673 [DEBUG] [Thread-58626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:48:59.674 [DEBUG] [Thread-58626] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:48:59.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:48:59.675 [DEBUG] [Thread-58626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:48:59.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:48:59.677 [DEBUG] [Thread-58626] [transport.py] [_log()] userauth is OK
2025-11-17T17:48:59.677 [DEBUG] [Thread-58626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:48:59.677 [DEBUG] [Thread-58626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:48:59.677 [DEBUG] [Thread-58626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:48:59.678 [DEBUG] [Thread-58626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:48:59.692 [INFO] [Thread-58626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:48:59.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:49:00.365 [DEBUG] [Thread-58626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:49:00.365 [DEBUG] [Thread-58626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:49:00.365 [DEBUG] [Thread-58626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:49:00.406 [DEBUG] [Thread-58626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:49:00.407 [DEBUG] [Thread-58626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:49:00.410 [DEBUG] [Thread-58626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:49:00.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:49:00.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:49:00.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:49:00.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:49:00.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:49:00.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:49:00.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:49:00.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:49:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:49:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.658385 -999.00  +22.00  20.81     20   -1.50 1 1 1 1 1   887    0 23.52 -18.54 ----- 15.8 20.8 281.2 38.7 24.0 -25.5 24.2 -23.4 24.1 -22.8 24.4 -24.1
2025-11-17T17:49:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:49:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:49:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.658385
2025-11-17T17:49:00.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:49:00.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:49:00.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:49:00.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:49:00.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:49:00.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:48:46', tmtdew=28.21, humidity=14.62, cloud=0.0, wind=30.61, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:48:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:49:00.435 [DEBUG] [Thread-58626] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:49:00.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:49:00.532 [DEBUG] [Thread-58629] [transport.py] [_log()] starting thread (client mode): 0xd07315d0
2025-11-17T17:49:00.532 [DEBUG] [Thread-58629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:49:00.546 [DEBUG] [Thread-58629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:49:00.547 [INFO] [Thread-58629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:49:00.554 [DEBUG] [Thread-58629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:49:00.554 [DEBUG] [Thread-58629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] client lang: <none>
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] server lang: <none>
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] kex follows: False
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:49:00.555 [DEBUG] [Thread-58629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:49:00.556 [DEBUG] [Thread-58629] [transport.py] [_log()] Compression: none
2025-11-17T17:49:00.556 [DEBUG] [Thread-58629] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:49:00.613 [DEBUG] [Thread-58629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:49:00.613 [DEBUG] [Thread-58629] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:49:00.614 [DEBUG] [Thread-58629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:49:00.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:49:00.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:49:00.669 [DEBUG] [Thread-58629] [transport.py] [_log()] userauth is OK
2025-11-17T17:49:00.669 [DEBUG] [Thread-58629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:49:00.669 [DEBUG] [Thread-58629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:49:00.669 [DEBUG] [Thread-58629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:49:00.669 [DEBUG] [Thread-58629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:49:00.691 [INFO] [Thread-58629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:49:00.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:49:00.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:49:01.539 [DEBUG] [Thread-58629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:49:01.539 [DEBUG] [Thread-58629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:49:01.587 [DEBUG] [Thread-58629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:49:01.587 [DEBUG] [Thread-58629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:49:01.596 [DEBUG] [Thread-58629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:49:01.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:49:01.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:49:01.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:49:01.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:49:01.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:49:01.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:49:01.631 [DEBUG] [Thread-58629] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:49:09.035 [DEBUG] [Thread-58631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:49:24.074 [DEBUG] [Thread-58632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:49:26.155 [DEBUG] [Thread-58633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:49:28.734 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:49:28.736 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:49:31.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:49:31.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:49:31.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:49:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 49, 18), 28.26, 14.57, 0.0, 31.09, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:49:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:49:18
2025-11-17T17:49:32.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:49:32.574 [DEBUG] [Thread-58634] [transport.py] [_log()] starting thread (client mode): 0xd07319c0
2025-11-17T17:49:32.574 [DEBUG] [Thread-58634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:49:32.594 [DEBUG] [Thread-58634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:49:32.595 [INFO] [Thread-58634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:49:32.596 [DEBUG] [Thread-58634] [transport.py] [_log()] client lang: <none>
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] server lang: <none>
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] kex follows: False
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] Compression: none
2025-11-17T17:49:32.597 [DEBUG] [Thread-58634] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:49:32.612 [DEBUG] [Thread-58634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:49:32.612 [DEBUG] [Thread-58634] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:49:32.613 [DEBUG] [Thread-58634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:49:32.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:49:32.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:49:32.615 [DEBUG] [Thread-58634] [transport.py] [_log()] userauth is OK
2025-11-17T17:49:32.615 [DEBUG] [Thread-58634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:49:32.615 [DEBUG] [Thread-58634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:49:32.615 [DEBUG] [Thread-58634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:49:32.615 [DEBUG] [Thread-58634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:49:32.639 [INFO] [Thread-58634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:49:32.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:49:33.271 [DEBUG] [Thread-58634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:49:33.272 [DEBUG] [Thread-58634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:49:33.272 [DEBUG] [Thread-58634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:49:33.312 [DEBUG] [Thread-58634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:49:33.312 [DEBUG] [Thread-58634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:49:33.315 [DEBUG] [Thread-58634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:49:33.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:49:33.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:49:33.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:49:33.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:49:33.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:49:33.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:49:33.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:49:33.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:49:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:49:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.658732 -999.00  +22.20  22.05     20   -1.40 1 2 1 1 1   887    0 22.85 -18.26 ----- 23.4 22.1 277.2 31.0 24.1 -25.0 24.3 -23.1 24.4 -21.9 24.6 -23.7
2025-11-17T17:49:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:49:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:49:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.658732
2025-11-17T17:49:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:49:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:49:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:49:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:49:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:49:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:49:18', tmtdew=28.26, humidity=14.57, cloud=0.0, wind=31.09, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:48:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:49:33.339 [DEBUG] [Thread-58634] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:49:33.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:49:33.435 [DEBUG] [Thread-58637] [transport.py] [_log()] starting thread (client mode): 0xd07549d0
2025-11-17T17:49:33.435 [DEBUG] [Thread-58637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:49:33.450 [DEBUG] [Thread-58637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:49:33.450 [INFO] [Thread-58637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:49:33.457 [DEBUG] [Thread-58637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] client lang: <none>
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] server lang: <none>
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] kex follows: False
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] Compression: none
2025-11-17T17:49:33.458 [DEBUG] [Thread-58637] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:49:33.516 [DEBUG] [Thread-58637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:49:33.517 [DEBUG] [Thread-58637] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:49:33.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:49:33.518 [DEBUG] [Thread-58637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:49:33.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:49:33.576 [DEBUG] [Thread-58637] [transport.py] [_log()] userauth is OK
2025-11-17T17:49:33.577 [DEBUG] [Thread-58637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:49:33.577 [DEBUG] [Thread-58637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:49:33.577 [DEBUG] [Thread-58637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:49:33.577 [DEBUG] [Thread-58637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:49:33.596 [INFO] [Thread-58637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:49:33.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:49:33.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:49:34.463 [DEBUG] [Thread-58637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:49:34.464 [DEBUG] [Thread-58637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:49:34.511 [DEBUG] [Thread-58637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:49:34.511 [DEBUG] [Thread-58637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:49:34.520 [DEBUG] [Thread-58637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:49:34.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:49:34.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:49:34.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:49:34.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:49:34.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:49:34.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:49:34.554 [DEBUG] [Thread-58637] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:49:39.101 [DEBUG] [Thread-58639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:49:54.135 [DEBUG] [Thread-58640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:50:04.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:50:04.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:50:04.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:50:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 49, 50), 28.24, 14.55, 0.0, 26.98, 22.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:50:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:49:50
2025-11-17T17:50:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:50:05.505 [DEBUG] [Thread-58641] [transport.py] [_log()] starting thread (client mode): 0xd07e8490
2025-11-17T17:50:05.505 [DEBUG] [Thread-58641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:50:05.525 [DEBUG] [Thread-58641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:50:05.525 [INFO] [Thread-58641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:50:05.528 [DEBUG] [Thread-58641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] client lang: <none>
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] server lang: <none>
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] kex follows: False
2025-11-17T17:50:05.529 [DEBUG] [Thread-58641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:50:05.530 [DEBUG] [Thread-58641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:50:05.530 [DEBUG] [Thread-58641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:50:05.530 [DEBUG] [Thread-58641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:50:05.530 [DEBUG] [Thread-58641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:50:05.530 [DEBUG] [Thread-58641] [transport.py] [_log()] Compression: none
2025-11-17T17:50:05.530 [DEBUG] [Thread-58641] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:50:05.549 [DEBUG] [Thread-58641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:50:05.549 [DEBUG] [Thread-58641] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:50:05.550 [DEBUG] [Thread-58641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:50:05.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:50:05.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:50:05.552 [DEBUG] [Thread-58641] [transport.py] [_log()] userauth is OK
2025-11-17T17:50:05.552 [DEBUG] [Thread-58641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:50:05.552 [DEBUG] [Thread-58641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:50:05.553 [DEBUG] [Thread-58641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:50:05.553 [DEBUG] [Thread-58641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:50:05.572 [INFO] [Thread-58641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:50:05.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:50:07.578 [DEBUG] [Thread-58641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:50:07.579 [DEBUG] [Thread-58641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:50:07.579 [DEBUG] [Thread-58641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:50:07.620 [DEBUG] [Thread-58641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:50:07.620 [DEBUG] [Thread-58641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:50:07.622 [DEBUG] [Thread-58641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:50:07.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:50:07.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:50:07.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:50:07.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:50:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:50:07.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:50:07.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:50:07.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:50:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:50:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.659079 -999.00  +22.40  22.96     20   -1.50 1 2 1 1 1   887    0 23.33 -17.03 ----- 21.5 23.0 287.4 35.6 24.1 -24.5 24.3 -22.9 24.5 -21.1 24.6 -22.8
2025-11-17T17:50:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:50:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:50:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.659079
2025-11-17T17:50:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:50:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:50:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:50:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:50:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:50:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:49:50', tmtdew=28.24, humidity=14.55, cloud=0.0, wind=26.98, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:49:04.426', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:50:07.693 [DEBUG] [Thread-58641] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:50:07.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:50:07.791 [DEBUG] [Thread-58644] [transport.py] [_log()] starting thread (client mode): 0xd070f280
2025-11-17T17:50:07.791 [DEBUG] [Thread-58644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:50:07.806 [DEBUG] [Thread-58644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:50:07.806 [INFO] [Thread-58644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:50:07.813 [DEBUG] [Thread-58644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] client lang: <none>
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] server lang: <none>
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] kex follows: False
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:50:07.814 [DEBUG] [Thread-58644] [transport.py] [_log()] Compression: none
2025-11-17T17:50:07.815 [DEBUG] [Thread-58644] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:50:07.873 [DEBUG] [Thread-58644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:50:07.874 [DEBUG] [Thread-58644] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:50:07.874 [DEBUG] [Thread-58644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:50:07.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:50:07.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:50:07.929 [DEBUG] [Thread-58644] [transport.py] [_log()] userauth is OK
2025-11-17T17:50:07.929 [DEBUG] [Thread-58644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:50:07.929 [DEBUG] [Thread-58644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:50:07.929 [DEBUG] [Thread-58644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:50:07.929 [DEBUG] [Thread-58644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:50:07.950 [INFO] [Thread-58644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:50:07.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:50:07.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:50:08.818 [DEBUG] [Thread-58644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:50:08.818 [DEBUG] [Thread-58644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:50:08.867 [DEBUG] [Thread-58644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:50:08.867 [DEBUG] [Thread-58644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:50:08.876 [DEBUG] [Thread-58644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:50:08.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:50:08.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')
2025-11-17T17:50:08.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:50:08.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:50:08.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:50:08.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:50:08.911 [DEBUG] [Thread-58644] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:50:09.165 [DEBUG] [Thread-58646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:50:24.202 [DEBUG] [Thread-58647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:50:26.208 [DEBUG] [Thread-58648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:50:28.877 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:50:28.878 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:50:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:50:38.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:50:38.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
2025-11-17T17:50:39.231 [DEBUG] [Thread-58649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:50:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 50, 22), 28.37, 14.45, 0.0, 25.2, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:50:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:50:22
2025-11-17T17:50:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:50:39.844 [DEBUG] [Thread-58650] [transport.py] [_log()] starting thread (client mode): 0xd07bd810
2025-11-17T17:50:39.844 [DEBUG] [Thread-58650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:50:39.863 [DEBUG] [Thread-58650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:50:39.863 [INFO] [Thread-58650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:50:39.866 [DEBUG] [Thread-58650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] client lang: <none>
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] server lang: <none>
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] kex follows: False
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] Compression: none
2025-11-17T17:50:39.867 [DEBUG] [Thread-58650] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:50:39.885 [DEBUG] [Thread-58650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:50:39.886 [DEBUG] [Thread-58650] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:50:39.886 [DEBUG] [Thread-58650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:50:39.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:50:39.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:50:39.929 [DEBUG] [Thread-58650] [transport.py] [_log()] userauth is OK
2025-11-17T17:50:39.929 [DEBUG] [Thread-58650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:50:39.929 [DEBUG] [Thread-58650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:50:39.929 [DEBUG] [Thread-58650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:50:39.929 [DEBUG] [Thread-58650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:50:39.962 [INFO] [Thread-58650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:50:39.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:50:40.602 [DEBUG] [Thread-58650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:50:40.602 [DEBUG] [Thread-58650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:50:40.602 [DEBUG] [Thread-58650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:50:40.642 [DEBUG] [Thread-58650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:50:40.642 [DEBUG] [Thread-58650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:50:40.645 [DEBUG] [Thread-58650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:50:40.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:50:40.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:50:40.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:50:40.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:50:40.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:50:40.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:50:40.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:50:40.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:50:40.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:50:40.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.659426 -999.00  +22.30  27.32     20   -1.50 1 1 1 1 1   887    0 23.32 -16.95 ----- 29.3 27.3 281.4 32.8 24.2 -24.4 24.3 -23.5 24.5 -24.4 24.8 -22.6
2025-11-17T17:50:40.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:50:40.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:50:40.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.659426
2025-11-17T17:50:40.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:50:40.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:50:40.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:50:40.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:50:40.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:50:40.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:50:22', tmtdew=28.37, humidity=14.45, cloud=0.0, wind=25.2, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:49:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:50:40.680 [DEBUG] [Thread-58650] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:50:40.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:50:40.782 [DEBUG] [Thread-58653] [transport.py] [_log()] starting thread (client mode): 0xd0786d10
2025-11-17T17:50:40.782 [DEBUG] [Thread-58653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:50:40.798 [DEBUG] [Thread-58653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:50:40.798 [INFO] [Thread-58653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:50:40.805 [DEBUG] [Thread-58653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:50:40.805 [DEBUG] [Thread-58653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:50:40.805 [DEBUG] [Thread-58653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] client lang: <none>
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] server lang: <none>
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] kex follows: False
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] Compression: none
2025-11-17T17:50:40.806 [DEBUG] [Thread-58653] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:50:40.864 [DEBUG] [Thread-58653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:50:40.865 [DEBUG] [Thread-58653] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:50:40.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:50:40.866 [DEBUG] [Thread-58653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:50:40.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:50:40.921 [DEBUG] [Thread-58653] [transport.py] [_log()] userauth is OK
2025-11-17T17:50:40.921 [DEBUG] [Thread-58653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:50:40.921 [DEBUG] [Thread-58653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:50:40.921 [DEBUG] [Thread-58653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:50:40.921 [DEBUG] [Thread-58653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:50:40.940 [INFO] [Thread-58653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:50:40.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:50:40.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:50:41.800 [DEBUG] [Thread-58653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:50:41.801 [DEBUG] [Thread-58653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:50:41.848 [DEBUG] [Thread-58653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:50:41.848 [DEBUG] [Thread-58653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:50:41.860 [DEBUG] [Thread-58653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:50:41.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:50:41.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:50: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
2025-11-17T17:50:41.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:50:41.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:50:41.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:50:41.912 [DEBUG] [Thread-58653] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:50:54.258 [DEBUG] [Thread-58655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:51:09.296 [DEBUG] [Thread-58656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:51:11.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:51:11.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:51:11.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:51:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 50, 54), 28.77, 14.39, 0.0, 23.84, 22.86, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:51:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:50:54
2025-11-17T17:51:12.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:51:12.912 [DEBUG] [Thread-58657] [transport.py] [_log()] starting thread (client mode): 0xcdd0feb0
2025-11-17T17:51:12.912 [DEBUG] [Thread-58657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:51:12.931 [DEBUG] [Thread-58657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:51:12.931 [INFO] [Thread-58657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] client lang: <none>
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] server lang: <none>
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] kex follows: False
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] Compression: none
2025-11-17T17:51:12.935 [DEBUG] [Thread-58657] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:51:12.951 [DEBUG] [Thread-58657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:51:12.951 [DEBUG] [Thread-58657] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:51:12.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:51:12.951 [DEBUG] [Thread-58657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:51:12.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:51:12.993 [DEBUG] [Thread-58657] [transport.py] [_log()] userauth is OK
2025-11-17T17:51:12.993 [DEBUG] [Thread-58657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:51:12.993 [DEBUG] [Thread-58657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:51:12.993 [DEBUG] [Thread-58657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:51:12.993 [DEBUG] [Thread-58657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:51:13.008 [INFO] [Thread-58657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:51:13.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:51:13.631 [DEBUG] [Thread-58657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:51:13.632 [DEBUG] [Thread-58657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:51:13.632 [DEBUG] [Thread-58657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:51:13.673 [DEBUG] [Thread-58657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:51:13.673 [DEBUG] [Thread-58657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:51:13.675 [DEBUG] [Thread-58657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:51:13.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:51:13.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:51:13.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:51:13.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:51:13.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:51:13.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:51:13.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:51:13.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:51:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:51:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.660121 -999.00  +22.00  20.54     20   -1.50 1 2 1 1 1   887    0 23.17 -23.04 ----- 19.7 20.5 276.2 26.8 24.1 -24.4 24.4 -22.8 24.6 -21.5 24.9 -22.9
2025-11-17T17:51:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:51:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:51:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.660121
2025-11-17T17:51:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:51:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:51:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:51:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:51:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:51:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:50:54', tmtdew=28.77, humidity=14.39, cloud=0.0, wind=23.84, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:50:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:51:13.692 [DEBUG] [Thread-58657] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:51:13.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:51:13.779 [DEBUG] [Thread-58660] [transport.py] [_log()] starting thread (client mode): 0xcdd0ffd0
2025-11-17T17:51:13.779 [DEBUG] [Thread-58660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:51:13.793 [DEBUG] [Thread-58660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:51:13.794 [INFO] [Thread-58660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] client lang: <none>
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] server lang: <none>
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] kex follows: False
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:51:13.801 [DEBUG] [Thread-58660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:51:13.802 [DEBUG] [Thread-58660] [transport.py] [_log()] Compression: none
2025-11-17T17:51:13.802 [DEBUG] [Thread-58660] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:51:13.862 [DEBUG] [Thread-58660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:51:13.862 [DEBUG] [Thread-58660] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:51:13.862 [DEBUG] [Thread-58660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:51:13.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:51:13.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:51:13.920 [DEBUG] [Thread-58660] [transport.py] [_log()] userauth is OK
2025-11-17T17:51:13.920 [DEBUG] [Thread-58660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:51:13.920 [DEBUG] [Thread-58660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:51:13.920 [DEBUG] [Thread-58660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:51:13.921 [DEBUG] [Thread-58660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:51:13.935 [INFO] [Thread-58660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:51:13.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:51:13.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:51:14.773 [DEBUG] [Thread-58660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:51:14.773 [DEBUG] [Thread-58660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:51:14.821 [DEBUG] [Thread-58660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:51:14.821 [DEBUG] [Thread-58660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:51:14.829 [DEBUG] [Thread-58660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:51:14.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:51:14.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:51:14.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:51:14.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:51:14.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:51:14.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:51:14.860 [DEBUG] [Thread-58660] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:51:24.322 [DEBUG] [Thread-58662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:51:26.266 [DEBUG] [Thread-58663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:51:29.018 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:51:29.019 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:51:39.372 [DEBUG] [Thread-58664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:51:44.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:51:44.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:51:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:51:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 51, 26), 28.78, 14.39, 0.0, 26.59, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:51:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:51:26
2025-11-17T17:51:45.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:51:45.812 [DEBUG] [Thread-58665] [transport.py] [_log()] starting thread (client mode): 0xd0776440
2025-11-17T17:51:45.812 [DEBUG] [Thread-58665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:51:45.832 [DEBUG] [Thread-58665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:51:45.832 [INFO] [Thread-58665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:51:45.835 [DEBUG] [Thread-58665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:51:45.836 [DEBUG] [Thread-58665] [transport.py] [_log()] client lang: <none>
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] server lang: <none>
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] kex follows: False
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] Compression: none
2025-11-17T17:51:45.837 [DEBUG] [Thread-58665] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:51:45.855 [DEBUG] [Thread-58665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:51:45.856 [DEBUG] [Thread-58665] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:51:45.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:51:45.857 [DEBUG] [Thread-58665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:51:45.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:51:45.901 [DEBUG] [Thread-58665] [transport.py] [_log()] userauth is OK
2025-11-17T17:51:45.901 [DEBUG] [Thread-58665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:51:45.901 [DEBUG] [Thread-58665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:51:45.901 [DEBUG] [Thread-58665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:51:45.901 [DEBUG] [Thread-58665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:51:45.933 [INFO] [Thread-58665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:51:45.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:51:46.574 [DEBUG] [Thread-58665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:51:46.574 [DEBUG] [Thread-58665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:51:46.575 [DEBUG] [Thread-58665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:51:46.616 [DEBUG] [Thread-58665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:51:46.616 [DEBUG] [Thread-58665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:51:46.619 [DEBUG] [Thread-58665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:51:46.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:51:46.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:51:46.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:51:46.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:51:46.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:51:46.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:51:46.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:51:46.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:51:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:51:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.660468 -999.00  +21.90  26.02     20   -1.60 1 2 1 1 1   887    0 23.00 -25.61 ----- 23.1 26.0 272.8 30.5 24.1 -24.4 24.4 -22.3 24.5 -23.7 24.9 -23.2
2025-11-17T17:51:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:51:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:51:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.660468
2025-11-17T17:51:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:51:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:51:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:51:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:51:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:51:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:51:26', tmtdew=28.78, humidity=14.39, cloud=0.0, wind=26.59, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:51:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:51:46.642 [DEBUG] [Thread-58665] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:51:46.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:51:46.742 [DEBUG] [Thread-58668] [transport.py] [_log()] starting thread (client mode): 0xd0776fb0
2025-11-17T17:51:46.742 [DEBUG] [Thread-58668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:51:46.756 [DEBUG] [Thread-58668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:51:46.756 [INFO] [Thread-58668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:51:46.764 [DEBUG] [Thread-58668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:51:46.764 [DEBUG] [Thread-58668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:51:46.764 [DEBUG] [Thread-58668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:51:46.764 [DEBUG] [Thread-58668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:51:46.764 [DEBUG] [Thread-58668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] client lang: <none>
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] server lang: <none>
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] kex follows: False
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:51:46.765 [DEBUG] [Thread-58668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:51:46.766 [DEBUG] [Thread-58668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:51:46.766 [DEBUG] [Thread-58668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:51:46.766 [DEBUG] [Thread-58668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:51:46.766 [DEBUG] [Thread-58668] [transport.py] [_log()] Compression: none
2025-11-17T17:51:46.766 [DEBUG] [Thread-58668] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:51:46.821 [DEBUG] [Thread-58668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:51:46.821 [DEBUG] [Thread-58668] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:51:46.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:51:46.822 [DEBUG] [Thread-58668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:51:46.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:51:46.877 [DEBUG] [Thread-58668] [transport.py] [_log()] userauth is OK
2025-11-17T17:51:46.877 [DEBUG] [Thread-58668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:51:46.877 [DEBUG] [Thread-58668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:51:46.877 [DEBUG] [Thread-58668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:51:46.877 [DEBUG] [Thread-58668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:51:46.896 [INFO] [Thread-58668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:51:46.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:51:46.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:51:47.778 [DEBUG] [Thread-58668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:51:47.778 [DEBUG] [Thread-58668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:51:47.826 [DEBUG] [Thread-58668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:51:47.826 [DEBUG] [Thread-58668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:51:47.836 [DEBUG] [Thread-58668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:51:47.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:51:47.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:51:47.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:51:47.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:51:47.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:51:47.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:51:47.871 [DEBUG] [Thread-58668] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:51:54.399 [DEBUG] [Thread-58670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:52:09.434 [DEBUG] [Thread-58671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:52:17.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:52:17.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:52:17.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:52:18.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 51, 58), 28.64, 14.39, 0.0, 26.57, 22.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:52:18.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:51:58
2025-11-17T17:52:18.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:52:18.826 [DEBUG] [Thread-58672] [transport.py] [_log()] starting thread (client mode): 0xd078cca0
2025-11-17T17:52:18.826 [DEBUG] [Thread-58672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:52:18.847 [DEBUG] [Thread-58672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:52:18.847 [INFO] [Thread-58672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:52:18.850 [DEBUG] [Thread-58672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:52:18.850 [DEBUG] [Thread-58672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:52:18.850 [DEBUG] [Thread-58672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] client lang: <none>
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] server lang: <none>
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] kex follows: False
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:52:18.851 [DEBUG] [Thread-58672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:52:18.852 [DEBUG] [Thread-58672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:52:18.852 [DEBUG] [Thread-58672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:52:18.852 [DEBUG] [Thread-58672] [transport.py] [_log()] Compression: none
2025-11-17T17:52:18.852 [DEBUG] [Thread-58672] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:52:18.871 [DEBUG] [Thread-58672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:52:18.871 [DEBUG] [Thread-58672] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:52:18.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:52:18.872 [DEBUG] [Thread-58672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:52:18.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:52:18.874 [DEBUG] [Thread-58672] [transport.py] [_log()] userauth is OK
2025-11-17T17:52:18.875 [DEBUG] [Thread-58672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:52:18.875 [DEBUG] [Thread-58672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:52:18.875 [DEBUG] [Thread-58672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:52:18.875 [DEBUG] [Thread-58672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:52:18.894 [INFO] [Thread-58672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:52:18.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:52:19.499 [DEBUG] [Thread-58672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:52:19.499 [DEBUG] [Thread-58672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:52:19.500 [DEBUG] [Thread-58672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:52:19.540 [DEBUG] [Thread-58672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:52:19.541 [DEBUG] [Thread-58672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:52:19.544 [DEBUG] [Thread-58672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:52:19.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:52:19.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:52:19.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:52:19.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:52:19.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:52:19.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:52:19.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:52:19.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:52:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:52:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.660815 -999.00  +22.20  17.85     20   -1.40 1 2 1 1 1   887    0 23.12 -26.30 ----- 17.7 17.9 275.2 21.7 24.2 -23.7 24.4 -22.1 24.6 -21.4 24.9 -22.7
2025-11-17T17:52:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:52:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:52:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.660815
2025-11-17T17:52:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:52:19.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:52:19.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:52:19.568 [DEBUG] [Thread-58672] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:52:19.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:52:19.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:52:19.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:51:58', tmtdew=28.64, humidity=14.39, cloud=0.0, wind=26.57, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:51:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:52:19.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:52:19.654 [DEBUG] [Thread-58675] [transport.py] [_log()] starting thread (client mode): 0xd07771c0
2025-11-17T17:52:19.654 [DEBUG] [Thread-58675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:52:19.669 [DEBUG] [Thread-58675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:52:19.669 [INFO] [Thread-58675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:52:19.676 [DEBUG] [Thread-58675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] client lang: <none>
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] server lang: <none>
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] kex follows: False
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] Compression: none
2025-11-17T17:52:19.677 [DEBUG] [Thread-58675] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:52:19.736 [DEBUG] [Thread-58675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:52:19.737 [DEBUG] [Thread-58675] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:52:19.738 [DEBUG] [Thread-58675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:52:19.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:52:19.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:52:19.792 [DEBUG] [Thread-58675] [transport.py] [_log()] userauth is OK
2025-11-17T17:52:19.793 [DEBUG] [Thread-58675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:52:19.793 [DEBUG] [Thread-58675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:52:19.793 [DEBUG] [Thread-58675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:52:19.793 [DEBUG] [Thread-58675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:52:19.812 [INFO] [Thread-58675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:52:19.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:52:19.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:52:20.680 [DEBUG] [Thread-58675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:52:20.681 [DEBUG] [Thread-58675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:52:20.728 [DEBUG] [Thread-58675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:52:20.729 [DEBUG] [Thread-58675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:52:20.738 [DEBUG] [Thread-58675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:52:20.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:52:20.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:52:20.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:52:20.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:52:20.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:52:20.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:52:20.773 [DEBUG] [Thread-58675] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:52:24.470 [DEBUG] [Thread-58677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:52:26.315 [DEBUG] [Thread-58678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:52:29.160 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:52:29.161 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:52:39.510 [DEBUG] [Thread-58679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:52:50.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:52:50.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:52:50.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:52:51.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 52, 30), 28.68, 14.35, 0.0, 27.9, 22.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:52:51.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:52:30
2025-11-17T17:52:51.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:52:51.733 [DEBUG] [Thread-58680] [transport.py] [_log()] starting thread (client mode): 0xd0776260
2025-11-17T17:52:51.733 [DEBUG] [Thread-58680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:52:51.753 [DEBUG] [Thread-58680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:52:51.753 [INFO] [Thread-58680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:52:51.756 [DEBUG] [Thread-58680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:52:51.756 [DEBUG] [Thread-58680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:52:51.756 [DEBUG] [Thread-58680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] client lang: <none>
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] server lang: <none>
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] kex follows: False
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] Compression: none
2025-11-17T17:52:51.757 [DEBUG] [Thread-58680] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:52:51.774 [DEBUG] [Thread-58680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:52:51.775 [DEBUG] [Thread-58680] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:52:51.775 [DEBUG] [Thread-58680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:52:51.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:52:51.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:52:51.777 [DEBUG] [Thread-58680] [transport.py] [_log()] userauth is OK
2025-11-17T17:52:51.777 [DEBUG] [Thread-58680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:52:51.778 [DEBUG] [Thread-58680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:52:51.778 [DEBUG] [Thread-58680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:52:51.778 [DEBUG] [Thread-58680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:52:51.801 [INFO] [Thread-58680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:52:51.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:52:52.446 [DEBUG] [Thread-58680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:52:52.446 [DEBUG] [Thread-58680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:52:52.447 [DEBUG] [Thread-58680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:52:52.487 [DEBUG] [Thread-58680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:52:52.487 [DEBUG] [Thread-58680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:52:52.490 [DEBUG] [Thread-58680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:52:52.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:52:52.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:52:52.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:52:52.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:52:52.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:52:52.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:52:52.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:52:52.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:52:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:52:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.661162 -999.00  +22.40  21.16     20   -1.30 1 2 1 1 1   887    0 23.06 -27.73 ----- 19.1 21.2 276.8 26.9 24.3 -23.3 24.5 -22.3 24.7 -20.9 25.0 -22.7
2025-11-17T17:52:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:52:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:52:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.661162
2025-11-17T17:52:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:52:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:52:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:52:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:52:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:52:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:52:30', tmtdew=28.68, humidity=14.35, cloud=0.0, wind=27.9, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:52:04.397', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:52:52.517 [DEBUG] [Thread-58680] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:52:52.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:52:52.612 [DEBUG] [Thread-58683] [transport.py] [_log()] starting thread (client mode): 0xd0733730
2025-11-17T17:52:52.612 [DEBUG] [Thread-58683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:52:52.627 [DEBUG] [Thread-58683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:52:52.627 [INFO] [Thread-58683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:52:52.634 [DEBUG] [Thread-58683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] client lang: <none>
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] server lang: <none>
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] kex follows: False
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:52:52.635 [DEBUG] [Thread-58683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:52:52.636 [DEBUG] [Thread-58683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:52:52.636 [DEBUG] [Thread-58683] [transport.py] [_log()] Compression: none
2025-11-17T17:52:52.636 [DEBUG] [Thread-58683] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:52:52.692 [DEBUG] [Thread-58683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:52:52.693 [DEBUG] [Thread-58683] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:52:52.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:52:52.693 [DEBUG] [Thread-58683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:52:52.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:52:52.748 [DEBUG] [Thread-58683] [transport.py] [_log()] userauth is OK
2025-11-17T17:52:52.749 [DEBUG] [Thread-58683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:52:52.749 [DEBUG] [Thread-58683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:52:52.749 [DEBUG] [Thread-58683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:52:52.749 [DEBUG] [Thread-58683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:52:52.768 [INFO] [Thread-58683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:52:52.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:52:52.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:52:53.593 [DEBUG] [Thread-58683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:52:53.594 [DEBUG] [Thread-58683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:52:53.641 [DEBUG] [Thread-58683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:52:53.642 [DEBUG] [Thread-58683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:52:53.651 [DEBUG] [Thread-58683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:52:53.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:52:53.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:52:53.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:52:53.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:52:53.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:52:53.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:52:53.684 [DEBUG] [Thread-58683] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:52:54.545 [DEBUG] [Thread-58685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:53:09.583 [DEBUG] [Thread-58686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:53:23.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:53:23.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:53:23.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:53:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 53, 2), 28.8, 14.22, 0.0, 27.65, 22.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:53:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:53:02
2025-11-17T17:53:24.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:53:24.611 [DEBUG] [Thread-58687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:53:24.637 [DEBUG] [Thread-58688] [transport.py] [_log()] starting thread (client mode): 0xd0730b80
2025-11-17T17:53:24.638 [DEBUG] [Thread-58688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:53:24.659 [DEBUG] [Thread-58688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:53:24.659 [INFO] [Thread-58688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] client lang: <none>
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] server lang: <none>
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] kex follows: False
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] Compression: none
2025-11-17T17:53:24.663 [DEBUG] [Thread-58688] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:53:24.680 [DEBUG] [Thread-58688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:53:24.680 [DEBUG] [Thread-58688] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:53:24.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:53:24.681 [DEBUG] [Thread-58688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:53:24.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:53:24.682 [DEBUG] [Thread-58688] [transport.py] [_log()] userauth is OK
2025-11-17T17:53:24.682 [DEBUG] [Thread-58688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:53:24.682 [DEBUG] [Thread-58688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:53:24.682 [DEBUG] [Thread-58688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:53:24.682 [DEBUG] [Thread-58688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:53:24.697 [INFO] [Thread-58688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:53:24.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:53:25.307 [DEBUG] [Thread-58688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:53:25.307 [DEBUG] [Thread-58688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:53:25.307 [DEBUG] [Thread-58688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:53:25.347 [DEBUG] [Thread-58688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:53:25.348 [DEBUG] [Thread-58688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:53:25.350 [DEBUG] [Thread-58688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:53:25.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:53:25.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:53:25.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:53:25.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:53:25.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:53:25.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:53:25.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:53:25.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:53:25.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:53:25.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.661510 -999.00  +22.40  28.22     20   -1.40 1 2 1 1 1   887    0 22.76 -28.19 ----- 23.9 28.2 274.6 33.8 24.4 -23.8 24.5 -22.3 24.8 -22.1 25.1 -22.1
2025-11-17T17:53:25.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:53:25.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:53:25.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.661510
2025-11-17T17:53:25.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:53:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:53:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:53:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:53:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:53:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:53:02', tmtdew=28.8, humidity=14.22, cloud=0.0, wind=27.65, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:52:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:53:25.376 [DEBUG] [Thread-58688] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:53:25.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:53:25.466 [DEBUG] [Thread-58691] [transport.py] [_log()] starting thread (client mode): 0xcdd0d9f0
2025-11-17T17:53:25.466 [DEBUG] [Thread-58691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:53:25.481 [DEBUG] [Thread-58691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:53:25.482 [INFO] [Thread-58691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:53:25.489 [DEBUG] [Thread-58691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:53:25.489 [DEBUG] [Thread-58691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:53:25.489 [DEBUG] [Thread-58691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:53:25.489 [DEBUG] [Thread-58691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:53:25.489 [DEBUG] [Thread-58691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:53:25.489 [DEBUG] [Thread-58691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] client lang: <none>
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] server lang: <none>
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] kex follows: False
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] Compression: none
2025-11-17T17:53:25.490 [DEBUG] [Thread-58691] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:53:25.549 [DEBUG] [Thread-58691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:53:25.549 [DEBUG] [Thread-58691] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:53:25.549 [DEBUG] [Thread-58691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:53:25.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:53:25.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:53:25.609 [DEBUG] [Thread-58691] [transport.py] [_log()] userauth is OK
2025-11-17T17:53:25.609 [DEBUG] [Thread-58691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:53:25.609 [DEBUG] [Thread-58691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:53:25.609 [DEBUG] [Thread-58691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:53:25.609 [DEBUG] [Thread-58691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:53:25.629 [INFO] [Thread-58691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:53:25.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:53:25.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:53:26.365 [DEBUG] [Thread-58693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:53:26.562 [DEBUG] [Thread-58691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:53:26.563 [DEBUG] [Thread-58691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:53:26.610 [DEBUG] [Thread-58691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:53:26.610 [DEBUG] [Thread-58691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:53:26.619 [DEBUG] [Thread-58691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:53:26.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:53:26.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:53:26.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:53:26.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:53:26.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:53:26.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:53:26.654 [DEBUG] [Thread-58691] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:53:29.302 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:53:29.303 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:53:39.638 [DEBUG] [Thread-58694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:53:54.688 [DEBUG] [Thread-58695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:53:56.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:53:56.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:53:56.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:53:57.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 53, 34), 29.03, 14.0, 0.0, 25.44, 23.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:53:57.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:53:34
2025-11-17T17:53:57.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:53:57.603 [DEBUG] [Thread-58696] [transport.py] [_log()] starting thread (client mode): 0xd0777df0
2025-11-17T17:53:57.603 [DEBUG] [Thread-58696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:53:57.624 [DEBUG] [Thread-58696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:53:57.624 [INFO] [Thread-58696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:53:57.626 [DEBUG] [Thread-58696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:53:57.626 [DEBUG] [Thread-58696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:53:57.626 [DEBUG] [Thread-58696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] client lang: <none>
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] server lang: <none>
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] kex follows: False
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:53:57.627 [DEBUG] [Thread-58696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:53:57.628 [DEBUG] [Thread-58696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:53:57.628 [DEBUG] [Thread-58696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:53:57.628 [DEBUG] [Thread-58696] [transport.py] [_log()] Compression: none
2025-11-17T17:53:57.628 [DEBUG] [Thread-58696] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:53:57.640 [DEBUG] [Thread-58696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:53:57.640 [DEBUG] [Thread-58696] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:53:57.641 [DEBUG] [Thread-58696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:53:57.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:53:57.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:53:57.644 [DEBUG] [Thread-58696] [transport.py] [_log()] userauth is OK
2025-11-17T17:53:57.644 [DEBUG] [Thread-58696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:53:57.644 [DEBUG] [Thread-58696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:53:57.644 [DEBUG] [Thread-58696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:53:57.644 [DEBUG] [Thread-58696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:53:57.671 [INFO] [Thread-58696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:53:57.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:53:58.271 [DEBUG] [Thread-58696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:53:58.271 [DEBUG] [Thread-58696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:53:58.271 [DEBUG] [Thread-58696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:53:58.312 [DEBUG] [Thread-58696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:53:58.312 [DEBUG] [Thread-58696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:53:58.315 [DEBUG] [Thread-58696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:53:58.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:53:58.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:53:58.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:53:58.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:53:58.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:53:58.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:53:58.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:53:58.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:53:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:53:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.661857 -999.00  +22.10  22.82     20   -1.40 1 2 1 1 1   887    0 22.87 -28.53 ----- 21.4 22.8 276.7 33.4 24.3 -24.0 24.5 -22.3 24.7 -21.4 25.0 -22.2
2025-11-17T17:53:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:53:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:53:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.661857
2025-11-17T17:53:58.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:53:58.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:53:58.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:53:58.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:53:58.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:53:58.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:53:34', tmtdew=29.03, humidity=14.0, cloud=0.0, wind=25.44, temperature=23.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:53:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:53:58.342 [DEBUG] [Thread-58696] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:53:58.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:54:09.716 [DEBUG] [Thread-58699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:54:24.753 [DEBUG] [Thread-58700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:54:26.423 [DEBUG] [Thread-58701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:54:29.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:54:29.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:54:39.779 [DEBUG] [Thread-58702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:54:54.806 [DEBUG] [Thread-58703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:55:09.837 [DEBUG] [Thread-58704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:55:24.867 [DEBUG] [Thread-58705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:55:26.478 [DEBUG] [Thread-58706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:55:29.588 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:55:29.589 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:55:39.898 [DEBUG] [Thread-58707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:55:54.926 [DEBUG] [Thread-58708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:56:09.961 [DEBUG] [Thread-58709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:56:10.299 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T17:56:24.992 [DEBUG] [Thread-58710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:56:26.535 [DEBUG] [Thread-58711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:56:29.736 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:56:29.738 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:56:40.024 [DEBUG] [Thread-58712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:56:40.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:56:40.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:56:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:56:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 56, 14), 28.54, 14.32, 0.0, 32.15, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:56:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:56:14
2025-11-17T17:56:41.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:56:41.262 [DEBUG] [Thread-58713] [transport.py] [_log()] starting thread (client mode): 0xd07bdd20
2025-11-17T17:56:41.262 [DEBUG] [Thread-58713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:56:41.282 [DEBUG] [Thread-58713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:56:41.282 [INFO] [Thread-58713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] client lang: <none>
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] server lang: <none>
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] kex follows: False
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] Compression: none
2025-11-17T17:56:41.285 [DEBUG] [Thread-58713] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:56:41.302 [DEBUG] [Thread-58713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:56:41.302 [DEBUG] [Thread-58713] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:56:41.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:56:41.303 [DEBUG] [Thread-58713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:56:41.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:56:41.305 [DEBUG] [Thread-58713] [transport.py] [_log()] userauth is OK
2025-11-17T17:56:41.305 [DEBUG] [Thread-58713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:56:41.305 [DEBUG] [Thread-58713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:56:41.305 [DEBUG] [Thread-58713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:56:41.305 [DEBUG] [Thread-58713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:56:41.328 [INFO] [Thread-58713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:56:41.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:56:42.089 [DEBUG] [Thread-58713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:56:42.090 [DEBUG] [Thread-58713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:56:42.090 [DEBUG] [Thread-58713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:56:42.130 [DEBUG] [Thread-58713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:56:42.131 [DEBUG] [Thread-58713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:56:42.134 [DEBUG] [Thread-58713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:56:42.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:56:42.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:56:42.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:56:42.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:56:42.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:56:42.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:56:42.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:56:42.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:56:42.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:56:42.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.663940 -999.00  +22.50  22.36     20   -1.50 1 2 1 1 1   887    0 22.86 -15.90 ----- 24.5 22.4 288.4 32.4 24.5 -23.3 24.7 -22.3 25.0 -22.2 25.3 -22.4
2025-11-17T17:56:42.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:56:42.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:56:42.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.663940
2025-11-17T17:56:42.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:56:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:56:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:56:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:56:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:56:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:56:14', tmtdew=28.54, humidity=14.32, cloud=0.0, wind=32.15, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:56:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:56:42.158 [DEBUG] [Thread-58713] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:56:42.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:56:42.254 [DEBUG] [Thread-58716] [transport.py] [_log()] starting thread (client mode): 0xcdd0dbd0
2025-11-17T17:56:42.254 [DEBUG] [Thread-58716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:56:42.269 [DEBUG] [Thread-58716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:56:42.269 [INFO] [Thread-58716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:56:42.277 [DEBUG] [Thread-58716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:56:42.277 [DEBUG] [Thread-58716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:56:42.277 [DEBUG] [Thread-58716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:56:42.277 [DEBUG] [Thread-58716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:56:42.277 [DEBUG] [Thread-58716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:56:42.277 [DEBUG] [Thread-58716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:56:42.277 [DEBUG] [Thread-58716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:56:42.277 [DEBUG] [Thread-58716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:56:42.278 [DEBUG] [Thread-58716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:56:42.278 [DEBUG] [Thread-58716] [transport.py] [_log()] client lang: <none>
2025-11-17T17:56:42.278 [DEBUG] [Thread-58716] [transport.py] [_log()] server lang: <none>
2025-11-17T17:56:42.278 [DEBUG] [Thread-58716] [transport.py] [_log()] kex follows: False
2025-11-17T17:56:42.278 [DEBUG] [Thread-58716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:56:42.278 [DEBUG] [Thread-58716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:56:42.278 [DEBUG] [Thread-58716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:56:42.278 [DEBUG] [Thread-58716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:56:42.279 [DEBUG] [Thread-58716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:56:42.279 [DEBUG] [Thread-58716] [transport.py] [_log()] Compression: none
2025-11-17T17:56:42.279 [DEBUG] [Thread-58716] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:56:42.340 [DEBUG] [Thread-58716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:56:42.341 [DEBUG] [Thread-58716] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:56:42.341 [DEBUG] [Thread-58716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:56:42.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:56:42.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:56:42.401 [DEBUG] [Thread-58716] [transport.py] [_log()] userauth is OK
2025-11-17T17:56:42.401 [DEBUG] [Thread-58716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:56:42.401 [DEBUG] [Thread-58716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:56:42.401 [DEBUG] [Thread-58716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:56:42.401 [DEBUG] [Thread-58716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:56:42.421 [INFO] [Thread-58716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:56:42.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:56:42.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:56:43.260 [DEBUG] [Thread-58716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:56:43.260 [DEBUG] [Thread-58716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:56:43.310 [DEBUG] [Thread-58716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:56:43.310 [DEBUG] [Thread-58716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:56:43.319 [DEBUG] [Thread-58716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:56:43.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:56:43.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:56:43.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:56:43.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:56:43.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:56:43.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:56:43.354 [DEBUG] [Thread-58716] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:56:55.054 [DEBUG] [Thread-58718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:57:10.092 [DEBUG] [Thread-58719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:57:13.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:57:13.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:57:13.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:57:14.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 56, 46), 28.57, 14.24, 0.0, 33.49, 22.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:57:14.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:56:46
2025-11-17T17:57:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:57:14.296 [DEBUG] [Thread-58720] [transport.py] [_log()] starting thread (client mode): 0xd0775930
2025-11-17T17:57:14.296 [DEBUG] [Thread-58720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:57:14.316 [DEBUG] [Thread-58720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:57:14.316 [INFO] [Thread-58720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:57:14.319 [DEBUG] [Thread-58720] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:57:14.319 [DEBUG] [Thread-58720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:57:14.319 [DEBUG] [Thread-58720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] client lang: <none>
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] server lang: <none>
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] kex follows: False
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:57:14.320 [DEBUG] [Thread-58720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:57:14.321 [DEBUG] [Thread-58720] [transport.py] [_log()] Compression: none
2025-11-17T17:57:14.321 [DEBUG] [Thread-58720] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:57:14.337 [DEBUG] [Thread-58720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:57:14.338 [DEBUG] [Thread-58720] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:57:14.338 [DEBUG] [Thread-58720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:57:14.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:57:14.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:57:14.340 [DEBUG] [Thread-58720] [transport.py] [_log()] userauth is OK
2025-11-17T17:57:14.340 [DEBUG] [Thread-58720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:57:14.340 [DEBUG] [Thread-58720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:57:14.340 [DEBUG] [Thread-58720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:57:14.340 [DEBUG] [Thread-58720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:57:14.358 [INFO] [Thread-58720] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:57:14.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:57:14.996 [DEBUG] [Thread-58720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:57:14.996 [DEBUG] [Thread-58720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:57:14.997 [DEBUG] [Thread-58720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:57:15.037 [DEBUG] [Thread-58720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:57:15.037 [DEBUG] [Thread-58720] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:57:15.040 [DEBUG] [Thread-58720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:57:15.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:57:15.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:57:15.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:57:15.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:57:15.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:57:15.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:57:15.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:57:15.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:57:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:57:15.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.664287 -999.00  +22.40  26.76     19   -1.60 1 2 1 1 1   887    0 22.98 -12.91 ----- 27.4 26.8 292.0 38.1 24.6 -23.2 24.7 -22.3 25.1 -22.2 25.4 -22.4
2025-11-17T17:57:15.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:57:15.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:57:15.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.664287
2025-11-17T17:57:15.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:57:15.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:57:15.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:57:15.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:57:15.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T17:57:15.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:56:46', tmtdew=28.57, humidity=14.24, cloud=0.0, wind=33.49, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:56:34.397', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:57:15.067 [DEBUG] [Thread-58720] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:57:15.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:57:15.164 [DEBUG] [Thread-58723] [transport.py] [_log()] starting thread (client mode): 0xd07e9990
2025-11-17T17:57:15.164 [DEBUG] [Thread-58723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:57:15.179 [DEBUG] [Thread-58723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:57:15.180 [INFO] [Thread-58723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:57:15.187 [DEBUG] [Thread-58723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:57:15.187 [DEBUG] [Thread-58723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:57:15.187 [DEBUG] [Thread-58723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:57:15.187 [DEBUG] [Thread-58723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:57:15.187 [DEBUG] [Thread-58723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] client lang: <none>
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] server lang: <none>
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] kex follows: False
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:57:15.188 [DEBUG] [Thread-58723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:57:15.189 [DEBUG] [Thread-58723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:57:15.189 [DEBUG] [Thread-58723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:57:15.189 [DEBUG] [Thread-58723] [transport.py] [_log()] Compression: none
2025-11-17T17:57:15.189 [DEBUG] [Thread-58723] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:57:15.245 [DEBUG] [Thread-58723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:57:15.245 [DEBUG] [Thread-58723] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:57:15.246 [DEBUG] [Thread-58723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:57:15.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:57:15.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:57:15.300 [DEBUG] [Thread-58723] [transport.py] [_log()] userauth is OK
2025-11-17T17:57:15.301 [DEBUG] [Thread-58723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:57:15.301 [DEBUG] [Thread-58723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:57:15.301 [DEBUG] [Thread-58723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:57:15.301 [DEBUG] [Thread-58723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:57:15.320 [INFO] [Thread-58723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:57:15.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:57:15.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:57:16.173 [DEBUG] [Thread-58723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:57:16.173 [DEBUG] [Thread-58723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:57:16.220 [DEBUG] [Thread-58723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:57:16.220 [DEBUG] [Thread-58723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:57:16.229 [DEBUG] [Thread-58723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:57:16.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:57:16.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:57:16.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:57:16.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:57:16.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:57:16.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:57:16.262 [DEBUG] [Thread-58723] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:57:25.127 [DEBUG] [Thread-58725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:57:26.596 [DEBUG] [Thread-58726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:57:29.878 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:57:29.879 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:57:40.174 [DEBUG] [Thread-58727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:57:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:57:46.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:57:46.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:57:46.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 57, 18), 28.47, 14.34, 0.0, 31.69, 22.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:57:46.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:57:18
2025-11-17T17:57:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:57:47.227 [DEBUG] [Thread-58728] [transport.py] [_log()] starting thread (client mode): 0xd07bd990
2025-11-17T17:57:47.227 [DEBUG] [Thread-58728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:57:47.247 [DEBUG] [Thread-58728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:57:47.247 [INFO] [Thread-58728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] client lang: <none>
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] server lang: <none>
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] kex follows: False
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:57:47.249 [DEBUG] [Thread-58728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:57:47.250 [DEBUG] [Thread-58728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:57:47.250 [DEBUG] [Thread-58728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:57:47.250 [DEBUG] [Thread-58728] [transport.py] [_log()] Compression: none
2025-11-17T17:57:47.250 [DEBUG] [Thread-58728] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:57:47.267 [DEBUG] [Thread-58728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:57:47.268 [DEBUG] [Thread-58728] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:57:47.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:57:47.269 [DEBUG] [Thread-58728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:57:47.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:57:47.271 [DEBUG] [Thread-58728] [transport.py] [_log()] userauth is OK
2025-11-17T17:57:47.271 [DEBUG] [Thread-58728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:57:47.271 [DEBUG] [Thread-58728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:57:47.271 [DEBUG] [Thread-58728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:57:47.272 [DEBUG] [Thread-58728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:57:47.295 [INFO] [Thread-58728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:57:47.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:57:48.078 [DEBUG] [Thread-58728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:57:48.078 [DEBUG] [Thread-58728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:57:48.079 [DEBUG] [Thread-58728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:57:48.119 [DEBUG] [Thread-58728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:57:48.120 [DEBUG] [Thread-58728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:57:48.122 [DEBUG] [Thread-58728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:57:48.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:57:48.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:57:48.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:57:48.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:57:48.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:57:48.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:57:48.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:57:48.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:57:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:57:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.664634 -999.00  +22.40  25.65     19   -1.60 1 1 1 1 1   887    0 23.16 -10.78 ----- 28.3 25.6 276.4 30.3 24.6 -23.5 24.7 -23.6 25.1 -24.0 25.4 -22.6
2025-11-17T17:57:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:57:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:57:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.664634
2025-11-17T17:57:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:57:48.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:57:48.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:57:48.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:57:48.143 [DEBUG] [Thread-58728] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:57:48.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:57:48.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:57:18', tmtdew=28.47, humidity=14.34, cloud=0.0, wind=31.69, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:57:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:57:48.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:57:48.243 [DEBUG] [Thread-58731] [transport.py] [_log()] starting thread (client mode): 0xd0730130
2025-11-17T17:57:48.243 [DEBUG] [Thread-58731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:57:48.260 [DEBUG] [Thread-58731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:57:48.261 [INFO] [Thread-58731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] client lang: <none>
2025-11-17T17:57:48.268 [DEBUG] [Thread-58731] [transport.py] [_log()] server lang: <none>
2025-11-17T17:57:48.269 [DEBUG] [Thread-58731] [transport.py] [_log()] kex follows: False
2025-11-17T17:57:48.269 [DEBUG] [Thread-58731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:57:48.269 [DEBUG] [Thread-58731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:57:48.269 [DEBUG] [Thread-58731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:57:48.269 [DEBUG] [Thread-58731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:57:48.269 [DEBUG] [Thread-58731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:57:48.269 [DEBUG] [Thread-58731] [transport.py] [_log()] Compression: none
2025-11-17T17:57:48.269 [DEBUG] [Thread-58731] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:57:48.324 [DEBUG] [Thread-58731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:57:48.325 [DEBUG] [Thread-58731] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:57:48.325 [DEBUG] [Thread-58731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:57:48.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:57:48.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:57:48.381 [DEBUG] [Thread-58731] [transport.py] [_log()] userauth is OK
2025-11-17T17:57:48.381 [DEBUG] [Thread-58731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:57:48.381 [DEBUG] [Thread-58731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:57:48.381 [DEBUG] [Thread-58731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:57:48.381 [DEBUG] [Thread-58731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:57:48.401 [INFO] [Thread-58731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:57:48.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:57:48.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:57:49.331 [DEBUG] [Thread-58731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:57:49.331 [DEBUG] [Thread-58731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:57:49.379 [DEBUG] [Thread-58731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:57:49.379 [DEBUG] [Thread-58731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:57:49.388 [DEBUG] [Thread-58731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:57:49.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:57:49.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:57:49.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:57:49.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:57:49.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:57:49.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:57:49.423 [DEBUG] [Thread-58731] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:57:55.200 [DEBUG] [Thread-58733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:58:10.240 [DEBUG] [Thread-58734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:58:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:58:19.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:58:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:58:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 57, 50), 28.48, 14.4, 0.0, 30.47, 22.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:58:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:57:50
2025-11-17T17:58:20.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:58:20.387 [DEBUG] [Thread-58735] [transport.py] [_log()] starting thread (client mode): 0xd07332e0
2025-11-17T17:58:20.388 [DEBUG] [Thread-58735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:58:20.408 [DEBUG] [Thread-58735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:58:20.408 [INFO] [Thread-58735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:58:20.411 [DEBUG] [Thread-58735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:58:20.411 [DEBUG] [Thread-58735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:58:20.411 [DEBUG] [Thread-58735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:58:20.411 [DEBUG] [Thread-58735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:58:20.411 [DEBUG] [Thread-58735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:58:20.411 [DEBUG] [Thread-58735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:58:20.411 [DEBUG] [Thread-58735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:58:20.411 [DEBUG] [Thread-58735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] client lang: <none>
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] server lang: <none>
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] kex follows: False
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] Compression: none
2025-11-17T17:58:20.412 [DEBUG] [Thread-58735] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:58:20.429 [DEBUG] [Thread-58735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:58:20.429 [DEBUG] [Thread-58735] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:58:20.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:58:20.430 [DEBUG] [Thread-58735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:58:20.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:58:20.473 [DEBUG] [Thread-58735] [transport.py] [_log()] userauth is OK
2025-11-17T17:58:20.473 [DEBUG] [Thread-58735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:58:20.473 [DEBUG] [Thread-58735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:58:20.473 [DEBUG] [Thread-58735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:58:20.473 [DEBUG] [Thread-58735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:58:20.506 [INFO] [Thread-58735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:58:20.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:58:21.107 [DEBUG] [Thread-58735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:58:21.107 [DEBUG] [Thread-58735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:58:21.107 [DEBUG] [Thread-58735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:58:21.148 [DEBUG] [Thread-58735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:58:21.149 [DEBUG] [Thread-58735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:58:21.151 [DEBUG] [Thread-58735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:58:21.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:58:21.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:58:21.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:58:21.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:58:21.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:58:21.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:58:21.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:58:21.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:58:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:58:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.664982 -999.00  +22.10  24.24     20   -1.70 1 1 1 1 1   887    0 23.26 -8.43 ----- 21.1 24.2 269.2 32.3 24.4 -23.7 24.6 -23.0 24.9 -25.2 25.3 -23.2
2025-11-17T17:58:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:58:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:58:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.664982
2025-11-17T17:58:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:58:21.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:58:21.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:58:21.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:58:21.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:58:21.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:57:50', tmtdew=28.48, humidity=14.4, cloud=0.0, wind=30.47, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:57:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:58:21.176 [DEBUG] [Thread-58735] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:58:21.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:58:21.272 [DEBUG] [Thread-58738] [transport.py] [_log()] starting thread (client mode): 0xd07844c0
2025-11-17T17:58:21.273 [DEBUG] [Thread-58738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:58:21.292 [DEBUG] [Thread-58738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:58:21.292 [INFO] [Thread-58738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:58:21.299 [DEBUG] [Thread-58738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:58:21.299 [DEBUG] [Thread-58738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] client lang: <none>
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] server lang: <none>
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] kex follows: False
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] Compression: none
2025-11-17T17:58:21.300 [DEBUG] [Thread-58738] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:58:21.356 [DEBUG] [Thread-58738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:58:21.357 [DEBUG] [Thread-58738] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:58:21.357 [DEBUG] [Thread-58738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:58:21.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:58:21.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:58:21.413 [DEBUG] [Thread-58738] [transport.py] [_log()] userauth is OK
2025-11-17T17:58:21.413 [DEBUG] [Thread-58738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:58:21.413 [DEBUG] [Thread-58738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:58:21.413 [DEBUG] [Thread-58738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:58:21.414 [DEBUG] [Thread-58738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:58:21.433 [INFO] [Thread-58738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:58:21.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:58:21.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:58:22.270 [DEBUG] [Thread-58738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:58:22.270 [DEBUG] [Thread-58738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:58:22.318 [DEBUG] [Thread-58738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:58:22.318 [DEBUG] [Thread-58738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:58:22.326 [DEBUG] [Thread-58738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:58:22.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:58:22.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:58:22.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:58:22.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:58:22.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:58:22.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:58:22.357 [DEBUG] [Thread-58738] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:58:25.268 [DEBUG] [Thread-58740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:58:26.649 [DEBUG] [Thread-58741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:58:30.021 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:58:30.022 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:58:40.313 [DEBUG] [Thread-58742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:58:52.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:58:52.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17: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
2025-11-17T17:58:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 58, 22), 28.52, 14.37, 0.0, 30.7, 22.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:58:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:58:22
2025-11-17T17:58:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:58:53.340 [DEBUG] [Thread-58743] [transport.py] [_log()] starting thread (client mode): 0xd0775c00
2025-11-17T17:58:53.340 [DEBUG] [Thread-58743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:58:53.362 [DEBUG] [Thread-58743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:58:53.362 [INFO] [Thread-58743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] client lang: <none>
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] server lang: <none>
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] kex follows: False
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] Compression: none
2025-11-17T17:58:53.365 [DEBUG] [Thread-58743] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:58:53.381 [DEBUG] [Thread-58743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:58:53.381 [DEBUG] [Thread-58743] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:58:53.381 [DEBUG] [Thread-58743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:58:53.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:58:53.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:58:53.382 [DEBUG] [Thread-58743] [transport.py] [_log()] userauth is OK
2025-11-17T17:58:53.382 [DEBUG] [Thread-58743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:58:53.382 [DEBUG] [Thread-58743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:58:53.382 [DEBUG] [Thread-58743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:58:53.382 [DEBUG] [Thread-58743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:58:53.394 [INFO] [Thread-58743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:58:53.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:58:54.161 [DEBUG] [Thread-58743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:58:54.161 [DEBUG] [Thread-58743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:58:54.161 [DEBUG] [Thread-58743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:58:54.202 [DEBUG] [Thread-58743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:58:54.202 [DEBUG] [Thread-58743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:58:54.205 [DEBUG] [Thread-58743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:58:54.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:58:54.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:58:54.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:58:54.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:58:54.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:58:54.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:58:54.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.665329 -999.00  +22.10  21.33     20   -1.70 1 1 1 1 1   887    0 23.60 -6.97 ----- 26.6 21.3 284.2 30.4 24.4 -23.8 24.6 -23.5 24.9 -25.3 25.3 -23.6
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.665329
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:58:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:58:22', tmtdew=28.52, humidity=14.37, cloud=0.0, wind=30.7, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:58:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:58:54.234 [DEBUG] [Thread-58743] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:58:54.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:58:54.320 [DEBUG] [Thread-58746] [transport.py] [_log()] starting thread (client mode): 0xd07320b0
2025-11-17T17:58:54.320 [DEBUG] [Thread-58746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:58:54.339 [DEBUG] [Thread-58746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:58:54.339 [INFO] [Thread-58746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:58:54.346 [DEBUG] [Thread-58746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:58:54.346 [DEBUG] [Thread-58746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:58:54.346 [DEBUG] [Thread-58746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] client lang: <none>
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] server lang: <none>
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] kex follows: False
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] Compression: none
2025-11-17T17:58:54.347 [DEBUG] [Thread-58746] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:58:54.403 [DEBUG] [Thread-58746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:58:54.403 [DEBUG] [Thread-58746] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:58:54.404 [DEBUG] [Thread-58746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:58:54.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:58:54.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:58:54.460 [DEBUG] [Thread-58746] [transport.py] [_log()] userauth is OK
2025-11-17T17:58:54.460 [DEBUG] [Thread-58746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:58:54.460 [DEBUG] [Thread-58746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:58:54.460 [DEBUG] [Thread-58746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:58:54.460 [DEBUG] [Thread-58746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:58:54.474 [INFO] [Thread-58746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:58:54.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:58:54.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:58:55.321 [DEBUG] [Thread-58746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:58:55.321 [DEBUG] [Thread-58746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:58:55.343 [DEBUG] [Thread-58748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:58:55.369 [DEBUG] [Thread-58746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:58:55.369 [DEBUG] [Thread-58746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:58:55.377 [DEBUG] [Thread-58746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:58:55.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:58:55.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:58:55.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:58:55.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:58:55.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:58:55.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:58:55.409 [DEBUG] [Thread-58746] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:59:10.375 [DEBUG] [Thread-58749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:59:25.407 [DEBUG] [Thread-58750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:59:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:59:25.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:59:25.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:59:26.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 58, 54), 28.67, 14.27, 0.0, 28.07, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:59:26.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:58:54
2025-11-17T17:59:26.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:59:26.387 [DEBUG] [Thread-58751] [transport.py] [_log()] starting thread (client mode): 0xd07e9390
2025-11-17T17:59:26.387 [DEBUG] [Thread-58751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:59:26.407 [DEBUG] [Thread-58751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:59:26.407 [INFO] [Thread-58751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] client lang: <none>
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] server lang: <none>
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] kex follows: False
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:59:26.410 [DEBUG] [Thread-58751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:59:26.411 [DEBUG] [Thread-58751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:59:26.411 [DEBUG] [Thread-58751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:59:26.411 [DEBUG] [Thread-58751] [transport.py] [_log()] Compression: none
2025-11-17T17:59:26.411 [DEBUG] [Thread-58751] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:59:26.425 [DEBUG] [Thread-58751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:59:26.425 [DEBUG] [Thread-58751] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:59:26.425 [DEBUG] [Thread-58751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:59:26.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:59:26.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:59:26.426 [DEBUG] [Thread-58751] [transport.py] [_log()] userauth is OK
2025-11-17T17:59:26.426 [DEBUG] [Thread-58751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:59:26.426 [DEBUG] [Thread-58751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:59:26.426 [DEBUG] [Thread-58751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:59:26.426 [DEBUG] [Thread-58751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:59:26.437 [INFO] [Thread-58751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:59:26.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:59:26.710 [DEBUG] [Thread-58753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:59:27.079 [DEBUG] [Thread-58751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:59:27.079 [DEBUG] [Thread-58751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:59:27.079 [DEBUG] [Thread-58751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T17:59:27.121 [DEBUG] [Thread-58751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:59:27.121 [DEBUG] [Thread-58751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:59:27.123 [DEBUG] [Thread-58751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:59:27.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:59:27.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T17:59:27.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T17:59:27.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T17:59:27.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:59:27.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T17:59:27.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:59:27.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:59:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T17:59:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.665676 -999.00  +22.10  21.69     20   -1.70 1 1 1 1 1   887    0 23.71 -6.32 ----- 18.9 21.7 280.0 28.3 24.4 -23.9 24.6 -23.4 24.8 -24.4 25.2 -23.7
2025-11-17T17:59:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T17:59:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T17:59:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.665676
2025-11-17T17:59:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T17:59:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T17:59:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T17:59:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T17:59:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T17:59:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:58:54', tmtdew=28.67, humidity=14.27, cloud=0.0, wind=28.07, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:58:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T17:59:27.140 [DEBUG] [Thread-58751] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:59:27.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T17:59:27.225 [DEBUG] [Thread-58755] [transport.py] [_log()] starting thread (client mode): 0xd0731d20
2025-11-17T17:59:27.226 [DEBUG] [Thread-58755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:59:27.241 [DEBUG] [Thread-58755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T17:59:27.241 [INFO] [Thread-58755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] client lang: <none>
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] server lang: <none>
2025-11-17T17:59:27.248 [DEBUG] [Thread-58755] [transport.py] [_log()] kex follows: False
2025-11-17T17:59:27.249 [DEBUG] [Thread-58755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:59:27.249 [DEBUG] [Thread-58755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:59:27.249 [DEBUG] [Thread-58755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:59:27.249 [DEBUG] [Thread-58755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:59:27.249 [DEBUG] [Thread-58755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:59:27.249 [DEBUG] [Thread-58755] [transport.py] [_log()] Compression: none
2025-11-17T17:59:27.249 [DEBUG] [Thread-58755] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:59:27.303 [DEBUG] [Thread-58755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:59:27.303 [DEBUG] [Thread-58755] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:59:27.303 [DEBUG] [Thread-58755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T17:59:27.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T17:59:27.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:59:27.361 [DEBUG] [Thread-58755] [transport.py] [_log()] userauth is OK
2025-11-17T17:59:27.361 [DEBUG] [Thread-58755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:59:27.361 [DEBUG] [Thread-58755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:59:27.361 [DEBUG] [Thread-58755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T17:59:27.361 [DEBUG] [Thread-58755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:59:27.379 [INFO] [Thread-58755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:59:27.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T17:59:27.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T17:59:28.240 [DEBUG] [Thread-58755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T17:59:28.240 [DEBUG] [Thread-58755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T17:59:28.287 [DEBUG] [Thread-58755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T17:59:28.287 [DEBUG] [Thread-58755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T17:59:28.296 [DEBUG] [Thread-58755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T17:59:28.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T17:59:28.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T17:59:28.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T17:59:28.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T17:59:28.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T17:59:28.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T17:59:28.329 [DEBUG] [Thread-58755] [transport.py] [_log()] EOF in transport thread
2025-11-17T17:59:30.166 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:59:30.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:59:40.436 [DEBUG] [Thread-58757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:59:55.485 [DEBUG] [Thread-58758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T17:59:58.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T17:59:58.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T17:59:58.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T17:59:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 59, 26), 28.63, 14.3, 0.0, 26.03, 22.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T17:59:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:59:26
2025-11-17T17:59:59.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T17:59:59.324 [DEBUG] [Thread-58759] [transport.py] [_log()] starting thread (client mode): 0xd0784a90
2025-11-17T17:59:59.324 [DEBUG] [Thread-58759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T17:59:59.346 [DEBUG] [Thread-58759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T17:59:59.346 [INFO] [Thread-58759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] client lang: <none>
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] server lang: <none>
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] kex follows: False
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] Compression: none
2025-11-17T17:59:59.349 [DEBUG] [Thread-58759] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T17:59:59.366 [DEBUG] [Thread-58759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T17:59:59.366 [DEBUG] [Thread-58759] [transport.py] [_log()] Switch to new keys ...
2025-11-17T17:59:59.366 [DEBUG] [Thread-58759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T17:59:59.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T17:59:59.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T17:59:59.367 [DEBUG] [Thread-58759] [transport.py] [_log()] userauth is OK
2025-11-17T17:59:59.367 [DEBUG] [Thread-58759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T17:59:59.367 [DEBUG] [Thread-58759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T17:59:59.367 [DEBUG] [Thread-58759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T17:59:59.367 [DEBUG] [Thread-58759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T17:59:59.376 [INFO] [Thread-58759] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T17:59:59.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:00:00.145 [DEBUG] [Thread-58759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:00:00.145 [DEBUG] [Thread-58759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:00:00.145 [DEBUG] [Thread-58759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:00:00.186 [DEBUG] [Thread-58759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:00:00.186 [DEBUG] [Thread-58759] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:00:00.188 [DEBUG] [Thread-58759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:00:00.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:00:00.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:00:00.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:00:00.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:00:00.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:00:00.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:00:00.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.666023 -999.00  +22.10  19.45     20   -1.70 1 2 1 1 1   887    0 23.50 -4.56 ----- 21.4 19.4 283.8 26.3 24.5 -23.7 24.6 -23.1 24.9 -22.9 25.2 -23.2
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.666023
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T18:00:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:59:26', tmtdew=28.63, humidity=14.3, cloud=0.0, wind=26.03, temperature=22.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:59:04.387', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:00:00.207 [DEBUG] [Thread-58759] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:00:00.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:00:00.293 [DEBUG] [Thread-58762] [transport.py] [_log()] starting thread (client mode): 0xd070de70
2025-11-17T18:00:00.293 [DEBUG] [Thread-58762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:00:00.308 [DEBUG] [Thread-58762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:00:00.308 [INFO] [Thread-58762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:00:00.316 [DEBUG] [Thread-58762] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:00:00.316 [DEBUG] [Thread-58762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:00:00.316 [DEBUG] [Thread-58762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:00:00.316 [DEBUG] [Thread-58762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:00:00.316 [DEBUG] [Thread-58762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:00:00.316 [DEBUG] [Thread-58762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:00:00.316 [DEBUG] [Thread-58762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:00:00.316 [DEBUG] [Thread-58762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] client lang: <none>
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] server lang: <none>
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] kex follows: False
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:00:00.317 [DEBUG] [Thread-58762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:00:00.318 [DEBUG] [Thread-58762] [transport.py] [_log()] Compression: none
2025-11-17T18:00:00.318 [DEBUG] [Thread-58762] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:00:00.374 [DEBUG] [Thread-58762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:00:00.374 [DEBUG] [Thread-58762] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:00:00.375 [DEBUG] [Thread-58762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:00:00.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:00:00.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:00:00.433 [DEBUG] [Thread-58762] [transport.py] [_log()] userauth is OK
2025-11-17T18:00:00.433 [DEBUG] [Thread-58762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:00:00.433 [DEBUG] [Thread-58762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:00:00.433 [DEBUG] [Thread-58762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:00:00.434 [DEBUG] [Thread-58762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:00:00.453 [INFO] [Thread-58762] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:00:00.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:00:00.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:00:01.314 [DEBUG] [Thread-58762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:00:01.314 [DEBUG] [Thread-58762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:00:01.362 [DEBUG] [Thread-58762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:00:01.362 [DEBUG] [Thread-58762] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:00:01.371 [DEBUG] [Thread-58762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:00:01.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:00:01.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:00:01.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:00:01.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:00:01.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:00:01.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:00:01.405 [DEBUG] [Thread-58762] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:00:10.512 [DEBUG] [Thread-58764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:00:25.546 [DEBUG] [Thread-58765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:00:26.766 [DEBUG] [Thread-58766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:00:30.308 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:00:30.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:00:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:00:31.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:00:31.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:00:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 17, 59, 58), 28.68, 14.35, 0.0, 24.88, 22.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:00:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 17:59:58
2025-11-17T18:00:32.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:00:32.410 [DEBUG] [Thread-58767] [transport.py] [_log()] starting thread (client mode): 0xd0777250
2025-11-17T18:00:32.410 [DEBUG] [Thread-58767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:00:32.431 [DEBUG] [Thread-58767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:00:32.431 [INFO] [Thread-58767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] client lang: <none>
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] server lang: <none>
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] kex follows: False
2025-11-17T18:00:32.434 [DEBUG] [Thread-58767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:00:32.435 [DEBUG] [Thread-58767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:00:32.435 [DEBUG] [Thread-58767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:00:32.435 [DEBUG] [Thread-58767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:00:32.435 [DEBUG] [Thread-58767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:00:32.435 [DEBUG] [Thread-58767] [transport.py] [_log()] Compression: none
2025-11-17T18:00:32.435 [DEBUG] [Thread-58767] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:00:32.454 [DEBUG] [Thread-58767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:00:32.454 [DEBUG] [Thread-58767] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:00:32.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:00:32.455 [DEBUG] [Thread-58767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:00:32.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:00:32.457 [DEBUG] [Thread-58767] [transport.py] [_log()] userauth is OK
2025-11-17T18:00:32.457 [DEBUG] [Thread-58767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:00:32.457 [DEBUG] [Thread-58767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:00:32.457 [DEBUG] [Thread-58767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:00:32.457 [DEBUG] [Thread-58767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:00:32.492 [INFO] [Thread-58767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:00:32.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:00:33.141 [DEBUG] [Thread-58767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:00:33.142 [DEBUG] [Thread-58767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:00:33.142 [DEBUG] [Thread-58767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:00:33.182 [DEBUG] [Thread-58767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:00:33.182 [DEBUG] [Thread-58767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:00:33.185 [DEBUG] [Thread-58767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:00:33.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:00:33.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:00:33.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:00:33.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:00:33.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:00:33.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:00:33.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:00:33.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:00:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:00:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.666371 -999.00  +22.30  20.72     20   -1.70 1 1 1 1 1   887    0 23.95 -4.06 ----- 23.8 20.7 274.7 29.7 24.6 -23.6 24.6 -23.5 25.0 -25.7 25.3 -23.0
2025-11-17T18:00:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:00:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:00:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.666371
2025-11-17T18:00:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:00:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:00:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:00:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:00:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:00:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T17:59:58', tmtdew=28.68, humidity=14.35, cloud=0.0, wind=24.88, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T15:59:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:00:33.210 [DEBUG] [Thread-58767] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:00:33.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:00:33.307 [DEBUG] [Thread-58770] [transport.py] [_log()] starting thread (client mode): 0xd07e8940
2025-11-17T18:00:33.307 [DEBUG] [Thread-58770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:00:33.322 [DEBUG] [Thread-58770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:00:33.322 [INFO] [Thread-58770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:00:33.330 [DEBUG] [Thread-58770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:00:33.330 [DEBUG] [Thread-58770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:00:33.330 [DEBUG] [Thread-58770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:00:33.330 [DEBUG] [Thread-58770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:00:33.330 [DEBUG] [Thread-58770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:00:33.330 [DEBUG] [Thread-58770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] client lang: <none>
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] server lang: <none>
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] kex follows: False
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] Compression: none
2025-11-17T18:00:33.331 [DEBUG] [Thread-58770] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:00:33.388 [DEBUG] [Thread-58770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:00:33.389 [DEBUG] [Thread-58770] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:00:33.389 [DEBUG] [Thread-58770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:00:33.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:00:33.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:00:33.445 [DEBUG] [Thread-58770] [transport.py] [_log()] userauth is OK
2025-11-17T18:00:33.445 [DEBUG] [Thread-58770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:00:33.445 [DEBUG] [Thread-58770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:00:33.445 [DEBUG] [Thread-58770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:00:33.445 [DEBUG] [Thread-58770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:00:33.468 [INFO] [Thread-58770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:00:33.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:00:33.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:00:34.342 [DEBUG] [Thread-58770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:00:34.342 [DEBUG] [Thread-58770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:00:34.389 [DEBUG] [Thread-58770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:00:34.389 [DEBUG] [Thread-58770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:00:34.398 [DEBUG] [Thread-58770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:00:34.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:00:34.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:00:34.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:00:34.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:00:34.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:00:34.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:00:34.432 [DEBUG] [Thread-58770] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:00:40.576 [DEBUG] [Thread-58772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:00:55.621 [DEBUG] [Thread-58773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:01:04.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:01:04.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:01:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:01:05.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 1, 2), 28.73, 14.3, 0.0, 28.12, 22.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:01:05.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:01:02
2025-11-17T18:01:05.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:01:05.401 [DEBUG] [Thread-58774] [transport.py] [_log()] starting thread (client mode): 0xd07e9390
2025-11-17T18:01:05.401 [DEBUG] [Thread-58774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:01:05.411 [DEBUG] [Thread-58774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:01:05.411 [INFO] [Thread-58774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] client lang: <none>
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] server lang: <none>
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] kex follows: False
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:01:05.412 [DEBUG] [Thread-58774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:01:05.413 [DEBUG] [Thread-58774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:01:05.413 [DEBUG] [Thread-58774] [transport.py] [_log()] Compression: none
2025-11-17T18:01:05.413 [DEBUG] [Thread-58774] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:01:05.420 [DEBUG] [Thread-58774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:01:05.421 [DEBUG] [Thread-58774] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:01:05.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:01:05.421 [DEBUG] [Thread-58774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:01:05.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:01:05.422 [DEBUG] [Thread-58774] [transport.py] [_log()] userauth is OK
2025-11-17T18:01:05.422 [DEBUG] [Thread-58774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:01:05.422 [DEBUG] [Thread-58774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:01:05.422 [DEBUG] [Thread-58774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:01:05.422 [DEBUG] [Thread-58774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:01:05.436 [INFO] [Thread-58774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:01:05.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:01:06.081 [DEBUG] [Thread-58774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:01:06.081 [DEBUG] [Thread-58774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:01:06.082 [DEBUG] [Thread-58774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:01:06.122 [DEBUG] [Thread-58774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:01:06.122 [DEBUG] [Thread-58774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:01:06.125 [DEBUG] [Thread-58774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:01:06.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:01:06.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:01:06.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:01:06.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:01:06.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:01:06.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:01:06.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:01:06.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:01:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:01:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.667065 -999.00  +22.20  30.27     20   -1.70 1 1 2 1 1   887    0 23.41 -2.44 ----- 34.2 30.3 287.8 39.3 24.5 -24.3 24.6 -24.3 25.0 -24.7 25.3 -24.1
2025-11-17T18:01:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:01:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:01:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.667065
2025-11-17T18:01:06.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:01:06.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:01:06.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:01:06.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:01:06.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:01:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:01:02', tmtdew=28.73, humidity=14.3, cloud=0.0, wind=28.12, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:00:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:01:06.154 [DEBUG] [Thread-58774] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:01:06.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:01:06.249 [DEBUG] [Thread-58777] [transport.py] [_log()] starting thread (client mode): 0xd07e8850
2025-11-17T18:01:06.249 [DEBUG] [Thread-58777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:01:06.264 [DEBUG] [Thread-58777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:01:06.264 [INFO] [Thread-58777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] client lang: <none>
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] server lang: <none>
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] kex follows: False
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:01:06.272 [DEBUG] [Thread-58777] [transport.py] [_log()] Compression: none
2025-11-17T18:01:06.273 [DEBUG] [Thread-58777] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:01:06.333 [DEBUG] [Thread-58777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:01:06.333 [DEBUG] [Thread-58777] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:01:06.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:01:06.334 [DEBUG] [Thread-58777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:01:06.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:01:06.389 [DEBUG] [Thread-58777] [transport.py] [_log()] userauth is OK
2025-11-17T18:01:06.389 [DEBUG] [Thread-58777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:01:06.389 [DEBUG] [Thread-58777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:01:06.389 [DEBUG] [Thread-58777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:01:06.389 [DEBUG] [Thread-58777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:01:06.409 [INFO] [Thread-58777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:01:06.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:01:06.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:01:07.254 [DEBUG] [Thread-58777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:01:07.254 [DEBUG] [Thread-58777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:01:07.302 [DEBUG] [Thread-58777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:01:07.302 [DEBUG] [Thread-58777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:01:07.311 [DEBUG] [Thread-58777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:01:07.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:01:07.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:01:07.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:01:07.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:01:07.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:01:07.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:01:07.345 [DEBUG] [Thread-58777] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:01:10.650 [DEBUG] [Thread-58779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:01:25.697 [DEBUG] [Thread-58780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:01:26.826 [DEBUG] [Thread-58781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:01:30.449 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:01:30.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:01:37.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:01:37.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:01:37.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:01:38.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 1, 34), 28.75, 13.84, 0.0, 35.32, 22.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:01:38.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:01:34
2025-11-17T18:01:38.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:01:38.304 [DEBUG] [Thread-58782] [transport.py] [_log()] starting thread (client mode): 0xd07752a0
2025-11-17T18:01:38.304 [DEBUG] [Thread-58782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:01:38.324 [DEBUG] [Thread-58782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:01:38.325 [INFO] [Thread-58782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] client lang: <none>
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] server lang: <none>
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] kex follows: False
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] Compression: none
2025-11-17T18:01:38.328 [DEBUG] [Thread-58782] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:01:38.349 [DEBUG] [Thread-58782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:01:38.349 [DEBUG] [Thread-58782] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:01:38.350 [DEBUG] [Thread-58782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:01:38.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:01:38.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:01:38.352 [DEBUG] [Thread-58782] [transport.py] [_log()] userauth is OK
2025-11-17T18:01:38.352 [DEBUG] [Thread-58782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:01:38.352 [DEBUG] [Thread-58782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:01:38.352 [DEBUG] [Thread-58782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:01:38.352 [DEBUG] [Thread-58782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:01:38.377 [INFO] [Thread-58782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:01:38.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:01:39.012 [DEBUG] [Thread-58782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:01:39.012 [DEBUG] [Thread-58782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:01:39.012 [DEBUG] [Thread-58782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:01:39.053 [DEBUG] [Thread-58782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:01:39.054 [DEBUG] [Thread-58782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:01:39.057 [DEBUG] [Thread-58782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:01:39.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:01:39.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:01:39.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:01:39.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:01:39.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:01:39.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:01:39.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:01:39.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:01:39.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:01:39.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.667412 -999.00  +22.10  28.53     20   -1.80 1 1 1 1 1   887    0 23.60 -0.56 ----- 30.7 28.5 296.4 37.9 24.5 -24.6 24.6 -24.3 25.0 -24.3 25.2 -24.1
2025-11-17T18:01:39.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:01:39.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:01:39.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.667412
2025-11-17T18:01:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:01:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:01:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:01:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:01:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:01:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:01:34', tmtdew=28.75, humidity=13.84, cloud=0.0, wind=35.32, temperature=22.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:01:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:01:39.081 [DEBUG] [Thread-58782] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:01:39.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:01:39.176 [DEBUG] [Thread-58785] [transport.py] [_log()] starting thread (client mode): 0xd070f250
2025-11-17T18:01:39.177 [DEBUG] [Thread-58785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:01:39.192 [DEBUG] [Thread-58785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:01:39.192 [INFO] [Thread-58785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:01:39.199 [DEBUG] [Thread-58785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:01:39.199 [DEBUG] [Thread-58785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] client lang: <none>
2025-11-17T18:01:39.200 [DEBUG] [Thread-58785] [transport.py] [_log()] server lang: <none>
2025-11-17T18:01:39.201 [DEBUG] [Thread-58785] [transport.py] [_log()] kex follows: False
2025-11-17T18:01:39.201 [DEBUG] [Thread-58785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:01:39.201 [DEBUG] [Thread-58785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:01:39.201 [DEBUG] [Thread-58785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:01:39.201 [DEBUG] [Thread-58785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:01:39.201 [DEBUG] [Thread-58785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:01:39.201 [DEBUG] [Thread-58785] [transport.py] [_log()] Compression: none
2025-11-17T18:01:39.201 [DEBUG] [Thread-58785] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:01:39.258 [DEBUG] [Thread-58785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:01:39.258 [DEBUG] [Thread-58785] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:01:39.259 [DEBUG] [Thread-58785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:01:39.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:01:39.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:01:39.317 [DEBUG] [Thread-58785] [transport.py] [_log()] userauth is OK
2025-11-17T18:01:39.317 [DEBUG] [Thread-58785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:01:39.317 [DEBUG] [Thread-58785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:01:39.317 [DEBUG] [Thread-58785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:01:39.317 [DEBUG] [Thread-58785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:01:39.336 [INFO] [Thread-58785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:01:39.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:01:39.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:01:40.194 [DEBUG] [Thread-58785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:01:40.194 [DEBUG] [Thread-58785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:01:40.242 [DEBUG] [Thread-58785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:01:40.242 [DEBUG] [Thread-58785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:01:40.251 [DEBUG] [Thread-58785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:01:40.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:01:40.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:01:40.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:01:40.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:01:40.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:01:40.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:01:40.285 [DEBUG] [Thread-58785] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:01:40.726 [DEBUG] [Thread-58787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:01:55.781 [DEBUG] [Thread-58788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:02:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:02:10.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:02:10.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:02:10.809 [DEBUG] [Thread-58789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:02:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 2, 6), 28.75, 13.84, 0.0, 33.59, 22.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:02:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:02:06
2025-11-17T18:02:11.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:02:11.263 [DEBUG] [Thread-58790] [transport.py] [_log()] starting thread (client mode): 0xd07769e0
2025-11-17T18:02:11.263 [DEBUG] [Thread-58790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:02:11.282 [DEBUG] [Thread-58790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:02:11.282 [INFO] [Thread-58790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] client lang: <none>
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] server lang: <none>
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] kex follows: False
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] Compression: none
2025-11-17T18:02:11.286 [DEBUG] [Thread-58790] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:02:11.300 [DEBUG] [Thread-58790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:02:11.300 [DEBUG] [Thread-58790] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:02:11.300 [DEBUG] [Thread-58790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:02:11.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:02:11.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:02:11.301 [DEBUG] [Thread-58790] [transport.py] [_log()] userauth is OK
2025-11-17T18:02:11.301 [DEBUG] [Thread-58790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:02:11.301 [DEBUG] [Thread-58790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:02:11.301 [DEBUG] [Thread-58790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:02:11.301 [DEBUG] [Thread-58790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:02:11.311 [INFO] [Thread-58790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:02:11.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:02:11.903 [DEBUG] [Thread-58790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:02:11.904 [DEBUG] [Thread-58790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:02:11.904 [DEBUG] [Thread-58790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:02:11.944 [DEBUG] [Thread-58790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:02:11.944 [DEBUG] [Thread-58790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:02:11.947 [DEBUG] [Thread-58790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:02:11.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:02:11.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:02:11.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:02:11.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:02:11.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:02:11.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:02:11.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:02:11.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:02:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:02:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.667759 -999.00  +22.30  19.82     19   -1.70 1 1 1 1 1   887    0 23.92 3.07 ----- 25.8 19.8 295.2 35.6 24.5 -24.5 24.6 -24.5 25.0 -24.7 25.2 -23.8
2025-11-17T18:02:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:02:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:02:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.667759
2025-11-17T18:02:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:02:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:02:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:02:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:02:11.967 [DEBUG] [Thread-58790] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:02:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:02:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:02:06', tmtdew=28.75, humidity=13.84, cloud=0.0, wind=33.59, temperature=22.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:01:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:02:12.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:02:12.065 [DEBUG] [Thread-58793] [transport.py] [_log()] starting thread (client mode): 0xd070da80
2025-11-17T18:02:12.065 [DEBUG] [Thread-58793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:02:12.080 [DEBUG] [Thread-58793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:02:12.080 [INFO] [Thread-58793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:02:12.087 [DEBUG] [Thread-58793] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] client lang: <none>
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] server lang: <none>
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] kex follows: False
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] Compression: none
2025-11-17T18:02:12.088 [DEBUG] [Thread-58793] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:02:12.144 [DEBUG] [Thread-58793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:02:12.145 [DEBUG] [Thread-58793] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:02:12.146 [DEBUG] [Thread-58793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:02:12.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:02:12.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:02:12.201 [DEBUG] [Thread-58793] [transport.py] [_log()] userauth is OK
2025-11-17T18:02:12.201 [DEBUG] [Thread-58793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:02:12.201 [DEBUG] [Thread-58793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:02:12.201 [DEBUG] [Thread-58793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:02:12.201 [DEBUG] [Thread-58793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:02:12.220 [INFO] [Thread-58793] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:02:12.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:02:12.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:02:13.081 [DEBUG] [Thread-58793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:02:13.081 [DEBUG] [Thread-58793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:02:13.129 [DEBUG] [Thread-58793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:02:13.129 [DEBUG] [Thread-58793] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:02:13.139 [DEBUG] [Thread-58793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:02:13.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:02:13.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:02:13.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:02:13.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:02:13.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:02:13.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:02:13.173 [DEBUG] [Thread-58793] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:02:25.836 [DEBUG] [Thread-58795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:02:26.878 [DEBUG] [Thread-58796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:02:30.590 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:02:30.591 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:02:40.877 [DEBUG] [Thread-58797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:02:43.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:02:43.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:02:43.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:02:43.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 2, 38), 28.85, 13.82, 0.0, 29.64, 22.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:02:43.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:02:38
2025-11-17T18:02:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:02:44.108 [DEBUG] [Thread-58798] [transport.py] [_log()] starting thread (client mode): 0xd0733ca0
2025-11-17T18:02:44.109 [DEBUG] [Thread-58798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:02:44.129 [DEBUG] [Thread-58798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:02:44.130 [INFO] [Thread-58798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] client lang: <none>
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] server lang: <none>
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] kex follows: False
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] Compression: none
2025-11-17T18:02:44.133 [DEBUG] [Thread-58798] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:02:44.151 [DEBUG] [Thread-58798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:02:44.151 [DEBUG] [Thread-58798] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:02:44.152 [DEBUG] [Thread-58798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:02:44.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:02:44.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:02:44.153 [DEBUG] [Thread-58798] [transport.py] [_log()] userauth is OK
2025-11-17T18:02:44.154 [DEBUG] [Thread-58798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:02:44.154 [DEBUG] [Thread-58798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:02:44.154 [DEBUG] [Thread-58798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:02:44.154 [DEBUG] [Thread-58798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:02:44.177 [INFO] [Thread-58798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:02:44.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:02:44.841 [DEBUG] [Thread-58798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:02:44.841 [DEBUG] [Thread-58798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:02:44.841 [DEBUG] [Thread-58798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:02:44.882 [DEBUG] [Thread-58798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:02:44.882 [DEBUG] [Thread-58798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:02:44.884 [DEBUG] [Thread-58798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:02:44.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:02:44.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:02:44.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:02:44.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:02:44.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:02:44.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:02:44.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:02:44.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:02:44.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:02:44.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.668107 -999.00  +22.30  22.74     19   -1.80 1 1 1 1 1   887    0 23.47 8.74 ----- 29.1 22.7 301.8 34.2 24.4 -25.3 24.6 -24.5 24.8 -24.8 25.2 -25.5
2025-11-17T18:02:44.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:02:44.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:02:44.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.668107
2025-11-17T18:02:44.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:02:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:02:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:02:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:02:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:02:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:02:38', tmtdew=28.85, humidity=13.82, cloud=0.0, wind=29.64, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:02:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:02:44.901 [DEBUG] [Thread-58798] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:02:44.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:02:44.986 [DEBUG] [Thread-58801] [transport.py] [_log()] starting thread (client mode): 0xd07305e0
2025-11-17T18:02:44.987 [DEBUG] [Thread-58801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:02:45.001 [DEBUG] [Thread-58801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:02:45.001 [INFO] [Thread-58801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] client lang: <none>
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] server lang: <none>
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] kex follows: False
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:02:45.008 [DEBUG] [Thread-58801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:02:45.009 [DEBUG] [Thread-58801] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:02:45.009 [DEBUG] [Thread-58801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:02:45.009 [DEBUG] [Thread-58801] [transport.py] [_log()] Compression: none
2025-11-17T18:02:45.009 [DEBUG] [Thread-58801] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:02:45.064 [DEBUG] [Thread-58801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:02:45.064 [DEBUG] [Thread-58801] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:02:45.064 [DEBUG] [Thread-58801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:02:45.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:02:45.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:02:45.120 [DEBUG] [Thread-58801] [transport.py] [_log()] userauth is OK
2025-11-17T18:02:45.121 [DEBUG] [Thread-58801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:02:45.121 [DEBUG] [Thread-58801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:02:45.121 [DEBUG] [Thread-58801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:02:45.121 [DEBUG] [Thread-58801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:02:45.138 [INFO] [Thread-58801] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:02:45.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:02:45.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:02:45.968 [DEBUG] [Thread-58801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:02:45.969 [DEBUG] [Thread-58801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:02:46.016 [DEBUG] [Thread-58801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:02:46.016 [DEBUG] [Thread-58801] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:02:46.024 [DEBUG] [Thread-58801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:02:46.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:02:46.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:02:46.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:02:46.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:02:46.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:02:46.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:02:46.056 [DEBUG] [Thread-58801] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:02:55.907 [DEBUG] [Thread-58803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:03:10.948 [DEBUG] [Thread-58804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:03:16.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:03:16.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:03:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:03:16.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 3, 10), 28.82, 13.85, 0.0, 31.99, 22.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:03:16.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:03:10
2025-11-17T18:03:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:03:17.005 [DEBUG] [Thread-58805] [transport.py] [_log()] starting thread (client mode): 0xd070d570
2025-11-17T18:03:17.005 [DEBUG] [Thread-58805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:03:17.026 [DEBUG] [Thread-58805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:03:17.027 [INFO] [Thread-58805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:03:17.027 [DEBUG] [Thread-58805] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] client lang: <none>
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] server lang: <none>
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] kex follows: False
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] Compression: none
2025-11-17T18:03:17.028 [DEBUG] [Thread-58805] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:03:17.038 [DEBUG] [Thread-58805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:03:17.039 [DEBUG] [Thread-58805] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:03:17.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:03:17.040 [DEBUG] [Thread-58805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:03:17.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:03:17.042 [DEBUG] [Thread-58805] [transport.py] [_log()] userauth is OK
2025-11-17T18:03:17.042 [DEBUG] [Thread-58805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:03:17.042 [DEBUG] [Thread-58805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:03:17.042 [DEBUG] [Thread-58805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:03:17.042 [DEBUG] [Thread-58805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:03:17.060 [INFO] [Thread-58805] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:03:17.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:03:17.664 [DEBUG] [Thread-58805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:03:17.664 [DEBUG] [Thread-58805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:03:17.665 [DEBUG] [Thread-58805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:03:17.706 [DEBUG] [Thread-58805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:03:17.706 [DEBUG] [Thread-58805] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:03:17.709 [DEBUG] [Thread-58805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:03:17.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:03:17.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:03:17.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:03:17.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:03:17.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:03:17.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:03:17.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:03:17.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:03:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:03:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.668454 -999.00  +22.10  28.93     20   -1.80 1 1 1 1 1   887    0 24.89 12.12 ----- 28.1 28.9 289.2 36.0 24.4 -25.2 24.5 -24.5 24.9 -25.5 25.2 -24.8
2025-11-17T18:03:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:03:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:03:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.668454
2025-11-17T18:03:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:03:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:03:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:03:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:03:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:03:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:03:10', tmtdew=28.82, humidity=13.85, cloud=0.0, wind=31.99, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:02:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:03:17.735 [DEBUG] [Thread-58805] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:03:17.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:03:17.831 [DEBUG] [Thread-58808] [transport.py] [_log()] starting thread (client mode): 0xd0756680
2025-11-17T18:03:17.831 [DEBUG] [Thread-58808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:03:17.845 [DEBUG] [Thread-58808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:03:17.845 [INFO] [Thread-58808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:03:17.853 [DEBUG] [Thread-58808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:03:17.853 [DEBUG] [Thread-58808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:03:17.853 [DEBUG] [Thread-58808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:03:17.853 [DEBUG] [Thread-58808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:03:17.853 [DEBUG] [Thread-58808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:03:17.853 [DEBUG] [Thread-58808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:03:17.853 [DEBUG] [Thread-58808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] client lang: <none>
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] server lang: <none>
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] kex follows: False
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:03:17.854 [DEBUG] [Thread-58808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:03:17.855 [DEBUG] [Thread-58808] [transport.py] [_log()] Compression: none
2025-11-17T18:03:17.855 [DEBUG] [Thread-58808] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:03:17.913 [DEBUG] [Thread-58808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:03:17.914 [DEBUG] [Thread-58808] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:03:17.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:03:17.915 [DEBUG] [Thread-58808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:03:17.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:03:17.973 [DEBUG] [Thread-58808] [transport.py] [_log()] userauth is OK
2025-11-17T18:03:17.973 [DEBUG] [Thread-58808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:03:17.973 [DEBUG] [Thread-58808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:03:17.973 [DEBUG] [Thread-58808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:03:17.973 [DEBUG] [Thread-58808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:03:17.995 [INFO] [Thread-58808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:03:17.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:03:17.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:03:18.834 [DEBUG] [Thread-58808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:03:18.835 [DEBUG] [Thread-58808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:03:18.882 [DEBUG] [Thread-58808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:03:18.882 [DEBUG] [Thread-58808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:03:18.892 [DEBUG] [Thread-58808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:03:18.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:03:18.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:03:18.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:03:18.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:03:18.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:03:18.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:03:18.938 [DEBUG] [Thread-58808] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:03:25.973 [DEBUG] [Thread-58810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:03:26.929 [DEBUG] [Thread-58811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:03:30.732 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:03:30.733 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:03:41.004 [DEBUG] [Thread-58812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:03:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:03:48.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:03:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:03:49.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 3, 42), 28.54, 14.45, 0.0, 24.28, 22.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:03:49.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:03:42
2025-11-17T18:03:49.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:03:49.863 [DEBUG] [Thread-58813] [transport.py] [_log()] starting thread (client mode): 0xd07205e0
2025-11-17T18:03:49.863 [DEBUG] [Thread-58813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:03:49.883 [DEBUG] [Thread-58813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:03:49.884 [INFO] [Thread-58813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:03:49.886 [DEBUG] [Thread-58813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] client lang: <none>
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] server lang: <none>
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] kex follows: False
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:03:49.887 [DEBUG] [Thread-58813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:03:49.888 [DEBUG] [Thread-58813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:03:49.888 [DEBUG] [Thread-58813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:03:49.888 [DEBUG] [Thread-58813] [transport.py] [_log()] Compression: none
2025-11-17T18:03:49.888 [DEBUG] [Thread-58813] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:03:49.906 [DEBUG] [Thread-58813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:03:49.907 [DEBUG] [Thread-58813] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:03:49.907 [DEBUG] [Thread-58813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:03:49.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:03:49.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:03:49.909 [DEBUG] [Thread-58813] [transport.py] [_log()] userauth is OK
2025-11-17T18:03:49.910 [DEBUG] [Thread-58813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:03:49.910 [DEBUG] [Thread-58813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:03:49.910 [DEBUG] [Thread-58813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:03:49.910 [DEBUG] [Thread-58813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:03:49.944 [INFO] [Thread-58813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:03:49.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:03:50.575 [DEBUG] [Thread-58813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:03:50.576 [DEBUG] [Thread-58813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:03:50.576 [DEBUG] [Thread-58813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:03:50.616 [DEBUG] [Thread-58813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:03:50.616 [DEBUG] [Thread-58813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:03:50.619 [DEBUG] [Thread-58813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:03:50.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:03:50.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:03:50.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:03:50.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:03:50.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:03:50.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:03:50.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:03:50.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:03:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:03:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.668801 -999.00  +22.00  27.85     20   -1.80 1 1 1 1 1   887    0 23.63 14.64 ----- 29.2 27.9 297.0 33.8 24.4 -25.3 24.4 -25.1 24.7 -26.8 25.1 -25.7
2025-11-17T18:03:50.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:03:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:03:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.668801
2025-11-17T18:03:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:03:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:03:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:03:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:03:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:03:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:03:42', tmtdew=28.54, humidity=14.45, cloud=0.0, wind=24.28, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:03:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:03:50.644 [DEBUG] [Thread-58813] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:03:50.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:03:50.741 [DEBUG] [Thread-58816] [transport.py] [_log()] starting thread (client mode): 0xd07211e0
2025-11-17T18:03:50.741 [DEBUG] [Thread-58816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:03:50.755 [DEBUG] [Thread-58816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:03:50.756 [INFO] [Thread-58816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:03:50.763 [DEBUG] [Thread-58816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:03:50.763 [DEBUG] [Thread-58816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] client lang: <none>
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] server lang: <none>
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] kex follows: False
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:03:50.764 [DEBUG] [Thread-58816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:03:50.765 [DEBUG] [Thread-58816] [transport.py] [_log()] Compression: none
2025-11-17T18:03:50.765 [DEBUG] [Thread-58816] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:03:50.821 [DEBUG] [Thread-58816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:03:50.821 [DEBUG] [Thread-58816] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:03:50.822 [DEBUG] [Thread-58816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:03:50.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:03:50.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:03:50.877 [DEBUG] [Thread-58816] [transport.py] [_log()] userauth is OK
2025-11-17T18:03:50.877 [DEBUG] [Thread-58816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:03:50.877 [DEBUG] [Thread-58816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:03:50.877 [DEBUG] [Thread-58816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:03:50.877 [DEBUG] [Thread-58816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:03:50.899 [INFO] [Thread-58816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:03:50.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:03:50.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:03:51.832 [DEBUG] [Thread-58816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:03:51.832 [DEBUG] [Thread-58816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:03:51.880 [DEBUG] [Thread-58816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:03:51.880 [DEBUG] [Thread-58816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:03:51.889 [DEBUG] [Thread-58816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:03:51.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:03:51.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:03:51.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:03:51.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:03:51.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:03:51.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:03:51.928 [DEBUG] [Thread-58816] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:03:56.039 [DEBUG] [Thread-58818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:04:11.089 [DEBUG] [Thread-58819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:04:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:04:21.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:04:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:04:22.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 4, 14), 28.46, 14.5, 0.0, 23.56, 22.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:04:22.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:04:14
2025-11-17T18:04:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:04:22.870 [DEBUG] [Thread-58820] [transport.py] [_log()] starting thread (client mode): 0xd07577f0
2025-11-17T18:04:22.870 [DEBUG] [Thread-58820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:04:22.884 [DEBUG] [Thread-58820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:04:22.884 [INFO] [Thread-58820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] client lang: <none>
2025-11-17T18:04:22.888 [DEBUG] [Thread-58820] [transport.py] [_log()] server lang: <none>
2025-11-17T18:04:22.889 [DEBUG] [Thread-58820] [transport.py] [_log()] kex follows: False
2025-11-17T18:04:22.889 [DEBUG] [Thread-58820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:04:22.889 [DEBUG] [Thread-58820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:04:22.889 [DEBUG] [Thread-58820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:04:22.889 [DEBUG] [Thread-58820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:04:22.889 [DEBUG] [Thread-58820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:04:22.889 [DEBUG] [Thread-58820] [transport.py] [_log()] Compression: none
2025-11-17T18:04:22.889 [DEBUG] [Thread-58820] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:04:22.906 [DEBUG] [Thread-58820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:04:22.906 [DEBUG] [Thread-58820] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:04:22.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:04:22.908 [DEBUG] [Thread-58820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:04:22.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:04:22.909 [DEBUG] [Thread-58820] [transport.py] [_log()] userauth is OK
2025-11-17T18:04:22.909 [DEBUG] [Thread-58820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:04:22.910 [DEBUG] [Thread-58820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:04:22.910 [DEBUG] [Thread-58820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:04:22.910 [DEBUG] [Thread-58820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:04:22.933 [INFO] [Thread-58820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:04:22.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:04:23.545 [DEBUG] [Thread-58820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:04:23.546 [DEBUG] [Thread-58820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:04:23.546 [DEBUG] [Thread-58820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:04:23.586 [DEBUG] [Thread-58820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:04:23.586 [DEBUG] [Thread-58820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:04:23.589 [DEBUG] [Thread-58820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:04:23.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:04:23.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:04:23.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:04:23.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:04:23.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:04:23.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:04:23.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:04:23.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:04:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:04:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.669148 -999.00  +21.90  19.14     20   -1.90 1 1 1 1 1   887    0 24.33 14.30 ----- 15.8 19.1 280.8 28.4 24.3 -25.5 24.4 -25.0 24.6 -25.5 24.9 -25.1
2025-11-17T18:04:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:04:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:04:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.669148
2025-11-17T18:04:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:04:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:04:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:04:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:04:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:04:23.613 [DEBUG] [Thread-58820] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:04:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:04:14', tmtdew=28.46, humidity=14.5, cloud=0.0, wind=23.56, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:03:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:04:23.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:04:23.711 [DEBUG] [Thread-58823] [transport.py] [_log()] starting thread (client mode): 0xd0754130
2025-11-17T18:04:23.711 [DEBUG] [Thread-58823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:04:23.726 [DEBUG] [Thread-58823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:04:23.726 [INFO] [Thread-58823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:04:23.734 [DEBUG] [Thread-58823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:04:23.734 [DEBUG] [Thread-58823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:04:23.734 [DEBUG] [Thread-58823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:04:23.734 [DEBUG] [Thread-58823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:04:23.734 [DEBUG] [Thread-58823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:04:23.734 [DEBUG] [Thread-58823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:04:23.734 [DEBUG] [Thread-58823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] client lang: <none>
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] server lang: <none>
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] kex follows: False
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:04:23.735 [DEBUG] [Thread-58823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:04:23.736 [DEBUG] [Thread-58823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:04:23.736 [DEBUG] [Thread-58823] [transport.py] [_log()] Compression: none
2025-11-17T18:04:23.736 [DEBUG] [Thread-58823] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:04:23.793 [DEBUG] [Thread-58823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:04:23.794 [DEBUG] [Thread-58823] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:04:23.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:04:23.795 [DEBUG] [Thread-58823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:04:23.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:04:23.849 [DEBUG] [Thread-58823] [transport.py] [_log()] userauth is OK
2025-11-17T18:04:23.849 [DEBUG] [Thread-58823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:04:23.849 [DEBUG] [Thread-58823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:04:23.849 [DEBUG] [Thread-58823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:04:23.849 [DEBUG] [Thread-58823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:04:23.869 [INFO] [Thread-58823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:04:23.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:04:23.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:04:24.706 [DEBUG] [Thread-58823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:04:24.706 [DEBUG] [Thread-58823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:04:24.754 [DEBUG] [Thread-58823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:04:24.754 [DEBUG] [Thread-58823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:04:24.763 [DEBUG] [Thread-58823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:04:24.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:04:24.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:04:24.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:04:24.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:04:24.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:04:24.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:04:24.797 [DEBUG] [Thread-58823] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:04:26.121 [DEBUG] [Thread-58825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:04:26.985 [DEBUG] [Thread-58826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:04:30.874 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:04:30.875 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:04:41.160 [DEBUG] [Thread-58827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:04:54.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:04:54.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:04:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:04:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 4, 46), 28.26, 14.55, 0.0, 25.05, 21.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:04:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:04:46
2025-11-17T18:04:55.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:04:55.735 [DEBUG] [Thread-58828] [transport.py] [_log()] starting thread (client mode): 0xd078d0f0
2025-11-17T18:04:55.735 [DEBUG] [Thread-58828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:04:55.754 [DEBUG] [Thread-58828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:04:55.755 [INFO] [Thread-58828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] client lang: <none>
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] server lang: <none>
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] kex follows: False
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] Compression: none
2025-11-17T18:04:55.758 [DEBUG] [Thread-58828] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:04:55.778 [DEBUG] [Thread-58828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:04:55.778 [DEBUG] [Thread-58828] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:04:55.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:04:55.779 [DEBUG] [Thread-58828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:04:55.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:04:55.781 [DEBUG] [Thread-58828] [transport.py] [_log()] userauth is OK
2025-11-17T18:04:55.781 [DEBUG] [Thread-58828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:04:55.781 [DEBUG] [Thread-58828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:04:55.781 [DEBUG] [Thread-58828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:04:55.781 [DEBUG] [Thread-58828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:04:55.805 [INFO] [Thread-58828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:04:55.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:04:56.188 [DEBUG] [Thread-58830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:04:56.457 [DEBUG] [Thread-58828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:04:56.457 [DEBUG] [Thread-58828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:04:56.457 [DEBUG] [Thread-58828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:04:56.497 [DEBUG] [Thread-58828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:04:56.498 [DEBUG] [Thread-58828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:04:56.501 [DEBUG] [Thread-58828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:04:56.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:04:56.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:04:56.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:04:56.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:04:56.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:04:56.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:04:56.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:04:56.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:04:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:04:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.669496 -999.00  +21.90  26.80     20   -2.00 1 1 1 1 1   887    0 23.67 15.24 ----- 27.0 26.8 286.0 30.8 24.2 -25.9 24.2 -26.0 24.3 -27.0 24.8 -25.4
2025-11-17T18:04:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:04:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:04:56.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.669496
2025-11-17T18:04:56.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:04:56.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:04:56.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:04:56.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:04:56.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:04:56.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:04:46', tmtdew=28.26, humidity=14.55, cloud=0.0, wind=25.05, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:04:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:04:56.526 [DEBUG] [Thread-58828] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:04:56.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:04:56.623 [DEBUG] [Thread-58832] [transport.py] [_log()] starting thread (client mode): 0xd0722740
2025-11-17T18:04:56.623 [DEBUG] [Thread-58832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:04:56.638 [DEBUG] [Thread-58832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:04:56.638 [INFO] [Thread-58832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:04:56.645 [DEBUG] [Thread-58832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] client lang: <none>
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] server lang: <none>
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] kex follows: False
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] Compression: none
2025-11-17T18:04:56.646 [DEBUG] [Thread-58832] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:04:56.704 [DEBUG] [Thread-58832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:04:56.705 [DEBUG] [Thread-58832] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:04:56.705 [DEBUG] [Thread-58832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:04:56.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:04:56.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:04:56.761 [DEBUG] [Thread-58832] [transport.py] [_log()] userauth is OK
2025-11-17T18:04:56.761 [DEBUG] [Thread-58832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:04:56.761 [DEBUG] [Thread-58832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:04:56.761 [DEBUG] [Thread-58832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:04:56.762 [DEBUG] [Thread-58832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:04:56.781 [INFO] [Thread-58832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:04:56.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:04:56.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:04:57.616 [DEBUG] [Thread-58832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:04:57.616 [DEBUG] [Thread-58832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:04:57.664 [DEBUG] [Thread-58832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:04:57.664 [DEBUG] [Thread-58832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:04:57.673 [DEBUG] [Thread-58832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:04:57.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:04:57.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:04:57.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:04:57.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:04:57.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:04:57.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:04:57.708 [DEBUG] [Thread-58832] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:05:11.220 [DEBUG] [Thread-58834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:05:26.256 [DEBUG] [Thread-58835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:05:27.049 [DEBUG] [Thread-58836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:05:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:05:27.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:05:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:05:28.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 5, 18), 28.23, 14.58, 0.0, 22.46, 21.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:05:28.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:05:18
2025-11-17T18:05:28.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:05:28.648 [DEBUG] [Thread-58837] [transport.py] [_log()] starting thread (client mode): 0xd0784520
2025-11-17T18:05:28.648 [DEBUG] [Thread-58837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:05:28.668 [DEBUG] [Thread-58837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:05:28.668 [INFO] [Thread-58837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] client lang: <none>
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] server lang: <none>
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] kex follows: False
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:05:28.671 [DEBUG] [Thread-58837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:05:28.672 [DEBUG] [Thread-58837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:05:28.672 [DEBUG] [Thread-58837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:05:28.672 [DEBUG] [Thread-58837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:05:28.672 [DEBUG] [Thread-58837] [transport.py] [_log()] Compression: none
2025-11-17T18:05:28.672 [DEBUG] [Thread-58837] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:05:28.688 [DEBUG] [Thread-58837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:05:28.688 [DEBUG] [Thread-58837] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:05:28.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:05:28.689 [DEBUG] [Thread-58837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:05:28.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:05:28.691 [DEBUG] [Thread-58837] [transport.py] [_log()] userauth is OK
2025-11-17T18:05:28.692 [DEBUG] [Thread-58837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:05:28.692 [DEBUG] [Thread-58837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:05:28.692 [DEBUG] [Thread-58837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:05:28.692 [DEBUG] [Thread-58837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:05:28.710 [INFO] [Thread-58837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:05:28.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:05:29.303 [DEBUG] [Thread-58837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:05:29.303 [DEBUG] [Thread-58837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:05:29.304 [DEBUG] [Thread-58837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:05:29.304 [DEBUG] [Thread-58837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:05:29.304 [DEBUG] [Thread-58837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:05:29.306 [DEBUG] [Thread-58837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:05:29.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:05:29.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:05:29.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:05:29.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:05:29.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:05:29.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:05:29.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:05:29.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:05:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:05:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.669843 -999.00  +21.70  21.98     20   -2.00 1 1 1 1 1   887    0 23.75 17.59 ----- 17.5 22.0 283.2 33.5 24.1 -25.7 24.1 -25.2 24.1 -26.2 24.5 -25.0
2025-11-17T18:05:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:05:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:05:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.669843
2025-11-17T18:05:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:05:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:05:29.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:05:29.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:05:29.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:05:29.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:05:18', tmtdew=28.23, humidity=14.58, cloud=0.0, wind=22.46, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:04:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:05:29.323 [DEBUG] [Thread-58837] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:05:29.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:05:29.416 [DEBUG] [Thread-58840] [transport.py] [_log()] starting thread (client mode): 0xd078d480
2025-11-17T18:05:29.416 [DEBUG] [Thread-58840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:05:29.432 [DEBUG] [Thread-58840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:05:29.432 [INFO] [Thread-58840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] client lang: <none>
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] server lang: <none>
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] kex follows: False
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:05:29.440 [DEBUG] [Thread-58840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:05:29.441 [DEBUG] [Thread-58840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:05:29.441 [DEBUG] [Thread-58840] [transport.py] [_log()] Compression: none
2025-11-17T18:05:29.441 [DEBUG] [Thread-58840] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:05:29.502 [DEBUG] [Thread-58840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:05:29.502 [DEBUG] [Thread-58840] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:05:29.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:05:29.503 [DEBUG] [Thread-58840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:05:29.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:05:29.561 [DEBUG] [Thread-58840] [transport.py] [_log()] userauth is OK
2025-11-17T18:05:29.561 [DEBUG] [Thread-58840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:05:29.561 [DEBUG] [Thread-58840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:05:29.561 [DEBUG] [Thread-58840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:05:29.561 [DEBUG] [Thread-58840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:05:29.581 [INFO] [Thread-58840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:05:29.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:05:29.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:05:30.422 [DEBUG] [Thread-58840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:05:30.423 [DEBUG] [Thread-58840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:05:30.470 [DEBUG] [Thread-58840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:05:30.470 [DEBUG] [Thread-58840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:05:30.479 [DEBUG] [Thread-58840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:05:30.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:05:30.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:05:30.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:05:30.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:05:30.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:05:30.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:05:30.515 [DEBUG] [Thread-58840] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:05:31.014 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:05:31.015 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:05:41.288 [DEBUG] [Thread-58842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:05:56.332 [DEBUG] [Thread-58843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:06:00.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:06:00.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:06:00.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:06:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 5, 50), 28.28, 14.58, 0.0, 34.11, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:06:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:05:50
2025-11-17T18:06:01.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:06:01.471 [DEBUG] [Thread-58844] [transport.py] [_log()] starting thread (client mode): 0xd078f700
2025-11-17T18:06:01.471 [DEBUG] [Thread-58844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:06:01.491 [DEBUG] [Thread-58844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:06:01.491 [INFO] [Thread-58844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:06:01.494 [DEBUG] [Thread-58844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:06:01.494 [DEBUG] [Thread-58844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:06:01.494 [DEBUG] [Thread-58844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:06:01.494 [DEBUG] [Thread-58844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:06:01.494 [DEBUG] [Thread-58844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:06:01.494 [DEBUG] [Thread-58844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:06:01.494 [DEBUG] [Thread-58844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] client lang: <none>
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] server lang: <none>
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] kex follows: False
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] Compression: none
2025-11-17T18:06:01.495 [DEBUG] [Thread-58844] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:06:01.510 [DEBUG] [Thread-58844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:06:01.511 [DEBUG] [Thread-58844] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:06:01.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:06:01.511 [DEBUG] [Thread-58844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:06:01.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:06:01.552 [DEBUG] [Thread-58844] [transport.py] [_log()] userauth is OK
2025-11-17T18:06:01.552 [DEBUG] [Thread-58844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:06:01.552 [DEBUG] [Thread-58844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:06:01.552 [DEBUG] [Thread-58844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:06:01.553 [DEBUG] [Thread-58844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:06:01.571 [INFO] [Thread-58844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:06:01.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:06:02.217 [DEBUG] [Thread-58844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:06:02.217 [DEBUG] [Thread-58844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:06:02.217 [DEBUG] [Thread-58844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:06:02.258 [DEBUG] [Thread-58844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:06:02.258 [DEBUG] [Thread-58844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:06:02.261 [DEBUG] [Thread-58844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:06:02.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:06:02.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:06:02.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:06:02.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:06:02.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:06:02.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:06:02.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.670537 -999.00  +21.70  20.33     20   -2.00 1 1 1 1 1   887    0 24.11 17.09 ----- 23.2 20.3 283.0 34.6 23.9 -26.4 23.9 -25.2 23.8 -25.9 24.2 -26.0
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.670537
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:05:50', tmtdew=28.28, humidity=14.58, cloud=0.0, wind=34.11, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:05:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:06:02.277 [DEBUG] [Thread-58844] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:06:02.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:06:02.362 [DEBUG] [Thread-58847] [transport.py] [_log()] starting thread (client mode): 0xd078d0c0
2025-11-17T18:06:02.362 [DEBUG] [Thread-58847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:06:02.378 [DEBUG] [Thread-58847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:06:02.378 [INFO] [Thread-58847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] client lang: <none>
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] server lang: <none>
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] kex follows: False
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] Compression: none
2025-11-17T18:06:02.387 [DEBUG] [Thread-58847] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:06:02.446 [DEBUG] [Thread-58847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:06:02.447 [DEBUG] [Thread-58847] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:06:02.447 [DEBUG] [Thread-58847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:06:02.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:06:02.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:06:02.508 [DEBUG] [Thread-58847] [transport.py] [_log()] userauth is OK
2025-11-17T18:06:02.508 [DEBUG] [Thread-58847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:06:02.508 [DEBUG] [Thread-58847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:06:02.508 [DEBUG] [Thread-58847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:06:02.508 [DEBUG] [Thread-58847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:06:02.528 [INFO] [Thread-58847] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:06:02.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:06:02.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:06:03.420 [DEBUG] [Thread-58847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:06:03.420 [DEBUG] [Thread-58847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:06:03.467 [DEBUG] [Thread-58847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:06:03.467 [DEBUG] [Thread-58847] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:06:03.476 [DEBUG] [Thread-58847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:06:03.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:06:03.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:06:03.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:06:03.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:06:03.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:06:03.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:06:03.509 [DEBUG] [Thread-58847] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:06:11.363 [DEBUG] [Thread-58849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:06:26.406 [DEBUG] [Thread-58850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:06:27.101 [DEBUG] [Thread-58851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:06:31.167 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:06:31.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:06:33.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:06:33.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:06:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:06:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 6, 22), 28.28, 14.58, 0.0, 33.38, 21.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:06:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:06:22
2025-11-17T18:06:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:06:34.453 [DEBUG] [Thread-58852] [transport.py] [_log()] starting thread (client mode): 0xd078cf10
2025-11-17T18:06:34.453 [DEBUG] [Thread-58852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:06:34.474 [DEBUG] [Thread-58852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:06:34.474 [INFO] [Thread-58852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:06:34.477 [DEBUG] [Thread-58852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] client lang: <none>
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] server lang: <none>
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] kex follows: False
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] Compression: none
2025-11-17T18:06:34.478 [DEBUG] [Thread-58852] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:06:34.494 [DEBUG] [Thread-58852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:06:34.494 [DEBUG] [Thread-58852] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:06:34.495 [DEBUG] [Thread-58852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:06:34.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:06:34.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:06:34.496 [DEBUG] [Thread-58852] [transport.py] [_log()] userauth is OK
2025-11-17T18:06:34.497 [DEBUG] [Thread-58852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:06:34.497 [DEBUG] [Thread-58852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:06:34.497 [DEBUG] [Thread-58852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:06:34.497 [DEBUG] [Thread-58852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:06:34.518 [INFO] [Thread-58852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:06:34.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:06:35.134 [DEBUG] [Thread-58852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:06:35.134 [DEBUG] [Thread-58852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:06:35.135 [DEBUG] [Thread-58852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:06:35.175 [DEBUG] [Thread-58852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:06:35.175 [DEBUG] [Thread-58852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:06:35.178 [DEBUG] [Thread-58852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:06:35.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:06:35.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:06:35.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:06:35.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:06:35.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:06:35.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:06:35.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:06:35.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:06:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:06:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.670884 -999.00  +21.80  22.44     20   -2.00 1 1 1 1 1   887    0 24.30 17.97 ----- 26.7 22.4 300.0 33.3 23.9 -26.2 23.9 -24.9 23.7 -25.1 24.1 -25.5
2025-11-17T18:06:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:06:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:06:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.670884
2025-11-17T18:06:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:06:22', tmtdew=28.28, humidity=14.58, cloud=0.0, wind=33.38, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:06:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:06:35.201 [DEBUG] [Thread-58852] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:06:35.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:06:35.298 [DEBUG] [Thread-58855] [transport.py] [_log()] starting thread (client mode): 0xd078d990
2025-11-17T18:06:35.298 [DEBUG] [Thread-58855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:06:35.317 [DEBUG] [Thread-58855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:06:35.317 [INFO] [Thread-58855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] client lang: <none>
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] server lang: <none>
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] kex follows: False
2025-11-17T18:06:35.324 [DEBUG] [Thread-58855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:06:35.325 [DEBUG] [Thread-58855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:06:35.325 [DEBUG] [Thread-58855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:06:35.325 [DEBUG] [Thread-58855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:06:35.325 [DEBUG] [Thread-58855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:06:35.325 [DEBUG] [Thread-58855] [transport.py] [_log()] Compression: none
2025-11-17T18:06:35.325 [DEBUG] [Thread-58855] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:06:35.383 [DEBUG] [Thread-58855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:06:35.383 [DEBUG] [Thread-58855] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:06:35.383 [DEBUG] [Thread-58855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:06:35.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:06:35.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:06:35.441 [DEBUG] [Thread-58855] [transport.py] [_log()] userauth is OK
2025-11-17T18:06:35.441 [DEBUG] [Thread-58855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:06:35.441 [DEBUG] [Thread-58855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:06:35.441 [DEBUG] [Thread-58855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:06:35.441 [DEBUG] [Thread-58855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:06:35.454 [INFO] [Thread-58855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:06:35.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:06:35.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:06:36.321 [DEBUG] [Thread-58855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:06:36.321 [DEBUG] [Thread-58855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:06:36.369 [DEBUG] [Thread-58855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:06:36.369 [DEBUG] [Thread-58855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:06:36.377 [DEBUG] [Thread-58855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:06:36.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:06:36.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:06:36.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:06:36.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:06:36.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:06:36.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:06:36.409 [DEBUG] [Thread-58855] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:06:41.434 [DEBUG] [Thread-58857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:06:56.464 [DEBUG] [Thread-58858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:07:06.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:07:06.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:07:06.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:07:07.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 6, 54), 28.16, 14.6, 0.0, 34.62, 21.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:07:07.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:06:54
2025-11-17T18:07:07.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:07:07.356 [DEBUG] [Thread-58859] [transport.py] [_log()] starting thread (client mode): 0xd078db10
2025-11-17T18:07:07.356 [DEBUG] [Thread-58859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:07:07.375 [DEBUG] [Thread-58859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:07:07.376 [INFO] [Thread-58859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:07:07.379 [DEBUG] [Thread-58859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:07:07.379 [DEBUG] [Thread-58859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] client lang: <none>
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] server lang: <none>
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] kex follows: False
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] Compression: none
2025-11-17T18:07:07.380 [DEBUG] [Thread-58859] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:07:07.399 [DEBUG] [Thread-58859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:07:07.400 [DEBUG] [Thread-58859] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:07:07.400 [DEBUG] [Thread-58859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:07:07.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:07:07.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:07:07.402 [DEBUG] [Thread-58859] [transport.py] [_log()] userauth is OK
2025-11-17T18:07:07.403 [DEBUG] [Thread-58859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:07:07.403 [DEBUG] [Thread-58859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:07:07.403 [DEBUG] [Thread-58859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:07:07.403 [DEBUG] [Thread-58859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:07:07.423 [INFO] [Thread-58859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:07:07.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:07:08.052 [DEBUG] [Thread-58859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:07:08.052 [DEBUG] [Thread-58859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:07:08.053 [DEBUG] [Thread-58859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:07:08.093 [DEBUG] [Thread-58859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:07:08.093 [DEBUG] [Thread-58859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:07:08.096 [DEBUG] [Thread-58859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:07:08.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:07:08.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:07:08.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:07:08.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:07:08.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:07:08.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:07:08.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:07:08.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:07:08.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:07:08.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.671232 -999.00  +21.90  21.32     20   -2.00 1 1 1 1 1   887    0 24.04 19.05 ----- 23.1 21.3 282.2 29.9 23.9 -25.8 23.9 -25.3 23.7 -25.2 24.1 -25.0
2025-11-17T18:07:08.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:07:08.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:07:08.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.671232
2025-11-17T18:07:08.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:07:08.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:07:08.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:07:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:07:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:07:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:06:54', tmtdew=28.16, humidity=14.6, cloud=0.0, wind=34.62, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:06:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:07:08.119 [DEBUG] [Thread-58859] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:07:08.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:07:08.214 [DEBUG] [Thread-58862] [transport.py] [_log()] starting thread (client mode): 0xd078ca60
2025-11-17T18:07:08.214 [DEBUG] [Thread-58862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:07:08.229 [DEBUG] [Thread-58862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:07:08.230 [INFO] [Thread-58862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] client lang: <none>
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] server lang: <none>
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] kex follows: False
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] Compression: none
2025-11-17T18:07:08.237 [DEBUG] [Thread-58862] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:07:08.300 [DEBUG] [Thread-58862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:07:08.300 [DEBUG] [Thread-58862] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:07:08.301 [DEBUG] [Thread-58862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:07:08.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:07:08.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:07:08.357 [DEBUG] [Thread-58862] [transport.py] [_log()] userauth is OK
2025-11-17T18:07:08.357 [DEBUG] [Thread-58862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:07:08.357 [DEBUG] [Thread-58862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:07:08.357 [DEBUG] [Thread-58862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:07:08.358 [DEBUG] [Thread-58862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:07:08.377 [INFO] [Thread-58862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:07:08.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:07:08.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:07:09.222 [DEBUG] [Thread-58862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:07:09.222 [DEBUG] [Thread-58862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:07:09.270 [DEBUG] [Thread-58862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:07:09.270 [DEBUG] [Thread-58862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:07:09.279 [DEBUG] [Thread-58862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:07:09.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:07:09.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:07: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') -> 00000000
2025-11-17T18:07:09.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:07:09.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:07:09.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:07:09.313 [DEBUG] [Thread-58862] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:07:11.499 [DEBUG] [Thread-58864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:07:26.542 [DEBUG] [Thread-58866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:07:27.146 [DEBUG] [Thread-58867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:07:31.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:07:31.310 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:07:39.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:07:39.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:07:39.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:07:39.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 7, 26), 28.13, 14.62, 0.0, 35.32, 21.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:07:39.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:07:26
2025-11-17T18:07:40.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:07:40.256 [DEBUG] [Thread-58868] [transport.py] [_log()] starting thread (client mode): 0xd078cb80
2025-11-17T18:07:40.256 [DEBUG] [Thread-58868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:07:40.275 [DEBUG] [Thread-58868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:07:40.276 [INFO] [Thread-58868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] client lang: <none>
2025-11-17T18:07:40.279 [DEBUG] [Thread-58868] [transport.py] [_log()] server lang: <none>
2025-11-17T18:07:40.280 [DEBUG] [Thread-58868] [transport.py] [_log()] kex follows: False
2025-11-17T18:07:40.280 [DEBUG] [Thread-58868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:07:40.280 [DEBUG] [Thread-58868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:07:40.280 [DEBUG] [Thread-58868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:07:40.280 [DEBUG] [Thread-58868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:07:40.280 [DEBUG] [Thread-58868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:07:40.280 [DEBUG] [Thread-58868] [transport.py] [_log()] Compression: none
2025-11-17T18:07:40.280 [DEBUG] [Thread-58868] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:07:40.289 [DEBUG] [Thread-58868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:07:40.289 [DEBUG] [Thread-58868] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:07:40.290 [DEBUG] [Thread-58868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:07:40.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:07:40.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:07:40.292 [DEBUG] [Thread-58868] [transport.py] [_log()] userauth is OK
2025-11-17T18:07:40.292 [DEBUG] [Thread-58868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:07:40.292 [DEBUG] [Thread-58868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:07:40.292 [DEBUG] [Thread-58868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:07:40.292 [DEBUG] [Thread-58868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:07:40.310 [INFO] [Thread-58868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:07:40.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:07:40.874 [DEBUG] [Thread-58868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:07:40.874 [DEBUG] [Thread-58868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:07:40.874 [DEBUG] [Thread-58868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:07:40.914 [DEBUG] [Thread-58868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:07:40.914 [DEBUG] [Thread-58868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:07:40.917 [DEBUG] [Thread-58868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:07:40.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:07:40.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:07:40.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:07:40.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:07:40.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:07:40.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:07:40.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:07:40.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:07:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:07:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.671579 -999.00  +21.90  24.47     19   -2.00 1 1 1 1 1   887    0 24.36 20.35 ----- 28.3 24.5 272.6 33.5 23.9 -25.6 23.8 -25.2 23.7 -25.0 24.0 -24.6
2025-11-17T18:07:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:07:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:07:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.671579
2025-11-17T18:07:40.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:07:40.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:07:40.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:07:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:07:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:07:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:07:26', tmtdew=28.13, humidity=14.62, cloud=0.0, wind=35.32, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:07:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:07:40.945 [DEBUG] [Thread-58868] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:07:41.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:07:41.038 [DEBUG] [Thread-58871] [transport.py] [_log()] starting thread (client mode): 0xd078e980
2025-11-17T18:07:41.038 [DEBUG] [Thread-58871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:07:41.054 [DEBUG] [Thread-58871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:07:41.054 [INFO] [Thread-58871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:07:41.061 [DEBUG] [Thread-58871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:07:41.061 [DEBUG] [Thread-58871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:07:41.061 [DEBUG] [Thread-58871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:07:41.061 [DEBUG] [Thread-58871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] client lang: <none>
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] server lang: <none>
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] kex follows: False
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] Compression: none
2025-11-17T18:07:41.062 [DEBUG] [Thread-58871] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:07:41.120 [DEBUG] [Thread-58871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:07:41.121 [DEBUG] [Thread-58871] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:07:41.121 [DEBUG] [Thread-58871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:07:41.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:07:41.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:07:41.177 [DEBUG] [Thread-58871] [transport.py] [_log()] userauth is OK
2025-11-17T18:07:41.177 [DEBUG] [Thread-58871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:07:41.177 [DEBUG] [Thread-58871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:07:41.177 [DEBUG] [Thread-58871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:07:41.177 [DEBUG] [Thread-58871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:07:41.195 [INFO] [Thread-58871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:07:41.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:07:41.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:07:41.570 [DEBUG] [Thread-58873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:07:42.069 [DEBUG] [Thread-58871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:07:42.070 [DEBUG] [Thread-58871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:07:42.117 [DEBUG] [Thread-58871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:07:42.117 [DEBUG] [Thread-58871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:07:42.126 [DEBUG] [Thread-58871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:07:42.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:07:42.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:07:42.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:07:42.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:07:42.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:07:42.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:07:42.160 [DEBUG] [Thread-58871] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:07:56.612 [DEBUG] [Thread-58874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:08:11.641 [DEBUG] [Thread-58875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:08:12.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:08:12.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:08:12.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:08:12.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 7, 58), 28.1, 14.65, 0.0, 29.64, 21.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:08:12.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:07:58
2025-11-17T18:08:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:08:13.084 [DEBUG] [Thread-58876] [transport.py] [_log()] starting thread (client mode): 0xd078e980
2025-11-17T18:08:13.084 [DEBUG] [Thread-58876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:08:13.105 [DEBUG] [Thread-58876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:08:13.105 [INFO] [Thread-58876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:08:13.108 [DEBUG] [Thread-58876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:08:13.108 [DEBUG] [Thread-58876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] client lang: <none>
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] server lang: <none>
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] kex follows: False
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] Compression: none
2025-11-17T18:08:13.109 [DEBUG] [Thread-58876] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:08:13.127 [DEBUG] [Thread-58876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:08:13.128 [DEBUG] [Thread-58876] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:08:13.128 [DEBUG] [Thread-58876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:08:13.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:08:13.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:08:13.130 [DEBUG] [Thread-58876] [transport.py] [_log()] userauth is OK
2025-11-17T18:08:13.130 [DEBUG] [Thread-58876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:08:13.130 [DEBUG] [Thread-58876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:08:13.130 [DEBUG] [Thread-58876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:08:13.130 [DEBUG] [Thread-58876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:08:13.155 [INFO] [Thread-58876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:08:13.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:08:13.800 [DEBUG] [Thread-58876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:08:13.800 [DEBUG] [Thread-58876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:08:13.801 [DEBUG] [Thread-58876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:08:13.841 [DEBUG] [Thread-58876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:08:13.841 [DEBUG] [Thread-58876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:08:13.844 [DEBUG] [Thread-58876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:08:13.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:08:13.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:08:13.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:08:13.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:08:13.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:08:13.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:08:13.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:08:13.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:08:13.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:08:13.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.671926 -999.00  +21.80  21.47     20   -2.10 1 1 1 1 1   887    0 24.63 20.73 ----- 23.0 21.5 286.6 34.2 23.7 -25.7 23.8 -25.7 23.6 -24.8 24.0 -25.0
2025-11-17T18:08:13.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:08:13.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:08:13.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.671926
2025-11-17T18:08:13.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:08:13.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:08:13.866 [DEBUG] [Thread-58876] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:08:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:08:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:08:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:08:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:07:58', tmtdew=28.1, humidity=14.65, cloud=0.0, wind=29.64, temperature=21.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:07:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:08:13.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:08:13.962 [DEBUG] [Thread-58879] [transport.py] [_log()] starting thread (client mode): 0xd078dea0
2025-11-17T18:08:13.962 [DEBUG] [Thread-58879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:08:13.982 [DEBUG] [Thread-58879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:08:13.982 [INFO] [Thread-58879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:08:13.989 [DEBUG] [Thread-58879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:08:13.989 [DEBUG] [Thread-58879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] client lang: <none>
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] server lang: <none>
2025-11-17T18:08:13.990 [DEBUG] [Thread-58879] [transport.py] [_log()] kex follows: False
2025-11-17T18:08:13.991 [DEBUG] [Thread-58879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:08:13.991 [DEBUG] [Thread-58879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:08:13.991 [DEBUG] [Thread-58879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:08:13.991 [DEBUG] [Thread-58879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:08:13.991 [DEBUG] [Thread-58879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:08:13.991 [DEBUG] [Thread-58879] [transport.py] [_log()] Compression: none
2025-11-17T18:08:13.991 [DEBUG] [Thread-58879] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:08:14.048 [DEBUG] [Thread-58879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:08:14.049 [DEBUG] [Thread-58879] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:08:14.049 [DEBUG] [Thread-58879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:08:14.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:08:14.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:08:14.105 [DEBUG] [Thread-58879] [transport.py] [_log()] userauth is OK
2025-11-17T18:08:14.105 [DEBUG] [Thread-58879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:08:14.105 [DEBUG] [Thread-58879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:08:14.105 [DEBUG] [Thread-58879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:08:14.105 [DEBUG] [Thread-58879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:08:14.125 [INFO] [Thread-58879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:08:14.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:08:14.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:08:14.982 [DEBUG] [Thread-58879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:08:14.982 [DEBUG] [Thread-58879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:08:15.030 [DEBUG] [Thread-58879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:08:15.030 [DEBUG] [Thread-58879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:08:15.039 [DEBUG] [Thread-58879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:08:15.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:08:15.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:08:15.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
2025-11-17T18:08:15.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:08:15.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:08:15.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:08:15.074 [DEBUG] [Thread-58879] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:08:26.669 [DEBUG] [Thread-58881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:08:27.196 [DEBUG] [Thread-58882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:08:31.451 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:08:31.452 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:08:41.707 [DEBUG] [Thread-58883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:08:45.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:08:45.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:08:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:08:45.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 8, 30), 28.12, 14.62, 0.0, 28.55, 21.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:08:45.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:08:30
2025-11-17T18:08:45.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:08:45.980 [DEBUG] [Thread-58884] [transport.py] [_log()] starting thread (client mode): 0xd078ce20
2025-11-17T18:08:45.980 [DEBUG] [Thread-58884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:08:46.000 [DEBUG] [Thread-58884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:08:46.000 [INFO] [Thread-58884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:08:46.003 [DEBUG] [Thread-58884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] client lang: <none>
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] server lang: <none>
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] kex follows: False
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] Compression: none
2025-11-17T18:08:46.004 [DEBUG] [Thread-58884] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:08:46.021 [DEBUG] [Thread-58884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:08:46.022 [DEBUG] [Thread-58884] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:08:46.022 [DEBUG] [Thread-58884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:08:46.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:08:46.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:08:46.024 [DEBUG] [Thread-58884] [transport.py] [_log()] userauth is OK
2025-11-17T18:08:46.024 [DEBUG] [Thread-58884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:08:46.024 [DEBUG] [Thread-58884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:08:46.025 [DEBUG] [Thread-58884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:08:46.025 [DEBUG] [Thread-58884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:08:46.042 [INFO] [Thread-58884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:08:46.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:08:46.792 [DEBUG] [Thread-58884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:08:46.792 [DEBUG] [Thread-58884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:08:46.792 [DEBUG] [Thread-58884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:08:46.834 [DEBUG] [Thread-58884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:08:46.834 [DEBUG] [Thread-58884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:08:46.837 [DEBUG] [Thread-58884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:08:46.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:08:46.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:08:46.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:08:46.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:08:46.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:08:46.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:08:46.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:08:46.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:08:46.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:08:46.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.672273 -999.00  +21.80  18.06     20   -2.10 1 1 1 1 1   887    0 24.19 20.65 ----- 17.8 18.1 295.2 29.9 23.7 -26.0 23.7 -24.9 23.5 -24.8 23.9 -24.7
2025-11-17T18:08:46.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:08:46.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:08:46.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.672273
2025-11-17T18:08:46.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:08:46.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:08:46.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:08:46.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:08:46.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:08:46.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:08:30', tmtdew=28.12, humidity=14.62, cloud=0.0, wind=28.55, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:08:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:08:46.862 [DEBUG] [Thread-58884] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:08:46.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:08:46.958 [DEBUG] [Thread-58887] [transport.py] [_log()] starting thread (client mode): 0xd078e0b0
2025-11-17T18:08:46.958 [DEBUG] [Thread-58887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:08:46.974 [DEBUG] [Thread-58887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:08:46.974 [INFO] [Thread-58887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:08:46.981 [DEBUG] [Thread-58887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:08:46.981 [DEBUG] [Thread-58887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:08:46.982 [DEBUG] [Thread-58887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:08:46.982 [DEBUG] [Thread-58887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:08:46.982 [DEBUG] [Thread-58887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:08:46.982 [DEBUG] [Thread-58887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:08:46.982 [DEBUG] [Thread-58887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:08:46.982 [DEBUG] [Thread-58887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:08:46.982 [DEBUG] [Thread-58887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:08:46.982 [DEBUG] [Thread-58887] [transport.py] [_log()] client lang: <none>
2025-11-17T18:08:46.983 [DEBUG] [Thread-58887] [transport.py] [_log()] server lang: <none>
2025-11-17T18:08:46.983 [DEBUG] [Thread-58887] [transport.py] [_log()] kex follows: False
2025-11-17T18:08:46.983 [DEBUG] [Thread-58887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:08:46.983 [DEBUG] [Thread-58887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:08:46.983 [DEBUG] [Thread-58887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:08:46.983 [DEBUG] [Thread-58887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:08:46.983 [DEBUG] [Thread-58887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:08:46.984 [DEBUG] [Thread-58887] [transport.py] [_log()] Compression: none
2025-11-17T18:08:46.984 [DEBUG] [Thread-58887] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:08:47.045 [DEBUG] [Thread-58887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:08:47.045 [DEBUG] [Thread-58887] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:08:47.046 [DEBUG] [Thread-58887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:08:47.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:08:47.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:08:47.104 [DEBUG] [Thread-58887] [transport.py] [_log()] userauth is OK
2025-11-17T18:08:47.105 [DEBUG] [Thread-58887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:08:47.105 [DEBUG] [Thread-58887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:08:47.105 [DEBUG] [Thread-58887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:08:47.105 [DEBUG] [Thread-58887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:08:47.125 [INFO] [Thread-58887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:08:47.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:08:47.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:08:48.021 [DEBUG] [Thread-58887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:08:48.021 [DEBUG] [Thread-58887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:08:48.069 [DEBUG] [Thread-58887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:08:48.069 [DEBUG] [Thread-58887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:08:48.078 [DEBUG] [Thread-58887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:08:48.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:08:48.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:08:48.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:08:48.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:08:48.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:08:48.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:08:48.113 [DEBUG] [Thread-58887] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:08:56.737 [DEBUG] [Thread-58889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:09:11.772 [DEBUG] [Thread-58890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:09:18.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:09:18.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:09:18.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
2025-11-17T18:09:18.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 9, 2), 28.28, 14.47, 0.0, 27.44, 21.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:09:18.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:09:02
2025-11-17T18:09:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:09:19.049 [DEBUG] [Thread-58891] [transport.py] [_log()] starting thread (client mode): 0xd078dbd0
2025-11-17T18:09:19.050 [DEBUG] [Thread-58891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:09:19.071 [DEBUG] [Thread-58891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:09:19.071 [INFO] [Thread-58891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:09:19.074 [DEBUG] [Thread-58891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:09:19.074 [DEBUG] [Thread-58891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:09:19.074 [DEBUG] [Thread-58891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] client lang: <none>
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] server lang: <none>
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] kex follows: False
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] Compression: none
2025-11-17T18:09:19.075 [DEBUG] [Thread-58891] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:09:19.093 [DEBUG] [Thread-58891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:09:19.093 [DEBUG] [Thread-58891] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:09:19.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:09:19.094 [DEBUG] [Thread-58891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:09:19.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:09:19.096 [DEBUG] [Thread-58891] [transport.py] [_log()] userauth is OK
2025-11-17T18:09:19.096 [DEBUG] [Thread-58891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:09:19.096 [DEBUG] [Thread-58891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:09:19.096 [DEBUG] [Thread-58891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:09:19.096 [DEBUG] [Thread-58891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:09:19.120 [INFO] [Thread-58891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:09:19.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:09:19.777 [DEBUG] [Thread-58891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:09:19.777 [DEBUG] [Thread-58891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:09:19.777 [DEBUG] [Thread-58891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:09:19.817 [DEBUG] [Thread-58891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:09:19.818 [DEBUG] [Thread-58891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:09:19.821 [DEBUG] [Thread-58891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:09:19.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:09:19.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:09:19.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:09:19.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:09:19.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:09:19.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:09:19.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:09:19.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:09:19.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:09:19.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.672620 -999.00  +21.80  19.76     20   -2.00 1 1 1 1 1   887    0 24.23 20.43 ----- 21.6 19.8 301.2 31.0 23.6 -25.6 23.8 -24.6 23.7 -23.7 23.9 -24.8
2025-11-17T18:09:19.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:09:19.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:09:19.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.672620
2025-11-17T18:09:19.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:09:19.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:09:19.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:09:19.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:09:19.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:09:19.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:09:02', tmtdew=28.28, humidity=14.47, cloud=0.0, wind=27.44, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:08:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:09:19.848 [DEBUG] [Thread-58891] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:09:19.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:09:19.945 [DEBUG] [Thread-58894] [transport.py] [_log()] starting thread (client mode): 0xd078e3e0
2025-11-17T18:09:19.945 [DEBUG] [Thread-58894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:09:19.959 [DEBUG] [Thread-58894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:09:19.960 [INFO] [Thread-58894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:09:19.967 [DEBUG] [Thread-58894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:09:19.967 [DEBUG] [Thread-58894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] client lang: <none>
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] server lang: <none>
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] kex follows: False
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:09:19.968 [DEBUG] [Thread-58894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:09:19.969 [DEBUG] [Thread-58894] [transport.py] [_log()] Compression: none
2025-11-17T18:09:19.969 [DEBUG] [Thread-58894] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:09:20.025 [DEBUG] [Thread-58894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:09:20.025 [DEBUG] [Thread-58894] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:09:20.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:09:20.026 [DEBUG] [Thread-58894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:09:20.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:09:20.081 [DEBUG] [Thread-58894] [transport.py] [_log()] userauth is OK
2025-11-17T18:09:20.081 [DEBUG] [Thread-58894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:09:20.081 [DEBUG] [Thread-58894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:09:20.081 [DEBUG] [Thread-58894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:09:20.081 [DEBUG] [Thread-58894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:09:20.100 [INFO] [Thread-58894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:09:20.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:09:20.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:09:20.936 [DEBUG] [Thread-58894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:09:20.936 [DEBUG] [Thread-58894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:09:20.983 [DEBUG] [Thread-58894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:09:20.983 [DEBUG] [Thread-58894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:09:20.992 [DEBUG] [Thread-58894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:09:21.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:09:21.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:09:21.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:09:21.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:09:21.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:09:21.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:09:21.027 [DEBUG] [Thread-58894] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:09:26.803 [DEBUG] [Thread-58896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:09:27.258 [DEBUG] [Thread-58897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:09:31.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:09:31.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:09:41.844 [DEBUG] [Thread-58898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:09:51.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:09:51.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:09:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:09:51.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 9, 34), 28.25, 14.47, 0.0, 24.49, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:09:51.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:09:34
2025-11-17T18:09:51.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:09:52.009 [DEBUG] [Thread-58899] [transport.py] [_log()] starting thread (client mode): 0xd07cd750
2025-11-17T18:09:52.010 [DEBUG] [Thread-58899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:09:52.021 [DEBUG] [Thread-58899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:09:52.021 [INFO] [Thread-58899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:09:52.024 [DEBUG] [Thread-58899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:09:52.024 [DEBUG] [Thread-58899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:09:52.024 [DEBUG] [Thread-58899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:09:52.024 [DEBUG] [Thread-58899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] client lang: <none>
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] server lang: <none>
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] kex follows: False
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] Compression: none
2025-11-17T18:09:52.025 [DEBUG] [Thread-58899] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:09:52.032 [DEBUG] [Thread-58899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:09:52.032 [DEBUG] [Thread-58899] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:09:52.033 [DEBUG] [Thread-58899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:09:52.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:09:52.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:09:52.034 [DEBUG] [Thread-58899] [transport.py] [_log()] userauth is OK
2025-11-17T18:09:52.034 [DEBUG] [Thread-58899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:09:52.034 [DEBUG] [Thread-58899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:09:52.034 [DEBUG] [Thread-58899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:09:52.034 [DEBUG] [Thread-58899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:09:52.046 [INFO] [Thread-58899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:09:52.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:09:52.726 [DEBUG] [Thread-58899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:09:52.726 [DEBUG] [Thread-58899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:09:52.726 [DEBUG] [Thread-58899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:09:52.767 [DEBUG] [Thread-58899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:09:52.767 [DEBUG] [Thread-58899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:09:52.770 [DEBUG] [Thread-58899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:09:52.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:09:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:09:52.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:09:52.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:09:52.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:09:52.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:09:52.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.672968 -999.00  +21.80  26.20     20   -2.00 1 1 1 1 1   887    0 23.81 19.29 ----- 23.5 26.2 290.6 34.7 23.7 -25.6 23.8 -25.2 23.9 -23.6 24.0 -24.9
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.672968
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:09:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:09:34', tmtdew=28.25, humidity=14.47, cloud=0.0, wind=24.49, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:09:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:09:52.792 [DEBUG] [Thread-58899] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:09:52.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:09:52.879 [DEBUG] [Thread-58902] [transport.py] [_log()] starting thread (client mode): 0xd07ce6e0
2025-11-17T18:09:52.879 [DEBUG] [Thread-58902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:09:52.895 [DEBUG] [Thread-58902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:09:52.895 [INFO] [Thread-58902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] client lang: <none>
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] server lang: <none>
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] kex follows: False
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:09:52.903 [DEBUG] [Thread-58902] [transport.py] [_log()] Compression: none
2025-11-17T18:09:52.904 [DEBUG] [Thread-58902] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:09:52.959 [DEBUG] [Thread-58902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:09:52.959 [DEBUG] [Thread-58902] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:09:52.960 [DEBUG] [Thread-58902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:09:52.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:09:52.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:09:53.016 [DEBUG] [Thread-58902] [transport.py] [_log()] userauth is OK
2025-11-17T18:09:53.016 [DEBUG] [Thread-58902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:09:53.016 [DEBUG] [Thread-58902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:09:53.016 [DEBUG] [Thread-58902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:09:53.016 [DEBUG] [Thread-58902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:09:53.030 [INFO] [Thread-58902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:09:53.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:09:53.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:09:53.903 [DEBUG] [Thread-58902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:09:53.903 [DEBUG] [Thread-58902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:09:53.954 [DEBUG] [Thread-58902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:09:53.954 [DEBUG] [Thread-58902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:09:53.966 [DEBUG] [Thread-58902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:09:53.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:09:53.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:09:53.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:09:54.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:09:54.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:09:54.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:09:54.011 [DEBUG] [Thread-58902] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:09:56.873 [DEBUG] [Thread-58904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:10:11.918 [DEBUG] [Thread-58905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:10:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:10:24.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:10:24.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:10:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 10, 6), 28.25, 14.49, 0.0, 23.4, 21.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:10:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:10:06
2025-11-17T18:10:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:10:24.951 [DEBUG] [Thread-58906] [transport.py] [_log()] starting thread (client mode): 0xd07cd210
2025-11-17T18:10:24.951 [DEBUG] [Thread-58906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:10:24.966 [DEBUG] [Thread-58906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:10:24.967 [INFO] [Thread-58906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] client lang: <none>
2025-11-17T18:10:24.970 [DEBUG] [Thread-58906] [transport.py] [_log()] server lang: <none>
2025-11-17T18:10:24.971 [DEBUG] [Thread-58906] [transport.py] [_log()] kex follows: False
2025-11-17T18:10:24.971 [DEBUG] [Thread-58906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:10:24.971 [DEBUG] [Thread-58906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:10:24.971 [DEBUG] [Thread-58906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:10:24.971 [DEBUG] [Thread-58906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:10:24.971 [DEBUG] [Thread-58906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:10:24.971 [DEBUG] [Thread-58906] [transport.py] [_log()] Compression: none
2025-11-17T18:10:24.971 [DEBUG] [Thread-58906] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:10:24.989 [DEBUG] [Thread-58906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:10:24.989 [DEBUG] [Thread-58906] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:10:24.990 [DEBUG] [Thread-58906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:10:24.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:10:24.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:10:24.991 [DEBUG] [Thread-58906] [transport.py] [_log()] userauth is OK
2025-11-17T18:10:24.992 [DEBUG] [Thread-58906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:10:24.992 [DEBUG] [Thread-58906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:10:24.992 [DEBUG] [Thread-58906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:10:24.992 [DEBUG] [Thread-58906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:10:25.010 [INFO] [Thread-58906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:10:25.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:10:25.681 [DEBUG] [Thread-58906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:10:25.681 [DEBUG] [Thread-58906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:10:25.682 [DEBUG] [Thread-58906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:10:25.722 [DEBUG] [Thread-58906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:10:25.722 [DEBUG] [Thread-58906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:10:25.725 [DEBUG] [Thread-58906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:10:25.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:10:25.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:10:25.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:10:25.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:10:25.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:10:25.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:10:25.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:10:25.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:10:25.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:10:25.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.673662 -999.00  +21.60  25.17     20   -2.10 1 1 1 1 1   887    0 24.34 17.16 ----- 24.1 25.2 275.6 30.7 23.6 -26.0 23.8 -25.2 23.9 -25.9 24.2 -25.0
2025-11-17T18:10:25.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:10:25.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:10:25.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.673662
2025-11-17T18:10:25.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:10:25.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:10:25.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:10:25.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:10:25.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:10:25.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:10:06', tmtdew=28.25, humidity=14.49, cloud=0.0, wind=23.4, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:10:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:10:25.751 [DEBUG] [Thread-58906] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:10:25.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:10:25.854 [DEBUG] [Thread-58909] [transport.py] [_log()] starting thread (client mode): 0xd078ea40
2025-11-17T18:10:25.854 [DEBUG] [Thread-58909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:10:25.871 [DEBUG] [Thread-58909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:10:25.871 [INFO] [Thread-58909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:10:25.878 [DEBUG] [Thread-58909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:10:25.878 [DEBUG] [Thread-58909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:10:25.878 [DEBUG] [Thread-58909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:10:25.878 [DEBUG] [Thread-58909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:10:25.878 [DEBUG] [Thread-58909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] client lang: <none>
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] server lang: <none>
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] kex follows: False
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] Compression: none
2025-11-17T18:10:25.879 [DEBUG] [Thread-58909] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:10:25.936 [DEBUG] [Thread-58909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:10:25.936 [DEBUG] [Thread-58909] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:10:25.937 [DEBUG] [Thread-58909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:10:25.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:10:25.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:10:25.993 [DEBUG] [Thread-58909] [transport.py] [_log()] userauth is OK
2025-11-17T18:10:25.993 [DEBUG] [Thread-58909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:10:25.993 [DEBUG] [Thread-58909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:10:25.993 [DEBUG] [Thread-58909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:10:25.993 [DEBUG] [Thread-58909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:10:26.013 [INFO] [Thread-58909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:10:26.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:10:26.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:10:26.890 [DEBUG] [Thread-58909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:10:26.890 [DEBUG] [Thread-58909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:10:26.938 [DEBUG] [Thread-58909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:10:26.938 [DEBUG] [Thread-58909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:10:26.946 [DEBUG] [Thread-58909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:10:26.948 [DEBUG] [Thread-58911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:10:26.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:10: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')
2025-11-17T18:10:26.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
2025-11-17T18:10:26.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:10:26.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:10:26.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:10:26.977 [DEBUG] [Thread-58909] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:10:27.302 [DEBUG] [Thread-58912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:10:31.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:10:31.736 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:10:41.978 [DEBUG] [Thread-58913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:10:56.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:10:56.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:10:56.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:10:57.010 [DEBUG] [Thread-58914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:10:57.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 10, 38), 28.38, 14.45, 0.0, 25.04, 22.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:10:57.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:10:38
2025-11-17T18:10:57.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:10:57.922 [DEBUG] [Thread-58915] [transport.py] [_log()] starting thread (client mode): 0xd07cf280
2025-11-17T18:10:57.923 [DEBUG] [Thread-58915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:10:57.942 [DEBUG] [Thread-58915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:10:57.942 [INFO] [Thread-58915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:10:57.944 [DEBUG] [Thread-58915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:10:57.944 [DEBUG] [Thread-58915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:10:57.944 [DEBUG] [Thread-58915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:10:57.944 [DEBUG] [Thread-58915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] client lang: <none>
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] server lang: <none>
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] kex follows: False
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] Compression: none
2025-11-17T18:10:57.945 [DEBUG] [Thread-58915] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:10:57.957 [DEBUG] [Thread-58915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:10:57.958 [DEBUG] [Thread-58915] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:10:57.958 [DEBUG] [Thread-58915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:10:57.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:10:57.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:10:57.960 [DEBUG] [Thread-58915] [transport.py] [_log()] userauth is OK
2025-11-17T18:10:57.960 [DEBUG] [Thread-58915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:10:57.960 [DEBUG] [Thread-58915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:10:57.960 [DEBUG] [Thread-58915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:10:57.961 [DEBUG] [Thread-58915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:10:57.978 [INFO] [Thread-58915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:10:57.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:10:58.691 [DEBUG] [Thread-58915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:10:58.692 [DEBUG] [Thread-58915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:10:58.692 [DEBUG] [Thread-58915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:10:58.732 [DEBUG] [Thread-58915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:10:58.733 [DEBUG] [Thread-58915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:10:58.735 [DEBUG] [Thread-58915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:10:58.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:10:58.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:10:58.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:10:58.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:10:58.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:10:58.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:10:58.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:10:58.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:10:58.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:10:58.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.674009 -999.00  +21.60  21.10     20   -2.10 1 1 1 1 1   887    0 24.00 18.25 ----- 24.4 21.1 281.2 32.1 23.6 -26.2 23.8 -25.1 23.9 -26.0 24.2 -24.6
2025-11-17T18:10:58.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:10:58.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:10:58.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.674009
2025-11-17T18:10:58.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:10:58.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:10:58.759 [DEBUG] [Thread-58915] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:10:58.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:10:58.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:10:58.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:10:58.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:10:38', tmtdew=28.38, humidity=14.45, cloud=0.0, wind=25.04, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:10:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:10:58.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:10:58.852 [DEBUG] [Thread-58918] [transport.py] [_log()] starting thread (client mode): 0xd07cf640
2025-11-17T18:10:58.852 [DEBUG] [Thread-58918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:10:58.868 [DEBUG] [Thread-58918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:10:58.868 [INFO] [Thread-58918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:10:58.875 [DEBUG] [Thread-58918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] client lang: <none>
2025-11-17T18:10:58.876 [DEBUG] [Thread-58918] [transport.py] [_log()] server lang: <none>
2025-11-17T18:10:58.877 [DEBUG] [Thread-58918] [transport.py] [_log()] kex follows: False
2025-11-17T18:10:58.877 [DEBUG] [Thread-58918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:10:58.877 [DEBUG] [Thread-58918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:10:58.877 [DEBUG] [Thread-58918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:10:58.877 [DEBUG] [Thread-58918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:10:58.877 [DEBUG] [Thread-58918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:10:58.877 [DEBUG] [Thread-58918] [transport.py] [_log()] Compression: none
2025-11-17T18:10:58.877 [DEBUG] [Thread-58918] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:10:58.933 [DEBUG] [Thread-58918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:10:58.934 [DEBUG] [Thread-58918] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:10:58.934 [DEBUG] [Thread-58918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:10:58.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:10:58.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:10:58.989 [DEBUG] [Thread-58918] [transport.py] [_log()] userauth is OK
2025-11-17T18:10:58.989 [DEBUG] [Thread-58918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:10:58.989 [DEBUG] [Thread-58918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:10:58.990 [DEBUG] [Thread-58918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:10:58.990 [DEBUG] [Thread-58918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:10:59.015 [INFO] [Thread-58918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:10:59.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:10:59.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:10:59.897 [DEBUG] [Thread-58918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:10:59.897 [DEBUG] [Thread-58918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:10:59.944 [DEBUG] [Thread-58918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:10:59.945 [DEBUG] [Thread-58918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:10:59.953 [DEBUG] [Thread-58918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:10:59.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:10:59.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:10:59.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:10:59.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:10:59.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:10:59.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:10:59.988 [DEBUG] [Thread-58918] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:11:12.040 [DEBUG] [Thread-58920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:11:27.068 [DEBUG] [Thread-58921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:11:27.358 [DEBUG] [Thread-58922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:11:30.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:11:30.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:11:30.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:11:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 11, 10), 28.44, 14.4, 0.0, 24.14, 22.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:11:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:11:10
2025-11-17T18:11:30.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:11:30.925 [DEBUG] [Thread-58923] [transport.py] [_log()] starting thread (client mode): 0xd078d660
2025-11-17T18:11:30.926 [DEBUG] [Thread-58923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:11:30.947 [DEBUG] [Thread-58923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:11:30.947 [INFO] [Thread-58923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:11:30.950 [DEBUG] [Thread-58923] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:11:30.950 [DEBUG] [Thread-58923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:11:30.950 [DEBUG] [Thread-58923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] client lang: <none>
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] server lang: <none>
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] kex follows: False
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:11:30.951 [DEBUG] [Thread-58923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:11:30.952 [DEBUG] [Thread-58923] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:11:30.952 [DEBUG] [Thread-58923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:11:30.952 [DEBUG] [Thread-58923] [transport.py] [_log()] Compression: none
2025-11-17T18:11:30.952 [DEBUG] [Thread-58923] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:11:30.970 [DEBUG] [Thread-58923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:11:30.970 [DEBUG] [Thread-58923] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:11:30.971 [DEBUG] [Thread-58923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:11:30.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:11:30.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:11:30.973 [DEBUG] [Thread-58923] [transport.py] [_log()] userauth is OK
2025-11-17T18:11:30.973 [DEBUG] [Thread-58923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:11:30.973 [DEBUG] [Thread-58923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:11:30.973 [DEBUG] [Thread-58923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:11:30.973 [DEBUG] [Thread-58923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:11:30.997 [INFO] [Thread-58923] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:11:30.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:11:31.615 [DEBUG] [Thread-58923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:11:31.615 [DEBUG] [Thread-58923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:11:31.615 [DEBUG] [Thread-58923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:11:31.656 [DEBUG] [Thread-58923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:11:31.657 [DEBUG] [Thread-58923] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:11:31.659 [DEBUG] [Thread-58923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:11:31.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:11:31.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:11:31.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:11:31.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:11:31.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:11:31.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:11:31.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:11:31.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:11:31.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:11:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.674357 -999.00  +21.80  19.79     20   -2.10 1 1 1 1 1   887    0 24.25 17.50 ----- 24.7 19.8 279.0 25.7 23.6 -25.6 23.8 -26.0 23.9 -25.6 24.2 -25.4
2025-11-17T18:11:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:11:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:11:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.674357
2025-11-17T18:11:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:11:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:11:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:11:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:11:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:11:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:11:10', tmtdew=28.44, humidity=14.4, cloud=0.0, wind=24.14, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:11:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:11:31.684 [DEBUG] [Thread-58923] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:11:31.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:11:31.781 [DEBUG] [Thread-58926] [transport.py] [_log()] starting thread (client mode): 0xd078fe50
2025-11-17T18:11:31.781 [DEBUG] [Thread-58926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:11:31.797 [DEBUG] [Thread-58926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:11:31.797 [INFO] [Thread-58926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:11:31.804 [DEBUG] [Thread-58926] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:11:31.804 [DEBUG] [Thread-58926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:11:31.804 [DEBUG] [Thread-58926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] client lang: <none>
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] server lang: <none>
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] kex follows: False
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] Compression: none
2025-11-17T18:11:31.805 [DEBUG] [Thread-58926] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:11:31.865 [DEBUG] [Thread-58926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:11:31.865 [DEBUG] [Thread-58926] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:11:31.866 [DEBUG] [Thread-58926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:11:31.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:11:31.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:11:31.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:11:31.877 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:11:31.921 [DEBUG] [Thread-58926] [transport.py] [_log()] userauth is OK
2025-11-17T18:11:31.921 [DEBUG] [Thread-58926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:11:31.921 [DEBUG] [Thread-58926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:11:31.921 [DEBUG] [Thread-58926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:11:31.921 [DEBUG] [Thread-58926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:11:31.940 [INFO] [Thread-58926] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:11:31.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:11:31.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:11:32.815 [DEBUG] [Thread-58926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:11:32.816 [DEBUG] [Thread-58926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:11:32.863 [DEBUG] [Thread-58926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:11:32.863 [DEBUG] [Thread-58926] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:11:32.872 [DEBUG] [Thread-58926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:11:32.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:11:32.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:11:32.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:11:32.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:11:32.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:11:32.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:11:32.906 [DEBUG] [Thread-58926] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:11:42.098 [DEBUG] [Thread-58928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:11:57.143 [DEBUG] [Thread-58929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:12:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:12:02.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:12:02.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:12:03.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 11, 42), 28.9, 13.75, 0.0, 30.44, 22.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:12:03.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:11:42
2025-11-17T18:12:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:12:03.843 [DEBUG] [Thread-58930] [transport.py] [_log()] starting thread (client mode): 0xd078d9c0
2025-11-17T18:12:03.843 [DEBUG] [Thread-58930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:12:03.865 [DEBUG] [Thread-58930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:12:03.865 [INFO] [Thread-58930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:12:03.868 [DEBUG] [Thread-58930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:12:03.868 [DEBUG] [Thread-58930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:12:03.868 [DEBUG] [Thread-58930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:12:03.868 [DEBUG] [Thread-58930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:12:03.868 [DEBUG] [Thread-58930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] client lang: <none>
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] server lang: <none>
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] kex follows: False
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] Compression: none
2025-11-17T18:12:03.869 [DEBUG] [Thread-58930] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:12:03.889 [DEBUG] [Thread-58930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:12:03.890 [DEBUG] [Thread-58930] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:12:03.890 [DEBUG] [Thread-58930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:12:03.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:12:03.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:12:03.892 [DEBUG] [Thread-58930] [transport.py] [_log()] userauth is OK
2025-11-17T18:12:03.892 [DEBUG] [Thread-58930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:12:03.892 [DEBUG] [Thread-58930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:12:03.893 [DEBUG] [Thread-58930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:12:03.893 [DEBUG] [Thread-58930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:12:03.909 [INFO] [Thread-58930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:12:03.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:12:04.604 [DEBUG] [Thread-58930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:12:04.605 [DEBUG] [Thread-58930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:12:04.605 [DEBUG] [Thread-58930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:12:04.646 [DEBUG] [Thread-58930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:12:04.646 [DEBUG] [Thread-58930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:12:04.648 [DEBUG] [Thread-58930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:12:04.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:12:04.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:12:04.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:12:04.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:12:04.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:12:04.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:12:04.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:12:04.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:12:04.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:12:04.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.674704 -999.00  +21.70  25.08     19   -2.30 1 1 1 1 1   887    0 24.09 17.95 ----- 23.9 25.1 282.2 36.9 23.5 -26.5 23.7 -25.4 23.7 -25.0 24.1 -26.3
2025-11-17T18:12:04.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:12:04.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:12:04.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.674704
2025-11-17T18:12:04.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:12:04.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:12:04.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:12:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:12:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:12:04.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:11:42', tmtdew=28.9, humidity=13.75, cloud=0.0, wind=30.44, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:11:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:12:04.669 [DEBUG] [Thread-58930] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:12:04.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:12:04.764 [DEBUG] [Thread-58933] [transport.py] [_log()] starting thread (client mode): 0xd07cf790
2025-11-17T18:12:04.764 [DEBUG] [Thread-58933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:12:04.779 [DEBUG] [Thread-58933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:12:04.779 [INFO] [Thread-58933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:12:04.787 [DEBUG] [Thread-58933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:12:04.787 [DEBUG] [Thread-58933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:12:04.787 [DEBUG] [Thread-58933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:12:04.787 [DEBUG] [Thread-58933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] client lang: <none>
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] server lang: <none>
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] kex follows: False
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:12:04.788 [DEBUG] [Thread-58933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:12:04.789 [DEBUG] [Thread-58933] [transport.py] [_log()] Compression: none
2025-11-17T18:12:04.789 [DEBUG] [Thread-58933] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:12:04.844 [DEBUG] [Thread-58933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:12:04.845 [DEBUG] [Thread-58933] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:12:04.846 [DEBUG] [Thread-58933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:12:04.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:12:04.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:12:04.903 [DEBUG] [Thread-58933] [transport.py] [_log()] userauth is OK
2025-11-17T18:12:04.903 [DEBUG] [Thread-58933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:12:04.903 [DEBUG] [Thread-58933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:12:04.904 [DEBUG] [Thread-58933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:12:04.904 [DEBUG] [Thread-58933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:12:04.924 [INFO] [Thread-58933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:12:04.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:12:04.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:12:05.811 [DEBUG] [Thread-58933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:12:05.811 [DEBUG] [Thread-58933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:12:05.858 [DEBUG] [Thread-58933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:12:05.858 [DEBUG] [Thread-58933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:12:05.867 [DEBUG] [Thread-58933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:12:05.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:12:05.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:12:05.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:12:05.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:12:05.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:12:05.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:12:05.901 [DEBUG] [Thread-58933] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:12:12.172 [DEBUG] [Thread-58935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:12:27.211 [DEBUG] [Thread-58936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:12:27.418 [DEBUG] [Thread-58937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:12:32.018 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:12:32.019 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:12:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:12:35.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:12:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:12:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 12, 14), 29.02, 13.64, 0.0, 29.47, 22.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:12:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:12:14
2025-11-17T18:12:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:12:36.815 [DEBUG] [Thread-58938] [transport.py] [_log()] starting thread (client mode): 0xd07cd2d0
2025-11-17T18:12:36.815 [DEBUG] [Thread-58938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:12:36.835 [DEBUG] [Thread-58938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:12:36.836 [INFO] [Thread-58938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] client lang: <none>
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] server lang: <none>
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] kex follows: False
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:12:36.839 [DEBUG] [Thread-58938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:12:36.840 [DEBUG] [Thread-58938] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:12:36.840 [DEBUG] [Thread-58938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:12:36.840 [DEBUG] [Thread-58938] [transport.py] [_log()] Compression: none
2025-11-17T18:12:36.840 [DEBUG] [Thread-58938] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:12:36.859 [DEBUG] [Thread-58938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:12:36.860 [DEBUG] [Thread-58938] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:12:36.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:12:36.861 [DEBUG] [Thread-58938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:12:36.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:12:36.863 [DEBUG] [Thread-58938] [transport.py] [_log()] userauth is OK
2025-11-17T18:12:36.863 [DEBUG] [Thread-58938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:12:36.863 [DEBUG] [Thread-58938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:12:36.863 [DEBUG] [Thread-58938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:12:36.863 [DEBUG] [Thread-58938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:12:36.887 [INFO] [Thread-58938] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:12:36.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:12:37.538 [DEBUG] [Thread-58938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:12:37.538 [DEBUG] [Thread-58938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:12:37.538 [DEBUG] [Thread-58938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:12:37.579 [DEBUG] [Thread-58938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:12:37.579 [DEBUG] [Thread-58938] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:12:37.582 [DEBUG] [Thread-58938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:12:37.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:12:37.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:12:37.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:12:37.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:12:37.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:12:37.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:12:37.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:12:37.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:12:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:12:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.675051 -999.00  +21.60  28.17     20   -2.20 1 1 1 1 1   887    0 24.72 18.86 ----- 31.8 28.2 286.8 40.0 23.4 -26.3 23.6 -25.2 23.6 -27.1 24.0 -26.2
2025-11-17T18:12:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:12:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:12:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.675051
2025-11-17T18:12:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:12:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:12:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:12:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:12:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:12:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:12:14', tmtdew=29.02, humidity=13.64, cloud=0.0, wind=29.47, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:12:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:12:37.610 [DEBUG] [Thread-58938] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:12:37.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:12:37.706 [DEBUG] [Thread-58941] [transport.py] [_log()] starting thread (client mode): 0xd078fd30
2025-11-17T18:12:37.706 [DEBUG] [Thread-58941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:12:37.724 [DEBUG] [Thread-58941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:12:37.724 [INFO] [Thread-58941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] client lang: <none>
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] server lang: <none>
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] kex follows: False
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:12:37.732 [DEBUG] [Thread-58941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:12:37.733 [DEBUG] [Thread-58941] [transport.py] [_log()] Compression: none
2025-11-17T18:12:37.733 [DEBUG] [Thread-58941] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:12:37.788 [DEBUG] [Thread-58941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:12:37.789 [DEBUG] [Thread-58941] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:12:37.789 [DEBUG] [Thread-58941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:12:37.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:12:37.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:12:37.845 [DEBUG] [Thread-58941] [transport.py] [_log()] userauth is OK
2025-11-17T18:12:37.846 [DEBUG] [Thread-58941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:12:37.846 [DEBUG] [Thread-58941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:12:37.846 [DEBUG] [Thread-58941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:12:37.846 [DEBUG] [Thread-58941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:12:37.865 [INFO] [Thread-58941] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:12:37.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:12:37.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:12:38.732 [DEBUG] [Thread-58941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:12:38.732 [DEBUG] [Thread-58941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:12:38.780 [DEBUG] [Thread-58941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:12:38.780 [DEBUG] [Thread-58941] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:12:38.789 [DEBUG] [Thread-58941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:12:38.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:12:38.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:12:38.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:12:38.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:12:38.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:12:38.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:12:38.824 [DEBUG] [Thread-58941] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:12:42.240 [DEBUG] [Thread-58943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:12:57.290 [DEBUG] [Thread-58944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:13:08.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:13:08.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:13:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:13:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 12, 46), 28.91, 13.64, 0.0, 26.18, 22.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:13:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:12:46
2025-11-17T18:13:09.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:13:09.748 [DEBUG] [Thread-58945] [transport.py] [_log()] starting thread (client mode): 0xd078fd00
2025-11-17T18:13:09.749 [DEBUG] [Thread-58945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:13:09.766 [DEBUG] [Thread-58945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:13:09.766 [INFO] [Thread-58945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:13:09.767 [DEBUG] [Thread-58945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:13:09.767 [DEBUG] [Thread-58945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] client lang: <none>
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] server lang: <none>
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] kex follows: False
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] Compression: none
2025-11-17T18:13:09.768 [DEBUG] [Thread-58945] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:13:09.777 [DEBUG] [Thread-58945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:13:09.777 [DEBUG] [Thread-58945] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:13:09.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:13:09.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:13:09.778 [DEBUG] [Thread-58945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:13:09.779 [DEBUG] [Thread-58945] [transport.py] [_log()] userauth is OK
2025-11-17T18:13:09.779 [DEBUG] [Thread-58945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:13:09.779 [DEBUG] [Thread-58945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:13:09.780 [DEBUG] [Thread-58945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:13:09.780 [DEBUG] [Thread-58945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:13:09.804 [INFO] [Thread-58945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:13:09.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:13:10.483 [DEBUG] [Thread-58945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:13:10.483 [DEBUG] [Thread-58945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:13:10.484 [DEBUG] [Thread-58945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:13:10.524 [DEBUG] [Thread-58945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:13:10.524 [DEBUG] [Thread-58945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:13:10.527 [DEBUG] [Thread-58945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:13:10.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:13:10.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:13:10.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:13:10.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:13:10.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:13:10.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:13:10.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:13:10.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:13:10.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:13:10.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.675398 -999.00  +21.50  23.44     20   -2.30 1 1 1 1 1   887    0 24.69 18.71 ----- 24.1 23.4 288.0 34.7 23.4 -26.5 23.6 -25.4 23.6 -24.5 23.9 -25.4
2025-11-17T18:13:10.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:13:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:13:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.675398
2025-11-17T18:13:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:13:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:13:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:13:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:13:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:13:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:12:46', tmtdew=28.91, humidity=13.64, cloud=0.0, wind=26.18, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:12:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:13:10.553 [DEBUG] [Thread-58945] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:13:10.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:13:10.647 [DEBUG] [Thread-58948] [transport.py] [_log()] starting thread (client mode): 0xd07cd2d0
2025-11-17T18:13:10.647 [DEBUG] [Thread-58948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:13:10.662 [DEBUG] [Thread-58948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:13:10.662 [INFO] [Thread-58948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:13:10.672 [DEBUG] [Thread-58948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:13:10.672 [DEBUG] [Thread-58948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:13:10.672 [DEBUG] [Thread-58948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:13:10.672 [DEBUG] [Thread-58948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:13:10.672 [DEBUG] [Thread-58948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:13:10.672 [DEBUG] [Thread-58948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:13:10.672 [DEBUG] [Thread-58948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:13:10.672 [DEBUG] [Thread-58948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] client lang: <none>
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] server lang: <none>
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] kex follows: False
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:13:10.673 [DEBUG] [Thread-58948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:13:10.674 [DEBUG] [Thread-58948] [transport.py] [_log()] Compression: none
2025-11-17T18:13:10.674 [DEBUG] [Thread-58948] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:13:10.729 [DEBUG] [Thread-58948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:13:10.730 [DEBUG] [Thread-58948] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:13:10.730 [DEBUG] [Thread-58948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:13:10.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:13:10.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:13:10.785 [DEBUG] [Thread-58948] [transport.py] [_log()] userauth is OK
2025-11-17T18:13:10.786 [DEBUG] [Thread-58948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:13:10.786 [DEBUG] [Thread-58948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:13:10.786 [DEBUG] [Thread-58948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:13:10.786 [DEBUG] [Thread-58948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:13:10.808 [INFO] [Thread-58948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:13:10.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:13:10.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:13:11.726 [DEBUG] [Thread-58948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:13:11.726 [DEBUG] [Thread-58948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:13:11.774 [DEBUG] [Thread-58948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:13:11.774 [DEBUG] [Thread-58948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:13:11.783 [DEBUG] [Thread-58948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:13:11.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:13:11.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:13:11.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:13:11.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:13:11.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:13:11.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:13:11.821 [DEBUG] [Thread-58948] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:13:12.322 [DEBUG] [Thread-58950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:13:27.369 [DEBUG] [Thread-58951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:13:27.477 [DEBUG] [Thread-58952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:13:32.162 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:13:32.164 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:13:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:13:41.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:13:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:13:42.403 [DEBUG] [Thread-58953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:13:42.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 13, 18), 28.84, 13.7, 0.0, 26.71, 22.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:13:42.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:13:18
2025-11-17T18:13:42.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:13:42.776 [DEBUG] [Thread-58954] [transport.py] [_log()] starting thread (client mode): 0xd07cfeb0
2025-11-17T18:13:42.776 [DEBUG] [Thread-58954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:13:42.796 [DEBUG] [Thread-58954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:13:42.796 [INFO] [Thread-58954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] client lang: <none>
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] server lang: <none>
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] kex follows: False
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] Compression: none
2025-11-17T18:13:42.799 [DEBUG] [Thread-58954] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:13:42.815 [DEBUG] [Thread-58954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:13:42.815 [DEBUG] [Thread-58954] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:13:42.815 [DEBUG] [Thread-58954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:13:42.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:13:42.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:13:42.816 [DEBUG] [Thread-58954] [transport.py] [_log()] userauth is OK
2025-11-17T18:13:42.816 [DEBUG] [Thread-58954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:13:42.816 [DEBUG] [Thread-58954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:13:42.816 [DEBUG] [Thread-58954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:13:42.816 [DEBUG] [Thread-58954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:13:42.825 [INFO] [Thread-58954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:13:42.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:13:43.417 [DEBUG] [Thread-58954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:13:43.417 [DEBUG] [Thread-58954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:13:43.417 [DEBUG] [Thread-58954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:13:43.458 [DEBUG] [Thread-58954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:13:43.458 [DEBUG] [Thread-58954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:13:43.461 [DEBUG] [Thread-58954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:13:43.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:13:43.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:13:43.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:13:43.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:13:43.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:13:43.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:13:43.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.675745 -999.00  +21.40  21.64     20   -2.30 1 1 1 1 1   887    0 23.83 18.72 ----- 28.3 21.6 280.0 28.1 23.4 -26.2 23.5 -25.6 23.5 -25.4 23.8 -25.8
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.675745
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:13:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:13:18', tmtdew=28.84, humidity=13.7, cloud=0.0, wind=26.71, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:13:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:13:43.480 [DEBUG] [Thread-58954] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:13:43.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:13:43.565 [DEBUG] [Thread-58957] [transport.py] [_log()] starting thread (client mode): 0xd31b2f50
2025-11-17T18:13:43.565 [DEBUG] [Thread-58957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:13:43.581 [DEBUG] [Thread-58957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:13:43.582 [INFO] [Thread-58957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] client lang: <none>
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] server lang: <none>
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] kex follows: False
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] Compression: none
2025-11-17T18:13:43.589 [DEBUG] [Thread-58957] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:13:43.647 [DEBUG] [Thread-58957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:13:43.648 [DEBUG] [Thread-58957] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:13:43.648 [DEBUG] [Thread-58957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:13:43.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:13:43.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:13:43.708 [DEBUG] [Thread-58957] [transport.py] [_log()] userauth is OK
2025-11-17T18:13:43.708 [DEBUG] [Thread-58957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:13:43.708 [DEBUG] [Thread-58957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:13:43.708 [DEBUG] [Thread-58957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:13:43.708 [DEBUG] [Thread-58957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:13:43.722 [INFO] [Thread-58957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:13:43.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:13:43.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:13:44.606 [DEBUG] [Thread-58957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:13:44.607 [DEBUG] [Thread-58957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:13:44.654 [DEBUG] [Thread-58957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:13:44.654 [DEBUG] [Thread-58957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:13:44.663 [DEBUG] [Thread-58957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:13:44.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:13:44.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:13:44.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:13:44.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:13:44.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:13:44.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:13:44.698 [DEBUG] [Thread-58957] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:13:57.429 [DEBUG] [Thread-58959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:14:12.474 [DEBUG] [Thread-58960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:14:14.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:14:14.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:14:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:14:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 13, 50), 28.72, 14.15, 0.0, 30.0, 21.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:14:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:13:50
2025-11-17T18:14:15.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:14:15.635 [DEBUG] [Thread-58961] [transport.py] [_log()] starting thread (client mode): 0xd078d5d0
2025-11-17T18:14:15.636 [DEBUG] [Thread-58961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:14:15.656 [DEBUG] [Thread-58961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:14:15.656 [INFO] [Thread-58961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:14:15.659 [DEBUG] [Thread-58961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:14:15.659 [DEBUG] [Thread-58961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:14:15.659 [DEBUG] [Thread-58961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] client lang: <none>
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] server lang: <none>
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] kex follows: False
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] Compression: none
2025-11-17T18:14:15.660 [DEBUG] [Thread-58961] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:14:15.677 [DEBUG] [Thread-58961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:14:15.678 [DEBUG] [Thread-58961] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:14:15.678 [DEBUG] [Thread-58961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:14:15.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:14:15.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:14:15.680 [DEBUG] [Thread-58961] [transport.py] [_log()] userauth is OK
2025-11-17T18:14:15.680 [DEBUG] [Thread-58961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:14:15.680 [DEBUG] [Thread-58961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:14:15.680 [DEBUG] [Thread-58961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:14:15.680 [DEBUG] [Thread-58961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:14:15.705 [INFO] [Thread-58961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:14:15.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:14:16.436 [DEBUG] [Thread-58961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:14:16.437 [DEBUG] [Thread-58961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:14:16.437 [DEBUG] [Thread-58961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:14:16.477 [DEBUG] [Thread-58961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:14:16.477 [DEBUG] [Thread-58961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:14:16.480 [DEBUG] [Thread-58961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:14:16.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:14:16.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:14:16.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:14:16.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:14:16.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:14:16.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:14:16.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:14:16.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:14:16.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:14:16.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.676093 -999.00  +21.30  26.42     20   -2.40 1 1 1 1 1   887    0 23.94 15.30 ----- 27.5 26.4 276.4 37.0 23.2 -26.7 23.4 -25.7 23.3 -26.5 23.8 -26.7
2025-11-17T18:14:16.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:14:16.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:14:16.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.676093
2025-11-17T18:14:16.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:14:16.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:14:16.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:14:16.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:14:16.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:14:16.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:13:50', tmtdew=28.72, humidity=14.15, cloud=0.0, wind=30.0, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:13:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:14:16.502 [DEBUG] [Thread-58961] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:14:16.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:14:16.600 [DEBUG] [Thread-58964] [transport.py] [_log()] starting thread (client mode): 0xd078fe50
2025-11-17T18:14:16.600 [DEBUG] [Thread-58964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:14:16.614 [DEBUG] [Thread-58964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:14:16.614 [INFO] [Thread-58964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] client lang: <none>
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] server lang: <none>
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] kex follows: False
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:14:16.622 [DEBUG] [Thread-58964] [transport.py] [_log()] Compression: none
2025-11-17T18:14:16.623 [DEBUG] [Thread-58964] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:14:16.680 [DEBUG] [Thread-58964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:14:16.680 [DEBUG] [Thread-58964] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:14:16.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:14:16.681 [DEBUG] [Thread-58964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:14:16.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:14:16.736 [DEBUG] [Thread-58964] [transport.py] [_log()] userauth is OK
2025-11-17T18:14:16.737 [DEBUG] [Thread-58964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:14:16.737 [DEBUG] [Thread-58964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:14:16.737 [DEBUG] [Thread-58964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:14:16.737 [DEBUG] [Thread-58964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:14:16.750 [INFO] [Thread-58964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:14:16.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:14:16.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:14:17.597 [DEBUG] [Thread-58964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:14:17.597 [DEBUG] [Thread-58964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:14:17.645 [DEBUG] [Thread-58964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:14:17.645 [DEBUG] [Thread-58964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:14:17.653 [DEBUG] [Thread-58964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:14:17.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:14:17.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:14:17.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:14:17.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:14:17.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:14:17.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:14:17.686 [DEBUG] [Thread-58964] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:14:27.498 [DEBUG] [Thread-58966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:14:27.509 [DEBUG] [Thread-58967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:14:32.306 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:14:32.307 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:14:42.529 [DEBUG] [Thread-58968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:14:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:14:47.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:14:47.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:14:48.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 14, 22), 28.63, 14.24, 0.0, 30.95, 21.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:14:48.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:14:22
2025-11-17T18:14:48.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:14:48.628 [DEBUG] [Thread-58969] [transport.py] [_log()] starting thread (client mode): 0xd31b28f0
2025-11-17T18:14:48.628 [DEBUG] [Thread-58969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:14:48.649 [DEBUG] [Thread-58969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:14:48.649 [INFO] [Thread-58969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] client lang: <none>
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] server lang: <none>
2025-11-17T18:14:48.650 [DEBUG] [Thread-58969] [transport.py] [_log()] kex follows: False
2025-11-17T18:14:48.651 [DEBUG] [Thread-58969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:14:48.651 [DEBUG] [Thread-58969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:14:48.651 [DEBUG] [Thread-58969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:14:48.651 [DEBUG] [Thread-58969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:14:48.651 [DEBUG] [Thread-58969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:14:48.651 [DEBUG] [Thread-58969] [transport.py] [_log()] Compression: none
2025-11-17T18:14:48.651 [DEBUG] [Thread-58969] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:14:48.660 [DEBUG] [Thread-58969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:14:48.661 [DEBUG] [Thread-58969] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:14:48.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:14:48.663 [DEBUG] [Thread-58969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:14:48.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:14:48.664 [DEBUG] [Thread-58969] [transport.py] [_log()] userauth is OK
2025-11-17T18:14:48.665 [DEBUG] [Thread-58969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:14:48.665 [DEBUG] [Thread-58969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:14:48.665 [DEBUG] [Thread-58969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:14:48.665 [DEBUG] [Thread-58969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:14:48.689 [INFO] [Thread-58969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:14:48.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:14:49.297 [DEBUG] [Thread-58969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:14:49.297 [DEBUG] [Thread-58969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:14:49.298 [DEBUG] [Thread-58969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:14:49.338 [DEBUG] [Thread-58969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:14:49.339 [DEBUG] [Thread-58969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:14:49.341 [DEBUG] [Thread-58969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:14:49.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:14:49.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:14:49.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:14:49.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:14:49.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:14:49.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:14:49.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:14:49.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:14:49.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:14:49.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.676440 -999.00  +21.40  23.84     20   -2.40 1 1 1 1 1   887    0 23.72 13.52 ----- 21.6 23.8 289.0 31.0 23.2 -26.4 23.3 -25.4 23.2 -26.2 23.6 -26.3
2025-11-17T18:14:49.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:14:49.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:14:49.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.676440
2025-11-17T18:14:49.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:14:49.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:14:49.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:14:49.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:14:49.367 [DEBUG] [Thread-58969] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:14:49.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:14:49.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:14:22', tmtdew=28.63, humidity=14.24, cloud=0.0, wind=30.95, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:14:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:14:49.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:14:49.468 [DEBUG] [Thread-58972] [transport.py] [_log()] starting thread (client mode): 0xd07cef80
2025-11-17T18:14:49.468 [DEBUG] [Thread-58972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:14:49.482 [DEBUG] [Thread-58972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:14:49.483 [INFO] [Thread-58972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:14:49.490 [DEBUG] [Thread-58972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:14:49.490 [DEBUG] [Thread-58972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:14:49.490 [DEBUG] [Thread-58972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:14:49.490 [DEBUG] [Thread-58972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] client lang: <none>
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] server lang: <none>
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] kex follows: False
2025-11-17T18:14:49.491 [DEBUG] [Thread-58972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:14:49.492 [DEBUG] [Thread-58972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:14:49.492 [DEBUG] [Thread-58972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:14:49.492 [DEBUG] [Thread-58972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:14:49.492 [DEBUG] [Thread-58972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:14:49.492 [DEBUG] [Thread-58972] [transport.py] [_log()] Compression: none
2025-11-17T18:14:49.492 [DEBUG] [Thread-58972] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:14:49.549 [DEBUG] [Thread-58972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:14:49.550 [DEBUG] [Thread-58972] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:14:49.550 [DEBUG] [Thread-58972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:14:49.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:14:49.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:14:49.604 [DEBUG] [Thread-58972] [transport.py] [_log()] userauth is OK
2025-11-17T18:14:49.605 [DEBUG] [Thread-58972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:14:49.605 [DEBUG] [Thread-58972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:14:49.605 [DEBUG] [Thread-58972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:14:49.605 [DEBUG] [Thread-58972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:14:49.624 [INFO] [Thread-58972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:14:49.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:14:49.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:14:50.486 [DEBUG] [Thread-58972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:14:50.486 [DEBUG] [Thread-58972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:14:50.534 [DEBUG] [Thread-58972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:14:50.534 [DEBUG] [Thread-58972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:14:50.543 [DEBUG] [Thread-58972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:14:50.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:14:50.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:14:50.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:14:50.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:14:50.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:14:50.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:14:50.577 [DEBUG] [Thread-58972] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:14:57.562 [DEBUG] [Thread-58974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:15:12.603 [DEBUG] [Thread-58975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:15:20.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:15:20.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:15:20.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:15:21.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 14, 54), 28.6, 14.25, 0.0, 33.07, 21.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:15:21.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:14:54
2025-11-17T18:15:21.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:15:21.497 [DEBUG] [Thread-58976] [transport.py] [_log()] starting thread (client mode): 0xd078e8f0
2025-11-17T18:15:21.497 [DEBUG] [Thread-58976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:15:21.517 [DEBUG] [Thread-58976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:15:21.517 [INFO] [Thread-58976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:15:21.520 [DEBUG] [Thread-58976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] client lang: <none>
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] server lang: <none>
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] kex follows: False
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] Compression: none
2025-11-17T18:15:21.521 [DEBUG] [Thread-58976] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:15:21.539 [DEBUG] [Thread-58976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:15:21.540 [DEBUG] [Thread-58976] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:15:21.540 [DEBUG] [Thread-58976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:15:21.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:15:21.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:15:21.542 [DEBUG] [Thread-58976] [transport.py] [_log()] userauth is OK
2025-11-17T18:15:21.543 [DEBUG] [Thread-58976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:15:21.543 [DEBUG] [Thread-58976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:15:21.543 [DEBUG] [Thread-58976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:15:21.543 [DEBUG] [Thread-58976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:15:21.578 [INFO] [Thread-58976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:15:21.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:15:22.155 [DEBUG] [Thread-58976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:15:22.155 [DEBUG] [Thread-58976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:15:22.155 [DEBUG] [Thread-58976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:15:22.195 [DEBUG] [Thread-58976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:15:22.196 [DEBUG] [Thread-58976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:15:22.198 [DEBUG] [Thread-58976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:15:22.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:15:22.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:15:22.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:15:22.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:15:22.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:15:22.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:15:22.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:15:22.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:15:22.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:15:22.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.676787 -999.00  +21.60  22.18     19   -2.40 1 1 1 1 1   887    0 24.57 12.36 ----- 20.7 22.2 294.3 26.5 23.2 -26.0 23.3 -25.2 23.3 -25.2 23.6 -26.0
2025-11-17T18:15:22.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:15:22.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:15:22.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.676787
2025-11-17T18:15:22.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:15:22.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:15:22.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:15:22.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:15:22.224 [DEBUG] [Thread-58976] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:15:22.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:15:22.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:14:54', tmtdew=28.6, humidity=14.25, cloud=0.0, wind=33.07, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:14:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:15:22.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:15:22.320 [DEBUG] [Thread-58979] [transport.py] [_log()] starting thread (client mode): 0xd31b0fa0
2025-11-17T18:15:22.320 [DEBUG] [Thread-58979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:15:22.334 [DEBUG] [Thread-58979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:15:22.334 [INFO] [Thread-58979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] client lang: <none>
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] server lang: <none>
2025-11-17T18:15:22.342 [DEBUG] [Thread-58979] [transport.py] [_log()] kex follows: False
2025-11-17T18:15:22.343 [DEBUG] [Thread-58979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:15:22.343 [DEBUG] [Thread-58979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:15:22.343 [DEBUG] [Thread-58979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:15:22.343 [DEBUG] [Thread-58979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:15:22.343 [DEBUG] [Thread-58979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:15:22.343 [DEBUG] [Thread-58979] [transport.py] [_log()] Compression: none
2025-11-17T18:15:22.343 [DEBUG] [Thread-58979] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:15:22.410 [DEBUG] [Thread-58979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:15:22.410 [DEBUG] [Thread-58979] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:15:22.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:15:22.412 [DEBUG] [Thread-58979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:15:22.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:15:22.469 [DEBUG] [Thread-58979] [transport.py] [_log()] userauth is OK
2025-11-17T18:15:22.469 [DEBUG] [Thread-58979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:15:22.469 [DEBUG] [Thread-58979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:15:22.469 [DEBUG] [Thread-58979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:15:22.469 [DEBUG] [Thread-58979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:15:22.488 [INFO] [Thread-58979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:15:22.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:15:22.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:15:23.357 [DEBUG] [Thread-58979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:15:23.357 [DEBUG] [Thread-58979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:15:23.409 [DEBUG] [Thread-58979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:15:23.409 [DEBUG] [Thread-58979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:15:23.417 [DEBUG] [Thread-58979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:15:23.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:15:23.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:15:23.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:15:23.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:15:23.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:15:23.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:15:23.457 [DEBUG] [Thread-58979] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:15:27.557 [DEBUG] [Thread-58981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:15:27.632 [DEBUG] [Thread-58982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:15:32.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:15:32.448 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:15:42.663 [DEBUG] [Thread-58983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:15:53.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:15:53.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:15:53.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:15:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 15, 26), 28.54, 14.29, 0.0, 32.29, 21.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:15:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:15:26
2025-11-17T18:15:54.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:15:54.391 [DEBUG] [Thread-58984] [transport.py] [_log()] starting thread (client mode): 0xd31b2620
2025-11-17T18:15:54.392 [DEBUG] [Thread-58984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:15:54.413 [DEBUG] [Thread-58984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:15:54.413 [INFO] [Thread-58984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:15:54.416 [DEBUG] [Thread-58984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:15:54.416 [DEBUG] [Thread-58984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:15:54.416 [DEBUG] [Thread-58984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:15:54.416 [DEBUG] [Thread-58984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:15:54.416 [DEBUG] [Thread-58984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:15:54.416 [DEBUG] [Thread-58984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] client lang: <none>
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] server lang: <none>
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] kex follows: False
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:15:54.417 [DEBUG] [Thread-58984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:15:54.418 [DEBUG] [Thread-58984] [transport.py] [_log()] Compression: none
2025-11-17T18:15:54.418 [DEBUG] [Thread-58984] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:15:54.435 [DEBUG] [Thread-58984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:15:54.436 [DEBUG] [Thread-58984] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:15:54.437 [DEBUG] [Thread-58984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:15:54.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:15:54.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:15:54.439 [DEBUG] [Thread-58984] [transport.py] [_log()] userauth is OK
2025-11-17T18:15:54.439 [DEBUG] [Thread-58984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:15:54.440 [DEBUG] [Thread-58984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:15:54.440 [DEBUG] [Thread-58984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:15:54.440 [DEBUG] [Thread-58984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:15:54.464 [INFO] [Thread-58984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:15:54.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:15:55.109 [DEBUG] [Thread-58984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:15:55.109 [DEBUG] [Thread-58984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:15:55.109 [DEBUG] [Thread-58984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:15:55.149 [DEBUG] [Thread-58984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:15:55.150 [DEBUG] [Thread-58984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:15:55.152 [DEBUG] [Thread-58984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:15:55.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:15:55.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:15:55.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:15:55.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:15:55.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:15:55.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:15:55.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:15:55.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:15:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:15:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.677482 -999.00  +21.50  22.43     19   -2.40 1 1 1 1 1   887    0 23.74 10.06 ----- 20.9 22.4 273.4 32.6 23.2 -26.5 23.2 -25.2 23.1 -25.5 23.5 -26.2
2025-11-17T18:15:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:15:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:15:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.677482
2025-11-17T18:15:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:15:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:15:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:15:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:15:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:15:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:15:26', tmtdew=28.54, humidity=14.29, cloud=0.0, wind=32.29, temperature=21.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:15:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:15:55.176 [DEBUG] [Thread-58984] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:15:55.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:15:55.270 [DEBUG] [Thread-58987] [transport.py] [_log()] starting thread (client mode): 0xd31b0ee0
2025-11-17T18:15:55.270 [DEBUG] [Thread-58987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:15:55.285 [DEBUG] [Thread-58987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:15:55.285 [INFO] [Thread-58987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:15:55.292 [DEBUG] [Thread-58987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:15:55.292 [DEBUG] [Thread-58987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] client lang: <none>
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] server lang: <none>
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] kex follows: False
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] Compression: none
2025-11-17T18:15:55.293 [DEBUG] [Thread-58987] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:15:55.353 [DEBUG] [Thread-58987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:15:55.353 [DEBUG] [Thread-58987] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:15:55.353 [DEBUG] [Thread-58987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:15:55.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:15:55.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:15:55.409 [DEBUG] [Thread-58987] [transport.py] [_log()] userauth is OK
2025-11-17T18:15:55.409 [DEBUG] [Thread-58987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:15:55.409 [DEBUG] [Thread-58987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:15:55.409 [DEBUG] [Thread-58987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:15:55.409 [DEBUG] [Thread-58987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:15:55.429 [INFO] [Thread-58987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:15:55.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:15:55.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:15:56.273 [DEBUG] [Thread-58987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:15:56.273 [DEBUG] [Thread-58987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:15:56.321 [DEBUG] [Thread-58987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:15:56.321 [DEBUG] [Thread-58987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:15:56.330 [DEBUG] [Thread-58987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:15:56.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:15:56.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:15:56.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:15:56.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:15:56.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:15:56.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:15:56.364 [DEBUG] [Thread-58987] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:15:57.698 [DEBUG] [Thread-58989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:16:12.748 [DEBUG] [Thread-58990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:16:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:16:26.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:16:26.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:16:27.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 15, 58), 28.38, 14.39, 0.0, 29.18, 21.53, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:16:27.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:15:58
2025-11-17T18:16:27.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:16:27.316 [DEBUG] [Thread-58991] [transport.py] [_log()] starting thread (client mode): 0xd31b3a00
2025-11-17T18:16:27.316 [DEBUG] [Thread-58991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:16:27.334 [DEBUG] [Thread-58991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:16:27.335 [INFO] [Thread-58991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:16:27.338 [DEBUG] [Thread-58991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:16:27.338 [DEBUG] [Thread-58991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] client lang: <none>
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] server lang: <none>
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] kex follows: False
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:16:27.339 [DEBUG] [Thread-58991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:16:27.340 [DEBUG] [Thread-58991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:16:27.340 [DEBUG] [Thread-58991] [transport.py] [_log()] Compression: none
2025-11-17T18:16:27.340 [DEBUG] [Thread-58991] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:16:27.352 [DEBUG] [Thread-58991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:16:27.352 [DEBUG] [Thread-58991] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:16:27.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:16:27.353 [DEBUG] [Thread-58991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:16:27.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:16:27.355 [DEBUG] [Thread-58991] [transport.py] [_log()] userauth is OK
2025-11-17T18:16:27.355 [DEBUG] [Thread-58991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:16:27.355 [DEBUG] [Thread-58991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:16:27.355 [DEBUG] [Thread-58991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:16:27.356 [DEBUG] [Thread-58991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:16:27.380 [INFO] [Thread-58991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:16:27.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:16:27.613 [DEBUG] [Thread-58993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:16:27.774 [DEBUG] [Thread-58994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:16:28.003 [DEBUG] [Thread-58991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:16:28.003 [DEBUG] [Thread-58991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:16:28.003 [DEBUG] [Thread-58991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:16:28.044 [DEBUG] [Thread-58991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:16:28.045 [DEBUG] [Thread-58991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:16:28.047 [DEBUG] [Thread-58991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:16:28.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:16:28.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:16:28.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:16:28.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:16:28.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:16:28.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:16:28.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:16:28.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:16:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:16:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.677829 -999.00  +21.50  19.39     20   -2.30 1 1 1 1 1   887    0 24.21 9.26 ----- 20.5 19.4 286.3 26.5 23.2 -26.7 23.3 -25.0 23.2 -24.1 23.4 -25.8
2025-11-17T18:16:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:16:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:16:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.677829
2025-11-17T18:16:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:16:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:16:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:16:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:16:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:16:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:15:58', tmtdew=28.38, humidity=14.39, cloud=0.0, wind=29.18, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:16:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:16:28.074 [DEBUG] [Thread-58991] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:16:28.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:16:28.170 [DEBUG] [Thread-58996] [transport.py] [_log()] starting thread (client mode): 0xd31b2bc0
2025-11-17T18:16:28.170 [DEBUG] [Thread-58996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:16:28.185 [DEBUG] [Thread-58996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:16:28.185 [INFO] [Thread-58996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:16:28.192 [DEBUG] [Thread-58996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:16:28.192 [DEBUG] [Thread-58996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:16:28.192 [DEBUG] [Thread-58996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] client lang: <none>
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] server lang: <none>
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] kex follows: False
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] Compression: none
2025-11-17T18:16:28.193 [DEBUG] [Thread-58996] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:16:28.248 [DEBUG] [Thread-58996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:16:28.248 [DEBUG] [Thread-58996] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:16:28.249 [DEBUG] [Thread-58996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:16:28.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:16:28.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:16:28.305 [DEBUG] [Thread-58996] [transport.py] [_log()] userauth is OK
2025-11-17T18:16:28.305 [DEBUG] [Thread-58996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:16:28.305 [DEBUG] [Thread-58996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:16:28.305 [DEBUG] [Thread-58996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:16:28.305 [DEBUG] [Thread-58996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:16:28.324 [INFO] [Thread-58996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:16:28.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:16:28.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:16:29.171 [DEBUG] [Thread-58996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:16:29.171 [DEBUG] [Thread-58996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:16:29.218 [DEBUG] [Thread-58996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:16:29.218 [DEBUG] [Thread-58996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:16:29.227 [DEBUG] [Thread-58996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:16:29.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:16:29.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:16:29.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:16:29.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:16:29.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:16:29.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:16:29.262 [DEBUG] [Thread-58996] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:16:32.591 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:16:32.592 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:16:42.810 [DEBUG] [Thread-58998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:16:57.855 [DEBUG] [Thread-58999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:16:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:16:59.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:16:59.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:16:59.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 16, 30), 28.37, 14.4, 0.0, 28.53, 21.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:16:59.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:16:30
2025-11-17T18:17:00.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:17:00.178 [DEBUG] [Thread-59000] [transport.py] [_log()] starting thread (client mode): 0xd31b0df0
2025-11-17T18:17:00.179 [DEBUG] [Thread-59000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:17:00.199 [DEBUG] [Thread-59000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:17:00.199 [INFO] [Thread-59000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:17:00.202 [DEBUG] [Thread-59000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:17:00.202 [DEBUG] [Thread-59000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:17:00.202 [DEBUG] [Thread-59000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:17:00.202 [DEBUG] [Thread-59000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:17:00.202 [DEBUG] [Thread-59000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:17:00.202 [DEBUG] [Thread-59000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:17:00.202 [DEBUG] [Thread-59000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] client lang: <none>
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] server lang: <none>
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] kex follows: False
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] Compression: none
2025-11-17T18:17:00.203 [DEBUG] [Thread-59000] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:17:00.221 [DEBUG] [Thread-59000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:17:00.222 [DEBUG] [Thread-59000] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:17:00.222 [DEBUG] [Thread-59000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:17:00.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:17:00.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:17:00.224 [DEBUG] [Thread-59000] [transport.py] [_log()] userauth is OK
2025-11-17T18:17:00.224 [DEBUG] [Thread-59000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:17:00.225 [DEBUG] [Thread-59000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:17:00.225 [DEBUG] [Thread-59000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:17:00.225 [DEBUG] [Thread-59000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:17:00.260 [INFO] [Thread-59000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:17:00.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:17:00.911 [DEBUG] [Thread-59000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:17:00.911 [DEBUG] [Thread-59000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:17:00.911 [DEBUG] [Thread-59000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:17:00.952 [DEBUG] [Thread-59000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:17:00.952 [DEBUG] [Thread-59000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:17:00.955 [DEBUG] [Thread-59000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:17:00.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:17:00.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:17:00.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:17:00.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:17:00.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:17:00.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:17:00.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:17:00.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:17:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:17:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.678176 -999.00  +21.50  17.41     19   -2.40 1 1 1 1 1   887    0 24.37 9.80 ----- 22.9 17.4 277.2 26.8 23.2 -26.2 23.3 -25.0 23.4 -25.0 23.5 -25.4
2025-11-17T18:17:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:17:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:17:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.678176
2025-11-17T18:17:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:17:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:17:00.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:17:00.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:17:00.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:17:00.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:16:30', tmtdew=28.37, humidity=14.4, cloud=0.0, wind=28.53, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:16:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:17:00.979 [DEBUG] [Thread-59000] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:17:01.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:17:01.073 [DEBUG] [Thread-59003] [transport.py] [_log()] starting thread (client mode): 0xd31b2050
2025-11-17T18:17:01.073 [DEBUG] [Thread-59003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:17:01.087 [DEBUG] [Thread-59003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:17:01.087 [INFO] [Thread-59003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] client lang: <none>
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] server lang: <none>
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] kex follows: False
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:17:01.095 [DEBUG] [Thread-59003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:17:01.096 [DEBUG] [Thread-59003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:17:01.096 [DEBUG] [Thread-59003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:17:01.096 [DEBUG] [Thread-59003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:17:01.096 [DEBUG] [Thread-59003] [transport.py] [_log()] Compression: none
2025-11-17T18:17:01.096 [DEBUG] [Thread-59003] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:17:01.153 [DEBUG] [Thread-59003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:17:01.153 [DEBUG] [Thread-59003] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:17:01.153 [DEBUG] [Thread-59003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:17:01.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:17:01.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:17:01.209 [DEBUG] [Thread-59003] [transport.py] [_log()] userauth is OK
2025-11-17T18:17:01.209 [DEBUG] [Thread-59003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:17:01.210 [DEBUG] [Thread-59003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:17:01.210 [DEBUG] [Thread-59003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:17:01.210 [DEBUG] [Thread-59003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:17:01.228 [INFO] [Thread-59003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:17:01.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:17:01.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:17:02.088 [DEBUG] [Thread-59003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:17:02.088 [DEBUG] [Thread-59003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:17:02.136 [DEBUG] [Thread-59003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:17:02.136 [DEBUG] [Thread-59003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:17:02.145 [DEBUG] [Thread-59003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:17:02.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:17:02.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:17: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
2025-11-17T18:17:02.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:17:02.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:17:02.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:17:02.178 [DEBUG] [Thread-59003] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:17:12.892 [DEBUG] [Thread-59005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:17:27.642 [DEBUG] [Thread-59006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:17:27.927 [DEBUG] [Thread-59007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:17:32.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:17:32.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:17:32.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:17:32.732 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:17:32.733 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:17:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 17, 2), 28.35, 14.44, 0.0, 26.24, 21.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:17:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:17:02
2025-11-17T18:17:32.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:17:33.134 [DEBUG] [Thread-59008] [transport.py] [_log()] starting thread (client mode): 0xd31b23b0
2025-11-17T18:17:33.134 [DEBUG] [Thread-59008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:17:33.155 [DEBUG] [Thread-59008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:17:33.155 [INFO] [Thread-59008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] client lang: <none>
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] server lang: <none>
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] kex follows: False
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] Compression: none
2025-11-17T18:17:33.159 [DEBUG] [Thread-59008] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:17:33.175 [DEBUG] [Thread-59008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:17:33.176 [DEBUG] [Thread-59008] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:17:33.176 [DEBUG] [Thread-59008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:17:33.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:17:33.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:17:33.177 [DEBUG] [Thread-59008] [transport.py] [_log()] userauth is OK
2025-11-17T18:17:33.177 [DEBUG] [Thread-59008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:17:33.177 [DEBUG] [Thread-59008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:17:33.177 [DEBUG] [Thread-59008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:17:33.177 [DEBUG] [Thread-59008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:17:33.192 [INFO] [Thread-59008] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:17:33.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:17:33.819 [DEBUG] [Thread-59008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:17:33.819 [DEBUG] [Thread-59008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:17:33.819 [DEBUG] [Thread-59008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:17:33.860 [DEBUG] [Thread-59008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:17:33.860 [DEBUG] [Thread-59008] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:17:33.862 [DEBUG] [Thread-59008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:17:33.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:17:33.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:17:33.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:17:33.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:17:33.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:17:33.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:17:33.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.678523 -999.00  +21.50  21.25     19   -2.30 1 1 1 1 1   887    0 24.42 9.88 ----- 20.3 21.2 294.2 25.4 23.2 -26.5 23.4 -25.3 23.4 -24.4 23.6 -25.6
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.678523
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:17:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:17:02', tmtdew=28.35, humidity=14.44, cloud=0.0, wind=26.24, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:17:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:17:33.882 [DEBUG] [Thread-59008] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:17:33.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:17:33.966 [DEBUG] [Thread-59011] [transport.py] [_log()] starting thread (client mode): 0xd31b34f0
2025-11-17T18:17:33.966 [DEBUG] [Thread-59011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:17:33.980 [DEBUG] [Thread-59011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:17:33.980 [INFO] [Thread-59011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] client lang: <none>
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] server lang: <none>
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] kex follows: False
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:17:33.988 [DEBUG] [Thread-59011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:17:33.989 [DEBUG] [Thread-59011] [transport.py] [_log()] Compression: none
2025-11-17T18:17:33.989 [DEBUG] [Thread-59011] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:17:34.043 [DEBUG] [Thread-59011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:17:34.043 [DEBUG] [Thread-59011] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:17:34.044 [DEBUG] [Thread-59011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:17:34.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:17:34.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:17:34.100 [DEBUG] [Thread-59011] [transport.py] [_log()] userauth is OK
2025-11-17T18:17:34.100 [DEBUG] [Thread-59011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:17:34.101 [DEBUG] [Thread-59011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:17:34.101 [DEBUG] [Thread-59011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:17:34.101 [DEBUG] [Thread-59011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:17:34.114 [INFO] [Thread-59011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:17:34.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:17:34.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:17:34.958 [DEBUG] [Thread-59011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:17:34.958 [DEBUG] [Thread-59011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:17:35.006 [DEBUG] [Thread-59011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:17:35.006 [DEBUG] [Thread-59011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:17:35.017 [DEBUG] [Thread-59011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:17:35.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:17:35.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:17:35.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:17:35.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:17:35.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:17:35.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:17:35.051 [DEBUG] [Thread-59011] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:17:42.954 [DEBUG] [Thread-59013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:17:57.993 [DEBUG] [Thread-59014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:18:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:18:05.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:18:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:18:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 17, 34), 28.46, 14.39, 0.0, 23.19, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:18:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:17:34
2025-11-17T18:18:05.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:18:05.984 [DEBUG] [Thread-59015] [transport.py] [_log()] starting thread (client mode): 0xd31b0820
2025-11-17T18:18:05.985 [DEBUG] [Thread-59015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:18:06.004 [DEBUG] [Thread-59015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:18:06.004 [INFO] [Thread-59015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:18:06.007 [DEBUG] [Thread-59015] [transport.py] [_log()] client lang: <none>
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] server lang: <none>
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] kex follows: False
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] Compression: none
2025-11-17T18:18:06.008 [DEBUG] [Thread-59015] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:18:06.029 [DEBUG] [Thread-59015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:18:06.029 [DEBUG] [Thread-59015] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:18:06.030 [DEBUG] [Thread-59015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:18:06.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:18:06.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:18:06.032 [DEBUG] [Thread-59015] [transport.py] [_log()] userauth is OK
2025-11-17T18:18:06.032 [DEBUG] [Thread-59015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:18:06.032 [DEBUG] [Thread-59015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:18:06.032 [DEBUG] [Thread-59015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:18:06.032 [DEBUG] [Thread-59015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:18:06.055 [INFO] [Thread-59015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:18:06.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:18:06.686 [DEBUG] [Thread-59015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:18:06.686 [DEBUG] [Thread-59015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:18:06.686 [DEBUG] [Thread-59015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:18:06.727 [DEBUG] [Thread-59015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:18:06.727 [DEBUG] [Thread-59015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:18:06.729 [DEBUG] [Thread-59015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:18:06.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:18:06.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:18:06.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:18:06.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:18:06.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:18:06.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:18:06.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.678870 -999.00  +21.60  20.24     19   -2.30 1 1 1 1 1   887    0 24.26 10.44 ----- 22.7 20.2 295.6 25.8 23.2 -26.3 23.4 -25.2 23.6 -24.7 23.7 -25.5
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.678870
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:18:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:17:34', tmtdew=28.46, humidity=14.39, cloud=0.0, wind=23.19, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:17:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:18:06.748 [DEBUG] [Thread-59015] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:18:06.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:18:06.833 [DEBUG] [Thread-59018] [transport.py] [_log()] starting thread (client mode): 0xd31b2e00
2025-11-17T18:18:06.833 [DEBUG] [Thread-59018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:18:06.848 [DEBUG] [Thread-59018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:18:06.848 [INFO] [Thread-59018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:18:06.855 [DEBUG] [Thread-59018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:18:06.855 [DEBUG] [Thread-59018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:18:06.855 [DEBUG] [Thread-59018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:18:06.855 [DEBUG] [Thread-59018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] client lang: <none>
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] server lang: <none>
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] kex follows: False
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] Compression: none
2025-11-17T18:18:06.856 [DEBUG] [Thread-59018] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:18:06.912 [DEBUG] [Thread-59018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:18:06.912 [DEBUG] [Thread-59018] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:18:06.912 [DEBUG] [Thread-59018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:18:06.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:18:06.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:18:06.968 [DEBUG] [Thread-59018] [transport.py] [_log()] userauth is OK
2025-11-17T18:18:06.968 [DEBUG] [Thread-59018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:18:06.968 [DEBUG] [Thread-59018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:18:06.968 [DEBUG] [Thread-59018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:18:06.968 [DEBUG] [Thread-59018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:18:06.984 [INFO] [Thread-59018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:18:06.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:18:06.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:18:07.834 [DEBUG] [Thread-59018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:18:07.834 [DEBUG] [Thread-59018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:18:07.882 [DEBUG] [Thread-59018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:18:07.882 [DEBUG] [Thread-59018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:18:07.890 [DEBUG] [Thread-59018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:18:07.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:18:07.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:18:07.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:18:07.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:18:07.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:18:07.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:18:07.921 [DEBUG] [Thread-59018] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:18:13.026 [DEBUG] [Thread-59020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:18:27.692 [DEBUG] [Thread-59021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:18:28.071 [DEBUG] [Thread-59022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:18:32.872 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:18:32.873 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:18:37.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:18:37.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:18:37.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:18:38.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 18, 6), 28.54, 14.32, 0.0, 23.52, 21.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:18:38.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:18:06
2025-11-17T18:18:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:18:38.871 [DEBUG] [Thread-59023] [transport.py] [_log()] starting thread (client mode): 0xd31b1d80
2025-11-17T18:18:38.871 [DEBUG] [Thread-59023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:18:38.884 [DEBUG] [Thread-59023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:18:38.884 [INFO] [Thread-59023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] client lang: <none>
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] server lang: <none>
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] kex follows: False
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] Compression: none
2025-11-17T18:18:38.888 [DEBUG] [Thread-59023] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:18:38.908 [DEBUG] [Thread-59023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:18:38.908 [DEBUG] [Thread-59023] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:18:38.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:18:38.908 [DEBUG] [Thread-59023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:18:38.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:18:38.909 [DEBUG] [Thread-59023] [transport.py] [_log()] userauth is OK
2025-11-17T18:18:38.909 [DEBUG] [Thread-59023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:18:38.909 [DEBUG] [Thread-59023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:18:38.909 [DEBUG] [Thread-59023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:18:38.909 [DEBUG] [Thread-59023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:18:38.925 [INFO] [Thread-59023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:18:38.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:18:39.535 [DEBUG] [Thread-59023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:18:39.535 [DEBUG] [Thread-59023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:18:39.535 [DEBUG] [Thread-59023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:18:39.576 [DEBUG] [Thread-59023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:18:39.576 [DEBUG] [Thread-59023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:18:39.578 [DEBUG] [Thread-59023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:18:39.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:18:39.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:18:39.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:18:39.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:18:39.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:18:39.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:18:39.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.679218 -999.00  +21.70  21.15     19   -2.30 1 1 1 1 1   887    0 23.76 10.25 ----- 20.9 21.1 288.0 29.6 23.2 -26.4 23.4 -25.0 23.6 -24.8 23.8 -25.6
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.679218
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:18:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:18:06', tmtdew=28.54, humidity=14.32, cloud=0.0, wind=23.52, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:18:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:18:39.597 [DEBUG] [Thread-59023] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:18:39.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:18:39.683 [DEBUG] [Thread-59026] [transport.py] [_log()] starting thread (client mode): 0xd31b1ab0
2025-11-17T18:18:39.683 [DEBUG] [Thread-59026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:18:39.697 [DEBUG] [Thread-59026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:18:39.697 [INFO] [Thread-59026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:18:39.704 [DEBUG] [Thread-59026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:18:39.704 [DEBUG] [Thread-59026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:18:39.704 [DEBUG] [Thread-59026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:18:39.704 [DEBUG] [Thread-59026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:18:39.704 [DEBUG] [Thread-59026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:18:39.704 [DEBUG] [Thread-59026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:18:39.704 [DEBUG] [Thread-59026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:18:39.704 [DEBUG] [Thread-59026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] client lang: <none>
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] server lang: <none>
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] kex follows: False
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] Compression: none
2025-11-17T18:18:39.705 [DEBUG] [Thread-59026] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:18:39.767 [DEBUG] [Thread-59026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:18:39.767 [DEBUG] [Thread-59026] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:18:39.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:18:39.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:18:39.768 [DEBUG] [Thread-59026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:18:39.824 [DEBUG] [Thread-59026] [transport.py] [_log()] userauth is OK
2025-11-17T18:18:39.824 [DEBUG] [Thread-59026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:18:39.824 [DEBUG] [Thread-59026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:18:39.824 [DEBUG] [Thread-59026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:18:39.824 [DEBUG] [Thread-59026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:18:39.841 [INFO] [Thread-59026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:18:39.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:18:39.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:18:40.690 [DEBUG] [Thread-59026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:18:40.690 [DEBUG] [Thread-59026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:18:40.737 [DEBUG] [Thread-59026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:18:40.738 [DEBUG] [Thread-59026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:18:40.747 [DEBUG] [Thread-59026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:18:40.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:18:40.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:18:40.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:18:40.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:18:40.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:18:40.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:18:40.782 [DEBUG] [Thread-59026] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:18:43.101 [DEBUG] [Thread-59028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:18:58.140 [DEBUG] [Thread-59029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:19:10.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:19:10.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:19:10.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:19:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 18, 38), 28.74, 13.82, 0.0, 25.6, 21.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:19:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:18:38
2025-11-17T18:19:11.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:19:11.760 [DEBUG] [Thread-59030] [transport.py] [_log()] starting thread (client mode): 0xd31b1a20
2025-11-17T18:19:11.760 [DEBUG] [Thread-59030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:19:11.780 [DEBUG] [Thread-59030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:19:11.780 [INFO] [Thread-59030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] client lang: <none>
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] server lang: <none>
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] kex follows: False
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] Compression: none
2025-11-17T18:19:11.783 [DEBUG] [Thread-59030] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:19:11.798 [DEBUG] [Thread-59030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:19:11.799 [DEBUG] [Thread-59030] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:19:11.799 [DEBUG] [Thread-59030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:19:11.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:19:11.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:19:11.800 [DEBUG] [Thread-59030] [transport.py] [_log()] userauth is OK
2025-11-17T18:19:11.800 [DEBUG] [Thread-59030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:19:11.800 [DEBUG] [Thread-59030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:19:11.800 [DEBUG] [Thread-59030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:19:11.800 [DEBUG] [Thread-59030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:19:11.809 [INFO] [Thread-59030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:19:11.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:19:12.437 [DEBUG] [Thread-59030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:19:12.437 [DEBUG] [Thread-59030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:19:12.438 [DEBUG] [Thread-59030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:19:12.478 [DEBUG] [Thread-59030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:19:12.478 [DEBUG] [Thread-59030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:19:12.480 [DEBUG] [Thread-59030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:19:12.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:19:12.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:19:12.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:19:12.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:19:12.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:19:12.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:19:12.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.679565 -999.00  +21.80  17.89     19   -2.30 1 1 1 1 1   887    0 24.87 9.69 ----- 20.9 17.9 293.8 25.7 23.2 -26.4 23.5 -25.1 23.7 -24.4 23.9 -25.8
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.679565
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:19:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:19:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:19:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:18:38', tmtdew=28.74, humidity=13.82, cloud=0.0, wind=25.6, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:18:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:19:12.498 [DEBUG] [Thread-59030] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:19:12.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:19:12.582 [DEBUG] [Thread-59033] [transport.py] [_log()] starting thread (client mode): 0xd31b37f0
2025-11-17T18:19:12.582 [DEBUG] [Thread-59033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:19:12.596 [DEBUG] [Thread-59033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:19:12.597 [INFO] [Thread-59033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] client lang: <none>
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] server lang: <none>
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] kex follows: False
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:19:12.604 [DEBUG] [Thread-59033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:19:12.605 [DEBUG] [Thread-59033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:19:12.605 [DEBUG] [Thread-59033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:19:12.605 [DEBUG] [Thread-59033] [transport.py] [_log()] Compression: none
2025-11-17T18:19:12.605 [DEBUG] [Thread-59033] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:19:12.660 [DEBUG] [Thread-59033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:19:12.660 [DEBUG] [Thread-59033] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:19:12.661 [DEBUG] [Thread-59033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:19:12.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:19:12.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:19:12.721 [DEBUG] [Thread-59033] [transport.py] [_log()] userauth is OK
2025-11-17T18:19:12.721 [DEBUG] [Thread-59033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:19:12.722 [DEBUG] [Thread-59033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:19:12.722 [DEBUG] [Thread-59033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:19:12.722 [DEBUG] [Thread-59033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:19:12.741 [INFO] [Thread-59033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:19:12.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:19:12.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:19:13.171 [DEBUG] [Thread-59035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:19:13.592 [DEBUG] [Thread-59033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:19:13.592 [DEBUG] [Thread-59033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:19:13.640 [DEBUG] [Thread-59033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:19:13.640 [DEBUG] [Thread-59033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:19:13.649 [DEBUG] [Thread-59033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:19:13.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:19:13.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:19:13.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:19:13.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:19:13.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:19:13.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:19:13.684 [DEBUG] [Thread-59033] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:19:27.741 [DEBUG] [Thread-59036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:19:28.218 [DEBUG] [Thread-59037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:19:33.014 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:19:33.015 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:19:43.245 [DEBUG] [Thread-59038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:19:43.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:19:43.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:19:43.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:19:44.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 19, 10), 28.65, 13.89, 0.0, 27.24, 21.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:19:44.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:19:10
2025-11-17T18:19:44.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:19:44.679 [DEBUG] [Thread-59039] [transport.py] [_log()] starting thread (client mode): 0xd31b2350
2025-11-17T18:19:44.679 [DEBUG] [Thread-59039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:19:44.700 [DEBUG] [Thread-59039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:19:44.701 [INFO] [Thread-59039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] client lang: <none>
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] server lang: <none>
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] kex follows: False
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] Compression: none
2025-11-17T18:19:44.704 [DEBUG] [Thread-59039] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:19:44.721 [DEBUG] [Thread-59039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:19:44.721 [DEBUG] [Thread-59039] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:19:44.721 [DEBUG] [Thread-59039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:19:44.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:19:44.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:19:44.723 [DEBUG] [Thread-59039] [transport.py] [_log()] userauth is OK
2025-11-17T18:19:44.724 [DEBUG] [Thread-59039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:19:44.724 [DEBUG] [Thread-59039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:19:44.724 [DEBUG] [Thread-59039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:19:44.724 [DEBUG] [Thread-59039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:19:44.759 [INFO] [Thread-59039] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:19:44.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:19:45.376 [DEBUG] [Thread-59039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:19:45.376 [DEBUG] [Thread-59039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:19:45.377 [DEBUG] [Thread-59039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:19:45.416 [DEBUG] [Thread-59039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:19:45.416 [DEBUG] [Thread-59039] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:19:45.419 [DEBUG] [Thread-59039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:19:45.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:19:45.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:19:45.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:19:45.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:19:45.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:19:45.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:19:45.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:19:45.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:19:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:19:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.679912 -999.00  +21.80  25.10     19   -2.40 1 1 1 1 1   887    0 24.04 11.05 ----- 24.7 25.1 281.6 28.1 23.2 -26.5 23.5 -25.1 23.7 -25.3 24.0 -26.0
2025-11-17T18:19:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:19:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:19:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.679912
2025-11-17T18:19:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:19:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:19:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:19:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:19:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:19:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:19:10', tmtdew=28.65, humidity=13.89, cloud=0.0, wind=27.24, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:19:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:19:45.443 [DEBUG] [Thread-59039] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:19:45.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:19:45.552 [DEBUG] [Thread-59042] [transport.py] [_log()] starting thread (client mode): 0xd31b2890
2025-11-17T18:19:45.552 [DEBUG] [Thread-59042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:19:45.567 [DEBUG] [Thread-59042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:19:45.567 [INFO] [Thread-59042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:19:45.574 [DEBUG] [Thread-59042] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:19:45.575 [DEBUG] [Thread-59042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:19:45.575 [DEBUG] [Thread-59042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:19:45.575 [DEBUG] [Thread-59042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:19:45.575 [DEBUG] [Thread-59042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:19:45.575 [DEBUG] [Thread-59042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:19:45.575 [DEBUG] [Thread-59042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:19:45.575 [DEBUG] [Thread-59042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:19:45.575 [DEBUG] [Thread-59042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] client lang: <none>
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] server lang: <none>
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] kex follows: False
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:19:45.576 [DEBUG] [Thread-59042] [transport.py] [_log()] Compression: none
2025-11-17T18:19:45.577 [DEBUG] [Thread-59042] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:19:45.633 [DEBUG] [Thread-59042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:19:45.633 [DEBUG] [Thread-59042] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:19:45.634 [DEBUG] [Thread-59042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:19:45.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:19:45.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:19:45.689 [DEBUG] [Thread-59042] [transport.py] [_log()] userauth is OK
2025-11-17T18:19:45.689 [DEBUG] [Thread-59042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:19:45.689 [DEBUG] [Thread-59042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:19:45.689 [DEBUG] [Thread-59042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:19:45.689 [DEBUG] [Thread-59042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:19:45.708 [INFO] [Thread-59042] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:19:45.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:19:45.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:19:46.644 [DEBUG] [Thread-59042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:19:46.644 [DEBUG] [Thread-59042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:19:46.691 [DEBUG] [Thread-59042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:19:46.692 [DEBUG] [Thread-59042] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:19:46.700 [DEBUG] [Thread-59042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:19:46.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:19:46.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:19:46.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:19:46.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:19:46.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:19:46.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:19:46.734 [DEBUG] [Thread-59042] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:19:58.275 [DEBUG] [Thread-59044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:20:13.317 [DEBUG] [Thread-59045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:20:16.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:20:16.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:20:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:20:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 20, 14), 28.84, 13.82, 0.0, 25.58, 22.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:20:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:20:14
2025-11-17T18:20:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:20:17.705 [DEBUG] [Thread-59046] [transport.py] [_log()] starting thread (client mode): 0xd31b2590
2025-11-17T18:20:17.705 [DEBUG] [Thread-59046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:20:17.725 [DEBUG] [Thread-59046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:20:17.725 [INFO] [Thread-59046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] client lang: <none>
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] server lang: <none>
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] kex follows: False
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:20:17.728 [DEBUG] [Thread-59046] [transport.py] [_log()] Compression: none
2025-11-17T18:20:17.729 [DEBUG] [Thread-59046] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:20:17.745 [DEBUG] [Thread-59046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:20:17.746 [DEBUG] [Thread-59046] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:20:17.746 [DEBUG] [Thread-59046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:20:17.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:20:17.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:20:17.748 [DEBUG] [Thread-59046] [transport.py] [_log()] userauth is OK
2025-11-17T18:20:17.748 [DEBUG] [Thread-59046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:20:17.748 [DEBUG] [Thread-59046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:20:17.748 [DEBUG] [Thread-59046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:20:17.749 [DEBUG] [Thread-59046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:20:17.773 [INFO] [Thread-59046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:20:17.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:20:18.427 [DEBUG] [Thread-59046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:20:18.427 [DEBUG] [Thread-59046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:20:18.428 [DEBUG] [Thread-59046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:20:18.468 [DEBUG] [Thread-59046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:20:18.469 [DEBUG] [Thread-59046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:20:18.471 [DEBUG] [Thread-59046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:20:18.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:20:18.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:20:18.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:20:18.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:20:18.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:20:18.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:20:18.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:20:18.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:20:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:20:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.680606 -999.00  +21.80  19.76     19   -2.50 1 1 1 1 1   887    0 23.99 14.40 ----- 22.3 19.8 296.8 26.1 23.3 -26.2 23.5 -24.9 23.8 -24.1 23.9 -25.7
2025-11-17T18:20:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:20:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:20:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.680606
2025-11-17T18:20:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:20:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:20:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:20:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:20:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:20:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:20:14', tmtdew=28.84, humidity=13.82, cloud=0.0, wind=25.58, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:20:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:20:18.496 [DEBUG] [Thread-59046] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:20:18.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:20:18.592 [DEBUG] [Thread-59049] [transport.py] [_log()] starting thread (client mode): 0xd07cdcc0
2025-11-17T18:20:18.592 [DEBUG] [Thread-59049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:20:18.607 [DEBUG] [Thread-59049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:20:18.607 [INFO] [Thread-59049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:20:18.615 [DEBUG] [Thread-59049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:20:18.615 [DEBUG] [Thread-59049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:20:18.615 [DEBUG] [Thread-59049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:20:18.615 [DEBUG] [Thread-59049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:20:18.615 [DEBUG] [Thread-59049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:20:18.615 [DEBUG] [Thread-59049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] client lang: <none>
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] server lang: <none>
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] kex follows: False
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:20:18.616 [DEBUG] [Thread-59049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:20:18.617 [DEBUG] [Thread-59049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:20:18.617 [DEBUG] [Thread-59049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:20:18.617 [DEBUG] [Thread-59049] [transport.py] [_log()] Compression: none
2025-11-17T18:20:18.617 [DEBUG] [Thread-59049] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:20:18.678 [DEBUG] [Thread-59049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:20:18.678 [DEBUG] [Thread-59049] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:20:18.679 [DEBUG] [Thread-59049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:20:18.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:20:18.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:20:18.737 [DEBUG] [Thread-59049] [transport.py] [_log()] userauth is OK
2025-11-17T18:20:18.737 [DEBUG] [Thread-59049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:20:18.737 [DEBUG] [Thread-59049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:20:18.737 [DEBUG] [Thread-59049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:20:18.738 [DEBUG] [Thread-59049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:20:18.759 [INFO] [Thread-59049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:20:18.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:20:18.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:20:19.589 [DEBUG] [Thread-59049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:20:19.589 [DEBUG] [Thread-59049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:20:19.641 [DEBUG] [Thread-59049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:20:19.641 [DEBUG] [Thread-59049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:20:19.650 [DEBUG] [Thread-59049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:20:19.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:20:19.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:20:19.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:20:19.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:20:19.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:20:19.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:20:19.685 [DEBUG] [Thread-59049] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:20:27.792 [DEBUG] [Thread-59051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:20:28.351 [DEBUG] [Thread-59052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:20:33.157 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:20:33.158 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:20:43.393 [DEBUG] [Thread-59053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:20:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:20:49.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:20:49.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:20:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 20, 46), 29.05, 13.67, 0.0, 23.43, 22.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:20:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:20:46
2025-11-17T18:20:50.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:20:50.640 [DEBUG] [Thread-59054] [transport.py] [_log()] starting thread (client mode): 0xd31b0f70
2025-11-17T18:20:50.641 [DEBUG] [Thread-59054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:20:50.661 [DEBUG] [Thread-59054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:20:50.661 [INFO] [Thread-59054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:20:50.665 [DEBUG] [Thread-59054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] client lang: <none>
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] server lang: <none>
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] kex follows: False
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] Compression: none
2025-11-17T18:20:50.666 [DEBUG] [Thread-59054] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:20:50.685 [DEBUG] [Thread-59054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:20:50.685 [DEBUG] [Thread-59054] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:20:50.686 [DEBUG] [Thread-59054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:20:50.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:20:50.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:20:50.688 [DEBUG] [Thread-59054] [transport.py] [_log()] userauth is OK
2025-11-17T18:20:50.688 [DEBUG] [Thread-59054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:20:50.688 [DEBUG] [Thread-59054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:20:50.688 [DEBUG] [Thread-59054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:20:50.688 [DEBUG] [Thread-59054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:20:50.706 [INFO] [Thread-59054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:20:50.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:20:51.327 [DEBUG] [Thread-59054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:20:51.327 [DEBUG] [Thread-59054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:20:51.327 [DEBUG] [Thread-59054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:20:51.368 [DEBUG] [Thread-59054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:20:51.369 [DEBUG] [Thread-59054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:20:51.371 [DEBUG] [Thread-59054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:20:51.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:20:51.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:20:51.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:20:51.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:20:51.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:20:51.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:20:51.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:20:51.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:20:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:20:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.680954 -999.00  +21.80  21.62     19   -2.50 1 1 1 1 1   887    0 24.47 15.35 ----- 18.2 21.6 299.6 26.8 23.2 -26.4 23.5 -24.6 23.7 -23.5 23.9 -25.7
2025-11-17T18:20:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:20:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:20:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.680954
2025-11-17T18:20:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:20:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:20:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:20:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:20:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:20:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:20:46', tmtdew=29.05, humidity=13.67, cloud=0.0, wind=23.43, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:20:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:20:51.397 [DEBUG] [Thread-59054] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:20:51.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:20:51.491 [DEBUG] [Thread-59057] [transport.py] [_log()] starting thread (client mode): 0xd31b3640
2025-11-17T18:20:51.492 [DEBUG] [Thread-59057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:20:51.506 [DEBUG] [Thread-59057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:20:51.506 [INFO] [Thread-59057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] client lang: <none>
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] server lang: <none>
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] kex follows: False
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:20:51.514 [DEBUG] [Thread-59057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:20:51.515 [DEBUG] [Thread-59057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:20:51.515 [DEBUG] [Thread-59057] [transport.py] [_log()] Compression: none
2025-11-17T18:20:51.515 [DEBUG] [Thread-59057] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:20:51.576 [DEBUG] [Thread-59057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:20:51.577 [DEBUG] [Thread-59057] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:20:51.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:20:51.577 [DEBUG] [Thread-59057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:20:51.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:20:51.632 [DEBUG] [Thread-59057] [transport.py] [_log()] userauth is OK
2025-11-17T18:20:51.632 [DEBUG] [Thread-59057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:20:51.632 [DEBUG] [Thread-59057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:20:51.632 [DEBUG] [Thread-59057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:20:51.632 [DEBUG] [Thread-59057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:20:51.646 [INFO] [Thread-59057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:20:51.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:20:51.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:20:52.492 [DEBUG] [Thread-59057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:20:52.492 [DEBUG] [Thread-59057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:20:52.540 [DEBUG] [Thread-59057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:20:52.541 [DEBUG] [Thread-59057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:20:52.549 [DEBUG] [Thread-59057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:20:52.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:20:52.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:20:52.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:20:52.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:20:52.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:20:52.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:20:52.583 [DEBUG] [Thread-59057] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:20:58.424 [DEBUG] [Thread-59059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:21:13.469 [DEBUG] [Thread-59060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:21:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:21:22.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:21:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:21:23.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 21, 18), 29.15, 13.59, 0.0, 26.8, 22.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:21:23.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:21:18
2025-11-17T18:21:23.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:21:23.575 [DEBUG] [Thread-59061] [transport.py] [_log()] starting thread (client mode): 0xd31b23e0
2025-11-17T18:21:23.575 [DEBUG] [Thread-59061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:21:23.594 [DEBUG] [Thread-59061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:21:23.595 [INFO] [Thread-59061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] client lang: <none>
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] server lang: <none>
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] kex follows: False
2025-11-17T18:21:23.598 [DEBUG] [Thread-59061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:21:23.599 [DEBUG] [Thread-59061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:21:23.599 [DEBUG] [Thread-59061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:21:23.599 [DEBUG] [Thread-59061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:21:23.599 [DEBUG] [Thread-59061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:21:23.599 [DEBUG] [Thread-59061] [transport.py] [_log()] Compression: none
2025-11-17T18:21:23.599 [DEBUG] [Thread-59061] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:21:23.613 [DEBUG] [Thread-59061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:21:23.614 [DEBUG] [Thread-59061] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:21:23.614 [DEBUG] [Thread-59061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:21:23.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:21:23.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:21:23.614 [DEBUG] [Thread-59061] [transport.py] [_log()] userauth is OK
2025-11-17T18:21:23.614 [DEBUG] [Thread-59061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:21:23.615 [DEBUG] [Thread-59061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:21:23.615 [DEBUG] [Thread-59061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:21:23.615 [DEBUG] [Thread-59061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:21:23.624 [INFO] [Thread-59061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:21:23.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:21:24.238 [DEBUG] [Thread-59061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:21:24.238 [DEBUG] [Thread-59061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:21:24.239 [DEBUG] [Thread-59061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:21:24.279 [DEBUG] [Thread-59061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:21:24.280 [DEBUG] [Thread-59061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:21:24.283 [DEBUG] [Thread-59061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:21:24.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:21:24.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:21:24.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:21:24.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:21:24.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:21:24.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:21:24.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:21:24.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:21:24.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:21:24.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.681301 -999.00  +21.70  23.05     19   -2.60 1 1 1 1 1   887    0 24.98 18.06 ----- 28.7 23.1 277.6 29.1 23.3 -26.6 23.4 -24.7 23.6 -25.5 23.9 -26.5
2025-11-17T18:21:24.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:21:24.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:21:24.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.681301
2025-11-17T18:21:24.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:21:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:21:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:21:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:21:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:21:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:21:18', tmtdew=29.15, humidity=13.59, cloud=0.0, wind=26.8, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:21:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:21:24.310 [DEBUG] [Thread-59061] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:21:24.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:21:24.406 [DEBUG] [Thread-59064] [transport.py] [_log()] starting thread (client mode): 0xd31b33d0
2025-11-17T18:21:24.407 [DEBUG] [Thread-59064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:21:24.421 [DEBUG] [Thread-59064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:21:24.421 [INFO] [Thread-59064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:21:24.428 [DEBUG] [Thread-59064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:21:24.428 [DEBUG] [Thread-59064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] client lang: <none>
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] server lang: <none>
2025-11-17T18:21:24.429 [DEBUG] [Thread-59064] [transport.py] [_log()] kex follows: False
2025-11-17T18:21:24.430 [DEBUG] [Thread-59064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:21:24.430 [DEBUG] [Thread-59064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:21:24.430 [DEBUG] [Thread-59064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:21:24.430 [DEBUG] [Thread-59064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:21:24.430 [DEBUG] [Thread-59064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:21:24.430 [DEBUG] [Thread-59064] [transport.py] [_log()] Compression: none
2025-11-17T18:21:24.430 [DEBUG] [Thread-59064] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:21:24.489 [DEBUG] [Thread-59064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:21:24.490 [DEBUG] [Thread-59064] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:21:24.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:21:24.491 [DEBUG] [Thread-59064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:21:24.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:21:24.545 [DEBUG] [Thread-59064] [transport.py] [_log()] userauth is OK
2025-11-17T18:21:24.545 [DEBUG] [Thread-59064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:21:24.545 [DEBUG] [Thread-59064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:21:24.545 [DEBUG] [Thread-59064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:21:24.545 [DEBUG] [Thread-59064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:21:24.565 [INFO] [Thread-59064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:21:24.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:21:24.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:21:25.419 [DEBUG] [Thread-59064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:21:25.419 [DEBUG] [Thread-59064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:21:25.466 [DEBUG] [Thread-59064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:21:25.466 [DEBUG] [Thread-59064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:21:25.475 [DEBUG] [Thread-59064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:21:25.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:21:25.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:21:25.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:21:25.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:21:25.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:21:25.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:21:25.509 [DEBUG] [Thread-59064] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:21:27.848 [DEBUG] [Thread-59066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:21:28.497 [DEBUG] [Thread-59067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:21:33.297 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:21:33.298 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:21:43.538 [DEBUG] [Thread-59068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:21:55.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:21:55.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:21:55.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:21:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 21, 50), 29.05, 13.52, 0.0, 25.9, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:21:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:21:50
2025-11-17T18:21:56.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:21:56.470 [DEBUG] [Thread-59069] [transport.py] [_log()] starting thread (client mode): 0xd07ccca0
2025-11-17T18:21:56.470 [DEBUG] [Thread-59069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:21:56.489 [DEBUG] [Thread-59069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:21:56.490 [INFO] [Thread-59069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:21:56.493 [DEBUG] [Thread-59069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] client lang: <none>
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] server lang: <none>
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] kex follows: False
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] Compression: none
2025-11-17T18:21:56.494 [DEBUG] [Thread-59069] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:21:56.511 [DEBUG] [Thread-59069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:21:56.512 [DEBUG] [Thread-59069] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:21:56.512 [DEBUG] [Thread-59069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:21:56.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:21:56.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:21:56.514 [DEBUG] [Thread-59069] [transport.py] [_log()] userauth is OK
2025-11-17T18:21:56.515 [DEBUG] [Thread-59069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:21:56.515 [DEBUG] [Thread-59069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:21:56.515 [DEBUG] [Thread-59069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:21:56.515 [DEBUG] [Thread-59069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:21:56.539 [INFO] [Thread-59069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:21:56.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:21:57.171 [DEBUG] [Thread-59069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:21:57.171 [DEBUG] [Thread-59069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:21:57.171 [DEBUG] [Thread-59069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:21:57.212 [DEBUG] [Thread-59069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:21:57.212 [DEBUG] [Thread-59069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:21:57.214 [DEBUG] [Thread-59069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:21:57.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:21:57.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:21:57.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:21:57.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:21:57.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:21:57.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:21:57.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:21:57.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:21:57.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:21:57.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.681648 -999.00  +21.50  21.95     19   -2.60 1 1 1 1 1   887    0 24.41 17.61 ----- 22.4 21.9 282.6 33.3 23.2 -26.1 23.4 -24.3 23.4 -25.3 23.8 -25.8
2025-11-17T18:21:57.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:21:57.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:21:57.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.681648
2025-11-17T18:21:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:21:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:21:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:21:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:21:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:21:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:21:50', tmtdew=29.05, humidity=13.52, cloud=0.0, wind=25.9, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:21:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:21:57.233 [DEBUG] [Thread-59069] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:21:57.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:21:57.321 [DEBUG] [Thread-59072] [transport.py] [_log()] starting thread (client mode): 0xd07ce5c0
2025-11-17T18:21:57.321 [DEBUG] [Thread-59072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:21:57.336 [DEBUG] [Thread-59072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:21:57.336 [INFO] [Thread-59072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] client lang: <none>
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] server lang: <none>
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] kex follows: False
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] Compression: none
2025-11-17T18:21:57.344 [DEBUG] [Thread-59072] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:21:57.404 [DEBUG] [Thread-59072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:21:57.404 [DEBUG] [Thread-59072] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:21:57.404 [DEBUG] [Thread-59072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:21:57.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:21:57.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:21:57.460 [DEBUG] [Thread-59072] [transport.py] [_log()] userauth is OK
2025-11-17T18:21:57.460 [DEBUG] [Thread-59072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:21:57.460 [DEBUG] [Thread-59072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:21:57.460 [DEBUG] [Thread-59072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:21:57.460 [DEBUG] [Thread-59072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:21:57.478 [INFO] [Thread-59072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:21:57.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:21:57.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:21:58.381 [DEBUG] [Thread-59072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:21:58.381 [DEBUG] [Thread-59072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:21:58.429 [DEBUG] [Thread-59072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:21:58.429 [DEBUG] [Thread-59072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:21:58.438 [DEBUG] [Thread-59072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:21:58.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:21: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')
2025-11-17T18:21:58.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:21:58.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:21:58.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:21:58.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:21:58.475 [DEBUG] [Thread-59072] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:21:58.565 [DEBUG] [Thread-59074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:22:13.597 [DEBUG] [Thread-59075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:22:27.899 [DEBUG] [Thread-59076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:22:28.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:22:28.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:22: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
2025-11-17T18:22:28.629 [DEBUG] [Thread-59077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:22:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 22, 22), 28.96, 13.6, 0.0, 27.61, 21.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:22:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:22:22
2025-11-17T18:22:29.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:22:29.428 [DEBUG] [Thread-59078] [transport.py] [_log()] starting thread (client mode): 0xd07cc6d0
2025-11-17T18:22:29.428 [DEBUG] [Thread-59078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:22:29.448 [DEBUG] [Thread-59078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:22:29.448 [INFO] [Thread-59078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:22:29.451 [DEBUG] [Thread-59078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:22:29.451 [DEBUG] [Thread-59078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:22:29.451 [DEBUG] [Thread-59078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:22:29.451 [DEBUG] [Thread-59078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:22:29.451 [DEBUG] [Thread-59078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:22:29.451 [DEBUG] [Thread-59078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:22:29.451 [DEBUG] [Thread-59078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:22:29.451 [DEBUG] [Thread-59078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] client lang: <none>
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] server lang: <none>
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] kex follows: False
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] Compression: none
2025-11-17T18:22:29.452 [DEBUG] [Thread-59078] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:22:29.471 [DEBUG] [Thread-59078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:22:29.472 [DEBUG] [Thread-59078] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:22:29.472 [DEBUG] [Thread-59078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:22:29.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:22:29.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:22:29.474 [DEBUG] [Thread-59078] [transport.py] [_log()] userauth is OK
2025-11-17T18:22:29.474 [DEBUG] [Thread-59078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:22:29.474 [DEBUG] [Thread-59078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:22:29.475 [DEBUG] [Thread-59078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:22:29.475 [DEBUG] [Thread-59078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:22:29.499 [INFO] [Thread-59078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:22:29.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:22:30.148 [DEBUG] [Thread-59078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:22:30.148 [DEBUG] [Thread-59078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:22:30.149 [DEBUG] [Thread-59078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:22:30.188 [DEBUG] [Thread-59078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:22:30.189 [DEBUG] [Thread-59078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:22:30.192 [DEBUG] [Thread-59078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:22:30.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:22:30.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:22:30.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:22:30.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:22:30.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:22:30.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:22:30.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:22:30.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:22:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:22:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.681995 -999.00  +21.50  22.15     19   -2.60 1 1 1 1 1   887    0 24.15 17.36 ----- 20.7 22.1 288.1 31.1 23.2 -26.1 23.4 -24.5 23.4 -25.3 23.7 -25.7
2025-11-17T18:22:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:22:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:22:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.681995
2025-11-17T18:22:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:22:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:22:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:22:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:22:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:22:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:22:22', tmtdew=28.96, humidity=13.6, cloud=0.0, wind=27.61, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:22:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:22:30.217 [DEBUG] [Thread-59078] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:22:30.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:22:30.312 [DEBUG] [Thread-59081] [transport.py] [_log()] starting thread (client mode): 0xd31b3c40
2025-11-17T18:22:30.312 [DEBUG] [Thread-59081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:22:30.327 [DEBUG] [Thread-59081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:22:30.327 [INFO] [Thread-59081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] client lang: <none>
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] server lang: <none>
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] kex follows: False
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:22:30.335 [DEBUG] [Thread-59081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:22:30.336 [DEBUG] [Thread-59081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:22:30.336 [DEBUG] [Thread-59081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:22:30.336 [DEBUG] [Thread-59081] [transport.py] [_log()] Compression: none
2025-11-17T18:22:30.336 [DEBUG] [Thread-59081] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:22:30.392 [DEBUG] [Thread-59081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:22:30.393 [DEBUG] [Thread-59081] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:22:30.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:22:30.393 [DEBUG] [Thread-59081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:22:30.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:22:30.449 [DEBUG] [Thread-59081] [transport.py] [_log()] userauth is OK
2025-11-17T18:22:30.449 [DEBUG] [Thread-59081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:22:30.449 [DEBUG] [Thread-59081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:22:30.449 [DEBUG] [Thread-59081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:22:30.449 [DEBUG] [Thread-59081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:22:30.468 [INFO] [Thread-59081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:22:30.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:22:30.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:22:31.292 [DEBUG] [Thread-59081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:22:31.292 [DEBUG] [Thread-59081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:22:31.340 [DEBUG] [Thread-59081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:22:31.340 [DEBUG] [Thread-59081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:22:31.349 [DEBUG] [Thread-59081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:22:31.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:22:31.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:22: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
2025-11-17T18:22:31.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:22:31.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:22:31.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:22:31.383 [DEBUG] [Thread-59081] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:22:33.440 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:22:33.441 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:22:43.657 [DEBUG] [Thread-59083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:22:58.699 [DEBUG] [Thread-59084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:23:01.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:23:01.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:23:01.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:23:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 22, 54), 29.08, 13.57, 0.0, 28.76, 21.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:23:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:22:54
2025-11-17T18:23:02.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:23:02.346 [DEBUG] [Thread-59085] [transport.py] [_log()] starting thread (client mode): 0xd31b1270
2025-11-17T18:23:02.346 [DEBUG] [Thread-59085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:23:02.366 [DEBUG] [Thread-59085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:23:02.366 [INFO] [Thread-59085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] client lang: <none>
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] server lang: <none>
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] kex follows: False
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] Compression: none
2025-11-17T18:23:02.368 [DEBUG] [Thread-59085] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:23:02.387 [DEBUG] [Thread-59085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:23:02.387 [DEBUG] [Thread-59085] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:23:02.387 [DEBUG] [Thread-59085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:23:02.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:23:02.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:23:02.389 [DEBUG] [Thread-59085] [transport.py] [_log()] userauth is OK
2025-11-17T18:23:02.389 [DEBUG] [Thread-59085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:23:02.390 [DEBUG] [Thread-59085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:23:02.390 [DEBUG] [Thread-59085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:23:02.390 [DEBUG] [Thread-59085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:23:02.427 [INFO] [Thread-59085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:23:02.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:23:03.080 [DEBUG] [Thread-59085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:23:03.080 [DEBUG] [Thread-59085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:23:03.080 [DEBUG] [Thread-59085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:23:03.120 [DEBUG] [Thread-59085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:23:03.121 [DEBUG] [Thread-59085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:23:03.124 [DEBUG] [Thread-59085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:23:03.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:23:03.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:23:03.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:23:03.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:23:03.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:23:03.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:23:03.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:23:03.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:23:03.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:23:03.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.682343 -999.00  +21.40  27.37     19   -2.60 1 1 1 1 1   887    0 25.03 17.95 ----- 26.1 27.4 281.8 31.7 23.1 -26.2 23.3 -24.4 23.3 -25.5 23.7 -25.9
2025-11-17T18:23:03.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:23:03.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:23:03.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.682343
2025-11-17T18:23:03.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:23:03.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:23:03.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:23:03.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:23:03.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:23:03.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:22:54', tmtdew=29.08, humidity=13.57, cloud=0.0, wind=28.76, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:22:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:23:03.150 [DEBUG] [Thread-59085] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:23:03.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:23:03.246 [DEBUG] [Thread-59088] [transport.py] [_log()] starting thread (client mode): 0xd31b2680
2025-11-17T18:23:03.246 [DEBUG] [Thread-59088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:23:03.260 [DEBUG] [Thread-59088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:23:03.261 [INFO] [Thread-59088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:23:03.268 [DEBUG] [Thread-59088] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:23:03.268 [DEBUG] [Thread-59088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] client lang: <none>
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] server lang: <none>
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] kex follows: False
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] Compression: none
2025-11-17T18:23:03.269 [DEBUG] [Thread-59088] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:23:03.335 [DEBUG] [Thread-59088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:23:03.336 [DEBUG] [Thread-59088] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:23:03.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:23:03.337 [DEBUG] [Thread-59088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:23:03.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:23:03.392 [DEBUG] [Thread-59088] [transport.py] [_log()] userauth is OK
2025-11-17T18:23:03.393 [DEBUG] [Thread-59088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:23:03.393 [DEBUG] [Thread-59088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:23:03.393 [DEBUG] [Thread-59088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:23:03.393 [DEBUG] [Thread-59088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:23:03.413 [INFO] [Thread-59088] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:23:03.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:23:03.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:23:04.262 [DEBUG] [Thread-59088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:23:04.262 [DEBUG] [Thread-59088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:23:04.310 [DEBUG] [Thread-59088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:23:04.310 [DEBUG] [Thread-59088] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:23:04.319 [DEBUG] [Thread-59088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:23:04.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:23:04.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:23:04.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:23:04.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:23:04.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:23:04.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:23:04.353 [DEBUG] [Thread-59088] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:23:13.732 [DEBUG] [Thread-59090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:23:27.947 [DEBUG] [Thread-59091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:23:28.767 [DEBUG] [Thread-59092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:23:33.581 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:23:33.582 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:23:34.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:23:34.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:23:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:23:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 23, 26), 29.04, 13.6, 0.0, 27.37, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:23:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:23:26
2025-11-17T18:23:35.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:23:35.311 [DEBUG] [Thread-59093] [transport.py] [_log()] starting thread (client mode): 0xd07cfcd0
2025-11-17T18:23:35.312 [DEBUG] [Thread-59093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:23:35.332 [DEBUG] [Thread-59093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:23:35.332 [INFO] [Thread-59093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] client lang: <none>
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] server lang: <none>
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] kex follows: False
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:23:35.335 [DEBUG] [Thread-59093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:23:35.336 [DEBUG] [Thread-59093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:23:35.336 [DEBUG] [Thread-59093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:23:35.336 [DEBUG] [Thread-59093] [transport.py] [_log()] Compression: none
2025-11-17T18:23:35.336 [DEBUG] [Thread-59093] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:23:35.353 [DEBUG] [Thread-59093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:23:35.353 [DEBUG] [Thread-59093] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:23:35.354 [DEBUG] [Thread-59093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:23:35.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:23:35.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:23:35.396 [DEBUG] [Thread-59093] [transport.py] [_log()] userauth is OK
2025-11-17T18:23:35.396 [DEBUG] [Thread-59093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:23:35.396 [DEBUG] [Thread-59093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:23:35.397 [DEBUG] [Thread-59093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:23:35.397 [DEBUG] [Thread-59093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:23:35.412 [INFO] [Thread-59093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:23:35.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:23:36.068 [DEBUG] [Thread-59093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:23:36.068 [DEBUG] [Thread-59093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:23:36.068 [DEBUG] [Thread-59093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:23:36.108 [DEBUG] [Thread-59093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:23:36.108 [DEBUG] [Thread-59093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:23:36.111 [DEBUG] [Thread-59093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:23:36.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:23:36.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:23:36.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:23:36.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:23:36.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:23:36.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:23:36.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:23:36.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:23:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:23:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.682690 -999.00  +21.30  19.85     19   -2.60 1 1 1 1 1   887    0 24.52 18.07 ----- 18.1 19.9 287.0 29.1 23.1 -25.4 23.3 -24.0 23.4 -24.3 23.6 -25.7
2025-11-17T18:23:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:23:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:23:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.682690
2025-11-17T18:23:36.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:23:36.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:23:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:23:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:23:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:23:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:23:26', tmtdew=29.04, humidity=13.6, cloud=0.0, wind=27.37, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:23:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:23:36.135 [DEBUG] [Thread-59093] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:23:36.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:23:36.230 [DEBUG] [Thread-59096] [transport.py] [_log()] starting thread (client mode): 0xd078e5f0
2025-11-17T18:23:36.230 [DEBUG] [Thread-59096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:23:36.245 [DEBUG] [Thread-59096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:23:36.245 [INFO] [Thread-59096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:23:36.253 [DEBUG] [Thread-59096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:23:36.253 [DEBUG] [Thread-59096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:23:36.253 [DEBUG] [Thread-59096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:23:36.253 [DEBUG] [Thread-59096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:23:36.253 [DEBUG] [Thread-59096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] client lang: <none>
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] server lang: <none>
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] kex follows: False
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:23:36.254 [DEBUG] [Thread-59096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:23:36.255 [DEBUG] [Thread-59096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:23:36.255 [DEBUG] [Thread-59096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:23:36.255 [DEBUG] [Thread-59096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:23:36.255 [DEBUG] [Thread-59096] [transport.py] [_log()] Compression: none
2025-11-17T18:23:36.255 [DEBUG] [Thread-59096] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:23:36.312 [DEBUG] [Thread-59096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:23:36.313 [DEBUG] [Thread-59096] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:23:36.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:23:36.314 [DEBUG] [Thread-59096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:23:36.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:23:36.369 [DEBUG] [Thread-59096] [transport.py] [_log()] userauth is OK
2025-11-17T18:23:36.369 [DEBUG] [Thread-59096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:23:36.369 [DEBUG] [Thread-59096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:23:36.369 [DEBUG] [Thread-59096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:23:36.369 [DEBUG] [Thread-59096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:23:36.388 [INFO] [Thread-59096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:23:36.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:23:36.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:23:37.264 [DEBUG] [Thread-59096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:23:37.264 [DEBUG] [Thread-59096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:23:37.315 [DEBUG] [Thread-59096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:23:37.315 [DEBUG] [Thread-59096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:23:37.325 [DEBUG] [Thread-59096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:23:37.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:23:37.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:23:37.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:23:37.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:23:37.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:23:37.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:23:37.360 [DEBUG] [Thread-59096] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:23:43.802 [DEBUG] [Thread-59098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:23:58.849 [DEBUG] [Thread-59099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:24:07.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:24:07.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:24:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:24:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 23, 58), 28.89, 13.65, 0.0, 27.08, 21.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:24:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:23:58
2025-11-17T18:24:08.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:24:08.317 [DEBUG] [Thread-59100] [transport.py] [_log()] starting thread (client mode): 0xd078e560
2025-11-17T18:24:08.317 [DEBUG] [Thread-59100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:24:08.338 [DEBUG] [Thread-59100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:24:08.338 [INFO] [Thread-59100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] client lang: <none>
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] server lang: <none>
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] kex follows: False
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] Compression: none
2025-11-17T18:24:08.341 [DEBUG] [Thread-59100] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:24:08.359 [DEBUG] [Thread-59100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:24:08.359 [DEBUG] [Thread-59100] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:24:08.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:24:08.359 [DEBUG] [Thread-59100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:24:08.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:24:08.360 [DEBUG] [Thread-59100] [transport.py] [_log()] userauth is OK
2025-11-17T18:24:08.360 [DEBUG] [Thread-59100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:24:08.360 [DEBUG] [Thread-59100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:24:08.360 [DEBUG] [Thread-59100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:24:08.360 [DEBUG] [Thread-59100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:24:08.369 [INFO] [Thread-59100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:24:08.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:24:08.976 [DEBUG] [Thread-59100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:24:08.977 [DEBUG] [Thread-59100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:24:08.977 [DEBUG] [Thread-59100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:24:09.017 [DEBUG] [Thread-59100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:24:09.018 [DEBUG] [Thread-59100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:24:09.020 [DEBUG] [Thread-59100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:24:09.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:24:09.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:24:09.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:24:09.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:24:09.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:24:09.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:24:09.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:24:09.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.683037 -999.00  +21.40  15.31     19   -2.60 1 1 1 1 1   887    0 24.29 16.24 ----- 15.5 15.3 296.2 28.8 23.1 -25.8 23.3 -24.0 23.4 -24.0 23.6 -25.4
2025-11-17T18:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.683037
2025-11-17T18:24:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:24:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:24:09.044 [DEBUG] [Thread-59100] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:24:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:24:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:24:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:24:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:23:58', tmtdew=28.89, humidity=13.65, cloud=0.0, wind=27.08, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:23:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:24:09.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:24:09.140 [DEBUG] [Thread-59103] [transport.py] [_log()] starting thread (client mode): 0xd078f2e0
2025-11-17T18:24:09.140 [DEBUG] [Thread-59103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:24:09.154 [DEBUG] [Thread-59103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:24:09.154 [INFO] [Thread-59103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] client lang: <none>
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] server lang: <none>
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] kex follows: False
2025-11-17T18:24:09.162 [DEBUG] [Thread-59103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:24:09.163 [DEBUG] [Thread-59103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:24:09.163 [DEBUG] [Thread-59103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:24:09.163 [DEBUG] [Thread-59103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:24:09.163 [DEBUG] [Thread-59103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:24:09.163 [DEBUG] [Thread-59103] [transport.py] [_log()] Compression: none
2025-11-17T18:24:09.163 [DEBUG] [Thread-59103] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:24:09.223 [DEBUG] [Thread-59103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:24:09.224 [DEBUG] [Thread-59103] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:24:09.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:24:09.225 [DEBUG] [Thread-59103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:24:09.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:24:09.281 [DEBUG] [Thread-59103] [transport.py] [_log()] userauth is OK
2025-11-17T18:24:09.281 [DEBUG] [Thread-59103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:24:09.281 [DEBUG] [Thread-59103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:24:09.281 [DEBUG] [Thread-59103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:24:09.281 [DEBUG] [Thread-59103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:24:09.300 [INFO] [Thread-59103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:24:09.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:24:09.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:24:10.144 [DEBUG] [Thread-59103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:24:10.145 [DEBUG] [Thread-59103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:24:10.192 [DEBUG] [Thread-59103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:24:10.192 [DEBUG] [Thread-59103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:24:10.201 [DEBUG] [Thread-59103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:24:10.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:24:10.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:24:10.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:24:10.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:24:10.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:24:10.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:24:10.235 [DEBUG] [Thread-59103] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:24:13.875 [DEBUG] [Thread-59105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:24:27.990 [DEBUG] [Thread-59106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:24:28.925 [DEBUG] [Thread-59107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:24:33.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:24:33.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:24:40.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:24:40.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:24:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:24:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 24, 30), 28.87, 13.67, 0.0, 28.11, 21.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:24:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:24:30
2025-11-17T18:24:41.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:24:41.186 [DEBUG] [Thread-59108] [transport.py] [_log()] starting thread (client mode): 0xd31b0520
2025-11-17T18:24:41.186 [DEBUG] [Thread-59108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:24:41.199 [DEBUG] [Thread-59108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:24:41.199 [INFO] [Thread-59108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:24:41.202 [DEBUG] [Thread-59108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:24:41.202 [DEBUG] [Thread-59108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] client lang: <none>
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] server lang: <none>
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] kex follows: False
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] Compression: none
2025-11-17T18:24:41.203 [DEBUG] [Thread-59108] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:24:41.218 [DEBUG] [Thread-59108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:24:41.218 [DEBUG] [Thread-59108] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:24:41.219 [DEBUG] [Thread-59108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:24:41.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:24:41.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:24:41.220 [DEBUG] [Thread-59108] [transport.py] [_log()] userauth is OK
2025-11-17T18:24:41.221 [DEBUG] [Thread-59108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:24:41.221 [DEBUG] [Thread-59108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:24:41.221 [DEBUG] [Thread-59108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:24:41.221 [DEBUG] [Thread-59108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:24:41.238 [INFO] [Thread-59108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:24:41.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:24:41.847 [DEBUG] [Thread-59108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:24:41.847 [DEBUG] [Thread-59108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:24:41.848 [DEBUG] [Thread-59108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:24:41.888 [DEBUG] [Thread-59108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:24:41.889 [DEBUG] [Thread-59108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:24:41.892 [DEBUG] [Thread-59108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:24:41.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:24:41.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:24:41.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:24:41.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:24:41.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:24:41.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:24:41.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:24:41.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:24:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:24:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.683731 -999.00  +21.50  21.79     19   -2.70 1 1 1 1 1   887    0 24.62 16.43 ----- 19.8 21.8 275.0 25.5 23.1 -25.8 23.3 -24.2 23.3 -24.7 23.6 -25.3
2025-11-17T18:24:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:24:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:24:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.683731
2025-11-17T18:24:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:24:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:24:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:24:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:24:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:24:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:24:30', tmtdew=28.87, humidity=13.67, cloud=0.0, wind=28.11, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:24:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:24:41.926 [DEBUG] [Thread-59108] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:24:42.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:24:42.023 [DEBUG] [Thread-59111] [transport.py] [_log()] starting thread (client mode): 0xd31b3bb0
2025-11-17T18:24:42.023 [DEBUG] [Thread-59111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:24:42.037 [DEBUG] [Thread-59111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:24:42.038 [INFO] [Thread-59111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:24:42.047 [DEBUG] [Thread-59111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:24:42.047 [DEBUG] [Thread-59111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:24:42.047 [DEBUG] [Thread-59111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:24:42.047 [DEBUG] [Thread-59111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:24:42.047 [DEBUG] [Thread-59111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:24:42.047 [DEBUG] [Thread-59111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:24:42.047 [DEBUG] [Thread-59111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:24:42.047 [DEBUG] [Thread-59111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] client lang: <none>
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] server lang: <none>
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] kex follows: False
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] Compression: none
2025-11-17T18:24:42.048 [DEBUG] [Thread-59111] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:24:42.108 [DEBUG] [Thread-59111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:24:42.109 [DEBUG] [Thread-59111] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:24:42.109 [DEBUG] [Thread-59111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:24:42.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:24:42.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:24:42.164 [DEBUG] [Thread-59111] [transport.py] [_log()] userauth is OK
2025-11-17T18:24:42.165 [DEBUG] [Thread-59111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:24:42.165 [DEBUG] [Thread-59111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:24:42.165 [DEBUG] [Thread-59111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:24:42.165 [DEBUG] [Thread-59111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:24:42.184 [INFO] [Thread-59111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:24:42.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:24:42.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:24:43.020 [DEBUG] [Thread-59111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:24:43.021 [DEBUG] [Thread-59111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:24:43.068 [DEBUG] [Thread-59111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:24:43.068 [DEBUG] [Thread-59111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:24:43.077 [DEBUG] [Thread-59111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:24:43.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:24:43.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:24:43.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:24:43.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:24:43.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:24:43.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:24:43.111 [DEBUG] [Thread-59111] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:24:43.951 [DEBUG] [Thread-59113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:24:58.995 [DEBUG] [Thread-59114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:25:13.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:25:13.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:25:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:25:13.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 25, 2), 28.88, 13.65, 0.0, 24.63, 21.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:25:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:25:02
2025-11-17T18:25:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:25:14.030 [DEBUG] [Thread-59115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:25:14.105 [DEBUG] [Thread-59116] [transport.py] [_log()] starting thread (client mode): 0xd31b0e80
2025-11-17T18:25:14.105 [DEBUG] [Thread-59116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:25:14.124 [DEBUG] [Thread-59116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:25:14.125 [INFO] [Thread-59116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] client lang: <none>
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] server lang: <none>
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] kex follows: False
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] Compression: none
2025-11-17T18:25:14.128 [DEBUG] [Thread-59116] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:25:14.145 [DEBUG] [Thread-59116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:25:14.145 [DEBUG] [Thread-59116] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:25:14.145 [DEBUG] [Thread-59116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:25:14.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:25:14.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:25:14.146 [DEBUG] [Thread-59116] [transport.py] [_log()] userauth is OK
2025-11-17T18:25:14.146 [DEBUG] [Thread-59116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:25:14.146 [DEBUG] [Thread-59116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:25:14.146 [DEBUG] [Thread-59116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:25:14.146 [DEBUG] [Thread-59116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:25:14.155 [INFO] [Thread-59116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:25:14.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:25:14.792 [DEBUG] [Thread-59116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:25:14.792 [DEBUG] [Thread-59116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:25:14.792 [DEBUG] [Thread-59116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:25:14.832 [DEBUG] [Thread-59116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:25:14.832 [DEBUG] [Thread-59116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:25:14.835 [DEBUG] [Thread-59116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:25:14.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:25:14.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:25:14.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:25:14.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:25:14.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:25:14.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:25:14.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:25:14.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:25:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:25:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.684079 -999.00  +21.50  23.00     19   -2.80 1 1 1 1 1   887    0 24.91 19.39 ----- 23.3 23.0 279.0 29.7 23.0 -25.9 23.3 -24.1 23.2 -25.7 23.6 -25.8
2025-11-17T18:25:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:25:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:25:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.684079
2025-11-17T18:25:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:25:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:25:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:25:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:25:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:25:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:25:02', tmtdew=28.88, humidity=13.65, cloud=0.0, wind=24.63, temperature=21.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:25:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:25:14.861 [DEBUG] [Thread-59116] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:25:14.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:25:14.956 [DEBUG] [Thread-59119] [transport.py] [_log()] starting thread (client mode): 0xd078fdc0
2025-11-17T18:25:14.957 [DEBUG] [Thread-59119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:25:14.971 [DEBUG] [Thread-59119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:25:14.972 [INFO] [Thread-59119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:25:14.979 [DEBUG] [Thread-59119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:25:14.979 [DEBUG] [Thread-59119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:25:14.979 [DEBUG] [Thread-59119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] client lang: <none>
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] server lang: <none>
2025-11-17T18:25:14.980 [DEBUG] [Thread-59119] [transport.py] [_log()] kex follows: False
2025-11-17T18:25:14.981 [DEBUG] [Thread-59119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:25:14.981 [DEBUG] [Thread-59119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:25:14.981 [DEBUG] [Thread-59119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:25:14.981 [DEBUG] [Thread-59119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:25:14.981 [DEBUG] [Thread-59119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:25:14.981 [DEBUG] [Thread-59119] [transport.py] [_log()] Compression: none
2025-11-17T18:25:14.981 [DEBUG] [Thread-59119] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:25:15.036 [DEBUG] [Thread-59119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:25:15.037 [DEBUG] [Thread-59119] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:25:15.037 [DEBUG] [Thread-59119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:25:15.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:25:15.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:25:15.093 [DEBUG] [Thread-59119] [transport.py] [_log()] userauth is OK
2025-11-17T18:25:15.093 [DEBUG] [Thread-59119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:25:15.093 [DEBUG] [Thread-59119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:25:15.093 [DEBUG] [Thread-59119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:25:15.093 [DEBUG] [Thread-59119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:25:15.112 [INFO] [Thread-59119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:25:15.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:25:15.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:25:15.960 [DEBUG] [Thread-59119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:25:15.960 [DEBUG] [Thread-59119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:25:16.008 [DEBUG] [Thread-59119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:25:16.008 [DEBUG] [Thread-59119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:25:16.017 [DEBUG] [Thread-59119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:25:16.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:25:16.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:25:16.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:25:16.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:25:16.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:25:16.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:25:16.051 [DEBUG] [Thread-59119] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:25:28.045 [DEBUG] [Thread-59121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:25:29.056 [DEBUG] [Thread-59122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:25:33.865 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:25:33.867 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:25:44.098 [DEBUG] [Thread-59123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:25:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:25:46.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:25: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
2025-11-17T18:25:46.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 25, 34), 29.15, 13.59, 0.0, 27.44, 21.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:25:46.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:25:34
2025-11-17T18:25:46.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:25:46.993 [DEBUG] [Thread-59124] [transport.py] [_log()] starting thread (client mode): 0xd078c040
2025-11-17T18:25:46.993 [DEBUG] [Thread-59124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:25:47.013 [DEBUG] [Thread-59124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:25:47.013 [INFO] [Thread-59124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] client lang: <none>
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] server lang: <none>
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] kex follows: False
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] Compression: none
2025-11-17T18:25:47.015 [DEBUG] [Thread-59124] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:25:47.026 [DEBUG] [Thread-59124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:25:47.027 [DEBUG] [Thread-59124] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:25:47.027 [DEBUG] [Thread-59124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:25:47.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:25:47.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:25:47.028 [DEBUG] [Thread-59124] [transport.py] [_log()] userauth is OK
2025-11-17T18:25:47.028 [DEBUG] [Thread-59124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:25:47.028 [DEBUG] [Thread-59124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:25:47.028 [DEBUG] [Thread-59124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:25:47.028 [DEBUG] [Thread-59124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:25:47.046 [INFO] [Thread-59124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:25:47.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:25:47.694 [DEBUG] [Thread-59124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:25:47.695 [DEBUG] [Thread-59124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:25:47.695 [DEBUG] [Thread-59124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:25:47.735 [DEBUG] [Thread-59124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:25:47.735 [DEBUG] [Thread-59124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:25:47.737 [DEBUG] [Thread-59124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:25:47.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:25:47.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:25:47.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:25:47.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:25:47.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:25:47.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:25:47.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:25:47.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:25:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:25:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.684426 -999.00  +21.60  16.14     19   -2.70 1 1 1 1 1   887    0 24.65 19.22 ----- 24.4 16.1 291.0 27.0 23.1 -25.6 23.3 -24.3 23.4 -23.9 23.6 -25.4
2025-11-17T18:25:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:25:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:25:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.684426
2025-11-17T18:25:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:25:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:25:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:25:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:25:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:25:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:25:34', tmtdew=29.15, humidity=13.59, cloud=0.0, wind=27.44, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:25:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:25:47.751 [DEBUG] [Thread-59124] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:25:47.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:25:47.842 [DEBUG] [Thread-59127] [transport.py] [_log()] starting thread (client mode): 0xd078e500
2025-11-17T18:25:47.843 [DEBUG] [Thread-59127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:25:47.858 [DEBUG] [Thread-59127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:25:47.858 [INFO] [Thread-59127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] client lang: <none>
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] server lang: <none>
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] kex follows: False
2025-11-17T18:25:47.865 [DEBUG] [Thread-59127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:25:47.866 [DEBUG] [Thread-59127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:25:47.866 [DEBUG] [Thread-59127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:25:47.866 [DEBUG] [Thread-59127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:25:47.866 [DEBUG] [Thread-59127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:25:47.866 [DEBUG] [Thread-59127] [transport.py] [_log()] Compression: none
2025-11-17T18:25:47.866 [DEBUG] [Thread-59127] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:25:47.924 [DEBUG] [Thread-59127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:25:47.924 [DEBUG] [Thread-59127] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:25:47.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:25:47.924 [DEBUG] [Thread-59127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:25:47.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:25:47.980 [DEBUG] [Thread-59127] [transport.py] [_log()] userauth is OK
2025-11-17T18:25:47.980 [DEBUG] [Thread-59127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:25:47.980 [DEBUG] [Thread-59127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:25:47.980 [DEBUG] [Thread-59127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:25:47.980 [DEBUG] [Thread-59127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:25:47.997 [INFO] [Thread-59127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:25:47.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:25:47.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:25:48.873 [DEBUG] [Thread-59127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:25:48.873 [DEBUG] [Thread-59127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:25:48.921 [DEBUG] [Thread-59127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:25:48.921 [DEBUG] [Thread-59127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:25:48.929 [DEBUG] [Thread-59127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:25:48.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:25:48.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:25:48.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:25:48.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:25:48.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:25:48.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:25:48.961 [DEBUG] [Thread-59127] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:25:59.129 [DEBUG] [Thread-59129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:26:14.169 [DEBUG] [Thread-59130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:26:18.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:26:18.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:26:18.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:26:19.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 26, 6), 29.2, 13.54, 0.0, 25.28, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:26:19.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:26:06
2025-11-17T18:26:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:26:19.916 [DEBUG] [Thread-59131] [transport.py] [_log()] starting thread (client mode): 0xd07cffa0
2025-11-17T18:26:19.916 [DEBUG] [Thread-59131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:26:19.935 [DEBUG] [Thread-59131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:26:19.935 [INFO] [Thread-59131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] client lang: <none>
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] server lang: <none>
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] kex follows: False
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] Compression: none
2025-11-17T18:26:19.939 [DEBUG] [Thread-59131] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:26:19.955 [DEBUG] [Thread-59131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:26:19.955 [DEBUG] [Thread-59131] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:26:19.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:26:19.956 [DEBUG] [Thread-59131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:26:19.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:26:19.958 [DEBUG] [Thread-59131] [transport.py] [_log()] userauth is OK
2025-11-17T18:26:19.958 [DEBUG] [Thread-59131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:26:19.959 [DEBUG] [Thread-59131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:26:19.959 [DEBUG] [Thread-59131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:26:19.959 [DEBUG] [Thread-59131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:26:19.983 [INFO] [Thread-59131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:26:19.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:26:20.657 [DEBUG] [Thread-59131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:26:20.658 [DEBUG] [Thread-59131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:26:20.658 [DEBUG] [Thread-59131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:26:20.698 [DEBUG] [Thread-59131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:26:20.699 [DEBUG] [Thread-59131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:26:20.702 [DEBUG] [Thread-59131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:26:20.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:26:20.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:26:20.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:26:20.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:26:20.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:26:20.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:26:20.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:26:20.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:26:20.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:26:20.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.684773 -999.00  +21.80  19.36     19   -2.70 1 1 1 1 1   887    0 23.79 21.03 ----- 16.4 19.4 272.2 24.0 23.1 -25.9 23.4 -24.4 23.5 -25.4 23.7 -25.5
2025-11-17T18:26:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:26:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:26:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.684773
2025-11-17T18:26:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:26:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:26:20.728 [DEBUG] [Thread-59131] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:26:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:26:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:26:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:26:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:26:06', tmtdew=29.2, humidity=13.54, cloud=0.0, wind=25.28, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:26:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:26:20.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:26:20.829 [DEBUG] [Thread-59134] [transport.py] [_log()] starting thread (client mode): 0xd07cd900
2025-11-17T18:26:20.830 [DEBUG] [Thread-59134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:26:20.845 [DEBUG] [Thread-59134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:26:20.845 [INFO] [Thread-59134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:26:20.852 [DEBUG] [Thread-59134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] client lang: <none>
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] server lang: <none>
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] kex follows: False
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:26:20.853 [DEBUG] [Thread-59134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:26:20.854 [DEBUG] [Thread-59134] [transport.py] [_log()] Compression: none
2025-11-17T18:26:20.854 [DEBUG] [Thread-59134] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:26:20.908 [DEBUG] [Thread-59134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:26:20.908 [DEBUG] [Thread-59134] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:26:20.909 [DEBUG] [Thread-59134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:26:20.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:26:20.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:26:20.965 [DEBUG] [Thread-59134] [transport.py] [_log()] userauth is OK
2025-11-17T18:26:20.965 [DEBUG] [Thread-59134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:26:20.965 [DEBUG] [Thread-59134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:26:20.965 [DEBUG] [Thread-59134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:26:20.965 [DEBUG] [Thread-59134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:26:20.985 [INFO] [Thread-59134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:26:20.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:26:20.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:26:21.820 [DEBUG] [Thread-59134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:26:21.821 [DEBUG] [Thread-59134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:26:21.868 [DEBUG] [Thread-59134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:26:21.868 [DEBUG] [Thread-59134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:26:21.877 [DEBUG] [Thread-59134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:26:21.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:26:21.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:26:21.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:26:21.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:26:21.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:26:21.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:26:21.911 [DEBUG] [Thread-59134] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:26:28.091 [DEBUG] [Thread-59136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:26:29.197 [DEBUG] [Thread-59137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:26:34.010 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:26:34.011 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:26:44.244 [DEBUG] [Thread-59138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:26:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:26:51.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:26:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:26:52.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 26, 39), 29.02, 13.75, 0.0, 27.26, 21.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:26:52.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:26:39
2025-11-17T18:26:52.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:26:52.880 [DEBUG] [Thread-59139] [transport.py] [_log()] starting thread (client mode): 0xd31ee680
2025-11-17T18:26:52.880 [DEBUG] [Thread-59139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:26:52.907 [DEBUG] [Thread-59139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:26:52.907 [INFO] [Thread-59139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:26:52.910 [DEBUG] [Thread-59139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:26:52.910 [DEBUG] [Thread-59139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:26:52.910 [DEBUG] [Thread-59139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:26:52.910 [DEBUG] [Thread-59139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:26:52.910 [DEBUG] [Thread-59139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] client lang: <none>
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] server lang: <none>
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] kex follows: False
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] Compression: none
2025-11-17T18:26:52.911 [DEBUG] [Thread-59139] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:26:52.927 [DEBUG] [Thread-59139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:26:52.928 [DEBUG] [Thread-59139] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:26:52.929 [DEBUG] [Thread-59139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:26:52.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:26:52.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:26:52.930 [DEBUG] [Thread-59139] [transport.py] [_log()] userauth is OK
2025-11-17T18:26:52.931 [DEBUG] [Thread-59139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:26:52.931 [DEBUG] [Thread-59139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:26:52.931 [DEBUG] [Thread-59139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:26:52.931 [DEBUG] [Thread-59139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:26:52.962 [INFO] [Thread-59139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:26:52.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:26:53.609 [DEBUG] [Thread-59139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:26:53.609 [DEBUG] [Thread-59139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:26:53.609 [DEBUG] [Thread-59139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:26:53.649 [DEBUG] [Thread-59139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:26:53.650 [DEBUG] [Thread-59139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:26:53.653 [DEBUG] [Thread-59139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:26:53.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:26:53.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:26:53.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:26:53.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:26:53.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:26:53.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:26:53.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:26:53.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:26:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:26:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.685120 -999.00  +21.80  21.91     19   -2.70 1 1 1 1 1   887    0 24.26 24.69 ----- 21.4 21.9 291.2 31.2 23.1 -26.0 23.4 -24.6 23.6 -24.1 23.7 -25.8
2025-11-17T18:26:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:26:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:26:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.685120
2025-11-17T18:26:53.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:26:53.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:26:53.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:26:53.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:26:53.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:26:53.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:26:39', tmtdew=29.02, humidity=13.75, cloud=0.0, wind=27.26, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:26:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:26:53.677 [DEBUG] [Thread-59139] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:26:53.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:26:53.773 [DEBUG] [Thread-59142] [transport.py] [_log()] starting thread (client mode): 0xd31ee530
2025-11-17T18:26:53.773 [DEBUG] [Thread-59142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:26:53.787 [DEBUG] [Thread-59142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:26:53.787 [INFO] [Thread-59142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] client lang: <none>
2025-11-17T18:26:53.795 [DEBUG] [Thread-59142] [transport.py] [_log()] server lang: <none>
2025-11-17T18:26:53.796 [DEBUG] [Thread-59142] [transport.py] [_log()] kex follows: False
2025-11-17T18:26:53.796 [DEBUG] [Thread-59142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:26:53.796 [DEBUG] [Thread-59142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:26:53.796 [DEBUG] [Thread-59142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:26:53.796 [DEBUG] [Thread-59142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:26:53.796 [DEBUG] [Thread-59142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:26:53.796 [DEBUG] [Thread-59142] [transport.py] [_log()] Compression: none
2025-11-17T18:26:53.796 [DEBUG] [Thread-59142] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:26:53.856 [DEBUG] [Thread-59142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:26:53.857 [DEBUG] [Thread-59142] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:26:53.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:26:53.857 [DEBUG] [Thread-59142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:26:53.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:26:53.913 [DEBUG] [Thread-59142] [transport.py] [_log()] userauth is OK
2025-11-17T18:26:53.913 [DEBUG] [Thread-59142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:26:53.913 [DEBUG] [Thread-59142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:26:53.913 [DEBUG] [Thread-59142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:26:53.913 [DEBUG] [Thread-59142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:26:53.932 [INFO] [Thread-59142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:26:53.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:26:53.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:26:54.758 [DEBUG] [Thread-59142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:26:54.758 [DEBUG] [Thread-59142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:26:54.806 [DEBUG] [Thread-59142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:26:54.806 [DEBUG] [Thread-59142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:26:54.815 [DEBUG] [Thread-59142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:26:54.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:26:54.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:26:54.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:26:54.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:26:54.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:26:54.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:26:54.850 [DEBUG] [Thread-59142] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:26:59.275 [DEBUG] [Thread-59144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:27:14.312 [DEBUG] [Thread-59145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:27:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:27:24.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:27:24.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:27:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 27, 11), 29.17, 13.6, 0.0, 27.77, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:27:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:27:11
2025-11-17T18:27:25.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:27:25.799 [DEBUG] [Thread-59146] [transport.py] [_log()] starting thread (client mode): 0xd31ec760
2025-11-17T18:27:25.800 [DEBUG] [Thread-59146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:27:25.819 [DEBUG] [Thread-59146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:27:25.820 [INFO] [Thread-59146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] client lang: <none>
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] server lang: <none>
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] kex follows: False
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:27:25.823 [DEBUG] [Thread-59146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:27:25.824 [DEBUG] [Thread-59146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:27:25.824 [DEBUG] [Thread-59146] [transport.py] [_log()] Compression: none
2025-11-17T18:27:25.824 [DEBUG] [Thread-59146] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:27:25.841 [DEBUG] [Thread-59146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:27:25.841 [DEBUG] [Thread-59146] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:27:25.842 [DEBUG] [Thread-59146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:27:25.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:27:25.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:27:25.885 [DEBUG] [Thread-59146] [transport.py] [_log()] userauth is OK
2025-11-17T18:27:25.885 [DEBUG] [Thread-59146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:27:25.885 [DEBUG] [Thread-59146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:27:25.886 [DEBUG] [Thread-59146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:27:25.886 [DEBUG] [Thread-59146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:27:25.907 [INFO] [Thread-59146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:27:25.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:27:26.544 [DEBUG] [Thread-59146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:27:26.544 [DEBUG] [Thread-59146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:27:26.545 [DEBUG] [Thread-59146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:27:26.585 [DEBUG] [Thread-59146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:27:26.586 [DEBUG] [Thread-59146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:27:26.588 [DEBUG] [Thread-59146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:27:26.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:27:26.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:27:26.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:27:26.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:27:26.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:27:26.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:27:26.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:27:26.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:27:26.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:27:26.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.685468 -999.00  +21.80  16.44     19   -2.70 1 1 1 1 1   887    0 25.30 29.74 ----- 17.9 16.4 276.5 22.8 23.1 -26.0 23.4 -24.6 23.6 -25.3 23.8 -26.1
2025-11-17T18:27:26.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:27:26.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:27:26.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.685468
2025-11-17T18:27:26.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:27:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:27:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:27:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:27:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:27:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:27:11', tmtdew=29.17, humidity=13.6, cloud=0.0, wind=27.77, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:27:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:27:26.613 [DEBUG] [Thread-59146] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:27:26.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:27:26.709 [DEBUG] [Thread-59149] [transport.py] [_log()] starting thread (client mode): 0xd31ef7c0
2025-11-17T18:27:26.709 [DEBUG] [Thread-59149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:27:26.725 [DEBUG] [Thread-59149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:27:26.725 [INFO] [Thread-59149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] client lang: <none>
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] server lang: <none>
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] kex follows: False
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:27:26.733 [DEBUG] [Thread-59149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:27:26.734 [DEBUG] [Thread-59149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:27:26.734 [DEBUG] [Thread-59149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:27:26.734 [DEBUG] [Thread-59149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:27:26.734 [DEBUG] [Thread-59149] [transport.py] [_log()] Compression: none
2025-11-17T18:27:26.734 [DEBUG] [Thread-59149] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:27:26.793 [DEBUG] [Thread-59149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:27:26.793 [DEBUG] [Thread-59149] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:27:26.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:27:26.795 [DEBUG] [Thread-59149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:27:26.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:27:26.849 [DEBUG] [Thread-59149] [transport.py] [_log()] userauth is OK
2025-11-17T18:27:26.849 [DEBUG] [Thread-59149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:27:26.849 [DEBUG] [Thread-59149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:27:26.849 [DEBUG] [Thread-59149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:27:26.849 [DEBUG] [Thread-59149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:27:26.868 [INFO] [Thread-59149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:27:26.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:27:26.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:27:27.768 [DEBUG] [Thread-59149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:27:27.768 [DEBUG] [Thread-59149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:27:27.816 [DEBUG] [Thread-59149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:27:27.816 [DEBUG] [Thread-59149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:27:27.825 [DEBUG] [Thread-59149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:27:27.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:27:27.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:27:27.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:27:27.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:27:27.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:27:27.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:27:27.862 [DEBUG] [Thread-59149] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:27:28.144 [DEBUG] [Thread-59151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:27:29.341 [DEBUG] [Thread-59152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:27:34.153 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:27:34.154 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:27:44.384 [DEBUG] [Thread-59153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:27:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:27:57.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:27:57.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:27:58.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 27, 43), 29.34, 13.55, 0.0, 30.7, 22.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:27:58.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:27:43
2025-11-17T18:27:58.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:27:58.779 [DEBUG] [Thread-59154] [transport.py] [_log()] starting thread (client mode): 0xd31ee6e0
2025-11-17T18:27:58.779 [DEBUG] [Thread-59154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:27:58.798 [DEBUG] [Thread-59154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:27:58.798 [INFO] [Thread-59154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:27:58.801 [DEBUG] [Thread-59154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:27:58.801 [DEBUG] [Thread-59154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:27:58.801 [DEBUG] [Thread-59154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] client lang: <none>
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] server lang: <none>
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] kex follows: False
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] Compression: none
2025-11-17T18:27:58.802 [DEBUG] [Thread-59154] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:27:58.819 [DEBUG] [Thread-59154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:27:58.819 [DEBUG] [Thread-59154] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:27:58.820 [DEBUG] [Thread-59154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:27:58.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:27:58.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:27:58.822 [DEBUG] [Thread-59154] [transport.py] [_log()] userauth is OK
2025-11-17T18:27:58.822 [DEBUG] [Thread-59154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:27:58.822 [DEBUG] [Thread-59154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:27:58.822 [DEBUG] [Thread-59154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:27:58.822 [DEBUG] [Thread-59154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:27:58.837 [INFO] [Thread-59154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:27:58.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:27:59.412 [DEBUG] [Thread-59156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:27:59.492 [DEBUG] [Thread-59154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:27:59.493 [DEBUG] [Thread-59154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:27:59.493 [DEBUG] [Thread-59154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:27:59.533 [DEBUG] [Thread-59154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:27:59.534 [DEBUG] [Thread-59154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:27:59.536 [DEBUG] [Thread-59154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:27:59.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:27:59.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:27:59.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:27:59.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:27:59.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:27:59.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:27:59.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:27:59.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:27:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:27:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.685815 -999.00  +21.80  24.65     19   -2.70 1 1 1 1 1   887    0 24.68 33.75 ----- 25.2 24.6 299.8 31.2 23.2 -26.2 23.4 -24.7 23.8 -24.5 23.9 -26.3
2025-11-17T18:27:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:27:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:27:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.685815
2025-11-17T18:27:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:27:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:27:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:27:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:27:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:27:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:27:43', tmtdew=29.34, humidity=13.55, cloud=0.0, wind=30.7, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:27:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:27:59.559 [DEBUG] [Thread-59154] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:27:59.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:27:59.656 [DEBUG] [Thread-59158] [transport.py] [_log()] starting thread (client mode): 0xd31eef80
2025-11-17T18:27:59.656 [DEBUG] [Thread-59158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:27:59.672 [DEBUG] [Thread-59158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:27:59.672 [INFO] [Thread-59158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:27:59.679 [DEBUG] [Thread-59158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:27:59.680 [DEBUG] [Thread-59158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:27:59.680 [DEBUG] [Thread-59158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:27:59.680 [DEBUG] [Thread-59158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:27:59.680 [DEBUG] [Thread-59158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:27:59.680 [DEBUG] [Thread-59158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:27:59.680 [DEBUG] [Thread-59158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:27:59.680 [DEBUG] [Thread-59158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:27:59.680 [DEBUG] [Thread-59158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] client lang: <none>
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] server lang: <none>
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] kex follows: False
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:27:59.681 [DEBUG] [Thread-59158] [transport.py] [_log()] Compression: none
2025-11-17T18:27:59.682 [DEBUG] [Thread-59158] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:27:59.737 [DEBUG] [Thread-59158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:27:59.737 [DEBUG] [Thread-59158] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:27:59.738 [DEBUG] [Thread-59158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:27:59.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:27:59.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:27:59.793 [DEBUG] [Thread-59158] [transport.py] [_log()] userauth is OK
2025-11-17T18:27:59.793 [DEBUG] [Thread-59158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:27:59.793 [DEBUG] [Thread-59158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:27:59.793 [DEBUG] [Thread-59158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:27:59.793 [DEBUG] [Thread-59158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:27:59.812 [INFO] [Thread-59158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:27:59.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:27:59.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:28:00.662 [DEBUG] [Thread-59158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:28:00.662 [DEBUG] [Thread-59158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:28:00.709 [DEBUG] [Thread-59158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:28:00.709 [DEBUG] [Thread-59158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:28:00.718 [DEBUG] [Thread-59158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:28:00.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:28:00.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:28:00.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:28:00.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:28:00.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:28:00.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:28:00.753 [DEBUG] [Thread-59158] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:28:14.445 [DEBUG] [Thread-59160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:28:28.201 [DEBUG] [Thread-59161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:28:29.486 [DEBUG] [Thread-59162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:28:30.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:28:30.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:28:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:28:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 28, 15), 29.39, 13.52, 0.0, 28.37, 22.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:28:31.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:28:15
2025-11-17T18:28:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:28:31.700 [DEBUG] [Thread-59163] [transport.py] [_log()] starting thread (client mode): 0xd078f340
2025-11-17T18:28:31.701 [DEBUG] [Thread-59163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:28:31.721 [DEBUG] [Thread-59163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:28:31.721 [INFO] [Thread-59163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] client lang: <none>
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] server lang: <none>
2025-11-17T18:28:31.724 [DEBUG] [Thread-59163] [transport.py] [_log()] kex follows: False
2025-11-17T18:28:31.725 [DEBUG] [Thread-59163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:28:31.725 [DEBUG] [Thread-59163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:28:31.725 [DEBUG] [Thread-59163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:28:31.725 [DEBUG] [Thread-59163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:28:31.725 [DEBUG] [Thread-59163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:28:31.725 [DEBUG] [Thread-59163] [transport.py] [_log()] Compression: none
2025-11-17T18:28:31.725 [DEBUG] [Thread-59163] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:28:31.742 [DEBUG] [Thread-59163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:28:31.743 [DEBUG] [Thread-59163] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:28:31.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:28:31.744 [DEBUG] [Thread-59163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:28:31.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:28:31.746 [DEBUG] [Thread-59163] [transport.py] [_log()] userauth is OK
2025-11-17T18:28:31.746 [DEBUG] [Thread-59163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:28:31.746 [DEBUG] [Thread-59163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:28:31.746 [DEBUG] [Thread-59163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:28:31.746 [DEBUG] [Thread-59163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:28:31.780 [INFO] [Thread-59163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:28:31.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:28:32.447 [DEBUG] [Thread-59163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:28:32.448 [DEBUG] [Thread-59163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:28:32.448 [DEBUG] [Thread-59163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:28:32.488 [DEBUG] [Thread-59163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:28:32.488 [DEBUG] [Thread-59163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:28:32.491 [DEBUG] [Thread-59163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:28:32.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:28:32.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:28:32.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:28:32.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:28:32.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:28:32.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:28:32.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:28:32.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:28:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:28:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.686162 -999.00  +21.90  19.89     19   -2.60 1 1 1 1 1   887    0 25.08 32.57 ----- 21.8 19.9 286.8 25.6 23.2 -26.1 23.5 -25.0 23.9 -25.3 23.9 -26.0
2025-11-17T18:28:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:28:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:28:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.686162
2025-11-17T18:28:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:28:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:28:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:28:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:28:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:28:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:28:15', tmtdew=29.39, humidity=13.52, cloud=0.0, wind=28.37, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:28:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:28:32.515 [DEBUG] [Thread-59163] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:28:32.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:28:32.612 [DEBUG] [Thread-59166] [transport.py] [_log()] starting thread (client mode): 0xd31ee170
2025-11-17T18:28:32.612 [DEBUG] [Thread-59166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:28:32.627 [DEBUG] [Thread-59166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:28:32.628 [INFO] [Thread-59166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:28:32.635 [DEBUG] [Thread-59166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] client lang: <none>
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] server lang: <none>
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] kex follows: False
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:28:32.636 [DEBUG] [Thread-59166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:28:32.637 [DEBUG] [Thread-59166] [transport.py] [_log()] Compression: none
2025-11-17T18:28:32.637 [DEBUG] [Thread-59166] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:28:32.692 [DEBUG] [Thread-59166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:28:32.693 [DEBUG] [Thread-59166] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:28:32.693 [DEBUG] [Thread-59166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:28:32.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:28:32.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:28:32.748 [DEBUG] [Thread-59166] [transport.py] [_log()] userauth is OK
2025-11-17T18:28:32.749 [DEBUG] [Thread-59166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:28:32.749 [DEBUG] [Thread-59166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:28:32.749 [DEBUG] [Thread-59166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:28:32.749 [DEBUG] [Thread-59166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:28:32.768 [INFO] [Thread-59166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:28:32.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:28:32.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:28:33.590 [DEBUG] [Thread-59166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:28:33.590 [DEBUG] [Thread-59166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:28:33.638 [DEBUG] [Thread-59166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:28:33.638 [DEBUG] [Thread-59166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:28:33.647 [DEBUG] [Thread-59166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:28:33.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:28:33.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:28:33.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:28:33.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:28:33.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:28:33.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:28:33.681 [DEBUG] [Thread-59166] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:28:34.296 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:28:34.297 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:28:44.519 [DEBUG] [Thread-59168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:28:59.563 [DEBUG] [Thread-59169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:29:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:29:03.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:29:03.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:29:04.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 28, 47), 29.38, 13.44, 0.0, 27.93, 22.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:29:04.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:28:47
2025-11-17T18:29:04.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:29:04.653 [DEBUG] [Thread-59170] [transport.py] [_log()] starting thread (client mode): 0xd31ed240
2025-11-17T18:29:04.653 [DEBUG] [Thread-59170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:29:04.669 [DEBUG] [Thread-59170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:29:04.669 [INFO] [Thread-59170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] client lang: <none>
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] server lang: <none>
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] kex follows: False
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:29:04.670 [DEBUG] [Thread-59170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:29:04.671 [DEBUG] [Thread-59170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:29:04.671 [DEBUG] [Thread-59170] [transport.py] [_log()] Compression: none
2025-11-17T18:29:04.671 [DEBUG] [Thread-59170] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:29:04.680 [DEBUG] [Thread-59170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:29:04.681 [DEBUG] [Thread-59170] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:29:04.681 [DEBUG] [Thread-59170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:29:04.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:29:04.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:29:04.681 [DEBUG] [Thread-59170] [transport.py] [_log()] userauth is OK
2025-11-17T18:29:04.681 [DEBUG] [Thread-59170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:29:04.682 [DEBUG] [Thread-59170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:29:04.682 [DEBUG] [Thread-59170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:29:04.682 [DEBUG] [Thread-59170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:29:04.698 [INFO] [Thread-59170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:29:04.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:29:05.372 [DEBUG] [Thread-59170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:29:05.372 [DEBUG] [Thread-59170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:29:05.372 [DEBUG] [Thread-59170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:29:05.413 [DEBUG] [Thread-59170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:29:05.414 [DEBUG] [Thread-59170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:29:05.416 [DEBUG] [Thread-59170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:29:05.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:29:05.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:29:05.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:29:05.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:29:05.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:29:05.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:29:05.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:29:05.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:29:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:29:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.686509 -999.00  +21.90  20.08     19   -2.70 1 1 1 1 1   887    0 24.50 34.74 ----- 26.1 20.1 280.6 34.5 23.2 -26.8 23.5 -25.7 23.8 -26.5 24.0 -26.5
2025-11-17T18:29:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:29:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:29:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.686509
2025-11-17T18:29:05.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:29:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:29:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:29:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:29:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:29:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:28:47', tmtdew=29.38, humidity=13.44, cloud=0.0, wind=27.93, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:28:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:29:05.439 [DEBUG] [Thread-59170] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:29:05.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:29:05.537 [DEBUG] [Thread-59173] [transport.py] [_log()] starting thread (client mode): 0xd31ef6a0
2025-11-17T18:29:05.537 [DEBUG] [Thread-59173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:29:05.551 [DEBUG] [Thread-59173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:29:05.551 [INFO] [Thread-59173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:29:05.559 [DEBUG] [Thread-59173] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:29:05.559 [DEBUG] [Thread-59173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:29:05.559 [DEBUG] [Thread-59173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:29:05.559 [DEBUG] [Thread-59173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:29:05.559 [DEBUG] [Thread-59173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:29:05.559 [DEBUG] [Thread-59173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] client lang: <none>
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] server lang: <none>
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] kex follows: False
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] Compression: none
2025-11-17T18:29:05.560 [DEBUG] [Thread-59173] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:29:05.620 [DEBUG] [Thread-59173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:29:05.621 [DEBUG] [Thread-59173] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:29:05.621 [DEBUG] [Thread-59173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:29:05.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:29:05.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:29:05.676 [DEBUG] [Thread-59173] [transport.py] [_log()] userauth is OK
2025-11-17T18:29:05.676 [DEBUG] [Thread-59173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:29:05.677 [DEBUG] [Thread-59173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:29:05.677 [DEBUG] [Thread-59173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:29:05.677 [DEBUG] [Thread-59173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:29:05.695 [INFO] [Thread-59173] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:29:05.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:29:05.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:29:06.530 [DEBUG] [Thread-59173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:29:06.530 [DEBUG] [Thread-59173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:29:06.578 [DEBUG] [Thread-59173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:29:06.578 [DEBUG] [Thread-59173] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:29:06.587 [DEBUG] [Thread-59173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:29:06.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:29:06.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:29:06.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:29:06.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:29:06.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:29:06.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:29:06.620 [DEBUG] [Thread-59173] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:29:14.590 [DEBUG] [Thread-59175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:29:28.260 [DEBUG] [Thread-59176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:29:29.629 [DEBUG] [Thread-59177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:29:34.439 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:29:34.440 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:29:36.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:29:36.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:29:36.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:29:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 29, 19), 29.36, 13.46, 0.0, 28.18, 22.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:29:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:29:19
2025-11-17T18:29:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:29:37.580 [DEBUG] [Thread-59178] [transport.py] [_log()] starting thread (client mode): 0xd078e680
2025-11-17T18:29:37.580 [DEBUG] [Thread-59178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:29:37.599 [DEBUG] [Thread-59178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:29:37.599 [INFO] [Thread-59178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] client lang: <none>
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] server lang: <none>
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] kex follows: False
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] Compression: none
2025-11-17T18:29:37.601 [DEBUG] [Thread-59178] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:29:37.609 [DEBUG] [Thread-59178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:29:37.610 [DEBUG] [Thread-59178] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:29:37.610 [DEBUG] [Thread-59178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:29:37.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:29:37.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:29:37.610 [DEBUG] [Thread-59178] [transport.py] [_log()] userauth is OK
2025-11-17T18:29:37.610 [DEBUG] [Thread-59178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:29:37.611 [DEBUG] [Thread-59178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:29:37.611 [DEBUG] [Thread-59178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:29:37.611 [DEBUG] [Thread-59178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:29:37.621 [INFO] [Thread-59178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:29:37.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:29:38.259 [DEBUG] [Thread-59178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:29:38.259 [DEBUG] [Thread-59178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:29:38.259 [DEBUG] [Thread-59178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:29:38.300 [DEBUG] [Thread-59178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:29:38.300 [DEBUG] [Thread-59178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:29:38.302 [DEBUG] [Thread-59178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:29:38.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:29:38.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:29:38.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:29:38.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:29:38.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:29:38.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:29:38.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:29:38.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.686856 -999.00  +21.70  26.77     19   -2.80 1 1 1 1 1   887    0 25.02 33.18 ----- 23.9 26.8 286.4 34.5 23.1 -26.9 23.5 -25.5 23.8 -25.9 24.0 -26.8
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.686856
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:29:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:29:19', tmtdew=29.36, humidity=13.46, cloud=0.0, wind=28.18, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:29:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:29:38.322 [DEBUG] [Thread-59178] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:29:38.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:29:38.410 [DEBUG] [Thread-59181] [transport.py] [_log()] starting thread (client mode): 0xd078dab0
2025-11-17T18:29:38.410 [DEBUG] [Thread-59181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:29:38.425 [DEBUG] [Thread-59181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:29:38.425 [INFO] [Thread-59181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] client lang: <none>
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] server lang: <none>
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] kex follows: False
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:29:38.432 [DEBUG] [Thread-59181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:29:38.433 [DEBUG] [Thread-59181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:29:38.433 [DEBUG] [Thread-59181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:29:38.433 [DEBUG] [Thread-59181] [transport.py] [_log()] Compression: none
2025-11-17T18:29:38.433 [DEBUG] [Thread-59181] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:29:38.496 [DEBUG] [Thread-59181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:29:38.496 [DEBUG] [Thread-59181] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:29:38.497 [DEBUG] [Thread-59181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:29:38.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:29:38.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:29:38.553 [DEBUG] [Thread-59181] [transport.py] [_log()] userauth is OK
2025-11-17T18:29:38.553 [DEBUG] [Thread-59181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:29:38.553 [DEBUG] [Thread-59181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:29:38.553 [DEBUG] [Thread-59181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:29:38.553 [DEBUG] [Thread-59181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:29:38.570 [INFO] [Thread-59181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:29:38.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:29:38.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:29:39.420 [DEBUG] [Thread-59181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:29:39.421 [DEBUG] [Thread-59181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:29:39.468 [DEBUG] [Thread-59181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:29:39.468 [DEBUG] [Thread-59181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:29:39.476 [DEBUG] [Thread-59181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:29:39.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:29:39.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:29: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') -> 00000000
2025-11-17T18:29:39.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:29:39.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:29:39.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:29:39.509 [DEBUG] [Thread-59181] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:29:44.659 [DEBUG] [Thread-59183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:29:59.700 [DEBUG] [Thread-59184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:30:09.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:30:09.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:30:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:30:10.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 29, 52), 29.29, 13.51, 0.0, 23.4, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:30:10.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:29:52
2025-11-17T18:30:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:30:10.456 [DEBUG] [Thread-59185] [transport.py] [_log()] starting thread (client mode): 0xd078e200
2025-11-17T18:30:10.456 [DEBUG] [Thread-59185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:30:10.477 [DEBUG] [Thread-59185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:30:10.477 [INFO] [Thread-59185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:30:10.479 [DEBUG] [Thread-59185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:30:10.479 [DEBUG] [Thread-59185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:30:10.479 [DEBUG] [Thread-59185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:30:10.479 [DEBUG] [Thread-59185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:30:10.479 [DEBUG] [Thread-59185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:30:10.479 [DEBUG] [Thread-59185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:30:10.479 [DEBUG] [Thread-59185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:30:10.479 [DEBUG] [Thread-59185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] client lang: <none>
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] server lang: <none>
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] kex follows: False
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] Compression: none
2025-11-17T18:30:10.480 [DEBUG] [Thread-59185] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:30:10.494 [DEBUG] [Thread-59185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:30:10.494 [DEBUG] [Thread-59185] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:30:10.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:30:10.495 [DEBUG] [Thread-59185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:30:10.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:30:10.497 [DEBUG] [Thread-59185] [transport.py] [_log()] userauth is OK
2025-11-17T18:30:10.497 [DEBUG] [Thread-59185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:30:10.497 [DEBUG] [Thread-59185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:30:10.497 [DEBUG] [Thread-59185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:30:10.498 [DEBUG] [Thread-59185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:30:10.515 [INFO] [Thread-59185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:30:10.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:30:11.115 [DEBUG] [Thread-59185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:30:11.115 [DEBUG] [Thread-59185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:30:11.116 [DEBUG] [Thread-59185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:30:11.156 [DEBUG] [Thread-59185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:30:11.156 [DEBUG] [Thread-59185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:30:11.159 [DEBUG] [Thread-59185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:30:11.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:30:11.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:30:11.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:30:11.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:30:11.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:30:11.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:30:11.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:30:11.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:30:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:30:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.687204 -999.00  +21.50  22.50     19   -2.80 1 1 1 1 1   887    0 25.06 31.50 ----- 22.4 22.5 274.2 29.0 23.1 -27.3 23.4 -25.8 23.6 -25.3 23.9 -26.9
2025-11-17T18:30:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:30:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:30:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.687204
2025-11-17T18:30:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:30:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:30:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:30:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:30:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:30:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:29:52', tmtdew=29.29, humidity=13.51, cloud=0.0, wind=23.4, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:29:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:30:11.184 [DEBUG] [Thread-59185] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:30:11.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:30:11.282 [DEBUG] [Thread-59188] [transport.py] [_log()] starting thread (client mode): 0xd31efa30
2025-11-17T18:30:11.282 [DEBUG] [Thread-59188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:30:11.301 [DEBUG] [Thread-59188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:30:11.301 [INFO] [Thread-59188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] client lang: <none>
2025-11-17T18:30:11.309 [DEBUG] [Thread-59188] [transport.py] [_log()] server lang: <none>
2025-11-17T18:30:11.310 [DEBUG] [Thread-59188] [transport.py] [_log()] kex follows: False
2025-11-17T18:30:11.310 [DEBUG] [Thread-59188] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:30:11.310 [DEBUG] [Thread-59188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:30:11.310 [DEBUG] [Thread-59188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:30:11.310 [DEBUG] [Thread-59188] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:30:11.310 [DEBUG] [Thread-59188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:30:11.310 [DEBUG] [Thread-59188] [transport.py] [_log()] Compression: none
2025-11-17T18:30:11.310 [DEBUG] [Thread-59188] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:30:11.368 [DEBUG] [Thread-59188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:30:11.369 [DEBUG] [Thread-59188] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:30:11.369 [DEBUG] [Thread-59188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:30:11.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:30:11.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:30:11.425 [DEBUG] [Thread-59188] [transport.py] [_log()] userauth is OK
2025-11-17T18:30:11.425 [DEBUG] [Thread-59188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:30:11.425 [DEBUG] [Thread-59188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:30:11.425 [DEBUG] [Thread-59188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:30:11.425 [DEBUG] [Thread-59188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:30:11.444 [INFO] [Thread-59188] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:30:11.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:30:11.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:30:12.308 [DEBUG] [Thread-59188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:30:12.309 [DEBUG] [Thread-59188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:30:12.356 [DEBUG] [Thread-59188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:30:12.356 [DEBUG] [Thread-59188] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:30:12.366 [DEBUG] [Thread-59188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:30:12.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:30:12.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')
2025-11-17T18:30:12.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:30:12.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:30:12.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:30:12.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:30:12.401 [DEBUG] [Thread-59188] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:30:14.734 [DEBUG] [Thread-59190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:30:28.310 [DEBUG] [Thread-59191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:30:29.781 [DEBUG] [Thread-59192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:30:34.584 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:30:34.585 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:30:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:30:42.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:30:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:30:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 30, 24), 29.26, 13.54, 0.0, 23.75, 21.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:30:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:30:24
2025-11-17T18:30:43.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:30:43.350 [DEBUG] [Thread-59193] [transport.py] [_log()] starting thread (client mode): 0xd078c040
2025-11-17T18:30:43.350 [DEBUG] [Thread-59193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:30:43.369 [DEBUG] [Thread-59193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:30:43.370 [INFO] [Thread-59193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:30:43.372 [DEBUG] [Thread-59193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] client lang: <none>
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] server lang: <none>
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] kex follows: False
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] Compression: none
2025-11-17T18:30:43.373 [DEBUG] [Thread-59193] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:30:43.391 [DEBUG] [Thread-59193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:30:43.391 [DEBUG] [Thread-59193] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:30:43.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:30:43.392 [DEBUG] [Thread-59193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:30:43.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:30:43.395 [DEBUG] [Thread-59193] [transport.py] [_log()] userauth is OK
2025-11-17T18:30:43.395 [DEBUG] [Thread-59193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:30:43.395 [DEBUG] [Thread-59193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:30:43.395 [DEBUG] [Thread-59193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:30:43.395 [DEBUG] [Thread-59193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:30:43.410 [INFO] [Thread-59193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:30:43.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:30:44.005 [DEBUG] [Thread-59193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:30:44.006 [DEBUG] [Thread-59193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:30:44.006 [DEBUG] [Thread-59193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:30:44.046 [DEBUG] [Thread-59193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:30:44.046 [DEBUG] [Thread-59193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:30:44.048 [DEBUG] [Thread-59193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:30:44.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:30:44.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:30:44.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:30:44.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:30:44.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:30:44.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:30:44.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:30:44.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:30:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:30:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.687898 -999.00  +21.50  19.84     19   -2.80 1 1 1 1 1   887    0 24.84 32.20 ----- 26.6 19.8 275.6 29.5 23.1 -26.6 23.4 -25.7 23.6 -25.7 23.9 -26.4
2025-11-17T18:30:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:30:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:30:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.687898
2025-11-17T18:30:44.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:30:44.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:30:44.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:30:44.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:30:44.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:30:44.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:30:24', tmtdew=29.26, humidity=13.54, cloud=0.0, wind=23.75, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:30:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:30:44.075 [DEBUG] [Thread-59193] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:30:44.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:30:44.171 [DEBUG] [Thread-59196] [transport.py] [_log()] starting thread (client mode): 0xd078e290
2025-11-17T18:30:44.171 [DEBUG] [Thread-59196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:30:44.187 [DEBUG] [Thread-59196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:30:44.187 [INFO] [Thread-59196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:30:44.194 [DEBUG] [Thread-59196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:30:44.194 [DEBUG] [Thread-59196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] client lang: <none>
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] server lang: <none>
2025-11-17T18:30:44.195 [DEBUG] [Thread-59196] [transport.py] [_log()] kex follows: False
2025-11-17T18:30:44.196 [DEBUG] [Thread-59196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:30:44.196 [DEBUG] [Thread-59196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:30:44.196 [DEBUG] [Thread-59196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:30:44.196 [DEBUG] [Thread-59196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:30:44.196 [DEBUG] [Thread-59196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:30:44.196 [DEBUG] [Thread-59196] [transport.py] [_log()] Compression: none
2025-11-17T18:30:44.196 [DEBUG] [Thread-59196] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:30:44.256 [DEBUG] [Thread-59196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:30:44.256 [DEBUG] [Thread-59196] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:30:44.257 [DEBUG] [Thread-59196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:30:44.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:30:44.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:30:44.317 [DEBUG] [Thread-59196] [transport.py] [_log()] userauth is OK
2025-11-17T18:30:44.318 [DEBUG] [Thread-59196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:30:44.318 [DEBUG] [Thread-59196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:30:44.318 [DEBUG] [Thread-59196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:30:44.318 [DEBUG] [Thread-59196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:30:44.337 [INFO] [Thread-59196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:30:44.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:30:44.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:30:44.820 [DEBUG] [Thread-59198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:30:45.160 [DEBUG] [Thread-59196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:30:45.161 [DEBUG] [Thread-59196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:30:45.208 [DEBUG] [Thread-59196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:30:45.208 [DEBUG] [Thread-59196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:30:45.218 [DEBUG] [Thread-59196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:30:45.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:30:45.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:30:45.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:30:45.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:30:45.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:30:45.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:30:45.253 [DEBUG] [Thread-59196] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:30:59.862 [DEBUG] [Thread-59199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:31:14.893 [DEBUG] [Thread-59200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:31:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:31:15.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:31:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:31:15.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 30, 56), 29.22, 13.51, 0.0, 27.53, 21.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:31:15.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:30:56
2025-11-17T18:31:16.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:31:16.216 [DEBUG] [Thread-59201] [transport.py] [_log()] starting thread (client mode): 0xd31b0670
2025-11-17T18:31:16.216 [DEBUG] [Thread-59201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:31:16.230 [DEBUG] [Thread-59201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:31:16.230 [INFO] [Thread-59201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:31:16.231 [DEBUG] [Thread-59201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] client lang: <none>
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] server lang: <none>
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] kex follows: False
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] Compression: none
2025-11-17T18:31:16.232 [DEBUG] [Thread-59201] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:31:16.239 [DEBUG] [Thread-59201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:31:16.239 [DEBUG] [Thread-59201] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:31:16.239 [DEBUG] [Thread-59201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:31:16.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:31:16.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:31:16.240 [DEBUG] [Thread-59201] [transport.py] [_log()] userauth is OK
2025-11-17T18:31:16.240 [DEBUG] [Thread-59201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:31:16.240 [DEBUG] [Thread-59201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:31:16.240 [DEBUG] [Thread-59201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:31:16.240 [DEBUG] [Thread-59201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:31:16.253 [INFO] [Thread-59201] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:31:16.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:31:16.826 [DEBUG] [Thread-59201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:31:16.827 [DEBUG] [Thread-59201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:31:16.827 [DEBUG] [Thread-59201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:31:16.867 [DEBUG] [Thread-59201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:31:16.868 [DEBUG] [Thread-59201] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:31:16.870 [DEBUG] [Thread-59201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:31:16.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:31:16.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:31:16.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:31:16.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:31:16.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:31:16.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:31:16.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:31:16.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:31:16.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:31:16.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.688245 -999.00  +21.40  27.70     19   -2.80 1 1 1 1 1   887    0 24.70 30.85 ----- 27.2 27.7 273.6 34.1 23.0 -27.7 23.3 -25.4 23.4 -26.8 23.8 -26.7
2025-11-17T18:31:16.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:31:16.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:31:16.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.688245
2025-11-17T18:31:16.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:31:16.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:31:16.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:31:16.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:31:16.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:31:16.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:30:56', tmtdew=29.22, humidity=13.51, cloud=0.0, wind=27.53, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:31:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:31:16.896 [DEBUG] [Thread-59201] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:31:16.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:31:16.994 [DEBUG] [Thread-59204] [transport.py] [_log()] starting thread (client mode): 0xd31b2cb0
2025-11-17T18:31:16.994 [DEBUG] [Thread-59204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:31:17.010 [DEBUG] [Thread-59204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:31:17.010 [INFO] [Thread-59204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:31:17.018 [DEBUG] [Thread-59204] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:31:17.018 [DEBUG] [Thread-59204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:31:17.018 [DEBUG] [Thread-59204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:31:17.018 [DEBUG] [Thread-59204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:31:17.018 [DEBUG] [Thread-59204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:31:17.018 [DEBUG] [Thread-59204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:31:17.018 [DEBUG] [Thread-59204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] client lang: <none>
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] server lang: <none>
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] kex follows: False
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] Compression: none
2025-11-17T18:31:17.019 [DEBUG] [Thread-59204] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:31:17.084 [DEBUG] [Thread-59204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:31:17.084 [DEBUG] [Thread-59204] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:31:17.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:31:17.085 [DEBUG] [Thread-59204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:31:17.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:31:17.140 [DEBUG] [Thread-59204] [transport.py] [_log()] userauth is OK
2025-11-17T18:31:17.141 [DEBUG] [Thread-59204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:31:17.141 [DEBUG] [Thread-59204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:31:17.141 [DEBUG] [Thread-59204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:31:17.141 [DEBUG] [Thread-59204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:31:17.163 [INFO] [Thread-59204] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:31:17.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:31:17.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:31:18.048 [DEBUG] [Thread-59204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:31:18.048 [DEBUG] [Thread-59204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:31:18.096 [DEBUG] [Thread-59204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:31:18.096 [DEBUG] [Thread-59204] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:31:18.105 [DEBUG] [Thread-59204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:31:18.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:31:18.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:31:18.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:31:18.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:31:18.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:31:18.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:31:18.139 [DEBUG] [Thread-59204] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:31:28.362 [DEBUG] [Thread-59206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:31:29.926 [DEBUG] [Thread-59207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:31:34.727 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:31:34.727 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:31:44.966 [DEBUG] [Thread-59208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:31:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:31:48.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:31:48.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:31:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 31, 28), 29.2, 13.54, 0.0, 32.08, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:31:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:31:28
2025-11-17T18:31:48.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:31:49.049 [DEBUG] [Thread-59209] [transport.py] [_log()] starting thread (client mode): 0xd078ded0
2025-11-17T18:31:49.049 [DEBUG] [Thread-59209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:31:49.068 [DEBUG] [Thread-59209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:31:49.069 [INFO] [Thread-59209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:31:49.072 [DEBUG] [Thread-59209] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:31:49.072 [DEBUG] [Thread-59209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:31:49.072 [DEBUG] [Thread-59209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:31:49.072 [DEBUG] [Thread-59209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:31:49.072 [DEBUG] [Thread-59209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:31:49.072 [DEBUG] [Thread-59209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:31:49.072 [DEBUG] [Thread-59209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:31:49.072 [DEBUG] [Thread-59209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] client lang: <none>
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] server lang: <none>
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] kex follows: False
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] Compression: none
2025-11-17T18:31:49.073 [DEBUG] [Thread-59209] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:31:49.090 [DEBUG] [Thread-59209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:31:49.090 [DEBUG] [Thread-59209] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:31:49.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:31:49.091 [DEBUG] [Thread-59209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:31:49.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:31:49.093 [DEBUG] [Thread-59209] [transport.py] [_log()] userauth is OK
2025-11-17T18:31:49.093 [DEBUG] [Thread-59209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:31:49.094 [DEBUG] [Thread-59209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:31:49.094 [DEBUG] [Thread-59209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:31:49.094 [DEBUG] [Thread-59209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:31:49.110 [INFO] [Thread-59209] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:31:49.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:31:49.671 [DEBUG] [Thread-59209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:31:49.671 [DEBUG] [Thread-59209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:31:49.672 [DEBUG] [Thread-59209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:31:49.713 [DEBUG] [Thread-59209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:31:49.713 [DEBUG] [Thread-59209] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:31:49.715 [DEBUG] [Thread-59209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:31:49.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:31:49.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:31:49.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:31:49.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:31:49.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:31:49.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:31:49.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:31:49.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:31:49.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:31:49.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.688245 -999.00  +21.40  27.70     19   -2.80 1 1 1 1 1   887    0 24.70 30.85 ----- 27.2 27.7 273.6 34.1 23.0 -27.7 23.3 -25.4 23.4 -26.8 23.8 -26.7
2025-11-17T18:31:49.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:31:49.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:31:49.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.688245
2025-11-17T18:31:49.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:31:49.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:31:49.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:31:49.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:31:49.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:31:49.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:31:28', tmtdew=29.2, humidity=13.54, cloud=0.0, wind=32.08, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:31:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:31:49.736 [DEBUG] [Thread-59209] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:31:49.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:31:49.831 [DEBUG] [Thread-59212] [transport.py] [_log()] starting thread (client mode): 0xd078ebc0
2025-11-17T18:31:49.832 [DEBUG] [Thread-59212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:31:49.847 [DEBUG] [Thread-59212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:31:49.847 [INFO] [Thread-59212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:31:49.855 [DEBUG] [Thread-59212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:31:49.855 [DEBUG] [Thread-59212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:31:49.855 [DEBUG] [Thread-59212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:31:49.855 [DEBUG] [Thread-59212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:31:49.855 [DEBUG] [Thread-59212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:31:49.855 [DEBUG] [Thread-59212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:31:49.855 [DEBUG] [Thread-59212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:31:49.855 [DEBUG] [Thread-59212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] client lang: <none>
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] server lang: <none>
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] kex follows: False
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:31:49.856 [DEBUG] [Thread-59212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:31:49.857 [DEBUG] [Thread-59212] [transport.py] [_log()] Compression: none
2025-11-17T18:31:49.857 [DEBUG] [Thread-59212] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:31:49.913 [DEBUG] [Thread-59212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:31:49.913 [DEBUG] [Thread-59212] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:31:49.914 [DEBUG] [Thread-59212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:31:49.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:31:49.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:31:49.969 [DEBUG] [Thread-59212] [transport.py] [_log()] userauth is OK
2025-11-17T18:31:49.969 [DEBUG] [Thread-59212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:31:49.969 [DEBUG] [Thread-59212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:31:49.969 [DEBUG] [Thread-59212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:31:49.969 [DEBUG] [Thread-59212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:31:49.989 [INFO] [Thread-59212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:31:49.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:31:49.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:31:50.853 [DEBUG] [Thread-59212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:31:50.853 [DEBUG] [Thread-59212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:31:50.901 [DEBUG] [Thread-59212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:31:50.901 [DEBUG] [Thread-59212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:31:50.910 [DEBUG] [Thread-59212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:31:50.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:31:50.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:31:50.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:31:50.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:31:50.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:31:50.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:31:50.944 [DEBUG] [Thread-59212] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:31:59.997 [DEBUG] [Thread-59214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:32:15.046 [DEBUG] [Thread-59215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:32:20.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:32:20.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:32:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:32:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 31, 28), 29.2, 13.54, 0.0, 32.08, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:32:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:31:28
2025-11-17T18:32:21.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:32:21.884 [DEBUG] [Thread-59216] [transport.py] [_log()] starting thread (client mode): 0xd31b1f90
2025-11-17T18:32:21.884 [DEBUG] [Thread-59216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:32:21.907 [DEBUG] [Thread-59216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:32:21.907 [INFO] [Thread-59216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:32:21.909 [DEBUG] [Thread-59216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:32:21.909 [DEBUG] [Thread-59216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] client lang: <none>
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] server lang: <none>
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] kex follows: False
2025-11-17T18:32:21.910 [DEBUG] [Thread-59216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:32:21.911 [DEBUG] [Thread-59216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:32:21.911 [DEBUG] [Thread-59216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:32:21.911 [DEBUG] [Thread-59216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:32:21.911 [DEBUG] [Thread-59216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:32:21.911 [DEBUG] [Thread-59216] [transport.py] [_log()] Compression: none
2025-11-17T18:32:21.911 [DEBUG] [Thread-59216] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:32:21.924 [DEBUG] [Thread-59216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:32:21.924 [DEBUG] [Thread-59216] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:32:21.925 [DEBUG] [Thread-59216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:32:21.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:32:21.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:32:21.927 [DEBUG] [Thread-59216] [transport.py] [_log()] userauth is OK
2025-11-17T18:32:21.927 [DEBUG] [Thread-59216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:32:21.928 [DEBUG] [Thread-59216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:32:21.928 [DEBUG] [Thread-59216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:32:21.928 [DEBUG] [Thread-59216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:32:21.952 [INFO] [Thread-59216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:32:21.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:32:22.545 [DEBUG] [Thread-59216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:32:22.545 [DEBUG] [Thread-59216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:32:22.545 [DEBUG] [Thread-59216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:32:22.585 [DEBUG] [Thread-59216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:32:22.585 [DEBUG] [Thread-59216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:32:22.588 [DEBUG] [Thread-59216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:32:22.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:32:22.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:32:22.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:32:22.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:32:22.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:32:22.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:32:22.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:32:22.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:32:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:32:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.688592 -999.00  +21.40  28.17     19   -2.80 1 1 1 1 1   887    0 25.09 32.43 ----- 33.6 28.2 291.8 32.3 23.1 -26.5 23.3 -25.4 23.5 -25.1 23.8 -26.1
2025-11-17T18:32:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:32:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:32:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.688592
2025-11-17T18:32:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:32:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:32:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:32:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:32:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:32:22.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:31:28', tmtdew=29.2, humidity=13.54, cloud=0.0, wind=32.08, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:31:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:32:22.610 [DEBUG] [Thread-59216] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:32:22.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:32:22.705 [DEBUG] [Thread-59219] [transport.py] [_log()] starting thread (client mode): 0xd31b2590
2025-11-17T18:32:22.705 [DEBUG] [Thread-59219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:32:22.720 [DEBUG] [Thread-59219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:32:22.720 [INFO] [Thread-59219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:32:22.728 [DEBUG] [Thread-59219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:32:22.728 [DEBUG] [Thread-59219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:32:22.728 [DEBUG] [Thread-59219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:32:22.728 [DEBUG] [Thread-59219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:32:22.728 [DEBUG] [Thread-59219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:32:22.728 [DEBUG] [Thread-59219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:32:22.728 [DEBUG] [Thread-59219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] client lang: <none>
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] server lang: <none>
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] kex follows: False
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] Compression: none
2025-11-17T18:32:22.729 [DEBUG] [Thread-59219] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:32:22.788 [DEBUG] [Thread-59219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:32:22.789 [DEBUG] [Thread-59219] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:32:22.789 [DEBUG] [Thread-59219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:32:22.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:32:22.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:32:22.847 [DEBUG] [Thread-59219] [transport.py] [_log()] userauth is OK
2025-11-17T18:32:22.847 [DEBUG] [Thread-59219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:32:22.848 [DEBUG] [Thread-59219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:32:22.848 [DEBUG] [Thread-59219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:32:22.848 [DEBUG] [Thread-59219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:32:22.867 [INFO] [Thread-59219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:32:22.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:32:22.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:32:23.698 [DEBUG] [Thread-59219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:32:23.698 [DEBUG] [Thread-59219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:32:23.746 [DEBUG] [Thread-59219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:32:23.746 [DEBUG] [Thread-59219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:32:23.757 [DEBUG] [Thread-59219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:32:23.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:32:23.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:32:23.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:32:23.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:32:23.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:32:23.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:32:23.796 [DEBUG] [Thread-59219] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:32:28.412 [DEBUG] [Thread-59221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:32:30.078 [DEBUG] [Thread-59222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:32:34.867 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:32:34.869 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:32:45.129 [DEBUG] [Thread-59223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:32:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:32:53.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:32:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:32:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 32, 32), 28.99, 13.69, 0.0, 30.21, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:32:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:32:32
2025-11-17T18:32:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:32:54.786 [DEBUG] [Thread-59224] [transport.py] [_log()] starting thread (client mode): 0xd078e6b0
2025-11-17T18:32:54.786 [DEBUG] [Thread-59224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:32:54.807 [DEBUG] [Thread-59224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:32:54.807 [INFO] [Thread-59224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] client lang: <none>
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] server lang: <none>
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] kex follows: False
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:32:54.810 [DEBUG] [Thread-59224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:32:54.811 [DEBUG] [Thread-59224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:32:54.811 [DEBUG] [Thread-59224] [transport.py] [_log()] Compression: none
2025-11-17T18:32:54.811 [DEBUG] [Thread-59224] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:32:54.827 [DEBUG] [Thread-59224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:32:54.827 [DEBUG] [Thread-59224] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:32:54.828 [DEBUG] [Thread-59224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:32:54.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:32:54.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:32:54.828 [DEBUG] [Thread-59224] [transport.py] [_log()] userauth is OK
2025-11-17T18:32:54.828 [DEBUG] [Thread-59224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:32:54.828 [DEBUG] [Thread-59224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:32:54.829 [DEBUG] [Thread-59224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:32:54.829 [DEBUG] [Thread-59224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:32:54.846 [INFO] [Thread-59224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:32:54.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:32:55.478 [DEBUG] [Thread-59224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:32:55.479 [DEBUG] [Thread-59224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:32:55.479 [DEBUG] [Thread-59224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:32:55.520 [DEBUG] [Thread-59224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:32:55.520 [DEBUG] [Thread-59224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:32:55.523 [DEBUG] [Thread-59224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:32:55.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:32:55.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:32:55.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:32:55.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:32:55.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:32:55.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:32:55.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:32:55.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:32:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:32:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.688940 -999.00  +21.40  25.58     19   -2.70 1 1 1 1 1   887    0 25.29 33.37 ----- 20.4 25.6 298.6 31.5 23.0 -26.6 23.3 -25.3 23.5 -26.1 23.7 -26.3
2025-11-17T18:32:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:32:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:32:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.688940
2025-11-17T18:32:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:32:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:32:55.547 [DEBUG] [Thread-59224] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:32:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:32:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:32:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:32:55.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:32:32', tmtdew=28.99, humidity=13.69, cloud=0.0, wind=30.21, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:32:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:32:55.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:32:55.642 [DEBUG] [Thread-59227] [transport.py] [_log()] starting thread (client mode): 0xd31ef010
2025-11-17T18:32:55.642 [DEBUG] [Thread-59227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:32:55.658 [DEBUG] [Thread-59227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:32:55.658 [INFO] [Thread-59227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:32:55.665 [DEBUG] [Thread-59227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:32:55.665 [DEBUG] [Thread-59227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:32:55.665 [DEBUG] [Thread-59227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:32:55.665 [DEBUG] [Thread-59227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:32:55.665 [DEBUG] [Thread-59227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:32:55.665 [DEBUG] [Thread-59227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:32:55.665 [DEBUG] [Thread-59227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] client lang: <none>
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] server lang: <none>
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] kex follows: False
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] Compression: none
2025-11-17T18:32:55.666 [DEBUG] [Thread-59227] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:32:55.724 [DEBUG] [Thread-59227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:32:55.725 [DEBUG] [Thread-59227] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:32:55.725 [DEBUG] [Thread-59227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:32:55.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:32:55.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:32:55.781 [DEBUG] [Thread-59227] [transport.py] [_log()] userauth is OK
2025-11-17T18:32:55.781 [DEBUG] [Thread-59227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:32:55.781 [DEBUG] [Thread-59227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:32:55.781 [DEBUG] [Thread-59227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:32:55.781 [DEBUG] [Thread-59227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:32:55.799 [INFO] [Thread-59227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:32:55.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:32:55.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:32:56.634 [DEBUG] [Thread-59227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:32:56.634 [DEBUG] [Thread-59227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:32:56.682 [DEBUG] [Thread-59227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:32:56.683 [DEBUG] [Thread-59227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:32:56.691 [DEBUG] [Thread-59227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:32:56.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:32:56.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:32:56.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:32:56.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:32:56.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:32:56.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:32:56.726 [DEBUG] [Thread-59227] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:33:00.157 [DEBUG] [Thread-59229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:33:15.208 [DEBUG] [Thread-59230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:33:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:33:26.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:33:26.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:33:27.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 33, 4), 28.92, 13.74, 0.0, 29.47, 21.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:33:27.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:33:04
2025-11-17T18:33:27.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:33:27.668 [DEBUG] [Thread-59231] [transport.py] [_log()] starting thread (client mode): 0xd078c040
2025-11-17T18:33:27.668 [DEBUG] [Thread-59231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:33:27.688 [DEBUG] [Thread-59231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:33:27.688 [INFO] [Thread-59231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:33:27.691 [DEBUG] [Thread-59231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:33:27.691 [DEBUG] [Thread-59231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:33:27.691 [DEBUG] [Thread-59231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:33:27.691 [DEBUG] [Thread-59231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:33:27.691 [DEBUG] [Thread-59231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:33:27.691 [DEBUG] [Thread-59231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:33:27.691 [DEBUG] [Thread-59231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] client lang: <none>
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] server lang: <none>
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] kex follows: False
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] Compression: none
2025-11-17T18:33:27.692 [DEBUG] [Thread-59231] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:33:27.712 [DEBUG] [Thread-59231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:33:27.713 [DEBUG] [Thread-59231] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:33:27.713 [DEBUG] [Thread-59231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:33:27.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:33:27.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:33:27.715 [DEBUG] [Thread-59231] [transport.py] [_log()] userauth is OK
2025-11-17T18:33:27.715 [DEBUG] [Thread-59231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:33:27.715 [DEBUG] [Thread-59231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:33:27.715 [DEBUG] [Thread-59231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:33:27.715 [DEBUG] [Thread-59231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:33:27.750 [INFO] [Thread-59231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:33:27.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:33:28.353 [DEBUG] [Thread-59231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:33:28.353 [DEBUG] [Thread-59231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:33:28.353 [DEBUG] [Thread-59231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:33:28.394 [DEBUG] [Thread-59231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:33:28.394 [DEBUG] [Thread-59231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:33:28.398 [DEBUG] [Thread-59231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:33:28.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:33:28.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:33:28.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:33:28.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:33:28.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:33:28.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:33:28.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:33:28.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.689287 -999.00  +21.40  26.22     19   -2.70 1 1 1 1 1   887    0 25.37 36.13 ----- 26.4 26.2 296.4 33.7 23.0 -26.6 23.2 -25.4 23.4 -25.3 23.7 -26.4
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.689287
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:33:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:33:04', tmtdew=28.92, humidity=13.74, cloud=0.0, wind=29.47, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:32:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:33:28.416 [DEBUG] [Thread-59231] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:33:28.462 [DEBUG] [Thread-59234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:33:28.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:33:28.501 [DEBUG] [Thread-59235] [transport.py] [_log()] starting thread (client mode): 0xd31b28f0
2025-11-17T18:33:28.502 [DEBUG] [Thread-59235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:33:28.517 [DEBUG] [Thread-59235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:33:28.517 [INFO] [Thread-59235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:33:28.524 [DEBUG] [Thread-59235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:33:28.524 [DEBUG] [Thread-59235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] client lang: <none>
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] server lang: <none>
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] kex follows: False
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] Compression: none
2025-11-17T18:33:28.525 [DEBUG] [Thread-59235] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:33:28.581 [DEBUG] [Thread-59235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:33:28.582 [DEBUG] [Thread-59235] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:33:28.582 [DEBUG] [Thread-59235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:33:28.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:33:28.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:33:28.636 [DEBUG] [Thread-59235] [transport.py] [_log()] userauth is OK
2025-11-17T18:33:28.636 [DEBUG] [Thread-59235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:33:28.636 [DEBUG] [Thread-59235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:33:28.636 [DEBUG] [Thread-59235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:33:28.636 [DEBUG] [Thread-59235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:33:28.650 [INFO] [Thread-59235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:33:28.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:33:28.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:33:29.502 [DEBUG] [Thread-59235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:33:29.502 [DEBUG] [Thread-59235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:33:29.550 [DEBUG] [Thread-59235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:33:29.550 [DEBUG] [Thread-59235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:33:29.558 [DEBUG] [Thread-59235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:33:29.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:33: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')
2025-11-17T18:33:29.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:33:29.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:33:29.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:33:29.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:33:29.590 [DEBUG] [Thread-59235] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:33:30.240 [DEBUG] [Thread-59237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:33:35.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:33:35.009 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:33:45.282 [DEBUG] [Thread-59238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:33:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:33:59.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:33:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:34:00.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 33, 36), 28.71, 13.75, 0.0, 27.97, 21.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:34:00.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:33:36
2025-11-17T18:34:00.310 [DEBUG] [Thread-59239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:34:00.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:34:00.531 [DEBUG] [Thread-59240] [transport.py] [_log()] starting thread (client mode): 0xd31b1450
2025-11-17T18:34:00.532 [DEBUG] [Thread-59240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:34:00.551 [DEBUG] [Thread-59240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:34:00.551 [INFO] [Thread-59240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:34:00.554 [DEBUG] [Thread-59240] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:34:00.554 [DEBUG] [Thread-59240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] client lang: <none>
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] server lang: <none>
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] kex follows: False
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] Compression: none
2025-11-17T18:34:00.555 [DEBUG] [Thread-59240] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:34:00.572 [DEBUG] [Thread-59240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:34:00.572 [DEBUG] [Thread-59240] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:34:00.573 [DEBUG] [Thread-59240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:34:00.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:34:00.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:34:00.574 [DEBUG] [Thread-59240] [transport.py] [_log()] userauth is OK
2025-11-17T18:34:00.575 [DEBUG] [Thread-59240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:34:00.575 [DEBUG] [Thread-59240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:34:00.575 [DEBUG] [Thread-59240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:34:00.575 [DEBUG] [Thread-59240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:34:00.610 [INFO] [Thread-59240] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:34:00.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:34:01.214 [DEBUG] [Thread-59240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:34:01.214 [DEBUG] [Thread-59240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:34:01.214 [DEBUG] [Thread-59240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:34:01.255 [DEBUG] [Thread-59240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:34:01.256 [DEBUG] [Thread-59240] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:34:01.259 [DEBUG] [Thread-59240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:34:01.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:34:01.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:34:01.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:34:01.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:34:01.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:34:01.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:34:01.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:34:01.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:34:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:34:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.689634 -999.00  +21.40  25.63     19   -2.60 1 1 1 1 1   887    0 24.83 32.11 ----- 26.6 25.6 291.6 32.1 23.0 -26.4 23.2 -25.2 23.4 -25.9 23.6 -26.1
2025-11-17T18:34:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:34:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:34:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.689634
2025-11-17T18:34:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:34:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:34:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:34:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:34:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:34:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:33:36', tmtdew=28.71, humidity=13.75, cloud=0.0, wind=27.97, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:33:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:34:01.286 [DEBUG] [Thread-59240] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:34:01.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:34:01.382 [DEBUG] [Thread-59243] [transport.py] [_log()] starting thread (client mode): 0xd31b1090
2025-11-17T18:34:01.383 [DEBUG] [Thread-59243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:34:01.400 [DEBUG] [Thread-59243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:34:01.400 [INFO] [Thread-59243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:34:01.407 [DEBUG] [Thread-59243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:34:01.407 [DEBUG] [Thread-59243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:34:01.407 [DEBUG] [Thread-59243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] client lang: <none>
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] server lang: <none>
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] kex follows: False
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] Compression: none
2025-11-17T18:34:01.408 [DEBUG] [Thread-59243] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:34:01.464 [DEBUG] [Thread-59243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:34:01.465 [DEBUG] [Thread-59243] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:34:01.465 [DEBUG] [Thread-59243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:34:01.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:34:01.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:34:01.520 [DEBUG] [Thread-59243] [transport.py] [_log()] userauth is OK
2025-11-17T18:34:01.521 [DEBUG] [Thread-59243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:34:01.521 [DEBUG] [Thread-59243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:34:01.521 [DEBUG] [Thread-59243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:34:01.521 [DEBUG] [Thread-59243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:34:01.540 [INFO] [Thread-59243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:34:01.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:34:01.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:34:02.423 [DEBUG] [Thread-59243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:34:02.424 [DEBUG] [Thread-59243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:34:02.471 [DEBUG] [Thread-59243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:34:02.471 [DEBUG] [Thread-59243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:34:02.480 [DEBUG] [Thread-59243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:34:02.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:34:02.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')
2025-11-17T18:34:02.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:34:02.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:34:02.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:34:02.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:34:02.515 [DEBUG] [Thread-59243] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:34:15.339 [DEBUG] [Thread-59245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:34:28.517 [DEBUG] [Thread-59246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:34:30.391 [DEBUG] [Thread-59247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:34:32.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:34:32.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:34:32.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:34:33.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 34, 8), 28.62, 13.84, 0.0, 28.6, 21.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:34:33.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:34:08
2025-11-17T18:34:33.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:34:33.452 [DEBUG] [Thread-59248] [transport.py] [_log()] starting thread (client mode): 0xd07cd6f0
2025-11-17T18:34:33.453 [DEBUG] [Thread-59248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:34:33.472 [DEBUG] [Thread-59248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:34:33.472 [INFO] [Thread-59248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:34:33.475 [DEBUG] [Thread-59248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] client lang: <none>
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] server lang: <none>
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] kex follows: False
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] Compression: none
2025-11-17T18:34:33.476 [DEBUG] [Thread-59248] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:34:33.494 [DEBUG] [Thread-59248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:34:33.494 [DEBUG] [Thread-59248] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:34:33.495 [DEBUG] [Thread-59248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:34:33.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:34:33.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:34:33.497 [DEBUG] [Thread-59248] [transport.py] [_log()] userauth is OK
2025-11-17T18:34:33.497 [DEBUG] [Thread-59248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:34:33.497 [DEBUG] [Thread-59248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:34:33.497 [DEBUG] [Thread-59248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:34:33.497 [DEBUG] [Thread-59248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:34:33.531 [INFO] [Thread-59248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:34:33.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:34:34.191 [DEBUG] [Thread-59248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:34:34.191 [DEBUG] [Thread-59248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:34:34.192 [DEBUG] [Thread-59248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:34:34.233 [DEBUG] [Thread-59248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:34:34.233 [DEBUG] [Thread-59248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:34:34.236 [DEBUG] [Thread-59248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:34:34.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:34:34.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:34:34.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:34:34.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:34:34.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:34:34.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:34:34.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:34:34.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:34:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:34:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.689981 -999.00  +21.30  24.76     19   -2.60 1 1 1 1 1   887    0 25.20 29.89 ----- 25.9 24.8 289.6 32.9 23.0 -26.6 23.1 -25.1 23.4 -24.9 23.6 -26.1
2025-11-17T18:34:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:34:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:34:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.689981
2025-11-17T18:34:34.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:34:34.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:34:34.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:34:34.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:34:34.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:34:34.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:34:08', tmtdew=28.62, humidity=13.84, cloud=0.0, wind=28.6, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:33:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:34:34.261 [DEBUG] [Thread-59248] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:34:34.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:34:34.358 [DEBUG] [Thread-59251] [transport.py] [_log()] starting thread (client mode): 0xd07ccf70
2025-11-17T18:34:34.359 [DEBUG] [Thread-59251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:34:34.376 [DEBUG] [Thread-59251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:34:34.376 [INFO] [Thread-59251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] client lang: <none>
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] server lang: <none>
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] kex follows: False
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:34:34.388 [DEBUG] [Thread-59251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:34:34.389 [DEBUG] [Thread-59251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:34:34.389 [DEBUG] [Thread-59251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:34:34.389 [DEBUG] [Thread-59251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:34:34.389 [DEBUG] [Thread-59251] [transport.py] [_log()] Compression: none
2025-11-17T18:34:34.389 [DEBUG] [Thread-59251] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:34:34.449 [DEBUG] [Thread-59251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:34:34.449 [DEBUG] [Thread-59251] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:34:34.450 [DEBUG] [Thread-59251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:34:34.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:34:34.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:34:34.505 [DEBUG] [Thread-59251] [transport.py] [_log()] userauth is OK
2025-11-17T18:34:34.505 [DEBUG] [Thread-59251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:34:34.505 [DEBUG] [Thread-59251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:34:34.505 [DEBUG] [Thread-59251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:34:34.505 [DEBUG] [Thread-59251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:34:34.525 [INFO] [Thread-59251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:34:34.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:34:34.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:34:35.151 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:34:35.152 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:34:35.379 [DEBUG] [Thread-59251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:34:35.379 [DEBUG] [Thread-59251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:34:35.427 [DEBUG] [Thread-59251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:34:35.427 [DEBUG] [Thread-59251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:34:35.435 [DEBUG] [Thread-59251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:34:35.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:34:35.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:34:35.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:34:35.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:34:35.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:34:35.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:34:35.471 [DEBUG] [Thread-59251] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:34:45.418 [DEBUG] [Thread-59253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:35:00.452 [DEBUG] [Thread-59254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:35:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:35:05.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:35:05.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:35:06.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 34, 40), 28.54, 13.85, 0.0, 26.26, 21.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:35:06.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:34:40
2025-11-17T18:35:06.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:35:06.413 [DEBUG] [Thread-59255] [transport.py] [_log()] starting thread (client mode): 0xd31ec6d0
2025-11-17T18:35:06.413 [DEBUG] [Thread-59255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:35:06.428 [DEBUG] [Thread-59255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:35:06.428 [INFO] [Thread-59255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] client lang: <none>
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] server lang: <none>
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] kex follows: False
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:35:06.432 [DEBUG] [Thread-59255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:35:06.433 [DEBUG] [Thread-59255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:35:06.433 [DEBUG] [Thread-59255] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:35:06.433 [DEBUG] [Thread-59255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:35:06.433 [DEBUG] [Thread-59255] [transport.py] [_log()] Compression: none
2025-11-17T18:35:06.433 [DEBUG] [Thread-59255] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:35:06.450 [DEBUG] [Thread-59255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:35:06.450 [DEBUG] [Thread-59255] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:35:06.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:35:06.451 [DEBUG] [Thread-59255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:35:06.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:35:06.453 [DEBUG] [Thread-59255] [transport.py] [_log()] userauth is OK
2025-11-17T18:35:06.453 [DEBUG] [Thread-59255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:35:06.453 [DEBUG] [Thread-59255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:35:06.453 [DEBUG] [Thread-59255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:35:06.453 [DEBUG] [Thread-59255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:35:06.474 [INFO] [Thread-59255] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:35:06.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:35:07.716 [DEBUG] [Thread-59255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:35:07.717 [DEBUG] [Thread-59255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:35:07.717 [DEBUG] [Thread-59255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:35:07.757 [DEBUG] [Thread-59255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:35:07.757 [DEBUG] [Thread-59255] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:35:07.761 [DEBUG] [Thread-59255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:35:07.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:35:07.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:35:07.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:35:07.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:35:07.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:35:07.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:35:07.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:35:07.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:35:07.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:35:07.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.690328 -999.00  +21.40  26.94     19   -2.60 1 1 1 1 1   887    0 25.22 29.89 ----- 28.6 26.9 294.8 30.0 23.0 -26.8 23.1 -25.2 23.3 -25.5 23.5 -26.2
2025-11-17T18:35:07.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:35:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:35:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.690328
2025-11-17T18:35:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:35:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:35:07.806 [DEBUG] [Thread-59255] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:35:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:35:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:35:07.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:35:07.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:34:40', tmtdew=28.54, humidity=13.85, cloud=0.0, wind=26.26, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:34:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:35:07.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:35:07.903 [DEBUG] [Thread-59258] [transport.py] [_log()] starting thread (client mode): 0xd078e230
2025-11-17T18:35:07.903 [DEBUG] [Thread-59258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:35:07.919 [DEBUG] [Thread-59258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:35:07.919 [INFO] [Thread-59258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:35:07.927 [DEBUG] [Thread-59258] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:35:07.927 [DEBUG] [Thread-59258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:35:07.927 [DEBUG] [Thread-59258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:35:07.927 [DEBUG] [Thread-59258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:35:07.927 [DEBUG] [Thread-59258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:35:07.927 [DEBUG] [Thread-59258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:35:07.927 [DEBUG] [Thread-59258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:35:07.928 [DEBUG] [Thread-59258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:35:07.928 [DEBUG] [Thread-59258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:35:07.928 [DEBUG] [Thread-59258] [transport.py] [_log()] client lang: <none>
2025-11-17T18:35:07.928 [DEBUG] [Thread-59258] [transport.py] [_log()] server lang: <none>
2025-11-17T18:35:07.928 [DEBUG] [Thread-59258] [transport.py] [_log()] kex follows: False
2025-11-17T18:35:07.928 [DEBUG] [Thread-59258] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:35:07.928 [DEBUG] [Thread-59258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:35:07.928 [DEBUG] [Thread-59258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:35:07.929 [DEBUG] [Thread-59258] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:35:07.929 [DEBUG] [Thread-59258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:35:07.929 [DEBUG] [Thread-59258] [transport.py] [_log()] Compression: none
2025-11-17T18:35:07.929 [DEBUG] [Thread-59258] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:35:07.984 [DEBUG] [Thread-59258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:35:07.984 [DEBUG] [Thread-59258] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:35:07.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:35:07.985 [DEBUG] [Thread-59258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:35:07.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:35:08.040 [DEBUG] [Thread-59258] [transport.py] [_log()] userauth is OK
2025-11-17T18:35:08.041 [DEBUG] [Thread-59258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:35:08.041 [DEBUG] [Thread-59258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:35:08.041 [DEBUG] [Thread-59258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:35:08.041 [DEBUG] [Thread-59258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:35:08.060 [INFO] [Thread-59258] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:35:08.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:35:08.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:35:08.929 [DEBUG] [Thread-59258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:35:08.929 [DEBUG] [Thread-59258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:35:08.977 [DEBUG] [Thread-59258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:35:08.978 [DEBUG] [Thread-59258] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:35:08.987 [DEBUG] [Thread-59258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:35:08.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:35:08.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:35:09.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:35:09.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:35:09.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:35:09.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:35:09.022 [DEBUG] [Thread-59258] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:35:15.485 [DEBUG] [Thread-59260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:35:28.567 [DEBUG] [Thread-59261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:35:30.525 [DEBUG] [Thread-59262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:35:35.293 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:35:35.295 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:35:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:35:39.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:35:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:35:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 35, 12), 28.54, 13.85, 0.0, 27.56, 21.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:35:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:35:12
2025-11-17T18:35:39.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:35:39.933 [DEBUG] [Thread-59263] [transport.py] [_log()] starting thread (client mode): 0xd31ef5e0
2025-11-17T18:35:39.933 [DEBUG] [Thread-59263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:35:39.953 [DEBUG] [Thread-59263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:35:39.953 [INFO] [Thread-59263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:35:39.955 [DEBUG] [Thread-59263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:35:39.956 [DEBUG] [Thread-59263] [transport.py] [_log()] client lang: <none>
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] server lang: <none>
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] kex follows: False
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] Compression: none
2025-11-17T18:35:39.957 [DEBUG] [Thread-59263] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:35:39.970 [DEBUG] [Thread-59263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:35:39.971 [DEBUG] [Thread-59263] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:35:39.971 [DEBUG] [Thread-59263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:35:39.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:35:39.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:35:39.973 [DEBUG] [Thread-59263] [transport.py] [_log()] userauth is OK
2025-11-17T18:35:39.973 [DEBUG] [Thread-59263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:35:39.973 [DEBUG] [Thread-59263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:35:39.973 [DEBUG] [Thread-59263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:35:39.973 [DEBUG] [Thread-59263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:35:40.009 [INFO] [Thread-59263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:35:40.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:35:40.639 [DEBUG] [Thread-59263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:35:40.639 [DEBUG] [Thread-59263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:35:40.640 [DEBUG] [Thread-59263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:35:40.680 [DEBUG] [Thread-59263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:35:40.681 [DEBUG] [Thread-59263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:35:40.684 [DEBUG] [Thread-59263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:35:40.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:35:40.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:35:40.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:35:40.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:35:40.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:35:40.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:35:40.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.690677 -999.00  +21.30  26.88     19   -2.60 1 1 1 1 1   887    0 24.68 28.71 ----- 25.8 26.9 292.2 29.6 22.9 -26.5 23.1 -25.2 23.2 -25.3 23.4 -26.0
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.690677
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:35:40.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:35:12', tmtdew=28.54, humidity=13.85, cloud=0.0, wind=27.56, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:34:34.493', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:35:40.700 [DEBUG] [Thread-59263] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:35:40.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:35:40.788 [DEBUG] [Thread-59266] [transport.py] [_log()] starting thread (client mode): 0xd31ed1e0
2025-11-17T18:35:40.788 [DEBUG] [Thread-59266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:35:40.802 [DEBUG] [Thread-59266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:35:40.802 [INFO] [Thread-59266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] client lang: <none>
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] server lang: <none>
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] kex follows: False
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] Compression: none
2025-11-17T18:35:40.810 [DEBUG] [Thread-59266] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:35:40.868 [DEBUG] [Thread-59266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:35:40.869 [DEBUG] [Thread-59266] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:35:40.869 [DEBUG] [Thread-59266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:35:40.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:35:40.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:35:40.929 [DEBUG] [Thread-59266] [transport.py] [_log()] userauth is OK
2025-11-17T18:35:40.929 [DEBUG] [Thread-59266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:35:40.929 [DEBUG] [Thread-59266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:35:40.929 [DEBUG] [Thread-59266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:35:40.929 [DEBUG] [Thread-59266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:35:40.949 [INFO] [Thread-59266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:35:40.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:35:40.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:35:41.833 [DEBUG] [Thread-59266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:35:41.833 [DEBUG] [Thread-59266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:35:41.880 [DEBUG] [Thread-59266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:35:41.880 [DEBUG] [Thread-59266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:35:41.889 [DEBUG] [Thread-59266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:35:41.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:35:41.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:35:41.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:35:41.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:35:41.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:35:41.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:35:41.924 [DEBUG] [Thread-59266] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:35:45.556 [DEBUG] [Thread-59268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:36:00.590 [DEBUG] [Thread-59269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:36:11.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:36:11.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:36:11.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:36:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 35, 44), 28.53, 13.9, 0.0, 25.67, 21.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:36:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:35:44
2025-11-17T18:36:12.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:36:12.863 [DEBUG] [Thread-59270] [transport.py] [_log()] starting thread (client mode): 0xd31b28f0
2025-11-17T18:36:12.863 [DEBUG] [Thread-59270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:36:12.884 [DEBUG] [Thread-59270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:36:12.884 [INFO] [Thread-59270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:36:12.888 [DEBUG] [Thread-59270] [transport.py] [_log()] client lang: <none>
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] server lang: <none>
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] kex follows: False
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] Compression: none
2025-11-17T18:36:12.889 [DEBUG] [Thread-59270] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:36:12.908 [DEBUG] [Thread-59270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:36:12.909 [DEBUG] [Thread-59270] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:36:12.909 [DEBUG] [Thread-59270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:36:12.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:36:12.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:36:12.911 [DEBUG] [Thread-59270] [transport.py] [_log()] userauth is OK
2025-11-17T18:36:12.912 [DEBUG] [Thread-59270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:36:12.912 [DEBUG] [Thread-59270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:36:12.912 [DEBUG] [Thread-59270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:36:12.912 [DEBUG] [Thread-59270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:36:12.935 [INFO] [Thread-59270] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:36:12.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:36:13.663 [DEBUG] [Thread-59270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:36:13.663 [DEBUG] [Thread-59270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:36:13.664 [DEBUG] [Thread-59270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:36:13.705 [DEBUG] [Thread-59270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:36:13.705 [DEBUG] [Thread-59270] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:36:13.707 [DEBUG] [Thread-59270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:36:13.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:36:13.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:36:13.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:36:13.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:36:13.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:36:13.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:36:13.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:36:13.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:36:13.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:36:13.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.691370 -999.00  +21.30  20.51     19   -2.60 1 1 1 1 1   887    0 24.70 23.12 ----- 17.0 20.5 282.8 31.1 22.8 -26.6 23.1 -25.3 23.1 -25.0 23.3 -25.8
2025-11-17T18:36:13.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:36:13.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:36:13.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.691370
2025-11-17T18:36:13.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:36:13.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:36:13.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:36:13.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:36:13.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:36:13.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:35:44', tmtdew=28.53, humidity=13.9, cloud=0.0, wind=25.67, temperature=21.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:35:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:36:13.733 [DEBUG] [Thread-59270] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:36:13.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:36:13.823 [DEBUG] [Thread-59273] [transport.py] [_log()] starting thread (client mode): 0xd078e050
2025-11-17T18:36:13.823 [DEBUG] [Thread-59273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:36:13.838 [DEBUG] [Thread-59273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:36:13.838 [INFO] [Thread-59273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:36:13.845 [DEBUG] [Thread-59273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] client lang: <none>
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] server lang: <none>
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] kex follows: False
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:36:13.846 [DEBUG] [Thread-59273] [transport.py] [_log()] Compression: none
2025-11-17T18:36:13.847 [DEBUG] [Thread-59273] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:36:13.904 [DEBUG] [Thread-59273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:36:13.904 [DEBUG] [Thread-59273] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:36:13.905 [DEBUG] [Thread-59273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:36:13.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:36:13.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:36:13.961 [DEBUG] [Thread-59273] [transport.py] [_log()] userauth is OK
2025-11-17T18:36:13.961 [DEBUG] [Thread-59273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:36:13.961 [DEBUG] [Thread-59273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:36:13.961 [DEBUG] [Thread-59273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:36:13.962 [DEBUG] [Thread-59273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:36:13.981 [INFO] [Thread-59273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:36:13.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:36:13.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:36:14.822 [DEBUG] [Thread-59273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:36:14.822 [DEBUG] [Thread-59273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:36:14.870 [DEBUG] [Thread-59273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:36:14.870 [DEBUG] [Thread-59273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:36:14.879 [DEBUG] [Thread-59273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:36:14.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:36:14.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:36:14.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:36:14.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:36:14.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:36:14.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:36:14.914 [DEBUG] [Thread-59273] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:36:15.619 [DEBUG] [Thread-59275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:36:28.628 [DEBUG] [Thread-59276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:36:30.668 [DEBUG] [Thread-59277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:36:35.436 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:36:35.437 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:36:44.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:36:44.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:36:44.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:36:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 36, 16), 28.49, 13.95, 0.0, 24.07, 21.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:36:45.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:36:16
2025-11-17T18:36:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:36:45.698 [DEBUG] [Thread-59278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:36:45.842 [DEBUG] [Thread-59279] [transport.py] [_log()] starting thread (client mode): 0xd078fe50
2025-11-17T18:36:45.842 [DEBUG] [Thread-59279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:36:45.861 [DEBUG] [Thread-59279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:36:45.862 [INFO] [Thread-59279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:36:45.865 [DEBUG] [Thread-59279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:36:45.871 [DEBUG] [Thread-59279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:36:45.871 [DEBUG] [Thread-59279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:36:45.871 [DEBUG] [Thread-59279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:36:45.871 [DEBUG] [Thread-59279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:36:45.871 [DEBUG] [Thread-59279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:36:45.871 [DEBUG] [Thread-59279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:36:45.871 [DEBUG] [Thread-59279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:36:45.871 [DEBUG] [Thread-59279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] client lang: <none>
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] server lang: <none>
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] kex follows: False
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] Compression: none
2025-11-17T18:36:45.872 [DEBUG] [Thread-59279] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:36:45.890 [DEBUG] [Thread-59279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:36:45.890 [DEBUG] [Thread-59279] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:36:45.891 [DEBUG] [Thread-59279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:36:45.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:36:45.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:36:45.893 [DEBUG] [Thread-59279] [transport.py] [_log()] userauth is OK
2025-11-17T18:36:45.893 [DEBUG] [Thread-59279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:36:45.893 [DEBUG] [Thread-59279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:36:45.893 [DEBUG] [Thread-59279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:36:45.893 [DEBUG] [Thread-59279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:36:45.916 [INFO] [Thread-59279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:36:45.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:36:46.542 [DEBUG] [Thread-59279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:36:46.542 [DEBUG] [Thread-59279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:36:46.542 [DEBUG] [Thread-59279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:36:46.583 [DEBUG] [Thread-59279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:36:46.583 [DEBUG] [Thread-59279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:36:46.586 [DEBUG] [Thread-59279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:36:46.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:36:46.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:36:46.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:36:46.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:36:46.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:36:46.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:36:46.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:36:46.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:36:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:36:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.691717 -999.00  +21.20  27.86     19   -2.70 1 1 1 1 1   887    0 24.39 20.44 ----- 26.5 27.9 297.0 31.2 22.8 -26.4 23.0 -25.3 23.0 -25.4 23.3 -25.8
2025-11-17T18:36:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:36:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:36:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.691717
2025-11-17T18:36:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:36:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:36:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:36:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:36:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:36:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:36:16', tmtdew=28.49, humidity=13.95, cloud=0.0, wind=24.07, temperature=21.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:36:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:36:46.611 [DEBUG] [Thread-59279] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:36:46.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:36:46.710 [DEBUG] [Thread-59282] [transport.py] [_log()] starting thread (client mode): 0xd31ed1e0
2025-11-17T18:36:46.710 [DEBUG] [Thread-59282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:36:46.725 [DEBUG] [Thread-59282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:36:46.725 [INFO] [Thread-59282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] client lang: <none>
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] server lang: <none>
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] kex follows: False
2025-11-17T18:36:46.733 [DEBUG] [Thread-59282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:36:46.734 [DEBUG] [Thread-59282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:36:46.734 [DEBUG] [Thread-59282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:36:46.734 [DEBUG] [Thread-59282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:36:46.734 [DEBUG] [Thread-59282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:36:46.734 [DEBUG] [Thread-59282] [transport.py] [_log()] Compression: none
2025-11-17T18:36:46.734 [DEBUG] [Thread-59282] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:36:46.792 [DEBUG] [Thread-59282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:36:46.793 [DEBUG] [Thread-59282] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:36:46.793 [DEBUG] [Thread-59282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:36:46.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:36:46.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:36:46.853 [DEBUG] [Thread-59282] [transport.py] [_log()] userauth is OK
2025-11-17T18:36:46.853 [DEBUG] [Thread-59282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:36:46.853 [DEBUG] [Thread-59282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:36:46.853 [DEBUG] [Thread-59282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:36:46.853 [DEBUG] [Thread-59282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:36:46.873 [INFO] [Thread-59282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:36:46.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:36:46.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:36:47.751 [DEBUG] [Thread-59282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:36:47.752 [DEBUG] [Thread-59282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:36:47.799 [DEBUG] [Thread-59282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:36:47.799 [DEBUG] [Thread-59282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:36:47.809 [DEBUG] [Thread-59282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:36:47.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:36:47.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:36:47.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:36:47.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:36:47.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:36:47.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:36:47.844 [DEBUG] [Thread-59282] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:37:00.728 [DEBUG] [Thread-59284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:37:15.772 [DEBUG] [Thread-59285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:37:17.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:37:17.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:37:17.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:37:18.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 36, 48), 28.43, 14.0, 0.0, 28.36, 21.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:37:18.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:36:48
2025-11-17T18:37:18.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:37:18.830 [DEBUG] [Thread-59286] [transport.py] [_log()] starting thread (client mode): 0xd07ce6e0
2025-11-17T18:37:18.831 [DEBUG] [Thread-59286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:37:18.850 [DEBUG] [Thread-59286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:37:18.850 [INFO] [Thread-59286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] client lang: <none>
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] server lang: <none>
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] kex follows: False
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] Compression: none
2025-11-17T18:37:18.852 [DEBUG] [Thread-59286] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:37:18.869 [DEBUG] [Thread-59286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:37:18.869 [DEBUG] [Thread-59286] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:37:18.869 [DEBUG] [Thread-59286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:37:18.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:37:18.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:37:18.870 [DEBUG] [Thread-59286] [transport.py] [_log()] userauth is OK
2025-11-17T18:37:18.870 [DEBUG] [Thread-59286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:37:18.870 [DEBUG] [Thread-59286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:37:18.870 [DEBUG] [Thread-59286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:37:18.870 [DEBUG] [Thread-59286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:37:18.882 [INFO] [Thread-59286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:37:18.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:37:19.603 [DEBUG] [Thread-59286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:37:19.603 [DEBUG] [Thread-59286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:37:19.604 [DEBUG] [Thread-59286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:37:19.644 [DEBUG] [Thread-59286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:37:19.644 [DEBUG] [Thread-59286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:37:19.646 [DEBUG] [Thread-59286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:37:19.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:37:19.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:37:19.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:37:19.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:37:19.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:37:19.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:37:19.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:37:19.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:37:19.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:37:19.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.692065 -999.00  +21.20  25.64     19   -2.70 1 1 1 1 1   887    0 24.68 19.89 ----- 24.5 25.6 281.3 31.3 22.8 -26.6 22.9 -25.2 22.9 -27.3 23.2 -26.2
2025-11-17T18:37:19.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:37:19.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:37:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.692065
2025-11-17T18:37:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:37:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:37:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:37:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:37:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:37:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:36:48', tmtdew=28.43, humidity=14.0, cloud=0.0, wind=28.36, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:36:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:37:19.666 [DEBUG] [Thread-59286] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:37:19.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:37:19.751 [DEBUG] [Thread-59289] [transport.py] [_log()] starting thread (client mode): 0xd07cc400
2025-11-17T18:37:19.751 [DEBUG] [Thread-59289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:37:19.765 [DEBUG] [Thread-59289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:37:19.765 [INFO] [Thread-59289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:37:19.772 [DEBUG] [Thread-59289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:37:19.772 [DEBUG] [Thread-59289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:37:19.772 [DEBUG] [Thread-59289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:37:19.772 [DEBUG] [Thread-59289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] client lang: <none>
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] server lang: <none>
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] kex follows: False
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] Compression: none
2025-11-17T18:37:19.773 [DEBUG] [Thread-59289] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:37:19.831 [DEBUG] [Thread-59289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:37:19.831 [DEBUG] [Thread-59289] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:37:19.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:37:19.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:37:19.832 [DEBUG] [Thread-59289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:37:19.888 [DEBUG] [Thread-59289] [transport.py] [_log()] userauth is OK
2025-11-17T18:37:19.888 [DEBUG] [Thread-59289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:37:19.888 [DEBUG] [Thread-59289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:37:19.888 [DEBUG] [Thread-59289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:37:19.888 [DEBUG] [Thread-59289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:37:19.903 [INFO] [Thread-59289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:37:19.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:37:19.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:37:20.761 [DEBUG] [Thread-59289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:37:20.761 [DEBUG] [Thread-59289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:37:20.809 [DEBUG] [Thread-59289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:37:20.809 [DEBUG] [Thread-59289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:37:20.817 [DEBUG] [Thread-59289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:37:20.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:37:20.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:37:20.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
2025-11-17T18:37:20.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:37:20.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:37:20.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:37:20.848 [DEBUG] [Thread-59289] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:37:28.677 [DEBUG] [Thread-59291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:37:30.802 [DEBUG] [Thread-59292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:37:35.582 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:37:35.583 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:37:45.852 [DEBUG] [Thread-59293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:37:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:37:50.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:37:50.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:37:51.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 37, 20), 28.42, 14.02, 0.0, 27.7, 21.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:37:51.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:37:20
2025-11-17T18:37:51.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:37:51.792 [DEBUG] [Thread-59294] [transport.py] [_log()] starting thread (client mode): 0xd07cdc90
2025-11-17T18:37:51.792 [DEBUG] [Thread-59294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:37:51.813 [DEBUG] [Thread-59294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:37:51.814 [INFO] [Thread-59294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:37:51.816 [DEBUG] [Thread-59294] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:37:51.816 [DEBUG] [Thread-59294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] client lang: <none>
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] server lang: <none>
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] kex follows: False
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] Compression: none
2025-11-17T18:37:51.817 [DEBUG] [Thread-59294] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:37:51.836 [DEBUG] [Thread-59294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:37:51.836 [DEBUG] [Thread-59294] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:37:51.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:37:51.837 [DEBUG] [Thread-59294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:37:51.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:37:51.839 [DEBUG] [Thread-59294] [transport.py] [_log()] userauth is OK
2025-11-17T18:37:51.839 [DEBUG] [Thread-59294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:37:51.840 [DEBUG] [Thread-59294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:37:51.840 [DEBUG] [Thread-59294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:37:51.840 [DEBUG] [Thread-59294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:37:51.858 [INFO] [Thread-59294] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:37:51.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:37:52.514 [DEBUG] [Thread-59294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:37:52.514 [DEBUG] [Thread-59294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:37:52.514 [DEBUG] [Thread-59294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:37:52.555 [DEBUG] [Thread-59294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:37:52.555 [DEBUG] [Thread-59294] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:37:52.558 [DEBUG] [Thread-59294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:37:52.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:37:52.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:37:52.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:37:52.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:37:52.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:37:52.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:37:52.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.692412 -999.00  +21.20  24.88     19   -2.70 1 1 1 1 1   887    0 24.30 18.93 ----- 22.9 24.9 284.0 31.8 22.7 -26.8 22.9 -25.2 22.8 -25.7 23.2 -26.1
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.692412
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:37:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:37:20', tmtdew=28.42, humidity=14.02, cloud=0.0, wind=27.7, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:37:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:37:52.577 [DEBUG] [Thread-59294] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:37:52.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:37:52.664 [DEBUG] [Thread-59297] [transport.py] [_log()] starting thread (client mode): 0xd07ceb90
2025-11-17T18:37:52.664 [DEBUG] [Thread-59297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:37:52.679 [DEBUG] [Thread-59297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:37:52.679 [INFO] [Thread-59297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:37:52.686 [DEBUG] [Thread-59297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:37:52.686 [DEBUG] [Thread-59297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:37:52.686 [DEBUG] [Thread-59297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:37:52.686 [DEBUG] [Thread-59297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:37:52.686 [DEBUG] [Thread-59297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:37:52.686 [DEBUG] [Thread-59297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:37:52.686 [DEBUG] [Thread-59297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] client lang: <none>
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] server lang: <none>
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] kex follows: False
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] Compression: none
2025-11-17T18:37:52.687 [DEBUG] [Thread-59297] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:37:52.745 [DEBUG] [Thread-59297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:37:52.745 [DEBUG] [Thread-59297] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:37:52.745 [DEBUG] [Thread-59297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:37:52.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:37:52.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:37:52.800 [DEBUG] [Thread-59297] [transport.py] [_log()] userauth is OK
2025-11-17T18:37:52.801 [DEBUG] [Thread-59297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:37:52.801 [DEBUG] [Thread-59297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:37:52.801 [DEBUG] [Thread-59297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:37:52.801 [DEBUG] [Thread-59297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:37:52.818 [INFO] [Thread-59297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:37:52.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:37:52.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:37:53.640 [DEBUG] [Thread-59297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:37:53.640 [DEBUG] [Thread-59297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:37:53.688 [DEBUG] [Thread-59297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:37:53.688 [DEBUG] [Thread-59297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:37:53.696 [DEBUG] [Thread-59297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:37:53.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:37:53.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:37:53.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:37:53.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:37:53.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:37:53.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:37:53.727 [DEBUG] [Thread-59297] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:38:00.877 [DEBUG] [Thread-59299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:38:15.912 [DEBUG] [Thread-59300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:38:23.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:38:23.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:38:23.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:38:24.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 37, 52), 28.43, 13.92, 0.0, 26.47, 21.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:38:24.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:37:52
2025-11-17T18:38:24.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:38:24.706 [DEBUG] [Thread-59301] [transport.py] [_log()] starting thread (client mode): 0xd07cd2a0
2025-11-17T18:38:24.707 [DEBUG] [Thread-59301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:38:24.726 [DEBUG] [Thread-59301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:38:24.726 [INFO] [Thread-59301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] client lang: <none>
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] server lang: <none>
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] kex follows: False
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] Compression: none
2025-11-17T18:38:24.730 [DEBUG] [Thread-59301] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:38:24.747 [DEBUG] [Thread-59301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:38:24.747 [DEBUG] [Thread-59301] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:38:24.747 [DEBUG] [Thread-59301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:38:24.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:38:24.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:38:24.748 [DEBUG] [Thread-59301] [transport.py] [_log()] userauth is OK
2025-11-17T18:38:24.748 [DEBUG] [Thread-59301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:38:24.748 [DEBUG] [Thread-59301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:38:24.748 [DEBUG] [Thread-59301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:38:24.748 [DEBUG] [Thread-59301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:38:24.757 [INFO] [Thread-59301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:38:24.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:38:25.503 [DEBUG] [Thread-59301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:38:25.503 [DEBUG] [Thread-59301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:38:25.503 [DEBUG] [Thread-59301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:38:25.544 [DEBUG] [Thread-59301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:38:25.544 [DEBUG] [Thread-59301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:38:25.546 [DEBUG] [Thread-59301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:38:25.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:38:25.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:38:25.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:38:25.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:38:25.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:38:25.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:38:25.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.692759 -999.00  +21.10  20.73     19   -2.80 1 1 1 1 1   887    0 24.12 17.58 ----- 26.3 20.7 293.6 28.6 22.7 -26.4 22.9 -25.4 22.9 -24.3 23.1 -25.8
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.692759
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:38:25.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:37:52', tmtdew=28.43, humidity=13.92, cloud=0.0, wind=26.47, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:37:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:38:25.565 [DEBUG] [Thread-59301] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:38:25.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:38:25.650 [DEBUG] [Thread-59304] [transport.py] [_log()] starting thread (client mode): 0xd31b1390
2025-11-17T18:38:25.650 [DEBUG] [Thread-59304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:38:25.665 [DEBUG] [Thread-59304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:38:25.665 [INFO] [Thread-59304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] client lang: <none>
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] server lang: <none>
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] kex follows: False
2025-11-17T18:38:25.672 [DEBUG] [Thread-59304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:38:25.673 [DEBUG] [Thread-59304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:38:25.673 [DEBUG] [Thread-59304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:38:25.673 [DEBUG] [Thread-59304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:38:25.673 [DEBUG] [Thread-59304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:38:25.673 [DEBUG] [Thread-59304] [transport.py] [_log()] Compression: none
2025-11-17T18:38:25.673 [DEBUG] [Thread-59304] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:38:25.727 [DEBUG] [Thread-59304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:38:25.727 [DEBUG] [Thread-59304] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:38:25.727 [DEBUG] [Thread-59304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:38:25.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:38:25.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:38:25.784 [DEBUG] [Thread-59304] [transport.py] [_log()] userauth is OK
2025-11-17T18:38:25.784 [DEBUG] [Thread-59304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:38:25.784 [DEBUG] [Thread-59304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:38:25.784 [DEBUG] [Thread-59304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:38:25.784 [DEBUG] [Thread-59304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:38:25.798 [INFO] [Thread-59304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:38:25.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:38:25.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:38:26.643 [DEBUG] [Thread-59304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:38:26.643 [DEBUG] [Thread-59304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:38:26.691 [DEBUG] [Thread-59304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:38:26.691 [DEBUG] [Thread-59304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:38:26.700 [DEBUG] [Thread-59304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:38:26.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:38:26.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:38:26.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:38:26.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:38:26.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:38:26.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:38:26.740 [DEBUG] [Thread-59304] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:38:28.727 [DEBUG] [Thread-59306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:38:30.942 [DEBUG] [Thread-59307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:38:35.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:38:35.725 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:38:45.987 [DEBUG] [Thread-59308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:38:56.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:38:56.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:38:56.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:38:57.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 38, 24), 28.47, 13.89, 0.0, 25.64, 21.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:38:57.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:38:24
2025-11-17T18:38:57.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:38:57.756 [DEBUG] [Thread-59309] [transport.py] [_log()] starting thread (client mode): 0xd07cd210
2025-11-17T18:38:57.757 [DEBUG] [Thread-59309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:38:57.776 [DEBUG] [Thread-59309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:38:57.776 [INFO] [Thread-59309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] client lang: <none>
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] server lang: <none>
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] kex follows: False
2025-11-17T18:38:57.778 [DEBUG] [Thread-59309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:38:57.779 [DEBUG] [Thread-59309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:38:57.779 [DEBUG] [Thread-59309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:38:57.779 [DEBUG] [Thread-59309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:38:57.779 [DEBUG] [Thread-59309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:38:57.779 [DEBUG] [Thread-59309] [transport.py] [_log()] Compression: none
2025-11-17T18:38:57.779 [DEBUG] [Thread-59309] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:38:57.796 [DEBUG] [Thread-59309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:38:57.796 [DEBUG] [Thread-59309] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:38:57.797 [DEBUG] [Thread-59309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:38:57.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:38:57.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:38:57.797 [DEBUG] [Thread-59309] [transport.py] [_log()] userauth is OK
2025-11-17T18:38:57.797 [DEBUG] [Thread-59309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:38:57.797 [DEBUG] [Thread-59309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:38:57.798 [DEBUG] [Thread-59309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:38:57.798 [DEBUG] [Thread-59309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:38:57.812 [INFO] [Thread-59309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:38:57.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:38:58.430 [DEBUG] [Thread-59309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:38:58.430 [DEBUG] [Thread-59309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:38:58.430 [DEBUG] [Thread-59309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:38:58.470 [DEBUG] [Thread-59309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:38:58.471 [DEBUG] [Thread-59309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:38:58.473 [DEBUG] [Thread-59309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:38:58.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:38:58.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:38:58.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:38:58.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:38:58.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:38:58.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:38:58.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:38:58.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:38:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:38:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.693106 -999.00  +21.20  15.83     19   -2.70 1 1 1 1 1   887    0 24.43 17.11 ----- 18.3 15.8 300.0 24.1 22.7 -26.1 22.9 -25.2 22.9 -25.5 23.1 -26.0
2025-11-17T18:38:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:38:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:38:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.693106
2025-11-17T18:38:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:38:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:38:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:38:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:38:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:38:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:38:24', tmtdew=28.47, humidity=13.89, cloud=0.0, wind=25.64, temperature=21.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:38:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:38:58.498 [DEBUG] [Thread-59309] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:38:58.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:38:58.596 [DEBUG] [Thread-59312] [transport.py] [_log()] starting thread (client mode): 0xd07cebc0
2025-11-17T18:38:58.596 [DEBUG] [Thread-59312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:38:58.611 [DEBUG] [Thread-59312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:38:58.611 [INFO] [Thread-59312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:38:58.619 [DEBUG] [Thread-59312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:38:58.619 [DEBUG] [Thread-59312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:38:58.619 [DEBUG] [Thread-59312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:38:58.619 [DEBUG] [Thread-59312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] client lang: <none>
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] server lang: <none>
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] kex follows: False
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:38:58.620 [DEBUG] [Thread-59312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:38:58.621 [DEBUG] [Thread-59312] [transport.py] [_log()] Compression: none
2025-11-17T18:38:58.621 [DEBUG] [Thread-59312] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:38:58.682 [DEBUG] [Thread-59312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:38:58.682 [DEBUG] [Thread-59312] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:38:58.683 [DEBUG] [Thread-59312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:38:58.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:38:58.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:38:58.741 [DEBUG] [Thread-59312] [transport.py] [_log()] userauth is OK
2025-11-17T18:38:58.741 [DEBUG] [Thread-59312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:38:58.741 [DEBUG] [Thread-59312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:38:58.741 [DEBUG] [Thread-59312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:38:58.741 [DEBUG] [Thread-59312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:38:58.760 [INFO] [Thread-59312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:38:58.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:38:58.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:38:59.587 [DEBUG] [Thread-59312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:38:59.587 [DEBUG] [Thread-59312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:38:59.635 [DEBUG] [Thread-59312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:38:59.635 [DEBUG] [Thread-59312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:38:59.644 [DEBUG] [Thread-59312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:38:59.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:38:59.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:38:59.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:38:59.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:38:59.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:38:59.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:38:59.679 [DEBUG] [Thread-59312] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:39:01.021 [DEBUG] [Thread-59314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:39:16.070 [DEBUG] [Thread-59315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:39:28.755 [DEBUG] [Thread-59316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:39:29.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:39:29.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:39:29.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
2025-11-17T18:39:30.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 38, 56), 28.5, 13.9, 0.0, 26.75, 21.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:39:30.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:38:56
2025-11-17T18:39:30.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:39:30.653 [DEBUG] [Thread-59317] [transport.py] [_log()] starting thread (client mode): 0xd07ce560
2025-11-17T18:39:30.653 [DEBUG] [Thread-59317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:39:30.674 [DEBUG] [Thread-59317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:39:30.674 [INFO] [Thread-59317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:39:30.677 [DEBUG] [Thread-59317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:39:30.677 [DEBUG] [Thread-59317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:39:30.677 [DEBUG] [Thread-59317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:39:30.677 [DEBUG] [Thread-59317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] client lang: <none>
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] server lang: <none>
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] kex follows: False
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] Compression: none
2025-11-17T18:39:30.678 [DEBUG] [Thread-59317] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:39:30.694 [DEBUG] [Thread-59317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:39:30.695 [DEBUG] [Thread-59317] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:39:30.695 [DEBUG] [Thread-59317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:39:30.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:39:30.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:39:30.698 [DEBUG] [Thread-59317] [transport.py] [_log()] userauth is OK
2025-11-17T18:39:30.698 [DEBUG] [Thread-59317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:39:30.698 [DEBUG] [Thread-59317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:39:30.698 [DEBUG] [Thread-59317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:39:30.698 [DEBUG] [Thread-59317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:39:30.714 [INFO] [Thread-59317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:39:30.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:39:31.096 [DEBUG] [Thread-59319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:39:31.457 [DEBUG] [Thread-59317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:39:31.458 [DEBUG] [Thread-59317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:39:31.458 [DEBUG] [Thread-59317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:39:31.498 [DEBUG] [Thread-59317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:39:31.498 [DEBUG] [Thread-59317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:39:31.501 [DEBUG] [Thread-59317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:39:31.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:39:31.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:39:31.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:39:31.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:39:31.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:39:31.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:39:31.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:39:31.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:39:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:39:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.693454 -999.00  +21.20  18.22     19   -2.70 1 1 1 1 1   887    0 24.61 14.29 ----- 22.4 18.2 276.0 25.7 22.6 -26.2 22.9 -25.0 22.8 -25.2 23.1 -25.8
2025-11-17T18:39:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:39:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:39:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.693454
2025-11-17T18:39:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:39:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:39:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:39:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:39:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:39:31.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:38:56', tmtdew=28.5, humidity=13.9, cloud=0.0, wind=26.75, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:38:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:39:31.529 [DEBUG] [Thread-59317] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:39:31.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:39:31.626 [DEBUG] [Thread-59321] [transport.py] [_log()] starting thread (client mode): 0xd07cec80
2025-11-17T18:39:31.626 [DEBUG] [Thread-59321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:39:31.641 [DEBUG] [Thread-59321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:39:31.641 [INFO] [Thread-59321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:39:31.649 [DEBUG] [Thread-59321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:39:31.649 [DEBUG] [Thread-59321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] client lang: <none>
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] server lang: <none>
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] kex follows: False
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:39:31.650 [DEBUG] [Thread-59321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:39:31.651 [DEBUG] [Thread-59321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:39:31.651 [DEBUG] [Thread-59321] [transport.py] [_log()] Compression: none
2025-11-17T18:39:31.651 [DEBUG] [Thread-59321] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:39:31.709 [DEBUG] [Thread-59321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:39:31.709 [DEBUG] [Thread-59321] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:39:31.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:39:31.710 [DEBUG] [Thread-59321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:39:31.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:39:31.765 [DEBUG] [Thread-59321] [transport.py] [_log()] userauth is OK
2025-11-17T18:39:31.765 [DEBUG] [Thread-59321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:39:31.765 [DEBUG] [Thread-59321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:39:31.765 [DEBUG] [Thread-59321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:39:31.765 [DEBUG] [Thread-59321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:39:31.784 [INFO] [Thread-59321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:39:31.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:39:31.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:39:32.621 [DEBUG] [Thread-59321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:39:32.621 [DEBUG] [Thread-59321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:39:32.668 [DEBUG] [Thread-59321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:39:32.668 [DEBUG] [Thread-59321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:39:32.677 [DEBUG] [Thread-59321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:39:32.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:39:32.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:39:32.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:39:32.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:39:32.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:39:32.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:39:32.712 [DEBUG] [Thread-59321] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:39:35.866 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:39:35.867 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:39:46.125 [DEBUG] [Thread-59323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:40:01.162 [DEBUG] [Thread-59324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:40:02.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:40:02.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:40:02.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:40:03.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 39, 28), 28.49, 13.9, 0.0, 27.4, 21.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:40:03.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:39:28
2025-11-17T18:40:03.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:40:03.649 [DEBUG] [Thread-59325] [transport.py] [_log()] starting thread (client mode): 0xd31b1a20
2025-11-17T18:40:03.650 [DEBUG] [Thread-59325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:40:03.669 [DEBUG] [Thread-59325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:40:03.669 [INFO] [Thread-59325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:40:03.672 [DEBUG] [Thread-59325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:40:03.672 [DEBUG] [Thread-59325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] client lang: <none>
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] server lang: <none>
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] kex follows: False
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] Compression: none
2025-11-17T18:40:03.673 [DEBUG] [Thread-59325] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:40:03.689 [DEBUG] [Thread-59325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:40:03.689 [DEBUG] [Thread-59325] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:40:03.690 [DEBUG] [Thread-59325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:40:03.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:40:03.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:40:03.691 [DEBUG] [Thread-59325] [transport.py] [_log()] userauth is OK
2025-11-17T18:40:03.692 [DEBUG] [Thread-59325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:40:03.692 [DEBUG] [Thread-59325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:40:03.692 [DEBUG] [Thread-59325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:40:03.692 [DEBUG] [Thread-59325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:40:03.710 [INFO] [Thread-59325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:40:03.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:40:05.487 [DEBUG] [Thread-59325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:40:05.488 [DEBUG] [Thread-59325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:40:05.488 [DEBUG] [Thread-59325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:40:05.528 [DEBUG] [Thread-59325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:40:05.529 [DEBUG] [Thread-59325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:40:05.532 [DEBUG] [Thread-59325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:40:05.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:40:05.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:40:05.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:40:05.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:40:05.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:40:05.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:40:05.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:40:05.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:40:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:40:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.693801 -999.00  +21.20  16.79     19   -2.70 1 1 1 1 1   887    0 24.75 11.10 ----- 23.6 16.8 297.6 24.8 22.6 -26.2 22.8 -25.2 22.7 -25.0 23.0 -25.8
2025-11-17T18:40:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:40:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:40:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.693801
2025-11-17T18:40:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:40:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:40:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:40:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:40:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:40:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:39:28', tmtdew=28.49, humidity=13.9, cloud=0.0, wind=27.4, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:39:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:40:05.555 [DEBUG] [Thread-59325] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:40:05.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:40:05.652 [DEBUG] [Thread-59328] [transport.py] [_log()] starting thread (client mode): 0xd078f4f0
2025-11-17T18:40:05.653 [DEBUG] [Thread-59328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:40:05.668 [DEBUG] [Thread-59328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:40:05.668 [INFO] [Thread-59328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:40:05.675 [DEBUG] [Thread-59328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] client lang: <none>
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] server lang: <none>
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] kex follows: False
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] Compression: none
2025-11-17T18:40:05.676 [DEBUG] [Thread-59328] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:40:05.732 [DEBUG] [Thread-59328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:40:05.732 [DEBUG] [Thread-59328] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:40:05.733 [DEBUG] [Thread-59328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:40:05.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:40:05.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:40:05.788 [DEBUG] [Thread-59328] [transport.py] [_log()] userauth is OK
2025-11-17T18:40:05.789 [DEBUG] [Thread-59328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:40:05.789 [DEBUG] [Thread-59328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:40:05.789 [DEBUG] [Thread-59328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:40:05.789 [DEBUG] [Thread-59328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:40:05.807 [INFO] [Thread-59328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:40:05.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:40:05.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:40:06.661 [DEBUG] [Thread-59328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:40:06.661 [DEBUG] [Thread-59328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:40:06.709 [DEBUG] [Thread-59328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:40:06.709 [DEBUG] [Thread-59328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:40:06.718 [DEBUG] [Thread-59328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:40:06.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:40:06.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:40:06.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:40:06.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:40:06.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:40:06.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:40:06.753 [DEBUG] [Thread-59328] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:40:16.193 [DEBUG] [Thread-59330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:40:28.804 [DEBUG] [Thread-59331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:40:31.234 [DEBUG] [Thread-59332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:40:36.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:40:36.008 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:40:36.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:40:36.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:40:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:40:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 40, 32), 28.43, 13.94, 0.0, 29.82, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:40:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:40:32
2025-11-17T18:40:37.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:40:37.690 [DEBUG] [Thread-59333] [transport.py] [_log()] starting thread (client mode): 0xd31b3190
2025-11-17T18:40:37.690 [DEBUG] [Thread-59333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:40:37.713 [DEBUG] [Thread-59333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:40:37.713 [INFO] [Thread-59333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:40:37.714 [DEBUG] [Thread-59333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] client lang: <none>
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] server lang: <none>
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] kex follows: False
2025-11-17T18:40:37.715 [DEBUG] [Thread-59333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:40:37.716 [DEBUG] [Thread-59333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:40:37.716 [DEBUG] [Thread-59333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:40:37.716 [DEBUG] [Thread-59333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:40:37.716 [DEBUG] [Thread-59333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:40:37.716 [DEBUG] [Thread-59333] [transport.py] [_log()] Compression: none
2025-11-17T18:40:37.716 [DEBUG] [Thread-59333] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:40:37.727 [DEBUG] [Thread-59333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:40:37.727 [DEBUG] [Thread-59333] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:40:37.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:40:37.729 [DEBUG] [Thread-59333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:40:37.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:40:37.731 [DEBUG] [Thread-59333] [transport.py] [_log()] userauth is OK
2025-11-17T18:40:37.731 [DEBUG] [Thread-59333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:40:37.731 [DEBUG] [Thread-59333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:40:37.731 [DEBUG] [Thread-59333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:40:37.731 [DEBUG] [Thread-59333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:40:37.756 [INFO] [Thread-59333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:40:37.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:40:38.391 [DEBUG] [Thread-59333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:40:38.391 [DEBUG] [Thread-59333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:40:38.392 [DEBUG] [Thread-59333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:40:38.433 [DEBUG] [Thread-59333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:40:38.433 [DEBUG] [Thread-59333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:40:38.436 [DEBUG] [Thread-59333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:40:38.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:40:38.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:40:38.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:40:38.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:40:38.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:40:38.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:40:38.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:40:38.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:40:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:40:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.694148 -999.00  +21.20  20.83     19   -2.70 1 1 1 1 1   887    0 24.41 8.70 ----- 16.8 20.8 283.8 24.8 22.6 -26.0 22.8 -25.0 22.6 -25.5 22.9 -25.8
2025-11-17T18:40:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:40:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:40:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.694148
2025-11-17T18:40:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:40:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:40:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:40:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:40:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:40:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:40:32', tmtdew=28.43, humidity=13.94, cloud=0.0, wind=29.82, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:39:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:40:38.460 [DEBUG] [Thread-59333] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:40:38.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:40:38.554 [DEBUG] [Thread-59336] [transport.py] [_log()] starting thread (client mode): 0xd31b2aa0
2025-11-17T18:40:38.554 [DEBUG] [Thread-59336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:40:38.568 [DEBUG] [Thread-59336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:40:38.569 [INFO] [Thread-59336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] client lang: <none>
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] server lang: <none>
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] kex follows: False
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:40:38.576 [DEBUG] [Thread-59336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:40:38.577 [DEBUG] [Thread-59336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:40:38.577 [DEBUG] [Thread-59336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:40:38.577 [DEBUG] [Thread-59336] [transport.py] [_log()] Compression: none
2025-11-17T18:40:38.577 [DEBUG] [Thread-59336] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:40:38.632 [DEBUG] [Thread-59336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:40:38.633 [DEBUG] [Thread-59336] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:40:38.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:40:38.633 [DEBUG] [Thread-59336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:40:38.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:40:38.688 [DEBUG] [Thread-59336] [transport.py] [_log()] userauth is OK
2025-11-17T18:40:38.689 [DEBUG] [Thread-59336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:40:38.689 [DEBUG] [Thread-59336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:40:38.689 [DEBUG] [Thread-59336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:40:38.689 [DEBUG] [Thread-59336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:40:38.712 [INFO] [Thread-59336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:40:38.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:40:38.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:40:39.528 [DEBUG] [Thread-59336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:40:39.529 [DEBUG] [Thread-59336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:40:39.576 [DEBUG] [Thread-59336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:40:39.576 [DEBUG] [Thread-59336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:40:39.585 [DEBUG] [Thread-59336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:40:39.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:40:39.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:40:39.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:40:39.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:40:39.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:40:39.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:40:39.620 [DEBUG] [Thread-59336] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:40:46.262 [DEBUG] [Thread-59338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:41:01.304 [DEBUG] [Thread-59339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:41:09.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:41:09.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:41:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:41:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 41, 4), 28.47, 13.9, 0.0, 29.17, 21.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:41:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:41:04
2025-11-17T18:41:10.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:41:10.604 [DEBUG] [Thread-59340] [transport.py] [_log()] starting thread (client mode): 0xd31b0820
2025-11-17T18:41:10.604 [DEBUG] [Thread-59340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:41:10.625 [DEBUG] [Thread-59340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:41:10.625 [INFO] [Thread-59340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] client lang: <none>
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] server lang: <none>
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] kex follows: False
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] Compression: none
2025-11-17T18:41:10.627 [DEBUG] [Thread-59340] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:41:10.639 [DEBUG] [Thread-59340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:41:10.639 [DEBUG] [Thread-59340] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:41:10.639 [DEBUG] [Thread-59340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:41:10.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:41:10.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:41:10.640 [DEBUG] [Thread-59340] [transport.py] [_log()] userauth is OK
2025-11-17T18:41:10.640 [DEBUG] [Thread-59340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:41:10.640 [DEBUG] [Thread-59340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:41:10.640 [DEBUG] [Thread-59340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:41:10.640 [DEBUG] [Thread-59340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:41:10.649 [INFO] [Thread-59340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:41:10.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:41:11.281 [DEBUG] [Thread-59340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:41:11.281 [DEBUG] [Thread-59340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:41:11.281 [DEBUG] [Thread-59340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:41:11.323 [DEBUG] [Thread-59340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:41:11.323 [DEBUG] [Thread-59340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:41:11.328 [DEBUG] [Thread-59340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:41:11.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:41:11.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:41:11.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:41:11.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:41:11.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:41:11.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:41:11.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:41:11.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:41:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:41:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.694842 -999.00  +21.00  24.67     19   -2.90 1 1 1 1 1   887    0 24.19 4.44 ----- 23.6 24.7 272.4 34.0 22.4 -26.9 22.6 -25.4 22.4 -25.9 22.8 -26.1
2025-11-17T18:41:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:41:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:41:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.694842
2025-11-17T18:41:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:41:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:41:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:41:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:41:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:41:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:41:04', tmtdew=28.47, humidity=13.9, cloud=0.0, wind=29.17, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:40:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:41:11.342 [DEBUG] [Thread-59340] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:41:11.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:41:11.428 [DEBUG] [Thread-59343] [transport.py] [_log()] starting thread (client mode): 0xd31b3430
2025-11-17T18:41:11.428 [DEBUG] [Thread-59343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:41:11.445 [DEBUG] [Thread-59343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:41:11.446 [INFO] [Thread-59343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] client lang: <none>
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] server lang: <none>
2025-11-17T18:41:11.453 [DEBUG] [Thread-59343] [transport.py] [_log()] kex follows: False
2025-11-17T18:41:11.454 [DEBUG] [Thread-59343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:41:11.454 [DEBUG] [Thread-59343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:41:11.454 [DEBUG] [Thread-59343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:41:11.454 [DEBUG] [Thread-59343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:41:11.454 [DEBUG] [Thread-59343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:41:11.454 [DEBUG] [Thread-59343] [transport.py] [_log()] Compression: none
2025-11-17T18:41:11.454 [DEBUG] [Thread-59343] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:41:11.512 [DEBUG] [Thread-59343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:41:11.512 [DEBUG] [Thread-59343] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:41:11.513 [DEBUG] [Thread-59343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:41:11.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:41:11.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:41:11.569 [DEBUG] [Thread-59343] [transport.py] [_log()] userauth is OK
2025-11-17T18:41:11.569 [DEBUG] [Thread-59343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:41:11.569 [DEBUG] [Thread-59343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:41:11.569 [DEBUG] [Thread-59343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:41:11.569 [DEBUG] [Thread-59343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:41:11.585 [INFO] [Thread-59343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:41:11.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:41:11.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:41:12.462 [DEBUG] [Thread-59343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:41:12.462 [DEBUG] [Thread-59343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:41:12.510 [DEBUG] [Thread-59343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:41:12.510 [DEBUG] [Thread-59343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:41:12.518 [DEBUG] [Thread-59343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:41:12.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:41:12.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:41:12.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:41:12.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:41:12.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:41:12.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:41:12.551 [DEBUG] [Thread-59343] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:41:16.330 [DEBUG] [Thread-59345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:41:28.853 [DEBUG] [Thread-59346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:41:31.373 [DEBUG] [Thread-59347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:41:36.148 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:41:36.150 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:41:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:41:42.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:41:42.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:41:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 41, 36), 28.58, 13.87, 0.0, 24.24, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:41:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:41:36
2025-11-17T18:41:43.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:41:43.499 [DEBUG] [Thread-59348] [transport.py] [_log()] starting thread (client mode): 0xd078f1c0
2025-11-17T18:41:43.499 [DEBUG] [Thread-59348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:41:43.516 [DEBUG] [Thread-59348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:41:43.516 [INFO] [Thread-59348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] client lang: <none>
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] server lang: <none>
2025-11-17T18:41:43.519 [DEBUG] [Thread-59348] [transport.py] [_log()] kex follows: False
2025-11-17T18:41:43.520 [DEBUG] [Thread-59348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:41:43.520 [DEBUG] [Thread-59348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:41:43.520 [DEBUG] [Thread-59348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:41:43.520 [DEBUG] [Thread-59348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:41:43.520 [DEBUG] [Thread-59348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:41:43.520 [DEBUG] [Thread-59348] [transport.py] [_log()] Compression: none
2025-11-17T18:41:43.520 [DEBUG] [Thread-59348] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:41:43.531 [DEBUG] [Thread-59348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:41:43.531 [DEBUG] [Thread-59348] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:41:43.532 [DEBUG] [Thread-59348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:41:43.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:41:43.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:41:43.533 [DEBUG] [Thread-59348] [transport.py] [_log()] userauth is OK
2025-11-17T18:41:43.534 [DEBUG] [Thread-59348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:41:43.534 [DEBUG] [Thread-59348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:41:43.534 [DEBUG] [Thread-59348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:41:43.534 [DEBUG] [Thread-59348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:41:43.554 [INFO] [Thread-59348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:41:43.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:41:44.207 [DEBUG] [Thread-59348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:41:44.207 [DEBUG] [Thread-59348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:41:44.207 [DEBUG] [Thread-59348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:41:44.248 [DEBUG] [Thread-59348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:41:44.248 [DEBUG] [Thread-59348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:41:44.251 [DEBUG] [Thread-59348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:41:44.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:41:44.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:41:44.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:41:44.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:41:44.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:41:44.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:41:44.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:41:44.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:41:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:41:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.695190 -999.00  +21.00  23.16     19   -3.00 1 1 1 1 1   887    0 23.90 2.74 ----- 26.7 23.2 274.4 30.3 22.4 -26.6 22.5 -25.3 22.3 -26.4 22.6 -26.1
2025-11-17T18:41:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:41:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:41:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.695190
2025-11-17T18:41:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:41:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:41:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:41:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:41:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:41:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:41:36', tmtdew=28.58, humidity=13.87, cloud=0.0, wind=24.24, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:41:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:41:44.276 [DEBUG] [Thread-59348] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:41:44.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:41:44.372 [DEBUG] [Thread-59351] [transport.py] [_log()] starting thread (client mode): 0xd078d000
2025-11-17T18:41:44.372 [DEBUG] [Thread-59351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:41:44.387 [DEBUG] [Thread-59351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:41:44.388 [INFO] [Thread-59351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] client lang: <none>
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] server lang: <none>
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] kex follows: False
2025-11-17T18:41:44.395 [DEBUG] [Thread-59351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:41:44.396 [DEBUG] [Thread-59351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:41:44.396 [DEBUG] [Thread-59351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:41:44.396 [DEBUG] [Thread-59351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:41:44.396 [DEBUG] [Thread-59351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:41:44.396 [DEBUG] [Thread-59351] [transport.py] [_log()] Compression: none
2025-11-17T18:41:44.396 [DEBUG] [Thread-59351] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:41:44.452 [DEBUG] [Thread-59351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:41:44.453 [DEBUG] [Thread-59351] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:41:44.453 [DEBUG] [Thread-59351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:41:44.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:41:44.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:41:44.509 [DEBUG] [Thread-59351] [transport.py] [_log()] userauth is OK
2025-11-17T18:41:44.509 [DEBUG] [Thread-59351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:41:44.509 [DEBUG] [Thread-59351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:41:44.509 [DEBUG] [Thread-59351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:41:44.509 [DEBUG] [Thread-59351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:41:44.529 [INFO] [Thread-59351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:41:44.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:41:44.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:41:45.385 [DEBUG] [Thread-59351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:41:45.385 [DEBUG] [Thread-59351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:41:45.433 [DEBUG] [Thread-59351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:41:45.433 [DEBUG] [Thread-59351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:41:45.442 [DEBUG] [Thread-59351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:41:45.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:41:45.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:41:45.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:41:45.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:41:45.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:41:45.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:41:45.476 [DEBUG] [Thread-59351] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:41:46.402 [DEBUG] [Thread-59353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:42:01.451 [DEBUG] [Thread-59354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:42:15.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:42:15.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:42:15.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:42:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 42, 8), 28.59, 13.87, 0.0, 22.87, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:42:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:42:08
2025-11-17T18:42:16.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:42:16.408 [DEBUG] [Thread-59355] [transport.py] [_log()] starting thread (client mode): 0xd07cece0
2025-11-17T18:42:16.408 [DEBUG] [Thread-59355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:42:16.429 [DEBUG] [Thread-59355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:42:16.429 [INFO] [Thread-59355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:42:16.432 [DEBUG] [Thread-59355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:42:16.432 [DEBUG] [Thread-59355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] client lang: <none>
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] server lang: <none>
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] kex follows: False
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] Compression: none
2025-11-17T18:42:16.433 [DEBUG] [Thread-59355] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:42:16.450 [DEBUG] [Thread-59355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:42:16.451 [DEBUG] [Thread-59355] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:42:16.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:42:16.452 [DEBUG] [Thread-59355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:42:16.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:42:16.453 [DEBUG] [Thread-59355] [transport.py] [_log()] userauth is OK
2025-11-17T18:42:16.453 [DEBUG] [Thread-59355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:42:16.454 [DEBUG] [Thread-59355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:42:16.454 [DEBUG] [Thread-59355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:42:16.454 [DEBUG] [Thread-59355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:42:16.479 [INFO] [Thread-59355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:42:16.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:42:16.482 [DEBUG] [Thread-59357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:42:17.123 [DEBUG] [Thread-59355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:42:17.123 [DEBUG] [Thread-59355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:42:17.123 [DEBUG] [Thread-59355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:42:17.164 [DEBUG] [Thread-59355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:42:17.164 [DEBUG] [Thread-59355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:42:17.167 [DEBUG] [Thread-59355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:42:17.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:42:17.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:42:17.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:42:17.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:42:17.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:42:17.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:42:17.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:42:17.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:42:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:42:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.695536 -999.00  +21.00  20.12     19   -3.00 1 1 1 1 1   887    0 23.95 1.54 ----- 20.5 20.1 292.9 26.2 22.3 -26.3 22.5 -25.2 22.3 -24.9 22.6 -25.8
2025-11-17T18:42:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:42:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:42:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.695536
2025-11-17T18:42:17.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:42:17.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:42:17.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:42:17.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:42:17.194 [DEBUG] [Thread-59355] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:42:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:42:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:42:08', tmtdew=28.59, humidity=13.87, cloud=0.0, wind=22.87, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:41:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:42:17.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:42:17.290 [DEBUG] [Thread-59359] [transport.py] [_log()] starting thread (client mode): 0xd31b1fc0
2025-11-17T18:42:17.290 [DEBUG] [Thread-59359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:42:17.305 [DEBUG] [Thread-59359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:42:17.306 [INFO] [Thread-59359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:42:17.313 [DEBUG] [Thread-59359] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:42:17.313 [DEBUG] [Thread-59359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:42:17.313 [DEBUG] [Thread-59359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:42:17.313 [DEBUG] [Thread-59359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] client lang: <none>
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] server lang: <none>
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] kex follows: False
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] Compression: none
2025-11-17T18:42:17.314 [DEBUG] [Thread-59359] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:42:17.372 [DEBUG] [Thread-59359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:42:17.373 [DEBUG] [Thread-59359] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:42:17.373 [DEBUG] [Thread-59359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:42:17.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:42:17.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:42:17.428 [DEBUG] [Thread-59359] [transport.py] [_log()] userauth is OK
2025-11-17T18:42:17.429 [DEBUG] [Thread-59359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:42:17.429 [DEBUG] [Thread-59359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:42:17.429 [DEBUG] [Thread-59359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:42:17.429 [DEBUG] [Thread-59359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:42:17.452 [INFO] [Thread-59359] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:42:17.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:42:17.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:42:18.288 [DEBUG] [Thread-59359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:42:18.288 [DEBUG] [Thread-59359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:42:18.336 [DEBUG] [Thread-59359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:42:18.336 [DEBUG] [Thread-59359] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:42:18.345 [DEBUG] [Thread-59359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:42:18.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:42:18.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:42:18.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:42:18.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:42:18.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:42:18.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:42:18.382 [DEBUG] [Thread-59359] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:42:28.881 [DEBUG] [Thread-59361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:42:31.509 [DEBUG] [Thread-59362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:42:36.289 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:42:36.290 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:42:46.550 [DEBUG] [Thread-59363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:42:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:42:48.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:42:48.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:42:49.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 42, 40), 28.62, 13.85, 0.0, 26.38, 21.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:42:49.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:42:40
2025-11-17T18:42:49.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:42:49.331 [DEBUG] [Thread-59364] [transport.py] [_log()] starting thread (client mode): 0xd31ee980
2025-11-17T18:42:49.332 [DEBUG] [Thread-59364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:42:49.353 [DEBUG] [Thread-59364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:42:49.353 [INFO] [Thread-59364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:42:49.356 [DEBUG] [Thread-59364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:42:49.356 [DEBUG] [Thread-59364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:42:49.356 [DEBUG] [Thread-59364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:42:49.356 [DEBUG] [Thread-59364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:42:49.356 [DEBUG] [Thread-59364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] client lang: <none>
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] server lang: <none>
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] kex follows: False
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:42:49.357 [DEBUG] [Thread-59364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:42:49.358 [DEBUG] [Thread-59364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:42:49.358 [DEBUG] [Thread-59364] [transport.py] [_log()] Compression: none
2025-11-17T18:42:49.358 [DEBUG] [Thread-59364] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:42:49.377 [DEBUG] [Thread-59364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:42:49.378 [DEBUG] [Thread-59364] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:42:49.378 [DEBUG] [Thread-59364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:42:49.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:42:49.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:42:49.380 [DEBUG] [Thread-59364] [transport.py] [_log()] userauth is OK
2025-11-17T18:42:49.380 [DEBUG] [Thread-59364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:42:49.380 [DEBUG] [Thread-59364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:42:49.380 [DEBUG] [Thread-59364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:42:49.380 [DEBUG] [Thread-59364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:42:49.395 [INFO] [Thread-59364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:42:49.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:42:50.006 [DEBUG] [Thread-59364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:42:50.006 [DEBUG] [Thread-59364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:42:50.007 [DEBUG] [Thread-59364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:42:50.047 [DEBUG] [Thread-59364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:42:50.048 [DEBUG] [Thread-59364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:42:50.050 [DEBUG] [Thread-59364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:42:50.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:42:50.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:42:50.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:42:50.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:42:50.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:42:50.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:42:50.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:42:50.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:42:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:42:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.695884 -999.00  +21.00  19.44     19   -2.90 1 1 1 1 1   887    0 23.81 -0.24 ----- 23.8 19.4 276.8 27.6 22.3 -26.5 22.5 -25.0 22.4 -25.7 22.6 -25.8
2025-11-17T18:42:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:42:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:42:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.695884
2025-11-17T18:42:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:42:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:42:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:42:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:42:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:42:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:42:40', tmtdew=28.62, humidity=13.85, cloud=0.0, wind=26.38, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:42:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:42:50.077 [DEBUG] [Thread-59364] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:42:50.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:42:50.172 [DEBUG] [Thread-59367] [transport.py] [_log()] starting thread (client mode): 0xd078fac0
2025-11-17T18:42:50.172 [DEBUG] [Thread-59367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:42:50.187 [DEBUG] [Thread-59367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:42:50.188 [INFO] [Thread-59367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] client lang: <none>
2025-11-17T18:42:50.195 [DEBUG] [Thread-59367] [transport.py] [_log()] server lang: <none>
2025-11-17T18:42:50.196 [DEBUG] [Thread-59367] [transport.py] [_log()] kex follows: False
2025-11-17T18:42:50.196 [DEBUG] [Thread-59367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:42:50.196 [DEBUG] [Thread-59367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:42:50.196 [DEBUG] [Thread-59367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:42:50.196 [DEBUG] [Thread-59367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:42:50.196 [DEBUG] [Thread-59367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:42:50.196 [DEBUG] [Thread-59367] [transport.py] [_log()] Compression: none
2025-11-17T18:42:50.196 [DEBUG] [Thread-59367] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:42:50.253 [DEBUG] [Thread-59367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:42:50.253 [DEBUG] [Thread-59367] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:42:50.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:42:50.254 [DEBUG] [Thread-59367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:42:50.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:42:50.308 [DEBUG] [Thread-59367] [transport.py] [_log()] userauth is OK
2025-11-17T18:42:50.309 [DEBUG] [Thread-59367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:42:50.309 [DEBUG] [Thread-59367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:42:50.309 [DEBUG] [Thread-59367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:42:50.309 [DEBUG] [Thread-59367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:42:50.329 [INFO] [Thread-59367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:42:50.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:42:50.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:42:51.171 [DEBUG] [Thread-59367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:42:51.171 [DEBUG] [Thread-59367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:42:51.223 [DEBUG] [Thread-59367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:42:51.224 [DEBUG] [Thread-59367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:42:51.233 [DEBUG] [Thread-59367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:42:51.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:42: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')
2025-11-17T18:42:51.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:42:51.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:42:51.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:42:51.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:42:51.269 [DEBUG] [Thread-59367] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:43:01.586 [DEBUG] [Thread-59369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:43:16.624 [DEBUG] [Thread-59370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:43:21.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:43:21.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:43:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:43:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 43, 12), 28.64, 13.84, 0.0, 23.93, 21.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:43:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:43:12
2025-11-17T18:43:22.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:43:22.229 [DEBUG] [Thread-59371] [transport.py] [_log()] starting thread (client mode): 0xd31b1cf0
2025-11-17T18:43:22.229 [DEBUG] [Thread-59371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:43:22.249 [DEBUG] [Thread-59371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:43:22.249 [INFO] [Thread-59371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:43:22.252 [DEBUG] [Thread-59371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:43:22.252 [DEBUG] [Thread-59371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:43:22.252 [DEBUG] [Thread-59371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:43:22.252 [DEBUG] [Thread-59371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:43:22.252 [DEBUG] [Thread-59371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:43:22.252 [DEBUG] [Thread-59371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:43:22.252 [DEBUG] [Thread-59371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:43:22.252 [DEBUG] [Thread-59371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] client lang: <none>
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] server lang: <none>
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] kex follows: False
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] Compression: none
2025-11-17T18:43:22.253 [DEBUG] [Thread-59371] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:43:22.270 [DEBUG] [Thread-59371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:43:22.270 [DEBUG] [Thread-59371] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:43:22.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:43:22.271 [DEBUG] [Thread-59371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:43:22.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:43:22.273 [DEBUG] [Thread-59371] [transport.py] [_log()] userauth is OK
2025-11-17T18:43:22.273 [DEBUG] [Thread-59371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:43:22.274 [DEBUG] [Thread-59371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:43:22.274 [DEBUG] [Thread-59371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:43:22.274 [DEBUG] [Thread-59371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:43:22.298 [INFO] [Thread-59371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:43:22.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:43:22.929 [DEBUG] [Thread-59371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:43:22.929 [DEBUG] [Thread-59371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:43:22.930 [DEBUG] [Thread-59371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:43:22.970 [DEBUG] [Thread-59371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:43:22.970 [DEBUG] [Thread-59371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:43:22.973 [DEBUG] [Thread-59371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:43:22.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:43:22.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:43:22.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:43:22.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:43:22.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:43:22.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:43:22.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:43:22.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:43:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:43:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.696231 -999.00  +21.00  18.06     19   -2.90 1 1 1 1 1   887    0 23.69 -2.64 ----- 24.1 18.1 278.7 30.2 22.3 -26.2 22.5 -25.3 22.4 -25.9 22.6 -25.8
2025-11-17T18:43:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:43:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:43:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.696231
2025-11-17T18:43:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:43:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:43:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:43:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:43:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:43:23.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:43:12', tmtdew=28.64, humidity=13.84, cloud=0.0, wind=23.93, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:42:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:43:23.000 [DEBUG] [Thread-59371] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:43:23.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:43:23.104 [DEBUG] [Thread-59374] [transport.py] [_log()] starting thread (client mode): 0xd31b3430
2025-11-17T18:43:23.104 [DEBUG] [Thread-59374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:43:23.119 [DEBUG] [Thread-59374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:43:23.119 [INFO] [Thread-59374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:43:23.127 [DEBUG] [Thread-59374] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:43:23.127 [DEBUG] [Thread-59374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:43:23.127 [DEBUG] [Thread-59374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:43:23.127 [DEBUG] [Thread-59374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:43:23.127 [DEBUG] [Thread-59374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:43:23.127 [DEBUG] [Thread-59374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:43:23.127 [DEBUG] [Thread-59374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:43:23.127 [DEBUG] [Thread-59374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] client lang: <none>
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] server lang: <none>
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] kex follows: False
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] Compression: none
2025-11-17T18:43:23.128 [DEBUG] [Thread-59374] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:43:23.187 [DEBUG] [Thread-59374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:43:23.187 [DEBUG] [Thread-59374] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:43:23.188 [DEBUG] [Thread-59374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:43:23.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:43:23.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:43:23.245 [DEBUG] [Thread-59374] [transport.py] [_log()] userauth is OK
2025-11-17T18:43:23.245 [DEBUG] [Thread-59374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:43:23.245 [DEBUG] [Thread-59374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:43:23.245 [DEBUG] [Thread-59374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:43:23.245 [DEBUG] [Thread-59374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:43:23.267 [INFO] [Thread-59374] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:43:23.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:43:23.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:43:24.102 [DEBUG] [Thread-59374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:43:24.102 [DEBUG] [Thread-59374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:43:24.150 [DEBUG] [Thread-59374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:43:24.151 [DEBUG] [Thread-59374] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:43:24.160 [DEBUG] [Thread-59374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:43:24.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:43:24.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:43:24.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:43:24.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:43:24.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:43:24.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:43:24.417 [DEBUG] [Thread-59374] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:43:28.932 [DEBUG] [Thread-59376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:43:31.657 [DEBUG] [Thread-59377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:43:36.431 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:43:36.432 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:43:46.699 [DEBUG] [Thread-59378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:43:54.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:43:54.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:43:54.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:43:55.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 43, 44), 28.7, 13.8, 0.0, 25.78, 21.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:43:55.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:43:44
2025-11-17T18:43:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:43:55.369 [DEBUG] [Thread-59379] [transport.py] [_log()] starting thread (client mode): 0xd31efa30
2025-11-17T18:43:55.369 [DEBUG] [Thread-59379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:43:55.389 [DEBUG] [Thread-59379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:43:55.390 [INFO] [Thread-59379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:43:55.392 [DEBUG] [Thread-59379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:43:55.392 [DEBUG] [Thread-59379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] client lang: <none>
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] server lang: <none>
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] kex follows: False
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] Compression: none
2025-11-17T18:43:55.393 [DEBUG] [Thread-59379] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:43:55.411 [DEBUG] [Thread-59379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:43:55.412 [DEBUG] [Thread-59379] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:43:55.412 [DEBUG] [Thread-59379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:43:55.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:43:55.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:43:55.414 [DEBUG] [Thread-59379] [transport.py] [_log()] userauth is OK
2025-11-17T18:43:55.414 [DEBUG] [Thread-59379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:43:55.414 [DEBUG] [Thread-59379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:43:55.414 [DEBUG] [Thread-59379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:43:55.414 [DEBUG] [Thread-59379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:43:55.430 [INFO] [Thread-59379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:43:55.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:43:56.020 [DEBUG] [Thread-59379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:43:56.020 [DEBUG] [Thread-59379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:43:56.020 [DEBUG] [Thread-59379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:43:56.061 [DEBUG] [Thread-59379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:43:56.062 [DEBUG] [Thread-59379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:43:56.065 [DEBUG] [Thread-59379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:43:56.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:43:56.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:43:56.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:43:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:43:56.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:43:56.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:43:56.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:43:56.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:43:56.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:43:56.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.696578 -999.00  +21.10  19.94     19   -2.90 1 1 1 1 1   887    0 23.80 -4.99 ----- 16.8 19.9 289.0 24.7 22.3 -26.3 22.5 -25.2 22.5 -25.1 22.7 -25.8
2025-11-17T18:43:56.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:43:56.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:43:56.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.696578
2025-11-17T18:43:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:43:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:43:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:43:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:43:56.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:43:56.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:43:44', tmtdew=28.7, humidity=13.8, cloud=0.0, wind=25.78, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:43:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:43:56.089 [DEBUG] [Thread-59379] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:43:56.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:43:56.186 [DEBUG] [Thread-59382] [transport.py] [_log()] starting thread (client mode): 0xd31ecb20
2025-11-17T18:43:56.186 [DEBUG] [Thread-59382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:43:56.201 [DEBUG] [Thread-59382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:43:56.201 [INFO] [Thread-59382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] client lang: <none>
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] server lang: <none>
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] kex follows: False
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] Compression: none
2025-11-17T18:43:56.209 [DEBUG] [Thread-59382] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:43:56.268 [DEBUG] [Thread-59382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:43:56.269 [DEBUG] [Thread-59382] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:43:56.269 [DEBUG] [Thread-59382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:43:56.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:43:56.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:43:56.324 [DEBUG] [Thread-59382] [transport.py] [_log()] userauth is OK
2025-11-17T18:43:56.325 [DEBUG] [Thread-59382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:43:56.325 [DEBUG] [Thread-59382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:43:56.325 [DEBUG] [Thread-59382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:43:56.325 [DEBUG] [Thread-59382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:43:56.343 [INFO] [Thread-59382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:43:56.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:43:56.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:43:57.201 [DEBUG] [Thread-59382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:43:57.201 [DEBUG] [Thread-59382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:43:57.250 [DEBUG] [Thread-59382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:43:57.250 [DEBUG] [Thread-59382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:43:57.259 [DEBUG] [Thread-59382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:43:57.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:43:57.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:43:57.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:43:57.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:43:57.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:43:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:43:57.291 [DEBUG] [Thread-59382] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:44:01.725 [DEBUG] [Thread-59384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:44:16.775 [DEBUG] [Thread-59385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:44:27.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:44:27.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:44:27.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:44:27.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 44, 16), 28.7, 13.8, 0.0, 25.36, 21.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:44:27.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:44:16
2025-11-17T18:44:28.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:44:28.240 [DEBUG] [Thread-59386] [transport.py] [_log()] starting thread (client mode): 0xd31b0ac0
2025-11-17T18:44:28.240 [DEBUG] [Thread-59386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:44:28.261 [DEBUG] [Thread-59386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:44:28.262 [INFO] [Thread-59386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:44:28.265 [DEBUG] [Thread-59386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:44:28.265 [DEBUG] [Thread-59386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:44:28.265 [DEBUG] [Thread-59386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:44:28.265 [DEBUG] [Thread-59386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] client lang: <none>
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] server lang: <none>
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] kex follows: False
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] Compression: none
2025-11-17T18:44:28.266 [DEBUG] [Thread-59386] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:44:28.282 [DEBUG] [Thread-59386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:44:28.283 [DEBUG] [Thread-59386] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:44:28.283 [DEBUG] [Thread-59386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:44:28.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:44:28.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:44:28.285 [DEBUG] [Thread-59386] [transport.py] [_log()] userauth is OK
2025-11-17T18:44:28.285 [DEBUG] [Thread-59386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:44:28.286 [DEBUG] [Thread-59386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:44:28.286 [DEBUG] [Thread-59386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:44:28.286 [DEBUG] [Thread-59386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:44:28.303 [INFO] [Thread-59386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:44:28.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:44:28.922 [DEBUG] [Thread-59386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:44:28.923 [DEBUG] [Thread-59386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:44:28.923 [DEBUG] [Thread-59386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:44:28.963 [DEBUG] [Thread-59386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:44:28.964 [DEBUG] [Thread-59386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:44:28.966 [DEBUG] [Thread-59386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:44:28.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:44:28.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:44:28.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:44:28.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:44:28.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:44:28.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:44:28.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:44:28.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.696926 -999.00  +21.20  20.22     19   -2.90 1 1 1 1 1   887    0 23.82 -6.45 ----- 17.2 20.2 275.0 28.7 22.3 -26.3 22.5 -25.4 22.5 -24.7 22.7 -26.1
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.696926
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:44:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:44:16', tmtdew=28.7, humidity=13.8, cloud=0.0, wind=25.36, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:43:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:44:28.986 [DEBUG] [Thread-59386] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:44:28.988 [DEBUG] [Thread-59389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:44:29.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:44:29.068 [DEBUG] [Thread-59390] [transport.py] [_log()] starting thread (client mode): 0xd078e980
2025-11-17T18:44:29.068 [DEBUG] [Thread-59390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:44:29.082 [DEBUG] [Thread-59390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:44:29.082 [INFO] [Thread-59390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] client lang: <none>
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] server lang: <none>
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] kex follows: False
2025-11-17T18:44:29.090 [DEBUG] [Thread-59390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:44:29.091 [DEBUG] [Thread-59390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:44:29.091 [DEBUG] [Thread-59390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:44:29.091 [DEBUG] [Thread-59390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:44:29.091 [DEBUG] [Thread-59390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:44:29.091 [DEBUG] [Thread-59390] [transport.py] [_log()] Compression: none
2025-11-17T18:44:29.091 [DEBUG] [Thread-59390] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:44:29.148 [DEBUG] [Thread-59390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:44:29.148 [DEBUG] [Thread-59390] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:44:29.148 [DEBUG] [Thread-59390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:44:29.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:44:29.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:44:29.205 [DEBUG] [Thread-59390] [transport.py] [_log()] userauth is OK
2025-11-17T18:44:29.205 [DEBUG] [Thread-59390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:44:29.205 [DEBUG] [Thread-59390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:44:29.205 [DEBUG] [Thread-59390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:44:29.205 [DEBUG] [Thread-59390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:44:29.224 [INFO] [Thread-59390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:44:29.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:44:29.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:44:30.086 [DEBUG] [Thread-59390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:44:30.086 [DEBUG] [Thread-59390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:44:30.133 [DEBUG] [Thread-59390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:44:30.133 [DEBUG] [Thread-59390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:44:30.142 [DEBUG] [Thread-59390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:44:30.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:44:30.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:44:30.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:44:30.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:44:30.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:44:30.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:44:30.177 [DEBUG] [Thread-59390] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:44:31.803 [DEBUG] [Thread-59392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:44:36.572 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:44:36.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:44:46.854 [DEBUG] [Thread-59393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:45:00.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:45:00.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:45:00.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:45:00.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 44, 48), 28.6, 13.84, 0.0, 25.73, 21.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:45:00.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:44:48
2025-11-17T18:45:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:45:01.190 [DEBUG] [Thread-59394] [transport.py] [_log()] starting thread (client mode): 0xd31ed3c0
2025-11-17T18:45:01.190 [DEBUG] [Thread-59394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:45:01.205 [DEBUG] [Thread-59394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:45:01.205 [INFO] [Thread-59394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:45:01.206 [DEBUG] [Thread-59394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] client lang: <none>
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] server lang: <none>
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] kex follows: False
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] Compression: none
2025-11-17T18:45:01.207 [DEBUG] [Thread-59394] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:45:01.216 [DEBUG] [Thread-59394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:45:01.216 [DEBUG] [Thread-59394] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:45:01.217 [DEBUG] [Thread-59394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:45:01.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:45:01.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:45:01.220 [DEBUG] [Thread-59394] [transport.py] [_log()] userauth is OK
2025-11-17T18:45:01.220 [DEBUG] [Thread-59394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:45:01.220 [DEBUG] [Thread-59394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:45:01.220 [DEBUG] [Thread-59394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:45:01.220 [DEBUG] [Thread-59394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:45:01.232 [INFO] [Thread-59394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:45:01.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:45:01.881 [DEBUG] [Thread-59396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:45:02.010 [DEBUG] [Thread-59394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:45:02.010 [DEBUG] [Thread-59394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:45:02.010 [DEBUG] [Thread-59394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:45:02.051 [DEBUG] [Thread-59394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:45:02.051 [DEBUG] [Thread-59394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:45:02.053 [DEBUG] [Thread-59394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:45:02.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:45:02.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:45:02.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:45:02.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:45:02.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:45:02.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:45:02.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.697273 -999.00  +21.10  26.04     19   -2.90 1 1 1 1 1   887    0 23.53 -8.95 ----- 30.5 26.0 277.6 40.4 22.3 -26.8 22.5 -25.5 22.4 -26.2 22.7 -26.5
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.697273
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:45:02.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:44:48', tmtdew=28.6, humidity=13.84, cloud=0.0, wind=25.73, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:44:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:45:02.070 [DEBUG] [Thread-59394] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:45:02.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:45:02.155 [DEBUG] [Thread-59398] [transport.py] [_log()] starting thread (client mode): 0xd31ee320
2025-11-17T18:45:02.156 [DEBUG] [Thread-59398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:45:02.172 [DEBUG] [Thread-59398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:45:02.172 [INFO] [Thread-59398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] client lang: <none>
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] server lang: <none>
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] kex follows: False
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] Compression: none
2025-11-17T18:45:02.180 [DEBUG] [Thread-59398] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:45:02.235 [DEBUG] [Thread-59398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:45:02.235 [DEBUG] [Thread-59398] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:45:02.235 [DEBUG] [Thread-59398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:45:02.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:45:02.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:45:02.293 [DEBUG] [Thread-59398] [transport.py] [_log()] userauth is OK
2025-11-17T18:45:02.293 [DEBUG] [Thread-59398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:45:02.293 [DEBUG] [Thread-59398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:45:02.293 [DEBUG] [Thread-59398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:45:02.293 [DEBUG] [Thread-59398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:45:02.307 [INFO] [Thread-59398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:45:02.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:45:02.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:45:03.203 [DEBUG] [Thread-59398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:45:03.203 [DEBUG] [Thread-59398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:45:03.251 [DEBUG] [Thread-59398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:45:03.251 [DEBUG] [Thread-59398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:45:03.260 [DEBUG] [Thread-59398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:45:03.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:45:03.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:45: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
2025-11-17T18:45:03.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:45:03.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:45:03.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:45:03.294 [DEBUG] [Thread-59398] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:45:16.906 [DEBUG] [Thread-59400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:45:29.046 [DEBUG] [Thread-59401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:45:31.948 [DEBUG] [Thread-59402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:45:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:45:33.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:45:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:45:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 45, 20), 28.58, 13.85, 0.0, 24.16, 21.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:45:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:45:20
2025-11-17T18:45:34.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:45:34.263 [DEBUG] [Thread-59403] [transport.py] [_log()] starting thread (client mode): 0xd07bec50
2025-11-17T18:45:34.263 [DEBUG] [Thread-59403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:45:34.285 [DEBUG] [Thread-59403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:45:34.285 [INFO] [Thread-59403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] client lang: <none>
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] server lang: <none>
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] kex follows: False
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:45:34.288 [DEBUG] [Thread-59403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:45:34.289 [DEBUG] [Thread-59403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:45:34.289 [DEBUG] [Thread-59403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:45:34.289 [DEBUG] [Thread-59403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:45:34.289 [DEBUG] [Thread-59403] [transport.py] [_log()] Compression: none
2025-11-17T18:45:34.289 [DEBUG] [Thread-59403] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:45:34.305 [DEBUG] [Thread-59403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:45:34.306 [DEBUG] [Thread-59403] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:45:34.306 [DEBUG] [Thread-59403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:45:34.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:45:34.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:45:34.308 [DEBUG] [Thread-59403] [transport.py] [_log()] userauth is OK
2025-11-17T18:45:34.309 [DEBUG] [Thread-59403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:45:34.309 [DEBUG] [Thread-59403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:45:34.309 [DEBUG] [Thread-59403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:45:34.309 [DEBUG] [Thread-59403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:45:34.329 [INFO] [Thread-59403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:45:34.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:45:34.961 [DEBUG] [Thread-59403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:45:34.962 [DEBUG] [Thread-59403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:45:34.962 [DEBUG] [Thread-59403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:45:35.002 [DEBUG] [Thread-59403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:45:35.003 [DEBUG] [Thread-59403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:45:35.005 [DEBUG] [Thread-59403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:45:35.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:45:35.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:45:35.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:45:35.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:45:35.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:45:35.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:45:35.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:45:35.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:45:35.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:45:35.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.697620 -999.00  +21.00  25.47     19   -2.90 1 1 1 1 1   887    0 23.11 -10.63 ----- 27.9 25.5 278.6 31.0 22.2 -27.1 22.4 -25.5 22.3 -26.4 22.6 -26.5
2025-11-17T18:45:35.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:45:35.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:45:35.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.697620
2025-11-17T18:45:35.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:45:35.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:45:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:45:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:45:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:45:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:45:20', tmtdew=28.58, humidity=13.85, cloud=0.0, wind=24.16, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:44:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:45:35.031 [DEBUG] [Thread-59403] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:45:35.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:45:35.121 [DEBUG] [Thread-59406] [transport.py] [_log()] starting thread (client mode): 0xd31b1060
2025-11-17T18:45:35.121 [DEBUG] [Thread-59406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:45:35.136 [DEBUG] [Thread-59406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:45:35.136 [INFO] [Thread-59406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] client lang: <none>
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] server lang: <none>
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] kex follows: False
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:45:35.143 [DEBUG] [Thread-59406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:45:35.144 [DEBUG] [Thread-59406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:45:35.144 [DEBUG] [Thread-59406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:45:35.144 [DEBUG] [Thread-59406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:45:35.144 [DEBUG] [Thread-59406] [transport.py] [_log()] Compression: none
2025-11-17T18:45:35.144 [DEBUG] [Thread-59406] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:45:35.200 [DEBUG] [Thread-59406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:45:35.200 [DEBUG] [Thread-59406] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:45:35.201 [DEBUG] [Thread-59406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:45:35.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:45:35.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:45:35.257 [DEBUG] [Thread-59406] [transport.py] [_log()] userauth is OK
2025-11-17T18:45:35.257 [DEBUG] [Thread-59406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:45:35.257 [DEBUG] [Thread-59406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:45:35.257 [DEBUG] [Thread-59406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:45:35.257 [DEBUG] [Thread-59406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:45:35.275 [INFO] [Thread-59406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:45:35.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:45:35.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:45:36.166 [DEBUG] [Thread-59406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:45:36.167 [DEBUG] [Thread-59406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:45:36.219 [DEBUG] [Thread-59406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:45:36.220 [DEBUG] [Thread-59406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:45:36.234 [DEBUG] [Thread-59406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:45:36.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:45:36.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:45:36.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:45:36.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:45:36.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:45:36.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:45:36.295 [DEBUG] [Thread-59406] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:45:36.713 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:45:36.714 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:45:46.981 [DEBUG] [Thread-59408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:46:02.021 [DEBUG] [Thread-59409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:46:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:46:06.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:46:06.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:46:06.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 45, 52), 28.58, 13.85, 0.0, 24.79, 21.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:46:06.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:45:52
2025-11-17T18:46:07.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:46:07.257 [DEBUG] [Thread-59410] [transport.py] [_log()] starting thread (client mode): 0xd31ee5f0
2025-11-17T18:46:07.257 [DEBUG] [Thread-59410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:46:07.277 [DEBUG] [Thread-59410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:46:07.277 [INFO] [Thread-59410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] client lang: <none>
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] server lang: <none>
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] kex follows: False
2025-11-17T18:46:07.280 [DEBUG] [Thread-59410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:46:07.281 [DEBUG] [Thread-59410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:46:07.281 [DEBUG] [Thread-59410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:46:07.281 [DEBUG] [Thread-59410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:46:07.281 [DEBUG] [Thread-59410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:46:07.281 [DEBUG] [Thread-59410] [transport.py] [_log()] Compression: none
2025-11-17T18:46:07.281 [DEBUG] [Thread-59410] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:46:07.297 [DEBUG] [Thread-59410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:46:07.297 [DEBUG] [Thread-59410] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:46:07.298 [DEBUG] [Thread-59410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:46:07.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:46:07.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:46:07.300 [DEBUG] [Thread-59410] [transport.py] [_log()] userauth is OK
2025-11-17T18:46:07.300 [DEBUG] [Thread-59410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:46:07.300 [DEBUG] [Thread-59410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:46:07.300 [DEBUG] [Thread-59410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:46:07.300 [DEBUG] [Thread-59410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:46:07.321 [INFO] [Thread-59410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:46:07.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:46:08.142 [DEBUG] [Thread-59410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:46:08.142 [DEBUG] [Thread-59410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:46:08.143 [DEBUG] [Thread-59410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:46:08.183 [DEBUG] [Thread-59410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:46:08.183 [DEBUG] [Thread-59410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:46:08.186 [DEBUG] [Thread-59410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:46:08.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:46:08.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:46:08.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:46:08.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:46:08.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:46:08.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:46:08.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:46:08.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:46:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:46:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.698314 -999.00  +20.80  25.43     20   -2.90 1 1 1 1 1   887    0 24.14 -15.84 ----- 25.0 25.4 283.9 29.3 22.1 -26.9 22.4 -25.9 22.2 -26.1 22.5 -26.4
2025-11-17T18:46:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:46:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:46:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.698314
2025-11-17T18:46:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:46:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:46:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:46:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:46:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:46:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:45:52', tmtdew=28.58, humidity=13.85, cloud=0.0, wind=24.79, temperature=21.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:45:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:46:08.210 [DEBUG] [Thread-59410] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:46:08.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:46:08.308 [DEBUG] [Thread-59413] [transport.py] [_log()] starting thread (client mode): 0xd31ec730
2025-11-17T18:46:08.308 [DEBUG] [Thread-59413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:46:08.322 [DEBUG] [Thread-59413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:46:08.322 [INFO] [Thread-59413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:46:08.329 [DEBUG] [Thread-59413] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] client lang: <none>
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] server lang: <none>
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] kex follows: False
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] Compression: none
2025-11-17T18:46:08.330 [DEBUG] [Thread-59413] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:46:08.391 [DEBUG] [Thread-59413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:46:08.392 [DEBUG] [Thread-59413] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:46:08.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:46:08.393 [DEBUG] [Thread-59413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:46:08.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:46:08.454 [DEBUG] [Thread-59413] [transport.py] [_log()] userauth is OK
2025-11-17T18:46:08.455 [DEBUG] [Thread-59413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:46:08.455 [DEBUG] [Thread-59413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:46:08.455 [DEBUG] [Thread-59413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:46:08.455 [DEBUG] [Thread-59413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:46:08.478 [INFO] [Thread-59413] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:46:08.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:46:08.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:46:09.290 [DEBUG] [Thread-59413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:46:09.291 [DEBUG] [Thread-59413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:46:09.338 [DEBUG] [Thread-59413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:46:09.338 [DEBUG] [Thread-59413] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:46:09.347 [DEBUG] [Thread-59413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:46:09.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:46:09.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:46:09.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:46:09.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:46:09.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:46:09.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:46:09.380 [DEBUG] [Thread-59413] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:46:17.053 [DEBUG] [Thread-59415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:46:29.111 [DEBUG] [Thread-59416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:46:32.081 [DEBUG] [Thread-59417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:46:36.855 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:46:36.856 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:46:39.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:46:39.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:46:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:46:40.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 46, 24), 28.61, 13.82, 0.0, 27.67, 21.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:46:40.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:46:24
2025-11-17T18:46:40.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:46:40.322 [DEBUG] [Thread-59418] [transport.py] [_log()] starting thread (client mode): 0xd07be260
2025-11-17T18:46:40.322 [DEBUG] [Thread-59418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:46:40.343 [DEBUG] [Thread-59418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:46:40.343 [INFO] [Thread-59418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:46:40.346 [DEBUG] [Thread-59418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] client lang: <none>
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] server lang: <none>
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] kex follows: False
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] Compression: none
2025-11-17T18:46:40.347 [DEBUG] [Thread-59418] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:46:40.364 [DEBUG] [Thread-59418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:46:40.364 [DEBUG] [Thread-59418] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:46:40.365 [DEBUG] [Thread-59418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:46:40.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:46:40.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:46:40.367 [DEBUG] [Thread-59418] [transport.py] [_log()] userauth is OK
2025-11-17T18:46:40.367 [DEBUG] [Thread-59418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:46:40.367 [DEBUG] [Thread-59418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:46:40.367 [DEBUG] [Thread-59418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:46:40.367 [DEBUG] [Thread-59418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:46:40.403 [INFO] [Thread-59418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:46:40.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:46:41.049 [DEBUG] [Thread-59418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:46:41.049 [DEBUG] [Thread-59418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:46:41.049 [DEBUG] [Thread-59418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:46:41.090 [DEBUG] [Thread-59418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:46:41.090 [DEBUG] [Thread-59418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:46:41.093 [DEBUG] [Thread-59418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:46:41.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:46:41.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:46:41.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:46:41.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:46:41.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:46:41.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:46:41.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:46:41.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:46:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:46:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.698662 -999.00  +20.90  24.01     19   -3.00 1 1 1 1 1   887    0 24.08 -18.56 ----- 27.4 24.0 282.2 31.6 22.1 -27.0 22.3 -25.7 22.2 -25.5 22.5 -26.4
2025-11-17T18:46:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:46:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:46:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.698662
2025-11-17T18:46:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:46:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:46:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:46:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:46:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:46:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:46:24', tmtdew=28.61, humidity=13.82, cloud=0.0, wind=27.67, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:46:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:46:41.117 [DEBUG] [Thread-59418] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:46:41.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:46:41.206 [DEBUG] [Thread-59421] [transport.py] [_log()] starting thread (client mode): 0xd07bf8b0
2025-11-17T18:46:41.206 [DEBUG] [Thread-59421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:46:41.222 [DEBUG] [Thread-59421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:46:41.222 [INFO] [Thread-59421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:46:41.229 [DEBUG] [Thread-59421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] client lang: <none>
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] server lang: <none>
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] kex follows: False
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:46:41.230 [DEBUG] [Thread-59421] [transport.py] [_log()] Compression: none
2025-11-17T18:46:41.231 [DEBUG] [Thread-59421] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:46:41.288 [DEBUG] [Thread-59421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:46:41.288 [DEBUG] [Thread-59421] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:46:41.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:46:41.289 [DEBUG] [Thread-59421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:46:41.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:46:41.345 [DEBUG] [Thread-59421] [transport.py] [_log()] userauth is OK
2025-11-17T18:46:41.345 [DEBUG] [Thread-59421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:46:41.345 [DEBUG] [Thread-59421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:46:41.345 [DEBUG] [Thread-59421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:46:41.345 [DEBUG] [Thread-59421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:46:41.364 [INFO] [Thread-59421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:46:41.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:46:41.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:46:42.182 [DEBUG] [Thread-59421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:46:42.182 [DEBUG] [Thread-59421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:46:42.229 [DEBUG] [Thread-59421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:46:42.229 [DEBUG] [Thread-59421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:46:42.238 [DEBUG] [Thread-59421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:46:42.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:46:42.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:46:42.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:46:42.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:46:42.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:46:42.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:46:42.273 [DEBUG] [Thread-59421] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:46:47.113 [DEBUG] [Thread-59423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:47:02.155 [DEBUG] [Thread-59424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:47:12.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:47:12.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:47:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:47:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 46, 56), 28.67, 13.82, 0.0, 28.6, 21.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:47:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:46:56
2025-11-17T18:47:13.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:47:13.229 [DEBUG] [Thread-59425] [transport.py] [_log()] starting thread (client mode): 0xd07bebc0
2025-11-17T18:47:13.229 [DEBUG] [Thread-59425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:47:13.250 [DEBUG] [Thread-59425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:47:13.250 [INFO] [Thread-59425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:47:13.253 [DEBUG] [Thread-59425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] client lang: <none>
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] server lang: <none>
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] kex follows: False
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] Compression: none
2025-11-17T18:47:13.254 [DEBUG] [Thread-59425] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:47:13.270 [DEBUG] [Thread-59425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:47:13.270 [DEBUG] [Thread-59425] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:47:13.271 [DEBUG] [Thread-59425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:47:13.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:47:13.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:47:13.273 [DEBUG] [Thread-59425] [transport.py] [_log()] userauth is OK
2025-11-17T18:47:13.273 [DEBUG] [Thread-59425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:47:13.273 [DEBUG] [Thread-59425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:47:13.273 [DEBUG] [Thread-59425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:47:13.273 [DEBUG] [Thread-59425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:47:13.297 [INFO] [Thread-59425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:47:13.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:47:14.094 [DEBUG] [Thread-59425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:47:14.095 [DEBUG] [Thread-59425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:47:14.095 [DEBUG] [Thread-59425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:47:14.136 [DEBUG] [Thread-59425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:47:14.136 [DEBUG] [Thread-59425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:47:14.138 [DEBUG] [Thread-59425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:47:14.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:47:14.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:47:14.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:47:14.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:47:14.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:47:14.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:47:14.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:47:14.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:47:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:47:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.699009 -999.00  +20.80  24.59     19   -3.00 1 1 1 1 1   887    0 23.08 -22.11 ----- 22.1 24.6 281.6 37.7 22.1 -27.0 22.2 -25.9 22.3 -25.8 22.4 -26.4
2025-11-17T18:47:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:47:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:47:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.699009
2025-11-17T18:47:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:47:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:47:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:47:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:47:14.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:47:14.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:46:56', tmtdew=28.67, humidity=13.82, cloud=0.0, wind=28.6, temperature=21.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:46:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:47:14.163 [DEBUG] [Thread-59425] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:47:14.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:47:14.270 [DEBUG] [Thread-59428] [transport.py] [_log()] starting thread (client mode): 0xd07bf010
2025-11-17T18:47:14.270 [DEBUG] [Thread-59428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:47:14.285 [DEBUG] [Thread-59428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:47:14.285 [INFO] [Thread-59428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:47:14.292 [DEBUG] [Thread-59428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] client lang: <none>
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] server lang: <none>
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] kex follows: False
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] Compression: none
2025-11-17T18:47:14.293 [DEBUG] [Thread-59428] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:47:14.352 [DEBUG] [Thread-59428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:47:14.353 [DEBUG] [Thread-59428] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:47:14.353 [DEBUG] [Thread-59428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:47:14.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:47:14.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:47:14.416 [DEBUG] [Thread-59428] [transport.py] [_log()] userauth is OK
2025-11-17T18:47:14.416 [DEBUG] [Thread-59428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:47:14.416 [DEBUG] [Thread-59428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:47:14.416 [DEBUG] [Thread-59428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:47:14.416 [DEBUG] [Thread-59428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:47:14.435 [INFO] [Thread-59428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:47:14.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:47:14.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:47:15.283 [DEBUG] [Thread-59428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:47:15.283 [DEBUG] [Thread-59428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:47:15.331 [DEBUG] [Thread-59428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:47:15.331 [DEBUG] [Thread-59428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:47:15.341 [DEBUG] [Thread-59428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:47:15.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:47:15.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:47:15.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:47:15.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:47:15.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:47:15.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:47:15.375 [DEBUG] [Thread-59428] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:47:17.187 [DEBUG] [Thread-59430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:47:29.158 [DEBUG] [Thread-59431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:47:32.228 [DEBUG] [Thread-59432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:47:36.995 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:47:36.996 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:47:45.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:47:45.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:47:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:47:46.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 47, 28), 28.69, 13.79, 0.0, 28.34, 21.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:47:46.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:47:28
2025-11-17T18:47:46.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:47:46.315 [DEBUG] [Thread-59433] [transport.py] [_log()] starting thread (client mode): 0xd07bf3d0
2025-11-17T18:47:46.316 [DEBUG] [Thread-59433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:47:46.335 [DEBUG] [Thread-59433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:47:46.335 [INFO] [Thread-59433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] client lang: <none>
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] server lang: <none>
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] kex follows: False
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] Compression: none
2025-11-17T18:47:46.339 [DEBUG] [Thread-59433] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:47:46.356 [DEBUG] [Thread-59433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:47:46.357 [DEBUG] [Thread-59433] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:47:46.357 [DEBUG] [Thread-59433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:47:46.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:47:46.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:47:46.401 [DEBUG] [Thread-59433] [transport.py] [_log()] userauth is OK
2025-11-17T18:47:46.401 [DEBUG] [Thread-59433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:47:46.401 [DEBUG] [Thread-59433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:47:46.401 [DEBUG] [Thread-59433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:47:46.401 [DEBUG] [Thread-59433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:47:46.433 [INFO] [Thread-59433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:47:46.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:47:47.055 [DEBUG] [Thread-59433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:47:47.055 [DEBUG] [Thread-59433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:47:47.055 [DEBUG] [Thread-59433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:47:47.096 [DEBUG] [Thread-59433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:47:47.096 [DEBUG] [Thread-59433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:47:47.099 [DEBUG] [Thread-59433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:47:47.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:47:47.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:47:47.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:47:47.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:47:47.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:47:47.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:47:47.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:47:47.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:47:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:47:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.699356 -999.00  +20.80  24.90     19   -3.00 1 1 1 1 1   887    0 23.51 -21.95 ----- 21.5 24.9 293.8 31.0 22.1 -26.6 22.3 -25.8 22.3 -25.1 22.4 -26.2
2025-11-17T18:47:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:47:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:47:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.699356
2025-11-17T18:47:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:47:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:47:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:47:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:47:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:47:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:47:28', tmtdew=28.69, humidity=13.79, cloud=0.0, wind=28.34, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:47:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:47:47.128 [DEBUG] [Thread-59433] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:47:47.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:47:47.224 [DEBUG] [Thread-59436] [transport.py] [_log()] starting thread (client mode): 0xd07be410
2025-11-17T18:47:47.224 [DEBUG] [Thread-59436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:47:47.239 [DEBUG] [Thread-59436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:47:47.240 [INFO] [Thread-59436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:47:47.247 [DEBUG] [Thread-59436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:47:47.247 [DEBUG] [Thread-59436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:47:47.247 [DEBUG] [Thread-59436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] client lang: <none>
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] server lang: <none>
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] kex follows: False
2025-11-17T18:47:47.248 [DEBUG] [Thread-59436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:47:47.249 [DEBUG] [Thread-59436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:47:47.249 [DEBUG] [Thread-59436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:47:47.249 [DEBUG] [Thread-59436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:47:47.249 [DEBUG] [Thread-59436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:47:47.249 [DEBUG] [Thread-59436] [transport.py] [_log()] Compression: none
2025-11-17T18:47:47.249 [DEBUG] [Thread-59436] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:47:47.260 [DEBUG] [Thread-59438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:47:47.308 [DEBUG] [Thread-59436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:47:47.309 [DEBUG] [Thread-59436] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:47:47.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:47:47.310 [DEBUG] [Thread-59436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:47:47.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:47:47.365 [DEBUG] [Thread-59436] [transport.py] [_log()] userauth is OK
2025-11-17T18:47:47.365 [DEBUG] [Thread-59436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:47:47.365 [DEBUG] [Thread-59436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:47:47.365 [DEBUG] [Thread-59436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:47:47.365 [DEBUG] [Thread-59436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:47:47.385 [INFO] [Thread-59436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:47:47.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:47:47.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:47:48.303 [DEBUG] [Thread-59436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:47:48.303 [DEBUG] [Thread-59436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:47:48.350 [DEBUG] [Thread-59436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:47:48.350 [DEBUG] [Thread-59436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:47:48.359 [DEBUG] [Thread-59436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:47:48.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:47:48.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:47:48.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:47:48.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:47:48.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:47:48.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:47:48.393 [DEBUG] [Thread-59436] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:48:02.302 [DEBUG] [Thread-59439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:48:17.332 [DEBUG] [Thread-59440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:48:18.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:48:18.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:48:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:48:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 48), 28.71, 13.77, 0.0, 23.63, 21.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:48:19.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:48:00
2025-11-17T18:48:19.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:48:19.344 [DEBUG] [Thread-59441] [transport.py] [_log()] starting thread (client mode): 0xd07bfe20
2025-11-17T18:48:19.344 [DEBUG] [Thread-59441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:48:19.363 [DEBUG] [Thread-59441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:48:19.363 [INFO] [Thread-59441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:48:19.366 [DEBUG] [Thread-59441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:48:19.366 [DEBUG] [Thread-59441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:48:19.366 [DEBUG] [Thread-59441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:48:19.366 [DEBUG] [Thread-59441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] client lang: <none>
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] server lang: <none>
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] kex follows: False
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:48:19.367 [DEBUG] [Thread-59441] [transport.py] [_log()] Compression: none
2025-11-17T18:48:19.368 [DEBUG] [Thread-59441] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:48:19.387 [DEBUG] [Thread-59441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:48:19.387 [DEBUG] [Thread-59441] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:48:19.388 [DEBUG] [Thread-59441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:48:19.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:48:19.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:48:19.390 [DEBUG] [Thread-59441] [transport.py] [_log()] userauth is OK
2025-11-17T18:48:19.390 [DEBUG] [Thread-59441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:48:19.390 [DEBUG] [Thread-59441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:48:19.390 [DEBUG] [Thread-59441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:48:19.390 [DEBUG] [Thread-59441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:48:19.414 [INFO] [Thread-59441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:48:19.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:48:20.186 [DEBUG] [Thread-59441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:48:20.186 [DEBUG] [Thread-59441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:48:20.186 [DEBUG] [Thread-59441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:48:20.227 [DEBUG] [Thread-59441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:48:20.228 [DEBUG] [Thread-59441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:48:20.230 [DEBUG] [Thread-59441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:48:20.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:48:20.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:48:20.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:48:20.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:48:20.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:48:20.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:48:20.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:48:20.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:48:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:48:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.699703 -999.00  +20.90  26.40     19   -3.00 1 1 1 1 1   887    0 23.68 -24.58 ----- 26.4 26.4 292.8 30.6 22.1 -26.9 22.2 -25.8 22.3 -25.5 22.5 -26.4
2025-11-17T18:48:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:48:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:48:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.699703
2025-11-17T18:48:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:48:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:48:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:48:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:48:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:48:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:48:00', tmtdew=28.71, humidity=13.77, cloud=0.0, wind=23.63, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:47:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:48:20.254 [DEBUG] [Thread-59441] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:48:20.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:48:20.350 [DEBUG] [Thread-59444] [transport.py] [_log()] starting thread (client mode): 0xd07bda80
2025-11-17T18:48:20.350 [DEBUG] [Thread-59444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:48:20.365 [DEBUG] [Thread-59444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:48:20.366 [INFO] [Thread-59444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:48:20.377 [DEBUG] [Thread-59444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:48:20.377 [DEBUG] [Thread-59444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:48:20.377 [DEBUG] [Thread-59444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:48:20.377 [DEBUG] [Thread-59444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:48:20.377 [DEBUG] [Thread-59444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:48:20.377 [DEBUG] [Thread-59444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] client lang: <none>
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] server lang: <none>
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] kex follows: False
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] Compression: none
2025-11-17T18:48:20.378 [DEBUG] [Thread-59444] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:48:20.433 [DEBUG] [Thread-59444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:48:20.433 [DEBUG] [Thread-59444] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:48:20.434 [DEBUG] [Thread-59444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:48:20.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:48:20.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:48:20.488 [DEBUG] [Thread-59444] [transport.py] [_log()] userauth is OK
2025-11-17T18:48:20.489 [DEBUG] [Thread-59444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:48:20.489 [DEBUG] [Thread-59444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:48:20.489 [DEBUG] [Thread-59444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:48:20.489 [DEBUG] [Thread-59444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:48:20.507 [INFO] [Thread-59444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:48:20.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:48:20.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:48:21.340 [DEBUG] [Thread-59444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:48:21.341 [DEBUG] [Thread-59444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:48:21.388 [DEBUG] [Thread-59444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:48:21.388 [DEBUG] [Thread-59444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:48:21.397 [DEBUG] [Thread-59444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:48:21.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:48:21.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:48:21.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:48:21.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:48:21.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:48:21.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:48:21.432 [DEBUG] [Thread-59444] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:48:29.206 [DEBUG] [Thread-59446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:48:32.363 [DEBUG] [Thread-59447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:48:37.136 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:48:37.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:48:47.411 [DEBUG] [Thread-59448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:48:51.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:48:51.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:48:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:48:52.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 48, 32), 28.7, 13.75, 0.0, 23.86, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:48:52.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:48:32
2025-11-17T18:48:52.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:48:52.406 [DEBUG] [Thread-59449] [transport.py] [_log()] starting thread (client mode): 0xd07bdd80
2025-11-17T18:48:52.407 [DEBUG] [Thread-59449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:48:52.427 [DEBUG] [Thread-59449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:48:52.427 [INFO] [Thread-59449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] client lang: <none>
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] server lang: <none>
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] kex follows: False
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:48:52.430 [DEBUG] [Thread-59449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:48:52.431 [DEBUG] [Thread-59449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:48:52.431 [DEBUG] [Thread-59449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:48:52.431 [DEBUG] [Thread-59449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:48:52.431 [DEBUG] [Thread-59449] [transport.py] [_log()] Compression: none
2025-11-17T18:48:52.431 [DEBUG] [Thread-59449] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:48:52.446 [DEBUG] [Thread-59449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:48:52.446 [DEBUG] [Thread-59449] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:48:52.447 [DEBUG] [Thread-59449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:48:52.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:48:52.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:48:52.447 [DEBUG] [Thread-59449] [transport.py] [_log()] userauth is OK
2025-11-17T18:48:52.447 [DEBUG] [Thread-59449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:48:52.447 [DEBUG] [Thread-59449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:48:52.447 [DEBUG] [Thread-59449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:48:52.447 [DEBUG] [Thread-59449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:48:52.457 [INFO] [Thread-59449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:48:52.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:48:53.094 [DEBUG] [Thread-59449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:48:53.094 [DEBUG] [Thread-59449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:48:53.094 [DEBUG] [Thread-59449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:48:53.135 [DEBUG] [Thread-59449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:48:53.135 [DEBUG] [Thread-59449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:48:53.136 [DEBUG] [Thread-59449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:48:53.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:48:53.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:48:53.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:48:53.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:48:53.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:48:53.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:48:53.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:48:53.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.700051 -999.00  +20.90  19.68     19   -2.90 1 1 1 1 1   887    0 23.58 -25.92 ----- 16.5 19.7 292.0 25.0 22.1 -26.8 22.3 -26.1 22.2 -25.6 22.5 -26.4
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.700051
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:48:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:48:32', tmtdew=28.7, humidity=13.75, cloud=0.0, wind=23.86, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:48:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:48:53.158 [DEBUG] [Thread-59449] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:48:53.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:48:53.243 [DEBUG] [Thread-59452] [transport.py] [_log()] starting thread (client mode): 0xd07bcaf0
2025-11-17T18:48:53.244 [DEBUG] [Thread-59452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:48:53.258 [DEBUG] [Thread-59452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:48:53.258 [INFO] [Thread-59452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] client lang: <none>
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] server lang: <none>
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] kex follows: False
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] Compression: none
2025-11-17T18:48:53.266 [DEBUG] [Thread-59452] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:48:53.323 [DEBUG] [Thread-59452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:48:53.324 [DEBUG] [Thread-59452] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:48:53.324 [DEBUG] [Thread-59452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:48:53.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:48:53.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:48:53.380 [DEBUG] [Thread-59452] [transport.py] [_log()] userauth is OK
2025-11-17T18:48:53.380 [DEBUG] [Thread-59452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:48:53.380 [DEBUG] [Thread-59452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:48:53.380 [DEBUG] [Thread-59452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:48:53.380 [DEBUG] [Thread-59452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:48:53.393 [INFO] [Thread-59452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:48:53.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:48:53.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:48:54.265 [DEBUG] [Thread-59452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:48:54.265 [DEBUG] [Thread-59452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:48:54.313 [DEBUG] [Thread-59452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:48:54.313 [DEBUG] [Thread-59452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:48:54.321 [DEBUG] [Thread-59452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:48:54.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:48:54.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:48:54.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:48:54.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:48:54.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:48:54.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:48:54.353 [DEBUG] [Thread-59452] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:49:02.443 [DEBUG] [Thread-59454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:49:17.496 [DEBUG] [Thread-59455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:49:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:49:24.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:49:24.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:49:25.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 49, 4), 28.68, 13.77, 0.0, 26.18, 21.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:49:25.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:49:04
2025-11-17T18:49:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:49:25.314 [DEBUG] [Thread-59456] [transport.py] [_log()] starting thread (client mode): 0xd07bd840
2025-11-17T18:49:25.315 [DEBUG] [Thread-59456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:49:25.333 [DEBUG] [Thread-59456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:49:25.334 [INFO] [Thread-59456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] client lang: <none>
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] server lang: <none>
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] kex follows: False
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] Compression: none
2025-11-17T18:49:25.337 [DEBUG] [Thread-59456] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:49:25.353 [DEBUG] [Thread-59456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:49:25.353 [DEBUG] [Thread-59456] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:49:25.354 [DEBUG] [Thread-59456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:49:25.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:49:25.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:49:25.356 [DEBUG] [Thread-59456] [transport.py] [_log()] userauth is OK
2025-11-17T18:49:25.356 [DEBUG] [Thread-59456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:49:25.356 [DEBUG] [Thread-59456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:49:25.356 [DEBUG] [Thread-59456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:49:25.356 [DEBUG] [Thread-59456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:49:25.374 [INFO] [Thread-59456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:49:25.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:49:26.124 [DEBUG] [Thread-59456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:49:26.124 [DEBUG] [Thread-59456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:49:26.125 [DEBUG] [Thread-59456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:49:26.166 [DEBUG] [Thread-59456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:49:26.166 [DEBUG] [Thread-59456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:49:26.168 [DEBUG] [Thread-59456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:49:26.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:49:26.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:49:26.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:49:26.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:49:26.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:49:26.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:49:26.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:49:26.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:49:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:49:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.700398 -999.00  +21.00  17.58     19   -2.90 1 1 1 1 1   887    0 23.47 -24.17 ----- 19.0 17.6 285.0 22.1 22.1 -26.7 22.2 -25.8 22.2 -25.5 22.5 -26.5
2025-11-17T18:49:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:49:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:49:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.700398
2025-11-17T18:49:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:49:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:49:26.185 [DEBUG] [Thread-59456] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:49:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:49:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:49:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:49:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:49:04', tmtdew=28.68, humidity=13.77, cloud=0.0, wind=26.18, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:48:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:49:26.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:49:26.281 [DEBUG] [Thread-59459] [transport.py] [_log()] starting thread (client mode): 0xd07be5f0
2025-11-17T18:49:26.282 [DEBUG] [Thread-59459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:49:26.298 [DEBUG] [Thread-59459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:49:26.298 [INFO] [Thread-59459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:49:26.305 [DEBUG] [Thread-59459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] client lang: <none>
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] server lang: <none>
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] kex follows: False
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] Compression: none
2025-11-17T18:49:26.306 [DEBUG] [Thread-59459] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:49:26.365 [DEBUG] [Thread-59459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:49:26.365 [DEBUG] [Thread-59459] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:49:26.365 [DEBUG] [Thread-59459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:49:26.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:49:26.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:49:26.421 [DEBUG] [Thread-59459] [transport.py] [_log()] userauth is OK
2025-11-17T18:49:26.421 [DEBUG] [Thread-59459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:49:26.421 [DEBUG] [Thread-59459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:49:26.421 [DEBUG] [Thread-59459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:49:26.421 [DEBUG] [Thread-59459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:49:26.441 [INFO] [Thread-59459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:49:26.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:49:26.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:49:27.332 [DEBUG] [Thread-59459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:49:27.332 [DEBUG] [Thread-59459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:49:27.379 [DEBUG] [Thread-59459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:49:27.380 [DEBUG] [Thread-59459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:49:27.388 [DEBUG] [Thread-59459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:49:27.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:49:27.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:49:27.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:49:27.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:49:27.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:49:27.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:49:27.423 [DEBUG] [Thread-59459] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:49:29.255 [DEBUG] [Thread-59461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:49:32.524 [DEBUG] [Thread-59462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:49:37.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:49:37.277 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:49:47.556 [DEBUG] [Thread-59463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:49:57.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:49:57.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:49:57.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:49:58.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 49, 36), 28.71, 13.79, 0.0, 28.76, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:49:58.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:49:36
2025-11-17T18:49:58.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:49:58.369 [DEBUG] [Thread-59464] [transport.py] [_log()] starting thread (client mode): 0xd07be950
2025-11-17T18:49:58.369 [DEBUG] [Thread-59464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:49:58.390 [DEBUG] [Thread-59464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:49:58.390 [INFO] [Thread-59464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] client lang: <none>
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] server lang: <none>
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] kex follows: False
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] Compression: none
2025-11-17T18:49:58.393 [DEBUG] [Thread-59464] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:49:58.410 [DEBUG] [Thread-59464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:49:58.410 [DEBUG] [Thread-59464] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:49:58.411 [DEBUG] [Thread-59464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:49:58.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:49:58.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:49:58.413 [DEBUG] [Thread-59464] [transport.py] [_log()] userauth is OK
2025-11-17T18:49:58.413 [DEBUG] [Thread-59464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:49:58.413 [DEBUG] [Thread-59464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:49:58.413 [DEBUG] [Thread-59464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:49:58.413 [DEBUG] [Thread-59464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:49:58.428 [INFO] [Thread-59464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:49:58.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:49:59.070 [DEBUG] [Thread-59464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:49:59.070 [DEBUG] [Thread-59464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:49:59.070 [DEBUG] [Thread-59464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:49:59.111 [DEBUG] [Thread-59464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:49:59.112 [DEBUG] [Thread-59464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:49:59.114 [DEBUG] [Thread-59464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:49:59.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:49:59.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:49:59.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:49:59.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:49:59.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:49:59.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:49:59.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:49:59.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:49:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:49:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.700746 -999.00  +21.10  19.57     19   -2.90 1 1 1 1 1   887    0 23.09 -26.49 ----- 19.1 19.6 282.2 22.8 22.1 -26.9 22.3 -25.7 22.2 -25.9 22.5 -26.4
2025-11-17T18:49:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:49:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:49:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.700746
2025-11-17T18:49:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:49:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:49:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:49:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:49:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:49:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:49:36', tmtdew=28.71, humidity=13.79, cloud=0.0, wind=28.76, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:49:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:49:59.140 [DEBUG] [Thread-59464] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:49:59.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:49:59.237 [DEBUG] [Thread-59467] [transport.py] [_log()] starting thread (client mode): 0xd07bc5e0
2025-11-17T18:49:59.237 [DEBUG] [Thread-59467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:49:59.252 [DEBUG] [Thread-59467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:49:59.253 [INFO] [Thread-59467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] client lang: <none>
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] server lang: <none>
2025-11-17T18:49:59.260 [DEBUG] [Thread-59467] [transport.py] [_log()] kex follows: False
2025-11-17T18:49:59.261 [DEBUG] [Thread-59467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:49:59.261 [DEBUG] [Thread-59467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:49:59.261 [DEBUG] [Thread-59467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:49:59.261 [DEBUG] [Thread-59467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:49:59.261 [DEBUG] [Thread-59467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:49:59.261 [DEBUG] [Thread-59467] [transport.py] [_log()] Compression: none
2025-11-17T18:49:59.261 [DEBUG] [Thread-59467] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:49:59.324 [DEBUG] [Thread-59467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:49:59.324 [DEBUG] [Thread-59467] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:49:59.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:49:59.325 [DEBUG] [Thread-59467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:49:59.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:49:59.381 [DEBUG] [Thread-59467] [transport.py] [_log()] userauth is OK
2025-11-17T18:49:59.381 [DEBUG] [Thread-59467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:49:59.381 [DEBUG] [Thread-59467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:49:59.381 [DEBUG] [Thread-59467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:49:59.381 [DEBUG] [Thread-59467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:49:59.400 [INFO] [Thread-59467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:49:59.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:49:59.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:50:00.268 [DEBUG] [Thread-59467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:50:00.269 [DEBUG] [Thread-59467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:50:00.317 [DEBUG] [Thread-59467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:50:00.317 [DEBUG] [Thread-59467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:50:00.326 [DEBUG] [Thread-59467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:50:00.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:50:00.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:50:00.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:50:00.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:50:00.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:50:00.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:50:00.359 [DEBUG] [Thread-59467] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:50:02.591 [DEBUG] [Thread-59469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:50:17.626 [DEBUG] [Thread-59470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:50:29.290 [DEBUG] [Thread-59471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:50:30.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:50:30.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:50:30.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
2025-11-17T18:50:31.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 50, 8), 28.69, 13.8, 0.0, 24.77, 21.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:50:31.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:50:08
2025-11-17T18:50:31.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:50:31.306 [DEBUG] [Thread-59472] [transport.py] [_log()] starting thread (client mode): 0xd07bc160
2025-11-17T18:50:31.306 [DEBUG] [Thread-59472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:50:31.327 [DEBUG] [Thread-59472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:50:31.327 [INFO] [Thread-59472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] client lang: <none>
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] server lang: <none>
2025-11-17T18:50:31.330 [DEBUG] [Thread-59472] [transport.py] [_log()] kex follows: False
2025-11-17T18:50:31.331 [DEBUG] [Thread-59472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:50:31.331 [DEBUG] [Thread-59472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:50:31.331 [DEBUG] [Thread-59472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:50:31.331 [DEBUG] [Thread-59472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:50:31.331 [DEBUG] [Thread-59472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:50:31.331 [DEBUG] [Thread-59472] [transport.py] [_log()] Compression: none
2025-11-17T18:50:31.331 [DEBUG] [Thread-59472] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:50:31.348 [DEBUG] [Thread-59472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:50:31.348 [DEBUG] [Thread-59472] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:50:31.349 [DEBUG] [Thread-59472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:50:31.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:50:31.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:50:31.350 [DEBUG] [Thread-59472] [transport.py] [_log()] userauth is OK
2025-11-17T18:50:31.351 [DEBUG] [Thread-59472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:50:31.351 [DEBUG] [Thread-59472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:50:31.351 [DEBUG] [Thread-59472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:50:31.351 [DEBUG] [Thread-59472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:50:31.387 [INFO] [Thread-59472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:50:31.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:50:32.048 [DEBUG] [Thread-59472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:50:32.048 [DEBUG] [Thread-59472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:50:32.048 [DEBUG] [Thread-59472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:50:32.088 [DEBUG] [Thread-59472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:50:32.089 [DEBUG] [Thread-59472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:50:32.092 [DEBUG] [Thread-59472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:50:32.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:50:32.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:50:32.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:50:32.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:50:32.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:50:32.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:50:32.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:50:32.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:50:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:50:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.701439 -999.00  +20.90  23.45     19   -3.10 1 1 1 1 1   887    0 23.63 -22.47 ----- 26.5 23.4 283.4 30.5 22.0 -27.1 22.2 -25.9 22.1 -25.4 22.4 -26.6
2025-11-17T18:50:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:50:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:50:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.701439
2025-11-17T18:50:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:50:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:50:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:50:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:50:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:50:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:50:08', tmtdew=28.69, humidity=13.8, cloud=0.0, wind=24.77, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:50:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:50:32.118 [DEBUG] [Thread-59472] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:50:32.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:50:32.213 [DEBUG] [Thread-59475] [transport.py] [_log()] starting thread (client mode): 0xd07bd690
2025-11-17T18:50:32.214 [DEBUG] [Thread-59475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:50:32.228 [DEBUG] [Thread-59475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:50:32.228 [INFO] [Thread-59475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] client lang: <none>
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] server lang: <none>
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] kex follows: False
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] Compression: none
2025-11-17T18:50:32.236 [DEBUG] [Thread-59475] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:50:32.292 [DEBUG] [Thread-59475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:50:32.292 [DEBUG] [Thread-59475] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:50:32.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:50:32.293 [DEBUG] [Thread-59475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:50:32.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:50:32.348 [DEBUG] [Thread-59475] [transport.py] [_log()] userauth is OK
2025-11-17T18:50:32.349 [DEBUG] [Thread-59475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:50:32.349 [DEBUG] [Thread-59475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:50:32.349 [DEBUG] [Thread-59475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:50:32.349 [DEBUG] [Thread-59475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:50:32.367 [INFO] [Thread-59475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:50:32.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:50:32.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:50:32.655 [DEBUG] [Thread-59477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:50:33.220 [DEBUG] [Thread-59475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:50:33.221 [DEBUG] [Thread-59475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:50:33.268 [DEBUG] [Thread-59475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:50:33.268 [DEBUG] [Thread-59475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:50:33.277 [DEBUG] [Thread-59475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:50:33.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:50:33.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:50:33.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:50:33.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:50:33.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:50:33.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:50:33.312 [DEBUG] [Thread-59475] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:50:37.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:50:37.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:50:47.709 [DEBUG] [Thread-59478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:51:02.738 [DEBUG] [Thread-59479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:51:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:51:03.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:51:03.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:51:03.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 50, 40), 28.6, 13.85, 0.0, 23.47, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:51:03.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:50:40
2025-11-17T18:51:04.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:51:04.261 [DEBUG] [Thread-59480] [transport.py] [_log()] starting thread (client mode): 0xd07be800
2025-11-17T18:51:04.262 [DEBUG] [Thread-59480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:51:04.282 [DEBUG] [Thread-59480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:51:04.282 [INFO] [Thread-59480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:51:04.285 [DEBUG] [Thread-59480] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:51:04.285 [DEBUG] [Thread-59480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:51:04.285 [DEBUG] [Thread-59480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] client lang: <none>
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] server lang: <none>
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] kex follows: False
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] Compression: none
2025-11-17T18:51:04.286 [DEBUG] [Thread-59480] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:51:04.303 [DEBUG] [Thread-59480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:51:04.304 [DEBUG] [Thread-59480] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:51:04.304 [DEBUG] [Thread-59480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:51:04.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:51:04.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:51:04.306 [DEBUG] [Thread-59480] [transport.py] [_log()] userauth is OK
2025-11-17T18:51:04.307 [DEBUG] [Thread-59480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:51:04.307 [DEBUG] [Thread-59480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:51:04.307 [DEBUG] [Thread-59480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:51:04.307 [DEBUG] [Thread-59480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:51:04.332 [INFO] [Thread-59480] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:51:04.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:51:04.893 [DEBUG] [Thread-59480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:51:04.893 [DEBUG] [Thread-59480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:51:04.894 [DEBUG] [Thread-59480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:51:04.934 [DEBUG] [Thread-59480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:51:04.935 [DEBUG] [Thread-59480] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:51:04.937 [DEBUG] [Thread-59480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:51:04.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:51:04.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:51:04.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:51:04.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:51:04.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:51:04.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:51:04.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:51:04.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:51:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:51:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.701787 -999.00  +20.90  30.66     19   -3.10 1 1 2 1 1   887    0 23.34 -22.63 ----- 32.5 30.7 276.0 36.8 21.9 -27.4 22.2 -26.0 22.1 -26.8 22.4 -27.1
2025-11-17T18:51:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:51:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:51:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.701787
2025-11-17T18:51:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:51:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:51:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:51:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:51:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:51:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:50:40', tmtdew=28.6, humidity=13.85, cloud=0.0, wind=23.47, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:50:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:51:04.962 [DEBUG] [Thread-59480] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:51:05.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:51:05.059 [DEBUG] [Thread-59483] [transport.py] [_log()] starting thread (client mode): 0xd31efcd0
2025-11-17T18:51:05.059 [DEBUG] [Thread-59483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:51:05.079 [DEBUG] [Thread-59483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:51:05.079 [INFO] [Thread-59483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:51:05.086 [DEBUG] [Thread-59483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] client lang: <none>
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] server lang: <none>
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] kex follows: False
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:51:05.087 [DEBUG] [Thread-59483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:51:05.088 [DEBUG] [Thread-59483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:51:05.088 [DEBUG] [Thread-59483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:51:05.088 [DEBUG] [Thread-59483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:51:05.088 [DEBUG] [Thread-59483] [transport.py] [_log()] Compression: none
2025-11-17T18:51:05.088 [DEBUG] [Thread-59483] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:51:05.146 [DEBUG] [Thread-59483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:51:05.146 [DEBUG] [Thread-59483] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:51:05.146 [DEBUG] [Thread-59483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:51:05.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:51:05.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:51:05.204 [DEBUG] [Thread-59483] [transport.py] [_log()] userauth is OK
2025-11-17T18:51:05.205 [DEBUG] [Thread-59483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:51:05.205 [DEBUG] [Thread-59483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:51:05.205 [DEBUG] [Thread-59483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:51:05.205 [DEBUG] [Thread-59483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:51:05.224 [INFO] [Thread-59483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:51:05.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:51:05.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:51:06.153 [DEBUG] [Thread-59483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:51:06.153 [DEBUG] [Thread-59483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:51:06.201 [DEBUG] [Thread-59483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:51:06.201 [DEBUG] [Thread-59483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:51:06.211 [DEBUG] [Thread-59483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:51:06.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:51:06.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:51:06.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:51:06.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:51:06.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:51:06.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:51:06.246 [DEBUG] [Thread-59483] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:51:17.767 [DEBUG] [Thread-59485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:51:29.350 [DEBUG] [Thread-59486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:51:32.819 [DEBUG] [Thread-59487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:51:36.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:51:36.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:51:36.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:51:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 51, 12), 28.67, 13.79, 0.0, 26.11, 21.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:51:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:51:12
2025-11-17T18:51:37.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:51:37.197 [DEBUG] [Thread-59488] [transport.py] [_log()] starting thread (client mode): 0xd07be3e0
2025-11-17T18:51:37.197 [DEBUG] [Thread-59488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:51:37.218 [DEBUG] [Thread-59488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:51:37.218 [INFO] [Thread-59488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:51:37.221 [DEBUG] [Thread-59488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:51:37.221 [DEBUG] [Thread-59488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:51:37.221 [DEBUG] [Thread-59488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] client lang: <none>
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] server lang: <none>
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] kex follows: False
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] Compression: none
2025-11-17T18:51:37.222 [DEBUG] [Thread-59488] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:51:37.239 [DEBUG] [Thread-59488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:51:37.239 [DEBUG] [Thread-59488] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:51:37.240 [DEBUG] [Thread-59488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:51:37.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:51:37.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:51:37.242 [DEBUG] [Thread-59488] [transport.py] [_log()] userauth is OK
2025-11-17T18:51:37.242 [DEBUG] [Thread-59488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:51:37.242 [DEBUG] [Thread-59488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:51:37.242 [DEBUG] [Thread-59488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:51:37.242 [DEBUG] [Thread-59488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:51:37.266 [INFO] [Thread-59488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:51:37.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:51:37.561 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:51:37.563 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:51:37.902 [DEBUG] [Thread-59488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:51:37.902 [DEBUG] [Thread-59488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:51:37.902 [DEBUG] [Thread-59488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:51:37.943 [DEBUG] [Thread-59488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:51:37.943 [DEBUG] [Thread-59488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:51:37.946 [DEBUG] [Thread-59488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:51:37.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:51:37.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:51:37.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:51:37.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:51:37.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:51:37.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:51:37.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:51:37.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:51:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:51:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.702134 -999.00  +20.70  23.45     19   -3.20 1 1 1 1 1   887    0 22.96 -24.40 ----- 26.5 23.4 276.8 39.7 21.9 -27.1 22.1 -26.2 22.0 -26.1 22.3 -26.7
2025-11-17T18:51:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:51:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:51:37.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.702134
2025-11-17T18:51:37.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:51:37.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:51:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:51:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:51:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:51:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:51:12', tmtdew=28.67, humidity=13.79, cloud=0.0, wind=26.11, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:51:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:51:37.971 [DEBUG] [Thread-59488] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:51:38.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:51:38.067 [DEBUG] [Thread-59491] [transport.py] [_log()] starting thread (client mode): 0xd07bf040
2025-11-17T18:51:38.067 [DEBUG] [Thread-59491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:51:38.081 [DEBUG] [Thread-59491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:51:38.081 [INFO] [Thread-59491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:51:38.089 [DEBUG] [Thread-59491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:51:38.089 [DEBUG] [Thread-59491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:51:38.089 [DEBUG] [Thread-59491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:51:38.089 [DEBUG] [Thread-59491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:51:38.089 [DEBUG] [Thread-59491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:51:38.089 [DEBUG] [Thread-59491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:51:38.089 [DEBUG] [Thread-59491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] client lang: <none>
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] server lang: <none>
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] kex follows: False
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] Compression: none
2025-11-17T18:51:38.090 [DEBUG] [Thread-59491] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:51:38.153 [DEBUG] [Thread-59491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:51:38.153 [DEBUG] [Thread-59491] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:51:38.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:51:38.154 [DEBUG] [Thread-59491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:51:38.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:51:38.208 [DEBUG] [Thread-59491] [transport.py] [_log()] userauth is OK
2025-11-17T18:51:38.209 [DEBUG] [Thread-59491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:51:38.209 [DEBUG] [Thread-59491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:51:38.209 [DEBUG] [Thread-59491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:51:38.209 [DEBUG] [Thread-59491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:51:38.228 [INFO] [Thread-59491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:51:38.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:51:38.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:51:39.062 [DEBUG] [Thread-59491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:51:39.062 [DEBUG] [Thread-59491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:51:39.110 [DEBUG] [Thread-59491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:51:39.110 [DEBUG] [Thread-59491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:51:39.119 [DEBUG] [Thread-59491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:51:39.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:51:39.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:51:39.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:51:39.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:51:39.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:51:39.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:51:39.154 [DEBUG] [Thread-59491] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:51:47.852 [DEBUG] [Thread-59493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:52:02.890 [DEBUG] [Thread-59494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:52:09.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:52:09.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:52:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:52:09.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 51, 44), 28.64, 13.77, 0.0, 28.02, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:52:09.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:51:44
2025-11-17T18:52:09.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:52:10.100 [DEBUG] [Thread-59495] [transport.py] [_log()] starting thread (client mode): 0xd07cc160
2025-11-17T18:52:10.101 [DEBUG] [Thread-59495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:52:10.121 [DEBUG] [Thread-59495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:52:10.121 [INFO] [Thread-59495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:52:10.122 [DEBUG] [Thread-59495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:52:10.122 [DEBUG] [Thread-59495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:52:10.122 [DEBUG] [Thread-59495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:52:10.122 [DEBUG] [Thread-59495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:52:10.122 [DEBUG] [Thread-59495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:52:10.122 [DEBUG] [Thread-59495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] client lang: <none>
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] server lang: <none>
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] kex follows: False
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] Compression: none
2025-11-17T18:52:10.123 [DEBUG] [Thread-59495] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:52:10.135 [DEBUG] [Thread-59495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:52:10.135 [DEBUG] [Thread-59495] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:52:10.136 [DEBUG] [Thread-59495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:52:10.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:52:10.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:52:10.138 [DEBUG] [Thread-59495] [transport.py] [_log()] userauth is OK
2025-11-17T18:52:10.139 [DEBUG] [Thread-59495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:52:10.139 [DEBUG] [Thread-59495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:52:10.139 [DEBUG] [Thread-59495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:52:10.139 [DEBUG] [Thread-59495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:52:10.163 [INFO] [Thread-59495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:52:10.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:52:10.805 [DEBUG] [Thread-59495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:52:10.805 [DEBUG] [Thread-59495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:52:10.805 [DEBUG] [Thread-59495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:52:10.846 [DEBUG] [Thread-59495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:52:10.846 [DEBUG] [Thread-59495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:52:10.849 [DEBUG] [Thread-59495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:52:10.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:52:10.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:52:10.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:52:10.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:52:10.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:52:10.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:52:10.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:52:10.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:52:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:52:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.702481 -999.00  +20.70  22.03     19   -3.20 1 1 1 1 1   887    0 23.32 -22.68 ----- 22.6 22.0 272.8 28.4 21.9 -27.1 22.1 -25.9 22.0 -25.8 22.3 -26.8
2025-11-17T18:52:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:52:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:52:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.702481
2025-11-17T18:52:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:52:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:52:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:52:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:52:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:52:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:51:44', tmtdew=28.64, humidity=13.77, cloud=0.0, wind=28.02, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:51:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:52:10.874 [DEBUG] [Thread-59495] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:52:10.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:52:10.969 [DEBUG] [Thread-59498] [transport.py] [_log()] starting thread (client mode): 0xd07cee30
2025-11-17T18:52:10.969 [DEBUG] [Thread-59498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:52:10.983 [DEBUG] [Thread-59498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:52:10.983 [INFO] [Thread-59498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:52:10.990 [DEBUG] [Thread-59498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:52:10.991 [DEBUG] [Thread-59498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:52:10.991 [DEBUG] [Thread-59498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:52:10.991 [DEBUG] [Thread-59498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:52:10.991 [DEBUG] [Thread-59498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:52:10.991 [DEBUG] [Thread-59498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:52:10.991 [DEBUG] [Thread-59498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:52:10.991 [DEBUG] [Thread-59498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:52:10.991 [DEBUG] [Thread-59498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] client lang: <none>
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] server lang: <none>
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] kex follows: False
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:52:10.992 [DEBUG] [Thread-59498] [transport.py] [_log()] Compression: none
2025-11-17T18:52:10.993 [DEBUG] [Thread-59498] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:52:11.048 [DEBUG] [Thread-59498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:52:11.049 [DEBUG] [Thread-59498] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:52:11.049 [DEBUG] [Thread-59498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:52:11.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:52:11.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:52:11.105 [DEBUG] [Thread-59498] [transport.py] [_log()] userauth is OK
2025-11-17T18:52:11.105 [DEBUG] [Thread-59498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:52:11.105 [DEBUG] [Thread-59498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:52:11.105 [DEBUG] [Thread-59498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:52:11.105 [DEBUG] [Thread-59498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:52:11.124 [INFO] [Thread-59498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:52:11.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:52:11.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:52:11.966 [DEBUG] [Thread-59498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:52:11.966 [DEBUG] [Thread-59498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:52:12.015 [DEBUG] [Thread-59498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:52:12.015 [DEBUG] [Thread-59498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:52:12.023 [DEBUG] [Thread-59498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:52:12.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:52:12.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:52:12.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:52:12.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:52:12.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:52:12.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:52:12.060 [DEBUG] [Thread-59498] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:52:17.915 [DEBUG] [Thread-59500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:52:29.409 [DEBUG] [Thread-59501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:52:32.948 [DEBUG] [Thread-59502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:52:37.710 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:52:37.712 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:52:42.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:52:42.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:52:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:52:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 52, 16), 28.66, 13.75, 0.0, 28.32, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:52:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:52:16
2025-11-17T18:52:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:52:43.052 [DEBUG] [Thread-59503] [transport.py] [_log()] starting thread (client mode): 0xd31ed7b0
2025-11-17T18:52:43.052 [DEBUG] [Thread-59503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:52:43.072 [DEBUG] [Thread-59503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:52:43.072 [INFO] [Thread-59503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] client lang: <none>
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] server lang: <none>
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] kex follows: False
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:52:43.075 [DEBUG] [Thread-59503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:52:43.076 [DEBUG] [Thread-59503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:52:43.076 [DEBUG] [Thread-59503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:52:43.076 [DEBUG] [Thread-59503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:52:43.076 [DEBUG] [Thread-59503] [transport.py] [_log()] Compression: none
2025-11-17T18:52:43.076 [DEBUG] [Thread-59503] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:52:43.092 [DEBUG] [Thread-59503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:52:43.092 [DEBUG] [Thread-59503] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:52:43.092 [DEBUG] [Thread-59503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:52:43.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:52:43.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:52:43.093 [DEBUG] [Thread-59503] [transport.py] [_log()] userauth is OK
2025-11-17T18:52:43.093 [DEBUG] [Thread-59503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:52:43.093 [DEBUG] [Thread-59503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:52:43.093 [DEBUG] [Thread-59503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:52:43.093 [DEBUG] [Thread-59503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:52:43.123 [INFO] [Thread-59503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:52:43.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:52:43.751 [DEBUG] [Thread-59503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:52:43.752 [DEBUG] [Thread-59503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:52:43.752 [DEBUG] [Thread-59503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:52:43.792 [DEBUG] [Thread-59503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:52:43.792 [DEBUG] [Thread-59503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:52:43.795 [DEBUG] [Thread-59503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:52:43.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:52:43.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:52:43.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:52:43.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:52:43.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:52:43.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:52:43.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:52:43.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:52:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:52:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.702828 -999.00  +20.70  26.67     19   -3.20 1 1 1 1 1   887    0 23.45 -24.96 ----- 24.4 26.7 275.0 31.2 21.9 -27.1 22.1 -26.2 21.9 -26.7 22.2 -26.6
2025-11-17T18:52:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:52:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:52:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.702828
2025-11-17T18:52:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:52:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:52:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:52:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:52:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:52:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:52:16', tmtdew=28.66, humidity=13.75, cloud=0.0, wind=28.32, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:52:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:52:43.814 [DEBUG] [Thread-59503] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:52:43.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:52:43.900 [DEBUG] [Thread-59506] [transport.py] [_log()] starting thread (client mode): 0xd31ef880
2025-11-17T18:52:43.900 [DEBUG] [Thread-59506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:52:43.914 [DEBUG] [Thread-59506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:52:43.915 [INFO] [Thread-59506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] client lang: <none>
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] server lang: <none>
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] kex follows: False
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:52:43.922 [DEBUG] [Thread-59506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:52:43.923 [DEBUG] [Thread-59506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:52:43.923 [DEBUG] [Thread-59506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:52:43.923 [DEBUG] [Thread-59506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:52:43.923 [DEBUG] [Thread-59506] [transport.py] [_log()] Compression: none
2025-11-17T18:52:43.923 [DEBUG] [Thread-59506] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:52:43.983 [DEBUG] [Thread-59506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:52:43.983 [DEBUG] [Thread-59506] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:52:43.983 [DEBUG] [Thread-59506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:52:43.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:52:43.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:52:44.040 [DEBUG] [Thread-59506] [transport.py] [_log()] userauth is OK
2025-11-17T18:52:44.040 [DEBUG] [Thread-59506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:52:44.040 [DEBUG] [Thread-59506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:52:44.040 [DEBUG] [Thread-59506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:52:44.040 [DEBUG] [Thread-59506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:52:44.054 [INFO] [Thread-59506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:52:44.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:52:44.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:52:44.922 [DEBUG] [Thread-59506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:52:44.922 [DEBUG] [Thread-59506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:52:44.970 [DEBUG] [Thread-59506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:52:44.970 [DEBUG] [Thread-59506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:52:44.978 [DEBUG] [Thread-59506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:52:44.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:52:44.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:52: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') -> 00000000
2025-11-17T18:52:45.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:52:45.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:52:45.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:52:45.010 [DEBUG] [Thread-59506] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:52:47.979 [DEBUG] [Thread-59508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:53:03.020 [DEBUG] [Thread-59509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:53:15.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:53:15.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:53:15.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:53:15.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 52, 48), 28.61, 13.79, 0.0, 25.92, 21.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:53:15.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:52:48
2025-11-17T18:53:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:53:15.956 [DEBUG] [Thread-59510] [transport.py] [_log()] starting thread (client mode): 0xd07be500
2025-11-17T18:53:15.957 [DEBUG] [Thread-59510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:53:15.977 [DEBUG] [Thread-59510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:53:15.977 [INFO] [Thread-59510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:53:15.980 [DEBUG] [Thread-59510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:53:15.980 [DEBUG] [Thread-59510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:53:15.980 [DEBUG] [Thread-59510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:53:15.980 [DEBUG] [Thread-59510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] client lang: <none>
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] server lang: <none>
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] kex follows: False
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] Compression: none
2025-11-17T18:53:15.981 [DEBUG] [Thread-59510] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:53:15.998 [DEBUG] [Thread-59510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:53:15.999 [DEBUG] [Thread-59510] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:53:15.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:53:16.000 [DEBUG] [Thread-59510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:53:16.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:53:16.002 [DEBUG] [Thread-59510] [transport.py] [_log()] userauth is OK
2025-11-17T18:53:16.002 [DEBUG] [Thread-59510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:53:16.002 [DEBUG] [Thread-59510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:53:16.002 [DEBUG] [Thread-59510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:53:16.002 [DEBUG] [Thread-59510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:53:16.023 [INFO] [Thread-59510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:53:16.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:53:16.649 [DEBUG] [Thread-59510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:53:16.649 [DEBUG] [Thread-59510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:53:16.649 [DEBUG] [Thread-59510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:53:16.690 [DEBUG] [Thread-59510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:53:16.691 [DEBUG] [Thread-59510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:53:16.694 [DEBUG] [Thread-59510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:53:16.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:53:16.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:53:16.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:53:16.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:53:16.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:53:16.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:53:16.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:53:16.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:53:16.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:53:16.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.703176 -999.00  +20.70  24.96     19   -3.10 1 1 1 1 1   887    0 23.18 -23.77 ----- 24.4 25.0 274.2 35.2 21.8 -27.1 22.0 -26.2 21.8 -26.1 22.1 -26.7
2025-11-17T18:53:16.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:53:16.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:53:16.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.703176
2025-11-17T18:53:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:53:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:53:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:53:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:53:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:53:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:52:48', tmtdew=28.61, humidity=13.79, cloud=0.0, wind=25.92, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:52:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:53:16.720 [DEBUG] [Thread-59510] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:53:16.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:53:18.054 [DEBUG] [Thread-59513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:53:29.462 [DEBUG] [Thread-59514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:53:33.096 [DEBUG] [Thread-59515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:53:37.853 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:53:37.855 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:53:48.132 [DEBUG] [Thread-59516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:54:03.162 [DEBUG] [Thread-59517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:54:18.194 [DEBUG] [Thread-59518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:54:29.525 [DEBUG] [Thread-59519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:54:33.226 [DEBUG] [Thread-59520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:54:37.998 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:54:37.998 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:54:48.258 [DEBUG] [Thread-59521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:55:03.290 [DEBUG] [Thread-59522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:55:18.321 [DEBUG] [Thread-59523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:55:29.572 [DEBUG] [Thread-59524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:55:29.723 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T18:55:33.348 [DEBUG] [Thread-59525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:55:38.140 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:55:38.141 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:55:48.383 [DEBUG] [Thread-59526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:55:59.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:55:59.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:55:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:56:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 55, 28), 28.35, 13.99, 0.0, 27.91, 20.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:56:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:55:28
2025-11-17T18:56:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:56:00.700 [DEBUG] [Thread-59527] [transport.py] [_log()] starting thread (client mode): 0xd07bed40
2025-11-17T18:56:00.700 [DEBUG] [Thread-59527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:56:00.721 [DEBUG] [Thread-59527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:56:00.721 [INFO] [Thread-59527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] client lang: <none>
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] server lang: <none>
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] kex follows: False
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] Compression: none
2025-11-17T18:56:00.725 [DEBUG] [Thread-59527] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:56:00.743 [DEBUG] [Thread-59527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:56:00.743 [DEBUG] [Thread-59527] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:56:00.744 [DEBUG] [Thread-59527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:56:00.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:56:00.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:56:00.746 [DEBUG] [Thread-59527] [transport.py] [_log()] userauth is OK
2025-11-17T18:56:00.746 [DEBUG] [Thread-59527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:56:00.746 [DEBUG] [Thread-59527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:56:00.746 [DEBUG] [Thread-59527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:56:00.746 [DEBUG] [Thread-59527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:56:00.769 [INFO] [Thread-59527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:56:00.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:56:01.419 [DEBUG] [Thread-59527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:56:01.419 [DEBUG] [Thread-59527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:56:01.419 [DEBUG] [Thread-59527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:56:01.460 [DEBUG] [Thread-59527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:56:01.460 [DEBUG] [Thread-59527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:56:01.463 [DEBUG] [Thread-59527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:56:01.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:56:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:56:01.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:56:01.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:56:01.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:56:01.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:56:01.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:56:01.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:56:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:56:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.705259 -999.00  +20.70  28.41     20   -3.00 1 1 1 1 1   887    0 23.27 -24.07 ----- 31.0 28.4 279.6 32.9 21.6 -26.8 21.7 -25.6 21.5 -25.0 21.8 -26.1
2025-11-17T18:56:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:56:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:56:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.705259
2025-11-17T18:56:01.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:56:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:56:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:56:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:56:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:56:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:55:28', tmtdew=28.35, humidity=13.99, cloud=0.0, wind=27.91, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:55:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:56:01.485 [DEBUG] [Thread-59527] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:56:01.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:56:01.589 [DEBUG] [Thread-59530] [transport.py] [_log()] starting thread (client mode): 0xd07be3e0
2025-11-17T18:56:01.589 [DEBUG] [Thread-59530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:56:01.605 [DEBUG] [Thread-59530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:56:01.605 [INFO] [Thread-59530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] client lang: <none>
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] server lang: <none>
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] kex follows: False
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] Compression: none
2025-11-17T18:56:01.613 [DEBUG] [Thread-59530] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:56:01.671 [DEBUG] [Thread-59530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:56:01.671 [DEBUG] [Thread-59530] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:56:01.671 [DEBUG] [Thread-59530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:56:01.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:56:01.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:56:01.728 [DEBUG] [Thread-59530] [transport.py] [_log()] userauth is OK
2025-11-17T18:56:01.728 [DEBUG] [Thread-59530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:56:01.728 [DEBUG] [Thread-59530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:56:01.728 [DEBUG] [Thread-59530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:56:01.728 [DEBUG] [Thread-59530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:56:01.743 [INFO] [Thread-59530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:56:01.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:56:01.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:56:02.600 [DEBUG] [Thread-59530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:56:02.601 [DEBUG] [Thread-59530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:56:02.649 [DEBUG] [Thread-59530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:56:02.649 [DEBUG] [Thread-59530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:56:02.657 [DEBUG] [Thread-59530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:56:02.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:56:02.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:56:02.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:56:02.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:56:02.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:56:02.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:56:02.688 [DEBUG] [Thread-59530] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:56:03.410 [DEBUG] [Thread-59532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:56:18.445 [DEBUG] [Thread-59533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:56:29.626 [DEBUG] [Thread-59534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:56:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:56:32.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:56:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:56:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 56), 28.29, 13.99, 0.0, 28.34, 20.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:56:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:56:00
2025-11-17T18:56:33.475 [DEBUG] [Thread-59535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:56:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:56:33.714 [DEBUG] [Thread-59536] [transport.py] [_log()] starting thread (client mode): 0xd07bf400
2025-11-17T18:56:33.714 [DEBUG] [Thread-59536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:56:33.733 [DEBUG] [Thread-59536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:56:33.733 [INFO] [Thread-59536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] client lang: <none>
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] server lang: <none>
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] kex follows: False
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:56:33.734 [DEBUG] [Thread-59536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:56:33.735 [DEBUG] [Thread-59536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:56:33.735 [DEBUG] [Thread-59536] [transport.py] [_log()] Compression: none
2025-11-17T18:56:33.735 [DEBUG] [Thread-59536] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:56:33.742 [DEBUG] [Thread-59536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:56:33.742 [DEBUG] [Thread-59536] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:56:33.742 [DEBUG] [Thread-59536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:56:33.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:56:33.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:56:33.743 [DEBUG] [Thread-59536] [transport.py] [_log()] userauth is OK
2025-11-17T18:56:33.743 [DEBUG] [Thread-59536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:56:33.743 [DEBUG] [Thread-59536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:56:33.743 [DEBUG] [Thread-59536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:56:33.743 [DEBUG] [Thread-59536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:56:33.752 [INFO] [Thread-59536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:56:33.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:56:34.399 [DEBUG] [Thread-59536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:56:34.399 [DEBUG] [Thread-59536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:56:34.399 [DEBUG] [Thread-59536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:56:34.440 [DEBUG] [Thread-59536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:56:34.440 [DEBUG] [Thread-59536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:56:34.442 [DEBUG] [Thread-59536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:56:34.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:56:34.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:56:34.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:56:34.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:56:34.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:56:34.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:56:34.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.705606 -999.00  +20.70  25.53     20   -3.00 1 1 1 1 1   887    0 23.07 -24.44 ----- 22.1 25.5 279.0 32.4 21.6 -26.9 21.7 -25.8 21.6 -25.2 21.8 -26.1
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.705606
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:56:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:56:00', tmtdew=28.29, humidity=13.99, cloud=0.0, wind=28.34, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:56:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:56:34.459 [DEBUG] [Thread-59536] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:56:34.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:56:34.547 [DEBUG] [Thread-59539] [transport.py] [_log()] starting thread (client mode): 0xd31eeef0
2025-11-17T18:56:34.547 [DEBUG] [Thread-59539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:56:34.562 [DEBUG] [Thread-59539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:56:34.562 [INFO] [Thread-59539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:56:34.569 [DEBUG] [Thread-59539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:56:34.569 [DEBUG] [Thread-59539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] client lang: <none>
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] server lang: <none>
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] kex follows: False
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] Compression: none
2025-11-17T18:56:34.570 [DEBUG] [Thread-59539] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:56:34.627 [DEBUG] [Thread-59539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:56:34.628 [DEBUG] [Thread-59539] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:56:34.628 [DEBUG] [Thread-59539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:56:34.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:56:34.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:56:34.684 [DEBUG] [Thread-59539] [transport.py] [_log()] userauth is OK
2025-11-17T18:56:34.684 [DEBUG] [Thread-59539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:56:34.685 [DEBUG] [Thread-59539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:56:34.685 [DEBUG] [Thread-59539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:56:34.685 [DEBUG] [Thread-59539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:56:34.699 [INFO] [Thread-59539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:56:34.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:56:34.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:56:35.565 [DEBUG] [Thread-59539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:56:35.565 [DEBUG] [Thread-59539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:56:35.613 [DEBUG] [Thread-59539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:56:35.613 [DEBUG] [Thread-59539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:56:35.623 [DEBUG] [Thread-59539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:56:35.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:56:35.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:56:35.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:56:35.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:56:35.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:56:35.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:56:35.654 [DEBUG] [Thread-59539] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:56:38.287 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:56:38.289 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:56:48.503 [DEBUG] [Thread-59541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:57:03.545 [DEBUG] [Thread-59542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:57:05.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:57:05.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:57:05.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:57:06.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 56, 33), 28.28, 14.0, 0.0, 27.3, 20.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:57:06.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:56:33
2025-11-17T18:57:06.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:57:06.669 [DEBUG] [Thread-59543] [transport.py] [_log()] starting thread (client mode): 0xd31ec040
2025-11-17T18:57:06.670 [DEBUG] [Thread-59543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:57:06.690 [DEBUG] [Thread-59543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:57:06.690 [INFO] [Thread-59543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] client lang: <none>
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] server lang: <none>
2025-11-17T18:57:06.693 [DEBUG] [Thread-59543] [transport.py] [_log()] kex follows: False
2025-11-17T18:57:06.694 [DEBUG] [Thread-59543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:57:06.694 [DEBUG] [Thread-59543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:57:06.694 [DEBUG] [Thread-59543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:57:06.694 [DEBUG] [Thread-59543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:57:06.694 [DEBUG] [Thread-59543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:57:06.694 [DEBUG] [Thread-59543] [transport.py] [_log()] Compression: none
2025-11-17T18:57:06.694 [DEBUG] [Thread-59543] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:57:06.710 [DEBUG] [Thread-59543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:57:06.710 [DEBUG] [Thread-59543] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:57:06.710 [DEBUG] [Thread-59543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:57:06.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:57:06.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:57:06.711 [DEBUG] [Thread-59543] [transport.py] [_log()] userauth is OK
2025-11-17T18:57:06.711 [DEBUG] [Thread-59543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:57:06.711 [DEBUG] [Thread-59543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:57:06.712 [DEBUG] [Thread-59543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:57:06.712 [DEBUG] [Thread-59543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:57:06.728 [INFO] [Thread-59543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:57:06.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:57:07.383 [DEBUG] [Thread-59543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:57:07.383 [DEBUG] [Thread-59543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:57:07.383 [DEBUG] [Thread-59543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:57:07.424 [DEBUG] [Thread-59543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:57:07.424 [DEBUG] [Thread-59543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:57:07.426 [DEBUG] [Thread-59543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:57:07.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:57:07.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:57:07.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:57:07.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:57:07.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:57:07.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:57:07.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.705953 -999.00  +20.60  20.56     20   -3.10 1 1 1 1 1   887    0 23.53 -23.46 ----- 24.2 20.6 280.1 28.6 21.5 -26.8 21.6 -25.8 21.6 -25.1 21.8 -26.1
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.705953
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:57:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:57:07.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:56:33', tmtdew=28.28, humidity=14.0, cloud=0.0, wind=27.3, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:56:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:57:07.447 [DEBUG] [Thread-59543] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:57:07.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:57:07.534 [DEBUG] [Thread-59546] [transport.py] [_log()] starting thread (client mode): 0xd07cd2a0
2025-11-17T18:57:07.534 [DEBUG] [Thread-59546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:57:07.548 [DEBUG] [Thread-59546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:57:07.548 [INFO] [Thread-59546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] client lang: <none>
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] server lang: <none>
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] kex follows: False
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:57:07.556 [DEBUG] [Thread-59546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:57:07.557 [DEBUG] [Thread-59546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:57:07.557 [DEBUG] [Thread-59546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:57:07.557 [DEBUG] [Thread-59546] [transport.py] [_log()] Compression: none
2025-11-17T18:57:07.557 [DEBUG] [Thread-59546] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:57:07.616 [DEBUG] [Thread-59546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:57:07.617 [DEBUG] [Thread-59546] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:57:07.617 [DEBUG] [Thread-59546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:57:07.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:57:07.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:57:07.672 [DEBUG] [Thread-59546] [transport.py] [_log()] userauth is OK
2025-11-17T18:57:07.673 [DEBUG] [Thread-59546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:57:07.673 [DEBUG] [Thread-59546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:57:07.673 [DEBUG] [Thread-59546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:57:07.673 [DEBUG] [Thread-59546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:57:07.691 [INFO] [Thread-59546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:57:07.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:57:07.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:57:08.564 [DEBUG] [Thread-59546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:57:08.565 [DEBUG] [Thread-59546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:57:08.612 [DEBUG] [Thread-59546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:57:08.612 [DEBUG] [Thread-59546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:57:08.621 [DEBUG] [Thread-59546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:57:08.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:57:08.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:57:08.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:57:08.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:57:08.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:57:08.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:57:08.656 [DEBUG] [Thread-59546] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:57:18.579 [DEBUG] [Thread-59548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:57:29.676 [DEBUG] [Thread-59549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:57:33.623 [DEBUG] [Thread-59550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:57:38.430 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:57:38.431 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:57:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:57:38.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:57:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:57:39.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 57, 5), 28.3, 13.97, 0.0, 24.9, 20.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:57:39.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:57:05
2025-11-17T18:57:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:57:39.662 [DEBUG] [Thread-59551] [transport.py] [_log()] starting thread (client mode): 0xd31efdc0
2025-11-17T18:57:39.663 [DEBUG] [Thread-59551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:57:39.678 [DEBUG] [Thread-59551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:57:39.678 [INFO] [Thread-59551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] client lang: <none>
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] server lang: <none>
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] kex follows: False
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] Compression: none
2025-11-17T18:57:39.680 [DEBUG] [Thread-59551] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:57:39.692 [DEBUG] [Thread-59551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:57:39.692 [DEBUG] [Thread-59551] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:57:39.693 [DEBUG] [Thread-59551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:57:39.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:57:39.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:57:39.694 [DEBUG] [Thread-59551] [transport.py] [_log()] userauth is OK
2025-11-17T18:57:39.695 [DEBUG] [Thread-59551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:57:39.695 [DEBUG] [Thread-59551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:57:39.695 [DEBUG] [Thread-59551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:57:39.695 [DEBUG] [Thread-59551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:57:39.712 [INFO] [Thread-59551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:57:39.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:57:40.356 [DEBUG] [Thread-59551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:57:40.356 [DEBUG] [Thread-59551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:57:40.356 [DEBUG] [Thread-59551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:57:40.396 [DEBUG] [Thread-59551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:57:40.397 [DEBUG] [Thread-59551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:57:40.400 [DEBUG] [Thread-59551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:57:40.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:57:40.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:57:40.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:57:40.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:57:40.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:57:40.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:57:40.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:57:40.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:57:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:57:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.706301 -999.00  +20.60  18.22     20   -3.10 1 1 1 1 1   887    0 23.42 -22.09 ----- 23.1 18.2 272.0 28.0 21.5 -26.7 21.6 -25.7 21.5 -25.2 21.7 -26.1
2025-11-17T18:57:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:57:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:57:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.706301
2025-11-17T18:57:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:57:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:57:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:57:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:57:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:57:40.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:57:05', tmtdew=28.3, humidity=13.97, cloud=0.0, wind=24.9, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:57:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:57:40.424 [DEBUG] [Thread-59551] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:57:40.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:57:40.520 [DEBUG] [Thread-59554] [transport.py] [_log()] starting thread (client mode): 0xd078edd0
2025-11-17T18:57:40.520 [DEBUG] [Thread-59554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:57:40.535 [DEBUG] [Thread-59554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:57:40.535 [INFO] [Thread-59554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:57:40.542 [DEBUG] [Thread-59554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:57:40.542 [DEBUG] [Thread-59554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:57:40.542 [DEBUG] [Thread-59554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] client lang: <none>
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] server lang: <none>
2025-11-17T18:57:40.543 [DEBUG] [Thread-59554] [transport.py] [_log()] kex follows: False
2025-11-17T18:57:40.544 [DEBUG] [Thread-59554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:57:40.544 [DEBUG] [Thread-59554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:57:40.544 [DEBUG] [Thread-59554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:57:40.544 [DEBUG] [Thread-59554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:57:40.544 [DEBUG] [Thread-59554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:57:40.544 [DEBUG] [Thread-59554] [transport.py] [_log()] Compression: none
2025-11-17T18:57:40.544 [DEBUG] [Thread-59554] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:57:40.600 [DEBUG] [Thread-59554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:57:40.601 [DEBUG] [Thread-59554] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:57:40.601 [DEBUG] [Thread-59554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:57:40.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:57:40.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:57:40.657 [DEBUG] [Thread-59554] [transport.py] [_log()] userauth is OK
2025-11-17T18:57:40.657 [DEBUG] [Thread-59554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:57:40.657 [DEBUG] [Thread-59554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:57:40.657 [DEBUG] [Thread-59554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:57:40.657 [DEBUG] [Thread-59554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:57:40.675 [INFO] [Thread-59554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:57:40.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:57:40.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:57:41.553 [DEBUG] [Thread-59554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:57:41.553 [DEBUG] [Thread-59554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:57:41.601 [DEBUG] [Thread-59554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:57:41.601 [DEBUG] [Thread-59554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:57:41.609 [DEBUG] [Thread-59554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:57:41.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:57:41.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:57:41.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:57:41.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:57:41.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:57:41.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:57:41.641 [DEBUG] [Thread-59554] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:57:48.657 [DEBUG] [Thread-59557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:58:03.687 [DEBUG] [Thread-59558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:58:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:58:11.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:58:11.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:58:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 58, 9), 28.23, 14.0, 0.0, 30.24, 20.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:58:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:58:09
2025-11-17T18:58:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:58:12.622 [DEBUG] [Thread-59559] [transport.py] [_log()] starting thread (client mode): 0xd31ec1f0
2025-11-17T18:58:12.622 [DEBUG] [Thread-59559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:58:12.642 [DEBUG] [Thread-59559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:58:12.643 [INFO] [Thread-59559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] client lang: <none>
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] server lang: <none>
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] kex follows: False
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] Compression: none
2025-11-17T18:58:12.646 [DEBUG] [Thread-59559] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:58:12.663 [DEBUG] [Thread-59559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:58:12.663 [DEBUG] [Thread-59559] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:58:12.664 [DEBUG] [Thread-59559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:58:12.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:58:12.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:58:12.666 [DEBUG] [Thread-59559] [transport.py] [_log()] userauth is OK
2025-11-17T18:58:12.666 [DEBUG] [Thread-59559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:58:12.666 [DEBUG] [Thread-59559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:58:12.666 [DEBUG] [Thread-59559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:58:12.666 [DEBUG] [Thread-59559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:58:12.692 [INFO] [Thread-59559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:58:12.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:58:13.324 [DEBUG] [Thread-59559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:58:13.324 [DEBUG] [Thread-59559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:58:13.324 [DEBUG] [Thread-59559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:58:13.364 [DEBUG] [Thread-59559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:58:13.364 [DEBUG] [Thread-59559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:58:13.366 [DEBUG] [Thread-59559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:58:13.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:58:13.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:58:13.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:58:13.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:58:13.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:58:13.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:58:13.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:58:13.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:58:13.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:58:13.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.706648 -999.00  +20.60  33.96     20   -3.00 1 1 2 1 1   887    0 23.61 -22.11 ----- 25.6 34.0 273.8 38.3 21.5 -26.7 21.6 -25.8 21.4 -26.0 21.7 -26.2
2025-11-17T18:58:13.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:58:13.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:58:13.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.706648
2025-11-17T18:58:13.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:58:13.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:58:13.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:58:13.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:58:13.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:58:13.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:58:09', tmtdew=28.23, humidity=14.0, cloud=0.0, wind=30.24, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:57:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:58:13.388 [DEBUG] [Thread-59559] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:58:13.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:58:13.493 [DEBUG] [Thread-59562] [transport.py] [_log()] starting thread (client mode): 0xd31edcf0
2025-11-17T18:58:13.493 [DEBUG] [Thread-59562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:58:13.507 [DEBUG] [Thread-59562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:58:13.507 [INFO] [Thread-59562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:58:13.515 [DEBUG] [Thread-59562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:58:13.515 [DEBUG] [Thread-59562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:58:13.515 [DEBUG] [Thread-59562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:58:13.515 [DEBUG] [Thread-59562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:58:13.515 [DEBUG] [Thread-59562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:58:13.515 [DEBUG] [Thread-59562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:58:13.515 [DEBUG] [Thread-59562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] client lang: <none>
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] server lang: <none>
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] kex follows: False
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:58:13.516 [DEBUG] [Thread-59562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:58:13.517 [DEBUG] [Thread-59562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:58:13.517 [DEBUG] [Thread-59562] [transport.py] [_log()] Compression: none
2025-11-17T18:58:13.517 [DEBUG] [Thread-59562] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:58:13.573 [DEBUG] [Thread-59562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:58:13.574 [DEBUG] [Thread-59562] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:58:13.574 [DEBUG] [Thread-59562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:58:13.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:58:13.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:58:13.629 [DEBUG] [Thread-59562] [transport.py] [_log()] userauth is OK
2025-11-17T18:58:13.629 [DEBUG] [Thread-59562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:58:13.629 [DEBUG] [Thread-59562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:58:13.629 [DEBUG] [Thread-59562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:58:13.629 [DEBUG] [Thread-59562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:58:13.649 [INFO] [Thread-59562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:58:13.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:58:13.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:58:14.465 [DEBUG] [Thread-59562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:58:14.465 [DEBUG] [Thread-59562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:58:14.512 [DEBUG] [Thread-59562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:58:14.512 [DEBUG] [Thread-59562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:58:14.521 [DEBUG] [Thread-59562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:58:14.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:58:14.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:58:14.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:58:14.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:58:14.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:58:14.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:58:14.556 [DEBUG] [Thread-59562] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:58:18.717 [DEBUG] [Thread-59564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:58:29.724 [DEBUG] [Thread-59565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:58:33.763 [DEBUG] [Thread-59566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:58:38.570 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:58:38.572 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:58:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:58:44.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:58:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:58:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 58, 41), 28.09, 14.59, 0.0, 25.34, 20.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:58:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:58:41
2025-11-17T18:58:45.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:58:45.494 [DEBUG] [Thread-59567] [transport.py] [_log()] starting thread (client mode): 0xd07bf790
2025-11-17T18:58:45.495 [DEBUG] [Thread-59567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:58:45.515 [DEBUG] [Thread-59567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:58:45.515 [INFO] [Thread-59567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:58:45.518 [DEBUG] [Thread-59567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:58:45.518 [DEBUG] [Thread-59567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:58:45.518 [DEBUG] [Thread-59567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] client lang: <none>
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] server lang: <none>
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] kex follows: False
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:58:45.519 [DEBUG] [Thread-59567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:58:45.520 [DEBUG] [Thread-59567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:58:45.520 [DEBUG] [Thread-59567] [transport.py] [_log()] Compression: none
2025-11-17T18:58:45.520 [DEBUG] [Thread-59567] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:58:45.538 [DEBUG] [Thread-59567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:58:45.538 [DEBUG] [Thread-59567] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:58:45.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:58:45.540 [DEBUG] [Thread-59567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:58:45.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:58:45.541 [DEBUG] [Thread-59567] [transport.py] [_log()] userauth is OK
2025-11-17T18:58:45.542 [DEBUG] [Thread-59567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:58:45.542 [DEBUG] [Thread-59567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:58:45.542 [DEBUG] [Thread-59567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:58:45.542 [DEBUG] [Thread-59567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:58:45.560 [INFO] [Thread-59567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:58:45.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:58:46.193 [DEBUG] [Thread-59567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:58:46.193 [DEBUG] [Thread-59567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:58:46.194 [DEBUG] [Thread-59567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:58:46.234 [DEBUG] [Thread-59567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:58:46.234 [DEBUG] [Thread-59567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:58:46.237 [DEBUG] [Thread-59567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:58:46.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:58:46.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:58:46.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:58:46.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:58:46.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:58:46.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:58:46.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:58:46.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:58:46.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:58:46.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.706995 -999.00  +20.60  25.68     20   -3.00 1 1 1 1 1   887    0 22.68 -20.13 ----- 29.6 25.7 277.8 29.5 21.4 -26.7 21.6 -25.5 21.4 -25.3 21.7 -26.3
2025-11-17T18:58:46.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:58:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:58:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.706995
2025-11-17T18:58:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:58:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:58:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:58:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:58:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:58:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:58:41', tmtdew=28.09, humidity=14.59, cloud=0.0, wind=25.34, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:58:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:58:46.264 [DEBUG] [Thread-59567] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:58:46.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:58:46.360 [DEBUG] [Thread-59570] [transport.py] [_log()] starting thread (client mode): 0xd07cd090
2025-11-17T18:58:46.361 [DEBUG] [Thread-59570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:58:46.375 [DEBUG] [Thread-59570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:58:46.375 [INFO] [Thread-59570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] client lang: <none>
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] server lang: <none>
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] kex follows: False
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:58:46.383 [DEBUG] [Thread-59570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:58:46.384 [DEBUG] [Thread-59570] [transport.py] [_log()] Compression: none
2025-11-17T18:58:46.384 [DEBUG] [Thread-59570] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:58:46.448 [DEBUG] [Thread-59570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:58:46.448 [DEBUG] [Thread-59570] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:58:46.449 [DEBUG] [Thread-59570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:58:46.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:58:46.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:58:46.504 [DEBUG] [Thread-59570] [transport.py] [_log()] userauth is OK
2025-11-17T18:58:46.505 [DEBUG] [Thread-59570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:58:46.505 [DEBUG] [Thread-59570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:58:46.505 [DEBUG] [Thread-59570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:58:46.505 [DEBUG] [Thread-59570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:58:46.523 [INFO] [Thread-59570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:58:46.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:58:46.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:58:47.368 [DEBUG] [Thread-59570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:58:47.369 [DEBUG] [Thread-59570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:58:47.416 [DEBUG] [Thread-59570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:58:47.416 [DEBUG] [Thread-59570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:58:47.425 [DEBUG] [Thread-59570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:58:47.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:58:47.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:58:47.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:58:47.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:58:47.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:58:47.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:58:47.459 [DEBUG] [Thread-59570] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:58:48.792 [DEBUG] [Thread-59572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:59:03.832 [DEBUG] [Thread-59573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:59:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:59:17.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:59:17.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:59:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 59, 13), 28.13, 14.54, 0.0, 24.58, 20.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:59:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:59:13
2025-11-17T18:59:18.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:59:18.418 [DEBUG] [Thread-59574] [transport.py] [_log()] starting thread (client mode): 0xd078c760
2025-11-17T18:59:18.418 [DEBUG] [Thread-59574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:59:18.439 [DEBUG] [Thread-59574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:59:18.440 [INFO] [Thread-59574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] client lang: <none>
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] server lang: <none>
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] kex follows: False
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] Compression: none
2025-11-17T18:59:18.443 [DEBUG] [Thread-59574] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:59:18.465 [DEBUG] [Thread-59574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:59:18.466 [DEBUG] [Thread-59574] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:59:18.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:59:18.466 [DEBUG] [Thread-59574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:59:18.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:59:18.468 [DEBUG] [Thread-59574] [transport.py] [_log()] userauth is OK
2025-11-17T18:59:18.469 [DEBUG] [Thread-59574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:59:18.469 [DEBUG] [Thread-59574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:59:18.469 [DEBUG] [Thread-59574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:59:18.469 [DEBUG] [Thread-59574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:59:18.504 [INFO] [Thread-59574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:59:18.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:59:18.859 [DEBUG] [Thread-59576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:59:19.156 [DEBUG] [Thread-59574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:59:19.157 [DEBUG] [Thread-59574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:59:19.157 [DEBUG] [Thread-59574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:59:19.197 [DEBUG] [Thread-59574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:59:19.198 [DEBUG] [Thread-59574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:59:19.201 [DEBUG] [Thread-59574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:59:19.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:59:19.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:59:19.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:59:19.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:59:19.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:59:19.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:59:19.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:59:19.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:59:19.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:59:19.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.707342 -999.00  +20.50  27.85     20   -3.00 1 1 1 1 1   887    0 23.38 -22.12 ----- 23.5 27.9 272.6 32.5 21.4 -26.7 21.6 -25.8 21.4 -25.0 21.6 -26.2
2025-11-17T18:59:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:59:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:59:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.707342
2025-11-17T18:59:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:59:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:59:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:59:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:59:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:59:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:59:13', tmtdew=28.13, humidity=14.54, cloud=0.0, wind=24.58, temperature=20.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:58:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:59:19.228 [DEBUG] [Thread-59574] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:59:19.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:59:19.324 [DEBUG] [Thread-59578] [transport.py] [_log()] starting thread (client mode): 0xd07cf460
2025-11-17T18:59:19.325 [DEBUG] [Thread-59578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:59:19.339 [DEBUG] [Thread-59578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:59:19.340 [INFO] [Thread-59578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:59:19.347 [DEBUG] [Thread-59578] [transport.py] [_log()] client lang: <none>
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] server lang: <none>
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] kex follows: False
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] Compression: none
2025-11-17T18:59:19.348 [DEBUG] [Thread-59578] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:59:19.404 [DEBUG] [Thread-59578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:59:19.404 [DEBUG] [Thread-59578] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:59:19.405 [DEBUG] [Thread-59578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:59:19.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:59:19.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:59:19.461 [DEBUG] [Thread-59578] [transport.py] [_log()] userauth is OK
2025-11-17T18:59:19.461 [DEBUG] [Thread-59578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:59:19.461 [DEBUG] [Thread-59578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:59:19.461 [DEBUG] [Thread-59578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:59:19.461 [DEBUG] [Thread-59578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:59:19.484 [INFO] [Thread-59578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:59:19.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:59:19.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:59:20.312 [DEBUG] [Thread-59578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:59:20.312 [DEBUG] [Thread-59578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:59:20.360 [DEBUG] [Thread-59578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:59:20.360 [DEBUG] [Thread-59578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:59:20.369 [DEBUG] [Thread-59578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:59:20.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18: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')
2025-11-17T18:59:20.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:59:20.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:59:20.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:59:20.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:59:20.403 [DEBUG] [Thread-59578] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:59:29.776 [DEBUG] [Thread-59580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:59:33.891 [DEBUG] [Thread-59581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:59:38.719 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:59:38.720 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:59:48.924 [DEBUG] [Thread-59582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T18:59:50.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T18:59:50.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T18:59:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T18:59:51.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 18, 59, 45), 28.04, 14.59, 0.0, 28.0, 20.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T18:59:51.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 18:59:45
2025-11-17T18:59:51.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T18:59:51.368 [DEBUG] [Thread-59583] [transport.py] [_log()] starting thread (client mode): 0xd3134bb0
2025-11-17T18:59:51.368 [DEBUG] [Thread-59583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:59:51.383 [DEBUG] [Thread-59583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T18:59:51.383 [INFO] [Thread-59583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:59:51.385 [DEBUG] [Thread-59583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] client lang: <none>
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] server lang: <none>
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] kex follows: False
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] Compression: none
2025-11-17T18:59:51.386 [DEBUG] [Thread-59583] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:59:51.399 [DEBUG] [Thread-59583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:59:51.399 [DEBUG] [Thread-59583] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:59:51.400 [DEBUG] [Thread-59583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T18:59:51.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T18:59:51.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:59:51.402 [DEBUG] [Thread-59583] [transport.py] [_log()] userauth is OK
2025-11-17T18:59:51.402 [DEBUG] [Thread-59583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:59:51.402 [DEBUG] [Thread-59583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:59:51.402 [DEBUG] [Thread-59583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T18:59:51.402 [DEBUG] [Thread-59583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:59:51.420 [INFO] [Thread-59583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:59:51.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:59:52.031 [DEBUG] [Thread-59583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:59:52.031 [DEBUG] [Thread-59583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:59:52.031 [DEBUG] [Thread-59583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T18:59:52.072 [DEBUG] [Thread-59583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:59:52.072 [DEBUG] [Thread-59583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:59:52.075 [DEBUG] [Thread-59583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:59:52.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:59:52.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T18:59:52.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T18:59:52.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T18:59:52.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:59:52.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T18:59:52.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:59:52.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:59:52.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T18:59:52.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.707689 -999.00  +20.50  23.79     20   -2.90 1 1 1 1 1   887    0 23.56 -20.31 ----- 21.1 23.8 285.0 30.3 21.4 -26.6 21.6 -25.7 21.4 -25.5 21.7 -26.1
2025-11-17T18:59:52.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T18:59:52.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T18:59:52.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.707689
2025-11-17T18:59:52.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T18:59:52.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T18:59:52.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T18:59:52.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T18:59:52.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T18:59:52.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T18:59:45', tmtdew=28.04, humidity=14.59, cloud=0.0, wind=28.0, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T16:59:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T18:59:52.101 [DEBUG] [Thread-59583] [transport.py] [_log()] EOF in transport thread
2025-11-17T18:59:52.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T18:59:52.200 [DEBUG] [Thread-59586] [transport.py] [_log()] starting thread (client mode): 0xd078eda0
2025-11-17T18:59:52.200 [DEBUG] [Thread-59586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T18:59:52.215 [DEBUG] [Thread-59586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T18:59:52.215 [INFO] [Thread-59586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T18:59:52.222 [DEBUG] [Thread-59586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] client lang: <none>
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] server lang: <none>
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] kex follows: False
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] Compression: none
2025-11-17T18:59:52.223 [DEBUG] [Thread-59586] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T18:59:52.280 [DEBUG] [Thread-59586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T18:59:52.280 [DEBUG] [Thread-59586] [transport.py] [_log()] Switch to new keys ...
2025-11-17T18:59:52.281 [DEBUG] [Thread-59586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T18:59:52.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T18:59:52.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T18:59:52.337 [DEBUG] [Thread-59586] [transport.py] [_log()] userauth is OK
2025-11-17T18:59:52.337 [DEBUG] [Thread-59586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T18:59:52.337 [DEBUG] [Thread-59586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T18:59:52.337 [DEBUG] [Thread-59586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T18:59:52.337 [DEBUG] [Thread-59586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T18:59:52.356 [INFO] [Thread-59586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T18:59:52.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T18:59:52.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T18:59:53.196 [DEBUG] [Thread-59586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T18:59:53.196 [DEBUG] [Thread-59586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T18:59:53.244 [DEBUG] [Thread-59586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T18:59:53.244 [DEBUG] [Thread-59586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T18:59:53.253 [DEBUG] [Thread-59586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T18:59:53.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T18:59:53.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T18:59:53.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T18:59:53.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T18:59:53.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T18:59:53.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T18:59:53.286 [DEBUG] [Thread-59586] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:00:03.954 [DEBUG] [Thread-59588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:00:18.993 [DEBUG] [Thread-59589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:00:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:00:23.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:00: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
2025-11-17T19:00:23.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 0, 17), 28.01, 14.62, 0.0, 28.71, 20.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:00:23.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:00:17
2025-11-17T19:00:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:00:24.255 [DEBUG] [Thread-59590] [transport.py] [_log()] starting thread (client mode): 0xd31b26b0
2025-11-17T19:00:24.255 [DEBUG] [Thread-59590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:00:24.275 [DEBUG] [Thread-59590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:00:24.275 [INFO] [Thread-59590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:00:24.278 [DEBUG] [Thread-59590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:00:24.278 [DEBUG] [Thread-59590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:00:24.278 [DEBUG] [Thread-59590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:00:24.278 [DEBUG] [Thread-59590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:00:24.278 [DEBUG] [Thread-59590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:00:24.278 [DEBUG] [Thread-59590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:00:24.278 [DEBUG] [Thread-59590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:00:24.278 [DEBUG] [Thread-59590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] client lang: <none>
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] server lang: <none>
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] kex follows: False
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] Compression: none
2025-11-17T19:00:24.279 [DEBUG] [Thread-59590] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:00:24.294 [DEBUG] [Thread-59590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:00:24.295 [DEBUG] [Thread-59590] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:00:24.295 [DEBUG] [Thread-59590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:00:24.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:00:24.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:00:24.295 [DEBUG] [Thread-59590] [transport.py] [_log()] userauth is OK
2025-11-17T19:00:24.295 [DEBUG] [Thread-59590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:00:24.295 [DEBUG] [Thread-59590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:00:24.295 [DEBUG] [Thread-59590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:00:24.295 [DEBUG] [Thread-59590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:00:24.304 [INFO] [Thread-59590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:00:24.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:00:24.949 [DEBUG] [Thread-59590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:00:24.949 [DEBUG] [Thread-59590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:00:24.949 [DEBUG] [Thread-59590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:00:24.990 [DEBUG] [Thread-59590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:00:24.990 [DEBUG] [Thread-59590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:00:24.993 [DEBUG] [Thread-59590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:00:25.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:00:25.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:00:25.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:00:25.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:00:25.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:00:25.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:00:25.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.708384 -999.00  +20.50  28.55     20   -3.00 1 1 1 1 1   887    0 23.51 -18.62 ----- 25.5 28.6 269.8 30.8 21.3 -26.7 21.4 -25.6 21.2 -25.7 21.5 -26.2
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.708384
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:00:25.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:00:17', tmtdew=28.01, humidity=14.62, cloud=0.0, wind=28.71, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:00:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:00:25.012 [DEBUG] [Thread-59590] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:00:25.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:00:25.096 [DEBUG] [Thread-59593] [transport.py] [_log()] starting thread (client mode): 0xd31b1d50
2025-11-17T19:00:25.096 [DEBUG] [Thread-59593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:00:25.111 [DEBUG] [Thread-59593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:00:25.111 [INFO] [Thread-59593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] client lang: <none>
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] server lang: <none>
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] kex follows: False
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:00:25.118 [DEBUG] [Thread-59593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:00:25.119 [DEBUG] [Thread-59593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:00:25.119 [DEBUG] [Thread-59593] [transport.py] [_log()] Compression: none
2025-11-17T19:00:25.119 [DEBUG] [Thread-59593] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:00:25.175 [DEBUG] [Thread-59593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:00:25.175 [DEBUG] [Thread-59593] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:00:25.175 [DEBUG] [Thread-59593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:00:25.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:00:25.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:00:25.232 [DEBUG] [Thread-59593] [transport.py] [_log()] userauth is OK
2025-11-17T19:00:25.232 [DEBUG] [Thread-59593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:00:25.232 [DEBUG] [Thread-59593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:00:25.232 [DEBUG] [Thread-59593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:00:25.232 [DEBUG] [Thread-59593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:00:25.246 [INFO] [Thread-59593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:00:25.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:00:25.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:00:26.132 [DEBUG] [Thread-59593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:00:26.132 [DEBUG] [Thread-59593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:00:26.180 [DEBUG] [Thread-59593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:00:26.180 [DEBUG] [Thread-59593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:00:26.189 [DEBUG] [Thread-59593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:00:26.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:00:26.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:00:26.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:00:26.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:00:26.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:00:26.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:00:26.224 [DEBUG] [Thread-59593] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:00:29.826 [DEBUG] [Thread-59595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:00:34.019 [DEBUG] [Thread-59596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:00:38.861 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:00:38.862 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:00:49.065 [DEBUG] [Thread-59597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:00:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:00:56.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:00:56.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:00:56.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 0, 49), 27.94, 14.62, 0.0, 24.49, 20.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:00:56.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:00:49
2025-11-17T19:00:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:00:57.184 [DEBUG] [Thread-59598] [transport.py] [_log()] starting thread (client mode): 0xd31ec1f0
2025-11-17T19:00:57.185 [DEBUG] [Thread-59598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:00:57.205 [DEBUG] [Thread-59598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:00:57.205 [INFO] [Thread-59598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:00:57.208 [DEBUG] [Thread-59598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:00:57.208 [DEBUG] [Thread-59598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:00:57.208 [DEBUG] [Thread-59598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:00:57.208 [DEBUG] [Thread-59598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:00:57.208 [DEBUG] [Thread-59598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] client lang: <none>
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] server lang: <none>
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] kex follows: False
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:00:57.209 [DEBUG] [Thread-59598] [transport.py] [_log()] Compression: none
2025-11-17T19:00:57.210 [DEBUG] [Thread-59598] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:00:57.228 [DEBUG] [Thread-59598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:00:57.229 [DEBUG] [Thread-59598] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:00:57.230 [DEBUG] [Thread-59598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:00:57.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:00:57.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:00:57.232 [DEBUG] [Thread-59598] [transport.py] [_log()] userauth is OK
2025-11-17T19:00:57.232 [DEBUG] [Thread-59598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:00:57.232 [DEBUG] [Thread-59598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:00:57.232 [DEBUG] [Thread-59598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:00:57.232 [DEBUG] [Thread-59598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:00:57.255 [INFO] [Thread-59598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:00:57.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:00:57.877 [DEBUG] [Thread-59598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:00:57.877 [DEBUG] [Thread-59598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:00:57.878 [DEBUG] [Thread-59598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:00:57.918 [DEBUG] [Thread-59598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:00:57.918 [DEBUG] [Thread-59598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:00:57.921 [DEBUG] [Thread-59598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:00:57.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:00:57.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:00:57.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:00:57.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:00:57.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:00:57.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:00:57.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:00:57.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:00:57.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:00:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.708731 -999.00  +20.40  19.53     20   -3.00 1 1 1 1 1   887    0 22.83 -19.55 ----- 24.4 19.5 280.4 31.2 21.3 -26.6 21.4 -25.5 21.2 -25.7 21.5 -26.0
2025-11-17T19:00:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:00:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:00:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.708731
2025-11-17T19:00:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:00:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:00:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:00:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:00:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:00:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:00:49', tmtdew=27.94, humidity=14.62, cloud=0.0, wind=24.49, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:00:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:00:57.945 [DEBUG] [Thread-59598] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:00:58.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:00:58.043 [DEBUG] [Thread-59601] [transport.py] [_log()] starting thread (client mode): 0xd31ee140
2025-11-17T19:00:58.043 [DEBUG] [Thread-59601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:00:58.058 [DEBUG] [Thread-59601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:00:58.058 [INFO] [Thread-59601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:00:58.065 [DEBUG] [Thread-59601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] client lang: <none>
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] server lang: <none>
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] kex follows: False
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:00:58.066 [DEBUG] [Thread-59601] [transport.py] [_log()] Compression: none
2025-11-17T19:00:58.067 [DEBUG] [Thread-59601] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:00:58.123 [DEBUG] [Thread-59601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:00:58.124 [DEBUG] [Thread-59601] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:00:58.124 [DEBUG] [Thread-59601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:00:58.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:00:58.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:00:58.180 [DEBUG] [Thread-59601] [transport.py] [_log()] userauth is OK
2025-11-17T19:00:58.180 [DEBUG] [Thread-59601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:00:58.181 [DEBUG] [Thread-59601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:00:58.181 [DEBUG] [Thread-59601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:00:58.181 [DEBUG] [Thread-59601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:00:58.203 [INFO] [Thread-59601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:00:58.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:00:58.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:00:59.121 [DEBUG] [Thread-59601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:00:59.121 [DEBUG] [Thread-59601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:00:59.169 [DEBUG] [Thread-59601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:00:59.169 [DEBUG] [Thread-59601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:00:59.177 [DEBUG] [Thread-59601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:00:59.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:00:59.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:00:59.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:00:59.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:00:59.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:00:59.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:00:59.208 [DEBUG] [Thread-59601] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:01:04.096 [DEBUG] [Thread-59603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:01:19.129 [DEBUG] [Thread-59604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:01:29.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:01:29.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:01:29.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:01:29.874 [DEBUG] [Thread-59605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:01:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 1, 21), 27.92, 14.65, 0.0, 25.0, 20.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:01:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:01:21
2025-11-17T19:01:30.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:01:30.163 [DEBUG] [Thread-59606] [transport.py] [_log()] starting thread (client mode): 0xd3136530
2025-11-17T19:01:30.163 [DEBUG] [Thread-59606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:01:30.183 [DEBUG] [Thread-59606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:01:30.183 [INFO] [Thread-59606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:01:30.186 [DEBUG] [Thread-59606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:01:30.186 [DEBUG] [Thread-59606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:01:30.186 [DEBUG] [Thread-59606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:01:30.186 [DEBUG] [Thread-59606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] client lang: <none>
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] server lang: <none>
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] kex follows: False
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] Compression: none
2025-11-17T19:01:30.187 [DEBUG] [Thread-59606] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:01:30.204 [DEBUG] [Thread-59606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:01:30.204 [DEBUG] [Thread-59606] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:01:30.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:01:30.205 [DEBUG] [Thread-59606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:01:30.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:01:30.207 [DEBUG] [Thread-59606] [transport.py] [_log()] userauth is OK
2025-11-17T19:01:30.207 [DEBUG] [Thread-59606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:01:30.207 [DEBUG] [Thread-59606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:01:30.207 [DEBUG] [Thread-59606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:01:30.207 [DEBUG] [Thread-59606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:01:30.231 [INFO] [Thread-59606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:01:30.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:01:30.891 [DEBUG] [Thread-59606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:01:30.891 [DEBUG] [Thread-59606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:01:30.892 [DEBUG] [Thread-59606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:01:30.932 [DEBUG] [Thread-59606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:01:30.933 [DEBUG] [Thread-59606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:01:30.936 [DEBUG] [Thread-59606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:01:30.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:01:30.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:01:30.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:01:30.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:01:30.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:01:30.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:01:30.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:01:30.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:01:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:01:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.709078 -999.00  +20.40  16.96     20   -2.90 1 1 1 1 1   887    0 23.28 -21.23 ----- 19.7 17.0 285.3 32.0 21.3 -26.4 21.4 -25.6 21.2 -25.4 21.4 -25.9
2025-11-17T19:01:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:01:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:01:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.709078
2025-11-17T19:01:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:01:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:01:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:01:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:01:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:01:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:01:21', tmtdew=27.92, humidity=14.65, cloud=0.0, wind=25.0, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:01:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:01:30.964 [DEBUG] [Thread-59606] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:01:31.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:01:31.060 [DEBUG] [Thread-59609] [transport.py] [_log()] starting thread (client mode): 0xd3135f60
2025-11-17T19:01:31.060 [DEBUG] [Thread-59609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:01:31.075 [DEBUG] [Thread-59609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:01:31.075 [INFO] [Thread-59609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:01:31.083 [DEBUG] [Thread-59609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:01:31.083 [DEBUG] [Thread-59609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:01:31.083 [DEBUG] [Thread-59609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:01:31.083 [DEBUG] [Thread-59609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:01:31.083 [DEBUG] [Thread-59609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:01:31.083 [DEBUG] [Thread-59609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:01:31.083 [DEBUG] [Thread-59609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:01:31.084 [DEBUG] [Thread-59609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:01:31.084 [DEBUG] [Thread-59609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:01:31.084 [DEBUG] [Thread-59609] [transport.py] [_log()] client lang: <none>
2025-11-17T19:01:31.084 [DEBUG] [Thread-59609] [transport.py] [_log()] server lang: <none>
2025-11-17T19:01:31.084 [DEBUG] [Thread-59609] [transport.py] [_log()] kex follows: False
2025-11-17T19:01:31.084 [DEBUG] [Thread-59609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:01:31.084 [DEBUG] [Thread-59609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:01:31.084 [DEBUG] [Thread-59609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:01:31.085 [DEBUG] [Thread-59609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:01:31.085 [DEBUG] [Thread-59609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:01:31.085 [DEBUG] [Thread-59609] [transport.py] [_log()] Compression: none
2025-11-17T19:01:31.085 [DEBUG] [Thread-59609] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:01:31.140 [DEBUG] [Thread-59609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:01:31.141 [DEBUG] [Thread-59609] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:01:31.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:01:31.142 [DEBUG] [Thread-59609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:01:31.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:01:31.197 [DEBUG] [Thread-59609] [transport.py] [_log()] userauth is OK
2025-11-17T19:01:31.197 [DEBUG] [Thread-59609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:01:31.197 [DEBUG] [Thread-59609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:01:31.197 [DEBUG] [Thread-59609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:01:31.197 [DEBUG] [Thread-59609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:01:31.215 [INFO] [Thread-59609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:01:31.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:01:31.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:01:32.130 [DEBUG] [Thread-59609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:01:32.130 [DEBUG] [Thread-59609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:01:32.178 [DEBUG] [Thread-59609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:01:32.178 [DEBUG] [Thread-59609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:01:32.190 [DEBUG] [Thread-59609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:01:32.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:01:32.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:01:32.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:01:32.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:01:32.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:01:32.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:01:32.227 [DEBUG] [Thread-59609] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:01:34.159 [DEBUG] [Thread-59611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:01:39.004 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:01:39.005 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:01:49.205 [DEBUG] [Thread-59612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:02:02.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:02:02.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:02:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:02:02.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 1, 53), 27.91, 14.67, 0.0, 26.29, 20.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:02:02.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:01:53
2025-11-17T19:02:03.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:02:03.204 [DEBUG] [Thread-59613] [transport.py] [_log()] starting thread (client mode): 0xd31372b0
2025-11-17T19:02:03.204 [DEBUG] [Thread-59613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:02:03.222 [DEBUG] [Thread-59613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:02:03.222 [INFO] [Thread-59613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] client lang: <none>
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] server lang: <none>
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] kex follows: False
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:02:03.225 [DEBUG] [Thread-59613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:02:03.226 [DEBUG] [Thread-59613] [transport.py] [_log()] Compression: none
2025-11-17T19:02:03.226 [DEBUG] [Thread-59613] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:02:03.235 [DEBUG] [Thread-59613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:02:03.236 [DEBUG] [Thread-59613] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:02:03.236 [DEBUG] [Thread-59613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:02:03.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:02:03.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:02:03.237 [DEBUG] [Thread-59613] [transport.py] [_log()] userauth is OK
2025-11-17T19:02:03.238 [DEBUG] [Thread-59613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:02:03.238 [DEBUG] [Thread-59613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:02:03.238 [DEBUG] [Thread-59613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:02:03.238 [DEBUG] [Thread-59613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:02:03.250 [INFO] [Thread-59613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:02:03.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:02:04.036 [DEBUG] [Thread-59613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:02:04.036 [DEBUG] [Thread-59613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:02:04.036 [DEBUG] [Thread-59613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:02:04.076 [DEBUG] [Thread-59613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:02:04.076 [DEBUG] [Thread-59613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:02:04.079 [DEBUG] [Thread-59613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:02:04.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:02:04.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:02:04.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:02:04.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:02:04.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:02:04.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:02:04.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:02:04.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:02:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:02:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.709425 -999.00  +20.40  18.52     20   -2.90 1 1 1 1 1   887    0 22.57 -23.63 ----- 18.0 18.5 279.6 27.2 21.2 -26.4 21.4 -25.4 21.1 -25.0 21.4 -25.8
2025-11-17T19:02:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:02:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:02:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.709425
2025-11-17T19:02:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:02:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:02:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:02:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:02:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:02:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:01:53', tmtdew=27.91, humidity=14.67, cloud=0.0, wind=26.29, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:01:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:02:04.102 [DEBUG] [Thread-59613] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:02:04.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:02:04.199 [DEBUG] [Thread-59616] [transport.py] [_log()] starting thread (client mode): 0xd3136bf0
2025-11-17T19:02:04.199 [DEBUG] [Thread-59616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:02:04.214 [DEBUG] [Thread-59616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:02:04.214 [INFO] [Thread-59616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:02:04.221 [DEBUG] [Thread-59616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:02:04.222 [DEBUG] [Thread-59616] [transport.py] [_log()] client lang: <none>
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] server lang: <none>
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] kex follows: False
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] Compression: none
2025-11-17T19:02:04.223 [DEBUG] [Thread-59616] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:02:04.236 [DEBUG] [Thread-59618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:02:04.284 [DEBUG] [Thread-59616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:02:04.284 [DEBUG] [Thread-59616] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:02:04.285 [DEBUG] [Thread-59616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:02:04.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:02:04.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:02:04.340 [DEBUG] [Thread-59616] [transport.py] [_log()] userauth is OK
2025-11-17T19:02:04.341 [DEBUG] [Thread-59616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:02:04.341 [DEBUG] [Thread-59616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:02:04.341 [DEBUG] [Thread-59616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:02:04.341 [DEBUG] [Thread-59616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:02:04.360 [INFO] [Thread-59616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:02:04.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:02:04.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:02:05.206 [DEBUG] [Thread-59616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:02:05.206 [DEBUG] [Thread-59616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:02:05.253 [DEBUG] [Thread-59616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:02:05.253 [DEBUG] [Thread-59616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:02:05.262 [DEBUG] [Thread-59616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:02:05.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:02:05.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:02:05.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:02:05.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:02:05.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:02:05.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:02:05.296 [DEBUG] [Thread-59616] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:02:19.282 [DEBUG] [Thread-59619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:02:29.938 [DEBUG] [Thread-59620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:02:34.310 [DEBUG] [Thread-59621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:02:35.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:02:35.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:02:35.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:02:35.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 2, 25), 27.88, 14.69, 0.0, 28.3, 20.58, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:02:35.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:02:25
2025-11-17T19:02:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:02:36.246 [DEBUG] [Thread-59622] [transport.py] [_log()] starting thread (client mode): 0xd078d3f0
2025-11-17T19:02:36.247 [DEBUG] [Thread-59622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:02:36.266 [DEBUG] [Thread-59622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:02:36.267 [INFO] [Thread-59622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] client lang: <none>
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] server lang: <none>
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] kex follows: False
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] Compression: none
2025-11-17T19:02:36.270 [DEBUG] [Thread-59622] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:02:36.286 [DEBUG] [Thread-59622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:02:36.286 [DEBUG] [Thread-59622] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:02:36.286 [DEBUG] [Thread-59622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:02:36.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:02:36.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:02:36.287 [DEBUG] [Thread-59622] [transport.py] [_log()] userauth is OK
2025-11-17T19:02:36.287 [DEBUG] [Thread-59622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:02:36.287 [DEBUG] [Thread-59622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:02:36.287 [DEBUG] [Thread-59622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:02:36.287 [DEBUG] [Thread-59622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:02:36.303 [INFO] [Thread-59622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:02:36.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:02:36.915 [DEBUG] [Thread-59622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:02:36.915 [DEBUG] [Thread-59622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:02:36.915 [DEBUG] [Thread-59622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:02:36.956 [DEBUG] [Thread-59622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:02:36.956 [DEBUG] [Thread-59622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:02:36.960 [DEBUG] [Thread-59622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:02:36.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:02:36.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:02:36.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:02:36.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:02:36.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:02:36.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:02:36.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:02:36.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:02:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:02:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.709773 -999.00  +20.50  16.78     20   -3.00 1 1 1 1 1   887    0 22.46 -24.43 ----- 20.3 16.8 282.6 23.3 21.2 -26.3 21.3 -25.3 21.1 -24.7 21.4 -25.8
2025-11-17T19:02:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:02:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:02:36.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.709773
2025-11-17T19:02:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:02:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:02:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:02:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:02:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:02:36.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:02:25', tmtdew=27.88, humidity=14.69, cloud=0.0, wind=28.3, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:02:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:02:36.986 [DEBUG] [Thread-59622] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:02:37.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:02:37.081 [DEBUG] [Thread-59625] [transport.py] [_log()] starting thread (client mode): 0xd078ecb0
2025-11-17T19:02:37.081 [DEBUG] [Thread-59625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:02:37.097 [DEBUG] [Thread-59625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:02:37.098 [INFO] [Thread-59625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:02:37.105 [DEBUG] [Thread-59625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:02:37.105 [DEBUG] [Thread-59625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] client lang: <none>
2025-11-17T19:02:37.106 [DEBUG] [Thread-59625] [transport.py] [_log()] server lang: <none>
2025-11-17T19:02:37.107 [DEBUG] [Thread-59625] [transport.py] [_log()] kex follows: False
2025-11-17T19:02:37.107 [DEBUG] [Thread-59625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:02:37.107 [DEBUG] [Thread-59625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:02:37.107 [DEBUG] [Thread-59625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:02:37.107 [DEBUG] [Thread-59625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:02:37.107 [DEBUG] [Thread-59625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:02:37.107 [DEBUG] [Thread-59625] [transport.py] [_log()] Compression: none
2025-11-17T19:02:37.107 [DEBUG] [Thread-59625] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:02:37.164 [DEBUG] [Thread-59625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:02:37.164 [DEBUG] [Thread-59625] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:02:37.165 [DEBUG] [Thread-59625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:02:37.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:02:37.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:02:37.220 [DEBUG] [Thread-59625] [transport.py] [_log()] userauth is OK
2025-11-17T19:02:37.220 [DEBUG] [Thread-59625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:02:37.221 [DEBUG] [Thread-59625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:02:37.221 [DEBUG] [Thread-59625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:02:37.221 [DEBUG] [Thread-59625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:02:37.241 [INFO] [Thread-59625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:02:37.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:02:37.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:02:38.111 [DEBUG] [Thread-59625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:02:38.112 [DEBUG] [Thread-59625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:02:38.159 [DEBUG] [Thread-59625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:02:38.160 [DEBUG] [Thread-59625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:02:38.168 [DEBUG] [Thread-59625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:02:38.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:02:38.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:02:38.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:02:38.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:02:38.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:02:38.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:02:38.202 [DEBUG] [Thread-59625] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:02:39.146 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:02:39.147 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:02:49.345 [DEBUG] [Thread-59627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:03:04.387 [DEBUG] [Thread-59628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:03:08.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:03:08.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:03:08.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:03:08.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 2, 57), 27.88, 14.7, 0.0, 25.74, 20.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:03:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:02:57
2025-11-17T19:03:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:03:09.163 [DEBUG] [Thread-59629] [transport.py] [_log()] starting thread (client mode): 0xd078cd00
2025-11-17T19:03:09.163 [DEBUG] [Thread-59629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:03:09.174 [DEBUG] [Thread-59629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:03:09.174 [INFO] [Thread-59629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:03:09.175 [DEBUG] [Thread-59629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:03:09.175 [DEBUG] [Thread-59629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:03:09.175 [DEBUG] [Thread-59629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:03:09.175 [DEBUG] [Thread-59629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] client lang: <none>
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] server lang: <none>
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] kex follows: False
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] Compression: none
2025-11-17T19:03:09.176 [DEBUG] [Thread-59629] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:03:09.184 [DEBUG] [Thread-59629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:03:09.184 [DEBUG] [Thread-59629] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:03:09.184 [DEBUG] [Thread-59629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:03:09.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:03:09.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:03:09.185 [DEBUG] [Thread-59629] [transport.py] [_log()] userauth is OK
2025-11-17T19:03:09.185 [DEBUG] [Thread-59629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:03:09.185 [DEBUG] [Thread-59629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:03:09.185 [DEBUG] [Thread-59629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:03:09.185 [DEBUG] [Thread-59629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:03:09.196 [INFO] [Thread-59629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:03:09.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:03:09.982 [DEBUG] [Thread-59629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:03:09.983 [DEBUG] [Thread-59629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:03:09.983 [DEBUG] [Thread-59629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:03:10.023 [DEBUG] [Thread-59629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:03:10.023 [DEBUG] [Thread-59629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:03:10.026 [DEBUG] [Thread-59629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:03:10.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:03:10.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:03:10.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:03:10.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:03:10.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:03:10.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:03:10.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:03:10.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:03:10.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:03:10.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.710120 -999.00  +20.50  19.26     20   -2.90 1 1 1 1 1   887    0 23.32 -24.49 ----- 19.7 19.3 285.8 24.1 21.2 -26.4 21.3 -25.1 21.1 -24.8 21.4 -25.9
2025-11-17T19:03:10.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:03:10.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:03:10.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.710120
2025-11-17T19:03:10.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:03:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:03:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:03:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:03:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:03:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:02:57', tmtdew=27.88, humidity=14.7, cloud=0.0, wind=25.74, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:02:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:03:10.050 [DEBUG] [Thread-59629] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:03:10.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:03:10.146 [DEBUG] [Thread-59632] [transport.py] [_log()] starting thread (client mode): 0xd3134d60
2025-11-17T19:03:10.146 [DEBUG] [Thread-59632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:03:10.161 [DEBUG] [Thread-59632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:03:10.162 [INFO] [Thread-59632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:03:10.169 [DEBUG] [Thread-59632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:03:10.169 [DEBUG] [Thread-59632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:03:10.169 [DEBUG] [Thread-59632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:03:10.169 [DEBUG] [Thread-59632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:03:10.169 [DEBUG] [Thread-59632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] client lang: <none>
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] server lang: <none>
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] kex follows: False
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:03:10.170 [DEBUG] [Thread-59632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:03:10.171 [DEBUG] [Thread-59632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:03:10.171 [DEBUG] [Thread-59632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:03:10.171 [DEBUG] [Thread-59632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:03:10.171 [DEBUG] [Thread-59632] [transport.py] [_log()] Compression: none
2025-11-17T19:03:10.171 [DEBUG] [Thread-59632] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:03:10.228 [DEBUG] [Thread-59632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:03:10.228 [DEBUG] [Thread-59632] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:03:10.229 [DEBUG] [Thread-59632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:03:10.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:03:10.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:03:10.284 [DEBUG] [Thread-59632] [transport.py] [_log()] userauth is OK
2025-11-17T19:03:10.284 [DEBUG] [Thread-59632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:03:10.284 [DEBUG] [Thread-59632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:03:10.284 [DEBUG] [Thread-59632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:03:10.284 [DEBUG] [Thread-59632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:03:10.300 [INFO] [Thread-59632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:03:10.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:03:10.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:03:11.148 [DEBUG] [Thread-59632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:03:11.148 [DEBUG] [Thread-59632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:03:11.196 [DEBUG] [Thread-59632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:03:11.196 [DEBUG] [Thread-59632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:03:11.205 [DEBUG] [Thread-59632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:03:11.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:03:11.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:03:11.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:03:11.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:03:11.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:03:11.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:03:11.245 [DEBUG] [Thread-59632] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:03:19.417 [DEBUG] [Thread-59634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:03:29.985 [DEBUG] [Thread-59635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:03:34.456 [DEBUG] [Thread-59636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:03:39.289 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:03:39.290 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:03:41.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:03:41.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:03:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:03:41.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 3, 29), 27.86, 14.72, 0.0, 24.72, 20.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:03:41.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:03:29
2025-11-17T19:03:42.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:03:42.176 [DEBUG] [Thread-59637] [transport.py] [_log()] starting thread (client mode): 0xd078fbe0
2025-11-17T19:03:42.176 [DEBUG] [Thread-59637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:03:42.197 [DEBUG] [Thread-59637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:03:42.197 [INFO] [Thread-59637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:03:42.200 [DEBUG] [Thread-59637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:03:42.200 [DEBUG] [Thread-59637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:03:42.200 [DEBUG] [Thread-59637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:03:42.200 [DEBUG] [Thread-59637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:03:42.200 [DEBUG] [Thread-59637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] client lang: <none>
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] server lang: <none>
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] kex follows: False
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] Compression: none
2025-11-17T19:03:42.201 [DEBUG] [Thread-59637] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:03:42.219 [DEBUG] [Thread-59637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:03:42.220 [DEBUG] [Thread-59637] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:03:42.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:03:42.221 [DEBUG] [Thread-59637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:03:42.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:03:42.222 [DEBUG] [Thread-59637] [transport.py] [_log()] userauth is OK
2025-11-17T19:03:42.223 [DEBUG] [Thread-59637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:03:42.223 [DEBUG] [Thread-59637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:03:42.223 [DEBUG] [Thread-59637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:03:42.223 [DEBUG] [Thread-59637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:03:42.246 [INFO] [Thread-59637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:03:42.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:03:42.907 [DEBUG] [Thread-59637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:03:42.907 [DEBUG] [Thread-59637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:03:42.908 [DEBUG] [Thread-59637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:03:42.948 [DEBUG] [Thread-59637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:03:42.949 [DEBUG] [Thread-59637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:03:42.952 [DEBUG] [Thread-59637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:03:42.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:03:42.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:03:42.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:03:42.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:03:42.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:03:42.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:03:42.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:03:42.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:03:42.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:03:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.710467 -999.00  +20.50  22.67     20   -2.90 1 1 1 1 1   887    0 23.00 -27.75 ----- 24.2 22.7 291.6 29.5 21.2 -26.3 21.3 -25.2 21.1 -24.8 21.4 -25.7
2025-11-17T19:03:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:03:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:03:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.710467
2025-11-17T19:03:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:03:42.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:03:42.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:03:42.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:03:42.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:03:42.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:03:29', tmtdew=27.86, humidity=14.72, cloud=0.0, wind=24.72, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:03:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:03:42.976 [DEBUG] [Thread-59637] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:03:43.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:03:43.071 [DEBUG] [Thread-59640] [transport.py] [_log()] starting thread (client mode): 0xd078d3f0
2025-11-17T19:03:43.071 [DEBUG] [Thread-59640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:03:43.087 [DEBUG] [Thread-59640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:03:43.087 [INFO] [Thread-59640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:03:43.095 [DEBUG] [Thread-59640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:03:43.095 [DEBUG] [Thread-59640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:03:43.095 [DEBUG] [Thread-59640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:03:43.095 [DEBUG] [Thread-59640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:03:43.095 [DEBUG] [Thread-59640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:03:43.095 [DEBUG] [Thread-59640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:03:43.095 [DEBUG] [Thread-59640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:03:43.096 [DEBUG] [Thread-59640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:03:43.096 [DEBUG] [Thread-59640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:03:43.096 [DEBUG] [Thread-59640] [transport.py] [_log()] client lang: <none>
2025-11-17T19:03:43.096 [DEBUG] [Thread-59640] [transport.py] [_log()] server lang: <none>
2025-11-17T19:03:43.096 [DEBUG] [Thread-59640] [transport.py] [_log()] kex follows: False
2025-11-17T19:03:43.096 [DEBUG] [Thread-59640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:03:43.096 [DEBUG] [Thread-59640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:03:43.096 [DEBUG] [Thread-59640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:03:43.097 [DEBUG] [Thread-59640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:03:43.097 [DEBUG] [Thread-59640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:03:43.097 [DEBUG] [Thread-59640] [transport.py] [_log()] Compression: none
2025-11-17T19:03:43.097 [DEBUG] [Thread-59640] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:03:43.156 [DEBUG] [Thread-59640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:03:43.157 [DEBUG] [Thread-59640] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:03:43.157 [DEBUG] [Thread-59640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:03:43.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:03:43.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:03:43.212 [DEBUG] [Thread-59640] [transport.py] [_log()] userauth is OK
2025-11-17T19:03:43.213 [DEBUG] [Thread-59640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:03:43.213 [DEBUG] [Thread-59640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:03:43.213 [DEBUG] [Thread-59640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:03:43.213 [DEBUG] [Thread-59640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:03:43.233 [INFO] [Thread-59640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:03:43.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:03:43.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:03:44.081 [DEBUG] [Thread-59640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:03:44.081 [DEBUG] [Thread-59640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:03:44.128 [DEBUG] [Thread-59640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:03:44.128 [DEBUG] [Thread-59640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:03:44.137 [DEBUG] [Thread-59640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:03:44.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:03:44.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:03:44.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:03:44.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:03:44.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:03:44.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:03:44.172 [DEBUG] [Thread-59640] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:03:49.489 [DEBUG] [Thread-59642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:04:04.532 [DEBUG] [Thread-59643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:04:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:04:14.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:04:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:04:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 4, 1), 27.87, 14.7, 0.0, 28.32, 20.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:04:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:04:01
2025-11-17T19:04:15.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:04:15.161 [DEBUG] [Thread-59644] [transport.py] [_log()] starting thread (client mode): 0xd3134730
2025-11-17T19:04:15.161 [DEBUG] [Thread-59644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:04:15.181 [DEBUG] [Thread-59644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:04:15.181 [INFO] [Thread-59644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:04:15.184 [DEBUG] [Thread-59644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:04:15.184 [DEBUG] [Thread-59644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:04:15.184 [DEBUG] [Thread-59644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:04:15.184 [DEBUG] [Thread-59644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:04:15.184 [DEBUG] [Thread-59644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] client lang: <none>
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] server lang: <none>
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] kex follows: False
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] Compression: none
2025-11-17T19:04:15.185 [DEBUG] [Thread-59644] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:04:15.202 [DEBUG] [Thread-59644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:04:15.202 [DEBUG] [Thread-59644] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:04:15.202 [DEBUG] [Thread-59644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:04:15.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:04:15.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:04:15.203 [DEBUG] [Thread-59644] [transport.py] [_log()] userauth is OK
2025-11-17T19:04:15.203 [DEBUG] [Thread-59644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:04:15.203 [DEBUG] [Thread-59644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:04:15.203 [DEBUG] [Thread-59644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:04:15.203 [DEBUG] [Thread-59644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:04:15.212 [INFO] [Thread-59644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:04:15.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:04:15.850 [DEBUG] [Thread-59644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:04:15.850 [DEBUG] [Thread-59644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:04:15.850 [DEBUG] [Thread-59644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:04:15.891 [DEBUG] [Thread-59644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:04:15.891 [DEBUG] [Thread-59644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:04:15.893 [DEBUG] [Thread-59644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:04:15.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:04:15.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:04:15.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:04:15.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:04:15.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:04:15.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:04:15.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.710814 -999.00  +20.50  17.83     20   -2.90 1 1 1 1 1   887    0 23.27 -28.09 ----- 18.7 17.8 277.4 29.6 21.2 -26.1 21.3 -25.1 21.1 -24.8 21.4 -25.6
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.710814
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:04:15.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:04:01', tmtdew=27.87, humidity=14.7, cloud=0.0, wind=28.32, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:03:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:04:15.911 [DEBUG] [Thread-59644] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:04:15.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:04:15.997 [DEBUG] [Thread-59647] [transport.py] [_log()] starting thread (client mode): 0xd078d1e0
2025-11-17T19:04:15.997 [DEBUG] [Thread-59647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:04:16.011 [DEBUG] [Thread-59647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:04:16.012 [INFO] [Thread-59647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] client lang: <none>
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] server lang: <none>
2025-11-17T19:04:16.019 [DEBUG] [Thread-59647] [transport.py] [_log()] kex follows: False
2025-11-17T19:04:16.020 [DEBUG] [Thread-59647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:04:16.020 [DEBUG] [Thread-59647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:04:16.020 [DEBUG] [Thread-59647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:04:16.020 [DEBUG] [Thread-59647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:04:16.020 [DEBUG] [Thread-59647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:04:16.020 [DEBUG] [Thread-59647] [transport.py] [_log()] Compression: none
2025-11-17T19:04:16.020 [DEBUG] [Thread-59647] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:04:16.075 [DEBUG] [Thread-59647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:04:16.075 [DEBUG] [Thread-59647] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:04:16.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:04:16.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:04:16.076 [DEBUG] [Thread-59647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:04:16.132 [DEBUG] [Thread-59647] [transport.py] [_log()] userauth is OK
2025-11-17T19:04:16.132 [DEBUG] [Thread-59647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:04:16.132 [DEBUG] [Thread-59647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:04:16.132 [DEBUG] [Thread-59647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:04:16.132 [DEBUG] [Thread-59647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:04:16.146 [INFO] [Thread-59647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:04:16.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:04:16.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:04:17.032 [DEBUG] [Thread-59647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:04:17.032 [DEBUG] [Thread-59647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:04:17.080 [DEBUG] [Thread-59647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:04:17.081 [DEBUG] [Thread-59647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:04:17.089 [DEBUG] [Thread-59647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:04:17.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:04:17.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:04:17.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:04:17.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:04:17.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:04:17.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:04:17.123 [DEBUG] [Thread-59647] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:04:19.563 [DEBUG] [Thread-59649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:04:30.018 [DEBUG] [Thread-59650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:04:34.605 [DEBUG] [Thread-59651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:04:39.432 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:04:39.433 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:04:47.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:04:47.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:04:47.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:04:47.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 4, 33), 27.82, 14.75, 0.0, 27.47, 20.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:04:47.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:04:33
2025-11-17T19:04:47.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:04:48.059 [DEBUG] [Thread-59652] [transport.py] [_log()] starting thread (client mode): 0xd3134850
2025-11-17T19:04:48.059 [DEBUG] [Thread-59652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:04:48.079 [DEBUG] [Thread-59652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:04:48.079 [INFO] [Thread-59652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] client lang: <none>
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] server lang: <none>
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] kex follows: False
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] Compression: none
2025-11-17T19:04:48.083 [DEBUG] [Thread-59652] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:04:48.100 [DEBUG] [Thread-59652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:04:48.100 [DEBUG] [Thread-59652] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:04:48.101 [DEBUG] [Thread-59652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:04:48.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:04:48.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:04:48.145 [DEBUG] [Thread-59652] [transport.py] [_log()] userauth is OK
2025-11-17T19:04:48.145 [DEBUG] [Thread-59652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:04:48.145 [DEBUG] [Thread-59652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:04:48.145 [DEBUG] [Thread-59652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:04:48.145 [DEBUG] [Thread-59652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:04:48.177 [INFO] [Thread-59652] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:04:48.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:04:48.788 [DEBUG] [Thread-59652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:04:48.788 [DEBUG] [Thread-59652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:04:48.789 [DEBUG] [Thread-59652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:04:48.829 [DEBUG] [Thread-59652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:04:48.829 [DEBUG] [Thread-59652] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:04:48.832 [DEBUG] [Thread-59652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:04:48.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:04:48.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:04:48.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:04:48.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:04:48.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:04:48.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:04:48.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:04:48.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:04:48.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:04:48.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.711162 -999.00  +20.50  20.54     20   -2.90 1 1 1 1 1   886    0 23.00 -29.13 ----- 21.4 20.5 273.2 24.0 21.2 -26.2 21.2 -25.1 21.2 -24.8 21.4 -25.7
2025-11-17T19:04:48.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:04:48.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:04:48.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.711162
2025-11-17T19:04:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:04:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:04:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:04:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:04:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:04:48.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:04:33', tmtdew=27.82, humidity=14.75, cloud=0.0, wind=27.47, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:04:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:04:48.856 [DEBUG] [Thread-59652] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:04:48.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:04:48.953 [DEBUG] [Thread-59655] [transport.py] [_log()] starting thread (client mode): 0xd3137f70
2025-11-17T19:04:48.953 [DEBUG] [Thread-59655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:04:48.968 [DEBUG] [Thread-59655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:04:48.968 [INFO] [Thread-59655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:04:48.976 [DEBUG] [Thread-59655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] client lang: <none>
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] server lang: <none>
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] kex follows: False
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] Compression: none
2025-11-17T19:04:48.977 [DEBUG] [Thread-59655] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:04:49.032 [DEBUG] [Thread-59655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:04:49.032 [DEBUG] [Thread-59655] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:04:49.032 [DEBUG] [Thread-59655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:04:49.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:04:49.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:04:49.088 [DEBUG] [Thread-59655] [transport.py] [_log()] userauth is OK
2025-11-17T19:04:49.088 [DEBUG] [Thread-59655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:04:49.088 [DEBUG] [Thread-59655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:04:49.089 [DEBUG] [Thread-59655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:04:49.089 [DEBUG] [Thread-59655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:04:49.106 [INFO] [Thread-59655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:04:49.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:04:49.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:04:49.636 [DEBUG] [Thread-59657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:04:49.995 [DEBUG] [Thread-59655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:04:49.995 [DEBUG] [Thread-59655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:04:50.044 [DEBUG] [Thread-59655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:04:50.044 [DEBUG] [Thread-59655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:04:50.052 [DEBUG] [Thread-59655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:04:50.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:04:50.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:04:50.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:04:50.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:04:50.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:04:50.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:04:50.084 [DEBUG] [Thread-59655] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:05:04.666 [DEBUG] [Thread-59658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:05:19.695 [DEBUG] [Thread-59659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:05:20.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:05:20.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:05:20.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:05:20.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 5, 5), 27.79, 14.78, 0.0, 26.84, 20.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:05:20.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:05:05
2025-11-17T19:05:20.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:05:21.004 [DEBUG] [Thread-59660] [transport.py] [_log()] starting thread (client mode): 0xd07cef20
2025-11-17T19:05:21.004 [DEBUG] [Thread-59660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:05:21.024 [DEBUG] [Thread-59660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:05:21.025 [INFO] [Thread-59660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:05:21.027 [DEBUG] [Thread-59660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:05:21.027 [DEBUG] [Thread-59660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] client lang: <none>
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] server lang: <none>
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] kex follows: False
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] Compression: none
2025-11-17T19:05:21.028 [DEBUG] [Thread-59660] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:05:21.045 [DEBUG] [Thread-59660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:05:21.046 [DEBUG] [Thread-59660] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:05:21.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:05:21.046 [DEBUG] [Thread-59660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:05:21.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:05:21.049 [DEBUG] [Thread-59660] [transport.py] [_log()] userauth is OK
2025-11-17T19:05:21.049 [DEBUG] [Thread-59660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:05:21.049 [DEBUG] [Thread-59660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:05:21.049 [DEBUG] [Thread-59660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:05:21.049 [DEBUG] [Thread-59660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:05:21.083 [INFO] [Thread-59660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:05:21.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:05:21.721 [DEBUG] [Thread-59660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:05:21.721 [DEBUG] [Thread-59660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:05:21.721 [DEBUG] [Thread-59660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:05:21.762 [DEBUG] [Thread-59660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:05:21.762 [DEBUG] [Thread-59660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:05:21.765 [DEBUG] [Thread-59660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:05:21.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:05:21.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:05:21.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:05:21.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:05:21.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:05:21.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:05:21.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:05:21.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:05:21.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:05:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.711509 -999.00  +20.40  22.45     20   -2.90 1 1 1 1 1   886    0 22.61 -29.50 ----- 22.1 22.4 279.8 25.7 21.1 -26.3 21.3 -25.3 21.1 -25.2 21.3 -25.6
2025-11-17T19:05:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:05:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:05:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.711509
2025-11-17T19:05:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:05:21.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:05:21.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:05:21.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:05:21.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:05:21.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:05:05', tmtdew=27.79, humidity=14.78, cloud=0.0, wind=26.84, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:04:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:05:21.791 [DEBUG] [Thread-59660] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:05:21.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:05:21.887 [DEBUG] [Thread-59663] [transport.py] [_log()] starting thread (client mode): 0xd07cf4f0
2025-11-17T19:05:21.887 [DEBUG] [Thread-59663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:05:21.902 [DEBUG] [Thread-59663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:05:21.902 [INFO] [Thread-59663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:05:21.910 [DEBUG] [Thread-59663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:05:21.910 [DEBUG] [Thread-59663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:05:21.910 [DEBUG] [Thread-59663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:05:21.910 [DEBUG] [Thread-59663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:05:21.910 [DEBUG] [Thread-59663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] client lang: <none>
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] server lang: <none>
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] kex follows: False
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] Compression: none
2025-11-17T19:05:21.911 [DEBUG] [Thread-59663] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:05:21.968 [DEBUG] [Thread-59663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:05:21.968 [DEBUG] [Thread-59663] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:05:21.969 [DEBUG] [Thread-59663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:05:21.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:05:21.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:05:22.025 [DEBUG] [Thread-59663] [transport.py] [_log()] userauth is OK
2025-11-17T19:05:22.026 [DEBUG] [Thread-59663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:05:22.026 [DEBUG] [Thread-59663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:05:22.026 [DEBUG] [Thread-59663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:05:22.026 [DEBUG] [Thread-59663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:05:22.044 [INFO] [Thread-59663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:05:22.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:05:22.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:05:22.877 [DEBUG] [Thread-59663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:05:22.877 [DEBUG] [Thread-59663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:05:22.925 [DEBUG] [Thread-59663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:05:22.925 [DEBUG] [Thread-59663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:05:22.934 [DEBUG] [Thread-59663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:05:22.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:05:22.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:05:22.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:05:22.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:05:22.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:05:22.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:05:22.968 [DEBUG] [Thread-59663] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:05:30.064 [DEBUG] [Thread-59665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:05:34.725 [DEBUG] [Thread-59666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:05:39.574 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:05:39.576 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:05:49.764 [DEBUG] [Thread-59667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:05:52.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:05:52.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:05:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:05:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 5, 37), 27.75, 14.77, 0.0, 20.64, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:05:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:05:37
2025-11-17T19:05:53.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:05:53.924 [DEBUG] [Thread-59668] [transport.py] [_log()] starting thread (client mode): 0xd31356f0
2025-11-17T19:05:53.924 [DEBUG] [Thread-59668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:05:53.944 [DEBUG] [Thread-59668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:05:53.944 [INFO] [Thread-59668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:05:53.946 [DEBUG] [Thread-59668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:05:53.946 [DEBUG] [Thread-59668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:05:53.946 [DEBUG] [Thread-59668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:05:53.946 [DEBUG] [Thread-59668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] client lang: <none>
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] server lang: <none>
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] kex follows: False
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] Compression: none
2025-11-17T19:05:53.947 [DEBUG] [Thread-59668] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:05:53.964 [DEBUG] [Thread-59668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:05:53.965 [DEBUG] [Thread-59668] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:05:53.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:05:53.966 [DEBUG] [Thread-59668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:05:53.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:05:53.968 [DEBUG] [Thread-59668] [transport.py] [_log()] userauth is OK
2025-11-17T19:05:53.968 [DEBUG] [Thread-59668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:05:53.968 [DEBUG] [Thread-59668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:05:53.968 [DEBUG] [Thread-59668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:05:53.968 [DEBUG] [Thread-59668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:05:53.992 [INFO] [Thread-59668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:05:53.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:05:54.574 [DEBUG] [Thread-59668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:05:54.574 [DEBUG] [Thread-59668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:05:54.574 [DEBUG] [Thread-59668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:05:54.616 [DEBUG] [Thread-59668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:05:54.616 [DEBUG] [Thread-59668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:05:54.618 [DEBUG] [Thread-59668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:05:54.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:05:54.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:05:54.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:05:54.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:05:54.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:05:54.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:05:54.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:05:54.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:05:54.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:05:54.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.712203 -999.00  +20.40  18.86     20   -2.90 1 1 1 1 1   886    0 22.38 -32.15 ----- 16.7 18.9 275.8 25.7 21.1 -26.1 21.2 -25.0 21.0 -25.1 21.2 -25.5
2025-11-17T19:05:54.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:05:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:05:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.712203
2025-11-17T19:05:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:05:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:05:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:05:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:05:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:05:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:05:37', tmtdew=27.75, humidity=14.77, cloud=0.0, wind=20.64, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:05:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:05:54.646 [DEBUG] [Thread-59668] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:05:54.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:05:54.742 [DEBUG] [Thread-59671] [transport.py] [_log()] starting thread (client mode): 0xd31376d0
2025-11-17T19:05:54.742 [DEBUG] [Thread-59671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:05:54.757 [DEBUG] [Thread-59671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:05:54.757 [INFO] [Thread-59671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] client lang: <none>
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] server lang: <none>
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] kex follows: False
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:05:54.765 [DEBUG] [Thread-59671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:05:54.766 [DEBUG] [Thread-59671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:05:54.766 [DEBUG] [Thread-59671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:05:54.766 [DEBUG] [Thread-59671] [transport.py] [_log()] Compression: none
2025-11-17T19:05:54.766 [DEBUG] [Thread-59671] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:05:54.823 [DEBUG] [Thread-59671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:05:54.824 [DEBUG] [Thread-59671] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:05:54.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:05:54.825 [DEBUG] [Thread-59671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:05:54.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:05:54.887 [DEBUG] [Thread-59671] [transport.py] [_log()] userauth is OK
2025-11-17T19:05:54.887 [DEBUG] [Thread-59671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:05:54.887 [DEBUG] [Thread-59671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:05:54.887 [DEBUG] [Thread-59671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:05:54.887 [DEBUG] [Thread-59671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:05:54.910 [INFO] [Thread-59671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:05:54.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:05:54.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:05:55.737 [DEBUG] [Thread-59671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:05:55.738 [DEBUG] [Thread-59671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:05:55.786 [DEBUG] [Thread-59671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:05:55.786 [DEBUG] [Thread-59671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:05:55.795 [DEBUG] [Thread-59671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:05:55.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:05:55.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')
2025-11-17T19:05:55.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:05:55.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:05:55.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:05:55.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:05:55.830 [DEBUG] [Thread-59671] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:06:04.797 [DEBUG] [Thread-59673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:06:19.836 [DEBUG] [Thread-59674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:06:25.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:06:25.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:06:25.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:06:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 6, 9), 27.72, 14.8, 0.0, 20.93, 20.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:06:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:06:09
2025-11-17T19:06:26.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:06:26.768 [DEBUG] [Thread-59675] [transport.py] [_log()] starting thread (client mode): 0xd31b0970
2025-11-17T19:06:26.768 [DEBUG] [Thread-59675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:06:26.787 [DEBUG] [Thread-59675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:06:26.787 [INFO] [Thread-59675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:06:26.790 [DEBUG] [Thread-59675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] client lang: <none>
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] server lang: <none>
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] kex follows: False
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] Compression: none
2025-11-17T19:06:26.791 [DEBUG] [Thread-59675] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:06:26.808 [DEBUG] [Thread-59675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:06:26.809 [DEBUG] [Thread-59675] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:06:26.809 [DEBUG] [Thread-59675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:06:26.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:06:26.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:06:26.811 [DEBUG] [Thread-59675] [transport.py] [_log()] userauth is OK
2025-11-17T19:06:26.811 [DEBUG] [Thread-59675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:06:26.811 [DEBUG] [Thread-59675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:06:26.812 [DEBUG] [Thread-59675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:06:26.812 [DEBUG] [Thread-59675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:06:26.830 [INFO] [Thread-59675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:06:26.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:06:27.447 [DEBUG] [Thread-59675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:06:27.447 [DEBUG] [Thread-59675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:06:27.447 [DEBUG] [Thread-59675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:06:27.488 [DEBUG] [Thread-59675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:06:27.488 [DEBUG] [Thread-59675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:06:27.491 [DEBUG] [Thread-59675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:06:27.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:06:27.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:06:27.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:06:27.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:06:27.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:06:27.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:06:27.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:06:27.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:06:27.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:06:27.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.712550 -999.00  +20.40  23.98     20   -2.90 1 1 1 1 1   886    0 22.91 -35.62 ----- 17.0 24.0 276.4 30.4 21.1 -26.1 21.2 -25.0 21.0 -24.5 21.2 -25.5
2025-11-17T19:06:27.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:06:27.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:06:27.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.712550
2025-11-17T19:06:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:06:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:06:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:06:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:06:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:06:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:06:09', tmtdew=27.72, humidity=14.8, cloud=0.0, wind=20.93, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:06:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:06:27.522 [DEBUG] [Thread-59675] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:06:27.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:06:27.617 [DEBUG] [Thread-59678] [transport.py] [_log()] starting thread (client mode): 0xd07cdea0
2025-11-17T19:06:27.617 [DEBUG] [Thread-59678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:06:27.631 [DEBUG] [Thread-59678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:06:27.631 [INFO] [Thread-59678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:06:27.639 [DEBUG] [Thread-59678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:06:27.639 [DEBUG] [Thread-59678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:06:27.639 [DEBUG] [Thread-59678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:06:27.639 [DEBUG] [Thread-59678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:06:27.639 [DEBUG] [Thread-59678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:06:27.639 [DEBUG] [Thread-59678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] client lang: <none>
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] server lang: <none>
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] kex follows: False
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:06:27.640 [DEBUG] [Thread-59678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:06:27.641 [DEBUG] [Thread-59678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:06:27.641 [DEBUG] [Thread-59678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:06:27.641 [DEBUG] [Thread-59678] [transport.py] [_log()] Compression: none
2025-11-17T19:06:27.641 [DEBUG] [Thread-59678] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:06:27.695 [DEBUG] [Thread-59678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:06:27.696 [DEBUG] [Thread-59678] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:06:27.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:06:27.697 [DEBUG] [Thread-59678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:06:27.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:06:27.752 [DEBUG] [Thread-59678] [transport.py] [_log()] userauth is OK
2025-11-17T19:06:27.752 [DEBUG] [Thread-59678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:06:27.753 [DEBUG] [Thread-59678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:06:27.753 [DEBUG] [Thread-59678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:06:27.753 [DEBUG] [Thread-59678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:06:27.772 [INFO] [Thread-59678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:06:27.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:06:27.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:06:28.632 [DEBUG] [Thread-59678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:06:28.632 [DEBUG] [Thread-59678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:06:28.680 [DEBUG] [Thread-59678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:06:28.680 [DEBUG] [Thread-59678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:06:28.689 [DEBUG] [Thread-59678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:06:28.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:06:28.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:06:28.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:06:28.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:06:28.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:06:28.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:06:28.723 [DEBUG] [Thread-59678] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:06:30.118 [DEBUG] [Thread-59680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:06:34.866 [DEBUG] [Thread-59681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:06:39.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:06:39.719 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:06:49.902 [DEBUG] [Thread-59682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:06:58.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:06:58.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:06:58.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:06:59.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 6, 41), 27.76, 14.75, 0.0, 25.14, 20.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:06:59.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:06:41
2025-11-17T19:06:59.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:06:59.673 [DEBUG] [Thread-59683] [transport.py] [_log()] starting thread (client mode): 0xd3135e70
2025-11-17T19:06:59.673 [DEBUG] [Thread-59683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:06:59.693 [DEBUG] [Thread-59683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:06:59.693 [INFO] [Thread-59683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:06:59.696 [DEBUG] [Thread-59683] [transport.py] [_log()] client lang: <none>
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] server lang: <none>
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] kex follows: False
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] Compression: none
2025-11-17T19:06:59.697 [DEBUG] [Thread-59683] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:06:59.713 [DEBUG] [Thread-59683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:06:59.714 [DEBUG] [Thread-59683] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:06:59.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:06:59.715 [DEBUG] [Thread-59683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:06:59.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:06:59.717 [DEBUG] [Thread-59683] [transport.py] [_log()] userauth is OK
2025-11-17T19:06:59.717 [DEBUG] [Thread-59683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:06:59.717 [DEBUG] [Thread-59683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:06:59.717 [DEBUG] [Thread-59683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:06:59.717 [DEBUG] [Thread-59683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:06:59.735 [INFO] [Thread-59683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:06:59.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:07:00.357 [DEBUG] [Thread-59683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:07:00.357 [DEBUG] [Thread-59683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:07:00.357 [DEBUG] [Thread-59683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:07:00.398 [DEBUG] [Thread-59683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:07:00.398 [DEBUG] [Thread-59683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:07:00.401 [DEBUG] [Thread-59683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:07:00.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:07:00.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:07:00.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:07:00.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:07:00.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:07:00.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:07:00.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:07:00.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:07:00.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:07:00.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.712898 -999.00  +20.40  20.29     20   -2.90 1 1 1 1 1   886    0 22.49 -37.48 ----- 22.6 20.3 291.0 26.3 21.1 -26.2 21.1 -24.9 21.0 -24.5 21.2 -25.5
2025-11-17T19:07:00.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:07:00.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:07:00.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.712898
2025-11-17T19:07:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:07:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:07:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:07:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:07:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:07:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:06:41', tmtdew=27.76, humidity=14.75, cloud=0.0, wind=25.14, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:06:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:07:00.426 [DEBUG] [Thread-59683] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:07:00.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:07:00.523 [DEBUG] [Thread-59686] [transport.py] [_log()] starting thread (client mode): 0xd31b0a00
2025-11-17T19:07:00.523 [DEBUG] [Thread-59686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:07:00.538 [DEBUG] [Thread-59686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:07:00.538 [INFO] [Thread-59686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] client lang: <none>
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] server lang: <none>
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] kex follows: False
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:07:00.546 [DEBUG] [Thread-59686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:07:00.547 [DEBUG] [Thread-59686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:07:00.547 [DEBUG] [Thread-59686] [transport.py] [_log()] Compression: none
2025-11-17T19:07:00.547 [DEBUG] [Thread-59686] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:07:00.605 [DEBUG] [Thread-59686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:07:00.605 [DEBUG] [Thread-59686] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:07:00.606 [DEBUG] [Thread-59686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:07:00.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:07:00.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:07:00.660 [DEBUG] [Thread-59686] [transport.py] [_log()] userauth is OK
2025-11-17T19:07:00.661 [DEBUG] [Thread-59686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:07:00.661 [DEBUG] [Thread-59686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:07:00.661 [DEBUG] [Thread-59686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:07:00.661 [DEBUG] [Thread-59686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:07:00.682 [INFO] [Thread-59686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:07:00.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:07:00.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:07:01.553 [DEBUG] [Thread-59686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:07:01.553 [DEBUG] [Thread-59686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:07:01.601 [DEBUG] [Thread-59686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:07:01.601 [DEBUG] [Thread-59686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:07:01.610 [DEBUG] [Thread-59686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:07:01.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:07:01.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:07:01.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:07:01.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:07:01.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:07:01.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:07:01.642 [DEBUG] [Thread-59686] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:07:04.938 [DEBUG] [Thread-59688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:07:19.978 [DEBUG] [Thread-59689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:07:30.160 [DEBUG] [Thread-59690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:07:31.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:07:31.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:07:31.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:07:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 7, 13), 27.76, 14.75, 0.0, 25.97, 20.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:07:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:07:13
2025-11-17T19:07:32.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:07:32.588 [DEBUG] [Thread-59691] [transport.py] [_log()] starting thread (client mode): 0xd07cd2d0
2025-11-17T19:07:32.588 [DEBUG] [Thread-59691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:07:32.609 [DEBUG] [Thread-59691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:07:32.609 [INFO] [Thread-59691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] client lang: <none>
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] server lang: <none>
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] kex follows: False
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:07:32.613 [DEBUG] [Thread-59691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:07:32.614 [DEBUG] [Thread-59691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:07:32.614 [DEBUG] [Thread-59691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:07:32.614 [DEBUG] [Thread-59691] [transport.py] [_log()] Compression: none
2025-11-17T19:07:32.614 [DEBUG] [Thread-59691] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:07:32.631 [DEBUG] [Thread-59691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:07:32.632 [DEBUG] [Thread-59691] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:07:32.632 [DEBUG] [Thread-59691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:07:32.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:07:32.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:07:32.635 [DEBUG] [Thread-59691] [transport.py] [_log()] userauth is OK
2025-11-17T19:07:32.635 [DEBUG] [Thread-59691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:07:32.635 [DEBUG] [Thread-59691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:07:32.635 [DEBUG] [Thread-59691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:07:32.636 [DEBUG] [Thread-59691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:07:32.654 [INFO] [Thread-59691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:07:32.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:07:33.317 [DEBUG] [Thread-59691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:07:33.317 [DEBUG] [Thread-59691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:07:33.318 [DEBUG] [Thread-59691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:07:33.359 [DEBUG] [Thread-59691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:07:33.359 [DEBUG] [Thread-59691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:07:33.363 [DEBUG] [Thread-59691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:07:33.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:07:33.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:07:33.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:07:33.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:07:33.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:07:33.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:07:33.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:07:33.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:07:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:07:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.713245 -999.00  +20.40  20.92     20   -2.90 1 1 1 1 1   886    0 22.56 -36.59 ----- 19.6 20.9 276.6 27.7 21.1 -26.0 21.1 -25.0 21.0 -24.8 21.2 -25.4
2025-11-17T19:07:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:07:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:07:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.713245
2025-11-17T19:07:33.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:07:33.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:07:33.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:07:33.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:07:33.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:07:33.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:07:13', tmtdew=27.76, humidity=14.75, cloud=0.0, wind=25.97, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:07:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:07:33.393 [DEBUG] [Thread-59691] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:07:33.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:07:33.489 [DEBUG] [Thread-59694] [transport.py] [_log()] starting thread (client mode): 0xd07cc9d0
2025-11-17T19:07:33.489 [DEBUG] [Thread-59694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:07:33.504 [DEBUG] [Thread-59694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:07:33.504 [INFO] [Thread-59694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:07:33.512 [DEBUG] [Thread-59694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:07:33.512 [DEBUG] [Thread-59694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:07:33.512 [DEBUG] [Thread-59694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:07:33.512 [DEBUG] [Thread-59694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] client lang: <none>
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] server lang: <none>
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] kex follows: False
2025-11-17T19:07:33.513 [DEBUG] [Thread-59694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:07:33.514 [DEBUG] [Thread-59694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:07:33.514 [DEBUG] [Thread-59694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:07:33.514 [DEBUG] [Thread-59694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:07:33.514 [DEBUG] [Thread-59694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:07:33.514 [DEBUG] [Thread-59694] [transport.py] [_log()] Compression: none
2025-11-17T19:07:33.514 [DEBUG] [Thread-59694] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:07:33.572 [DEBUG] [Thread-59694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:07:33.573 [DEBUG] [Thread-59694] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:07:33.573 [DEBUG] [Thread-59694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:07:33.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:07:33.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:07:33.628 [DEBUG] [Thread-59694] [transport.py] [_log()] userauth is OK
2025-11-17T19:07:33.629 [DEBUG] [Thread-59694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:07:33.629 [DEBUG] [Thread-59694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:07:33.629 [DEBUG] [Thread-59694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:07:33.629 [DEBUG] [Thread-59694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:07:33.648 [INFO] [Thread-59694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:07:33.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:07:33.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:07:34.501 [DEBUG] [Thread-59694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:07:34.501 [DEBUG] [Thread-59694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:07:34.549 [DEBUG] [Thread-59694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:07:34.550 [DEBUG] [Thread-59694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:07:34.558 [DEBUG] [Thread-59694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:07:34.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:07:34.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:07:34.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:07:34.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:07:34.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:07:34.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:07:34.593 [DEBUG] [Thread-59694] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:07:35.009 [DEBUG] [Thread-59696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:07:39.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:07:39.861 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:07:50.051 [DEBUG] [Thread-59697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:08:04.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:08:04.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:08:04.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:08:05.079 [DEBUG] [Thread-59698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:08:05.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 7, 45), 27.73, 14.78, 0.0, 27.72, 20.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:08:05.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:07:45
2025-11-17T19:08:05.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:08:05.563 [DEBUG] [Thread-59699] [transport.py] [_log()] starting thread (client mode): 0xd31ee260
2025-11-17T19:08:05.563 [DEBUG] [Thread-59699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:08:05.582 [DEBUG] [Thread-59699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:08:05.583 [INFO] [Thread-59699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] client lang: <none>
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] server lang: <none>
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] kex follows: False
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] Compression: none
2025-11-17T19:08:05.586 [DEBUG] [Thread-59699] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:08:05.601 [DEBUG] [Thread-59699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:08:05.602 [DEBUG] [Thread-59699] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:08:05.602 [DEBUG] [Thread-59699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:08:05.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:08:05.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:08:05.602 [DEBUG] [Thread-59699] [transport.py] [_log()] userauth is OK
2025-11-17T19:08:05.602 [DEBUG] [Thread-59699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:08:05.602 [DEBUG] [Thread-59699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:08:05.602 [DEBUG] [Thread-59699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:08:05.602 [DEBUG] [Thread-59699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:08:05.618 [INFO] [Thread-59699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:08:05.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:08:06.235 [DEBUG] [Thread-59699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:08:06.235 [DEBUG] [Thread-59699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:08:06.235 [DEBUG] [Thread-59699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:08:06.276 [DEBUG] [Thread-59699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:08:06.276 [DEBUG] [Thread-59699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:08:06.278 [DEBUG] [Thread-59699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:08:06.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:08:06.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:08:06.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:08:06.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:08:06.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:08:06.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:08:06.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.713592 -999.00  +20.30  25.98     20   -2.90 1 1 1 1 1   885    0 22.29 -36.74 ----- 23.7 26.0 274.2 34.6 21.0 -26.0 21.1 -25.1 21.0 -24.8 21.2 -25.6
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.713592
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:08:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:08:06.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:08:06.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:08:06.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:07:45', tmtdew=27.73, humidity=14.78, cloud=0.0, wind=27.72, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:07:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:08:06.300 [DEBUG] [Thread-59699] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:08:06.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:08:06.385 [DEBUG] [Thread-59702] [transport.py] [_log()] starting thread (client mode): 0xd31eeef0
2025-11-17T19:08:06.385 [DEBUG] [Thread-59702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:08:06.399 [DEBUG] [Thread-59702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:08:06.399 [INFO] [Thread-59702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] client lang: <none>
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] server lang: <none>
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] kex follows: False
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] Compression: none
2025-11-17T19:08:06.407 [DEBUG] [Thread-59702] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:08:06.463 [DEBUG] [Thread-59702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:08:06.463 [DEBUG] [Thread-59702] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:08:06.463 [DEBUG] [Thread-59702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:08:06.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:08:06.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:08:06.524 [DEBUG] [Thread-59702] [transport.py] [_log()] userauth is OK
2025-11-17T19:08:06.524 [DEBUG] [Thread-59702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:08:06.524 [DEBUG] [Thread-59702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:08:06.524 [DEBUG] [Thread-59702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:08:06.524 [DEBUG] [Thread-59702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:08:06.538 [INFO] [Thread-59702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:08:06.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:08:06.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:08:07.366 [DEBUG] [Thread-59702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:08:07.366 [DEBUG] [Thread-59702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:08:07.414 [DEBUG] [Thread-59702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:08:07.414 [DEBUG] [Thread-59702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:08:07.423 [DEBUG] [Thread-59702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:08:07.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:08:07.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:08:07.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:08:07.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:08:07.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:08:07.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:08:07.459 [DEBUG] [Thread-59702] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:08:20.107 [DEBUG] [Thread-59704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:08:30.218 [DEBUG] [Thread-59705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:08:35.155 [DEBUG] [Thread-59706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:08:37.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:08:37.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:08:37.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:08:38.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 8, 17), 27.69, 14.83, 0.0, 28.48, 20.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:08:38.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:08:17
2025-11-17T19:08:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:08:38.410 [DEBUG] [Thread-59707] [transport.py] [_log()] starting thread (client mode): 0xd07ceec0
2025-11-17T19:08:38.411 [DEBUG] [Thread-59707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:08:38.431 [DEBUG] [Thread-59707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:08:38.431 [INFO] [Thread-59707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:08:38.434 [DEBUG] [Thread-59707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:08:38.434 [DEBUG] [Thread-59707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:08:38.434 [DEBUG] [Thread-59707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:08:38.434 [DEBUG] [Thread-59707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:08:38.434 [DEBUG] [Thread-59707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:08:38.434 [DEBUG] [Thread-59707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:08:38.434 [DEBUG] [Thread-59707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] client lang: <none>
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] server lang: <none>
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] kex follows: False
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] Compression: none
2025-11-17T19:08:38.435 [DEBUG] [Thread-59707] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:08:38.452 [DEBUG] [Thread-59707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:08:38.452 [DEBUG] [Thread-59707] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:08:38.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:08:38.453 [DEBUG] [Thread-59707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:08:38.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:08:38.455 [DEBUG] [Thread-59707] [transport.py] [_log()] userauth is OK
2025-11-17T19:08:38.456 [DEBUG] [Thread-59707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:08:38.456 [DEBUG] [Thread-59707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:08:38.456 [DEBUG] [Thread-59707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:08:38.456 [DEBUG] [Thread-59707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:08:38.477 [INFO] [Thread-59707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:08:38.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:08:39.109 [DEBUG] [Thread-59707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:08:39.110 [DEBUG] [Thread-59707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:08:39.110 [DEBUG] [Thread-59707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:08:39.150 [DEBUG] [Thread-59707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:08:39.151 [DEBUG] [Thread-59707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:08:39.153 [DEBUG] [Thread-59707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:08:39.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:08:39.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:08:39.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:08:39.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:08:39.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:08:39.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:08:39.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:08:39.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:08:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:08:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.713939 -999.00  +20.30  24.62     20   -2.90 1 1 1 1 1   885    0 22.51 -36.77 ----- 23.4 24.6 280.2 34.9 21.0 -26.0 21.1 -25.0 21.0 -24.9 21.2 -25.6
2025-11-17T19:08:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:08:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:08:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.713939
2025-11-17T19:08:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:08:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:08:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:08:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:08:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:08:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:08:17', tmtdew=27.69, humidity=14.83, cloud=0.0, wind=28.48, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:08:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:08:39.178 [DEBUG] [Thread-59707] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:08:39.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:08:39.275 [DEBUG] [Thread-59710] [transport.py] [_log()] starting thread (client mode): 0xd31343d0
2025-11-17T19:08:39.275 [DEBUG] [Thread-59710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:08:39.289 [DEBUG] [Thread-59710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:08:39.289 [INFO] [Thread-59710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] client lang: <none>
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] server lang: <none>
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] kex follows: False
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:08:39.297 [DEBUG] [Thread-59710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:08:39.298 [DEBUG] [Thread-59710] [transport.py] [_log()] Compression: none
2025-11-17T19:08:39.298 [DEBUG] [Thread-59710] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:08:39.361 [DEBUG] [Thread-59710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:08:39.362 [DEBUG] [Thread-59710] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:08:39.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:08:39.363 [DEBUG] [Thread-59710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:08:39.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:08:39.420 [DEBUG] [Thread-59710] [transport.py] [_log()] userauth is OK
2025-11-17T19:08:39.421 [DEBUG] [Thread-59710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:08:39.421 [DEBUG] [Thread-59710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:08:39.421 [DEBUG] [Thread-59710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:08:39.421 [DEBUG] [Thread-59710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:08:39.440 [INFO] [Thread-59710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:08:39.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:08:39.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:08:40.003 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:08:40.003 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:08:40.281 [DEBUG] [Thread-59710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:08:40.281 [DEBUG] [Thread-59710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:08:40.329 [DEBUG] [Thread-59710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:08:40.329 [DEBUG] [Thread-59710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:08:40.337 [DEBUG] [Thread-59710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:08:40.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:08:40.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:08:40.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:08:40.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:08:40.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:08:40.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:08:40.368 [DEBUG] [Thread-59710] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:08:50.187 [DEBUG] [Thread-59712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:09:05.218 [DEBUG] [Thread-59713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:09:10.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:09:10.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:09:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:09:11.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 8, 49), 27.71, 14.82, 0.0, 25.16, 20.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:09:11.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:08:49
2025-11-17T19:09:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:09:11.310 [DEBUG] [Thread-59714] [transport.py] [_log()] starting thread (client mode): 0xd078c370
2025-11-17T19:09:11.310 [DEBUG] [Thread-59714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:09:11.329 [DEBUG] [Thread-59714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:09:11.329 [INFO] [Thread-59714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:09:11.332 [DEBUG] [Thread-59714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] client lang: <none>
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] server lang: <none>
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] kex follows: False
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] Compression: none
2025-11-17T19:09:11.333 [DEBUG] [Thread-59714] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:09:11.350 [DEBUG] [Thread-59714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:09:11.350 [DEBUG] [Thread-59714] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:09:11.351 [DEBUG] [Thread-59714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:09:11.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:09:11.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:09:11.353 [DEBUG] [Thread-59714] [transport.py] [_log()] userauth is OK
2025-11-17T19:09:11.353 [DEBUG] [Thread-59714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:09:11.353 [DEBUG] [Thread-59714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:09:11.353 [DEBUG] [Thread-59714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:09:11.353 [DEBUG] [Thread-59714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:09:11.374 [INFO] [Thread-59714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:09:11.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:09:12.038 [DEBUG] [Thread-59714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:09:12.038 [DEBUG] [Thread-59714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:09:12.039 [DEBUG] [Thread-59714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:09:12.079 [DEBUG] [Thread-59714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:09:12.080 [DEBUG] [Thread-59714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:09:12.082 [DEBUG] [Thread-59714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:09:12.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:09:12.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:09:12.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:09:12.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:09:12.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:09:12.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:09:12.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:09:12.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:09:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:09:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.714286 -999.00  +20.30  20.78     20   -2.90 1 1 1 1 1   885    0 22.10 -38.04 ----- 22.9 20.8 277.0 27.7 21.0 -25.9 21.1 -25.0 20.9 -24.6 21.2 -25.6
2025-11-17T19:09:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:09:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:09:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.714286
2025-11-17T19:09:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:09:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:09:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:09:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:09:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:09:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:08:49', tmtdew=27.71, humidity=14.82, cloud=0.0, wind=25.16, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:08:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:09:12.106 [DEBUG] [Thread-59714] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:09:12.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:09:12.203 [DEBUG] [Thread-59717] [transport.py] [_log()] starting thread (client mode): 0xd3137550
2025-11-17T19:09:12.203 [DEBUG] [Thread-59717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:09:12.217 [DEBUG] [Thread-59717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:09:12.217 [INFO] [Thread-59717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:09:12.225 [DEBUG] [Thread-59717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:09:12.225 [DEBUG] [Thread-59717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:09:12.225 [DEBUG] [Thread-59717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:09:12.225 [DEBUG] [Thread-59717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:09:12.225 [DEBUG] [Thread-59717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:09:12.225 [DEBUG] [Thread-59717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:09:12.225 [DEBUG] [Thread-59717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] client lang: <none>
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] server lang: <none>
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] kex follows: False
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:09:12.226 [DEBUG] [Thread-59717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:09:12.227 [DEBUG] [Thread-59717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:09:12.227 [DEBUG] [Thread-59717] [transport.py] [_log()] Compression: none
2025-11-17T19:09:12.227 [DEBUG] [Thread-59717] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:09:12.285 [DEBUG] [Thread-59717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:09:12.285 [DEBUG] [Thread-59717] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:09:12.286 [DEBUG] [Thread-59717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:09:12.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:09:12.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:09:12.340 [DEBUG] [Thread-59717] [transport.py] [_log()] userauth is OK
2025-11-17T19:09:12.341 [DEBUG] [Thread-59717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:09:12.341 [DEBUG] [Thread-59717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:09:12.341 [DEBUG] [Thread-59717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:09:12.341 [DEBUG] [Thread-59717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:09:12.360 [INFO] [Thread-59717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:09:12.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:09:12.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:09:13.192 [DEBUG] [Thread-59717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:09:13.192 [DEBUG] [Thread-59717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:09:13.240 [DEBUG] [Thread-59717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:09:13.240 [DEBUG] [Thread-59717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:09:13.249 [DEBUG] [Thread-59717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:09:13.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:09:13.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')
2025-11-17T19:09:13.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:09:13.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:09:13.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:09:13.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:09:13.284 [DEBUG] [Thread-59717] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:09:20.245 [DEBUG] [Thread-59719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:09:30.268 [DEBUG] [Thread-59720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:09:35.280 [DEBUG] [Thread-59721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:09:40.143 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:09:40.144 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:09:43.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:09:43.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:09:43.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:09:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 9, 21), 27.73, 14.78, 0.0, 25.85, 20.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:09:43.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:09:21
2025-11-17T19:09:44.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:09:44.195 [DEBUG] [Thread-59722] [transport.py] [_log()] starting thread (client mode): 0xd31ef640
2025-11-17T19:09:44.195 [DEBUG] [Thread-59722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:09:44.217 [DEBUG] [Thread-59722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:09:44.217 [INFO] [Thread-59722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:09:44.220 [DEBUG] [Thread-59722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:09:44.220 [DEBUG] [Thread-59722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:09:44.220 [DEBUG] [Thread-59722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:09:44.220 [DEBUG] [Thread-59722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:09:44.220 [DEBUG] [Thread-59722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] client lang: <none>
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] server lang: <none>
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] kex follows: False
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] Compression: none
2025-11-17T19:09:44.221 [DEBUG] [Thread-59722] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:09:44.238 [DEBUG] [Thread-59722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:09:44.238 [DEBUG] [Thread-59722] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:09:44.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:09:44.239 [DEBUG] [Thread-59722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:09:44.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:09:44.241 [DEBUG] [Thread-59722] [transport.py] [_log()] userauth is OK
2025-11-17T19:09:44.241 [DEBUG] [Thread-59722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:09:44.241 [DEBUG] [Thread-59722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:09:44.241 [DEBUG] [Thread-59722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:09:44.241 [DEBUG] [Thread-59722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:09:44.259 [INFO] [Thread-59722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:09:44.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:09:44.897 [DEBUG] [Thread-59722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:09:44.897 [DEBUG] [Thread-59722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:09:44.897 [DEBUG] [Thread-59722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:09:44.939 [DEBUG] [Thread-59722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:09:44.939 [DEBUG] [Thread-59722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:09:44.942 [DEBUG] [Thread-59722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:09:44.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:09:44.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:09:44.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:09:44.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:09:44.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:09:44.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:09:44.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:09:44.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:09:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:09:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.714981 -999.00  +20.20  23.85     20   -3.00 1 1 1 1 1   884    0 22.09 -41.30 ----- 24.5 23.9 277.4 33.4 20.9 -26.2 21.0 -25.2 20.9 -25.1 21.1 -25.8
2025-11-17T19:09:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:09:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:09:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.714981
2025-11-17T19:09:44.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:09:44.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:09:44.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:09:44.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:09:44.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:09:44.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:09:21', tmtdew=27.73, humidity=14.78, cloud=0.0, wind=25.85, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:09:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:09:44.967 [DEBUG] [Thread-59722] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:09:45.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:09:45.050 [DEBUG] [Thread-59725] [transport.py] [_log()] starting thread (client mode): 0xd31ec5b0
2025-11-17T19:09:45.050 [DEBUG] [Thread-59725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:09:45.065 [DEBUG] [Thread-59725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:09:45.065 [INFO] [Thread-59725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:09:45.072 [DEBUG] [Thread-59725] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] client lang: <none>
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] server lang: <none>
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] kex follows: False
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:09:45.073 [DEBUG] [Thread-59725] [transport.py] [_log()] Compression: none
2025-11-17T19:09:45.074 [DEBUG] [Thread-59725] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:09:45.132 [DEBUG] [Thread-59725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:09:45.132 [DEBUG] [Thread-59725] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:09:45.133 [DEBUG] [Thread-59725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:09:45.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:09:45.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:09:45.188 [DEBUG] [Thread-59725] [transport.py] [_log()] userauth is OK
2025-11-17T19:09:45.188 [DEBUG] [Thread-59725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:09:45.188 [DEBUG] [Thread-59725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:09:45.188 [DEBUG] [Thread-59725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:09:45.189 [DEBUG] [Thread-59725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:09:45.207 [INFO] [Thread-59725] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:09:45.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:09:45.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:09:46.029 [DEBUG] [Thread-59725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:09:46.029 [DEBUG] [Thread-59725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:09:46.077 [DEBUG] [Thread-59725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:09:46.077 [DEBUG] [Thread-59725] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:09:46.086 [DEBUG] [Thread-59725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:09:46.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:09:46.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:09:46.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:09:46.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:09:46.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:09:46.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:09:46.120 [DEBUG] [Thread-59725] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:09:50.316 [DEBUG] [Thread-59727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:10:05.358 [DEBUG] [Thread-59728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:10:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:10:16.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:10:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:10:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 9, 53), 27.65, 14.82, 0.0, 23.59, 20.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:10:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:09:53
2025-11-17T19:10:16.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:10:17.050 [DEBUG] [Thread-59729] [transport.py] [_log()] starting thread (client mode): 0xd07ced10
2025-11-17T19:10:17.050 [DEBUG] [Thread-59729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:10:17.065 [DEBUG] [Thread-59729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:10:17.065 [INFO] [Thread-59729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] client lang: <none>
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] server lang: <none>
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] kex follows: False
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:10:17.069 [DEBUG] [Thread-59729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:10:17.070 [DEBUG] [Thread-59729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:10:17.070 [DEBUG] [Thread-59729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:10:17.070 [DEBUG] [Thread-59729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:10:17.070 [DEBUG] [Thread-59729] [transport.py] [_log()] Compression: none
2025-11-17T19:10:17.070 [DEBUG] [Thread-59729] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:10:17.086 [DEBUG] [Thread-59729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:10:17.087 [DEBUG] [Thread-59729] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:10:17.087 [DEBUG] [Thread-59729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:10:17.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:10:17.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:10:17.089 [DEBUG] [Thread-59729] [transport.py] [_log()] userauth is OK
2025-11-17T19:10:17.090 [DEBUG] [Thread-59729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:10:17.090 [DEBUG] [Thread-59729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:10:17.090 [DEBUG] [Thread-59729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:10:17.090 [DEBUG] [Thread-59729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:10:17.107 [INFO] [Thread-59729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:10:17.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:10:17.714 [DEBUG] [Thread-59729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:10:17.715 [DEBUG] [Thread-59729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:10:17.715 [DEBUG] [Thread-59729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:10:17.755 [DEBUG] [Thread-59729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:10:17.756 [DEBUG] [Thread-59729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:10:17.759 [DEBUG] [Thread-59729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:10:17.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:10:17.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:10:17.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:10:17.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:10:17.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:10:17.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:10:17.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:10:17.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.715328 -999.00  +20.20  21.25     20   -2.90 1 1 1 1 1   884    0 21.92 -41.87 ----- 24.5 21.2 279.6 31.8 20.9 -25.9 21.1 -25.2 20.9 -25.2 21.1 -25.6
2025-11-17T19:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.715328
2025-11-17T19:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:09:53', tmtdew=27.65, humidity=14.82, cloud=0.0, wind=23.59, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:10:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:10:17.786 [DEBUG] [Thread-59729] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:10:17.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:10:17.886 [DEBUG] [Thread-59732] [transport.py] [_log()] starting thread (client mode): 0xd07cc1f0
2025-11-17T19:10:17.886 [DEBUG] [Thread-59732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:10:17.900 [DEBUG] [Thread-59732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:10:17.900 [INFO] [Thread-59732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] client lang: <none>
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] server lang: <none>
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] kex follows: False
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:10:17.908 [DEBUG] [Thread-59732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:10:17.909 [DEBUG] [Thread-59732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:10:17.909 [DEBUG] [Thread-59732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:10:17.909 [DEBUG] [Thread-59732] [transport.py] [_log()] Compression: none
2025-11-17T19:10:17.909 [DEBUG] [Thread-59732] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:10:17.964 [DEBUG] [Thread-59732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:10:17.965 [DEBUG] [Thread-59732] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:10:17.965 [DEBUG] [Thread-59732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:10:17.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:10:17.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:10:18.020 [DEBUG] [Thread-59732] [transport.py] [_log()] userauth is OK
2025-11-17T19:10:18.021 [DEBUG] [Thread-59732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:10:18.021 [DEBUG] [Thread-59732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:10:18.021 [DEBUG] [Thread-59732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:10:18.021 [DEBUG] [Thread-59732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:10:18.040 [INFO] [Thread-59732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:10:18.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:10:18.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:10:18.888 [DEBUG] [Thread-59732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:10:18.889 [DEBUG] [Thread-59732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:10:18.936 [DEBUG] [Thread-59732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:10:18.936 [DEBUG] [Thread-59732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:10:18.945 [DEBUG] [Thread-59732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:10:18.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:10:18.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:10:18.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:10:18.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:10:18.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:10:18.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:10:18.980 [DEBUG] [Thread-59732] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:10:20.390 [DEBUG] [Thread-59734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:10:30.322 [DEBUG] [Thread-59735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:10:35.429 [DEBUG] [Thread-59736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:10:40.286 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:10:40.287 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:10:49.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:10:49.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:10:49.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:10:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 10, 25), 27.67, 14.78, 0.0, 21.84, 20.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:10:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:10:25
2025-11-17T19:10:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:10:49.911 [DEBUG] [Thread-59737] [transport.py] [_log()] starting thread (client mode): 0xd07be110
2025-11-17T19:10:49.911 [DEBUG] [Thread-59737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:10:49.930 [DEBUG] [Thread-59737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:10:49.930 [INFO] [Thread-59737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:10:49.933 [DEBUG] [Thread-59737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] client lang: <none>
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] server lang: <none>
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] kex follows: False
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] Compression: none
2025-11-17T19:10:49.934 [DEBUG] [Thread-59737] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:10:49.946 [DEBUG] [Thread-59737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:10:49.946 [DEBUG] [Thread-59737] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:10:49.947 [DEBUG] [Thread-59737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:10:49.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:10:49.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:10:49.949 [DEBUG] [Thread-59737] [transport.py] [_log()] userauth is OK
2025-11-17T19:10:49.949 [DEBUG] [Thread-59737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:10:49.949 [DEBUG] [Thread-59737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:10:49.949 [DEBUG] [Thread-59737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:10:49.949 [DEBUG] [Thread-59737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:10:49.972 [INFO] [Thread-59737] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:10:49.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:10:50.463 [DEBUG] [Thread-59739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:10:50.607 [DEBUG] [Thread-59737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:10:50.608 [DEBUG] [Thread-59737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:10:50.608 [DEBUG] [Thread-59737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:10:50.648 [DEBUG] [Thread-59737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:10:50.649 [DEBUG] [Thread-59737] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:10:50.651 [DEBUG] [Thread-59737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:10:50.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:10:50.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:10:50.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:10:50.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:10:50.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:10:50.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:10:50.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:10:50.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:10:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:10:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.715675 -999.00  +20.20  17.05     20   -2.90 1 1 1 1 1   884    0 22.07 -46.81 ----- 18.6 17.1 275.6 27.0 20.9 -25.8 21.0 -25.2 20.9 -25.2 21.1 -25.3
2025-11-17T19:10:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:10:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:10:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.715675
2025-11-17T19:10:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:10:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:10:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:10:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:10:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:10:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:10:25', tmtdew=27.67, humidity=14.78, cloud=0.0, wind=21.84, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:10:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:10:50.676 [DEBUG] [Thread-59737] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:10:50.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:10:50.773 [DEBUG] [Thread-59741] [transport.py] [_log()] starting thread (client mode): 0xd07bc520
2025-11-17T19:10:50.773 [DEBUG] [Thread-59741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:10:50.787 [DEBUG] [Thread-59741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:10:50.788 [INFO] [Thread-59741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:10:50.795 [DEBUG] [Thread-59741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] client lang: <none>
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] server lang: <none>
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] kex follows: False
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:10:50.796 [DEBUG] [Thread-59741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:10:50.797 [DEBUG] [Thread-59741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:10:50.797 [DEBUG] [Thread-59741] [transport.py] [_log()] Compression: none
2025-11-17T19:10:50.797 [DEBUG] [Thread-59741] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:10:50.856 [DEBUG] [Thread-59741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:10:50.856 [DEBUG] [Thread-59741] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:10:50.857 [DEBUG] [Thread-59741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:10:50.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:10:50.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:10:50.912 [DEBUG] [Thread-59741] [transport.py] [_log()] userauth is OK
2025-11-17T19:10:50.912 [DEBUG] [Thread-59741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:10:50.913 [DEBUG] [Thread-59741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:10:50.913 [DEBUG] [Thread-59741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:10:50.913 [DEBUG] [Thread-59741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:10:50.932 [INFO] [Thread-59741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:10:50.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:10:50.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:10:51.802 [DEBUG] [Thread-59741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:10:51.802 [DEBUG] [Thread-59741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:10:51.850 [DEBUG] [Thread-59741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:10:51.850 [DEBUG] [Thread-59741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:10:51.859 [DEBUG] [Thread-59741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:10:51.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:10:51.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:10:51.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:10:51.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:10:51.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:10:51.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:10:51.893 [DEBUG] [Thread-59741] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:11:05.494 [DEBUG] [Thread-59743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:11:20.533 [DEBUG] [Thread-59744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:11:21.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:11:21.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:11:21.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:11:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 10, 57), 27.65, 14.82, 0.0, 25.5, 20.4, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:11:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:10:57
2025-11-17T19:11:22.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:11:22.836 [DEBUG] [Thread-59745] [transport.py] [_log()] starting thread (client mode): 0xd31375b0
2025-11-17T19:11:22.836 [DEBUG] [Thread-59745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:11:22.856 [DEBUG] [Thread-59745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:11:22.856 [INFO] [Thread-59745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:11:22.858 [DEBUG] [Thread-59745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:11:22.858 [DEBUG] [Thread-59745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:11:22.858 [DEBUG] [Thread-59745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:11:22.858 [DEBUG] [Thread-59745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:11:22.858 [DEBUG] [Thread-59745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:11:22.858 [DEBUG] [Thread-59745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:11:22.858 [DEBUG] [Thread-59745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:11:22.858 [DEBUG] [Thread-59745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] client lang: <none>
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] server lang: <none>
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] kex follows: False
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] Compression: none
2025-11-17T19:11:22.859 [DEBUG] [Thread-59745] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:11:22.875 [DEBUG] [Thread-59745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:11:22.875 [DEBUG] [Thread-59745] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:11:22.875 [DEBUG] [Thread-59745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:11:22.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:11:22.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:11:22.877 [DEBUG] [Thread-59745] [transport.py] [_log()] userauth is OK
2025-11-17T19:11:22.878 [DEBUG] [Thread-59745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:11:22.878 [DEBUG] [Thread-59745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:11:22.878 [DEBUG] [Thread-59745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:11:22.878 [DEBUG] [Thread-59745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:11:22.901 [INFO] [Thread-59745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:11:22.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:11:23.557 [DEBUG] [Thread-59745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:11:23.558 [DEBUG] [Thread-59745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:11:23.558 [DEBUG] [Thread-59745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:11:23.600 [DEBUG] [Thread-59745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:11:23.600 [DEBUG] [Thread-59745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:11:23.603 [DEBUG] [Thread-59745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:11:23.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:11:23.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:11:23.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:11:23.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:11:23.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:11:23.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:11:23.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:11:23.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:11:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:11:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.716023 -999.00  +20.20  20.19     20   -3.00 1 1 1 1 1   883    0 22.27 -48.77 ----- 23.9 20.2 290.6 23.4 20.9 -26.0 20.9 -25.1 20.8 -24.9 21.1 -25.4
2025-11-17T19:11:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:11:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:11:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.716023
2025-11-17T19:11:23.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:11:23.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:11:23.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:11:23.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:11:23.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:11:23.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:10:57', tmtdew=27.65, humidity=14.82, cloud=0.0, wind=25.5, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:11:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:11:23.631 [DEBUG] [Thread-59745] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:11:23.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:11:23.727 [DEBUG] [Thread-59748] [transport.py] [_log()] starting thread (client mode): 0xd07bdc00
2025-11-17T19:11:23.727 [DEBUG] [Thread-59748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:11:23.742 [DEBUG] [Thread-59748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:11:23.742 [INFO] [Thread-59748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] client lang: <none>
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] server lang: <none>
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] kex follows: False
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:11:23.750 [DEBUG] [Thread-59748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:11:23.751 [DEBUG] [Thread-59748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:11:23.751 [DEBUG] [Thread-59748] [transport.py] [_log()] Compression: none
2025-11-17T19:11:23.751 [DEBUG] [Thread-59748] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:11:23.808 [DEBUG] [Thread-59748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:11:23.809 [DEBUG] [Thread-59748] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:11:23.809 [DEBUG] [Thread-59748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:11:23.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:11:23.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:11:23.864 [DEBUG] [Thread-59748] [transport.py] [_log()] userauth is OK
2025-11-17T19:11:23.864 [DEBUG] [Thread-59748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:11:23.865 [DEBUG] [Thread-59748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:11:23.865 [DEBUG] [Thread-59748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:11:23.865 [DEBUG] [Thread-59748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:11:23.884 [INFO] [Thread-59748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:11:23.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:11:23.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:11:24.721 [DEBUG] [Thread-59748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:11:24.721 [DEBUG] [Thread-59748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:11:24.768 [DEBUG] [Thread-59748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:11:24.768 [DEBUG] [Thread-59748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:11:24.778 [DEBUG] [Thread-59748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:11:24.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:11:24.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:11:24.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:11:24.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:11:24.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:11:24.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:11:24.816 [DEBUG] [Thread-59748] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:11:30.370 [DEBUG] [Thread-59750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:11:35.562 [DEBUG] [Thread-59751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:11:40.427 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:11:40.428 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:11:50.598 [DEBUG] [Thread-59752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:11:54.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:11:54.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:11:54.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:11:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 11, 29), 27.66, 14.8, 0.0, 26.29, 20.41, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:11:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:11:29
2025-11-17T19:11:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:11:55.758 [DEBUG] [Thread-59753] [transport.py] [_log()] starting thread (client mode): 0xd07ced10
2025-11-17T19:11:55.758 [DEBUG] [Thread-59753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:11:55.772 [DEBUG] [Thread-59753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:11:55.772 [INFO] [Thread-59753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:11:55.775 [DEBUG] [Thread-59753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:11:55.775 [DEBUG] [Thread-59753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:11:55.775 [DEBUG] [Thread-59753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:11:55.775 [DEBUG] [Thread-59753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:11:55.775 [DEBUG] [Thread-59753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:11:55.775 [DEBUG] [Thread-59753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:11:55.775 [DEBUG] [Thread-59753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:11:55.775 [DEBUG] [Thread-59753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] client lang: <none>
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] server lang: <none>
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] kex follows: False
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] Compression: none
2025-11-17T19:11:55.776 [DEBUG] [Thread-59753] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:11:55.783 [DEBUG] [Thread-59753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:11:55.783 [DEBUG] [Thread-59753] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:11:55.783 [DEBUG] [Thread-59753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:11:55.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:11:55.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:11:55.784 [DEBUG] [Thread-59753] [transport.py] [_log()] userauth is OK
2025-11-17T19:11:55.784 [DEBUG] [Thread-59753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:11:55.784 [DEBUG] [Thread-59753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:11:55.784 [DEBUG] [Thread-59753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:11:55.784 [DEBUG] [Thread-59753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:11:55.793 [INFO] [Thread-59753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:11:55.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:11:56.454 [DEBUG] [Thread-59753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:11:56.454 [DEBUG] [Thread-59753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:11:56.455 [DEBUG] [Thread-59753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:11:56.495 [DEBUG] [Thread-59753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:11:56.495 [DEBUG] [Thread-59753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:11:56.497 [DEBUG] [Thread-59753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:11:56.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:11:56.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:11:56.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:11:56.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:11:56.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:11:56.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:11:56.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.716370 -999.00  +20.20  24.55     20   -3.00 1 1 1 1 1   883    0 22.42 -49.39 ----- 21.8 24.6 273.8 28.5 20.9 -26.0 20.9 -25.2 20.8 -25.0 21.0 -25.7
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.716370
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:11:29', tmtdew=27.66, humidity=14.8, cloud=0.0, wind=26.29, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:11:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:11:56.515 [DEBUG] [Thread-59753] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:11:56.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:11:56.604 [DEBUG] [Thread-59756] [transport.py] [_log()] starting thread (client mode): 0xd07cead0
2025-11-17T19:11:56.604 [DEBUG] [Thread-59756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:11:56.623 [DEBUG] [Thread-59756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:11:56.623 [INFO] [Thread-59756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:11:56.632 [DEBUG] [Thread-59756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:11:56.632 [DEBUG] [Thread-59756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:11:56.632 [DEBUG] [Thread-59756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:11:56.632 [DEBUG] [Thread-59756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:11:56.632 [DEBUG] [Thread-59756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] client lang: <none>
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] server lang: <none>
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] kex follows: False
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] Compression: none
2025-11-17T19:11:56.633 [DEBUG] [Thread-59756] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:11:56.693 [DEBUG] [Thread-59756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:11:56.693 [DEBUG] [Thread-59756] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:11:56.693 [DEBUG] [Thread-59756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:11:56.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:11:56.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:11:56.753 [DEBUG] [Thread-59756] [transport.py] [_log()] userauth is OK
2025-11-17T19:11:56.753 [DEBUG] [Thread-59756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:11:56.753 [DEBUG] [Thread-59756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:11:56.753 [DEBUG] [Thread-59756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:11:56.753 [DEBUG] [Thread-59756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:11:56.774 [INFO] [Thread-59756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:11:56.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:11:56.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:11:57.645 [DEBUG] [Thread-59756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:11:57.645 [DEBUG] [Thread-59756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:11:57.693 [DEBUG] [Thread-59756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:11:57.693 [DEBUG] [Thread-59756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:11:57.705 [DEBUG] [Thread-59756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:11:57.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:11:57.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:11:57.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:11:57.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:11:57.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:11:57.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:11:57.752 [DEBUG] [Thread-59756] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:12:05.628 [DEBUG] [Thread-59758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:12:20.670 [DEBUG] [Thread-59759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:12:27.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:12:27.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:12:27.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:12:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 12, 1), 27.7, 14.8, 0.0, 25.43, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:12:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:12:01
2025-11-17T19:12:28.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:12:28.696 [DEBUG] [Thread-59760] [transport.py] [_log()] starting thread (client mode): 0xd07be230
2025-11-17T19:12:28.696 [DEBUG] [Thread-59760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:12:28.711 [DEBUG] [Thread-59760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:12:28.711 [INFO] [Thread-59760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:12:28.714 [DEBUG] [Thread-59760] [transport.py] [_log()] client lang: <none>
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] server lang: <none>
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] kex follows: False
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] Compression: none
2025-11-17T19:12:28.715 [DEBUG] [Thread-59760] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:12:28.728 [DEBUG] [Thread-59760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:12:28.728 [DEBUG] [Thread-59760] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:12:28.729 [DEBUG] [Thread-59760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:12:28.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:12:28.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:12:28.730 [DEBUG] [Thread-59760] [transport.py] [_log()] userauth is OK
2025-11-17T19:12:28.731 [DEBUG] [Thread-59760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:12:28.731 [DEBUG] [Thread-59760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:12:28.731 [DEBUG] [Thread-59760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:12:28.731 [DEBUG] [Thread-59760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:12:28.745 [INFO] [Thread-59760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:12:28.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:12:29.385 [DEBUG] [Thread-59760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:12:29.385 [DEBUG] [Thread-59760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:12:29.385 [DEBUG] [Thread-59760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:12:29.425 [DEBUG] [Thread-59760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:12:29.426 [DEBUG] [Thread-59760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:12:29.428 [DEBUG] [Thread-59760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:12:29.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:12:29.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:12:29.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:12:29.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:12:29.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:12:29.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:12:29.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:12:29.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:12:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:12:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.716717 -999.00  +20.20  21.08     20   -3.10 1 1 1 1 1   882    0 22.29 -47.18 ----- 19.1 21.1 282.4 30.9 20.9 -26.0 20.9 -25.2 20.7 -25.0 21.0 -25.6
2025-11-17T19:12:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:12:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:12:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.716717
2025-11-17T19:12:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:12:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:12:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:12:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:12:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:12:29.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:12:01', tmtdew=27.7, humidity=14.8, cloud=0.0, wind=25.43, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:12:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:12:29.449 [DEBUG] [Thread-59760] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:12:29.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:12:29.548 [DEBUG] [Thread-59763] [transport.py] [_log()] starting thread (client mode): 0xd07cc5b0
2025-11-17T19:12:29.548 [DEBUG] [Thread-59763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:12:29.566 [DEBUG] [Thread-59763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:12:29.566 [INFO] [Thread-59763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:12:29.573 [DEBUG] [Thread-59763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:12:29.573 [DEBUG] [Thread-59763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] client lang: <none>
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] server lang: <none>
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] kex follows: False
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] Compression: none
2025-11-17T19:12:29.574 [DEBUG] [Thread-59763] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:12:29.634 [DEBUG] [Thread-59763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:12:29.634 [DEBUG] [Thread-59763] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:12:29.634 [DEBUG] [Thread-59763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:12:29.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:12:29.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:12:29.692 [DEBUG] [Thread-59763] [transport.py] [_log()] userauth is OK
2025-11-17T19:12:29.692 [DEBUG] [Thread-59763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:12:29.692 [DEBUG] [Thread-59763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:12:29.692 [DEBUG] [Thread-59763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:12:29.692 [DEBUG] [Thread-59763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:12:29.707 [INFO] [Thread-59763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:12:29.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:12:29.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:12:30.419 [DEBUG] [Thread-59765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:12:30.629 [DEBUG] [Thread-59763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:12:30.629 [DEBUG] [Thread-59763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:12:30.677 [DEBUG] [Thread-59763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:12:30.677 [DEBUG] [Thread-59763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:12:30.685 [DEBUG] [Thread-59763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:12:30.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:12:30.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:12:30.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:12:30.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:12:30.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:12:30.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:12:30.717 [DEBUG] [Thread-59763] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:12:35.702 [DEBUG] [Thread-59766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:12:40.568 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:12:40.569 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:12:50.742 [DEBUG] [Thread-59767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:13:00.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:13:00.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:13:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:13:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 12, 33), 27.7, 14.8, 0.0, 24.46, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:13:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:12:33
2025-11-17T19:13:01.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:13:01.661 [DEBUG] [Thread-59768] [transport.py] [_log()] starting thread (client mode): 0xd07bcee0
2025-11-17T19:13:01.662 [DEBUG] [Thread-59768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:13:01.682 [DEBUG] [Thread-59768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:13:01.682 [INFO] [Thread-59768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:13:01.685 [DEBUG] [Thread-59768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] client lang: <none>
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] server lang: <none>
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] kex follows: False
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] Compression: none
2025-11-17T19:13:01.686 [DEBUG] [Thread-59768] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:13:01.702 [DEBUG] [Thread-59768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:13:01.703 [DEBUG] [Thread-59768] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:13:01.703 [DEBUG] [Thread-59768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:13:01.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:13:01.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:13:01.705 [DEBUG] [Thread-59768] [transport.py] [_log()] userauth is OK
2025-11-17T19:13:01.705 [DEBUG] [Thread-59768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:13:01.705 [DEBUG] [Thread-59768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:13:01.705 [DEBUG] [Thread-59768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:13:01.705 [DEBUG] [Thread-59768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:13:01.729 [INFO] [Thread-59768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:13:01.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:13:02.373 [DEBUG] [Thread-59768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:13:02.373 [DEBUG] [Thread-59768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:13:02.373 [DEBUG] [Thread-59768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:13:02.413 [DEBUG] [Thread-59768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:13:02.413 [DEBUG] [Thread-59768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:13:02.416 [DEBUG] [Thread-59768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:13:02.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:13:02.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:13:02.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:13:02.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:13:02.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:13:02.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:13:02.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:13:02.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:13:02.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:13:02.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.717064 -999.00  +20.20  20.13     20   -3.10 1 1 1 1 1   882    0 22.73 -43.46 ----- 25.8 20.1 274.8 29.3 20.8 -26.0 20.9 -25.2 20.7 -24.9 20.9 -25.6
2025-11-17T19:13:02.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:13:02.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:13:02.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.717064
2025-11-17T19:13:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:13:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:13:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:13:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:13:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:13:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:12:33', tmtdew=27.7, humidity=14.8, cloud=0.0, wind=24.46, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:12:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:13:02.441 [DEBUG] [Thread-59768] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:13:02.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:13:02.538 [DEBUG] [Thread-59771] [transport.py] [_log()] starting thread (client mode): 0xd07bf0d0
2025-11-17T19:13:02.538 [DEBUG] [Thread-59771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:13:02.552 [DEBUG] [Thread-59771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:13:02.552 [INFO] [Thread-59771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] client lang: <none>
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] server lang: <none>
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] kex follows: False
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] Compression: none
2025-11-17T19:13:02.560 [DEBUG] [Thread-59771] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:13:02.621 [DEBUG] [Thread-59771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:13:02.621 [DEBUG] [Thread-59771] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:13:02.622 [DEBUG] [Thread-59771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:13:02.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:13:02.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:13:02.676 [DEBUG] [Thread-59771] [transport.py] [_log()] userauth is OK
2025-11-17T19:13:02.676 [DEBUG] [Thread-59771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:13:02.677 [DEBUG] [Thread-59771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:13:02.677 [DEBUG] [Thread-59771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:13:02.677 [DEBUG] [Thread-59771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:13:02.693 [INFO] [Thread-59771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:13:02.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:13:02.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:13:03.589 [DEBUG] [Thread-59771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:13:03.590 [DEBUG] [Thread-59771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:13:03.637 [DEBUG] [Thread-59771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:13:03.637 [DEBUG] [Thread-59771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:13:03.646 [DEBUG] [Thread-59771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:13:03.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:13:03.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:13:03.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:13:03.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:13:03.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:13:03.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:13:03.680 [DEBUG] [Thread-59771] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:13:05.772 [DEBUG] [Thread-59773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:13:20.803 [DEBUG] [Thread-59774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:13:30.508 [DEBUG] [Thread-59775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:13:33.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:13:33.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:13:33.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:13:34.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 13, 5), 27.69, 14.8, 0.0, 25.46, 20.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:13:34.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:13:05
2025-11-17T19:13:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:13:34.595 [DEBUG] [Thread-59776] [transport.py] [_log()] starting thread (client mode): 0xd31ee650
2025-11-17T19:13:34.595 [DEBUG] [Thread-59776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:13:34.615 [DEBUG] [Thread-59776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:13:34.615 [INFO] [Thread-59776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] client lang: <none>
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] server lang: <none>
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] kex follows: False
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] Compression: none
2025-11-17T19:13:34.617 [DEBUG] [Thread-59776] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:13:34.636 [DEBUG] [Thread-59776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:13:34.637 [DEBUG] [Thread-59776] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:13:34.637 [DEBUG] [Thread-59776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:13:34.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:13:34.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:13:34.639 [DEBUG] [Thread-59776] [transport.py] [_log()] userauth is OK
2025-11-17T19:13:34.639 [DEBUG] [Thread-59776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:13:34.640 [DEBUG] [Thread-59776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:13:34.640 [DEBUG] [Thread-59776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:13:34.640 [DEBUG] [Thread-59776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:13:34.663 [INFO] [Thread-59776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:13:34.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:13:35.309 [DEBUG] [Thread-59776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:13:35.309 [DEBUG] [Thread-59776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:13:35.309 [DEBUG] [Thread-59776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:13:35.350 [DEBUG] [Thread-59776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:13:35.351 [DEBUG] [Thread-59776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:13:35.353 [DEBUG] [Thread-59776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:13:35.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:13:35.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:13:35.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:13:35.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:13:35.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:13:35.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:13:35.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:13:35.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:13:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:13:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.717411 -999.00  +20.20  21.15     20   -3.10 1 1 1 1 1   881    0 22.43 -41.88 ----- 23.4 21.1 284.6 25.6 20.8 -26.0 20.9 -25.2 20.7 -25.0 20.9 -25.4
2025-11-17T19:13:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:13:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:13:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.717411
2025-11-17T19:13:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:13:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:13:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:13:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:13:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:13:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:13:05', tmtdew=27.69, humidity=14.8, cloud=0.0, wind=25.46, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:13:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:13:35.377 [DEBUG] [Thread-59776] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:13:35.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:13:35.460 [DEBUG] [Thread-59779] [transport.py] [_log()] starting thread (client mode): 0xd31ecd60
2025-11-17T19:13:35.461 [DEBUG] [Thread-59779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:13:35.476 [DEBUG] [Thread-59779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:13:35.476 [INFO] [Thread-59779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] client lang: <none>
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] server lang: <none>
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] kex follows: False
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] Compression: none
2025-11-17T19:13:35.483 [DEBUG] [Thread-59779] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:13:35.546 [DEBUG] [Thread-59779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:13:35.546 [DEBUG] [Thread-59779] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:13:35.546 [DEBUG] [Thread-59779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:13:35.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:13:35.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:13:35.605 [DEBUG] [Thread-59779] [transport.py] [_log()] userauth is OK
2025-11-17T19:13:35.605 [DEBUG] [Thread-59779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:13:35.605 [DEBUG] [Thread-59779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:13:35.605 [DEBUG] [Thread-59779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:13:35.605 [DEBUG] [Thread-59779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:13:35.627 [INFO] [Thread-59779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:13:35.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:13:35.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:13:35.835 [DEBUG] [Thread-59781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:13:36.512 [DEBUG] [Thread-59779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:13:36.512 [DEBUG] [Thread-59779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:13:36.561 [DEBUG] [Thread-59779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:13:36.561 [DEBUG] [Thread-59779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:13:36.570 [DEBUG] [Thread-59779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:13:36.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:13:36.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:13:36.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:13:36.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:13:36.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:13:36.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:13:36.604 [DEBUG] [Thread-59779] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:13:40.710 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:13:40.711 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:13:50.878 [DEBUG] [Thread-59782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:14:05.906 [DEBUG] [Thread-59783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:14:06.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:14:06.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:14:06.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:14:07.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 13, 37), 27.61, 14.83, 0.0, 24.9, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:14:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:13:37
2025-11-17T19:14:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:14:07.534 [DEBUG] [Thread-59784] [transport.py] [_log()] starting thread (client mode): 0xd07bc490
2025-11-17T19:14:07.534 [DEBUG] [Thread-59784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:14:07.545 [DEBUG] [Thread-59784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:14:07.545 [INFO] [Thread-59784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] client lang: <none>
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] server lang: <none>
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] kex follows: False
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] Compression: none
2025-11-17T19:14:07.548 [DEBUG] [Thread-59784] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:14:07.562 [DEBUG] [Thread-59784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:14:07.562 [DEBUG] [Thread-59784] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:14:07.563 [DEBUG] [Thread-59784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:14:07.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:14:07.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:14:07.564 [DEBUG] [Thread-59784] [transport.py] [_log()] userauth is OK
2025-11-17T19:14:07.564 [DEBUG] [Thread-59784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:14:07.564 [DEBUG] [Thread-59784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:14:07.564 [DEBUG] [Thread-59784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:14:07.564 [DEBUG] [Thread-59784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:14:07.584 [INFO] [Thread-59784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:14:07.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:14:08.217 [DEBUG] [Thread-59784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:14:08.217 [DEBUG] [Thread-59784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:14:08.217 [DEBUG] [Thread-59784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:14:08.257 [DEBUG] [Thread-59784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:14:08.257 [DEBUG] [Thread-59784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:14:08.260 [DEBUG] [Thread-59784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:14:08.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:14:08.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:14:08.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:14:08.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:14:08.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:14:08.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:14:08.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:14:08.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:14:08.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:14:08.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.717759 -999.00  +20.10  26.50     20   -3.10 1 1 1 1 1   881    0 21.92 -45.53 ----- 24.8 26.5 272.2 30.0 20.8 -26.0 20.8 -25.2 20.6 -25.0 20.9 -25.6
2025-11-17T19:14:08.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:14:08.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:14:08.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.717759
2025-11-17T19:14:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:14:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:14:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:14:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:14:08.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:14:08.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:13:37', tmtdew=27.61, humidity=14.83, cloud=0.0, wind=24.9, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:13:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:14:08.284 [DEBUG] [Thread-59784] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:14:08.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:14:08.384 [DEBUG] [Thread-59787] [transport.py] [_log()] starting thread (client mode): 0xd07bd7b0
2025-11-17T19:14:08.385 [DEBUG] [Thread-59787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:14:08.399 [DEBUG] [Thread-59787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:14:08.399 [INFO] [Thread-59787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:14:08.407 [DEBUG] [Thread-59787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:14:08.407 [DEBUG] [Thread-59787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:14:08.407 [DEBUG] [Thread-59787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:14:08.407 [DEBUG] [Thread-59787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:14:08.407 [DEBUG] [Thread-59787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:14:08.407 [DEBUG] [Thread-59787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:14:08.407 [DEBUG] [Thread-59787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:14:08.407 [DEBUG] [Thread-59787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:14:08.408 [DEBUG] [Thread-59787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:14:08.408 [DEBUG] [Thread-59787] [transport.py] [_log()] client lang: <none>
2025-11-17T19:14:08.408 [DEBUG] [Thread-59787] [transport.py] [_log()] server lang: <none>
2025-11-17T19:14:08.408 [DEBUG] [Thread-59787] [transport.py] [_log()] kex follows: False
2025-11-17T19:14:08.408 [DEBUG] [Thread-59787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:14:08.408 [DEBUG] [Thread-59787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:14:08.408 [DEBUG] [Thread-59787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:14:08.408 [DEBUG] [Thread-59787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:14:08.409 [DEBUG] [Thread-59787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:14:08.409 [DEBUG] [Thread-59787] [transport.py] [_log()] Compression: none
2025-11-17T19:14:08.409 [DEBUG] [Thread-59787] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:14:08.464 [DEBUG] [Thread-59787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:14:08.464 [DEBUG] [Thread-59787] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:14:08.465 [DEBUG] [Thread-59787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:14:08.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:14:08.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:14:08.520 [DEBUG] [Thread-59787] [transport.py] [_log()] userauth is OK
2025-11-17T19:14:08.520 [DEBUG] [Thread-59787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:14:08.520 [DEBUG] [Thread-59787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:14:08.520 [DEBUG] [Thread-59787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:14:08.520 [DEBUG] [Thread-59787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:14:08.541 [INFO] [Thread-59787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:14:08.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:14:08.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:14:09.389 [DEBUG] [Thread-59787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:14:09.390 [DEBUG] [Thread-59787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:14:09.437 [DEBUG] [Thread-59787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:14:09.437 [DEBUG] [Thread-59787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:14:09.446 [DEBUG] [Thread-59787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:14:09.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:14:09.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:14:09.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:14:09.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:14:09.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:14:09.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:14:09.480 [DEBUG] [Thread-59787] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:14:20.937 [DEBUG] [Thread-59789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:14:30.600 [DEBUG] [Thread-59790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:14:35.978 [DEBUG] [Thread-59791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:14:39.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:14:39.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:14:39.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:14:40.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 14, 9), 27.63, 14.8, 0.0, 25.48, 20.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:14:40.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:14:09
2025-11-17T19:14:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:14:40.413 [DEBUG] [Thread-59792] [transport.py] [_log()] starting thread (client mode): 0xd31ec070
2025-11-17T19:14:40.413 [DEBUG] [Thread-59792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:14:40.434 [DEBUG] [Thread-59792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:14:40.435 [INFO] [Thread-59792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:14:40.436 [DEBUG] [Thread-59792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:14:40.436 [DEBUG] [Thread-59792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:14:40.436 [DEBUG] [Thread-59792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:14:40.436 [DEBUG] [Thread-59792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:14:40.436 [DEBUG] [Thread-59792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:14:40.436 [DEBUG] [Thread-59792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:14:40.436 [DEBUG] [Thread-59792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:14:40.436 [DEBUG] [Thread-59792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] client lang: <none>
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] server lang: <none>
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] kex follows: False
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] Compression: none
2025-11-17T19:14:40.437 [DEBUG] [Thread-59792] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:14:40.446 [DEBUG] [Thread-59792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:14:40.446 [DEBUG] [Thread-59792] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:14:40.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:14:40.447 [DEBUG] [Thread-59792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:14:40.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:14:40.449 [DEBUG] [Thread-59792] [transport.py] [_log()] userauth is OK
2025-11-17T19:14:40.449 [DEBUG] [Thread-59792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:14:40.449 [DEBUG] [Thread-59792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:14:40.450 [DEBUG] [Thread-59792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:14:40.450 [DEBUG] [Thread-59792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:14:40.473 [INFO] [Thread-59792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:14:40.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:14:41.033 [DEBUG] [Thread-59792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:14:41.033 [DEBUG] [Thread-59792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:14:41.033 [DEBUG] [Thread-59792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:14:41.074 [DEBUG] [Thread-59792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:14:41.074 [DEBUG] [Thread-59792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:14:41.077 [DEBUG] [Thread-59792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:14:41.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:14:41.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:14:41.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:14:41.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:14:41.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:14:41.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:14:41.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:14:41.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:14:41.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:14:41.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.718106 -999.00  +20.10  17.88     20   -3.10 1 1 1 1 1   880    0 22.20 -44.88 ----- 17.9 17.9 271.7 26.4 20.8 -26.0 20.8 -25.3 20.6 -24.9 20.8 -25.4
2025-11-17T19:14:41.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:14:41.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:14:41.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.718106
2025-11-17T19:14:41.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:14:41.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:14:41.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:14:41.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:14:41.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:14:41.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:14:09', tmtdew=27.63, humidity=14.8, cloud=0.0, wind=25.48, temperature=20.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:14:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:14:41.102 [DEBUG] [Thread-59792] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:14:41.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:14:41.199 [DEBUG] [Thread-59795] [transport.py] [_log()] starting thread (client mode): 0xd31ee350
2025-11-17T19:14:41.199 [DEBUG] [Thread-59795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:14:41.218 [DEBUG] [Thread-59795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:14:41.219 [INFO] [Thread-59795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:14:41.226 [DEBUG] [Thread-59795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:14:41.226 [DEBUG] [Thread-59795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:14:41.226 [DEBUG] [Thread-59795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] client lang: <none>
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] server lang: <none>
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] kex follows: False
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:14:41.227 [DEBUG] [Thread-59795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:14:41.228 [DEBUG] [Thread-59795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:14:41.228 [DEBUG] [Thread-59795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:14:41.228 [DEBUG] [Thread-59795] [transport.py] [_log()] Compression: none
2025-11-17T19:14:41.228 [DEBUG] [Thread-59795] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:14:41.286 [DEBUG] [Thread-59795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:14:41.287 [DEBUG] [Thread-59795] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:14:41.287 [DEBUG] [Thread-59795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:14:41.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:14:41.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:14:41.344 [DEBUG] [Thread-59795] [transport.py] [_log()] userauth is OK
2025-11-17T19:14:41.345 [DEBUG] [Thread-59795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:14:41.345 [DEBUG] [Thread-59795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:14:41.345 [DEBUG] [Thread-59795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:14:41.345 [DEBUG] [Thread-59795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:14:41.365 [INFO] [Thread-59795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:14:41.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:14:41.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:14:42.216 [DEBUG] [Thread-59795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:14:42.216 [DEBUG] [Thread-59795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:14:42.267 [DEBUG] [Thread-59795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:14:42.267 [DEBUG] [Thread-59795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:14:42.275 [DEBUG] [Thread-59795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:14:42.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:14:42.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:14:42.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:14:42.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:14:42.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:14:42.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:14:42.307 [DEBUG] [Thread-59795] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:14:48.143 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:14:48.145 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:14:51.013 [DEBUG] [Thread-59797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:15:06.051 [DEBUG] [Thread-59798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:15:12.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:15:12.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:15:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:15:12.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 14, 41), 27.6, 14.85, 0.0, 22.62, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:15:12.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:14:41
2025-11-17T19:15:13.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:15:13.249 [DEBUG] [Thread-59799] [transport.py] [_log()] starting thread (client mode): 0xd31ed660
2025-11-17T19:15:13.250 [DEBUG] [Thread-59799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:15:13.270 [DEBUG] [Thread-59799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:15:13.270 [INFO] [Thread-59799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:15:13.273 [DEBUG] [Thread-59799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:15:13.273 [DEBUG] [Thread-59799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] client lang: <none>
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] server lang: <none>
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] kex follows: False
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] Compression: none
2025-11-17T19:15:13.274 [DEBUG] [Thread-59799] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:15:13.291 [DEBUG] [Thread-59799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:15:13.291 [DEBUG] [Thread-59799] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:15:13.292 [DEBUG] [Thread-59799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:15:13.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:15:13.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:15:13.293 [DEBUG] [Thread-59799] [transport.py] [_log()] userauth is OK
2025-11-17T19:15:13.293 [DEBUG] [Thread-59799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:15:13.293 [DEBUG] [Thread-59799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:15:13.293 [DEBUG] [Thread-59799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:15:13.293 [DEBUG] [Thread-59799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:15:13.308 [INFO] [Thread-59799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:15:13.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:15:13.946 [DEBUG] [Thread-59799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:15:13.946 [DEBUG] [Thread-59799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:15:13.946 [DEBUG] [Thread-59799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:15:13.987 [DEBUG] [Thread-59799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:15:13.987 [DEBUG] [Thread-59799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:15:13.989 [DEBUG] [Thread-59799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:15:14.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:15:14.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:15:14.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:15:14.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:15:14.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:15:14.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:15:14.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:15:14.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:15:14.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:15:14.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.718106 -999.00  +20.10  17.88     20   -3.10 1 1 1 1 1   880    0 22.20 -44.88 ----- 17.9 17.9 271.7 26.4 20.8 -26.0 20.8 -25.3 20.6 -24.9 20.8 -25.4
2025-11-17T19:15:14.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:15:14.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:15:14.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.718106
2025-11-17T19:15:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:15:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:15:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:15:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:15:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:15:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:14:41', tmtdew=27.6, humidity=14.85, cloud=0.0, wind=22.62, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:14:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:15:14.008 [DEBUG] [Thread-59799] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:15:14.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:15:14.095 [DEBUG] [Thread-59802] [transport.py] [_log()] starting thread (client mode): 0xd31b0460
2025-11-17T19:15:14.095 [DEBUG] [Thread-59802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:15:14.112 [DEBUG] [Thread-59802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:15:14.112 [INFO] [Thread-59802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:15:14.119 [DEBUG] [Thread-59802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:15:14.119 [DEBUG] [Thread-59802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:15:14.119 [DEBUG] [Thread-59802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] client lang: <none>
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] server lang: <none>
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] kex follows: False
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] Compression: none
2025-11-17T19:15:14.120 [DEBUG] [Thread-59802] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:15:14.175 [DEBUG] [Thread-59802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:15:14.175 [DEBUG] [Thread-59802] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:15:14.175 [DEBUG] [Thread-59802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:15:14.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:15:14.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:15:14.232 [DEBUG] [Thread-59802] [transport.py] [_log()] userauth is OK
2025-11-17T19:15:14.232 [DEBUG] [Thread-59802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:15:14.232 [DEBUG] [Thread-59802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:15:14.232 [DEBUG] [Thread-59802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:15:14.232 [DEBUG] [Thread-59802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:15:14.246 [INFO] [Thread-59802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:15:14.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:15:14.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:15:15.136 [DEBUG] [Thread-59802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:15:15.137 [DEBUG] [Thread-59802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:15:15.185 [DEBUG] [Thread-59802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:15:15.185 [DEBUG] [Thread-59802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:15:15.193 [DEBUG] [Thread-59802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:15:15.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:15:15.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:15:15.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:15:15.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:15:15.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:15:15.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:15:15.224 [DEBUG] [Thread-59802] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:15:21.079 [DEBUG] [Thread-59804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:15:30.676 [DEBUG] [Thread-59805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:15:36.123 [DEBUG] [Thread-59806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:15:45.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:15:45.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:15:45.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:15:45.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 15, 13), 27.59, 14.85, 0.0, 23.43, 20.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:15:45.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:15:13
2025-11-17T19:15:46.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:15:46.214 [DEBUG] [Thread-59807] [transport.py] [_log()] starting thread (client mode): 0xd07bfdc0
2025-11-17T19:15:46.214 [DEBUG] [Thread-59807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:15:46.235 [DEBUG] [Thread-59807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:15:46.235 [INFO] [Thread-59807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] client lang: <none>
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] server lang: <none>
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] kex follows: False
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] Compression: none
2025-11-17T19:15:46.238 [DEBUG] [Thread-59807] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:15:46.254 [DEBUG] [Thread-59807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:15:46.254 [DEBUG] [Thread-59807] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:15:46.254 [DEBUG] [Thread-59807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:15:46.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:15:46.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:15:46.256 [DEBUG] [Thread-59807] [transport.py] [_log()] userauth is OK
2025-11-17T19:15:46.256 [DEBUG] [Thread-59807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:15:46.256 [DEBUG] [Thread-59807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:15:46.256 [DEBUG] [Thread-59807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:15:46.256 [DEBUG] [Thread-59807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:15:46.273 [INFO] [Thread-59807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:15:46.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:15:46.867 [DEBUG] [Thread-59807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:15:46.867 [DEBUG] [Thread-59807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:15:46.867 [DEBUG] [Thread-59807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:15:46.909 [DEBUG] [Thread-59807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:15:46.909 [DEBUG] [Thread-59807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:15:46.911 [DEBUG] [Thread-59807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:15:46.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:15:46.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:15:46.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:15:46.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:15:46.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:15:46.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:15:46.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.718801 -999.00  +20.10  21.02     20   -3.20 1 1 1 1 1   878    0 22.46 -41.80 ----- 20.3 21.0 286.0 26.6 20.7 -26.0 20.7 -25.1 20.5 -25.1 20.7 -25.6
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.718801
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:15:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:15:13', tmtdew=27.59, humidity=14.85, cloud=0.0, wind=23.43, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:15:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:15:46.929 [DEBUG] [Thread-59807] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:15:47.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:15:47.015 [DEBUG] [Thread-59810] [transport.py] [_log()] starting thread (client mode): 0xd31ece20
2025-11-17T19:15:47.015 [DEBUG] [Thread-59810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:15:47.031 [DEBUG] [Thread-59810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:15:47.031 [INFO] [Thread-59810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] client lang: <none>
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] server lang: <none>
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] kex follows: False
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:15:47.038 [DEBUG] [Thread-59810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:15:47.039 [DEBUG] [Thread-59810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:15:47.039 [DEBUG] [Thread-59810] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:15:47.039 [DEBUG] [Thread-59810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:15:47.039 [DEBUG] [Thread-59810] [transport.py] [_log()] Compression: none
2025-11-17T19:15:47.039 [DEBUG] [Thread-59810] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:15:47.095 [DEBUG] [Thread-59810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:15:47.096 [DEBUG] [Thread-59810] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:15:47.096 [DEBUG] [Thread-59810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:15:47.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:15:47.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:15:47.152 [DEBUG] [Thread-59810] [transport.py] [_log()] userauth is OK
2025-11-17T19:15:47.152 [DEBUG] [Thread-59810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:15:47.152 [DEBUG] [Thread-59810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:15:47.152 [DEBUG] [Thread-59810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:15:47.152 [DEBUG] [Thread-59810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:15:47.171 [INFO] [Thread-59810] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:15:47.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:15:47.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:15:48.004 [DEBUG] [Thread-59810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:15:48.005 [DEBUG] [Thread-59810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:15:48.053 [DEBUG] [Thread-59810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:15:48.053 [DEBUG] [Thread-59810] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:15:48.064 [DEBUG] [Thread-59810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:15:48.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:15:48.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:15:48.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:15:48.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:15:48.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:15:48.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:15:48.102 [DEBUG] [Thread-59810] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:15:51.151 [DEBUG] [Thread-59812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:15:53.165 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:15:53.166 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:16:06.191 [DEBUG] [Thread-59813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:16:18.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:16:18.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:16:18.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
2025-11-17T19:16:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 15, 45), 27.67, 14.82, 0.0, 23.45, 20.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:16:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:15:45
2025-11-17T19:16:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:16:19.093 [DEBUG] [Thread-59814] [transport.py] [_log()] starting thread (client mode): 0xd07cdb70
2025-11-17T19:16:19.093 [DEBUG] [Thread-59814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:16:19.115 [DEBUG] [Thread-59814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:16:19.115 [INFO] [Thread-59814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] client lang: <none>
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] server lang: <none>
2025-11-17T19:16:19.118 [DEBUG] [Thread-59814] [transport.py] [_log()] kex follows: False
2025-11-17T19:16:19.119 [DEBUG] [Thread-59814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:16:19.119 [DEBUG] [Thread-59814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:16:19.119 [DEBUG] [Thread-59814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:16:19.119 [DEBUG] [Thread-59814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:16:19.119 [DEBUG] [Thread-59814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:16:19.119 [DEBUG] [Thread-59814] [transport.py] [_log()] Compression: none
2025-11-17T19:16:19.119 [DEBUG] [Thread-59814] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:16:19.134 [DEBUG] [Thread-59814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:16:19.134 [DEBUG] [Thread-59814] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:16:19.134 [DEBUG] [Thread-59814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:16:19.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:16:19.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:16:19.134 [DEBUG] [Thread-59814] [transport.py] [_log()] userauth is OK
2025-11-17T19:16:19.135 [DEBUG] [Thread-59814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:16:19.135 [DEBUG] [Thread-59814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:16:19.135 [DEBUG] [Thread-59814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:16:19.135 [DEBUG] [Thread-59814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:16:19.149 [INFO] [Thread-59814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:16:19.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:16:19.836 [DEBUG] [Thread-59814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:16:19.836 [DEBUG] [Thread-59814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:16:19.836 [DEBUG] [Thread-59814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:16:19.876 [DEBUG] [Thread-59814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:16:19.876 [DEBUG] [Thread-59814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:16:19.878 [DEBUG] [Thread-59814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:16:19.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:16:19.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:16:19.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:16:19.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:16:19.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:16:19.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:16:19.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:16:19.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:16:19.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:16:19.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.719147 -999.00  +20.10  18.46     20   -3.20 1 1 1 1 1   877    0 22.18 -40.72 ----- 20.2 18.5 287.0 24.1 20.7 -26.1 20.7 -25.4 20.5 -25.0 20.7 -25.5
2025-11-17T19:16:19.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:16:19.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:16:19.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.719147
2025-11-17T19:16:19.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:16:19.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:16:19.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:16:19.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:16:19.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:16:19.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:15:45', tmtdew=27.67, humidity=14.82, cloud=0.0, wind=23.45, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:15:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:16:19.895 [DEBUG] [Thread-59814] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:16:19.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:16:19.980 [DEBUG] [Thread-59817] [transport.py] [_log()] starting thread (client mode): 0xd07cd600
2025-11-17T19:16:19.980 [DEBUG] [Thread-59817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:16:19.995 [DEBUG] [Thread-59817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:16:19.995 [INFO] [Thread-59817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] client lang: <none>
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] server lang: <none>
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] kex follows: False
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] Compression: none
2025-11-17T19:16:20.003 [DEBUG] [Thread-59817] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:16:20.063 [DEBUG] [Thread-59817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:16:20.063 [DEBUG] [Thread-59817] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:16:20.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:16:20.063 [DEBUG] [Thread-59817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:16:20.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:16:20.120 [DEBUG] [Thread-59817] [transport.py] [_log()] userauth is OK
2025-11-17T19:16:20.120 [DEBUG] [Thread-59817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:16:20.120 [DEBUG] [Thread-59817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:16:20.120 [DEBUG] [Thread-59817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:16:20.120 [DEBUG] [Thread-59817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:16:20.135 [INFO] [Thread-59817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:16:20.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:16:20.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:16:21.011 [DEBUG] [Thread-59817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:16:21.011 [DEBUG] [Thread-59817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:16:21.059 [DEBUG] [Thread-59817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:16:21.059 [DEBUG] [Thread-59817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:16:21.067 [DEBUG] [Thread-59817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:16:21.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:16:21.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:16:21.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:16:21.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:16:21.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:16:21.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:16:21.099 [DEBUG] [Thread-59817] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:16:21.216 [DEBUG] [Thread-59819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:16:30.767 [DEBUG] [Thread-59820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:16:36.256 [DEBUG] [Thread-59821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:16:51.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:16:51.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:16:51.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:16:51.285 [DEBUG] [Thread-59822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:16:51.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 16, 17), 27.65, 14.83, 0.0, 22.59, 20.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:16:51.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:16:17
2025-11-17T19:16:51.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:16:52.078 [DEBUG] [Thread-59823] [transport.py] [_log()] starting thread (client mode): 0xd31b3100
2025-11-17T19:16:52.078 [DEBUG] [Thread-59823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:16:52.099 [DEBUG] [Thread-59823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:16:52.099 [INFO] [Thread-59823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:16:52.102 [DEBUG] [Thread-59823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:16:52.102 [DEBUG] [Thread-59823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] client lang: <none>
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] server lang: <none>
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] kex follows: False
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:16:52.103 [DEBUG] [Thread-59823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:16:52.104 [DEBUG] [Thread-59823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:16:52.104 [DEBUG] [Thread-59823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:16:52.104 [DEBUG] [Thread-59823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:16:52.104 [DEBUG] [Thread-59823] [transport.py] [_log()] Compression: none
2025-11-17T19:16:52.104 [DEBUG] [Thread-59823] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:16:52.122 [DEBUG] [Thread-59823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:16:52.123 [DEBUG] [Thread-59823] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:16:52.123 [DEBUG] [Thread-59823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:16:52.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:16:52.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:16:52.125 [DEBUG] [Thread-59823] [transport.py] [_log()] userauth is OK
2025-11-17T19:16:52.125 [DEBUG] [Thread-59823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:16:52.125 [DEBUG] [Thread-59823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:16:52.125 [DEBUG] [Thread-59823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:16:52.126 [DEBUG] [Thread-59823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:16:52.161 [INFO] [Thread-59823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:16:52.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:16:52.797 [DEBUG] [Thread-59823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:16:52.797 [DEBUG] [Thread-59823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:16:52.798 [DEBUG] [Thread-59823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:16:52.838 [DEBUG] [Thread-59823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:16:52.839 [DEBUG] [Thread-59823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:16:52.841 [DEBUG] [Thread-59823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:16:52.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:16:52.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:16:52.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:16:52.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:16:52.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:16:52.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:16:52.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:16:52.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:16:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:16:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.719495 -999.00  +20.00  20.51     20   -3.30 1 1 1 1 1   876    0 22.04 -40.55 ----- 22.8 20.5 270.0 23.5 20.7 -26.1 20.7 -25.2 20.4 -24.8 20.7 -25.5
2025-11-17T19:16:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:16:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:16:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.719495
2025-11-17T19:16:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:16:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:16:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:16:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:16:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:16:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:16:17', tmtdew=27.65, humidity=14.83, cloud=0.0, wind=22.59, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:16:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:16:52.866 [DEBUG] [Thread-59823] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:16:52.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:16:52.964 [DEBUG] [Thread-59826] [transport.py] [_log()] starting thread (client mode): 0xd078cf40
2025-11-17T19:16:52.964 [DEBUG] [Thread-59826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:16:52.980 [DEBUG] [Thread-59826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:16:52.980 [INFO] [Thread-59826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] client lang: <none>
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] server lang: <none>
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] kex follows: False
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:16:52.988 [DEBUG] [Thread-59826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:16:52.989 [DEBUG] [Thread-59826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:16:52.989 [DEBUG] [Thread-59826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:16:52.989 [DEBUG] [Thread-59826] [transport.py] [_log()] Compression: none
2025-11-17T19:16:52.989 [DEBUG] [Thread-59826] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:16:53.043 [DEBUG] [Thread-59826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:16:53.044 [DEBUG] [Thread-59826] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:16:53.044 [DEBUG] [Thread-59826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:16:53.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:16:53.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:16:53.100 [DEBUG] [Thread-59826] [transport.py] [_log()] userauth is OK
2025-11-17T19:16:53.100 [DEBUG] [Thread-59826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:16:53.101 [DEBUG] [Thread-59826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:16:53.101 [DEBUG] [Thread-59826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:16:53.101 [DEBUG] [Thread-59826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:16:53.120 [INFO] [Thread-59826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:16:53.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:16:53.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:16:53.989 [DEBUG] [Thread-59826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:16:53.989 [DEBUG] [Thread-59826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:16:54.036 [DEBUG] [Thread-59826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:16:54.036 [DEBUG] [Thread-59826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:16:54.045 [DEBUG] [Thread-59826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:16:54.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:16:54.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:16:54.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:16:54.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:16:54.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:16:54.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:16:54.079 [DEBUG] [Thread-59826] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:16:58.509 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:16:58.509 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:17:06.309 [DEBUG] [Thread-59828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:17:21.358 [DEBUG] [Thread-59829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:17:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:17:24.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:17:24.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:17:24.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 17, 21), 27.71, 14.77, 0.0, 22.39, 20.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:17:24.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:17:21
2025-11-17T19:17:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:17:25.026 [DEBUG] [Thread-59830] [transport.py] [_log()] starting thread (client mode): 0xd31ef820
2025-11-17T19:17:25.026 [DEBUG] [Thread-59830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:17:25.046 [DEBUG] [Thread-59830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:17:25.046 [INFO] [Thread-59830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] client lang: <none>
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] server lang: <none>
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] kex follows: False
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] Compression: none
2025-11-17T19:17:25.050 [DEBUG] [Thread-59830] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:17:25.066 [DEBUG] [Thread-59830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:17:25.066 [DEBUG] [Thread-59830] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:17:25.067 [DEBUG] [Thread-59830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:17:25.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:17:25.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:17:25.068 [DEBUG] [Thread-59830] [transport.py] [_log()] userauth is OK
2025-11-17T19:17:25.068 [DEBUG] [Thread-59830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:17:25.068 [DEBUG] [Thread-59830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:17:25.068 [DEBUG] [Thread-59830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:17:25.068 [DEBUG] [Thread-59830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:17:25.087 [INFO] [Thread-59830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:17:25.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:17:25.802 [DEBUG] [Thread-59830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:17:25.802 [DEBUG] [Thread-59830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:17:25.802 [DEBUG] [Thread-59830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:17:25.843 [DEBUG] [Thread-59830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:17:25.843 [DEBUG] [Thread-59830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:17:25.845 [DEBUG] [Thread-59830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:17:25.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:17:25.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:17:25.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:17:25.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:17:25.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:17:25.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:17:25.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:17:25.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.719842 -999.00  +20.00  21.44     20   -3.30 1 1 1 1 1   875    0 22.38 -42.69 ----- 22.0 21.4 272.4 26.3 20.6 -26.1 20.6 -25.2 20.4 -24.7 20.6 -25.5
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.719842
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:17:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:17:21', tmtdew=27.71, humidity=14.77, cloud=0.0, wind=22.39, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:16:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:17:25.864 [DEBUG] [Thread-59830] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:17:25.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:17:25.958 [DEBUG] [Thread-59833] [transport.py] [_log()] starting thread (client mode): 0xd31edae0
2025-11-17T19:17:25.959 [DEBUG] [Thread-59833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:17:25.974 [DEBUG] [Thread-59833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:17:25.974 [INFO] [Thread-59833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] client lang: <none>
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] server lang: <none>
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] kex follows: False
2025-11-17T19:17:25.982 [DEBUG] [Thread-59833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:17:25.983 [DEBUG] [Thread-59833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:17:25.983 [DEBUG] [Thread-59833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:17:25.983 [DEBUG] [Thread-59833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:17:25.983 [DEBUG] [Thread-59833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:17:25.983 [DEBUG] [Thread-59833] [transport.py] [_log()] Compression: none
2025-11-17T19:17:25.983 [DEBUG] [Thread-59833] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:17:26.043 [DEBUG] [Thread-59833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:17:26.044 [DEBUG] [Thread-59833] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:17:26.044 [DEBUG] [Thread-59833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:17:26.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:17:26.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:17:26.100 [DEBUG] [Thread-59833] [transport.py] [_log()] userauth is OK
2025-11-17T19:17:26.101 [DEBUG] [Thread-59833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:17:26.101 [DEBUG] [Thread-59833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:17:26.101 [DEBUG] [Thread-59833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:17:26.101 [DEBUG] [Thread-59833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:17:26.120 [INFO] [Thread-59833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:17:26.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:17:26.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:17:27.014 [DEBUG] [Thread-59833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:17:27.014 [DEBUG] [Thread-59833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:17:27.063 [DEBUG] [Thread-59833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:17:27.063 [DEBUG] [Thread-59833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:17:27.072 [DEBUG] [Thread-59833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:17:27.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:17:27.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:17:27.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:17:27.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:17:27.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:17:27.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:17:27.108 [DEBUG] [Thread-59833] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:17:30.843 [DEBUG] [Thread-59835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:17:36.385 [DEBUG] [Thread-59836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:17:51.419 [DEBUG] [Thread-59837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:17:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:17:57.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:17:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:17:57.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 17, 53), 27.73, 14.78, 0.0, 21.62, 20.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:17:57.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:17:53
2025-11-17T19:17:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:17:58.066 [DEBUG] [Thread-59838] [transport.py] [_log()] starting thread (client mode): 0xd31ec340
2025-11-17T19:17:58.066 [DEBUG] [Thread-59838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:17:58.086 [DEBUG] [Thread-59838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:17:58.086 [INFO] [Thread-59838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] client lang: <none>
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] server lang: <none>
2025-11-17T19:17:58.088 [DEBUG] [Thread-59838] [transport.py] [_log()] kex follows: False
2025-11-17T19:17:58.089 [DEBUG] [Thread-59838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:17:58.089 [DEBUG] [Thread-59838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:17:58.089 [DEBUG] [Thread-59838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:17:58.089 [DEBUG] [Thread-59838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:17:58.089 [DEBUG] [Thread-59838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:17:58.089 [DEBUG] [Thread-59838] [transport.py] [_log()] Compression: none
2025-11-17T19:17:58.089 [DEBUG] [Thread-59838] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:17:58.102 [DEBUG] [Thread-59838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:17:58.102 [DEBUG] [Thread-59838] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:17:58.103 [DEBUG] [Thread-59838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:17:58.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:17:58.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:17:58.104 [DEBUG] [Thread-59838] [transport.py] [_log()] userauth is OK
2025-11-17T19:17:58.105 [DEBUG] [Thread-59838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:17:58.105 [DEBUG] [Thread-59838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:17:58.105 [DEBUG] [Thread-59838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:17:58.105 [DEBUG] [Thread-59838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:17:58.120 [INFO] [Thread-59838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:17:58.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:17:58.778 [DEBUG] [Thread-59838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:17:58.778 [DEBUG] [Thread-59838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:17:58.778 [DEBUG] [Thread-59838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:17:58.819 [DEBUG] [Thread-59838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:17:58.820 [DEBUG] [Thread-59838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:17:58.823 [DEBUG] [Thread-59838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:17:58.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:17:58.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:17:58.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:17:58.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:17:58.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:17:58.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:17:58.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:17:58.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:17:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:17:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.720189 -999.00  +20.00  21.52     20   -3.40 1 1 1 1 1   874    0 21.82 -42.09 ----- 25.1 21.5 267.5 27.4 20.6 -26.1 20.6 -25.3 20.4 -24.9 20.6 -25.4
2025-11-17T19:17:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:17:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:17:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.720189
2025-11-17T19:17:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:17:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:17:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:17:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:17:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:17:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:17:53', tmtdew=27.73, humidity=14.78, cloud=0.0, wind=21.62, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:17:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:17:58.847 [DEBUG] [Thread-59838] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:17:58.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:17:58.943 [DEBUG] [Thread-59841] [transport.py] [_log()] starting thread (client mode): 0xd31b0ac0
2025-11-17T19:17:58.943 [DEBUG] [Thread-59841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:17:58.957 [DEBUG] [Thread-59841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:17:58.958 [INFO] [Thread-59841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:17:58.968 [DEBUG] [Thread-59841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:17:58.968 [DEBUG] [Thread-59841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:17:58.968 [DEBUG] [Thread-59841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:17:58.968 [DEBUG] [Thread-59841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:17:58.968 [DEBUG] [Thread-59841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:17:58.968 [DEBUG] [Thread-59841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] client lang: <none>
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] server lang: <none>
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] kex follows: False
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:17:58.969 [DEBUG] [Thread-59841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:17:58.970 [DEBUG] [Thread-59841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:17:58.970 [DEBUG] [Thread-59841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:17:58.970 [DEBUG] [Thread-59841] [transport.py] [_log()] Compression: none
2025-11-17T19:17:58.970 [DEBUG] [Thread-59841] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:17:59.024 [DEBUG] [Thread-59841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:17:59.025 [DEBUG] [Thread-59841] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:17:59.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:17:59.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:17:59.027 [DEBUG] [Thread-59841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:17:59.081 [DEBUG] [Thread-59841] [transport.py] [_log()] userauth is OK
2025-11-17T19:17:59.081 [DEBUG] [Thread-59841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:17:59.081 [DEBUG] [Thread-59841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:17:59.081 [DEBUG] [Thread-59841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:17:59.081 [DEBUG] [Thread-59841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:17:59.100 [INFO] [Thread-59841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:17:59.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:17:59.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:18:00.014 [DEBUG] [Thread-59841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:18:00.014 [DEBUG] [Thread-59841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:18:00.061 [DEBUG] [Thread-59841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:18:00.062 [DEBUG] [Thread-59841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:18:00.070 [DEBUG] [Thread-59841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:18:00.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:18:00.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:18:00.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:18:00.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:18:00.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:18:00.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:18:00.104 [DEBUG] [Thread-59841] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:18:06.450 [DEBUG] [Thread-59843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:18:07.799 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:18:07.801 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:18:21.497 [DEBUG] [Thread-59844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:18:30.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:18:30.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:18:30.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:18:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 18, 25), 27.72, 14.8, 0.0, 21.9, 20.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:18:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:18:25
2025-11-17T19:18:30.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:18:30.914 [DEBUG] [Thread-59845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:18:31.046 [DEBUG] [Thread-59846] [transport.py] [_log()] starting thread (client mode): 0xd31ef910
2025-11-17T19:18:31.047 [DEBUG] [Thread-59846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:18:31.067 [DEBUG] [Thread-59846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:18:31.068 [INFO] [Thread-59846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:18:31.069 [DEBUG] [Thread-59846] [transport.py] [_log()] client lang: <none>
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] server lang: <none>
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] kex follows: False
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] Compression: none
2025-11-17T19:18:31.070 [DEBUG] [Thread-59846] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:18:31.082 [DEBUG] [Thread-59846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:18:31.082 [DEBUG] [Thread-59846] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:18:31.083 [DEBUG] [Thread-59846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:18:31.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:18:31.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:18:31.085 [DEBUG] [Thread-59846] [transport.py] [_log()] userauth is OK
2025-11-17T19:18:31.085 [DEBUG] [Thread-59846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:18:31.085 [DEBUG] [Thread-59846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:18:31.085 [DEBUG] [Thread-59846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:18:31.085 [DEBUG] [Thread-59846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:18:31.103 [INFO] [Thread-59846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:18:31.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:18:31.761 [DEBUG] [Thread-59846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:18:31.761 [DEBUG] [Thread-59846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:18:31.761 [DEBUG] [Thread-59846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:18:31.802 [DEBUG] [Thread-59846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:18:31.802 [DEBUG] [Thread-59846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:18:31.805 [DEBUG] [Thread-59846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:18:31.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:18:31.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:18:31.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:18:31.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:18:31.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:18:31.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:18:31.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:18:31.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:18:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:18:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.720536 -999.00  +20.00  19.62     20   -3.40 1 1 1 1 1   872    0 21.91 -43.25 ----- 20.0 19.6 274.8 28.0 20.6 -26.1 20.6 -25.2 20.3 -24.9 20.6 -25.5
2025-11-17T19:18:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:18:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:18:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.720536
2025-11-17T19:18:31.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:18:31.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:18:31.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:18:31.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:18:31.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:18:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:18:25', tmtdew=27.72, humidity=14.8, cloud=0.0, wind=21.9, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:17:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:18:31.831 [DEBUG] [Thread-59846] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:18:31.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:18:31.926 [DEBUG] [Thread-59849] [transport.py] [_log()] starting thread (client mode): 0xd31ef370
2025-11-17T19:18:31.926 [DEBUG] [Thread-59849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:18:31.943 [DEBUG] [Thread-59849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:18:31.943 [INFO] [Thread-59849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:18:31.951 [DEBUG] [Thread-59849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:18:31.952 [DEBUG] [Thread-59849] [transport.py] [_log()] client lang: <none>
2025-11-17T19:18:31.952 [DEBUG] [Thread-59849] [transport.py] [_log()] server lang: <none>
2025-11-17T19:18:31.952 [DEBUG] [Thread-59849] [transport.py] [_log()] kex follows: False
2025-11-17T19:18:31.952 [DEBUG] [Thread-59849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:18:31.952 [DEBUG] [Thread-59849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:18:31.952 [DEBUG] [Thread-59849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:18:31.952 [DEBUG] [Thread-59849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:18:31.953 [DEBUG] [Thread-59849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:18:31.953 [DEBUG] [Thread-59849] [transport.py] [_log()] Compression: none
2025-11-17T19:18:31.953 [DEBUG] [Thread-59849] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:18:32.008 [DEBUG] [Thread-59849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:18:32.008 [DEBUG] [Thread-59849] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:18:32.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:18:32.009 [DEBUG] [Thread-59849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:18:32.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:18:32.064 [DEBUG] [Thread-59849] [transport.py] [_log()] userauth is OK
2025-11-17T19:18:32.064 [DEBUG] [Thread-59849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:18:32.064 [DEBUG] [Thread-59849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:18:32.065 [DEBUG] [Thread-59849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:18:32.065 [DEBUG] [Thread-59849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:18:32.084 [INFO] [Thread-59849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:18:32.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:18:32.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:18:32.971 [DEBUG] [Thread-59849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:18:32.971 [DEBUG] [Thread-59849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:18:33.020 [DEBUG] [Thread-59849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:18:33.020 [DEBUG] [Thread-59849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:18:33.029 [DEBUG] [Thread-59849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:18:33.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:18:33.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:18:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:18:33.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:18:33.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:18:33.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:18:33.064 [DEBUG] [Thread-59849] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:18:36.527 [DEBUG] [Thread-59851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:18:51.561 [DEBUG] [Thread-59852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:19:03.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:19:03.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:19:03.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:19:03.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 18, 57), 27.8, 14.32, 0.0, 22.29, 20.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:19:03.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:18:57
2025-11-17T19:19:03.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:19:04.006 [DEBUG] [Thread-59853] [transport.py] [_log()] starting thread (client mode): 0xd07bd150
2025-11-17T19:19:04.006 [DEBUG] [Thread-59853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:19:04.026 [DEBUG] [Thread-59853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:19:04.026 [INFO] [Thread-59853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:19:04.029 [DEBUG] [Thread-59853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] client lang: <none>
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] server lang: <none>
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] kex follows: False
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] Compression: none
2025-11-17T19:19:04.030 [DEBUG] [Thread-59853] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:19:04.046 [DEBUG] [Thread-59853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:19:04.046 [DEBUG] [Thread-59853] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:19:04.047 [DEBUG] [Thread-59853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:19:04.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:19:04.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:19:04.049 [DEBUG] [Thread-59853] [transport.py] [_log()] userauth is OK
2025-11-17T19:19:04.049 [DEBUG] [Thread-59853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:19:04.049 [DEBUG] [Thread-59853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:19:04.049 [DEBUG] [Thread-59853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:19:04.049 [DEBUG] [Thread-59853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:19:04.073 [INFO] [Thread-59853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:19:04.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:19:04.710 [DEBUG] [Thread-59853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:19:04.710 [DEBUG] [Thread-59853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:19:04.711 [DEBUG] [Thread-59853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:19:04.751 [DEBUG] [Thread-59853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:19:04.752 [DEBUG] [Thread-59853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:19:04.754 [DEBUG] [Thread-59853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:19:04.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:19:04.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:19:04.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:19:04.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:19:04.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:19:04.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:19:04.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:19:04.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:19:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:19:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.720884 -999.00  +20.00  18.04     20   -3.40 1 1 1 1 1   871    0 22.74 -39.42 ----- 20.2 18.0 274.4 23.1 20.6 -26.0 20.6 -25.3 20.3 -24.8 20.6 -25.5
2025-11-17T19:19:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:19:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:19:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.720884
2025-11-17T19:19:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:19:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:19:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:19:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:19:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:19:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:18:57', tmtdew=27.8, humidity=14.32, cloud=0.0, wind=22.29, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:18:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:19:04.779 [DEBUG] [Thread-59853] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:19:04.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:19:04.876 [DEBUG] [Thread-59856] [transport.py] [_log()] starting thread (client mode): 0xd3137c70
2025-11-17T19:19:04.876 [DEBUG] [Thread-59856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:19:04.890 [DEBUG] [Thread-59856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:19:04.890 [INFO] [Thread-59856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:19:04.899 [DEBUG] [Thread-59856] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:19:04.899 [DEBUG] [Thread-59856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:19:04.899 [DEBUG] [Thread-59856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:19:04.899 [DEBUG] [Thread-59856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:19:04.899 [DEBUG] [Thread-59856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] client lang: <none>
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] server lang: <none>
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] kex follows: False
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] Compression: none
2025-11-17T19:19:04.900 [DEBUG] [Thread-59856] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:19:04.960 [DEBUG] [Thread-59856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:19:04.961 [DEBUG] [Thread-59856] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:19:04.961 [DEBUG] [Thread-59856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:19:04.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:19:04.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:19:05.017 [DEBUG] [Thread-59856] [transport.py] [_log()] userauth is OK
2025-11-17T19:19:05.017 [DEBUG] [Thread-59856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:19:05.017 [DEBUG] [Thread-59856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:19:05.017 [DEBUG] [Thread-59856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:19:05.017 [DEBUG] [Thread-59856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:19:05.040 [INFO] [Thread-59856] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:19:05.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:19:05.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:19:05.860 [DEBUG] [Thread-59856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:19:05.861 [DEBUG] [Thread-59856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:19:05.908 [DEBUG] [Thread-59856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:19:05.908 [DEBUG] [Thread-59856] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:19:05.917 [DEBUG] [Thread-59856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:19:05.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:19:05.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')
2025-11-17T19:19:05.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:19:05.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:19:05.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:19:05.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:19:05.954 [DEBUG] [Thread-59856] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:19:06.590 [DEBUG] [Thread-59858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:19:17.003 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:19:17.004 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:19:21.640 [DEBUG] [Thread-59859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:19:30.987 [DEBUG] [Thread-59860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:19:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:19:35.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:19:35.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:19:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 19, 29), 27.81, 14.3, 0.0, 21.63, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:19:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:19:29
2025-11-17T19:19:36.675 [DEBUG] [Thread-59861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:19:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:19:36.937 [DEBUG] [Thread-59862] [transport.py] [_log()] starting thread (client mode): 0xd31368f0
2025-11-17T19:19:36.938 [DEBUG] [Thread-59862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:19:36.958 [DEBUG] [Thread-59862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:19:36.958 [INFO] [Thread-59862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] client lang: <none>
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] server lang: <none>
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] kex follows: False
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] Compression: none
2025-11-17T19:19:36.962 [DEBUG] [Thread-59862] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:19:36.977 [DEBUG] [Thread-59862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:19:36.977 [DEBUG] [Thread-59862] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:19:36.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:19:36.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:19:36.978 [DEBUG] [Thread-59862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:19:36.978 [DEBUG] [Thread-59862] [transport.py] [_log()] userauth is OK
2025-11-17T19:19:36.978 [DEBUG] [Thread-59862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:19:36.978 [DEBUG] [Thread-59862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:19:36.978 [DEBUG] [Thread-59862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:19:36.978 [DEBUG] [Thread-59862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:19:36.996 [INFO] [Thread-59862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:19:36.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:19:37.721 [DEBUG] [Thread-59862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:19:37.722 [DEBUG] [Thread-59862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:19:37.722 [DEBUG] [Thread-59862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:19:37.762 [DEBUG] [Thread-59862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:19:37.763 [DEBUG] [Thread-59862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:19:37.766 [DEBUG] [Thread-59862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:19:37.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:19:37.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:19:37.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:19:37.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:19:37.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:19:37.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:19:37.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:19:37.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:19:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:19:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.721231 -999.00  +20.00  21.07     20   -3.60 1 1 1 1 1   869    0 22.52 -40.90 ----- 22.6 21.1 271.2 32.7 20.5 -26.1 20.5 -25.1 20.2 -24.7 20.5 -25.3
2025-11-17T19:19:37.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:19:37.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:19:37.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.721231
2025-11-17T19:19:37.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:19:37.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:19:37.791 [DEBUG] [Thread-59862] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:19:37.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:19:37.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:19:37.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:19:37.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:19:29', tmtdew=27.81, humidity=14.3, cloud=0.0, wind=21.63, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:18:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:19:37.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:19:37.889 [DEBUG] [Thread-59865] [transport.py] [_log()] starting thread (client mode): 0xd31ed930
2025-11-17T19:19:37.889 [DEBUG] [Thread-59865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:19:37.904 [DEBUG] [Thread-59865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:19:37.904 [INFO] [Thread-59865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:19:37.911 [DEBUG] [Thread-59865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] client lang: <none>
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] server lang: <none>
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] kex follows: False
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:19:37.912 [DEBUG] [Thread-59865] [transport.py] [_log()] Compression: none
2025-11-17T19:19:37.913 [DEBUG] [Thread-59865] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:19:37.968 [DEBUG] [Thread-59865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:19:37.968 [DEBUG] [Thread-59865] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:19:37.969 [DEBUG] [Thread-59865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:19:37.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:19:37.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:19:38.025 [DEBUG] [Thread-59865] [transport.py] [_log()] userauth is OK
2025-11-17T19:19:38.025 [DEBUG] [Thread-59865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:19:38.025 [DEBUG] [Thread-59865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:19:38.025 [DEBUG] [Thread-59865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:19:38.025 [DEBUG] [Thread-59865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:19:38.044 [INFO] [Thread-59865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:19:38.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:19:38.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:19:38.873 [DEBUG] [Thread-59865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:19:38.873 [DEBUG] [Thread-59865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:19:38.921 [DEBUG] [Thread-59865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:19:38.921 [DEBUG] [Thread-59865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:19:38.930 [DEBUG] [Thread-59865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:19:38.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:19:38.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:19:38.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:19:38.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:19:38.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:19:38.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:19:38.964 [DEBUG] [Thread-59865] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:19:43.391 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:19:51.701 [DEBUG] [Thread-59868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:20:06.745 [DEBUG] [Thread-59869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:20:08.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:20:08.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:20:08.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
2025-11-17T19:20:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 20, 1), 27.81, 14.3, 0.0, 18.25, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:20:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:20:01
2025-11-17T19:20:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:20:09.913 [DEBUG] [Thread-59870] [transport.py] [_log()] starting thread (client mode): 0xd31ec4c0
2025-11-17T19:20:09.914 [DEBUG] [Thread-59870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:20:09.935 [DEBUG] [Thread-59870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:20:09.935 [INFO] [Thread-59870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:20:09.938 [DEBUG] [Thread-59870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:20:09.938 [DEBUG] [Thread-59870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:20:09.938 [DEBUG] [Thread-59870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:20:09.938 [DEBUG] [Thread-59870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:20:09.938 [DEBUG] [Thread-59870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:20:09.938 [DEBUG] [Thread-59870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:20:09.938 [DEBUG] [Thread-59870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:20:09.938 [DEBUG] [Thread-59870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] client lang: <none>
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] server lang: <none>
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] kex follows: False
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] Compression: none
2025-11-17T19:20:09.939 [DEBUG] [Thread-59870] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:20:09.957 [DEBUG] [Thread-59870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:20:09.957 [DEBUG] [Thread-59870] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:20:09.958 [DEBUG] [Thread-59870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:20:09.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:20:09.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:20:09.960 [DEBUG] [Thread-59870] [transport.py] [_log()] userauth is OK
2025-11-17T19:20:09.960 [DEBUG] [Thread-59870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:20:09.960 [DEBUG] [Thread-59870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:20:09.960 [DEBUG] [Thread-59870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:20:09.960 [DEBUG] [Thread-59870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:20:09.978 [INFO] [Thread-59870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:20:09.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:20:10.906 [DEBUG] [Thread-59870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:20:10.907 [DEBUG] [Thread-59870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:20:10.907 [DEBUG] [Thread-59870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:20:10.947 [DEBUG] [Thread-59870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:20:10.947 [DEBUG] [Thread-59870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:20:10.949 [DEBUG] [Thread-59870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:20:10.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:20:10.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:20:10.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:20:10.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:20:10.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:20:10.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:20:10.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:20:10.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:20:10.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:20:10.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.721578 -999.00  +19.90  20.89     20   -3.50 1 1 1 1 1   867    0 21.97 -40.70 ----- 15.8 20.9 274.0 25.1 20.5 -26.0 20.5 -25.2 20.2 -24.6 20.5 -25.4
2025-11-17T19:20:10.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:20:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:20:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.721578
2025-11-17T19:20:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:20:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:20:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:20:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:20:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:20:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:20:01', tmtdew=27.81, humidity=14.3, cloud=0.0, wind=18.25, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:19:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:20:10.962 [DEBUG] [Thread-59870] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:20:11.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:20:11.049 [DEBUG] [Thread-59873] [transport.py] [_log()] starting thread (client mode): 0xd3136c80
2025-11-17T19:20:11.050 [DEBUG] [Thread-59873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:20:11.064 [DEBUG] [Thread-59873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:20:11.064 [INFO] [Thread-59873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] client lang: <none>
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] server lang: <none>
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] kex follows: False
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] Compression: none
2025-11-17T19:20:11.072 [DEBUG] [Thread-59873] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:20:11.131 [DEBUG] [Thread-59873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:20:11.131 [DEBUG] [Thread-59873] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:20:11.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:20:11.131 [DEBUG] [Thread-59873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:20:11.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:20:11.188 [DEBUG] [Thread-59873] [transport.py] [_log()] userauth is OK
2025-11-17T19:20:11.188 [DEBUG] [Thread-59873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:20:11.188 [DEBUG] [Thread-59873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:20:11.188 [DEBUG] [Thread-59873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:20:11.188 [DEBUG] [Thread-59873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:20:11.202 [INFO] [Thread-59873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:20:11.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:20:11.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:20:12.052 [DEBUG] [Thread-59873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:20:12.052 [DEBUG] [Thread-59873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:20:12.100 [DEBUG] [Thread-59873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:20:12.100 [DEBUG] [Thread-59873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:20:12.108 [DEBUG] [Thread-59873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:20:12.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:20:12.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:20:12.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:20:12.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:20:12.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:20:12.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:20:12.139 [DEBUG] [Thread-59873] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:20:21.772 [DEBUG] [Thread-59875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:20:21.866 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:20:21.867 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:20:31.064 [DEBUG] [Thread-59876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:20:36.821 [DEBUG] [Thread-59877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:20:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:20:42.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:20:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:20:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 20, 33), 27.8, 14.3, 0.0, 20.75, 19.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:20:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:20:33
2025-11-17T19:20:42.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:20:43.050 [DEBUG] [Thread-59878] [transport.py] [_log()] starting thread (client mode): 0xd31ed600
2025-11-17T19:20:43.050 [DEBUG] [Thread-59878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:20:43.069 [DEBUG] [Thread-59878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:20:43.070 [INFO] [Thread-59878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] client lang: <none>
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] server lang: <none>
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] kex follows: False
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] Compression: none
2025-11-17T19:20:43.073 [DEBUG] [Thread-59878] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:20:43.090 [DEBUG] [Thread-59878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:20:43.090 [DEBUG] [Thread-59878] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:20:43.091 [DEBUG] [Thread-59878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:20:43.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:20:43.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:20:43.093 [DEBUG] [Thread-59878] [transport.py] [_log()] userauth is OK
2025-11-17T19:20:43.093 [DEBUG] [Thread-59878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:20:43.093 [DEBUG] [Thread-59878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:20:43.093 [DEBUG] [Thread-59878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:20:43.093 [DEBUG] [Thread-59878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:20:43.111 [INFO] [Thread-59878] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:20:43.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:20:43.881 [DEBUG] [Thread-59878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:20:43.882 [DEBUG] [Thread-59878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:20:43.882 [DEBUG] [Thread-59878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:20:43.922 [DEBUG] [Thread-59878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:20:43.923 [DEBUG] [Thread-59878] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:20:43.926 [DEBUG] [Thread-59878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:20:43.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:20:43.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:20:43.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:20:43.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:20:43.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:20:43.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:20:43.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:20:43.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:20:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:20:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.722273 -999.00  +19.90  18.78     19   -3.70 1 1 1 1 1   863    0 21.95 -36.02 ----- 15.1 18.8 276.0 25.7 20.5 -26.0 20.5 -25.2 20.2 -24.6 20.4 -25.4
2025-11-17T19:20:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:20:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:20:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.722273
2025-11-17T19:20:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:20:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:20:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:20:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:20:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:20:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:20:33', tmtdew=27.8, humidity=14.3, cloud=0.0, wind=20.75, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:20:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:20:43.951 [DEBUG] [Thread-59878] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:20:44.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:20:44.051 [DEBUG] [Thread-59881] [transport.py] [_log()] starting thread (client mode): 0xd31ef0d0
2025-11-17T19:20:44.051 [DEBUG] [Thread-59881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:20:44.066 [DEBUG] [Thread-59881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:20:44.066 [INFO] [Thread-59881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] client lang: <none>
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] server lang: <none>
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] kex follows: False
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:20:44.074 [DEBUG] [Thread-59881] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:20:44.075 [DEBUG] [Thread-59881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:20:44.075 [DEBUG] [Thread-59881] [transport.py] [_log()] Compression: none
2025-11-17T19:20:44.075 [DEBUG] [Thread-59881] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:20:44.136 [DEBUG] [Thread-59881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:20:44.136 [DEBUG] [Thread-59881] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:20:44.137 [DEBUG] [Thread-59881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:20:44.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:20:44.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:20:44.193 [DEBUG] [Thread-59881] [transport.py] [_log()] userauth is OK
2025-11-17T19:20:44.193 [DEBUG] [Thread-59881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:20:44.193 [DEBUG] [Thread-59881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:20:44.193 [DEBUG] [Thread-59881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:20:44.193 [DEBUG] [Thread-59881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:20:44.212 [INFO] [Thread-59881] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:20:44.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:20:44.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:20:45.052 [DEBUG] [Thread-59881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:20:45.052 [DEBUG] [Thread-59881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:20:45.100 [DEBUG] [Thread-59881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:20:45.100 [DEBUG] [Thread-59881] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:20:45.109 [DEBUG] [Thread-59881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:20:45.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:20:45.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:20:45.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:20:45.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:20:45.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:20:45.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:20:45.143 [DEBUG] [Thread-59881] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:20:51.850 [DEBUG] [Thread-59883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:21:06.881 [DEBUG] [Thread-59884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:21:15.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:21:15.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:21:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:21:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 21, 5), 27.83, 14.27, 0.0, 18.88, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:21:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:21:05
2025-11-17T19:21:15.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:21:16.096 [DEBUG] [Thread-59885] [transport.py] [_log()] starting thread (client mode): 0xd31efa30
2025-11-17T19:21:16.096 [DEBUG] [Thread-59885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:21:16.115 [DEBUG] [Thread-59885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:21:16.115 [INFO] [Thread-59885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:21:16.118 [DEBUG] [Thread-59885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:21:16.118 [DEBUG] [Thread-59885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:21:16.118 [DEBUG] [Thread-59885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:21:16.118 [DEBUG] [Thread-59885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] client lang: <none>
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] server lang: <none>
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] kex follows: False
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:21:16.119 [DEBUG] [Thread-59885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:21:16.120 [DEBUG] [Thread-59885] [transport.py] [_log()] Compression: none
2025-11-17T19:21:16.120 [DEBUG] [Thread-59885] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:21:16.136 [DEBUG] [Thread-59885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:21:16.137 [DEBUG] [Thread-59885] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:21:16.138 [DEBUG] [Thread-59885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:21:16.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:21:16.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:21:16.180 [DEBUG] [Thread-59885] [transport.py] [_log()] userauth is OK
2025-11-17T19:21:16.180 [DEBUG] [Thread-59885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:21:16.180 [DEBUG] [Thread-59885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:21:16.180 [DEBUG] [Thread-59885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:21:16.181 [DEBUG] [Thread-59885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:21:16.199 [INFO] [Thread-59885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:21:16.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:21:16.856 [DEBUG] [Thread-59885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:21:16.856 [DEBUG] [Thread-59885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:21:16.857 [DEBUG] [Thread-59885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:21:16.897 [DEBUG] [Thread-59885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:21:16.898 [DEBUG] [Thread-59885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:21:16.901 [DEBUG] [Thread-59885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:21:16.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:21:16.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:21:16.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:21:16.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:21:16.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:21:16.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:21:16.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:21:16.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:21:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:21:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.722619 -999.00  +19.90  17.79     19   -3.70 1 1 1 1 1   861    0 22.13 -28.25 ----- 13.2 17.8 272.4 23.7 20.5 -26.0 20.4 -25.1 20.1 -24.4 20.4 -25.2
2025-11-17T19:21:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:21:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:21:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.722619
2025-11-17T19:21:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:21:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:21:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:21:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:21:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:21:16.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:21:05', tmtdew=27.83, humidity=14.27, cloud=0.0, wind=18.88, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:20:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:21:16.925 [DEBUG] [Thread-59885] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:21:17.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:21:17.022 [DEBUG] [Thread-59888] [transport.py] [_log()] starting thread (client mode): 0xd31ee2c0
2025-11-17T19:21:17.022 [DEBUG] [Thread-59888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:21:17.037 [DEBUG] [Thread-59888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:21:17.037 [INFO] [Thread-59888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:21:17.044 [DEBUG] [Thread-59888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:21:17.045 [DEBUG] [Thread-59888] [transport.py] [_log()] client lang: <none>
2025-11-17T19:21:17.046 [DEBUG] [Thread-59888] [transport.py] [_log()] server lang: <none>
2025-11-17T19:21:17.046 [DEBUG] [Thread-59888] [transport.py] [_log()] kex follows: False
2025-11-17T19:21:17.046 [DEBUG] [Thread-59888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:21:17.046 [DEBUG] [Thread-59888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:21:17.046 [DEBUG] [Thread-59888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:21:17.046 [DEBUG] [Thread-59888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:21:17.046 [DEBUG] [Thread-59888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:21:17.046 [DEBUG] [Thread-59888] [transport.py] [_log()] Compression: none
2025-11-17T19:21:17.047 [DEBUG] [Thread-59888] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:21:17.107 [DEBUG] [Thread-59888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:21:17.108 [DEBUG] [Thread-59888] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:21:17.109 [DEBUG] [Thread-59888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:21:17.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:21:17.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:21:17.167 [DEBUG] [Thread-59888] [transport.py] [_log()] userauth is OK
2025-11-17T19:21:17.168 [DEBUG] [Thread-59888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:21:17.168 [DEBUG] [Thread-59888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:21:17.168 [DEBUG] [Thread-59888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:21:17.168 [DEBUG] [Thread-59888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:21:17.192 [INFO] [Thread-59888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:21:17.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:21:17.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:21:18.040 [DEBUG] [Thread-59888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:21:18.040 [DEBUG] [Thread-59888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:21:18.088 [DEBUG] [Thread-59888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:21:18.088 [DEBUG] [Thread-59888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:21:18.097 [DEBUG] [Thread-59888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:21:18.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:21:18.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:21:18.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:21:18.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:21:18.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:21:18.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:21:18.132 [DEBUG] [Thread-59888] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:21:21.909 [DEBUG] [Thread-59890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:21:28.018 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:21:28.019 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:21:31.142 [DEBUG] [Thread-59891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:21:36.944 [DEBUG] [Thread-59892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:21:48.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:21:48.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:21:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:21:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 21, 37), 27.88, 14.27, 0.0, 20.42, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:21:48.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:21:37
2025-11-17T19:21:48.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:21:49.083 [DEBUG] [Thread-59893] [transport.py] [_log()] starting thread (client mode): 0xd07848b0
2025-11-17T19:21:49.084 [DEBUG] [Thread-59893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:21:49.104 [DEBUG] [Thread-59893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:21:49.104 [INFO] [Thread-59893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:21:49.107 [DEBUG] [Thread-59893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:21:49.107 [DEBUG] [Thread-59893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:21:49.108 [DEBUG] [Thread-59893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:21:49.108 [DEBUG] [Thread-59893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:21:49.108 [DEBUG] [Thread-59893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:21:49.108 [DEBUG] [Thread-59893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:21:49.108 [DEBUG] [Thread-59893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:21:49.108 [DEBUG] [Thread-59893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:21:49.108 [DEBUG] [Thread-59893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:21:49.108 [DEBUG] [Thread-59893] [transport.py] [_log()] client lang: <none>
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] server lang: <none>
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] kex follows: False
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] Compression: none
2025-11-17T19:21:49.109 [DEBUG] [Thread-59893] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:21:49.127 [DEBUG] [Thread-59893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:21:49.128 [DEBUG] [Thread-59893] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:21:49.129 [DEBUG] [Thread-59893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:21:49.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:21:49.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:21:49.169 [DEBUG] [Thread-59893] [transport.py] [_log()] userauth is OK
2025-11-17T19:21:49.169 [DEBUG] [Thread-59893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:21:49.169 [DEBUG] [Thread-59893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:21:49.169 [DEBUG] [Thread-59893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:21:49.170 [DEBUG] [Thread-59893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:21:49.209 [INFO] [Thread-59893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:21:49.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:21:49.956 [DEBUG] [Thread-59893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:21:49.956 [DEBUG] [Thread-59893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:21:49.956 [DEBUG] [Thread-59893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:21:49.998 [DEBUG] [Thread-59893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:21:49.998 [DEBUG] [Thread-59893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:21:50.001 [DEBUG] [Thread-59893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:21:50.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:21:50.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:21:50.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:21:50.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:21:50.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:21:50.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:21:50.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:21:50.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:21:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:21:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.722967 -999.00  +19.90  18.98     19   -3.70 1 1 1 1 1   858    0 22.97 -21.16 ----- 14.9 19.0 275.2 25.0 20.4 -26.0 20.4 -25.0 20.1 -24.5 20.4 -25.2
2025-11-17T19:21:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:21:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:21:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.722967
2025-11-17T19:21:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:21:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:21:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:21:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:21:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:21:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:21:37', tmtdew=27.88, humidity=14.27, cloud=0.0, wind=20.42, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:21:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:21:50.027 [DEBUG] [Thread-59893] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:21:50.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:21:50.133 [DEBUG] [Thread-59896] [transport.py] [_log()] starting thread (client mode): 0xd0787d30
2025-11-17T19:21:50.133 [DEBUG] [Thread-59896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:21:50.148 [DEBUG] [Thread-59896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:21:50.148 [INFO] [Thread-59896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:21:50.156 [DEBUG] [Thread-59896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:21:50.156 [DEBUG] [Thread-59896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:21:50.156 [DEBUG] [Thread-59896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:21:50.156 [DEBUG] [Thread-59896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] client lang: <none>
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] server lang: <none>
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] kex follows: False
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:21:50.157 [DEBUG] [Thread-59896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:21:50.158 [DEBUG] [Thread-59896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:21:50.158 [DEBUG] [Thread-59896] [transport.py] [_log()] Compression: none
2025-11-17T19:21:50.158 [DEBUG] [Thread-59896] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:21:50.217 [DEBUG] [Thread-59896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:21:50.217 [DEBUG] [Thread-59896] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:21:50.218 [DEBUG] [Thread-59896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:21:50.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:21:50.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:21:50.277 [DEBUG] [Thread-59896] [transport.py] [_log()] userauth is OK
2025-11-17T19:21:50.277 [DEBUG] [Thread-59896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:21:50.277 [DEBUG] [Thread-59896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:21:50.277 [DEBUG] [Thread-59896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:21:50.277 [DEBUG] [Thread-59896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:21:50.300 [INFO] [Thread-59896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:21:50.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:21:50.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:21:51.155 [DEBUG] [Thread-59896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:21:51.155 [DEBUG] [Thread-59896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:21:51.203 [DEBUG] [Thread-59896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:21:51.203 [DEBUG] [Thread-59896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:21:51.212 [DEBUG] [Thread-59896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:21:51.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:21:51.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:21:51.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:21:51.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:21:51.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:21:51.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:21:51.246 [DEBUG] [Thread-59896] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:21:51.976 [DEBUG] [Thread-59898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:22:07.017 [DEBUG] [Thread-59899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:22:21.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:22:21.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:22:21.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:22:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 22, 9), 27.85, 14.3, 0.0, 22.57, 19.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:22:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:22:09
2025-11-17T19:22:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:22:22.041 [DEBUG] [Thread-59900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:22:22.180 [DEBUG] [Thread-59901] [transport.py] [_log()] starting thread (client mode): 0xd31eefe0
2025-11-17T19:22:22.180 [DEBUG] [Thread-59901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:22:22.200 [DEBUG] [Thread-59901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:22:22.201 [INFO] [Thread-59901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:22:22.203 [DEBUG] [Thread-59901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:22:22.203 [DEBUG] [Thread-59901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] client lang: <none>
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] server lang: <none>
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] kex follows: False
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:22:22.204 [DEBUG] [Thread-59901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:22:22.205 [DEBUG] [Thread-59901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:22:22.205 [DEBUG] [Thread-59901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:22:22.205 [DEBUG] [Thread-59901] [transport.py] [_log()] Compression: none
2025-11-17T19:22:22.205 [DEBUG] [Thread-59901] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:22:22.223 [DEBUG] [Thread-59901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:22:22.223 [DEBUG] [Thread-59901] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:22:22.224 [DEBUG] [Thread-59901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:22:22.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:22:22.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:22:22.224 [DEBUG] [Thread-59901] [transport.py] [_log()] userauth is OK
2025-11-17T19:22:22.225 [DEBUG] [Thread-59901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:22:22.225 [DEBUG] [Thread-59901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:22:22.225 [DEBUG] [Thread-59901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:22:22.225 [DEBUG] [Thread-59901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:22:22.248 [INFO] [Thread-59901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:22:22.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:22:22.887 [DEBUG] [Thread-59901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:22:22.887 [DEBUG] [Thread-59901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:22:22.887 [DEBUG] [Thread-59901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:22:22.927 [DEBUG] [Thread-59901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:22:22.928 [DEBUG] [Thread-59901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:22:22.931 [DEBUG] [Thread-59901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:22:22.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:22:22.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:22:22.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:22:22.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:22:22.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:22:22.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:22:22.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:22:22.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:22:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:22:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.723314 -999.00  +19.90  24.98     19   -3.70 1 1 1 1 1   856    0 23.22 -16.82 ----- 24.7 25.0 273.2 30.7 20.4 -25.9 20.4 -24.9 20.1 -24.4 20.3 -25.2
2025-11-17T19:22:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:22:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:22:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.723314
2025-11-17T19:22:22.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:22:22.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:22:22.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:22:22.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:22:22.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:22:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:22:09', tmtdew=27.85, humidity=14.3, cloud=0.0, wind=22.57, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:21:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:22:22.954 [DEBUG] [Thread-59901] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:22:23.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:22:23.057 [DEBUG] [Thread-59904] [transport.py] [_log()] starting thread (client mode): 0xd31368f0
2025-11-17T19:22:23.057 [DEBUG] [Thread-59904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:22:23.071 [DEBUG] [Thread-59904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:22:23.071 [INFO] [Thread-59904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:22:23.080 [DEBUG] [Thread-59904] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:22:23.080 [DEBUG] [Thread-59904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:22:23.080 [DEBUG] [Thread-59904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:22:23.080 [DEBUG] [Thread-59904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:22:23.080 [DEBUG] [Thread-59904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:22:23.080 [DEBUG] [Thread-59904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:22:23.080 [DEBUG] [Thread-59904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] client lang: <none>
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] server lang: <none>
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] kex follows: False
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:22:23.081 [DEBUG] [Thread-59904] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:22:23.082 [DEBUG] [Thread-59904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:22:23.082 [DEBUG] [Thread-59904] [transport.py] [_log()] Compression: none
2025-11-17T19:22:23.082 [DEBUG] [Thread-59904] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:22:23.140 [DEBUG] [Thread-59904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:22:23.140 [DEBUG] [Thread-59904] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:22:23.141 [DEBUG] [Thread-59904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:22:23.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:22:23.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:22:23.196 [DEBUG] [Thread-59904] [transport.py] [_log()] userauth is OK
2025-11-17T19:22:23.196 [DEBUG] [Thread-59904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:22:23.196 [DEBUG] [Thread-59904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:22:23.197 [DEBUG] [Thread-59904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:22:23.197 [DEBUG] [Thread-59904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:22:23.221 [INFO] [Thread-59904] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:22:23.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:22:23.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:22:24.102 [DEBUG] [Thread-59904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:22:24.102 [DEBUG] [Thread-59904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:22:24.150 [DEBUG] [Thread-59904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:22:24.150 [DEBUG] [Thread-59904] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:22:24.159 [DEBUG] [Thread-59904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:22:24.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:22:24.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:22:24.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:22:24.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:22:24.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:22:24.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:22:24.194 [DEBUG] [Thread-59904] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:22:31.220 [DEBUG] [Thread-59906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:22:33.353 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:22:33.354 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:22:37.068 [DEBUG] [Thread-59907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:22:52.115 [DEBUG] [Thread-59908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:22:54.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:22:54.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:22:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:22:54.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 22, 41), 27.92, 14.2, 0.0, 21.74, 19.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:22:54.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:22:41
2025-11-17T19:22:54.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:22:55.129 [DEBUG] [Thread-59909] [transport.py] [_log()] starting thread (client mode): 0xd0787490
2025-11-17T19:22:55.129 [DEBUG] [Thread-59909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:22:55.149 [DEBUG] [Thread-59909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:22:55.149 [INFO] [Thread-59909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:22:55.150 [DEBUG] [Thread-59909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:22:55.150 [DEBUG] [Thread-59909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:22:55.150 [DEBUG] [Thread-59909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] client lang: <none>
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] server lang: <none>
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] kex follows: False
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] Compression: none
2025-11-17T19:22:55.151 [DEBUG] [Thread-59909] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:22:55.162 [DEBUG] [Thread-59909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:22:55.162 [DEBUG] [Thread-59909] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:22:55.163 [DEBUG] [Thread-59909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:22:55.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:22:55.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:22:55.168 [DEBUG] [Thread-59909] [transport.py] [_log()] userauth is OK
2025-11-17T19:22:55.168 [DEBUG] [Thread-59909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:22:55.169 [DEBUG] [Thread-59909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:22:55.169 [DEBUG] [Thread-59909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:22:55.169 [DEBUG] [Thread-59909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:22:55.205 [INFO] [Thread-59909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:22:55.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:22:55.875 [DEBUG] [Thread-59909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:22:55.875 [DEBUG] [Thread-59909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:22:55.875 [DEBUG] [Thread-59909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:22:55.916 [DEBUG] [Thread-59909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:22:55.916 [DEBUG] [Thread-59909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:22:55.919 [DEBUG] [Thread-59909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:22:55.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:22:55.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:22:55.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:22:55.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:22:55.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:22:55.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:22:55.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:22:55.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:22:55.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:22:55.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.723661 -999.00  +19.80  20.84     19   -3.80 1 1 1 1 1   852    0 22.67 -14.87 ----- 19.1 20.8 272.8 29.3 20.4 -25.9 20.3 -25.0 20.0 -24.3 20.3 -25.1
2025-11-17T19:22:55.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:22:55.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:22:55.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.723661
2025-11-17T19:22:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:22:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:22:55.943 [DEBUG] [Thread-59909] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:22:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:22:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:22:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:22:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:22:41', tmtdew=27.92, humidity=14.2, cloud=0.0, wind=21.74, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:22:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:22:56.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:22:56.047 [DEBUG] [Thread-59912] [transport.py] [_log()] starting thread (client mode): 0xd07849a0
2025-11-17T19:22:56.048 [DEBUG] [Thread-59912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:22:56.067 [DEBUG] [Thread-59912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:22:56.067 [INFO] [Thread-59912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:22:56.074 [DEBUG] [Thread-59912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] client lang: <none>
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] server lang: <none>
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] kex follows: False
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:22:56.075 [DEBUG] [Thread-59912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:22:56.076 [DEBUG] [Thread-59912] [transport.py] [_log()] Compression: none
2025-11-17T19:22:56.076 [DEBUG] [Thread-59912] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:22:56.138 [DEBUG] [Thread-59912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:22:56.138 [DEBUG] [Thread-59912] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:22:56.139 [DEBUG] [Thread-59912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:22:56.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:22:56.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:22:56.196 [DEBUG] [Thread-59912] [transport.py] [_log()] userauth is OK
2025-11-17T19:22:56.197 [DEBUG] [Thread-59912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:22:56.197 [DEBUG] [Thread-59912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:22:56.197 [DEBUG] [Thread-59912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:22:56.197 [DEBUG] [Thread-59912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:22:56.216 [INFO] [Thread-59912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:22:56.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:22:56.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:22:57.080 [DEBUG] [Thread-59912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:22:57.080 [DEBUG] [Thread-59912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:22:57.128 [DEBUG] [Thread-59912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:22:57.128 [DEBUG] [Thread-59912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:22:57.137 [DEBUG] [Thread-59912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:22:57.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:22:57.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:22:57.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:22:57.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:22:57.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:22:57.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:22:57.171 [DEBUG] [Thread-59912] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:23:07.145 [DEBUG] [Thread-59914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:23:22.188 [DEBUG] [Thread-59915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:23:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:23:27.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:23:27.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:23:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 23, 13), 27.9, 14.24, 0.0, 21.88, 19.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:23:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:23:13
2025-11-17T19:23:27.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:23:28.110 [DEBUG] [Thread-59916] [transport.py] [_log()] starting thread (client mode): 0xd0785ff0
2025-11-17T19:23:28.111 [DEBUG] [Thread-59916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:23:28.132 [DEBUG] [Thread-59916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:23:28.132 [INFO] [Thread-59916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] client lang: <none>
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] server lang: <none>
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] kex follows: False
2025-11-17T19:23:28.135 [DEBUG] [Thread-59916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:23:28.136 [DEBUG] [Thread-59916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:23:28.136 [DEBUG] [Thread-59916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:23:28.136 [DEBUG] [Thread-59916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:23:28.136 [DEBUG] [Thread-59916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:23:28.136 [DEBUG] [Thread-59916] [transport.py] [_log()] Compression: none
2025-11-17T19:23:28.136 [DEBUG] [Thread-59916] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:23:28.155 [DEBUG] [Thread-59916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:23:28.156 [DEBUG] [Thread-59916] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:23:28.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:23:28.157 [DEBUG] [Thread-59916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:23:28.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:23:28.159 [DEBUG] [Thread-59916] [transport.py] [_log()] userauth is OK
2025-11-17T19:23:28.159 [DEBUG] [Thread-59916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:23:28.159 [DEBUG] [Thread-59916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:23:28.159 [DEBUG] [Thread-59916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:23:28.159 [DEBUG] [Thread-59916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:23:28.182 [INFO] [Thread-59916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:23:28.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:23:28.834 [DEBUG] [Thread-59916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:23:28.835 [DEBUG] [Thread-59916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:23:28.835 [DEBUG] [Thread-59916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:23:28.875 [DEBUG] [Thread-59916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:23:28.876 [DEBUG] [Thread-59916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:23:28.879 [DEBUG] [Thread-59916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:23:28.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:23:28.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:23:28.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:23:28.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:23:28.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:23:28.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:23:28.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:23:28.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:23:28.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:23:28.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.724009 -999.00  +19.80  15.72     19   -3.80 1 1 1 1 1   849    0 22.81 -11.44 ----- 17.3 15.7 279.8 21.3 20.4 -25.9 20.3 -24.9 20.0 -24.2 20.3 -25.0
2025-11-17T19:23:28.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:23:28.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:23:28.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.724009
2025-11-17T19:23:28.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:23:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:23:13', tmtdew=27.9, humidity=14.24, cloud=0.0, wind=21.88, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:22:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:23:28.902 [DEBUG] [Thread-59916] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:23:28.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:23:29.003 [DEBUG] [Thread-59919] [transport.py] [_log()] starting thread (client mode): 0xd0784ac0
2025-11-17T19:23:29.003 [DEBUG] [Thread-59919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:23:29.022 [DEBUG] [Thread-59919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:23:29.022 [INFO] [Thread-59919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:23:29.029 [DEBUG] [Thread-59919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:23:29.030 [DEBUG] [Thread-59919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:23:29.030 [DEBUG] [Thread-59919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:23:29.030 [DEBUG] [Thread-59919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:23:29.030 [DEBUG] [Thread-59919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:23:29.030 [DEBUG] [Thread-59919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:23:29.030 [DEBUG] [Thread-59919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:23:29.030 [DEBUG] [Thread-59919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:23:29.030 [DEBUG] [Thread-59919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:23:29.031 [DEBUG] [Thread-59919] [transport.py] [_log()] client lang: <none>
2025-11-17T19:23:29.031 [DEBUG] [Thread-59919] [transport.py] [_log()] server lang: <none>
2025-11-17T19:23:29.031 [DEBUG] [Thread-59919] [transport.py] [_log()] kex follows: False
2025-11-17T19:23:29.031 [DEBUG] [Thread-59919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:23:29.031 [DEBUG] [Thread-59919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:23:29.031 [DEBUG] [Thread-59919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:23:29.031 [DEBUG] [Thread-59919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:23:29.031 [DEBUG] [Thread-59919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:23:29.032 [DEBUG] [Thread-59919] [transport.py] [_log()] Compression: none
2025-11-17T19:23:29.032 [DEBUG] [Thread-59919] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:23:29.090 [DEBUG] [Thread-59919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:23:29.090 [DEBUG] [Thread-59919] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:23:29.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:23:29.091 [DEBUG] [Thread-59919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:23:29.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:23:29.148 [DEBUG] [Thread-59919] [transport.py] [_log()] userauth is OK
2025-11-17T19:23:29.148 [DEBUG] [Thread-59919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:23:29.149 [DEBUG] [Thread-59919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:23:29.149 [DEBUG] [Thread-59919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:23:29.149 [DEBUG] [Thread-59919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:23:29.170 [INFO] [Thread-59919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:23:29.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:23:29.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:23:30.041 [DEBUG] [Thread-59919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:23:30.042 [DEBUG] [Thread-59919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:23:30.089 [DEBUG] [Thread-59919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:23:30.089 [DEBUG] [Thread-59919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:23:30.098 [DEBUG] [Thread-59919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:23:30.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:23:30.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:23:30.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:23:30.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:23:30.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:23:30.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:23:30.132 [DEBUG] [Thread-59919] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:23:31.303 [DEBUG] [Thread-59921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:23:37.213 [DEBUG] [Thread-59922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:23:41.242 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:23:41.243 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:23:52.256 [DEBUG] [Thread-59923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:24:00.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:24:00.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:24:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:24:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 23, 45), 27.8, 14.29, 0.0, 19.71, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:24:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:23:45
2025-11-17T19:24:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:24:01.104 [DEBUG] [Thread-59924] [transport.py] [_log()] starting thread (client mode): 0xd0785ae0
2025-11-17T19:24:01.104 [DEBUG] [Thread-59924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:24:01.125 [DEBUG] [Thread-59924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:24:01.125 [INFO] [Thread-59924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] client lang: <none>
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] server lang: <none>
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] kex follows: False
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] Compression: none
2025-11-17T19:24:01.128 [DEBUG] [Thread-59924] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:24:01.144 [DEBUG] [Thread-59924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:24:01.144 [DEBUG] [Thread-59924] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:24:01.144 [DEBUG] [Thread-59924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:24:01.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:24:01.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:24:01.145 [DEBUG] [Thread-59924] [transport.py] [_log()] userauth is OK
2025-11-17T19:24:01.146 [DEBUG] [Thread-59924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:24:01.146 [DEBUG] [Thread-59924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:24:01.146 [DEBUG] [Thread-59924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:24:01.146 [DEBUG] [Thread-59924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:24:01.163 [INFO] [Thread-59924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:24:01.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:24:01.911 [DEBUG] [Thread-59924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:24:01.911 [DEBUG] [Thread-59924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:24:01.911 [DEBUG] [Thread-59924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:24:01.952 [DEBUG] [Thread-59924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:24:01.952 [DEBUG] [Thread-59924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:24:01.954 [DEBUG] [Thread-59924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:24:01.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:24:01.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:24:01.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:24:01.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:24:01.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:24:01.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:24:01.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:24:01.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:24:01.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:24:01.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.724356 -999.00  +19.80  17.42     19   -3.80 1 1 1 1 1   845    0 23.25 -8.82 ----- 19.1 17.4 280.2 20.3 20.3 -25.8 20.3 -24.9 20.0 -24.0 20.2 -24.9
2025-11-17T19:24:01.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:24:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:24:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.724356
2025-11-17T19:24:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:24:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:24:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:24:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:24:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:24:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:23:45', tmtdew=27.8, humidity=14.29, cloud=0.0, wind=19.71, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:23:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:24:01.972 [DEBUG] [Thread-59924] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:24:02.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:24:02.055 [DEBUG] [Thread-59927] [transport.py] [_log()] starting thread (client mode): 0xd0785240
2025-11-17T19:24:02.055 [DEBUG] [Thread-59927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:24:02.070 [DEBUG] [Thread-59927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:24:02.070 [INFO] [Thread-59927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:24:02.077 [DEBUG] [Thread-59927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:24:02.077 [DEBUG] [Thread-59927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:24:02.077 [DEBUG] [Thread-59927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] client lang: <none>
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] server lang: <none>
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] kex follows: False
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] Compression: none
2025-11-17T19:24:02.078 [DEBUG] [Thread-59927] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:24:02.135 [DEBUG] [Thread-59927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:24:02.135 [DEBUG] [Thread-59927] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:24:02.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:24:02.135 [DEBUG] [Thread-59927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:24:02.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:24:02.192 [DEBUG] [Thread-59927] [transport.py] [_log()] userauth is OK
2025-11-17T19:24:02.192 [DEBUG] [Thread-59927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:24:02.192 [DEBUG] [Thread-59927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:24:02.192 [DEBUG] [Thread-59927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:24:02.192 [DEBUG] [Thread-59927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:24:02.207 [INFO] [Thread-59927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:24:02.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:24:02.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:24:03.043 [DEBUG] [Thread-59927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:24:03.043 [DEBUG] [Thread-59927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:24:03.091 [DEBUG] [Thread-59927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:24:03.091 [DEBUG] [Thread-59927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:24:03.099 [DEBUG] [Thread-59927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:24:03.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:24:03.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:24:03.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:24:03.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:24:03.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:24:03.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:24:03.131 [DEBUG] [Thread-59927] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:24:07.290 [DEBUG] [Thread-59929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:24:22.341 [DEBUG] [Thread-59930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:24:31.376 [DEBUG] [Thread-59931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:24:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:24:33.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:24:33.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:24:33.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 24, 17), 27.8, 14.29, 0.0, 18.65, 19.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:24:33.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:24:17
2025-11-17T19:24:33.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:24:34.078 [DEBUG] [Thread-59932] [transport.py] [_log()] starting thread (client mode): 0xd31ed5a0
2025-11-17T19:24:34.078 [DEBUG] [Thread-59932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:24:34.098 [DEBUG] [Thread-59932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:24:34.098 [INFO] [Thread-59932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:24:34.099 [DEBUG] [Thread-59932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] client lang: <none>
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] server lang: <none>
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] kex follows: False
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:24:34.100 [DEBUG] [Thread-59932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:24:34.101 [DEBUG] [Thread-59932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:24:34.101 [DEBUG] [Thread-59932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:24:34.101 [DEBUG] [Thread-59932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:24:34.101 [DEBUG] [Thread-59932] [transport.py] [_log()] Compression: none
2025-11-17T19:24:34.101 [DEBUG] [Thread-59932] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:24:34.119 [DEBUG] [Thread-59932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:24:34.119 [DEBUG] [Thread-59932] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:24:34.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:24:34.121 [DEBUG] [Thread-59932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:24:34.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:24:34.123 [DEBUG] [Thread-59932] [transport.py] [_log()] userauth is OK
2025-11-17T19:24:34.123 [DEBUG] [Thread-59932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:24:34.123 [DEBUG] [Thread-59932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:24:34.123 [DEBUG] [Thread-59932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:24:34.123 [DEBUG] [Thread-59932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:24:34.146 [INFO] [Thread-59932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:24:34.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:24:34.765 [DEBUG] [Thread-59932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:24:34.765 [DEBUG] [Thread-59932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:24:34.766 [DEBUG] [Thread-59932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:24:34.806 [DEBUG] [Thread-59932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:24:34.806 [DEBUG] [Thread-59932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:24:34.809 [DEBUG] [Thread-59932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:24:34.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:24:34.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:24:34.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:24:34.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:24:34.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:24:34.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:24:34.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:24:34.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:24:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:24:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.724703 -999.00  +19.80  18.68     20   -3.80 1 1 1 1 1   841    0 23.09 -6.46 ----- 18.1 18.7 271.8 23.5 20.3 -25.7 20.2 -24.8 20.0 -24.3 20.2 -24.9
2025-11-17T19:24:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:24:34.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:24:34.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.724703
2025-11-17T19:24:34.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:24:34.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:24:34.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:24:34.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:24:34.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:24:34.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:24:17', tmtdew=27.8, humidity=14.29, cloud=0.0, wind=18.65, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:23:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:24:34.834 [DEBUG] [Thread-59932] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:24:34.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:24:34.930 [DEBUG] [Thread-59935] [transport.py] [_log()] starting thread (client mode): 0xd0786e00
2025-11-17T19:24:34.930 [DEBUG] [Thread-59935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:24:34.946 [DEBUG] [Thread-59935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:24:34.946 [INFO] [Thread-59935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:24:34.954 [DEBUG] [Thread-59935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:24:34.954 [DEBUG] [Thread-59935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:24:34.954 [DEBUG] [Thread-59935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] client lang: <none>
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] server lang: <none>
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] kex follows: False
2025-11-17T19:24:34.955 [DEBUG] [Thread-59935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:24:34.956 [DEBUG] [Thread-59935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:24:34.956 [DEBUG] [Thread-59935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:24:34.956 [DEBUG] [Thread-59935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:24:34.956 [DEBUG] [Thread-59935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:24:34.956 [DEBUG] [Thread-59935] [transport.py] [_log()] Compression: none
2025-11-17T19:24:34.956 [DEBUG] [Thread-59935] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:24:35.012 [DEBUG] [Thread-59935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:24:35.013 [DEBUG] [Thread-59935] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:24:35.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:24:35.014 [DEBUG] [Thread-59935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:24:35.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:24:35.069 [DEBUG] [Thread-59935] [transport.py] [_log()] userauth is OK
2025-11-17T19:24:35.069 [DEBUG] [Thread-59935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:24:35.069 [DEBUG] [Thread-59935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:24:35.069 [DEBUG] [Thread-59935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:24:35.069 [DEBUG] [Thread-59935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:24:35.088 [INFO] [Thread-59935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:24:35.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:24:35.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:24:35.974 [DEBUG] [Thread-59935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:24:35.974 [DEBUG] [Thread-59935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:24:36.022 [DEBUG] [Thread-59935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:24:36.022 [DEBUG] [Thread-59935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:24:36.032 [DEBUG] [Thread-59935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:24:36.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:24:36.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:24:36.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:24:36.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:24:36.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:24:36.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:24:36.063 [DEBUG] [Thread-59935] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:24:37.372 [DEBUG] [Thread-59937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:24:49.711 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:24:49.712 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:24:52.411 [DEBUG] [Thread-59938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:25:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:25:06.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:25:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:25:06.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 24, 49), 27.68, 14.79, 0.0, 17.26, 19.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:25:06.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:24:49
2025-11-17T19:25:06.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:25:07.004 [DEBUG] [Thread-59939] [transport.py] [_log()] starting thread (client mode): 0xd0784b50
2025-11-17T19:25:07.004 [DEBUG] [Thread-59939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:25:07.017 [DEBUG] [Thread-59939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:25:07.017 [INFO] [Thread-59939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] client lang: <none>
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] server lang: <none>
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] kex follows: False
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] Compression: none
2025-11-17T19:25:07.021 [DEBUG] [Thread-59939] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:25:07.040 [DEBUG] [Thread-59939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:25:07.040 [DEBUG] [Thread-59939] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:25:07.041 [DEBUG] [Thread-59939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:25:07.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:25:07.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:25:07.043 [DEBUG] [Thread-59939] [transport.py] [_log()] userauth is OK
2025-11-17T19:25:07.043 [DEBUG] [Thread-59939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:25:07.043 [DEBUG] [Thread-59939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:25:07.043 [DEBUG] [Thread-59939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:25:07.043 [DEBUG] [Thread-59939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:25:07.077 [INFO] [Thread-59939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:25:07.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:25:07.455 [DEBUG] [Thread-59941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:25:10.541 [DEBUG] [Thread-59939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:25:10.541 [DEBUG] [Thread-59939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:25:10.541 [DEBUG] [Thread-59939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:25:10.582 [DEBUG] [Thread-59939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:25:10.582 [DEBUG] [Thread-59939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:25:10.585 [DEBUG] [Thread-59939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:25:10.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:25:10.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:25:10.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:25:10.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:25:10.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:25:10.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:25:10.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:25:10.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:25:10.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:25:10.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.725745 -999.00  +19.60  15.70     20   -3.70 1 1 1 1 1   827    0 23.27 -1.94 ----- 16.7 15.7 274.2 22.6 20.2 -25.6 20.2 -24.6 19.9 -23.9 20.1 -24.4
2025-11-17T19:25:10.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:25:10.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:25:10.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.725745
2025-11-17T19:25:10.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:25:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:25:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:25:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:25:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:25:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:24:49', tmtdew=27.68, humidity=14.79, cloud=0.0, wind=17.26, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:25:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:25:10.636 [DEBUG] [Thread-59939] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:25:10.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:25:10.731 [DEBUG] [Thread-59942] [transport.py] [_log()] starting thread (client mode): 0xd31361d0
2025-11-17T19:25:10.731 [DEBUG] [Thread-59942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:25:10.746 [DEBUG] [Thread-59942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:25:10.746 [INFO] [Thread-59942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:25:10.753 [DEBUG] [Thread-59942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:25:10.753 [DEBUG] [Thread-59942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:25:10.753 [DEBUG] [Thread-59942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:25:10.753 [DEBUG] [Thread-59942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:25:10.753 [DEBUG] [Thread-59942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:25:10.753 [DEBUG] [Thread-59942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] client lang: <none>
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] server lang: <none>
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] kex follows: False
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:25:10.754 [DEBUG] [Thread-59942] [transport.py] [_log()] Compression: none
2025-11-17T19:25:10.755 [DEBUG] [Thread-59942] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:25:10.812 [DEBUG] [Thread-59942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:25:10.812 [DEBUG] [Thread-59942] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:25:10.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:25:10.813 [DEBUG] [Thread-59942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:25:10.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:25:10.868 [DEBUG] [Thread-59942] [transport.py] [_log()] userauth is OK
2025-11-17T19:25:10.868 [DEBUG] [Thread-59942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:25:10.869 [DEBUG] [Thread-59942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:25:10.869 [DEBUG] [Thread-59942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:25:10.869 [DEBUG] [Thread-59942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:25:10.888 [INFO] [Thread-59942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:25:10.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:25:10.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:25:11.785 [DEBUG] [Thread-59942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:25:11.786 [DEBUG] [Thread-59942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:25:11.833 [DEBUG] [Thread-59942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:25:11.833 [DEBUG] [Thread-59942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:25:11.842 [DEBUG] [Thread-59942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:25:11.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:25:11.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:25:11.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:25:11.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:25:11.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:25:11.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:25:11.876 [DEBUG] [Thread-59942] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:25:22.483 [DEBUG] [Thread-59944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:25:31.454 [DEBUG] [Thread-59945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:25:37.519 [DEBUG] [Thread-59946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:25:41.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:25:41.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:25:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:25:42.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 25, 21), 27.65, 14.82, 0.0, 18.42, 19.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:25:42.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:25:21
2025-11-17T19:25:42.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:25:42.810 [DEBUG] [Thread-59947] [transport.py] [_log()] starting thread (client mode): 0xd31ef280
2025-11-17T19:25:42.811 [DEBUG] [Thread-59947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:25:42.831 [DEBUG] [Thread-59947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:25:42.831 [INFO] [Thread-59947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:25:42.834 [DEBUG] [Thread-59947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] client lang: <none>
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] server lang: <none>
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] kex follows: False
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] Compression: none
2025-11-17T19:25:42.835 [DEBUG] [Thread-59947] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:25:42.856 [DEBUG] [Thread-59947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:25:42.857 [DEBUG] [Thread-59947] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:25:42.857 [DEBUG] [Thread-59947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:25:42.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:25:42.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:25:42.859 [DEBUG] [Thread-59947] [transport.py] [_log()] userauth is OK
2025-11-17T19:25:42.859 [DEBUG] [Thread-59947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:25:42.859 [DEBUG] [Thread-59947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:25:42.859 [DEBUG] [Thread-59947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:25:42.859 [DEBUG] [Thread-59947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:25:42.883 [INFO] [Thread-59947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:25:42.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:25:43.444 [DEBUG] [Thread-59947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:25:43.444 [DEBUG] [Thread-59947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:25:43.444 [DEBUG] [Thread-59947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:25:43.484 [DEBUG] [Thread-59947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:25:43.484 [DEBUG] [Thread-59947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:25:43.487 [DEBUG] [Thread-59947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:25:43.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:25:43.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:25:43.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:25:43.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:25:43.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:25:43.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:25:43.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:25:43.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:25:43.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:25:43.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.726092 -999.00  +19.60  16.45     20   -3.70 1 1 1 1 1   821    0 23.32 -0.99 ----- 16.1 16.4 273.8 23.3 20.2 -25.3 20.1 -24.4 19.9 -23.7 20.1 -24.4
2025-11-17T19:25:43.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:25:43.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:25:43.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.726092
2025-11-17T19:25:43.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:25:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:25:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:25:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:25:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:25:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:25:21', tmtdew=27.65, humidity=14.82, cloud=0.0, wind=18.42, temperature=19.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:25:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:25:43.514 [DEBUG] [Thread-59947] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:25:43.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:25:43.607 [DEBUG] [Thread-59950] [transport.py] [_log()] starting thread (client mode): 0xd31efb20
2025-11-17T19:25:43.607 [DEBUG] [Thread-59950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:25:43.624 [DEBUG] [Thread-59950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:25:43.625 [INFO] [Thread-59950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:25:43.632 [DEBUG] [Thread-59950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:25:43.632 [DEBUG] [Thread-59950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] client lang: <none>
2025-11-17T19:25:43.633 [DEBUG] [Thread-59950] [transport.py] [_log()] server lang: <none>
2025-11-17T19:25:43.634 [DEBUG] [Thread-59950] [transport.py] [_log()] kex follows: False
2025-11-17T19:25:43.634 [DEBUG] [Thread-59950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:25:43.634 [DEBUG] [Thread-59950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:25:43.634 [DEBUG] [Thread-59950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:25:43.634 [DEBUG] [Thread-59950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:25:43.634 [DEBUG] [Thread-59950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:25:43.634 [DEBUG] [Thread-59950] [transport.py] [_log()] Compression: none
2025-11-17T19:25:43.634 [DEBUG] [Thread-59950] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:25:43.697 [DEBUG] [Thread-59950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:25:43.698 [DEBUG] [Thread-59950] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:25:43.698 [DEBUG] [Thread-59950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:25:43.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:25:43.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:25:43.754 [DEBUG] [Thread-59950] [transport.py] [_log()] userauth is OK
2025-11-17T19:25:43.755 [DEBUG] [Thread-59950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:25:43.755 [DEBUG] [Thread-59950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:25:43.755 [DEBUG] [Thread-59950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:25:43.755 [DEBUG] [Thread-59950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:25:43.775 [INFO] [Thread-59950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:25:43.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:25:43.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:25:44.676 [DEBUG] [Thread-59950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:25:44.676 [DEBUG] [Thread-59950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:25:44.724 [DEBUG] [Thread-59950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:25:44.724 [DEBUG] [Thread-59950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:25:44.734 [DEBUG] [Thread-59950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:25:44.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:25:44.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:25:44.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:25:44.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:25:44.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:25:44.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:25:44.767 [DEBUG] [Thread-59950] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:25:52.550 [DEBUG] [Thread-59952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:25:55.664 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:25:55.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:26:07.586 [DEBUG] [Thread-59953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:26:14.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:26:14.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:26:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:26:15.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 25, 53), 27.68, 14.79, 0.0, 17.57, 19.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:26:15.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:25:53
2025-11-17T19:26:15.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:26:15.695 [DEBUG] [Thread-59954] [transport.py] [_log()] starting thread (client mode): 0xd3136440
2025-11-17T19:26:15.695 [DEBUG] [Thread-59954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:26:15.716 [DEBUG] [Thread-59954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:26:15.717 [INFO] [Thread-59954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] client lang: <none>
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] server lang: <none>
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] kex follows: False
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] Compression: none
2025-11-17T19:26:15.720 [DEBUG] [Thread-59954] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:26:15.738 [DEBUG] [Thread-59954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:26:15.738 [DEBUG] [Thread-59954] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:26:15.739 [DEBUG] [Thread-59954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:26:15.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:26:15.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:26:15.741 [DEBUG] [Thread-59954] [transport.py] [_log()] userauth is OK
2025-11-17T19:26:15.741 [DEBUG] [Thread-59954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:26:15.741 [DEBUG] [Thread-59954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:26:15.741 [DEBUG] [Thread-59954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:26:15.741 [DEBUG] [Thread-59954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:26:15.765 [INFO] [Thread-59954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:26:15.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:26:16.501 [DEBUG] [Thread-59954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:26:16.501 [DEBUG] [Thread-59954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:26:16.502 [DEBUG] [Thread-59954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:26:16.542 [DEBUG] [Thread-59954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:26:16.543 [DEBUG] [Thread-59954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:26:16.545 [DEBUG] [Thread-59954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:26:16.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:26:16.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:26:16.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:26:16.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:26:16.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:26:16.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:26:16.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:26:16.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:26:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:26:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.726092 -999.00  +19.60  16.45     20   -3.70 1 1 1 1 1   821    0 23.32 -0.99 ----- 16.1 16.4 273.8 23.3 20.2 -25.3 20.1 -24.4 19.9 -23.7 20.1 -24.4
2025-11-17T19:26:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:26:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:26:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.726092
2025-11-17T19:26:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:26:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:26:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:26:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:26:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:26:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:25:53', tmtdew=27.68, humidity=14.79, cloud=0.0, wind=17.57, temperature=19.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:25:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:26:16.562 [DEBUG] [Thread-59954] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:26:16.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:26:16.670 [DEBUG] [Thread-59957] [transport.py] [_log()] starting thread (client mode): 0xd31eee30
2025-11-17T19:26:16.670 [DEBUG] [Thread-59957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:26:16.685 [DEBUG] [Thread-59957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:26:16.685 [INFO] [Thread-59957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:26:16.693 [DEBUG] [Thread-59957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:26:16.693 [DEBUG] [Thread-59957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:26:16.693 [DEBUG] [Thread-59957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:26:16.693 [DEBUG] [Thread-59957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:26:16.693 [DEBUG] [Thread-59957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:26:16.693 [DEBUG] [Thread-59957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] client lang: <none>
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] server lang: <none>
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] kex follows: False
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:26:16.694 [DEBUG] [Thread-59957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:26:16.695 [DEBUG] [Thread-59957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:26:16.695 [DEBUG] [Thread-59957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:26:16.695 [DEBUG] [Thread-59957] [transport.py] [_log()] Compression: none
2025-11-17T19:26:16.695 [DEBUG] [Thread-59957] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:26:16.755 [DEBUG] [Thread-59957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:26:16.755 [DEBUG] [Thread-59957] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:26:16.756 [DEBUG] [Thread-59957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:26:16.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:26:16.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:26:16.815 [DEBUG] [Thread-59957] [transport.py] [_log()] userauth is OK
2025-11-17T19:26:16.815 [DEBUG] [Thread-59957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:26:16.815 [DEBUG] [Thread-59957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:26:16.816 [DEBUG] [Thread-59957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:26:16.816 [DEBUG] [Thread-59957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:26:16.835 [INFO] [Thread-59957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:26:16.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:26:16.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:26:17.694 [DEBUG] [Thread-59957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:26:17.694 [DEBUG] [Thread-59957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:26:17.741 [DEBUG] [Thread-59957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:26:17.741 [DEBUG] [Thread-59957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:26:17.750 [DEBUG] [Thread-59957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:26:17.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:26:17.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:26:17.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:26:17.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:26:17.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:26:17.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:26:17.786 [DEBUG] [Thread-59957] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:26:22.617 [DEBUG] [Thread-59959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:26:31.537 [DEBUG] [Thread-59960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:26:37.652 [DEBUG] [Thread-59961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:26:47.434 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:26:47.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:26:47.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:26:47.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:26:48.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 26, 25), 27.7, 14.75, 0.0, 19.5, 19.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:26:48.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:26:25
2025-11-17T19:26:48.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:26:48.736 [DEBUG] [Thread-59962] [transport.py] [_log()] starting thread (client mode): 0xd07858d0
2025-11-17T19:26:48.736 [DEBUG] [Thread-59962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:26:48.758 [DEBUG] [Thread-59962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:26:48.758 [INFO] [Thread-59962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:26:48.761 [DEBUG] [Thread-59962] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:26:48.761 [DEBUG] [Thread-59962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:26:48.761 [DEBUG] [Thread-59962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:26:48.761 [DEBUG] [Thread-59962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:26:48.761 [DEBUG] [Thread-59962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:26:48.761 [DEBUG] [Thread-59962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] client lang: <none>
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] server lang: <none>
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] kex follows: False
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] Compression: none
2025-11-17T19:26:48.762 [DEBUG] [Thread-59962] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:26:48.770 [DEBUG] [Thread-59962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:26:48.771 [DEBUG] [Thread-59962] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:26:48.771 [DEBUG] [Thread-59962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:26:48.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:26:48.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:26:48.773 [DEBUG] [Thread-59962] [transport.py] [_log()] userauth is OK
2025-11-17T19:26:48.773 [DEBUG] [Thread-59962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:26:48.774 [DEBUG] [Thread-59962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:26:48.774 [DEBUG] [Thread-59962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:26:48.774 [DEBUG] [Thread-59962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:26:48.791 [INFO] [Thread-59962] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:26:48.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:26:49.374 [DEBUG] [Thread-59962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:26:49.374 [DEBUG] [Thread-59962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:26:49.374 [DEBUG] [Thread-59962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:26:49.414 [DEBUG] [Thread-59962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:26:49.415 [DEBUG] [Thread-59962] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:26:49.417 [DEBUG] [Thread-59962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:26:49.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:26:49.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:26:49.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:26:49.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:26:49.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:26:49.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:26:49.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:26:49.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:26:49.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:26:49.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.726439 -999.00  +19.60  18.68     20   -3.80 1 1 1 1 1   815    0 23.56 0.16 ----- 15.7 18.7 275.6 22.5 20.1 -25.4 20.1 -24.3 19.8 -23.6 20.1 -24.4
2025-11-17T19:26:49.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:26:49.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:26:49.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.726439
2025-11-17T19:26:49.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:26:49.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:26:49.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:26:49.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:26:49.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:26:49.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:26:25', tmtdew=27.7, humidity=14.75, cloud=0.0, wind=19.5, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:26:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:26:49.443 [DEBUG] [Thread-59962] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:26:49.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:26:49.539 [DEBUG] [Thread-59965] [transport.py] [_log()] starting thread (client mode): 0xd31ed630
2025-11-17T19:26:49.539 [DEBUG] [Thread-59965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:26:49.554 [DEBUG] [Thread-59965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:26:49.554 [INFO] [Thread-59965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:26:49.561 [DEBUG] [Thread-59965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:26:49.561 [DEBUG] [Thread-59965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] client lang: <none>
2025-11-17T19:26:49.562 [DEBUG] [Thread-59965] [transport.py] [_log()] server lang: <none>
2025-11-17T19:26:49.563 [DEBUG] [Thread-59965] [transport.py] [_log()] kex follows: False
2025-11-17T19:26:49.563 [DEBUG] [Thread-59965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:26:49.563 [DEBUG] [Thread-59965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:26:49.563 [DEBUG] [Thread-59965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:26:49.563 [DEBUG] [Thread-59965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:26:49.563 [DEBUG] [Thread-59965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:26:49.563 [DEBUG] [Thread-59965] [transport.py] [_log()] Compression: none
2025-11-17T19:26:49.563 [DEBUG] [Thread-59965] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:26:49.626 [DEBUG] [Thread-59965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:26:49.626 [DEBUG] [Thread-59965] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:26:49.627 [DEBUG] [Thread-59965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:26:49.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:26:49.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:26:49.684 [DEBUG] [Thread-59965] [transport.py] [_log()] userauth is OK
2025-11-17T19:26:49.685 [DEBUG] [Thread-59965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:26:49.685 [DEBUG] [Thread-59965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:26:49.685 [DEBUG] [Thread-59965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:26:49.685 [DEBUG] [Thread-59965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:26:49.704 [INFO] [Thread-59965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:26:49.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:26:49.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:26:50.582 [DEBUG] [Thread-59965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:26:50.582 [DEBUG] [Thread-59965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:26:50.630 [DEBUG] [Thread-59965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:26:50.630 [DEBUG] [Thread-59965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:26:50.639 [DEBUG] [Thread-59965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:26:50.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:26: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')
2025-11-17T19:26: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
2025-11-17T19:26:50.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:26:50.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:26:50.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:26:50.673 [DEBUG] [Thread-59965] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:26:52.680 [DEBUG] [Thread-59967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:27:04.847 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:27:04.848 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:27:07.722 [DEBUG] [Thread-59968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:27:20.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:27:20.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:27:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:27:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 26, 57), 27.62, 14.8, 0.0, 17.84, 19.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:27:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:26:57
2025-11-17T19:27:21.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:27:21.611 [DEBUG] [Thread-59969] [transport.py] [_log()] starting thread (client mode): 0xd078ebc0
2025-11-17T19:27:21.611 [DEBUG] [Thread-59969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:27:21.626 [DEBUG] [Thread-59969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:27:21.626 [INFO] [Thread-59969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:27:21.629 [DEBUG] [Thread-59969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] client lang: <none>
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] server lang: <none>
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] kex follows: False
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] Compression: none
2025-11-17T19:27:21.630 [DEBUG] [Thread-59969] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:27:21.649 [DEBUG] [Thread-59969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:27:21.650 [DEBUG] [Thread-59969] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:27:21.650 [DEBUG] [Thread-59969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:27:21.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:27:21.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:27:21.653 [DEBUG] [Thread-59969] [transport.py] [_log()] userauth is OK
2025-11-17T19:27:21.653 [DEBUG] [Thread-59969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:27:21.653 [DEBUG] [Thread-59969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:27:21.653 [DEBUG] [Thread-59969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:27:21.653 [DEBUG] [Thread-59969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:27:21.669 [INFO] [Thread-59969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:27:21.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:27:22.385 [DEBUG] [Thread-59969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:27:22.385 [DEBUG] [Thread-59969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:27:22.386 [DEBUG] [Thread-59969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:27:22.426 [DEBUG] [Thread-59969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:27:22.426 [DEBUG] [Thread-59969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:27:22.428 [DEBUG] [Thread-59969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:27:22.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:27:22.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:27:22.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:27:22.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:27:22.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:27:22.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:27:22.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:27:22.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:27:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:27:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.726786 -999.00  +19.60  19.99     20   -3.80 1 1 1 1 1   809    0 23.55 1.28 ----- 16.4 20.0 269.8 21.2 20.1 -25.2 20.1 -24.2 19.8 -23.4 20.1 -24.1
2025-11-17T19:27:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:27:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:27:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.726786
2025-11-17T19:27:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:27:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:27:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:27:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:27:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:27:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:26:57', tmtdew=27.62, humidity=14.8, cloud=0.0, wind=17.84, temperature=19.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:26:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:27:22.451 [DEBUG] [Thread-59969] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:27:22.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:27:22.750 [DEBUG] [Thread-59972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:27:31.608 [DEBUG] [Thread-59973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:27:37.794 [DEBUG] [Thread-59974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:27:52.824 [DEBUG] [Thread-59975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:28:07.853 [DEBUG] [Thread-59976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:28:10.229 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:28:10.231 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:28:13.908 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:28:22.885 [DEBUG] [Thread-59977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:28:31.677 [DEBUG] [Thread-59978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:28:37.912 [DEBUG] [Thread-59979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:28:52.945 [DEBUG] [Thread-59980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:29:07.973 [DEBUG] [Thread-59981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:29:16.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:29:16.131 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:29:22.999 [DEBUG] [Thread-59982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:29:31.755 [DEBUG] [Thread-59983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:29:37.723 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T19:29:38.031 [DEBUG] [Thread-59984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:29:53.060 [DEBUG] [Thread-59985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:30:07.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:30:07.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:30:07.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:30:08.090 [DEBUG] [Thread-59986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:30:08.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 29, 37), 27.53, 14.84, 0.0, 15.6, 19.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:30:08.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:29:37
2025-11-17T19:30:08.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:30:08.682 [DEBUG] [Thread-59987] [transport.py] [_log()] starting thread (client mode): 0xd07cf3a0
2025-11-17T19:30:08.682 [DEBUG] [Thread-59987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:30:08.699 [DEBUG] [Thread-59987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:30:08.699 [INFO] [Thread-59987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] client lang: <none>
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] server lang: <none>
2025-11-17T19:30:08.702 [DEBUG] [Thread-59987] [transport.py] [_log()] kex follows: False
2025-11-17T19:30:08.703 [DEBUG] [Thread-59987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:30:08.703 [DEBUG] [Thread-59987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:30:08.703 [DEBUG] [Thread-59987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:30:08.703 [DEBUG] [Thread-59987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:30:08.703 [DEBUG] [Thread-59987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:30:08.703 [DEBUG] [Thread-59987] [transport.py] [_log()] Compression: none
2025-11-17T19:30:08.703 [DEBUG] [Thread-59987] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:30:08.712 [DEBUG] [Thread-59987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:30:08.712 [DEBUG] [Thread-59987] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:30:08.712 [DEBUG] [Thread-59987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:30:08.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:30:08.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:30:08.714 [DEBUG] [Thread-59987] [transport.py] [_log()] userauth is OK
2025-11-17T19:30:08.714 [DEBUG] [Thread-59987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:30:08.714 [DEBUG] [Thread-59987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:30:08.714 [DEBUG] [Thread-59987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:30:08.714 [DEBUG] [Thread-59987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:30:08.731 [INFO] [Thread-59987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:30:08.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:30:11.175 [DEBUG] [Thread-59987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:30:11.175 [DEBUG] [Thread-59987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:30:11.175 [DEBUG] [Thread-59987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:30:11.216 [DEBUG] [Thread-59987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:30:11.216 [DEBUG] [Thread-59987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:30:11.217 [DEBUG] [Thread-59987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:30:11.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:30:11.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:30:11.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:30:11.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:30:11.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:30:11.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:30:11.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.728870 -999.00  +19.50  17.96     20   -3.70 1 1 1 1 1   756    0 23.47 3.98 ----- 23.7 18.0 279.4 22.4 20.0 -24.3 20.0 -23.5 19.7 -22.7 19.9 -23.3
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.728870
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:30:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:29:37', tmtdew=27.53, humidity=14.84, cloud=0.0, wind=15.6, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:29:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:30:11.244 [DEBUG] [Thread-59987] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:30:11.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:30:11.331 [DEBUG] [Thread-59990] [transport.py] [_log()] starting thread (client mode): 0xd31b2590
2025-11-17T19:30:11.331 [DEBUG] [Thread-59990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:30:11.346 [DEBUG] [Thread-59990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:30:11.346 [INFO] [Thread-59990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] client lang: <none>
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] server lang: <none>
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] kex follows: False
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] Compression: none
2025-11-17T19:30:11.358 [DEBUG] [Thread-59990] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:30:11.422 [DEBUG] [Thread-59990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:30:11.423 [DEBUG] [Thread-59990] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:30:11.423 [DEBUG] [Thread-59990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:30:11.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:30:11.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:30:11.482 [DEBUG] [Thread-59990] [transport.py] [_log()] userauth is OK
2025-11-17T19:30:11.482 [DEBUG] [Thread-59990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:30:11.482 [DEBUG] [Thread-59990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:30:11.482 [DEBUG] [Thread-59990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:30:11.482 [DEBUG] [Thread-59990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:30:11.499 [INFO] [Thread-59990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:30:11.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:30:11.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:30:12.352 [DEBUG] [Thread-59990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:30:12.352 [DEBUG] [Thread-59990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:30:12.404 [DEBUG] [Thread-59990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:30:12.404 [DEBUG] [Thread-59990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:30:12.415 [DEBUG] [Thread-59990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:30:12.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:30:12.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:30:12.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:30:12.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:30:12.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:30:12.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:30:12.457 [DEBUG] [Thread-59990] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:30:23.116 [DEBUG] [Thread-59992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:30:23.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:30:23.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:30:31.831 [DEBUG] [Thread-59993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:30:38.155 [DEBUG] [Thread-59994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:30:42.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:30:42.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:30:42.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:30:43.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 30, 9), 27.5, 14.85, 0.0, 16.18, 19.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:30:43.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:30:09
2025-11-17T19:30:43.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:30:43.487 [DEBUG] [Thread-59995] [transport.py] [_log()] starting thread (client mode): 0xd31b3c40
2025-11-17T19:30:43.487 [DEBUG] [Thread-59995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:30:43.506 [DEBUG] [Thread-59995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:30:43.506 [INFO] [Thread-59995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:30:43.507 [DEBUG] [Thread-59995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:30:43.507 [DEBUG] [Thread-59995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] client lang: <none>
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] server lang: <none>
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] kex follows: False
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] Compression: none
2025-11-17T19:30:43.508 [DEBUG] [Thread-59995] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:30:43.519 [DEBUG] [Thread-59995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:30:43.519 [DEBUG] [Thread-59995] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:30:43.519 [DEBUG] [Thread-59995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:30:43.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:30:43.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:30:43.520 [DEBUG] [Thread-59995] [transport.py] [_log()] userauth is OK
2025-11-17T19:30:43.520 [DEBUG] [Thread-59995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:30:43.520 [DEBUG] [Thread-59995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:30:43.520 [DEBUG] [Thread-59995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:30:43.520 [DEBUG] [Thread-59995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:30:43.546 [INFO] [Thread-59995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:30:43.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:30:44.090 [DEBUG] [Thread-59995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:30:44.090 [DEBUG] [Thread-59995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:30:44.090 [DEBUG] [Thread-59995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:30:44.130 [DEBUG] [Thread-59995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:30:44.130 [DEBUG] [Thread-59995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:30:44.133 [DEBUG] [Thread-59995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:30:44.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:30:44.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:30:44.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:30:44.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:30:44.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:30:44.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:30:44.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:30:44.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:30:44.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:30:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.729564 -999.00  +19.50  17.27     20   -3.60 1 1 1 1 1   734    0 23.65 3.20 ----- 18.0 17.3 274.0 25.7 20.0 -24.2 19.9 -23.5 19.6 -22.7 19.9 -23.2
2025-11-17T19:30:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:30:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:30:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.729564
2025-11-17T19:30:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:30:44.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:30:44.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:30:44.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:30:44.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:30:44.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:30:09', tmtdew=27.5, humidity=14.85, cloud=0.0, wind=16.18, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:30:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:30:44.153 [DEBUG] [Thread-59995] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:30:44.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:30:44.248 [DEBUG] [Thread-59998] [transport.py] [_log()] starting thread (client mode): 0xd31ed030
2025-11-17T19:30:44.248 [DEBUG] [Thread-59998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:30:44.263 [DEBUG] [Thread-59998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:30:44.263 [INFO] [Thread-59998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] client lang: <none>
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] server lang: <none>
2025-11-17T19:30:44.270 [DEBUG] [Thread-59998] [transport.py] [_log()] kex follows: False
2025-11-17T19:30:44.271 [DEBUG] [Thread-59998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:30:44.271 [DEBUG] [Thread-59998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:30:44.271 [DEBUG] [Thread-59998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:30:44.271 [DEBUG] [Thread-59998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:30:44.271 [DEBUG] [Thread-59998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:30:44.271 [DEBUG] [Thread-59998] [transport.py] [_log()] Compression: none
2025-11-17T19:30:44.271 [DEBUG] [Thread-59998] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:30:44.328 [DEBUG] [Thread-59998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:30:44.329 [DEBUG] [Thread-59998] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:30:44.329 [DEBUG] [Thread-59998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:30:44.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:30:44.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:30:44.385 [DEBUG] [Thread-59998] [transport.py] [_log()] userauth is OK
2025-11-17T19:30:44.385 [DEBUG] [Thread-59998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:30:44.385 [DEBUG] [Thread-59998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:30:44.385 [DEBUG] [Thread-59998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:30:44.385 [DEBUG] [Thread-59998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:30:44.408 [INFO] [Thread-59998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:30:44.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:30:44.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:30:45.256 [DEBUG] [Thread-59998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:30:45.256 [DEBUG] [Thread-59998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:30:45.303 [DEBUG] [Thread-59998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:30:45.303 [DEBUG] [Thread-59998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:30:45.312 [DEBUG] [Thread-59998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:30:45.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:30:45.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:30:45.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:30:45.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:30:45.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:30:45.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:30:45.346 [DEBUG] [Thread-59998] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:30:53.191 [DEBUG] [Thread-60000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:31:08.229 [DEBUG] [Thread-60001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:31:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:31:15.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:31:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:31:16.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 30, 41), 27.39, 14.87, 0.0, 19.09, 19.42, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:31:16.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:30:41
2025-11-17T19:31:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:31:16.315 [DEBUG] [Thread-60002] [transport.py] [_log()] starting thread (client mode): 0xd0787910
2025-11-17T19:31:16.315 [DEBUG] [Thread-60002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:31:16.335 [DEBUG] [Thread-60002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:31:16.336 [INFO] [Thread-60002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:31:16.338 [DEBUG] [Thread-60002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] client lang: <none>
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] server lang: <none>
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] kex follows: False
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] Compression: none
2025-11-17T19:31:16.339 [DEBUG] [Thread-60002] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:31:16.358 [DEBUG] [Thread-60002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:31:16.359 [DEBUG] [Thread-60002] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:31:16.360 [DEBUG] [Thread-60002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:31:16.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:31:16.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:31:16.361 [DEBUG] [Thread-60002] [transport.py] [_log()] userauth is OK
2025-11-17T19:31:16.362 [DEBUG] [Thread-60002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:31:16.362 [DEBUG] [Thread-60002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:31:16.362 [DEBUG] [Thread-60002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:31:16.362 [DEBUG] [Thread-60002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:31:16.386 [INFO] [Thread-60002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:31:16.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:31:16.987 [DEBUG] [Thread-60002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:31:16.987 [DEBUG] [Thread-60002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:31:16.987 [DEBUG] [Thread-60002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:31:17.028 [DEBUG] [Thread-60002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:31:17.028 [DEBUG] [Thread-60002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:31:17.030 [DEBUG] [Thread-60002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:31:17.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:31:17.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:31:17.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:31:17.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:31:17.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:31:17.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:31:17.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:31:17.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:31:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:31:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.729564 -999.00  +19.50  17.27     20   -3.60 1 1 1 1 1   734    0 23.65 3.20 ----- 18.0 17.3 274.0 25.7 20.0 -24.2 19.9 -23.5 19.6 -22.7 19.9 -23.2
2025-11-17T19:31:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:31:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:31:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.729564
2025-11-17T19:31:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:31:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:31:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:31:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:31:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:31:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:30:41', tmtdew=27.39, humidity=14.87, cloud=0.0, wind=19.09, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:30:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:31:17.045 [DEBUG] [Thread-60002] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:31:17.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:31:17.143 [DEBUG] [Thread-60005] [transport.py] [_log()] starting thread (client mode): 0xd31b1f00
2025-11-17T19:31:17.143 [DEBUG] [Thread-60005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:31:17.157 [DEBUG] [Thread-60005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:31:17.157 [INFO] [Thread-60005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:31:17.165 [DEBUG] [Thread-60005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:31:17.165 [DEBUG] [Thread-60005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:31:17.165 [DEBUG] [Thread-60005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:31:17.165 [DEBUG] [Thread-60005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:31:17.165 [DEBUG] [Thread-60005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:31:17.165 [DEBUG] [Thread-60005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:31:17.165 [DEBUG] [Thread-60005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] client lang: <none>
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] server lang: <none>
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] kex follows: False
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] Compression: none
2025-11-17T19:31:17.166 [DEBUG] [Thread-60005] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:31:17.224 [DEBUG] [Thread-60005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:31:17.225 [DEBUG] [Thread-60005] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:31:17.225 [DEBUG] [Thread-60005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:31:17.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:31:17.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:31:17.285 [DEBUG] [Thread-60005] [transport.py] [_log()] userauth is OK
2025-11-17T19:31:17.285 [DEBUG] [Thread-60005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:31:17.285 [DEBUG] [Thread-60005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:31:17.285 [DEBUG] [Thread-60005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:31:17.285 [DEBUG] [Thread-60005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:31:17.311 [INFO] [Thread-60005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:31:17.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:31:17.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:31:18.165 [DEBUG] [Thread-60005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:31:18.174 [DEBUG] [Thread-60005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:31:18.213 [DEBUG] [Thread-60005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:31:18.214 [DEBUG] [Thread-60005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:31:18.223 [DEBUG] [Thread-60005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:31:18.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:31:18.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:31:18.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:31:18.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:31:18.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:31:18.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:31:18.257 [DEBUG] [Thread-60005] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:31:23.257 [DEBUG] [Thread-60007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:31:31.905 [DEBUG] [Thread-60008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:31:32.537 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:31:32.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:31:38.300 [DEBUG] [Thread-60009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:31:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:31:48.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:31:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:31:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 31, 45), 27.31, 14.97, 0.0, 20.13, 19.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:31:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:31:45
2025-11-17T19:31:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:31:49.216 [DEBUG] [Thread-60010] [transport.py] [_log()] starting thread (client mode): 0xd07cc5b0
2025-11-17T19:31:49.217 [DEBUG] [Thread-60010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:31:49.237 [DEBUG] [Thread-60010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:31:49.237 [INFO] [Thread-60010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:31:49.240 [DEBUG] [Thread-60010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:31:49.240 [DEBUG] [Thread-60010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:31:49.240 [DEBUG] [Thread-60010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] client lang: <none>
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] server lang: <none>
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] kex follows: False
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:31:49.241 [DEBUG] [Thread-60010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:31:49.242 [DEBUG] [Thread-60010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:31:49.242 [DEBUG] [Thread-60010] [transport.py] [_log()] Compression: none
2025-11-17T19:31:49.242 [DEBUG] [Thread-60010] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:31:49.260 [DEBUG] [Thread-60010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:31:49.261 [DEBUG] [Thread-60010] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:31:49.262 [DEBUG] [Thread-60010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:31:49.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:31:49.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:31:49.263 [DEBUG] [Thread-60010] [transport.py] [_log()] userauth is OK
2025-11-17T19:31:49.264 [DEBUG] [Thread-60010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:31:49.264 [DEBUG] [Thread-60010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:31:49.264 [DEBUG] [Thread-60010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:31:49.264 [DEBUG] [Thread-60010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:31:49.288 [INFO] [Thread-60010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:31:49.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:31:49.885 [DEBUG] [Thread-60010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:31:49.885 [DEBUG] [Thread-60010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:31:49.886 [DEBUG] [Thread-60010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:31:49.926 [DEBUG] [Thread-60010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:31:49.926 [DEBUG] [Thread-60010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:31:49.929 [DEBUG] [Thread-60010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:31:49.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:31:49.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:31:49.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:31:49.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:31:49.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:31:49.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:31:49.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:31:49.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:31:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:31:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.729911 -999.00  +19.50  17.97     20   -3.60 1 1 1 1 1   721    0 23.35 2.31 ----- 13.7 18.0 275.6 24.3 20.0 -24.1 19.9 -23.5 19.6 -22.9 19.9 -23.4
2025-11-17T19:31:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:31:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:31:49.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.729911
2025-11-17T19:31:49.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:31:49.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:31:49.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:31:49.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:31:49.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:31:49.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:31:45', tmtdew=27.31, humidity=14.97, cloud=0.0, wind=20.13, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:31:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:31:49.955 [DEBUG] [Thread-60010] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:31:50.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:31:50.053 [DEBUG] [Thread-60013] [transport.py] [_log()] starting thread (client mode): 0xd078de10
2025-11-17T19:31:50.053 [DEBUG] [Thread-60013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:31:50.068 [DEBUG] [Thread-60013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:31:50.068 [INFO] [Thread-60013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:31:50.075 [DEBUG] [Thread-60013] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:31:50.075 [DEBUG] [Thread-60013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] client lang: <none>
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] server lang: <none>
2025-11-17T19:31:50.076 [DEBUG] [Thread-60013] [transport.py] [_log()] kex follows: False
2025-11-17T19:31:50.077 [DEBUG] [Thread-60013] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:31:50.077 [DEBUG] [Thread-60013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:31:50.077 [DEBUG] [Thread-60013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:31:50.077 [DEBUG] [Thread-60013] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:31:50.077 [DEBUG] [Thread-60013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:31:50.077 [DEBUG] [Thread-60013] [transport.py] [_log()] Compression: none
2025-11-17T19:31:50.077 [DEBUG] [Thread-60013] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:31:50.132 [DEBUG] [Thread-60013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:31:50.133 [DEBUG] [Thread-60013] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:31:50.133 [DEBUG] [Thread-60013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:31:50.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:31:50.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:31:50.189 [DEBUG] [Thread-60013] [transport.py] [_log()] userauth is OK
2025-11-17T19:31:50.189 [DEBUG] [Thread-60013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:31:50.190 [DEBUG] [Thread-60013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:31:50.190 [DEBUG] [Thread-60013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:31:50.190 [DEBUG] [Thread-60013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:31:50.208 [INFO] [Thread-60013] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:31:50.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:31:50.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:31:51.024 [DEBUG] [Thread-60013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:31:51.024 [DEBUG] [Thread-60013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:31:51.071 [DEBUG] [Thread-60013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:31:51.071 [DEBUG] [Thread-60013] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:31:51.080 [DEBUG] [Thread-60013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:31:51.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:31:51.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:31:51.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:31:51.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:31:51.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:31:51.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:31:51.114 [DEBUG] [Thread-60013] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:31:53.330 [DEBUG] [Thread-60015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:32:08.383 [DEBUG] [Thread-60016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:32:21.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:32:21.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:32:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:32:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 32, 17), 27.33, 14.93, 0.0, 20.89, 19.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:32:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:32:17
2025-11-17T19:32:21.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:32:22.072 [DEBUG] [Thread-60017] [transport.py] [_log()] starting thread (client mode): 0xd07841f0
2025-11-17T19:32:22.072 [DEBUG] [Thread-60017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:32:22.091 [DEBUG] [Thread-60017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:32:22.091 [INFO] [Thread-60017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] client lang: <none>
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] server lang: <none>
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] kex follows: False
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] Compression: none
2025-11-17T19:32:22.095 [DEBUG] [Thread-60017] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:32:22.110 [DEBUG] [Thread-60017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:32:22.111 [DEBUG] [Thread-60017] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:32:22.111 [DEBUG] [Thread-60017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:32:22.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:32:22.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:32:22.152 [DEBUG] [Thread-60017] [transport.py] [_log()] userauth is OK
2025-11-17T19:32:22.153 [DEBUG] [Thread-60017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:32:22.153 [DEBUG] [Thread-60017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:32:22.153 [DEBUG] [Thread-60017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:32:22.153 [DEBUG] [Thread-60017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:32:22.185 [INFO] [Thread-60017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:32:22.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:32:22.847 [DEBUG] [Thread-60017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:32:22.847 [DEBUG] [Thread-60017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:32:22.847 [DEBUG] [Thread-60017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:32:22.888 [DEBUG] [Thread-60017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:32:22.888 [DEBUG] [Thread-60017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:32:22.891 [DEBUG] [Thread-60017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:32:22.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:32:22.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:32:22.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:32:22.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:32:22.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:32:22.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:32:22.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.730258 -999.00  +19.50  17.09     20   -3.60 1 1 1 1 1   708    0 23.25 1.30 ----- 16.1 17.1 276.6 20.8 19.9 -24.0 19.9 -23.5 19.6 -22.9 19.9 -23.2
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.730258
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:32:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:32:17', tmtdew=27.33, humidity=14.93, cloud=0.0, wind=20.89, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:31:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:32:22.911 [DEBUG] [Thread-60017] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:32:22.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:32:22.997 [DEBUG] [Thread-60020] [transport.py] [_log()] starting thread (client mode): 0xd0787f70
2025-11-17T19:32:22.997 [DEBUG] [Thread-60020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:32:23.016 [DEBUG] [Thread-60020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:32:23.016 [INFO] [Thread-60020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] client lang: <none>
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] server lang: <none>
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] kex follows: False
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:32:23.023 [DEBUG] [Thread-60020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:32:23.024 [DEBUG] [Thread-60020] [transport.py] [_log()] Compression: none
2025-11-17T19:32:23.024 [DEBUG] [Thread-60020] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:32:23.079 [DEBUG] [Thread-60020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:32:23.079 [DEBUG] [Thread-60020] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:32:23.080 [DEBUG] [Thread-60020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:32:23.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:32:23.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:32:23.137 [DEBUG] [Thread-60020] [transport.py] [_log()] userauth is OK
2025-11-17T19:32:23.137 [DEBUG] [Thread-60020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:32:23.137 [DEBUG] [Thread-60020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:32:23.137 [DEBUG] [Thread-60020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:32:23.137 [DEBUG] [Thread-60020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:32:23.150 [INFO] [Thread-60020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:32:23.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:32:23.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:32:23.411 [DEBUG] [Thread-60022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:32:23.977 [DEBUG] [Thread-60020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:32:23.977 [DEBUG] [Thread-60020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:32:24.025 [DEBUG] [Thread-60020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:32:24.025 [DEBUG] [Thread-60020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:32:24.034 [DEBUG] [Thread-60020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:32:24.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:32:24.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:32:24.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:32:24.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:32:24.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:32:24.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:32:24.065 [DEBUG] [Thread-60020] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:32:31.962 [DEBUG] [Thread-60023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:32:38.445 [DEBUG] [Thread-60024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:32:39.133 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:32:39.134 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:32:53.481 [DEBUG] [Thread-60025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:32:54.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:32:54.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:32:54.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:32:54.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 32, 49), 27.25, 14.97, 0.0, 19.44, 19.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:32:54.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:32:49
2025-11-17T19:32:54.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:32:55.014 [DEBUG] [Thread-60026] [transport.py] [_log()] starting thread (client mode): 0xd31b28f0
2025-11-17T19:32:55.015 [DEBUG] [Thread-60026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:32:55.037 [DEBUG] [Thread-60026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:32:55.037 [INFO] [Thread-60026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:32:55.040 [DEBUG] [Thread-60026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:32:55.040 [DEBUG] [Thread-60026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:32:55.040 [DEBUG] [Thread-60026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] client lang: <none>
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] server lang: <none>
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] kex follows: False
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] Compression: none
2025-11-17T19:32:55.041 [DEBUG] [Thread-60026] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:32:55.057 [DEBUG] [Thread-60026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:32:55.058 [DEBUG] [Thread-60026] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:32:55.058 [DEBUG] [Thread-60026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:32:55.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:32:55.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:32:55.060 [DEBUG] [Thread-60026] [transport.py] [_log()] userauth is OK
2025-11-17T19:32:55.060 [DEBUG] [Thread-60026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:32:55.060 [DEBUG] [Thread-60026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:32:55.060 [DEBUG] [Thread-60026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:32:55.061 [DEBUG] [Thread-60026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:32:55.084 [INFO] [Thread-60026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:32:55.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:32:55.677 [DEBUG] [Thread-60026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:32:55.677 [DEBUG] [Thread-60026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:32:55.677 [DEBUG] [Thread-60026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:32:55.717 [DEBUG] [Thread-60026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:32:55.717 [DEBUG] [Thread-60026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:32:55.720 [DEBUG] [Thread-60026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:32:55.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:32:55.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:32:55.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:32:55.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:32:55.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:32:55.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:32:55.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:32:55.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:32:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:32:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.730606 -999.00  +19.40  19.12     20   -3.60 1 1 1 1 1   694    0 23.45 0.99 ----- 21.1 19.1 272.8 22.8 19.9 -24.2 19.8 -23.7 19.6 -23.1 19.9 -23.3
2025-11-17T19:32:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:32:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:32:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.730606
2025-11-17T19:32:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:32:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:32:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:32:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:32:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:32:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:32:49', tmtdew=27.25, humidity=14.97, cloud=0.0, wind=19.44, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:32:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:32:55.746 [DEBUG] [Thread-60026] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:32:55.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:32:55.848 [DEBUG] [Thread-60029] [transport.py] [_log()] starting thread (client mode): 0xd31ee7a0
2025-11-17T19:32:55.848 [DEBUG] [Thread-60029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:32:55.863 [DEBUG] [Thread-60029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:32:55.864 [INFO] [Thread-60029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] client lang: <none>
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] server lang: <none>
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] kex follows: False
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] Compression: none
2025-11-17T19:32:55.871 [DEBUG] [Thread-60029] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:32:55.928 [DEBUG] [Thread-60029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:32:55.929 [DEBUG] [Thread-60029] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:32:55.929 [DEBUG] [Thread-60029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:32:55.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:32:55.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:32:55.985 [DEBUG] [Thread-60029] [transport.py] [_log()] userauth is OK
2025-11-17T19:32:55.985 [DEBUG] [Thread-60029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:32:55.986 [DEBUG] [Thread-60029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:32:55.986 [DEBUG] [Thread-60029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:32:55.986 [DEBUG] [Thread-60029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:32:56.005 [INFO] [Thread-60029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:32:56.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:32:56.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:32:56.839 [DEBUG] [Thread-60029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:32:56.840 [DEBUG] [Thread-60029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:32:56.887 [DEBUG] [Thread-60029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:32:56.887 [DEBUG] [Thread-60029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:32:56.895 [DEBUG] [Thread-60029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:32:56.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:32:56.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:32:56.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:32:56.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:32:56.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:32:56.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:32:56.930 [DEBUG] [Thread-60029] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:33:08.513 [DEBUG] [Thread-60031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:33:23.550 [DEBUG] [Thread-60032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:33:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:33:26.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:33:26.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:33:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 33, 21), 27.28, 14.93, 0.0, 18.9, 19.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:33:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:33:21
2025-11-17T19:33:27.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:33:27.886 [DEBUG] [Thread-60033] [transport.py] [_log()] starting thread (client mode): 0xd31b3fd0
2025-11-17T19:33:27.886 [DEBUG] [Thread-60033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:33:27.908 [DEBUG] [Thread-60033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:33:27.908 [INFO] [Thread-60033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:33:27.909 [DEBUG] [Thread-60033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:33:27.909 [DEBUG] [Thread-60033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] client lang: <none>
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] server lang: <none>
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] kex follows: False
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:33:27.910 [DEBUG] [Thread-60033] [transport.py] [_log()] Compression: none
2025-11-17T19:33:27.911 [DEBUG] [Thread-60033] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:33:27.929 [DEBUG] [Thread-60033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:33:27.929 [DEBUG] [Thread-60033] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:33:27.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:33:27.931 [DEBUG] [Thread-60033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:33:27.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:33:27.932 [DEBUG] [Thread-60033] [transport.py] [_log()] userauth is OK
2025-11-17T19:33:27.932 [DEBUG] [Thread-60033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:33:27.933 [DEBUG] [Thread-60033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:33:27.933 [DEBUG] [Thread-60033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:33:27.933 [DEBUG] [Thread-60033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:33:27.955 [INFO] [Thread-60033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:33:27.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:33:28.620 [DEBUG] [Thread-60033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:33:28.620 [DEBUG] [Thread-60033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:33:28.620 [DEBUG] [Thread-60033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:33:28.661 [DEBUG] [Thread-60033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:33:28.662 [DEBUG] [Thread-60033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:33:28.664 [DEBUG] [Thread-60033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:33:28.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:33:28.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:33:28.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:33:28.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:33:28.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:33:28.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:33:28.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:33:28.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:33:28.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:33:28.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.730953 -999.00  +19.40  17.65     20   -3.70 1 1 1 1 1   679    0 23.09 0.10 ----- 16.9 17.6 274.6 21.0 19.9 -24.2 19.8 -23.7 19.6 -23.2 19.8 -23.5
2025-11-17T19:33:28.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:33:28.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:33:28.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.730953
2025-11-17T19:33:28.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:33:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:33:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:33:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:33:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:33:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:33:21', tmtdew=27.28, humidity=14.93, cloud=0.0, wind=18.9, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:32:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:33:28.688 [DEBUG] [Thread-60033] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:33:28.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:33:28.789 [DEBUG] [Thread-60036] [transport.py] [_log()] starting thread (client mode): 0xd31b1b70
2025-11-17T19:33:28.789 [DEBUG] [Thread-60036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:33:28.805 [DEBUG] [Thread-60036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:33:28.805 [INFO] [Thread-60036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:33:28.812 [DEBUG] [Thread-60036] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:33:28.813 [DEBUG] [Thread-60036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:33:28.813 [DEBUG] [Thread-60036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:33:28.813 [DEBUG] [Thread-60036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:33:28.813 [DEBUG] [Thread-60036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:33:28.813 [DEBUG] [Thread-60036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:33:28.813 [DEBUG] [Thread-60036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:33:28.813 [DEBUG] [Thread-60036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:33:28.813 [DEBUG] [Thread-60036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:33:28.814 [DEBUG] [Thread-60036] [transport.py] [_log()] client lang: <none>
2025-11-17T19:33:28.814 [DEBUG] [Thread-60036] [transport.py] [_log()] server lang: <none>
2025-11-17T19:33:28.814 [DEBUG] [Thread-60036] [transport.py] [_log()] kex follows: False
2025-11-17T19:33:28.814 [DEBUG] [Thread-60036] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:33:28.814 [DEBUG] [Thread-60036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:33:28.814 [DEBUG] [Thread-60036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:33:28.814 [DEBUG] [Thread-60036] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:33:28.814 [DEBUG] [Thread-60036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:33:28.815 [DEBUG] [Thread-60036] [transport.py] [_log()] Compression: none
2025-11-17T19:33:28.815 [DEBUG] [Thread-60036] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:33:28.869 [DEBUG] [Thread-60036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:33:28.869 [DEBUG] [Thread-60036] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:33:28.870 [DEBUG] [Thread-60036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:33:28.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:33:28.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:33:28.929 [DEBUG] [Thread-60036] [transport.py] [_log()] userauth is OK
2025-11-17T19:33:28.929 [DEBUG] [Thread-60036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:33:28.929 [DEBUG] [Thread-60036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:33:28.929 [DEBUG] [Thread-60036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:33:28.930 [DEBUG] [Thread-60036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:33:28.949 [INFO] [Thread-60036] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:33:28.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:33:28.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:33:29.820 [DEBUG] [Thread-60036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:33:29.820 [DEBUG] [Thread-60036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:33:29.868 [DEBUG] [Thread-60036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:33:29.869 [DEBUG] [Thread-60036] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:33:29.877 [DEBUG] [Thread-60036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:33:29.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:33:29.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:33:29.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:33:29.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:33:29.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:33:29.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:33:29.913 [DEBUG] [Thread-60036] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:33:32.044 [DEBUG] [Thread-60038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:33:38.575 [DEBUG] [Thread-60039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:33:47.030 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:33:47.031 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:33:53.604 [DEBUG] [Thread-60040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:33:59.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:33:59.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:33:59.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
2025-11-17T19:34:00.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 33, 53), 27.24, 14.98, 0.0, 17.2, 19.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:34:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:33:53
2025-11-17T19:34:00.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:34:00.833 [DEBUG] [Thread-60041] [transport.py] [_log()] starting thread (client mode): 0xd078ef20
2025-11-17T19:34:00.833 [DEBUG] [Thread-60041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:34:00.853 [DEBUG] [Thread-60041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:34:00.853 [INFO] [Thread-60041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:34:00.856 [DEBUG] [Thread-60041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] client lang: <none>
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] server lang: <none>
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] kex follows: False
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:34:00.857 [DEBUG] [Thread-60041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:34:00.858 [DEBUG] [Thread-60041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:34:00.858 [DEBUG] [Thread-60041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:34:00.858 [DEBUG] [Thread-60041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:34:00.858 [DEBUG] [Thread-60041] [transport.py] [_log()] Compression: none
2025-11-17T19:34:00.858 [DEBUG] [Thread-60041] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:34:00.875 [DEBUG] [Thread-60041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:34:00.875 [DEBUG] [Thread-60041] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:34:00.876 [DEBUG] [Thread-60041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:34:00.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:34:00.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:34:00.877 [DEBUG] [Thread-60041] [transport.py] [_log()] userauth is OK
2025-11-17T19:34:00.878 [DEBUG] [Thread-60041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:34:00.878 [DEBUG] [Thread-60041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:34:00.878 [DEBUG] [Thread-60041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:34:00.878 [DEBUG] [Thread-60041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:34:00.902 [INFO] [Thread-60041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:34:00.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:34:01.559 [DEBUG] [Thread-60041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:34:01.559 [DEBUG] [Thread-60041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:34:01.560 [DEBUG] [Thread-60041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:34:01.600 [DEBUG] [Thread-60041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:34:01.601 [DEBUG] [Thread-60041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:34:01.603 [DEBUG] [Thread-60041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:34:01.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:34:01.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:34:01.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:34:01.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:34:01.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:34:01.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:34:01.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:34:01.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:34:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:34:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.731300 -999.00  +19.40  16.69     20   -3.70 1 1 1 1 1   663    0 23.25 -0.54 ----- 18.4 16.7 269.8 21.4 19.8 -24.3 19.8 -23.8 19.6 -23.3 19.8 -23.5
2025-11-17T19:34:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:34:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:34:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.731300
2025-11-17T19:34:01.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:34:01.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:34:01.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:34:01.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:34:01.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:34:01.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:33:53', tmtdew=27.24, humidity=14.98, cloud=0.0, wind=17.2, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:33:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:34:01.630 [DEBUG] [Thread-60041] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:34:01.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:34:01.726 [DEBUG] [Thread-60044] [transport.py] [_log()] starting thread (client mode): 0xd0784b80
2025-11-17T19:34:01.726 [DEBUG] [Thread-60044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:34:01.744 [DEBUG] [Thread-60044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:34:01.744 [INFO] [Thread-60044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:34:01.752 [DEBUG] [Thread-60044] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:34:01.752 [DEBUG] [Thread-60044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:34:01.752 [DEBUG] [Thread-60044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:34:01.752 [DEBUG] [Thread-60044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] client lang: <none>
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] server lang: <none>
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] kex follows: False
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:34:01.753 [DEBUG] [Thread-60044] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:34:01.754 [DEBUG] [Thread-60044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:34:01.754 [DEBUG] [Thread-60044] [transport.py] [_log()] Compression: none
2025-11-17T19:34:01.754 [DEBUG] [Thread-60044] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:34:01.813 [DEBUG] [Thread-60044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:34:01.814 [DEBUG] [Thread-60044] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:34:01.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:34:01.815 [DEBUG] [Thread-60044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:34:01.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:34:01.869 [DEBUG] [Thread-60044] [transport.py] [_log()] userauth is OK
2025-11-17T19:34:01.869 [DEBUG] [Thread-60044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:34:01.869 [DEBUG] [Thread-60044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:34:01.869 [DEBUG] [Thread-60044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:34:01.869 [DEBUG] [Thread-60044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:34:01.883 [INFO] [Thread-60044] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:34:01.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:34:01.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:34:02.724 [DEBUG] [Thread-60044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:34:02.724 [DEBUG] [Thread-60044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:34:02.773 [DEBUG] [Thread-60044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:34:02.773 [DEBUG] [Thread-60044] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:34:02.786 [DEBUG] [Thread-60044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:34:02.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:34:02.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:34:02.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:34:02.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:34:02.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:34:02.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:34:02.817 [DEBUG] [Thread-60044] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:34:08.638 [DEBUG] [Thread-60046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:34:23.682 [DEBUG] [Thread-60047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:34:32.122 [DEBUG] [Thread-60048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:34:32.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:34:32.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:34:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:34:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 34, 25), 27.23, 14.98, 0.0, 17.49, 19.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:34:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:34:25
2025-11-17T19:34:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:34:33.772 [DEBUG] [Thread-60049] [transport.py] [_log()] starting thread (client mode): 0xd07cd180
2025-11-17T19:34:33.772 [DEBUG] [Thread-60049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:34:33.795 [DEBUG] [Thread-60049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:34:33.795 [INFO] [Thread-60049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:34:33.799 [DEBUG] [Thread-60049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:34:33.799 [DEBUG] [Thread-60049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:34:33.799 [DEBUG] [Thread-60049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:34:33.799 [DEBUG] [Thread-60049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] client lang: <none>
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] server lang: <none>
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] kex follows: False
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:34:33.800 [DEBUG] [Thread-60049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:34:33.801 [DEBUG] [Thread-60049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:34:33.801 [DEBUG] [Thread-60049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:34:33.801 [DEBUG] [Thread-60049] [transport.py] [_log()] Compression: none
2025-11-17T19:34:33.801 [DEBUG] [Thread-60049] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:34:33.820 [DEBUG] [Thread-60049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:34:33.821 [DEBUG] [Thread-60049] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:34:33.821 [DEBUG] [Thread-60049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:34:33.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:34:33.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:34:33.823 [DEBUG] [Thread-60049] [transport.py] [_log()] userauth is OK
2025-11-17T19:34:33.824 [DEBUG] [Thread-60049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:34:33.824 [DEBUG] [Thread-60049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:34:33.824 [DEBUG] [Thread-60049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:34:33.824 [DEBUG] [Thread-60049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:34:33.837 [INFO] [Thread-60049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:34:33.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:34:34.501 [DEBUG] [Thread-60049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:34:34.501 [DEBUG] [Thread-60049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:34:34.501 [DEBUG] [Thread-60049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:34:34.541 [DEBUG] [Thread-60049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:34:34.541 [DEBUG] [Thread-60049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:34:34.544 [DEBUG] [Thread-60049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:34:34.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:34:34.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:34:34.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:34:34.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:34:34.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:34:34.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:34:34.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:34:34.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:34:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:34:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.731647 -999.00  +19.40  16.96     20   -3.60 1 1 1 1 1   647    0 23.32 -1.55 ----- 17.3 17.0 272.8 22.4 19.8 -24.3 19.8 -23.8 19.5 -23.3 19.8 -23.6
2025-11-17T19:34:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:34:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:34:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.731647
2025-11-17T19:34:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:34:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:34:34.566 [DEBUG] [Thread-60049] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:34:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:34:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:34:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:34:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:34:25', tmtdew=27.23, humidity=14.98, cloud=0.0, wind=17.49, temperature=19.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:33:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:34:34.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:34:34.670 [DEBUG] [Thread-60052] [transport.py] [_log()] starting thread (client mode): 0xd3134cd0
2025-11-17T19:34:34.670 [DEBUG] [Thread-60052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:34:34.685 [DEBUG] [Thread-60052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:34:34.685 [INFO] [Thread-60052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:34:34.693 [DEBUG] [Thread-60052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:34:34.694 [DEBUG] [Thread-60052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:34:34.694 [DEBUG] [Thread-60052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:34:34.694 [DEBUG] [Thread-60052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:34:34.694 [DEBUG] [Thread-60052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:34:34.694 [DEBUG] [Thread-60052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:34:34.694 [DEBUG] [Thread-60052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:34:34.694 [DEBUG] [Thread-60052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] client lang: <none>
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] server lang: <none>
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] kex follows: False
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] Compression: none
2025-11-17T19:34:34.695 [DEBUG] [Thread-60052] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:34:34.749 [DEBUG] [Thread-60052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:34:34.750 [DEBUG] [Thread-60052] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:34:34.750 [DEBUG] [Thread-60052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:34:34.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:34:34.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:34:34.807 [DEBUG] [Thread-60052] [transport.py] [_log()] userauth is OK
2025-11-17T19:34:34.807 [DEBUG] [Thread-60052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:34:34.807 [DEBUG] [Thread-60052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:34:34.807 [DEBUG] [Thread-60052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:34:34.807 [DEBUG] [Thread-60052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:34:34.826 [INFO] [Thread-60052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:34:34.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:34:34.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:34:35.653 [DEBUG] [Thread-60052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:34:35.653 [DEBUG] [Thread-60052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:34:35.701 [DEBUG] [Thread-60052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:34:35.701 [DEBUG] [Thread-60052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:34:35.709 [DEBUG] [Thread-60052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:34:35.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:34:35.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:34:35.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:34:35.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:34:35.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:34:35.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:34:35.741 [DEBUG] [Thread-60052] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:34:38.710 [DEBUG] [Thread-60054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:34:52.038 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:34:52.039 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:34:53.760 [DEBUG] [Thread-60055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:35:05.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:35:05.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:35:05.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:35:06.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 34, 57), 27.18, 15.0, 0.0, 17.4, 19.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:35:06.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:34:57
2025-11-17T19:35:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:35:06.670 [DEBUG] [Thread-60056] [transport.py] [_log()] starting thread (client mode): 0xd07bee00
2025-11-17T19:35:06.670 [DEBUG] [Thread-60056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:35:06.690 [DEBUG] [Thread-60056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:35:06.690 [INFO] [Thread-60056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:35:06.694 [DEBUG] [Thread-60056] [transport.py] [_log()] client lang: <none>
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] server lang: <none>
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] kex follows: False
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] Compression: none
2025-11-17T19:35:06.695 [DEBUG] [Thread-60056] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:35:06.704 [DEBUG] [Thread-60056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:35:06.704 [DEBUG] [Thread-60056] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:35:06.705 [DEBUG] [Thread-60056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:35:06.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:35:06.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:35:06.706 [DEBUG] [Thread-60056] [transport.py] [_log()] userauth is OK
2025-11-17T19:35:06.707 [DEBUG] [Thread-60056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:35:06.707 [DEBUG] [Thread-60056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:35:06.707 [DEBUG] [Thread-60056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:35:06.707 [DEBUG] [Thread-60056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:35:06.742 [INFO] [Thread-60056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:35:06.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:35:07.598 [DEBUG] [Thread-60056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:35:07.598 [DEBUG] [Thread-60056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:35:07.598 [DEBUG] [Thread-60056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:35:07.639 [DEBUG] [Thread-60056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:35:07.639 [DEBUG] [Thread-60056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:35:07.641 [DEBUG] [Thread-60056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:35:07.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:35:07.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:35:07.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:35:07.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:35:07.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:35:07.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:35:07.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:35:07.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:35:07.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.731994 -999.00  +19.30  17.13     20   -3.70 1 1 1 1 1   630    0 23.03 -2.42 ----- 14.8 17.1 272.4 24.3 19.8 -24.4 19.8 -23.8 19.5 -23.5 19.8 -23.6
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.731994
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:35:07.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:34:57', tmtdew=27.18, humidity=15.0, cloud=0.0, wind=17.4, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:34:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:35:07.659 [DEBUG] [Thread-60056] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:35:07.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:35:07.742 [DEBUG] [Thread-60059] [transport.py] [_log()] starting thread (client mode): 0xd07be3b0
2025-11-17T19:35:07.742 [DEBUG] [Thread-60059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:35:07.757 [DEBUG] [Thread-60059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:35:07.757 [INFO] [Thread-60059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:35:07.764 [DEBUG] [Thread-60059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:35:07.764 [DEBUG] [Thread-60059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:35:07.764 [DEBUG] [Thread-60059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:35:07.764 [DEBUG] [Thread-60059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] client lang: <none>
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] server lang: <none>
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] kex follows: False
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] Compression: none
2025-11-17T19:35:07.765 [DEBUG] [Thread-60059] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:35:07.822 [DEBUG] [Thread-60059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:35:07.822 [DEBUG] [Thread-60059] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:35:07.823 [DEBUG] [Thread-60059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:35:07.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:35:07.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:35:07.878 [DEBUG] [Thread-60059] [transport.py] [_log()] userauth is OK
2025-11-17T19:35:07.878 [DEBUG] [Thread-60059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:35:07.878 [DEBUG] [Thread-60059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:35:07.879 [DEBUG] [Thread-60059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:35:07.879 [DEBUG] [Thread-60059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:35:07.898 [INFO] [Thread-60059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:35:07.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:35:07.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:35:08.774 [DEBUG] [Thread-60059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:35:08.775 [DEBUG] [Thread-60059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:35:08.788 [DEBUG] [Thread-60061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:35:08.822 [DEBUG] [Thread-60059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:35:08.822 [DEBUG] [Thread-60059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:35:08.831 [DEBUG] [Thread-60059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:35:08.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:35:08.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:35:08.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:35:08.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:35:08.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:35:08.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:35:08.865 [DEBUG] [Thread-60059] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:35:23.830 [DEBUG] [Thread-60062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:35:32.200 [DEBUG] [Thread-60063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:35:38.859 [DEBUG] [Thread-60064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:35:38.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:35:38.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:35:38.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:35:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 35, 29), 27.17, 15.0, 0.0, 17.54, 19.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:35:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:35:29
2025-11-17T19:35:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:35:39.802 [DEBUG] [Thread-60065] [transport.py] [_log()] starting thread (client mode): 0xd07be1a0
2025-11-17T19:35:39.802 [DEBUG] [Thread-60065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:35:39.822 [DEBUG] [Thread-60065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:35:39.822 [INFO] [Thread-60065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:35:39.825 [DEBUG] [Thread-60065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:35:39.825 [DEBUG] [Thread-60065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:35:39.825 [DEBUG] [Thread-60065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:35:39.825 [DEBUG] [Thread-60065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] client lang: <none>
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] server lang: <none>
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] kex follows: False
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] Compression: none
2025-11-17T19:35:39.826 [DEBUG] [Thread-60065] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:35:39.843 [DEBUG] [Thread-60065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:35:39.844 [DEBUG] [Thread-60065] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:35:39.844 [DEBUG] [Thread-60065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:35:39.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:35:39.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:35:39.846 [DEBUG] [Thread-60065] [transport.py] [_log()] userauth is OK
2025-11-17T19:35:39.846 [DEBUG] [Thread-60065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:35:39.846 [DEBUG] [Thread-60065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:35:39.846 [DEBUG] [Thread-60065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:35:39.846 [DEBUG] [Thread-60065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:35:39.870 [INFO] [Thread-60065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:35:39.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:35:40.504 [DEBUG] [Thread-60065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:35:40.505 [DEBUG] [Thread-60065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:35:40.505 [DEBUG] [Thread-60065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:35:40.545 [DEBUG] [Thread-60065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:35:40.545 [DEBUG] [Thread-60065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:35:40.548 [DEBUG] [Thread-60065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:35:40.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:35:40.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:35:40.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:35:40.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:35:40.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:35:40.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:35:40.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:35:40.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:35:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:35:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.732342 -999.00  +19.30  16.41     20   -3.70 1 1 1 1 1   612    0 23.20 -3.32 ----- 14.1 16.4 276.2 20.9 19.8 -24.4 19.7 -23.9 19.5 -23.6 19.8 -23.9
2025-11-17T19:35:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:35:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:35:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.732342
2025-11-17T19:35:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:35:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:35:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:35:40.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:35:40.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:35:40.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:35:29', tmtdew=27.17, humidity=15.0, cloud=0.0, wind=17.54, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:34:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:35:40.574 [DEBUG] [Thread-60065] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:35:40.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:35:40.666 [DEBUG] [Thread-60068] [transport.py] [_log()] starting thread (client mode): 0xd3137c70
2025-11-17T19:35:40.667 [DEBUG] [Thread-60068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:35:40.683 [DEBUG] [Thread-60068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:35:40.683 [INFO] [Thread-60068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:35:40.690 [DEBUG] [Thread-60068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:35:40.690 [DEBUG] [Thread-60068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] client lang: <none>
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] server lang: <none>
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] kex follows: False
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:35:40.691 [DEBUG] [Thread-60068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:35:40.692 [DEBUG] [Thread-60068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:35:40.692 [DEBUG] [Thread-60068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:35:40.692 [DEBUG] [Thread-60068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:35:40.692 [DEBUG] [Thread-60068] [transport.py] [_log()] Compression: none
2025-11-17T19:35:40.692 [DEBUG] [Thread-60068] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:35:40.750 [DEBUG] [Thread-60068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:35:40.751 [DEBUG] [Thread-60068] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:35:40.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:35:40.752 [DEBUG] [Thread-60068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:35:40.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:35:40.806 [DEBUG] [Thread-60068] [transport.py] [_log()] userauth is OK
2025-11-17T19:35:40.806 [DEBUG] [Thread-60068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:35:40.806 [DEBUG] [Thread-60068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:35:40.807 [DEBUG] [Thread-60068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:35:40.807 [DEBUG] [Thread-60068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:35:40.828 [INFO] [Thread-60068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:35:40.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:35:40.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:35:41.672 [DEBUG] [Thread-60068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:35:41.673 [DEBUG] [Thread-60068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:35:41.720 [DEBUG] [Thread-60068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:35:41.720 [DEBUG] [Thread-60068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:35:41.729 [DEBUG] [Thread-60068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:35:41.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:35:41.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:35:41.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:35:41.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:35:41.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:35:41.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:35:41.763 [DEBUG] [Thread-60068] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:35:53.889 [DEBUG] [Thread-60070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:35:59.315 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:35:59.316 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:36:08.931 [DEBUG] [Thread-60071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:36:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:36:11.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:36:11.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:36:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 36, 1), 27.19, 14.97, 0.0, 19.43, 19.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:36:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:36:01
2025-11-17T19:36:12.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:36:12.728 [DEBUG] [Thread-60072] [transport.py] [_log()] starting thread (client mode): 0xd3136e90
2025-11-17T19:36:12.729 [DEBUG] [Thread-60072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:36:12.749 [DEBUG] [Thread-60072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:36:12.749 [INFO] [Thread-60072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] client lang: <none>
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] server lang: <none>
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] kex follows: False
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] Compression: none
2025-11-17T19:36:12.753 [DEBUG] [Thread-60072] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:36:12.761 [DEBUG] [Thread-60072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:36:12.761 [DEBUG] [Thread-60072] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:36:12.761 [DEBUG] [Thread-60072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:36:12.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:36:12.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:36:12.762 [DEBUG] [Thread-60072] [transport.py] [_log()] userauth is OK
2025-11-17T19:36:12.762 [DEBUG] [Thread-60072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:36:12.762 [DEBUG] [Thread-60072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:36:12.762 [DEBUG] [Thread-60072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:36:12.762 [DEBUG] [Thread-60072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:36:12.771 [INFO] [Thread-60072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:36:12.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:36:13.436 [DEBUG] [Thread-60072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:36:13.436 [DEBUG] [Thread-60072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:36:13.436 [DEBUG] [Thread-60072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:36:13.477 [DEBUG] [Thread-60072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:36:13.477 [DEBUG] [Thread-60072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:36:13.479 [DEBUG] [Thread-60072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:36:13.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:36:13.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:36:13.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:36:13.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:36:13.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:36:13.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:36:13.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:36:13.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:36:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:36:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.733036 -999.00  +19.30  20.69     20   -3.60 1 1 1 1 1   575    0 23.32 -5.66 ----- 13.9 20.7 272.4 24.4 19.8 -24.6 19.7 -24.1 19.4 -23.5 19.7 -23.9
2025-11-17T19:36:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:36:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:36:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.733036
2025-11-17T19:36:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:36:13.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:36:13.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:36:13.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:36:13.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:36:13.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:36:01', tmtdew=27.19, humidity=14.97, cloud=0.0, wind=19.43, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:35:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:36:13.497 [DEBUG] [Thread-60072] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:36:13.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:36:13.584 [DEBUG] [Thread-60075] [transport.py] [_log()] starting thread (client mode): 0xd07be2c0
2025-11-17T19:36:13.584 [DEBUG] [Thread-60075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:36:13.598 [DEBUG] [Thread-60075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:36:13.598 [INFO] [Thread-60075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:36:13.605 [DEBUG] [Thread-60075] [transport.py] [_log()] client lang: <none>
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] server lang: <none>
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] kex follows: False
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] Compression: none
2025-11-17T19:36:13.606 [DEBUG] [Thread-60075] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:36:13.661 [DEBUG] [Thread-60075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:36:13.662 [DEBUG] [Thread-60075] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:36:13.662 [DEBUG] [Thread-60075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:36:13.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:36:13.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:36:13.718 [DEBUG] [Thread-60075] [transport.py] [_log()] userauth is OK
2025-11-17T19:36:13.718 [DEBUG] [Thread-60075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:36:13.718 [DEBUG] [Thread-60075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:36:13.718 [DEBUG] [Thread-60075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:36:13.718 [DEBUG] [Thread-60075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:36:13.732 [INFO] [Thread-60075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:36:13.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:36:13.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:36:14.592 [DEBUG] [Thread-60075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:36:14.592 [DEBUG] [Thread-60075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:36:14.641 [DEBUG] [Thread-60075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:36:14.641 [DEBUG] [Thread-60075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:36:14.650 [DEBUG] [Thread-60075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:36:14.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:36:14.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:36:14.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:36:14.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:36:14.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:36:14.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:36:14.682 [DEBUG] [Thread-60075] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:36:23.963 [DEBUG] [Thread-60077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:36:32.298 [DEBUG] [Thread-60078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:36:39.006 [DEBUG] [Thread-60079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:36:44.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:36:44.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:36:44.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:36:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 36, 33), 27.17, 15.0, 0.0, 19.67, 19.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:36:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:36:33
2025-11-17T19:36:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:36:45.634 [DEBUG] [Thread-60080] [transport.py] [_log()] starting thread (client mode): 0xd31cf0d0
2025-11-17T19:36:45.634 [DEBUG] [Thread-60080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:36:45.655 [DEBUG] [Thread-60080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:36:45.655 [INFO] [Thread-60080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:36:45.658 [DEBUG] [Thread-60080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:36:45.658 [DEBUG] [Thread-60080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:36:45.658 [DEBUG] [Thread-60080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:36:45.658 [DEBUG] [Thread-60080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:36:45.658 [DEBUG] [Thread-60080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:36:45.658 [DEBUG] [Thread-60080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] client lang: <none>
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] server lang: <none>
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] kex follows: False
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] Compression: none
2025-11-17T19:36:45.659 [DEBUG] [Thread-60080] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:36:45.676 [DEBUG] [Thread-60080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:36:45.676 [DEBUG] [Thread-60080] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:36:45.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:36:45.678 [DEBUG] [Thread-60080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:36:45.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:36:45.680 [DEBUG] [Thread-60080] [transport.py] [_log()] userauth is OK
2025-11-17T19:36:45.680 [DEBUG] [Thread-60080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:36:45.680 [DEBUG] [Thread-60080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:36:45.680 [DEBUG] [Thread-60080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:36:45.680 [DEBUG] [Thread-60080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:36:45.702 [INFO] [Thread-60080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:36:45.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:36:46.346 [DEBUG] [Thread-60080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:36:46.347 [DEBUG] [Thread-60080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:36:46.348 [DEBUG] [Thread-60080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:36:46.387 [DEBUG] [Thread-60080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:36:46.387 [DEBUG] [Thread-60080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:36:46.390 [DEBUG] [Thread-60080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:36:46.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:36:46.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:36:46.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:36:46.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:36:46.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:36:46.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:36:46.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:36:46.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:36:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:36:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.733383 -999.00  +19.30  18.50     20   -3.70 1 1 1 1 1   556    0 22.86 -7.98 ----- 15.4 18.5 270.4 24.7 19.8 -24.6 19.7 -24.1 19.4 -23.6 19.7 -24.1
2025-11-17T19:36:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:36:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:36:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.733383
2025-11-17T19:36:46.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:36:46.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:36:46.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:36:46.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:36:46.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:36:46.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:36:33', tmtdew=27.17, humidity=15.0, cloud=0.0, wind=19.67, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:36:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:36:46.416 [DEBUG] [Thread-60080] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:36:46.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:36:46.513 [DEBUG] [Thread-60083] [transport.py] [_log()] starting thread (client mode): 0xd31cea40
2025-11-17T19:36:46.513 [DEBUG] [Thread-60083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:36:46.529 [DEBUG] [Thread-60083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:36:46.529 [INFO] [Thread-60083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] client lang: <none>
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] server lang: <none>
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] kex follows: False
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:36:46.537 [DEBUG] [Thread-60083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:36:46.538 [DEBUG] [Thread-60083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:36:46.538 [DEBUG] [Thread-60083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:36:46.538 [DEBUG] [Thread-60083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:36:46.538 [DEBUG] [Thread-60083] [transport.py] [_log()] Compression: none
2025-11-17T19:36:46.538 [DEBUG] [Thread-60083] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:36:46.594 [DEBUG] [Thread-60083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:36:46.594 [DEBUG] [Thread-60083] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:36:46.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:36:46.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:36:46.596 [DEBUG] [Thread-60083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:36:46.650 [DEBUG] [Thread-60083] [transport.py] [_log()] userauth is OK
2025-11-17T19:36:46.650 [DEBUG] [Thread-60083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:36:46.650 [DEBUG] [Thread-60083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:36:46.651 [DEBUG] [Thread-60083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:36:46.651 [DEBUG] [Thread-60083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:36:46.670 [INFO] [Thread-60083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:36:46.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:36:46.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:36:47.509 [DEBUG] [Thread-60083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:36:47.510 [DEBUG] [Thread-60083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:36:47.557 [DEBUG] [Thread-60083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:36:47.557 [DEBUG] [Thread-60083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:36:47.566 [DEBUG] [Thread-60083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:36:47.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:36:47.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:36:47.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:36:47.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:36:47.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:36:47.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:36:47.601 [DEBUG] [Thread-60083] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:36:54.033 [DEBUG] [Thread-60085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:37:05.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:37:05.446 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:37:09.062 [DEBUG] [Thread-60086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:37:17.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:37:17.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:37:17.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:37:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 37, 5), 27.15, 15.02, 0.0, 18.14, 19.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:37:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:37:05
2025-11-17T19:37:18.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:37:18.556 [DEBUG] [Thread-60087] [transport.py] [_log()] starting thread (client mode): 0xd31b1840
2025-11-17T19:37:18.556 [DEBUG] [Thread-60087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:37:18.577 [DEBUG] [Thread-60087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:37:18.577 [INFO] [Thread-60087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:37:18.580 [DEBUG] [Thread-60087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:37:18.580 [DEBUG] [Thread-60087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:37:18.580 [DEBUG] [Thread-60087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:37:18.580 [DEBUG] [Thread-60087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:37:18.580 [DEBUG] [Thread-60087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:37:18.580 [DEBUG] [Thread-60087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] client lang: <none>
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] server lang: <none>
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] kex follows: False
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:37:18.581 [DEBUG] [Thread-60087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:37:18.582 [DEBUG] [Thread-60087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:37:18.582 [DEBUG] [Thread-60087] [transport.py] [_log()] Compression: none
2025-11-17T19:37:18.582 [DEBUG] [Thread-60087] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:37:18.599 [DEBUG] [Thread-60087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:37:18.599 [DEBUG] [Thread-60087] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:37:18.600 [DEBUG] [Thread-60087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:37:18.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:37:18.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:37:18.601 [DEBUG] [Thread-60087] [transport.py] [_log()] userauth is OK
2025-11-17T19:37:18.601 [DEBUG] [Thread-60087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:37:18.602 [DEBUG] [Thread-60087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:37:18.602 [DEBUG] [Thread-60087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:37:18.602 [DEBUG] [Thread-60087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:37:18.626 [INFO] [Thread-60087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:37:18.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:37:19.247 [DEBUG] [Thread-60087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:37:19.247 [DEBUG] [Thread-60087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:37:19.247 [DEBUG] [Thread-60087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:37:19.287 [DEBUG] [Thread-60087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:37:19.287 [DEBUG] [Thread-60087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:37:19.290 [DEBUG] [Thread-60087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:37:19.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:37:19.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:37:19.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:37:19.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:37:19.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:37:19.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:37:19.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:37:19.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:37:19.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:37:19.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.733731 -999.00  +19.30  18.95     20   -3.70 1 1 1 1 1   536    0 23.05 -10.14 ----- 19.5 18.9 275.4 24.4 19.7 -24.6 19.7 -24.2 19.4 -23.6 19.7 -24.3
2025-11-17T19:37:19.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:37:19.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:37:19.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.733731
2025-11-17T19:37:19.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:37:19.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:37:19.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:37:19.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:37:19.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:37:19.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:37:05', tmtdew=27.15, humidity=15.02, cloud=0.0, wind=18.14, temperature=19.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:36:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:37:19.315 [DEBUG] [Thread-60087] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:37:19.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:37:19.401 [DEBUG] [Thread-60090] [transport.py] [_log()] starting thread (client mode): 0xd31b1000
2025-11-17T19:37:19.401 [DEBUG] [Thread-60090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:37:19.419 [DEBUG] [Thread-60090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:37:19.419 [INFO] [Thread-60090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] client lang: <none>
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] server lang: <none>
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] kex follows: False
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:37:19.427 [DEBUG] [Thread-60090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:37:19.428 [DEBUG] [Thread-60090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:37:19.428 [DEBUG] [Thread-60090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:37:19.428 [DEBUG] [Thread-60090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:37:19.428 [DEBUG] [Thread-60090] [transport.py] [_log()] Compression: none
2025-11-17T19:37:19.428 [DEBUG] [Thread-60090] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:37:19.486 [DEBUG] [Thread-60090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:37:19.486 [DEBUG] [Thread-60090] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:37:19.487 [DEBUG] [Thread-60090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:37:19.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:37:19.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:37:19.542 [DEBUG] [Thread-60090] [transport.py] [_log()] userauth is OK
2025-11-17T19:37:19.542 [DEBUG] [Thread-60090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:37:19.543 [DEBUG] [Thread-60090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:37:19.543 [DEBUG] [Thread-60090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:37:19.543 [DEBUG] [Thread-60090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:37:19.562 [INFO] [Thread-60090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:37:19.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:37:19.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:37:20.440 [DEBUG] [Thread-60090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:37:20.440 [DEBUG] [Thread-60090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:37:20.488 [DEBUG] [Thread-60090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:37:20.488 [DEBUG] [Thread-60090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:37:20.497 [DEBUG] [Thread-60090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:37:20.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:37:20.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:37:20.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:37:20.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:37:20.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:37:20.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:37:20.531 [DEBUG] [Thread-60090] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:37:24.091 [DEBUG] [Thread-60092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:37:32.371 [DEBUG] [Thread-60093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:37:39.137 [DEBUG] [Thread-60094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:37:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:37:50.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:37:50.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:37:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 37, 37), 27.07, 15.05, 0.0, 16.85, 19.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:37:51.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:37:37
2025-11-17T19:37:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:37:51.496 [DEBUG] [Thread-60095] [transport.py] [_log()] starting thread (client mode): 0xd31cc760
2025-11-17T19:37:51.496 [DEBUG] [Thread-60095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:37:51.518 [DEBUG] [Thread-60095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:37:51.519 [INFO] [Thread-60095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] client lang: <none>
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] server lang: <none>
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] kex follows: False
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:37:51.520 [DEBUG] [Thread-60095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:37:51.521 [DEBUG] [Thread-60095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:37:51.521 [DEBUG] [Thread-60095] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:37:51.521 [DEBUG] [Thread-60095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:37:51.521 [DEBUG] [Thread-60095] [transport.py] [_log()] Compression: none
2025-11-17T19:37:51.521 [DEBUG] [Thread-60095] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:37:51.538 [DEBUG] [Thread-60095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:37:51.539 [DEBUG] [Thread-60095] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:37:51.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:37:51.540 [DEBUG] [Thread-60095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:37:51.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:37:51.542 [DEBUG] [Thread-60095] [transport.py] [_log()] userauth is OK
2025-11-17T19:37:51.542 [DEBUG] [Thread-60095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:37:51.542 [DEBUG] [Thread-60095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:37:51.542 [DEBUG] [Thread-60095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:37:51.542 [DEBUG] [Thread-60095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:37:51.577 [INFO] [Thread-60095] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:37:51.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:37:52.208 [DEBUG] [Thread-60095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:37:52.209 [DEBUG] [Thread-60095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:37:52.209 [DEBUG] [Thread-60095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:37:52.249 [DEBUG] [Thread-60095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:37:52.250 [DEBUG] [Thread-60095] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:37:52.253 [DEBUG] [Thread-60095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:37:52.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:37:52.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:37:52.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:37:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:37:52.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:37:52.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:37:52.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:37:52.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:37:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:37:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.734078 -999.00  +19.30  17.87     20   -3.70 1 1 1 1 1   516    0 23.00 -11.27 ----- 19.4 17.9 280.2 26.8 19.8 -24.6 19.6 -24.1 19.4 -23.5 19.7 -24.1
2025-11-17T19:37:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:37:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:37:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.734078
2025-11-17T19:37:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:37:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:37:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:37:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:37:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:37:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:37:37', tmtdew=27.07, humidity=15.05, cloud=0.0, wind=16.85, temperature=19.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:37:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:37:52.281 [DEBUG] [Thread-60095] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:37:52.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:37:52.379 [DEBUG] [Thread-60098] [transport.py] [_log()] starting thread (client mode): 0xd31cef80
2025-11-17T19:37:52.379 [DEBUG] [Thread-60098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:37:52.394 [DEBUG] [Thread-60098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:37:52.395 [INFO] [Thread-60098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] client lang: <none>
2025-11-17T19:37:52.402 [DEBUG] [Thread-60098] [transport.py] [_log()] server lang: <none>
2025-11-17T19:37:52.403 [DEBUG] [Thread-60098] [transport.py] [_log()] kex follows: False
2025-11-17T19:37:52.403 [DEBUG] [Thread-60098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:37:52.403 [DEBUG] [Thread-60098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:37:52.403 [DEBUG] [Thread-60098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:37:52.403 [DEBUG] [Thread-60098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:37:52.403 [DEBUG] [Thread-60098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:37:52.403 [DEBUG] [Thread-60098] [transport.py] [_log()] Compression: none
2025-11-17T19:37:52.403 [DEBUG] [Thread-60098] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:37:52.462 [DEBUG] [Thread-60098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:37:52.463 [DEBUG] [Thread-60098] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:37:52.464 [DEBUG] [Thread-60098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:37:52.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:37:52.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:37:52.518 [DEBUG] [Thread-60098] [transport.py] [_log()] userauth is OK
2025-11-17T19:37:52.519 [DEBUG] [Thread-60098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:37:52.519 [DEBUG] [Thread-60098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:37:52.519 [DEBUG] [Thread-60098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:37:52.519 [DEBUG] [Thread-60098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:37:52.537 [INFO] [Thread-60098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:37:52.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:37:52.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:37:53.407 [DEBUG] [Thread-60098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:37:53.408 [DEBUG] [Thread-60098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:37:53.455 [DEBUG] [Thread-60098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:37:53.455 [DEBUG] [Thread-60098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:37:53.464 [DEBUG] [Thread-60098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:37:53.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:37:53.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:37:53.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:37:53.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:37:53.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:37:53.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:37:53.498 [DEBUG] [Thread-60098] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:37:54.169 [DEBUG] [Thread-60100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:38:09.216 [DEBUG] [Thread-60101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:38:11.765 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:38:11.765 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:38:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:38:23.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:38:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:38:24.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 38, 9), 27.08, 15.03, 0.0, 16.87, 19.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:38:24.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:38:09
2025-11-17T19:38:24.241 [DEBUG] [Thread-60102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:38:24.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:38:24.440 [DEBUG] [Thread-60103] [transport.py] [_log()] starting thread (client mode): 0xd31b3370
2025-11-17T19:38:24.441 [DEBUG] [Thread-60103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:38:24.461 [DEBUG] [Thread-60103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:38:24.462 [INFO] [Thread-60103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] client lang: <none>
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] server lang: <none>
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] kex follows: False
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] Compression: none
2025-11-17T19:38:24.465 [DEBUG] [Thread-60103] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:38:24.482 [DEBUG] [Thread-60103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:38:24.482 [DEBUG] [Thread-60103] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:38:24.483 [DEBUG] [Thread-60103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:38:24.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:38:24.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:38:24.485 [DEBUG] [Thread-60103] [transport.py] [_log()] userauth is OK
2025-11-17T19:38:24.485 [DEBUG] [Thread-60103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:38:24.485 [DEBUG] [Thread-60103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:38:24.485 [DEBUG] [Thread-60103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:38:24.485 [DEBUG] [Thread-60103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:38:24.509 [INFO] [Thread-60103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:38:24.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:38:25.134 [DEBUG] [Thread-60103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:38:25.134 [DEBUG] [Thread-60103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:38:25.134 [DEBUG] [Thread-60103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:38:25.174 [DEBUG] [Thread-60103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:38:25.175 [DEBUG] [Thread-60103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:38:25.178 [DEBUG] [Thread-60103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:38:25.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:38:25.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:38:25.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:38:25.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:38:25.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:38:25.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:38:25.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:38:25.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:38:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:38:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.734425 -999.00  +19.30  17.92     20   -3.70 1 1 1 1 1   495    0 22.14 -13.67 ----- 15.9 17.9 284.8 23.9 19.7 -24.9 19.7 -24.2 19.4 -23.7 19.6 -24.2
2025-11-17T19:38:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:38:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:38:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.734425
2025-11-17T19:38:25.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:38:25.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:38:25.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:38:25.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:38:25.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:38:25.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:38:09', tmtdew=27.08, humidity=15.03, cloud=0.0, wind=16.87, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:37:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:38:25.203 [DEBUG] [Thread-60103] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:38:25.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:38:25.298 [DEBUG] [Thread-60106] [transport.py] [_log()] starting thread (client mode): 0xd31b1fc0
2025-11-17T19:38:25.298 [DEBUG] [Thread-60106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:38:25.312 [DEBUG] [Thread-60106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:38:25.313 [INFO] [Thread-60106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] client lang: <none>
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] server lang: <none>
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] kex follows: False
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] Compression: none
2025-11-17T19:38:25.321 [DEBUG] [Thread-60106] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:38:25.382 [DEBUG] [Thread-60106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:38:25.383 [DEBUG] [Thread-60106] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:38:25.383 [DEBUG] [Thread-60106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:38:25.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:38:25.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:38:25.439 [DEBUG] [Thread-60106] [transport.py] [_log()] userauth is OK
2025-11-17T19:38:25.439 [DEBUG] [Thread-60106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:38:25.439 [DEBUG] [Thread-60106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:38:25.439 [DEBUG] [Thread-60106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:38:25.439 [DEBUG] [Thread-60106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:38:25.460 [INFO] [Thread-60106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:38:25.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:38:25.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:38:26.273 [DEBUG] [Thread-60106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:38:26.273 [DEBUG] [Thread-60106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:38:26.324 [DEBUG] [Thread-60106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:38:26.324 [DEBUG] [Thread-60106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:38:26.333 [DEBUG] [Thread-60106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:38:26.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:38:26.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:38:26.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:38:26.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:38:26.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:38:26.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:38:26.367 [DEBUG] [Thread-60106] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:38:32.444 [DEBUG] [Thread-60108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:38:39.269 [DEBUG] [Thread-60109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:38:54.311 [DEBUG] [Thread-60110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:38:56.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:38:56.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:38:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:38:57.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 38, 41), 27.04, 15.07, 0.0, 16.6, 19.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:38:57.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:38:41
2025-11-17T19:38:57.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:38:57.316 [DEBUG] [Thread-60111] [transport.py] [_log()] starting thread (client mode): 0xd31cf550
2025-11-17T19:38:57.316 [DEBUG] [Thread-60111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:38:57.337 [DEBUG] [Thread-60111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:38:57.337 [INFO] [Thread-60111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] client lang: <none>
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] server lang: <none>
2025-11-17T19:38:57.340 [DEBUG] [Thread-60111] [transport.py] [_log()] kex follows: False
2025-11-17T19:38:57.341 [DEBUG] [Thread-60111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:38:57.341 [DEBUG] [Thread-60111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:38:57.341 [DEBUG] [Thread-60111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:38:57.341 [DEBUG] [Thread-60111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:38:57.341 [DEBUG] [Thread-60111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:38:57.341 [DEBUG] [Thread-60111] [transport.py] [_log()] Compression: none
2025-11-17T19:38:57.341 [DEBUG] [Thread-60111] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:38:57.358 [DEBUG] [Thread-60111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:38:57.358 [DEBUG] [Thread-60111] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:38:57.359 [DEBUG] [Thread-60111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:38:57.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:38:57.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:38:57.361 [DEBUG] [Thread-60111] [transport.py] [_log()] userauth is OK
2025-11-17T19:38:57.361 [DEBUG] [Thread-60111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:38:57.361 [DEBUG] [Thread-60111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:38:57.361 [DEBUG] [Thread-60111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:38:57.361 [DEBUG] [Thread-60111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:38:57.382 [INFO] [Thread-60111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:38:57.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:38:58.016 [DEBUG] [Thread-60111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:38:58.016 [DEBUG] [Thread-60111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:38:58.016 [DEBUG] [Thread-60111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:38:58.058 [DEBUG] [Thread-60111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:38:58.058 [DEBUG] [Thread-60111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:38:58.061 [DEBUG] [Thread-60111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:38:58.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:38:58.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:38:58.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:38:58.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:38:58.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:38:58.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:38:58.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:38:58.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:38:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:38:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.734772 -999.00  +19.30  20.81     20   -3.70 1 1 1 1 1   474    0 22.76 -14.11 ----- 21.3 20.8 272.6 25.1 19.7 -24.8 19.6 -24.3 19.3 -23.6 19.6 -24.3
2025-11-17T19:38:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:38:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:38:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.734772
2025-11-17T19:38:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:38:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:38:58.086 [DEBUG] [Thread-60111] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:38:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:38:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:38:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:38:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:38:41', tmtdew=27.04, humidity=15.07, cloud=0.0, wind=16.6, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:38:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:38:58.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:38:58.182 [DEBUG] [Thread-60114] [transport.py] [_log()] starting thread (client mode): 0xd31b1060
2025-11-17T19:38:58.182 [DEBUG] [Thread-60114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:38:58.196 [DEBUG] [Thread-60114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:38:58.196 [INFO] [Thread-60114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:38:58.204 [DEBUG] [Thread-60114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:38:58.204 [DEBUG] [Thread-60114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:38:58.204 [DEBUG] [Thread-60114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:38:58.204 [DEBUG] [Thread-60114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:38:58.204 [DEBUG] [Thread-60114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:38:58.204 [DEBUG] [Thread-60114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] client lang: <none>
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] server lang: <none>
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] kex follows: False
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] Compression: none
2025-11-17T19:38:58.205 [DEBUG] [Thread-60114] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:38:58.265 [DEBUG] [Thread-60114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:38:58.266 [DEBUG] [Thread-60114] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:38:58.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:38:58.266 [DEBUG] [Thread-60114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:38:58.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:38:58.326 [DEBUG] [Thread-60114] [transport.py] [_log()] userauth is OK
2025-11-17T19:38:58.326 [DEBUG] [Thread-60114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:38:58.327 [DEBUG] [Thread-60114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:38:58.327 [DEBUG] [Thread-60114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:38:58.327 [DEBUG] [Thread-60114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:38:58.349 [INFO] [Thread-60114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:38:58.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:38:58.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:38:59.184 [DEBUG] [Thread-60114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:38:59.184 [DEBUG] [Thread-60114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:38:59.232 [DEBUG] [Thread-60114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:38:59.232 [DEBUG] [Thread-60114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:38:59.241 [DEBUG] [Thread-60114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:38:59.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:38:59.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:38:59.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:38:59.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:38:59.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:38:59.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:38:59.275 [DEBUG] [Thread-60114] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:39:09.342 [DEBUG] [Thread-60116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:39:17.677 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:39:17.678 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:39:24.383 [DEBUG] [Thread-60117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:39:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:39:29.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:39:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:39:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 39, 13), 27.03, 15.08, 0.0, 20.75, 19.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:39:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:39:13
2025-11-17T19:39:30.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:39:30.234 [DEBUG] [Thread-60118] [transport.py] [_log()] starting thread (client mode): 0xd0784ee0
2025-11-17T19:39:30.234 [DEBUG] [Thread-60118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:39:30.253 [DEBUG] [Thread-60118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:39:30.253 [INFO] [Thread-60118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:39:30.256 [DEBUG] [Thread-60118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:39:30.256 [DEBUG] [Thread-60118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:39:30.256 [DEBUG] [Thread-60118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:39:30.256 [DEBUG] [Thread-60118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:39:30.256 [DEBUG] [Thread-60118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:39:30.256 [DEBUG] [Thread-60118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:39:30.256 [DEBUG] [Thread-60118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:39:30.256 [DEBUG] [Thread-60118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] client lang: <none>
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] server lang: <none>
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] kex follows: False
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] Compression: none
2025-11-17T19:39:30.257 [DEBUG] [Thread-60118] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:39:30.273 [DEBUG] [Thread-60118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:39:30.273 [DEBUG] [Thread-60118] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:39:30.273 [DEBUG] [Thread-60118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:39:30.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:39:30.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:39:30.274 [DEBUG] [Thread-60118] [transport.py] [_log()] userauth is OK
2025-11-17T19:39:30.275 [DEBUG] [Thread-60118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:39:30.275 [DEBUG] [Thread-60118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:39:30.275 [DEBUG] [Thread-60118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:39:30.275 [DEBUG] [Thread-60118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:39:30.305 [INFO] [Thread-60118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:39:30.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:39:30.930 [DEBUG] [Thread-60118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:39:30.930 [DEBUG] [Thread-60118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:39:30.930 [DEBUG] [Thread-60118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:39:30.971 [DEBUG] [Thread-60118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:39:30.971 [DEBUG] [Thread-60118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:39:30.974 [DEBUG] [Thread-60118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:39:30.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:39:30.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:39:30.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:39:30.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:39:30.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:39:30.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:39:30.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:39:30.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.735119 -999.00  +19.30  16.54     20   -3.60 1 1 1 1 1   453    0 22.53 -15.20 ----- 14.8 16.5 276.3 19.2 19.7 -25.1 19.6 -24.3 19.3 -23.7 19.6 -24.5
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.735119
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:39:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:39:13', tmtdew=27.03, humidity=15.08, cloud=0.0, wind=20.75, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:38:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:39:30.992 [DEBUG] [Thread-60118] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:39:31.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:39:31.083 [DEBUG] [Thread-60121] [transport.py] [_log()] starting thread (client mode): 0xd31ce9e0
2025-11-17T19:39:31.083 [DEBUG] [Thread-60121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:39:31.098 [DEBUG] [Thread-60121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:39:31.098 [INFO] [Thread-60121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] client lang: <none>
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] server lang: <none>
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] kex follows: False
2025-11-17T19:39:31.105 [DEBUG] [Thread-60121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:39:31.106 [DEBUG] [Thread-60121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:39:31.106 [DEBUG] [Thread-60121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:39:31.106 [DEBUG] [Thread-60121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:39:31.106 [DEBUG] [Thread-60121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:39:31.106 [DEBUG] [Thread-60121] [transport.py] [_log()] Compression: none
2025-11-17T19:39:31.106 [DEBUG] [Thread-60121] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:39:31.166 [DEBUG] [Thread-60121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:39:31.167 [DEBUG] [Thread-60121] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:39:31.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:39:31.168 [DEBUG] [Thread-60121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:39:31.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:39:31.223 [DEBUG] [Thread-60121] [transport.py] [_log()] userauth is OK
2025-11-17T19:39:31.223 [DEBUG] [Thread-60121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:39:31.223 [DEBUG] [Thread-60121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:39:31.223 [DEBUG] [Thread-60121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:39:31.224 [DEBUG] [Thread-60121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:39:31.245 [INFO] [Thread-60121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:39:31.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:39:31.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:39:32.108 [DEBUG] [Thread-60121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:39:32.108 [DEBUG] [Thread-60121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:39:32.156 [DEBUG] [Thread-60121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:39:32.156 [DEBUG] [Thread-60121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:39:32.165 [DEBUG] [Thread-60121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:39:32.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:39:32.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:39:32.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:39:32.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:39:32.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:39:32.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:39:32.200 [DEBUG] [Thread-60121] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:39:32.520 [DEBUG] [Thread-60123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:39:39.418 [DEBUG] [Thread-60124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:39:54.457 [DEBUG] [Thread-60125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:40:02.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:40:02.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:40:02.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:40:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 39, 45), 27.03, 15.08, 0.0, 17.79, 19.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:40:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:39:45
2025-11-17T19:40:03.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:40:03.166 [DEBUG] [Thread-60126] [transport.py] [_log()] starting thread (client mode): 0xd07bd5d0
2025-11-17T19:40:03.166 [DEBUG] [Thread-60126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:40:03.187 [DEBUG] [Thread-60126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:40:03.187 [INFO] [Thread-60126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] client lang: <none>
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] server lang: <none>
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] kex follows: False
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:40:03.190 [DEBUG] [Thread-60126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:40:03.191 [DEBUG] [Thread-60126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:40:03.191 [DEBUG] [Thread-60126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:40:03.191 [DEBUG] [Thread-60126] [transport.py] [_log()] Compression: none
2025-11-17T19:40:03.191 [DEBUG] [Thread-60126] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:40:03.207 [DEBUG] [Thread-60126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:40:03.207 [DEBUG] [Thread-60126] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:40:03.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:40:03.208 [DEBUG] [Thread-60126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:40:03.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:40:03.209 [DEBUG] [Thread-60126] [transport.py] [_log()] userauth is OK
2025-11-17T19:40:03.210 [DEBUG] [Thread-60126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:40:03.210 [DEBUG] [Thread-60126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:40:03.210 [DEBUG] [Thread-60126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:40:03.210 [DEBUG] [Thread-60126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:40:03.229 [INFO] [Thread-60126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:40:03.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:40:06.613 [DEBUG] [Thread-60126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:40:06.613 [DEBUG] [Thread-60126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:40:06.613 [DEBUG] [Thread-60126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:40:06.654 [DEBUG] [Thread-60126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:40:06.654 [DEBUG] [Thread-60126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:40:06.656 [DEBUG] [Thread-60126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:40:06.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:40:06.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:40:06.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:40:06.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:40:06.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:40:06.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:40:06.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.735467 -999.00  +19.30  16.13     20   -3.60 1 1 1 1 1   432    0 22.75 -17.65 ----- 15.7 16.1 273.4 23.8 19.6 -25.0 19.6 -24.3 19.3 -23.7 19.6 -24.3
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.735467
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:40:06.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:39:45', tmtdew=27.03, humidity=15.08, cloud=0.0, wind=17.79, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:39:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:40:06.675 [DEBUG] [Thread-60126] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:40:06.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:40:06.762 [DEBUG] [Thread-60129] [transport.py] [_log()] starting thread (client mode): 0xd07bd030
2025-11-17T19:40:06.762 [DEBUG] [Thread-60129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:40:06.778 [DEBUG] [Thread-60129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:40:06.778 [INFO] [Thread-60129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] client lang: <none>
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] server lang: <none>
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] kex follows: False
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] Compression: none
2025-11-17T19:40:06.786 [DEBUG] [Thread-60129] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:40:06.841 [DEBUG] [Thread-60129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:40:06.841 [DEBUG] [Thread-60129] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:40:06.841 [DEBUG] [Thread-60129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:40:06.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:40:06.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:40:06.898 [DEBUG] [Thread-60129] [transport.py] [_log()] userauth is OK
2025-11-17T19:40:06.898 [DEBUG] [Thread-60129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:40:06.898 [DEBUG] [Thread-60129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:40:06.899 [DEBUG] [Thread-60129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:40:06.899 [DEBUG] [Thread-60129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:40:06.913 [INFO] [Thread-60129] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:40:06.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:40:06.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:40:07.765 [DEBUG] [Thread-60129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:40:07.765 [DEBUG] [Thread-60129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:40:07.813 [DEBUG] [Thread-60129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:40:07.813 [DEBUG] [Thread-60129] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:40:07.821 [DEBUG] [Thread-60129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:40:07.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:40:07.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:40:07.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:40:07.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:40:07.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:40:07.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:40:07.852 [DEBUG] [Thread-60129] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:40:09.486 [DEBUG] [Thread-60131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:40:23.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:40:23.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:40:24.521 [DEBUG] [Thread-60132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:40:32.602 [DEBUG] [Thread-60133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:40:37.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:40:37.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:40:37.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
2025-11-17T19:40:38.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 40, 17), 27.06, 15.05, 0.0, 17.26, 19.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:40:38.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:40:17
2025-11-17T19:40:38.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:40:38.800 [DEBUG] [Thread-60134] [transport.py] [_log()] starting thread (client mode): 0xd31cd9c0
2025-11-17T19:40:38.800 [DEBUG] [Thread-60134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:40:38.821 [DEBUG] [Thread-60134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:40:38.821 [INFO] [Thread-60134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:40:38.822 [DEBUG] [Thread-60134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:40:38.822 [DEBUG] [Thread-60134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] client lang: <none>
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] server lang: <none>
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] kex follows: False
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] Compression: none
2025-11-17T19:40:38.823 [DEBUG] [Thread-60134] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:40:38.846 [DEBUG] [Thread-60134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:40:38.847 [DEBUG] [Thread-60134] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:40:38.847 [DEBUG] [Thread-60134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:40:38.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:40:38.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:40:38.849 [DEBUG] [Thread-60134] [transport.py] [_log()] userauth is OK
2025-11-17T19:40:38.850 [DEBUG] [Thread-60134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:40:38.850 [DEBUG] [Thread-60134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:40:38.850 [DEBUG] [Thread-60134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:40:38.850 [DEBUG] [Thread-60134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:40:38.868 [INFO] [Thread-60134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:40:38.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:40:39.498 [DEBUG] [Thread-60134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:40:39.498 [DEBUG] [Thread-60134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:40:39.498 [DEBUG] [Thread-60134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:40:39.538 [DEBUG] [Thread-60134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:40:39.539 [DEBUG] [Thread-60134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:40:39.541 [DEBUG] [Thread-60134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:40:39.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:40:39.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:40:39.554 [DEBUG] [Thread-60136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:40:39.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:40:39.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:40:39.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:40:39.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:40:39.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:40:39.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:40:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:40:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.735814 -999.00  +19.20  13.42     20   -3.70 1 1 1 1 1   411    0 23.00 -17.92 ----- 11.7 13.4 281.6 16.2 19.6 -25.1 19.6 -24.4 19.3 -23.8 19.6 -24.5
2025-11-17T19:40:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:40:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:40:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.735814
2025-11-17T19:40:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:40:39.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:40:39.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:40:39.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:40:39.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:40:39.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:40:17', tmtdew=27.06, humidity=15.05, cloud=0.0, wind=17.26, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:39:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:40:39.564 [DEBUG] [Thread-60134] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:40:39.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:40:39.660 [DEBUG] [Thread-60138] [transport.py] [_log()] starting thread (client mode): 0xd31cf3d0
2025-11-17T19:40:39.660 [DEBUG] [Thread-60138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:40:39.675 [DEBUG] [Thread-60138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:40:39.676 [INFO] [Thread-60138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] client lang: <none>
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] server lang: <none>
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] kex follows: False
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:40:39.683 [DEBUG] [Thread-60138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:40:39.684 [DEBUG] [Thread-60138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:40:39.684 [DEBUG] [Thread-60138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:40:39.684 [DEBUG] [Thread-60138] [transport.py] [_log()] Compression: none
2025-11-17T19:40:39.684 [DEBUG] [Thread-60138] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:40:39.742 [DEBUG] [Thread-60138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:40:39.743 [DEBUG] [Thread-60138] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:40:39.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:40:39.744 [DEBUG] [Thread-60138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:40:39.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:40:39.799 [DEBUG] [Thread-60138] [transport.py] [_log()] userauth is OK
2025-11-17T19:40:39.799 [DEBUG] [Thread-60138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:40:39.799 [DEBUG] [Thread-60138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:40:39.799 [DEBUG] [Thread-60138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:40:39.799 [DEBUG] [Thread-60138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:40:39.818 [INFO] [Thread-60138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:40:39.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:40:39.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:40:40.632 [DEBUG] [Thread-60138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:40:40.632 [DEBUG] [Thread-60138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:40:40.679 [DEBUG] [Thread-60138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:40:40.679 [DEBUG] [Thread-60138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:40:40.688 [DEBUG] [Thread-60138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:40:40.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:40:40.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:40:40.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:40:40.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:40:40.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:40:40.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:40:40.723 [DEBUG] [Thread-60138] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:40:54.590 [DEBUG] [Thread-60140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:41:09.627 [DEBUG] [Thread-60141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:41:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:41:10.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:41:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:41:11.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 40, 49), 27.04, 15.07, 0.0, 17.75, 19.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:41:11.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:40:49
2025-11-17T19:41:11.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:41:11.670 [DEBUG] [Thread-60142] [transport.py] [_log()] starting thread (client mode): 0xd31ce230
2025-11-17T19:41:11.670 [DEBUG] [Thread-60142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:41:11.691 [DEBUG] [Thread-60142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:41:11.691 [INFO] [Thread-60142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] client lang: <none>
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] server lang: <none>
2025-11-17T19:41:11.695 [DEBUG] [Thread-60142] [transport.py] [_log()] kex follows: False
2025-11-17T19:41:11.696 [DEBUG] [Thread-60142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:41:11.696 [DEBUG] [Thread-60142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:41:11.696 [DEBUG] [Thread-60142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:41:11.696 [DEBUG] [Thread-60142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:41:11.696 [DEBUG] [Thread-60142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:41:11.696 [DEBUG] [Thread-60142] [transport.py] [_log()] Compression: none
2025-11-17T19:41:11.696 [DEBUG] [Thread-60142] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:41:11.714 [DEBUG] [Thread-60142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:41:11.714 [DEBUG] [Thread-60142] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:41:11.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:41:11.715 [DEBUG] [Thread-60142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:41:11.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:41:11.717 [DEBUG] [Thread-60142] [transport.py] [_log()] userauth is OK
2025-11-17T19:41:11.717 [DEBUG] [Thread-60142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:41:11.717 [DEBUG] [Thread-60142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:41:11.717 [DEBUG] [Thread-60142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:41:11.717 [DEBUG] [Thread-60142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:41:11.735 [INFO] [Thread-60142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:41:11.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:41:12.400 [DEBUG] [Thread-60142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:41:12.400 [DEBUG] [Thread-60142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:41:12.400 [DEBUG] [Thread-60142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:41:12.441 [DEBUG] [Thread-60142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:41:12.442 [DEBUG] [Thread-60142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:41:12.445 [DEBUG] [Thread-60142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:41:12.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:41:12.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:41:12.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:41:12.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:41:12.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:41:12.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:41:12.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:41:12.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:41:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:41:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.736508 -999.00  +19.20  12.82     20   -3.70 1 1 1 1 1   370    0 22.35 -19.80 ----- 12.4 12.8 284.4 17.5 19.6 -25.2 19.6 -24.3 19.2 -23.9 19.5 -24.3
2025-11-17T19:41:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:41:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:41:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.736508
2025-11-17T19:41:12.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:41:12.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:41:12.470 [DEBUG] [Thread-60142] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:41:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:41:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:41:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:41:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:40:49', tmtdew=27.04, humidity=15.07, cloud=0.0, wind=17.75, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:40:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:41:12.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:41:12.568 [DEBUG] [Thread-60145] [transport.py] [_log()] starting thread (client mode): 0xd0786e00
2025-11-17T19:41:12.569 [DEBUG] [Thread-60145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:41:12.584 [DEBUG] [Thread-60145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:41:12.584 [INFO] [Thread-60145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:41:12.591 [DEBUG] [Thread-60145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:41:12.591 [DEBUG] [Thread-60145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:41:12.591 [DEBUG] [Thread-60145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:41:12.591 [DEBUG] [Thread-60145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:41:12.591 [DEBUG] [Thread-60145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] client lang: <none>
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] server lang: <none>
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] kex follows: False
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] Compression: none
2025-11-17T19:41:12.592 [DEBUG] [Thread-60145] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:41:12.654 [DEBUG] [Thread-60145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:41:12.655 [DEBUG] [Thread-60145] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:41:12.656 [DEBUG] [Thread-60145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:41:12.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:41:12.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:41:12.711 [DEBUG] [Thread-60145] [transport.py] [_log()] userauth is OK
2025-11-17T19:41:12.711 [DEBUG] [Thread-60145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:41:12.711 [DEBUG] [Thread-60145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:41:12.711 [DEBUG] [Thread-60145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:41:12.711 [DEBUG] [Thread-60145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:41:12.731 [INFO] [Thread-60145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:41:12.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:41:12.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:41:13.622 [DEBUG] [Thread-60145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:41:13.622 [DEBUG] [Thread-60145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:41:13.669 [DEBUG] [Thread-60145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:41:13.669 [DEBUG] [Thread-60145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:41:13.678 [DEBUG] [Thread-60145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:41:13.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:41:13.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:41:13.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:41:13.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:41:13.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:41:13.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:41:13.712 [DEBUG] [Thread-60145] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:41:24.660 [DEBUG] [Thread-60147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:41:29.110 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:41:29.111 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:41:32.670 [DEBUG] [Thread-60148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:41:39.693 [DEBUG] [Thread-60149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:41:43.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:41:43.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:41:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:41:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 41, 21), 27.04, 15.08, 0.0, 18.93, 19.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:41:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:41:21
2025-11-17T19:41:44.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:41:44.658 [DEBUG] [Thread-60150] [transport.py] [_log()] starting thread (client mode): 0xd07bcd00
2025-11-17T19:41:44.658 [DEBUG] [Thread-60150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:41:44.677 [DEBUG] [Thread-60150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:41:44.678 [INFO] [Thread-60150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:41:44.680 [DEBUG] [Thread-60150] [transport.py] [_log()] client lang: <none>
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] server lang: <none>
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] kex follows: False
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] Compression: none
2025-11-17T19:41:44.681 [DEBUG] [Thread-60150] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:41:44.702 [DEBUG] [Thread-60150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:41:44.702 [DEBUG] [Thread-60150] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:41:44.703 [DEBUG] [Thread-60150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:41:44.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:41:44.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:41:44.706 [DEBUG] [Thread-60150] [transport.py] [_log()] userauth is OK
2025-11-17T19:41:44.706 [DEBUG] [Thread-60150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:41:44.706 [DEBUG] [Thread-60150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:41:44.706 [DEBUG] [Thread-60150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:41:44.706 [DEBUG] [Thread-60150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:41:44.728 [INFO] [Thread-60150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:41:44.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:41:45.373 [DEBUG] [Thread-60150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:41:45.373 [DEBUG] [Thread-60150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:41:45.373 [DEBUG] [Thread-60150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:41:45.415 [DEBUG] [Thread-60150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:41:45.415 [DEBUG] [Thread-60150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:41:45.418 [DEBUG] [Thread-60150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:41:45.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:41:45.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:41:45.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:41:45.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:41:45.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:41:45.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:41:45.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:41:45.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:41:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:41:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.736856 -999.00  +19.20  21.51     20   -3.70 1 1 1 1 1   350    0 22.60 -24.88 ----- 18.6 21.5 276.0 24.5 19.6 -25.0 19.5 -24.2 19.3 -23.4 19.5 -24.3
2025-11-17T19:41:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:41:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:41:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.736856
2025-11-17T19:41:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:41:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:41:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:41:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:41:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:41:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:41:21', tmtdew=27.04, humidity=15.08, cloud=0.0, wind=18.93, temperature=19.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:41:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:41:45.443 [DEBUG] [Thread-60150] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:41:45.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:41:45.537 [DEBUG] [Thread-60153] [transport.py] [_log()] starting thread (client mode): 0xd078e500
2025-11-17T19:41:45.537 [DEBUG] [Thread-60153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:41:45.552 [DEBUG] [Thread-60153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:41:45.552 [INFO] [Thread-60153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] client lang: <none>
2025-11-17T19:41:45.560 [DEBUG] [Thread-60153] [transport.py] [_log()] server lang: <none>
2025-11-17T19:41:45.561 [DEBUG] [Thread-60153] [transport.py] [_log()] kex follows: False
2025-11-17T19:41:45.561 [DEBUG] [Thread-60153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:41:45.561 [DEBUG] [Thread-60153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:41:45.561 [DEBUG] [Thread-60153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:41:45.561 [DEBUG] [Thread-60153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:41:45.561 [DEBUG] [Thread-60153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:41:45.561 [DEBUG] [Thread-60153] [transport.py] [_log()] Compression: none
2025-11-17T19:41:45.561 [DEBUG] [Thread-60153] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:41:45.619 [DEBUG] [Thread-60153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:41:45.619 [DEBUG] [Thread-60153] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:41:45.620 [DEBUG] [Thread-60153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:41:45.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:41:45.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:41:45.675 [DEBUG] [Thread-60153] [transport.py] [_log()] userauth is OK
2025-11-17T19:41:45.675 [DEBUG] [Thread-60153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:41:45.676 [DEBUG] [Thread-60153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:41:45.676 [DEBUG] [Thread-60153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:41:45.676 [DEBUG] [Thread-60153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:41:45.694 [INFO] [Thread-60153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:41:45.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:41:45.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:41:46.546 [DEBUG] [Thread-60153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:41:46.546 [DEBUG] [Thread-60153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:41:46.594 [DEBUG] [Thread-60153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:41:46.594 [DEBUG] [Thread-60153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:41:46.603 [DEBUG] [Thread-60153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:41:46.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:41:46.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:41:46.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:41:46.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:41:46.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:41:46.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:41:46.636 [DEBUG] [Thread-60153] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:41:54.723 [DEBUG] [Thread-60155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:42:09.754 [DEBUG] [Thread-60156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:42:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:42:16.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:42:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:42:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 41, 53), 27.05, 15.05, 0.0, 20.89, 19.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:42:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:41:53
2025-11-17T19:42:17.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:42:17.588 [DEBUG] [Thread-60157] [transport.py] [_log()] starting thread (client mode): 0xd07cf3a0
2025-11-17T19:42:17.588 [DEBUG] [Thread-60157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:42:17.608 [DEBUG] [Thread-60157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:42:17.609 [INFO] [Thread-60157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:42:17.612 [DEBUG] [Thread-60157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] client lang: <none>
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] server lang: <none>
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] kex follows: False
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] Compression: none
2025-11-17T19:42:17.613 [DEBUG] [Thread-60157] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:42:17.630 [DEBUG] [Thread-60157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:42:17.631 [DEBUG] [Thread-60157] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:42:17.631 [DEBUG] [Thread-60157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:42:17.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:42:17.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:42:17.633 [DEBUG] [Thread-60157] [transport.py] [_log()] userauth is OK
2025-11-17T19:42:17.633 [DEBUG] [Thread-60157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:42:17.633 [DEBUG] [Thread-60157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:42:17.633 [DEBUG] [Thread-60157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:42:17.633 [DEBUG] [Thread-60157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:42:17.657 [INFO] [Thread-60157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:42:17.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:42:18.296 [DEBUG] [Thread-60157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:42:18.297 [DEBUG] [Thread-60157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:42:18.297 [DEBUG] [Thread-60157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:42:18.337 [DEBUG] [Thread-60157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:42:18.338 [DEBUG] [Thread-60157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:42:18.340 [DEBUG] [Thread-60157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:42:18.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:42:18.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:42:18.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:42:18.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:42:18.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:42:18.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:42:18.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:42:18.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:42:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:42:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.737203 -999.00  +19.20  13.75     20   -3.70 1 1 1 1 1   330    0 22.58 -25.61 ----- 16.3 13.8 278.6 23.9 19.6 -25.0 19.5 -24.4 19.3 -23.7 19.5 -24.4
2025-11-17T19:42:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:42:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:42:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.737203
2025-11-17T19:42:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:42:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:42:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:42:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:42:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:42:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:41:53', tmtdew=27.05, humidity=15.05, cloud=0.0, wind=20.89, temperature=19.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:41:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:42:18.365 [DEBUG] [Thread-60157] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:42:18.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:42:18.462 [DEBUG] [Thread-60160] [transport.py] [_log()] starting thread (client mode): 0xd07bdd50
2025-11-17T19:42:18.462 [DEBUG] [Thread-60160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:42:18.476 [DEBUG] [Thread-60160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:42:18.476 [INFO] [Thread-60160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:42:18.484 [DEBUG] [Thread-60160] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:42:18.484 [DEBUG] [Thread-60160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:42:18.484 [DEBUG] [Thread-60160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:42:18.484 [DEBUG] [Thread-60160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] client lang: <none>
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] server lang: <none>
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] kex follows: False
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] Compression: none
2025-11-17T19:42:18.485 [DEBUG] [Thread-60160] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:42:18.548 [DEBUG] [Thread-60160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:42:18.548 [DEBUG] [Thread-60160] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:42:18.549 [DEBUG] [Thread-60160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:42:18.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:42:18.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:42:18.607 [DEBUG] [Thread-60160] [transport.py] [_log()] userauth is OK
2025-11-17T19:42:18.607 [DEBUG] [Thread-60160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:42:18.607 [DEBUG] [Thread-60160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:42:18.608 [DEBUG] [Thread-60160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:42:18.608 [DEBUG] [Thread-60160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:42:18.626 [INFO] [Thread-60160] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:42:18.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:42:18.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:42:19.476 [DEBUG] [Thread-60160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:42:19.477 [DEBUG] [Thread-60160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:42:19.525 [DEBUG] [Thread-60160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:42:19.525 [DEBUG] [Thread-60160] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:42:19.537 [DEBUG] [Thread-60160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:42:19.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:42:19.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:42:19.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:42:19.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:42:19.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:42:19.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:42:19.586 [DEBUG] [Thread-60160] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:42:24.782 [DEBUG] [Thread-60162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:42:32.726 [DEBUG] [Thread-60163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:42:34.907 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:42:34.909 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:42:39.820 [DEBUG] [Thread-60164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:42:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:42:49.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:42:49.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:42:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 42, 25), 27.03, 15.08, 0.0, 20.36, 19.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:42:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:42:25
2025-11-17T19:42:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:42:50.524 [DEBUG] [Thread-60165] [transport.py] [_log()] starting thread (client mode): 0xd31ee980
2025-11-17T19:42:50.524 [DEBUG] [Thread-60165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:42:50.543 [DEBUG] [Thread-60165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:42:50.544 [INFO] [Thread-60165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:42:50.547 [DEBUG] [Thread-60165] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:42:50.547 [DEBUG] [Thread-60165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:42:50.547 [DEBUG] [Thread-60165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:42:50.547 [DEBUG] [Thread-60165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:42:50.547 [DEBUG] [Thread-60165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:42:50.547 [DEBUG] [Thread-60165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:42:50.547 [DEBUG] [Thread-60165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] client lang: <none>
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] server lang: <none>
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] kex follows: False
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] Compression: none
2025-11-17T19:42:50.548 [DEBUG] [Thread-60165] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:42:50.566 [DEBUG] [Thread-60165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:42:50.566 [DEBUG] [Thread-60165] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:42:50.567 [DEBUG] [Thread-60165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:42:50.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:42:50.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:42:50.569 [DEBUG] [Thread-60165] [transport.py] [_log()] userauth is OK
2025-11-17T19:42:50.569 [DEBUG] [Thread-60165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:42:50.570 [DEBUG] [Thread-60165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:42:50.570 [DEBUG] [Thread-60165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:42:50.570 [DEBUG] [Thread-60165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:42:50.603 [INFO] [Thread-60165] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:42:50.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:42:51.228 [DEBUG] [Thread-60165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:42:51.228 [DEBUG] [Thread-60165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:42:51.228 [DEBUG] [Thread-60165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:42:51.268 [DEBUG] [Thread-60165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:42:51.268 [DEBUG] [Thread-60165] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:42:51.271 [DEBUG] [Thread-60165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:42:51.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:42:51.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:42:51.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:42:51.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:42:51.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:42:51.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:42:51.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:42:51.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:42:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:42:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.737550 -999.00  +19.20  14.49     20   -3.70 1 1 1 1 1   311    0 22.41 -26.66 ----- 18.9 14.5 275.5 22.9 19.6 -25.0 19.5 -24.2 19.2 -23.5 19.5 -24.1
2025-11-17T19:42:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:42:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:42:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.737550
2025-11-17T19:42:51.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:42:51.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:42:51.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:42:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:42:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:42:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:42:25', tmtdew=27.03, humidity=15.08, cloud=0.0, wind=20.36, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:42:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:42:51.298 [DEBUG] [Thread-60165] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:42:51.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:42:51.397 [DEBUG] [Thread-60168] [transport.py] [_log()] starting thread (client mode): 0xd07853f0
2025-11-17T19:42:51.397 [DEBUG] [Thread-60168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:42:51.411 [DEBUG] [Thread-60168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:42:51.412 [INFO] [Thread-60168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] client lang: <none>
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] server lang: <none>
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] kex follows: False
2025-11-17T19:42:51.419 [DEBUG] [Thread-60168] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:42:51.420 [DEBUG] [Thread-60168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:42:51.420 [DEBUG] [Thread-60168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:42:51.420 [DEBUG] [Thread-60168] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:42:51.420 [DEBUG] [Thread-60168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:42:51.420 [DEBUG] [Thread-60168] [transport.py] [_log()] Compression: none
2025-11-17T19:42:51.420 [DEBUG] [Thread-60168] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:42:51.479 [DEBUG] [Thread-60168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:42:51.479 [DEBUG] [Thread-60168] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:42:51.480 [DEBUG] [Thread-60168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:42:51.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:42:51.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:42:51.535 [DEBUG] [Thread-60168] [transport.py] [_log()] userauth is OK
2025-11-17T19:42:51.536 [DEBUG] [Thread-60168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:42:51.536 [DEBUG] [Thread-60168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:42:51.536 [DEBUG] [Thread-60168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:42:51.536 [DEBUG] [Thread-60168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:42:51.555 [INFO] [Thread-60168] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:42:51.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:42:51.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:42:52.396 [DEBUG] [Thread-60168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:42:52.396 [DEBUG] [Thread-60168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:42:52.444 [DEBUG] [Thread-60168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:42:52.444 [DEBUG] [Thread-60168] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:42:52.453 [DEBUG] [Thread-60168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:42:52.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:42:52.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:42:52.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:42:52.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:42:52.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:42:52.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:42:52.488 [DEBUG] [Thread-60168] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:42:54.845 [DEBUG] [Thread-60170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:43:09.897 [DEBUG] [Thread-60171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:43:22.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:43:22.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:43:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:43:23.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 42, 57), 27.09, 15.08, 0.0, 22.44, 19.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:43:23.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:42:57
2025-11-17T19:43:23.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:43:23.485 [DEBUG] [Thread-60172] [transport.py] [_log()] starting thread (client mode): 0xd07bfb50
2025-11-17T19:43:23.485 [DEBUG] [Thread-60172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:43:23.505 [DEBUG] [Thread-60172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:43:23.505 [INFO] [Thread-60172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] client lang: <none>
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] server lang: <none>
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] kex follows: False
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:43:23.508 [DEBUG] [Thread-60172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:43:23.509 [DEBUG] [Thread-60172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:43:23.509 [DEBUG] [Thread-60172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:43:23.509 [DEBUG] [Thread-60172] [transport.py] [_log()] Compression: none
2025-11-17T19:43:23.509 [DEBUG] [Thread-60172] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:43:23.526 [DEBUG] [Thread-60172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:43:23.526 [DEBUG] [Thread-60172] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:43:23.526 [DEBUG] [Thread-60172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:43:23.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:43:23.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:43:23.527 [DEBUG] [Thread-60172] [transport.py] [_log()] userauth is OK
2025-11-17T19:43:23.527 [DEBUG] [Thread-60172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:43:23.527 [DEBUG] [Thread-60172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:43:23.527 [DEBUG] [Thread-60172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:43:23.527 [DEBUG] [Thread-60172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:43:23.542 [INFO] [Thread-60172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:43:23.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:43:24.189 [DEBUG] [Thread-60172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:43:24.189 [DEBUG] [Thread-60172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:43:24.189 [DEBUG] [Thread-60172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:43:24.229 [DEBUG] [Thread-60172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:43:24.229 [DEBUG] [Thread-60172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:43:24.232 [DEBUG] [Thread-60172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:43:24.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:43:24.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:43:24.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:43:24.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:43:24.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:43:24.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:43:24.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:43:24.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:43:24.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:43:24.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.737897 -999.00  +19.20  14.10     20   -3.70 1 1 1 1 1   292    0 21.80 -27.41 ----- 17.2 14.1 278.5 22.5 19.5 -25.0 19.5 -24.3 19.2 -23.4 19.5 -24.0
2025-11-17T19:43:24.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:43:24.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:43:24.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.737897
2025-11-17T19:43:24.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:43:24.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:43:24.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:43:24.257 [DEBUG] [Thread-60172] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:43:24.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:43:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:43:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:42:57', tmtdew=27.09, humidity=15.08, cloud=0.0, wind=22.44, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:42:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:43:24.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:43:24.354 [DEBUG] [Thread-60175] [transport.py] [_log()] starting thread (client mode): 0xd078db40
2025-11-17T19:43:24.354 [DEBUG] [Thread-60175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:43:24.368 [DEBUG] [Thread-60175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:43:24.369 [INFO] [Thread-60175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:43:24.376 [DEBUG] [Thread-60175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:43:24.376 [DEBUG] [Thread-60175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:43:24.376 [DEBUG] [Thread-60175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] client lang: <none>
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] server lang: <none>
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] kex follows: False
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:43:24.377 [DEBUG] [Thread-60175] [transport.py] [_log()] Compression: none
2025-11-17T19:43:24.378 [DEBUG] [Thread-60175] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:43:24.438 [DEBUG] [Thread-60175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:43:24.438 [DEBUG] [Thread-60175] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:43:24.439 [DEBUG] [Thread-60175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:43:24.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:43:24.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:43:24.499 [DEBUG] [Thread-60175] [transport.py] [_log()] userauth is OK
2025-11-17T19:43:24.499 [DEBUG] [Thread-60175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:43:24.499 [DEBUG] [Thread-60175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:43:24.499 [DEBUG] [Thread-60175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:43:24.499 [DEBUG] [Thread-60175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:43:24.522 [INFO] [Thread-60175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:43:24.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:43:24.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:43:24.927 [DEBUG] [Thread-60177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:43:25.351 [DEBUG] [Thread-60175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:43:25.351 [DEBUG] [Thread-60175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:43:25.399 [DEBUG] [Thread-60175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:43:25.399 [DEBUG] [Thread-60175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:43:25.408 [DEBUG] [Thread-60175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:43:25.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:43:25.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:43:25.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:43:25.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:43:25.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:43:25.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:43:25.441 [DEBUG] [Thread-60175] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:43:32.784 [DEBUG] [Thread-60178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:43:39.966 [DEBUG] [Thread-60179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:43:40.300 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:43:40.301 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:43:54.999 [DEBUG] [Thread-60180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:43:55.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:43:55.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:43:55.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:43:56.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 43, 29), 27.13, 15.02, 0.0, 22.43, 19.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:43:56.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:43:29
2025-11-17T19:43:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:43:56.389 [DEBUG] [Thread-60181] [transport.py] [_log()] starting thread (client mode): 0xd31cf160
2025-11-17T19:43:56.389 [DEBUG] [Thread-60181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:43:56.408 [DEBUG] [Thread-60181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:43:56.409 [INFO] [Thread-60181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:43:56.412 [DEBUG] [Thread-60181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:43:56.412 [DEBUG] [Thread-60181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:43:56.412 [DEBUG] [Thread-60181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:43:56.412 [DEBUG] [Thread-60181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:43:56.412 [DEBUG] [Thread-60181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:43:56.412 [DEBUG] [Thread-60181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:43:56.412 [DEBUG] [Thread-60181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:43:56.412 [DEBUG] [Thread-60181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] client lang: <none>
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] server lang: <none>
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] kex follows: False
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] Compression: none
2025-11-17T19:43:56.413 [DEBUG] [Thread-60181] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:43:56.430 [DEBUG] [Thread-60181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:43:56.431 [DEBUG] [Thread-60181] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:43:56.431 [DEBUG] [Thread-60181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:43:56.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:43:56.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:43:56.433 [DEBUG] [Thread-60181] [transport.py] [_log()] userauth is OK
2025-11-17T19:43:56.433 [DEBUG] [Thread-60181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:43:56.433 [DEBUG] [Thread-60181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:43:56.433 [DEBUG] [Thread-60181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:43:56.433 [DEBUG] [Thread-60181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:43:56.457 [INFO] [Thread-60181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:43:56.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:43:57.081 [DEBUG] [Thread-60181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:43:57.081 [DEBUG] [Thread-60181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:43:57.081 [DEBUG] [Thread-60181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:43:57.122 [DEBUG] [Thread-60181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:43:57.122 [DEBUG] [Thread-60181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:43:57.124 [DEBUG] [Thread-60181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:43:57.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:43:57.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:43:57.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:43:57.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:43:57.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:43:57.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:43:57.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:43:57.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:43:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:43:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.738244 -999.00  +19.20  18.31     20   -3.70 1 1 1 1 1   274    0 22.53 -29.13 ----- 17.3 18.3 279.8 22.8 19.5 -24.9 19.5 -24.2 19.2 -23.3 19.5 -24.1
2025-11-17T19:43:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:43:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:43:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.738244
2025-11-17T19:43:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:43:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:43:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:43:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:43:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:43:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:43:29', tmtdew=27.13, humidity=15.02, cloud=0.0, wind=22.43, temperature=19.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:43:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:43:57.142 [DEBUG] [Thread-60181] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:43:57.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:43:57.228 [DEBUG] [Thread-60184] [transport.py] [_log()] starting thread (client mode): 0xd0787190
2025-11-17T19:43:57.228 [DEBUG] [Thread-60184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:43:57.246 [DEBUG] [Thread-60184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:43:57.246 [INFO] [Thread-60184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] client lang: <none>
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] server lang: <none>
2025-11-17T19:43:57.253 [DEBUG] [Thread-60184] [transport.py] [_log()] kex follows: False
2025-11-17T19:43:57.254 [DEBUG] [Thread-60184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:43:57.254 [DEBUG] [Thread-60184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:43:57.254 [DEBUG] [Thread-60184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:43:57.254 [DEBUG] [Thread-60184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:43:57.254 [DEBUG] [Thread-60184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:43:57.254 [DEBUG] [Thread-60184] [transport.py] [_log()] Compression: none
2025-11-17T19:43:57.254 [DEBUG] [Thread-60184] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:43:57.310 [DEBUG] [Thread-60184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:43:57.310 [DEBUG] [Thread-60184] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:43:57.311 [DEBUG] [Thread-60184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:43:57.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:43:57.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:43:57.367 [DEBUG] [Thread-60184] [transport.py] [_log()] userauth is OK
2025-11-17T19:43:57.367 [DEBUG] [Thread-60184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:43:57.367 [DEBUG] [Thread-60184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:43:57.367 [DEBUG] [Thread-60184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:43:57.367 [DEBUG] [Thread-60184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:43:57.381 [INFO] [Thread-60184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:43:57.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:43:57.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:43:58.217 [DEBUG] [Thread-60184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:43:58.217 [DEBUG] [Thread-60184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:43:58.265 [DEBUG] [Thread-60184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:43:58.265 [DEBUG] [Thread-60184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:43:58.273 [DEBUG] [Thread-60184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:43:58.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:43:58.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:43:58.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:43:58.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:43:58.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:43:58.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:43:58.305 [DEBUG] [Thread-60184] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:44:10.026 [DEBUG] [Thread-60186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:15.153 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:21.682 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:25.068 [DEBUG] [Thread-60187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:28.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:44:28.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:44:28.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:44:28.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 44, 1), 27.1, 15.07, 0.0, 18.16, 19.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:44:28.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:44:01
2025-11-17T19:44:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:44:29.239 [DEBUG] [Thread-60188] [transport.py] [_log()] starting thread (client mode): 0xd078c370
2025-11-17T19:44:29.240 [DEBUG] [Thread-60188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:44:29.261 [DEBUG] [Thread-60188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:44:29.261 [INFO] [Thread-60188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:44:29.264 [DEBUG] [Thread-60188] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:44:29.264 [DEBUG] [Thread-60188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:44:29.264 [DEBUG] [Thread-60188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:44:29.264 [DEBUG] [Thread-60188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:44:29.264 [DEBUG] [Thread-60188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:44:29.264 [DEBUG] [Thread-60188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:44:29.264 [DEBUG] [Thread-60188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] client lang: <none>
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] server lang: <none>
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] kex follows: False
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] Compression: none
2025-11-17T19:44:29.265 [DEBUG] [Thread-60188] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:44:29.282 [DEBUG] [Thread-60188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:44:29.283 [DEBUG] [Thread-60188] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:44:29.283 [DEBUG] [Thread-60188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:44:29.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:44:29.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:44:29.285 [DEBUG] [Thread-60188] [transport.py] [_log()] userauth is OK
2025-11-17T19:44:29.285 [DEBUG] [Thread-60188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:44:29.285 [DEBUG] [Thread-60188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:44:29.286 [DEBUG] [Thread-60188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:44:29.286 [DEBUG] [Thread-60188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:44:29.303 [INFO] [Thread-60188] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:44:29.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:44:29.921 [DEBUG] [Thread-60188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:44:29.921 [DEBUG] [Thread-60188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:44:29.922 [DEBUG] [Thread-60188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:44:29.962 [DEBUG] [Thread-60188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:44:29.963 [DEBUG] [Thread-60188] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:44:29.966 [DEBUG] [Thread-60188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:44:29.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:44:29.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:44:29.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:44:29.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:44:29.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:44:29.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:44:29.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:44:29.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:44:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:44:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.738592 -999.00  +19.20  15.72     20   -3.70 1 1 1 1 1   257    0 22.03 -27.83 ----- 13.7 15.7 283.8 20.6 19.5 -24.8 19.5 -24.1 19.1 -23.0 19.5 -24.0
2025-11-17T19:44:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:44:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:44:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.738592
2025-11-17T19:44:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:44:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:44:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:44:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:44:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:44:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:44:01', tmtdew=27.1, humidity=15.07, cloud=0.0, wind=18.16, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:43:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:44:29.993 [DEBUG] [Thread-60188] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:44:30.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:44:30.089 [DEBUG] [Thread-60191] [transport.py] [_log()] starting thread (client mode): 0xd31343a0
2025-11-17T19:44:30.089 [DEBUG] [Thread-60191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:44:30.105 [DEBUG] [Thread-60191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:44:30.105 [INFO] [Thread-60191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:44:30.112 [DEBUG] [Thread-60191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:44:30.113 [DEBUG] [Thread-60191] [transport.py] [_log()] client lang: <none>
2025-11-17T19:44:30.114 [DEBUG] [Thread-60191] [transport.py] [_log()] server lang: <none>
2025-11-17T19:44:30.114 [DEBUG] [Thread-60191] [transport.py] [_log()] kex follows: False
2025-11-17T19:44:30.114 [DEBUG] [Thread-60191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:44:30.114 [DEBUG] [Thread-60191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:44:30.114 [DEBUG] [Thread-60191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:44:30.114 [DEBUG] [Thread-60191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:44:30.114 [DEBUG] [Thread-60191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:44:30.114 [DEBUG] [Thread-60191] [transport.py] [_log()] Compression: none
2025-11-17T19:44:30.115 [DEBUG] [Thread-60191] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:44:30.173 [DEBUG] [Thread-60191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:44:30.173 [DEBUG] [Thread-60191] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:44:30.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:44:30.174 [DEBUG] [Thread-60191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:44:30.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:44:30.231 [DEBUG] [Thread-60191] [transport.py] [_log()] userauth is OK
2025-11-17T19:44:30.232 [DEBUG] [Thread-60191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:44:30.232 [DEBUG] [Thread-60191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:44:30.232 [DEBUG] [Thread-60191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:44:30.232 [DEBUG] [Thread-60191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:44:30.254 [INFO] [Thread-60191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:44:30.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:44:30.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:44:31.137 [DEBUG] [Thread-60191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:44:31.137 [DEBUG] [Thread-60191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:44:31.185 [DEBUG] [Thread-60191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:44:31.185 [DEBUG] [Thread-60191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:44:31.194 [DEBUG] [Thread-60191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:44:31.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:44:31.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:44:31.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:44:31.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:44:31.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:44:31.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:44:31.228 [DEBUG] [Thread-60191] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:44:32.853 [DEBUG] [Thread-60193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:40.093 [DEBUG] [Thread-60194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:47.674 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:47.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:49.408 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:44:55.134 [DEBUG] [Thread-60195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:45:01.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:45:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:45:01.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 44, 33), 27.14, 15.02, 0.0, 18.05, 19.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:45:01.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:44:33
2025-11-17T19:45:02.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:45:02.202 [DEBUG] [Thread-60196] [transport.py] [_log()] starting thread (client mode): 0xd07cf3a0
2025-11-17T19:45:02.203 [DEBUG] [Thread-60196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:45:02.222 [DEBUG] [Thread-60196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:45:02.223 [INFO] [Thread-60196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:45:02.226 [DEBUG] [Thread-60196] [transport.py] [_log()] client lang: <none>
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] server lang: <none>
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] kex follows: False
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] Compression: none
2025-11-17T19:45:02.227 [DEBUG] [Thread-60196] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:45:02.244 [DEBUG] [Thread-60196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:45:02.244 [DEBUG] [Thread-60196] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:45:02.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:45:02.245 [DEBUG] [Thread-60196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:45:02.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:45:02.247 [DEBUG] [Thread-60196] [transport.py] [_log()] userauth is OK
2025-11-17T19:45:02.247 [DEBUG] [Thread-60196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:45:02.247 [DEBUG] [Thread-60196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:45:02.247 [DEBUG] [Thread-60196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:45:02.248 [DEBUG] [Thread-60196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:45:02.265 [INFO] [Thread-60196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:45:02.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:45:02.848 [DEBUG] [Thread-60196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:45:02.857 [DEBUG] [Thread-60196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:45:02.857 [DEBUG] [Thread-60196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:45:02.889 [DEBUG] [Thread-60196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:45:02.889 [DEBUG] [Thread-60196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:45:02.891 [DEBUG] [Thread-60196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:45:02.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:45:02.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:45:02.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:45:02.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:45:02.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:45:02.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:45:02.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:45:02.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:45:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:45:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.738939 -999.00  +19.20  17.01     20   -3.70 1 1 1 1 1   240    0 22.37 -30.14 ----- 16.5 17.0 273.9 20.7 19.5 -24.8 19.5 -24.1 19.2 -23.3 19.5 -24.0
2025-11-17T19:45:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:45:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:45:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.738939
2025-11-17T19:45:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:45:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:45:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:45:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:45:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:45:02.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:44:33', tmtdew=27.14, humidity=15.02, cloud=0.0, wind=18.05, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:44:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:45:02.912 [DEBUG] [Thread-60196] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:45:02.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:45:03.010 [DEBUG] [Thread-60199] [transport.py] [_log()] starting thread (client mode): 0xd0784130
2025-11-17T19:45:03.010 [DEBUG] [Thread-60199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:45:03.025 [DEBUG] [Thread-60199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:45:03.025 [INFO] [Thread-60199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:45:03.033 [DEBUG] [Thread-60199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:45:03.033 [DEBUG] [Thread-60199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:45:03.033 [DEBUG] [Thread-60199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:45:03.033 [DEBUG] [Thread-60199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] client lang: <none>
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] server lang: <none>
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] kex follows: False
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:45:03.034 [DEBUG] [Thread-60199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:45:03.035 [DEBUG] [Thread-60199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:45:03.035 [DEBUG] [Thread-60199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:45:03.035 [DEBUG] [Thread-60199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:45:03.035 [DEBUG] [Thread-60199] [transport.py] [_log()] Compression: none
2025-11-17T19:45:03.035 [DEBUG] [Thread-60199] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:45:03.092 [DEBUG] [Thread-60199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:45:03.092 [DEBUG] [Thread-60199] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:45:03.093 [DEBUG] [Thread-60199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:45:03.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:45:03.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:45:03.148 [DEBUG] [Thread-60199] [transport.py] [_log()] userauth is OK
2025-11-17T19:45:03.148 [DEBUG] [Thread-60199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:45:03.148 [DEBUG] [Thread-60199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:45:03.148 [DEBUG] [Thread-60199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:45:03.148 [DEBUG] [Thread-60199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:45:03.169 [INFO] [Thread-60199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:45:03.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:45:03.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:45:04.044 [DEBUG] [Thread-60199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:45:04.044 [DEBUG] [Thread-60199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:45:04.092 [DEBUG] [Thread-60199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:45:04.092 [DEBUG] [Thread-60199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:45:04.101 [DEBUG] [Thread-60199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:45:04.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:45:04.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:45:04.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:45:04.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:45:04.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:45:04.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:45:04.136 [DEBUG] [Thread-60199] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:45:10.165 [DEBUG] [Thread-60201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:15.193 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:25.214 [DEBUG] [Thread-60202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:25.310 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:31.559 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:32.911 [DEBUG] [Thread-60203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:34.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:45:34.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:45:34.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:45:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 45, 5), 27.14, 15.02, 0.0, 16.5, 19.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:45:34.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:45:05
2025-11-17T19:45:34.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:45:35.078 [DEBUG] [Thread-60204] [transport.py] [_log()] starting thread (client mode): 0xd0785e40
2025-11-17T19:45:35.078 [DEBUG] [Thread-60204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:45:35.098 [DEBUG] [Thread-60204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:45:35.098 [INFO] [Thread-60204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:45:35.099 [DEBUG] [Thread-60204] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:45:35.099 [DEBUG] [Thread-60204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] client lang: <none>
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] server lang: <none>
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] kex follows: False
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:45:35.100 [DEBUG] [Thread-60204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:45:35.101 [DEBUG] [Thread-60204] [transport.py] [_log()] Compression: none
2025-11-17T19:45:35.101 [DEBUG] [Thread-60204] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:45:35.119 [DEBUG] [Thread-60204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:45:35.120 [DEBUG] [Thread-60204] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:45:35.121 [DEBUG] [Thread-60204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:45:35.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:45:35.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:45:35.123 [DEBUG] [Thread-60204] [transport.py] [_log()] userauth is OK
2025-11-17T19:45:35.123 [DEBUG] [Thread-60204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:45:35.124 [DEBUG] [Thread-60204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:45:35.124 [DEBUG] [Thread-60204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:45:35.124 [DEBUG] [Thread-60204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:45:35.140 [INFO] [Thread-60204] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:45:35.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:45:35.766 [DEBUG] [Thread-60204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:45:35.767 [DEBUG] [Thread-60204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:45:35.767 [DEBUG] [Thread-60204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:45:35.807 [DEBUG] [Thread-60204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:45:35.807 [DEBUG] [Thread-60204] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:45:35.810 [DEBUG] [Thread-60204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:45:35.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:45:35.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:45:35.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:45:35.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:45:35.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:45:35.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:45:35.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:45:35.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:45:35.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:45:35.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.739286 -999.00  +19.20  15.62     20   -3.70 1 1 1 1 1   224    0 22.02 -29.33 ----- 16.2 15.6 281.2 19.3 19.5 -24.8 19.5 -23.9 19.2 -23.1 19.4 -23.8
2025-11-17T19:45:35.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:45:35.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:45:35.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.739286
2025-11-17T19:45:35.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:45:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:45:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:45:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:45:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:45:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:45:05', tmtdew=27.14, humidity=15.02, cloud=0.0, wind=16.5, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:44:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:45:35.836 [DEBUG] [Thread-60204] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:45:35.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:45:35.932 [DEBUG] [Thread-60207] [transport.py] [_log()] starting thread (client mode): 0xd7bc6080
2025-11-17T19:45:35.932 [DEBUG] [Thread-60207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:45:35.948 [DEBUG] [Thread-60207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:45:35.948 [INFO] [Thread-60207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] client lang: <none>
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] server lang: <none>
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] kex follows: False
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:45:35.956 [DEBUG] [Thread-60207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:45:35.957 [DEBUG] [Thread-60207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:45:35.957 [DEBUG] [Thread-60207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:45:35.957 [DEBUG] [Thread-60207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:45:35.957 [DEBUG] [Thread-60207] [transport.py] [_log()] Compression: none
2025-11-17T19:45:35.957 [DEBUG] [Thread-60207] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:45:36.017 [DEBUG] [Thread-60207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:45:36.017 [DEBUG] [Thread-60207] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:45:36.018 [DEBUG] [Thread-60207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:45:36.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:45:36.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:45:36.076 [DEBUG] [Thread-60207] [transport.py] [_log()] userauth is OK
2025-11-17T19:45:36.076 [DEBUG] [Thread-60207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:45:36.076 [DEBUG] [Thread-60207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:45:36.076 [DEBUG] [Thread-60207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:45:36.076 [DEBUG] [Thread-60207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:45:36.096 [INFO] [Thread-60207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:45:36.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:45:36.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:45:36.941 [DEBUG] [Thread-60207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:45:36.941 [DEBUG] [Thread-60207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:45:36.989 [DEBUG] [Thread-60207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:45:36.989 [DEBUG] [Thread-60207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:45:36.998 [DEBUG] [Thread-60207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:45:37.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:45:37.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:45:37.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:45:37.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:45:37.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:45:37.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:45:37.033 [DEBUG] [Thread-60207] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:45:40.244 [DEBUG] [Thread-60209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:52.959 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:52.961 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:55.286 [DEBUG] [Thread-60210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:45:56.249 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:46:07.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:46:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:46:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 45, 37), 27.1, 15.0, 0.0, 16.59, 19.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:46:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:45:37
2025-11-17T19:46:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:46:07.961 [DEBUG] [Thread-60211] [transport.py] [_log()] starting thread (client mode): 0xd7bc6680
2025-11-17T19:46:07.961 [DEBUG] [Thread-60211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:46:07.981 [DEBUG] [Thread-60211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:46:07.981 [INFO] [Thread-60211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] client lang: <none>
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] server lang: <none>
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] kex follows: False
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] Compression: none
2025-11-17T19:46:07.985 [DEBUG] [Thread-60211] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:46:08.002 [DEBUG] [Thread-60211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:46:08.002 [DEBUG] [Thread-60211] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:46:08.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:46:08.003 [DEBUG] [Thread-60211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:46:08.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:46:08.004 [DEBUG] [Thread-60211] [transport.py] [_log()] userauth is OK
2025-11-17T19:46:08.004 [DEBUG] [Thread-60211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:46:08.004 [DEBUG] [Thread-60211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:46:08.004 [DEBUG] [Thread-60211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:46:08.004 [DEBUG] [Thread-60211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:46:08.025 [INFO] [Thread-60211] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:46:08.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:46:08.663 [DEBUG] [Thread-60211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:46:08.672 [DEBUG] [Thread-60211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:46:08.673 [DEBUG] [Thread-60211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:46:08.704 [DEBUG] [Thread-60211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:46:08.705 [DEBUG] [Thread-60211] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:46:08.708 [DEBUG] [Thread-60211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:46:08.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:46:08.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:46:08.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:46:08.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:46:08.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:46:08.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:46:08.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:46:08.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:46:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:46:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.739980 -999.00  +19.20  15.24     20   -3.70 1 1 1 1 1   194    0 22.61 -32.04 ----- 20.6 15.2 278.2 20.5 19.5 -24.7 19.4 -23.9 19.1 -23.1 19.4 -23.7
2025-11-17T19:46:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:46:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:46:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.739980
2025-11-17T19:46:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:46:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:46:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:46:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:46:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:46:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:45:37', tmtdew=27.1, humidity=15.0, cloud=0.0, wind=16.59, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:45:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:46:08.733 [DEBUG] [Thread-60211] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:46:08.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:46:08.833 [DEBUG] [Thread-60214] [transport.py] [_log()] starting thread (client mode): 0xd07bd150
2025-11-17T19:46:08.833 [DEBUG] [Thread-60214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:46:08.848 [DEBUG] [Thread-60214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:46:08.848 [INFO] [Thread-60214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:46:08.855 [DEBUG] [Thread-60214] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] client lang: <none>
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] server lang: <none>
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] kex follows: False
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] Compression: none
2025-11-17T19:46:08.856 [DEBUG] [Thread-60214] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:46:08.916 [DEBUG] [Thread-60214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:46:08.916 [DEBUG] [Thread-60214] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:46:08.916 [DEBUG] [Thread-60214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:46:08.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:46:08.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:46:08.975 [DEBUG] [Thread-60214] [transport.py] [_log()] userauth is OK
2025-11-17T19:46:08.976 [DEBUG] [Thread-60214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:46:08.976 [DEBUG] [Thread-60214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:46:08.976 [DEBUG] [Thread-60214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:46:08.976 [DEBUG] [Thread-60214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:46:08.995 [INFO] [Thread-60214] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:46:08.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:46:08.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:46:09.863 [DEBUG] [Thread-60214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:46:09.863 [DEBUG] [Thread-60214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:46:09.911 [DEBUG] [Thread-60214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:46:09.911 [DEBUG] [Thread-60214] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:46:09.919 [DEBUG] [Thread-60214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:46:09.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:46:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:46:09.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:46:09.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:46:09.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:46:09.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:46:09.952 [DEBUG] [Thread-60214] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:46:10.313 [DEBUG] [Thread-60216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:20.324 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:25.348 [DEBUG] [Thread-60217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:31.073 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:32.971 [DEBUG] [Thread-60218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:37.262 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:39.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:46:39.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:46:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:46:40.381 [DEBUG] [Thread-60219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:40.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 46, 9), 27.09, 15.0, 0.0, 16.85, 19.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:46:40.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:46:09
2025-11-17T19:46:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:46:40.865 [DEBUG] [Thread-60220] [transport.py] [_log()] starting thread (client mode): 0xd31cc850
2025-11-17T19:46:40.865 [DEBUG] [Thread-60220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:46:40.885 [DEBUG] [Thread-60220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:46:40.885 [INFO] [Thread-60220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:46:40.888 [DEBUG] [Thread-60220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:46:40.888 [DEBUG] [Thread-60220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:46:40.888 [DEBUG] [Thread-60220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:46:40.888 [DEBUG] [Thread-60220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:46:40.888 [DEBUG] [Thread-60220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:46:40.888 [DEBUG] [Thread-60220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:46:40.888 [DEBUG] [Thread-60220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] client lang: <none>
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] server lang: <none>
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] kex follows: False
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] Compression: none
2025-11-17T19:46:40.889 [DEBUG] [Thread-60220] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:46:40.906 [DEBUG] [Thread-60220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:46:40.907 [DEBUG] [Thread-60220] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:46:40.907 [DEBUG] [Thread-60220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:46:40.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:46:40.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:46:40.909 [DEBUG] [Thread-60220] [transport.py] [_log()] userauth is OK
2025-11-17T19:46:40.909 [DEBUG] [Thread-60220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:46:40.910 [DEBUG] [Thread-60220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:46:40.910 [DEBUG] [Thread-60220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:46:40.910 [DEBUG] [Thread-60220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:46:40.935 [INFO] [Thread-60220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:46:40.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:46:41.577 [DEBUG] [Thread-60220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:46:41.577 [DEBUG] [Thread-60220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:46:41.578 [DEBUG] [Thread-60220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:46:41.618 [DEBUG] [Thread-60220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:46:41.618 [DEBUG] [Thread-60220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:46:41.621 [DEBUG] [Thread-60220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:46:41.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:46:41.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:46:41.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:46:41.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:46:41.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:46:41.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:46:41.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:46:41.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:46:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:46:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.740328 -999.00  +19.20  11.84     20   -3.70 1 1 1 1 1   180    0 21.82 -30.92 ----- 17.3 11.8 280.1 20.2 19.5 -24.6 19.4 -23.7 19.1 -22.9 19.4 -23.7
2025-11-17T19:46:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:46:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:46:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.740328
2025-11-17T19:46:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:46:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:46:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:46:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:46:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:46:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:46:09', tmtdew=27.09, humidity=15.0, cloud=0.0, wind=16.85, temperature=19.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:46:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:46:41.646 [DEBUG] [Thread-60220] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:46:41.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:46:41.742 [DEBUG] [Thread-60223] [transport.py] [_log()] starting thread (client mode): 0xd3137d90
2025-11-17T19:46:41.742 [DEBUG] [Thread-60223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:46:41.759 [DEBUG] [Thread-60223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:46:41.760 [INFO] [Thread-60223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:46:41.767 [DEBUG] [Thread-60223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:46:41.767 [DEBUG] [Thread-60223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:46:41.767 [DEBUG] [Thread-60223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:46:41.767 [DEBUG] [Thread-60223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] client lang: <none>
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] server lang: <none>
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] kex follows: False
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:46:41.768 [DEBUG] [Thread-60223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:46:41.769 [DEBUG] [Thread-60223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:46:41.769 [DEBUG] [Thread-60223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:46:41.769 [DEBUG] [Thread-60223] [transport.py] [_log()] Compression: none
2025-11-17T19:46:41.769 [DEBUG] [Thread-60223] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:46:41.823 [DEBUG] [Thread-60223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:46:41.823 [DEBUG] [Thread-60223] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:46:41.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:46:41.823 [DEBUG] [Thread-60223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:46:41.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:46:41.879 [DEBUG] [Thread-60223] [transport.py] [_log()] userauth is OK
2025-11-17T19:46:41.879 [DEBUG] [Thread-60223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:46:41.879 [DEBUG] [Thread-60223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:46:41.879 [DEBUG] [Thread-60223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:46:41.879 [DEBUG] [Thread-60223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:46:41.894 [INFO] [Thread-60223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:46:41.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:46:41.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:46:42.817 [DEBUG] [Thread-60223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:46:42.817 [DEBUG] [Thread-60223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:46:42.865 [DEBUG] [Thread-60223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:46:42.865 [DEBUG] [Thread-60223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:46:42.873 [DEBUG] [Thread-60223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:46:42.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:46:42.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:46:42.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:46:42.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:46:42.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:46:42.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:46:42.905 [DEBUG] [Thread-60223] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:46:55.412 [DEBUG] [Thread-60225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:59.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:46:59.350 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:00.962 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:10.455 [DEBUG] [Thread-60226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:12.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:47:12.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:47:12.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:47:13.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 46, 41), 27.08, 15.03, 0.0, 17.57, 19.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:47:13.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:46:41
2025-11-17T19:47:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:47:13.906 [DEBUG] [Thread-60227] [transport.py] [_log()] starting thread (client mode): 0xd3137820
2025-11-17T19:47:13.906 [DEBUG] [Thread-60227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:47:13.920 [DEBUG] [Thread-60227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:47:13.920 [INFO] [Thread-60227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:47:13.923 [DEBUG] [Thread-60227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:47:13.923 [DEBUG] [Thread-60227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:47:13.923 [DEBUG] [Thread-60227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:47:13.923 [DEBUG] [Thread-60227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] client lang: <none>
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] server lang: <none>
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] kex follows: False
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] Compression: none
2025-11-17T19:47:13.924 [DEBUG] [Thread-60227] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:47:13.939 [DEBUG] [Thread-60227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:47:13.940 [DEBUG] [Thread-60227] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:47:13.940 [DEBUG] [Thread-60227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:47:13.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:47:13.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:47:13.940 [DEBUG] [Thread-60227] [transport.py] [_log()] userauth is OK
2025-11-17T19:47:13.940 [DEBUG] [Thread-60227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:47:13.940 [DEBUG] [Thread-60227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:47:13.940 [DEBUG] [Thread-60227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:47:13.940 [DEBUG] [Thread-60227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:47:13.949 [INFO] [Thread-60227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:47:13.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:47:14.614 [DEBUG] [Thread-60227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:47:14.614 [DEBUG] [Thread-60227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:47:14.614 [DEBUG] [Thread-60227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:47:14.655 [DEBUG] [Thread-60227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:47:14.655 [DEBUG] [Thread-60227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:47:14.657 [DEBUG] [Thread-60227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:47:14.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:47:14.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:47:14.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:47:14.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:47:14.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:47:14.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:47:14.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:47:14.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:47:14.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:47:14.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.740675 -999.00  +19.20  19.70     20   -3.70 1 1 1 1 1   167    0 22.04 -34.09 ----- 18.9 19.7 272.0 24.3 19.5 -24.6 19.4 -23.7 19.1 -22.8 19.4 -23.6
2025-11-17T19:47:14.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:47:14.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:47:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.740675
2025-11-17T19:47:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:47:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:47:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:47:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:47:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:47:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:46:41', tmtdew=27.08, humidity=15.03, cloud=0.0, wind=17.57, temperature=19.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:46:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:47:14.678 [DEBUG] [Thread-60227] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:47:14.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:47:14.782 [DEBUG] [Thread-60230] [transport.py] [_log()] starting thread (client mode): 0xd0787100
2025-11-17T19:47:14.782 [DEBUG] [Thread-60230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:47:14.797 [DEBUG] [Thread-60230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:47:14.797 [INFO] [Thread-60230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] client lang: <none>
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] server lang: <none>
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] kex follows: False
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] Compression: none
2025-11-17T19:47:14.805 [DEBUG] [Thread-60230] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:47:14.862 [DEBUG] [Thread-60230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:47:14.863 [DEBUG] [Thread-60230] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:47:14.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:47:14.863 [DEBUG] [Thread-60230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:47:14.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:47:14.919 [DEBUG] [Thread-60230] [transport.py] [_log()] userauth is OK
2025-11-17T19:47:14.919 [DEBUG] [Thread-60230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:47:14.919 [DEBUG] [Thread-60230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:47:14.920 [DEBUG] [Thread-60230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:47:14.920 [DEBUG] [Thread-60230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:47:14.937 [INFO] [Thread-60230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:47:14.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:47:14.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:47:15.742 [DEBUG] [Thread-60230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:47:15.742 [DEBUG] [Thread-60230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:47:15.790 [DEBUG] [Thread-60230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:47:15.790 [DEBUG] [Thread-60230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:47:15.798 [DEBUG] [Thread-60230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:47:15.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:47:15.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:47:15.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:47:15.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:47:15.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:47:15.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:47:15.829 [DEBUG] [Thread-60230] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:47:24.641 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:25.487 [DEBUG] [Thread-60232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:33.027 [DEBUG] [Thread-60233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:33.459 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:39.610 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:40.529 [DEBUG] [Thread-60234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:47:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:47:45.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:47:45.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:47:46.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 47, 13), 27.08, 15.03, 0.0, 18.77, 19.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:47:46.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:47:13
2025-11-17T19:47:46.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:47:46.845 [DEBUG] [Thread-60235] [transport.py] [_log()] starting thread (client mode): 0xd31376d0
2025-11-17T19:47:46.846 [DEBUG] [Thread-60235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:47:46.866 [DEBUG] [Thread-60235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:47:46.866 [INFO] [Thread-60235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:47:46.869 [DEBUG] [Thread-60235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] client lang: <none>
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] server lang: <none>
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] kex follows: False
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] Compression: none
2025-11-17T19:47:46.870 [DEBUG] [Thread-60235] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:47:46.886 [DEBUG] [Thread-60235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:47:46.886 [DEBUG] [Thread-60235] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:47:46.886 [DEBUG] [Thread-60235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:47:46.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:47:46.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:47:46.887 [DEBUG] [Thread-60235] [transport.py] [_log()] userauth is OK
2025-11-17T19:47:46.887 [DEBUG] [Thread-60235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:47:46.887 [DEBUG] [Thread-60235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:47:46.887 [DEBUG] [Thread-60235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:47:46.887 [DEBUG] [Thread-60235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:47:46.904 [INFO] [Thread-60235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:47:46.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:47:47.559 [DEBUG] [Thread-60235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:47:47.567 [DEBUG] [Thread-60235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:47:47.568 [DEBUG] [Thread-60235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:47:47.600 [DEBUG] [Thread-60235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:47:47.600 [DEBUG] [Thread-60235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:47:47.602 [DEBUG] [Thread-60235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:47:47.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:47:47.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:47:47.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:47:47.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:47:47.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:47:47.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:47:47.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:47:47.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:47:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:47:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.741022 -999.00  +19.20  19.85     20   -3.70 1 1 1 1 1   155    0 21.58 -35.93 ----- 18.8 19.9 271.6 23.3 19.5 -24.5 19.4 -23.7 19.1 -22.7 19.4 -23.6
2025-11-17T19:47:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:47:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:47:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.741022
2025-11-17T19:47:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:47:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:47:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:47:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:47:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:47:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:47:13', tmtdew=27.08, humidity=15.03, cloud=0.0, wind=18.77, temperature=19.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:47:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:47:47.622 [DEBUG] [Thread-60235] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:47:47.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:47:47.707 [DEBUG] [Thread-60238] [transport.py] [_log()] starting thread (client mode): 0xd7bc6680
2025-11-17T19:47:47.707 [DEBUG] [Thread-60238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:47:47.724 [DEBUG] [Thread-60238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:47:47.724 [INFO] [Thread-60238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:47:47.731 [DEBUG] [Thread-60238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] client lang: <none>
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] server lang: <none>
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] kex follows: False
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] Compression: none
2025-11-17T19:47:47.732 [DEBUG] [Thread-60238] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:47:47.786 [DEBUG] [Thread-60238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:47:47.786 [DEBUG] [Thread-60238] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:47:47.787 [DEBUG] [Thread-60238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:47:47.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:47:47.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:47:47.844 [DEBUG] [Thread-60238] [transport.py] [_log()] userauth is OK
2025-11-17T19:47:47.844 [DEBUG] [Thread-60238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:47:47.844 [DEBUG] [Thread-60238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:47:47.844 [DEBUG] [Thread-60238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:47:47.844 [DEBUG] [Thread-60238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:47:47.864 [INFO] [Thread-60238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:47:47.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:47:47.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:47:48.731 [DEBUG] [Thread-60238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:47:48.732 [DEBUG] [Thread-60238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:47:48.779 [DEBUG] [Thread-60238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:47:48.779 [DEBUG] [Thread-60238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:47:48.788 [DEBUG] [Thread-60238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:47:48.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:47:48.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:47:48.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:47:48.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:47:48.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:47:48.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:47:48.822 [DEBUG] [Thread-60238] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:47:55.558 [DEBUG] [Thread-60240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:03.333 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:07.279 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:07.280 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:10.592 [DEBUG] [Thread-60241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:18.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:48:18.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:48:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:48:19.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 47, 45), 27.07, 15.05, 0.0, 18.65, 19.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:48:19.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:47:45
2025-11-17T19:48:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:48:19.825 [DEBUG] [Thread-60242] [transport.py] [_log()] starting thread (client mode): 0xd07bca30
2025-11-17T19:48:19.826 [DEBUG] [Thread-60242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:48:19.846 [DEBUG] [Thread-60242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:48:19.846 [INFO] [Thread-60242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:48:19.849 [DEBUG] [Thread-60242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] client lang: <none>
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] server lang: <none>
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] kex follows: False
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] Compression: none
2025-11-17T19:48:19.850 [DEBUG] [Thread-60242] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:48:19.868 [DEBUG] [Thread-60242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:48:19.868 [DEBUG] [Thread-60242] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:48:19.868 [DEBUG] [Thread-60242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:48:19.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:48:19.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:48:19.870 [DEBUG] [Thread-60242] [transport.py] [_log()] userauth is OK
2025-11-17T19:48:19.870 [DEBUG] [Thread-60242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:48:19.870 [DEBUG] [Thread-60242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:48:19.870 [DEBUG] [Thread-60242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:48:19.870 [DEBUG] [Thread-60242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:48:19.886 [INFO] [Thread-60242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:48:19.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:48:20.507 [DEBUG] [Thread-60242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:48:20.508 [DEBUG] [Thread-60242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:48:20.508 [DEBUG] [Thread-60242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:48:20.548 [DEBUG] [Thread-60242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:48:20.548 [DEBUG] [Thread-60242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:48:20.551 [DEBUG] [Thread-60242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:48:20.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:48:20.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:48:20.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:48:20.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:48:20.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:48:20.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:48:20.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:48:20.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:48:20.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:48:20.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.741369 -999.00  +19.20  16.55     20   -3.70 1 1 1 1 1   143    0 21.84 -36.75 ----- 16.4 16.6 276.0 19.7 19.4 -24.5 19.4 -23.5 19.1 -22.8 19.4 -23.5
2025-11-17T19:48:20.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:48:20.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:48:20.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.741369
2025-11-17T19:48:20.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:48:20.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:48:20.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:48:20.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:48:20.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:48:20.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:47:45', tmtdew=27.07, humidity=15.05, cloud=0.0, wind=18.65, temperature=19.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:47:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:48:20.574 [DEBUG] [Thread-60242] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:48:20.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:48:20.670 [DEBUG] [Thread-60245] [transport.py] [_log()] starting thread (client mode): 0xd07bcf70
2025-11-17T19:48:20.671 [DEBUG] [Thread-60245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:48:20.685 [DEBUG] [Thread-60245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:48:20.685 [INFO] [Thread-60245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:48:20.693 [DEBUG] [Thread-60245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] client lang: <none>
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] server lang: <none>
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] kex follows: False
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] Compression: none
2025-11-17T19:48:20.694 [DEBUG] [Thread-60245] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:48:20.751 [DEBUG] [Thread-60245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:48:20.752 [DEBUG] [Thread-60245] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:48:20.752 [DEBUG] [Thread-60245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:48:20.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:48:20.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:48:20.810 [DEBUG] [Thread-60245] [transport.py] [_log()] userauth is OK
2025-11-17T19:48:20.810 [DEBUG] [Thread-60245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:48:20.810 [DEBUG] [Thread-60245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:48:20.810 [DEBUG] [Thread-60245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:48:20.811 [DEBUG] [Thread-60245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:48:20.829 [INFO] [Thread-60245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:48:20.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:48:20.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:48:21.690 [DEBUG] [Thread-60245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:48:21.690 [DEBUG] [Thread-60245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:48:21.737 [DEBUG] [Thread-60245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:48:21.737 [DEBUG] [Thread-60245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:48:21.746 [DEBUG] [Thread-60245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:48:21.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:48:21.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:48:21.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:48:21.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:48:21.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:48:21.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:48:21.780 [DEBUG] [Thread-60245] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:48:25.622 [DEBUG] [Thread-60247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:27.003 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:33.080 [DEBUG] [Thread-60248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:34.321 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:40.663 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:40.669 [DEBUG] [Thread-60249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:48:51.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:48:51.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:48:51.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:48:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 48, 17), 27.06, 15.05, 0.0, 20.47, 19.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:48:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:48:17
2025-11-17T19:48:52.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:48:52.730 [DEBUG] [Thread-60250] [transport.py] [_log()] starting thread (client mode): 0xd7bc4ac0
2025-11-17T19:48:52.730 [DEBUG] [Thread-60250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:48:52.751 [DEBUG] [Thread-60250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:48:52.751 [INFO] [Thread-60250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] client lang: <none>
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] server lang: <none>
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] kex follows: False
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] Compression: none
2025-11-17T19:48:52.754 [DEBUG] [Thread-60250] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:48:52.771 [DEBUG] [Thread-60250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:48:52.772 [DEBUG] [Thread-60250] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:48:52.772 [DEBUG] [Thread-60250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:48:52.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:48:52.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:48:52.774 [DEBUG] [Thread-60250] [transport.py] [_log()] userauth is OK
2025-11-17T19:48:52.775 [DEBUG] [Thread-60250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:48:52.775 [DEBUG] [Thread-60250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:48:52.775 [DEBUG] [Thread-60250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:48:52.775 [DEBUG] [Thread-60250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:48:52.798 [INFO] [Thread-60250] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:48:52.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:48:53.436 [DEBUG] [Thread-60250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:48:53.436 [DEBUG] [Thread-60250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:48:53.436 [DEBUG] [Thread-60250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:48:53.477 [DEBUG] [Thread-60250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:48:53.478 [DEBUG] [Thread-60250] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:48:53.480 [DEBUG] [Thread-60250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:48:53.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:48:53.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:48:53.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:48:53.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:48:53.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:48:53.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:48:53.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:48:53.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:48:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:48:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.741716 -999.00  +19.20  16.60     20   -3.80 1 1 1 1 1   132    0 22.07 -34.03 ----- 16.5 16.6 272.4 23.5 19.5 -24.3 19.4 -23.6 19.1 -22.6 19.4 -23.5
2025-11-17T19:48:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:48:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:48:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.741716
2025-11-17T19:48:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:48:53.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:48:53.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:48:53.503 [DEBUG] [Thread-60250] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:48:53.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:48:53.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:48:53.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:48:17', tmtdew=27.06, humidity=15.05, cloud=0.0, wind=20.47, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:48:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:48:53.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:48:53.601 [DEBUG] [Thread-60253] [transport.py] [_log()] starting thread (client mode): 0xd7bc6b00
2025-11-17T19:48:53.601 [DEBUG] [Thread-60253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:48:53.616 [DEBUG] [Thread-60253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:48:53.616 [INFO] [Thread-60253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:48:53.623 [DEBUG] [Thread-60253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:48:53.624 [DEBUG] [Thread-60253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:48:53.624 [DEBUG] [Thread-60253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:48:53.624 [DEBUG] [Thread-60253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] client lang: <none>
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] server lang: <none>
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] kex follows: False
2025-11-17T19:48:53.625 [DEBUG] [Thread-60253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:48:53.626 [DEBUG] [Thread-60253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:48:53.626 [DEBUG] [Thread-60253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:48:53.626 [DEBUG] [Thread-60253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:48:53.626 [DEBUG] [Thread-60253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:48:53.626 [DEBUG] [Thread-60253] [transport.py] [_log()] Compression: none
2025-11-17T19:48:53.626 [DEBUG] [Thread-60253] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:48:53.680 [DEBUG] [Thread-60253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:48:53.680 [DEBUG] [Thread-60253] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:48:53.680 [DEBUG] [Thread-60253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:48:53.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:48:53.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:48:53.736 [DEBUG] [Thread-60253] [transport.py] [_log()] userauth is OK
2025-11-17T19:48:53.736 [DEBUG] [Thread-60253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:48:53.736 [DEBUG] [Thread-60253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:48:53.736 [DEBUG] [Thread-60253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:48:53.736 [DEBUG] [Thread-60253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:48:53.767 [INFO] [Thread-60253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:48:53.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:48:53.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:48:54.595 [DEBUG] [Thread-60253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:48:54.595 [DEBUG] [Thread-60253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:48:54.642 [DEBUG] [Thread-60253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:48:54.642 [DEBUG] [Thread-60253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:48:54.652 [DEBUG] [Thread-60253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:48:54.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:48:54.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:48:54.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:48:54.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:48:54.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:48:54.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:48:54.686 [DEBUG] [Thread-60253] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:48:55.698 [DEBUG] [Thread-60255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:04.265 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:10.745 [DEBUG] [Thread-60256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:13.673 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:13.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:49:24.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:49:24.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:49:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 49, 21), 27.06, 15.05, 0.0, 17.06, 19.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:49:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:49:21
2025-11-17T19:49:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:49:25.641 [DEBUG] [Thread-60257] [transport.py] [_log()] starting thread (client mode): 0xd3134a60
2025-11-17T19:49:25.641 [DEBUG] [Thread-60257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:49:25.663 [DEBUG] [Thread-60257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:49:25.663 [INFO] [Thread-60257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:49:25.666 [DEBUG] [Thread-60257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:49:25.666 [DEBUG] [Thread-60257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] client lang: <none>
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] server lang: <none>
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] kex follows: False
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] Compression: none
2025-11-17T19:49:25.667 [DEBUG] [Thread-60257] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:49:25.684 [DEBUG] [Thread-60257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:49:25.685 [DEBUG] [Thread-60257] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:49:25.686 [DEBUG] [Thread-60257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:49:25.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:49:25.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:49:25.688 [DEBUG] [Thread-60257] [transport.py] [_log()] userauth is OK
2025-11-17T19:49:25.688 [DEBUG] [Thread-60257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:49:25.688 [DEBUG] [Thread-60257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:49:25.688 [DEBUG] [Thread-60257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:49:25.688 [DEBUG] [Thread-60257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:49:25.712 [INFO] [Thread-60257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:49:25.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:49:25.770 [DEBUG] [Thread-60259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:26.357 [DEBUG] [Thread-60257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:49:26.358 [DEBUG] [Thread-60257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:49:26.358 [DEBUG] [Thread-60257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:49:26.398 [DEBUG] [Thread-60257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:49:26.398 [DEBUG] [Thread-60257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:49:26.401 [DEBUG] [Thread-60257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:49:26.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:49:26.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:49:26.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:49:26.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:49:26.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:49:26.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:49:26.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:49:26.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:49:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:49:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.742064 -999.00  +19.20  17.28     20   -3.80 1 2 1 1 1   122    0 21.49 -32.47 ----- 14.5 17.3 275.6 23.8 19.4 -24.2 19.4 -23.5 19.1 -22.4 19.4 -23.3
2025-11-17T19:49:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:49:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:49:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.742064
2025-11-17T19:49:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:49:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:49:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:49:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:49:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:49:26.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:49:21', tmtdew=27.06, humidity=15.05, cloud=0.0, wind=17.06, temperature=19.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:48:34.330', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:49:26.426 [DEBUG] [Thread-60257] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:49:26.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:49:26.521 [DEBUG] [Thread-60261] [transport.py] [_log()] starting thread (client mode): 0xd07bdc00
2025-11-17T19:49:26.521 [DEBUG] [Thread-60261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:49:26.536 [DEBUG] [Thread-60261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:49:26.536 [INFO] [Thread-60261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] client lang: <none>
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] server lang: <none>
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] kex follows: False
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] Compression: none
2025-11-17T19:49:26.544 [DEBUG] [Thread-60261] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:49:26.604 [DEBUG] [Thread-60261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:49:26.604 [DEBUG] [Thread-60261] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:49:26.605 [DEBUG] [Thread-60261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:49:26.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:49:26.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:49:26.664 [DEBUG] [Thread-60261] [transport.py] [_log()] userauth is OK
2025-11-17T19:49:26.664 [DEBUG] [Thread-60261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:49:26.664 [DEBUG] [Thread-60261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:49:26.664 [DEBUG] [Thread-60261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:49:26.665 [DEBUG] [Thread-60261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:49:26.684 [INFO] [Thread-60261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:49:26.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:49:26.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:49:27.538 [DEBUG] [Thread-60261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:49:27.538 [DEBUG] [Thread-60261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:49:27.586 [DEBUG] [Thread-60261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:49:27.586 [DEBUG] [Thread-60261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:49:27.595 [DEBUG] [Thread-60261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:49:27.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:49:27.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:49:27.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:49:27.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:49:27.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:49:27.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:49:27.630 [DEBUG] [Thread-60261] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:49:28.006 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:33.151 [DEBUG] [Thread-60263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:39.411 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:40.801 [DEBUG] [Thread-60264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:44.463 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:55.845 [DEBUG] [Thread-60265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:49:57.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:49:57.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:49:57.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
2025-11-17T19:49:58.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 49, 53), 27.08, 15.08, 0.0, 15.7, 19.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:49:58.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:49:53
2025-11-17T19:49:58.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:49:58.563 [DEBUG] [Thread-60266] [transport.py] [_log()] starting thread (client mode): 0xd7bc5fc0
2025-11-17T19:49:58.563 [DEBUG] [Thread-60266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:49:58.583 [DEBUG] [Thread-60266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:49:58.584 [INFO] [Thread-60266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:49:58.587 [DEBUG] [Thread-60266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:49:58.587 [DEBUG] [Thread-60266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:49:58.587 [DEBUG] [Thread-60266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:49:58.587 [DEBUG] [Thread-60266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] client lang: <none>
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] server lang: <none>
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] kex follows: False
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] Compression: none
2025-11-17T19:49:58.588 [DEBUG] [Thread-60266] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:49:58.606 [DEBUG] [Thread-60266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:49:58.606 [DEBUG] [Thread-60266] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:49:58.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:49:58.607 [DEBUG] [Thread-60266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:49:58.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:49:58.609 [DEBUG] [Thread-60266] [transport.py] [_log()] userauth is OK
2025-11-17T19:49:58.609 [DEBUG] [Thread-60266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:49:58.610 [DEBUG] [Thread-60266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:49:58.610 [DEBUG] [Thread-60266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:49:58.610 [DEBUG] [Thread-60266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:49:58.633 [INFO] [Thread-60266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:49:58.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:49:59.294 [DEBUG] [Thread-60266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:49:59.294 [DEBUG] [Thread-60266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:49:59.294 [DEBUG] [Thread-60266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:49:59.334 [DEBUG] [Thread-60266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:49:59.335 [DEBUG] [Thread-60266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:49:59.338 [DEBUG] [Thread-60266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:49:59.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:49:59.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:49:59.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:49:59.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:49:59.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:49:59.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:49:59.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:49:59.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:49:59.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:49:59.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.742411 -999.00  +19.20   9.85     20   -3.80 1 2 1 1 1   112    0 22.35 -32.48 ----- 14.7 9.8 268.8 20.5 19.4 -24.2 19.4 -23.3 19.1 -22.5 19.4 -23.3
2025-11-17T19:49:59.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:49:59.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:49:59.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.742411
2025-11-17T19:49:59.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:49:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:49:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:49:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:49:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:49:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:49:53', tmtdew=27.08, humidity=15.08, cloud=0.0, wind=15.7, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:49:04.310', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:49:59.362 [DEBUG] [Thread-60266] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:49:59.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:49:59.459 [DEBUG] [Thread-60269] [transport.py] [_log()] starting thread (client mode): 0xd078d090
2025-11-17T19:49:59.459 [DEBUG] [Thread-60269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:49:59.474 [DEBUG] [Thread-60269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:49:59.474 [INFO] [Thread-60269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:49:59.481 [DEBUG] [Thread-60269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:49:59.481 [DEBUG] [Thread-60269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:49:59.482 [DEBUG] [Thread-60269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:49:59.482 [DEBUG] [Thread-60269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:49:59.482 [DEBUG] [Thread-60269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:49:59.482 [DEBUG] [Thread-60269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:49:59.482 [DEBUG] [Thread-60269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:49:59.482 [DEBUG] [Thread-60269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:49:59.482 [DEBUG] [Thread-60269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:49:59.482 [DEBUG] [Thread-60269] [transport.py] [_log()] client lang: <none>
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] server lang: <none>
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] kex follows: False
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] Compression: none
2025-11-17T19:49:59.483 [DEBUG] [Thread-60269] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:49:59.540 [DEBUG] [Thread-60269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:49:59.541 [DEBUG] [Thread-60269] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:49:59.541 [DEBUG] [Thread-60269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:49:59.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:49:59.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:49:59.596 [DEBUG] [Thread-60269] [transport.py] [_log()] userauth is OK
2025-11-17T19:49:59.596 [DEBUG] [Thread-60269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:49:59.596 [DEBUG] [Thread-60269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:49:59.596 [DEBUG] [Thread-60269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:49:59.596 [DEBUG] [Thread-60269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:49:59.614 [INFO] [Thread-60269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:49:59.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:49:59.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:50:00.445 [DEBUG] [Thread-60269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:50:00.445 [DEBUG] [Thread-60269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:50:00.493 [DEBUG] [Thread-60269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:50:00.493 [DEBUG] [Thread-60269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:50:00.502 [DEBUG] [Thread-60269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:50:00.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:50:00.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:50:00.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:50:00.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:50:00.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:50:00.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:50:00.537 [DEBUG] [Thread-60269] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:50:07.869 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:10.882 [DEBUG] [Thread-60271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:20.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:20.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:25.921 [DEBUG] [Thread-60272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:30.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:50:30.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:50:30.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:50:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 50, 25), 27.13, 15.02, 0.0, 14.95, 19.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:50:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:50:25
2025-11-17T19:50:31.296 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:50:31.506 [DEBUG] [Thread-60273] [transport.py] [_log()] starting thread (client mode): 0xd7bc7100
2025-11-17T19:50:31.506 [DEBUG] [Thread-60273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:50:31.525 [DEBUG] [Thread-60273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:50:31.526 [INFO] [Thread-60273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] client lang: <none>
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] server lang: <none>
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] kex follows: False
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] Compression: none
2025-11-17T19:50:31.529 [DEBUG] [Thread-60273] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:50:31.547 [DEBUG] [Thread-60273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:50:31.548 [DEBUG] [Thread-60273] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:50:31.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:50:31.549 [DEBUG] [Thread-60273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:50:31.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:50:31.551 [DEBUG] [Thread-60273] [transport.py] [_log()] userauth is OK
2025-11-17T19:50:31.551 [DEBUG] [Thread-60273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:50:31.551 [DEBUG] [Thread-60273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:50:31.551 [DEBUG] [Thread-60273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:50:31.551 [DEBUG] [Thread-60273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:50:31.574 [INFO] [Thread-60273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:50:31.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:50:32.180 [DEBUG] [Thread-60273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:50:32.180 [DEBUG] [Thread-60273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:50:32.180 [DEBUG] [Thread-60273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:50:32.220 [DEBUG] [Thread-60273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:50:32.221 [DEBUG] [Thread-60273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:50:32.224 [DEBUG] [Thread-60273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:50:32.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:50:32.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:50:32.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:50:32.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:50:32.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:50:32.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:50:32.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:50:32.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:50:32.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:50:32.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.742758 -999.00  +19.20  14.31     20   -3.80 1 2 1 1 1   104    0 22.17 -29.90 ----- 18.1 14.3 278.0 18.4 19.4 -24.2 19.3 -23.2 19.1 -22.4 19.4 -23.4
2025-11-17T19:50:32.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:50:32.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:50:32.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.742758
2025-11-17T19:50:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:50:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:50:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:50:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:50:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:50:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:50:25', tmtdew=27.13, humidity=15.02, cloud=0.0, wind=14.95, temperature=19.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:49:34.291', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:50:32.250 [DEBUG] [Thread-60273] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:50:32.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:50:32.348 [DEBUG] [Thread-60276] [transport.py] [_log()] starting thread (client mode): 0xd7bc5cc0
2025-11-17T19:50:32.348 [DEBUG] [Thread-60276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:50:32.362 [DEBUG] [Thread-60276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:50:32.362 [INFO] [Thread-60276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] client lang: <none>
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] server lang: <none>
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] kex follows: False
2025-11-17T19:50:32.370 [DEBUG] [Thread-60276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:50:32.371 [DEBUG] [Thread-60276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:50:32.371 [DEBUG] [Thread-60276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:50:32.371 [DEBUG] [Thread-60276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:50:32.371 [DEBUG] [Thread-60276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:50:32.371 [DEBUG] [Thread-60276] [transport.py] [_log()] Compression: none
2025-11-17T19:50:32.371 [DEBUG] [Thread-60276] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:50:32.428 [DEBUG] [Thread-60276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:50:32.428 [DEBUG] [Thread-60276] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:50:32.429 [DEBUG] [Thread-60276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:50:32.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:50:32.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:50:32.484 [DEBUG] [Thread-60276] [transport.py] [_log()] userauth is OK
2025-11-17T19:50:32.484 [DEBUG] [Thread-60276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:50:32.484 [DEBUG] [Thread-60276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:50:32.484 [DEBUG] [Thread-60276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:50:32.485 [DEBUG] [Thread-60276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:50:32.507 [INFO] [Thread-60276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:50:32.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:50:32.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:50:33.212 [DEBUG] [Thread-60278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:33.333 [DEBUG] [Thread-60276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:50:33.333 [DEBUG] [Thread-60276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:50:33.381 [DEBUG] [Thread-60276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:50:33.382 [DEBUG] [Thread-60276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:50:33.391 [DEBUG] [Thread-60276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:50:33.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:50: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')
2025-11-17T19:50:33.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:50:33.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:50:33.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:50:33.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:50:33.425 [DEBUG] [Thread-60276] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:50:36.718 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:40.945 [DEBUG] [Thread-60279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:41.799 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:50:55.996 [DEBUG] [Thread-60280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:51:03.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:51:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:51:04.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 50, 57), 27.08, 15.07, 0.0, 16.06, 19.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:51:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:50:57
2025-11-17T19:51:04.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:51:04.374 [DEBUG] [Thread-60281] [transport.py] [_log()] starting thread (client mode): 0xd0787490
2025-11-17T19:51:04.374 [DEBUG] [Thread-60281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:51:04.394 [DEBUG] [Thread-60281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:51:04.394 [INFO] [Thread-60281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] client lang: <none>
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] server lang: <none>
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] kex follows: False
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:51:04.397 [DEBUG] [Thread-60281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:51:04.398 [DEBUG] [Thread-60281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:51:04.398 [DEBUG] [Thread-60281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:51:04.398 [DEBUG] [Thread-60281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:51:04.398 [DEBUG] [Thread-60281] [transport.py] [_log()] Compression: none
2025-11-17T19:51:04.398 [DEBUG] [Thread-60281] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:51:04.417 [DEBUG] [Thread-60281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:51:04.417 [DEBUG] [Thread-60281] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:51:04.418 [DEBUG] [Thread-60281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:51:04.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:51:04.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:51:04.419 [DEBUG] [Thread-60281] [transport.py] [_log()] userauth is OK
2025-11-17T19:51:04.420 [DEBUG] [Thread-60281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:51:04.420 [DEBUG] [Thread-60281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:51:04.420 [DEBUG] [Thread-60281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:51:04.420 [DEBUG] [Thread-60281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:51:04.444 [INFO] [Thread-60281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:51:04.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:51:05.105 [DEBUG] [Thread-60281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:51:05.105 [DEBUG] [Thread-60281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:51:05.105 [DEBUG] [Thread-60281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:51:05.146 [DEBUG] [Thread-60281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:51:05.146 [DEBUG] [Thread-60281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:51:05.148 [DEBUG] [Thread-60281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:51:05.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:51:05.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:51:05.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:51:05.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:51:05.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:51:05.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:51:05.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.743453 -999.00  +19.10   6.20     20   -3.90 1 2 1 1 1    88    0 22.37 -27.72 ----- 9.4 6.2 266.0 15.6 19.4 -24.0 19.4 -23.1 19.1 -22.5 19.4 -23.1
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.743453
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:51:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:50:57', tmtdew=27.08, humidity=15.07, cloud=0.0, wind=16.06, temperature=19.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:50:34.339', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:51:05.166 [DEBUG] [Thread-60281] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:51:05.221 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:05.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:51:05.251 [DEBUG] [Thread-60284] [transport.py] [_log()] starting thread (client mode): 0xd07851e0
2025-11-17T19:51:05.251 [DEBUG] [Thread-60284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:51:05.266 [DEBUG] [Thread-60284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:51:05.266 [INFO] [Thread-60284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:51:05.273 [DEBUG] [Thread-60284] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:51:05.273 [DEBUG] [Thread-60284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:51:05.273 [DEBUG] [Thread-60284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:51:05.273 [DEBUG] [Thread-60284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:51:05.273 [DEBUG] [Thread-60284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:51:05.273 [DEBUG] [Thread-60284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] client lang: <none>
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] server lang: <none>
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] kex follows: False
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] Compression: none
2025-11-17T19:51:05.274 [DEBUG] [Thread-60284] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:51:05.330 [DEBUG] [Thread-60284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:51:05.330 [DEBUG] [Thread-60284] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:51:05.331 [DEBUG] [Thread-60284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:51:05.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:51:05.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:51:05.388 [DEBUG] [Thread-60284] [transport.py] [_log()] userauth is OK
2025-11-17T19:51:05.388 [DEBUG] [Thread-60284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:51:05.388 [DEBUG] [Thread-60284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:51:05.388 [DEBUG] [Thread-60284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:51:05.388 [DEBUG] [Thread-60284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:51:05.402 [INFO] [Thread-60284] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:51:05.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:51:05.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:51:06.257 [DEBUG] [Thread-60284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:51:06.257 [DEBUG] [Thread-60284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:51:06.305 [DEBUG] [Thread-60284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:51:06.305 [DEBUG] [Thread-60284] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:51:06.313 [DEBUG] [Thread-60284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:51:06.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:51:06.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:51:06.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:51:06.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:51:06.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:51:06.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:51:06.344 [DEBUG] [Thread-60284] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:51:11.029 [DEBUG] [Thread-60286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:25.777 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:25.778 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:26.071 [DEBUG] [Thread-60287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:28.633 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:33.269 [DEBUG] [Thread-60288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:34.062 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:51:36.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:51:36.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
2025-11-17T19:51:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 51, 30), 27.11, 15.04, 0.0, 17.1, 19.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:51:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:51:30
2025-11-17T19:51:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:51:37.289 [DEBUG] [Thread-60289] [transport.py] [_log()] starting thread (client mode): 0xd7bc5a80
2025-11-17T19:51:37.289 [DEBUG] [Thread-60289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:51:37.309 [DEBUG] [Thread-60289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:51:37.310 [INFO] [Thread-60289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:51:37.313 [DEBUG] [Thread-60289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:51:37.313 [DEBUG] [Thread-60289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:51:37.313 [DEBUG] [Thread-60289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:51:37.313 [DEBUG] [Thread-60289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:51:37.313 [DEBUG] [Thread-60289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:51:37.313 [DEBUG] [Thread-60289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:51:37.313 [DEBUG] [Thread-60289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] client lang: <none>
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] server lang: <none>
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] kex follows: False
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:51:37.314 [DEBUG] [Thread-60289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:51:37.315 [DEBUG] [Thread-60289] [transport.py] [_log()] Compression: none
2025-11-17T19:51:37.315 [DEBUG] [Thread-60289] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:51:37.333 [DEBUG] [Thread-60289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:51:37.333 [DEBUG] [Thread-60289] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:51:37.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:51:37.334 [DEBUG] [Thread-60289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:51:37.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:51:37.336 [DEBUG] [Thread-60289] [transport.py] [_log()] userauth is OK
2025-11-17T19:51:37.336 [DEBUG] [Thread-60289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:51:37.336 [DEBUG] [Thread-60289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:51:37.336 [DEBUG] [Thread-60289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:51:37.337 [DEBUG] [Thread-60289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:51:37.359 [INFO] [Thread-60289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:51:37.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:51:38.097 [DEBUG] [Thread-60289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:51:38.098 [DEBUG] [Thread-60289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:51:38.098 [DEBUG] [Thread-60289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:51:38.138 [DEBUG] [Thread-60289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:51:38.138 [DEBUG] [Thread-60289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:51:38.141 [DEBUG] [Thread-60289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:51:38.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:51:38.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:51:38.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:51:38.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:51:38.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:51:38.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:51:38.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:51:38.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:51:38.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:51:38.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.743800 -999.00  +19.10  14.16     20   -3.80 1 2 1 1 1    80    0 21.78 -27.20 ----- 9.9 14.2 281.6 18.4 19.4 -24.0 19.3 -23.1 19.1 -22.4 19.4 -23.1
2025-11-17T19:51:38.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:51:38.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:51:38.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.743800
2025-11-17T19:51:38.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:51:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:51:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:51:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:51:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:51:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:51:30', tmtdew=27.11, humidity=15.04, cloud=0.0, wind=17.1, temperature=19.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:51:04.320', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:51:38.167 [DEBUG] [Thread-60289] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:51:38.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:51:38.265 [DEBUG] [Thread-60292] [transport.py] [_log()] starting thread (client mode): 0xd7bc65c0
2025-11-17T19:51:38.265 [DEBUG] [Thread-60292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:51:38.281 [DEBUG] [Thread-60292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:51:38.281 [INFO] [Thread-60292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:51:38.289 [DEBUG] [Thread-60292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:51:38.289 [DEBUG] [Thread-60292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:51:38.289 [DEBUG] [Thread-60292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:51:38.289 [DEBUG] [Thread-60292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:51:38.289 [DEBUG] [Thread-60292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:51:38.289 [DEBUG] [Thread-60292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:51:38.289 [DEBUG] [Thread-60292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:51:38.290 [DEBUG] [Thread-60292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:51:38.290 [DEBUG] [Thread-60292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:51:38.290 [DEBUG] [Thread-60292] [transport.py] [_log()] client lang: <none>
2025-11-17T19:51:38.290 [DEBUG] [Thread-60292] [transport.py] [_log()] server lang: <none>
2025-11-17T19:51:38.290 [DEBUG] [Thread-60292] [transport.py] [_log()] kex follows: False
2025-11-17T19:51:38.290 [DEBUG] [Thread-60292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:51:38.290 [DEBUG] [Thread-60292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:51:38.290 [DEBUG] [Thread-60292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:51:38.291 [DEBUG] [Thread-60292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:51:38.291 [DEBUG] [Thread-60292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:51:38.291 [DEBUG] [Thread-60292] [transport.py] [_log()] Compression: none
2025-11-17T19:51:38.291 [DEBUG] [Thread-60292] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:51:38.348 [DEBUG] [Thread-60292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:51:38.348 [DEBUG] [Thread-60292] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:51:38.349 [DEBUG] [Thread-60292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:51:38.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:51:38.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:51:38.405 [DEBUG] [Thread-60292] [transport.py] [_log()] userauth is OK
2025-11-17T19:51:38.405 [DEBUG] [Thread-60292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:51:38.405 [DEBUG] [Thread-60292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:51:38.405 [DEBUG] [Thread-60292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:51:38.405 [DEBUG] [Thread-60292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:51:38.424 [INFO] [Thread-60292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:51:38.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:51:38.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:51:39.120 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:39.282 [DEBUG] [Thread-60292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:51:39.282 [DEBUG] [Thread-60292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:51:39.332 [DEBUG] [Thread-60292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:51:39.332 [DEBUG] [Thread-60292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:51:39.340 [DEBUG] [Thread-60292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:51:39.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:51:39.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:51:39.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:51:39.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:51:39.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:51:39.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:51:39.372 [DEBUG] [Thread-60292] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:51:41.103 [DEBUG] [Thread-60294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:51:56.148 [DEBUG] [Thread-60295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:02.526 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:09.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:52:09.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:52:09.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:52:10.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 52, 2), 27.17, 14.97, 0.0, 14.45, 19.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:52:10.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:52:02
2025-11-17T19:52:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:52:10.318 [DEBUG] [Thread-60296] [transport.py] [_log()] starting thread (client mode): 0xd31343a0
2025-11-17T19:52:10.318 [DEBUG] [Thread-60296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:52:10.337 [DEBUG] [Thread-60296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:52:10.338 [INFO] [Thread-60296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:52:10.341 [DEBUG] [Thread-60296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:52:10.341 [DEBUG] [Thread-60296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:52:10.341 [DEBUG] [Thread-60296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:52:10.341 [DEBUG] [Thread-60296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:52:10.341 [DEBUG] [Thread-60296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:52:10.341 [DEBUG] [Thread-60296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:52:10.341 [DEBUG] [Thread-60296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] client lang: <none>
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] server lang: <none>
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] kex follows: False
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] Compression: none
2025-11-17T19:52:10.342 [DEBUG] [Thread-60296] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:52:10.359 [DEBUG] [Thread-60296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:52:10.359 [DEBUG] [Thread-60296] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:52:10.360 [DEBUG] [Thread-60296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:52:10.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:52:10.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:52:10.362 [DEBUG] [Thread-60296] [transport.py] [_log()] userauth is OK
2025-11-17T19:52:10.362 [DEBUG] [Thread-60296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:52:10.362 [DEBUG] [Thread-60296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:52:10.362 [DEBUG] [Thread-60296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:52:10.362 [DEBUG] [Thread-60296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:52:10.380 [INFO] [Thread-60296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:52:10.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:52:10.995 [DEBUG] [Thread-60296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:52:10.996 [DEBUG] [Thread-60296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:52:10.996 [DEBUG] [Thread-60296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:52:11.036 [DEBUG] [Thread-60296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:52:11.037 [DEBUG] [Thread-60296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:52:11.039 [DEBUG] [Thread-60296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:52:11.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:52:11.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:52:11.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:52:11.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:52:11.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:52:11.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:52:11.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:52:11.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:52:11.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:52:11.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.744147 -999.00  +19.10   9.30     20   -3.90 1 2 1 1 1    74    0 22.10 -25.91 ----- 7.8 9.3 285.4 15.8 19.4 -24.0 19.3 -23.0 19.0 -22.5 19.3 -22.9
2025-11-17T19:52:11.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:52:11.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:52:11.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.744147
2025-11-17T19:52:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:52:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:52:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:52:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:52:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:52:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:52:02', tmtdew=27.17, humidity=14.97, cloud=0.0, wind=14.45, temperature=19.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:51:34.301', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:52:11.066 [DEBUG] [Thread-60296] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:52:11.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:52:11.161 [DEBUG] [Thread-60299] [transport.py] [_log()] starting thread (client mode): 0xd31ed030
2025-11-17T19:52:11.161 [DEBUG] [Thread-60299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:52:11.176 [DEBUG] [Thread-60299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:52:11.177 [INFO] [Thread-60299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:52:11.181 [DEBUG] [Thread-60301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] client lang: <none>
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] server lang: <none>
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] kex follows: False
2025-11-17T19:52:11.184 [DEBUG] [Thread-60299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:52:11.185 [DEBUG] [Thread-60299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:52:11.185 [DEBUG] [Thread-60299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:52:11.185 [DEBUG] [Thread-60299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:52:11.185 [DEBUG] [Thread-60299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:52:11.185 [DEBUG] [Thread-60299] [transport.py] [_log()] Compression: none
2025-11-17T19:52:11.185 [DEBUG] [Thread-60299] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:52:11.244 [DEBUG] [Thread-60299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:52:11.244 [DEBUG] [Thread-60299] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:52:11.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:52:11.245 [DEBUG] [Thread-60299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:52:11.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:52:11.300 [DEBUG] [Thread-60299] [transport.py] [_log()] userauth is OK
2025-11-17T19:52:11.301 [DEBUG] [Thread-60299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:52:11.301 [DEBUG] [Thread-60299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:52:11.301 [DEBUG] [Thread-60299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:52:11.301 [DEBUG] [Thread-60299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:52:11.320 [INFO] [Thread-60299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:52:11.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:52:11.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:52:12.170 [DEBUG] [Thread-60299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:52:12.170 [DEBUG] [Thread-60299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:52:12.218 [DEBUG] [Thread-60299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:52:12.218 [DEBUG] [Thread-60299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:52:12.227 [DEBUG] [Thread-60299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:52:12.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:52:12.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:52:12.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:52:12.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:52:12.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:52:12.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:52:12.266 [DEBUG] [Thread-60299] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:52:25.939 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:26.217 [DEBUG] [Thread-60302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:32.190 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:32.191 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:33.338 [DEBUG] [Thread-60303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:41.246 [DEBUG] [Thread-60304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:52:42.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:52:42.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:52:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:52:42.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 52, 34), 27.25, 15.04, 0.0, 18.24, 19.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:52:42.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:52:34
2025-11-17T19:52:43.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:52:43.188 [DEBUG] [Thread-60305] [transport.py] [_log()] starting thread (client mode): 0xd0787850
2025-11-17T19:52:43.189 [DEBUG] [Thread-60305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:52:43.209 [DEBUG] [Thread-60305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:52:43.209 [INFO] [Thread-60305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:52:43.211 [DEBUG] [Thread-60305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:52:43.211 [DEBUG] [Thread-60305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:52:43.211 [DEBUG] [Thread-60305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:52:43.211 [DEBUG] [Thread-60305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:52:43.211 [DEBUG] [Thread-60305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:52:43.211 [DEBUG] [Thread-60305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:52:43.211 [DEBUG] [Thread-60305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:52:43.211 [DEBUG] [Thread-60305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] client lang: <none>
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] server lang: <none>
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] kex follows: False
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] Compression: none
2025-11-17T19:52:43.212 [DEBUG] [Thread-60305] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:52:43.232 [DEBUG] [Thread-60305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:52:43.233 [DEBUG] [Thread-60305] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:52:43.234 [DEBUG] [Thread-60305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:52:43.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:52:43.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:52:43.235 [DEBUG] [Thread-60305] [transport.py] [_log()] userauth is OK
2025-11-17T19:52:43.236 [DEBUG] [Thread-60305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:52:43.236 [DEBUG] [Thread-60305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:52:43.236 [DEBUG] [Thread-60305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:52:43.236 [DEBUG] [Thread-60305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:52:43.258 [INFO] [Thread-60305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:52:43.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:52:43.997 [DEBUG] [Thread-60305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:52:43.997 [DEBUG] [Thread-60305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:52:43.997 [DEBUG] [Thread-60305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:52:44.038 [DEBUG] [Thread-60305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:52:44.039 [DEBUG] [Thread-60305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:52:44.041 [DEBUG] [Thread-60305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:52:44.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:52:44.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:52:44.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:52:44.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:52:44.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:52:44.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:52:44.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:52:44.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:52:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:52:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.744494 -999.00  +19.10   9.47     20   -3.80 1 2 1 1 1    68    0 21.87 -24.86 ----- 6.7 9.5 278.6 13.5 19.4 -24.0 19.3 -23.1 19.1 -22.3 19.4 -23.0
2025-11-17T19:52:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:52:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:52:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.744494
2025-11-17T19:52:44.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:52:44.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:52:44.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:52:44.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:52:44.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:52:44.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:52:34', tmtdew=27.25, humidity=15.04, cloud=0.0, wind=18.24, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:52:04.282', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:52:44.068 [DEBUG] [Thread-60305] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:52:44.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:52:44.164 [DEBUG] [Thread-60308] [transport.py] [_log()] starting thread (client mode): 0xd078c040
2025-11-17T19:52:44.164 [DEBUG] [Thread-60308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:52:44.179 [DEBUG] [Thread-60308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:52:44.179 [INFO] [Thread-60308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:52:44.187 [DEBUG] [Thread-60308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:52:44.187 [DEBUG] [Thread-60308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:52:44.187 [DEBUG] [Thread-60308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:52:44.187 [DEBUG] [Thread-60308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:52:44.187 [DEBUG] [Thread-60308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:52:44.187 [DEBUG] [Thread-60308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:52:44.187 [DEBUG] [Thread-60308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] client lang: <none>
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] server lang: <none>
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] kex follows: False
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:52:44.188 [DEBUG] [Thread-60308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:52:44.189 [DEBUG] [Thread-60308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:52:44.189 [DEBUG] [Thread-60308] [transport.py] [_log()] Compression: none
2025-11-17T19:52:44.189 [DEBUG] [Thread-60308] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:52:44.249 [DEBUG] [Thread-60308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:52:44.250 [DEBUG] [Thread-60308] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:52:44.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:52:44.251 [DEBUG] [Thread-60308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:52:44.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:52:44.304 [DEBUG] [Thread-60308] [transport.py] [_log()] userauth is OK
2025-11-17T19:52:44.304 [DEBUG] [Thread-60308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:52:44.305 [DEBUG] [Thread-60308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:52:44.305 [DEBUG] [Thread-60308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:52:44.305 [DEBUG] [Thread-60308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:52:44.322 [INFO] [Thread-60308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:52:44.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:52:44.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:52:45.184 [DEBUG] [Thread-60308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:52:45.184 [DEBUG] [Thread-60308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:52:45.232 [DEBUG] [Thread-60308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:52:45.233 [DEBUG] [Thread-60308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:52:45.242 [DEBUG] [Thread-60308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:52:45.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:52:45.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:52:45.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:52:45.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:52:45.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:52:45.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:52:45.277 [DEBUG] [Thread-60308] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:52:56.279 [DEBUG] [Thread-60310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:11.320 [DEBUG] [Thread-60311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:15.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:53:15.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:53:15.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:53:15.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 53, 6), 27.16, 14.97, 0.0, 13.98, 19.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:53:15.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:53:06
2025-11-17T19:53:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:53:16.234 [DEBUG] [Thread-60312] [transport.py] [_log()] starting thread (client mode): 0xd0785e40
2025-11-17T19:53:16.235 [DEBUG] [Thread-60312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:53:16.254 [DEBUG] [Thread-60312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:53:16.254 [INFO] [Thread-60312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:53:16.257 [DEBUG] [Thread-60312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:53:16.257 [DEBUG] [Thread-60312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:53:16.257 [DEBUG] [Thread-60312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:53:16.257 [DEBUG] [Thread-60312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] client lang: <none>
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] server lang: <none>
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] kex follows: False
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] Compression: none
2025-11-17T19:53:16.258 [DEBUG] [Thread-60312] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:53:16.276 [DEBUG] [Thread-60312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:53:16.276 [DEBUG] [Thread-60312] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:53:16.277 [DEBUG] [Thread-60312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:53:16.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:53:16.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:53:16.279 [DEBUG] [Thread-60312] [transport.py] [_log()] userauth is OK
2025-11-17T19:53:16.279 [DEBUG] [Thread-60312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:53:16.279 [DEBUG] [Thread-60312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:53:16.279 [DEBUG] [Thread-60312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:53:16.279 [DEBUG] [Thread-60312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:53:16.303 [INFO] [Thread-60312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:53:16.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:53:16.531 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:16.924 [DEBUG] [Thread-60312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:53:16.924 [DEBUG] [Thread-60312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:53:16.925 [DEBUG] [Thread-60312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:53:16.965 [DEBUG] [Thread-60312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:53:16.965 [DEBUG] [Thread-60312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:53:16.968 [DEBUG] [Thread-60312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:53:16.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:53:16.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:53:16.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:53:16.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:53:16.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:53:16.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:53:16.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:53:16.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:53:16.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:53:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.744841 -999.00  +19.10   7.92     20   -3.80 1 2 1 1 1    62    0 22.53 -21.98 ----- 7.5 7.9 277.3 14.1 19.4 -23.9 19.4 -23.0 19.0 -22.4 19.3 -23.1
2025-11-17T19:53:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:53:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:53:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.744841
2025-11-17T19:53:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:53:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:53:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:53:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:53:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:53:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:53:06', tmtdew=27.16, humidity=14.97, cloud=0.0, wind=13.98, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:52:34.262', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:53:16.995 [DEBUG] [Thread-60312] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:53:17.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:53:17.092 [DEBUG] [Thread-60315] [transport.py] [_log()] starting thread (client mode): 0xd07854b0
2025-11-17T19:53:17.092 [DEBUG] [Thread-60315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:53:17.107 [DEBUG] [Thread-60315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:53:17.107 [INFO] [Thread-60315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:53:17.114 [DEBUG] [Thread-60315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:53:17.114 [DEBUG] [Thread-60315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:53:17.114 [DEBUG] [Thread-60315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] client lang: <none>
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] server lang: <none>
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] kex follows: False
2025-11-17T19:53:17.115 [DEBUG] [Thread-60315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:53:17.116 [DEBUG] [Thread-60315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:53:17.116 [DEBUG] [Thread-60315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:53:17.116 [DEBUG] [Thread-60315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:53:17.116 [DEBUG] [Thread-60315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:53:17.116 [DEBUG] [Thread-60315] [transport.py] [_log()] Compression: none
2025-11-17T19:53:17.116 [DEBUG] [Thread-60315] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:53:17.172 [DEBUG] [Thread-60315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:53:17.173 [DEBUG] [Thread-60315] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:53:17.174 [DEBUG] [Thread-60315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:53:17.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:53:17.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:53:17.228 [DEBUG] [Thread-60315] [transport.py] [_log()] userauth is OK
2025-11-17T19:53:17.229 [DEBUG] [Thread-60315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:53:17.229 [DEBUG] [Thread-60315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:53:17.229 [DEBUG] [Thread-60315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:53:17.229 [DEBUG] [Thread-60315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:53:17.251 [INFO] [Thread-60315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:53:17.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:53:17.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:53:18.100 [DEBUG] [Thread-60315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:53:18.101 [DEBUG] [Thread-60315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:53:18.148 [DEBUG] [Thread-60315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:53:18.148 [DEBUG] [Thread-60315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:53:18.157 [DEBUG] [Thread-60315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:53:18.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:53:18.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:53:18.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:53:18.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:53:18.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:53:18.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:53:18.194 [DEBUG] [Thread-60315] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:53:22.636 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:26.352 [DEBUG] [Thread-60317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:33.078 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:33.415 [DEBUG] [Thread-60318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:40.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:40.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:40.310 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:41.389 [DEBUG] [Thread-60319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:42.453 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:48.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:53:48.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:53:48.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:53:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 53, 38), 27.15, 14.99, 0.0, 14.65, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:53:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:53:38
2025-11-17T19:53:48.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:53:49.137 [DEBUG] [Thread-60320] [transport.py] [_log()] starting thread (client mode): 0xd31ed180
2025-11-17T19:53:49.137 [DEBUG] [Thread-60320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:53:49.156 [DEBUG] [Thread-60320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:53:49.157 [INFO] [Thread-60320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:53:49.160 [DEBUG] [Thread-60320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:53:49.160 [DEBUG] [Thread-60320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:53:49.160 [DEBUG] [Thread-60320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:53:49.160 [DEBUG] [Thread-60320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:53:49.160 [DEBUG] [Thread-60320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:53:49.160 [DEBUG] [Thread-60320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:53:49.160 [DEBUG] [Thread-60320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] client lang: <none>
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] server lang: <none>
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] kex follows: False
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] Compression: none
2025-11-17T19:53:49.161 [DEBUG] [Thread-60320] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:53:49.175 [DEBUG] [Thread-60320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:53:49.175 [DEBUG] [Thread-60320] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:53:49.176 [DEBUG] [Thread-60320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:53:49.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:53:49.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:53:49.177 [DEBUG] [Thread-60320] [transport.py] [_log()] userauth is OK
2025-11-17T19:53:49.177 [DEBUG] [Thread-60320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:53:49.177 [DEBUG] [Thread-60320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:53:49.177 [DEBUG] [Thread-60320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:53:49.177 [DEBUG] [Thread-60320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:53:49.191 [INFO] [Thread-60320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:53:49.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:53:49.937 [DEBUG] [Thread-60320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:53:49.937 [DEBUG] [Thread-60320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:53:49.938 [DEBUG] [Thread-60320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:53:49.978 [DEBUG] [Thread-60320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:53:49.978 [DEBUG] [Thread-60320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:53:49.981 [DEBUG] [Thread-60320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:53:49.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:53:49.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:53:49.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:53:49.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:53:50.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:53:50.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:53:50.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:53:50.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:53:50.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:53:50.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.745189 -999.00  +19.10  10.71     20   -3.90 1 2 1 1 1    57    0 22.55 -20.93 ----- 9.8 10.7 272.8 12.8 19.4 -23.8 19.3 -23.0 19.0 -22.5 19.3 -23.0
2025-11-17T19:53:50.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:53:50.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:53:50.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.745189
2025-11-17T19:53:50.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:53:50.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:53:50.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:53:50.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:53:50.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:53:50.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:53:38', tmtdew=27.15, humidity=14.99, cloud=0.0, wind=14.65, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:53:04.330', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:53:50.008 [DEBUG] [Thread-60320] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:53:50.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:53:50.106 [DEBUG] [Thread-60323] [transport.py] [_log()] starting thread (client mode): 0xd0785540
2025-11-17T19:53:50.106 [DEBUG] [Thread-60323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:53:50.120 [DEBUG] [Thread-60323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:53:50.120 [INFO] [Thread-60323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] client lang: <none>
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] server lang: <none>
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] kex follows: False
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:53:50.128 [DEBUG] [Thread-60323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:53:50.129 [DEBUG] [Thread-60323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:53:50.129 [DEBUG] [Thread-60323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:53:50.129 [DEBUG] [Thread-60323] [transport.py] [_log()] Compression: none
2025-11-17T19:53:50.129 [DEBUG] [Thread-60323] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:53:50.188 [DEBUG] [Thread-60323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:53:50.188 [DEBUG] [Thread-60323] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:53:50.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:53:50.190 [DEBUG] [Thread-60323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:53:50.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:53:50.244 [DEBUG] [Thread-60323] [transport.py] [_log()] userauth is OK
2025-11-17T19:53:50.245 [DEBUG] [Thread-60323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:53:50.245 [DEBUG] [Thread-60323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:53:50.245 [DEBUG] [Thread-60323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:53:50.245 [DEBUG] [Thread-60323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:53:50.265 [INFO] [Thread-60323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:53:50.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:53:50.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:53:51.099 [DEBUG] [Thread-60323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:53:51.099 [DEBUG] [Thread-60323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:53:51.147 [DEBUG] [Thread-60323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:53:51.147 [DEBUG] [Thread-60323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:53:51.159 [DEBUG] [Thread-60323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:53:51.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:53:51.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:53:51.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:53:51.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:53:51.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:53:51.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:53:51.198 [DEBUG] [Thread-60323] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:53:52.968 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:56.418 [DEBUG] [Thread-60325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:53:59.028 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:07.409 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:11.458 [DEBUG] [Thread-60326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:14.775 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:21.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:54:21.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:54:21.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:54:21.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 54, 10), 27.12, 15.0, 0.0, 15.21, 19.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:54:21.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:54:10
2025-11-17T19:54:21.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:54:22.145 [DEBUG] [Thread-60327] [transport.py] [_log()] starting thread (client mode): 0xd31ec1f0
2025-11-17T19:54:22.145 [DEBUG] [Thread-60327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:54:22.166 [DEBUG] [Thread-60327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:54:22.166 [INFO] [Thread-60327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] client lang: <none>
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] server lang: <none>
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] kex follows: False
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:54:22.169 [DEBUG] [Thread-60327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:54:22.170 [DEBUG] [Thread-60327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:54:22.170 [DEBUG] [Thread-60327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:54:22.170 [DEBUG] [Thread-60327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:54:22.170 [DEBUG] [Thread-60327] [transport.py] [_log()] Compression: none
2025-11-17T19:54:22.170 [DEBUG] [Thread-60327] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:54:22.185 [DEBUG] [Thread-60327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:54:22.185 [DEBUG] [Thread-60327] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:54:22.185 [DEBUG] [Thread-60327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:54:22.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:54:22.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:54:22.186 [DEBUG] [Thread-60327] [transport.py] [_log()] userauth is OK
2025-11-17T19:54:22.186 [DEBUG] [Thread-60327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:54:22.186 [DEBUG] [Thread-60327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:54:22.186 [DEBUG] [Thread-60327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:54:22.186 [DEBUG] [Thread-60327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:54:22.195 [INFO] [Thread-60327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:54:22.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:54:22.780 [DEBUG] [Thread-60327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:54:22.780 [DEBUG] [Thread-60327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:54:22.780 [DEBUG] [Thread-60327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:54:22.821 [DEBUG] [Thread-60327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:54:22.821 [DEBUG] [Thread-60327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:54:22.823 [DEBUG] [Thread-60327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:54:22.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:54:22.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:54:22.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:54:22.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:54:22.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:54:22.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:54:22.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:54:22.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:54:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:54:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.745536 -999.00  +19.10   7.32     20   -3.90 1 2 1 1 1    52    0 22.63 -17.75 ----- 7.8 7.3 269.8 12.0 19.3 -24.0 19.3 -23.1 19.1 -22.7 19.3 -23.0
2025-11-17T19:54:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:54:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:54:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.745536
2025-11-17T19:54:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:54:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:54:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:54:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:54:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:54:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:54:10', tmtdew=27.12, humidity=15.0, cloud=0.0, wind=15.21, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:53:34.310', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:54:22.844 [DEBUG] [Thread-60327] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:54:22.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:54:22.928 [DEBUG] [Thread-60330] [transport.py] [_log()] starting thread (client mode): 0xd078ee90
2025-11-17T19:54:22.928 [DEBUG] [Thread-60330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:54:22.943 [DEBUG] [Thread-60330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:54:22.943 [INFO] [Thread-60330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] client lang: <none>
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] server lang: <none>
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] kex follows: False
2025-11-17T19:54:22.950 [DEBUG] [Thread-60330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:54:22.951 [DEBUG] [Thread-60330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:54:22.951 [DEBUG] [Thread-60330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:54:22.951 [DEBUG] [Thread-60330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:54:22.951 [DEBUG] [Thread-60330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:54:22.951 [DEBUG] [Thread-60330] [transport.py] [_log()] Compression: none
2025-11-17T19:54:22.951 [DEBUG] [Thread-60330] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:54:23.011 [DEBUG] [Thread-60330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:54:23.012 [DEBUG] [Thread-60330] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:54:23.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:54:23.012 [DEBUG] [Thread-60330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:54:23.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:54:23.068 [DEBUG] [Thread-60330] [transport.py] [_log()] userauth is OK
2025-11-17T19:54:23.068 [DEBUG] [Thread-60330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:54:23.068 [DEBUG] [Thread-60330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:54:23.068 [DEBUG] [Thread-60330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:54:23.068 [DEBUG] [Thread-60330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:54:23.082 [INFO] [Thread-60330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:54:23.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:54:23.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:54:23.936 [DEBUG] [Thread-60330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:54:23.936 [DEBUG] [Thread-60330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:54:23.984 [DEBUG] [Thread-60330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:54:23.984 [DEBUG] [Thread-60330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:54:23.993 [DEBUG] [Thread-60330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:54:24.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:54:24.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:54:24.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:54:24.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:54:24.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:54:24.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:54:24.028 [DEBUG] [Thread-60330] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:54:25.189 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:26.482 [DEBUG] [Thread-60332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:27.533 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:31.265 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:33.498 [DEBUG] [Thread-60333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:38.647 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:41.526 [DEBUG] [Thread-60334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:46.027 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:46.703 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:46.704 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:53.679 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:54:54.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:54:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:54:54.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 54, 42), 27.07, 15.07, 0.0, 12.55, 19.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:54:54.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:54:42
2025-11-17T19:54:54.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:54:54.982 [DEBUG] [Thread-60335] [transport.py] [_log()] starting thread (client mode): 0xd7bc5000
2025-11-17T19:54:54.982 [DEBUG] [Thread-60335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:54:55.002 [DEBUG] [Thread-60335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:54:55.002 [INFO] [Thread-60335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:54:55.005 [DEBUG] [Thread-60335] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] client lang: <none>
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] server lang: <none>
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] kex follows: False
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] Compression: none
2025-11-17T19:54:55.006 [DEBUG] [Thread-60335] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:54:55.025 [DEBUG] [Thread-60335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:54:55.025 [DEBUG] [Thread-60335] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:54:55.026 [DEBUG] [Thread-60335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:54:55.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:54:55.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:54:55.027 [DEBUG] [Thread-60335] [transport.py] [_log()] userauth is OK
2025-11-17T19:54:55.028 [DEBUG] [Thread-60335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:54:55.028 [DEBUG] [Thread-60335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:54:55.028 [DEBUG] [Thread-60335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:54:55.028 [DEBUG] [Thread-60335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:54:55.052 [INFO] [Thread-60335] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:54:55.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:54:55.796 [DEBUG] [Thread-60335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:54:55.796 [DEBUG] [Thread-60335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:54:55.797 [DEBUG] [Thread-60335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:54:55.837 [DEBUG] [Thread-60335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:54:55.837 [DEBUG] [Thread-60335] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:54:55.840 [DEBUG] [Thread-60335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:54:55.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:54:55.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:54:55.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:54:55.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:54:55.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:54:55.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:54:55.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:54:55.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:54:55.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:54:55.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.745883 -999.00  +19.10   5.21     20   -3.90 1 2 1 1 1    48    0 22.56 -16.13 ----- 10.1 5.2 263.6 11.0 19.4 -23.9 19.2 -23.1 19.0 -22.8 19.2 -23.0
2025-11-17T19:54:55.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:54:55.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:54:55.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.745883
2025-11-17T19:54:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:54:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:54:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:54:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:54:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:54:55.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:54:42', tmtdew=27.07, humidity=15.07, cloud=0.0, wind=12.55, temperature=19.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:54:04.291', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:54:55.863 [DEBUG] [Thread-60335] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:54:55.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:54:55.962 [DEBUG] [Thread-60338] [transport.py] [_log()] starting thread (client mode): 0xd07be200
2025-11-17T19:54:55.962 [DEBUG] [Thread-60338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:54:55.979 [DEBUG] [Thread-60338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:54:55.979 [INFO] [Thread-60338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] client lang: <none>
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] server lang: <none>
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] kex follows: False
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:54:55.990 [DEBUG] [Thread-60338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:54:55.991 [DEBUG] [Thread-60338] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:54:55.991 [DEBUG] [Thread-60338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:54:55.991 [DEBUG] [Thread-60338] [transport.py] [_log()] Compression: none
2025-11-17T19:54:55.991 [DEBUG] [Thread-60338] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:54:56.048 [DEBUG] [Thread-60338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:54:56.048 [DEBUG] [Thread-60338] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:54:56.048 [DEBUG] [Thread-60338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:54:56.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:54:56.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:54:56.108 [DEBUG] [Thread-60338] [transport.py] [_log()] userauth is OK
2025-11-17T19:54:56.109 [DEBUG] [Thread-60338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:54:56.109 [DEBUG] [Thread-60338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:54:56.109 [DEBUG] [Thread-60338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:54:56.109 [DEBUG] [Thread-60338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:54:56.132 [INFO] [Thread-60338] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:54:56.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:54:56.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:54:56.553 [DEBUG] [Thread-60340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:54:57.014 [DEBUG] [Thread-60338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:54:57.014 [DEBUG] [Thread-60338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:54:57.061 [DEBUG] [Thread-60338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:54:57.062 [DEBUG] [Thread-60338] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:54:57.071 [DEBUG] [Thread-60338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:54:57.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:54:57.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:54:57.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:54:57.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:54:57.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:54:57.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:54:57.105 [DEBUG] [Thread-60338] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:54:59.781 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:07.177 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:11.595 [DEBUG] [Thread-60341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:14.565 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:22.086 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:26.627 [DEBUG] [Thread-60342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:27.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:55:27.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:55:27.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:55:27.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 55, 14), 27.06, 15.08, 0.0, 15.02, 19.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:55:27.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:55:14
2025-11-17T19:55:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:55:28.047 [DEBUG] [Thread-60343] [transport.py] [_log()] starting thread (client mode): 0xd07be620
2025-11-17T19:55:28.047 [DEBUG] [Thread-60343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:55:28.065 [DEBUG] [Thread-60343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:55:28.066 [INFO] [Thread-60343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:55:28.069 [DEBUG] [Thread-60343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:55:28.069 [DEBUG] [Thread-60343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] client lang: <none>
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] server lang: <none>
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] kex follows: False
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:55:28.070 [DEBUG] [Thread-60343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:55:28.071 [DEBUG] [Thread-60343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:55:28.071 [DEBUG] [Thread-60343] [transport.py] [_log()] Compression: none
2025-11-17T19:55:28.071 [DEBUG] [Thread-60343] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:55:28.088 [DEBUG] [Thread-60343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:55:28.089 [DEBUG] [Thread-60343] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:55:28.089 [DEBUG] [Thread-60343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:55:28.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:55:28.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:55:28.091 [DEBUG] [Thread-60343] [transport.py] [_log()] userauth is OK
2025-11-17T19:55:28.091 [DEBUG] [Thread-60343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:55:28.091 [DEBUG] [Thread-60343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:55:28.091 [DEBUG] [Thread-60343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:55:28.091 [DEBUG] [Thread-60343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:55:28.112 [INFO] [Thread-60343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:55:28.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:55:28.172 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:28.736 [DEBUG] [Thread-60343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:55:28.736 [DEBUG] [Thread-60343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:55:28.736 [DEBUG] [Thread-60343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:55:28.777 [DEBUG] [Thread-60343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:55:28.777 [DEBUG] [Thread-60343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:55:28.779 [DEBUG] [Thread-60343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:55:28.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:55:28.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:55:28.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:55:28.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:55:28.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:55:28.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:55:28.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:55:28.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:55:28.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:55:28.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.746230 -999.00  +19.00   5.95     20   -3.90 1 2 1 1 1    44    0 22.17 -15.27 ----- 8.5 6.0 250.6 10.7 19.3 -24.0 19.3 -23.1 19.0 -22.7 19.2 -23.3
2025-11-17T19:55:28.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:55:28.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:55:28.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.746230
2025-11-17T19:55:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:55:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:55:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:55:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:55:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T19:55:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:55:14', tmtdew=27.06, humidity=15.08, cloud=0.0, wind=15.02, temperature=19.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:54:34.272', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:55:28.803 [DEBUG] [Thread-60343] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:55:28.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:55:28.896 [DEBUG] [Thread-60346] [transport.py] [_log()] starting thread (client mode): 0xd7bc7a60
2025-11-17T19:55:28.897 [DEBUG] [Thread-60346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:55:28.911 [DEBUG] [Thread-60346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:55:28.912 [INFO] [Thread-60346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:55:28.919 [DEBUG] [Thread-60346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] client lang: <none>
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] server lang: <none>
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] kex follows: False
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] Compression: none
2025-11-17T19:55:28.920 [DEBUG] [Thread-60346] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:55:28.976 [DEBUG] [Thread-60346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:55:28.976 [DEBUG] [Thread-60346] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:55:28.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:55:28.977 [DEBUG] [Thread-60346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:55:28.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:55:29.032 [DEBUG] [Thread-60346] [transport.py] [_log()] userauth is OK
2025-11-17T19:55:29.032 [DEBUG] [Thread-60346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:55:29.033 [DEBUG] [Thread-60346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:55:29.033 [DEBUG] [Thread-60346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:55:29.033 [DEBUG] [Thread-60346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:55:29.055 [INFO] [Thread-60346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:55:29.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:55:29.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:55:29.928 [DEBUG] [Thread-60346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:55:29.929 [DEBUG] [Thread-60346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:55:29.976 [DEBUG] [Thread-60346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:55:29.976 [DEBUG] [Thread-60346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:55:29.986 [DEBUG] [Thread-60346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:55:29.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:55:29.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:55:30.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:55:30.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:55:30.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:55:30.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:55:30.020 [DEBUG] [Thread-60346] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:55:33.577 [DEBUG] [Thread-60348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:35.548 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:41.652 [DEBUG] [Thread-60349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:42.930 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:53.671 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:54.786 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:54.787 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:56.681 [DEBUG] [Thread-60350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:55:58.782 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:56:00.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:56:00.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:56:00.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 55, 46), 27.01, 15.07, 0.0, 12.67, 18.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:56:00.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:55:46
2025-11-17T19:56:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:56:00.957 [DEBUG] [Thread-60351] [transport.py] [_log()] starting thread (client mode): 0xd078f4f0
2025-11-17T19:56:00.957 [DEBUG] [Thread-60351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:56:00.977 [DEBUG] [Thread-60351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:56:00.977 [INFO] [Thread-60351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] client lang: <none>
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] server lang: <none>
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] kex follows: False
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] Compression: none
2025-11-17T19:56:00.981 [DEBUG] [Thread-60351] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:56:01.001 [DEBUG] [Thread-60351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:56:01.001 [DEBUG] [Thread-60351] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:56:01.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:56:01.002 [DEBUG] [Thread-60351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:56:01.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:56:01.004 [DEBUG] [Thread-60351] [transport.py] [_log()] userauth is OK
2025-11-17T19:56:01.004 [DEBUG] [Thread-60351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:56:01.005 [DEBUG] [Thread-60351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:56:01.005 [DEBUG] [Thread-60351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:56:01.005 [DEBUG] [Thread-60351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:56:01.029 [INFO] [Thread-60351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:56:01.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:56:01.775 [DEBUG] [Thread-60351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:56:01.775 [DEBUG] [Thread-60351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:56:01.775 [DEBUG] [Thread-60351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:56:01.816 [DEBUG] [Thread-60351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:56:01.816 [DEBUG] [Thread-60351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:56:01.818 [DEBUG] [Thread-60351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:56:01.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:56:01.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:56:01.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:56:01.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:56:01.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:56:01.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:56:01.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.746925 -999.00  +19.00   8.19     20   -3.80 1 1 1 1 1    37    0 22.88 -13.90 ----- 7.4 8.2 250.4 10.5 19.3 -24.2 19.2 -23.3 18.9 -22.9 19.2 -23.5
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.746925
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:56:01.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:55:46', tmtdew=27.01, humidity=15.07, cloud=0.0, wind=12.67, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:55:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:56:01.844 [DEBUG] [Thread-60351] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:56:01.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:56:01.924 [DEBUG] [Thread-60354] [transport.py] [_log()] starting thread (client mode): 0xd07852d0
2025-11-17T19:56:01.924 [DEBUG] [Thread-60354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:56:01.943 [DEBUG] [Thread-60354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:56:01.943 [INFO] [Thread-60354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] client lang: <none>
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] server lang: <none>
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] kex follows: False
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] Compression: none
2025-11-17T19:56:01.951 [DEBUG] [Thread-60354] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:56:02.007 [DEBUG] [Thread-60354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:56:02.007 [DEBUG] [Thread-60354] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:56:02.008 [DEBUG] [Thread-60354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:56:02.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:56:02.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:56:02.065 [DEBUG] [Thread-60354] [transport.py] [_log()] userauth is OK
2025-11-17T19:56:02.065 [DEBUG] [Thread-60354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:56:02.065 [DEBUG] [Thread-60354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:56:02.065 [DEBUG] [Thread-60354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:56:02.065 [DEBUG] [Thread-60354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:56:02.084 [INFO] [Thread-60354] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:56:02.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:56:02.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:56:02.951 [DEBUG] [Thread-60354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:56:02.951 [DEBUG] [Thread-60354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:56:02.999 [DEBUG] [Thread-60354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:56:02.999 [DEBUG] [Thread-60354] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:56:03.008 [DEBUG] [Thread-60354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:56:03.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:56:03.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:56:03.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:56:03.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:56:03.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:56:03.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:56:03.046 [DEBUG] [Thread-60354] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:56:06.147 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:11.711 [DEBUG] [Thread-60356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:13.546 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:18.075 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:23.179 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:26.748 [DEBUG] [Thread-60357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:30.555 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:33.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:56:33.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:56:33.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:56:33.638 [DEBUG] [Thread-60358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:33.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 56, 18), 27.0, 15.08, 0.0, 12.51, 18.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:56:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:56:18
2025-11-17T19:56:33.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:56:33.979 [DEBUG] [Thread-60359] [transport.py] [_log()] starting thread (client mode): 0xd31cd870
2025-11-17T19:56:33.979 [DEBUG] [Thread-60359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:56:34.000 [DEBUG] [Thread-60359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:56:34.000 [INFO] [Thread-60359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:56:34.003 [DEBUG] [Thread-60359] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:56:34.003 [DEBUG] [Thread-60359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:56:34.003 [DEBUG] [Thread-60359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:56:34.003 [DEBUG] [Thread-60359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:56:34.003 [DEBUG] [Thread-60359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:56:34.003 [DEBUG] [Thread-60359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] client lang: <none>
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] server lang: <none>
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] kex follows: False
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] Compression: none
2025-11-17T19:56:34.004 [DEBUG] [Thread-60359] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:56:34.023 [DEBUG] [Thread-60359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:56:34.023 [DEBUG] [Thread-60359] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:56:34.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:56:34.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:56:34.025 [DEBUG] [Thread-60359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:56:34.025 [DEBUG] [Thread-60359] [transport.py] [_log()] userauth is OK
2025-11-17T19:56:34.025 [DEBUG] [Thread-60359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:56:34.025 [DEBUG] [Thread-60359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:56:34.025 [DEBUG] [Thread-60359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:56:34.025 [DEBUG] [Thread-60359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:56:34.049 [INFO] [Thread-60359] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:56:34.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:56:34.693 [DEBUG] [Thread-60359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:56:34.693 [DEBUG] [Thread-60359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:56:34.693 [DEBUG] [Thread-60359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:56:34.733 [DEBUG] [Thread-60359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:56:34.733 [DEBUG] [Thread-60359] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:56:34.736 [DEBUG] [Thread-60359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:56:34.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:56:34.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:56:34.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:56:34.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:56:34.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:56:34.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:56:34.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:56:34.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:56:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:56:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.747272 -999.00  +19.00  11.26     20   -3.90 1 1 1 1 1    33    0 22.69 -12.52 ----- 10.1 11.3 254.8 15.8 19.2 -24.1 19.2 -23.4 18.9 -22.9 19.2 -23.4
2025-11-17T19:56:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:56:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:56:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.747272
2025-11-17T19:56:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:56:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:56:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:56:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:56:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:56:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:56:18', tmtdew=27.0, humidity=15.08, cloud=0.0, wind=12.51, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:56:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:56:34.761 [DEBUG] [Thread-60359] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:56:34.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:56:34.856 [DEBUG] [Thread-60362] [transport.py] [_log()] starting thread (client mode): 0xd31ed9f0
2025-11-17T19:56:34.856 [DEBUG] [Thread-60362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:56:34.872 [DEBUG] [Thread-60362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:56:34.872 [INFO] [Thread-60362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:56:34.879 [DEBUG] [Thread-60362] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:56:34.880 [DEBUG] [Thread-60362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:56:34.880 [DEBUG] [Thread-60362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:56:34.880 [DEBUG] [Thread-60362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:56:34.880 [DEBUG] [Thread-60362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:56:34.880 [DEBUG] [Thread-60362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:56:34.880 [DEBUG] [Thread-60362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:56:34.880 [DEBUG] [Thread-60362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:56:34.880 [DEBUG] [Thread-60362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] client lang: <none>
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] server lang: <none>
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] kex follows: False
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:56:34.881 [DEBUG] [Thread-60362] [transport.py] [_log()] Compression: none
2025-11-17T19:56:34.882 [DEBUG] [Thread-60362] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:56:34.936 [DEBUG] [Thread-60362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:56:34.936 [DEBUG] [Thread-60362] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:56:34.937 [DEBUG] [Thread-60362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:56:34.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:56:34.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:56:34.997 [DEBUG] [Thread-60362] [transport.py] [_log()] userauth is OK
2025-11-17T19:56:34.997 [DEBUG] [Thread-60362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:56:34.997 [DEBUG] [Thread-60362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:56:34.997 [DEBUG] [Thread-60362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:56:34.997 [DEBUG] [Thread-60362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:56:35.020 [INFO] [Thread-60362] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:56:35.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:56:35.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:56:35.894 [DEBUG] [Thread-60362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:56:35.894 [DEBUG] [Thread-60362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:56:35.943 [DEBUG] [Thread-60362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:56:35.943 [DEBUG] [Thread-60362] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:56:35.952 [DEBUG] [Thread-60362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:56:35.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:56:35.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:56:35.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:56:35.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:56:35.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:56:35.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:56:35.986 [DEBUG] [Thread-60362] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:56:37.931 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:41.784 [DEBUG] [Thread-60364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:56.823 [DEBUG] [Thread-60365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:59.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:56:59.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:57:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:57:05.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:57:05.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:57:06.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 56, 50), 26.99, 15.1, 0.0, 9.42, 18.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:57:06.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:56:50
2025-11-17T19:57:06.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:57:06.901 [DEBUG] [Thread-60366] [transport.py] [_log()] starting thread (client mode): 0xd31ce740
2025-11-17T19:57:06.902 [DEBUG] [Thread-60366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:57:06.923 [DEBUG] [Thread-60366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:57:06.923 [INFO] [Thread-60366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:57:06.926 [DEBUG] [Thread-60366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] client lang: <none>
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] server lang: <none>
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] kex follows: False
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] Compression: none
2025-11-17T19:57:06.927 [DEBUG] [Thread-60366] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:57:06.945 [DEBUG] [Thread-60366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:57:06.946 [DEBUG] [Thread-60366] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:57:06.946 [DEBUG] [Thread-60366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:57:06.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:57:06.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:57:06.948 [DEBUG] [Thread-60366] [transport.py] [_log()] userauth is OK
2025-11-17T19:57:06.948 [DEBUG] [Thread-60366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:57:06.948 [DEBUG] [Thread-60366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:57:06.948 [DEBUG] [Thread-60366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:57:06.948 [DEBUG] [Thread-60366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:57:06.973 [INFO] [Thread-60366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:57:06.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:57:07.748 [DEBUG] [Thread-60366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:57:07.749 [DEBUG] [Thread-60366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:57:07.749 [DEBUG] [Thread-60366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:57:07.789 [DEBUG] [Thread-60366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:57:07.790 [DEBUG] [Thread-60366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:57:07.793 [DEBUG] [Thread-60366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:57:07.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:57:07.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:57:07.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:57:07.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:57:07.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:57:07.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:57:07.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:57:07.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:57:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:57:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.747619 -999.00  +19.00   4.26     20   -3.90 1 1 1 1 1    31    0 22.67 -11.33 ----- 5.3 4.3 243.2 10.9 19.3 -24.1 19.2 -23.5 18.9 -23.1 19.2 -23.6
2025-11-17T19:57:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:57:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:57:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.747619
2025-11-17T19:57:07.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:57:07.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:57:07.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:57:07.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:57:07.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:57:07.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:56:50', tmtdew=26.99, humidity=15.1, cloud=0.0, wind=9.42, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:56:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:57:07.815 [DEBUG] [Thread-60366] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:57:07.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:57:07.912 [DEBUG] [Thread-60369] [transport.py] [_log()] starting thread (client mode): 0xd07bc160
2025-11-17T19:57:07.912 [DEBUG] [Thread-60369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:57:07.927 [DEBUG] [Thread-60369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:57:07.927 [INFO] [Thread-60369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] client lang: <none>
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] server lang: <none>
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] kex follows: False
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:57:07.935 [DEBUG] [Thread-60369] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:57:07.936 [DEBUG] [Thread-60369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:57:07.936 [DEBUG] [Thread-60369] [transport.py] [_log()] Compression: none
2025-11-17T19:57:07.936 [DEBUG] [Thread-60369] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:57:07.992 [DEBUG] [Thread-60369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:57:07.993 [DEBUG] [Thread-60369] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:57:07.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:57:07.994 [DEBUG] [Thread-60369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:57:07.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:57:08.049 [DEBUG] [Thread-60369] [transport.py] [_log()] userauth is OK
2025-11-17T19:57:08.049 [DEBUG] [Thread-60369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:57:08.049 [DEBUG] [Thread-60369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:57:08.049 [DEBUG] [Thread-60369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:57:08.049 [DEBUG] [Thread-60369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:57:08.068 [INFO] [Thread-60369] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:57:08.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:57:08.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:57:08.905 [DEBUG] [Thread-60369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:57:08.906 [DEBUG] [Thread-60369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:57:08.953 [DEBUG] [Thread-60369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:57:08.953 [DEBUG] [Thread-60369] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:57:08.961 [DEBUG] [Thread-60369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:57:08.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:57:08.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:57:08.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:57:08.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:57:08.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:57:08.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:57:08.994 [DEBUG] [Thread-60369] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:57:11.853 [DEBUG] [Thread-60371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:57:26.896 [DEBUG] [Thread-60372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:57:33.709 [DEBUG] [Thread-60373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:57:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:57:39.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:57:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:57:39.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 57, 22), 27.0, 15.07, 0.0, 10.83, 18.86, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:57:39.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:57:22
2025-11-17T19:57:39.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:57:39.932 [DEBUG] [Thread-60374] [transport.py] [_log()] starting thread (client mode): 0xd31ccee0
2025-11-17T19:57:39.932 [DEBUG] [Thread-60374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:57:39.952 [DEBUG] [Thread-60374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:57:39.952 [INFO] [Thread-60374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:57:39.955 [DEBUG] [Thread-60374] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:57:39.955 [DEBUG] [Thread-60374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:57:39.955 [DEBUG] [Thread-60374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:57:39.955 [DEBUG] [Thread-60374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:57:39.955 [DEBUG] [Thread-60374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:57:39.955 [DEBUG] [Thread-60374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:57:39.955 [DEBUG] [Thread-60374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] client lang: <none>
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] server lang: <none>
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] kex follows: False
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] Compression: none
2025-11-17T19:57:39.956 [DEBUG] [Thread-60374] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:57:39.977 [DEBUG] [Thread-60374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:57:39.978 [DEBUG] [Thread-60374] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:57:39.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:57:39.979 [DEBUG] [Thread-60374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:57:39.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:57:39.981 [DEBUG] [Thread-60374] [transport.py] [_log()] userauth is OK
2025-11-17T19:57:39.982 [DEBUG] [Thread-60374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:57:39.982 [DEBUG] [Thread-60374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:57:39.982 [DEBUG] [Thread-60374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:57:39.982 [DEBUG] [Thread-60374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:57:40.012 [INFO] [Thread-60374] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:57:40.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:57:40.664 [DEBUG] [Thread-60374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:57:40.664 [DEBUG] [Thread-60374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:57:40.665 [DEBUG] [Thread-60374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:57:40.705 [DEBUG] [Thread-60374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:57:40.706 [DEBUG] [Thread-60374] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:57:40.708 [DEBUG] [Thread-60374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:57:40.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:57:40.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:57:40.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:57:40.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:57:40.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:57:40.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:57:40.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:57:40.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:57:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:57:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.747967 -999.00  +19.00   7.55     20   -3.90 1 1 1 1 1    28    0 22.53 -10.00 ----- 4.0 7.5 229.3 11.4 19.2 -24.3 19.2 -23.5 18.9 -23.1 19.2 -23.7
2025-11-17T19:57:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:57:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:57:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.747967
2025-11-17T19:57:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:57:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:57:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:57:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:57:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:57:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:57:22', tmtdew=27.0, humidity=15.07, cloud=0.0, wind=10.83, temperature=18.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:57:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:57:40.733 [DEBUG] [Thread-60374] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:57:40.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:57:40.834 [DEBUG] [Thread-60377] [transport.py] [_log()] starting thread (client mode): 0xd31ce7a0
2025-11-17T19:57:40.834 [DEBUG] [Thread-60377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:57:40.849 [DEBUG] [Thread-60377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:57:40.849 [INFO] [Thread-60377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:57:40.856 [DEBUG] [Thread-60377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] client lang: <none>
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] server lang: <none>
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] kex follows: False
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:57:40.857 [DEBUG] [Thread-60377] [transport.py] [_log()] Compression: none
2025-11-17T19:57:40.858 [DEBUG] [Thread-60377] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:57:40.917 [DEBUG] [Thread-60377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:57:40.917 [DEBUG] [Thread-60377] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:57:40.917 [DEBUG] [Thread-60377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:57:40.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:57:40.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:57:40.973 [DEBUG] [Thread-60377] [transport.py] [_log()] userauth is OK
2025-11-17T19:57:40.973 [DEBUG] [Thread-60377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:57:40.973 [DEBUG] [Thread-60377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:57:40.973 [DEBUG] [Thread-60377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:57:40.973 [DEBUG] [Thread-60377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:57:40.992 [INFO] [Thread-60377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:57:40.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:57:40.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:57:41.832 [DEBUG] [Thread-60377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:57:41.833 [DEBUG] [Thread-60377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:57:41.880 [DEBUG] [Thread-60377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:57:41.880 [DEBUG] [Thread-60377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:57:41.889 [DEBUG] [Thread-60377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:57:41.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:57:41.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:57:41.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:57:41.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:57:41.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:57:41.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:57:41.923 [DEBUG] [Thread-60377] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:57:41.924 [DEBUG] [Thread-60379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:57:55.275 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:57:56.967 [DEBUG] [Thread-60380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:58:06.322 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:58:06.323 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:58:11.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:58:11.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:58:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:58:11.999 [DEBUG] [Thread-60381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:58:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 57, 54), 26.89, 15.15, 0.0, 10.29, 18.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:58:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:57:54
2025-11-17T19:58:12.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:58:12.934 [DEBUG] [Thread-60382] [transport.py] [_log()] starting thread (client mode): 0xd31cf970
2025-11-17T19:58:12.934 [DEBUG] [Thread-60382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:58:12.953 [DEBUG] [Thread-60382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:58:12.953 [INFO] [Thread-60382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] client lang: <none>
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] server lang: <none>
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] kex follows: False
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] Compression: none
2025-11-17T19:58:12.956 [DEBUG] [Thread-60382] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:58:12.971 [DEBUG] [Thread-60382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:58:12.972 [DEBUG] [Thread-60382] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:58:12.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:58:12.972 [DEBUG] [Thread-60382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:58:12.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:58:12.973 [DEBUG] [Thread-60382] [transport.py] [_log()] userauth is OK
2025-11-17T19:58:12.973 [DEBUG] [Thread-60382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:58:12.973 [DEBUG] [Thread-60382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:58:12.973 [DEBUG] [Thread-60382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:58:12.973 [DEBUG] [Thread-60382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:58:12.988 [INFO] [Thread-60382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:58:12.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:58:13.724 [DEBUG] [Thread-60382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:58:13.724 [DEBUG] [Thread-60382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:58:13.724 [DEBUG] [Thread-60382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:58:13.765 [DEBUG] [Thread-60382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:58:13.765 [DEBUG] [Thread-60382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:58:13.767 [DEBUG] [Thread-60382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:58:13.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:58:13.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:58:13.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:58:13.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:58:13.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:58:13.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:58:13.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.748314 -999.00  +18.90   4.27     20   -3.90 1 1 1 1 1    25    0 22.91 -8.90 ----- 2.9 4.3 234.4 11.3 19.3 -24.4 19.2 -23.6 18.9 -23.2 19.2 -23.6
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.748314
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:58:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:57:54', tmtdew=26.89, humidity=15.15, cloud=0.0, wind=10.29, temperature=18.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:57:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:58:13.786 [DEBUG] [Thread-60382] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:58:13.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:58:13.874 [DEBUG] [Thread-60385] [transport.py] [_log()] starting thread (client mode): 0xd07bc2b0
2025-11-17T19:58:13.874 [DEBUG] [Thread-60385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:58:13.889 [DEBUG] [Thread-60385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:58:13.889 [INFO] [Thread-60385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:58:13.896 [DEBUG] [Thread-60385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:58:13.896 [DEBUG] [Thread-60385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:58:13.896 [DEBUG] [Thread-60385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:58:13.896 [DEBUG] [Thread-60385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:58:13.896 [DEBUG] [Thread-60385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:58:13.896 [DEBUG] [Thread-60385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:58:13.896 [DEBUG] [Thread-60385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] client lang: <none>
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] server lang: <none>
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] kex follows: False
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] Compression: none
2025-11-17T19:58:13.897 [DEBUG] [Thread-60385] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:58:13.958 [DEBUG] [Thread-60385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:58:13.958 [DEBUG] [Thread-60385] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:58:13.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:58:13.959 [DEBUG] [Thread-60385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:58:13.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:58:14.017 [DEBUG] [Thread-60385] [transport.py] [_log()] userauth is OK
2025-11-17T19:58:14.017 [DEBUG] [Thread-60385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:58:14.017 [DEBUG] [Thread-60385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:58:14.017 [DEBUG] [Thread-60385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:58:14.017 [DEBUG] [Thread-60385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:58:14.036 [INFO] [Thread-60385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:58:14.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:58:14.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:58:14.901 [DEBUG] [Thread-60385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:58:14.902 [DEBUG] [Thread-60385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:58:14.949 [DEBUG] [Thread-60385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:58:14.949 [DEBUG] [Thread-60385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:58:14.957 [DEBUG] [Thread-60385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:58:14.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:58:14.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:58:14.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:58:14.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:58:14.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:58:14.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:58:14.988 [DEBUG] [Thread-60385] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:58:27.025 [DEBUG] [Thread-60387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:58:33.785 [DEBUG] [Thread-60388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:58:42.068 [DEBUG] [Thread-60389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:58:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:58:44.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:58:44.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:58:45.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 58, 26), 26.88, 15.15, 0.0, 9.81, 18.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:58:45.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:58:26
2025-11-17T19:58:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:58:45.903 [DEBUG] [Thread-60390] [transport.py] [_log()] starting thread (client mode): 0xd3152e30
2025-11-17T19:58:45.904 [DEBUG] [Thread-60390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:58:45.923 [DEBUG] [Thread-60390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:58:45.923 [INFO] [Thread-60390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:58:45.926 [DEBUG] [Thread-60390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:58:45.926 [DEBUG] [Thread-60390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:58:45.926 [DEBUG] [Thread-60390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:58:45.926 [DEBUG] [Thread-60390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] client lang: <none>
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] server lang: <none>
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] kex follows: False
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] Compression: none
2025-11-17T19:58:45.927 [DEBUG] [Thread-60390] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:58:45.942 [DEBUG] [Thread-60390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:58:45.943 [DEBUG] [Thread-60390] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:58:45.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:58:45.944 [DEBUG] [Thread-60390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:58:45.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:58:45.985 [DEBUG] [Thread-60390] [transport.py] [_log()] userauth is OK
2025-11-17T19:58:45.985 [DEBUG] [Thread-60390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:58:45.985 [DEBUG] [Thread-60390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:58:45.985 [DEBUG] [Thread-60390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:58:45.985 [DEBUG] [Thread-60390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:58:46.017 [INFO] [Thread-60390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:58:46.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:58:46.663 [DEBUG] [Thread-60390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:58:46.663 [DEBUG] [Thread-60390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:58:46.663 [DEBUG] [Thread-60390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:58:46.704 [DEBUG] [Thread-60390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:58:46.705 [DEBUG] [Thread-60390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:58:46.707 [DEBUG] [Thread-60390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:58:46.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:58:46.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:58:46.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:58:46.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:58:46.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:58:46.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:58:46.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:58:46.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:58:46.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:58:46.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.748661 -999.00  +18.90   4.24     20   -4.00 1 1 1 1 1    23    0 22.48 -8.91 ----- 4.1 4.2 226.7 10.3 19.2 -24.3 19.1 -23.7 18.9 -23.3 19.1 -23.7
2025-11-17T19:58:46.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:58:46.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:58:46.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.748661
2025-11-17T19:58:46.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:58:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:58:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:58:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:58:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:58:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:58:26', tmtdew=26.88, humidity=15.15, cloud=0.0, wind=9.81, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:58:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:58:46.733 [DEBUG] [Thread-60390] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:58:46.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:58:46.830 [DEBUG] [Thread-60393] [transport.py] [_log()] starting thread (client mode): 0xd3152500
2025-11-17T19:58:46.830 [DEBUG] [Thread-60393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:58:46.845 [DEBUG] [Thread-60393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:58:46.845 [INFO] [Thread-60393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:58:46.853 [DEBUG] [Thread-60393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:58:46.853 [DEBUG] [Thread-60393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:58:46.853 [DEBUG] [Thread-60393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:58:46.853 [DEBUG] [Thread-60393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:58:46.853 [DEBUG] [Thread-60393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:58:46.853 [DEBUG] [Thread-60393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] client lang: <none>
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] server lang: <none>
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] kex follows: False
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] Compression: none
2025-11-17T19:58:46.854 [DEBUG] [Thread-60393] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:58:46.913 [DEBUG] [Thread-60393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:58:46.913 [DEBUG] [Thread-60393] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:58:46.914 [DEBUG] [Thread-60393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:58:46.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:58:46.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:58:46.969 [DEBUG] [Thread-60393] [transport.py] [_log()] userauth is OK
2025-11-17T19:58:46.969 [DEBUG] [Thread-60393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:58:46.969 [DEBUG] [Thread-60393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:58:46.969 [DEBUG] [Thread-60393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:58:46.969 [DEBUG] [Thread-60393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:58:46.989 [INFO] [Thread-60393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:58:46.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:58:46.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:58:47.862 [DEBUG] [Thread-60393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:58:47.862 [DEBUG] [Thread-60393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:58:47.910 [DEBUG] [Thread-60393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:58:47.910 [DEBUG] [Thread-60393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:58:47.918 [DEBUG] [Thread-60393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:58:47.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:58:47.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:58:47.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:58:47.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:58:47.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:58:47.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:58:47.952 [DEBUG] [Thread-60393] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:58:57.098 [DEBUG] [Thread-60395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:59:12.140 [DEBUG] [Thread-60396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:59:13.427 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:59:13.428 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:59:17.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:59:17.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:59:17.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:59:18.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 58, 58), 26.86, 15.67, 0.0, 8.88, 18.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:59:18.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:58:58
2025-11-17T19:59:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:59:18.902 [DEBUG] [Thread-60397] [transport.py] [_log()] starting thread (client mode): 0xd07bd3f0
2025-11-17T19:59:18.902 [DEBUG] [Thread-60397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:59:18.912 [DEBUG] [Thread-60397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:59:18.912 [INFO] [Thread-60397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] client lang: <none>
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] server lang: <none>
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] kex follows: False
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] Compression: none
2025-11-17T19:59:18.915 [DEBUG] [Thread-60397] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:59:18.924 [DEBUG] [Thread-60397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:59:18.924 [DEBUG] [Thread-60397] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:59:18.924 [DEBUG] [Thread-60397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:59:18.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:59:18.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:59:18.925 [DEBUG] [Thread-60397] [transport.py] [_log()] userauth is OK
2025-11-17T19:59:18.925 [DEBUG] [Thread-60397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:59:18.925 [DEBUG] [Thread-60397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:59:18.925 [DEBUG] [Thread-60397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:59:18.925 [DEBUG] [Thread-60397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:59:18.956 [INFO] [Thread-60397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:59:18.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:59:19.580 [DEBUG] [Thread-60397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:59:19.580 [DEBUG] [Thread-60397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:59:19.580 [DEBUG] [Thread-60397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:59:19.620 [DEBUG] [Thread-60397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:59:19.621 [DEBUG] [Thread-60397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:59:19.624 [DEBUG] [Thread-60397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:59:19.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:59:19.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:59:19.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:59:19.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:59:19.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:59:19.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:59:19.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:59:19.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:59:19.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:59:19.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.749008 -999.00  +18.90   6.36     20   -4.00 1 1 1 1 1    21    0 22.75 -8.17 ----- 5.7 6.4 204.6 10.6 19.2 -24.5 19.1 -23.8 18.9 -23.4 19.1 -23.6
2025-11-17T19:59:19.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:59:19.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:59:19.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.749008
2025-11-17T19:59:19.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:59:19.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:59:19.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:59:19.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:59:19.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:59:19.648 [DEBUG] [Thread-60397] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:59:19.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:58:58', tmtdew=26.86, humidity=15.67, cloud=0.0, wind=8.88, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:58:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:59:19.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:59:19.743 [DEBUG] [Thread-60400] [transport.py] [_log()] starting thread (client mode): 0xd0786f50
2025-11-17T19:59:19.743 [DEBUG] [Thread-60400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:59:19.757 [DEBUG] [Thread-60400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:59:19.757 [INFO] [Thread-60400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:59:19.765 [DEBUG] [Thread-60400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:59:19.765 [DEBUG] [Thread-60400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:59:19.765 [DEBUG] [Thread-60400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:59:19.765 [DEBUG] [Thread-60400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] client lang: <none>
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] server lang: <none>
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] kex follows: False
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:59:19.766 [DEBUG] [Thread-60400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:59:19.767 [DEBUG] [Thread-60400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:59:19.767 [DEBUG] [Thread-60400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:59:19.767 [DEBUG] [Thread-60400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:59:19.767 [DEBUG] [Thread-60400] [transport.py] [_log()] Compression: none
2025-11-17T19:59:19.767 [DEBUG] [Thread-60400] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:59:19.832 [DEBUG] [Thread-60400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:59:19.833 [DEBUG] [Thread-60400] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:59:19.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:59:19.834 [DEBUG] [Thread-60400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:59:19.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:59:19.889 [DEBUG] [Thread-60400] [transport.py] [_log()] userauth is OK
2025-11-17T19:59:19.889 [DEBUG] [Thread-60400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:59:19.889 [DEBUG] [Thread-60400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:59:19.889 [DEBUG] [Thread-60400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:59:19.890 [DEBUG] [Thread-60400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:59:19.913 [INFO] [Thread-60400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:59:19.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:59:19.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:59:20.782 [DEBUG] [Thread-60400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:59:20.782 [DEBUG] [Thread-60400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:59:20.829 [DEBUG] [Thread-60400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:59:20.830 [DEBUG] [Thread-60400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:59:20.839 [DEBUG] [Thread-60400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:59:20.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:59:20.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:59:20.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:59:20.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:59:20.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:59:20.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:59:20.873 [DEBUG] [Thread-60400] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:59:27.169 [DEBUG] [Thread-60402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:59:33.858 [DEBUG] [Thread-60403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:59:42.215 [DEBUG] [Thread-60404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:59:50.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T19:59:50.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T19:59:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T19:59:51.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 19, 59, 30), 26.8, 15.73, 0.0, 8.81, 18.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T19:59:51.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 19:59:30
2025-11-17T19:59:51.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T19:59:51.760 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T19:59:51.791 [DEBUG] [Thread-60405] [transport.py] [_log()] starting thread (client mode): 0xd3152290
2025-11-17T19:59:51.791 [DEBUG] [Thread-60405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:59:51.810 [DEBUG] [Thread-60405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T19:59:51.810 [INFO] [Thread-60405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T19:59:51.813 [DEBUG] [Thread-60405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] client lang: <none>
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] server lang: <none>
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] kex follows: False
2025-11-17T19:59:51.814 [DEBUG] [Thread-60405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:59:51.815 [DEBUG] [Thread-60405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:59:51.815 [DEBUG] [Thread-60405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:59:51.815 [DEBUG] [Thread-60405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:59:51.815 [DEBUG] [Thread-60405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:59:51.815 [DEBUG] [Thread-60405] [transport.py] [_log()] Compression: none
2025-11-17T19:59:51.815 [DEBUG] [Thread-60405] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:59:51.831 [DEBUG] [Thread-60405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:59:51.832 [DEBUG] [Thread-60405] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:59:51.833 [DEBUG] [Thread-60405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T19:59:51.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T19:59:51.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:59:51.835 [DEBUG] [Thread-60405] [transport.py] [_log()] userauth is OK
2025-11-17T19:59:51.835 [DEBUG] [Thread-60405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:59:51.835 [DEBUG] [Thread-60405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:59:51.835 [DEBUG] [Thread-60405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T19:59:51.836 [DEBUG] [Thread-60405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:59:51.871 [INFO] [Thread-60405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:59:51.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:59:52.521 [DEBUG] [Thread-60405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:59:52.521 [DEBUG] [Thread-60405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:59:52.521 [DEBUG] [Thread-60405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T19:59:52.561 [DEBUG] [Thread-60405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:59:52.561 [DEBUG] [Thread-60405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:59:52.564 [DEBUG] [Thread-60405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:59:52.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:59:52.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T19:59:52.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T19:59:52.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T19:59:52.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:59:52.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T19:59:52.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:59:52.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:59:52.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T19:59:52.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.749355 -999.00  +18.80   5.71     20   -3.90 1 1 1 1 1    19    0 23.09 -8.12 ----- 6.8 5.7 188.2 8.9 19.1 -24.5 19.1 -23.8 18.9 -23.3 19.1 -23.9
2025-11-17T19:59:52.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T19:59:52.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T19:59:52.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.749355
2025-11-17T19:59:52.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T19:59:52.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T19:59:52.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T19:59:52.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T19:59:52.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T19:59:52.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T19:59:30', tmtdew=26.8, humidity=15.73, cloud=0.0, wind=8.81, temperature=18.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:59:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T19:59:52.589 [DEBUG] [Thread-60405] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:59:52.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T19:59:52.687 [DEBUG] [Thread-60408] [transport.py] [_log()] starting thread (client mode): 0xd3153280
2025-11-17T19:59:52.687 [DEBUG] [Thread-60408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T19:59:52.701 [DEBUG] [Thread-60408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T19:59:52.702 [INFO] [Thread-60408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T19:59:52.709 [DEBUG] [Thread-60408] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T19:59:52.709 [DEBUG] [Thread-60408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T19:59:52.709 [DEBUG] [Thread-60408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T19:59:52.709 [DEBUG] [Thread-60408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:59:52.710 [DEBUG] [Thread-60408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T19:59:52.710 [DEBUG] [Thread-60408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:59:52.710 [DEBUG] [Thread-60408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T19:59:52.710 [DEBUG] [Thread-60408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T19:59:52.710 [DEBUG] [Thread-60408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T19:59:52.710 [DEBUG] [Thread-60408] [transport.py] [_log()] client lang: <none>
2025-11-17T19:59:52.710 [DEBUG] [Thread-60408] [transport.py] [_log()] server lang: <none>
2025-11-17T19:59:52.711 [DEBUG] [Thread-60408] [transport.py] [_log()] kex follows: False
2025-11-17T19:59:52.711 [DEBUG] [Thread-60408] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T19:59:52.711 [DEBUG] [Thread-60408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T19:59:52.711 [DEBUG] [Thread-60408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T19:59:52.711 [DEBUG] [Thread-60408] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T19:59:52.711 [DEBUG] [Thread-60408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T19:59:52.712 [DEBUG] [Thread-60408] [transport.py] [_log()] Compression: none
2025-11-17T19:59:52.712 [DEBUG] [Thread-60408] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T19:59:52.769 [DEBUG] [Thread-60408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T19:59:52.769 [DEBUG] [Thread-60408] [transport.py] [_log()] Switch to new keys ...
2025-11-17T19:59:52.770 [DEBUG] [Thread-60408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T19:59:52.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T19:59:52.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T19:59:52.825 [DEBUG] [Thread-60408] [transport.py] [_log()] userauth is OK
2025-11-17T19:59:52.825 [DEBUG] [Thread-60408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T19:59:52.825 [DEBUG] [Thread-60408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T19:59:52.825 [DEBUG] [Thread-60408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T19:59:52.825 [DEBUG] [Thread-60408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T19:59:52.845 [INFO] [Thread-60408] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T19:59:52.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T19:59:52.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T19:59:53.680 [DEBUG] [Thread-60408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T19:59:53.680 [DEBUG] [Thread-60408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T19:59:53.728 [DEBUG] [Thread-60408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T19:59:53.728 [DEBUG] [Thread-60408] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T19:59:53.738 [DEBUG] [Thread-60408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T19:59:53.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T19:59:53.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T19:59:53.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T19:59:53.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T19:59:53.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T19:59:53.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T19:59:53.772 [DEBUG] [Thread-60408] [transport.py] [_log()] EOF in transport thread
2025-11-17T19:59:57.245 [DEBUG] [Thread-60410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:00:12.286 [DEBUG] [Thread-60411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:00:19.471 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:00:19.472 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:00:23.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:00:23.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:00:23.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:00:24.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 0, 2), 26.7, 15.85, 0.0, 9.28, 18.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:00:24.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:00:02
2025-11-17T20:00:24.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:00:24.691 [DEBUG] [Thread-60412] [transport.py] [_log()] starting thread (client mode): 0xd0785f00
2025-11-17T20:00:24.692 [DEBUG] [Thread-60412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:00:24.706 [DEBUG] [Thread-60412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:00:24.706 [INFO] [Thread-60412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:00:24.709 [DEBUG] [Thread-60412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:00:24.709 [DEBUG] [Thread-60412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:00:24.709 [DEBUG] [Thread-60412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:00:24.709 [DEBUG] [Thread-60412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:00:24.709 [DEBUG] [Thread-60412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:00:24.709 [DEBUG] [Thread-60412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:00:24.709 [DEBUG] [Thread-60412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:00:24.709 [DEBUG] [Thread-60412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] client lang: <none>
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] server lang: <none>
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] kex follows: False
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] Compression: none
2025-11-17T20:00:24.710 [DEBUG] [Thread-60412] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:00:24.728 [DEBUG] [Thread-60412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:00:24.728 [DEBUG] [Thread-60412] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:00:24.729 [DEBUG] [Thread-60412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:00:24.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:00:24.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:00:24.731 [DEBUG] [Thread-60412] [transport.py] [_log()] userauth is OK
2025-11-17T20:00:24.731 [DEBUG] [Thread-60412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:00:24.731 [DEBUG] [Thread-60412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:00:24.731 [DEBUG] [Thread-60412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:00:24.731 [DEBUG] [Thread-60412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:00:24.754 [INFO] [Thread-60412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:00:24.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:00:25.357 [DEBUG] [Thread-60412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:00:25.357 [DEBUG] [Thread-60412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:00:25.357 [DEBUG] [Thread-60412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:00:25.397 [DEBUG] [Thread-60412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:00:25.397 [DEBUG] [Thread-60412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:00:25.400 [DEBUG] [Thread-60412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:00:25.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:00:25.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:00:25.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:00:25.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:00:25.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:00:25.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:00:25.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:00:25.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:00:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:00:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.749702 -999.00  +18.70   5.40     21   -3.90 1 1 1 1 1    18    0 22.36 -7.70 ----- 4.9 5.4 197.4 6.8 19.1 -24.6 19.1 -23.8 18.8 -23.4 19.1 -23.9
2025-11-17T20:00:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:00:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:00:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.749702
2025-11-17T20:00:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:00:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:00:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:00:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:00:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:00:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:00:02', tmtdew=26.7, humidity=15.85, cloud=0.0, wind=9.28, temperature=18.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T17:59:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:00:25.424 [DEBUG] [Thread-60412] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:00:25.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:00:25.520 [DEBUG] [Thread-60415] [transport.py] [_log()] starting thread (client mode): 0xd0785d20
2025-11-17T20:00:25.520 [DEBUG] [Thread-60415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:00:25.536 [DEBUG] [Thread-60415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:00:25.536 [INFO] [Thread-60415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:00:25.543 [DEBUG] [Thread-60415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:00:25.543 [DEBUG] [Thread-60415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:00:25.543 [DEBUG] [Thread-60415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:00:25.543 [DEBUG] [Thread-60415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:00:25.543 [DEBUG] [Thread-60415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:00:25.543 [DEBUG] [Thread-60415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:00:25.543 [DEBUG] [Thread-60415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:00:25.543 [DEBUG] [Thread-60415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] client lang: <none>
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] server lang: <none>
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] kex follows: False
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] Compression: none
2025-11-17T20:00:25.544 [DEBUG] [Thread-60415] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:00:25.600 [DEBUG] [Thread-60415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:00:25.601 [DEBUG] [Thread-60415] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:00:25.601 [DEBUG] [Thread-60415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:00:25.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:00:25.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:00:25.660 [DEBUG] [Thread-60415] [transport.py] [_log()] userauth is OK
2025-11-17T20:00:25.661 [DEBUG] [Thread-60415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:00:25.661 [DEBUG] [Thread-60415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:00:25.661 [DEBUG] [Thread-60415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:00:25.661 [DEBUG] [Thread-60415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:00:25.681 [INFO] [Thread-60415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:00:25.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:00:25.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:00:26.554 [DEBUG] [Thread-60415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:00:26.554 [DEBUG] [Thread-60415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:00:26.602 [DEBUG] [Thread-60415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:00:26.602 [DEBUG] [Thread-60415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:00:26.611 [DEBUG] [Thread-60415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:00:26.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:00:26.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:00:26.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:00:26.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:00:26.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:00:26.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:00:26.645 [DEBUG] [Thread-60415] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:00:27.309 [DEBUG] [Thread-60417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:00:33.931 [DEBUG] [Thread-60418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:00:42.344 [DEBUG] [Thread-60419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:00:56.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:00:56.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:00:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:00:57.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 0, 34), 26.52, 15.8, 0.0, 9.09, 18.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:00:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:00:34
2025-11-17T20:00:57.371 [DEBUG] [Thread-60420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:00:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:00:57.559 [DEBUG] [Thread-60421] [transport.py] [_log()] starting thread (client mode): 0xd07beb60
2025-11-17T20:00:57.560 [DEBUG] [Thread-60421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:00:57.579 [DEBUG] [Thread-60421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:00:57.579 [INFO] [Thread-60421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] client lang: <none>
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] server lang: <none>
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] kex follows: False
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] Compression: none
2025-11-17T20:00:57.583 [DEBUG] [Thread-60421] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:00:57.600 [DEBUG] [Thread-60421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:00:57.600 [DEBUG] [Thread-60421] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:00:57.601 [DEBUG] [Thread-60421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:00:57.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:00:57.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:00:57.641 [DEBUG] [Thread-60421] [transport.py] [_log()] userauth is OK
2025-11-17T20:00:57.641 [DEBUG] [Thread-60421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:00:57.641 [DEBUG] [Thread-60421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:00:57.641 [DEBUG] [Thread-60421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:00:57.641 [DEBUG] [Thread-60421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:00:57.673 [INFO] [Thread-60421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:00:57.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:00:58.292 [DEBUG] [Thread-60421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:00:58.292 [DEBUG] [Thread-60421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:00:58.292 [DEBUG] [Thread-60421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:00:58.332 [DEBUG] [Thread-60421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:00:58.333 [DEBUG] [Thread-60421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:00:58.336 [DEBUG] [Thread-60421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:00:58.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:00:58.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:00:58.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:00:58.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:00:58.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:00:58.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:00:58.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:00:58.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:00:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:00:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.750397 -999.00  +18.60   6.69     21   -3.90 1 1 1 1 1    15    0 22.70 -7.88 ----- 5.4 6.7 207.6 8.1 19.1 -24.5 19.0 -23.8 18.8 -23.3 19.0 -24.0
2025-11-17T20:00:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:00:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:00:58.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.750397
2025-11-17T20:00:58.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:00:58.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:00:58.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:00:58.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:00:58.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:00:58.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:00:34', tmtdew=26.52, humidity=15.8, cloud=0.0, wind=9.09, temperature=18.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:00:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:00:58.362 [DEBUG] [Thread-60421] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:00:58.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:00:58.459 [DEBUG] [Thread-60424] [transport.py] [_log()] starting thread (client mode): 0xd0786bf0
2025-11-17T20:00:58.459 [DEBUG] [Thread-60424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:00:58.476 [DEBUG] [Thread-60424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:00:58.476 [INFO] [Thread-60424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:00:58.486 [DEBUG] [Thread-60424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:00:58.486 [DEBUG] [Thread-60424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:00:58.486 [DEBUG] [Thread-60424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:00:58.486 [DEBUG] [Thread-60424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] client lang: <none>
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] server lang: <none>
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] kex follows: False
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:00:58.487 [DEBUG] [Thread-60424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:00:58.488 [DEBUG] [Thread-60424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:00:58.488 [DEBUG] [Thread-60424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:00:58.488 [DEBUG] [Thread-60424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:00:58.488 [DEBUG] [Thread-60424] [transport.py] [_log()] Compression: none
2025-11-17T20:00:58.488 [DEBUG] [Thread-60424] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:00:58.544 [DEBUG] [Thread-60424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:00:58.544 [DEBUG] [Thread-60424] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:00:58.544 [DEBUG] [Thread-60424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:00:58.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:00:58.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:00:58.601 [DEBUG] [Thread-60424] [transport.py] [_log()] userauth is OK
2025-11-17T20:00:58.602 [DEBUG] [Thread-60424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:00:58.602 [DEBUG] [Thread-60424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:00:58.602 [DEBUG] [Thread-60424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:00:58.602 [DEBUG] [Thread-60424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:00:58.626 [INFO] [Thread-60424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:00:58.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:00:58.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:00:59.457 [DEBUG] [Thread-60424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:00:59.457 [DEBUG] [Thread-60424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:00:59.505 [DEBUG] [Thread-60424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:00:59.505 [DEBUG] [Thread-60424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:00:59.514 [DEBUG] [Thread-60424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:00:59.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:00:59.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:00:59.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:00:59.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:00:59.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:00:59.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:00:59.550 [DEBUG] [Thread-60424] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:01:12.399 [DEBUG] [Thread-60426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:01:24.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:01:24.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:01:27.439 [DEBUG] [Thread-60427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:01:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:01:29.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:01:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:01:30.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 1, 6), 26.47, 15.85, 0.0, 9.05, 18.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:01:30.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:01:06
2025-11-17T20:01:30.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:01:30.531 [DEBUG] [Thread-60428] [transport.py] [_log()] starting thread (client mode): 0xd3152410
2025-11-17T20:01:30.531 [DEBUG] [Thread-60428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:01:30.555 [DEBUG] [Thread-60428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:01:30.555 [INFO] [Thread-60428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:01:30.556 [DEBUG] [Thread-60428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:01:30.556 [DEBUG] [Thread-60428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] client lang: <none>
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] server lang: <none>
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] kex follows: False
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] Compression: none
2025-11-17T20:01:30.557 [DEBUG] [Thread-60428] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:01:30.564 [DEBUG] [Thread-60428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:01:30.564 [DEBUG] [Thread-60428] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:01:30.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:01:30.565 [DEBUG] [Thread-60428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:01:30.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:01:30.565 [DEBUG] [Thread-60428] [transport.py] [_log()] userauth is OK
2025-11-17T20:01:30.565 [DEBUG] [Thread-60428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:01:30.565 [DEBUG] [Thread-60428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:01:30.565 [DEBUG] [Thread-60428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:01:30.565 [DEBUG] [Thread-60428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:01:30.575 [INFO] [Thread-60428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:01:30.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:01:31.195 [DEBUG] [Thread-60428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:01:31.195 [DEBUG] [Thread-60428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:01:31.195 [DEBUG] [Thread-60428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:01:31.236 [DEBUG] [Thread-60428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:01:31.236 [DEBUG] [Thread-60428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:01:31.238 [DEBUG] [Thread-60428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:01:31.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:01:31.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:01:31.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:01:31.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:01:31.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:01:31.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:01:31.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.750744 -999.00  +18.50   5.45     21   -3.90 1 1 1 1 1    13    0 22.20 -9.53 ----- 5.0 5.5 215.6 7.7 19.0 -24.2 19.0 -23.7 18.7 -23.2 19.0 -24.0
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.750744
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:01:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:01:06', tmtdew=26.47, humidity=15.85, cloud=0.0, wind=9.05, temperature=18.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:01:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:01:31.262 [DEBUG] [Thread-60428] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:01:31.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:01:31.348 [DEBUG] [Thread-60431] [transport.py] [_log()] starting thread (client mode): 0xd3152050
2025-11-17T20:01:31.348 [DEBUG] [Thread-60431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:01:31.365 [DEBUG] [Thread-60431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:01:31.365 [INFO] [Thread-60431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:01:31.372 [DEBUG] [Thread-60431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] client lang: <none>
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] server lang: <none>
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] kex follows: False
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] Compression: none
2025-11-17T20:01:31.373 [DEBUG] [Thread-60431] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:01:31.428 [DEBUG] [Thread-60431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:01:31.428 [DEBUG] [Thread-60431] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:01:31.428 [DEBUG] [Thread-60431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:01:31.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:01:31.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:01:31.485 [DEBUG] [Thread-60431] [transport.py] [_log()] userauth is OK
2025-11-17T20:01:31.485 [DEBUG] [Thread-60431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:01:31.485 [DEBUG] [Thread-60431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:01:31.485 [DEBUG] [Thread-60431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:01:31.485 [DEBUG] [Thread-60431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:01:31.499 [INFO] [Thread-60431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:01:31.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:01:31.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:01:32.358 [DEBUG] [Thread-60431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:01:32.358 [DEBUG] [Thread-60431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:01:32.405 [DEBUG] [Thread-60431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:01:32.405 [DEBUG] [Thread-60431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:01:32.416 [DEBUG] [Thread-60431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:01:32.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:01:32.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:01:32.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:01:32.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:01:32.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:01:32.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:01:32.452 [DEBUG] [Thread-60431] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:01:34.009 [DEBUG] [Thread-60433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:01:42.465 [DEBUG] [Thread-60434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:01:57.509 [DEBUG] [Thread-60435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:02:02.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:02:02.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:02:02.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:02:03.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 1, 38), 26.17, 15.92, 0.0, 7.39, 18.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:02:03.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:01:38
2025-11-17T20:02:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:02:03.414 [DEBUG] [Thread-60436] [transport.py] [_log()] starting thread (client mode): 0xd07bedd0
2025-11-17T20:02:03.414 [DEBUG] [Thread-60436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:02:03.434 [DEBUG] [Thread-60436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:02:03.434 [INFO] [Thread-60436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] client lang: <none>
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] server lang: <none>
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] kex follows: False
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] Compression: none
2025-11-17T20:02:03.438 [DEBUG] [Thread-60436] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:02:03.456 [DEBUG] [Thread-60436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:02:03.456 [DEBUG] [Thread-60436] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:02:03.457 [DEBUG] [Thread-60436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:02:03.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:02:03.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:02:03.459 [DEBUG] [Thread-60436] [transport.py] [_log()] userauth is OK
2025-11-17T20:02:03.459 [DEBUG] [Thread-60436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:02:03.459 [DEBUG] [Thread-60436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:02:03.459 [DEBUG] [Thread-60436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:02:03.459 [DEBUG] [Thread-60436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:02:03.483 [INFO] [Thread-60436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:02:03.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:02:04.139 [DEBUG] [Thread-60436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:02:04.139 [DEBUG] [Thread-60436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:02:04.139 [DEBUG] [Thread-60436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:02:04.180 [DEBUG] [Thread-60436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:02:04.180 [DEBUG] [Thread-60436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:02:04.182 [DEBUG] [Thread-60436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:02:04.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:02:04.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:02:04.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:02:04.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:02:04.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:02:04.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:02:04.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:02:04.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:02:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:02:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.751091 -999.00  +18.50   8.11     23   -2.60 1 1 1 1 1    12    0 22.06 -12.85 ----- 5.1 8.1 228.2 11.3 19.1 -24.2 19.0 -23.5 18.7 -22.9 19.0 -23.7
2025-11-17T20:02:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:02:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:02:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.751091
2025-11-17T20:02:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:02:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:02:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:02:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:02:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:02:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:01:38', tmtdew=26.17, humidity=15.92, cloud=0.0, wind=7.39, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:01:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:02:04.206 [DEBUG] [Thread-60436] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:02:04.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:02:04.304 [DEBUG] [Thread-60439] [transport.py] [_log()] starting thread (client mode): 0xd31cc7f0
2025-11-17T20:02:04.304 [DEBUG] [Thread-60439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:02:04.319 [DEBUG] [Thread-60439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:02:04.319 [INFO] [Thread-60439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:02:04.326 [DEBUG] [Thread-60439] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:02:04.326 [DEBUG] [Thread-60439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:02:04.326 [DEBUG] [Thread-60439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:02:04.326 [DEBUG] [Thread-60439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] client lang: <none>
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] server lang: <none>
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] kex follows: False
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] Compression: none
2025-11-17T20:02:04.327 [DEBUG] [Thread-60439] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:02:04.386 [DEBUG] [Thread-60439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:02:04.386 [DEBUG] [Thread-60439] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:02:04.387 [DEBUG] [Thread-60439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:02:04.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:02:04.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:02:04.445 [DEBUG] [Thread-60439] [transport.py] [_log()] userauth is OK
2025-11-17T20:02:04.445 [DEBUG] [Thread-60439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:02:04.445 [DEBUG] [Thread-60439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:02:04.445 [DEBUG] [Thread-60439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:02:04.445 [DEBUG] [Thread-60439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:02:04.464 [INFO] [Thread-60439] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:02:04.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:02:04.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:02:05.350 [DEBUG] [Thread-60439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:02:05.350 [DEBUG] [Thread-60439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:02:05.398 [DEBUG] [Thread-60439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:02:05.398 [DEBUG] [Thread-60439] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:02:05.406 [DEBUG] [Thread-60439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:02:05.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:02:05.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:02:05.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:02:05.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:02:05.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:02:05.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:02:05.437 [DEBUG] [Thread-60439] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:02:12.537 [DEBUG] [Thread-60441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:02:27.579 [DEBUG] [Thread-60442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:02:29.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:02:29.745 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:02:34.084 [DEBUG] [Thread-60443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:02:35.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:02:35.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:02:35.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:02:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 2, 10), 25.12, 17.31, 0.0, 7.91, 18.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:02:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:02:10
2025-11-17T20:02:36.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:02:36.371 [DEBUG] [Thread-60444] [transport.py] [_log()] starting thread (client mode): 0xd3151ff0
2025-11-17T20:02:36.371 [DEBUG] [Thread-60444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:02:36.395 [DEBUG] [Thread-60444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:02:36.395 [INFO] [Thread-60444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:02:36.398 [DEBUG] [Thread-60444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:02:36.399 [DEBUG] [Thread-60444] [transport.py] [_log()] client lang: <none>
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] server lang: <none>
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] kex follows: False
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] Compression: none
2025-11-17T20:02:36.400 [DEBUG] [Thread-60444] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:02:36.418 [DEBUG] [Thread-60444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:02:36.418 [DEBUG] [Thread-60444] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:02:36.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:02:36.419 [DEBUG] [Thread-60444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:02:36.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:02:36.422 [DEBUG] [Thread-60444] [transport.py] [_log()] userauth is OK
2025-11-17T20:02:36.422 [DEBUG] [Thread-60444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:02:36.422 [DEBUG] [Thread-60444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:02:36.422 [DEBUG] [Thread-60444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:02:36.422 [DEBUG] [Thread-60444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:02:36.442 [INFO] [Thread-60444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:02:36.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:02:37.165 [DEBUG] [Thread-60444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:02:37.166 [DEBUG] [Thread-60444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:02:37.166 [DEBUG] [Thread-60444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:02:37.206 [DEBUG] [Thread-60444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:02:37.206 [DEBUG] [Thread-60444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:02:37.209 [DEBUG] [Thread-60444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:02:37.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:02:37.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:02:37.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:02:37.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:02:37.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:02:37.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:02:37.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:02:37.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:02:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:02:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.751439 -999.00  +18.50   5.70     24   -2.20 1 1 1 1 1    11    0 22.15 -19.35 ----- 4.0 5.7 209.8 8.1 19.1 -24.2 18.9 -23.4 18.7 -22.9 18.9 -23.8
2025-11-17T20:02:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:02:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:02:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.751439
2025-11-17T20:02:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:02:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:02:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:02:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:02:37.236 [DEBUG] [Thread-60444] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:02:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:02:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:02:10', tmtdew=25.12, humidity=17.31, cloud=0.0, wind=7.91, temperature=18.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:02:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:02:37.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:02:37.335 [DEBUG] [Thread-60447] [transport.py] [_log()] starting thread (client mode): 0xd3150cd0
2025-11-17T20:02:37.336 [DEBUG] [Thread-60447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:02:37.350 [DEBUG] [Thread-60447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:02:37.350 [INFO] [Thread-60447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:02:37.357 [DEBUG] [Thread-60447] [transport.py] [_log()] client lang: <none>
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] server lang: <none>
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] kex follows: False
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] Compression: none
2025-11-17T20:02:37.358 [DEBUG] [Thread-60447] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:02:37.422 [DEBUG] [Thread-60447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:02:37.422 [DEBUG] [Thread-60447] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:02:37.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:02:37.423 [DEBUG] [Thread-60447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:02:37.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:02:37.477 [DEBUG] [Thread-60447] [transport.py] [_log()] userauth is OK
2025-11-17T20:02:37.477 [DEBUG] [Thread-60447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:02:37.477 [DEBUG] [Thread-60447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:02:37.477 [DEBUG] [Thread-60447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:02:37.478 [DEBUG] [Thread-60447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:02:37.496 [INFO] [Thread-60447] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:02:37.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:02:37.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:02:38.393 [DEBUG] [Thread-60447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:02:38.393 [DEBUG] [Thread-60447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:02:38.441 [DEBUG] [Thread-60447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:02:38.441 [DEBUG] [Thread-60447] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:02:38.450 [DEBUG] [Thread-60447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:02:38.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:02:38.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:02:38.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:02:38.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:02:38.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:02:38.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:02:38.486 [DEBUG] [Thread-60447] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:02:42.606 [DEBUG] [Thread-60449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:02:57.639 [DEBUG] [Thread-60450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:03:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:03:08.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:03:08.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:03:09.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 2, 42), 23.09, 20.46, 0.0, 8.77, 18.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:03:09.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:02:42
2025-11-17T20:03:09.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:03:09.396 [DEBUG] [Thread-60451] [transport.py] [_log()] starting thread (client mode): 0xd0785f00
2025-11-17T20:03:09.396 [DEBUG] [Thread-60451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:03:09.416 [DEBUG] [Thread-60451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:03:09.416 [INFO] [Thread-60451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] client lang: <none>
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] server lang: <none>
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] kex follows: False
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:03:09.420 [DEBUG] [Thread-60451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:03:09.421 [DEBUG] [Thread-60451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:03:09.421 [DEBUG] [Thread-60451] [transport.py] [_log()] Compression: none
2025-11-17T20:03:09.421 [DEBUG] [Thread-60451] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:03:09.438 [DEBUG] [Thread-60451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:03:09.439 [DEBUG] [Thread-60451] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:03:09.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:03:09.440 [DEBUG] [Thread-60451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:03:09.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:03:09.441 [DEBUG] [Thread-60451] [transport.py] [_log()] userauth is OK
2025-11-17T20:03:09.441 [DEBUG] [Thread-60451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:03:09.442 [DEBUG] [Thread-60451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:03:09.442 [DEBUG] [Thread-60451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:03:09.442 [DEBUG] [Thread-60451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:03:09.460 [INFO] [Thread-60451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:03:09.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:03:10.100 [DEBUG] [Thread-60451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:03:10.101 [DEBUG] [Thread-60451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:03:10.101 [DEBUG] [Thread-60451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:03:10.141 [DEBUG] [Thread-60451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:03:10.141 [DEBUG] [Thread-60451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:03:10.144 [DEBUG] [Thread-60451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:03:10.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:03:10.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:03:10.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:03:10.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:03:10.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:03:10.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:03:10.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:03:10.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:03:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:03:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.751786 -999.00  +18.50   5.03     27   -0.60 1 1 1 1 1    10    0 21.84 -32.27 ----- 6.4 5.0 200.9 10.3 19.0 -24.1 18.9 -23.8 18.7 -22.9 18.9 -23.7
2025-11-17T20:03:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:03:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:03:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.751786
2025-11-17T20:03:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:03:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:03:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:03:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:03:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:03:10.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:02:42', tmtdew=23.09, humidity=20.46, cloud=0.0, wind=8.77, temperature=18.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:02:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:03:10.170 [DEBUG] [Thread-60451] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:03:10.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:03:10.265 [DEBUG] [Thread-60454] [transport.py] [_log()] starting thread (client mode): 0xd3151d80
2025-11-17T20:03:10.265 [DEBUG] [Thread-60454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:03:10.279 [DEBUG] [Thread-60454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:03:10.279 [INFO] [Thread-60454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:03:10.287 [DEBUG] [Thread-60454] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:03:10.287 [DEBUG] [Thread-60454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:03:10.287 [DEBUG] [Thread-60454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:03:10.287 [DEBUG] [Thread-60454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:03:10.287 [DEBUG] [Thread-60454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:03:10.287 [DEBUG] [Thread-60454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:03:10.287 [DEBUG] [Thread-60454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:03:10.287 [DEBUG] [Thread-60454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] client lang: <none>
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] server lang: <none>
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] kex follows: False
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:03:10.288 [DEBUG] [Thread-60454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:03:10.289 [DEBUG] [Thread-60454] [transport.py] [_log()] Compression: none
2025-11-17T20:03:10.289 [DEBUG] [Thread-60454] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:03:10.344 [DEBUG] [Thread-60454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:03:10.345 [DEBUG] [Thread-60454] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:03:10.345 [DEBUG] [Thread-60454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:03:10.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:03:10.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:03:10.405 [DEBUG] [Thread-60454] [transport.py] [_log()] userauth is OK
2025-11-17T20:03:10.405 [DEBUG] [Thread-60454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:03:10.405 [DEBUG] [Thread-60454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:03:10.405 [DEBUG] [Thread-60454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:03:10.405 [DEBUG] [Thread-60454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:03:10.425 [INFO] [Thread-60454] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:03:10.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:03:10.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:03:11.234 [DEBUG] [Thread-60454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:03:11.234 [DEBUG] [Thread-60454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:03:11.282 [DEBUG] [Thread-60454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:03:11.282 [DEBUG] [Thread-60454] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:03:11.291 [DEBUG] [Thread-60454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:03:11.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:03:11.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:03:11.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:03:11.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:03:11.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:03:11.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:03:11.325 [DEBUG] [Thread-60454] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:03:12.669 [DEBUG] [Thread-60456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:03:27.707 [DEBUG] [Thread-60457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:03:34.136 [DEBUG] [Thread-60458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:03:34.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:03:34.522 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:03:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:03:41.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:03:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:03:41.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 3, 14), 23.22, 20.25, 0.0, 8.01, 18.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:03:41.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:03:14
2025-11-17T20:03:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:03:42.269 [DEBUG] [Thread-60459] [transport.py] [_log()] starting thread (client mode): 0xd078fa00
2025-11-17T20:03:42.269 [DEBUG] [Thread-60459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:03:42.289 [DEBUG] [Thread-60459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:03:42.289 [INFO] [Thread-60459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:03:42.292 [DEBUG] [Thread-60459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:03:42.292 [DEBUG] [Thread-60459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:03:42.292 [DEBUG] [Thread-60459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:03:42.292 [DEBUG] [Thread-60459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:03:42.292 [DEBUG] [Thread-60459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] client lang: <none>
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] server lang: <none>
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] kex follows: False
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] Compression: none
2025-11-17T20:03:42.293 [DEBUG] [Thread-60459] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:03:42.309 [DEBUG] [Thread-60459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:03:42.310 [DEBUG] [Thread-60459] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:03:42.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:03:42.310 [DEBUG] [Thread-60459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:03:42.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:03:42.313 [DEBUG] [Thread-60459] [transport.py] [_log()] userauth is OK
2025-11-17T20:03:42.313 [DEBUG] [Thread-60459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:03:42.313 [DEBUG] [Thread-60459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:03:42.313 [DEBUG] [Thread-60459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:03:42.313 [DEBUG] [Thread-60459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:03:42.333 [INFO] [Thread-60459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:03:42.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:03:42.734 [DEBUG] [Thread-60461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:03:43.052 [DEBUG] [Thread-60459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:03:43.052 [DEBUG] [Thread-60459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:03:43.052 [DEBUG] [Thread-60459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:03:43.093 [DEBUG] [Thread-60459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:03:43.094 [DEBUG] [Thread-60459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:03:43.096 [DEBUG] [Thread-60459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:03:43.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:03:43.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:03:43.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:03:43.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:03:43.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:03:43.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:03:43.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:03:43.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:03:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:03:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.752133 -999.00  +18.40   9.96     30   +0.60 1 1 1 1 1     9    0 21.27 -50.06 ----- 9.4 10.0 187.4 12.3 19.0 -24.2 18.9 -23.7 18.7 -22.9 18.9 -23.8
2025-11-17T20:03:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:03:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:03:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.752133
2025-11-17T20:03:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:03:43.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:03:43.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:03:43.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:03:43.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:03:43.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:03:14', tmtdew=23.22, humidity=20.25, cloud=0.0, wind=8.01, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:03:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:03:43.123 [DEBUG] [Thread-60459] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:03:43.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:03:43.219 [DEBUG] [Thread-60463] [transport.py] [_log()] starting thread (client mode): 0xd31b2950
2025-11-17T20:03:43.220 [DEBUG] [Thread-60463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:03:43.237 [DEBUG] [Thread-60463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:03:43.237 [INFO] [Thread-60463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:03:43.244 [DEBUG] [Thread-60463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:03:43.245 [DEBUG] [Thread-60463] [transport.py] [_log()] client lang: <none>
2025-11-17T20:03:43.246 [DEBUG] [Thread-60463] [transport.py] [_log()] server lang: <none>
2025-11-17T20:03:43.246 [DEBUG] [Thread-60463] [transport.py] [_log()] kex follows: False
2025-11-17T20:03:43.246 [DEBUG] [Thread-60463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:03:43.246 [DEBUG] [Thread-60463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:03:43.246 [DEBUG] [Thread-60463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:03:43.246 [DEBUG] [Thread-60463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:03:43.246 [DEBUG] [Thread-60463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:03:43.247 [DEBUG] [Thread-60463] [transport.py] [_log()] Compression: none
2025-11-17T20:03:43.247 [DEBUG] [Thread-60463] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:03:43.301 [DEBUG] [Thread-60463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:03:43.301 [DEBUG] [Thread-60463] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:03:43.302 [DEBUG] [Thread-60463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:03:43.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:03:43.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:03:43.357 [DEBUG] [Thread-60463] [transport.py] [_log()] userauth is OK
2025-11-17T20:03:43.357 [DEBUG] [Thread-60463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:03:43.358 [DEBUG] [Thread-60463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:03:43.358 [DEBUG] [Thread-60463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:03:43.358 [DEBUG] [Thread-60463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:03:43.377 [INFO] [Thread-60463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:03:43.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:03:43.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:03:44.193 [DEBUG] [Thread-60463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:03:44.194 [DEBUG] [Thread-60463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:03:44.245 [DEBUG] [Thread-60463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:03:44.245 [DEBUG] [Thread-60463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:03:44.257 [DEBUG] [Thread-60463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:03:44.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:03:44.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:03:44.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:03:44.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:03:44.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:03:44.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:03:44.303 [DEBUG] [Thread-60463] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:03:57.763 [DEBUG] [Thread-60465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:04:12.807 [DEBUG] [Thread-60466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:04:14.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:04:14.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:04:14.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:04:14.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 3, 46), 22.02, 22.15, 0.0, 10.64, 18.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:04:14.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:03:46
2025-11-17T20:04:15.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:04:15.213 [DEBUG] [Thread-60467] [transport.py] [_log()] starting thread (client mode): 0xd31b3430
2025-11-17T20:04:15.213 [DEBUG] [Thread-60467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:04:15.232 [DEBUG] [Thread-60467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:04:15.232 [INFO] [Thread-60467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:04:15.235 [DEBUG] [Thread-60467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:04:15.235 [DEBUG] [Thread-60467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:04:15.235 [DEBUG] [Thread-60467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:04:15.235 [DEBUG] [Thread-60467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:04:15.235 [DEBUG] [Thread-60467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:04:15.235 [DEBUG] [Thread-60467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:04:15.235 [DEBUG] [Thread-60467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] client lang: <none>
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] server lang: <none>
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] kex follows: False
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] Compression: none
2025-11-17T20:04:15.236 [DEBUG] [Thread-60467] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:04:15.254 [DEBUG] [Thread-60467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:04:15.254 [DEBUG] [Thread-60467] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:04:15.255 [DEBUG] [Thread-60467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:04:15.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:04:15.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:04:15.257 [DEBUG] [Thread-60467] [transport.py] [_log()] userauth is OK
2025-11-17T20:04:15.257 [DEBUG] [Thread-60467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:04:15.257 [DEBUG] [Thread-60467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:04:15.257 [DEBUG] [Thread-60467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:04:15.257 [DEBUG] [Thread-60467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:04:15.281 [INFO] [Thread-60467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:04:15.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:04:15.929 [DEBUG] [Thread-60467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:04:15.929 [DEBUG] [Thread-60467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:04:15.929 [DEBUG] [Thread-60467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:04:15.970 [DEBUG] [Thread-60467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:04:15.970 [DEBUG] [Thread-60467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:04:15.973 [DEBUG] [Thread-60467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:04:15.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:04:15.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:04:15.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:04:15.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:04:16.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:04:16.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:04:16.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:04:16.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:04:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:04:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.752480 -999.00  +18.40   9.27     31   +1.00 1 1 1 1 1     8    0 20.54 -67.58 ----- 9.2 9.3 191.8 13.2 18.9 -24.2 18.9 -23.5 18.6 -22.8 18.9 -23.7
2025-11-17T20:04:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:04:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:04:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.752480
2025-11-17T20:04:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:04:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:04:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:04:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:04:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:04:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:03:46', tmtdew=22.02, humidity=22.15, cloud=0.0, wind=10.64, temperature=18.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:03:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:04:16.004 [DEBUG] [Thread-60467] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:04:16.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:04:16.101 [DEBUG] [Thread-60470] [transport.py] [_log()] starting thread (client mode): 0xd31ce680
2025-11-17T20:04:16.101 [DEBUG] [Thread-60470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:04:16.116 [DEBUG] [Thread-60470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:04:16.116 [INFO] [Thread-60470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] client lang: <none>
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] server lang: <none>
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] kex follows: False
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:04:16.125 [DEBUG] [Thread-60470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:04:16.126 [DEBUG] [Thread-60470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:04:16.126 [DEBUG] [Thread-60470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:04:16.126 [DEBUG] [Thread-60470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:04:16.126 [DEBUG] [Thread-60470] [transport.py] [_log()] Compression: none
2025-11-17T20:04:16.126 [DEBUG] [Thread-60470] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:04:16.181 [DEBUG] [Thread-60470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:04:16.181 [DEBUG] [Thread-60470] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:04:16.182 [DEBUG] [Thread-60470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:04:16.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:04:16.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:04:16.237 [DEBUG] [Thread-60470] [transport.py] [_log()] userauth is OK
2025-11-17T20:04:16.237 [DEBUG] [Thread-60470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:04:16.237 [DEBUG] [Thread-60470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:04:16.238 [DEBUG] [Thread-60470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:04:16.238 [DEBUG] [Thread-60470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:04:16.262 [INFO] [Thread-60470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:04:16.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:04:16.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:04:17.210 [DEBUG] [Thread-60470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:04:17.210 [DEBUG] [Thread-60470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:04:17.257 [DEBUG] [Thread-60470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:04:17.258 [DEBUG] [Thread-60470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:04:17.266 [DEBUG] [Thread-60470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:04:17.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:04:17.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:04:17.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:04:17.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:04:17.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:04:17.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:04:17.301 [DEBUG] [Thread-60470] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:04:27.840 [DEBUG] [Thread-60472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:04:34.195 [DEBUG] [Thread-60473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:04:41.750 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:04:41.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:04:42.889 [DEBUG] [Thread-60474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:04:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:04:47.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:04:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:04:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 4, 18), 21.77, 22.56, 0.0, 11.36, 18.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:04:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:04:18
2025-11-17T20:04:48.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:04:48.235 [DEBUG] [Thread-60475] [transport.py] [_log()] starting thread (client mode): 0xd31ed330
2025-11-17T20:04:48.235 [DEBUG] [Thread-60475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:04:48.251 [DEBUG] [Thread-60475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:04:48.251 [INFO] [Thread-60475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] client lang: <none>
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] server lang: <none>
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] kex follows: False
2025-11-17T20:04:48.253 [DEBUG] [Thread-60475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:04:48.254 [DEBUG] [Thread-60475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:04:48.254 [DEBUG] [Thread-60475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:04:48.254 [DEBUG] [Thread-60475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:04:48.254 [DEBUG] [Thread-60475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:04:48.254 [DEBUG] [Thread-60475] [transport.py] [_log()] Compression: none
2025-11-17T20:04:48.254 [DEBUG] [Thread-60475] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:04:48.262 [DEBUG] [Thread-60475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:04:48.262 [DEBUG] [Thread-60475] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:04:48.263 [DEBUG] [Thread-60475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:04:48.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:04:48.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:04:48.264 [DEBUG] [Thread-60475] [transport.py] [_log()] userauth is OK
2025-11-17T20:04:48.264 [DEBUG] [Thread-60475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:04:48.264 [DEBUG] [Thread-60475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:04:48.264 [DEBUG] [Thread-60475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:04:48.264 [DEBUG] [Thread-60475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:04:48.277 [INFO] [Thread-60475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:04:48.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:04:48.961 [DEBUG] [Thread-60475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:04:48.961 [DEBUG] [Thread-60475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:04:48.962 [DEBUG] [Thread-60475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:04:49.002 [DEBUG] [Thread-60475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:04:49.002 [DEBUG] [Thread-60475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:04:49.005 [DEBUG] [Thread-60475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:04:49.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:04:49.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:04:49.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:04:49.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:04:49.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:04:49.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:04:49.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:04:49.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:04:49.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:04:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.752827 -999.00  +18.40   8.78     32   +1.50 1 1 1 1 1     8    0 19.75 -91.22 ----- 9.1 8.8 174.6 12.5 18.9 -24.2 18.8 -23.5 18.6 -22.8 18.8 -23.6
2025-11-17T20:04:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:04:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:04:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.752827
2025-11-17T20:04:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:04:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:04:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:04:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:04:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:04:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:04:18', tmtdew=21.77, humidity=22.56, cloud=0.0, wind=11.36, temperature=18.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:04:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:04:49.027 [DEBUG] [Thread-60475] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:04:49.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:04:49.124 [DEBUG] [Thread-60478] [transport.py] [_log()] starting thread (client mode): 0xd3134940
2025-11-17T20:04:49.124 [DEBUG] [Thread-60478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:04:49.139 [DEBUG] [Thread-60478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:04:49.139 [INFO] [Thread-60478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:04:49.147 [DEBUG] [Thread-60478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:04:49.147 [DEBUG] [Thread-60478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:04:49.147 [DEBUG] [Thread-60478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:04:49.147 [DEBUG] [Thread-60478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:04:49.147 [DEBUG] [Thread-60478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:04:49.147 [DEBUG] [Thread-60478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:04:49.147 [DEBUG] [Thread-60478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:04:49.147 [DEBUG] [Thread-60478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:04:49.148 [DEBUG] [Thread-60478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:04:49.148 [DEBUG] [Thread-60478] [transport.py] [_log()] client lang: <none>
2025-11-17T20:04:49.148 [DEBUG] [Thread-60478] [transport.py] [_log()] server lang: <none>
2025-11-17T20:04:49.148 [DEBUG] [Thread-60478] [transport.py] [_log()] kex follows: False
2025-11-17T20:04:49.148 [DEBUG] [Thread-60478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:04:49.148 [DEBUG] [Thread-60478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:04:49.148 [DEBUG] [Thread-60478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:04:49.148 [DEBUG] [Thread-60478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:04:49.149 [DEBUG] [Thread-60478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:04:49.149 [DEBUG] [Thread-60478] [transport.py] [_log()] Compression: none
2025-11-17T20:04:49.149 [DEBUG] [Thread-60478] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:04:49.205 [DEBUG] [Thread-60478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:04:49.206 [DEBUG] [Thread-60478] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:04:49.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:04:49.207 [DEBUG] [Thread-60478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:04:49.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:04:49.261 [DEBUG] [Thread-60478] [transport.py] [_log()] userauth is OK
2025-11-17T20:04:49.262 [DEBUG] [Thread-60478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:04:49.262 [DEBUG] [Thread-60478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:04:49.262 [DEBUG] [Thread-60478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:04:49.262 [DEBUG] [Thread-60478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:04:49.280 [INFO] [Thread-60478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:04:49.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:04:49.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:04:50.170 [DEBUG] [Thread-60478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:04:50.170 [DEBUG] [Thread-60478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:04:50.218 [DEBUG] [Thread-60478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:04:50.218 [DEBUG] [Thread-60478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:04:50.227 [DEBUG] [Thread-60478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:04:50.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:04:50.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:04:50.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:04:50.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:04:50.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:04:50.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:04:50.261 [DEBUG] [Thread-60478] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:04:57.918 [DEBUG] [Thread-60480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:05:12.960 [DEBUG] [Thread-60481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:05:20.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:05:20.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:05:20.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:05:20.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 4, 50), 20.07, 25.57, 0.0, 11.65, 18.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:05:20.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:04:50
2025-11-17T20:05:21.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:05:21.254 [DEBUG] [Thread-60482] [transport.py] [_log()] starting thread (client mode): 0xd3151e40
2025-11-17T20:05:21.254 [DEBUG] [Thread-60482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:05:21.274 [DEBUG] [Thread-60482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:05:21.274 [INFO] [Thread-60482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] client lang: <none>
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] server lang: <none>
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] kex follows: False
2025-11-17T20:05:21.277 [DEBUG] [Thread-60482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:05:21.278 [DEBUG] [Thread-60482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:05:21.278 [DEBUG] [Thread-60482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:05:21.278 [DEBUG] [Thread-60482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:05:21.278 [DEBUG] [Thread-60482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:05:21.278 [DEBUG] [Thread-60482] [transport.py] [_log()] Compression: none
2025-11-17T20:05:21.278 [DEBUG] [Thread-60482] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:05:21.292 [DEBUG] [Thread-60482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:05:21.292 [DEBUG] [Thread-60482] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:05:21.292 [DEBUG] [Thread-60482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:05:21.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:05:21.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:05:21.293 [DEBUG] [Thread-60482] [transport.py] [_log()] userauth is OK
2025-11-17T20:05:21.293 [DEBUG] [Thread-60482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:05:21.293 [DEBUG] [Thread-60482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:05:21.293 [DEBUG] [Thread-60482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:05:21.293 [DEBUG] [Thread-60482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:05:21.302 [INFO] [Thread-60482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:05:21.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:05:21.959 [DEBUG] [Thread-60482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:05:21.959 [DEBUG] [Thread-60482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:05:21.959 [DEBUG] [Thread-60482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:05:22.000 [DEBUG] [Thread-60482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:05:22.000 [DEBUG] [Thread-60482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:05:22.002 [DEBUG] [Thread-60482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:05:22.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:05:22.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:05:22.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:05:22.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:05:22.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:05:22.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:05:22.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:05:22.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:05:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:05:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.753175 -999.00  +18.40  12.42     32   +1.50 1 1 1 1 1     7    0 18.87 -120.71 ----- 11.9 12.4 181.4 14.7 18.9 -24.2 18.8 -23.5 18.6 -22.7 18.8 -23.6
2025-11-17T20:05:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:05:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:05:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.753175
2025-11-17T20:05:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:05:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:05:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:05:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:05:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:05:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:04:50', tmtdew=20.07, humidity=25.57, cloud=0.0, wind=11.65, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:04:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:05:22.020 [DEBUG] [Thread-60482] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:05:22.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:05:22.105 [DEBUG] [Thread-60485] [transport.py] [_log()] starting thread (client mode): 0xd3151840
2025-11-17T20:05:22.106 [DEBUG] [Thread-60485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:05:22.121 [DEBUG] [Thread-60485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:05:22.121 [INFO] [Thread-60485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:05:22.128 [DEBUG] [Thread-60485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:05:22.128 [DEBUG] [Thread-60485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:05:22.128 [DEBUG] [Thread-60485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:05:22.128 [DEBUG] [Thread-60485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] client lang: <none>
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] server lang: <none>
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] kex follows: False
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] Compression: none
2025-11-17T20:05:22.129 [DEBUG] [Thread-60485] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:05:22.184 [DEBUG] [Thread-60485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:05:22.184 [DEBUG] [Thread-60485] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:05:22.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:05:22.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:05:22.185 [DEBUG] [Thread-60485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:05:22.241 [DEBUG] [Thread-60485] [transport.py] [_log()] userauth is OK
2025-11-17T20:05:22.241 [DEBUG] [Thread-60485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:05:22.241 [DEBUG] [Thread-60485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:05:22.241 [DEBUG] [Thread-60485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:05:22.241 [DEBUG] [Thread-60485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:05:22.255 [INFO] [Thread-60485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:05:22.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:05:22.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:05:23.146 [DEBUG] [Thread-60485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:05:23.146 [DEBUG] [Thread-60485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:05:23.194 [DEBUG] [Thread-60485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:05:23.194 [DEBUG] [Thread-60485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:05:23.202 [DEBUG] [Thread-60485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:05:23.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:05:23.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:05:23.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:05:23.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:05:23.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:05:23.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:05:23.234 [DEBUG] [Thread-60485] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:05:27.990 [DEBUG] [Thread-60487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:05:34.271 [DEBUG] [Thread-60488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:05:43.032 [DEBUG] [Thread-60489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:05:49.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:05:49.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:05:53.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:05:53.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:05:53.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:05:53.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 5, 22), 19.53, 26.57, 0.0, 11.36, 18.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:05:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:05:22
2025-11-17T20:05:54.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:05:54.174 [DEBUG] [Thread-60490] [transport.py] [_log()] starting thread (client mode): 0xd3150910
2025-11-17T20:05:54.174 [DEBUG] [Thread-60490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:05:54.191 [DEBUG] [Thread-60490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:05:54.191 [INFO] [Thread-60490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:05:54.193 [DEBUG] [Thread-60490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] client lang: <none>
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] server lang: <none>
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] kex follows: False
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] Compression: none
2025-11-17T20:05:54.194 [DEBUG] [Thread-60490] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:05:54.207 [DEBUG] [Thread-60490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:05:54.207 [DEBUG] [Thread-60490] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:05:54.207 [DEBUG] [Thread-60490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:05:54.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:05:54.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:05:54.209 [DEBUG] [Thread-60490] [transport.py] [_log()] userauth is OK
2025-11-17T20:05:54.209 [DEBUG] [Thread-60490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:05:54.210 [DEBUG] [Thread-60490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:05:54.210 [DEBUG] [Thread-60490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:05:54.210 [DEBUG] [Thread-60490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:05:54.228 [INFO] [Thread-60490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:05:54.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:05:54.804 [DEBUG] [Thread-60490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:05:54.804 [DEBUG] [Thread-60490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:05:54.804 [DEBUG] [Thread-60490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:05:54.845 [DEBUG] [Thread-60490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:05:54.845 [DEBUG] [Thread-60490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:05:54.848 [DEBUG] [Thread-60490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:05:54.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:05:54.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:05:54.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:05:54.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:05:54.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:05:54.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:05:54.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:05:54.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:05:54.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.753869 -999.00  +18.30  11.28     32   +1.60 1 1 1 1 1     6    0 17.56 -151.79 ----- 11.2 11.3 178.0 14.7 18.8 -24.2 18.7 -23.6 18.5 -22.8 18.8 -23.8
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.753869
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:05:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:05:22', tmtdew=19.53, humidity=26.57, cloud=0.0, wind=11.36, temperature=18.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:05:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:05:54.864 [DEBUG] [Thread-60490] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:05:54.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:05:54.949 [DEBUG] [Thread-60493] [transport.py] [_log()] starting thread (client mode): 0xd078f040
2025-11-17T20:05:54.949 [DEBUG] [Thread-60493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:05:54.964 [DEBUG] [Thread-60493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:05:54.964 [INFO] [Thread-60493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] client lang: <none>
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] server lang: <none>
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] kex follows: False
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] Compression: none
2025-11-17T20:05:54.972 [DEBUG] [Thread-60493] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:05:55.030 [DEBUG] [Thread-60493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:05:55.030 [DEBUG] [Thread-60493] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:05:55.030 [DEBUG] [Thread-60493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:05:55.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:05:55.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:05:55.088 [DEBUG] [Thread-60493] [transport.py] [_log()] userauth is OK
2025-11-17T20:05:55.088 [DEBUG] [Thread-60493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:05:55.088 [DEBUG] [Thread-60493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:05:55.088 [DEBUG] [Thread-60493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:05:55.088 [DEBUG] [Thread-60493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:05:55.102 [INFO] [Thread-60493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:05:55.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:05:55.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:05:55.931 [DEBUG] [Thread-60493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:05:55.931 [DEBUG] [Thread-60493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:05:55.979 [DEBUG] [Thread-60493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:05:55.979 [DEBUG] [Thread-60493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:05:55.988 [DEBUG] [Thread-60493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:05:56.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:05:56.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')
2025-11-17T20:05:56.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:05:56.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:05:56.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:05:56.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:05:56.027 [DEBUG] [Thread-60493] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:05:58.059 [DEBUG] [Thread-60495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:06:13.100 [DEBUG] [Thread-60496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:06:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:06:26.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:06:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:06:26.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 5, 54), 19.16, 27.38, 0.0, 15.03, 18.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:06:26.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:05:54
2025-11-17T20:06:26.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:06:26.991 [DEBUG] [Thread-60497] [transport.py] [_log()] starting thread (client mode): 0xd31ed330
2025-11-17T20:06:26.991 [DEBUG] [Thread-60497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:06:27.011 [DEBUG] [Thread-60497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:06:27.011 [INFO] [Thread-60497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] client lang: <none>
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] server lang: <none>
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] kex follows: False
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:06:27.013 [DEBUG] [Thread-60497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:06:27.014 [DEBUG] [Thread-60497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:06:27.014 [DEBUG] [Thread-60497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:06:27.014 [DEBUG] [Thread-60497] [transport.py] [_log()] Compression: none
2025-11-17T20:06:27.014 [DEBUG] [Thread-60497] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:06:27.031 [DEBUG] [Thread-60497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:06:27.031 [DEBUG] [Thread-60497] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:06:27.031 [DEBUG] [Thread-60497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:06:27.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:06:27.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:06:27.032 [DEBUG] [Thread-60497] [transport.py] [_log()] userauth is OK
2025-11-17T20:06:27.032 [DEBUG] [Thread-60497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:06:27.032 [DEBUG] [Thread-60497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:06:27.032 [DEBUG] [Thread-60497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:06:27.032 [DEBUG] [Thread-60497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:06:27.045 [INFO] [Thread-60497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:06:27.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:06:27.671 [DEBUG] [Thread-60497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:06:27.671 [DEBUG] [Thread-60497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:06:27.671 [DEBUG] [Thread-60497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:06:27.712 [DEBUG] [Thread-60497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:06:27.712 [DEBUG] [Thread-60497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:06:27.714 [DEBUG] [Thread-60497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:06:27.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:06:27.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:06:27.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:06:27.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:06:27.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:06:27.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:06:27.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.754216 -999.00  +18.30   9.58     32   +1.60 1 1 1 1 1     5    0 16.32 -177.15 ZNES. 10.8 9.6 185.2 12.2 18.8 -24.2 18.7 -23.5 18.5 -22.8 18.8 -23.6
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.754216
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:06:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:05:54', tmtdew=19.16, humidity=27.38, cloud=0.0, wind=15.03, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:06:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:06:27.733 [DEBUG] [Thread-60497] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:06:27.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:06:27.817 [DEBUG] [Thread-60500] [transport.py] [_log()] starting thread (client mode): 0xd31b3c40
2025-11-17T20:06:27.817 [DEBUG] [Thread-60500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:06:27.837 [DEBUG] [Thread-60500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:06:27.837 [INFO] [Thread-60500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:06:27.844 [DEBUG] [Thread-60500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:06:27.844 [DEBUG] [Thread-60500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:06:27.844 [DEBUG] [Thread-60500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:06:27.844 [DEBUG] [Thread-60500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:06:27.844 [DEBUG] [Thread-60500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:06:27.844 [DEBUG] [Thread-60500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:06:27.844 [DEBUG] [Thread-60500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:06:27.844 [DEBUG] [Thread-60500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] client lang: <none>
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] server lang: <none>
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] kex follows: False
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] Compression: none
2025-11-17T20:06:27.845 [DEBUG] [Thread-60500] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:06:27.903 [DEBUG] [Thread-60500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:06:27.903 [DEBUG] [Thread-60500] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:06:27.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:06:27.904 [DEBUG] [Thread-60500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:06:27.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:06:27.960 [DEBUG] [Thread-60500] [transport.py] [_log()] userauth is OK
2025-11-17T20:06:27.960 [DEBUG] [Thread-60500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:06:27.960 [DEBUG] [Thread-60500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:06:27.960 [DEBUG] [Thread-60500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:06:27.960 [DEBUG] [Thread-60500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:06:27.974 [INFO] [Thread-60500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:06:27.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:06:27.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:06:28.132 [DEBUG] [Thread-60502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:06:28.832 [DEBUG] [Thread-60500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:06:28.833 [DEBUG] [Thread-60500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:06:28.880 [DEBUG] [Thread-60500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:06:28.880 [DEBUG] [Thread-60500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:06:28.889 [DEBUG] [Thread-60500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:06:28.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:06:28.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:06:28.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:06:28.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:06:28.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:06:28.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:06:28.923 [DEBUG] [Thread-60500] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:06:34.323 [DEBUG] [Thread-60503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:06:43.159 [DEBUG] [Thread-60504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:06:55.060 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:06:55.061 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:06:58.192 [DEBUG] [Thread-60505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:06:58.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:06:58.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:06:58.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:06:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 6, 26), 19.04, 27.63, 0.0, 15.16, 18.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:06:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:06:26
2025-11-17T20:06:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:06:59.928 [DEBUG] [Thread-60506] [transport.py] [_log()] starting thread (client mode): 0xd3152110
2025-11-17T20:06:59.928 [DEBUG] [Thread-60506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:06:59.948 [DEBUG] [Thread-60506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:06:59.948 [INFO] [Thread-60506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] client lang: <none>
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] server lang: <none>
2025-11-17T20:06:59.949 [DEBUG] [Thread-60506] [transport.py] [_log()] kex follows: False
2025-11-17T20:06:59.950 [DEBUG] [Thread-60506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:06:59.950 [DEBUG] [Thread-60506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:06:59.950 [DEBUG] [Thread-60506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:06:59.950 [DEBUG] [Thread-60506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:06:59.950 [DEBUG] [Thread-60506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:06:59.950 [DEBUG] [Thread-60506] [transport.py] [_log()] Compression: none
2025-11-17T20:06:59.950 [DEBUG] [Thread-60506] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:06:59.961 [DEBUG] [Thread-60506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:06:59.961 [DEBUG] [Thread-60506] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:06:59.961 [DEBUG] [Thread-60506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:06:59.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:06:59.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:06:59.962 [DEBUG] [Thread-60506] [transport.py] [_log()] userauth is OK
2025-11-17T20:06:59.962 [DEBUG] [Thread-60506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:06:59.962 [DEBUG] [Thread-60506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:06:59.962 [DEBUG] [Thread-60506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:06:59.962 [DEBUG] [Thread-60506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:06:59.970 [INFO] [Thread-60506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:06:59.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:07:00.591 [DEBUG] [Thread-60506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:07:00.592 [DEBUG] [Thread-60506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:07:00.592 [DEBUG] [Thread-60506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:07:00.632 [DEBUG] [Thread-60506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:07:00.632 [DEBUG] [Thread-60506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:07:00.635 [DEBUG] [Thread-60506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:07:00.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:07:00.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:07:00.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:07:00.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:07:00.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:07:00.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:07:00.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:07:00.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:07:00.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:07:00.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.754564 -999.00  +18.30   8.77     33   +1.70 1 2 1 1 1     5    0 15.76 -196.62 ZNES. 8.6 8.8 188.2 14.3 18.8 -24.2 18.7 -23.1 18.5 -22.7 18.8 -23.6
2025-11-17T20:07:00.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:07:00.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:07:00.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.754564
2025-11-17T20:07:00.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:07:00.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:07:00.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:07:00.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:07:00.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:07:00.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:06:26', tmtdew=19.04, humidity=27.63, cloud=0.0, wind=15.16, temperature=18.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:06:34.330', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:07:00.660 [DEBUG] [Thread-60506] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:07:00.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:07:00.757 [DEBUG] [Thread-60509] [transport.py] [_log()] starting thread (client mode): 0xd078d600
2025-11-17T20:07:00.757 [DEBUG] [Thread-60509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:07:00.772 [DEBUG] [Thread-60509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:07:00.773 [INFO] [Thread-60509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:07:00.780 [DEBUG] [Thread-60509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:07:00.780 [DEBUG] [Thread-60509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:07:00.780 [DEBUG] [Thread-60509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:07:00.780 [DEBUG] [Thread-60509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] client lang: <none>
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] server lang: <none>
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] kex follows: False
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:07:00.781 [DEBUG] [Thread-60509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:07:00.782 [DEBUG] [Thread-60509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:07:00.782 [DEBUG] [Thread-60509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:07:00.782 [DEBUG] [Thread-60509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:07:00.782 [DEBUG] [Thread-60509] [transport.py] [_log()] Compression: none
2025-11-17T20:07:00.782 [DEBUG] [Thread-60509] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:07:00.839 [DEBUG] [Thread-60509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:07:00.839 [DEBUG] [Thread-60509] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:07:00.839 [DEBUG] [Thread-60509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:07:00.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:07:00.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:07:00.896 [DEBUG] [Thread-60509] [transport.py] [_log()] userauth is OK
2025-11-17T20:07:00.896 [DEBUG] [Thread-60509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:07:00.896 [DEBUG] [Thread-60509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:07:00.896 [DEBUG] [Thread-60509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:07:00.896 [DEBUG] [Thread-60509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:07:00.914 [INFO] [Thread-60509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:07:00.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:07:00.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:07:01.787 [DEBUG] [Thread-60509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:07:01.787 [DEBUG] [Thread-60509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:07:01.835 [DEBUG] [Thread-60509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:07:01.835 [DEBUG] [Thread-60509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:07:01.844 [DEBUG] [Thread-60509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:07:01.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:07:01.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:07:01.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:07:01.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:07:01.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:07:01.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:07:01.879 [DEBUG] [Thread-60509] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:07:13.222 [DEBUG] [Thread-60511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:07:28.262 [DEBUG] [Thread-60512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:07:31.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:07:31.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:07:31.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:07:32.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 6, 58), 19.02, 27.55, 0.0, 12.03, 18.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:07:32.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:06:58
2025-11-17T20:07:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:07:32.859 [DEBUG] [Thread-60513] [transport.py] [_log()] starting thread (client mode): 0xd0784970
2025-11-17T20:07:32.859 [DEBUG] [Thread-60513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:07:32.879 [DEBUG] [Thread-60513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:07:32.879 [INFO] [Thread-60513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:07:32.882 [DEBUG] [Thread-60513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] client lang: <none>
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] server lang: <none>
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] kex follows: False
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] Compression: none
2025-11-17T20:07:32.883 [DEBUG] [Thread-60513] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:07:32.898 [DEBUG] [Thread-60513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:07:32.899 [DEBUG] [Thread-60513] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:07:32.899 [DEBUG] [Thread-60513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:07:32.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:07:32.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:07:32.901 [DEBUG] [Thread-60513] [transport.py] [_log()] userauth is OK
2025-11-17T20:07:32.901 [DEBUG] [Thread-60513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:07:32.901 [DEBUG] [Thread-60513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:07:32.901 [DEBUG] [Thread-60513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:07:32.901 [DEBUG] [Thread-60513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:07:32.934 [INFO] [Thread-60513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:07:32.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:07:33.581 [DEBUG] [Thread-60513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:07:33.581 [DEBUG] [Thread-60513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:07:33.581 [DEBUG] [Thread-60513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:07:33.622 [DEBUG] [Thread-60513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:07:33.622 [DEBUG] [Thread-60513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:07:33.625 [DEBUG] [Thread-60513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:07:33.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:07:33.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:07:33.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:07:33.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:07:33.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:07:33.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:07:33.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:07:33.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:07:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:07:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.754911 -999.00  +18.20  11.48     32   +1.60 1 2 1 1 1     4    0 14.52 -225.87 ZNES. 11.1 11.5 191.0 13.3 18.7 -24.1 18.7 -23.2 18.4 -22.8 18.7 -23.6
2025-11-17T20:07:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:07:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:07:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.754911
2025-11-17T20:07:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:07:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:07:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:07:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:07:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:07:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:06:58', tmtdew=19.02, humidity=27.55, cloud=0.0, wind=12.03, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:07:04.310', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:07:33.650 [DEBUG] [Thread-60513] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:07:33.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:07:33.753 [DEBUG] [Thread-60516] [transport.py] [_log()] starting thread (client mode): 0xd7bc6020
2025-11-17T20:07:33.753 [DEBUG] [Thread-60516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:07:33.769 [DEBUG] [Thread-60516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:07:33.769 [INFO] [Thread-60516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:07:33.776 [DEBUG] [Thread-60516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] client lang: <none>
2025-11-17T20:07:33.777 [DEBUG] [Thread-60516] [transport.py] [_log()] server lang: <none>
2025-11-17T20:07:33.778 [DEBUG] [Thread-60516] [transport.py] [_log()] kex follows: False
2025-11-17T20:07:33.778 [DEBUG] [Thread-60516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:07:33.778 [DEBUG] [Thread-60516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:07:33.778 [DEBUG] [Thread-60516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:07:33.778 [DEBUG] [Thread-60516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:07:33.778 [DEBUG] [Thread-60516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:07:33.778 [DEBUG] [Thread-60516] [transport.py] [_log()] Compression: none
2025-11-17T20:07:33.778 [DEBUG] [Thread-60516] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:07:33.836 [DEBUG] [Thread-60516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:07:33.836 [DEBUG] [Thread-60516] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:07:33.837 [DEBUG] [Thread-60516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:07:33.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:07:33.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:07:33.892 [DEBUG] [Thread-60516] [transport.py] [_log()] userauth is OK
2025-11-17T20:07:33.892 [DEBUG] [Thread-60516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:07:33.892 [DEBUG] [Thread-60516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:07:33.892 [DEBUG] [Thread-60516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:07:33.892 [DEBUG] [Thread-60516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:07:33.910 [INFO] [Thread-60516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:07:33.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:07:33.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:07:34.398 [DEBUG] [Thread-60518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:07:34.758 [DEBUG] [Thread-60516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:07:34.758 [DEBUG] [Thread-60516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:07:34.806 [DEBUG] [Thread-60516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:07:34.806 [DEBUG] [Thread-60516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:07:34.816 [DEBUG] [Thread-60516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:07:34.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:07:34.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:07:34.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:07:34.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:07:34.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:07:34.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:07:34.856 [DEBUG] [Thread-60516] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:07:43.290 [DEBUG] [Thread-60519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:07:58.331 [DEBUG] [Thread-60520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:08:00.603 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:08:00.604 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:08:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:08:04.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:08:04.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:08:05.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 8, 2), 18.99, 27.61, 0.0, 13.0, 18.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:08:05.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:08:02
2025-11-17T20:08:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:08:05.816 [DEBUG] [Thread-60521] [transport.py] [_log()] starting thread (client mode): 0xd3134d30
2025-11-17T20:08:05.817 [DEBUG] [Thread-60521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:08:05.838 [DEBUG] [Thread-60521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:08:05.838 [INFO] [Thread-60521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:08:05.839 [DEBUG] [Thread-60521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:08:05.839 [DEBUG] [Thread-60521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] client lang: <none>
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] server lang: <none>
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] kex follows: False
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] Compression: none
2025-11-17T20:08:05.840 [DEBUG] [Thread-60521] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:08:05.859 [DEBUG] [Thread-60521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:08:05.860 [DEBUG] [Thread-60521] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:08:05.860 [DEBUG] [Thread-60521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:08:05.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:08:05.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:08:05.862 [DEBUG] [Thread-60521] [transport.py] [_log()] userauth is OK
2025-11-17T20:08:05.862 [DEBUG] [Thread-60521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:08:05.862 [DEBUG] [Thread-60521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:08:05.862 [DEBUG] [Thread-60521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:08:05.863 [DEBUG] [Thread-60521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:08:05.894 [INFO] [Thread-60521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:08:05.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:08:06.526 [DEBUG] [Thread-60521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:08:06.526 [DEBUG] [Thread-60521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:08:06.527 [DEBUG] [Thread-60521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:08:06.567 [DEBUG] [Thread-60521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:08:06.568 [DEBUG] [Thread-60521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:08:06.571 [DEBUG] [Thread-60521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:08:06.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:08:06.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:08:06.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:08:06.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:08:06.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:08:06.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:08:06.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:08:06.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:08:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:08:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.755258 -999.00  +18.20  12.56     33   +1.70 1 2 1 1 1     4    0 13.60 -257.31 ZNES. 12.1 12.6 198.4 16.5 18.7 -24.0 18.6 -23.1 18.4 -22.6 18.7 -23.5
2025-11-17T20:08:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:08:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:08:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.755258
2025-11-17T20:08:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:08:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:08:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:08:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:08:06.596 [DEBUG] [Thread-60521] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:08:06.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:08:06.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:08:02', tmtdew=18.99, humidity=27.61, cloud=0.0, wind=13.0, temperature=18.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:07:34.291', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:08:06.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:08:06.703 [DEBUG] [Thread-60524] [transport.py] [_log()] starting thread (client mode): 0xd3135ea0
2025-11-17T20:08:06.703 [DEBUG] [Thread-60524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:08:06.718 [DEBUG] [Thread-60524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:08:06.718 [INFO] [Thread-60524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:08:06.725 [DEBUG] [Thread-60524] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:08:06.725 [DEBUG] [Thread-60524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] client lang: <none>
2025-11-17T20:08:06.726 [DEBUG] [Thread-60524] [transport.py] [_log()] server lang: <none>
2025-11-17T20:08:06.727 [DEBUG] [Thread-60524] [transport.py] [_log()] kex follows: False
2025-11-17T20:08:06.727 [DEBUG] [Thread-60524] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:08:06.727 [DEBUG] [Thread-60524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:08:06.727 [DEBUG] [Thread-60524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:08:06.727 [DEBUG] [Thread-60524] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:08:06.727 [DEBUG] [Thread-60524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:08:06.727 [DEBUG] [Thread-60524] [transport.py] [_log()] Compression: none
2025-11-17T20:08:06.728 [DEBUG] [Thread-60524] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:08:06.784 [DEBUG] [Thread-60524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:08:06.785 [DEBUG] [Thread-60524] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:08:06.785 [DEBUG] [Thread-60524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:08:06.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:08:06.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:08:06.840 [DEBUG] [Thread-60524] [transport.py] [_log()] userauth is OK
2025-11-17T20:08:06.840 [DEBUG] [Thread-60524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:08:06.840 [DEBUG] [Thread-60524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:08:06.840 [DEBUG] [Thread-60524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:08:06.840 [DEBUG] [Thread-60524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:08:06.859 [INFO] [Thread-60524] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:08:06.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:08:06.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:08:07.695 [DEBUG] [Thread-60524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:08:07.695 [DEBUG] [Thread-60524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:08:07.743 [DEBUG] [Thread-60524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:08:07.743 [DEBUG] [Thread-60524] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:08:07.752 [DEBUG] [Thread-60524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:08:07.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:08:07.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:08:07.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:08:07.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:08:07.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:08:07.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:08:07.786 [DEBUG] [Thread-60524] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:08:13.355 [DEBUG] [Thread-60526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:08:28.394 [DEBUG] [Thread-60527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:08:34.472 [DEBUG] [Thread-60528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:08:37.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:08:37.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:08:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:08:38.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 8, 34), 18.92, 27.65, 0.0, 16.0, 18.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:08:38.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:08:34
2025-11-17T20:08:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:08:38.750 [DEBUG] [Thread-60529] [transport.py] [_log()] starting thread (client mode): 0xd31cc910
2025-11-17T20:08:38.750 [DEBUG] [Thread-60529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:08:38.770 [DEBUG] [Thread-60529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:08:38.770 [INFO] [Thread-60529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:08:38.773 [DEBUG] [Thread-60529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:08:38.773 [DEBUG] [Thread-60529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:08:38.773 [DEBUG] [Thread-60529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:08:38.773 [DEBUG] [Thread-60529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] client lang: <none>
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] server lang: <none>
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] kex follows: False
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] Compression: none
2025-11-17T20:08:38.774 [DEBUG] [Thread-60529] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:08:38.789 [DEBUG] [Thread-60529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:08:38.789 [DEBUG] [Thread-60529] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:08:38.789 [DEBUG] [Thread-60529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:08:38.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:08:38.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:08:38.790 [DEBUG] [Thread-60529] [transport.py] [_log()] userauth is OK
2025-11-17T20:08:38.790 [DEBUG] [Thread-60529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:08:38.790 [DEBUG] [Thread-60529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:08:38.790 [DEBUG] [Thread-60529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:08:38.790 [DEBUG] [Thread-60529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:08:38.799 [INFO] [Thread-60529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:08:38.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:08:39.442 [DEBUG] [Thread-60529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:08:39.442 [DEBUG] [Thread-60529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:08:39.442 [DEBUG] [Thread-60529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:08:39.483 [DEBUG] [Thread-60529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:08:39.483 [DEBUG] [Thread-60529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:08:39.486 [DEBUG] [Thread-60529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:08:39.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:08:39.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:08:39.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:08:39.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:08:39.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:08:39.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:08:39.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:08:39.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:08:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:08:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.755605 -999.00  +18.10  16.56     33   +1.70 1 2 1 1 1     3    0 13.04 -276.47 ZNEs. 14.3 16.6 192.2 18.6 18.7 -24.0 18.6 -23.1 18.4 -22.6 18.7 -23.8
2025-11-17T20:08:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:08:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:08:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.755605
2025-11-17T20:08:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:08:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:08:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:08:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:08:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:08:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:08:34', tmtdew=18.92, humidity=27.65, cloud=0.0, wind=16.0, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:08:04.272', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:08:39.506 [DEBUG] [Thread-60529] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:08:39.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:08:39.592 [DEBUG] [Thread-60532] [transport.py] [_log()] starting thread (client mode): 0xd31354b0
2025-11-17T20:08:39.592 [DEBUG] [Thread-60532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:08:39.607 [DEBUG] [Thread-60532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:08:39.607 [INFO] [Thread-60532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] client lang: <none>
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] server lang: <none>
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] kex follows: False
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] Compression: none
2025-11-17T20:08:39.615 [DEBUG] [Thread-60532] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:08:39.670 [DEBUG] [Thread-60532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:08:39.670 [DEBUG] [Thread-60532] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:08:39.671 [DEBUG] [Thread-60532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:08:39.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:08:39.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:08:39.728 [DEBUG] [Thread-60532] [transport.py] [_log()] userauth is OK
2025-11-17T20:08:39.728 [DEBUG] [Thread-60532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:08:39.728 [DEBUG] [Thread-60532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:08:39.728 [DEBUG] [Thread-60532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:08:39.729 [DEBUG] [Thread-60532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:08:39.748 [INFO] [Thread-60532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:08:39.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:08:39.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:08:40.696 [DEBUG] [Thread-60532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:08:40.696 [DEBUG] [Thread-60532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:08:40.743 [DEBUG] [Thread-60532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:08:40.744 [DEBUG] [Thread-60532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:08:40.753 [DEBUG] [Thread-60532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:08:40.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:08:40.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:08:40.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:08:40.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:08:40.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:08:40.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:08:40.787 [DEBUG] [Thread-60532] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:08:43.423 [DEBUG] [Thread-60534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:08:58.469 [DEBUG] [Thread-60535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:09:08.337 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:09:08.338 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:09:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:09:10.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:09:10.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:09:11.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 9, 6), 18.92, 27.63, 0.0, 16.75, 17.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:09:11.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:09:06
2025-11-17T20:09:11.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:09:11.723 [DEBUG] [Thread-60536] [transport.py] [_log()] starting thread (client mode): 0xd3136fb0
2025-11-17T20:09:11.724 [DEBUG] [Thread-60536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:09:11.743 [DEBUG] [Thread-60536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:09:11.743 [INFO] [Thread-60536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:09:11.744 [DEBUG] [Thread-60536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] client lang: <none>
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] server lang: <none>
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] kex follows: False
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] Compression: none
2025-11-17T20:09:11.745 [DEBUG] [Thread-60536] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:09:11.754 [DEBUG] [Thread-60536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:09:11.754 [DEBUG] [Thread-60536] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:09:11.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:09:11.755 [DEBUG] [Thread-60536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:09:11.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:09:11.757 [DEBUG] [Thread-60536] [transport.py] [_log()] userauth is OK
2025-11-17T20:09:11.757 [DEBUG] [Thread-60536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:09:11.757 [DEBUG] [Thread-60536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:09:11.757 [DEBUG] [Thread-60536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:09:11.757 [DEBUG] [Thread-60536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:09:11.775 [INFO] [Thread-60536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:09:11.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:09:12.439 [DEBUG] [Thread-60536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:09:12.439 [DEBUG] [Thread-60536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:09:12.439 [DEBUG] [Thread-60536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:09:12.480 [DEBUG] [Thread-60536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:09:12.480 [DEBUG] [Thread-60536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:09:12.482 [DEBUG] [Thread-60536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:09:12.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:09:12.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:09:12.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:09:12.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:09:12.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:09:12.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:09:12.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:09:12.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:09:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:09:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.755952 -999.00  +18.10  13.20     33   +1.60 1 2 1 1 1     3    0 12.24 -294.77 ZNES. 12.7 13.2 187.2 16.4 18.7 -24.1 18.6 -23.3 18.4 -22.7 18.7 -23.6
2025-11-17T20:09:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:09:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:09:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.755952
2025-11-17T20:09:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:09:12.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:09:12.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:09:12.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:09:12.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:09:12.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:09:06', tmtdew=18.92, humidity=27.63, cloud=0.0, wind=16.75, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:08:34.253', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:09:12.507 [DEBUG] [Thread-60536] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:09:12.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:09:12.606 [DEBUG] [Thread-60539] [transport.py] [_log()] starting thread (client mode): 0xd3135ab0
2025-11-17T20:09:12.606 [DEBUG] [Thread-60539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:09:12.625 [DEBUG] [Thread-60539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:09:12.625 [INFO] [Thread-60539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:09:12.633 [DEBUG] [Thread-60539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:09:12.633 [DEBUG] [Thread-60539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:09:12.633 [DEBUG] [Thread-60539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:09:12.633 [DEBUG] [Thread-60539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:09:12.633 [DEBUG] [Thread-60539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] client lang: <none>
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] server lang: <none>
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] kex follows: False
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:09:12.634 [DEBUG] [Thread-60539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:09:12.635 [DEBUG] [Thread-60539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:09:12.635 [DEBUG] [Thread-60539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:09:12.635 [DEBUG] [Thread-60539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:09:12.635 [DEBUG] [Thread-60539] [transport.py] [_log()] Compression: none
2025-11-17T20:09:12.635 [DEBUG] [Thread-60539] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:09:12.692 [DEBUG] [Thread-60539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:09:12.693 [DEBUG] [Thread-60539] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:09:12.693 [DEBUG] [Thread-60539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:09:12.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:09:12.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:09:12.747 [DEBUG] [Thread-60539] [transport.py] [_log()] userauth is OK
2025-11-17T20:09:12.747 [DEBUG] [Thread-60539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:09:12.747 [DEBUG] [Thread-60539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:09:12.747 [DEBUG] [Thread-60539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:09:12.747 [DEBUG] [Thread-60539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:09:12.761 [INFO] [Thread-60539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:09:12.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:09:12.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:09:13.497 [DEBUG] [Thread-60541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:09:13.630 [DEBUG] [Thread-60539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:09:13.630 [DEBUG] [Thread-60539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:09:13.678 [DEBUG] [Thread-60539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:09:13.678 [DEBUG] [Thread-60539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:09:13.686 [DEBUG] [Thread-60539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:09:13.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:09:13.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:09:13.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:09:13.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:09:13.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:09:13.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:09:13.717 [DEBUG] [Thread-60539] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:09:28.527 [DEBUG] [Thread-60542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:09:34.548 [DEBUG] [Thread-60543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:09:43.553 [DEBUG] [Thread-60544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:09:43.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:09:43.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:09:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:09:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 9, 38), 18.9, 27.7, 0.0, 16.32, 17.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:09:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:09:38
2025-11-17T20:09:44.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:09:44.651 [DEBUG] [Thread-60545] [transport.py] [_log()] starting thread (client mode): 0xd7bc66b0
2025-11-17T20:09:44.651 [DEBUG] [Thread-60545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:09:44.672 [DEBUG] [Thread-60545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:09:44.673 [INFO] [Thread-60545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:09:44.676 [DEBUG] [Thread-60545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:09:44.676 [DEBUG] [Thread-60545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:09:44.676 [DEBUG] [Thread-60545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:09:44.676 [DEBUG] [Thread-60545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:09:44.676 [DEBUG] [Thread-60545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:09:44.676 [DEBUG] [Thread-60545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:09:44.676 [DEBUG] [Thread-60545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:09:44.676 [DEBUG] [Thread-60545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] client lang: <none>
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] server lang: <none>
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] kex follows: False
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] Compression: none
2025-11-17T20:09:44.677 [DEBUG] [Thread-60545] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:09:44.694 [DEBUG] [Thread-60545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:09:44.695 [DEBUG] [Thread-60545] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:09:44.695 [DEBUG] [Thread-60545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:09:44.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:09:44.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:09:44.697 [DEBUG] [Thread-60545] [transport.py] [_log()] userauth is OK
2025-11-17T20:09:44.697 [DEBUG] [Thread-60545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:09:44.697 [DEBUG] [Thread-60545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:09:44.697 [DEBUG] [Thread-60545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:09:44.697 [DEBUG] [Thread-60545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:09:44.721 [INFO] [Thread-60545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:09:44.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:09:45.359 [DEBUG] [Thread-60545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:09:45.359 [DEBUG] [Thread-60545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:09:45.360 [DEBUG] [Thread-60545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:09:45.400 [DEBUG] [Thread-60545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:09:45.401 [DEBUG] [Thread-60545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:09:45.404 [DEBUG] [Thread-60545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:09:45.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:09:45.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:09:45.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:09:45.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:09:45.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:09:45.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:09:45.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:09:45.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:09:45.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:09:45.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.756300 -999.00  +18.10   8.70     33   +1.70 1 2 1 1 1     3    0 11.11 -325.20 ZNES. 10.8 8.7 185.8 17.0 18.7 -24.1 18.6 -23.2 18.4 -22.8 18.6 -23.4
2025-11-17T20:09:45.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:09:45.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:09:45.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.756300
2025-11-17T20:09:45.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:09:45.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:09:45.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:09:45.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:09:45.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:09:45.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:09:38', tmtdew=18.9, humidity=27.7, cloud=0.0, wind=16.32, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:09:04.320', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:09:45.429 [DEBUG] [Thread-60545] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:09:45.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:09:45.528 [DEBUG] [Thread-60548] [transport.py] [_log()] starting thread (client mode): 0xd7bc7d90
2025-11-17T20:09:45.529 [DEBUG] [Thread-60548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:09:45.544 [DEBUG] [Thread-60548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:09:45.544 [INFO] [Thread-60548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:09:45.551 [DEBUG] [Thread-60548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:09:45.552 [DEBUG] [Thread-60548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:09:45.552 [DEBUG] [Thread-60548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:09:45.552 [DEBUG] [Thread-60548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:09:45.552 [DEBUG] [Thread-60548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:09:45.552 [DEBUG] [Thread-60548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:09:45.552 [DEBUG] [Thread-60548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:09:45.552 [DEBUG] [Thread-60548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:09:45.552 [DEBUG] [Thread-60548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] client lang: <none>
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] server lang: <none>
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] kex follows: False
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:09:45.553 [DEBUG] [Thread-60548] [transport.py] [_log()] Compression: none
2025-11-17T20:09:45.554 [DEBUG] [Thread-60548] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:09:45.611 [DEBUG] [Thread-60548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:09:45.612 [DEBUG] [Thread-60548] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:09:45.613 [DEBUG] [Thread-60548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:09:45.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:09:45.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:09:45.667 [DEBUG] [Thread-60548] [transport.py] [_log()] userauth is OK
2025-11-17T20:09:45.667 [DEBUG] [Thread-60548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:09:45.668 [DEBUG] [Thread-60548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:09:45.668 [DEBUG] [Thread-60548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:09:45.668 [DEBUG] [Thread-60548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:09:45.687 [INFO] [Thread-60548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:09:45.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:09:45.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:09:46.534 [DEBUG] [Thread-60548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:09:46.535 [DEBUG] [Thread-60548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:09:46.582 [DEBUG] [Thread-60548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:09:46.582 [DEBUG] [Thread-60548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:09:46.591 [DEBUG] [Thread-60548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:09:46.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:09:46.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:09:46.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:09:46.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:09:46.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:09:46.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:09:46.626 [DEBUG] [Thread-60548] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:09:58.579 [DEBUG] [Thread-60550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:10:13.619 [DEBUG] [Thread-60551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:10:14.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:10:14.543 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:10:16.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:10:16.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:10:16.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:10:17.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 10, 10), 18.84, 27.8, 0.0, 16.06, 17.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:10:17.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:10:10
2025-11-17T20:10:17.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:10:17.561 [DEBUG] [Thread-60552] [transport.py] [_log()] starting thread (client mode): 0xd3134910
2025-11-17T20:10:17.561 [DEBUG] [Thread-60552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:10:17.576 [DEBUG] [Thread-60552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:10:17.576 [INFO] [Thread-60552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] client lang: <none>
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] server lang: <none>
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] kex follows: False
2025-11-17T20:10:17.580 [DEBUG] [Thread-60552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:10:17.581 [DEBUG] [Thread-60552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:10:17.581 [DEBUG] [Thread-60552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:10:17.581 [DEBUG] [Thread-60552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:10:17.581 [DEBUG] [Thread-60552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:10:17.581 [DEBUG] [Thread-60552] [transport.py] [_log()] Compression: none
2025-11-17T20:10:17.581 [DEBUG] [Thread-60552] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:10:17.598 [DEBUG] [Thread-60552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:10:17.599 [DEBUG] [Thread-60552] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:10:17.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:10:17.600 [DEBUG] [Thread-60552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:10:17.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:10:17.602 [DEBUG] [Thread-60552] [transport.py] [_log()] userauth is OK
2025-11-17T20:10:17.602 [DEBUG] [Thread-60552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:10:17.602 [DEBUG] [Thread-60552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:10:17.602 [DEBUG] [Thread-60552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:10:17.602 [DEBUG] [Thread-60552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:10:17.618 [INFO] [Thread-60552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:10:17.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:10:18.290 [DEBUG] [Thread-60552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:10:18.290 [DEBUG] [Thread-60552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:10:18.291 [DEBUG] [Thread-60552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:10:18.331 [DEBUG] [Thread-60552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:10:18.332 [DEBUG] [Thread-60552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:10:18.335 [DEBUG] [Thread-60552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:10:18.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:10:18.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:10:18.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:10:18.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:10:18.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:10:18.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:10:18.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:10:18.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:10:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:10:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.756647 -999.00  +18.10  11.27     33   +1.70 1 2 1 1 1     2    0 11.50 -316.78 ZNES. 15.2 11.3 179.6 14.2 18.6 -24.1 18.5 -23.4 18.4 -22.6 18.6 -23.6
2025-11-17T20:10:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:10:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:10:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.756647
2025-11-17T20:10:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:10:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:10:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:10:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:10:18.363 [DEBUG] [Thread-60552] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:10:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:10:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:10:10', tmtdew=18.84, humidity=27.8, cloud=0.0, wind=16.06, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:09:34.301', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:10:18.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:10:18.460 [DEBUG] [Thread-60555] [transport.py] [_log()] starting thread (client mode): 0xd31b1840
2025-11-17T20:10:18.460 [DEBUG] [Thread-60555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:10:18.479 [DEBUG] [Thread-60555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:10:18.480 [INFO] [Thread-60555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:10:18.487 [DEBUG] [Thread-60555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:10:18.487 [DEBUG] [Thread-60555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:10:18.487 [DEBUG] [Thread-60555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:10:18.487 [DEBUG] [Thread-60555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:10:18.487 [DEBUG] [Thread-60555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:10:18.487 [DEBUG] [Thread-60555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] client lang: <none>
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] server lang: <none>
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] kex follows: False
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] Compression: none
2025-11-17T20:10:18.488 [DEBUG] [Thread-60555] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:10:18.547 [DEBUG] [Thread-60555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:10:18.547 [DEBUG] [Thread-60555] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:10:18.548 [DEBUG] [Thread-60555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:10:18.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:10:18.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:10:18.603 [DEBUG] [Thread-60555] [transport.py] [_log()] userauth is OK
2025-11-17T20:10:18.603 [DEBUG] [Thread-60555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:10:18.603 [DEBUG] [Thread-60555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:10:18.603 [DEBUG] [Thread-60555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:10:18.603 [DEBUG] [Thread-60555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:10:18.622 [INFO] [Thread-60555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:10:18.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:10:18.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:10:19.463 [DEBUG] [Thread-60555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:10:19.463 [DEBUG] [Thread-60555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:10:19.511 [DEBUG] [Thread-60555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:10:19.511 [DEBUG] [Thread-60555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:10:19.520 [DEBUG] [Thread-60555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:10:19.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:10:19.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:10:19.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:10:19.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:10:19.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:10:19.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:10:19.555 [DEBUG] [Thread-60555] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:10:28.643 [DEBUG] [Thread-60557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:10:34.622 [DEBUG] [Thread-60558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:10:43.684 [DEBUG] [Thread-60559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:10:49.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:10:49.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:10:49.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:10:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 10, 42), 18.7, 27.88, 0.0, 18.35, 17.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:10:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:10:42
2025-11-17T20:10:50.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:10:50.495 [DEBUG] [Thread-60560] [transport.py] [_log()] starting thread (client mode): 0xd7bc53c0
2025-11-17T20:10:50.495 [DEBUG] [Thread-60560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:10:50.515 [DEBUG] [Thread-60560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:10:50.515 [INFO] [Thread-60560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] client lang: <none>
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] server lang: <none>
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] kex follows: False
2025-11-17T20:10:50.517 [DEBUG] [Thread-60560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:10:50.518 [DEBUG] [Thread-60560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:10:50.518 [DEBUG] [Thread-60560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:10:50.518 [DEBUG] [Thread-60560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:10:50.518 [DEBUG] [Thread-60560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:10:50.518 [DEBUG] [Thread-60560] [transport.py] [_log()] Compression: none
2025-11-17T20:10:50.518 [DEBUG] [Thread-60560] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:10:50.536 [DEBUG] [Thread-60560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:10:50.537 [DEBUG] [Thread-60560] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:10:50.537 [DEBUG] [Thread-60560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:10:50.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:10:50.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:10:50.539 [DEBUG] [Thread-60560] [transport.py] [_log()] userauth is OK
2025-11-17T20:10:50.539 [DEBUG] [Thread-60560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:10:50.540 [DEBUG] [Thread-60560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:10:50.540 [DEBUG] [Thread-60560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:10:50.540 [DEBUG] [Thread-60560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:10:50.564 [INFO] [Thread-60560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:10:50.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:10:51.205 [DEBUG] [Thread-60560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:10:51.206 [DEBUG] [Thread-60560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:10:51.206 [DEBUG] [Thread-60560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:10:51.246 [DEBUG] [Thread-60560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:10:51.247 [DEBUG] [Thread-60560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:10:51.249 [DEBUG] [Thread-60560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:10:51.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:10:51.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:10:51.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:10:51.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:10:51.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:10:51.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:10:51.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:10:51.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:10:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:10:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.757341 -999.00  +18.10  12.80     33   +1.80 1 2 1 1 1     2    0 10.45 -346.67 ZNES. 11.6 12.8 164.2 17.3 18.6 -24.2 18.6 -23.2 18.3 -22.6 18.6 -23.3
2025-11-17T20:10:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:10:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:10:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.757341
2025-11-17T20:10:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:10:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:10:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:10:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:10:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:10:51.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:10:42', tmtdew=18.7, humidity=27.88, cloud=0.0, wind=18.35, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:10:34.262', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:10:51.275 [DEBUG] [Thread-60560] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:10:51.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:10:51.373 [DEBUG] [Thread-60563] [transport.py] [_log()] starting thread (client mode): 0xd31ef760
2025-11-17T20:10:51.374 [DEBUG] [Thread-60563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:10:51.391 [DEBUG] [Thread-60563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:10:51.391 [INFO] [Thread-60563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:10:51.401 [DEBUG] [Thread-60563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:10:51.401 [DEBUG] [Thread-60563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:10:51.401 [DEBUG] [Thread-60563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:10:51.401 [DEBUG] [Thread-60563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:10:51.401 [DEBUG] [Thread-60563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] client lang: <none>
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] server lang: <none>
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] kex follows: False
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:10:51.402 [DEBUG] [Thread-60563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:10:51.403 [DEBUG] [Thread-60563] [transport.py] [_log()] Compression: none
2025-11-17T20:10:51.403 [DEBUG] [Thread-60563] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:10:51.466 [DEBUG] [Thread-60563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:10:51.467 [DEBUG] [Thread-60563] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:10:51.467 [DEBUG] [Thread-60563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:10:51.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:10:51.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:10:51.526 [DEBUG] [Thread-60563] [transport.py] [_log()] userauth is OK
2025-11-17T20:10:51.526 [DEBUG] [Thread-60563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:10:51.526 [DEBUG] [Thread-60563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:10:51.526 [DEBUG] [Thread-60563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:10:51.526 [DEBUG] [Thread-60563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:10:51.546 [INFO] [Thread-60563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:10:51.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:10:51.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:10:52.475 [DEBUG] [Thread-60563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:10:52.475 [DEBUG] [Thread-60563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:10:52.523 [DEBUG] [Thread-60563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:10:52.523 [DEBUG] [Thread-60563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:10:52.532 [DEBUG] [Thread-60563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:10:52.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:10:52.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:10:52.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:10:52.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:10:52.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:10:52.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:10:52.567 [DEBUG] [Thread-60563] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:10:58.710 [DEBUG] [Thread-60565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:11:13.748 [DEBUG] [Thread-60566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:11:22.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:11:22.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:11:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:11:23.097 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:11:23.098 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:11:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 11, 14), 18.69, 27.91, 0.0, 18.05, 17.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:11:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:11:14
2025-11-17T20:11:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:11:23.517 [DEBUG] [Thread-60567] [transport.py] [_log()] starting thread (client mode): 0xd3135690
2025-11-17T20:11:23.517 [DEBUG] [Thread-60567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:11:23.538 [DEBUG] [Thread-60567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:11:23.538 [INFO] [Thread-60567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:11:23.539 [DEBUG] [Thread-60567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] client lang: <none>
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] server lang: <none>
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] kex follows: False
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:11:23.540 [DEBUG] [Thread-60567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:11:23.541 [DEBUG] [Thread-60567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:11:23.541 [DEBUG] [Thread-60567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:11:23.541 [DEBUG] [Thread-60567] [transport.py] [_log()] Compression: none
2025-11-17T20:11:23.541 [DEBUG] [Thread-60567] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:11:23.554 [DEBUG] [Thread-60567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:11:23.555 [DEBUG] [Thread-60567] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:11:23.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:11:23.556 [DEBUG] [Thread-60567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:11:23.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:11:23.558 [DEBUG] [Thread-60567] [transport.py] [_log()] userauth is OK
2025-11-17T20:11:23.559 [DEBUG] [Thread-60567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:11:23.559 [DEBUG] [Thread-60567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:11:23.559 [DEBUG] [Thread-60567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:11:23.559 [DEBUG] [Thread-60567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:11:23.582 [INFO] [Thread-60567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:11:23.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:11:24.188 [DEBUG] [Thread-60567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:11:24.188 [DEBUG] [Thread-60567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:11:24.188 [DEBUG] [Thread-60567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:11:24.230 [DEBUG] [Thread-60567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:11:24.230 [DEBUG] [Thread-60567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:11:24.233 [DEBUG] [Thread-60567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:11:24.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:11:24.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:11:24.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:11:24.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:11:24.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:11:24.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:11:24.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:11:24.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:11:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:11:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.757688 -999.00  +18.10  14.17     33   +1.90 1 2 1 1 1     2    0 9.51 -365.22 ZNES. 15.8 14.2 152.0 19.4 18.6 -24.2 18.6 -23.2 18.3 -22.6 18.6 -23.5
2025-11-17T20:11:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:11:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:11:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.757688
2025-11-17T20:11:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:11:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:11:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:11:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:11:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:11:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:11:14', tmtdew=18.69, humidity=27.91, cloud=0.0, wind=18.05, temperature=17.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:11:04.243', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:11:24.260 [DEBUG] [Thread-60567] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:11:24.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:11:24.361 [DEBUG] [Thread-60570] [transport.py] [_log()] starting thread (client mode): 0xd3135f60
2025-11-17T20:11:24.362 [DEBUG] [Thread-60570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:11:24.377 [DEBUG] [Thread-60570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:11:24.377 [INFO] [Thread-60570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:11:24.385 [DEBUG] [Thread-60570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:11:24.385 [DEBUG] [Thread-60570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:11:24.385 [DEBUG] [Thread-60570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] client lang: <none>
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] server lang: <none>
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] kex follows: False
2025-11-17T20:11:24.386 [DEBUG] [Thread-60570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:11:24.387 [DEBUG] [Thread-60570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:11:24.387 [DEBUG] [Thread-60570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:11:24.387 [DEBUG] [Thread-60570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:11:24.387 [DEBUG] [Thread-60570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:11:24.387 [DEBUG] [Thread-60570] [transport.py] [_log()] Compression: none
2025-11-17T20:11:24.387 [DEBUG] [Thread-60570] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:11:24.447 [DEBUG] [Thread-60570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:11:24.447 [DEBUG] [Thread-60570] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:11:24.448 [DEBUG] [Thread-60570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:11:24.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:11:24.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:11:24.507 [DEBUG] [Thread-60570] [transport.py] [_log()] userauth is OK
2025-11-17T20:11:24.508 [DEBUG] [Thread-60570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:11:24.508 [DEBUG] [Thread-60570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:11:24.508 [DEBUG] [Thread-60570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:11:24.508 [DEBUG] [Thread-60570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:11:24.531 [INFO] [Thread-60570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:11:24.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:11:24.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:11:25.398 [DEBUG] [Thread-60570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:11:25.398 [DEBUG] [Thread-60570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:11:25.446 [DEBUG] [Thread-60570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:11:25.446 [DEBUG] [Thread-60570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:11:25.455 [DEBUG] [Thread-60570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:11:25.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:11:25.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:11:25.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:11:25.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:11:25.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:11:25.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:11:25.489 [DEBUG] [Thread-60570] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:11:28.773 [DEBUG] [Thread-60572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:11:34.699 [DEBUG] [Thread-60573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:11:43.816 [DEBUG] [Thread-60574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:11:55.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:11:55.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:11:55.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:11:56.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 11, 46), 18.66, 27.98, 0.0, 16.36, 18.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:11:56.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:11:46
2025-11-17T20:11:56.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:11:56.441 [DEBUG] [Thread-60575] [transport.py] [_log()] starting thread (client mode): 0xd07cd180
2025-11-17T20:11:56.441 [DEBUG] [Thread-60575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:11:56.461 [DEBUG] [Thread-60575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:11:56.461 [INFO] [Thread-60575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:11:56.464 [DEBUG] [Thread-60575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] client lang: <none>
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] server lang: <none>
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] kex follows: False
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] Compression: none
2025-11-17T20:11:56.465 [DEBUG] [Thread-60575] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:11:56.475 [DEBUG] [Thread-60575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:11:56.476 [DEBUG] [Thread-60575] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:11:56.476 [DEBUG] [Thread-60575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:11:56.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:11:56.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:11:56.478 [DEBUG] [Thread-60575] [transport.py] [_log()] userauth is OK
2025-11-17T20:11:56.478 [DEBUG] [Thread-60575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:11:56.478 [DEBUG] [Thread-60575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:11:56.478 [DEBUG] [Thread-60575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:11:56.478 [DEBUG] [Thread-60575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:11:56.502 [INFO] [Thread-60575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:11:56.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:11:57.092 [DEBUG] [Thread-60575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:11:57.092 [DEBUG] [Thread-60575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:11:57.092 [DEBUG] [Thread-60575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:11:57.133 [DEBUG] [Thread-60575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:11:57.134 [DEBUG] [Thread-60575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:11:57.136 [DEBUG] [Thread-60575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:11:57.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:11:57.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:11:57.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:11:57.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:11:57.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:11:57.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:11:57.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:11:57.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:11:57.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:11:57.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.758036 -999.00  +18.10  14.04     33   +2.00 1 2 1 1 1     2    0 9.36 -355.98 ZNES. 13.1 14.0 156.6 20.3 18.6 -24.1 18.5 -22.9 18.2 -22.3 18.5 -23.2
2025-11-17T20:11:57.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:11:57.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:11:57.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.758036
2025-11-17T20:11:57.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:11:57.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:11:57.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:11:57.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:11:57.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:11:57.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:11:46', tmtdew=18.66, humidity=27.98, cloud=0.0, wind=16.36, temperature=18.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:11:34.310', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:11:57.163 [DEBUG] [Thread-60575] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:11:57.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:11:57.261 [DEBUG] [Thread-60578] [transport.py] [_log()] starting thread (client mode): 0xd07cff10
2025-11-17T20:11:57.261 [DEBUG] [Thread-60578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:11:57.277 [DEBUG] [Thread-60578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:11:57.277 [INFO] [Thread-60578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:11:57.285 [DEBUG] [Thread-60578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:11:57.285 [DEBUG] [Thread-60578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] client lang: <none>
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] server lang: <none>
2025-11-17T20:11:57.286 [DEBUG] [Thread-60578] [transport.py] [_log()] kex follows: False
2025-11-17T20:11:57.287 [DEBUG] [Thread-60578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:11:57.287 [DEBUG] [Thread-60578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:11:57.287 [DEBUG] [Thread-60578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:11:57.287 [DEBUG] [Thread-60578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:11:57.287 [DEBUG] [Thread-60578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:11:57.287 [DEBUG] [Thread-60578] [transport.py] [_log()] Compression: none
2025-11-17T20:11:57.287 [DEBUG] [Thread-60578] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:11:57.342 [DEBUG] [Thread-60578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:11:57.343 [DEBUG] [Thread-60578] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:11:57.344 [DEBUG] [Thread-60578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:11:57.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:11:57.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:11:57.405 [DEBUG] [Thread-60578] [transport.py] [_log()] userauth is OK
2025-11-17T20:11:57.405 [DEBUG] [Thread-60578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:11:57.405 [DEBUG] [Thread-60578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:11:57.405 [DEBUG] [Thread-60578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:11:57.406 [DEBUG] [Thread-60578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:11:57.428 [INFO] [Thread-60578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:11:57.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:11:57.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:11:58.330 [DEBUG] [Thread-60578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:11:58.330 [DEBUG] [Thread-60578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:11:58.378 [DEBUG] [Thread-60578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:11:58.378 [DEBUG] [Thread-60578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:11:58.387 [DEBUG] [Thread-60578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:11:58.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:11:58.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:11:58.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:11:58.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:11:58.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:11:58.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:11:58.420 [DEBUG] [Thread-60578] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:11:58.849 [DEBUG] [Thread-60580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:12:13.889 [DEBUG] [Thread-60581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:12:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:12:28.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:12:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:12:28.920 [DEBUG] [Thread-60582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:12:28.935 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:12:28.936 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 12, 18), 18.67, 27.95, 0.0, 16.53, 17.99, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:12:18
2025-11-17T20:12:29.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:12:29.368 [DEBUG] [Thread-60583] [transport.py] [_log()] starting thread (client mode): 0xd07cec50
2025-11-17T20:12:29.368 [DEBUG] [Thread-60583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:12:29.385 [DEBUG] [Thread-60583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:12:29.385 [INFO] [Thread-60583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:12:29.388 [DEBUG] [Thread-60583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] client lang: <none>
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] server lang: <none>
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] kex follows: False
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] Compression: none
2025-11-17T20:12:29.389 [DEBUG] [Thread-60583] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:12:29.407 [DEBUG] [Thread-60583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:12:29.407 [DEBUG] [Thread-60583] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:12:29.407 [DEBUG] [Thread-60583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:12:29.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:12:29.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:12:29.408 [DEBUG] [Thread-60583] [transport.py] [_log()] userauth is OK
2025-11-17T20:12:29.408 [DEBUG] [Thread-60583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:12:29.408 [DEBUG] [Thread-60583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:12:29.408 [DEBUG] [Thread-60583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:12:29.408 [DEBUG] [Thread-60583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:12:29.418 [INFO] [Thread-60583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:12:29.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:12:29.989 [DEBUG] [Thread-60583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:12:29.989 [DEBUG] [Thread-60583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:12:29.989 [DEBUG] [Thread-60583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:12:30.030 [DEBUG] [Thread-60583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:12:30.030 [DEBUG] [Thread-60583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:12:30.032 [DEBUG] [Thread-60583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:12:30.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:12:30.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:12:30.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:12:30.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:12:30.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:12:30.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:12:30.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:12:30.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:12:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:12:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.758383 -999.00  +18.10  12.00     33   +2.00 1 2 1 1 1     1    0 10.04 -359.32 ZNES. 14.3 12.0 147.0 20.1 18.6 -23.9 18.5 -22.9 18.3 -22.3 18.5 -23.0
2025-11-17T20:12:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:12:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:12:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.758383
2025-11-17T20:12:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:12:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:12:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:12:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:12:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:12:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:12:18', tmtdew=18.67, humidity=27.95, cloud=0.0, wind=16.53, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:12:04.291', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T02:39:00')
2025-11-17T20:12:30.050 [DEBUG] [Thread-60583] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:12:30.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:12:30.138 [DEBUG] [Thread-60586] [transport.py] [_log()] starting thread (client mode): 0xd3134520
2025-11-17T20:12:30.138 [DEBUG] [Thread-60586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:12:30.154 [DEBUG] [Thread-60586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:12:30.154 [INFO] [Thread-60586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] client lang: <none>
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] server lang: <none>
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] kex follows: False
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:12:30.161 [DEBUG] [Thread-60586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:12:30.162 [DEBUG] [Thread-60586] [transport.py] [_log()] Compression: none
2025-11-17T20:12:30.162 [DEBUG] [Thread-60586] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:12:30.217 [DEBUG] [Thread-60586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:12:30.217 [DEBUG] [Thread-60586] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:12:30.218 [DEBUG] [Thread-60586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:12:30.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:12:30.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:12:30.278 [DEBUG] [Thread-60586] [transport.py] [_log()] userauth is OK
2025-11-17T20:12:30.278 [DEBUG] [Thread-60586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:12:30.278 [DEBUG] [Thread-60586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:12:30.278 [DEBUG] [Thread-60586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:12:30.278 [DEBUG] [Thread-60586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:12:30.296 [INFO] [Thread-60586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:12:30.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:12:30.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:12:31.167 [DEBUG] [Thread-60586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:12:31.168 [DEBUG] [Thread-60586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:12:31.215 [DEBUG] [Thread-60586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:12:31.215 [DEBUG] [Thread-60586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:12:31.223 [DEBUG] [Thread-60586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:12:31.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:12:31.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:12:31.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:12:31.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:12:31.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:12:31.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:12:31.257 [DEBUG] [Thread-60586] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:12:34.756 [DEBUG] [Thread-60588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:12:43.948 [DEBUG] [Thread-60589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:12:58.989 [DEBUG] [Thread-60590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:13:01.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:13:01.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:13:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:13:01.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 12, 50), 18.61, 28.46, 0.0, 15.6, 17.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:13:01.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:12:50
2025-11-17T20:13:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:13:02.202 [DEBUG] [Thread-60591] [transport.py] [_log()] starting thread (client mode): 0xd078e5c0
2025-11-17T20:13:02.202 [DEBUG] [Thread-60591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:13:02.221 [DEBUG] [Thread-60591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:13:02.222 [INFO] [Thread-60591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] client lang: <none>
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] server lang: <none>
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] kex follows: False
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] Compression: none
2025-11-17T20:13:02.225 [DEBUG] [Thread-60591] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:13:02.240 [DEBUG] [Thread-60591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:13:02.241 [DEBUG] [Thread-60591] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:13:02.241 [DEBUG] [Thread-60591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:13:02.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:13:02.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:13:02.242 [DEBUG] [Thread-60591] [transport.py] [_log()] userauth is OK
2025-11-17T20:13:02.242 [DEBUG] [Thread-60591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:13:02.242 [DEBUG] [Thread-60591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:13:02.242 [DEBUG] [Thread-60591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:13:02.242 [DEBUG] [Thread-60591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:13:02.252 [INFO] [Thread-60591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:13:02.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:13:02.887 [DEBUG] [Thread-60591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:13:02.887 [DEBUG] [Thread-60591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:13:02.888 [DEBUG] [Thread-60591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:13:02.928 [DEBUG] [Thread-60591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:13:02.928 [DEBUG] [Thread-60591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:13:02.933 [DEBUG] [Thread-60591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:13:02.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:13:02.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:13:02.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:13:02.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:13:02.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:13:02.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:13:02.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:13:02.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:13:02.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:13:02.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.758383 -999.00  +18.10  12.00     33   +2.00 1 2 1 1 1     1    0 10.04 -359.32 ZNES. 14.3 12.0 147.0 20.1 18.6 -23.9 18.5 -22.9 18.3 -22.3 18.5 -23.0
2025-11-17T20:13:02.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:13:02.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:13:02.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.758383
2025-11-17T20:13:02.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:13:02.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:13:02.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:13:02.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:13:02.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:13:02.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:12:50', tmtdew=18.61, humidity=28.46, cloud=0.0, wind=15.6, temperature=17.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:12:04.291', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T18:11:00')
2025-11-17T20:13:02.958 [DEBUG] [Thread-60591] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:13:03.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:13:03.056 [DEBUG] [Thread-60594] [transport.py] [_log()] starting thread (client mode): 0xd0786f80
2025-11-17T20:13:03.056 [DEBUG] [Thread-60594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:13:03.071 [DEBUG] [Thread-60594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:13:03.071 [INFO] [Thread-60594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:13:03.078 [DEBUG] [Thread-60594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] client lang: <none>
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] server lang: <none>
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] kex follows: False
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] Compression: none
2025-11-17T20:13:03.079 [DEBUG] [Thread-60594] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:13:03.137 [DEBUG] [Thread-60594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:13:03.137 [DEBUG] [Thread-60594] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:13:03.138 [DEBUG] [Thread-60594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:13:03.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:13:03.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:13:03.195 [DEBUG] [Thread-60594] [transport.py] [_log()] userauth is OK
2025-11-17T20:13:03.195 [DEBUG] [Thread-60594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:13:03.195 [DEBUG] [Thread-60594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:13:03.195 [DEBUG] [Thread-60594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:13:03.195 [DEBUG] [Thread-60594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:13:03.210 [INFO] [Thread-60594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:13:03.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:13:03.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:13:04.060 [DEBUG] [Thread-60594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:13:04.060 [DEBUG] [Thread-60594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:13:04.108 [DEBUG] [Thread-60594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:13:04.108 [DEBUG] [Thread-60594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:13:04.116 [DEBUG] [Thread-60594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:13:04.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:13:04.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:13:04.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:13:04.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:13:04.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:13:04.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:13:04.150 [DEBUG] [Thread-60594] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:13:14.017 [DEBUG] [Thread-60596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:13:29.060 [DEBUG] [Thread-60597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:13:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:13:34.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:13:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:13:34.371 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:13:34.372 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:13:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 13, 22), 18.57, 28.55, 0.0, 15.07, 17.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:13:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:13:22
2025-11-17T20:13:34.809 [DEBUG] [Thread-60598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:13:34.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:13:35.073 [DEBUG] [Thread-60599] [transport.py] [_log()] starting thread (client mode): 0xd0786ce0
2025-11-17T20:13:35.074 [DEBUG] [Thread-60599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:13:35.094 [DEBUG] [Thread-60599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:13:35.094 [INFO] [Thread-60599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] client lang: <none>
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] server lang: <none>
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] kex follows: False
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:13:35.097 [DEBUG] [Thread-60599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:13:35.098 [DEBUG] [Thread-60599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:13:35.098 [DEBUG] [Thread-60599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:13:35.098 [DEBUG] [Thread-60599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:13:35.098 [DEBUG] [Thread-60599] [transport.py] [_log()] Compression: none
2025-11-17T20:13:35.098 [DEBUG] [Thread-60599] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:13:35.115 [DEBUG] [Thread-60599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:13:35.115 [DEBUG] [Thread-60599] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:13:35.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:13:35.116 [DEBUG] [Thread-60599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:13:35.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:13:35.118 [DEBUG] [Thread-60599] [transport.py] [_log()] userauth is OK
2025-11-17T20:13:35.118 [DEBUG] [Thread-60599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:13:35.118 [DEBUG] [Thread-60599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:13:35.119 [DEBUG] [Thread-60599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:13:35.119 [DEBUG] [Thread-60599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:13:35.154 [INFO] [Thread-60599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:13:35.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:13:35.964 [DEBUG] [Thread-60599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:13:35.964 [DEBUG] [Thread-60599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:13:35.964 [DEBUG] [Thread-60599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:13:36.004 [DEBUG] [Thread-60599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:13:36.005 [DEBUG] [Thread-60599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:13:36.007 [DEBUG] [Thread-60599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:13:36.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:13:36.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:13:36.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:13:36.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:13:36.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:13:36.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:13:36.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:13:36.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:13:36.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:13:36.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.758730 -999.00  +18.10  11.48     33   +1.90 1 2 1 1 1     1    0 9.75 -361.30 ZNES. 13.5 11.5 162.3 15.3 18.5 -23.7 18.5 -22.9 18.2 -22.2 18.5 -23.0
2025-11-17T20:13:36.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:13:36.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:13:36.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.758730
2025-11-17T20:13:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:13:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:13:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:13:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:13:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:13:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:13:22', tmtdew=18.57, humidity=28.55, cloud=0.0, wind=15.07, temperature=17.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T03:57:44', seeing=2.44, atlas_timestamp='2025-11-17T18:12:34.272', atlas_cloud=2, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T18:11:00')
2025-11-17T20:13:36.031 [DEBUG] [Thread-60599] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:13:36.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:13:36.128 [DEBUG] [Thread-60602] [transport.py] [_log()] starting thread (client mode): 0xd31cefe0
2025-11-17T20:13:36.128 [DEBUG] [Thread-60602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:13:36.143 [DEBUG] [Thread-60602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:13:36.143 [INFO] [Thread-60602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:13:36.151 [DEBUG] [Thread-60602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:13:36.152 [DEBUG] [Thread-60602] [transport.py] [_log()] client lang: <none>
2025-11-17T20:13:36.152 [DEBUG] [Thread-60602] [transport.py] [_log()] server lang: <none>
2025-11-17T20:13:36.152 [DEBUG] [Thread-60602] [transport.py] [_log()] kex follows: False
2025-11-17T20:13:36.152 [DEBUG] [Thread-60602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:13:36.152 [DEBUG] [Thread-60602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:13:36.152 [DEBUG] [Thread-60602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:13:36.152 [DEBUG] [Thread-60602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:13:36.152 [DEBUG] [Thread-60602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:13:36.153 [DEBUG] [Thread-60602] [transport.py] [_log()] Compression: none
2025-11-17T20:13:36.153 [DEBUG] [Thread-60602] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:13:36.210 [DEBUG] [Thread-60602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:13:36.211 [DEBUG] [Thread-60602] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:13:36.212 [DEBUG] [Thread-60602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:13:36.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:13:36.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:13:36.266 [DEBUG] [Thread-60602] [transport.py] [_log()] userauth is OK
2025-11-17T20:13:36.266 [DEBUG] [Thread-60602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:13:36.266 [DEBUG] [Thread-60602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:13:36.267 [DEBUG] [Thread-60602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:13:36.267 [DEBUG] [Thread-60602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:13:36.287 [INFO] [Thread-60602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:13:36.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:13:36.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:13:37.154 [DEBUG] [Thread-60602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:13:37.154 [DEBUG] [Thread-60602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:13:37.201 [DEBUG] [Thread-60602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:13:37.201 [DEBUG] [Thread-60602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:13:37.210 [DEBUG] [Thread-60602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:13:37.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:13:37.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:13:37.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:13:37.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:13:37.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:13:37.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:13:37.245 [DEBUG] [Thread-60602] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:13:44.090 [DEBUG] [Thread-60604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:13:59.132 [DEBUG] [Thread-60605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:14:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:14:07.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:14:07.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:14:07.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 13, 54), 18.59, 28.51, 0.0, 15.56, 17.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:14:07.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:13:54
2025-11-17T20:14:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:14:08.182 [DEBUG] [Thread-60606] [transport.py] [_log()] starting thread (client mode): 0xd07cf040
2025-11-17T20:14:08.182 [DEBUG] [Thread-60606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:14:08.201 [DEBUG] [Thread-60606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:14:08.201 [INFO] [Thread-60606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] client lang: <none>
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] server lang: <none>
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] kex follows: False
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:14:08.205 [DEBUG] [Thread-60606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:14:08.206 [DEBUG] [Thread-60606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:14:08.206 [DEBUG] [Thread-60606] [transport.py] [_log()] Compression: none
2025-11-17T20:14:08.206 [DEBUG] [Thread-60606] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:14:08.223 [DEBUG] [Thread-60606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:14:08.223 [DEBUG] [Thread-60606] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:14:08.224 [DEBUG] [Thread-60606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:14:08.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:14:08.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:14:08.225 [DEBUG] [Thread-60606] [transport.py] [_log()] userauth is OK
2025-11-17T20:14:08.226 [DEBUG] [Thread-60606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:14:08.226 [DEBUG] [Thread-60606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:14:08.226 [DEBUG] [Thread-60606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:14:08.226 [DEBUG] [Thread-60606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:14:08.250 [INFO] [Thread-60606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:14:08.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:14:08.879 [DEBUG] [Thread-60606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:14:08.879 [DEBUG] [Thread-60606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:14:08.879 [DEBUG] [Thread-60606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:14:08.919 [DEBUG] [Thread-60606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:14:08.919 [DEBUG] [Thread-60606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:14:08.922 [DEBUG] [Thread-60606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:14:08.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:14:08.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:14:08.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:14:08.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:14:08.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:14:08.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:14:08.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:14:08.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:14:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:14:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.759077 -999.00  +18.10  13.52     33   +1.90 1 1 1 1 1     1    0 9.79 -332.60 ZNESW 11.1 13.5 143.2 16.2 18.5 -23.8 18.4 -22.7 18.2 -22.0 18.5 -23.0
2025-11-17T20:14:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:14:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:14:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.759077
2025-11-17T20:14:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:14:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:14:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:14:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:14:08.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:14:08.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:13:54', tmtdew=18.59, humidity=28.51, cloud=0.0, wind=15.56, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:13:54', seeing=1.79, atlas_timestamp='2025-11-17T18:13:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T18:11:00')
2025-11-17T20:14:08.948 [DEBUG] [Thread-60606] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:14:09.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:14:09.040 [DEBUG] [Thread-60609] [transport.py] [_log()] starting thread (client mode): 0xd7bc7bb0
2025-11-17T20:14:09.040 [DEBUG] [Thread-60609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:14:09.055 [DEBUG] [Thread-60609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:14:09.055 [INFO] [Thread-60609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:14:09.062 [DEBUG] [Thread-60609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] client lang: <none>
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] server lang: <none>
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] kex follows: False
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] Compression: none
2025-11-17T20:14:09.063 [DEBUG] [Thread-60609] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:14:09.126 [DEBUG] [Thread-60609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:14:09.126 [DEBUG] [Thread-60609] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:14:09.127 [DEBUG] [Thread-60609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:14:09.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:14:09.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:14:09.183 [DEBUG] [Thread-60609] [transport.py] [_log()] userauth is OK
2025-11-17T20:14:09.183 [DEBUG] [Thread-60609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:14:09.183 [DEBUG] [Thread-60609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:14:09.183 [DEBUG] [Thread-60609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:14:09.184 [DEBUG] [Thread-60609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:14:09.203 [INFO] [Thread-60609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:14:09.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:14:09.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:14:10.062 [DEBUG] [Thread-60609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:14:10.062 [DEBUG] [Thread-60609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:14:10.109 [DEBUG] [Thread-60609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:14:10.110 [DEBUG] [Thread-60609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:14:10.119 [DEBUG] [Thread-60609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:14:10.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:14:10.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:14:10.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:14:10.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:14:10.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:14:10.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:14:10.156 [DEBUG] [Thread-60609] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:14:14.162 [DEBUG] [Thread-60611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:14:29.210 [DEBUG] [Thread-60612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:14:34.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:14:34.574 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:14:34.862 [DEBUG] [Thread-60613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:14:40.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:14:40.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:14:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:14:40.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 14, 26), 18.63, 28.41, 0.0, 16.13, 17.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:14:40.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:14:26
2025-11-17T20:14:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:14:41.097 [DEBUG] [Thread-60614] [transport.py] [_log()] starting thread (client mode): 0xd07bf100
2025-11-17T20:14:41.097 [DEBUG] [Thread-60614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:14:41.117 [DEBUG] [Thread-60614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:14:41.117 [INFO] [Thread-60614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:14:41.120 [DEBUG] [Thread-60614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:14:41.120 [DEBUG] [Thread-60614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:14:41.120 [DEBUG] [Thread-60614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:14:41.120 [DEBUG] [Thread-60614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:14:41.120 [DEBUG] [Thread-60614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] client lang: <none>
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] server lang: <none>
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] kex follows: False
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] Compression: none
2025-11-17T20:14:41.121 [DEBUG] [Thread-60614] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:14:41.138 [DEBUG] [Thread-60614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:14:41.138 [DEBUG] [Thread-60614] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:14:41.138 [DEBUG] [Thread-60614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:14:41.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:14:41.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:14:41.138 [DEBUG] [Thread-60614] [transport.py] [_log()] userauth is OK
2025-11-17T20:14:41.139 [DEBUG] [Thread-60614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:14:41.139 [DEBUG] [Thread-60614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:14:41.139 [DEBUG] [Thread-60614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:14:41.139 [DEBUG] [Thread-60614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:14:41.148 [INFO] [Thread-60614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:14:41.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:14:41.920 [DEBUG] [Thread-60614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:14:41.920 [DEBUG] [Thread-60614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:14:41.920 [DEBUG] [Thread-60614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:14:41.961 [DEBUG] [Thread-60614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:14:41.961 [DEBUG] [Thread-60614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:14:41.963 [DEBUG] [Thread-60614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:14:41.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:14:41.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:14:41.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:14:41.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:14:41.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:14:41.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:14:41.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.759772 -999.00  +18.10  10.70     33   +1.90 1 1 1 1 1     1    0 9.77 -353.93 ZNESW 10.4 10.7 148.4 13.8 18.5 -23.5 18.4 -22.6 18.2 -21.9 18.5 -22.7
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.759772
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:14:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:14:26', tmtdew=18.63, humidity=28.41, cloud=0.0, wind=16.13, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:14:26', seeing=1.43, atlas_timestamp='2025-11-17T18:14:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T18:11:00')
2025-11-17T20:14:41.979 [DEBUG] [Thread-60614] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:14:42.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:14:42.064 [DEBUG] [Thread-60617] [transport.py] [_log()] starting thread (client mode): 0xd31b2200
2025-11-17T20:14:42.064 [DEBUG] [Thread-60617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:14:42.085 [DEBUG] [Thread-60617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:14:42.085 [INFO] [Thread-60617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] client lang: <none>
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] server lang: <none>
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] kex follows: False
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] Compression: none
2025-11-17T20:14:42.093 [DEBUG] [Thread-60617] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:14:42.148 [DEBUG] [Thread-60617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:14:42.148 [DEBUG] [Thread-60617] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:14:42.148 [DEBUG] [Thread-60617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:14:42.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:14:42.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:14:42.205 [DEBUG] [Thread-60617] [transport.py] [_log()] userauth is OK
2025-11-17T20:14:42.206 [DEBUG] [Thread-60617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:14:42.206 [DEBUG] [Thread-60617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:14:42.206 [DEBUG] [Thread-60617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:14:42.206 [DEBUG] [Thread-60617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:14:42.219 [INFO] [Thread-60617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:14:42.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:14:42.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:14:43.046 [DEBUG] [Thread-60617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:14:43.046 [DEBUG] [Thread-60617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:14:43.094 [DEBUG] [Thread-60617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:14:43.094 [DEBUG] [Thread-60617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:14:43.102 [DEBUG] [Thread-60617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:14:43.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:14:43.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:14:43.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:14:43.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:14:43.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:14:43.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:14:43.134 [DEBUG] [Thread-60617] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:14:44.236 [DEBUG] [Thread-60619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:14:59.275 [DEBUG] [Thread-60620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:15:13.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:15:13.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:15:13.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:15:13.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 14, 58), 18.59, 28.48, 0.0, 15.42, 17.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:15:13.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:14:58
2025-11-17T20:15:13.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:15:14.099 [DEBUG] [Thread-60621] [transport.py] [_log()] starting thread (client mode): 0xd0784670
2025-11-17T20:15:14.099 [DEBUG] [Thread-60621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:15:14.118 [DEBUG] [Thread-60621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:15:14.118 [INFO] [Thread-60621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] client lang: <none>
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] server lang: <none>
2025-11-17T20:15:14.121 [DEBUG] [Thread-60621] [transport.py] [_log()] kex follows: False
2025-11-17T20:15:14.122 [DEBUG] [Thread-60621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:15:14.122 [DEBUG] [Thread-60621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:15:14.122 [DEBUG] [Thread-60621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:15:14.122 [DEBUG] [Thread-60621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:15:14.122 [DEBUG] [Thread-60621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:15:14.122 [DEBUG] [Thread-60621] [transport.py] [_log()] Compression: none
2025-11-17T20:15:14.122 [DEBUG] [Thread-60621] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:15:14.138 [DEBUG] [Thread-60621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:15:14.138 [DEBUG] [Thread-60621] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:15:14.138 [DEBUG] [Thread-60621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:15:14.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:15:14.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:15:14.139 [DEBUG] [Thread-60621] [transport.py] [_log()] userauth is OK
2025-11-17T20:15:14.139 [DEBUG] [Thread-60621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:15:14.139 [DEBUG] [Thread-60621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:15:14.139 [DEBUG] [Thread-60621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:15:14.139 [DEBUG] [Thread-60621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:15:14.149 [INFO] [Thread-60621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:15:14.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:15:14.298 [DEBUG] [Thread-60623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:15:14.770 [DEBUG] [Thread-60621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:15:14.770 [DEBUG] [Thread-60621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:15:14.771 [DEBUG] [Thread-60621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:15:14.811 [DEBUG] [Thread-60621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:15:14.811 [DEBUG] [Thread-60621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:15:14.813 [DEBUG] [Thread-60621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:15:14.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:15:14.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:15:14.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:15:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:15:14.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:15:14.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:15:14.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:15:14.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:15:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:15:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.760119 -999.00  +18.10  10.80     34   +2.00 1 1 1 1 1     1    0 9.70 -335.58 ZNESW 11.5 10.8 150.4 15.4 18.5 -23.4 18.4 -22.5 18.2 -21.8 18.5 -22.8
2025-11-17T20:15:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:15:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:15:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.760119
2025-11-17T20:15:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:15:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:15:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:15:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:15:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:15:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:14:58', tmtdew=18.59, humidity=28.48, cloud=0.0, wind=15.42, temperature=17.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:14:58', seeing=1.5, atlas_timestamp='2025-11-17T18:14:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.12274999999999991, 0.09475000000000122, 0.09675000000000189, 0.17849999999999966, 0.14100000000000001, 0.2032500000000006, 0.11099999999999888, 0.08525000000000205, 0.08099999999999952, 0.06300000000000061, 0.005250000000000199, 0.10299999999999976, 0.20199999999999996, 0.13724999999999987, 0.12099999999999866, 0.1899999999999995, 0.14424999999999955, 0.24049999999999905, 0.17149999999999999, 0.22924999999999862, 0.1919999999999984, 0.16274999999999906, 0.12875000000000014, 0.09725000000000072, 0.16249999999999964, -0.06349999999999945, 0.08024999999999949, 0.3075000000000001, 0.32200000000000095, 0.19400000000000084, 0.1615000000000002, 0.1075000000000017, 0.19174999999999898], zp_timestamp='2025-11-17T18:11:00')
2025-11-17T20:15:14.840 [DEBUG] [Thread-60621] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:15:14.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:15:29.324 [DEBUG] [Thread-60625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:15:34.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:15:34.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:15:35.128 [DEBUG] [Thread-60626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:15:44.356 [DEBUG] [Thread-60627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:15:59.381 [DEBUG] [Thread-60628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:16:14.412 [DEBUG] [Thread-60629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:16:29.439 [DEBUG] [Thread-60630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:16:34.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:16:34.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:16:35.218 [DEBUG] [Thread-60631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:16:44.464 [DEBUG] [Thread-60632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:16:59.488 [DEBUG] [Thread-60633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:17:14.515 [DEBUG] [Thread-60634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:17:29.028 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T20:17:29.537 [DEBUG] [Thread-60635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:17:35.183 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:17:35.185 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:17:36.662 [DEBUG] [Thread-60636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:17:44.566 [DEBUG] [Thread-60637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:17:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:17:59.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:17:59.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:17:59.593 [DEBUG] [Thread-60638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:00.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 17, 46), 18.62, 28.03, 0.0, 9.51, 17.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:18:00.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:17:46
2025-11-17T20:18:00.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:18:01.112 [DEBUG] [Thread-60639] [transport.py] [_log()] starting thread (client mode): 0xd31b2950
2025-11-17T20:18:01.116 [DEBUG] [Thread-60639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:18:01.119 [DEBUG] [Thread-60639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:18:01.119 [INFO] [Thread-60639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:18:01.146 [DEBUG] [Thread-60639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] client lang: <none>
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] server lang: <none>
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] kex follows: False
2025-11-17T20:18:01.148 [DEBUG] [Thread-60639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:18:01.152 [DEBUG] [Thread-60639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:18:01.152 [DEBUG] [Thread-60639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:18:01.152 [DEBUG] [Thread-60639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:18:01.152 [DEBUG] [Thread-60639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:18:01.152 [DEBUG] [Thread-60639] [transport.py] [_log()] Compression: none
2025-11-17T20:18:01.152 [DEBUG] [Thread-60639] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:18:01.275 [DEBUG] [Thread-60639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:18:01.298 [DEBUG] [Thread-60639] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:18:01.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:18:01.308 [DEBUG] [Thread-60639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:18:01.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:18:01.320 [DEBUG] [Thread-60639] [transport.py] [_log()] userauth is OK
2025-11-17T20:18:01.320 [DEBUG] [Thread-60639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:18:01.321 [DEBUG] [Thread-60639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:18:01.321 [DEBUG] [Thread-60639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:18:01.321 [DEBUG] [Thread-60639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:18:01.353 [INFO] [Thread-60639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:18:01.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:18:01.994 [DEBUG] [Thread-60639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:18:01.994 [DEBUG] [Thread-60639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:18:01.998 [DEBUG] [Thread-60639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:18:02.035 [DEBUG] [Thread-60639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:18:02.035 [DEBUG] [Thread-60639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:18:02.038 [DEBUG] [Thread-60639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:18:02.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:18:02.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:18:02.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:18:02.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:18:02.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:18:02.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:18:02.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:18:02.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:18:02.080 [DEBUG] [Thread-60639] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:18:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:18:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.762202 -999.00  +18.20   9.78     33   +1.90 1 1 1 1 1     0    0 7.44 -393.27 ZNESW 9.5 9.8 140.5 10.9 18.5 -23.1 18.4 -22.2 18.2 -21.8 18.4 -22.4
2025-11-17T20:18:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:18:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:18:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.762202
2025-11-17T20:18:02.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:18:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:18:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:18:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:18:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:18:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:17:46', tmtdew=18.62, humidity=28.03, cloud=0.0, wind=9.51, temperature=17.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:17:46', seeing=2.16, atlas_timestamp='2025-11-17T18:17:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.21774999999999878, 0.17125000000000057, 0.18125000000000036, 0.5249999999999995, 0.3569999999999993, 0.49425000000000097, 0.40000000000000036, 0.4067500000000006, 0.1769999999999996, 0.20400000000000063, 0.4402499999999989, 0.25, 0.3514999999999997, 0.5032499999999995, 0.2959999999999994, 0.15449999999999875, 0.11374999999999957, 0.14899999999999913, 0.5389999999999997, 0.31324999999999825, 0.5669999999999984, 0.3437499999999982, 0.05775000000000219, 0.059749999999999304, 0.11299999999999955, 0.5385, 0.8642500000000002, 0.21749999999999936, -1.1600000000000001, 0.6115000000000013, 0.06650000000000134, 0.3590000000000009, 0.21974999999999945], zp_timestamp='2025-11-17T18:15:00')
2025-11-17T20:18:02.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:18:02.290 [DEBUG] [Thread-60642] [transport.py] [_log()] starting thread (client mode): 0xd07cf040
2025-11-17T20:18:02.290 [DEBUG] [Thread-60642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:18:02.305 [DEBUG] [Thread-60642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:18:02.305 [INFO] [Thread-60642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:18:02.312 [DEBUG] [Thread-60642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:18:02.312 [DEBUG] [Thread-60642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:18:02.312 [DEBUG] [Thread-60642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] client lang: <none>
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] server lang: <none>
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] kex follows: False
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] Compression: none
2025-11-17T20:18:02.313 [DEBUG] [Thread-60642] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:18:02.368 [DEBUG] [Thread-60642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:18:02.369 [DEBUG] [Thread-60642] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:18:02.369 [DEBUG] [Thread-60642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:18:02.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:18:02.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:18:02.425 [DEBUG] [Thread-60642] [transport.py] [_log()] userauth is OK
2025-11-17T20:18:02.425 [DEBUG] [Thread-60642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:18:02.425 [DEBUG] [Thread-60642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:18:02.425 [DEBUG] [Thread-60642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:18:02.425 [DEBUG] [Thread-60642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:18:02.443 [INFO] [Thread-60642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:18:02.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:18:02.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:18:03.336 [DEBUG] [Thread-60642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:18:03.336 [DEBUG] [Thread-60642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:18:03.385 [DEBUG] [Thread-60642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:18:03.385 [DEBUG] [Thread-60642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:18:03.395 [DEBUG] [Thread-60642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:18:03.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:18:03.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:18:03.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:18:03.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:18:03.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:18:03.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:18:03.446 [DEBUG] [Thread-60642] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:18:14.619 [DEBUG] [Thread-60644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:20.078 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:23.227 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:28.293 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:29.702 [DEBUG] [Thread-60645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:18:33.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:18:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:18:34.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 18, 24), 18.6, 28.08, 0.0, 8.96, 17.92, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:18:34.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:18:24
2025-11-17T20:18:34.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:18:34.528 [DEBUG] [Thread-60646] [transport.py] [_log()] starting thread (client mode): 0xd3152f50
2025-11-17T20:18:34.528 [DEBUG] [Thread-60646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:18:34.549 [DEBUG] [Thread-60646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:18:34.549 [INFO] [Thread-60646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:18:34.552 [DEBUG] [Thread-60646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:18:34.552 [DEBUG] [Thread-60646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:18:34.552 [DEBUG] [Thread-60646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:18:34.552 [DEBUG] [Thread-60646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] client lang: <none>
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] server lang: <none>
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] kex follows: False
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] Compression: none
2025-11-17T20:18:34.553 [DEBUG] [Thread-60646] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:18:34.560 [DEBUG] [Thread-60646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:18:34.561 [DEBUG] [Thread-60646] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:18:34.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:18:34.561 [DEBUG] [Thread-60646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:18:34.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:18:34.562 [DEBUG] [Thread-60646] [transport.py] [_log()] userauth is OK
2025-11-17T20:18:34.562 [DEBUG] [Thread-60646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:18:34.562 [DEBUG] [Thread-60646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:18:34.562 [DEBUG] [Thread-60646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:18:34.562 [DEBUG] [Thread-60646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:18:34.575 [INFO] [Thread-60646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:18:34.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:18:34.706 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:35.198 [DEBUG] [Thread-60646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:18:35.198 [DEBUG] [Thread-60646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:18:35.199 [DEBUG] [Thread-60646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:18:35.239 [DEBUG] [Thread-60646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:18:35.239 [DEBUG] [Thread-60646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:18:35.242 [DEBUG] [Thread-60646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:18:35.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:18:35.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:18:35.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:18:35.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:18:35.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:18:35.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:18:35.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.762549 -999.00  +18.20   6.25     33   +1.90 1 1 1 1 1     0    0 7.62 -392.68 ZNESW 7.0 6.2 148.6 11.1 18.5 -23.1 18.4 -22.2 18.2 -21.8 18.4 -22.4
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.762549
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:18:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:18:24', tmtdew=18.6, humidity=28.08, cloud=0.0, wind=8.96, temperature=17.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:18:24', seeing=1.95, atlas_timestamp='2025-11-17T18:18:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.21774999999999878, 0.17125000000000057, 0.18125000000000036, 0.5249999999999995, 0.3569999999999993, 0.49425000000000097, 0.40000000000000036, 0.4067500000000006, 0.1769999999999996, 0.20400000000000063, 0.4402499999999989, 0.25, 0.3514999999999997, 0.5032499999999995, 0.2959999999999994, 0.15449999999999875, 0.11374999999999957, 0.14899999999999913, 0.5389999999999997, 0.31324999999999825, 0.5669999999999984, 0.3437499999999982, 0.05775000000000219, 0.059749999999999304, 0.11299999999999955, 0.5385, 0.8642500000000002, 0.21749999999999936, -1.1600000000000001, 0.6115000000000013, 0.06650000000000134, 0.3590000000000009, 0.21974999999999945], zp_timestamp='2025-11-17T18:17:00')
2025-11-17T20:18:35.260 [DEBUG] [Thread-60646] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:18:35.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:18:35.344 [DEBUG] [Thread-60649] [transport.py] [_log()] starting thread (client mode): 0xd07843d0
2025-11-17T20:18:35.344 [DEBUG] [Thread-60649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:18:35.362 [DEBUG] [Thread-60649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:18:35.362 [INFO] [Thread-60649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] client lang: <none>
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] server lang: <none>
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] kex follows: False
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] Compression: none
2025-11-17T20:18:35.370 [DEBUG] [Thread-60649] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:18:35.395 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:35.395 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:35.428 [DEBUG] [Thread-60649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:18:35.428 [DEBUG] [Thread-60649] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:18:35.428 [DEBUG] [Thread-60649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:18:35.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:18:35.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:18:35.485 [DEBUG] [Thread-60649] [transport.py] [_log()] userauth is OK
2025-11-17T20:18:35.485 [DEBUG] [Thread-60649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:18:35.485 [DEBUG] [Thread-60649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:18:35.485 [DEBUG] [Thread-60649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:18:35.485 [DEBUG] [Thread-60649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:18:35.499 [INFO] [Thread-60649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:18:35.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:18:35.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:18:36.386 [DEBUG] [Thread-60649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:18:36.386 [DEBUG] [Thread-60649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:18:36.434 [DEBUG] [Thread-60649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:18:36.434 [DEBUG] [Thread-60649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:18:36.442 [DEBUG] [Thread-60649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:18:36.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:18:36.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:18:36.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
2025-11-17T20:18:36.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:18:36.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:18:36.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:18:36.474 [DEBUG] [Thread-60649] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:18:36.758 [DEBUG] [Thread-60651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:44.725 [DEBUG] [Thread-60652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:54.207 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:58.610 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:18:59.754 [DEBUG] [Thread-60653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:19:06.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:19:06.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:19:07.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 18, 57), 18.49, 28.68, 0.0, 10.46, 17.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:19:07.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:18:57
2025-11-17T20:19:08.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:19:08.350 [DEBUG] [Thread-60654] [transport.py] [_log()] starting thread (client mode): 0xd31cd210
2025-11-17T20:19:08.351 [DEBUG] [Thread-60654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:19:08.371 [DEBUG] [Thread-60654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:19:08.371 [INFO] [Thread-60654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] client lang: <none>
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] server lang: <none>
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] kex follows: False
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:19:08.375 [DEBUG] [Thread-60654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:19:08.376 [DEBUG] [Thread-60654] [transport.py] [_log()] Compression: none
2025-11-17T20:19:08.376 [DEBUG] [Thread-60654] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:19:08.389 [DEBUG] [Thread-60654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:19:08.389 [DEBUG] [Thread-60654] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:19:08.389 [DEBUG] [Thread-60654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:19:08.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:19:08.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:19:08.390 [DEBUG] [Thread-60654] [transport.py] [_log()] userauth is OK
2025-11-17T20:19:08.390 [DEBUG] [Thread-60654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:19:08.390 [DEBUG] [Thread-60654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:19:08.390 [DEBUG] [Thread-60654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:19:08.390 [DEBUG] [Thread-60654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:19:08.420 [INFO] [Thread-60654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:19:08.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:19:09.057 [DEBUG] [Thread-60654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:19:09.057 [DEBUG] [Thread-60654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:19:09.057 [DEBUG] [Thread-60654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:19:09.098 [DEBUG] [Thread-60654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:19:09.098 [DEBUG] [Thread-60654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:19:09.101 [DEBUG] [Thread-60654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:19:09.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:19:09.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:19:09.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:19:09.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:19:09.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:19:09.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:19:09.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:19:09.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:19:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:19:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.762897 -999.00  +18.10   8.90     33   +1.90 1 1 1 1 1     0    0 6.39 -428.41 ZNESW 8.3 8.9 163.4 10.3 18.4 -22.9 18.4 -22.2 18.2 -21.9 18.4 -22.3
2025-11-17T20:19:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:19:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:19:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.762897
2025-11-17T20:19:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:19:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:19:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:19:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:19:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:19:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:18:57', tmtdew=18.49, humidity=28.68, cloud=0.0, wind=10.46, temperature=17.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:18:57', seeing=1.55, atlas_timestamp='2025-11-17T18:18:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.21774999999999878, 0.17125000000000057, 0.18125000000000036, 0.5249999999999995, 0.3569999999999993, 0.49425000000000097, 0.40000000000000036, 0.4067500000000006, 0.1769999999999996, 0.20400000000000063, 0.4402499999999989, 0.25, 0.3514999999999997, 0.5032499999999995, 0.2959999999999994, 0.15449999999999875, 0.11374999999999957, 0.14899999999999913, 0.5389999999999997, 0.31324999999999825, 0.5669999999999984, 0.3437499999999982, 0.05775000000000219, 0.059749999999999304, 0.11299999999999955, 0.5385, 0.8642500000000002, 0.21749999999999936, -1.1600000000000001, 0.6115000000000013, 0.06650000000000134, 0.3590000000000009, 0.21974999999999945], zp_timestamp='2025-11-17T18:17:00')
2025-11-17T20:19:09.119 [DEBUG] [Thread-60654] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:19:09.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:19:09.206 [DEBUG] [Thread-60657] [transport.py] [_log()] starting thread (client mode): 0xd0787430
2025-11-17T20:19:09.206 [DEBUG] [Thread-60657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:19:09.221 [DEBUG] [Thread-60657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:19:09.221 [INFO] [Thread-60657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] client lang: <none>
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] server lang: <none>
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] kex follows: False
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] Compression: none
2025-11-17T20:19:09.231 [DEBUG] [Thread-60657] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:19:09.289 [DEBUG] [Thread-60657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:19:09.290 [DEBUG] [Thread-60657] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:19:09.290 [DEBUG] [Thread-60657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:19:09.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:19:09.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:19:09.344 [DEBUG] [Thread-60657] [transport.py] [_log()] userauth is OK
2025-11-17T20:19:09.344 [DEBUG] [Thread-60657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:19:09.344 [DEBUG] [Thread-60657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:19:09.344 [DEBUG] [Thread-60657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:19:09.345 [DEBUG] [Thread-60657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:19:09.359 [INFO] [Thread-60657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:19:09.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:19:09.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:19:10.223 [DEBUG] [Thread-60657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:19:10.223 [DEBUG] [Thread-60657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:19:10.271 [DEBUG] [Thread-60657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:19:10.271 [DEBUG] [Thread-60657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:19:10.279 [DEBUG] [Thread-60657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:19:10.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:19:10.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:19:10.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:19:10.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:19:10.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:19:10.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:19:10.311 [DEBUG] [Thread-60657] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:19:14.779 [DEBUG] [Thread-60659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:18.030 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:22.399 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:28.573 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:29.808 [DEBUG] [Thread-60660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:32.955 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:35.599 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:35.600 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:36.868 [DEBUG] [Thread-60661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:40.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:19:40.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:19: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
2025-11-17T20:19:42.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 19, 29), 18.54, 28.6, 0.0, 9.78, 17.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:19:42.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:19:29
2025-11-17T20:19:42.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:19:42.809 [DEBUG] [Thread-60662] [transport.py] [_log()] starting thread (client mode): 0xd31ce3e0
2025-11-17T20:19:42.809 [DEBUG] [Thread-60662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:19:42.830 [DEBUG] [Thread-60662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:19:42.830 [INFO] [Thread-60662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:19:42.833 [DEBUG] [Thread-60662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] client lang: <none>
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] server lang: <none>
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] kex follows: False
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] Compression: none
2025-11-17T20:19:42.834 [DEBUG] [Thread-60662] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:19:42.851 [DEBUG] [Thread-60662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:19:42.851 [DEBUG] [Thread-60662] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:19:42.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:19:42.852 [DEBUG] [Thread-60662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:19:42.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:19:42.854 [DEBUG] [Thread-60662] [transport.py] [_log()] userauth is OK
2025-11-17T20:19:42.854 [DEBUG] [Thread-60662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:19:42.854 [DEBUG] [Thread-60662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:19:42.854 [DEBUG] [Thread-60662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:19:42.855 [DEBUG] [Thread-60662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:19:42.875 [INFO] [Thread-60662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:19:42.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:19:43.480 [DEBUG] [Thread-60662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:19:43.481 [DEBUG] [Thread-60662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:19:43.481 [DEBUG] [Thread-60662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:19:43.522 [DEBUG] [Thread-60662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:19:43.522 [DEBUG] [Thread-60662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:19:43.524 [DEBUG] [Thread-60662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:19:43.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:19:43.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:19:43.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:19:43.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:19:43.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:19:43.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:19:43.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.763244 -999.00  +18.10   6.57     33   +1.80 1 1 1 1 1     0    0 5.68 -436.29 ZNESW 7.1 6.6 173.8 9.9 18.4 -23.0 18.4 -22.4 18.1 -21.8 18.4 -22.5
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.763244
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:19:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:19:29', tmtdew=18.54, humidity=28.6, cloud=0.0, wind=9.78, temperature=17.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:19:29', seeing=1.33, atlas_timestamp='2025-11-17T18:19:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.21774999999999878, 0.17125000000000057, 0.18125000000000036, 0.5249999999999995, 0.3569999999999993, 0.49425000000000097, 0.40000000000000036, 0.4067500000000006, 0.1769999999999996, 0.20400000000000063, 0.4402499999999989, 0.25, 0.3514999999999997, 0.5032499999999995, 0.2959999999999994, 0.15449999999999875, 0.11374999999999957, 0.14899999999999913, 0.5389999999999997, 0.31324999999999825, 0.5669999999999984, 0.3437499999999982, 0.05775000000000219, 0.059749999999999304, 0.11299999999999955, 0.5385, 0.8642500000000002, 0.21749999999999936, -1.1600000000000001, 0.6115000000000013, 0.06650000000000134, 0.3590000000000009, 0.21974999999999945], zp_timestamp='2025-11-17T18:17:00')
2025-11-17T20:19:43.544 [DEBUG] [Thread-60662] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:19:43.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:19:43.627 [DEBUG] [Thread-60665] [transport.py] [_log()] starting thread (client mode): 0xd3153fd0
2025-11-17T20:19:43.627 [DEBUG] [Thread-60665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:19:43.642 [DEBUG] [Thread-60665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:19:43.642 [INFO] [Thread-60665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] client lang: <none>
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] server lang: <none>
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] kex follows: False
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] Compression: none
2025-11-17T20:19:43.650 [DEBUG] [Thread-60665] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:19:43.707 [DEBUG] [Thread-60665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:19:43.707 [DEBUG] [Thread-60665] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:19:43.707 [DEBUG] [Thread-60665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:19:43.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:19:43.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:19:43.764 [DEBUG] [Thread-60665] [transport.py] [_log()] userauth is OK
2025-11-17T20:19:43.764 [DEBUG] [Thread-60665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:19:43.764 [DEBUG] [Thread-60665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:19:43.764 [DEBUG] [Thread-60665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:19:43.764 [DEBUG] [Thread-60665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:19:43.778 [INFO] [Thread-60665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:19:43.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:19:43.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:19:44.626 [DEBUG] [Thread-60665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:19:44.626 [DEBUG] [Thread-60665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:19:44.674 [DEBUG] [Thread-60665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:19:44.674 [DEBUG] [Thread-60665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:19:44.682 [DEBUG] [Thread-60665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:19:44.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:19:44.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:19:44.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:19:44.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:19:44.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:19:44.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:19:44.713 [DEBUG] [Thread-60665] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:19:44.831 [DEBUG] [Thread-60667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:19:59.861 [DEBUG] [Thread-60668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:14.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:20:14.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:20:14.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:20:14.887 [DEBUG] [Thread-60669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:15.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 20, 1), 18.52, 28.6, 0.0, 10.73, 17.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:20:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:20:01
2025-11-17T20:20:15.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:20:15.845 [DEBUG] [Thread-60670] [transport.py] [_log()] starting thread (client mode): 0xd3152e90
2025-11-17T20:20:15.845 [DEBUG] [Thread-60670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:20:15.865 [DEBUG] [Thread-60670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:20:15.866 [INFO] [Thread-60670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] client lang: <none>
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] server lang: <none>
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] kex follows: False
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] Compression: none
2025-11-17T20:20:15.869 [DEBUG] [Thread-60670] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:20:15.884 [DEBUG] [Thread-60670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:20:15.884 [DEBUG] [Thread-60670] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:20:15.884 [DEBUG] [Thread-60670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:20:15.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:20:15.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:20:15.885 [DEBUG] [Thread-60670] [transport.py] [_log()] userauth is OK
2025-11-17T20:20:15.885 [DEBUG] [Thread-60670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:20:15.885 [DEBUG] [Thread-60670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:20:15.885 [DEBUG] [Thread-60670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:20:15.885 [DEBUG] [Thread-60670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:20:15.894 [INFO] [Thread-60670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:20:15.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:20:17.022 [DEBUG] [Thread-60670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:20:17.022 [DEBUG] [Thread-60670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:20:17.022 [DEBUG] [Thread-60670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:20:17.063 [DEBUG] [Thread-60670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:20:17.063 [DEBUG] [Thread-60670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:20:17.064 [DEBUG] [Thread-60670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:20:17.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:20:17.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:20:17.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:20:17.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:20:17.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:20:17.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:20:17.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.763591 -999.00  +18.00   7.95     33   +1.80 1 1 1 1 1     0    0 6.06 -417.11 ZNESW 7.4 8.0 178.8 9.8 18.4 -23.0 18.4 -22.3 18.1 -21.9 18.4 -22.4
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.763591
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:20:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:20:01', tmtdew=18.52, humidity=28.6, cloud=0.0, wind=10.73, temperature=17.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:20:02', seeing=1.44, atlas_timestamp='2025-11-17T18:19:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.21774999999999878, 0.17125000000000057, 0.18125000000000036, 0.5249999999999995, 0.3569999999999993, 0.49425000000000097, 0.40000000000000036, 0.4067500000000006, 0.1769999999999996, 0.20400000000000063, 0.4402499999999989, 0.25, 0.3514999999999997, 0.5032499999999995, 0.2959999999999994, 0.15449999999999875, 0.11374999999999957, 0.14899999999999913, 0.5389999999999997, 0.31324999999999825, 0.5669999999999984, 0.3437499999999982, 0.05775000000000219, 0.059749999999999304, 0.11299999999999955, 0.5385, 0.8642500000000002, 0.21749999999999936, -1.1600000000000001, 0.6115000000000013, 0.06650000000000134, 0.3590000000000009, 0.21974999999999945], zp_timestamp='2025-11-17T18:17:00')
2025-11-17T20:20:17.082 [DEBUG] [Thread-60670] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:20:17.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:20:17.167 [DEBUG] [Thread-60673] [transport.py] [_log()] starting thread (client mode): 0xd7bc60b0
2025-11-17T20:20:17.167 [DEBUG] [Thread-60673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:20:17.182 [DEBUG] [Thread-60673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:20:17.182 [INFO] [Thread-60673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:20:17.189 [DEBUG] [Thread-60673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] client lang: <none>
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] server lang: <none>
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] kex follows: False
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] Compression: none
2025-11-17T20:20:17.190 [DEBUG] [Thread-60673] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:20:17.251 [DEBUG] [Thread-60673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:20:17.251 [DEBUG] [Thread-60673] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:20:17.252 [DEBUG] [Thread-60673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:20:17.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:20:17.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:20:17.308 [DEBUG] [Thread-60673] [transport.py] [_log()] userauth is OK
2025-11-17T20:20:17.308 [DEBUG] [Thread-60673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:20:17.308 [DEBUG] [Thread-60673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:20:17.308 [DEBUG] [Thread-60673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:20:17.308 [DEBUG] [Thread-60673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:20:17.323 [INFO] [Thread-60673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:20:17.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:20:17.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:20:18.170 [DEBUG] [Thread-60673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:20:18.171 [DEBUG] [Thread-60673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:20:18.219 [DEBUG] [Thread-60673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:20:18.219 [DEBUG] [Thread-60673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:20:18.227 [DEBUG] [Thread-60673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:20:18.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:20:18.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:20:18.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:20:18.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:20:18.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:20:18.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:20:18.259 [DEBUG] [Thread-60673] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:20:29.914 [DEBUG] [Thread-60675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:35.802 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:35.803 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:36.448 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:36.931 [DEBUG] [Thread-60676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:39.502 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:44.957 [DEBUG] [Thread-60677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:20:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:20:48.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:20:48.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:20:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 20, 37), 18.4, 28.74, 0.0, 10.64, 17.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:20:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:20:37
2025-11-17T20:20:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:20:51.028 [DEBUG] [Thread-60678] [transport.py] [_log()] starting thread (client mode): 0xd7bc7160
2025-11-17T20:20:51.028 [DEBUG] [Thread-60678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:20:51.051 [DEBUG] [Thread-60678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:20:51.051 [INFO] [Thread-60678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:20:51.054 [DEBUG] [Thread-60678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:20:51.054 [DEBUG] [Thread-60678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:20:51.054 [DEBUG] [Thread-60678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:20:51.054 [DEBUG] [Thread-60678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:20:51.054 [DEBUG] [Thread-60678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] client lang: <none>
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] server lang: <none>
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] kex follows: False
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:20:51.055 [DEBUG] [Thread-60678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:20:51.056 [DEBUG] [Thread-60678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:20:51.056 [DEBUG] [Thread-60678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:20:51.056 [DEBUG] [Thread-60678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:20:51.056 [DEBUG] [Thread-60678] [transport.py] [_log()] Compression: none
2025-11-17T20:20:51.056 [DEBUG] [Thread-60678] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:20:51.075 [DEBUG] [Thread-60678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:20:51.076 [DEBUG] [Thread-60678] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:20:51.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:20:51.077 [DEBUG] [Thread-60678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:20:51.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:20:51.117 [DEBUG] [Thread-60678] [transport.py] [_log()] userauth is OK
2025-11-17T20:20:51.117 [DEBUG] [Thread-60678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:20:51.117 [DEBUG] [Thread-60678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:20:51.118 [DEBUG] [Thread-60678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:20:51.118 [DEBUG] [Thread-60678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:20:51.151 [INFO] [Thread-60678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:20:51.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:20:51.815 [DEBUG] [Thread-60678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:20:51.815 [DEBUG] [Thread-60678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:20:51.815 [DEBUG] [Thread-60678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:20:51.856 [DEBUG] [Thread-60678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:20:51.856 [DEBUG] [Thread-60678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:20:51.858 [DEBUG] [Thread-60678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:20:51.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:20:51.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:20:51.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:20:51.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:20:51.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:20:51.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:20:51.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:20:51.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:20:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:20:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.763938 -999.00  +18.00  10.04     33   +1.80 1 1 1 1 1     0    0 4.91 -444.15 ZNESW 8.0 10.0 194.2 13.3 18.4 -23.0 18.4 -22.4 18.1 -21.9 18.4 -22.6
2025-11-17T20:20:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:20:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:20:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.763938
2025-11-17T20:20:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:20:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:20:51.881 [DEBUG] [Thread-60678] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:20:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:20:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:20:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:20:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:20:37', tmtdew=18.4, humidity=28.74, cloud=0.0, wind=10.64, temperature=17.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:20:37', seeing=1.61, atlas_timestamp='2025-11-17T18:20:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.21774999999999878, 0.17125000000000057, 0.18125000000000036, 0.5249999999999995, 0.3569999999999993, 0.49425000000000097, 0.40000000000000036, 0.4067500000000006, 0.1769999999999996, 0.20400000000000063, 0.4402499999999989, 0.25, 0.3514999999999997, 0.5032499999999995, 0.2959999999999994, 0.15449999999999875, 0.11374999999999957, 0.14899999999999913, 0.5389999999999997, 0.31324999999999825, 0.5669999999999984, 0.3437499999999982, 0.05775000000000219, 0.059749999999999304, 0.11299999999999955, 0.5385, 0.8642500000000002, 0.21749999999999936, -1.1600000000000001, 0.6115000000000013, 0.06650000000000134, 0.3590000000000009, 0.21974999999999945], zp_timestamp='2025-11-17T18:17:00')
2025-11-17T20:20:51.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:20:51.975 [DEBUG] [Thread-60681] [transport.py] [_log()] starting thread (client mode): 0xd7bc6770
2025-11-17T20:20:51.975 [DEBUG] [Thread-60681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:20:51.990 [DEBUG] [Thread-60681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:20:51.990 [INFO] [Thread-60681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:20:51.997 [DEBUG] [Thread-60681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:20:51.997 [DEBUG] [Thread-60681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:20:51.997 [DEBUG] [Thread-60681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] client lang: <none>
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] server lang: <none>
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] kex follows: False
2025-11-17T20:20:51.998 [DEBUG] [Thread-60681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:20:51.999 [DEBUG] [Thread-60681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:20:51.999 [DEBUG] [Thread-60681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:20:51.999 [DEBUG] [Thread-60681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:20:51.999 [DEBUG] [Thread-60681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:20:51.999 [DEBUG] [Thread-60681] [transport.py] [_log()] Compression: none
2025-11-17T20:20:51.999 [DEBUG] [Thread-60681] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:20:52.056 [DEBUG] [Thread-60681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:20:52.056 [DEBUG] [Thread-60681] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:20:52.057 [DEBUG] [Thread-60681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:20:52.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:20:52.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:20:52.113 [DEBUG] [Thread-60681] [transport.py] [_log()] userauth is OK
2025-11-17T20:20:52.113 [DEBUG] [Thread-60681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:20:52.113 [DEBUG] [Thread-60681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:20:52.113 [DEBUG] [Thread-60681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:20:52.113 [DEBUG] [Thread-60681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:20:52.133 [INFO] [Thread-60681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:20:52.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:20:52.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:20:52.974 [DEBUG] [Thread-60681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:20:52.974 [DEBUG] [Thread-60681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:20:53.022 [DEBUG] [Thread-60681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:20:53.022 [DEBUG] [Thread-60681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:20:53.031 [DEBUG] [Thread-60681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:20:53.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:20:53.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:20:53.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:20:53.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:20:53.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:20:53.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:20:53.065 [DEBUG] [Thread-60681] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:20:59.986 [DEBUG] [Thread-60683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:21:15.025 [DEBUG] [Thread-60684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:21:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:21:23.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:21:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:21:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 21, 14), 18.41, 28.71, 0.0, 10.78, 17.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:21:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:21:14
2025-11-17T20:21:24.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:21:24.158 [DEBUG] [Thread-60685] [transport.py] [_log()] starting thread (client mode): 0xd31cc280
2025-11-17T20:21:24.158 [DEBUG] [Thread-60685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:21:24.178 [DEBUG] [Thread-60685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:21:24.178 [INFO] [Thread-60685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:21:24.179 [DEBUG] [Thread-60685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:21:24.179 [DEBUG] [Thread-60685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:21:24.179 [DEBUG] [Thread-60685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:21:24.179 [DEBUG] [Thread-60685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] client lang: <none>
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] server lang: <none>
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] kex follows: False
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] Compression: none
2025-11-17T20:21:24.180 [DEBUG] [Thread-60685] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:21:24.186 [DEBUG] [Thread-60685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:21:24.187 [DEBUG] [Thread-60685] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:21:24.187 [DEBUG] [Thread-60685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:21:24.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:21:24.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:21:24.187 [DEBUG] [Thread-60685] [transport.py] [_log()] userauth is OK
2025-11-17T20:21:24.187 [DEBUG] [Thread-60685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:21:24.187 [DEBUG] [Thread-60685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:21:24.187 [DEBUG] [Thread-60685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:21:24.187 [DEBUG] [Thread-60685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:21:24.197 [INFO] [Thread-60685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:21:24.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:21:24.786 [DEBUG] [Thread-60685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:21:24.786 [DEBUG] [Thread-60685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:21:24.786 [DEBUG] [Thread-60685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:21:24.827 [DEBUG] [Thread-60685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:21:24.827 [DEBUG] [Thread-60685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:21:24.829 [DEBUG] [Thread-60685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:21:24.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:21:24.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:21:24.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:21:24.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:21:24.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:21:24.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:21:24.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.764633 -999.00  +17.90   9.79     33   +1.70 1 1 1 1 1     0    0 4.87 -448.11 ZNESW 7.8 9.8 162.0 12.9 18.4 -23.2 18.3 -22.6 18.1 -22.3 18.4 -22.7
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.764633
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:21:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:21:24.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:21:14', tmtdew=18.41, humidity=28.71, cloud=0.0, wind=10.78, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:21:14', seeing=1.53, atlas_timestamp='2025-11-17T18:21:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.21774999999999878, 0.17125000000000057, 0.18125000000000036, 0.5249999999999995, 0.3569999999999993, 0.49425000000000097, 0.40000000000000036, 0.4067500000000006, 0.1769999999999996, 0.20400000000000063, 0.4402499999999989, 0.25, 0.3514999999999997, 0.5032499999999995, 0.2959999999999994, 0.15449999999999875, 0.11374999999999957, 0.14899999999999913, 0.5389999999999997, 0.31324999999999825, 0.5669999999999984, 0.3437499999999982, 0.05775000000000219, 0.059749999999999304, 0.11299999999999955, 0.5385, 0.8642500000000002, 0.21749999999999936, -1.1600000000000001, 0.6115000000000013, 0.06650000000000134, 0.3590000000000009, 0.21974999999999945], zp_timestamp='2025-11-17T18:17:00')
2025-11-17T20:21:24.847 [DEBUG] [Thread-60685] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:21:24.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:21:24.931 [DEBUG] [Thread-60688] [transport.py] [_log()] starting thread (client mode): 0xd07851e0
2025-11-17T20:21:24.932 [DEBUG] [Thread-60688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:21:24.948 [DEBUG] [Thread-60688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:21:24.948 [INFO] [Thread-60688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] client lang: <none>
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] server lang: <none>
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] kex follows: False
2025-11-17T20:21:24.955 [DEBUG] [Thread-60688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:21:24.956 [DEBUG] [Thread-60688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:21:24.956 [DEBUG] [Thread-60688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:21:24.956 [DEBUG] [Thread-60688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:21:24.956 [DEBUG] [Thread-60688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:21:24.956 [DEBUG] [Thread-60688] [transport.py] [_log()] Compression: none
2025-11-17T20:21:24.956 [DEBUG] [Thread-60688] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:21:25.015 [DEBUG] [Thread-60688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:21:25.015 [DEBUG] [Thread-60688] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:21:25.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:21:25.015 [DEBUG] [Thread-60688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:21:25.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:21:25.072 [DEBUG] [Thread-60688] [transport.py] [_log()] userauth is OK
2025-11-17T20:21:25.072 [DEBUG] [Thread-60688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:21:25.072 [DEBUG] [Thread-60688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:21:25.072 [DEBUG] [Thread-60688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:21:25.072 [DEBUG] [Thread-60688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:21:25.086 [INFO] [Thread-60688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:21:25.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:21:25.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:21:25.998 [DEBUG] [Thread-60688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:21:26.007 [DEBUG] [Thread-60688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:21:26.046 [DEBUG] [Thread-60688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:21:26.046 [DEBUG] [Thread-60688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:21:26.054 [DEBUG] [Thread-60688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:21:26.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:21:26.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:21:26.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:21:26.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:21:26.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:21:26.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:21:26.085 [DEBUG] [Thread-60688] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:21:30.050 [DEBUG] [Thread-60690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:21:36.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:21:36.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:21:37.009 [DEBUG] [Thread-60691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:21:45.086 [DEBUG] [Thread-60692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:21:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:21:56.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:21:56.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:21:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 21, 46), 18.51, 28.24, 0.0, 13.52, 17.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:21:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:21:46
2025-11-17T20:21:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:21:57.190 [DEBUG] [Thread-60693] [transport.py] [_log()] starting thread (client mode): 0xd31cd150
2025-11-17T20:21:57.190 [DEBUG] [Thread-60693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:21:57.211 [DEBUG] [Thread-60693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:21:57.212 [INFO] [Thread-60693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] client lang: <none>
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] server lang: <none>
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] kex follows: False
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] Compression: none
2025-11-17T20:21:57.215 [DEBUG] [Thread-60693] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:21:57.230 [DEBUG] [Thread-60693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:21:57.230 [DEBUG] [Thread-60693] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:21:57.230 [DEBUG] [Thread-60693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:21:57.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:21:57.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:21:57.231 [DEBUG] [Thread-60693] [transport.py] [_log()] userauth is OK
2025-11-17T20:21:57.231 [DEBUG] [Thread-60693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:21:57.231 [DEBUG] [Thread-60693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:21:57.231 [DEBUG] [Thread-60693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:21:57.231 [DEBUG] [Thread-60693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:21:57.258 [INFO] [Thread-60693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:21:57.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:21:57.895 [DEBUG] [Thread-60693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:21:57.895 [DEBUG] [Thread-60693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:21:57.895 [DEBUG] [Thread-60693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:21:57.936 [DEBUG] [Thread-60693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:21:57.936 [DEBUG] [Thread-60693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:21:57.938 [DEBUG] [Thread-60693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:21:57.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:21:57.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:21:57.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:21:57.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:21:57.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:21:57.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:21:57.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.764980 -999.00  +17.90  10.40     34   +1.80 1 1 1 1 1     0    0 4.18 -464.85 ZNESW 9.4 10.4 161.4 12.5 18.4 -23.2 18.4 -22.7 18.1 -22.4 18.3 -22.8
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.764980
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:21:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:21:46', tmtdew=18.51, humidity=28.24, cloud=0.0, wind=13.52, temperature=17.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:21:46', seeing=1.52, atlas_timestamp='2025-11-17T18:21:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:20:00')
2025-11-17T20:21:57.958 [DEBUG] [Thread-60693] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:21:58.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:21:58.044 [DEBUG] [Thread-60696] [transport.py] [_log()] starting thread (client mode): 0xd0711f00
2025-11-17T20:21:58.044 [DEBUG] [Thread-60696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:21:58.060 [DEBUG] [Thread-60696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:21:58.060 [INFO] [Thread-60696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:21:58.068 [DEBUG] [Thread-60696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:21:58.068 [DEBUG] [Thread-60696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:21:58.068 [DEBUG] [Thread-60696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:21:58.068 [DEBUG] [Thread-60696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:21:58.068 [DEBUG] [Thread-60696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:21:58.068 [DEBUG] [Thread-60696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:21:58.068 [DEBUG] [Thread-60696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:21:58.068 [DEBUG] [Thread-60696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] client lang: <none>
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] server lang: <none>
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] kex follows: False
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] Compression: none
2025-11-17T20:21:58.069 [DEBUG] [Thread-60696] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:21:58.123 [DEBUG] [Thread-60696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:21:58.124 [DEBUG] [Thread-60696] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:21:58.124 [DEBUG] [Thread-60696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:21:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:21:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:21:58.181 [DEBUG] [Thread-60696] [transport.py] [_log()] userauth is OK
2025-11-17T20:21:58.181 [DEBUG] [Thread-60696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:21:58.181 [DEBUG] [Thread-60696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:21:58.181 [DEBUG] [Thread-60696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:21:58.182 [DEBUG] [Thread-60696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:21:58.196 [INFO] [Thread-60696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:21:58.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:21:58.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:21:59.011 [DEBUG] [Thread-60696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:21:59.011 [DEBUG] [Thread-60696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:21:59.059 [DEBUG] [Thread-60696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:21:59.059 [DEBUG] [Thread-60696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:21:59.068 [DEBUG] [Thread-60696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:21:59.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:21:59.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:21:59.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:21:59.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:21:59.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:21:59.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:21:59.101 [DEBUG] [Thread-60696] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:22:00.110 [DEBUG] [Thread-60698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:22:15.138 [DEBUG] [Thread-60699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:22:29.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:22:29.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:22:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:22:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 22, 19), 18.52, 28.23, 0.0, 13.23, 17.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:22:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:22:19
2025-11-17T20:22:30.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:22:30.161 [DEBUG] [Thread-60700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:22:30.272 [DEBUG] [Thread-60701] [transport.py] [_log()] starting thread (client mode): 0xd078c7f0
2025-11-17T20:22:30.272 [DEBUG] [Thread-60701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:22:30.292 [DEBUG] [Thread-60701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:22:30.292 [INFO] [Thread-60701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:22:30.295 [DEBUG] [Thread-60701] [transport.py] [_log()] client lang: <none>
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] server lang: <none>
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] kex follows: False
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] Compression: none
2025-11-17T20:22:30.296 [DEBUG] [Thread-60701] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:22:30.313 [DEBUG] [Thread-60701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:22:30.313 [DEBUG] [Thread-60701] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:22:30.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:22:30.313 [DEBUG] [Thread-60701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:22:30.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:22:30.314 [DEBUG] [Thread-60701] [transport.py] [_log()] userauth is OK
2025-11-17T20:22:30.314 [DEBUG] [Thread-60701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:22:30.314 [DEBUG] [Thread-60701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:22:30.314 [DEBUG] [Thread-60701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:22:30.314 [DEBUG] [Thread-60701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:22:30.331 [INFO] [Thread-60701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:22:30.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:22:30.986 [DEBUG] [Thread-60701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:22:30.986 [DEBUG] [Thread-60701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:22:30.986 [DEBUG] [Thread-60701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:22:31.027 [DEBUG] [Thread-60701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:22:31.027 [DEBUG] [Thread-60701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:22:31.029 [DEBUG] [Thread-60701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:22:31.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:22:31.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:22:31.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:22:31.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:22:31.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:22:31.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:22:31.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.765327 -999.00  +17.90   8.99     34   +1.80 1 1 1 1 1     0    0 4.33 -449.65 ZNESW 7.3 9.0 148.4 12.2 18.4 -23.3 18.3 -22.8 18.1 -22.4 18.3 -23.0
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.765327
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:22:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:22:19', tmtdew=18.52, humidity=28.23, cloud=0.0, wind=13.23, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:22:19', seeing=1.49, atlas_timestamp='2025-11-17T18:22:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:20:00')
2025-11-17T20:22:31.050 [DEBUG] [Thread-60701] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:22:31.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:22:31.134 [DEBUG] [Thread-60704] [transport.py] [_log()] starting thread (client mode): 0xd07129e0
2025-11-17T20:22:31.134 [DEBUG] [Thread-60704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:22:31.149 [DEBUG] [Thread-60704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:22:31.149 [INFO] [Thread-60704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:22:31.156 [DEBUG] [Thread-60704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] client lang: <none>
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] server lang: <none>
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] kex follows: False
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] Compression: none
2025-11-17T20:22:31.157 [DEBUG] [Thread-60704] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:22:31.215 [DEBUG] [Thread-60704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:22:31.215 [DEBUG] [Thread-60704] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:22:31.215 [DEBUG] [Thread-60704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:22:31.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:22:31.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:22:31.272 [DEBUG] [Thread-60704] [transport.py] [_log()] userauth is OK
2025-11-17T20:22:31.272 [DEBUG] [Thread-60704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:22:31.272 [DEBUG] [Thread-60704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:22:31.272 [DEBUG] [Thread-60704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:22:31.272 [DEBUG] [Thread-60704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:22:31.286 [INFO] [Thread-60704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:22:31.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:22:31.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:22:32.131 [DEBUG] [Thread-60704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:22:32.131 [DEBUG] [Thread-60704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:22:32.179 [DEBUG] [Thread-60704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:22:32.179 [DEBUG] [Thread-60704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:22:32.186 [DEBUG] [Thread-60704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:22:32.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:22:32.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:22:32.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:22:32.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:22:32.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:22:32.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:22:32.217 [DEBUG] [Thread-60704] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:22:36.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:22:36.211 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:22:37.101 [DEBUG] [Thread-60706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:22:45.186 [DEBUG] [Thread-60707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:23:00.216 [DEBUG] [Thread-60708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:23:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:23:02.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:23:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:23:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 22, 51), 18.34, 28.89, 0.0, 10.75, 17.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:23:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:22:51
2025-11-17T20:23:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:23:03.325 [DEBUG] [Thread-60709] [transport.py] [_log()] starting thread (client mode): 0xd31cef20
2025-11-17T20:23:03.325 [DEBUG] [Thread-60709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:23:03.346 [DEBUG] [Thread-60709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:23:03.346 [INFO] [Thread-60709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] client lang: <none>
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] server lang: <none>
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] kex follows: False
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] Compression: none
2025-11-17T20:23:03.348 [DEBUG] [Thread-60709] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:23:03.359 [DEBUG] [Thread-60709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:23:03.360 [DEBUG] [Thread-60709] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:23:03.360 [DEBUG] [Thread-60709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:23:03.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:23:03.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:23:03.361 [DEBUG] [Thread-60709] [transport.py] [_log()] userauth is OK
2025-11-17T20:23:03.361 [DEBUG] [Thread-60709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:23:03.361 [DEBUG] [Thread-60709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:23:03.361 [DEBUG] [Thread-60709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:23:03.361 [DEBUG] [Thread-60709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:23:03.373 [INFO] [Thread-60709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:23:03.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:23:04.018 [DEBUG] [Thread-60709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:23:04.018 [DEBUG] [Thread-60709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:23:04.018 [DEBUG] [Thread-60709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:23:04.059 [DEBUG] [Thread-60709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:23:04.059 [DEBUG] [Thread-60709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:23:04.061 [DEBUG] [Thread-60709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:23:04.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:23:04.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:23:04.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:23:04.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:23:04.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:23:04.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:23:04.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:23:04.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.765674 -999.00  +17.90  13.64     34   +1.90 1 1 1 1 1     0    0 5.41 -428.44 ZNESW 11.9 13.6 165.0 15.4 18.4 -23.3 18.3 -22.6 18.0 -22.4 18.3 -22.9
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.765674
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:23:04.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:22:51', tmtdew=18.34, humidity=28.89, cloud=0.0, wind=10.75, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:22:51', seeing=1.49, atlas_timestamp='2025-11-17T18:22:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:20:00')
2025-11-17T20:23:04.082 [DEBUG] [Thread-60709] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:23:04.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:23:04.167 [DEBUG] [Thread-60712] [transport.py] [_log()] starting thread (client mode): 0xd31cc5b0
2025-11-17T20:23:04.167 [DEBUG] [Thread-60712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:23:04.182 [DEBUG] [Thread-60712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:23:04.182 [INFO] [Thread-60712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] client lang: <none>
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] server lang: <none>
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] kex follows: False
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] Compression: none
2025-11-17T20:23:04.190 [DEBUG] [Thread-60712] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:23:04.251 [DEBUG] [Thread-60712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:23:04.251 [DEBUG] [Thread-60712] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:23:04.251 [DEBUG] [Thread-60712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:23:04.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:23:04.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:23:04.308 [DEBUG] [Thread-60712] [transport.py] [_log()] userauth is OK
2025-11-17T20:23:04.308 [DEBUG] [Thread-60712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:23:04.308 [DEBUG] [Thread-60712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:23:04.308 [DEBUG] [Thread-60712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:23:04.308 [DEBUG] [Thread-60712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:23:04.322 [INFO] [Thread-60712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:23:04.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:23:04.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:23:05.187 [DEBUG] [Thread-60712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:23:05.187 [DEBUG] [Thread-60712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:23:05.235 [DEBUG] [Thread-60712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:23:05.235 [DEBUG] [Thread-60712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:23:05.243 [DEBUG] [Thread-60712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:23:05.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:23:05.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:23:05.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:23:05.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:23:05.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:23:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:23:05.276 [DEBUG] [Thread-60712] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:23:15.242 [DEBUG] [Thread-60714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:23:30.278 [DEBUG] [Thread-60715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:23:35.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:23:35.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:23:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:23:36.413 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:23:36.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:23:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 23, 24), 18.39, 28.79, 0.0, 10.16, 17.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:23:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:23:24
2025-11-17T20:23:37.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:23:37.194 [DEBUG] [Thread-60716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:23:37.318 [DEBUG] [Thread-60717] [transport.py] [_log()] starting thread (client mode): 0xd07bd1b0
2025-11-17T20:23:37.318 [DEBUG] [Thread-60717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:23:37.338 [DEBUG] [Thread-60717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:23:37.338 [INFO] [Thread-60717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] client lang: <none>
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] server lang: <none>
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] kex follows: False
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] Compression: none
2025-11-17T20:23:37.341 [DEBUG] [Thread-60717] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:23:37.357 [DEBUG] [Thread-60717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:23:37.357 [DEBUG] [Thread-60717] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:23:37.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:23:37.358 [DEBUG] [Thread-60717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:23:37.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:23:37.358 [DEBUG] [Thread-60717] [transport.py] [_log()] userauth is OK
2025-11-17T20:23:37.358 [DEBUG] [Thread-60717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:23:37.358 [DEBUG] [Thread-60717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:23:37.358 [DEBUG] [Thread-60717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:23:37.358 [DEBUG] [Thread-60717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:23:37.367 [INFO] [Thread-60717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:23:37.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:23:37.967 [DEBUG] [Thread-60717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:23:37.968 [DEBUG] [Thread-60717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:23:37.968 [DEBUG] [Thread-60717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:23:38.008 [DEBUG] [Thread-60717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:23:38.008 [DEBUG] [Thread-60717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:23:38.010 [DEBUG] [Thread-60717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:23:38.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:23:38.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:23:38.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:23:38.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:23:38.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:23:38.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:23:38.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.766022 -999.00  +17.90  12.41     34   +1.90 1 2 1 1 1     0    0 5.25 -412.76 ZNeSW 10.3 12.4 159.2 15.6 18.4 -23.5 18.2 -22.9 18.0 -22.6 18.3 -23.2
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.766022
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:23:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:23:24', tmtdew=18.39, humidity=28.79, cloud=0.0, wind=10.16, temperature=17.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:23:24', seeing=1.5, atlas_timestamp='2025-11-17T18:23:04.301', atlas_cloud=2, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:20:00')
2025-11-17T20:23:38.023 [DEBUG] [Thread-60717] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:23:38.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:23:38.107 [DEBUG] [Thread-60720] [transport.py] [_log()] starting thread (client mode): 0xd0786a10
2025-11-17T20:23:38.107 [DEBUG] [Thread-60720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:23:38.123 [DEBUG] [Thread-60720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:23:38.123 [INFO] [Thread-60720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] client lang: <none>
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] server lang: <none>
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] kex follows: False
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:23:38.131 [DEBUG] [Thread-60720] [transport.py] [_log()] Compression: none
2025-11-17T20:23:38.132 [DEBUG] [Thread-60720] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:23:38.186 [DEBUG] [Thread-60720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:23:38.186 [DEBUG] [Thread-60720] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:23:38.186 [DEBUG] [Thread-60720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:23:38.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:23:38.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:23:38.244 [DEBUG] [Thread-60720] [transport.py] [_log()] userauth is OK
2025-11-17T20:23:38.244 [DEBUG] [Thread-60720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:23:38.244 [DEBUG] [Thread-60720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:23:38.244 [DEBUG] [Thread-60720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:23:38.244 [DEBUG] [Thread-60720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:23:38.258 [INFO] [Thread-60720] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:23:38.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:23:38.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:23:39.115 [DEBUG] [Thread-60720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:23:39.116 [DEBUG] [Thread-60720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:23:39.163 [DEBUG] [Thread-60720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:23:39.163 [DEBUG] [Thread-60720] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:23:39.172 [DEBUG] [Thread-60720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:23:39.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:23:39.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:23:39.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:23:39.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:23:39.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:23:39.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:23:39.205 [DEBUG] [Thread-60720] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:23:45.306 [DEBUG] [Thread-60722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:24:00.355 [DEBUG] [Thread-60723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:24:09.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:24:09.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:24:09.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:24:10.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 23, 56), 18.42, 28.73, 0.0, 12.79, 17.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:24:10.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:23:56
2025-11-17T20:24:10.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:24:10.306 [DEBUG] [Thread-60724] [transport.py] [_log()] starting thread (client mode): 0xd07cc1f0
2025-11-17T20:24:10.306 [DEBUG] [Thread-60724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:24:10.327 [DEBUG] [Thread-60724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:24:10.327 [INFO] [Thread-60724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] client lang: <none>
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] server lang: <none>
2025-11-17T20:24:10.337 [DEBUG] [Thread-60724] [transport.py] [_log()] kex follows: False
2025-11-17T20:24:10.338 [DEBUG] [Thread-60724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:24:10.338 [DEBUG] [Thread-60724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:24:10.338 [DEBUG] [Thread-60724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:24:10.338 [DEBUG] [Thread-60724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:24:10.338 [DEBUG] [Thread-60724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:24:10.338 [DEBUG] [Thread-60724] [transport.py] [_log()] Compression: none
2025-11-17T20:24:10.338 [DEBUG] [Thread-60724] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:24:10.357 [DEBUG] [Thread-60724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:24:10.357 [DEBUG] [Thread-60724] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:24:10.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:24:10.358 [DEBUG] [Thread-60724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:24:10.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:24:10.360 [DEBUG] [Thread-60724] [transport.py] [_log()] userauth is OK
2025-11-17T20:24:10.360 [DEBUG] [Thread-60724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:24:10.360 [DEBUG] [Thread-60724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:24:10.360 [DEBUG] [Thread-60724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:24:10.360 [DEBUG] [Thread-60724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:24:10.376 [INFO] [Thread-60724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:24:10.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:24:10.995 [DEBUG] [Thread-60724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:24:10.995 [DEBUG] [Thread-60724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:24:10.995 [DEBUG] [Thread-60724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:24:11.036 [DEBUG] [Thread-60724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:24:11.037 [DEBUG] [Thread-60724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:24:11.039 [DEBUG] [Thread-60724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:24:11.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:24:11.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:24:11.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:24:11.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:24:11.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:24:11.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:24:11.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:24:11.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:24:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:24:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.766369 -999.00  +17.90   7.14     34   +1.80 1 2 1 1 1     0    0 5.53 -401.21 ZNeSW 10.4 7.1 166.6 15.9 18.3 -23.6 18.3 -23.0 18.0 -22.6 18.3 -23.1
2025-11-17T20:24:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:24:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:24:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.766369
2025-11-17T20:24:11.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:24:11.058 [DEBUG] [Thread-60724] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:24:11.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:24:11.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:24:11.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:24:11.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:24:11.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:23:56', tmtdew=18.42, humidity=28.73, cloud=0.0, wind=12.79, temperature=17.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:23:56', seeing=1.48, atlas_timestamp='2025-11-17T18:23:34.282', atlas_cloud=2, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:20:00')
2025-11-17T20:24:11.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:24:11.152 [DEBUG] [Thread-60727] [transport.py] [_log()] starting thread (client mode): 0xd07125f0
2025-11-17T20:24:11.152 [DEBUG] [Thread-60727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:24:11.169 [DEBUG] [Thread-60727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:24:11.169 [INFO] [Thread-60727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:24:11.176 [DEBUG] [Thread-60727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:24:11.176 [DEBUG] [Thread-60727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:24:11.176 [DEBUG] [Thread-60727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] client lang: <none>
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] server lang: <none>
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] kex follows: False
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] Compression: none
2025-11-17T20:24:11.177 [DEBUG] [Thread-60727] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:24:11.240 [DEBUG] [Thread-60727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:24:11.241 [DEBUG] [Thread-60727] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:24:11.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:24:11.242 [DEBUG] [Thread-60727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:24:11.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:24:11.297 [DEBUG] [Thread-60727] [transport.py] [_log()] userauth is OK
2025-11-17T20:24:11.298 [DEBUG] [Thread-60727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:24:11.298 [DEBUG] [Thread-60727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:24:11.298 [DEBUG] [Thread-60727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:24:11.298 [DEBUG] [Thread-60727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:24:11.317 [INFO] [Thread-60727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:24:11.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:24:11.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:24:12.142 [DEBUG] [Thread-60727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:24:12.142 [DEBUG] [Thread-60727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:24:12.190 [DEBUG] [Thread-60727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:24:12.190 [DEBUG] [Thread-60727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:24:12.198 [DEBUG] [Thread-60727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:24:12.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:24:12.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:24:12.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:24:12.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:24:12.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:24:12.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:24:12.230 [DEBUG] [Thread-60727] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:24:15.385 [DEBUG] [Thread-60729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:24:30.419 [DEBUG] [Thread-60730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:24:36.616 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:24:36.619 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:24:37.308 [DEBUG] [Thread-60731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:24:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:24:42.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:24:42.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:24:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 24, 28), 18.39, 28.79, 0.0, 10.99, 17.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:24:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:24:28
2025-11-17T20:24:43.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:24:43.217 [DEBUG] [Thread-60732] [transport.py] [_log()] starting thread (client mode): 0xd078de70
2025-11-17T20:24:43.217 [DEBUG] [Thread-60732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:24:43.230 [DEBUG] [Thread-60732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:24:43.230 [INFO] [Thread-60732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] client lang: <none>
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] server lang: <none>
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] kex follows: False
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] Compression: none
2025-11-17T20:24:43.239 [DEBUG] [Thread-60732] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:24:43.253 [DEBUG] [Thread-60732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:24:43.253 [DEBUG] [Thread-60732] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:24:43.253 [DEBUG] [Thread-60732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:24:43.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:24:43.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:24:43.255 [DEBUG] [Thread-60732] [transport.py] [_log()] userauth is OK
2025-11-17T20:24:43.255 [DEBUG] [Thread-60732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:24:43.256 [DEBUG] [Thread-60732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:24:43.256 [DEBUG] [Thread-60732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:24:43.256 [DEBUG] [Thread-60732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:24:43.269 [INFO] [Thread-60732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:24:43.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:24:43.840 [DEBUG] [Thread-60732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:24:43.840 [DEBUG] [Thread-60732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:24:43.840 [DEBUG] [Thread-60732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:24:43.880 [DEBUG] [Thread-60732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:24:43.880 [DEBUG] [Thread-60732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:24:43.890 [DEBUG] [Thread-60732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:24:43.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:24:43.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:24:43.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:24:43.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:24:43.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:24:43.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:24:43.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:24:43.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:24:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:24:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.767063 -999.00  +17.80   8.01     34   +1.80 1 1 1 1 1     0    0 6.64 -359.99 ZNeSW 11.2 8.0 179.8 10.9 18.3 -23.7 18.2 -23.4 18.0 -22.7 18.2 -23.6
2025-11-17T20:24:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:24:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:24:43.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.767063
2025-11-17T20:24:43.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:24:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:24:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:24:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:24:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:24:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:24:28', tmtdew=18.39, humidity=28.79, cloud=0.0, wind=10.99, temperature=17.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:24:29', seeing=1.22, atlas_timestamp='2025-11-17T18:24:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:23:00')
2025-11-17T20:24:43.911 [DEBUG] [Thread-60732] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:24:44.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:24:44.021 [DEBUG] [Thread-60735] [transport.py] [_log()] starting thread (client mode): 0xd07114e0
2025-11-17T20:24:44.021 [DEBUG] [Thread-60735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:24:44.035 [DEBUG] [Thread-60735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:24:44.035 [INFO] [Thread-60735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] client lang: <none>
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] server lang: <none>
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] kex follows: False
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:24:44.043 [DEBUG] [Thread-60735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:24:44.044 [DEBUG] [Thread-60735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:24:44.044 [DEBUG] [Thread-60735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:24:44.044 [DEBUG] [Thread-60735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:24:44.044 [DEBUG] [Thread-60735] [transport.py] [_log()] Compression: none
2025-11-17T20:24:44.044 [DEBUG] [Thread-60735] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:24:44.109 [DEBUG] [Thread-60735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:24:44.109 [DEBUG] [Thread-60735] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:24:44.109 [DEBUG] [Thread-60735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:24:44.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:24:44.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:24:44.164 [DEBUG] [Thread-60735] [transport.py] [_log()] userauth is OK
2025-11-17T20:24:44.164 [DEBUG] [Thread-60735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:24:44.164 [DEBUG] [Thread-60735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:24:44.164 [DEBUG] [Thread-60735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:24:44.165 [DEBUG] [Thread-60735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:24:44.183 [INFO] [Thread-60735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:24:44.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:24:44.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:24:45.006 [DEBUG] [Thread-60735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:24:45.006 [DEBUG] [Thread-60735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:24:45.054 [DEBUG] [Thread-60735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:24:45.054 [DEBUG] [Thread-60735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:24:45.063 [DEBUG] [Thread-60735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:24:45.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:24:45.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:24:45.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:24:45.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:24:45.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:24:45.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:24:45.099 [DEBUG] [Thread-60735] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:24:45.446 [DEBUG] [Thread-60737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:25:00.493 [DEBUG] [Thread-60738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:25:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:25:15.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:25:15.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:25:15.521 [DEBUG] [Thread-60739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:25:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 25, 4), 18.38, 28.83, 0.0, 11.58, 17.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:25:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:25:04
2025-11-17T20:25:15.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:25:16.109 [DEBUG] [Thread-60740] [transport.py] [_log()] starting thread (client mode): 0xd0713e20
2025-11-17T20:25:16.109 [DEBUG] [Thread-60740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:25:16.129 [DEBUG] [Thread-60740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:25:16.129 [INFO] [Thread-60740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:25:16.132 [DEBUG] [Thread-60740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:25:16.132 [DEBUG] [Thread-60740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:25:16.132 [DEBUG] [Thread-60740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] client lang: <none>
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] server lang: <none>
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] kex follows: False
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:25:16.133 [DEBUG] [Thread-60740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:25:16.134 [DEBUG] [Thread-60740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:25:16.134 [DEBUG] [Thread-60740] [transport.py] [_log()] Compression: none
2025-11-17T20:25:16.134 [DEBUG] [Thread-60740] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:25:16.152 [DEBUG] [Thread-60740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:25:16.152 [DEBUG] [Thread-60740] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:25:16.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:25:16.154 [DEBUG] [Thread-60740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:25:16.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:25:16.156 [DEBUG] [Thread-60740] [transport.py] [_log()] userauth is OK
2025-11-17T20:25:16.156 [DEBUG] [Thread-60740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:25:16.156 [DEBUG] [Thread-60740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:25:16.156 [DEBUG] [Thread-60740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:25:16.157 [DEBUG] [Thread-60740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:25:16.181 [INFO] [Thread-60740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:25:16.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:25:16.780 [DEBUG] [Thread-60740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:25:16.780 [DEBUG] [Thread-60740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:25:16.780 [DEBUG] [Thread-60740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:25:16.820 [DEBUG] [Thread-60740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:25:16.820 [DEBUG] [Thread-60740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:25:16.823 [DEBUG] [Thread-60740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:25:16.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:25:16.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:25:16.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:25:16.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:25:16.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:25:16.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:25:16.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:25:16.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:25:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:25:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.767063 -999.00  +17.80   8.01     34   +1.80 1 1 1 1 1     0    0 6.64 -359.99 ZNeSW 11.2 8.0 179.8 10.9 18.3 -23.7 18.2 -23.4 18.0 -22.7 18.2 -23.6
2025-11-17T20:25:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:25:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:25:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.767063
2025-11-17T20:25:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:25:16.844 [DEBUG] [Thread-60740] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:25:16.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:25:16.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:25:16.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:25:16.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:25:16.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:25:04', tmtdew=18.38, humidity=28.83, cloud=0.0, wind=11.58, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:25:04', seeing=1.43, atlas_timestamp='2025-11-17T18:24:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:23:00')
2025-11-17T20:25:16.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:25:16.950 [DEBUG] [Thread-60743] [transport.py] [_log()] starting thread (client mode): 0xd0711e40
2025-11-17T20:25:16.950 [DEBUG] [Thread-60743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:25:16.965 [DEBUG] [Thread-60743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:25:16.965 [INFO] [Thread-60743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:25:16.972 [DEBUG] [Thread-60743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] client lang: <none>
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] server lang: <none>
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] kex follows: False
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:25:16.973 [DEBUG] [Thread-60743] [transport.py] [_log()] Compression: none
2025-11-17T20:25:16.974 [DEBUG] [Thread-60743] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:25:17.032 [DEBUG] [Thread-60743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:25:17.032 [DEBUG] [Thread-60743] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:25:17.033 [DEBUG] [Thread-60743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:25:17.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:25:17.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:25:17.088 [DEBUG] [Thread-60743] [transport.py] [_log()] userauth is OK
2025-11-17T20:25:17.088 [DEBUG] [Thread-60743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:25:17.089 [DEBUG] [Thread-60743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:25:17.089 [DEBUG] [Thread-60743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:25:17.089 [DEBUG] [Thread-60743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:25:17.107 [INFO] [Thread-60743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:25:17.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:25:17.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:25:17.946 [DEBUG] [Thread-60743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:25:17.946 [DEBUG] [Thread-60743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:25:17.993 [DEBUG] [Thread-60743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:25:17.993 [DEBUG] [Thread-60743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:25:18.002 [DEBUG] [Thread-60743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:25:18.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:25:18.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:25:18.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:25:18.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:25:18.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:25:18.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:25:18.036 [DEBUG] [Thread-60743] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:25:30.550 [DEBUG] [Thread-60745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:25:36.826 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:25:36.827 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:25:37.382 [DEBUG] [Thread-60746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:25:45.592 [DEBUG] [Thread-60747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:25:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:25:48.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:25:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:25:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 25, 36), 18.3, 28.76, 0.0, 11.65, 17.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:25:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:25:36
2025-11-17T20:25:48.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:25:49.049 [DEBUG] [Thread-60748] [transport.py] [_log()] starting thread (client mode): 0xd07119f0
2025-11-17T20:25:49.050 [DEBUG] [Thread-60748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:25:49.070 [DEBUG] [Thread-60748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:25:49.071 [INFO] [Thread-60748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] client lang: <none>
2025-11-17T20:25:49.074 [DEBUG] [Thread-60748] [transport.py] [_log()] server lang: <none>
2025-11-17T20:25:49.075 [DEBUG] [Thread-60748] [transport.py] [_log()] kex follows: False
2025-11-17T20:25:49.075 [DEBUG] [Thread-60748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:25:49.075 [DEBUG] [Thread-60748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:25:49.075 [DEBUG] [Thread-60748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:25:49.075 [DEBUG] [Thread-60748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:25:49.075 [DEBUG] [Thread-60748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:25:49.075 [DEBUG] [Thread-60748] [transport.py] [_log()] Compression: none
2025-11-17T20:25:49.075 [DEBUG] [Thread-60748] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:25:49.093 [DEBUG] [Thread-60748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:25:49.094 [DEBUG] [Thread-60748] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:25:49.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:25:49.095 [DEBUG] [Thread-60748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:25:49.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:25:49.097 [DEBUG] [Thread-60748] [transport.py] [_log()] userauth is OK
2025-11-17T20:25:49.098 [DEBUG] [Thread-60748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:25:49.098 [DEBUG] [Thread-60748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:25:49.098 [DEBUG] [Thread-60748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:25:49.098 [DEBUG] [Thread-60748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:25:49.122 [INFO] [Thread-60748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:25:49.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:25:49.767 [DEBUG] [Thread-60748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:25:49.767 [DEBUG] [Thread-60748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:25:49.768 [DEBUG] [Thread-60748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:25:49.808 [DEBUG] [Thread-60748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:25:49.808 [DEBUG] [Thread-60748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:25:49.811 [DEBUG] [Thread-60748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:25:49.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:25:49.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:25:49.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:25:49.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:25:49.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:25:49.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:25:49.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:25:49.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:25:49.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:25:49.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.767411 -999.00  +17.80  10.07     34   +1.90 1 2 1 1 1     0    0 6.47 -360.09 ZNeSW 11.8 10.1 181.4 14.9 18.3 -23.8 18.2 -23.3 17.9 -22.7 18.2 -23.3
2025-11-17T20:25:49.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:25:49.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:25:49.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.767411
2025-11-17T20:25:49.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:25:49.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:25:49.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:25:49.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:25:49.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T20:25:49.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:25:36', tmtdew=18.3, humidity=28.76, cloud=0.0, wind=11.65, temperature=17.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:25:36', seeing=1.48, atlas_timestamp='2025-11-17T18:25:04.310', atlas_cloud=2, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:23:00')
2025-11-17T20:25:49.834 [DEBUG] [Thread-60748] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:25:49.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:25:49.929 [DEBUG] [Thread-60751] [transport.py] [_log()] starting thread (client mode): 0xd0711120
2025-11-17T20:25:49.929 [DEBUG] [Thread-60751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:25:49.943 [DEBUG] [Thread-60751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:25:49.943 [INFO] [Thread-60751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:25:49.951 [DEBUG] [Thread-60751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:25:49.951 [DEBUG] [Thread-60751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:25:49.951 [DEBUG] [Thread-60751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:25:49.951 [DEBUG] [Thread-60751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:25:49.951 [DEBUG] [Thread-60751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] client lang: <none>
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] server lang: <none>
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] kex follows: False
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] Compression: none
2025-11-17T20:25:49.952 [DEBUG] [Thread-60751] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:25:50.008 [DEBUG] [Thread-60751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:25:50.008 [DEBUG] [Thread-60751] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:25:50.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:25:50.009 [DEBUG] [Thread-60751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:25:50.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:25:50.068 [DEBUG] [Thread-60751] [transport.py] [_log()] userauth is OK
2025-11-17T20:25:50.068 [DEBUG] [Thread-60751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:25:50.068 [DEBUG] [Thread-60751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:25:50.068 [DEBUG] [Thread-60751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:25:50.068 [DEBUG] [Thread-60751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:25:50.090 [INFO] [Thread-60751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:25:50.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:25:50.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:25:50.953 [DEBUG] [Thread-60751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:25:50.953 [DEBUG] [Thread-60751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:25:51.005 [DEBUG] [Thread-60751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:25:51.005 [DEBUG] [Thread-60751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:25:51.014 [DEBUG] [Thread-60751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:25:51.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:25:51.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:25:51.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:25:51.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:25:51.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:25:51.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:25:51.048 [DEBUG] [Thread-60751] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:26:00.633 [DEBUG] [Thread-60753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:26:15.689 [DEBUG] [Thread-60754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:26:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:26:21.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:26:21.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:26:21.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 26, 8), 18.3, 28.76, 0.0, 10.83, 17.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:26:21.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:26:08
2025-11-17T20:26:21.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:26:22.013 [DEBUG] [Thread-60755] [transport.py] [_log()] starting thread (client mode): 0xd0711660
2025-11-17T20:26:22.013 [DEBUG] [Thread-60755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:26:22.034 [DEBUG] [Thread-60755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:26:22.034 [INFO] [Thread-60755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] client lang: <none>
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] server lang: <none>
2025-11-17T20:26:22.037 [DEBUG] [Thread-60755] [transport.py] [_log()] kex follows: False
2025-11-17T20:26:22.038 [DEBUG] [Thread-60755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:26:22.038 [DEBUG] [Thread-60755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:26:22.038 [DEBUG] [Thread-60755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:26:22.038 [DEBUG] [Thread-60755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:26:22.038 [DEBUG] [Thread-60755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:26:22.038 [DEBUG] [Thread-60755] [transport.py] [_log()] Compression: none
2025-11-17T20:26:22.038 [DEBUG] [Thread-60755] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:26:22.052 [DEBUG] [Thread-60755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:26:22.053 [DEBUG] [Thread-60755] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:26:22.053 [DEBUG] [Thread-60755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:26:22.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:26:22.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:26:22.054 [DEBUG] [Thread-60755] [transport.py] [_log()] userauth is OK
2025-11-17T20:26:22.054 [DEBUG] [Thread-60755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:26:22.054 [DEBUG] [Thread-60755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:26:22.054 [DEBUG] [Thread-60755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:26:22.054 [DEBUG] [Thread-60755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:26:22.071 [INFO] [Thread-60755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:26:22.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:26:22.732 [DEBUG] [Thread-60755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:26:22.732 [DEBUG] [Thread-60755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:26:22.733 [DEBUG] [Thread-60755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:26:22.773 [DEBUG] [Thread-60755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:26:22.773 [DEBUG] [Thread-60755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:26:22.776 [DEBUG] [Thread-60755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:26:22.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:26:22.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:26:22.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:26:22.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:26:22.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:26:22.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:26:22.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:26:22.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:26:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:26:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.767758 -999.00  +17.80  10.20     34   +1.90 1 1 1 1 1     0    0 7.48 -328.52 ZNeSW 9.5 10.2 181.0 14.5 18.3 -23.8 18.2 -23.4 17.9 -22.8 18.2 -23.4
2025-11-17T20:26:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:26:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:26:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.767758
2025-11-17T20:26:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:26:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:26:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:26:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:26:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:26:22.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:26:08', tmtdew=18.3, humidity=28.76, cloud=0.0, wind=10.83, temperature=17.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:26:08', seeing=1.37, atlas_timestamp='2025-11-17T18:25:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:23:00')
2025-11-17T20:26:22.802 [DEBUG] [Thread-60755] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:26:22.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:26:22.900 [DEBUG] [Thread-60758] [transport.py] [_log()] starting thread (client mode): 0xd0710400
2025-11-17T20:26:22.900 [DEBUG] [Thread-60758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:26:22.915 [DEBUG] [Thread-60758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:26:22.915 [INFO] [Thread-60758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] client lang: <none>
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] server lang: <none>
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] kex follows: False
2025-11-17T20:26:22.923 [DEBUG] [Thread-60758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:26:22.924 [DEBUG] [Thread-60758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:26:22.924 [DEBUG] [Thread-60758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:26:22.924 [DEBUG] [Thread-60758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:26:22.924 [DEBUG] [Thread-60758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:26:22.924 [DEBUG] [Thread-60758] [transport.py] [_log()] Compression: none
2025-11-17T20:26:22.924 [DEBUG] [Thread-60758] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:26:22.981 [DEBUG] [Thread-60758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:26:22.981 [DEBUG] [Thread-60758] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:26:22.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:26:22.982 [DEBUG] [Thread-60758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:26:22.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:26:23.036 [DEBUG] [Thread-60758] [transport.py] [_log()] userauth is OK
2025-11-17T20:26:23.036 [DEBUG] [Thread-60758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:26:23.036 [DEBUG] [Thread-60758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:26:23.037 [DEBUG] [Thread-60758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:26:23.037 [DEBUG] [Thread-60758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:26:23.056 [INFO] [Thread-60758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:26:23.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:26:23.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:26:23.914 [DEBUG] [Thread-60758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:26:23.914 [DEBUG] [Thread-60758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:26:23.962 [DEBUG] [Thread-60758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:26:23.963 [DEBUG] [Thread-60758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:26:23.972 [DEBUG] [Thread-60758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:26:23.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:26:23.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:26:23.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:26:24.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:26:24.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:26:24.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:26:24.008 [DEBUG] [Thread-60758] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:26:30.719 [DEBUG] [Thread-60760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:26:37.029 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:26:37.029 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:26:37.442 [DEBUG] [Thread-60761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:26:45.768 [DEBUG] [Thread-60762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:26:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:26:54.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:26:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:26:54.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 26, 40), 18.27, 28.84, 0.0, 12.62, 17.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:26:54.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:26:40
2025-11-17T20:26:54.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:26:54.984 [DEBUG] [Thread-60763] [transport.py] [_log()] starting thread (client mode): 0xd0710760
2025-11-17T20:26:54.984 [DEBUG] [Thread-60763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:26:55.005 [DEBUG] [Thread-60763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:26:55.005 [INFO] [Thread-60763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:26:55.008 [DEBUG] [Thread-60763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:26:55.008 [DEBUG] [Thread-60763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:26:55.008 [DEBUG] [Thread-60763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:26:55.008 [DEBUG] [Thread-60763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] client lang: <none>
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] server lang: <none>
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] kex follows: False
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:26:55.009 [DEBUG] [Thread-60763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:26:55.010 [DEBUG] [Thread-60763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:26:55.010 [DEBUG] [Thread-60763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:26:55.010 [DEBUG] [Thread-60763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:26:55.010 [DEBUG] [Thread-60763] [transport.py] [_log()] Compression: none
2025-11-17T20:26:55.010 [DEBUG] [Thread-60763] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:26:55.030 [DEBUG] [Thread-60763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:26:55.030 [DEBUG] [Thread-60763] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:26:55.031 [DEBUG] [Thread-60763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:26:55.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:26:55.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:26:55.033 [DEBUG] [Thread-60763] [transport.py] [_log()] userauth is OK
2025-11-17T20:26:55.033 [DEBUG] [Thread-60763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:26:55.033 [DEBUG] [Thread-60763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:26:55.033 [DEBUG] [Thread-60763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:26:55.033 [DEBUG] [Thread-60763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:26:55.060 [INFO] [Thread-60763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:26:55.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:26:55.639 [DEBUG] [Thread-60763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:26:55.639 [DEBUG] [Thread-60763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:26:55.640 [DEBUG] [Thread-60763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:26:55.680 [DEBUG] [Thread-60763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:26:55.680 [DEBUG] [Thread-60763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:26:55.683 [DEBUG] [Thread-60763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:26:55.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:26:55.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:26:55.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:26:55.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:26:55.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:26:55.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:26:55.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:26:55.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:26:55.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:26:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.768105 -999.00  +17.80   8.84     34   +1.90 1 1 1 1 1     0    0 8.46 -298.47 ZNESW 11.1 8.8 174.8 16.3 18.2 -24.0 18.2 -23.3 17.9 -22.7 18.2 -23.4
2025-11-17T20:26:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:26:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:26:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.768105
2025-11-17T20:26:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:26:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:26:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:26:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:26:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:26:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:26:40', tmtdew=18.27, humidity=28.84, cloud=0.0, wind=12.62, temperature=17.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:26:40', seeing=1.37, atlas_timestamp='2025-11-17T18:26:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:23:00')
2025-11-17T20:26:55.710 [DEBUG] [Thread-60763] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:26:55.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:26:55.813 [DEBUG] [Thread-60766] [transport.py] [_log()] starting thread (client mode): 0xd0711ea0
2025-11-17T20:26:55.813 [DEBUG] [Thread-60766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:26:55.827 [DEBUG] [Thread-60766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:26:55.828 [INFO] [Thread-60766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:26:55.835 [DEBUG] [Thread-60766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:26:55.835 [DEBUG] [Thread-60766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:26:55.835 [DEBUG] [Thread-60766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] client lang: <none>
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] server lang: <none>
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] kex follows: False
2025-11-17T20:26:55.836 [DEBUG] [Thread-60766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:26:55.837 [DEBUG] [Thread-60766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:26:55.837 [DEBUG] [Thread-60766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:26:55.837 [DEBUG] [Thread-60766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:26:55.837 [DEBUG] [Thread-60766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:26:55.837 [DEBUG] [Thread-60766] [transport.py] [_log()] Compression: none
2025-11-17T20:26:55.837 [DEBUG] [Thread-60766] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:26:55.892 [DEBUG] [Thread-60766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:26:55.901 [DEBUG] [Thread-60766] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:26:55.901 [DEBUG] [Thread-60766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:26:55.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:26:55.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:26:55.948 [DEBUG] [Thread-60766] [transport.py] [_log()] userauth is OK
2025-11-17T20:26:55.948 [DEBUG] [Thread-60766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:26:55.948 [DEBUG] [Thread-60766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:26:55.948 [DEBUG] [Thread-60766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:26:55.948 [DEBUG] [Thread-60766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:26:55.967 [INFO] [Thread-60766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:26:55.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:26:55.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:26:56.816 [DEBUG] [Thread-60766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:26:56.817 [DEBUG] [Thread-60766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:26:56.864 [DEBUG] [Thread-60766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:26:56.864 [DEBUG] [Thread-60766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:26:56.873 [DEBUG] [Thread-60766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:26:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:26:56.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:26:56.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:26:56.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:26:56.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:26:56.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:26:56.907 [DEBUG] [Thread-60766] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:27:00.796 [DEBUG] [Thread-60768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:27:15.843 [DEBUG] [Thread-60769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:27:26.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:27:26.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:27:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:27:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 27, 12), 18.28, 28.81, 0.0, 12.0, 17.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:27:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:27:12
2025-11-17T20:27:27.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:27:27.907 [DEBUG] [Thread-60770] [transport.py] [_log()] starting thread (client mode): 0xd078e3e0
2025-11-17T20:27:27.907 [DEBUG] [Thread-60770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:27:27.926 [DEBUG] [Thread-60770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:27:27.926 [INFO] [Thread-60770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] client lang: <none>
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] server lang: <none>
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] kex follows: False
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:27:27.930 [DEBUG] [Thread-60770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:27:27.931 [DEBUG] [Thread-60770] [transport.py] [_log()] Compression: none
2025-11-17T20:27:27.931 [DEBUG] [Thread-60770] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:27:27.946 [DEBUG] [Thread-60770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:27:27.947 [DEBUG] [Thread-60770] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:27:27.947 [DEBUG] [Thread-60770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:27:27.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:27:27.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:27:27.948 [DEBUG] [Thread-60770] [transport.py] [_log()] userauth is OK
2025-11-17T20:27:27.948 [DEBUG] [Thread-60770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:27:27.948 [DEBUG] [Thread-60770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:27:27.948 [DEBUG] [Thread-60770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:27:27.948 [DEBUG] [Thread-60770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:27:27.956 [INFO] [Thread-60770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:27:27.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:27:28.601 [DEBUG] [Thread-60770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:27:28.601 [DEBUG] [Thread-60770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:27:28.601 [DEBUG] [Thread-60770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:27:28.642 [DEBUG] [Thread-60770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:27:28.642 [DEBUG] [Thread-60770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:27:28.645 [DEBUG] [Thread-60770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:27:28.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:27:28.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:27:28.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:27:28.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:27:28.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:27:28.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:27:28.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:27:28.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:27:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:27:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.768452 -999.00  +17.80  12.30     34   +1.90 1 1 1 1 1     0    0 8.21 -297.14 ZNESW 12.5 12.3 177.4 14.2 18.2 -24.0 18.2 -23.4 17.9 -22.8 18.2 -23.4
2025-11-17T20:27:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:27:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:27:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.768452
2025-11-17T20:27:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:27:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:27:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:27:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:27:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:27:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:27:12', tmtdew=18.28, humidity=28.81, cloud=0.0, wind=12.0, temperature=17.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:27:12', seeing=1.37, atlas_timestamp='2025-11-17T18:26:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.4707499999999989, 0.4202500000000011, 0.26475000000000115, 0.2184999999999988, 0.2914999999999992, 0.635250000000001, 0.4759999999999991, 0.3127500000000012, 0.3069999999999986, 0.35599999999999987, 0.24924999999999997, 0.14449999999999896, 0.192499999999999, 0.6502499999999998, 0.3689999999999998, 0.16199999999999903, 0.17874999999999908, 0.2959999999999994, 0.41499999999999915, 0.2262499999999985, 0.20199999999999818, 0.2182499999999976, 0.3597500000000018, 0.3922499999999989, 0.5419999999999989, 0.5235000000000003, 0.6462500000000002, 0.18849999999999945, 0.11599999999999966, 0.5565000000000007, 0.4610000000000012, 0.09800000000000075, 0.33174999999999955], zp_timestamp='2025-11-17T18:23:00')
2025-11-17T20:27:28.663 [DEBUG] [Thread-60770] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:27:28.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:27:28.749 [DEBUG] [Thread-60773] [transport.py] [_log()] starting thread (client mode): 0xd3151030
2025-11-17T20:27:28.749 [DEBUG] [Thread-60773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:27:28.763 [DEBUG] [Thread-60773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:27:28.764 [INFO] [Thread-60773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] client lang: <none>
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] server lang: <none>
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] kex follows: False
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:27:28.771 [DEBUG] [Thread-60773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:27:28.772 [DEBUG] [Thread-60773] [transport.py] [_log()] Compression: none
2025-11-17T20:27:28.772 [DEBUG] [Thread-60773] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:27:28.826 [DEBUG] [Thread-60773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:27:28.827 [DEBUG] [Thread-60773] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:27:28.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:27:28.836 [DEBUG] [Thread-60773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:27:28.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:27:28.886 [DEBUG] [Thread-60773] [transport.py] [_log()] userauth is OK
2025-11-17T20:27:28.886 [DEBUG] [Thread-60773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:27:28.886 [DEBUG] [Thread-60773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:27:28.886 [DEBUG] [Thread-60773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:27:28.886 [DEBUG] [Thread-60773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:27:28.900 [INFO] [Thread-60773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:27:28.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:27:28.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:27:29.800 [DEBUG] [Thread-60773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:27:29.800 [DEBUG] [Thread-60773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:27:29.848 [DEBUG] [Thread-60773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:27:29.848 [DEBUG] [Thread-60773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:27:29.856 [DEBUG] [Thread-60773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:27:29.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:27:29.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:27: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
2025-11-17T20:27:29.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:27:29.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:27:29.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:27:29.888 [DEBUG] [Thread-60773] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:27:30.872 [DEBUG] [Thread-60775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:27:37.233 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:27:37.233 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:27:37.525 [DEBUG] [Thread-60776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:27:45.901 [DEBUG] [Thread-60777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:27:59.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:27:59.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:27:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:28:00.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 27, 44), 18.23, 28.91, 0.0, 12.72, 17.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:28:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:27:44
2025-11-17T20:28:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:28:00.876 [DEBUG] [Thread-60778] [transport.py] [_log()] starting thread (client mode): 0xd07107f0
2025-11-17T20:28:00.876 [DEBUG] [Thread-60778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:28:00.896 [DEBUG] [Thread-60778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:28:00.896 [INFO] [Thread-60778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:28:00.900 [DEBUG] [Thread-60778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:28:00.900 [DEBUG] [Thread-60778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:28:00.900 [DEBUG] [Thread-60778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:28:00.900 [DEBUG] [Thread-60778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:28:00.900 [DEBUG] [Thread-60778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:28:00.900 [DEBUG] [Thread-60778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:28:00.900 [DEBUG] [Thread-60778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] client lang: <none>
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] server lang: <none>
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] kex follows: False
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] Compression: none
2025-11-17T20:28:00.901 [DEBUG] [Thread-60778] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:28:00.919 [DEBUG] [Thread-60778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:28:00.920 [DEBUG] [Thread-60778] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:28:00.920 [DEBUG] [Thread-60778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:28:00.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:28:00.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:28:00.922 [DEBUG] [Thread-60778] [transport.py] [_log()] userauth is OK
2025-11-17T20:28:00.922 [DEBUG] [Thread-60778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:28:00.922 [DEBUG] [Thread-60778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:28:00.922 [DEBUG] [Thread-60778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:28:00.922 [DEBUG] [Thread-60778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:28:00.940 [DEBUG] [Thread-60780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:28:00.945 [INFO] [Thread-60778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:28:00.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:28:01.597 [DEBUG] [Thread-60778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:28:01.597 [DEBUG] [Thread-60778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:28:01.597 [DEBUG] [Thread-60778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:28:01.637 [DEBUG] [Thread-60778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:28:01.638 [DEBUG] [Thread-60778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:28:01.641 [DEBUG] [Thread-60778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:28:01.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:28:01.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:28:01.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:28:01.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:28:01.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:28:01.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:28:01.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:28:01.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:28:01.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:28:01.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.768799 -999.00  +17.80  11.83     34   +1.90 1 1 1 1 1     0    0 8.16 -294.56 ZNESW 11.9 11.8 178.2 14.7 18.2 -23.9 18.2 -23.4 17.9 -22.7 18.2 -23.4
2025-11-17T20:28:01.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:28:01.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:28:01.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.768799
2025-11-17T20:28:01.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:28:01.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:28:01.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:28:01.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:28:01.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:28:01.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:27:44', tmtdew=18.23, humidity=28.91, cloud=0.0, wind=12.72, temperature=17.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:27:44', seeing=1.33, atlas_timestamp='2025-11-17T18:27:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.0702499999999997, 0.054250000000001464, 0.11849999999999916, 0.07450000000000045, 0.11325000000000074, 0.014999999999998792, 0.15525000000000055, 0.1385000000000005, 0.18650000000000055, 0.11524999999999963, 0.12299999999999933, 0.1559999999999988, 0.14475000000000016, 0.19399999999999906, 0.5344999999999995, 0.39525000000000077, 0.2984999999999989, 0.24399999999999977, 0.1222499999999993, 0.1479999999999979, 0.03275000000000006, 0.2862500000000008, 0.5077499999999997, 0.6024999999999991, 0.6799999999999997, 0.42874999999999996, 0.2455000000000016, 0.1460000000000008, 0.4510000000000014, 0.7815000000000012, 0.35000000000000053, 0.44874999999999954], zp_timestamp='2025-11-17T18:26:00')
2025-11-17T20:28:01.667 [DEBUG] [Thread-60778] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:28:01.762 [DEBUG] [Thread-60782] [transport.py] [_log()] starting thread (client mode): 0xd0711090
2025-11-17T20:28:01.762 [DEBUG] [Thread-60782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:28:01.778 [DEBUG] [Thread-60782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:28:01.778 [INFO] [Thread-60782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:28:01.785 [DEBUG] [Thread-60782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:28:01.785 [DEBUG] [Thread-60782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:28:01.785 [DEBUG] [Thread-60782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] client lang: <none>
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] server lang: <none>
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] kex follows: False
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:28:01.786 [DEBUG] [Thread-60782] [transport.py] [_log()] Compression: none
2025-11-17T20:28:01.787 [DEBUG] [Thread-60782] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:28:01.844 [DEBUG] [Thread-60782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:28:01.844 [DEBUG] [Thread-60782] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:28:01.845 [DEBUG] [Thread-60782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:28:01.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:28:01.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:28:01.900 [DEBUG] [Thread-60782] [transport.py] [_log()] userauth is OK
2025-11-17T20:28:01.900 [DEBUG] [Thread-60782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:28:01.900 [DEBUG] [Thread-60782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:28:01.900 [DEBUG] [Thread-60782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:28:01.900 [DEBUG] [Thread-60782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:28:01.920 [INFO] [Thread-60782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:28:01.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:28:01.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:28:02.807 [DEBUG] [Thread-60782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:28:02.807 [DEBUG] [Thread-60782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:28:02.854 [DEBUG] [Thread-60782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:28:02.854 [DEBUG] [Thread-60782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:28:02.863 [DEBUG] [Thread-60782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:28:02.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:28:02.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:28:02.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:28:02.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:28:02.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:28:02.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:28:02.897 [DEBUG] [Thread-60782] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:28:15.966 [DEBUG] [Thread-60784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:28:31.008 [DEBUG] [Thread-60785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:28:32.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:28:32.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:28:32.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:28:33.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 28, 16), 18.24, 28.89, 0.0, 13.29, 17.66, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:28:33.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:28:16
2025-11-17T20:28:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:28:33.884 [DEBUG] [Thread-60786] [transport.py] [_log()] starting thread (client mode): 0xd07138b0
2025-11-17T20:28:33.884 [DEBUG] [Thread-60786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:28:33.903 [DEBUG] [Thread-60786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:28:33.903 [INFO] [Thread-60786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:28:33.906 [DEBUG] [Thread-60786] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:28:33.906 [DEBUG] [Thread-60786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:28:33.906 [DEBUG] [Thread-60786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:28:33.906 [DEBUG] [Thread-60786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:28:33.906 [DEBUG] [Thread-60786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] client lang: <none>
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] server lang: <none>
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] kex follows: False
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] Compression: none
2025-11-17T20:28:33.907 [DEBUG] [Thread-60786] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:28:33.925 [DEBUG] [Thread-60786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:28:33.925 [DEBUG] [Thread-60786] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:28:33.926 [DEBUG] [Thread-60786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:28:33.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:28:33.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:28:33.928 [DEBUG] [Thread-60786] [transport.py] [_log()] userauth is OK
2025-11-17T20:28:33.928 [DEBUG] [Thread-60786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:28:33.928 [DEBUG] [Thread-60786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:28:33.928 [DEBUG] [Thread-60786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:28:33.928 [DEBUG] [Thread-60786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:28:33.952 [INFO] [Thread-60786] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:28:33.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:28:34.596 [DEBUG] [Thread-60786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:28:34.596 [DEBUG] [Thread-60786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:28:34.597 [DEBUG] [Thread-60786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:28:34.637 [DEBUG] [Thread-60786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:28:34.637 [DEBUG] [Thread-60786] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:28:34.640 [DEBUG] [Thread-60786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:28:34.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:28:34.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:28:34.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:28:34.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:28:34.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:28:34.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:28:34.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:28:34.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:28:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:28:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.769494 -999.00  +17.80  10.66     34   +1.90 1 1 1 1 1     0    0 9.01 -258.19 ZNESW 10.1 10.7 184.8 13.1 18.2 -24.1 18.1 -23.4 17.9 -22.7 18.1 -23.5
2025-11-17T20:28:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:28:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:28:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.769494
2025-11-17T20:28:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:28:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:28:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:28:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:28:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:28:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:28:16', tmtdew=18.24, humidity=28.89, cloud=0.0, wind=13.29, temperature=17.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:28:16', seeing=1.43, atlas_timestamp='2025-11-17T18:28:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.0702499999999997, 0.054250000000001464, 0.11849999999999916, 0.07450000000000045, 0.11325000000000074, 0.014999999999998792, 0.15525000000000055, 0.1385000000000005, 0.18650000000000055, 0.11524999999999963, 0.12299999999999933, 0.1559999999999988, 0.14475000000000016, 0.19399999999999906, 0.5344999999999995, 0.39525000000000077, 0.2984999999999989, 0.24399999999999977, 0.1222499999999993, 0.1479999999999979, 0.03275000000000006, 0.2862500000000008, 0.5077499999999997, 0.6024999999999991, 0.6799999999999997, 0.42874999999999996, 0.2455000000000016, 0.1460000000000008, 0.4510000000000014, 0.7815000000000012, 0.35000000000000053, 0.44874999999999954], zp_timestamp='2025-11-17T18:26:00')
2025-11-17T20:28:34.668 [DEBUG] [Thread-60786] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:28:34.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:28:34.763 [DEBUG] [Thread-60789] [transport.py] [_log()] starting thread (client mode): 0xd0712410
2025-11-17T20:28:34.763 [DEBUG] [Thread-60789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:28:34.779 [DEBUG] [Thread-60789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:28:34.779 [INFO] [Thread-60789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:28:34.787 [DEBUG] [Thread-60789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:28:34.787 [DEBUG] [Thread-60789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:28:34.787 [DEBUG] [Thread-60789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:28:34.787 [DEBUG] [Thread-60789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:28:34.787 [DEBUG] [Thread-60789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:28:34.787 [DEBUG] [Thread-60789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:28:34.787 [DEBUG] [Thread-60789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:28:34.787 [DEBUG] [Thread-60789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] client lang: <none>
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] server lang: <none>
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] kex follows: False
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] Compression: none
2025-11-17T20:28:34.788 [DEBUG] [Thread-60789] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:28:34.844 [DEBUG] [Thread-60789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:28:34.844 [DEBUG] [Thread-60789] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:28:34.844 [DEBUG] [Thread-60789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:28:34.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:28:34.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:28:34.900 [DEBUG] [Thread-60789] [transport.py] [_log()] userauth is OK
2025-11-17T20:28:34.900 [DEBUG] [Thread-60789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:28:34.900 [DEBUG] [Thread-60789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:28:34.900 [DEBUG] [Thread-60789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:28:34.900 [DEBUG] [Thread-60789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:28:34.919 [INFO] [Thread-60789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:28:34.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:28:34.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:28:35.746 [DEBUG] [Thread-60789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:28:35.746 [DEBUG] [Thread-60789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:28:35.794 [DEBUG] [Thread-60789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:28:35.794 [DEBUG] [Thread-60789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:28:35.803 [DEBUG] [Thread-60789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:28:35.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:28:35.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:28:35.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:28:35.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:28:35.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:28:35.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:28:35.850 [DEBUG] [Thread-60789] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:28:37.436 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:28:37.438 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:28:37.582 [DEBUG] [Thread-60791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:28:46.037 [DEBUG] [Thread-60792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:29:01.078 [DEBUG] [Thread-60793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:29:05.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:29:05.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:29:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:29:06.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 28, 48), 18.17, 29.41, 0.0, 12.88, 17.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:29:06.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:28:48
2025-11-17T20:29:06.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:29:06.827 [DEBUG] [Thread-60794] [transport.py] [_log()] starting thread (client mode): 0xd07875e0
2025-11-17T20:29:06.827 [DEBUG] [Thread-60794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:29:06.847 [DEBUG] [Thread-60794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:29:06.847 [INFO] [Thread-60794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:29:06.851 [DEBUG] [Thread-60794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] client lang: <none>
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] server lang: <none>
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] kex follows: False
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] Compression: none
2025-11-17T20:29:06.852 [DEBUG] [Thread-60794] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:29:06.870 [DEBUG] [Thread-60794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:29:06.871 [DEBUG] [Thread-60794] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:29:06.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:29:06.873 [DEBUG] [Thread-60794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:29:06.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:29:06.875 [DEBUG] [Thread-60794] [transport.py] [_log()] userauth is OK
2025-11-17T20:29:06.875 [DEBUG] [Thread-60794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:29:06.875 [DEBUG] [Thread-60794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:29:06.876 [DEBUG] [Thread-60794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:29:06.876 [DEBUG] [Thread-60794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:29:06.896 [INFO] [Thread-60794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:29:06.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:29:07.498 [DEBUG] [Thread-60794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:29:07.498 [DEBUG] [Thread-60794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:29:07.499 [DEBUG] [Thread-60794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:29:07.539 [DEBUG] [Thread-60794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:29:07.540 [DEBUG] [Thread-60794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:29:07.542 [DEBUG] [Thread-60794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:29:07.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:29:07.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:29:07.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:29:07.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:29:07.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:29:07.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:29:07.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:29:07.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:29:07.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:29:07.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.769841 -999.00  +17.80   9.02     34   +1.90 1 1 1 1 1     0    0 9.50 -236.36 ZNESW 11.3 9.0 188.0 12.4 18.2 -24.1 18.1 -23.4 17.9 -22.7 18.1 -23.4
2025-11-17T20:29:07.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:29:07.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:29:07.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.769841
2025-11-17T20:29:07.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:29:07.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:29:07.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:29:07.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:29:07.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:29:07.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:28:48', tmtdew=18.17, humidity=29.41, cloud=0.0, wind=12.88, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:28:48', seeing=1.55, atlas_timestamp='2025-11-17T18:28:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.0702499999999997, 0.054250000000001464, 0.11849999999999916, 0.07450000000000045, 0.11325000000000074, 0.014999999999998792, 0.15525000000000055, 0.1385000000000005, 0.18650000000000055, 0.11524999999999963, 0.12299999999999933, 0.1559999999999988, 0.14475000000000016, 0.19399999999999906, 0.5344999999999995, 0.39525000000000077, 0.2984999999999989, 0.24399999999999977, 0.1222499999999993, 0.1479999999999979, 0.03275000000000006, 0.2862500000000008, 0.5077499999999997, 0.6024999999999991, 0.6799999999999997, 0.42874999999999996, 0.2455000000000016, 0.1460000000000008, 0.4510000000000014, 0.7815000000000012, 0.35000000000000053, 0.44874999999999954], zp_timestamp='2025-11-17T18:26:00')
2025-11-17T20:29:07.568 [DEBUG] [Thread-60794] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:29:07.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:29:07.664 [DEBUG] [Thread-60797] [transport.py] [_log()] starting thread (client mode): 0xd7bc7130
2025-11-17T20:29:07.664 [DEBUG] [Thread-60797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:29:07.679 [DEBUG] [Thread-60797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:29:07.680 [INFO] [Thread-60797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] client lang: <none>
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] server lang: <none>
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] kex follows: False
2025-11-17T20:29:07.687 [DEBUG] [Thread-60797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:29:07.688 [DEBUG] [Thread-60797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:29:07.688 [DEBUG] [Thread-60797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:29:07.688 [DEBUG] [Thread-60797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:29:07.688 [DEBUG] [Thread-60797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:29:07.688 [DEBUG] [Thread-60797] [transport.py] [_log()] Compression: none
2025-11-17T20:29:07.688 [DEBUG] [Thread-60797] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:29:07.743 [DEBUG] [Thread-60797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:29:07.743 [DEBUG] [Thread-60797] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:29:07.744 [DEBUG] [Thread-60797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:29:07.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:29:07.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:29:07.800 [DEBUG] [Thread-60797] [transport.py] [_log()] userauth is OK
2025-11-17T20:29:07.800 [DEBUG] [Thread-60797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:29:07.800 [DEBUG] [Thread-60797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:29:07.800 [DEBUG] [Thread-60797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:29:07.800 [DEBUG] [Thread-60797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:29:07.819 [INFO] [Thread-60797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:29:07.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:29:07.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:29:08.664 [DEBUG] [Thread-60797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:29:08.664 [DEBUG] [Thread-60797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:29:08.712 [DEBUG] [Thread-60797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:29:08.712 [DEBUG] [Thread-60797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:29:08.721 [DEBUG] [Thread-60797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:29:08.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:29:08.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:29:08.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:29:08.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:29:08.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:29:08.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:29:08.756 [DEBUG] [Thread-60797] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:29:16.117 [DEBUG] [Thread-60799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:29:31.171 [DEBUG] [Thread-60800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:29:37.648 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:29:37.649 [DEBUG] [Thread-60801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:29:37.649 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:29:38.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:29:38.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:29:38.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:29:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 29, 20), 18.16, 29.43, 0.0, 12.21, 17.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:29:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:29:20
2025-11-17T20:29:39.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:29:39.729 [DEBUG] [Thread-60802] [transport.py] [_log()] starting thread (client mode): 0xd07136a0
2025-11-17T20:29:39.729 [DEBUG] [Thread-60802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:29:39.749 [DEBUG] [Thread-60802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:29:39.749 [INFO] [Thread-60802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:29:39.752 [DEBUG] [Thread-60802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:29:39.752 [DEBUG] [Thread-60802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:29:39.752 [DEBUG] [Thread-60802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:29:39.752 [DEBUG] [Thread-60802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:29:39.752 [DEBUG] [Thread-60802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:29:39.752 [DEBUG] [Thread-60802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:29:39.752 [DEBUG] [Thread-60802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] client lang: <none>
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] server lang: <none>
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] kex follows: False
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] Compression: none
2025-11-17T20:29:39.753 [DEBUG] [Thread-60802] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:29:39.772 [DEBUG] [Thread-60802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:29:39.772 [DEBUG] [Thread-60802] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:29:39.773 [DEBUG] [Thread-60802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:29:39.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:29:39.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:29:39.774 [DEBUG] [Thread-60802] [transport.py] [_log()] userauth is OK
2025-11-17T20:29:39.775 [DEBUG] [Thread-60802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:29:39.775 [DEBUG] [Thread-60802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:29:39.775 [DEBUG] [Thread-60802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:29:39.775 [DEBUG] [Thread-60802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:29:39.798 [INFO] [Thread-60802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:29:39.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:29:40.401 [DEBUG] [Thread-60802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:29:40.402 [DEBUG] [Thread-60802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:29:40.402 [DEBUG] [Thread-60802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:29:40.442 [DEBUG] [Thread-60802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:29:40.442 [DEBUG] [Thread-60802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:29:40.445 [DEBUG] [Thread-60802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:29:40.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:29:40.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:29:40.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:29:40.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:29:40.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:29:40.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:29:40.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:29:40.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:29:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:29:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.770188 -999.00  +17.80  11.10     34   +1.90 1 1 1 1 1     0    0 9.98 -213.90 ZNESW 12.1 11.1 172.2 15.0 18.2 -24.0 18.1 -23.3 17.9 -22.7 18.1 -23.5
2025-11-17T20:29:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:29:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:29:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.770188
2025-11-17T20:29:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:29:40.467 [DEBUG] [Thread-60802] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:29:40.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:29:40.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:29:40.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:29:40.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:29:40.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:29:20', tmtdew=18.16, humidity=29.43, cloud=0.0, wind=12.21, temperature=17.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:29:20', seeing=1.55, atlas_timestamp='2025-11-17T18:29:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.0702499999999997, 0.054250000000001464, 0.11849999999999916, 0.07450000000000045, 0.11325000000000074, 0.014999999999998792, 0.15525000000000055, 0.1385000000000005, 0.18650000000000055, 0.11524999999999963, 0.12299999999999933, 0.1559999999999988, 0.14475000000000016, 0.19399999999999906, 0.5344999999999995, 0.39525000000000077, 0.2984999999999989, 0.24399999999999977, 0.1222499999999993, 0.1479999999999979, 0.03275000000000006, 0.2862500000000008, 0.5077499999999997, 0.6024999999999991, 0.6799999999999997, 0.42874999999999996, 0.2455000000000016, 0.1460000000000008, 0.4510000000000014, 0.7815000000000012, 0.35000000000000053, 0.44874999999999954], zp_timestamp='2025-11-17T18:26:00')
2025-11-17T20:29:40.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:29:40.551 [DEBUG] [Thread-60805] [transport.py] [_log()] starting thread (client mode): 0xd0710af0
2025-11-17T20:29:40.551 [DEBUG] [Thread-60805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:29:40.566 [DEBUG] [Thread-60805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:29:40.566 [INFO] [Thread-60805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] client lang: <none>
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] server lang: <none>
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] kex follows: False
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:29:40.574 [DEBUG] [Thread-60805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:29:40.575 [DEBUG] [Thread-60805] [transport.py] [_log()] Compression: none
2025-11-17T20:29:40.575 [DEBUG] [Thread-60805] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:29:40.631 [DEBUG] [Thread-60805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:29:40.632 [DEBUG] [Thread-60805] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:29:40.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:29:40.633 [DEBUG] [Thread-60805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:29:40.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:29:40.687 [DEBUG] [Thread-60805] [transport.py] [_log()] userauth is OK
2025-11-17T20:29:40.688 [DEBUG] [Thread-60805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:29:40.688 [DEBUG] [Thread-60805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:29:40.688 [DEBUG] [Thread-60805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:29:40.688 [DEBUG] [Thread-60805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:29:40.707 [INFO] [Thread-60805] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:29:40.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:29:40.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:29:41.589 [DEBUG] [Thread-60805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:29:41.589 [DEBUG] [Thread-60805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:29:41.638 [DEBUG] [Thread-60805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:29:41.638 [DEBUG] [Thread-60805] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:29:41.646 [DEBUG] [Thread-60805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:29:41.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:29:41.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:29:41.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:29:41.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:29:41.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:29:41.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:29:41.696 [DEBUG] [Thread-60805] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:29:46.205 [DEBUG] [Thread-60807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:30:01.256 [DEBUG] [Thread-60808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:30:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:30:11.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:30:11.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:30:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 29, 52), 18.21, 28.93, 0.0, 12.4, 17.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:30:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:29:52
2025-11-17T20:30:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:30:12.661 [DEBUG] [Thread-60809] [transport.py] [_log()] starting thread (client mode): 0xd3134a90
2025-11-17T20:30:12.661 [DEBUG] [Thread-60809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:30:12.680 [DEBUG] [Thread-60809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:30:12.680 [INFO] [Thread-60809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] client lang: <none>
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] server lang: <none>
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] kex follows: False
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] Compression: none
2025-11-17T20:30:12.682 [DEBUG] [Thread-60809] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:30:12.698 [DEBUG] [Thread-60809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:30:12.699 [DEBUG] [Thread-60809] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:30:12.699 [DEBUG] [Thread-60809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:30:12.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:30:12.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:30:12.701 [DEBUG] [Thread-60809] [transport.py] [_log()] userauth is OK
2025-11-17T20:30:12.701 [DEBUG] [Thread-60809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:30:12.701 [DEBUG] [Thread-60809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:30:12.701 [DEBUG] [Thread-60809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:30:12.701 [DEBUG] [Thread-60809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:30:12.725 [INFO] [Thread-60809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:30:12.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:30:13.782 [DEBUG] [Thread-60809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:30:13.782 [DEBUG] [Thread-60809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:30:13.782 [DEBUG] [Thread-60809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:30:13.824 [DEBUG] [Thread-60809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:30:13.824 [DEBUG] [Thread-60809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:30:13.827 [DEBUG] [Thread-60809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:30:13.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:30:13.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:30:13.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:30:13.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:30:13.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:30:13.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:30:13.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:30:13.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:30:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:30:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.770535 -999.00  +17.80  11.04     34   +2.00 1 1 1 1 1     0    0 10.91 -193.72 ZNESW 11.2 11.0 172.4 12.9 18.2 -24.0 18.1 -23.3 17.9 -22.6 18.1 -23.5
2025-11-17T20:30:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:30:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:30:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.770535
2025-11-17T20:30:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:30:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:30:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:30:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:30:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:30:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:29:52', tmtdew=18.21, humidity=28.93, cloud=0.0, wind=12.4, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:29:52', seeing=1.44, atlas_timestamp='2025-11-17T18:29:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.0702499999999997, 0.054250000000001464, 0.11849999999999916, 0.07450000000000045, 0.11325000000000074, 0.014999999999998792, 0.15525000000000055, 0.1385000000000005, 0.18650000000000055, 0.11524999999999963, 0.12299999999999933, 0.1559999999999988, 0.14475000000000016, 0.19399999999999906, 0.5344999999999995, 0.39525000000000077, 0.2984999999999989, 0.24399999999999977, 0.1222499999999993, 0.1479999999999979, 0.03275000000000006, 0.2862500000000008, 0.5077499999999997, 0.6024999999999991, 0.6799999999999997, 0.42874999999999996, 0.2455000000000016, 0.1460000000000008, 0.4510000000000014, 0.7815000000000012, 0.35000000000000053, 0.44874999999999954], zp_timestamp='2025-11-17T18:26:00')
2025-11-17T20:30:13.851 [DEBUG] [Thread-60809] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:30:13.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:30:13.948 [DEBUG] [Thread-60812] [transport.py] [_log()] starting thread (client mode): 0xd3137a00
2025-11-17T20:30:13.948 [DEBUG] [Thread-60812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:30:13.963 [DEBUG] [Thread-60812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:30:13.963 [INFO] [Thread-60812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:30:13.971 [DEBUG] [Thread-60812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:30:13.971 [DEBUG] [Thread-60812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:30:13.971 [DEBUG] [Thread-60812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:30:13.971 [DEBUG] [Thread-60812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:30:13.971 [DEBUG] [Thread-60812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:30:13.971 [DEBUG] [Thread-60812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:30:13.971 [DEBUG] [Thread-60812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] client lang: <none>
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] server lang: <none>
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] kex follows: False
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] Compression: none
2025-11-17T20:30:13.972 [DEBUG] [Thread-60812] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:30:14.027 [DEBUG] [Thread-60812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:30:14.028 [DEBUG] [Thread-60812] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:30:14.028 [DEBUG] [Thread-60812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:30:14.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:30:14.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:30:14.084 [DEBUG] [Thread-60812] [transport.py] [_log()] userauth is OK
2025-11-17T20:30:14.084 [DEBUG] [Thread-60812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:30:14.085 [DEBUG] [Thread-60812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:30:14.086 [DEBUG] [Thread-60812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:30:14.086 [DEBUG] [Thread-60812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:30:14.105 [INFO] [Thread-60812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:30:14.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:30:14.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:30:14.940 [DEBUG] [Thread-60812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:30:14.940 [DEBUG] [Thread-60812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:30:14.987 [DEBUG] [Thread-60812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:30:14.987 [DEBUG] [Thread-60812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:30:14.996 [DEBUG] [Thread-60812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:30:15.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:30:15.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:30:15.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:30:15.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:30:15.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:30:15.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:30:15.031 [DEBUG] [Thread-60812] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:30:16.284 [DEBUG] [Thread-60814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:30:31.319 [DEBUG] [Thread-60815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:30:37.719 [DEBUG] [Thread-60816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:30:37.851 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:30:37.852 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:30:45.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:30:45.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:30:45.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:30:45.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 30, 24), 18.2, 28.94, 0.0, 12.07, 17.59, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:30:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:30:24
2025-11-17T20:30:45.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:30:45.995 [DEBUG] [Thread-60817] [transport.py] [_log()] starting thread (client mode): 0xd3153a30
2025-11-17T20:30:45.995 [DEBUG] [Thread-60817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:30:46.009 [DEBUG] [Thread-60817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:30:46.009 [INFO] [Thread-60817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:30:46.011 [DEBUG] [Thread-60817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] client lang: <none>
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] server lang: <none>
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] kex follows: False
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] Compression: none
2025-11-17T20:30:46.012 [DEBUG] [Thread-60817] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:30:46.032 [DEBUG] [Thread-60817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:30:46.033 [DEBUG] [Thread-60817] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:30:46.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:30:46.034 [DEBUG] [Thread-60817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:30:46.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:30:46.036 [DEBUG] [Thread-60817] [transport.py] [_log()] userauth is OK
2025-11-17T20:30:46.036 [DEBUG] [Thread-60817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:30:46.036 [DEBUG] [Thread-60817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:30:46.037 [DEBUG] [Thread-60817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:30:46.037 [DEBUG] [Thread-60817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:30:46.062 [INFO] [Thread-60817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:30:46.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:30:46.352 [DEBUG] [Thread-60819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:30:46.910 [DEBUG] [Thread-60817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:30:46.910 [DEBUG] [Thread-60817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:30:46.910 [DEBUG] [Thread-60817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:30:46.951 [DEBUG] [Thread-60817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:30:46.952 [DEBUG] [Thread-60817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:30:46.954 [DEBUG] [Thread-60817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:30:46.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:30:46.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:30:46.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:30:46.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:30:46.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:30:46.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:30:46.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:30:46.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:30:46.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:30:46.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.770883 -999.00  +17.80   9.37     34   +1.90 1 1 1 1 1     0    0 11.15 -172.03 ZNESW 8.6 9.4 160.6 13.0 18.1 -24.2 18.1 -23.3 17.9 -22.7 18.1 -23.3
2025-11-17T20:30:46.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:30:46.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:30:46.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.770883
2025-11-17T20:30:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:30:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:30:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:30:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:30:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:30:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:30:24', tmtdew=18.2, humidity=28.94, cloud=0.0, wind=12.07, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:30:25', seeing=1.83, atlas_timestamp='2025-11-17T18:30:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:30:00')
2025-11-17T20:30:46.981 [DEBUG] [Thread-60817] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:30:47.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:30:47.079 [DEBUG] [Thread-60821] [transport.py] [_log()] starting thread (client mode): 0xd3152710
2025-11-17T20:30:47.079 [DEBUG] [Thread-60821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:30:47.095 [DEBUG] [Thread-60821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:30:47.095 [INFO] [Thread-60821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] client lang: <none>
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] server lang: <none>
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] kex follows: False
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:30:47.103 [DEBUG] [Thread-60821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:30:47.104 [DEBUG] [Thread-60821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:30:47.104 [DEBUG] [Thread-60821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:30:47.104 [DEBUG] [Thread-60821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:30:47.104 [DEBUG] [Thread-60821] [transport.py] [_log()] Compression: none
2025-11-17T20:30:47.104 [DEBUG] [Thread-60821] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:30:47.160 [DEBUG] [Thread-60821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:30:47.160 [DEBUG] [Thread-60821] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:30:47.161 [DEBUG] [Thread-60821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:30:47.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:30:47.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:30:47.215 [DEBUG] [Thread-60821] [transport.py] [_log()] userauth is OK
2025-11-17T20:30:47.216 [DEBUG] [Thread-60821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:30:47.216 [DEBUG] [Thread-60821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:30:47.216 [DEBUG] [Thread-60821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:30:47.216 [DEBUG] [Thread-60821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:30:47.235 [INFO] [Thread-60821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:30:47.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:30:47.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:30:48.168 [DEBUG] [Thread-60821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:30:48.169 [DEBUG] [Thread-60821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:30:48.216 [DEBUG] [Thread-60821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:30:48.216 [DEBUG] [Thread-60821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:30:48.225 [DEBUG] [Thread-60821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:30:48.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:30:48.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:30:48.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:30:48.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:30:48.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:30:48.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:30:48.260 [DEBUG] [Thread-60821] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:31:01.382 [DEBUG] [Thread-60823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:03.508 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:12.907 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:16.431 [DEBUG] [Thread-60824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:17.028 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:18.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:31:18.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:31:18.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:31:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 30, 56), 18.17, 29.01, 0.0, 10.02, 17.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:31:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:30:56
2025-11-17T20:31:19.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:31:19.267 [DEBUG] [Thread-60825] [transport.py] [_log()] starting thread (client mode): 0xd31b3d30
2025-11-17T20:31:19.267 [DEBUG] [Thread-60825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:31:19.286 [DEBUG] [Thread-60825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:31:19.286 [INFO] [Thread-60825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:31:19.289 [DEBUG] [Thread-60825] [transport.py] [_log()] client lang: <none>
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] server lang: <none>
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] kex follows: False
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] Compression: none
2025-11-17T20:31:19.290 [DEBUG] [Thread-60825] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:31:19.317 [DEBUG] [Thread-60825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:31:19.317 [DEBUG] [Thread-60825] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:31:19.317 [DEBUG] [Thread-60825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:31:19.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:31:19.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:31:19.318 [DEBUG] [Thread-60825] [transport.py] [_log()] userauth is OK
2025-11-17T20:31:19.318 [DEBUG] [Thread-60825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:31:19.318 [DEBUG] [Thread-60825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:31:19.318 [DEBUG] [Thread-60825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:31:19.318 [DEBUG] [Thread-60825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:31:19.333 [INFO] [Thread-60825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:31:19.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:31:19.947 [DEBUG] [Thread-60825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:31:19.947 [DEBUG] [Thread-60825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:31:19.947 [DEBUG] [Thread-60825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:31:19.988 [DEBUG] [Thread-60825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:31:19.988 [DEBUG] [Thread-60825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:31:19.990 [DEBUG] [Thread-60825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:31:20.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:31:20.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:31:20.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:31:20.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:31:20.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:31:20.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:31:20.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:31:20.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:31:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:31:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.771230 -999.00  +17.80   9.46     34   +1.90 1 1 1 1 1     0    0 11.91 -148.69 ZNESW 8.3 9.5 159.6 10.5 18.2 -24.2 18.1 -23.2 17.9 -22.7 18.1 -23.5
2025-11-17T20:31:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:31:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:31:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.771230
2025-11-17T20:31:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:31:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:31:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:31:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:31:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:31:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:30:56', tmtdew=18.17, humidity=29.01, cloud=0.0, wind=10.02, temperature=17.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:30:57', seeing=1.33, atlas_timestamp='2025-11-17T18:30:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:30:00')
2025-11-17T20:31:20.011 [DEBUG] [Thread-60825] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:31:20.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:31:20.097 [DEBUG] [Thread-60828] [transport.py] [_log()] starting thread (client mode): 0xd0712f50
2025-11-17T20:31:20.097 [DEBUG] [Thread-60828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:31:20.112 [DEBUG] [Thread-60828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:31:20.112 [INFO] [Thread-60828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] client lang: <none>
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] server lang: <none>
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] kex follows: False
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] Compression: none
2025-11-17T20:31:20.120 [DEBUG] [Thread-60828] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:31:20.178 [DEBUG] [Thread-60828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:31:20.178 [DEBUG] [Thread-60828] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:31:20.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:31:20.179 [DEBUG] [Thread-60828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:31:20.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:31:20.235 [DEBUG] [Thread-60828] [transport.py] [_log()] userauth is OK
2025-11-17T20:31:20.235 [DEBUG] [Thread-60828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:31:20.235 [DEBUG] [Thread-60828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:31:20.235 [DEBUG] [Thread-60828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:31:20.235 [DEBUG] [Thread-60828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:31:20.249 [INFO] [Thread-60828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:31:20.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:31:20.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:31:21.110 [DEBUG] [Thread-60828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:31:21.110 [DEBUG] [Thread-60828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:31:21.158 [DEBUG] [Thread-60828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:31:21.158 [DEBUG] [Thread-60828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:31:21.166 [DEBUG] [Thread-60828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:31:21.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:31:21.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:31:21.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:31:21.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:31:21.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:31:21.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:31:21.198 [DEBUG] [Thread-60828] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:31:31.464 [DEBUG] [Thread-60830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:37.809 [DEBUG] [Thread-60831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:38.054 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:38.056 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:46.517 [DEBUG] [Thread-60832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:31:51.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:31:51.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:31:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:31:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 31, 28), 18.14, 29.06, 0.0, 10.2, 17.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:31:51.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:31:28
2025-11-17T20:31:51.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:31:52.147 [DEBUG] [Thread-60833] [transport.py] [_log()] starting thread (client mode): 0xd7bc63e0
2025-11-17T20:31:52.148 [DEBUG] [Thread-60833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:31:52.169 [DEBUG] [Thread-60833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:31:52.169 [INFO] [Thread-60833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:31:52.178 [DEBUG] [Thread-60833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] client lang: <none>
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] server lang: <none>
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] kex follows: False
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] Compression: none
2025-11-17T20:31:52.179 [DEBUG] [Thread-60833] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:31:52.190 [DEBUG] [Thread-60833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:31:52.191 [DEBUG] [Thread-60833] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:31:52.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:31:52.191 [DEBUG] [Thread-60833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:31:52.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:31:52.193 [DEBUG] [Thread-60833] [transport.py] [_log()] userauth is OK
2025-11-17T20:31:52.193 [DEBUG] [Thread-60833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:31:52.193 [DEBUG] [Thread-60833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:31:52.193 [DEBUG] [Thread-60833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:31:52.193 [DEBUG] [Thread-60833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:31:52.213 [INFO] [Thread-60833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:31:52.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:31:52.819 [DEBUG] [Thread-60833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:31:52.820 [DEBUG] [Thread-60833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:31:52.820 [DEBUG] [Thread-60833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:31:52.860 [DEBUG] [Thread-60833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:31:52.861 [DEBUG] [Thread-60833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:31:52.863 [DEBUG] [Thread-60833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:31:52.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:31:52.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:31:52.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:31:52.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:31:52.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:31:52.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:31:52.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:31:52.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:31:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:31:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.771924 -999.00  +17.70   8.48     34   +1.90 1 1 1 1 1     0    0 13.21 -106.20 ZNESW 6.2 8.5 153.2 12.3 18.1 -24.0 18.1 -23.2 17.8 -22.7 18.1 -23.3
2025-11-17T20:31:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:31:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:31:52.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.771924
2025-11-17T20:31:52.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:31:52.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:31:52.888 [DEBUG] [Thread-60833] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:31:52.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:31:52.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:31:52.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:31:52.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:31:28', tmtdew=18.14, humidity=29.06, cloud=0.0, wind=10.2, temperature=17.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:31:29', seeing=1.33, atlas_timestamp='2025-11-17T18:31:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:30:00')
2025-11-17T20:31:52.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:31:52.977 [DEBUG] [Thread-60836] [transport.py] [_log()] starting thread (client mode): 0xd31cef50
2025-11-17T20:31:52.977 [DEBUG] [Thread-60836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:31:52.992 [DEBUG] [Thread-60836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:31:52.992 [INFO] [Thread-60836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:31:52.999 [DEBUG] [Thread-60836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] client lang: <none>
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] server lang: <none>
2025-11-17T20:31:53.000 [DEBUG] [Thread-60836] [transport.py] [_log()] kex follows: False
2025-11-17T20:31:53.001 [DEBUG] [Thread-60836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:31:53.001 [DEBUG] [Thread-60836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:31:53.001 [DEBUG] [Thread-60836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:31:53.001 [DEBUG] [Thread-60836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:31:53.001 [DEBUG] [Thread-60836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:31:53.001 [DEBUG] [Thread-60836] [transport.py] [_log()] Compression: none
2025-11-17T20:31:53.001 [DEBUG] [Thread-60836] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:31:53.059 [DEBUG] [Thread-60836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:31:53.059 [DEBUG] [Thread-60836] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:31:53.060 [DEBUG] [Thread-60836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:31:53.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:31:53.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:31:53.115 [DEBUG] [Thread-60836] [transport.py] [_log()] userauth is OK
2025-11-17T20:31:53.116 [DEBUG] [Thread-60836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:31:53.116 [DEBUG] [Thread-60836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:31:53.116 [DEBUG] [Thread-60836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:31:53.116 [DEBUG] [Thread-60836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:31:53.135 [INFO] [Thread-60836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:31:53.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:31:53.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:31:53.959 [DEBUG] [Thread-60836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:31:53.960 [DEBUG] [Thread-60836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:31:54.007 [DEBUG] [Thread-60836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:31:54.007 [DEBUG] [Thread-60836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:31:54.016 [DEBUG] [Thread-60836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:31:54.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:31:54.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:31:54.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:31:54.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:31:54.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:31:54.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:31:54.051 [DEBUG] [Thread-60836] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:32:01.544 [DEBUG] [Thread-60838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:16.585 [DEBUG] [Thread-60839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:32:24.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:32:24.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:32:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 32, 1), 17.98, 29.69, 0.0, 12.4, 17.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:32:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:32:01
2025-11-17T20:32:24.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:32:24.999 [DEBUG] [Thread-60840] [transport.py] [_log()] starting thread (client mode): 0xd7bc61a0
2025-11-17T20:32:24.999 [DEBUG] [Thread-60840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:32:25.020 [DEBUG] [Thread-60840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:32:25.020 [INFO] [Thread-60840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:32:25.021 [DEBUG] [Thread-60840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:32:25.021 [DEBUG] [Thread-60840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:32:25.021 [DEBUG] [Thread-60840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:32:25.021 [DEBUG] [Thread-60840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:32:25.021 [DEBUG] [Thread-60840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] client lang: <none>
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] server lang: <none>
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] kex follows: False
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] Compression: none
2025-11-17T20:32:25.022 [DEBUG] [Thread-60840] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:32:25.039 [DEBUG] [Thread-60840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:32:25.039 [DEBUG] [Thread-60840] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:32:25.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:32:25.040 [DEBUG] [Thread-60840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:32:25.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:32:25.042 [DEBUG] [Thread-60840] [transport.py] [_log()] userauth is OK
2025-11-17T20:32:25.043 [DEBUG] [Thread-60840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:32:25.043 [DEBUG] [Thread-60840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:32:25.043 [DEBUG] [Thread-60840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:32:25.043 [DEBUG] [Thread-60840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:32:25.069 [INFO] [Thread-60840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:32:25.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:32:25.664 [DEBUG] [Thread-60840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:32:25.665 [DEBUG] [Thread-60840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:32:25.665 [DEBUG] [Thread-60840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:32:25.705 [DEBUG] [Thread-60840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:32:25.705 [DEBUG] [Thread-60840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:32:25.708 [DEBUG] [Thread-60840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:32:25.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:32:25.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:32:25.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:32:25.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:32:25.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:32:25.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:32:25.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:32:25.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:32:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:32:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.772271 -999.00  +17.70  10.92     34   +1.90 1 1 1 1 1     0    0 13.61 -83.94 ZNESW 10.3 10.9 161.0 13.2 18.1 -24.1 18.1 -23.2 17.8 -22.6 18.1 -23.4
2025-11-17T20:32:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:32:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:32:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.772271
2025-11-17T20:32:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:32:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:32:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:32:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:32:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:32:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:32:01', tmtdew=17.98, humidity=29.69, cloud=0.0, wind=12.4, temperature=17.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:32:01', seeing=1.92, atlas_timestamp='2025-11-17T18:32:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:30:00')
2025-11-17T20:32:25.732 [DEBUG] [Thread-60840] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:32:25.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:32:25.829 [DEBUG] [Thread-60843] [transport.py] [_log()] starting thread (client mode): 0xd0711810
2025-11-17T20:32:25.830 [DEBUG] [Thread-60843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:32:25.844 [DEBUG] [Thread-60843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:32:25.844 [INFO] [Thread-60843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:32:25.853 [DEBUG] [Thread-60843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:32:25.853 [DEBUG] [Thread-60843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:32:25.853 [DEBUG] [Thread-60843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:32:25.853 [DEBUG] [Thread-60843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:32:25.853 [DEBUG] [Thread-60843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:32:25.853 [DEBUG] [Thread-60843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] client lang: <none>
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] server lang: <none>
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] kex follows: False
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] Compression: none
2025-11-17T20:32:25.854 [DEBUG] [Thread-60843] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:32:25.911 [DEBUG] [Thread-60843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:32:25.911 [DEBUG] [Thread-60843] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:32:25.912 [DEBUG] [Thread-60843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:32:25.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:32:25.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:32:25.968 [DEBUG] [Thread-60843] [transport.py] [_log()] userauth is OK
2025-11-17T20:32:25.968 [DEBUG] [Thread-60843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:32:25.968 [DEBUG] [Thread-60843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:32:25.968 [DEBUG] [Thread-60843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:32:25.968 [DEBUG] [Thread-60843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:32:25.990 [INFO] [Thread-60843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:32:25.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:32:25.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:32:26.862 [DEBUG] [Thread-60843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:32:26.862 [DEBUG] [Thread-60843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:32:26.910 [DEBUG] [Thread-60843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:32:26.910 [DEBUG] [Thread-60843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:32:26.922 [DEBUG] [Thread-60843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:32:26.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:32:26.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:32:26.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:32:26.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:32:26.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:32:26.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:32:26.960 [DEBUG] [Thread-60843] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:32:31.615 [DEBUG] [Thread-60845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:37.879 [DEBUG] [Thread-60846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:38.259 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:38.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:39.649 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:46.653 [DEBUG] [Thread-60847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:47.577 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:51.764 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:32:56.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:32:56.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:32:56.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:32:57.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 32, 33), 17.96, 29.74, 0.0, 10.83, 17.53, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:32:57.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:32:33
2025-11-17T20:32:57.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:32:57.929 [DEBUG] [Thread-60848] [transport.py] [_log()] starting thread (client mode): 0xd0713f70
2025-11-17T20:32:57.929 [DEBUG] [Thread-60848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:32:57.944 [DEBUG] [Thread-60848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:32:57.944 [INFO] [Thread-60848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:32:57.948 [DEBUG] [Thread-60848] [transport.py] [_log()] client lang: <none>
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] server lang: <none>
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] kex follows: False
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] Compression: none
2025-11-17T20:32:57.949 [DEBUG] [Thread-60848] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:32:57.966 [DEBUG] [Thread-60848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:32:57.967 [DEBUG] [Thread-60848] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:32:57.967 [DEBUG] [Thread-60848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:32:57.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:32:57.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:32:57.969 [DEBUG] [Thread-60848] [transport.py] [_log()] userauth is OK
2025-11-17T20:32:57.969 [DEBUG] [Thread-60848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:32:57.969 [DEBUG] [Thread-60848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:32:57.969 [DEBUG] [Thread-60848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:32:57.969 [DEBUG] [Thread-60848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:32:57.987 [INFO] [Thread-60848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:32:57.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:32:58.602 [DEBUG] [Thread-60848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:32:58.602 [DEBUG] [Thread-60848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:32:58.602 [DEBUG] [Thread-60848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:32:58.644 [DEBUG] [Thread-60848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:32:58.644 [DEBUG] [Thread-60848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:32:58.647 [DEBUG] [Thread-60848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:32:58.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:32:58.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:32:58.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:32:58.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:32:58.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:32:58.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:32:58.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:32:58.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:32:58.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:32:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.772619 -999.00  +17.70   8.78     34   +1.90 1 1 1 1 1     0    0 14.40 -65.56 ZNESW 8.8 8.8 166.2 11.7 18.1 -24.0 18.0 -23.1 17.7 -22.5 18.0 -23.3
2025-11-17T20:32:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:32:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:32:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.772619
2025-11-17T20:32:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:32:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:32:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:32:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:32:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:32:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:32:33', tmtdew=17.96, humidity=29.74, cloud=0.0, wind=10.83, temperature=17.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:32:33', seeing=1.57, atlas_timestamp='2025-11-17T18:32:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:30:00')
2025-11-17T20:32:58.672 [DEBUG] [Thread-60848] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:32:58.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:32:58.768 [DEBUG] [Thread-60851] [transport.py] [_log()] starting thread (client mode): 0xd7bc5a80
2025-11-17T20:32:58.768 [DEBUG] [Thread-60851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:32:58.782 [DEBUG] [Thread-60851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:32:58.783 [INFO] [Thread-60851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] client lang: <none>
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] server lang: <none>
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] kex follows: False
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:32:58.790 [DEBUG] [Thread-60851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:32:58.791 [DEBUG] [Thread-60851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:32:58.791 [DEBUG] [Thread-60851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:32:58.791 [DEBUG] [Thread-60851] [transport.py] [_log()] Compression: none
2025-11-17T20:32:58.791 [DEBUG] [Thread-60851] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:32:58.847 [DEBUG] [Thread-60851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:32:58.847 [DEBUG] [Thread-60851] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:32:58.848 [DEBUG] [Thread-60851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:32:58.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:32:58.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:32:58.903 [DEBUG] [Thread-60851] [transport.py] [_log()] userauth is OK
2025-11-17T20:32:58.903 [DEBUG] [Thread-60851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:32:58.904 [DEBUG] [Thread-60851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:32:58.904 [DEBUG] [Thread-60851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:32:58.904 [DEBUG] [Thread-60851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:32:58.923 [INFO] [Thread-60851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:32:58.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:32:58.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:32:59.774 [DEBUG] [Thread-60851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:32:59.775 [DEBUG] [Thread-60851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:32:59.822 [DEBUG] [Thread-60851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:32:59.822 [DEBUG] [Thread-60851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:32:59.831 [DEBUG] [Thread-60851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:32:59.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:32:59.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:32:59.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:32:59.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:32:59.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:32:59.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:32:59.865 [DEBUG] [Thread-60851] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:33:01.684 [DEBUG] [Thread-60853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:33:16.729 [DEBUG] [Thread-60854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:33:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:33:29.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:33:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:33:30.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 33, 5), 17.99, 29.69, 0.0, 11.35, 17.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:33:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:33:05
2025-11-17T20:33:30.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:33:30.814 [DEBUG] [Thread-60855] [transport.py] [_log()] starting thread (client mode): 0xd3134d30
2025-11-17T20:33:30.814 [DEBUG] [Thread-60855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:33:30.834 [DEBUG] [Thread-60855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:33:30.834 [INFO] [Thread-60855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:33:30.837 [DEBUG] [Thread-60855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:33:30.837 [DEBUG] [Thread-60855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:33:30.837 [DEBUG] [Thread-60855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:33:30.837 [DEBUG] [Thread-60855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] client lang: <none>
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] server lang: <none>
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] kex follows: False
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:33:30.838 [DEBUG] [Thread-60855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:33:30.839 [DEBUG] [Thread-60855] [transport.py] [_log()] Compression: none
2025-11-17T20:33:30.839 [DEBUG] [Thread-60855] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:33:30.857 [DEBUG] [Thread-60855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:33:30.858 [DEBUG] [Thread-60855] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:33:30.858 [DEBUG] [Thread-60855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:33:30.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:33:30.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:33:30.860 [DEBUG] [Thread-60855] [transport.py] [_log()] userauth is OK
2025-11-17T20:33:30.860 [DEBUG] [Thread-60855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:33:30.860 [DEBUG] [Thread-60855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:33:30.860 [DEBUG] [Thread-60855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:33:30.861 [DEBUG] [Thread-60855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:33:30.884 [INFO] [Thread-60855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:33:30.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:33:31.515 [DEBUG] [Thread-60855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:33:31.515 [DEBUG] [Thread-60855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:33:31.516 [DEBUG] [Thread-60855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:33:31.557 [DEBUG] [Thread-60855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:33:31.557 [DEBUG] [Thread-60855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:33:31.560 [DEBUG] [Thread-60855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:33:31.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:33:31.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:33:31.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:33:31.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:33:31.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:33:31.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:33:31.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:33:31.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:33:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:33:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.772966 -999.00  +17.70   9.43     34   +1.90 1 1 1 1 1     0    0 14.56 -55.01 ZNESW 8.1 9.4 157.4 12.2 18.1 -23.9 18.0 -23.2 17.8 -22.6 18.1 -23.2
2025-11-17T20:33:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:33:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:33:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.772966
2025-11-17T20:33:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:33:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:33:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:33:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:33:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:33:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:33:05', tmtdew=17.99, humidity=29.69, cloud=0.0, wind=11.35, temperature=17.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:33:05', seeing=1.32, atlas_timestamp='2025-11-17T18:33:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:30:00')
2025-11-17T20:33:31.586 [DEBUG] [Thread-60855] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:33:31.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:33:31.682 [DEBUG] [Thread-60858] [transport.py] [_log()] starting thread (client mode): 0xd3150ca0
2025-11-17T20:33:31.682 [DEBUG] [Thread-60858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:33:31.698 [DEBUG] [Thread-60858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:33:31.698 [INFO] [Thread-60858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:33:31.710 [DEBUG] [Thread-60858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:33:31.710 [DEBUG] [Thread-60858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:33:31.710 [DEBUG] [Thread-60858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:33:31.710 [DEBUG] [Thread-60858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:33:31.710 [DEBUG] [Thread-60858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:33:31.710 [DEBUG] [Thread-60858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:33:31.710 [DEBUG] [Thread-60858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:33:31.710 [DEBUG] [Thread-60858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] client lang: <none>
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] server lang: <none>
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] kex follows: False
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] Compression: none
2025-11-17T20:33:31.711 [DEBUG] [Thread-60858] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:33:31.753 [DEBUG] [Thread-60860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:33:31.763 [DEBUG] [Thread-60858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:33:31.764 [DEBUG] [Thread-60858] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:33:31.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:33:31.764 [DEBUG] [Thread-60858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:33:31.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:33:31.819 [DEBUG] [Thread-60858] [transport.py] [_log()] userauth is OK
2025-11-17T20:33:31.819 [DEBUG] [Thread-60858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:33:31.820 [DEBUG] [Thread-60858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:33:31.820 [DEBUG] [Thread-60858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:33:31.820 [DEBUG] [Thread-60858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:33:31.842 [INFO] [Thread-60858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:33:31.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:33:31.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:33:32.668 [DEBUG] [Thread-60858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:33:32.668 [DEBUG] [Thread-60858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:33:32.717 [DEBUG] [Thread-60858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:33:32.717 [DEBUG] [Thread-60858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:33:32.725 [DEBUG] [Thread-60858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:33:32.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:33:32.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:33:32.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:33:32.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:33:32.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:33:32.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:33:32.759 [DEBUG] [Thread-60858] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:33:37.966 [DEBUG] [Thread-60861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:33:38.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:33:38.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:33:46.804 [DEBUG] [Thread-60862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:01.834 [DEBUG] [Thread-60863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:34:02.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:34: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
2025-11-17T20:34:03.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 33, 37), 18.05, 29.58, 0.0, 9.72, 17.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:34:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:33:37
2025-11-17T20:34:03.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:34:03.697 [DEBUG] [Thread-60864] [transport.py] [_log()] starting thread (client mode): 0xd31cce80
2025-11-17T20:34:03.697 [DEBUG] [Thread-60864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:34:03.719 [DEBUG] [Thread-60864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:34:03.719 [INFO] [Thread-60864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:34:03.722 [DEBUG] [Thread-60864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] client lang: <none>
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] server lang: <none>
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] kex follows: False
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] Compression: none
2025-11-17T20:34:03.723 [DEBUG] [Thread-60864] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:34:03.737 [DEBUG] [Thread-60864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:34:03.738 [DEBUG] [Thread-60864] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:34:03.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:34:03.738 [DEBUG] [Thread-60864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:34:03.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:34:03.740 [DEBUG] [Thread-60864] [transport.py] [_log()] userauth is OK
2025-11-17T20:34:03.741 [DEBUG] [Thread-60864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:34:03.741 [DEBUG] [Thread-60864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:34:03.741 [DEBUG] [Thread-60864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:34:03.741 [DEBUG] [Thread-60864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:34:03.769 [INFO] [Thread-60864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:34:03.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:34:04.335 [DEBUG] [Thread-60864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:34:04.336 [DEBUG] [Thread-60864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:34:04.336 [DEBUG] [Thread-60864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:34:04.376 [DEBUG] [Thread-60864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:34:04.376 [DEBUG] [Thread-60864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:34:04.379 [DEBUG] [Thread-60864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:34:04.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:34:04.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:34:04.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:34:04.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:34:04.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:34:04.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:34:04.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:34:04.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:34:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:34:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.773313 -999.00  +17.70   8.83     34   +1.80 1 1 1 1 1     0    0 14.66 -49.65 ZNESW 8.8 8.8 168.4 10.9 18.1 -23.9 18.0 -23.1 17.7 -22.5 18.1 -23.4
2025-11-17T20:34:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:34:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:34:04.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.773313
2025-11-17T20:34:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:34:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:34:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:34:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:34:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:34:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:33:37', tmtdew=18.05, humidity=29.58, cloud=0.0, wind=9.72, temperature=17.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:33:37', seeing=1.25, atlas_timestamp='2025-11-17T18:33:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:32:00')
2025-11-17T20:34:04.402 [DEBUG] [Thread-60864] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:34:04.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:34:04.490 [DEBUG] [Thread-60867] [transport.py] [_log()] starting thread (client mode): 0xd3134160
2025-11-17T20:34:04.490 [DEBUG] [Thread-60867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:34:04.506 [DEBUG] [Thread-60867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:34:04.506 [INFO] [Thread-60867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:34:04.517 [DEBUG] [Thread-60867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:34:04.517 [DEBUG] [Thread-60867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:34:04.517 [DEBUG] [Thread-60867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:34:04.517 [DEBUG] [Thread-60867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:34:04.517 [DEBUG] [Thread-60867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:34:04.517 [DEBUG] [Thread-60867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] client lang: <none>
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] server lang: <none>
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] kex follows: False
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] Compression: none
2025-11-17T20:34:04.518 [DEBUG] [Thread-60867] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:34:04.575 [DEBUG] [Thread-60867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:34:04.575 [DEBUG] [Thread-60867] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:34:04.576 [DEBUG] [Thread-60867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:34:04.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:34:04.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:34:04.632 [DEBUG] [Thread-60867] [transport.py] [_log()] userauth is OK
2025-11-17T20:34:04.632 [DEBUG] [Thread-60867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:34:04.632 [DEBUG] [Thread-60867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:34:04.632 [DEBUG] [Thread-60867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:34:04.632 [DEBUG] [Thread-60867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:34:04.654 [INFO] [Thread-60867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:34:04.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:34:04.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:34:05.541 [DEBUG] [Thread-60867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:34:05.550 [DEBUG] [Thread-60867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:34:05.589 [DEBUG] [Thread-60867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:34:05.589 [DEBUG] [Thread-60867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:34:05.598 [DEBUG] [Thread-60867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:34:05.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:34:05.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:34:05.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:34:05.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:34:05.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:34:05.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:34:05.634 [DEBUG] [Thread-60867] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:34:14.318 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:16.863 [DEBUG] [Thread-60869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:22.293 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:26.423 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:31.897 [DEBUG] [Thread-60870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:35.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:34:35.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:34:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:34:36.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 34, 9), 18.12, 29.41, 0.0, 9.81, 17.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:34:36.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:34:09
2025-11-17T20:34:36.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:34:36.599 [DEBUG] [Thread-60871] [transport.py] [_log()] starting thread (client mode): 0xd3137a00
2025-11-17T20:34:36.600 [DEBUG] [Thread-60871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:34:36.609 [DEBUG] [Thread-60871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:34:36.609 [INFO] [Thread-60871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] client lang: <none>
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] server lang: <none>
2025-11-17T20:34:36.610 [DEBUG] [Thread-60871] [transport.py] [_log()] kex follows: False
2025-11-17T20:34:36.611 [DEBUG] [Thread-60871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:34:36.611 [DEBUG] [Thread-60871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:34:36.611 [DEBUG] [Thread-60871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:34:36.611 [DEBUG] [Thread-60871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:34:36.611 [DEBUG] [Thread-60871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:34:36.611 [DEBUG] [Thread-60871] [transport.py] [_log()] Compression: none
2025-11-17T20:34:36.611 [DEBUG] [Thread-60871] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:34:36.619 [DEBUG] [Thread-60871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:34:36.620 [DEBUG] [Thread-60871] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:34:36.620 [DEBUG] [Thread-60871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:34:36.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:34:36.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:34:36.621 [DEBUG] [Thread-60871] [transport.py] [_log()] userauth is OK
2025-11-17T20:34:36.621 [DEBUG] [Thread-60871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:34:36.622 [DEBUG] [Thread-60871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:34:36.622 [DEBUG] [Thread-60871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:34:36.622 [DEBUG] [Thread-60871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:34:36.644 [INFO] [Thread-60871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:34:36.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:34:37.283 [DEBUG] [Thread-60871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:34:37.284 [DEBUG] [Thread-60871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:34:37.284 [DEBUG] [Thread-60871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:34:37.325 [DEBUG] [Thread-60871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:34:37.325 [DEBUG] [Thread-60871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:34:37.328 [DEBUG] [Thread-60871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:34:37.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:34:37.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:34:37.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:34:37.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:34:37.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:34:37.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:34:37.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:34:37.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:34:37.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:34:37.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.773660 -999.00  +17.60   7.37     34   +1.80 1 1 1 1 1     0    0 14.85 -43.95 ZNESW 7.4 7.4 165.4 8.9 18.1 -23.9 18.0 -23.1 17.7 -22.6 17.9 -23.2
2025-11-17T20:34:37.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:34:37.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:34:37.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.773660
2025-11-17T20:34:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:34:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:34:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:34:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:34:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:34:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:34:09', tmtdew=18.12, humidity=29.41, cloud=0.0, wind=9.81, temperature=17.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:34:09', seeing=1.6, atlas_timestamp='2025-11-17T18:34:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:32:00')
2025-11-17T20:34:37.352 [DEBUG] [Thread-60871] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:34:37.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:34:37.446 [DEBUG] [Thread-60874] [transport.py] [_log()] starting thread (client mode): 0xd07bc850
2025-11-17T20:34:37.447 [DEBUG] [Thread-60874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:34:37.462 [DEBUG] [Thread-60874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:34:37.462 [INFO] [Thread-60874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] client lang: <none>
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] server lang: <none>
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] kex follows: False
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:34:37.470 [DEBUG] [Thread-60874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:34:37.471 [DEBUG] [Thread-60874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:34:37.471 [DEBUG] [Thread-60874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:34:37.471 [DEBUG] [Thread-60874] [transport.py] [_log()] Compression: none
2025-11-17T20:34:37.471 [DEBUG] [Thread-60874] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:34:37.526 [DEBUG] [Thread-60874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:34:37.527 [DEBUG] [Thread-60874] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:34:37.527 [DEBUG] [Thread-60874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:34:37.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:34:37.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:34:37.584 [DEBUG] [Thread-60874] [transport.py] [_log()] userauth is OK
2025-11-17T20:34:37.584 [DEBUG] [Thread-60874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:34:37.584 [DEBUG] [Thread-60874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:34:37.584 [DEBUG] [Thread-60874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:34:37.584 [DEBUG] [Thread-60874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:34:37.603 [INFO] [Thread-60874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:34:37.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:34:37.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:34:38.040 [DEBUG] [Thread-60876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:38.437 [DEBUG] [Thread-60874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:34:38.437 [DEBUG] [Thread-60874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:34:38.485 [DEBUG] [Thread-60874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:34:38.485 [DEBUG] [Thread-60874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:34:38.494 [DEBUG] [Thread-60874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:34:38.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:34: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')
2025-11-17T20:34:38.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:34:38.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:34:38.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:34:38.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:34:38.529 [DEBUG] [Thread-60874] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:34:38.667 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:38.668 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:34:46.924 [DEBUG] [Thread-60877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:01.965 [DEBUG] [Thread-60878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:08.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:35:08.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:35:08.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:35:09.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 34, 41), 18.05, 29.56, 0.0, 9.58, 17.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:35:09.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:34:41
2025-11-17T20:35:09.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:35:09.530 [DEBUG] [Thread-60879] [transport.py] [_log()] starting thread (client mode): 0xd31ef280
2025-11-17T20:35:09.530 [DEBUG] [Thread-60879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:35:09.552 [DEBUG] [Thread-60879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:35:09.552 [INFO] [Thread-60879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] client lang: <none>
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] server lang: <none>
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] kex follows: False
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:35:09.555 [DEBUG] [Thread-60879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:35:09.556 [DEBUG] [Thread-60879] [transport.py] [_log()] Compression: none
2025-11-17T20:35:09.556 [DEBUG] [Thread-60879] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:35:09.570 [DEBUG] [Thread-60879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:35:09.570 [DEBUG] [Thread-60879] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:35:09.570 [DEBUG] [Thread-60879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:35:09.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:35:09.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:35:09.571 [DEBUG] [Thread-60879] [transport.py] [_log()] userauth is OK
2025-11-17T20:35:09.571 [DEBUG] [Thread-60879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:35:09.571 [DEBUG] [Thread-60879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:35:09.571 [DEBUG] [Thread-60879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:35:09.571 [DEBUG] [Thread-60879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:35:09.584 [INFO] [Thread-60879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:35:09.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:35:16.990 [DEBUG] [Thread-60881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:17.275 [DEBUG] [Thread-60879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:35:17.276 [DEBUG] [Thread-60879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:35:17.276 [DEBUG] [Thread-60879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:35:17.316 [DEBUG] [Thread-60879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:35:17.317 [DEBUG] [Thread-60879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:35:17.319 [DEBUG] [Thread-60879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:35:17.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:35:17.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:35:17.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:35:17.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:35:17.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:35:17.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:35:17.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:35:17.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:35:17.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:35:17.393 [DEBUG] [Thread-60879] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:35:17.395 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-11-17T20:35:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:34:41', tmtdew=18.05, humidity=29.56, cloud=0.0, wind=9.58, temperature=17.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:34:41', seeing=1.6, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:32:00')
2025-11-17T20:35:17.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:35:17.497 [DEBUG] [Thread-60883] [transport.py] [_log()] starting thread (client mode): 0xd31b1a20
2025-11-17T20:35:17.497 [DEBUG] [Thread-60883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:35:17.514 [DEBUG] [Thread-60883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:35:17.515 [INFO] [Thread-60883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:35:17.522 [DEBUG] [Thread-60883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:35:17.522 [DEBUG] [Thread-60883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:35:17.522 [DEBUG] [Thread-60883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] client lang: <none>
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] server lang: <none>
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] kex follows: False
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] Compression: none
2025-11-17T20:35:17.523 [DEBUG] [Thread-60883] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:35:17.579 [DEBUG] [Thread-60883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:35:17.579 [DEBUG] [Thread-60883] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:35:17.580 [DEBUG] [Thread-60883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:35:17.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:35:17.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:35:17.635 [DEBUG] [Thread-60883] [transport.py] [_log()] userauth is OK
2025-11-17T20:35:17.635 [DEBUG] [Thread-60883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:35:17.636 [DEBUG] [Thread-60883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:35:17.636 [DEBUG] [Thread-60883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:35:17.636 [DEBUG] [Thread-60883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:35:17.655 [INFO] [Thread-60883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:35:17.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:35:17.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:35:18.517 [DEBUG] [Thread-60883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:35:18.517 [DEBUG] [Thread-60883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:35:18.565 [DEBUG] [Thread-60883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:35:18.565 [DEBUG] [Thread-60883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:35:18.574 [DEBUG] [Thread-60883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:35:18.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:35:18.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:35:18.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:35:18.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:35:18.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:35:18.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:35:18.613 [DEBUG] [Thread-60883] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:35:32.023 [DEBUG] [Thread-60885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:38.117 [DEBUG] [Thread-60886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:38.873 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:38.874 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:47.070 [DEBUG] [Thread-60887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:35:48.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:35:48.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:35:48.920 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:35:49.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 35, 45), 17.98, 29.58, 0.0, 9.62, 17.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:35:49.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:35:45
2025-11-17T20:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:35:49.621 [DEBUG] [Thread-60888] [transport.py] [_log()] starting thread (client mode): 0xd31b0670
2025-11-17T20:35:49.621 [DEBUG] [Thread-60888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:35:49.643 [DEBUG] [Thread-60888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:35:49.643 [INFO] [Thread-60888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] client lang: <none>
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] server lang: <none>
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] kex follows: False
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] Compression: none
2025-11-17T20:35:49.647 [DEBUG] [Thread-60888] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:35:49.666 [DEBUG] [Thread-60888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:35:49.666 [DEBUG] [Thread-60888] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:35:49.666 [DEBUG] [Thread-60888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:35:49.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:35:49.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:35:49.667 [DEBUG] [Thread-60888] [transport.py] [_log()] userauth is OK
2025-11-17T20:35:49.667 [DEBUG] [Thread-60888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:35:49.667 [DEBUG] [Thread-60888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:35:49.667 [DEBUG] [Thread-60888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:35:49.667 [DEBUG] [Thread-60888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:35:49.676 [INFO] [Thread-60888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:35:49.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:35:50.321 [DEBUG] [Thread-60888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:35:50.321 [DEBUG] [Thread-60888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:35:50.321 [DEBUG] [Thread-60888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:35:50.362 [DEBUG] [Thread-60888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:35:50.362 [DEBUG] [Thread-60888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:35:50.365 [DEBUG] [Thread-60888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:35:50.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:35:50.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:35:50.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:35:50.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:35:50.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:35:50.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:35:50.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:35:50.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:35:50.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:35:50.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.774354 -999.00  +17.60   8.07     34   +1.80 1 1 1 1 1     0    0 14.91 -39.93 ZNESW 8.4 8.1 172.6 10.6 18.1 -23.9 18.0 -23.1 17.7 -22.6 18.0 -23.3
2025-11-17T20:35:50.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:35:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:35:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.774354
2025-11-17T20:35:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:35:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:35:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:35:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:35:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:35:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:35:45', tmtdew=17.98, humidity=29.58, cloud=0.0, wind=9.62, temperature=17.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:35:45', seeing=1.36, atlas_timestamp='2025-11-17T18:35:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:32:00')
2025-11-17T20:35:50.386 [DEBUG] [Thread-60888] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:35:50.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:35:50.472 [DEBUG] [Thread-60891] [transport.py] [_log()] starting thread (client mode): 0xd31ee5f0
2025-11-17T20:35:50.472 [DEBUG] [Thread-60891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:35:50.490 [DEBUG] [Thread-60891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:35:50.490 [INFO] [Thread-60891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] client lang: <none>
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] server lang: <none>
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] kex follows: False
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] Compression: none
2025-11-17T20:35:50.498 [DEBUG] [Thread-60891] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:35:50.557 [DEBUG] [Thread-60891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:35:50.557 [DEBUG] [Thread-60891] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:35:50.557 [DEBUG] [Thread-60891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:35:50.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:35:50.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:35:50.619 [DEBUG] [Thread-60891] [transport.py] [_log()] userauth is OK
2025-11-17T20:35:50.619 [DEBUG] [Thread-60891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:35:50.619 [DEBUG] [Thread-60891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:35:50.619 [DEBUG] [Thread-60891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:35:50.619 [DEBUG] [Thread-60891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:35:50.635 [INFO] [Thread-60891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:35:50.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:35:50.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:35:51.502 [DEBUG] [Thread-60891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:35:51.502 [DEBUG] [Thread-60891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:35:51.550 [DEBUG] [Thread-60891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:35:51.550 [DEBUG] [Thread-60891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:35:51.558 [DEBUG] [Thread-60891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:35:51.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:35:51.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:35:51.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:35:51.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:35:51.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:35:51.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:35:51.590 [DEBUG] [Thread-60891] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:36:02.097 [DEBUG] [Thread-60893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:03.432 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:06.501 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:12.926 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:17.138 [DEBUG] [Thread-60894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:36:21.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:36:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:36:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 36, 17), 17.96, 29.63, 0.0, 10.32, 17.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:36:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:36:17
2025-11-17T20:36:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:36:22.573 [DEBUG] [Thread-60895] [transport.py] [_log()] starting thread (client mode): 0xd07bead0
2025-11-17T20:36:22.573 [DEBUG] [Thread-60895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:36:22.593 [DEBUG] [Thread-60895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:36:22.593 [INFO] [Thread-60895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] client lang: <none>
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] server lang: <none>
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] kex follows: False
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] Compression: none
2025-11-17T20:36:22.596 [DEBUG] [Thread-60895] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:36:22.613 [DEBUG] [Thread-60895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:36:22.613 [DEBUG] [Thread-60895] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:36:22.614 [DEBUG] [Thread-60895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:36:22.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:36:22.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:36:22.616 [DEBUG] [Thread-60895] [transport.py] [_log()] userauth is OK
2025-11-17T20:36:22.616 [DEBUG] [Thread-60895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:36:22.616 [DEBUG] [Thread-60895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:36:22.616 [DEBUG] [Thread-60895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:36:22.616 [DEBUG] [Thread-60895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:36:22.630 [INFO] [Thread-60895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:36:22.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:36:23.438 [DEBUG] [Thread-60895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:36:23.438 [DEBUG] [Thread-60895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:36:23.438 [DEBUG] [Thread-60895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:36:23.479 [DEBUG] [Thread-60895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:36:23.479 [DEBUG] [Thread-60895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:36:23.482 [DEBUG] [Thread-60895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:36:23.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:36:23.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:36:23.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:36:23.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:36:23.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:36:23.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:36:23.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:36:23.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:36:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:36:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.774702 -999.00  +17.60   7.01     34   +1.80 1 1 1 1 1     0    0 15.04 -37.42 ZNESW 7.7 7.0 159.6 9.7 18.1 -23.9 17.9 -23.0 17.7 -22.5 17.9 -23.3
2025-11-17T20:36:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:36:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:36:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.774702
2025-11-17T20:36:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:36:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:36:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:36:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:36:23.510 [DEBUG] [Thread-60895] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:36:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:36:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:36:17', tmtdew=17.96, humidity=29.63, cloud=0.0, wind=10.32, temperature=17.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:36:17', seeing=1.38, atlas_timestamp='2025-11-17T18:35:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.09224999999999994, 0.05825000000000102, 0.08649999999999913, 0.07049999999999912, 0.1197499999999998, 0.03550000000000075, 0.08174999999999955, 0.0694999999999979, 0.14400000000000013, 0.12124999999999986, 0.13049999999999962, 0.15700000000000003, 0.14424999999999955, 0.11049999999999827, 0.05599999999999916, 0.08924999999999983, 0.1485000000000003, 0.14349999999999952, 0.17824999999999847, 0.23499999999999943, 0.044749999999998735, 0.13775000000000048, 0.13175000000000026, 0.12199999999999989, 0.26900000000000013, 0.3227499999999992, 0.21649999999999991, 0.15600000000000058, 0.2865000000000011, 0.5170000000000012, 0.42900000000000116, 0.5267499999999989], zp_timestamp='2025-11-17T18:32:00')
2025-11-17T20:36:23.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:36:23.622 [DEBUG] [Thread-60898] [transport.py] [_log()] starting thread (client mode): 0xd07be500
2025-11-17T20:36:23.622 [DEBUG] [Thread-60898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:36:23.636 [DEBUG] [Thread-60898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:36:23.636 [INFO] [Thread-60898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] client lang: <none>
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] server lang: <none>
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] kex follows: False
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:36:23.644 [DEBUG] [Thread-60898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:36:23.645 [DEBUG] [Thread-60898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:36:23.645 [DEBUG] [Thread-60898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:36:23.645 [DEBUG] [Thread-60898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:36:23.645 [DEBUG] [Thread-60898] [transport.py] [_log()] Compression: none
2025-11-17T20:36:23.645 [DEBUG] [Thread-60898] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:36:23.703 [DEBUG] [Thread-60898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:36:23.703 [DEBUG] [Thread-60898] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:36:23.703 [DEBUG] [Thread-60898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:36:23.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:36:23.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:36:23.759 [DEBUG] [Thread-60898] [transport.py] [_log()] userauth is OK
2025-11-17T20:36:23.759 [DEBUG] [Thread-60898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:36:23.759 [DEBUG] [Thread-60898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:36:23.759 [DEBUG] [Thread-60898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:36:23.759 [DEBUG] [Thread-60898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:36:23.782 [INFO] [Thread-60898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:36:23.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:36:23.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:36:24.624 [DEBUG] [Thread-60898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:36:24.624 [DEBUG] [Thread-60898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:36:24.672 [DEBUG] [Thread-60898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:36:24.672 [DEBUG] [Thread-60898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:36:24.681 [DEBUG] [Thread-60898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:36:24.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:36:24.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:36:24.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:36:24.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:36:24.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:36:24.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:36:24.715 [DEBUG] [Thread-60898] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:36:32.165 [DEBUG] [Thread-60900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:38.205 [DEBUG] [Thread-60901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:39.077 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:39.078 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:47.209 [DEBUG] [Thread-60902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:36:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:36:54.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:36:54.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:36:55.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 36, 49), 17.97, 29.58, 0.0, 10.92, 17.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:36:55.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:36:49
2025-11-17T20:36:55.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:36:55.680 [DEBUG] [Thread-60903] [transport.py] [_log()] starting thread (client mode): 0xd3134820
2025-11-17T20:36:55.680 [DEBUG] [Thread-60903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:36:55.700 [DEBUG] [Thread-60903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:36:55.701 [INFO] [Thread-60903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:36:55.704 [DEBUG] [Thread-60903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] client lang: <none>
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] server lang: <none>
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] kex follows: False
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] Compression: none
2025-11-17T20:36:55.705 [DEBUG] [Thread-60903] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:36:55.726 [DEBUG] [Thread-60903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:36:55.726 [DEBUG] [Thread-60903] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:36:55.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:36:55.728 [DEBUG] [Thread-60903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:36:55.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:36:55.730 [DEBUG] [Thread-60903] [transport.py] [_log()] userauth is OK
2025-11-17T20:36:55.731 [DEBUG] [Thread-60903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:36:55.731 [DEBUG] [Thread-60903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:36:55.731 [DEBUG] [Thread-60903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:36:55.731 [DEBUG] [Thread-60903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:36:55.766 [INFO] [Thread-60903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:36:55.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:36:56.418 [DEBUG] [Thread-60903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:36:56.418 [DEBUG] [Thread-60903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:36:56.418 [DEBUG] [Thread-60903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:36:56.458 [DEBUG] [Thread-60903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:36:56.459 [DEBUG] [Thread-60903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:36:56.461 [DEBUG] [Thread-60903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:36:56.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:36:56.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:36:56.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:36:56.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:36:56.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:36:56.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:36:56.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:36:56.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:36:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:36:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.775049 -999.00  +17.50   4.87     34   +1.80 1 1 1 1 1     0    0 15.13 -35.39 ZNESW 7.1 4.9 164.0 10.7 18.0 -23.9 18.0 -23.1 17.7 -22.6 17.9 -23.3
2025-11-17T20:36:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:36:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:36:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.775049
2025-11-17T20:36:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:36:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:36:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:36:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:36:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:36:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:36:49', tmtdew=17.97, humidity=29.58, cloud=0.0, wind=10.92, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:36:49', seeing=1.79, atlas_timestamp='2025-11-17T18:36:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:35:00')
2025-11-17T20:36:56.485 [DEBUG] [Thread-60903] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:36:56.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:36:56.583 [DEBUG] [Thread-60906] [transport.py] [_log()] starting thread (client mode): 0xd31ec6d0
2025-11-17T20:36:56.583 [DEBUG] [Thread-60906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:36:56.598 [DEBUG] [Thread-60906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:36:56.598 [INFO] [Thread-60906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] client lang: <none>
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] server lang: <none>
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] kex follows: False
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:36:56.606 [DEBUG] [Thread-60906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:36:56.607 [DEBUG] [Thread-60906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:36:56.607 [DEBUG] [Thread-60906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:36:56.607 [DEBUG] [Thread-60906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:36:56.607 [DEBUG] [Thread-60906] [transport.py] [_log()] Compression: none
2025-11-17T20:36:56.607 [DEBUG] [Thread-60906] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:36:56.662 [DEBUG] [Thread-60906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:36:56.663 [DEBUG] [Thread-60906] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:36:56.663 [DEBUG] [Thread-60906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:36:56.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:36:56.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:36:56.719 [DEBUG] [Thread-60906] [transport.py] [_log()] userauth is OK
2025-11-17T20:36:56.719 [DEBUG] [Thread-60906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:36:56.719 [DEBUG] [Thread-60906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:36:56.719 [DEBUG] [Thread-60906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:36:56.719 [DEBUG] [Thread-60906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:36:56.738 [INFO] [Thread-60906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:36:56.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:36:56.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:36:57.560 [DEBUG] [Thread-60906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:36:57.560 [DEBUG] [Thread-60906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:36:57.608 [DEBUG] [Thread-60906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:36:57.609 [DEBUG] [Thread-60906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:36:57.618 [DEBUG] [Thread-60906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:36:57.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:36:57.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:36:57.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:36:57.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:36:57.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:36:57.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:36:57.653 [DEBUG] [Thread-60906] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:37:02.237 [DEBUG] [Thread-60908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:17.276 [DEBUG] [Thread-60909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:24.198 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:27.356 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:27.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:37:27.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:37:27.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:37:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 37, 21), 17.93, 29.66, 0.0, 11.73, 17.29, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:37:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:37:21
2025-11-17T20:37:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:37:28.606 [DEBUG] [Thread-60910] [transport.py] [_log()] starting thread (client mode): 0xd31ce920
2025-11-17T20:37:28.606 [DEBUG] [Thread-60910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:37:28.626 [DEBUG] [Thread-60910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:37:28.626 [INFO] [Thread-60910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:37:28.629 [DEBUG] [Thread-60910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] client lang: <none>
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] server lang: <none>
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] kex follows: False
2025-11-17T20:37:28.630 [DEBUG] [Thread-60910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:37:28.631 [DEBUG] [Thread-60910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:37:28.631 [DEBUG] [Thread-60910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:37:28.631 [DEBUG] [Thread-60910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:37:28.631 [DEBUG] [Thread-60910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:37:28.631 [DEBUG] [Thread-60910] [transport.py] [_log()] Compression: none
2025-11-17T20:37:28.631 [DEBUG] [Thread-60910] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:37:28.660 [DEBUG] [Thread-60910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:37:28.660 [DEBUG] [Thread-60910] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:37:28.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:37:28.661 [DEBUG] [Thread-60910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:37:28.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:37:28.663 [DEBUG] [Thread-60910] [transport.py] [_log()] userauth is OK
2025-11-17T20:37:28.664 [DEBUG] [Thread-60910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:37:28.664 [DEBUG] [Thread-60910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:37:28.664 [DEBUG] [Thread-60910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:37:28.664 [DEBUG] [Thread-60910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:37:28.688 [INFO] [Thread-60910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:37:28.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:37:29.498 [DEBUG] [Thread-60910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:37:29.499 [DEBUG] [Thread-60910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:37:29.499 [DEBUG] [Thread-60910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:37:29.540 [DEBUG] [Thread-60910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:37:29.540 [DEBUG] [Thread-60910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:37:29.543 [DEBUG] [Thread-60910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:37:29.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:37:29.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:37:29.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:37:29.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:37:29.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:37:29.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:37:29.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:37:29.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:37:29.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:37:29.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.775396 -999.00  +17.50   6.34     34   +1.80 1 1 1 1 1     0    0 15.01 -35.26 ZNESW 6.7 6.3 160.6 10.2 18.0 -23.9 17.9 -23.1 17.7 -22.6 17.9 -23.4
2025-11-17T20:37:29.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:37:29.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:37:29.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.775396
2025-11-17T20:37:29.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:37:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:37:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:37:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:37:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:37:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:37:21', tmtdew=17.93, humidity=29.66, cloud=0.0, wind=11.73, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:37:21', seeing=1.24, atlas_timestamp='2025-11-17T18:36:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:35:00')
2025-11-17T20:37:29.566 [DEBUG] [Thread-60910] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:37:29.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:37:29.663 [DEBUG] [Thread-60913] [transport.py] [_log()] starting thread (client mode): 0xd31ec160
2025-11-17T20:37:29.663 [DEBUG] [Thread-60913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:37:29.677 [DEBUG] [Thread-60913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:37:29.678 [INFO] [Thread-60913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:37:29.685 [DEBUG] [Thread-60913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:37:29.685 [DEBUG] [Thread-60913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] client lang: <none>
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] server lang: <none>
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] kex follows: False
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] Compression: none
2025-11-17T20:37:29.686 [DEBUG] [Thread-60913] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:37:29.743 [DEBUG] [Thread-60913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:37:29.743 [DEBUG] [Thread-60913] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:37:29.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:37:29.744 [DEBUG] [Thread-60913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:37:29.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:37:29.799 [DEBUG] [Thread-60913] [transport.py] [_log()] userauth is OK
2025-11-17T20:37:29.799 [DEBUG] [Thread-60913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:37:29.800 [DEBUG] [Thread-60913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:37:29.800 [DEBUG] [Thread-60913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:37:29.800 [DEBUG] [Thread-60913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:37:29.820 [INFO] [Thread-60913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:37:29.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:37:29.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:37:30.696 [DEBUG] [Thread-60913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:37:30.696 [DEBUG] [Thread-60913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:37:30.743 [DEBUG] [Thread-60913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:37:30.743 [DEBUG] [Thread-60913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:37:30.753 [DEBUG] [Thread-60913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:37:30.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:37: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')
2025-11-17T20:37:30.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:37:30.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:37:30.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:37:30.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:37:30.788 [DEBUG] [Thread-60913] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:37:32.311 [DEBUG] [Thread-60915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:32.420 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:37.813 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:38.265 [DEBUG] [Thread-60916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:39.282 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:39.283 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:47.349 [DEBUG] [Thread-60917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:37:57.201 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:38:00.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:38:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:38:01.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 37, 53), 17.9, 29.84, 0.0, 10.02, 17.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:38:01.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:37:53
2025-11-17T20:38:01.575 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:01.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:38:01.759 [DEBUG] [Thread-60918] [transport.py] [_log()] starting thread (client mode): 0xd3135390
2025-11-17T20:38:01.759 [DEBUG] [Thread-60918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:38:01.777 [DEBUG] [Thread-60918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:38:01.778 [INFO] [Thread-60918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] client lang: <none>
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] server lang: <none>
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] kex follows: False
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] Compression: none
2025-11-17T20:38:01.781 [DEBUG] [Thread-60918] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:38:01.795 [DEBUG] [Thread-60918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:38:01.795 [DEBUG] [Thread-60918] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:38:01.795 [DEBUG] [Thread-60918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:38:01.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:38:01.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:38:01.796 [DEBUG] [Thread-60918] [transport.py] [_log()] userauth is OK
2025-11-17T20:38:01.796 [DEBUG] [Thread-60918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:38:01.796 [DEBUG] [Thread-60918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:38:01.796 [DEBUG] [Thread-60918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:38:01.796 [DEBUG] [Thread-60918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:38:01.811 [INFO] [Thread-60918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:38:01.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:38:02.372 [DEBUG] [Thread-60920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:02.438 [DEBUG] [Thread-60918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:38:02.438 [DEBUG] [Thread-60918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:38:02.439 [DEBUG] [Thread-60918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:38:02.484 [DEBUG] [Thread-60918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:38:02.484 [DEBUG] [Thread-60918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:38:02.486 [DEBUG] [Thread-60918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:38:02.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:38:02.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:38:02.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:38:02.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:38:02.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:38:02.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:38:02.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:38:02.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:38:02.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:38:02.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.775744 -999.00  +17.50   8.80     34   +1.80 1 1 1 1 1     0    0 14.84 -34.20 ZNESW 10.3 8.8 163.8 11.1 18.0 -23.9 17.9 -23.0 17.6 -22.5 17.9 -23.3
2025-11-17T20:38:02.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:38:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:38:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.775744
2025-11-17T20:38:02.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:38:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:38:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:38:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:38:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:38:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:37:53', tmtdew=17.9, humidity=29.84, cloud=0.0, wind=10.02, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:37:53', seeing=1.19, atlas_timestamp='2025-11-17T18:37:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:35:00')
2025-11-17T20:38:02.511 [DEBUG] [Thread-60918] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:38:02.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:38:02.609 [DEBUG] [Thread-60922] [transport.py] [_log()] starting thread (client mode): 0xd07be350
2025-11-17T20:38:02.609 [DEBUG] [Thread-60922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:38:02.623 [DEBUG] [Thread-60922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:38:02.623 [INFO] [Thread-60922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:38:02.631 [DEBUG] [Thread-60922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] client lang: <none>
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] server lang: <none>
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] kex follows: False
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] Compression: none
2025-11-17T20:38:02.632 [DEBUG] [Thread-60922] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:38:02.687 [DEBUG] [Thread-60922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:38:02.687 [DEBUG] [Thread-60922] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:38:02.688 [DEBUG] [Thread-60922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:38:02.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:38:02.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:38:02.743 [DEBUG] [Thread-60922] [transport.py] [_log()] userauth is OK
2025-11-17T20:38:02.743 [DEBUG] [Thread-60922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:38:02.743 [DEBUG] [Thread-60922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:38:02.743 [DEBUG] [Thread-60922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:38:02.743 [DEBUG] [Thread-60922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:38:02.759 [INFO] [Thread-60922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:38:02.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:38:02.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:38:03.612 [DEBUG] [Thread-60922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:38:03.613 [DEBUG] [Thread-60922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:38:03.661 [DEBUG] [Thread-60922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:38:03.661 [DEBUG] [Thread-60922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:38:03.679 [DEBUG] [Thread-60922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:38:03.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:38: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')
2025-11-17T20:38:03.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:38:03.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:38:03.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:38:03.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:38:03.713 [DEBUG] [Thread-60922] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:38:10.949 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:16.337 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:17.402 [DEBUG] [Thread-60924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:21.481 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:25.881 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:32.452 [DEBUG] [Thread-60925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:33.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:38:33.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:38:33.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:38:34.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 38, 25), 17.97, 29.69, 0.0, 10.46, 17.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:38:34.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:38:25
2025-11-17T20:38:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:38:34.674 [DEBUG] [Thread-60926] [transport.py] [_log()] starting thread (client mode): 0xd31b0790
2025-11-17T20:38:34.674 [DEBUG] [Thread-60926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:38:34.685 [DEBUG] [Thread-60926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:38:34.685 [INFO] [Thread-60926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] client lang: <none>
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] server lang: <none>
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] kex follows: False
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] Compression: none
2025-11-17T20:38:34.687 [DEBUG] [Thread-60926] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:38:34.699 [DEBUG] [Thread-60926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:38:34.700 [DEBUG] [Thread-60926] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:38:34.700 [DEBUG] [Thread-60926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:38:34.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:38:34.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:38:34.701 [DEBUG] [Thread-60926] [transport.py] [_log()] userauth is OK
2025-11-17T20:38:34.701 [DEBUG] [Thread-60926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:38:34.701 [DEBUG] [Thread-60926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:38:34.702 [DEBUG] [Thread-60926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:38:34.702 [DEBUG] [Thread-60926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:38:34.720 [INFO] [Thread-60926] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:38:34.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:38:35.514 [DEBUG] [Thread-60926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:38:35.514 [DEBUG] [Thread-60926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:38:35.514 [DEBUG] [Thread-60926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:38:35.555 [DEBUG] [Thread-60926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:38:35.555 [DEBUG] [Thread-60926] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:38:35.557 [DEBUG] [Thread-60926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:38:35.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:38:35.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:38:35.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:38:35.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:38:35.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:38:35.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:38:35.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:38:35.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:38:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:38:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.776438 -999.00  +17.50   8.35     34   +1.80 1 1 1 1 1     0    0 15.11 -29.66 ZNESW 7.4 8.3 169.3 10.0 18.0 -23.8 17.9 -23.0 17.7 -22.4 17.9 -23.4
2025-11-17T20:38:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:38:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:38:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.776438
2025-11-17T20:38:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:38:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:38:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:38:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:38:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:38:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:38:25', tmtdew=17.97, humidity=29.69, cloud=0.0, wind=10.46, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:38:25', seeing=1.19, atlas_timestamp='2025-11-17T18:38:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:35:00')
2025-11-17T20:38:35.575 [DEBUG] [Thread-60926] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:38:35.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:38:35.659 [DEBUG] [Thread-60929] [transport.py] [_log()] starting thread (client mode): 0xd31ce560
2025-11-17T20:38:35.659 [DEBUG] [Thread-60929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:38:35.673 [DEBUG] [Thread-60929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:38:35.673 [INFO] [Thread-60929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] client lang: <none>
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] server lang: <none>
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] kex follows: False
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:38:35.681 [DEBUG] [Thread-60929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:38:35.682 [DEBUG] [Thread-60929] [transport.py] [_log()] Compression: none
2025-11-17T20:38:35.682 [DEBUG] [Thread-60929] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:38:35.738 [DEBUG] [Thread-60929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:38:35.747 [DEBUG] [Thread-60929] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:38:35.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:38:35.747 [DEBUG] [Thread-60929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:38:35.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:38:35.795 [DEBUG] [Thread-60929] [transport.py] [_log()] userauth is OK
2025-11-17T20:38:35.796 [DEBUG] [Thread-60929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:38:35.796 [DEBUG] [Thread-60929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:38:35.796 [DEBUG] [Thread-60929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:38:35.796 [DEBUG] [Thread-60929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:38:35.813 [INFO] [Thread-60929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:38:35.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:38:35.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:38:36.663 [DEBUG] [Thread-60929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:38:36.663 [DEBUG] [Thread-60929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:38:36.712 [DEBUG] [Thread-60929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:38:36.712 [DEBUG] [Thread-60929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:38:36.720 [DEBUG] [Thread-60929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:38:36.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:38:36.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:38:36.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:38:36.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:38:36.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:38:36.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:38:36.753 [DEBUG] [Thread-60929] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:38:38.345 [DEBUG] [Thread-60931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:39.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:39.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:38:47.482 [DEBUG] [Thread-60932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:02.524 [DEBUG] [Thread-60933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:39:06.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:39:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:39:07.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 38, 57), 17.96, 29.61, 0.0, 9.95, 17.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:39:07.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:38:57
2025-11-17T20:39:07.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:39:07.698 [DEBUG] [Thread-60934] [transport.py] [_log()] starting thread (client mode): 0xd31b2ec0
2025-11-17T20:39:07.698 [DEBUG] [Thread-60934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:39:07.719 [DEBUG] [Thread-60934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:39:07.719 [INFO] [Thread-60934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] client lang: <none>
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] server lang: <none>
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] kex follows: False
2025-11-17T20:39:07.723 [DEBUG] [Thread-60934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:39:07.724 [DEBUG] [Thread-60934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:39:07.724 [DEBUG] [Thread-60934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:39:07.724 [DEBUG] [Thread-60934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:39:07.724 [DEBUG] [Thread-60934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:39:07.724 [DEBUG] [Thread-60934] [transport.py] [_log()] Compression: none
2025-11-17T20:39:07.724 [DEBUG] [Thread-60934] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:39:07.737 [DEBUG] [Thread-60934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:39:07.737 [DEBUG] [Thread-60934] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:39:07.738 [DEBUG] [Thread-60934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:39:07.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:39:07.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:39:07.739 [DEBUG] [Thread-60934] [transport.py] [_log()] userauth is OK
2025-11-17T20:39:07.740 [DEBUG] [Thread-60934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:39:07.740 [DEBUG] [Thread-60934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:39:07.740 [DEBUG] [Thread-60934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:39:07.740 [DEBUG] [Thread-60934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:39:07.758 [INFO] [Thread-60934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:39:07.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:39:08.416 [DEBUG] [Thread-60934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:39:08.416 [DEBUG] [Thread-60934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:39:08.416 [DEBUG] [Thread-60934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:39:08.457 [DEBUG] [Thread-60934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:39:08.458 [DEBUG] [Thread-60934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:39:08.460 [DEBUG] [Thread-60934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:39:08.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:39:08.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:39:08.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:39:08.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:39:08.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:39:08.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:39:08.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:39:08.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:39:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:39:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.776785 -999.00  +17.50   6.98     34   +1.70 1 1 1 1 1     0    0 15.03 -30.56 ZNESW 7.2 7.0 166.6 10.0 18.0 -23.9 17.9 -23.0 17.6 -22.5 17.9 -23.3
2025-11-17T20:39:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:39:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:39:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.776785
2025-11-17T20:39:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:39:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:38:57', tmtdew=17.96, humidity=29.61, cloud=0.0, wind=9.95, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:38:57', seeing=1.33, atlas_timestamp='2025-11-17T18:38:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:35:00')
2025-11-17T20:39:08.484 [DEBUG] [Thread-60934] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:39:08.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:39:08.583 [DEBUG] [Thread-60937] [transport.py] [_log()] starting thread (client mode): 0xd07cec50
2025-11-17T20:39:08.583 [DEBUG] [Thread-60937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:39:08.598 [DEBUG] [Thread-60937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:39:08.598 [INFO] [Thread-60937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:39:08.607 [DEBUG] [Thread-60937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:39:08.608 [DEBUG] [Thread-60937] [transport.py] [_log()] client lang: <none>
2025-11-17T20:39:08.609 [DEBUG] [Thread-60937] [transport.py] [_log()] server lang: <none>
2025-11-17T20:39:08.609 [DEBUG] [Thread-60937] [transport.py] [_log()] kex follows: False
2025-11-17T20:39:08.609 [DEBUG] [Thread-60937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:39:08.609 [DEBUG] [Thread-60937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:39:08.609 [DEBUG] [Thread-60937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:39:08.609 [DEBUG] [Thread-60937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:39:08.609 [DEBUG] [Thread-60937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:39:08.610 [DEBUG] [Thread-60937] [transport.py] [_log()] Compression: none
2025-11-17T20:39:08.610 [DEBUG] [Thread-60937] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:39:08.664 [DEBUG] [Thread-60937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:39:08.664 [DEBUG] [Thread-60937] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:39:08.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:39:08.666 [DEBUG] [Thread-60937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:39:08.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:39:08.719 [DEBUG] [Thread-60937] [transport.py] [_log()] userauth is OK
2025-11-17T20:39:08.719 [DEBUG] [Thread-60937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:39:08.720 [DEBUG] [Thread-60937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:39:08.720 [DEBUG] [Thread-60937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:39:08.720 [DEBUG] [Thread-60937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:39:08.743 [INFO] [Thread-60937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:39:08.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:39:08.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:39:09.625 [DEBUG] [Thread-60937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:39:09.625 [DEBUG] [Thread-60937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:39:09.673 [DEBUG] [Thread-60937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:39:09.673 [DEBUG] [Thread-60937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:39:09.682 [DEBUG] [Thread-60937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:39:09.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:39:09.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:39:09.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
2025-11-17T20:39:09.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:39:09.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:39:09.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:39:09.715 [DEBUG] [Thread-60937] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:39:17.548 [DEBUG] [Thread-60939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:29.298 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:32.340 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:32.589 [DEBUG] [Thread-60940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:38.401 [DEBUG] [Thread-60941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:39.690 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:39.691 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:39:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:39:39.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:39:39.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:39:40.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 39, 29), 17.93, 29.66, 0.0, 10.11, 17.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:39:40.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:39:29
2025-11-17T20:39:40.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:39:41.067 [DEBUG] [Thread-60942] [transport.py] [_log()] starting thread (client mode): 0xd31517b0
2025-11-17T20:39:41.067 [DEBUG] [Thread-60942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:39:41.088 [DEBUG] [Thread-60942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:39:41.088 [INFO] [Thread-60942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:39:41.091 [DEBUG] [Thread-60942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:39:41.091 [DEBUG] [Thread-60942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:39:41.091 [DEBUG] [Thread-60942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:39:41.091 [DEBUG] [Thread-60942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:39:41.091 [DEBUG] [Thread-60942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:39:41.091 [DEBUG] [Thread-60942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:39:41.091 [DEBUG] [Thread-60942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] client lang: <none>
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] server lang: <none>
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] kex follows: False
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] Compression: none
2025-11-17T20:39:41.092 [DEBUG] [Thread-60942] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:39:41.109 [DEBUG] [Thread-60942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:39:41.110 [DEBUG] [Thread-60942] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:39:41.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:39:41.111 [DEBUG] [Thread-60942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:39:41.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:39:41.113 [DEBUG] [Thread-60942] [transport.py] [_log()] userauth is OK
2025-11-17T20:39:41.113 [DEBUG] [Thread-60942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:39:41.113 [DEBUG] [Thread-60942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:39:41.113 [DEBUG] [Thread-60942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:39:41.113 [DEBUG] [Thread-60942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:39:41.130 [INFO] [Thread-60942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:39:41.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:39:41.937 [DEBUG] [Thread-60942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:39:41.937 [DEBUG] [Thread-60942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:39:41.937 [DEBUG] [Thread-60942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:39:41.977 [DEBUG] [Thread-60942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:39:41.977 [DEBUG] [Thread-60942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:39:41.980 [DEBUG] [Thread-60942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:39:41.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:39:41.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:39:41.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:39:41.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:39:42.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:39:42.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:39:42.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:39:42.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:39:42.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:39:42.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.777133 -999.00  +17.40   5.28     34   +1.70 1 1 1 1 1     0    0 14.89 -28.76 ZNESW 7.7 5.3 159.0 8.5 17.9 -23.8 17.9 -23.0 17.6 -22.4 17.8 -23.3
2025-11-17T20:39:42.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:39:42.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:39:42.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.777133
2025-11-17T20:39:42.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:39:42.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:39:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:39:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:39:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:39:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:39:29', tmtdew=17.93, humidity=29.66, cloud=0.0, wind=10.11, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:39:29', seeing=1.19, atlas_timestamp='2025-11-17T18:39:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:38:00')
2025-11-17T20:39:42.004 [DEBUG] [Thread-60942] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:39:42.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:39:42.092 [DEBUG] [Thread-60945] [transport.py] [_log()] starting thread (client mode): 0xd3153eb0
2025-11-17T20:39:42.092 [DEBUG] [Thread-60945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:39:42.107 [DEBUG] [Thread-60945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:39:42.107 [INFO] [Thread-60945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] client lang: <none>
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] server lang: <none>
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] kex follows: False
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:39:42.115 [DEBUG] [Thread-60945] [transport.py] [_log()] Compression: none
2025-11-17T20:39:42.116 [DEBUG] [Thread-60945] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:39:42.173 [DEBUG] [Thread-60945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:39:42.173 [DEBUG] [Thread-60945] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:39:42.174 [DEBUG] [Thread-60945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:39:42.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:39:42.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:39:42.231 [DEBUG] [Thread-60945] [transport.py] [_log()] userauth is OK
2025-11-17T20:39:42.231 [DEBUG] [Thread-60945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:39:42.231 [DEBUG] [Thread-60945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:39:42.231 [DEBUG] [Thread-60945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:39:42.232 [DEBUG] [Thread-60945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:39:42.250 [INFO] [Thread-60945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:39:42.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:39:42.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:39:43.109 [DEBUG] [Thread-60945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:39:43.110 [DEBUG] [Thread-60945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:39:43.157 [DEBUG] [Thread-60945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:39:43.157 [DEBUG] [Thread-60945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:39:43.166 [DEBUG] [Thread-60945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:39:43.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:39:43.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:39:43.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:39:43.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:39:43.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:39:43.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:39:43.200 [DEBUG] [Thread-60945] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:39:47.621 [DEBUG] [Thread-60947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:40:02.660 [DEBUG] [Thread-60948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:40:13.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:40:13.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:40:13.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:40:14.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 40, 1), 17.91, 29.69, 0.0, 10.16, 17.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:40:14.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:40:01
2025-11-17T20:40:14.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:40:15.020 [DEBUG] [Thread-60949] [transport.py] [_log()] starting thread (client mode): 0xd31504f0
2025-11-17T20:40:15.020 [DEBUG] [Thread-60949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:40:15.039 [DEBUG] [Thread-60949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:40:15.039 [INFO] [Thread-60949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] client lang: <none>
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] server lang: <none>
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] kex follows: False
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] Compression: none
2025-11-17T20:40:15.042 [DEBUG] [Thread-60949] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:40:15.051 [DEBUG] [Thread-60949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:40:15.051 [DEBUG] [Thread-60949] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:40:15.051 [DEBUG] [Thread-60949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:40:15.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:40:15.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:40:15.052 [DEBUG] [Thread-60949] [transport.py] [_log()] userauth is OK
2025-11-17T20:40:15.052 [DEBUG] [Thread-60949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:40:15.052 [DEBUG] [Thread-60949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:40:15.052 [DEBUG] [Thread-60949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:40:15.052 [DEBUG] [Thread-60949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:40:15.068 [INFO] [Thread-60949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:40:15.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:40:17.402 [DEBUG] [Thread-60949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:40:17.402 [DEBUG] [Thread-60949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:40:17.402 [DEBUG] [Thread-60949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:40:17.443 [DEBUG] [Thread-60949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:40:17.443 [DEBUG] [Thread-60949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:40:17.446 [DEBUG] [Thread-60949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:40:17.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:40:17.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:40:17.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:40:17.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:40:17.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:40:17.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:40:17.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:40:17.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:40:17.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.777480 -999.00  +17.40   7.43     34   +1.70 1 1 1 1 1     0    0 15.28 -28.61 ZNESW 7.4 7.4 176.2 10.4 17.9 -23.8 17.9 -22.9 17.6 -22.4 17.9 -23.3
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.777480
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:40:01', tmtdew=17.91, humidity=29.69, cloud=0.0, wind=10.16, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:40:01', seeing=1.1, atlas_timestamp='2025-11-17T18:39:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:38:00')
2025-11-17T20:40:17.519 [DEBUG] [Thread-60949] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:40:17.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:40:17.604 [DEBUG] [Thread-60952] [transport.py] [_log()] starting thread (client mode): 0xd31ce440
2025-11-17T20:40:17.604 [DEBUG] [Thread-60952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:40:17.620 [DEBUG] [Thread-60952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:40:17.620 [INFO] [Thread-60952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:40:17.627 [DEBUG] [Thread-60952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] client lang: <none>
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] server lang: <none>
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] kex follows: False
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] Compression: none
2025-11-17T20:40:17.628 [DEBUG] [Thread-60952] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:40:17.685 [DEBUG] [Thread-60954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:40:17.686 [DEBUG] [Thread-60952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:40:17.686 [DEBUG] [Thread-60952] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:40:17.686 [DEBUG] [Thread-60952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:40:17.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:40:17.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:40:17.743 [DEBUG] [Thread-60952] [transport.py] [_log()] userauth is OK
2025-11-17T20:40:17.743 [DEBUG] [Thread-60952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:40:17.743 [DEBUG] [Thread-60952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:40:17.743 [DEBUG] [Thread-60952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:40:17.743 [DEBUG] [Thread-60952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:40:17.757 [INFO] [Thread-60952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:40:17.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:40:17.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:40:18.577 [DEBUG] [Thread-60952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:40:18.577 [DEBUG] [Thread-60952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:40:18.626 [DEBUG] [Thread-60952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:40:18.626 [DEBUG] [Thread-60952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:40:18.639 [DEBUG] [Thread-60952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:40:18.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:40:18.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:40:18.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:40:18.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:40:18.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:40:18.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:40:18.670 [DEBUG] [Thread-60952] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:40:32.717 [DEBUG] [Thread-60955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:40:38.617 [DEBUG] [Thread-60956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:40:39.892 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:40:39.893 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:40:47.748 [DEBUG] [Thread-60957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:40:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:40:48.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:40:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:40:49.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 40, 34), 17.82, 29.78, 0.0, 10.25, 17.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:40:49.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:40:34
2025-11-17T20:40:49.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:40:49.801 [DEBUG] [Thread-60958] [transport.py] [_log()] starting thread (client mode): 0xd3151ea0
2025-11-17T20:40:49.801 [DEBUG] [Thread-60958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:40:49.820 [DEBUG] [Thread-60958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:40:49.820 [INFO] [Thread-60958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:40:49.823 [DEBUG] [Thread-60958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:40:49.823 [DEBUG] [Thread-60958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] client lang: <none>
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] server lang: <none>
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] kex follows: False
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:40:49.824 [DEBUG] [Thread-60958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:40:49.825 [DEBUG] [Thread-60958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:40:49.825 [DEBUG] [Thread-60958] [transport.py] [_log()] Compression: none
2025-11-17T20:40:49.825 [DEBUG] [Thread-60958] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:40:49.843 [DEBUG] [Thread-60958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:40:49.843 [DEBUG] [Thread-60958] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:40:49.844 [DEBUG] [Thread-60958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:40:49.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:40:49.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:40:49.846 [DEBUG] [Thread-60958] [transport.py] [_log()] userauth is OK
2025-11-17T20:40:49.846 [DEBUG] [Thread-60958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:40:49.846 [DEBUG] [Thread-60958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:40:49.846 [DEBUG] [Thread-60958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:40:49.846 [DEBUG] [Thread-60958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:40:49.882 [INFO] [Thread-60958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:40:49.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:40:50.521 [DEBUG] [Thread-60958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:40:50.521 [DEBUG] [Thread-60958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:40:50.521 [DEBUG] [Thread-60958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:40:50.562 [DEBUG] [Thread-60958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:40:50.562 [DEBUG] [Thread-60958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:40:50.564 [DEBUG] [Thread-60958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:40:50.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:40:50.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:40:50.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:40:50.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:40:50.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:40:50.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:40:50.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:40:50.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:40:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:40:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.777826 -999.00  +17.40   5.93     34   +1.70 1 1 1 1 1     0    0 15.33 -27.13 ZNESW 8.4 5.9 181.0 10.1 17.9 -23.8 17.8 -23.0 17.6 -22.5 17.8 -23.3
2025-11-17T20:40:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:40:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:40:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.777826
2025-11-17T20:40:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:40:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:40:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:40:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:40:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:40:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:40:34', tmtdew=17.82, humidity=29.78, cloud=0.0, wind=10.25, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:40:34', seeing=1.46, atlas_timestamp='2025-11-17T18:40:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:38:00')
2025-11-17T20:40:50.581 [DEBUG] [Thread-60958] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:40:50.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:40:50.674 [DEBUG] [Thread-60961] [transport.py] [_log()] starting thread (client mode): 0xd3152ec0
2025-11-17T20:40:50.674 [DEBUG] [Thread-60961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:40:50.689 [DEBUG] [Thread-60961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:40:50.689 [INFO] [Thread-60961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] client lang: <none>
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] server lang: <none>
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] kex follows: False
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:40:50.697 [DEBUG] [Thread-60961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:40:50.698 [DEBUG] [Thread-60961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:40:50.698 [DEBUG] [Thread-60961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:40:50.698 [DEBUG] [Thread-60961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:40:50.698 [DEBUG] [Thread-60961] [transport.py] [_log()] Compression: none
2025-11-17T20:40:50.698 [DEBUG] [Thread-60961] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:40:50.755 [DEBUG] [Thread-60961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:40:50.755 [DEBUG] [Thread-60961] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:40:50.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:40:50.756 [DEBUG] [Thread-60961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:40:50.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:40:50.811 [DEBUG] [Thread-60961] [transport.py] [_log()] userauth is OK
2025-11-17T20:40:50.811 [DEBUG] [Thread-60961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:40:50.812 [DEBUG] [Thread-60961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:40:50.812 [DEBUG] [Thread-60961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:40:50.812 [DEBUG] [Thread-60961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:40:50.830 [INFO] [Thread-60961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:40:50.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:40:50.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:40:51.713 [DEBUG] [Thread-60961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:40:51.713 [DEBUG] [Thread-60961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:40:51.761 [DEBUG] [Thread-60961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:40:51.761 [DEBUG] [Thread-60961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:40:51.770 [DEBUG] [Thread-60961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:40:51.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:40:51.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:40:51.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:40:51.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:40:51.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:40:51.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:40:51.805 [DEBUG] [Thread-60961] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:41:02.787 [DEBUG] [Thread-60963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:41:17.823 [DEBUG] [Thread-60964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:41:21.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:41:21.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:41:21.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:41:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 41, 7), 17.8, 29.79, 0.0, 10.3, 17.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:41:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:41:07
2025-11-17T20:41:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:41:22.773 [DEBUG] [Thread-60965] [transport.py] [_log()] starting thread (client mode): 0xd3150b50
2025-11-17T20:41:22.773 [DEBUG] [Thread-60965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:41:22.795 [DEBUG] [Thread-60965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:41:22.795 [INFO] [Thread-60965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:41:22.798 [DEBUG] [Thread-60965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] client lang: <none>
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] server lang: <none>
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] kex follows: False
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] Compression: none
2025-11-17T20:41:22.799 [DEBUG] [Thread-60965] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:41:22.816 [DEBUG] [Thread-60965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:41:22.817 [DEBUG] [Thread-60965] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:41:22.817 [DEBUG] [Thread-60965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:41:22.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:41:22.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:41:22.819 [DEBUG] [Thread-60965] [transport.py] [_log()] userauth is OK
2025-11-17T20:41:22.819 [DEBUG] [Thread-60965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:41:22.819 [DEBUG] [Thread-60965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:41:22.819 [DEBUG] [Thread-60965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:41:22.820 [DEBUG] [Thread-60965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:41:22.837 [INFO] [Thread-60965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:41:22.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:41:23.584 [DEBUG] [Thread-60965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:41:23.584 [DEBUG] [Thread-60965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:41:23.585 [DEBUG] [Thread-60965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:41:23.625 [DEBUG] [Thread-60965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:41:23.625 [DEBUG] [Thread-60965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:41:23.628 [DEBUG] [Thread-60965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:41:23.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:41:23.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:41:23.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:41:23.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:41:23.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:41:23.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:41:23.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:41:23.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:41:23.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:41:23.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.778174 -999.00  +17.30   7.29     35   +1.70 1 1 1 1 1     0    0 15.10 -26.91 ZNESW 7.0 7.3 166.2 10.7 17.9 -23.7 17.8 -22.9 17.6 -22.4 17.8 -23.4
2025-11-17T20:41:23.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:41:23.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:41:23.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.778174
2025-11-17T20:41:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:41:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:41:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:41:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:41:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:41:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:41:07', tmtdew=17.8, humidity=29.79, cloud=0.0, wind=10.3, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:41:07', seeing=1.53, atlas_timestamp='2025-11-17T18:40:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:38:00')
2025-11-17T20:41:23.643 [DEBUG] [Thread-60965] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:41:23.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:41:23.739 [DEBUG] [Thread-60968] [transport.py] [_log()] starting thread (client mode): 0xd3151780
2025-11-17T20:41:23.739 [DEBUG] [Thread-60968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:41:23.754 [DEBUG] [Thread-60968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:41:23.754 [INFO] [Thread-60968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] client lang: <none>
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] server lang: <none>
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] kex follows: False
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:41:23.762 [DEBUG] [Thread-60968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:41:23.763 [DEBUG] [Thread-60968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:41:23.763 [DEBUG] [Thread-60968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:41:23.763 [DEBUG] [Thread-60968] [transport.py] [_log()] Compression: none
2025-11-17T20:41:23.763 [DEBUG] [Thread-60968] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:41:23.818 [DEBUG] [Thread-60968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:41:23.818 [DEBUG] [Thread-60968] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:41:23.818 [DEBUG] [Thread-60968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:41:23.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:41:23.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:41:23.875 [DEBUG] [Thread-60968] [transport.py] [_log()] userauth is OK
2025-11-17T20:41:23.875 [DEBUG] [Thread-60968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:41:23.876 [DEBUG] [Thread-60968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:41:23.876 [DEBUG] [Thread-60968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:41:23.876 [DEBUG] [Thread-60968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:41:23.895 [INFO] [Thread-60968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:41:23.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:41:23.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:41:24.751 [DEBUG] [Thread-60968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:41:24.751 [DEBUG] [Thread-60968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:41:24.802 [DEBUG] [Thread-60968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:41:24.802 [DEBUG] [Thread-60968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:41:24.814 [DEBUG] [Thread-60968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:41:24.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:41:24.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:41:24.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:41:24.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:41:24.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:41:24.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:41:24.858 [DEBUG] [Thread-60968] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:41:32.864 [DEBUG] [Thread-60970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:41:38.711 [DEBUG] [Thread-60971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:41:40.094 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:41:40.095 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:41:47.895 [DEBUG] [Thread-60972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:41:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:41:54.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:41:54.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:41:55.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 41, 39), 17.74, 29.79, 0.0, 10.69, 17.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:41:55.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:41:39
2025-11-17T20:41:55.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:41:55.829 [DEBUG] [Thread-60973] [transport.py] [_log()] starting thread (client mode): 0xd0711c00
2025-11-17T20:41:55.829 [DEBUG] [Thread-60973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:41:55.849 [DEBUG] [Thread-60973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:41:55.849 [INFO] [Thread-60973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:41:55.852 [DEBUG] [Thread-60973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:41:55.852 [DEBUG] [Thread-60973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] client lang: <none>
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] server lang: <none>
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] kex follows: False
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] Compression: none
2025-11-17T20:41:55.853 [DEBUG] [Thread-60973] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:41:55.871 [DEBUG] [Thread-60973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:41:55.872 [DEBUG] [Thread-60973] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:41:55.872 [DEBUG] [Thread-60973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:41:55.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:41:55.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:41:55.874 [DEBUG] [Thread-60973] [transport.py] [_log()] userauth is OK
2025-11-17T20:41:55.874 [DEBUG] [Thread-60973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:41:55.874 [DEBUG] [Thread-60973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:41:55.874 [DEBUG] [Thread-60973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:41:55.875 [DEBUG] [Thread-60973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:41:55.898 [INFO] [Thread-60973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:41:55.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:41:56.554 [DEBUG] [Thread-60973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:41:56.554 [DEBUG] [Thread-60973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:41:56.554 [DEBUG] [Thread-60973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:41:56.595 [DEBUG] [Thread-60973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:41:56.595 [DEBUG] [Thread-60973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:41:56.598 [DEBUG] [Thread-60973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:41:56.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:41:56.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:41:56.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:41:56.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:41:56.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:41:56.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:41:56.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:41:56.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:41:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:41:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.778868 -999.00  +17.30   6.64     35   +1.70 1 1 1 1 1     0    0 14.76 -29.64 ZNESW 7.7 6.6 161.4 7.7 17.9 -23.9 17.8 -22.9 17.5 -22.4 17.8 -23.4
2025-11-17T20:41:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:41:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:41:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.778868
2025-11-17T20:41:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:41:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:41:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:41:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:41:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:41:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:41:39', tmtdew=17.74, humidity=29.79, cloud=0.0, wind=10.69, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:41:39', seeing=1.64, atlas_timestamp='2025-11-17T18:41:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:38:00')
2025-11-17T20:41:56.625 [DEBUG] [Thread-60973] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:41:56.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:41:56.722 [DEBUG] [Thread-60976] [transport.py] [_log()] starting thread (client mode): 0xd07ce2c0
2025-11-17T20:41:56.722 [DEBUG] [Thread-60976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:41:56.741 [DEBUG] [Thread-60976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:41:56.742 [INFO] [Thread-60976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] client lang: <none>
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] server lang: <none>
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] kex follows: False
2025-11-17T20:41:56.749 [DEBUG] [Thread-60976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:41:56.750 [DEBUG] [Thread-60976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:41:56.750 [DEBUG] [Thread-60976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:41:56.750 [DEBUG] [Thread-60976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:41:56.750 [DEBUG] [Thread-60976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:41:56.750 [DEBUG] [Thread-60976] [transport.py] [_log()] Compression: none
2025-11-17T20:41:56.750 [DEBUG] [Thread-60976] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:41:56.807 [DEBUG] [Thread-60976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:41:56.808 [DEBUG] [Thread-60976] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:41:56.808 [DEBUG] [Thread-60976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:41:56.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:41:56.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:41:56.863 [DEBUG] [Thread-60976] [transport.py] [_log()] userauth is OK
2025-11-17T20:41:56.864 [DEBUG] [Thread-60976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:41:56.864 [DEBUG] [Thread-60976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:41:56.864 [DEBUG] [Thread-60976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:41:56.864 [DEBUG] [Thread-60976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:41:56.883 [INFO] [Thread-60976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:41:56.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:41:56.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:41:57.731 [DEBUG] [Thread-60976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:41:57.732 [DEBUG] [Thread-60976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:41:57.779 [DEBUG] [Thread-60976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:41:57.779 [DEBUG] [Thread-60976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:41:57.788 [DEBUG] [Thread-60976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:41:57.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:41:57.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')
2025-11-17T20:41:57.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:41:57.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:41:57.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:41:57.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:41:57.821 [DEBUG] [Thread-60976] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:42:02.925 [DEBUG] [Thread-60978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:42:17.972 [DEBUG] [Thread-60979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:42:27.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:42:27.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:42:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:42:28.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 42, 11), 17.67, 29.98, 0.0, 9.79, 17.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:42:28.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:42:11
2025-11-17T20:42:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:42:28.788 [DEBUG] [Thread-60980] [transport.py] [_log()] starting thread (client mode): 0xd31357b0
2025-11-17T20:42:28.789 [DEBUG] [Thread-60980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:42:28.804 [DEBUG] [Thread-60980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:42:28.804 [INFO] [Thread-60980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] client lang: <none>
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] server lang: <none>
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] kex follows: False
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] Compression: none
2025-11-17T20:42:28.808 [DEBUG] [Thread-60980] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:42:28.824 [DEBUG] [Thread-60980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:42:28.825 [DEBUG] [Thread-60980] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:42:28.825 [DEBUG] [Thread-60980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:42:28.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:42:28.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:42:28.827 [DEBUG] [Thread-60980] [transport.py] [_log()] userauth is OK
2025-11-17T20:42:28.828 [DEBUG] [Thread-60980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:42:28.828 [DEBUG] [Thread-60980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:42:28.828 [DEBUG] [Thread-60980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:42:28.828 [DEBUG] [Thread-60980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:42:28.851 [INFO] [Thread-60980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:42:28.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:42:29.486 [DEBUG] [Thread-60980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:42:29.486 [DEBUG] [Thread-60980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:42:29.487 [DEBUG] [Thread-60980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:42:29.528 [DEBUG] [Thread-60980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:42:29.528 [DEBUG] [Thread-60980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:42:29.530 [DEBUG] [Thread-60980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:42:29.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:42:29.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:42:29.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:42:29.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:42:29.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:42:29.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:42:29.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:42:29.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:42:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:42:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.779216 -999.00  +17.30   9.58     35   +1.80 1 1 1 1 1     0    0 14.81 -29.57 ZNESW 11.5 9.6 175.6 11.1 17.9 -23.9 17.8 -22.9 17.5 -22.4 17.8 -23.1
2025-11-17T20:42:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:42:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:42:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.779216
2025-11-17T20:42:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:42:29.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:42:29.543 [DEBUG] [Thread-60980] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:42:29.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:42:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:42:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:42:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:42:11', tmtdew=17.67, humidity=29.98, cloud=0.0, wind=9.79, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:42:11', seeing=1.64, atlas_timestamp='2025-11-17T18:42:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.20674999999999955, 0.16875000000000107, 0.2842500000000001, 0.2029999999999994, 0.2394999999999996, 0.24725000000000108, 0.11800000000000033, 0.13175000000000026, 0.1664999999999992, 0.20199999999999996, 0.21424999999999983, 0.18299999999999983, 0.2289999999999992, 0.2777499999999993, 0.1609999999999978, 0.129999999999999, 0.17024999999999935, 0.23800000000000132, 0.28200000000000003, 0.24624999999999808, 0.2569999999999979, 0.19174999999999898, 0.19925000000000104, 0.24874999999999936, 0.17099999999999937, 0.31150000000000055, 0.3467500000000001, 0.43350000000000044, 0.2265000000000006, 0.32200000000000095, 0.7180000000000009, 0.3365000000000009, 0.2837499999999995], zp_timestamp='2025-11-17T18:38:00')
2025-11-17T20:42:29.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:42:29.646 [DEBUG] [Thread-60983] [transport.py] [_log()] starting thread (client mode): 0xd0712710
2025-11-17T20:42:29.646 [DEBUG] [Thread-60983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:42:29.661 [DEBUG] [Thread-60983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:42:29.661 [INFO] [Thread-60983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:42:29.669 [DEBUG] [Thread-60983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:42:29.669 [DEBUG] [Thread-60983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:42:29.669 [DEBUG] [Thread-60983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:42:29.669 [DEBUG] [Thread-60983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:42:29.669 [DEBUG] [Thread-60983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:42:29.669 [DEBUG] [Thread-60983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] client lang: <none>
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] server lang: <none>
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] kex follows: False
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:42:29.670 [DEBUG] [Thread-60983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:42:29.671 [DEBUG] [Thread-60983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:42:29.671 [DEBUG] [Thread-60983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:42:29.671 [DEBUG] [Thread-60983] [transport.py] [_log()] Compression: none
2025-11-17T20:42:29.671 [DEBUG] [Thread-60983] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:42:29.728 [DEBUG] [Thread-60983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:42:29.728 [DEBUG] [Thread-60983] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:42:29.729 [DEBUG] [Thread-60983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:42:29.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:42:29.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:42:29.788 [DEBUG] [Thread-60983] [transport.py] [_log()] userauth is OK
2025-11-17T20:42:29.788 [DEBUG] [Thread-60983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:42:29.788 [DEBUG] [Thread-60983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:42:29.788 [DEBUG] [Thread-60983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:42:29.788 [DEBUG] [Thread-60983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:42:29.810 [INFO] [Thread-60983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:42:29.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:42:29.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:42:30.685 [DEBUG] [Thread-60983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:42:30.686 [DEBUG] [Thread-60983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:42:30.733 [DEBUG] [Thread-60983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:42:30.733 [DEBUG] [Thread-60983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:42:30.743 [DEBUG] [Thread-60983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:42:30.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:42:30.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:42: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') -> 00000000
2025-11-17T20:42:30.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:42:30.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:42:30.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:42:30.788 [DEBUG] [Thread-60983] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:42:33.009 [DEBUG] [Thread-60985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:42:38.799 [DEBUG] [Thread-60986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:42:40.298 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:42:40.299 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:42:48.057 [DEBUG] [Thread-60987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:43:00.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:43:00.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:43:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:43:01.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 42, 43), 17.62, 29.98, 0.0, 11.61, 17.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:43:01.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:42:43
2025-11-17T20:43:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:43:01.755 [DEBUG] [Thread-60988] [transport.py] [_log()] starting thread (client mode): 0xd0710d30
2025-11-17T20:43:01.756 [DEBUG] [Thread-60988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:43:01.776 [DEBUG] [Thread-60988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:43:01.776 [INFO] [Thread-60988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:43:01.780 [DEBUG] [Thread-60988] [transport.py] [_log()] client lang: <none>
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] server lang: <none>
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] kex follows: False
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] Compression: none
2025-11-17T20:43:01.781 [DEBUG] [Thread-60988] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:43:01.799 [DEBUG] [Thread-60988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:43:01.800 [DEBUG] [Thread-60988] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:43:01.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:43:01.801 [DEBUG] [Thread-60988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:43:01.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:43:01.802 [DEBUG] [Thread-60988] [transport.py] [_log()] userauth is OK
2025-11-17T20:43:01.803 [DEBUG] [Thread-60988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:43:01.803 [DEBUG] [Thread-60988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:43:01.803 [DEBUG] [Thread-60988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:43:01.803 [DEBUG] [Thread-60988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:43:01.825 [INFO] [Thread-60988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:43:01.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:43:02.422 [DEBUG] [Thread-60988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:43:02.422 [DEBUG] [Thread-60988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:43:02.423 [DEBUG] [Thread-60988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:43:02.463 [DEBUG] [Thread-60988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:43:02.463 [DEBUG] [Thread-60988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:43:02.466 [DEBUG] [Thread-60988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:43:02.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:43:02.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:43:02.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:43:02.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:43:02.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:43:02.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:43:02.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:43:02.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:43:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:43:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.779563 -999.00  +17.30   6.86     35   +1.70 1 1 1 1 1     0    0 15.03 -31.51 ZNESW 8.2 6.9 171.2 12.4 17.8 -23.8 17.8 -23.0 17.5 -22.3 17.8 -23.2
2025-11-17T20:43:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:43:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:43:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.779563
2025-11-17T20:43:02.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:43:02.490 [DEBUG] [Thread-60988] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:43:02.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:43:02.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:43:02.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:43:02.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:43:02.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:42:43', tmtdew=17.62, humidity=29.98, cloud=0.0, wind=11.61, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:42:43', seeing=1.43, atlas_timestamp='2025-11-17T18:42:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.05424999999999969, 0.10675000000000168, 0.10625000000000107, 0.09999999999999787, 0.11800000000000033, 0.13125000000000142, 0.05599999999999916, 0.09725000000000072, 0.10299999999999798, 0.125, 0.12025000000000041, 0.12400000000000055, 0.21199999999999974, 0.1952499999999997, 0.08799999999999919, 0.10350000000000037, 0.12824999999999953, 0.14749999999999908, 0.22799999999999976, 0.20224999999999937, 0.18399999999999928, 0.008749999999999147, 0.07225000000000037, 0.1687499999999993, 0.20149999999999935, 0.2554999999999996, 0.3537499999999998, 0.22850000000000037, 0.23099999999999987, 0.1070000000000011, 0.2134999999999998, 0.27300000000000146, 0.16674999999999862], zp_timestamp='2025-11-17T18:41:00')
2025-11-17T20:43:02.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:43:02.584 [DEBUG] [Thread-60991] [transport.py] [_log()] starting thread (client mode): 0xd0702350
2025-11-17T20:43:02.584 [DEBUG] [Thread-60991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:43:02.599 [DEBUG] [Thread-60991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:43:02.599 [INFO] [Thread-60991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] client lang: <none>
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] server lang: <none>
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] kex follows: False
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] Compression: none
2025-11-17T20:43:02.606 [DEBUG] [Thread-60991] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:43:02.662 [DEBUG] [Thread-60991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:43:02.662 [DEBUG] [Thread-60991] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:43:02.662 [DEBUG] [Thread-60991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:43:02.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:43:02.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:43:02.720 [DEBUG] [Thread-60991] [transport.py] [_log()] userauth is OK
2025-11-17T20:43:02.720 [DEBUG] [Thread-60991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:43:02.720 [DEBUG] [Thread-60991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:43:02.720 [DEBUG] [Thread-60991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:43:02.720 [DEBUG] [Thread-60991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:43:02.737 [INFO] [Thread-60991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:43:02.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:43:02.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:43:03.098 [DEBUG] [Thread-60993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:43:03.595 [DEBUG] [Thread-60991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:43:03.596 [DEBUG] [Thread-60991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:43:03.644 [DEBUG] [Thread-60991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:43:03.644 [DEBUG] [Thread-60991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:43:03.653 [DEBUG] [Thread-60991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:43:03.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:43:03.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:43:03.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:43:03.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:43:03.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:43:03.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:43:03.688 [DEBUG] [Thread-60991] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:43:18.155 [DEBUG] [Thread-60994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:43:33.195 [DEBUG] [Thread-60995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:43:33.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:43:33.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:43:33.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:43:34.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 43, 15), 17.61, 29.99, 0.0, 12.97, 17.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:43:34.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:43:15
2025-11-17T20:43:34.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:43:34.646 [DEBUG] [Thread-60996] [transport.py] [_log()] starting thread (client mode): 0xd31b3d30
2025-11-17T20:43:34.647 [DEBUG] [Thread-60996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:43:34.667 [DEBUG] [Thread-60996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:43:34.667 [INFO] [Thread-60996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:43:34.670 [DEBUG] [Thread-60996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] client lang: <none>
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] server lang: <none>
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] kex follows: False
2025-11-17T20:43:34.671 [DEBUG] [Thread-60996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:43:34.672 [DEBUG] [Thread-60996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:43:34.672 [DEBUG] [Thread-60996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:43:34.672 [DEBUG] [Thread-60996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:43:34.672 [DEBUG] [Thread-60996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:43:34.672 [DEBUG] [Thread-60996] [transport.py] [_log()] Compression: none
2025-11-17T20:43:34.672 [DEBUG] [Thread-60996] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:43:34.694 [DEBUG] [Thread-60996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:43:34.694 [DEBUG] [Thread-60996] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:43:34.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:43:34.695 [DEBUG] [Thread-60996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:43:34.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:43:34.697 [DEBUG] [Thread-60996] [transport.py] [_log()] userauth is OK
2025-11-17T20:43:34.697 [DEBUG] [Thread-60996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:43:34.697 [DEBUG] [Thread-60996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:43:34.697 [DEBUG] [Thread-60996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:43:34.697 [DEBUG] [Thread-60996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:43:34.718 [INFO] [Thread-60996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:43:34.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:43:35.372 [DEBUG] [Thread-60996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:43:35.372 [DEBUG] [Thread-60996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:43:35.373 [DEBUG] [Thread-60996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:43:35.413 [DEBUG] [Thread-60996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:43:35.413 [DEBUG] [Thread-60996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:43:35.417 [DEBUG] [Thread-60996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:43:35.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:43:35.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:43:35.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:43:35.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:43:35.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:43:35.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:43:35.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:43:35.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:43:35.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:43:35.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.779910 -999.00  +17.30   8.37     35   +1.70 1 1 1 1 1     0    0 14.97 -31.07 ZNESW 5.6 8.4 173.6 10.4 17.8 -23.8 17.8 -23.0 17.6 -22.3 17.7 -23.2
2025-11-17T20:43:35.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:43:35.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:43:35.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.779910
2025-11-17T20:43:35.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:43:35.443 [DEBUG] [Thread-60996] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:43:35.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:43:35.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:43:35.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:43:35.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:43:35.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:43:15', tmtdew=17.61, humidity=29.99, cloud=0.0, wind=12.97, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:43:15', seeing=1.62, atlas_timestamp='2025-11-17T18:43:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.05424999999999969, 0.10675000000000168, 0.10625000000000107, 0.09999999999999787, 0.11800000000000033, 0.13125000000000142, 0.05599999999999916, 0.09725000000000072, 0.10299999999999798, 0.125, 0.12025000000000041, 0.12400000000000055, 0.21199999999999974, 0.1952499999999997, 0.08799999999999919, 0.10350000000000037, 0.12824999999999953, 0.14749999999999908, 0.22799999999999976, 0.20224999999999937, 0.18399999999999928, 0.008749999999999147, 0.07225000000000037, 0.1687499999999993, 0.20149999999999935, 0.2554999999999996, 0.3537499999999998, 0.22850000000000037, 0.23099999999999987, 0.1070000000000011, 0.2134999999999998, 0.27300000000000146, 0.16674999999999862], zp_timestamp='2025-11-17T18:41:00')
2025-11-17T20:43:35.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:43:35.538 [DEBUG] [Thread-60999] [transport.py] [_log()] starting thread (client mode): 0xd31506d0
2025-11-17T20:43:35.538 [DEBUG] [Thread-60999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:43:35.553 [DEBUG] [Thread-60999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:43:35.553 [INFO] [Thread-60999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] client lang: <none>
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] server lang: <none>
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] kex follows: False
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] Compression: none
2025-11-17T20:43:35.561 [DEBUG] [Thread-60999] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:43:35.618 [DEBUG] [Thread-60999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:43:35.619 [DEBUG] [Thread-60999] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:43:35.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:43:35.619 [DEBUG] [Thread-60999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:43:35.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:43:35.676 [DEBUG] [Thread-60999] [transport.py] [_log()] userauth is OK
2025-11-17T20:43:35.676 [DEBUG] [Thread-60999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:43:35.676 [DEBUG] [Thread-60999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:43:35.676 [DEBUG] [Thread-60999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:43:35.676 [DEBUG] [Thread-60999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:43:35.695 [INFO] [Thread-60999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:43:35.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:43:35.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:43:36.596 [DEBUG] [Thread-60999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:43:36.596 [DEBUG] [Thread-60999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:43:36.643 [DEBUG] [Thread-60999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:43:36.643 [DEBUG] [Thread-60999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:43:36.652 [DEBUG] [Thread-60999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:43:36.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:43:36.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:43:36.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:43:36.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:43:36.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:43:36.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:43:36.697 [DEBUG] [Thread-60999] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:43:38.885 [DEBUG] [Thread-61001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:43:40.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:43:40.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:43:48.221 [DEBUG] [Thread-61002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:44:03.250 [DEBUG] [Thread-61003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:44:06.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:44:06.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:44: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
2025-11-17T20:44:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 43, 47), 17.57, 30.09, 0.0, 12.32, 17.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:44:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:43:47
2025-11-17T20:44:07.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:44:07.714 [DEBUG] [Thread-61004] [transport.py] [_log()] starting thread (client mode): 0xd31cfb20
2025-11-17T20:44:07.714 [DEBUG] [Thread-61004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:44:07.734 [DEBUG] [Thread-61004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:44:07.734 [INFO] [Thread-61004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:44:07.737 [DEBUG] [Thread-61004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] client lang: <none>
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] server lang: <none>
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] kex follows: False
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] Compression: none
2025-11-17T20:44:07.738 [DEBUG] [Thread-61004] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:44:07.753 [DEBUG] [Thread-61004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:44:07.753 [DEBUG] [Thread-61004] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:44:07.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:44:07.762 [DEBUG] [Thread-61004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:44:07.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:44:07.763 [DEBUG] [Thread-61004] [transport.py] [_log()] userauth is OK
2025-11-17T20:44:07.763 [DEBUG] [Thread-61004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:44:07.763 [DEBUG] [Thread-61004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:44:07.763 [DEBUG] [Thread-61004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:44:07.763 [DEBUG] [Thread-61004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:44:07.779 [INFO] [Thread-61004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:44:07.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:44:08.433 [DEBUG] [Thread-61004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:44:08.434 [DEBUG] [Thread-61004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:44:08.434 [DEBUG] [Thread-61004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:44:08.475 [DEBUG] [Thread-61004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:44:08.475 [DEBUG] [Thread-61004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:44:08.477 [DEBUG] [Thread-61004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:44:08.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:44:08.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:44:08.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:44:08.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:44:08.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:44:08.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:44:08.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.780257 -999.00  +17.30   9.72     35   +1.80 1 1 1 1 1     0    0 14.81 -33.05 ZNESW 8.9 9.7 173.6 10.6 17.8 -23.8 17.8 -22.9 17.5 -22.4 17.8 -23.3
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.780257
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:44:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:43:47', tmtdew=17.57, humidity=30.09, cloud=0.0, wind=12.32, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:43:47', seeing=1.45, atlas_timestamp='2025-11-17T18:43:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.05424999999999969, 0.10675000000000168, 0.10625000000000107, 0.09999999999999787, 0.11800000000000033, 0.13125000000000142, 0.05599999999999916, 0.09725000000000072, 0.10299999999999798, 0.125, 0.12025000000000041, 0.12400000000000055, 0.21199999999999974, 0.1952499999999997, 0.08799999999999919, 0.10350000000000037, 0.12824999999999953, 0.14749999999999908, 0.22799999999999976, 0.20224999999999937, 0.18399999999999928, 0.008749999999999147, 0.07225000000000037, 0.1687499999999993, 0.20149999999999935, 0.2554999999999996, 0.3537499999999998, 0.22850000000000037, 0.23099999999999987, 0.1070000000000011, 0.2134999999999998, 0.27300000000000146, 0.16674999999999862], zp_timestamp='2025-11-17T18:41:00')
2025-11-17T20:44:08.495 [DEBUG] [Thread-61004] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:44:08.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:44:08.581 [DEBUG] [Thread-61007] [transport.py] [_log()] starting thread (client mode): 0xd31511b0
2025-11-17T20:44:08.581 [DEBUG] [Thread-61007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:44:08.596 [DEBUG] [Thread-61007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:44:08.596 [INFO] [Thread-61007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:44:08.603 [DEBUG] [Thread-61007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] client lang: <none>
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] server lang: <none>
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] kex follows: False
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] Compression: none
2025-11-17T20:44:08.604 [DEBUG] [Thread-61007] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:44:08.662 [DEBUG] [Thread-61007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:44:08.662 [DEBUG] [Thread-61007] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:44:08.662 [DEBUG] [Thread-61007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:44:08.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:44:08.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:44:08.719 [DEBUG] [Thread-61007] [transport.py] [_log()] userauth is OK
2025-11-17T20:44:08.719 [DEBUG] [Thread-61007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:44:08.719 [DEBUG] [Thread-61007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:44:08.720 [DEBUG] [Thread-61007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:44:08.720 [DEBUG] [Thread-61007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:44:08.733 [INFO] [Thread-61007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:44:08.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:44:08.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:44:09.613 [DEBUG] [Thread-61007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:44:09.614 [DEBUG] [Thread-61007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:44:09.662 [DEBUG] [Thread-61007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:44:09.662 [DEBUG] [Thread-61007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:44:09.670 [DEBUG] [Thread-61007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:44:09.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:44:09.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:44:09.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:44:09.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:44:09.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:44:09.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:44:09.701 [DEBUG] [Thread-61007] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:44:18.279 [DEBUG] [Thread-61009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:44:33.322 [DEBUG] [Thread-61010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:44:38.964 [DEBUG] [Thread-61011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:44:39.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:44:39.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:44:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:44:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 44, 19), 17.61, 30.01, 0.0, 11.49, 17.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:44:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:44:19
2025-11-17T20:44:40.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:44:40.670 [DEBUG] [Thread-61012] [transport.py] [_log()] starting thread (client mode): 0xd0702ec0
2025-11-17T20:44:40.670 [DEBUG] [Thread-61012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:44:40.692 [DEBUG] [Thread-61012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:44:40.693 [INFO] [Thread-61012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] client lang: <none>
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] server lang: <none>
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] kex follows: False
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:44:40.695 [DEBUG] [Thread-61012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:44:40.705 [DEBUG] [Thread-61012] [transport.py] [_log()] Compression: none
2025-11-17T20:44:40.705 [DEBUG] [Thread-61012] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:44:40.722 [DEBUG] [Thread-61012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:44:40.723 [DEBUG] [Thread-61012] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:44:40.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:44:40.724 [DEBUG] [Thread-61012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:44:40.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:44:40.726 [DEBUG] [Thread-61012] [transport.py] [_log()] userauth is OK
2025-11-17T20:44:40.726 [DEBUG] [Thread-61012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:44:40.726 [DEBUG] [Thread-61012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:44:40.726 [DEBUG] [Thread-61012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:44:40.727 [DEBUG] [Thread-61012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:44:40.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:44:40.743 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:44:40.746 [INFO] [Thread-61012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:44:40.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:44:41.361 [DEBUG] [Thread-61012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:44:41.361 [DEBUG] [Thread-61012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:44:41.362 [DEBUG] [Thread-61012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:44:41.402 [DEBUG] [Thread-61012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:44:41.402 [DEBUG] [Thread-61012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:44:41.405 [DEBUG] [Thread-61012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:44:41.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:44:41.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:44:41.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:44:41.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:44:41.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:44:41.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:44:41.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:44:41.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:44:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:44:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.780605 -999.00  +17.30   8.82     35   +1.80 1 1 1 1 1     0    0 14.52 -35.01 ZNESW 6.7 8.8 177.2 13.7 17.8 -23.7 17.7 -22.9 17.5 -22.3 17.7 -23.3
2025-11-17T20:44:41.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:44:41.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:44:41.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.780605
2025-11-17T20:44:41.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:44:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:44:41.431 [DEBUG] [Thread-61012] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:44:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:44:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:44:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:44:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:44:19', tmtdew=17.61, humidity=30.01, cloud=0.0, wind=11.49, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:44:19', seeing=1.42, atlas_timestamp='2025-11-17T18:44:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.05424999999999969, 0.10675000000000168, 0.10625000000000107, 0.09999999999999787, 0.11800000000000033, 0.13125000000000142, 0.05599999999999916, 0.09725000000000072, 0.10299999999999798, 0.125, 0.12025000000000041, 0.12400000000000055, 0.21199999999999974, 0.1952499999999997, 0.08799999999999919, 0.10350000000000037, 0.12824999999999953, 0.14749999999999908, 0.22799999999999976, 0.20224999999999937, 0.18399999999999928, 0.008749999999999147, 0.07225000000000037, 0.1687499999999993, 0.20149999999999935, 0.2554999999999996, 0.3537499999999998, 0.22850000000000037, 0.23099999999999987, 0.1070000000000011, 0.2134999999999998, 0.27300000000000146, 0.16674999999999862], zp_timestamp='2025-11-17T18:41:00')
2025-11-17T20:44:41.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:44:41.528 [DEBUG] [Thread-61015] [transport.py] [_log()] starting thread (client mode): 0xd31cf340
2025-11-17T20:44:41.528 [DEBUG] [Thread-61015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:44:41.543 [DEBUG] [Thread-61015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:44:41.543 [INFO] [Thread-61015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] client lang: <none>
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] server lang: <none>
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] kex follows: False
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:44:41.551 [DEBUG] [Thread-61015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:44:41.552 [DEBUG] [Thread-61015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:44:41.552 [DEBUG] [Thread-61015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:44:41.552 [DEBUG] [Thread-61015] [transport.py] [_log()] Compression: none
2025-11-17T20:44:41.552 [DEBUG] [Thread-61015] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:44:41.608 [DEBUG] [Thread-61015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:44:41.608 [DEBUG] [Thread-61015] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:44:41.609 [DEBUG] [Thread-61015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:44:41.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:44:41.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:44:41.663 [DEBUG] [Thread-61015] [transport.py] [_log()] userauth is OK
2025-11-17T20:44:41.664 [DEBUG] [Thread-61015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:44:41.664 [DEBUG] [Thread-61015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:44:41.664 [DEBUG] [Thread-61015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:44:41.664 [DEBUG] [Thread-61015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:44:41.681 [INFO] [Thread-61015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:44:41.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:44:41.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:44:42.513 [DEBUG] [Thread-61015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:44:42.514 [DEBUG] [Thread-61015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:44:42.565 [DEBUG] [Thread-61015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:44:42.565 [DEBUG] [Thread-61015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:44:42.574 [DEBUG] [Thread-61015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:44:42.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:44:42.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:44:42.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:44:42.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:44:42.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:44:42.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:44:42.617 [DEBUG] [Thread-61015] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:44:48.348 [DEBUG] [Thread-61017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:45:03.380 [DEBUG] [Thread-61018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:45:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:45:12.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:45:12.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:45:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 44, 51), 17.63, 30.46, 0.0, 14.08, 17.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:45:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:44:51
2025-11-17T20:45:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:45:13.592 [DEBUG] [Thread-61019] [transport.py] [_log()] starting thread (client mode): 0xd07bf340
2025-11-17T20:45:13.592 [DEBUG] [Thread-61019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:45:13.612 [DEBUG] [Thread-61019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:45:13.613 [INFO] [Thread-61019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:45:13.615 [DEBUG] [Thread-61019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] client lang: <none>
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] server lang: <none>
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] kex follows: False
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] Compression: none
2025-11-17T20:45:13.616 [DEBUG] [Thread-61019] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:45:13.632 [DEBUG] [Thread-61019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:45:13.632 [DEBUG] [Thread-61019] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:45:13.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:45:13.633 [DEBUG] [Thread-61019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:45:13.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:45:13.634 [DEBUG] [Thread-61019] [transport.py] [_log()] userauth is OK
2025-11-17T20:45:13.634 [DEBUG] [Thread-61019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:45:13.634 [DEBUG] [Thread-61019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:45:13.634 [DEBUG] [Thread-61019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:45:13.635 [DEBUG] [Thread-61019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:45:13.649 [INFO] [Thread-61019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:45:13.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:45:14.282 [DEBUG] [Thread-61019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:45:14.282 [DEBUG] [Thread-61019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:45:14.283 [DEBUG] [Thread-61019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:45:14.323 [DEBUG] [Thread-61019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:45:14.323 [DEBUG] [Thread-61019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:45:14.326 [DEBUG] [Thread-61019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:45:14.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:45:14.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:45:14.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:45:14.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:45:14.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:45:14.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:45:14.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:45:14.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:45:14.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:45:14.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.781299 -999.00  +17.30   8.21     35   +1.90 1 1 1 1 1     0    0 14.57 -42.80 ZNESW 11.0 8.2 180.8 14.2 17.8 -23.7 17.7 -22.8 17.5 -22.3 17.7 -23.1
2025-11-17T20:45:14.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:45:14.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:45:14.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.781299
2025-11-17T20:45:14.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:45:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:45:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:45:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:45:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:45:14.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:44:51', tmtdew=17.63, humidity=30.46, cloud=0.0, wind=14.08, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:44:51', seeing=1.42, atlas_timestamp='2025-11-17T18:45:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.05424999999999969, 0.10675000000000168, 0.10625000000000107, 0.09999999999999787, 0.11800000000000033, 0.13125000000000142, 0.05599999999999916, 0.09725000000000072, 0.10299999999999798, 0.125, 0.12025000000000041, 0.12400000000000055, 0.21199999999999974, 0.1952499999999997, 0.08799999999999919, 0.10350000000000037, 0.12824999999999953, 0.14749999999999908, 0.22799999999999976, 0.20224999999999937, 0.18399999999999928, 0.008749999999999147, 0.07225000000000037, 0.1687499999999993, 0.20149999999999935, 0.2554999999999996, 0.3537499999999998, 0.22850000000000037, 0.23099999999999987, 0.1070000000000011, 0.2134999999999998, 0.27300000000000146, 0.16674999999999862], zp_timestamp='2025-11-17T18:41:00')
2025-11-17T20:45:14.357 [DEBUG] [Thread-61019] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:45:14.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:45:14.453 [DEBUG] [Thread-61022] [transport.py] [_log()] starting thread (client mode): 0xd0703850
2025-11-17T20:45:14.453 [DEBUG] [Thread-61022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:45:14.468 [DEBUG] [Thread-61022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:45:14.468 [INFO] [Thread-61022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:45:14.475 [DEBUG] [Thread-61022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:45:14.475 [DEBUG] [Thread-61022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:45:14.475 [DEBUG] [Thread-61022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:45:14.475 [DEBUG] [Thread-61022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:45:14.476 [DEBUG] [Thread-61022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:45:14.476 [DEBUG] [Thread-61022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:45:14.476 [DEBUG] [Thread-61022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:45:14.476 [DEBUG] [Thread-61022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:45:14.485 [DEBUG] [Thread-61022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:45:14.485 [DEBUG] [Thread-61022] [transport.py] [_log()] client lang: <none>
2025-11-17T20:45:14.485 [DEBUG] [Thread-61022] [transport.py] [_log()] server lang: <none>
2025-11-17T20:45:14.485 [DEBUG] [Thread-61022] [transport.py] [_log()] kex follows: False
2025-11-17T20:45:14.485 [DEBUG] [Thread-61022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:45:14.485 [DEBUG] [Thread-61022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:45:14.485 [DEBUG] [Thread-61022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:45:14.486 [DEBUG] [Thread-61022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:45:14.486 [DEBUG] [Thread-61022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:45:14.486 [DEBUG] [Thread-61022] [transport.py] [_log()] Compression: none
2025-11-17T20:45:14.486 [DEBUG] [Thread-61022] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:45:14.535 [DEBUG] [Thread-61022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:45:14.536 [DEBUG] [Thread-61022] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:45:14.536 [DEBUG] [Thread-61022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:45:14.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:45:14.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:45:14.592 [DEBUG] [Thread-61022] [transport.py] [_log()] userauth is OK
2025-11-17T20:45:14.592 [DEBUG] [Thread-61022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:45:14.592 [DEBUG] [Thread-61022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:45:14.592 [DEBUG] [Thread-61022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:45:14.592 [DEBUG] [Thread-61022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:45:14.612 [INFO] [Thread-61022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:45:14.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:45:14.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:45:15.460 [DEBUG] [Thread-61022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:45:15.460 [DEBUG] [Thread-61022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:45:15.508 [DEBUG] [Thread-61022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:45:15.508 [DEBUG] [Thread-61022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:45:15.517 [DEBUG] [Thread-61022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:45:15.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:45:15.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:45:15.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:45:15.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:45:15.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:45:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:45:15.564 [DEBUG] [Thread-61022] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:45:18.409 [DEBUG] [Thread-61024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:45:33.457 [DEBUG] [Thread-61025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:45:39.034 [DEBUG] [Thread-61026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:45:40.945 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:45:40.946 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:45:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:45:45.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:45:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:45:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 45, 23), 17.64, 30.46, 0.0, 15.79, 17.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:45:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:45:23
2025-11-17T20:45:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:45:46.531 [DEBUG] [Thread-61027] [transport.py] [_log()] starting thread (client mode): 0xd31b3d30
2025-11-17T20:45:46.531 [DEBUG] [Thread-61027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:45:46.550 [DEBUG] [Thread-61027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:45:46.550 [INFO] [Thread-61027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:45:46.553 [DEBUG] [Thread-61027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:45:46.553 [DEBUG] [Thread-61027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:45:46.553 [DEBUG] [Thread-61027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:45:46.553 [DEBUG] [Thread-61027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] client lang: <none>
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] server lang: <none>
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] kex follows: False
2025-11-17T20:45:46.554 [DEBUG] [Thread-61027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:45:46.555 [DEBUG] [Thread-61027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:45:46.555 [DEBUG] [Thread-61027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:45:46.555 [DEBUG] [Thread-61027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:45:46.555 [DEBUG] [Thread-61027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:45:46.555 [DEBUG] [Thread-61027] [transport.py] [_log()] Compression: none
2025-11-17T20:45:46.555 [DEBUG] [Thread-61027] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:45:46.566 [DEBUG] [Thread-61027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:45:46.566 [DEBUG] [Thread-61027] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:45:46.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:45:46.568 [DEBUG] [Thread-61027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:45:46.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:45:46.571 [DEBUG] [Thread-61027] [transport.py] [_log()] userauth is OK
2025-11-17T20:45:46.571 [DEBUG] [Thread-61027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:45:46.571 [DEBUG] [Thread-61027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:45:46.571 [DEBUG] [Thread-61027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:45:46.571 [DEBUG] [Thread-61027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:45:46.589 [INFO] [Thread-61027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:45:46.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:45:47.160 [DEBUG] [Thread-61027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:45:47.160 [DEBUG] [Thread-61027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:45:47.160 [DEBUG] [Thread-61027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:45:47.201 [DEBUG] [Thread-61027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:45:47.201 [DEBUG] [Thread-61027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:45:47.204 [DEBUG] [Thread-61027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:45:47.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:45:47.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:45:47.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:45:47.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:45:47.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:45:47.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:45:47.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:45:47.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:45:47.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:45:47.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.781646 -999.00  +17.30  10.67     35   +1.90 1 1 1 1 1     0    0 14.32 -41.44 ZNESW 9.6 10.7 177.4 14.8 17.8 -23.7 17.7 -22.8 17.4 -22.1 17.7 -23.2
2025-11-17T20:45:47.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:45:47.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:45:47.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.781646
2025-11-17T20:45:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:45:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:45:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:45:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:45:47.224 [DEBUG] [Thread-61027] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:45:47.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:45:47.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:45:23', tmtdew=17.64, humidity=30.46, cloud=0.0, wind=15.79, temperature=17.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:45:23', seeing=1.0, atlas_timestamp='2025-11-17T18:45:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08025000000000126, 0.08975000000000044, 0.12249999999999872, 0.09849999999999959, 0.1302500000000002, 0.041999999999999815, 0.1127500000000019, 0.08449999999999847, 0.12599999999999945, 0.145249999999999, 0.19250000000000078, 0.1875, 0.15224999999999866, 0.021999999999998465, 0.03599999999999959, 0.11625000000000085, 0.13449999999999918, 0.24399999999999977, 0.1927500000000002, 0.20049999999999812, 0.027249999999998664, 0.04625000000000057, 0.0757500000000011, 0.1120000000000001, 0.26149999999999984, 0.30574999999999974, 0.31150000000000055, 0.2450000000000001, 0.06700000000000017, 0.09100000000000108, 0.13200000000000145, 0.23574999999999946], zp_timestamp='2025-11-17T18:44:00')
2025-11-17T20:45:47.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:45:47.319 [DEBUG] [Thread-61030] [transport.py] [_log()] starting thread (client mode): 0xd0700040
2025-11-17T20:45:47.319 [DEBUG] [Thread-61030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:45:47.337 [DEBUG] [Thread-61030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:45:47.337 [INFO] [Thread-61030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] client lang: <none>
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] server lang: <none>
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] kex follows: False
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:45:47.345 [DEBUG] [Thread-61030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:45:47.346 [DEBUG] [Thread-61030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:45:47.346 [DEBUG] [Thread-61030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:45:47.346 [DEBUG] [Thread-61030] [transport.py] [_log()] Compression: none
2025-11-17T20:45:47.346 [DEBUG] [Thread-61030] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:45:47.404 [DEBUG] [Thread-61030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:45:47.405 [DEBUG] [Thread-61030] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:45:47.405 [DEBUG] [Thread-61030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:45:47.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:45:47.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:45:47.460 [DEBUG] [Thread-61030] [transport.py] [_log()] userauth is OK
2025-11-17T20:45:47.460 [DEBUG] [Thread-61030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:45:47.460 [DEBUG] [Thread-61030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:45:47.460 [DEBUG] [Thread-61030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:45:47.460 [DEBUG] [Thread-61030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:45:47.481 [INFO] [Thread-61030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:45:47.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:45:47.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:45:48.325 [DEBUG] [Thread-61030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:45:48.325 [DEBUG] [Thread-61030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:45:48.373 [DEBUG] [Thread-61030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:45:48.373 [DEBUG] [Thread-61030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:45:48.381 [DEBUG] [Thread-61030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:45:48.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:45:48.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:45:48.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:45:48.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:45:48.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:45:48.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:45:48.414 [DEBUG] [Thread-61030] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:45:48.488 [DEBUG] [Thread-61032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:46:03.531 [DEBUG] [Thread-61033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:46:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:46:18.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:46:18.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:46:18.564 [DEBUG] [Thread-61034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:46:19.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 45, 55), 17.7, 30.04, 0.0, 16.22, 17.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:46:19.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:45:55
2025-11-17T20:46:19.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:46:19.388 [DEBUG] [Thread-61035] [transport.py] [_log()] starting thread (client mode): 0xd0703ac0
2025-11-17T20:46:19.388 [DEBUG] [Thread-61035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:46:19.410 [DEBUG] [Thread-61035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:46:19.410 [INFO] [Thread-61035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] client lang: <none>
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] server lang: <none>
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] kex follows: False
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] Compression: none
2025-11-17T20:46:19.414 [DEBUG] [Thread-61035] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:46:19.435 [DEBUG] [Thread-61035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:46:19.436 [DEBUG] [Thread-61035] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:46:19.436 [DEBUG] [Thread-61035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:46:19.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:46:19.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:46:19.438 [DEBUG] [Thread-61035] [transport.py] [_log()] userauth is OK
2025-11-17T20:46:19.438 [DEBUG] [Thread-61035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:46:19.439 [DEBUG] [Thread-61035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:46:19.439 [DEBUG] [Thread-61035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:46:19.439 [DEBUG] [Thread-61035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:46:19.463 [INFO] [Thread-61035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:46:19.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:46:20.089 [DEBUG] [Thread-61035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:46:20.089 [DEBUG] [Thread-61035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:46:20.089 [DEBUG] [Thread-61035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:46:20.129 [DEBUG] [Thread-61035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:46:20.129 [DEBUG] [Thread-61035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:46:20.132 [DEBUG] [Thread-61035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:46:20.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:46:20.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:46:20.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:46:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:46:20.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:46:20.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:46:20.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:46:20.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:46:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:46:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.781646 -999.00  +17.30  10.67     35   +1.90 1 1 1 1 1     0    0 14.32 -41.44 ZNESW 9.6 10.7 177.4 14.8 17.8 -23.7 17.7 -22.8 17.4 -22.1 17.7 -23.2
2025-11-17T20:46:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:46:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:46:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.781646
2025-11-17T20:46:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:46:20.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:46:20.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:46:20.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:46:20.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:46:20.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:45:55', tmtdew=17.7, humidity=30.04, cloud=0.0, wind=16.22, temperature=17.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:45:55', seeing=1.0, atlas_timestamp='2025-11-17T18:45:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08025000000000126, 0.08975000000000044, 0.12249999999999872, 0.09849999999999959, 0.1302500000000002, 0.041999999999999815, 0.1127500000000019, 0.08449999999999847, 0.12599999999999945, 0.145249999999999, 0.19250000000000078, 0.1875, 0.15224999999999866, 0.021999999999998465, 0.03599999999999959, 0.11625000000000085, 0.13449999999999918, 0.24399999999999977, 0.1927500000000002, 0.20049999999999812, 0.027249999999998664, 0.04625000000000057, 0.0757500000000011, 0.1120000000000001, 0.26149999999999984, 0.30574999999999974, 0.31150000000000055, 0.2450000000000001, 0.06700000000000017, 0.09100000000000108, 0.13200000000000145, 0.23574999999999946], zp_timestamp='2025-11-17T18:44:00')
2025-11-17T20:46:20.157 [DEBUG] [Thread-61035] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:46:20.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:46:33.590 [DEBUG] [Thread-61038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:46:39.089 [DEBUG] [Thread-61039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:46:41.148 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:46:41.148 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:46:48.628 [DEBUG] [Thread-61040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:47:03.656 [DEBUG] [Thread-61041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:47:18.686 [DEBUG] [Thread-61042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:47:33.710 [DEBUG] [Thread-61043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:47:39.155 [DEBUG] [Thread-61044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:47:41.351 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:47:41.352 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:47:48.738 [DEBUG] [Thread-61045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:48:03.765 [DEBUG] [Thread-61046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:48:18.791 [DEBUG] [Thread-61047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:48:32.708 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T20:48:33.817 [DEBUG] [Thread-61048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:48:39.232 [DEBUG] [Thread-61049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:48:41.555 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:48:41.556 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:48:48.850 [DEBUG] [Thread-61050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:02.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:49:02.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:49:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:49:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 48, 35), 17.69, 29.96, 0.0, 11.91, 17.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:49:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:48:35
2025-11-17T20:49:03.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:49:03.688 [DEBUG] [Thread-61051] [transport.py] [_log()] starting thread (client mode): 0xd0702590
2025-11-17T20:49:03.688 [DEBUG] [Thread-61051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:49:03.708 [DEBUG] [Thread-61051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:49:03.708 [INFO] [Thread-61051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] client lang: <none>
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] server lang: <none>
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] kex follows: False
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] Compression: none
2025-11-17T20:49:03.711 [DEBUG] [Thread-61051] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:49:03.728 [DEBUG] [Thread-61051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:49:03.728 [DEBUG] [Thread-61051] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:49:03.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:49:03.729 [DEBUG] [Thread-61051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:49:03.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:49:03.731 [DEBUG] [Thread-61051] [transport.py] [_log()] userauth is OK
2025-11-17T20:49:03.731 [DEBUG] [Thread-61051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:49:03.731 [DEBUG] [Thread-61051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:49:03.731 [DEBUG] [Thread-61051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:49:03.731 [DEBUG] [Thread-61051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:49:03.751 [INFO] [Thread-61051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:49:03.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:49:03.882 [DEBUG] [Thread-61053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:04.401 [DEBUG] [Thread-61051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:49:04.401 [DEBUG] [Thread-61051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:49:04.402 [DEBUG] [Thread-61051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:49:04.443 [DEBUG] [Thread-61051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:49:04.443 [DEBUG] [Thread-61051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:49:04.446 [DEBUG] [Thread-61051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:49:04.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:49:04.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:49:04.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:49:04.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:49:04.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:49:04.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:49:04.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:49:04.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:49:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:49:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.783729 -999.00  +17.30   9.16     35   +1.90 1 1 1 1 1     0    0 14.29 -45.93 ZNESW 11.2 9.2 171.4 10.2 17.7 -23.7 17.7 -22.8 17.5 -22.3 17.7 -23.1
2025-11-17T20:49:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:49:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:49:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.783729
2025-11-17T20:49:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:49:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:49:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:49:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:49:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:49:04.469 [DEBUG] [Thread-61051] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:49:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:48:35', tmtdew=17.69, humidity=29.96, cloud=0.0, wind=11.91, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:48:35', seeing=1.24, atlas_timestamp='2025-11-17T18:48:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08025000000000126, 0.08975000000000044, 0.12249999999999872, 0.09849999999999959, 0.1302500000000002, 0.041999999999999815, 0.1127500000000019, 0.08449999999999847, 0.12599999999999945, 0.145249999999999, 0.19250000000000078, 0.1875, 0.15224999999999866, 0.021999999999998465, 0.03599999999999959, 0.11625000000000085, 0.13449999999999918, 0.24399999999999977, 0.1927500000000002, 0.20049999999999812, 0.027249999999998664, 0.04625000000000057, 0.0757500000000011, 0.1120000000000001, 0.26149999999999984, 0.30574999999999974, 0.31150000000000055, 0.2450000000000001, 0.06700000000000017, 0.09100000000000108, 0.13200000000000145, 0.23574999999999946], zp_timestamp='2025-11-17T18:47:00')
2025-11-17T20:49:04.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:49:04.568 [DEBUG] [Thread-61055] [transport.py] [_log()] starting thread (client mode): 0xd31cf8e0
2025-11-17T20:49:04.568 [DEBUG] [Thread-61055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:49:04.583 [DEBUG] [Thread-61055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:49:04.583 [INFO] [Thread-61055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] client lang: <none>
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] server lang: <none>
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] kex follows: False
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:49:04.591 [DEBUG] [Thread-61055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:49:04.592 [DEBUG] [Thread-61055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:49:04.592 [DEBUG] [Thread-61055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:49:04.592 [DEBUG] [Thread-61055] [transport.py] [_log()] Compression: none
2025-11-17T20:49:04.592 [DEBUG] [Thread-61055] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:49:04.651 [DEBUG] [Thread-61055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:49:04.652 [DEBUG] [Thread-61055] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:49:04.652 [DEBUG] [Thread-61055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:49:04.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:49:04.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:49:04.708 [DEBUG] [Thread-61055] [transport.py] [_log()] userauth is OK
2025-11-17T20:49:04.708 [DEBUG] [Thread-61055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:49:04.708 [DEBUG] [Thread-61055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:49:04.708 [DEBUG] [Thread-61055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:49:04.709 [DEBUG] [Thread-61055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:49:04.727 [INFO] [Thread-61055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:49:04.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:49:04.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:49:05.573 [DEBUG] [Thread-61055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:49:05.573 [DEBUG] [Thread-61055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:49:05.621 [DEBUG] [Thread-61055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:49:05.621 [DEBUG] [Thread-61055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:49:05.630 [DEBUG] [Thread-61055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:49:05.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:49:05.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:49:05.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:49:05.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:49:05.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:49:05.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:49:05.664 [DEBUG] [Thread-61055] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:49:18.910 [DEBUG] [Thread-61057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:19.043 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:33.941 [DEBUG] [Thread-61058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:49:35.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:49:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:49:36.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 49, 7), 17.69, 29.96, 0.0, 10.43, 17.33, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:49:36.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:49:07
2025-11-17T20:49:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:49:36.610 [DEBUG] [Thread-61059] [transport.py] [_log()] starting thread (client mode): 0xd31cfe20
2025-11-17T20:49:36.610 [DEBUG] [Thread-61059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:49:36.631 [DEBUG] [Thread-61059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:49:36.631 [INFO] [Thread-61059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:49:36.634 [DEBUG] [Thread-61059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:49:36.634 [DEBUG] [Thread-61059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] client lang: <none>
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] server lang: <none>
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] kex follows: False
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] Compression: none
2025-11-17T20:49:36.635 [DEBUG] [Thread-61059] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:49:36.654 [DEBUG] [Thread-61059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:49:36.654 [DEBUG] [Thread-61059] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:49:36.655 [DEBUG] [Thread-61059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:49:36.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:49:36.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:49:36.657 [DEBUG] [Thread-61059] [transport.py] [_log()] userauth is OK
2025-11-17T20:49:36.657 [DEBUG] [Thread-61059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:49:36.657 [DEBUG] [Thread-61059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:49:36.657 [DEBUG] [Thread-61059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:49:36.657 [DEBUG] [Thread-61059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:49:36.681 [INFO] [Thread-61059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:49:36.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:49:37.309 [DEBUG] [Thread-61059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:49:37.309 [DEBUG] [Thread-61059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:49:37.310 [DEBUG] [Thread-61059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:49:37.350 [DEBUG] [Thread-61059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:49:37.351 [DEBUG] [Thread-61059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:49:37.354 [DEBUG] [Thread-61059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:49:37.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:49:37.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:49:37.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:49:37.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:49:37.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:49:37.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:49:37.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:49:37.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:49:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:49:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.784077 -999.00  +17.30  11.29     35   +1.90 1 1 1 1 1     0    0 14.36 -46.48 ZNESW 9.4 11.3 184.0 13.1 17.8 -23.6 17.7 -22.8 17.5 -22.3 17.7 -23.1
2025-11-17T20:49:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:49:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:49:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.784077
2025-11-17T20:49:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:49:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:49:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:49:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:49:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:49:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:49:07', tmtdew=17.69, humidity=29.96, cloud=0.0, wind=10.43, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:49:07', seeing=1.53, atlas_timestamp='2025-11-17T18:49:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08025000000000126, 0.08975000000000044, 0.12249999999999872, 0.09849999999999959, 0.1302500000000002, 0.041999999999999815, 0.1127500000000019, 0.08449999999999847, 0.12599999999999945, 0.145249999999999, 0.19250000000000078, 0.1875, 0.15224999999999866, 0.021999999999998465, 0.03599999999999959, 0.11625000000000085, 0.13449999999999918, 0.24399999999999977, 0.1927500000000002, 0.20049999999999812, 0.027249999999998664, 0.04625000000000057, 0.0757500000000011, 0.1120000000000001, 0.26149999999999984, 0.30574999999999974, 0.31150000000000055, 0.2450000000000001, 0.06700000000000017, 0.09100000000000108, 0.13200000000000145, 0.23574999999999946], zp_timestamp='2025-11-17T18:47:00')
2025-11-17T20:49:37.379 [DEBUG] [Thread-61059] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:49:37.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:49:37.475 [DEBUG] [Thread-61062] [transport.py] [_log()] starting thread (client mode): 0xd0701240
2025-11-17T20:49:37.475 [DEBUG] [Thread-61062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:49:37.490 [DEBUG] [Thread-61062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:49:37.490 [INFO] [Thread-61062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:49:37.500 [DEBUG] [Thread-61062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:49:37.500 [DEBUG] [Thread-61062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:49:37.500 [DEBUG] [Thread-61062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:49:37.500 [DEBUG] [Thread-61062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:49:37.500 [DEBUG] [Thread-61062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] client lang: <none>
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] server lang: <none>
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] kex follows: False
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:49:37.501 [DEBUG] [Thread-61062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:49:37.502 [DEBUG] [Thread-61062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:49:37.502 [DEBUG] [Thread-61062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:49:37.502 [DEBUG] [Thread-61062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:49:37.502 [DEBUG] [Thread-61062] [transport.py] [_log()] Compression: none
2025-11-17T20:49:37.502 [DEBUG] [Thread-61062] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:49:37.560 [DEBUG] [Thread-61062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:49:37.569 [DEBUG] [Thread-61062] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:49:37.570 [DEBUG] [Thread-61062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:49:37.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:49:37.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:49:37.616 [DEBUG] [Thread-61062] [transport.py] [_log()] userauth is OK
2025-11-17T20:49:37.616 [DEBUG] [Thread-61062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:49:37.616 [DEBUG] [Thread-61062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:49:37.617 [DEBUG] [Thread-61062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:49:37.617 [DEBUG] [Thread-61062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:49:37.634 [INFO] [Thread-61062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:49:37.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:49:37.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:49:38.482 [DEBUG] [Thread-61062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:49:38.482 [DEBUG] [Thread-61062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:49:38.530 [DEBUG] [Thread-61062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:49:38.530 [DEBUG] [Thread-61062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:49:38.539 [DEBUG] [Thread-61062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:49:38.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:49:38.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:49:38.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:49:38.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:49:38.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:49:38.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:49:38.574 [DEBUG] [Thread-61062] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:49:39.319 [DEBUG] [Thread-61064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:41.759 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:41.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:48.971 [DEBUG] [Thread-61065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:49:56.012 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:04.011 [DEBUG] [Thread-61066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:04.875 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:08.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:50:08.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:50:08.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:50:08.971 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:09.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 49, 39), 17.64, 30.04, 0.0, 9.83, 17.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:50:09.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:49:39
2025-11-17T20:50:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:50:09.540 [DEBUG] [Thread-61067] [transport.py] [_log()] starting thread (client mode): 0xd31ce740
2025-11-17T20:50:09.540 [DEBUG] [Thread-61067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:50:09.560 [DEBUG] [Thread-61067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:50:09.560 [INFO] [Thread-61067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:50:09.563 [DEBUG] [Thread-61067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:50:09.563 [DEBUG] [Thread-61067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:50:09.563 [DEBUG] [Thread-61067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:50:09.563 [DEBUG] [Thread-61067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:50:09.563 [DEBUG] [Thread-61067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:50:09.563 [DEBUG] [Thread-61067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] client lang: <none>
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] server lang: <none>
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] kex follows: False
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] Compression: none
2025-11-17T20:50:09.564 [DEBUG] [Thread-61067] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:50:09.581 [DEBUG] [Thread-61067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:50:09.582 [DEBUG] [Thread-61067] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:50:09.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:50:09.583 [DEBUG] [Thread-61067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:50:09.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:50:09.585 [DEBUG] [Thread-61067] [transport.py] [_log()] userauth is OK
2025-11-17T20:50:09.585 [DEBUG] [Thread-61067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:50:09.585 [DEBUG] [Thread-61067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:50:09.585 [DEBUG] [Thread-61067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:50:09.585 [DEBUG] [Thread-61067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:50:09.602 [INFO] [Thread-61067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:50:09.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:50:15.972 [DEBUG] [Thread-61067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:50:15.972 [DEBUG] [Thread-61067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:50:15.973 [DEBUG] [Thread-61067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:50:16.013 [DEBUG] [Thread-61067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:50:16.013 [DEBUG] [Thread-61067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:50:16.016 [DEBUG] [Thread-61067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:50:16.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:50:16.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:50:16.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:50:16.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:50:16.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:50:16.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:50:16.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:50:16.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:50:16.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:50:16.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.784424 -999.00  +17.30  10.07     35   +1.90 1 1 1 1 1     0    0 14.16 -49.27 ZNESW 11.4 10.1 174.6 11.7 17.7 -23.6 17.6 -22.9 17.4 -22.2 17.6 -23.1
2025-11-17T20:50:16.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:50:16.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:50:16.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.784424
2025-11-17T20:50:16.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:50:16.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:50:16.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:50:16.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:50:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:50:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:49:39', tmtdew=17.64, humidity=30.04, cloud=0.0, wind=9.83, temperature=17.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:49:39', seeing=1.53, atlas_timestamp='2025-11-17T18:49:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08025000000000126, 0.08975000000000044, 0.12249999999999872, 0.09849999999999959, 0.1302500000000002, 0.041999999999999815, 0.1127500000000019, 0.08449999999999847, 0.12599999999999945, 0.145249999999999, 0.19250000000000078, 0.1875, 0.15224999999999866, 0.021999999999998465, 0.03599999999999959, 0.11625000000000085, 0.13449999999999918, 0.24399999999999977, 0.1927500000000002, 0.20049999999999812, 0.027249999999998664, 0.04625000000000057, 0.0757500000000011, 0.1120000000000001, 0.26149999999999984, 0.30574999999999974, 0.31150000000000055, 0.2450000000000001, 0.06700000000000017, 0.09100000000000108, 0.13200000000000145, 0.23574999999999946], zp_timestamp='2025-11-17T18:47:00')
2025-11-17T20:50:16.048 [DEBUG] [Thread-61067] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:50:16.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:50:16.144 [DEBUG] [Thread-61070] [transport.py] [_log()] starting thread (client mode): 0xd0701ed0
2025-11-17T20:50:16.144 [DEBUG] [Thread-61070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:50:16.158 [DEBUG] [Thread-61070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:50:16.159 [INFO] [Thread-61070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] client lang: <none>
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] server lang: <none>
2025-11-17T20:50:16.166 [DEBUG] [Thread-61070] [transport.py] [_log()] kex follows: False
2025-11-17T20:50:16.167 [DEBUG] [Thread-61070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:50:16.167 [DEBUG] [Thread-61070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:50:16.167 [DEBUG] [Thread-61070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:50:16.167 [DEBUG] [Thread-61070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:50:16.167 [DEBUG] [Thread-61070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:50:16.167 [DEBUG] [Thread-61070] [transport.py] [_log()] Compression: none
2025-11-17T20:50:16.167 [DEBUG] [Thread-61070] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:50:16.228 [DEBUG] [Thread-61070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:50:16.228 [DEBUG] [Thread-61070] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:50:16.229 [DEBUG] [Thread-61070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:50:16.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:50:16.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:50:16.284 [DEBUG] [Thread-61070] [transport.py] [_log()] userauth is OK
2025-11-17T20:50:16.284 [DEBUG] [Thread-61070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:50:16.284 [DEBUG] [Thread-61070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:50:16.284 [DEBUG] [Thread-61070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:50:16.284 [DEBUG] [Thread-61070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:50:16.303 [INFO] [Thread-61070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:50:16.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:50:16.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:50:17.158 [DEBUG] [Thread-61070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:50:17.159 [DEBUG] [Thread-61070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:50:17.206 [DEBUG] [Thread-61070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:50:17.207 [DEBUG] [Thread-61070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:50:17.216 [DEBUG] [Thread-61070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:50:17.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:50:17.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:50:17.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:50:17.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:50:17.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:50:17.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:50:17.250 [DEBUG] [Thread-61070] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:50:19.041 [DEBUG] [Thread-61072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:34.088 [DEBUG] [Thread-61073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:39.408 [DEBUG] [Thread-61074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:41.964 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:41.965 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:47.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:50:47.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:50:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:50:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 50, 43), 17.62, 30.11, 0.0, 11.86, 17.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:50:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:50:43
2025-11-17T20:50:48.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:50:48.187 [DEBUG] [Thread-61075] [transport.py] [_log()] starting thread (client mode): 0xd31cdb70
2025-11-17T20:50:48.187 [DEBUG] [Thread-61075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:50:48.207 [DEBUG] [Thread-61075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:50:48.207 [INFO] [Thread-61075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:50:48.210 [DEBUG] [Thread-61075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:50:48.210 [DEBUG] [Thread-61075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:50:48.210 [DEBUG] [Thread-61075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:50:48.210 [DEBUG] [Thread-61075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] client lang: <none>
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] server lang: <none>
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] kex follows: False
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:50:48.211 [DEBUG] [Thread-61075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:50:48.212 [DEBUG] [Thread-61075] [transport.py] [_log()] Compression: none
2025-11-17T20:50:48.212 [DEBUG] [Thread-61075] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:50:48.230 [DEBUG] [Thread-61075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:50:48.231 [DEBUG] [Thread-61075] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:50:48.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:50:48.232 [DEBUG] [Thread-61075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:50:48.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:50:48.234 [DEBUG] [Thread-61075] [transport.py] [_log()] userauth is OK
2025-11-17T20:50:48.234 [DEBUG] [Thread-61075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:50:48.235 [DEBUG] [Thread-61075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:50:48.235 [DEBUG] [Thread-61075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:50:48.235 [DEBUG] [Thread-61075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:50:48.259 [INFO] [Thread-61075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:50:48.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:50:48.859 [DEBUG] [Thread-61075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:50:48.860 [DEBUG] [Thread-61075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:50:48.860 [DEBUG] [Thread-61075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:50:48.900 [DEBUG] [Thread-61075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:50:48.901 [DEBUG] [Thread-61075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:50:48.904 [DEBUG] [Thread-61075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:50:48.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:50:48.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:50:48.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:50:48.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:50:48.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:50:48.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:50:48.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:50:48.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:50:48.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:50:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.784771 -999.00  +17.30   6.07     35   +1.90 1 1 1 1 1     0    0 14.50 -42.18 ZNESW 7.9 6.1 182.2 12.0 17.7 -23.7 17.7 -22.8 17.4 -22.2 17.7 -23.1
2025-11-17T20:50:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:50:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:50:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.784771
2025-11-17T20:50:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:50:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:50:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:50:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:50:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:50:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:50:43', tmtdew=17.62, humidity=30.11, cloud=0.0, wind=11.86, temperature=17.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:50:43', seeing=1.12, atlas_timestamp='2025-11-17T18:50:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08025000000000126, 0.08975000000000044, 0.12249999999999872, 0.09849999999999959, 0.1302500000000002, 0.041999999999999815, 0.1127500000000019, 0.08449999999999847, 0.12599999999999945, 0.145249999999999, 0.19250000000000078, 0.1875, 0.15224999999999866, 0.021999999999998465, 0.03599999999999959, 0.11625000000000085, 0.13449999999999918, 0.24399999999999977, 0.1927500000000002, 0.20049999999999812, 0.027249999999998664, 0.04625000000000057, 0.0757500000000011, 0.1120000000000001, 0.26149999999999984, 0.30574999999999974, 0.31150000000000055, 0.2450000000000001, 0.06700000000000017, 0.09100000000000108, 0.13200000000000145, 0.23574999999999946], zp_timestamp='2025-11-17T18:47:00')
2025-11-17T20:50:48.928 [DEBUG] [Thread-61075] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:50:49.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:50:49.037 [DEBUG] [Thread-61078] [transport.py] [_log()] starting thread (client mode): 0xd31ce200
2025-11-17T20:50:49.037 [DEBUG] [Thread-61078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:50:49.053 [DEBUG] [Thread-61078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:50:49.053 [INFO] [Thread-61078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] client lang: <none>
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] server lang: <none>
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] kex follows: False
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:50:49.061 [DEBUG] [Thread-61078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:50:49.062 [DEBUG] [Thread-61078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:50:49.062 [DEBUG] [Thread-61078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:50:49.062 [DEBUG] [Thread-61078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:50:49.062 [DEBUG] [Thread-61078] [transport.py] [_log()] Compression: none
2025-11-17T20:50:49.062 [DEBUG] [Thread-61078] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:50:49.119 [DEBUG] [Thread-61080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:50:49.121 [DEBUG] [Thread-61078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:50:49.122 [DEBUG] [Thread-61078] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:50:49.123 [DEBUG] [Thread-61078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:50:49.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:50:49.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:50:49.180 [DEBUG] [Thread-61078] [transport.py] [_log()] userauth is OK
2025-11-17T20:50:49.180 [DEBUG] [Thread-61078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:50:49.180 [DEBUG] [Thread-61078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:50:49.180 [DEBUG] [Thread-61078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:50:49.180 [DEBUG] [Thread-61078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:50:49.200 [INFO] [Thread-61078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:50:49.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:50:49.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:50:50.066 [DEBUG] [Thread-61078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:50:50.066 [DEBUG] [Thread-61078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:50:50.113 [DEBUG] [Thread-61078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:50:50.113 [DEBUG] [Thread-61078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:50:50.122 [DEBUG] [Thread-61078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:50:50.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:50:50.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:50:50.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:50:50.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:50:50.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:50:50.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:50:50.157 [DEBUG] [Thread-61078] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:51:04.167 [DEBUG] [Thread-61081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:19.195 [DEBUG] [Thread-61082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:20.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:51:20.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:51:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:51:20.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 51, 15), 17.62, 30.11, 0.0, 11.77, 17.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:51:20.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:51:15
2025-11-17T20:51:20.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:51:21.134 [DEBUG] [Thread-61083] [transport.py] [_log()] starting thread (client mode): 0xd0710640
2025-11-17T20:51:21.134 [DEBUG] [Thread-61083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:51:21.155 [DEBUG] [Thread-61083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:51:21.155 [INFO] [Thread-61083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] client lang: <none>
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] server lang: <none>
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] kex follows: False
2025-11-17T20:51:21.158 [DEBUG] [Thread-61083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:51:21.159 [DEBUG] [Thread-61083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:51:21.159 [DEBUG] [Thread-61083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:51:21.159 [DEBUG] [Thread-61083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:51:21.159 [DEBUG] [Thread-61083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:51:21.159 [DEBUG] [Thread-61083] [transport.py] [_log()] Compression: none
2025-11-17T20:51:21.159 [DEBUG] [Thread-61083] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:51:21.175 [DEBUG] [Thread-61083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:51:21.176 [DEBUG] [Thread-61083] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:51:21.176 [DEBUG] [Thread-61083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:51:21.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:51:21.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:51:21.178 [DEBUG] [Thread-61083] [transport.py] [_log()] userauth is OK
2025-11-17T20:51:21.178 [DEBUG] [Thread-61083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:51:21.179 [DEBUG] [Thread-61083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:51:21.179 [DEBUG] [Thread-61083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:51:21.179 [DEBUG] [Thread-61083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:51:21.192 [INFO] [Thread-61083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:51:21.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:51:21.994 [DEBUG] [Thread-61083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:51:21.995 [DEBUG] [Thread-61083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:51:21.995 [DEBUG] [Thread-61083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:51:22.035 [DEBUG] [Thread-61083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:51:22.035 [DEBUG] [Thread-61083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:51:22.038 [DEBUG] [Thread-61083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:51:22.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:51:22.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:51:22.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:51:22.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:51:22.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:51:22.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:51:22.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:51:22.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:51:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:51:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.785118 -999.00  +17.30   8.58     35   +1.80 1 1 1 1 1     0    0 14.58 -42.09 ZNESW 7.8 8.6 178.6 11.2 17.7 -23.6 17.7 -22.9 17.4 -22.2 17.6 -23.0
2025-11-17T20:51:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:51:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:51:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.785118
2025-11-17T20:51:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:51:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:51:22.063 [DEBUG] [Thread-61083] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:51:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:51:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:51:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:51:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:51:15', tmtdew=17.62, humidity=30.11, cloud=0.0, wind=11.77, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:51:15', seeing=1.1, atlas_timestamp='2025-11-17T18:50:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.08025000000000126, 0.08975000000000044, 0.12249999999999872, 0.09849999999999959, 0.1302500000000002, 0.041999999999999815, 0.1127500000000019, 0.08449999999999847, 0.12599999999999945, 0.145249999999999, 0.19250000000000078, 0.1875, 0.15224999999999866, 0.021999999999998465, 0.03599999999999959, 0.11625000000000085, 0.13449999999999918, 0.24399999999999977, 0.1927500000000002, 0.20049999999999812, 0.027249999999998664, 0.04625000000000057, 0.0757500000000011, 0.1120000000000001, 0.26149999999999984, 0.30574999999999974, 0.31150000000000055, 0.2450000000000001, 0.06700000000000017, 0.09100000000000108, 0.13200000000000145, 0.23574999999999946], zp_timestamp='2025-11-17T18:47:00')
2025-11-17T20:51:22.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:51:22.161 [DEBUG] [Thread-61086] [transport.py] [_log()] starting thread (client mode): 0xd0713a00
2025-11-17T20:51:22.161 [DEBUG] [Thread-61086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:51:22.181 [DEBUG] [Thread-61086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:51:22.182 [INFO] [Thread-61086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] client lang: <none>
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] server lang: <none>
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] kex follows: False
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:51:22.189 [DEBUG] [Thread-61086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:51:22.190 [DEBUG] [Thread-61086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:51:22.190 [DEBUG] [Thread-61086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:51:22.190 [DEBUG] [Thread-61086] [transport.py] [_log()] Compression: none
2025-11-17T20:51:22.190 [DEBUG] [Thread-61086] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:51:22.247 [DEBUG] [Thread-61086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:51:22.247 [DEBUG] [Thread-61086] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:51:22.247 [DEBUG] [Thread-61086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:51:22.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:51:22.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:51:22.304 [DEBUG] [Thread-61086] [transport.py] [_log()] userauth is OK
2025-11-17T20:51:22.304 [DEBUG] [Thread-61086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:51:22.304 [DEBUG] [Thread-61086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:51:22.304 [DEBUG] [Thread-61086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:51:22.304 [DEBUG] [Thread-61086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:51:22.318 [INFO] [Thread-61086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:51:22.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:51:22.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:51:23.193 [DEBUG] [Thread-61086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:51:23.193 [DEBUG] [Thread-61086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:51:23.240 [DEBUG] [Thread-61086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:51:23.240 [DEBUG] [Thread-61086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:51:23.249 [DEBUG] [Thread-61086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:51:23.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:51:23.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:51:23.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:51:23.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:51:23.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:51:23.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:51:23.285 [DEBUG] [Thread-61086] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:51:32.523 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:34.223 [DEBUG] [Thread-61088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:39.474 [DEBUG] [Thread-61089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:40.484 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:42.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:42.169 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:44.559 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:49.269 [DEBUG] [Thread-61090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:51:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:51:53.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:51:53.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:51:54.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 51, 47), 17.5, 30.24, 0.0, 11.51, 17.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:51:54.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:51:47
2025-11-17T20:51:54.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:51:54.287 [DEBUG] [Thread-61091] [transport.py] [_log()] starting thread (client mode): 0xd0700b20
2025-11-17T20:51:54.288 [DEBUG] [Thread-61091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:51:54.309 [DEBUG] [Thread-61091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:51:54.309 [INFO] [Thread-61091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] client lang: <none>
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] server lang: <none>
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] kex follows: False
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] Compression: none
2025-11-17T20:51:54.312 [DEBUG] [Thread-61091] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:51:54.328 [DEBUG] [Thread-61091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:51:54.328 [DEBUG] [Thread-61091] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:51:54.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:51:54.329 [DEBUG] [Thread-61091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:51:54.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:51:54.329 [DEBUG] [Thread-61091] [transport.py] [_log()] userauth is OK
2025-11-17T20:51:54.329 [DEBUG] [Thread-61091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:51:54.329 [DEBUG] [Thread-61091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:51:54.329 [DEBUG] [Thread-61091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:51:54.329 [DEBUG] [Thread-61091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:51:54.344 [INFO] [Thread-61091] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:51:54.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:51:54.981 [DEBUG] [Thread-61091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:51:54.981 [DEBUG] [Thread-61091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:51:54.981 [DEBUG] [Thread-61091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:51:55.022 [DEBUG] [Thread-61091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:51:55.022 [DEBUG] [Thread-61091] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:51:55.024 [DEBUG] [Thread-61091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:51:55.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:51:55.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:51:55.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:51:55.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:51:55.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:51:55.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:51:55.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:51:55.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:51:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:51:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.785465 -999.00  +17.30   8.06     35   +1.90 1 1 1 1 1     0    0 14.39 -41.38 ZNESW 13.1 8.1 186.4 10.9 17.7 -23.6 17.6 -22.9 17.4 -22.2 17.6 -23.0
2025-11-17T20:51:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:51:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:51:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.785465
2025-11-17T20:51:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:51:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:51:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:51:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:51:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:51:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:51:47', tmtdew=17.5, humidity=30.24, cloud=0.0, wind=11.51, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:51:47', seeing=1.17, atlas_timestamp='2025-11-17T18:51:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:50:00')
2025-11-17T20:51:55.050 [DEBUG] [Thread-61091] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:51:55.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:51:55.153 [DEBUG] [Thread-61094] [transport.py] [_log()] starting thread (client mode): 0xd0785c30
2025-11-17T20:51:55.154 [DEBUG] [Thread-61094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:51:55.168 [DEBUG] [Thread-61094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:51:55.168 [INFO] [Thread-61094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:51:55.175 [DEBUG] [Thread-61094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:51:55.175 [DEBUG] [Thread-61094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:51:55.175 [DEBUG] [Thread-61094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:51:55.175 [DEBUG] [Thread-61094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] client lang: <none>
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] server lang: <none>
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] kex follows: False
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] Compression: none
2025-11-17T20:51:55.176 [DEBUG] [Thread-61094] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:51:55.232 [DEBUG] [Thread-61094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:51:55.232 [DEBUG] [Thread-61094] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:51:55.233 [DEBUG] [Thread-61094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:51:55.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:51:55.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:51:55.292 [DEBUG] [Thread-61094] [transport.py] [_log()] userauth is OK
2025-11-17T20:51:55.292 [DEBUG] [Thread-61094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:51:55.293 [DEBUG] [Thread-61094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:51:55.293 [DEBUG] [Thread-61094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:51:55.293 [DEBUG] [Thread-61094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:51:55.312 [INFO] [Thread-61094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:51:55.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:51:55.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:51:56.156 [DEBUG] [Thread-61094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:51:56.156 [DEBUG] [Thread-61094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:51:56.204 [DEBUG] [Thread-61094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:51:56.204 [DEBUG] [Thread-61094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:51:56.213 [DEBUG] [Thread-61094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:51:56.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:51:56.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:51:56.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:51:56.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:51:56.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:51:56.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:51:56.247 [DEBUG] [Thread-61094] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:52:04.298 [DEBUG] [Thread-61096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:52:19.346 [DEBUG] [Thread-61097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:52:26.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:52:26.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:52:26.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:52:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 52, 19), 17.56, 30.11, 0.0, 12.74, 17.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:52:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:52:19
2025-11-17T20:52:27.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:52:27.199 [DEBUG] [Thread-61098] [transport.py] [_log()] starting thread (client mode): 0xd0703070
2025-11-17T20:52:27.199 [DEBUG] [Thread-61098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:52:27.220 [DEBUG] [Thread-61098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:52:27.221 [INFO] [Thread-61098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] client lang: <none>
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] server lang: <none>
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] kex follows: False
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:52:27.224 [DEBUG] [Thread-61098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:52:27.225 [DEBUG] [Thread-61098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:52:27.225 [DEBUG] [Thread-61098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:52:27.225 [DEBUG] [Thread-61098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:52:27.225 [DEBUG] [Thread-61098] [transport.py] [_log()] Compression: none
2025-11-17T20:52:27.225 [DEBUG] [Thread-61098] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:52:27.240 [DEBUG] [Thread-61098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:52:27.240 [DEBUG] [Thread-61098] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:52:27.240 [DEBUG] [Thread-61098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:52:27.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:52:27.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:52:27.241 [DEBUG] [Thread-61098] [transport.py] [_log()] userauth is OK
2025-11-17T20:52:27.241 [DEBUG] [Thread-61098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:52:27.241 [DEBUG] [Thread-61098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:52:27.241 [DEBUG] [Thread-61098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:52:27.241 [DEBUG] [Thread-61098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:52:27.249 [INFO] [Thread-61098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:52:27.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:52:28.021 [DEBUG] [Thread-61098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:52:28.021 [DEBUG] [Thread-61098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:52:28.022 [DEBUG] [Thread-61098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:52:28.062 [DEBUG] [Thread-61098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:52:28.062 [DEBUG] [Thread-61098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:52:28.064 [DEBUG] [Thread-61098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:52:28.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:52:28.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:52:28.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:52:28.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:52:28.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:52:28.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:52:28.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:52:28.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:52:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:52:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.786160 -999.00  +17.30  12.47     35   +2.00 1 1 1 1 1     0    0 14.71 -34.76 ZNESW 12.2 12.5 178.4 15.1 17.8 -23.6 17.6 -22.8 17.4 -22.1 17.6 -23.0
2025-11-17T20:52:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:52:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:52:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.786160
2025-11-17T20:52:28.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:52:28.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:52:28.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:52:28.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:52:28.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:52:28.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:52:19', tmtdew=17.56, humidity=30.11, cloud=0.0, wind=12.74, temperature=17.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:52:19', seeing=0.92, atlas_timestamp='2025-11-17T18:52:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:50:00')
2025-11-17T20:52:28.084 [DEBUG] [Thread-61098] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:52:28.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:52:28.170 [DEBUG] [Thread-61101] [transport.py] [_log()] starting thread (client mode): 0xd31ccf10
2025-11-17T20:52:28.171 [DEBUG] [Thread-61101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:52:28.186 [DEBUG] [Thread-61101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:52:28.186 [INFO] [Thread-61101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] client lang: <none>
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] server lang: <none>
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] kex follows: False
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] Compression: none
2025-11-17T20:52:28.193 [DEBUG] [Thread-61101] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:52:28.256 [DEBUG] [Thread-61101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:52:28.256 [DEBUG] [Thread-61101] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:52:28.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:52:28.256 [DEBUG] [Thread-61101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:52:28.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:52:28.319 [DEBUG] [Thread-61101] [transport.py] [_log()] userauth is OK
2025-11-17T20:52:28.320 [DEBUG] [Thread-61101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:52:28.320 [DEBUG] [Thread-61101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:52:28.320 [DEBUG] [Thread-61101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:52:28.320 [DEBUG] [Thread-61101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:52:28.334 [INFO] [Thread-61101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:52:28.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:52:28.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:52:29.170 [DEBUG] [Thread-61101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:52:29.170 [DEBUG] [Thread-61101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:52:29.218 [DEBUG] [Thread-61101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:52:29.218 [DEBUG] [Thread-61101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:52:29.226 [DEBUG] [Thread-61101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:52:29.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:52:29.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:52:29.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:52:29.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:52:29.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:52:29.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:52:29.258 [DEBUG] [Thread-61101] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:52:34.373 [DEBUG] [Thread-61103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:52:39.531 [DEBUG] [Thread-61104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:52:42.370 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:52:42.371 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:52:49.425 [DEBUG] [Thread-61105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:52:59.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:52:59.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:52:59.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:52:59.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 52, 51), 17.56, 30.11, 0.0, 12.88, 17.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:52:59.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:52:51
2025-11-17T20:53:00.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:53:00.210 [DEBUG] [Thread-61106] [transport.py] [_log()] starting thread (client mode): 0xd31efa30
2025-11-17T20:53:00.210 [DEBUG] [Thread-61106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:53:00.230 [DEBUG] [Thread-61106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:53:00.230 [INFO] [Thread-61106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] client lang: <none>
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] server lang: <none>
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] kex follows: False
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] Compression: none
2025-11-17T20:53:00.233 [DEBUG] [Thread-61106] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:53:00.250 [DEBUG] [Thread-61106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:53:00.250 [DEBUG] [Thread-61106] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:53:00.250 [DEBUG] [Thread-61106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:53:00.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:53:00.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:53:00.251 [DEBUG] [Thread-61106] [transport.py] [_log()] userauth is OK
2025-11-17T20:53:00.251 [DEBUG] [Thread-61106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:53:00.251 [DEBUG] [Thread-61106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:53:00.251 [DEBUG] [Thread-61106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:53:00.252 [DEBUG] [Thread-61106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:53:00.261 [INFO] [Thread-61106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:53:00.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:53:00.862 [DEBUG] [Thread-61106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:53:00.862 [DEBUG] [Thread-61106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:53:00.862 [DEBUG] [Thread-61106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:53:00.902 [DEBUG] [Thread-61106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:53:00.903 [DEBUG] [Thread-61106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:53:00.906 [DEBUG] [Thread-61106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:53:00.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:53:00.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:53:00.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:53:00.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:53:00.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:53:00.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:53:00.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:53:00.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:53:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:53:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.786507 -999.00  +17.30   9.97     35   +1.90 1 1 1 1 1     0    0 14.53 -34.37 ZNESW 10.6 10.0 176.6 12.9 17.7 -23.5 17.7 -22.8 17.4 -22.2 17.6 -23.0
2025-11-17T20:53:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:53:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:53:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.786507
2025-11-17T20:53:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:53:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:53:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:53:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:53:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:53:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:52:51', tmtdew=17.56, humidity=30.11, cloud=0.0, wind=12.88, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:52:51', seeing=1.04, atlas_timestamp='2025-11-17T18:52:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:50:00')
2025-11-17T20:53:00.931 [DEBUG] [Thread-61106] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:53:01.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:53:01.028 [DEBUG] [Thread-61109] [transport.py] [_log()] starting thread (client mode): 0xd31ed660
2025-11-17T20:53:01.028 [DEBUG] [Thread-61109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:53:01.043 [DEBUG] [Thread-61109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:53:01.044 [INFO] [Thread-61109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:53:01.051 [DEBUG] [Thread-61109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:53:01.051 [DEBUG] [Thread-61109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:53:01.051 [DEBUG] [Thread-61109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:53:01.051 [DEBUG] [Thread-61109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] client lang: <none>
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] server lang: <none>
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] kex follows: False
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:53:01.052 [DEBUG] [Thread-61109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:53:01.053 [DEBUG] [Thread-61109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:53:01.053 [DEBUG] [Thread-61109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:53:01.053 [DEBUG] [Thread-61109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:53:01.053 [DEBUG] [Thread-61109] [transport.py] [_log()] Compression: none
2025-11-17T20:53:01.053 [DEBUG] [Thread-61109] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:53:01.107 [DEBUG] [Thread-61109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:53:01.107 [DEBUG] [Thread-61109] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:53:01.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:53:01.108 [DEBUG] [Thread-61109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:53:01.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:53:01.164 [DEBUG] [Thread-61109] [transport.py] [_log()] userauth is OK
2025-11-17T20:53:01.164 [DEBUG] [Thread-61109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:53:01.164 [DEBUG] [Thread-61109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:53:01.164 [DEBUG] [Thread-61109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:53:01.164 [DEBUG] [Thread-61109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:53:01.180 [INFO] [Thread-61109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:53:01.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:53:01.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:53:02.066 [DEBUG] [Thread-61109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:53:02.066 [DEBUG] [Thread-61109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:53:02.114 [DEBUG] [Thread-61109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:53:02.114 [DEBUG] [Thread-61109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:53:02.123 [DEBUG] [Thread-61109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:53:02.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:53:02.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:53:02.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:53:02.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:53:02.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:53:02.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:53:02.156 [DEBUG] [Thread-61109] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:53:04.453 [DEBUG] [Thread-61111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:07.075 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:15.157 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:19.214 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:19.494 [DEBUG] [Thread-61112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:53:32.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:53: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
2025-11-17T20:53:32.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 53, 23), 17.54, 30.16, 0.0, 12.55, 17.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:53:32.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:53:23
2025-11-17T20:53:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:53:33.097 [DEBUG] [Thread-61113] [transport.py] [_log()] starting thread (client mode): 0xd0712f50
2025-11-17T20:53:33.097 [DEBUG] [Thread-61113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:53:33.116 [DEBUG] [Thread-61113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:53:33.117 [INFO] [Thread-61113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:53:33.120 [DEBUG] [Thread-61113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] client lang: <none>
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] server lang: <none>
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] kex follows: False
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] Compression: none
2025-11-17T20:53:33.121 [DEBUG] [Thread-61113] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:53:33.138 [DEBUG] [Thread-61113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:53:33.138 [DEBUG] [Thread-61113] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:53:33.139 [DEBUG] [Thread-61113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:53:33.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:53:33.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:53:33.141 [DEBUG] [Thread-61113] [transport.py] [_log()] userauth is OK
2025-11-17T20:53:33.141 [DEBUG] [Thread-61113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:53:33.141 [DEBUG] [Thread-61113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:53:33.141 [DEBUG] [Thread-61113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:53:33.141 [DEBUG] [Thread-61113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:53:33.159 [INFO] [Thread-61113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:53:33.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:53:33.809 [DEBUG] [Thread-61113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:53:33.809 [DEBUG] [Thread-61113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:53:33.809 [DEBUG] [Thread-61113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:53:33.850 [DEBUG] [Thread-61113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:53:33.851 [DEBUG] [Thread-61113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:53:33.853 [DEBUG] [Thread-61113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:53:33.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:53:33.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:53:33.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:53:33.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:53:33.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:53:33.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:53:33.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:53:33.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:53:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:53:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.786854 -999.00  +17.30   9.01     35   +1.90 1 1 1 1 1     0    0 14.42 -36.12 ZNESW 8.1 9.0 180.4 13.1 17.7 -23.6 17.6 -22.8 17.4 -22.2 17.6 -22.9
2025-11-17T20:53:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:53:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:53:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.786854
2025-11-17T20:53:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:53:33.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:53:33.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:53:33.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:53:33.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:53:33.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:53:23', tmtdew=17.54, humidity=30.16, cloud=0.0, wind=12.55, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:53:23', seeing=1.04, atlas_timestamp='2025-11-17T18:53:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:50:00')
2025-11-17T20:53:33.875 [DEBUG] [Thread-61113] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:53:33.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:53:33.974 [DEBUG] [Thread-61116] [transport.py] [_log()] starting thread (client mode): 0xd0701840
2025-11-17T20:53:33.975 [DEBUG] [Thread-61116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:53:33.989 [DEBUG] [Thread-61116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:53:33.989 [INFO] [Thread-61116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:53:33.996 [DEBUG] [Thread-61116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:53:33.996 [DEBUG] [Thread-61116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:53:33.996 [DEBUG] [Thread-61116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] client lang: <none>
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] server lang: <none>
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] kex follows: False
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] Compression: none
2025-11-17T20:53:33.997 [DEBUG] [Thread-61116] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:53:34.060 [DEBUG] [Thread-61116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:53:34.061 [DEBUG] [Thread-61116] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:53:34.061 [DEBUG] [Thread-61116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:53:34.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:53:34.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:53:34.116 [DEBUG] [Thread-61116] [transport.py] [_log()] userauth is OK
2025-11-17T20:53:34.116 [DEBUG] [Thread-61116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:53:34.116 [DEBUG] [Thread-61116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:53:34.116 [DEBUG] [Thread-61116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:53:34.117 [DEBUG] [Thread-61116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:53:34.136 [INFO] [Thread-61116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:53:34.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:53:34.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:53:34.528 [DEBUG] [Thread-61118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:34.991 [DEBUG] [Thread-61116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:53:34.991 [DEBUG] [Thread-61116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:53:35.039 [DEBUG] [Thread-61116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:53:35.040 [DEBUG] [Thread-61116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:53:35.049 [DEBUG] [Thread-61116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:53:35.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:53:35.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:53:35.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:53:35.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:53:35.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:53:35.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:53:35.083 [DEBUG] [Thread-61116] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:53:39.601 [DEBUG] [Thread-61119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:42.574 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:42.575 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:53:49.565 [DEBUG] [Thread-61120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:04.594 [DEBUG] [Thread-61121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:54:05.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:54:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:54:05.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 53, 55), 17.56, 30.09, 0.0, 13.0, 17.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:54:05.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:53:55
2025-11-17T20:54:05.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:54:06.038 [DEBUG] [Thread-61122] [transport.py] [_log()] starting thread (client mode): 0xd07019c0
2025-11-17T20:54:06.038 [DEBUG] [Thread-61122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:54:06.058 [DEBUG] [Thread-61122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:54:06.058 [INFO] [Thread-61122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:54:06.061 [DEBUG] [Thread-61122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:54:06.061 [DEBUG] [Thread-61122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] client lang: <none>
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] server lang: <none>
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] kex follows: False
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] Compression: none
2025-11-17T20:54:06.062 [DEBUG] [Thread-61122] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:54:06.081 [DEBUG] [Thread-61122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:54:06.081 [DEBUG] [Thread-61122] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:54:06.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:54:06.082 [DEBUG] [Thread-61122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:54:06.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:54:06.084 [DEBUG] [Thread-61122] [transport.py] [_log()] userauth is OK
2025-11-17T20:54:06.085 [DEBUG] [Thread-61122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:54:06.085 [DEBUG] [Thread-61122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:54:06.085 [DEBUG] [Thread-61122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:54:06.085 [DEBUG] [Thread-61122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:54:06.109 [INFO] [Thread-61122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:54:06.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:54:06.755 [DEBUG] [Thread-61122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:54:06.755 [DEBUG] [Thread-61122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:54:06.756 [DEBUG] [Thread-61122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:54:06.796 [DEBUG] [Thread-61122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:54:06.797 [DEBUG] [Thread-61122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:54:06.800 [DEBUG] [Thread-61122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:54:06.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:54:06.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:54:06.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:54:06.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:54:06.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:54:06.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:54:06.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:54:06.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:54:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:54:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.787202 -999.00  +17.30  11.00     35   +1.90 1 1 1 1 1     0    0 14.75 -37.79 ZNESW 8.1 11.0 174.4 12.3 17.7 -23.6 17.6 -22.9 17.3 -22.2 17.6 -23.0
2025-11-17T20:54:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:54:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:54:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.787202
2025-11-17T20:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:54:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:54:06.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:53:55', tmtdew=17.56, humidity=30.09, cloud=0.0, wind=13.0, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:53:55', seeing=1.08, atlas_timestamp='2025-11-17T18:53:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:50:00')
2025-11-17T20:54:06.825 [DEBUG] [Thread-61122] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:54:06.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:54:06.923 [DEBUG] [Thread-61125] [transport.py] [_log()] starting thread (client mode): 0xd31ccca0
2025-11-17T20:54:06.924 [DEBUG] [Thread-61125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:54:06.939 [DEBUG] [Thread-61125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:54:06.939 [INFO] [Thread-61125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:54:06.946 [DEBUG] [Thread-61125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] client lang: <none>
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] server lang: <none>
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] kex follows: False
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] Compression: none
2025-11-17T20:54:06.947 [DEBUG] [Thread-61125] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:54:07.008 [DEBUG] [Thread-61125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:54:07.008 [DEBUG] [Thread-61125] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:54:07.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:54:07.009 [DEBUG] [Thread-61125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:54:07.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:54:07.072 [DEBUG] [Thread-61125] [transport.py] [_log()] userauth is OK
2025-11-17T20:54:07.072 [DEBUG] [Thread-61125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:54:07.072 [DEBUG] [Thread-61125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:54:07.072 [DEBUG] [Thread-61125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:54:07.072 [DEBUG] [Thread-61125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:54:07.095 [INFO] [Thread-61125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:54:07.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:54:07.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:54:07.974 [DEBUG] [Thread-61125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:54:07.974 [DEBUG] [Thread-61125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:54:08.023 [DEBUG] [Thread-61125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:54:08.024 [DEBUG] [Thread-61125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:54:08.033 [DEBUG] [Thread-61125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:54:08.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:54:08.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:54:08.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:54:08.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:54:08.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:54:08.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:54:08.072 [DEBUG] [Thread-61125] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:54:19.622 [DEBUG] [Thread-61127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:34.667 [DEBUG] [Thread-61128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:54:38.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:54:38.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:54:38.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 54, 27), 17.55, 30.14, 0.0, 12.99, 17.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:54:38.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:54:27
2025-11-17T20:54:38.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:54:39.025 [DEBUG] [Thread-61129] [transport.py] [_log()] starting thread (client mode): 0xd0710f40
2025-11-17T20:54:39.025 [DEBUG] [Thread-61129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:54:39.045 [DEBUG] [Thread-61129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:54:39.045 [INFO] [Thread-61129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] client lang: <none>
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] server lang: <none>
2025-11-17T20:54:39.047 [DEBUG] [Thread-61129] [transport.py] [_log()] kex follows: False
2025-11-17T20:54:39.048 [DEBUG] [Thread-61129] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:54:39.048 [DEBUG] [Thread-61129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:54:39.048 [DEBUG] [Thread-61129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:54:39.048 [DEBUG] [Thread-61129] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:54:39.048 [DEBUG] [Thread-61129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:54:39.048 [DEBUG] [Thread-61129] [transport.py] [_log()] Compression: none
2025-11-17T20:54:39.048 [DEBUG] [Thread-61129] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:54:39.062 [DEBUG] [Thread-61129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:54:39.063 [DEBUG] [Thread-61129] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:54:39.063 [DEBUG] [Thread-61129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:54:39.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:54:39.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:54:39.065 [DEBUG] [Thread-61129] [transport.py] [_log()] userauth is OK
2025-11-17T20:54:39.065 [DEBUG] [Thread-61129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:54:39.065 [DEBUG] [Thread-61129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:54:39.065 [DEBUG] [Thread-61129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:54:39.065 [DEBUG] [Thread-61129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:54:39.101 [INFO] [Thread-61129] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:54:39.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:54:39.687 [DEBUG] [Thread-61131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:39.755 [DEBUG] [Thread-61129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:54:39.755 [DEBUG] [Thread-61129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:54:39.755 [DEBUG] [Thread-61129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:54:39.796 [DEBUG] [Thread-61129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:54:39.797 [DEBUG] [Thread-61129] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:54:39.799 [DEBUG] [Thread-61129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:54:39.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:54:39.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:54:39.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:54:39.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:54:39.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:54:39.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:54:39.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:54:39.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:54:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:54:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.787549 -999.00  +17.20  13.21     35   +1.80 1 1 1 1 1     0    0 14.60 -33.26 ZNESW 9.9 13.2 171.8 15.4 17.7 -23.5 17.6 -22.8 17.4 -22.1 17.6 -22.9
2025-11-17T20:54:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:54:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:54:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.787549
2025-11-17T20:54:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:54:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:54:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:54:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:54:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:54:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:54:27', tmtdew=17.55, humidity=30.14, cloud=0.0, wind=12.99, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:54:27', seeing=0.95, atlas_timestamp='2025-11-17T18:54:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:50:00')
2025-11-17T20:54:39.825 [DEBUG] [Thread-61129] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:54:39.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:54:39.922 [DEBUG] [Thread-61133] [transport.py] [_log()] starting thread (client mode): 0xd0787430
2025-11-17T20:54:39.922 [DEBUG] [Thread-61133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:54:39.937 [DEBUG] [Thread-61133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:54:39.937 [INFO] [Thread-61133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:54:39.944 [DEBUG] [Thread-61133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:54:39.944 [DEBUG] [Thread-61133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:54:39.944 [DEBUG] [Thread-61133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:54:39.944 [DEBUG] [Thread-61133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] client lang: <none>
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] server lang: <none>
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] kex follows: False
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] Compression: none
2025-11-17T20:54:39.945 [DEBUG] [Thread-61133] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:54:40.004 [DEBUG] [Thread-61133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:54:40.004 [DEBUG] [Thread-61133] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:54:40.005 [DEBUG] [Thread-61133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:54:40.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:54:40.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:54:40.060 [DEBUG] [Thread-61133] [transport.py] [_log()] userauth is OK
2025-11-17T20:54:40.060 [DEBUG] [Thread-61133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:54:40.061 [DEBUG] [Thread-61133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:54:40.061 [DEBUG] [Thread-61133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:54:40.061 [DEBUG] [Thread-61133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:54:40.079 [INFO] [Thread-61133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:54:40.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:54:40.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:54:40.903 [DEBUG] [Thread-61133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:54:40.904 [DEBUG] [Thread-61133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:54:40.951 [DEBUG] [Thread-61133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:54:40.952 [DEBUG] [Thread-61133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:54:40.960 [DEBUG] [Thread-61133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:54:40.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:54:40.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:54:40.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:54:40.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:54:40.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:54:40.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:54:40.995 [DEBUG] [Thread-61133] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:54:41.767 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:42.779 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:42.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:49.705 [DEBUG] [Thread-61135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:56.173 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:54:59.280 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:55:04.742 [DEBUG] [Thread-61136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:55:06.037 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:55:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:55:11.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:55:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:55:11.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 54, 59), 17.51, 30.59, 0.0, 15.02, 17.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:55:11.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:54:59
2025-11-17T20:55:11.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:55:11.956 [DEBUG] [Thread-61137] [transport.py] [_log()] starting thread (client mode): 0xd3150a00
2025-11-17T20:55:11.956 [DEBUG] [Thread-61137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:55:11.975 [DEBUG] [Thread-61137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:55:11.976 [INFO] [Thread-61137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:55:11.979 [DEBUG] [Thread-61137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:55:11.979 [DEBUG] [Thread-61137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:55:11.979 [DEBUG] [Thread-61137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:55:11.979 [DEBUG] [Thread-61137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:55:11.979 [DEBUG] [Thread-61137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:55:11.979 [DEBUG] [Thread-61137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:55:11.979 [DEBUG] [Thread-61137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] client lang: <none>
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] server lang: <none>
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] kex follows: False
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] Compression: none
2025-11-17T20:55:11.980 [DEBUG] [Thread-61137] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:55:11.997 [DEBUG] [Thread-61137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:55:11.998 [DEBUG] [Thread-61137] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:55:11.998 [DEBUG] [Thread-61137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:55:11.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:55:11.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:55:12.000 [DEBUG] [Thread-61137] [transport.py] [_log()] userauth is OK
2025-11-17T20:55:12.000 [DEBUG] [Thread-61137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:55:12.001 [DEBUG] [Thread-61137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:55:12.001 [DEBUG] [Thread-61137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:55:12.001 [DEBUG] [Thread-61137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:55:12.021 [INFO] [Thread-61137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:55:12.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:55:12.664 [DEBUG] [Thread-61137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:55:12.664 [DEBUG] [Thread-61137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:55:12.664 [DEBUG] [Thread-61137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:55:12.704 [DEBUG] [Thread-61137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:55:12.704 [DEBUG] [Thread-61137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:55:12.707 [DEBUG] [Thread-61137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:55:12.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:55:12.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:55:12.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:55:12.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:55:12.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:55:12.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:55:12.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:55:12.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.787896 -999.00  +17.20   8.61     35   +1.80 1 1 1 1 1     0    0 14.77 -29.93 ZNESW 10.3 8.6 178.6 14.5 17.7 -23.5 17.6 -22.9 17.3 -22.2 17.6 -23.1
2025-11-17T20:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.787896
2025-11-17T20:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:54:59', tmtdew=17.51, humidity=30.59, cloud=0.0, wind=15.02, temperature=17.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:54:59', seeing=0.94, atlas_timestamp='2025-11-17T18:54:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:53:00')
2025-11-17T20:55:12.725 [DEBUG] [Thread-61137] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:55:12.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:55:12.822 [DEBUG] [Thread-61140] [transport.py] [_log()] starting thread (client mode): 0xd07031f0
2025-11-17T20:55:12.823 [DEBUG] [Thread-61140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:55:12.838 [DEBUG] [Thread-61140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:55:12.838 [INFO] [Thread-61140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:55:12.846 [DEBUG] [Thread-61140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] client lang: <none>
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] server lang: <none>
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] kex follows: False
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:55:12.847 [DEBUG] [Thread-61140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:55:12.848 [DEBUG] [Thread-61140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:55:12.848 [DEBUG] [Thread-61140] [transport.py] [_log()] Compression: none
2025-11-17T20:55:12.848 [DEBUG] [Thread-61140] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:55:12.904 [DEBUG] [Thread-61140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:55:12.904 [DEBUG] [Thread-61140] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:55:12.905 [DEBUG] [Thread-61140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:55:12.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:55:12.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:55:12.960 [DEBUG] [Thread-61140] [transport.py] [_log()] userauth is OK
2025-11-17T20:55:12.961 [DEBUG] [Thread-61140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:55:12.961 [DEBUG] [Thread-61140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:55:12.961 [DEBUG] [Thread-61140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:55:12.961 [DEBUG] [Thread-61140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:55:12.983 [INFO] [Thread-61140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:55:12.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:55:12.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:55:13.822 [DEBUG] [Thread-61140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:55:13.822 [DEBUG] [Thread-61140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:55:13.870 [DEBUG] [Thread-61140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:55:13.871 [DEBUG] [Thread-61140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:55:13.879 [DEBUG] [Thread-61140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:55:13.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:55:13.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:55:13.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:55:13.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:55:13.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:55:13.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:55:13.914 [DEBUG] [Thread-61140] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:55:19.768 [DEBUG] [Thread-61142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:55:34.815 [DEBUG] [Thread-61143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:55:39.777 [DEBUG] [Thread-61144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:55:42.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:55:42.984 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:55:43.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:55:43.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:55:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:55:44.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 55, 31), 17.45, 30.72, 0.0, 16.87, 17.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:55:44.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:55:31
2025-11-17T20:55:44.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:55:44.892 [DEBUG] [Thread-61145] [transport.py] [_log()] starting thread (client mode): 0xd3150220
2025-11-17T20:55:44.892 [DEBUG] [Thread-61145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:55:44.911 [DEBUG] [Thread-61145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:55:44.912 [INFO] [Thread-61145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:55:44.912 [DEBUG] [Thread-61145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] client lang: <none>
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] server lang: <none>
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] kex follows: False
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] Compression: none
2025-11-17T20:55:44.913 [DEBUG] [Thread-61145] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:55:44.920 [DEBUG] [Thread-61145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:55:44.920 [DEBUG] [Thread-61145] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:55:44.920 [DEBUG] [Thread-61145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:55:44.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:55:44.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:55:44.921 [DEBUG] [Thread-61145] [transport.py] [_log()] userauth is OK
2025-11-17T20:55:44.921 [DEBUG] [Thread-61145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:55:44.921 [DEBUG] [Thread-61145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:55:44.921 [DEBUG] [Thread-61145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:55:44.921 [DEBUG] [Thread-61145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:55:44.930 [INFO] [Thread-61145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:55:44.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:55:45.535 [DEBUG] [Thread-61145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:55:45.535 [DEBUG] [Thread-61145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:55:45.535 [DEBUG] [Thread-61145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:55:45.576 [DEBUG] [Thread-61145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:55:45.576 [DEBUG] [Thread-61145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:55:45.578 [DEBUG] [Thread-61145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:55:45.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:55:45.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:55:45.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:55:45.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:55:45.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:55:45.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:55:45.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.788590 -999.00  +17.10   8.47     35   +1.80 1 1 1 1 1     0    0 14.73 -27.84 ZNESW 10.1 8.5 184.6 13.3 17.6 -23.6 17.6 -22.9 17.3 -22.1 17.6 -23.0
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.788590
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:55:31', tmtdew=17.45, humidity=30.72, cloud=0.0, wind=16.87, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:55:31', seeing=1.02, atlas_timestamp='2025-11-17T18:55:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:53:00')
2025-11-17T20:55:45.597 [DEBUG] [Thread-61145] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:55:45.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:55:45.683 [DEBUG] [Thread-61148] [transport.py] [_log()] starting thread (client mode): 0xd31ee980
2025-11-17T20:55:45.683 [DEBUG] [Thread-61148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:55:45.698 [DEBUG] [Thread-61148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:55:45.698 [INFO] [Thread-61148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:55:45.706 [DEBUG] [Thread-61148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:55:45.706 [DEBUG] [Thread-61148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:55:45.706 [DEBUG] [Thread-61148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:55:45.706 [DEBUG] [Thread-61148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:55:45.706 [DEBUG] [Thread-61148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:55:45.706 [DEBUG] [Thread-61148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] client lang: <none>
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] server lang: <none>
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] kex follows: False
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] Compression: none
2025-11-17T20:55:45.707 [DEBUG] [Thread-61148] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:55:45.764 [DEBUG] [Thread-61148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:55:45.764 [DEBUG] [Thread-61148] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:55:45.764 [DEBUG] [Thread-61148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:55:45.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:55:45.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:55:45.830 [DEBUG] [Thread-61148] [transport.py] [_log()] userauth is OK
2025-11-17T20:55:45.830 [DEBUG] [Thread-61148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:55:45.830 [DEBUG] [Thread-61148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:55:45.830 [DEBUG] [Thread-61148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:55:45.830 [DEBUG] [Thread-61148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:55:45.844 [INFO] [Thread-61148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:55:45.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:55:45.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:55:46.708 [DEBUG] [Thread-61148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:55:46.708 [DEBUG] [Thread-61148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:55:46.756 [DEBUG] [Thread-61148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:55:46.756 [DEBUG] [Thread-61148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:55:46.764 [DEBUG] [Thread-61148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:55:46.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:55:46.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:55: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') -> 00000000
2025-11-17T20:55:46.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:55:46.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:55:46.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:55:46.799 [DEBUG] [Thread-61148] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:55:49.849 [DEBUG] [Thread-61150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:04.897 [DEBUG] [Thread-61151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:16.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:56:16.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:56:16.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:56:16.864 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 56, 3), 17.44, 30.77, 0.0, 16.73, 17.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:56:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:56:03
2025-11-17T20:56:17.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:56:17.762 [DEBUG] [Thread-61152] [transport.py] [_log()] starting thread (client mode): 0xd31511b0
2025-11-17T20:56:17.762 [DEBUG] [Thread-61152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:56:17.782 [DEBUG] [Thread-61152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:56:17.782 [INFO] [Thread-61152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] client lang: <none>
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] server lang: <none>
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] kex follows: False
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] Compression: none
2025-11-17T20:56:17.786 [DEBUG] [Thread-61152] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:56:17.803 [DEBUG] [Thread-61152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:56:17.803 [DEBUG] [Thread-61152] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:56:17.804 [DEBUG] [Thread-61152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:56:17.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:56:17.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:56:17.806 [DEBUG] [Thread-61152] [transport.py] [_log()] userauth is OK
2025-11-17T20:56:17.806 [DEBUG] [Thread-61152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:56:17.806 [DEBUG] [Thread-61152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:56:17.806 [DEBUG] [Thread-61152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:56:17.806 [DEBUG] [Thread-61152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:56:17.831 [INFO] [Thread-61152] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:56:17.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:56:18.446 [DEBUG] [Thread-61152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:56:18.447 [DEBUG] [Thread-61152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:56:18.447 [DEBUG] [Thread-61152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:56:18.488 [DEBUG] [Thread-61152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:56:18.488 [DEBUG] [Thread-61152] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:56:18.490 [DEBUG] [Thread-61152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:56:18.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:56:18.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:56:18.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:56:18.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:56:18.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:56:18.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:56:18.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:56:18.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:56:18.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:56:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.788590 -999.00  +17.10   8.47     35   +1.80 1 1 1 1 1     0    0 14.73 -27.84 ZNESW 10.1 8.5 184.6 13.3 17.6 -23.6 17.6 -22.9 17.3 -22.1 17.6 -23.0
2025-11-17T20:56:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:56:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:56:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.788590
2025-11-17T20:56:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:56:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:56:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:56:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:56:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:56:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:56:03', tmtdew=17.44, humidity=30.77, cloud=0.0, wind=16.73, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:56:03', seeing=0.99, atlas_timestamp='2025-11-17T18:55:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:53:00')
2025-11-17T20:56:18.514 [DEBUG] [Thread-61152] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:56:18.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:56:18.610 [DEBUG] [Thread-61155] [transport.py] [_log()] starting thread (client mode): 0xd3153bb0
2025-11-17T20:56:18.611 [DEBUG] [Thread-61155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:56:18.625 [DEBUG] [Thread-61155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:56:18.625 [INFO] [Thread-61155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] client lang: <none>
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] server lang: <none>
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] kex follows: False
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:56:18.633 [DEBUG] [Thread-61155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:56:18.634 [DEBUG] [Thread-61155] [transport.py] [_log()] Compression: none
2025-11-17T20:56:18.634 [DEBUG] [Thread-61155] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:56:18.691 [DEBUG] [Thread-61155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:56:18.692 [DEBUG] [Thread-61155] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:56:18.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:56:18.693 [DEBUG] [Thread-61155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:56:18.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:56:18.748 [DEBUG] [Thread-61155] [transport.py] [_log()] userauth is OK
2025-11-17T20:56:18.748 [DEBUG] [Thread-61155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:56:18.748 [DEBUG] [Thread-61155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:56:18.748 [DEBUG] [Thread-61155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:56:18.748 [DEBUG] [Thread-61155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:56:18.767 [INFO] [Thread-61155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:56:18.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:56:18.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:56:19.615 [DEBUG] [Thread-61155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:56:19.615 [DEBUG] [Thread-61155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:56:19.663 [DEBUG] [Thread-61155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:56:19.663 [DEBUG] [Thread-61155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:56:19.671 [DEBUG] [Thread-61155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:56:19.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:56:19.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:56:19.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:56:19.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:56:19.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:56:19.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:56:19.703 [DEBUG] [Thread-61155] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:56:19.922 [DEBUG] [Thread-61157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:20.136 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:25.308 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:31.017 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:34.950 [DEBUG] [Thread-61158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:39.865 [DEBUG] [Thread-61159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:43.187 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:43.188 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:49.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:56:49.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:56:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:56:49.978 [DEBUG] [Thread-61160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:50.104 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:56:50.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 56, 35), 17.45, 30.24, 0.0, 14.59, 17.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:56:50.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:56:35
2025-11-17T20:56:50.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:56:50.671 [DEBUG] [Thread-61161] [transport.py] [_log()] starting thread (client mode): 0xd3137e50
2025-11-17T20:56:50.671 [DEBUG] [Thread-61161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:56:50.693 [DEBUG] [Thread-61161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:56:50.693 [INFO] [Thread-61161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:56:50.696 [DEBUG] [Thread-61161] [transport.py] [_log()] client lang: <none>
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] server lang: <none>
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] kex follows: False
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] Compression: none
2025-11-17T20:56:50.697 [DEBUG] [Thread-61161] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:56:50.714 [DEBUG] [Thread-61161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:56:50.715 [DEBUG] [Thread-61161] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:56:50.715 [DEBUG] [Thread-61161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:56:50.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:56:50.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:56:50.717 [DEBUG] [Thread-61161] [transport.py] [_log()] userauth is OK
2025-11-17T20:56:50.717 [DEBUG] [Thread-61161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:56:50.717 [DEBUG] [Thread-61161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:56:50.717 [DEBUG] [Thread-61161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:56:50.718 [DEBUG] [Thread-61161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:56:50.742 [INFO] [Thread-61161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:56:50.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:56:51.360 [DEBUG] [Thread-61161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:56:51.361 [DEBUG] [Thread-61161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:56:51.361 [DEBUG] [Thread-61161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:56:51.401 [DEBUG] [Thread-61161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:56:51.402 [DEBUG] [Thread-61161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:56:51.405 [DEBUG] [Thread-61161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:56:51.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:56:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:56:51.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:56:51.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:56:51.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:56:51.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:56:51.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:56:51.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:56:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:56:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.788938 -999.00  +17.10   9.96     35   +1.80 1 1 1 1 1     0    0 14.61 -30.53 ZNESW 8.8 10.0 182.6 11.6 17.6 -23.5 17.6 -23.0 17.4 -22.1 17.6 -23.0
2025-11-17T20:56:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:56:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:56:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.788938
2025-11-17T20:56:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:56:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:56:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:56:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:56:51.428 [DEBUG] [Thread-61161] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:56:51.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:56:51.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:56:35', tmtdew=17.45, humidity=30.24, cloud=0.0, wind=14.59, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:56:35', seeing=0.98, atlas_timestamp='2025-11-17T18:56:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:53:00')
2025-11-17T20:56:51.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:56:51.525 [DEBUG] [Thread-61164] [transport.py] [_log()] starting thread (client mode): 0xd0786cb0
2025-11-17T20:56:51.525 [DEBUG] [Thread-61164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:56:51.541 [DEBUG] [Thread-61164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:56:51.541 [INFO] [Thread-61164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] client lang: <none>
2025-11-17T20:56:51.549 [DEBUG] [Thread-61164] [transport.py] [_log()] server lang: <none>
2025-11-17T20:56:51.550 [DEBUG] [Thread-61164] [transport.py] [_log()] kex follows: False
2025-11-17T20:56:51.550 [DEBUG] [Thread-61164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:56:51.550 [DEBUG] [Thread-61164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:56:51.550 [DEBUG] [Thread-61164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:56:51.550 [DEBUG] [Thread-61164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:56:51.550 [DEBUG] [Thread-61164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:56:51.550 [DEBUG] [Thread-61164] [transport.py] [_log()] Compression: none
2025-11-17T20:56:51.550 [DEBUG] [Thread-61164] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:56:51.609 [DEBUG] [Thread-61164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:56:51.610 [DEBUG] [Thread-61164] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:56:51.610 [DEBUG] [Thread-61164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:56:51.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:56:51.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:56:51.664 [DEBUG] [Thread-61164] [transport.py] [_log()] userauth is OK
2025-11-17T20:56:51.665 [DEBUG] [Thread-61164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:56:51.665 [DEBUG] [Thread-61164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:56:51.665 [DEBUG] [Thread-61164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:56:51.665 [DEBUG] [Thread-61164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:56:51.684 [INFO] [Thread-61164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:56:51.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:56:51.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:56:52.504 [DEBUG] [Thread-61164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:56:52.504 [DEBUG] [Thread-61164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:56:52.551 [DEBUG] [Thread-61164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:56:52.551 [DEBUG] [Thread-61164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:56:52.561 [DEBUG] [Thread-61164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:56:52.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:56:52.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:56:52.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:56:52.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:56:52.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:56:52.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:56:52.596 [DEBUG] [Thread-61164] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:56:54.876 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:05.003 [DEBUG] [Thread-61166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:14.871 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:19.673 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:20.042 [DEBUG] [Thread-61167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:22.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:57:22.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:57:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:57:23.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 57, 7), 17.52, 30.11, 0.0, 14.35, 17.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:57:23.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:57:07
2025-11-17T20:57:23.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:57:23.571 [DEBUG] [Thread-61168] [transport.py] [_log()] starting thread (client mode): 0xd31eee30
2025-11-17T20:57:23.571 [DEBUG] [Thread-61168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:57:23.591 [DEBUG] [Thread-61168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:57:23.591 [INFO] [Thread-61168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:57:23.594 [DEBUG] [Thread-61168] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:57:23.594 [DEBUG] [Thread-61168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] client lang: <none>
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] server lang: <none>
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] kex follows: False
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:57:23.595 [DEBUG] [Thread-61168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:57:23.596 [DEBUG] [Thread-61168] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:57:23.596 [DEBUG] [Thread-61168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:57:23.596 [DEBUG] [Thread-61168] [transport.py] [_log()] Compression: none
2025-11-17T20:57:23.596 [DEBUG] [Thread-61168] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:57:23.614 [DEBUG] [Thread-61168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:57:23.614 [DEBUG] [Thread-61168] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:57:23.615 [DEBUG] [Thread-61168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:57:23.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:57:23.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:57:23.617 [DEBUG] [Thread-61168] [transport.py] [_log()] userauth is OK
2025-11-17T20:57:23.617 [DEBUG] [Thread-61168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:57:23.617 [DEBUG] [Thread-61168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:57:23.617 [DEBUG] [Thread-61168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:57:23.617 [DEBUG] [Thread-61168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:57:23.638 [INFO] [Thread-61168] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:57:23.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:57:24.278 [DEBUG] [Thread-61168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:57:24.278 [DEBUG] [Thread-61168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:57:24.278 [DEBUG] [Thread-61168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:57:24.319 [DEBUG] [Thread-61168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:57:24.319 [DEBUG] [Thread-61168] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:57:24.321 [DEBUG] [Thread-61168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:57:24.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:57:24.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:57:24.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:57:24.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:57:24.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:57:24.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:57:24.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:57:24.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:57:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:57:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.789285 -999.00  +17.10   9.78     35   +1.80 1 1 1 1 1     0    0 15.05 -31.03 ZNESW 9.2 9.8 180.6 12.6 17.6 -23.5 17.5 -22.7 17.3 -22.1 17.6 -23.0
2025-11-17T20:57:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:57:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:57:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.789285
2025-11-17T20:57:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:57:24.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:57:24.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:57:24.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:57:24.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:57:24.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:57:07', tmtdew=17.52, humidity=30.11, cloud=0.0, wind=14.35, temperature=17.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:57:07', seeing=0.98, atlas_timestamp='2025-11-17T18:56:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.09675000000000011, 0.12424999999999997, 0.14475000000000016, 0.12549999999999883, 0.15249999999999986, 0.1642500000000009, 0.07249999999999979, 0.1382500000000011, 0.1385000000000005, 0.1850000000000005, 0.15724999999999945, 0.2469999999999999, 0.254999999999999, 0.19425000000000026, 0.0519999999999996, 0.07349999999999923, 0.1147500000000008, 0.18099999999999916, 0.26099999999999923, 0.23474999999999824, 0.23349999999999937, 0.0727499999999992, 0.09224999999999994, 0.07174999999999976, 0.09499999999999886, 0.24249999999999972, 0.3377499999999998, 0.34750000000000014, 0.3250000000000002, 0.16300000000000026, 0.1565000000000012, 0.12650000000000006, 0.1587499999999995], zp_timestamp='2025-11-17T18:53:00')
2025-11-17T20:57:24.346 [DEBUG] [Thread-61168] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:57:24.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:57:24.436 [DEBUG] [Thread-61171] [transport.py] [_log()] starting thread (client mode): 0xd31ed9c0
2025-11-17T20:57:24.436 [DEBUG] [Thread-61171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:57:24.450 [DEBUG] [Thread-61171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:57:24.450 [INFO] [Thread-61171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:57:24.460 [DEBUG] [Thread-61171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] client lang: <none>
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] server lang: <none>
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] kex follows: False
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:57:24.461 [DEBUG] [Thread-61171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:57:24.462 [DEBUG] [Thread-61171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:57:24.462 [DEBUG] [Thread-61171] [transport.py] [_log()] Compression: none
2025-11-17T20:57:24.462 [DEBUG] [Thread-61171] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:57:24.516 [DEBUG] [Thread-61171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:57:24.516 [DEBUG] [Thread-61171] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:57:24.517 [DEBUG] [Thread-61171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:57:24.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:57:24.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:57:24.578 [DEBUG] [Thread-61171] [transport.py] [_log()] userauth is OK
2025-11-17T20:57:24.578 [DEBUG] [Thread-61171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:57:24.578 [DEBUG] [Thread-61171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:57:24.578 [DEBUG] [Thread-61171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:57:24.578 [DEBUG] [Thread-61171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:57:24.597 [INFO] [Thread-61171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:57:24.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:57:24.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:57:25.483 [DEBUG] [Thread-61171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:57:25.483 [DEBUG] [Thread-61171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:57:25.531 [DEBUG] [Thread-61171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:57:25.531 [DEBUG] [Thread-61171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:57:25.539 [DEBUG] [Thread-61171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:57:25.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:57:25.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:57:25.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:57:25.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:57:25.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:57:25.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:57:25.573 [DEBUG] [Thread-61171] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:57:26.971 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:31.600 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:35.072 [DEBUG] [Thread-61173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:39.945 [DEBUG] [Thread-61174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:43.391 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:43.392 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:50.111 [DEBUG] [Thread-61175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:57:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:57:55.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:57:55.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:57:56.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 57, 39), 17.53, 30.58, 0.0, 16.45, 17.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:57:56.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:57:39
2025-11-17T20:57:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:57:56.487 [DEBUG] [Thread-61176] [transport.py] [_log()] starting thread (client mode): 0xd31cf340
2025-11-17T20:57:56.487 [DEBUG] [Thread-61176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:57:56.507 [DEBUG] [Thread-61176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:57:56.507 [INFO] [Thread-61176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] client lang: <none>
2025-11-17T20:57:56.510 [DEBUG] [Thread-61176] [transport.py] [_log()] server lang: <none>
2025-11-17T20:57:56.511 [DEBUG] [Thread-61176] [transport.py] [_log()] kex follows: False
2025-11-17T20:57:56.511 [DEBUG] [Thread-61176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:57:56.511 [DEBUG] [Thread-61176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:57:56.511 [DEBUG] [Thread-61176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:57:56.511 [DEBUG] [Thread-61176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:57:56.511 [DEBUG] [Thread-61176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:57:56.511 [DEBUG] [Thread-61176] [transport.py] [_log()] Compression: none
2025-11-17T20:57:56.511 [DEBUG] [Thread-61176] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:57:56.523 [DEBUG] [Thread-61176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:57:56.524 [DEBUG] [Thread-61176] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:57:56.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:57:56.525 [DEBUG] [Thread-61176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:57:56.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:57:56.527 [DEBUG] [Thread-61176] [transport.py] [_log()] userauth is OK
2025-11-17T20:57:56.527 [DEBUG] [Thread-61176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:57:56.527 [DEBUG] [Thread-61176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:57:56.527 [DEBUG] [Thread-61176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:57:56.527 [DEBUG] [Thread-61176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:57:56.551 [INFO] [Thread-61176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:57:56.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:57:57.225 [DEBUG] [Thread-61176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:57:57.225 [DEBUG] [Thread-61176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:57:57.225 [DEBUG] [Thread-61176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:57:57.266 [DEBUG] [Thread-61176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:57:57.267 [DEBUG] [Thread-61176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:57:57.270 [DEBUG] [Thread-61176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:57:57.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:57:57.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:57:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:57:57.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:57:57.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:57:57.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:57:57.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:57:57.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:57:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:57:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.789632 -999.00  +17.10  10.63     35   +1.80 1 1 1 1 1     0    0 14.69 -31.45 ZNESW 10.9 10.6 174.6 16.2 17.6 -23.4 17.5 -22.7 17.3 -22.2 17.5 -23.1
2025-11-17T20:57:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:57:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:57:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.789632
2025-11-17T20:57:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:57:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:57:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:57:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:57:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:57:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:57:39', tmtdew=17.53, humidity=30.58, cloud=0.0, wind=16.45, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:57:39', seeing=1.22, atlas_timestamp='2025-11-17T18:57:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.10024999999999906, 0.13975000000000115, 0.15024999999999977, 0.11100000000000065, 0.1385000000000005, 0.15825000000000067, 0.02999999999999936, 0.14425000000000132, 0.1064999999999987, 0.1880000000000006, 0.18674999999999997, 0.1739999999999995, 0.24249999999999972, 0.19175000000000075, 0.010999999999999233, 0.07599999999999874, 0.10524999999999984, 0.176499999999999, 0.23499999999999943, 0.1972499999999986, 0.25099999999999767, 0.13324999999999854, -0.0067499999999984794, 0.038750000000000284, 0.08099999999999952, 0.25450000000000017, 0.30774999999999864, 0.3695000000000004, 0.18299999999999983, 0.04800000000000182, 0.24200000000000088, 0.11400000000000077, 0.1297499999999996], zp_timestamp='2025-11-17T18:56:00')
2025-11-17T20:57:57.295 [DEBUG] [Thread-61176] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:57:57.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:57:57.397 [DEBUG] [Thread-61179] [transport.py] [_log()] starting thread (client mode): 0xd3150f70
2025-11-17T20:57:57.397 [DEBUG] [Thread-61179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:57:57.413 [DEBUG] [Thread-61179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:57:57.413 [INFO] [Thread-61179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] client lang: <none>
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] server lang: <none>
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] kex follows: False
2025-11-17T20:57:57.421 [DEBUG] [Thread-61179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:57:57.422 [DEBUG] [Thread-61179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:57:57.422 [DEBUG] [Thread-61179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:57:57.422 [DEBUG] [Thread-61179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:57:57.422 [DEBUG] [Thread-61179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:57:57.422 [DEBUG] [Thread-61179] [transport.py] [_log()] Compression: none
2025-11-17T20:57:57.422 [DEBUG] [Thread-61179] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:57:57.481 [DEBUG] [Thread-61179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:57:57.481 [DEBUG] [Thread-61179] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:57:57.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:57:57.482 [DEBUG] [Thread-61179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:57:57.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:57:57.536 [DEBUG] [Thread-61179] [transport.py] [_log()] userauth is OK
2025-11-17T20:57:57.536 [DEBUG] [Thread-61179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:57:57.537 [DEBUG] [Thread-61179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:57:57.537 [DEBUG] [Thread-61179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:57:57.537 [DEBUG] [Thread-61179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:57:57.557 [INFO] [Thread-61179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:57:57.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:57:57.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:57:58.418 [DEBUG] [Thread-61179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:57:58.427 [DEBUG] [Thread-61179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:57:58.469 [DEBUG] [Thread-61179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:57:58.469 [DEBUG] [Thread-61179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:57:58.478 [DEBUG] [Thread-61179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:57:58.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:57:58.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:57:58.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:57:58.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:57:58.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:57:58.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:57:58.527 [DEBUG] [Thread-61179] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:58:05.141 [DEBUG] [Thread-61181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:58:20.190 [DEBUG] [Thread-61182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:58:28.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:58:28.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:58:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:58:29.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 58, 11), 17.48, 30.69, 0.0, 14.5, 17.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:58:29.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:58:11
2025-11-17T20:58:29.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:58:29.463 [DEBUG] [Thread-61183] [transport.py] [_log()] starting thread (client mode): 0xd31b3f40
2025-11-17T20:58:29.463 [DEBUG] [Thread-61183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:58:29.483 [DEBUG] [Thread-61183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:58:29.483 [INFO] [Thread-61183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] client lang: <none>
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] server lang: <none>
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] kex follows: False
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:58:29.486 [DEBUG] [Thread-61183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:58:29.487 [DEBUG] [Thread-61183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:58:29.487 [DEBUG] [Thread-61183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:58:29.487 [DEBUG] [Thread-61183] [transport.py] [_log()] Compression: none
2025-11-17T20:58:29.487 [DEBUG] [Thread-61183] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:58:29.503 [DEBUG] [Thread-61183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:58:29.503 [DEBUG] [Thread-61183] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:58:29.504 [DEBUG] [Thread-61183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:58:29.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:58:29.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:58:29.506 [DEBUG] [Thread-61183] [transport.py] [_log()] userauth is OK
2025-11-17T20:58:29.506 [DEBUG] [Thread-61183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:58:29.506 [DEBUG] [Thread-61183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:58:29.506 [DEBUG] [Thread-61183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:58:29.506 [DEBUG] [Thread-61183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:58:29.532 [INFO] [Thread-61183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:58:29.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:58:30.157 [DEBUG] [Thread-61183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:58:30.157 [DEBUG] [Thread-61183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:58:30.158 [DEBUG] [Thread-61183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:58:30.198 [DEBUG] [Thread-61183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:58:30.198 [DEBUG] [Thread-61183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:58:30.201 [DEBUG] [Thread-61183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:58:30.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:58:30.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:58:30.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:58:30.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:58:30.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:58:30.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:58:30.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:58:30.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:58:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:58:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.789979 -999.00  +17.10   7.71     35   +1.80 1 1 1 1 1     0    0 14.53 -29.43 ZNESW 12.9 7.7 163.3 12.1 17.6 -23.4 17.5 -22.6 17.3 -22.0 17.5 -22.9
2025-11-17T20:58:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:58:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:58:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.789979
2025-11-17T20:58:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:58:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:58:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:58:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:58:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:58:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:58:11', tmtdew=17.48, humidity=30.69, cloud=0.0, wind=14.5, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:58:12', seeing=1.32, atlas_timestamp='2025-11-17T18:57:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.10024999999999906, 0.13975000000000115, 0.15024999999999977, 0.11100000000000065, 0.1385000000000005, 0.15825000000000067, 0.02999999999999936, 0.14425000000000132, 0.1064999999999987, 0.1880000000000006, 0.18674999999999997, 0.1739999999999995, 0.24249999999999972, 0.19175000000000075, 0.010999999999999233, 0.07599999999999874, 0.10524999999999984, 0.176499999999999, 0.23499999999999943, 0.1972499999999986, 0.25099999999999767, 0.13324999999999854, -0.0067499999999984794, 0.038750000000000284, 0.08099999999999952, 0.25450000000000017, 0.30774999999999864, 0.3695000000000004, 0.18299999999999983, 0.04800000000000182, 0.24200000000000088, 0.11400000000000077, 0.1297499999999996], zp_timestamp='2025-11-17T18:56:00')
2025-11-17T20:58:30.227 [DEBUG] [Thread-61183] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:58:30.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:58:30.324 [DEBUG] [Thread-61186] [transport.py] [_log()] starting thread (client mode): 0xd3151ea0
2025-11-17T20:58:30.324 [DEBUG] [Thread-61186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:58:30.339 [DEBUG] [Thread-61186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:58:30.339 [INFO] [Thread-61186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:58:30.347 [DEBUG] [Thread-61186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:58:30.347 [DEBUG] [Thread-61186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:58:30.347 [DEBUG] [Thread-61186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:58:30.347 [DEBUG] [Thread-61186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:58:30.347 [DEBUG] [Thread-61186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:58:30.347 [DEBUG] [Thread-61186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] client lang: <none>
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] server lang: <none>
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] kex follows: False
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] Compression: none
2025-11-17T20:58:30.348 [DEBUG] [Thread-61186] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:58:30.404 [DEBUG] [Thread-61186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:58:30.404 [DEBUG] [Thread-61186] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:58:30.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:58:30.405 [DEBUG] [Thread-61186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:58:30.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:58:30.460 [DEBUG] [Thread-61186] [transport.py] [_log()] userauth is OK
2025-11-17T20:58:30.460 [DEBUG] [Thread-61186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:58:30.469 [DEBUG] [Thread-61186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:58:30.469 [DEBUG] [Thread-61186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:58:30.470 [DEBUG] [Thread-61186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:58:30.489 [INFO] [Thread-61186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:58:30.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:58:30.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:58:31.363 [DEBUG] [Thread-61186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:58:31.363 [DEBUG] [Thread-61186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:58:31.411 [DEBUG] [Thread-61186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:58:31.411 [DEBUG] [Thread-61186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:58:31.420 [DEBUG] [Thread-61186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:58:31.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:58: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')
2025-11-17T20:58:31.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:58:31.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:58:31.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:58:31.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:58:31.455 [DEBUG] [Thread-61186] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:58:35.216 [DEBUG] [Thread-61188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:58:39.310 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:58:40.011 [DEBUG] [Thread-61189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:58:43.418 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:58:43.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:58:43.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:58:50.259 [DEBUG] [Thread-61190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:59:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:59:01.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:59:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:59:02.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 58, 43), 17.5, 30.64, 0.0, 15.6, 17.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:59:02.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:58:43
2025-11-17T20:59:02.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:59:02.400 [DEBUG] [Thread-61191] [transport.py] [_log()] starting thread (client mode): 0xd0787430
2025-11-17T20:59:02.400 [DEBUG] [Thread-61191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:59:02.421 [DEBUG] [Thread-61191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:59:02.421 [INFO] [Thread-61191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] client lang: <none>
2025-11-17T20:59:02.424 [DEBUG] [Thread-61191] [transport.py] [_log()] server lang: <none>
2025-11-17T20:59:02.425 [DEBUG] [Thread-61191] [transport.py] [_log()] kex follows: False
2025-11-17T20:59:02.425 [DEBUG] [Thread-61191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:59:02.425 [DEBUG] [Thread-61191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:59:02.425 [DEBUG] [Thread-61191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:59:02.425 [DEBUG] [Thread-61191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:59:02.425 [DEBUG] [Thread-61191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:59:02.425 [DEBUG] [Thread-61191] [transport.py] [_log()] Compression: none
2025-11-17T20:59:02.425 [DEBUG] [Thread-61191] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:59:02.443 [DEBUG] [Thread-61191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:59:02.444 [DEBUG] [Thread-61191] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:59:02.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:59:02.444 [DEBUG] [Thread-61191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:59:02.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:59:02.447 [DEBUG] [Thread-61191] [transport.py] [_log()] userauth is OK
2025-11-17T20:59:02.447 [DEBUG] [Thread-61191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:59:02.447 [DEBUG] [Thread-61191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:59:02.447 [DEBUG] [Thread-61191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:59:02.447 [DEBUG] [Thread-61191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:59:02.462 [INFO] [Thread-61191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:59:02.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:59:03.106 [DEBUG] [Thread-61191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:59:03.106 [DEBUG] [Thread-61191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:59:03.106 [DEBUG] [Thread-61191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:59:03.148 [DEBUG] [Thread-61191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:59:03.148 [DEBUG] [Thread-61191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:59:03.151 [DEBUG] [Thread-61191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:59:03.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:59:03.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:59:03.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:59:03.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:59:03.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:59:03.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:59:03.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:59:03.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:59:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:59:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.790327 -999.00  +17.10  10.83     35   +1.80 1 1 1 1 1     0    0 14.36 -29.12 ZNESW 10.2 10.8 181.8 14.9 17.6 -23.4 17.5 -22.7 17.3 -22.2 17.5 -22.9
2025-11-17T20:59:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:59:03.181 [DEBUG] [Thread-61191] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:59:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:59:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.790327
2025-11-17T20:59:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:59:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:59:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:59:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:59:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:59:03.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:58:43', tmtdew=17.5, humidity=30.64, cloud=0.0, wind=15.6, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:58:44', seeing=0.95, atlas_timestamp='2025-11-17T18:58:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.10024999999999906, 0.13975000000000115, 0.15024999999999977, 0.11100000000000065, 0.1385000000000005, 0.15825000000000067, 0.02999999999999936, 0.14425000000000132, 0.1064999999999987, 0.1880000000000006, 0.18674999999999997, 0.1739999999999995, 0.24249999999999972, 0.19175000000000075, 0.010999999999999233, 0.07599999999999874, 0.10524999999999984, 0.176499999999999, 0.23499999999999943, 0.1972499999999986, 0.25099999999999767, 0.13324999999999854, -0.0067499999999984794, 0.038750000000000284, 0.08099999999999952, 0.25450000000000017, 0.30774999999999864, 0.3695000000000004, 0.18299999999999983, 0.04800000000000182, 0.24200000000000088, 0.11400000000000077, 0.1297499999999996], zp_timestamp='2025-11-17T18:56:00')
2025-11-17T20:59:03.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:59:03.281 [DEBUG] [Thread-61194] [transport.py] [_log()] starting thread (client mode): 0xd31ed9c0
2025-11-17T20:59:03.281 [DEBUG] [Thread-61194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:59:03.297 [DEBUG] [Thread-61194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:59:03.297 [INFO] [Thread-61194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:59:03.304 [DEBUG] [Thread-61194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] client lang: <none>
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] server lang: <none>
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] kex follows: False
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] Compression: none
2025-11-17T20:59:03.305 [DEBUG] [Thread-61194] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:59:03.363 [DEBUG] [Thread-61194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:59:03.364 [DEBUG] [Thread-61194] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:59:03.364 [DEBUG] [Thread-61194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:59:03.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:59:03.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:59:03.421 [DEBUG] [Thread-61194] [transport.py] [_log()] userauth is OK
2025-11-17T20:59:03.422 [DEBUG] [Thread-61194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:59:03.422 [DEBUG] [Thread-61194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:59:03.422 [DEBUG] [Thread-61194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:59:03.422 [DEBUG] [Thread-61194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:59:03.442 [INFO] [Thread-61194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:59:03.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:59:03.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:59:04.286 [DEBUG] [Thread-61194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:59:04.287 [DEBUG] [Thread-61194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:59:04.334 [DEBUG] [Thread-61194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:59:04.334 [DEBUG] [Thread-61194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:59:04.344 [DEBUG] [Thread-61194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:59:04.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:59:04.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:59:04.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:59:04.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:59:04.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:59:04.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:59:04.381 [DEBUG] [Thread-61194] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:59:05.293 [DEBUG] [Thread-61196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:59:20.332 [DEBUG] [Thread-61197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:59:34.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T20:59:34.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T20:59:34.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T20:59:35.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 59, 15), 17.52, 30.61, 0.0, 15.85, 17.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T20:59:35.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:59:15
2025-11-17T20:59:35.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T20:59:35.359 [DEBUG] [Thread-61198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:59:35.362 [DEBUG] [Thread-61199] [transport.py] [_log()] starting thread (client mode): 0xd07cc790
2025-11-17T20:59:35.362 [DEBUG] [Thread-61199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:59:35.382 [DEBUG] [Thread-61199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T20:59:35.382 [INFO] [Thread-61199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T20:59:35.385 [DEBUG] [Thread-61199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:59:35.385 [DEBUG] [Thread-61199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T20:59:35.385 [DEBUG] [Thread-61199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] client lang: <none>
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] server lang: <none>
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] kex follows: False
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] Compression: none
2025-11-17T20:59:35.386 [DEBUG] [Thread-61199] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:59:35.401 [DEBUG] [Thread-61199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:59:35.401 [DEBUG] [Thread-61199] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:59:35.401 [DEBUG] [Thread-61199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T20:59:35.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T20:59:35.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:59:35.402 [DEBUG] [Thread-61199] [transport.py] [_log()] userauth is OK
2025-11-17T20:59:35.402 [DEBUG] [Thread-61199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:59:35.402 [DEBUG] [Thread-61199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:59:35.402 [DEBUG] [Thread-61199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T20:59:35.402 [DEBUG] [Thread-61199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:59:35.411 [INFO] [Thread-61199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:59:35.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:59:36.039 [DEBUG] [Thread-61199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:59:36.039 [DEBUG] [Thread-61199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:59:36.039 [DEBUG] [Thread-61199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T20:59:36.080 [DEBUG] [Thread-61199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:59:36.080 [DEBUG] [Thread-61199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:59:36.082 [DEBUG] [Thread-61199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:59:36.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:59:36.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T20:59:36.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T20:59:36.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T20:59:36.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:59:36.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T20:59:36.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:59:36.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:59:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T20:59:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.791021 -999.00  +17.00  10.20     35   +1.80 1 1 1 1 1     0    0 14.85 -30.08 ZNESW 10.8 10.2 186.8 14.9 17.6 -23.5 17.5 -22.7 17.2 -22.0 17.5 -22.7
2025-11-17T20:59:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T20:59:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T20:59:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.791021
2025-11-17T20:59:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T20:59:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T20:59:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T20:59:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T20:59:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T20:59:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:59:15', tmtdew=17.52, humidity=30.61, cloud=0.0, wind=15.85, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:59:16', seeing=0.97, atlas_timestamp='2025-11-17T18:59:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.10024999999999906, 0.13975000000000115, 0.15024999999999977, 0.11100000000000065, 0.1385000000000005, 0.15825000000000067, 0.02999999999999936, 0.14425000000000132, 0.1064999999999987, 0.1880000000000006, 0.18674999999999997, 0.1739999999999995, 0.24249999999999972, 0.19175000000000075, 0.010999999999999233, 0.07599999999999874, 0.10524999999999984, 0.176499999999999, 0.23499999999999943, 0.1972499999999986, 0.25099999999999767, 0.13324999999999854, -0.0067499999999984794, 0.038750000000000284, 0.08099999999999952, 0.25450000000000017, 0.30774999999999864, 0.3695000000000004, 0.18299999999999983, 0.04800000000000182, 0.24200000000000088, 0.11400000000000077, 0.1297499999999996], zp_timestamp='2025-11-17T18:56:00')
2025-11-17T20:59:36.101 [DEBUG] [Thread-61199] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:59:36.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T20:59:36.187 [DEBUG] [Thread-61202] [transport.py] [_log()] starting thread (client mode): 0xd31b0c70
2025-11-17T20:59:36.187 [DEBUG] [Thread-61202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T20:59:36.202 [DEBUG] [Thread-61202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T20:59:36.202 [INFO] [Thread-61202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T20:59:36.209 [DEBUG] [Thread-61202] [transport.py] [_log()] client lang: <none>
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] server lang: <none>
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] kex follows: False
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] Compression: none
2025-11-17T20:59:36.210 [DEBUG] [Thread-61202] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T20:59:36.270 [DEBUG] [Thread-61202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T20:59:36.271 [DEBUG] [Thread-61202] [transport.py] [_log()] Switch to new keys ...
2025-11-17T20:59:36.271 [DEBUG] [Thread-61202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T20:59:36.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T20:59:36.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T20:59:36.328 [DEBUG] [Thread-61202] [transport.py] [_log()] userauth is OK
2025-11-17T20:59:36.328 [DEBUG] [Thread-61202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T20:59:36.328 [DEBUG] [Thread-61202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T20:59:36.328 [DEBUG] [Thread-61202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T20:59:36.328 [DEBUG] [Thread-61202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T20:59:36.342 [INFO] [Thread-61202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T20:59:36.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T20:59:36.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T20:59:37.212 [DEBUG] [Thread-61202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T20:59:37.212 [DEBUG] [Thread-61202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T20:59:37.260 [DEBUG] [Thread-61202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T20:59:37.260 [DEBUG] [Thread-61202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T20:59:37.268 [DEBUG] [Thread-61202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T20:59:37.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T20:59:37.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T20:59:37.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T20:59:37.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T20:59:37.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T20:59:37.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T20:59:37.300 [DEBUG] [Thread-61202] [transport.py] [_log()] EOF in transport thread
2025-11-17T20:59:40.100 [DEBUG] [Thread-61204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:59:43.799 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:59:43.800 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T20:59:50.386 [DEBUG] [Thread-61205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:00:05.435 [DEBUG] [Thread-61206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:00:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:00:07.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:00:07.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:00:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 20, 59, 47), 17.46, 30.63, 0.0, 15.9, 17.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:00:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 20:59:47
2025-11-17T21:00:08.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:00:08.233 [DEBUG] [Thread-61207] [transport.py] [_log()] starting thread (client mode): 0xd31b1a20
2025-11-17T21:00:08.233 [DEBUG] [Thread-61207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:00:08.253 [DEBUG] [Thread-61207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:00:08.253 [INFO] [Thread-61207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:00:08.257 [DEBUG] [Thread-61207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:00:08.257 [DEBUG] [Thread-61207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:00:08.257 [DEBUG] [Thread-61207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:00:08.257 [DEBUG] [Thread-61207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:00:08.257 [DEBUG] [Thread-61207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:00:08.257 [DEBUG] [Thread-61207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:00:08.257 [DEBUG] [Thread-61207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] client lang: <none>
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] server lang: <none>
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] kex follows: False
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] Compression: none
2025-11-17T21:00:08.258 [DEBUG] [Thread-61207] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:00:08.277 [DEBUG] [Thread-61207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:00:08.278 [DEBUG] [Thread-61207] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:00:08.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:00:08.279 [DEBUG] [Thread-61207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:00:08.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:00:08.281 [DEBUG] [Thread-61207] [transport.py] [_log()] userauth is OK
2025-11-17T21:00:08.281 [DEBUG] [Thread-61207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:00:08.282 [DEBUG] [Thread-61207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:00:08.282 [DEBUG] [Thread-61207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:00:08.282 [DEBUG] [Thread-61207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:00:08.296 [INFO] [Thread-61207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:00:08.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:00:15.285 [DEBUG] [Thread-61207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:00:15.285 [DEBUG] [Thread-61207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:00:15.285 [DEBUG] [Thread-61207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:00:15.326 [DEBUG] [Thread-61207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:00:15.326 [DEBUG] [Thread-61207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:00:15.329 [DEBUG] [Thread-61207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:00:15.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:00:15.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:00:15.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:00:15.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:00:15.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:00:15.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:00:15.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.791368 -999.00  +17.10  14.28     36   +1.90 1 1 1 1 1     0    0 14.36 -31.94 ZNESW 12.1 14.3 187.0 19.5 17.5 -23.4 17.5 -22.5 17.2 -22.1 17.5 -23.0
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.791368
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:00:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T20:59:47', tmtdew=17.46, humidity=30.63, cloud=0.0, wind=15.9, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T20:59:48', seeing=1.14, atlas_timestamp='2025-11-17T18:59:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.10024999999999906, 0.13975000000000115, 0.15024999999999977, 0.11100000000000065, 0.1385000000000005, 0.15825000000000067, 0.02999999999999936, 0.14425000000000132, 0.1064999999999987, 0.1880000000000006, 0.18674999999999997, 0.1739999999999995, 0.24249999999999972, 0.19175000000000075, 0.010999999999999233, 0.07599999999999874, 0.10524999999999984, 0.176499999999999, 0.23499999999999943, 0.1972499999999986, 0.25099999999999767, 0.13324999999999854, -0.0067499999999984794, 0.038750000000000284, 0.08099999999999952, 0.25450000000000017, 0.30774999999999864, 0.3695000000000004, 0.18299999999999983, 0.04800000000000182, 0.24200000000000088, 0.11400000000000077, 0.1297499999999996], zp_timestamp='2025-11-17T18:56:00')
2025-11-17T21:00:15.440 [DEBUG] [Thread-61207] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:00:15.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:00:15.526 [DEBUG] [Thread-61210] [transport.py] [_log()] starting thread (client mode): 0xd7bc62c0
2025-11-17T21:00:15.526 [DEBUG] [Thread-61210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:00:15.541 [DEBUG] [Thread-61210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:00:15.541 [INFO] [Thread-61210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] client lang: <none>
2025-11-17T21:00:15.548 [DEBUG] [Thread-61210] [transport.py] [_log()] server lang: <none>
2025-11-17T21:00:15.549 [DEBUG] [Thread-61210] [transport.py] [_log()] kex follows: False
2025-11-17T21:00:15.549 [DEBUG] [Thread-61210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:00:15.549 [DEBUG] [Thread-61210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:00:15.549 [DEBUG] [Thread-61210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:00:15.549 [DEBUG] [Thread-61210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:00:15.549 [DEBUG] [Thread-61210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:00:15.549 [DEBUG] [Thread-61210] [transport.py] [_log()] Compression: none
2025-11-17T21:00:15.549 [DEBUG] [Thread-61210] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:00:15.607 [DEBUG] [Thread-61210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:00:15.607 [DEBUG] [Thread-61210] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:00:15.607 [DEBUG] [Thread-61210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:00:15.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:00:15.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:00:15.664 [DEBUG] [Thread-61210] [transport.py] [_log()] userauth is OK
2025-11-17T21:00:15.664 [DEBUG] [Thread-61210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:00:15.664 [DEBUG] [Thread-61210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:00:15.664 [DEBUG] [Thread-61210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:00:15.664 [DEBUG] [Thread-61210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:00:15.677 [INFO] [Thread-61210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:00:15.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:00:15.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:00:16.505 [DEBUG] [Thread-61210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:00:16.506 [DEBUG] [Thread-61210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:00:16.554 [DEBUG] [Thread-61210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:00:16.554 [DEBUG] [Thread-61210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:00:16.562 [DEBUG] [Thread-61210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:00:16.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:00:16.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:00:16.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:00:16.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:00:16.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:00:16.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:00:16.594 [DEBUG] [Thread-61210] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:00:20.464 [DEBUG] [Thread-61212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:00:35.498 [DEBUG] [Thread-61213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:00:40.157 [DEBUG] [Thread-61214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:00:44.005 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:00:44.006 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:00:46.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:00:46.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:00:46.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:00:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 0, 19), 17.47, 30.61, 0.0, 15.67, 17.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:00:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:00:19
2025-11-17T21:00:47.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:00:47.545 [DEBUG] [Thread-61215] [transport.py] [_log()] starting thread (client mode): 0xd3151090
2025-11-17T21:00:47.545 [DEBUG] [Thread-61215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:00:47.564 [DEBUG] [Thread-61215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:00:47.565 [INFO] [Thread-61215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] client lang: <none>
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] server lang: <none>
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] kex follows: False
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] Compression: none
2025-11-17T21:00:47.568 [DEBUG] [Thread-61215] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:00:47.586 [DEBUG] [Thread-61215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:00:47.587 [DEBUG] [Thread-61215] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:00:47.587 [DEBUG] [Thread-61215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:00:47.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:00:47.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:00:47.589 [DEBUG] [Thread-61215] [transport.py] [_log()] userauth is OK
2025-11-17T21:00:47.589 [DEBUG] [Thread-61215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:00:47.589 [DEBUG] [Thread-61215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:00:47.590 [DEBUG] [Thread-61215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:00:47.590 [DEBUG] [Thread-61215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:00:47.625 [INFO] [Thread-61215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:00:47.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:00:48.257 [DEBUG] [Thread-61215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:00:48.257 [DEBUG] [Thread-61215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:00:48.258 [DEBUG] [Thread-61215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:00:48.299 [DEBUG] [Thread-61215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:00:48.299 [DEBUG] [Thread-61215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:00:48.302 [DEBUG] [Thread-61215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:00:48.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:00:48.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:00:48.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:00:48.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:00:48.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:00:48.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:00:48.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:00:48.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:00:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:00:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.791715 -999.00  +17.10   8.01     35   +1.80 1 1 1 1 1     0    0 14.70 -30.28 ZNESW 8.3 8.0 186.4 16.1 17.6 -23.3 17.5 -22.7 17.2 -22.1 17.5 -23.0
2025-11-17T21:00:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:00:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:00:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.791715
2025-11-17T21:00:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:00:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:00:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:00:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:00:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:00:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:00:19', tmtdew=17.47, humidity=30.61, cloud=0.0, wind=15.67, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:00:20', seeing=1.14, atlas_timestamp='2025-11-17T19:00:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.051750000000000185, 0.14825000000000088, 0.11824999999999974, 0.10249999999999915, 0.11650000000000027, 0.15325000000000166, 0.08300000000000018, 0.11425000000000196, 0.1324999999999985, 0.1980000000000004, 0.13824999999999932, 0.15450000000000053, 0.15850000000000009, 0.18575000000000053, 0.07699999999999996, 0.13399999999999856, 0.14724999999999966, 0.18650000000000055, 0.2154999999999987, 0.17624999999999957, 0.1559999999999988, 0.1347499999999986, 0.06425000000000125, 0.06975000000000087, 0.12599999999999945, 0.25900000000000034, 0.4072500000000012, 0.23150000000000048, 0.11599999999999966, 0.014000000000001123, 0.15200000000000102, 0.16300000000000026, 0.16524999999999856], zp_timestamp='2025-11-17T18:59:00')
2025-11-17T21:00:48.330 [DEBUG] [Thread-61215] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:00:48.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:00:48.429 [DEBUG] [Thread-61218] [transport.py] [_log()] starting thread (client mode): 0xd3153f70
2025-11-17T21:00:48.429 [DEBUG] [Thread-61218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:00:48.443 [DEBUG] [Thread-61218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:00:48.443 [INFO] [Thread-61218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] client lang: <none>
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] server lang: <none>
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] kex follows: False
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:00:48.451 [DEBUG] [Thread-61218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:00:48.452 [DEBUG] [Thread-61218] [transport.py] [_log()] Compression: none
2025-11-17T21:00:48.452 [DEBUG] [Thread-61218] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:00:48.508 [DEBUG] [Thread-61218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:00:48.509 [DEBUG] [Thread-61218] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:00:48.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:00:48.510 [DEBUG] [Thread-61218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:00:48.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:00:48.564 [DEBUG] [Thread-61218] [transport.py] [_log()] userauth is OK
2025-11-17T21:00:48.564 [DEBUG] [Thread-61218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:00:48.565 [DEBUG] [Thread-61218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:00:48.565 [DEBUG] [Thread-61218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:00:48.565 [DEBUG] [Thread-61218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:00:48.584 [INFO] [Thread-61218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:00:48.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:00:48.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:00:49.421 [DEBUG] [Thread-61218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:00:49.422 [DEBUG] [Thread-61218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:00:49.469 [DEBUG] [Thread-61218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:00:49.469 [DEBUG] [Thread-61218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:00:49.478 [DEBUG] [Thread-61218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:00:49.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:00: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')
2025-11-17T21:00:49.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:00:49.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:00:49.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:00:49.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:00:49.512 [DEBUG] [Thread-61218] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:00:50.524 [DEBUG] [Thread-61220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:01:05.564 [DEBUG] [Thread-61221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:01:19.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:01:19.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:01:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:01:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 0, 51), 17.39, 30.77, 0.0, 16.52, 17.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:01:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:00:51
2025-11-17T21:01:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:01:20.446 [DEBUG] [Thread-61222] [transport.py] [_log()] starting thread (client mode): 0xd31ec6d0
2025-11-17T21:01:20.447 [DEBUG] [Thread-61222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:01:20.466 [DEBUG] [Thread-61222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:01:20.466 [INFO] [Thread-61222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] client lang: <none>
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] server lang: <none>
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] kex follows: False
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] Compression: none
2025-11-17T21:01:20.468 [DEBUG] [Thread-61222] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:01:20.485 [DEBUG] [Thread-61222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:01:20.486 [DEBUG] [Thread-61222] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:01:20.486 [DEBUG] [Thread-61222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:01:20.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:01:20.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:01:20.488 [DEBUG] [Thread-61222] [transport.py] [_log()] userauth is OK
2025-11-17T21:01:20.488 [DEBUG] [Thread-61222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:01:20.488 [DEBUG] [Thread-61222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:01:20.488 [DEBUG] [Thread-61222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:01:20.488 [DEBUG] [Thread-61222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:01:20.512 [INFO] [Thread-61222] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:01:20.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:01:20.594 [DEBUG] [Thread-61224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:01:21.315 [DEBUG] [Thread-61222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:01:21.316 [DEBUG] [Thread-61222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:01:21.316 [DEBUG] [Thread-61222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:01:21.356 [DEBUG] [Thread-61222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:01:21.356 [DEBUG] [Thread-61222] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:01:21.359 [DEBUG] [Thread-61222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:01:21.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:01:21.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:01:21.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:01:21.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:01:21.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:01:21.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:01:21.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:01:21.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:01:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:01:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.792062 -999.00  +17.10   6.52     35   +1.80 1 1 1 1 1     0    0 14.88 -28.53 ZNESW 10.7 6.5 201.8 11.8 17.6 -23.5 17.5 -22.6 17.2 -22.2 17.5 -23.1
2025-11-17T21:01:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:01:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:01:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.792062
2025-11-17T21:01:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:01:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:01:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:01:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:01:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:01:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:00:51', tmtdew=17.39, humidity=30.77, cloud=0.0, wind=16.52, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:00:52', seeing=1.16, atlas_timestamp='2025-11-17T19:00:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.051750000000000185, 0.14825000000000088, 0.11824999999999974, 0.10249999999999915, 0.11650000000000027, 0.15325000000000166, 0.08300000000000018, 0.11425000000000196, 0.1324999999999985, 0.1980000000000004, 0.13824999999999932, 0.15450000000000053, 0.15850000000000009, 0.18575000000000053, 0.07699999999999996, 0.13399999999999856, 0.14724999999999966, 0.18650000000000055, 0.2154999999999987, 0.17624999999999957, 0.1559999999999988, 0.1347499999999986, 0.06425000000000125, 0.06975000000000087, 0.12599999999999945, 0.25900000000000034, 0.4072500000000012, 0.23150000000000048, 0.11599999999999966, 0.014000000000001123, 0.15200000000000102, 0.16300000000000026, 0.16524999999999856], zp_timestamp='2025-11-17T18:59:00')
2025-11-17T21:01:21.384 [DEBUG] [Thread-61222] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:01:21.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:01:21.482 [DEBUG] [Thread-61226] [transport.py] [_log()] starting thread (client mode): 0xd31364d0
2025-11-17T21:01:21.482 [DEBUG] [Thread-61226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:01:21.496 [DEBUG] [Thread-61226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:01:21.496 [INFO] [Thread-61226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:01:21.504 [DEBUG] [Thread-61226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:01:21.504 [DEBUG] [Thread-61226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:01:21.504 [DEBUG] [Thread-61226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:01:21.504 [DEBUG] [Thread-61226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:01:21.504 [DEBUG] [Thread-61226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:01:21.504 [DEBUG] [Thread-61226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:01:21.504 [DEBUG] [Thread-61226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] client lang: <none>
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] server lang: <none>
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] kex follows: False
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] Compression: none
2025-11-17T21:01:21.505 [DEBUG] [Thread-61226] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:01:21.564 [DEBUG] [Thread-61226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:01:21.564 [DEBUG] [Thread-61226] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:01:21.564 [DEBUG] [Thread-61226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:01:21.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:01:21.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:01:21.620 [DEBUG] [Thread-61226] [transport.py] [_log()] userauth is OK
2025-11-17T21:01:21.620 [DEBUG] [Thread-61226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:01:21.620 [DEBUG] [Thread-61226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:01:21.621 [DEBUG] [Thread-61226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:01:21.621 [DEBUG] [Thread-61226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:01:21.643 [INFO] [Thread-61226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:01:21.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:01:21.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:01:22.484 [DEBUG] [Thread-61226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:01:22.484 [DEBUG] [Thread-61226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:01:22.532 [DEBUG] [Thread-61226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:01:22.532 [DEBUG] [Thread-61226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:01:22.541 [DEBUG] [Thread-61226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:01:22.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:01:22.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:01:22.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:01:22.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:01:22.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:01:22.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:01:22.576 [DEBUG] [Thread-61226] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:01:35.623 [DEBUG] [Thread-61228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:01:40.234 [DEBUG] [Thread-61229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:01:44.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:01:44.212 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:01:50.654 [DEBUG] [Thread-61230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:01:52.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:01:52.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:01:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:01:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 1, 24), 17.43, 30.68, 0.0, 13.52, 17.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:01:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:01:24
2025-11-17T21:01:53.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:01:53.526 [DEBUG] [Thread-61231] [transport.py] [_log()] starting thread (client mode): 0xd3153bb0
2025-11-17T21:01:53.526 [DEBUG] [Thread-61231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:01:53.546 [DEBUG] [Thread-61231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:01:53.546 [INFO] [Thread-61231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:01:53.549 [DEBUG] [Thread-61231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] client lang: <none>
2025-11-17T21:01:53.550 [DEBUG] [Thread-61231] [transport.py] [_log()] server lang: <none>
2025-11-17T21:01:53.551 [DEBUG] [Thread-61231] [transport.py] [_log()] kex follows: False
2025-11-17T21:01:53.551 [DEBUG] [Thread-61231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:01:53.551 [DEBUG] [Thread-61231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:01:53.551 [DEBUG] [Thread-61231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:01:53.551 [DEBUG] [Thread-61231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:01:53.551 [DEBUG] [Thread-61231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:01:53.551 [DEBUG] [Thread-61231] [transport.py] [_log()] Compression: none
2025-11-17T21:01:53.551 [DEBUG] [Thread-61231] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:01:53.572 [DEBUG] [Thread-61231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:01:53.572 [DEBUG] [Thread-61231] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:01:53.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:01:53.573 [DEBUG] [Thread-61231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:01:53.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:01:53.575 [DEBUG] [Thread-61231] [transport.py] [_log()] userauth is OK
2025-11-17T21:01:53.575 [DEBUG] [Thread-61231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:01:53.575 [DEBUG] [Thread-61231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:01:53.575 [DEBUG] [Thread-61231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:01:53.575 [DEBUG] [Thread-61231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:01:53.599 [INFO] [Thread-61231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:01:53.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:01:54.228 [DEBUG] [Thread-61231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:01:54.228 [DEBUG] [Thread-61231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:01:54.228 [DEBUG] [Thread-61231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:01:54.269 [DEBUG] [Thread-61231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:01:54.270 [DEBUG] [Thread-61231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:01:54.272 [DEBUG] [Thread-61231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:01:54.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:01:54.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:01:54.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:01:54.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:01:54.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:01:54.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:01:54.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:01:54.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:01:54.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:01:54.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.792410 -999.00  +17.10  11.07     35   +1.80 1 1 1 1 1     0    0 14.59 -27.28 ZNESW 11.8 11.1 201.4 16.1 17.6 -23.4 17.4 -22.8 17.2 -22.2 17.4 -23.0
2025-11-17T21:01:54.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:01:54.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:01:54.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.792410
2025-11-17T21:01:54.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:01:54.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:01:54.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:01:54.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:01:54.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:01:54.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:01:24', tmtdew=17.43, humidity=30.68, cloud=0.0, wind=13.52, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:01:24', seeing=1.06, atlas_timestamp='2025-11-17T19:01:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.051750000000000185, 0.14825000000000088, 0.11824999999999974, 0.10249999999999915, 0.11650000000000027, 0.15325000000000166, 0.08300000000000018, 0.11425000000000196, 0.1324999999999985, 0.1980000000000004, 0.13824999999999932, 0.15450000000000053, 0.15850000000000009, 0.18575000000000053, 0.07699999999999996, 0.13399999999999856, 0.14724999999999966, 0.18650000000000055, 0.2154999999999987, 0.17624999999999957, 0.1559999999999988, 0.1347499999999986, 0.06425000000000125, 0.06975000000000087, 0.12599999999999945, 0.25900000000000034, 0.4072500000000012, 0.23150000000000048, 0.11599999999999966, 0.014000000000001123, 0.15200000000000102, 0.16300000000000026, 0.16524999999999856], zp_timestamp='2025-11-17T18:59:00')
2025-11-17T21:01:54.296 [DEBUG] [Thread-61231] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:01:54.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:01:54.391 [DEBUG] [Thread-61234] [transport.py] [_log()] starting thread (client mode): 0xd3152140
2025-11-17T21:01:54.391 [DEBUG] [Thread-61234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:01:54.406 [DEBUG] [Thread-61234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:01:54.406 [INFO] [Thread-61234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:01:54.413 [DEBUG] [Thread-61234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] client lang: <none>
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] server lang: <none>
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] kex follows: False
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] Compression: none
2025-11-17T21:01:54.414 [DEBUG] [Thread-61234] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:01:54.475 [DEBUG] [Thread-61234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:01:54.476 [DEBUG] [Thread-61234] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:01:54.476 [DEBUG] [Thread-61234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:01:54.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:01:54.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:01:54.532 [DEBUG] [Thread-61234] [transport.py] [_log()] userauth is OK
2025-11-17T21:01:54.532 [DEBUG] [Thread-61234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:01:54.532 [DEBUG] [Thread-61234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:01:54.532 [DEBUG] [Thread-61234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:01:54.532 [DEBUG] [Thread-61234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:01:54.564 [INFO] [Thread-61234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:01:54.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:01:54.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:01:55.475 [DEBUG] [Thread-61234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:01:55.476 [DEBUG] [Thread-61234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:01:55.523 [DEBUG] [Thread-61234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:01:55.523 [DEBUG] [Thread-61234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:01:55.532 [DEBUG] [Thread-61234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:01:55.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:01:55.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:01:55.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:01:55.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:01:55.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:01:55.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:01:55.565 [DEBUG] [Thread-61234] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:02:05.682 [DEBUG] [Thread-61236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:02:20.728 [DEBUG] [Thread-61237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:02:25.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:02:25.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:02:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:02:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 1, 56), 17.38, 30.68, 0.0, 14.86, 17.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:02:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:01:56
2025-11-17T21:02:26.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:02:26.512 [DEBUG] [Thread-61238] [transport.py] [_log()] starting thread (client mode): 0xd7bc6f50
2025-11-17T21:02:26.512 [DEBUG] [Thread-61238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:02:26.532 [DEBUG] [Thread-61238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:02:26.532 [INFO] [Thread-61238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] client lang: <none>
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] server lang: <none>
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] kex follows: False
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] Compression: none
2025-11-17T21:02:26.536 [DEBUG] [Thread-61238] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:02:26.553 [DEBUG] [Thread-61238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:02:26.554 [DEBUG] [Thread-61238] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:02:26.554 [DEBUG] [Thread-61238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:02:26.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:02:26.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:02:26.556 [DEBUG] [Thread-61238] [transport.py] [_log()] userauth is OK
2025-11-17T21:02:26.556 [DEBUG] [Thread-61238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:02:26.556 [DEBUG] [Thread-61238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:02:26.556 [DEBUG] [Thread-61238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:02:26.556 [DEBUG] [Thread-61238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:02:26.572 [INFO] [Thread-61238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:02:26.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:02:27.348 [DEBUG] [Thread-61238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:02:27.348 [DEBUG] [Thread-61238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:02:27.348 [DEBUG] [Thread-61238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:02:27.389 [DEBUG] [Thread-61238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:02:27.389 [DEBUG] [Thread-61238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:02:27.392 [DEBUG] [Thread-61238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:02:27.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:02:27.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:02:27.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:02:27.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:02:27.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:02:27.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:02:27.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:02:27.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:02:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:02:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.792757 -999.00  +17.00  16.89     36   +1.90 1 1 1 1 1     0    0 14.68 -28.54 ZNESW 15.1 16.9 191.0 18.6 17.5 -23.5 17.4 -22.8 17.2 -22.2 17.4 -22.9
2025-11-17T21:02:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:02:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:02:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.792757
2025-11-17T21:02:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:02:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:02:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:02:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:02:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:02:27.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:01:56', tmtdew=17.38, humidity=30.68, cloud=0.0, wind=14.86, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:01:56', seeing=1.05, atlas_timestamp='2025-11-17T19:01:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.051750000000000185, 0.14825000000000088, 0.11824999999999974, 0.10249999999999915, 0.11650000000000027, 0.15325000000000166, 0.08300000000000018, 0.11425000000000196, 0.1324999999999985, 0.1980000000000004, 0.13824999999999932, 0.15450000000000053, 0.15850000000000009, 0.18575000000000053, 0.07699999999999996, 0.13399999999999856, 0.14724999999999966, 0.18650000000000055, 0.2154999999999987, 0.17624999999999957, 0.1559999999999988, 0.1347499999999986, 0.06425000000000125, 0.06975000000000087, 0.12599999999999945, 0.25900000000000034, 0.4072500000000012, 0.23150000000000048, 0.11599999999999966, 0.014000000000001123, 0.15200000000000102, 0.16300000000000026, 0.16524999999999856], zp_timestamp='2025-11-17T18:59:00')
2025-11-17T21:02:27.420 [DEBUG] [Thread-61238] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:02:27.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:02:27.517 [DEBUG] [Thread-61241] [transport.py] [_log()] starting thread (client mode): 0xd7bc68c0
2025-11-17T21:02:27.517 [DEBUG] [Thread-61241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:02:27.532 [DEBUG] [Thread-61241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:02:27.532 [INFO] [Thread-61241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:02:27.539 [DEBUG] [Thread-61241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] client lang: <none>
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] server lang: <none>
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] kex follows: False
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:02:27.540 [DEBUG] [Thread-61241] [transport.py] [_log()] Compression: none
2025-11-17T21:02:27.541 [DEBUG] [Thread-61241] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:02:27.601 [DEBUG] [Thread-61241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:02:27.601 [DEBUG] [Thread-61241] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:02:27.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:02:27.602 [DEBUG] [Thread-61241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:02:27.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:02:27.660 [DEBUG] [Thread-61241] [transport.py] [_log()] userauth is OK
2025-11-17T21:02:27.661 [DEBUG] [Thread-61241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:02:27.661 [DEBUG] [Thread-61241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:02:27.661 [DEBUG] [Thread-61241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:02:27.661 [DEBUG] [Thread-61241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:02:27.680 [INFO] [Thread-61241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:02:27.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:02:27.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:02:28.563 [DEBUG] [Thread-61241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:02:28.563 [DEBUG] [Thread-61241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:02:28.611 [DEBUG] [Thread-61241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:02:28.612 [DEBUG] [Thread-61241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:02:28.621 [DEBUG] [Thread-61241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:02:28.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:02:28.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:02:28.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:02:28.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:02:28.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:02:28.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:02:28.655 [DEBUG] [Thread-61241] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:02:35.757 [DEBUG] [Thread-61243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:02:40.313 [DEBUG] [Thread-61244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:02:44.413 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:02:44.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:02:50.795 [DEBUG] [Thread-61245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:02:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:02:58.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:02:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:02:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 2, 28), 17.38, 30.68, 0.0, 15.1, 17.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:02:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:02:28
2025-11-17T21:02:59.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:02:59.611 [DEBUG] [Thread-61246] [transport.py] [_log()] starting thread (client mode): 0xd3135f60
2025-11-17T21:02:59.611 [DEBUG] [Thread-61246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:02:59.631 [DEBUG] [Thread-61246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:02:59.631 [INFO] [Thread-61246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:02:59.634 [DEBUG] [Thread-61246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] client lang: <none>
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] server lang: <none>
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] kex follows: False
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] Compression: none
2025-11-17T21:02:59.635 [DEBUG] [Thread-61246] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:02:59.649 [DEBUG] [Thread-61246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:02:59.650 [DEBUG] [Thread-61246] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:02:59.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:02:59.651 [DEBUG] [Thread-61246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:02:59.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:02:59.653 [DEBUG] [Thread-61246] [transport.py] [_log()] userauth is OK
2025-11-17T21:02:59.653 [DEBUG] [Thread-61246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:02:59.653 [DEBUG] [Thread-61246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:02:59.653 [DEBUG] [Thread-61246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:02:59.653 [DEBUG] [Thread-61246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:02:59.677 [INFO] [Thread-61246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:02:59.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:03:00.327 [DEBUG] [Thread-61246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:03:00.327 [DEBUG] [Thread-61246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:03:00.328 [DEBUG] [Thread-61246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:03:00.368 [DEBUG] [Thread-61246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:03:00.369 [DEBUG] [Thread-61246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:03:00.371 [DEBUG] [Thread-61246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:03:00.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:03:00.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:03:00.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:03:00.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:03:00.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:03:00.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:03:00.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:03:00.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:03:00.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:03:00.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.793451 -999.00  +17.00   9.42     36   +1.90 1 1 1 1 1     0    0 14.44 -33.65 ZNESW 17.4 9.4 202.9 16.9 17.5 -23.6 17.4 -22.8 17.2 -22.2 17.4 -23.1
2025-11-17T21:03:00.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:03:00.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:03:00.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.793451
2025-11-17T21:03:00.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:03:00.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:03:00.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:03:00.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:03:00.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:03:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:02:28', tmtdew=17.38, humidity=30.68, cloud=0.0, wind=15.1, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:02:29', seeing=1.03, atlas_timestamp='2025-11-17T19:02:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.051750000000000185, 0.14825000000000088, 0.11824999999999974, 0.10249999999999915, 0.11650000000000027, 0.15325000000000166, 0.08300000000000018, 0.11425000000000196, 0.1324999999999985, 0.1980000000000004, 0.13824999999999932, 0.15450000000000053, 0.15850000000000009, 0.18575000000000053, 0.07699999999999996, 0.13399999999999856, 0.14724999999999966, 0.18650000000000055, 0.2154999999999987, 0.17624999999999957, 0.1559999999999988, 0.1347499999999986, 0.06425000000000125, 0.06975000000000087, 0.12599999999999945, 0.25900000000000034, 0.4072500000000012, 0.23150000000000048, 0.11599999999999966, 0.014000000000001123, 0.15200000000000102, 0.16300000000000026, 0.16524999999999856], zp_timestamp='2025-11-17T18:59:00')
2025-11-17T21:03:00.399 [DEBUG] [Thread-61246] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:03:00.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:03:05.822 [DEBUG] [Thread-61249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:03:20.858 [DEBUG] [Thread-61250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:03:35.884 [DEBUG] [Thread-61251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:03:40.383 [DEBUG] [Thread-61252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:03:44.616 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:03:44.617 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:03:50.914 [DEBUG] [Thread-61253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:04:05.942 [DEBUG] [Thread-61254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:04:20.968 [DEBUG] [Thread-61255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:04:35.996 [DEBUG] [Thread-61256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:04:40.451 [DEBUG] [Thread-61257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:04:44.821 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:04:44.821 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:04:51.025 [DEBUG] [Thread-61258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:05:06.053 [DEBUG] [Thread-61259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:05:12.123 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T21:05:21.080 [DEBUG] [Thread-61260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:05:36.105 [DEBUG] [Thread-61261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:05:40.511 [DEBUG] [Thread-61262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:05:42.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:05:42.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:05:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:05:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 5, 9), 17.04, 31.44, 0.0, 14.4, 16.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:05:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:05:09
2025-11-17T21:05:42.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:05:43.147 [DEBUG] [Thread-61263] [transport.py] [_log()] starting thread (client mode): 0xd0700040
2025-11-17T21:05:43.147 [DEBUG] [Thread-61263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:05:43.167 [DEBUG] [Thread-61263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:05:43.167 [INFO] [Thread-61263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:05:43.170 [DEBUG] [Thread-61263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] client lang: <none>
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] server lang: <none>
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] kex follows: False
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] Compression: none
2025-11-17T21:05:43.171 [DEBUG] [Thread-61263] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:05:43.188 [DEBUG] [Thread-61263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:05:43.189 [DEBUG] [Thread-61263] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:05:43.189 [DEBUG] [Thread-61263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:05:43.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:05:43.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:05:43.191 [DEBUG] [Thread-61263] [transport.py] [_log()] userauth is OK
2025-11-17T21:05:43.192 [DEBUG] [Thread-61263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:05:43.192 [DEBUG] [Thread-61263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:05:43.192 [DEBUG] [Thread-61263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:05:43.192 [DEBUG] [Thread-61263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:05:43.215 [INFO] [Thread-61263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:05:43.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:05:43.818 [DEBUG] [Thread-61263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:05:43.818 [DEBUG] [Thread-61263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:05:43.819 [DEBUG] [Thread-61263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:05:43.859 [DEBUG] [Thread-61263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:05:43.860 [DEBUG] [Thread-61263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:05:43.862 [DEBUG] [Thread-61263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:05:43.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:05:43.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:05:43.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:05:43.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:05:43.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:05:43.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:05:43.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:05:43.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:05:43.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:05:43.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.795535 -999.00  +16.90  14.10     37   +2.10 1 1 1 1 1     0    0 14.37 -40.80 ZNESW 13.0 14.1 207.8 17.3 17.4 -23.7 17.4 -22.9 17.1 -22.3 17.4 -23.0
2025-11-17T21:05:43.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:05:43.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:05:43.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.795535
2025-11-17T21:05:43.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:05:43.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:05:43.885 [DEBUG] [Thread-61263] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:05:43.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:05:43.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:05:43.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:05:43.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:05:09', tmtdew=17.04, humidity=31.44, cloud=0.0, wind=14.4, temperature=16.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:05:41', seeing=1.07, atlas_timestamp='2025-11-17T19:05:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.051750000000000185, 0.14825000000000088, 0.11824999999999974, 0.10249999999999915, 0.11650000000000027, 0.15325000000000166, 0.08300000000000018, 0.11425000000000196, 0.1324999999999985, 0.1980000000000004, 0.13824999999999932, 0.15450000000000053, 0.15850000000000009, 0.18575000000000053, 0.07699999999999996, 0.13399999999999856, 0.14724999999999966, 0.18650000000000055, 0.2154999999999987, 0.17624999999999957, 0.1559999999999988, 0.1347499999999986, 0.06425000000000125, 0.06975000000000087, 0.12599999999999945, 0.25900000000000034, 0.4072500000000012, 0.23150000000000048, 0.11599999999999966, 0.014000000000001123, 0.15200000000000102, 0.16300000000000026, 0.16524999999999856], zp_timestamp='2025-11-17T19:01:00')
2025-11-17T21:05:43.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:05:43.981 [DEBUG] [Thread-61266] [transport.py] [_log()] starting thread (client mode): 0xd31ee7d0
2025-11-17T21:05:43.982 [DEBUG] [Thread-61266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:05:44.000 [DEBUG] [Thread-61266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:05:44.000 [INFO] [Thread-61266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:05:44.008 [DEBUG] [Thread-61266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:05:44.009 [DEBUG] [Thread-61266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:05:44.009 [DEBUG] [Thread-61266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:05:44.009 [DEBUG] [Thread-61266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:05:44.009 [DEBUG] [Thread-61266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:05:44.009 [DEBUG] [Thread-61266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:05:44.009 [DEBUG] [Thread-61266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:05:44.009 [DEBUG] [Thread-61266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:05:44.009 [DEBUG] [Thread-61266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:05:44.010 [DEBUG] [Thread-61266] [transport.py] [_log()] client lang: <none>
2025-11-17T21:05:44.010 [DEBUG] [Thread-61266] [transport.py] [_log()] server lang: <none>
2025-11-17T21:05:44.010 [DEBUG] [Thread-61266] [transport.py] [_log()] kex follows: False
2025-11-17T21:05:44.010 [DEBUG] [Thread-61266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:05:44.010 [DEBUG] [Thread-61266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:05:44.010 [DEBUG] [Thread-61266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:05:44.010 [DEBUG] [Thread-61266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:05:44.010 [DEBUG] [Thread-61266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:05:44.011 [DEBUG] [Thread-61266] [transport.py] [_log()] Compression: none
2025-11-17T21:05:44.011 [DEBUG] [Thread-61266] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:05:44.064 [DEBUG] [Thread-61266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:05:44.064 [DEBUG] [Thread-61266] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:05:44.065 [DEBUG] [Thread-61266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:05:44.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:05:44.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:05:44.120 [DEBUG] [Thread-61266] [transport.py] [_log()] userauth is OK
2025-11-17T21:05:44.120 [DEBUG] [Thread-61266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:05:44.120 [DEBUG] [Thread-61266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:05:44.121 [DEBUG] [Thread-61266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:05:44.121 [DEBUG] [Thread-61266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:05:44.140 [INFO] [Thread-61266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:05:44.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:05:44.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:05:45.027 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:05:45.028 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:05:45.030 [DEBUG] [Thread-61266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:05:45.031 [DEBUG] [Thread-61266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:05:45.078 [DEBUG] [Thread-61266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:05:45.078 [DEBUG] [Thread-61266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:05:45.087 [DEBUG] [Thread-61266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:05:45.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:05:45.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:05:45.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:05:45.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:05:45.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:05:45.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:05:45.122 [DEBUG] [Thread-61266] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:05:51.135 [DEBUG] [Thread-61268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:06:06.170 [DEBUG] [Thread-61269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:06:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:06:15.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:06:15.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:06:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 6, 13), 16.9, 31.66, 0.0, 14.49, 16.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:06:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:06:13
2025-11-17T21:06:15.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:06:16.097 [DEBUG] [Thread-61270] [transport.py] [_log()] starting thread (client mode): 0xd31344c0
2025-11-17T21:06:16.097 [DEBUG] [Thread-61270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:06:16.114 [DEBUG] [Thread-61270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:06:16.114 [INFO] [Thread-61270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:06:16.115 [DEBUG] [Thread-61270] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] client lang: <none>
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] server lang: <none>
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] kex follows: False
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] Compression: none
2025-11-17T21:06:16.116 [DEBUG] [Thread-61270] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:06:16.123 [DEBUG] [Thread-61270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:06:16.124 [DEBUG] [Thread-61270] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:06:16.124 [DEBUG] [Thread-61270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:06:16.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:06:16.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:06:16.125 [DEBUG] [Thread-61270] [transport.py] [_log()] userauth is OK
2025-11-17T21:06:16.125 [DEBUG] [Thread-61270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:06:16.125 [DEBUG] [Thread-61270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:06:16.125 [DEBUG] [Thread-61270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:06:16.125 [DEBUG] [Thread-61270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:06:16.142 [INFO] [Thread-61270] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:06:16.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:06:16.744 [DEBUG] [Thread-61270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:06:16.744 [DEBUG] [Thread-61270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:06:16.744 [DEBUG] [Thread-61270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:06:16.785 [DEBUG] [Thread-61270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:06:16.785 [DEBUG] [Thread-61270] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:06:16.788 [DEBUG] [Thread-61270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:06:16.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:06:16.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:06:16.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:06:16.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:06:16.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:06:16.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:06:16.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:06:16.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:06:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:06:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.795882 -999.00  +16.80  11.15     37   +2.10 1 1 1 1 1     0    0 14.28 -40.06 ZNESW 14.4 11.2 195.2 15.6 17.4 -23.6 17.3 -22.7 17.1 -22.3 17.3 -23.0
2025-11-17T21:06:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:06:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:06:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.795882
2025-11-17T21:06:16.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:06:16.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:06:16.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:06:16.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:06:16.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:06:16.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:06:13', tmtdew=16.9, humidity=31.66, cloud=0.0, wind=14.49, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:06:13', seeing=1.04, atlas_timestamp='2025-11-17T19:06:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.051750000000000185, 0.14825000000000088, 0.11824999999999974, 0.10249999999999915, 0.11650000000000027, 0.15325000000000166, 0.08300000000000018, 0.11425000000000196, 0.1324999999999985, 0.1980000000000004, 0.13824999999999932, 0.15450000000000053, 0.15850000000000009, 0.18575000000000053, 0.07699999999999996, 0.13399999999999856, 0.14724999999999966, 0.18650000000000055, 0.2154999999999987, 0.17624999999999957, 0.1559999999999988, 0.1347499999999986, 0.06425000000000125, 0.06975000000000087, 0.12599999999999945, 0.25900000000000034, 0.4072500000000012, 0.23150000000000048, 0.11599999999999966, 0.014000000000001123, 0.15200000000000102, 0.16300000000000026, 0.16524999999999856], zp_timestamp='2025-11-17T19:01:00')
2025-11-17T21:06:16.808 [DEBUG] [Thread-61270] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:06:16.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:06:16.911 [DEBUG] [Thread-61273] [transport.py] [_log()] starting thread (client mode): 0xd3151a20
2025-11-17T21:06:16.911 [DEBUG] [Thread-61273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:06:16.926 [DEBUG] [Thread-61273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:06:16.927 [INFO] [Thread-61273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] client lang: <none>
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] server lang: <none>
2025-11-17T21:06:16.934 [DEBUG] [Thread-61273] [transport.py] [_log()] kex follows: False
2025-11-17T21:06:16.935 [DEBUG] [Thread-61273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:06:16.935 [DEBUG] [Thread-61273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:06:16.935 [DEBUG] [Thread-61273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:06:16.935 [DEBUG] [Thread-61273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:06:16.935 [DEBUG] [Thread-61273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:06:16.935 [DEBUG] [Thread-61273] [transport.py] [_log()] Compression: none
2025-11-17T21:06:16.935 [DEBUG] [Thread-61273] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:06:16.996 [DEBUG] [Thread-61273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:06:16.996 [DEBUG] [Thread-61273] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:06:16.997 [DEBUG] [Thread-61273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:06:16.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:06:16.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:06:17.056 [DEBUG] [Thread-61273] [transport.py] [_log()] userauth is OK
2025-11-17T21:06:17.056 [DEBUG] [Thread-61273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:06:17.056 [DEBUG] [Thread-61273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:06:17.057 [DEBUG] [Thread-61273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:06:17.057 [DEBUG] [Thread-61273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:06:17.075 [INFO] [Thread-61273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:06:17.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:06:17.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:06:17.939 [DEBUG] [Thread-61273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:06:17.939 [DEBUG] [Thread-61273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:06:17.986 [DEBUG] [Thread-61273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:06:17.986 [DEBUG] [Thread-61273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:06:17.995 [DEBUG] [Thread-61273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:06:18.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:06:18.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:06:18.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:06:18.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:06:18.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:06:18.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:06:18.030 [DEBUG] [Thread-61273] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:06:21.202 [DEBUG] [Thread-61275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:06:36.242 [DEBUG] [Thread-61276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:06:40.594 [DEBUG] [Thread-61277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:06:45.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:06:45.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:06:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:06:48.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:06:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:06:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 6, 45), 16.8, 31.76, 0.0, 11.22, 16.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:06:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:06:45
2025-11-17T21:06:48.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:06:49.008 [DEBUG] [Thread-61278] [transport.py] [_log()] starting thread (client mode): 0xd31b1ff0
2025-11-17T21:06:49.008 [DEBUG] [Thread-61278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:06:49.029 [DEBUG] [Thread-61278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:06:49.029 [INFO] [Thread-61278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:06:49.032 [DEBUG] [Thread-61278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:06:49.032 [DEBUG] [Thread-61278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:06:49.032 [DEBUG] [Thread-61278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:06:49.032 [DEBUG] [Thread-61278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:06:49.032 [DEBUG] [Thread-61278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:06:49.032 [DEBUG] [Thread-61278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] client lang: <none>
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] server lang: <none>
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] kex follows: False
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] Compression: none
2025-11-17T21:06:49.033 [DEBUG] [Thread-61278] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:06:49.052 [DEBUG] [Thread-61278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:06:49.052 [DEBUG] [Thread-61278] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:06:49.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:06:49.053 [DEBUG] [Thread-61278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:06:49.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:06:49.055 [DEBUG] [Thread-61278] [transport.py] [_log()] userauth is OK
2025-11-17T21:06:49.056 [DEBUG] [Thread-61278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:06:49.056 [DEBUG] [Thread-61278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:06:49.056 [DEBUG] [Thread-61278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:06:49.056 [DEBUG] [Thread-61278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:06:49.089 [INFO] [Thread-61278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:06:49.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:06:49.722 [DEBUG] [Thread-61278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:06:49.722 [DEBUG] [Thread-61278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:06:49.722 [DEBUG] [Thread-61278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:06:49.763 [DEBUG] [Thread-61278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:06:49.763 [DEBUG] [Thread-61278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:06:49.766 [DEBUG] [Thread-61278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:06:49.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:06:49.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:06:49.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:06:49.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:06:49.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:06:49.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:06:49.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:06:49.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:06:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:06:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.795882 -999.00  +16.80  11.15     37   +2.10 1 1 1 1 1     0    0 14.28 -40.06 ZNESW 14.4 11.2 195.2 15.6 17.4 -23.6 17.3 -22.7 17.1 -22.3 17.3 -23.0
2025-11-17T21:06:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:06:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:06:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.795882
2025-11-17T21:06:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:06:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:06:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:06:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:06:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:06:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:06:45', tmtdew=16.8, humidity=31.76, cloud=0.0, wind=11.22, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:06:45', seeing=1.02, atlas_timestamp='2025-11-17T19:06:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:05:00')
2025-11-17T21:06:49.783 [DEBUG] [Thread-61278] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:06:49.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:06:49.887 [DEBUG] [Thread-61281] [transport.py] [_log()] starting thread (client mode): 0xd31ec790
2025-11-17T21:06:49.887 [DEBUG] [Thread-61281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:06:49.902 [DEBUG] [Thread-61281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:06:49.903 [INFO] [Thread-61281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:06:49.910 [DEBUG] [Thread-61281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:06:49.910 [DEBUG] [Thread-61281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:06:49.910 [DEBUG] [Thread-61281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:06:49.910 [DEBUG] [Thread-61281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:06:49.910 [DEBUG] [Thread-61281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:06:49.910 [DEBUG] [Thread-61281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:06:49.910 [DEBUG] [Thread-61281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] client lang: <none>
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] server lang: <none>
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] kex follows: False
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] Compression: none
2025-11-17T21:06:49.911 [DEBUG] [Thread-61281] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:06:49.968 [DEBUG] [Thread-61281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:06:49.968 [DEBUG] [Thread-61281] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:06:49.969 [DEBUG] [Thread-61281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:06:49.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:06:49.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:06:50.024 [DEBUG] [Thread-61281] [transport.py] [_log()] userauth is OK
2025-11-17T21:06:50.024 [DEBUG] [Thread-61281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:06:50.024 [DEBUG] [Thread-61281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:06:50.024 [DEBUG] [Thread-61281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:06:50.024 [DEBUG] [Thread-61281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:06:50.043 [INFO] [Thread-61281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:06:50.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:06:50.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:06:50.886 [DEBUG] [Thread-61281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:06:50.886 [DEBUG] [Thread-61281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:06:50.934 [DEBUG] [Thread-61281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:06:50.934 [DEBUG] [Thread-61281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:06:50.943 [DEBUG] [Thread-61281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:06:50.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:06: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')
2025-11-17T21:06: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
2025-11-17T21:06:50.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:06:50.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:06:50.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:06:50.978 [DEBUG] [Thread-61281] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:06:51.268 [DEBUG] [Thread-61283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:07:06.309 [DEBUG] [Thread-61284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:07:20.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:07:20.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:07:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:07:21.336 [DEBUG] [Thread-61285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:07:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 7, 17), 16.77, 31.82, 0.0, 13.38, 16.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:07:21.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:07:17
2025-11-17T21:07:21.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:07:21.968 [DEBUG] [Thread-61286] [transport.py] [_log()] starting thread (client mode): 0xd3135bd0
2025-11-17T21:07:21.968 [DEBUG] [Thread-61286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:07:21.988 [DEBUG] [Thread-61286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:07:21.989 [INFO] [Thread-61286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] client lang: <none>
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] server lang: <none>
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] kex follows: False
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] Compression: none
2025-11-17T21:07:21.992 [DEBUG] [Thread-61286] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:07:22.006 [DEBUG] [Thread-61286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:07:22.007 [DEBUG] [Thread-61286] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:07:22.007 [DEBUG] [Thread-61286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:07:22.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:07:22.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:07:22.049 [DEBUG] [Thread-61286] [transport.py] [_log()] userauth is OK
2025-11-17T21:07:22.049 [DEBUG] [Thread-61286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:07:22.049 [DEBUG] [Thread-61286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:07:22.049 [DEBUG] [Thread-61286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:07:22.049 [DEBUG] [Thread-61286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:07:22.080 [INFO] [Thread-61286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:07:22.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:07:22.738 [DEBUG] [Thread-61286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:07:22.738 [DEBUG] [Thread-61286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:07:22.738 [DEBUG] [Thread-61286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:07:22.779 [DEBUG] [Thread-61286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:07:22.779 [DEBUG] [Thread-61286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:07:22.782 [DEBUG] [Thread-61286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:07:22.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:07:22.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:07:22.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:07:22.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:07:22.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:07:22.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:07:22.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:07:22.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:07:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:07:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.796229 -999.00  +16.80  12.30     37   +2.10 1 1 1 1 1     0    0 14.17 -42.38 ZNESW 12.1 12.3 201.2 14.0 17.4 -23.7 17.3 -22.9 17.1 -22.3 17.3 -23.2
2025-11-17T21:07:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:07:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:07:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.796229
2025-11-17T21:07:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:07:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:07:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:07:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:07:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:07:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:07:17', tmtdew=16.77, humidity=31.82, cloud=0.0, wind=13.38, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:07:17', seeing=1.09, atlas_timestamp='2025-11-17T19:06:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:05:00')
2025-11-17T21:07:22.808 [DEBUG] [Thread-61286] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:07:22.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:07:22.895 [DEBUG] [Thread-61289] [transport.py] [_log()] starting thread (client mode): 0xd7bc64d0
2025-11-17T21:07:22.895 [DEBUG] [Thread-61289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:07:22.910 [DEBUG] [Thread-61289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:07:22.910 [INFO] [Thread-61289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] client lang: <none>
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] server lang: <none>
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] kex follows: False
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] Compression: none
2025-11-17T21:07:22.918 [DEBUG] [Thread-61289] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:07:22.978 [DEBUG] [Thread-61289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:07:22.979 [DEBUG] [Thread-61289] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:07:22.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:07:22.979 [DEBUG] [Thread-61289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:07:22.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:07:23.036 [DEBUG] [Thread-61289] [transport.py] [_log()] userauth is OK
2025-11-17T21:07:23.036 [DEBUG] [Thread-61289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:07:23.036 [DEBUG] [Thread-61289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:07:23.036 [DEBUG] [Thread-61289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:07:23.036 [DEBUG] [Thread-61289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:07:23.054 [INFO] [Thread-61289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:07:23.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:07:23.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:07:23.897 [DEBUG] [Thread-61289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:07:23.897 [DEBUG] [Thread-61289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:07:23.944 [DEBUG] [Thread-61289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:07:23.945 [DEBUG] [Thread-61289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:07:23.954 [DEBUG] [Thread-61289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:07:23.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:07:23.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:07:23.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:07:23.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:07:23.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:07:23.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:07:23.989 [DEBUG] [Thread-61289] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:07:36.367 [DEBUG] [Thread-61291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:07:40.688 [DEBUG] [Thread-61292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:07:45.460 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:07:45.461 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:07:51.408 [DEBUG] [Thread-61293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:07:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:07:53.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:07:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:07:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 7, 49), 16.73, 31.92, 0.0, 16.5, 16.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:07:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:07:49
2025-11-17T21:07:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:07:54.932 [DEBUG] [Thread-61294] [transport.py] [_log()] starting thread (client mode): 0xd31ee8f0
2025-11-17T21:07:54.932 [DEBUG] [Thread-61294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:07:54.954 [DEBUG] [Thread-61294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:07:54.954 [INFO] [Thread-61294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] client lang: <none>
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] server lang: <none>
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] kex follows: False
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] Compression: none
2025-11-17T21:07:54.957 [DEBUG] [Thread-61294] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:07:54.975 [DEBUG] [Thread-61294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:07:54.976 [DEBUG] [Thread-61294] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:07:54.976 [DEBUG] [Thread-61294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:07:54.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:07:54.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:07:54.978 [DEBUG] [Thread-61294] [transport.py] [_log()] userauth is OK
2025-11-17T21:07:54.978 [DEBUG] [Thread-61294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:07:54.978 [DEBUG] [Thread-61294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:07:54.978 [DEBUG] [Thread-61294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:07:54.979 [DEBUG] [Thread-61294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:07:55.000 [INFO] [Thread-61294] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:07:55.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:07:56.060 [DEBUG] [Thread-61294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:07:56.060 [DEBUG] [Thread-61294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:07:56.061 [DEBUG] [Thread-61294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:07:56.101 [DEBUG] [Thread-61294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:07:56.102 [DEBUG] [Thread-61294] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:07:56.104 [DEBUG] [Thread-61294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:07:56.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:07:56.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:07:56.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:07:56.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:07:56.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:07:56.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:07:56.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:07:56.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:07:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:07:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.796576 -999.00  +16.80  10.26     37   +2.10 1 1 1 1 1     0    0 13.74 -45.26 ZNESW 14.3 10.3 199.0 16.3 17.4 -23.7 17.3 -22.8 17.1 -22.3 17.3 -23.2
2025-11-17T21:07:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:07:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:07:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.796576
2025-11-17T21:07:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:07:56.136 [DEBUG] [Thread-61294] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:07:56.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:07:56.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:07:56.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:07:56.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:07:56.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:07:49', tmtdew=16.73, humidity=31.92, cloud=0.0, wind=16.5, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:07:49', seeing=1.09, atlas_timestamp='2025-11-17T19:07:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:05:00')
2025-11-17T21:07:56.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:07:56.235 [DEBUG] [Thread-61297] [transport.py] [_log()] starting thread (client mode): 0xd3153b20
2025-11-17T21:07:56.235 [DEBUG] [Thread-61297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:07:56.257 [DEBUG] [Thread-61297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:07:56.257 [INFO] [Thread-61297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:07:56.265 [DEBUG] [Thread-61297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:07:56.265 [DEBUG] [Thread-61297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] client lang: <none>
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] server lang: <none>
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] kex follows: False
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:07:56.266 [DEBUG] [Thread-61297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:07:56.267 [DEBUG] [Thread-61297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:07:56.267 [DEBUG] [Thread-61297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:07:56.267 [DEBUG] [Thread-61297] [transport.py] [_log()] Compression: none
2025-11-17T21:07:56.267 [DEBUG] [Thread-61297] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:07:56.324 [DEBUG] [Thread-61297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:07:56.325 [DEBUG] [Thread-61297] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:07:56.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:07:56.325 [DEBUG] [Thread-61297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:07:56.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:07:56.380 [DEBUG] [Thread-61297] [transport.py] [_log()] userauth is OK
2025-11-17T21:07:56.380 [DEBUG] [Thread-61297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:07:56.380 [DEBUG] [Thread-61297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:07:56.380 [DEBUG] [Thread-61297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:07:56.380 [DEBUG] [Thread-61297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:07:56.399 [INFO] [Thread-61297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:07:56.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:07:56.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:07:57.276 [DEBUG] [Thread-61297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:07:57.277 [DEBUG] [Thread-61297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:07:57.324 [DEBUG] [Thread-61297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:07:57.324 [DEBUG] [Thread-61297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:07:57.332 [DEBUG] [Thread-61297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:07:57.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:07:57.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:07:57.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:07:57.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:07:57.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:07:57.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:07:57.364 [DEBUG] [Thread-61297] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:08:06.439 [DEBUG] [Thread-61299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:08:21.477 [DEBUG] [Thread-61300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:08:27.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:08:27.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:08:27.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:08:28.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 8, 21), 16.73, 31.9, 0.0, 14.61, 16.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:08:28.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:08:21
2025-11-17T21:08:28.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:08:28.315 [DEBUG] [Thread-61301] [transport.py] [_log()] starting thread (client mode): 0xd31b1270
2025-11-17T21:08:28.315 [DEBUG] [Thread-61301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:08:28.335 [DEBUG] [Thread-61301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:08:28.335 [INFO] [Thread-61301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:08:28.338 [DEBUG] [Thread-61301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] client lang: <none>
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] server lang: <none>
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] kex follows: False
2025-11-17T21:08:28.339 [DEBUG] [Thread-61301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:08:28.340 [DEBUG] [Thread-61301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:08:28.340 [DEBUG] [Thread-61301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:08:28.340 [DEBUG] [Thread-61301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:08:28.340 [DEBUG] [Thread-61301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:08:28.340 [DEBUG] [Thread-61301] [transport.py] [_log()] Compression: none
2025-11-17T21:08:28.340 [DEBUG] [Thread-61301] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:08:28.360 [DEBUG] [Thread-61301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:08:28.360 [DEBUG] [Thread-61301] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:08:28.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:08:28.361 [DEBUG] [Thread-61301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:08:28.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:08:28.363 [DEBUG] [Thread-61301] [transport.py] [_log()] userauth is OK
2025-11-17T21:08:28.363 [DEBUG] [Thread-61301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:08:28.363 [DEBUG] [Thread-61301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:08:28.363 [DEBUG] [Thread-61301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:08:28.363 [DEBUG] [Thread-61301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:08:28.387 [INFO] [Thread-61301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:08:28.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:08:29.022 [DEBUG] [Thread-61301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:08:29.023 [DEBUG] [Thread-61301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:08:29.023 [DEBUG] [Thread-61301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:08:29.063 [DEBUG] [Thread-61301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:08:29.064 [DEBUG] [Thread-61301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:08:29.066 [DEBUG] [Thread-61301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:08:29.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:08:29.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:08:29.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:08:29.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:08:29.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:08:29.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:08:29.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:08:29.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:08:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:08:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.796924 -999.00  +16.80  11.40     37   +2.10 1 1 1 1 1     0    0 13.72 -49.69 ZNESW 10.3 11.4 196.6 14.6 17.4 -23.6 17.2 -22.8 17.1 -22.4 17.3 -23.1
2025-11-17T21:08:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:08:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:08:29.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.796924
2025-11-17T21:08:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:08:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:08:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:08:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:08:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:08:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:08:21', tmtdew=16.73, humidity=31.9, cloud=0.0, wind=14.61, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:08:21', seeing=1.26, atlas_timestamp='2025-11-17T19:07:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:05:00')
2025-11-17T21:08:29.091 [DEBUG] [Thread-61301] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:08:29.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:08:29.188 [DEBUG] [Thread-61304] [transport.py] [_log()] starting thread (client mode): 0xd3153160
2025-11-17T21:08:29.188 [DEBUG] [Thread-61304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:08:29.202 [DEBUG] [Thread-61304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:08:29.202 [INFO] [Thread-61304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] client lang: <none>
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] server lang: <none>
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] kex follows: False
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:08:29.210 [DEBUG] [Thread-61304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:08:29.211 [DEBUG] [Thread-61304] [transport.py] [_log()] Compression: none
2025-11-17T21:08:29.211 [DEBUG] [Thread-61304] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:08:29.268 [DEBUG] [Thread-61304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:08:29.268 [DEBUG] [Thread-61304] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:08:29.269 [DEBUG] [Thread-61304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:08:29.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:08:29.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:08:29.324 [DEBUG] [Thread-61304] [transport.py] [_log()] userauth is OK
2025-11-17T21:08:29.325 [DEBUG] [Thread-61304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:08:29.325 [DEBUG] [Thread-61304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:08:29.325 [DEBUG] [Thread-61304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:08:29.325 [DEBUG] [Thread-61304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:08:29.344 [INFO] [Thread-61304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:08:29.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:08:29.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:08:30.176 [DEBUG] [Thread-61304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:08:30.176 [DEBUG] [Thread-61304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:08:30.224 [DEBUG] [Thread-61304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:08:30.224 [DEBUG] [Thread-61304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:08:30.233 [DEBUG] [Thread-61304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:08:30.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:08:30.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:08:30.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:08:30.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:08:30.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:08:30.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:08:30.267 [DEBUG] [Thread-61304] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:08:36.502 [DEBUG] [Thread-61306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:08:40.757 [DEBUG] [Thread-61307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:08:44.222 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:08:45.664 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:08:45.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:08:51.532 [DEBUG] [Thread-61308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:09:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:09:00.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:09:00.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:09:00.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 8, 53), 16.71, 31.94, 0.0, 15.39, 16.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:09:00.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:08:53
2025-11-17T21:09:01.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:09:01.191 [DEBUG] [Thread-61309] [transport.py] [_log()] starting thread (client mode): 0xd31ef1c0
2025-11-17T21:09:01.191 [DEBUG] [Thread-61309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:09:01.212 [DEBUG] [Thread-61309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:09:01.212 [INFO] [Thread-61309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:09:01.215 [DEBUG] [Thread-61309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:09:01.215 [DEBUG] [Thread-61309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] client lang: <none>
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] server lang: <none>
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] kex follows: False
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] Compression: none
2025-11-17T21:09:01.216 [DEBUG] [Thread-61309] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:09:01.235 [DEBUG] [Thread-61309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:09:01.236 [DEBUG] [Thread-61309] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:09:01.236 [DEBUG] [Thread-61309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:09:01.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:09:01.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:09:01.238 [DEBUG] [Thread-61309] [transport.py] [_log()] userauth is OK
2025-11-17T21:09:01.238 [DEBUG] [Thread-61309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:09:01.238 [DEBUG] [Thread-61309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:09:01.238 [DEBUG] [Thread-61309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:09:01.239 [DEBUG] [Thread-61309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:09:01.257 [INFO] [Thread-61309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:09:01.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:09:01.890 [DEBUG] [Thread-61309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:09:01.890 [DEBUG] [Thread-61309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:09:01.890 [DEBUG] [Thread-61309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:09:01.930 [DEBUG] [Thread-61309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:09:01.930 [DEBUG] [Thread-61309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:09:01.934 [DEBUG] [Thread-61309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:09:01.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:09:01.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:09:01.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:09:01.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:09:01.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:09:01.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:09:01.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:09:01.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:09:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:09:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.797271 -999.00  +16.80  13.04     37   +2.10 1 1 1 1 1     0    0 13.71 -50.11 ZNESW 13.2 13.0 197.4 15.3 17.3 -23.6 17.3 -23.0 17.1 -22.2 17.2 -23.1
2025-11-17T21:09:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:09:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:09:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.797271
2025-11-17T21:09:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:09:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:09:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:09:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:09:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:09:01.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:08:53', tmtdew=16.71, humidity=31.94, cloud=0.0, wind=15.39, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:08:53', seeing=0.92, atlas_timestamp='2025-11-17T19:08:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:05:00')
2025-11-17T21:09:01.959 [DEBUG] [Thread-61309] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:09:02.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:09:02.056 [DEBUG] [Thread-61312] [transport.py] [_log()] starting thread (client mode): 0xd7bc6e00
2025-11-17T21:09:02.056 [DEBUG] [Thread-61312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:09:02.074 [DEBUG] [Thread-61312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:09:02.074 [INFO] [Thread-61312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:09:02.081 [DEBUG] [Thread-61312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] client lang: <none>
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] server lang: <none>
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] kex follows: False
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] Compression: none
2025-11-17T21:09:02.082 [DEBUG] [Thread-61312] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:09:02.139 [DEBUG] [Thread-61312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:09:02.139 [DEBUG] [Thread-61312] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:09:02.139 [DEBUG] [Thread-61312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:09:02.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:09:02.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:09:02.195 [DEBUG] [Thread-61312] [transport.py] [_log()] userauth is OK
2025-11-17T21:09:02.196 [DEBUG] [Thread-61312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:09:02.196 [DEBUG] [Thread-61312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:09:02.196 [DEBUG] [Thread-61312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:09:02.196 [DEBUG] [Thread-61312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:09:02.213 [INFO] [Thread-61312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:09:02.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:09:02.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:09:03.173 [DEBUG] [Thread-61312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:09:03.173 [DEBUG] [Thread-61312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:09:03.221 [DEBUG] [Thread-61312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:09:03.222 [DEBUG] [Thread-61312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:09:03.233 [DEBUG] [Thread-61312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:09:03.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:09:03.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:09:03.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:09:03.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:09:03.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:09:03.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:09:03.268 [DEBUG] [Thread-61312] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:09:06.564 [DEBUG] [Thread-61314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:09:21.598 [DEBUG] [Thread-61315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:09:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:09:33.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:09:33.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:09:33.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 9, 25), 16.64, 32.12, 0.0, 15.63, 16.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:09:33.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:09:25
2025-11-17T21:09:34.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:09:34.227 [DEBUG] [Thread-61316] [transport.py] [_log()] starting thread (client mode): 0xd7bc5ba0
2025-11-17T21:09:34.227 [DEBUG] [Thread-61316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:09:34.237 [DEBUG] [Thread-61316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:09:34.237 [INFO] [Thread-61316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:09:34.240 [DEBUG] [Thread-61316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:09:34.240 [DEBUG] [Thread-61316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:09:34.240 [DEBUG] [Thread-61316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:09:34.240 [DEBUG] [Thread-61316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:09:34.240 [DEBUG] [Thread-61316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] client lang: <none>
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] server lang: <none>
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] kex follows: False
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] Compression: none
2025-11-17T21:09:34.241 [DEBUG] [Thread-61316] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:09:34.256 [DEBUG] [Thread-61316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:09:34.257 [DEBUG] [Thread-61316] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:09:34.257 [DEBUG] [Thread-61316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:09:34.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:09:34.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:09:34.258 [DEBUG] [Thread-61316] [transport.py] [_log()] userauth is OK
2025-11-17T21:09:34.259 [DEBUG] [Thread-61316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:09:34.259 [DEBUG] [Thread-61316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:09:34.259 [DEBUG] [Thread-61316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:09:34.259 [DEBUG] [Thread-61316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:09:34.282 [INFO] [Thread-61316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:09:34.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:09:34.951 [DEBUG] [Thread-61316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:09:34.951 [DEBUG] [Thread-61316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:09:34.951 [DEBUG] [Thread-61316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:09:34.992 [DEBUG] [Thread-61316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:09:34.993 [DEBUG] [Thread-61316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:09:34.996 [DEBUG] [Thread-61316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:09:35.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:09:35.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:09:35.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:09:35.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:09:35.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:09:35.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:09:35.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:09:35.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:09:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:09:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.797965 -999.00  +16.70  12.65     37   +2.10 1 1 1 1 1     0    0 13.66 -50.52 ZNESW 10.6 12.7 196.4 17.7 17.3 -23.7 17.2 -23.0 17.0 -22.3 17.2 -23.1
2025-11-17T21:09:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:09:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:09:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.797965
2025-11-17T21:09:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:09:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:09:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:09:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:09:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:09:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:09:25', tmtdew=16.64, humidity=32.12, cloud=0.0, wind=15.63, temperature=16.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:09:25', seeing=1.0, atlas_timestamp='2025-11-17T19:09:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:05:00')
2025-11-17T21:09:35.021 [DEBUG] [Thread-61316] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:09:35.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:09:35.120 [DEBUG] [Thread-61319] [transport.py] [_log()] starting thread (client mode): 0xd31509d0
2025-11-17T21:09:35.120 [DEBUG] [Thread-61319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:09:35.137 [DEBUG] [Thread-61319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:09:35.137 [INFO] [Thread-61319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:09:35.148 [DEBUG] [Thread-61319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] client lang: <none>
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] server lang: <none>
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] kex follows: False
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:09:35.149 [DEBUG] [Thread-61319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:09:35.150 [DEBUG] [Thread-61319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:09:35.150 [DEBUG] [Thread-61319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:09:35.150 [DEBUG] [Thread-61319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:09:35.150 [DEBUG] [Thread-61319] [transport.py] [_log()] Compression: none
2025-11-17T21:09:35.150 [DEBUG] [Thread-61319] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:09:35.208 [DEBUG] [Thread-61319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:09:35.209 [DEBUG] [Thread-61319] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:09:35.209 [DEBUG] [Thread-61319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:09:35.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:09:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:09:35.264 [DEBUG] [Thread-61319] [transport.py] [_log()] userauth is OK
2025-11-17T21:09:35.264 [DEBUG] [Thread-61319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:09:35.264 [DEBUG] [Thread-61319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:09:35.264 [DEBUG] [Thread-61319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:09:35.265 [DEBUG] [Thread-61319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:09:35.284 [INFO] [Thread-61319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:09:35.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:09:35.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:09:36.167 [DEBUG] [Thread-61319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:09:36.167 [DEBUG] [Thread-61319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:09:36.215 [DEBUG] [Thread-61319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:09:36.216 [DEBUG] [Thread-61319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:09:36.225 [DEBUG] [Thread-61319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:09:36.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:09:36.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:09:36.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:09:36.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:09:36.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:09:36.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:09:36.266 [DEBUG] [Thread-61319] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:09:36.627 [DEBUG] [Thread-61321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:09:40.836 [DEBUG] [Thread-61322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:09:45.869 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:09:45.870 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:09:51.670 [DEBUG] [Thread-61323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:10:06.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:10:06.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:10:06.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:10:06.697 [DEBUG] [Thread-61324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:10:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 9, 57), 16.6, 32.59, 0.0, 14.38, 16.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:10:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:09:57
2025-11-17T21:10:07.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:10:07.193 [DEBUG] [Thread-61325] [transport.py] [_log()] starting thread (client mode): 0xd31ee8f0
2025-11-17T21:10:07.193 [DEBUG] [Thread-61325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:10:07.215 [DEBUG] [Thread-61325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:10:07.215 [INFO] [Thread-61325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:10:07.218 [DEBUG] [Thread-61325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] client lang: <none>
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] server lang: <none>
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] kex follows: False
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] Compression: none
2025-11-17T21:10:07.219 [DEBUG] [Thread-61325] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:10:07.228 [DEBUG] [Thread-61325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:10:07.228 [DEBUG] [Thread-61325] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:10:07.229 [DEBUG] [Thread-61325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:10:07.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:10:07.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:10:07.230 [DEBUG] [Thread-61325] [transport.py] [_log()] userauth is OK
2025-11-17T21:10:07.231 [DEBUG] [Thread-61325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:10:07.231 [DEBUG] [Thread-61325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:10:07.231 [DEBUG] [Thread-61325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:10:07.231 [DEBUG] [Thread-61325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:10:07.254 [INFO] [Thread-61325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:10:07.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:10:09.804 [DEBUG] [Thread-61325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:10:09.805 [DEBUG] [Thread-61325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:10:09.805 [DEBUG] [Thread-61325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:10:09.846 [DEBUG] [Thread-61325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:10:09.846 [DEBUG] [Thread-61325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:10:09.849 [DEBUG] [Thread-61325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:10:09.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:10:09.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:10:09.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:10:09.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:10:09.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:10:09.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:10:09.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:10:09.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:10:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:10:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.798313 -999.00  +16.70  13.54     37   +2.10 1 1 1 1 1     0    0 13.67 -51.76 ZNESW 10.2 13.5 195.8 16.2 17.3 -23.7 17.2 -23.0 17.0 -22.3 17.2 -23.2
2025-11-17T21:10:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:10:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:10:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.798313
2025-11-17T21:10:09.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:10:09.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:10:09.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:10:09.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:10:09.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:10:09.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:09:57', tmtdew=16.6, humidity=32.59, cloud=0.0, wind=14.38, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:09:57', seeing=1.17, atlas_timestamp='2025-11-17T19:09:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:08:00')
2025-11-17T21:10:09.900 [DEBUG] [Thread-61325] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:10:09.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:10:09.999 [DEBUG] [Thread-61328] [transport.py] [_log()] starting thread (client mode): 0xd07bee00
2025-11-17T21:10:09.999 [DEBUG] [Thread-61328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:10:10.014 [DEBUG] [Thread-61328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:10:10.014 [INFO] [Thread-61328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] client lang: <none>
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] server lang: <none>
2025-11-17T21:10:10.022 [DEBUG] [Thread-61328] [transport.py] [_log()] kex follows: False
2025-11-17T21:10:10.023 [DEBUG] [Thread-61328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:10:10.023 [DEBUG] [Thread-61328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:10:10.023 [DEBUG] [Thread-61328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:10:10.023 [DEBUG] [Thread-61328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:10:10.023 [DEBUG] [Thread-61328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:10:10.023 [DEBUG] [Thread-61328] [transport.py] [_log()] Compression: none
2025-11-17T21:10:10.023 [DEBUG] [Thread-61328] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:10:10.081 [DEBUG] [Thread-61328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:10:10.081 [DEBUG] [Thread-61328] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:10:10.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:10:10.082 [DEBUG] [Thread-61328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:10:10.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:10:10.136 [DEBUG] [Thread-61328] [transport.py] [_log()] userauth is OK
2025-11-17T21:10:10.136 [DEBUG] [Thread-61328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:10:10.136 [DEBUG] [Thread-61328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:10:10.136 [DEBUG] [Thread-61328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:10:10.137 [DEBUG] [Thread-61328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:10:10.156 [INFO] [Thread-61328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:10:10.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:10:10.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:10:10.996 [DEBUG] [Thread-61328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:10:10.996 [DEBUG] [Thread-61328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:10:11.044 [DEBUG] [Thread-61328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:10:11.044 [DEBUG] [Thread-61328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:10:11.053 [DEBUG] [Thread-61328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:10:11.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:10:11.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:10:11.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:10:11.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:10:11.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:10:11.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:10:11.095 [DEBUG] [Thread-61328] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:10:21.723 [DEBUG] [Thread-61330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:10:36.756 [DEBUG] [Thread-61331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:10:40.896 [DEBUG] [Thread-61332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:10:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:10:41.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:10:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:10:41.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 10, 29), 16.54, 32.74, 0.0, 14.91, 16.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:10:41.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:10:29
2025-11-17T21:10:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:10:42.051 [DEBUG] [Thread-61333] [transport.py] [_log()] starting thread (client mode): 0xd0713b20
2025-11-17T21:10:42.051 [DEBUG] [Thread-61333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:10:42.066 [DEBUG] [Thread-61333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:10:42.066 [INFO] [Thread-61333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] client lang: <none>
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] server lang: <none>
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] kex follows: False
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:10:42.069 [DEBUG] [Thread-61333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:10:42.070 [DEBUG] [Thread-61333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:10:42.070 [DEBUG] [Thread-61333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:10:42.070 [DEBUG] [Thread-61333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:10:42.070 [DEBUG] [Thread-61333] [transport.py] [_log()] Compression: none
2025-11-17T21:10:42.070 [DEBUG] [Thread-61333] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:10:42.090 [DEBUG] [Thread-61333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:10:42.091 [DEBUG] [Thread-61333] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:10:42.091 [DEBUG] [Thread-61333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:10:42.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:10:42.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:10:42.093 [DEBUG] [Thread-61333] [transport.py] [_log()] userauth is OK
2025-11-17T21:10:42.093 [DEBUG] [Thread-61333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:10:42.094 [DEBUG] [Thread-61333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:10:42.094 [DEBUG] [Thread-61333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:10:42.094 [DEBUG] [Thread-61333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:10:42.129 [INFO] [Thread-61333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:10:42.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:10:42.800 [DEBUG] [Thread-61333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:10:42.801 [DEBUG] [Thread-61333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:10:42.801 [DEBUG] [Thread-61333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:10:42.841 [DEBUG] [Thread-61333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:10:42.842 [DEBUG] [Thread-61333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:10:42.845 [DEBUG] [Thread-61333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:10:42.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:10:42.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:10:42.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:10:42.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:10:42.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:10:42.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:10:42.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:10:42.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:10:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:10:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.798659 -999.00  +16.70  13.86     37   +2.20 1 1 1 1 1     0    0 13.52 -55.73 ZNESW 12.3 13.9 194.0 17.0 17.3 -23.7 17.2 -23.0 17.0 -22.2 17.2 -23.2
2025-11-17T21:10:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:10:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:10:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.798659
2025-11-17T21:10:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:10:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:10:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:10:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:10:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:10:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:10:29', tmtdew=16.54, humidity=32.74, cloud=0.0, wind=14.91, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:10:29', seeing=1.21, atlas_timestamp='2025-11-17T19:10:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:08:00')
2025-11-17T21:10:42.873 [DEBUG] [Thread-61333] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:10:42.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:10:42.969 [DEBUG] [Thread-61336] [transport.py] [_log()] starting thread (client mode): 0xd3152710
2025-11-17T21:10:42.970 [DEBUG] [Thread-61336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:10:42.984 [DEBUG] [Thread-61336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:10:42.984 [INFO] [Thread-61336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] client lang: <none>
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] server lang: <none>
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] kex follows: False
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:10:42.992 [DEBUG] [Thread-61336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:10:42.993 [DEBUG] [Thread-61336] [transport.py] [_log()] Compression: none
2025-11-17T21:10:42.993 [DEBUG] [Thread-61336] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:10:43.048 [DEBUG] [Thread-61336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:10:43.049 [DEBUG] [Thread-61336] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:10:43.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:10:43.050 [DEBUG] [Thread-61336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:10:43.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:10:43.105 [DEBUG] [Thread-61336] [transport.py] [_log()] userauth is OK
2025-11-17T21:10:43.106 [DEBUG] [Thread-61336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:10:43.106 [DEBUG] [Thread-61336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:10:43.106 [DEBUG] [Thread-61336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:10:43.106 [DEBUG] [Thread-61336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:10:43.125 [INFO] [Thread-61336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:10:43.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:10:43.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:10:43.958 [DEBUG] [Thread-61336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:10:43.958 [DEBUG] [Thread-61336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:10:44.006 [DEBUG] [Thread-61336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:10:44.006 [DEBUG] [Thread-61336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:10:44.015 [DEBUG] [Thread-61336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:10:44.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:10:44.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:10:44.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:10:44.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:10:44.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:10:44.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:10:44.049 [DEBUG] [Thread-61336] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:10:46.072 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:10:46.073 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:10:51.784 [DEBUG] [Thread-61338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:11:06.829 [DEBUG] [Thread-61339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:11:14.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:11:14.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:11:14.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:11:14.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 11, 1), 16.45, 32.8, 0.0, 15.37, 16.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:11:14.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:11:01
2025-11-17T21:11:14.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:11:15.015 [DEBUG] [Thread-61340] [transport.py] [_log()] starting thread (client mode): 0xd0702080
2025-11-17T21:11:15.015 [DEBUG] [Thread-61340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:11:15.031 [DEBUG] [Thread-61340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:11:15.031 [INFO] [Thread-61340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:11:15.034 [DEBUG] [Thread-61340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:11:15.034 [DEBUG] [Thread-61340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:11:15.034 [DEBUG] [Thread-61340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:11:15.034 [DEBUG] [Thread-61340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:11:15.034 [DEBUG] [Thread-61340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:11:15.034 [DEBUG] [Thread-61340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:11:15.034 [DEBUG] [Thread-61340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] client lang: <none>
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] server lang: <none>
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] kex follows: False
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] Compression: none
2025-11-17T21:11:15.035 [DEBUG] [Thread-61340] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:11:15.051 [DEBUG] [Thread-61340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:11:15.051 [DEBUG] [Thread-61340] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:11:15.051 [DEBUG] [Thread-61340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:11:15.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:11:15.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:11:15.052 [DEBUG] [Thread-61340] [transport.py] [_log()] userauth is OK
2025-11-17T21:11:15.052 [DEBUG] [Thread-61340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:11:15.052 [DEBUG] [Thread-61340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:11:15.052 [DEBUG] [Thread-61340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:11:15.052 [DEBUG] [Thread-61340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:11:15.065 [INFO] [Thread-61340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:11:15.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:11:15.690 [DEBUG] [Thread-61340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:11:15.690 [DEBUG] [Thread-61340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:11:15.690 [DEBUG] [Thread-61340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:11:15.731 [DEBUG] [Thread-61340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:11:15.731 [DEBUG] [Thread-61340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:11:15.733 [DEBUG] [Thread-61340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:11:15.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:11:15.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:11:15.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:11:15.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:11:15.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:11:15.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:11:15.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.799007 -999.00  +16.70   5.63     37   +2.20 1 1 1 1 1     0    0 13.63 -56.74 ZNESW 10.8 5.6 190.0 10.4 17.3 -23.7 17.2 -22.9 16.9 -22.3 17.2 -23.1
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.799007
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:11:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:11:01', tmtdew=16.45, humidity=32.8, cloud=0.0, wind=15.37, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:11:01', seeing=1.15, atlas_timestamp='2025-11-17T19:10:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:08:00')
2025-11-17T21:11:15.753 [DEBUG] [Thread-61340] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:11:15.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:11:15.839 [DEBUG] [Thread-61343] [transport.py] [_log()] starting thread (client mode): 0xd7bc7d30
2025-11-17T21:11:15.839 [DEBUG] [Thread-61343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:11:15.854 [DEBUG] [Thread-61343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:11:15.854 [INFO] [Thread-61343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:11:15.862 [DEBUG] [Thread-61343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] client lang: <none>
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] server lang: <none>
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] kex follows: False
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] Compression: none
2025-11-17T21:11:15.863 [DEBUG] [Thread-61343] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:11:15.919 [DEBUG] [Thread-61343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:11:15.919 [DEBUG] [Thread-61343] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:11:15.919 [DEBUG] [Thread-61343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:11:15.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:11:15.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:11:15.976 [DEBUG] [Thread-61343] [transport.py] [_log()] userauth is OK
2025-11-17T21:11:15.976 [DEBUG] [Thread-61343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:11:15.976 [DEBUG] [Thread-61343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:11:15.976 [DEBUG] [Thread-61343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:11:15.976 [DEBUG] [Thread-61343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:11:15.994 [INFO] [Thread-61343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:11:15.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:11:15.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:11:16.839 [DEBUG] [Thread-61343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:11:16.840 [DEBUG] [Thread-61343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:11:16.887 [DEBUG] [Thread-61343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:11:16.887 [DEBUG] [Thread-61343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:11:16.896 [DEBUG] [Thread-61343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:11:16.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:11:16.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:11:16.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:11:16.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:11:16.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:11:16.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:11:16.930 [DEBUG] [Thread-61343] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:11:21.860 [DEBUG] [Thread-61345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:11:36.899 [DEBUG] [Thread-61346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:11:40.954 [DEBUG] [Thread-61347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:11:46.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:11:46.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:11:46.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:11:46.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:11:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:11:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 11, 33), 16.47, 32.77, 0.0, 14.72, 16.58, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:11:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:11:33
2025-11-17T21:11:47.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:11:47.891 [DEBUG] [Thread-61348] [transport.py] [_log()] starting thread (client mode): 0xd0712e90
2025-11-17T21:11:47.891 [DEBUG] [Thread-61348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:11:47.911 [DEBUG] [Thread-61348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:11:47.911 [INFO] [Thread-61348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:11:47.922 [DEBUG] [Thread-61348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:11:47.923 [DEBUG] [Thread-61348] [transport.py] [_log()] client lang: <none>
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] server lang: <none>
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] kex follows: False
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] Compression: none
2025-11-17T21:11:47.924 [DEBUG] [Thread-61348] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:11:47.942 [DEBUG] [Thread-61348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:11:47.943 [DEBUG] [Thread-61348] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:11:47.943 [DEBUG] [Thread-61348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:11:47.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:11:47.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:11:47.945 [DEBUG] [Thread-61348] [transport.py] [_log()] userauth is OK
2025-11-17T21:11:47.946 [DEBUG] [Thread-61348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:11:47.946 [DEBUG] [Thread-61348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:11:47.946 [DEBUG] [Thread-61348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:11:47.946 [DEBUG] [Thread-61348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:11:47.969 [INFO] [Thread-61348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:11:47.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:11:48.611 [DEBUG] [Thread-61348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:11:48.611 [DEBUG] [Thread-61348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:11:48.611 [DEBUG] [Thread-61348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:11:48.652 [DEBUG] [Thread-61348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:11:48.653 [DEBUG] [Thread-61348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:11:48.656 [DEBUG] [Thread-61348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:11:48.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:11:48.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:11:48.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:11:48.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:11:48.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:11:48.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:11:48.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:11:48.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:11:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:11:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.799354 -999.00  +16.70  10.40     37   +2.20 1 1 1 1 1     0    0 13.29 -55.86 ZNESW 13.8 10.4 194.2 14.5 17.2 -23.6 17.2 -22.9 17.0 -22.2 17.2 -23.2
2025-11-17T21:11:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:11:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:11:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.799354
2025-11-17T21:11:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:11:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:11:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:11:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:11:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:11:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:11:33', tmtdew=16.47, humidity=32.77, cloud=0.0, wind=14.72, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:11:33', seeing=1.15, atlas_timestamp='2025-11-17T19:11:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:08:00')
2025-11-17T21:11:48.681 [DEBUG] [Thread-61348] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:11:48.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:11:48.777 [DEBUG] [Thread-61351] [transport.py] [_log()] starting thread (client mode): 0xd3134520
2025-11-17T21:11:48.777 [DEBUG] [Thread-61351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:11:48.792 [DEBUG] [Thread-61351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:11:48.792 [INFO] [Thread-61351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:11:48.800 [DEBUG] [Thread-61351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:11:48.800 [DEBUG] [Thread-61351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:11:48.800 [DEBUG] [Thread-61351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:11:48.800 [DEBUG] [Thread-61351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:11:48.800 [DEBUG] [Thread-61351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:11:48.800 [DEBUG] [Thread-61351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:11:48.800 [DEBUG] [Thread-61351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:11:48.800 [DEBUG] [Thread-61351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:11:48.801 [DEBUG] [Thread-61351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:11:48.801 [DEBUG] [Thread-61351] [transport.py] [_log()] client lang: <none>
2025-11-17T21:11:48.801 [DEBUG] [Thread-61351] [transport.py] [_log()] server lang: <none>
2025-11-17T21:11:48.801 [DEBUG] [Thread-61351] [transport.py] [_log()] kex follows: False
2025-11-17T21:11:48.801 [DEBUG] [Thread-61351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:11:48.801 [DEBUG] [Thread-61351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:11:48.801 [DEBUG] [Thread-61351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:11:48.801 [DEBUG] [Thread-61351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:11:48.802 [DEBUG] [Thread-61351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:11:48.802 [DEBUG] [Thread-61351] [transport.py] [_log()] Compression: none
2025-11-17T21:11:48.802 [DEBUG] [Thread-61351] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:11:48.860 [DEBUG] [Thread-61351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:11:48.861 [DEBUG] [Thread-61351] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:11:48.861 [DEBUG] [Thread-61351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:11:48.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:11:48.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:11:48.916 [DEBUG] [Thread-61351] [transport.py] [_log()] userauth is OK
2025-11-17T21:11:48.916 [DEBUG] [Thread-61351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:11:48.916 [DEBUG] [Thread-61351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:11:48.916 [DEBUG] [Thread-61351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:11:48.916 [DEBUG] [Thread-61351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:11:48.930 [INFO] [Thread-61351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:11:48.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:11:48.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:11:49.890 [DEBUG] [Thread-61351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:11:49.890 [DEBUG] [Thread-61351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:11:49.938 [DEBUG] [Thread-61351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:11:49.938 [DEBUG] [Thread-61351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:11:49.946 [DEBUG] [Thread-61351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:11:49.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:11:49.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:11:49.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
2025-11-17T21:11:49.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:11:49.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:11:49.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:11:49.977 [DEBUG] [Thread-61351] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:11:51.927 [DEBUG] [Thread-61353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:12:06.963 [DEBUG] [Thread-61354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:12:19.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:12:20.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:12:20.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:12:20.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 12, 5), 16.4, 32.94, 0.0, 15.47, 16.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:12:20.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:12:05
2025-11-17T21:12:20.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:12:20.916 [DEBUG] [Thread-61355] [transport.py] [_log()] starting thread (client mode): 0xd317f3d0
2025-11-17T21:12:20.916 [DEBUG] [Thread-61355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:12:20.936 [DEBUG] [Thread-61355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:12:20.936 [INFO] [Thread-61355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:12:20.939 [DEBUG] [Thread-61355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] client lang: <none>
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] server lang: <none>
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] kex follows: False
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] Compression: none
2025-11-17T21:12:20.940 [DEBUG] [Thread-61355] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:12:20.956 [DEBUG] [Thread-61355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:12:20.956 [DEBUG] [Thread-61355] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:12:20.957 [DEBUG] [Thread-61355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:12:20.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:12:20.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:12:20.997 [DEBUG] [Thread-61355] [transport.py] [_log()] userauth is OK
2025-11-17T21:12:20.998 [DEBUG] [Thread-61355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:12:20.998 [DEBUG] [Thread-61355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:12:20.998 [DEBUG] [Thread-61355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:12:20.998 [DEBUG] [Thread-61355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:12:21.024 [INFO] [Thread-61355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:12:21.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:12:21.657 [DEBUG] [Thread-61355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:12:21.658 [DEBUG] [Thread-61355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:12:21.658 [DEBUG] [Thread-61355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:12:21.698 [DEBUG] [Thread-61355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:12:21.698 [DEBUG] [Thread-61355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:12:21.701 [DEBUG] [Thread-61355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:12:21.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:12:21.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:12:21.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:12:21.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:12:21.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:12:21.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:12:21.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:12:21.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:12:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:12:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.799701 -999.00  +16.70   7.13     37   +2.20 1 1 1 1 1     0    0 13.48 -60.09 ZNESW 6.4 7.1 188.2 11.7 17.2 -23.7 17.1 -22.9 16.9 -22.4 17.2 -23.2
2025-11-17T21:12:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:12:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:12:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.799701
2025-11-17T21:12:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:12:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:12:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:12:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:12:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:12:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:12:05', tmtdew=16.4, humidity=32.94, cloud=0.0, wind=15.47, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:12:05', seeing=1.3, atlas_timestamp='2025-11-17T19:11:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.07124999999999915, 0.09675000000000011, 0.04475000000000051, 0.00549999999999784, 0.07949999999999946, 0.14975000000000094, 0.032999999999999474, 0.10125000000000028, 0.058499999999998664, 0.11899999999999977, 0.12924999999999898, 0.10849999999999937, 0.13100000000000023, 0.13824999999999932, 0.05150000000000077, 0.06599999999999895, 0.09825000000000017, 0.17300000000000004, 0.15399999999999991, 0.14324999999999832, 0.1144999999999996, 0.08374999999999844, 0.05825000000000102, 0.06574999999999953, 0.11599999999999966, 0.3070000000000004, 0.3362499999999997, 0.25849999999999973, 0.18700000000000117, -0.0029999999999983373, 0.10500000000000043, 0.11150000000000126, 0.16825000000000045], zp_timestamp='2025-11-17T19:08:00')
2025-11-17T21:12:21.727 [DEBUG] [Thread-61355] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:12:21.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:12:21.826 [DEBUG] [Thread-61358] [transport.py] [_log()] starting thread (client mode): 0xd317da20
2025-11-17T21:12:21.826 [DEBUG] [Thread-61358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:12:21.840 [DEBUG] [Thread-61358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:12:21.841 [INFO] [Thread-61358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] client lang: <none>
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] server lang: <none>
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] kex follows: False
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:12:21.848 [DEBUG] [Thread-61358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:12:21.849 [DEBUG] [Thread-61358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:12:21.849 [DEBUG] [Thread-61358] [transport.py] [_log()] Compression: none
2025-11-17T21:12:21.849 [DEBUG] [Thread-61358] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:12:21.912 [DEBUG] [Thread-61358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:12:21.912 [DEBUG] [Thread-61358] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:12:21.912 [DEBUG] [Thread-61358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:12:21.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:12:21.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:12:21.968 [DEBUG] [Thread-61358] [transport.py] [_log()] userauth is OK
2025-11-17T21:12:21.968 [DEBUG] [Thread-61358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:12:21.968 [DEBUG] [Thread-61358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:12:21.968 [DEBUG] [Thread-61358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:12:21.968 [DEBUG] [Thread-61358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:12:21.987 [INFO] [Thread-61358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:12:21.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:12:21.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:12:21.992 [DEBUG] [Thread-61360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:12:22.809 [DEBUG] [Thread-61358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:12:22.809 [DEBUG] [Thread-61358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:12:22.857 [DEBUG] [Thread-61358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:12:22.857 [DEBUG] [Thread-61358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:12:22.865 [DEBUG] [Thread-61358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:12:22.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:12:22.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:12:22.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:12:22.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:12:22.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:12:22.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:12:22.898 [DEBUG] [Thread-61358] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:12:37.029 [DEBUG] [Thread-61361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:12:41.012 [DEBUG] [Thread-61362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:12:46.479 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:12:46.480 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:12:52.061 [DEBUG] [Thread-61363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:12:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:12:52.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:12:52.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:12:53.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 12, 37), 16.34, 32.94, 0.0, 13.69, 16.5, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:12:53.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:12:37
2025-11-17T21:12:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:12:53.834 [DEBUG] [Thread-61364] [transport.py] [_log()] starting thread (client mode): 0xd31357b0
2025-11-17T21:12:53.834 [DEBUG] [Thread-61364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:12:53.854 [DEBUG] [Thread-61364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:12:53.854 [INFO] [Thread-61364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:12:53.857 [DEBUG] [Thread-61364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:12:53.857 [DEBUG] [Thread-61364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:12:53.857 [DEBUG] [Thread-61364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:12:53.857 [DEBUG] [Thread-61364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:12:53.857 [DEBUG] [Thread-61364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:12:53.857 [DEBUG] [Thread-61364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:12:53.857 [DEBUG] [Thread-61364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] client lang: <none>
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] server lang: <none>
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] kex follows: False
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] Compression: none
2025-11-17T21:12:53.858 [DEBUG] [Thread-61364] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:12:53.877 [DEBUG] [Thread-61364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:12:53.878 [DEBUG] [Thread-61364] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:12:53.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:12:53.878 [DEBUG] [Thread-61364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:12:53.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:12:53.881 [DEBUG] [Thread-61364] [transport.py] [_log()] userauth is OK
2025-11-17T21:12:53.881 [DEBUG] [Thread-61364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:12:53.881 [DEBUG] [Thread-61364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:12:53.881 [DEBUG] [Thread-61364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:12:53.881 [DEBUG] [Thread-61364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:12:53.905 [INFO] [Thread-61364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:12:53.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:12:54.512 [DEBUG] [Thread-61364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:12:54.512 [DEBUG] [Thread-61364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:12:54.512 [DEBUG] [Thread-61364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:12:54.553 [DEBUG] [Thread-61364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:12:54.553 [DEBUG] [Thread-61364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:12:54.556 [DEBUG] [Thread-61364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:12:54.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:12:54.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:12:54.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:12:54.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:12:54.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:12:54.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:12:54.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:12:54.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:12:54.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:12:54.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.800049 -999.00  +16.60   7.98     37   +2.20 1 1 1 1 1     0    0 13.11 -62.02 ZNESW 10.6 8.0 198.8 16.6 17.3 -23.7 17.1 -22.9 16.9 -22.3 17.2 -23.2
2025-11-17T21:12:54.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:12:54.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:12:54.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.800049
2025-11-17T21:12:54.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:12:54.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:12:54.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:12:54.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:12:54.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:12:54.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:12:37', tmtdew=16.34, humidity=32.94, cloud=0.0, wind=13.69, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:12:37', seeing=1.14, atlas_timestamp='2025-11-17T19:12:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.10025000000000084, 0.10025000000000084, 0.018499999999999517, 0.12149999999999928, 0.17675000000000196, 0.0909999999999993, 0.07424999999999926, 0.09199999999999875, 0.12100000000000044, 0.13824999999999932, 0.136000000000001, 0.1429999999999989, 0.13624999999999865, 0.04550000000000054, 0.05150000000000077, 0.09224999999999994, 0.1385000000000005, 0.2134999999999998, 0.16225000000000023, 0.1659999999999986, 0.11374999999999957, 0.01925000000000132, 0.07624999999999993, 0.09999999999999964, 0.22750000000000092, 0.3207500000000003, 0.2835000000000001, 0.20000000000000107, 0.04650000000000176, 0.12049999999999983, 0.09800000000000075, 0.15124999999999922], zp_timestamp='2025-11-17T19:11:00')
2025-11-17T21:12:54.580 [DEBUG] [Thread-61364] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:12:54.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:12:54.687 [DEBUG] [Thread-61367] [transport.py] [_log()] starting thread (client mode): 0xd31ef760
2025-11-17T21:12:54.687 [DEBUG] [Thread-61367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:12:54.701 [DEBUG] [Thread-61367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:12:54.701 [INFO] [Thread-61367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] client lang: <none>
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] server lang: <none>
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] kex follows: False
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:12:54.709 [DEBUG] [Thread-61367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:12:54.710 [DEBUG] [Thread-61367] [transport.py] [_log()] Compression: none
2025-11-17T21:12:54.710 [DEBUG] [Thread-61367] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:12:54.772 [DEBUG] [Thread-61367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:12:54.772 [DEBUG] [Thread-61367] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:12:54.773 [DEBUG] [Thread-61367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:12:54.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:12:54.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:12:54.828 [DEBUG] [Thread-61367] [transport.py] [_log()] userauth is OK
2025-11-17T21:12:54.828 [DEBUG] [Thread-61367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:12:54.828 [DEBUG] [Thread-61367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:12:54.828 [DEBUG] [Thread-61367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:12:54.829 [DEBUG] [Thread-61367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:12:54.848 [INFO] [Thread-61367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:12:54.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:12:54.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:12:55.674 [DEBUG] [Thread-61367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:12:55.675 [DEBUG] [Thread-61367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:12:55.722 [DEBUG] [Thread-61367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:12:55.722 [DEBUG] [Thread-61367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:12:55.735 [DEBUG] [Thread-61367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:12:55.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:12:55.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:12:55.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:12:55.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:12:55.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:12:55.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:12:55.779 [DEBUG] [Thread-61367] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:13:07.092 [DEBUG] [Thread-61369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:13:22.134 [DEBUG] [Thread-61370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:13:25.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:13:25.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:13:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:13:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 13, 9), 16.32, 33.0, 0.0, 12.33, 16.53, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:13:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:13:09
2025-11-17T21:13:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:13:26.709 [DEBUG] [Thread-61371] [transport.py] [_log()] starting thread (client mode): 0xd3134e50
2025-11-17T21:13:26.709 [DEBUG] [Thread-61371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:13:26.728 [DEBUG] [Thread-61371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:13:26.729 [INFO] [Thread-61371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:13:26.731 [DEBUG] [Thread-61371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] client lang: <none>
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] server lang: <none>
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] kex follows: False
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] Compression: none
2025-11-17T21:13:26.732 [DEBUG] [Thread-61371] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:13:26.748 [DEBUG] [Thread-61371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:13:26.748 [DEBUG] [Thread-61371] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:13:26.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:13:26.749 [DEBUG] [Thread-61371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:13:26.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:13:26.751 [DEBUG] [Thread-61371] [transport.py] [_log()] userauth is OK
2025-11-17T21:13:26.752 [DEBUG] [Thread-61371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:13:26.752 [DEBUG] [Thread-61371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:13:26.752 [DEBUG] [Thread-61371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:13:26.752 [DEBUG] [Thread-61371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:13:26.767 [INFO] [Thread-61371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:13:26.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:13:27.396 [DEBUG] [Thread-61371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:13:27.396 [DEBUG] [Thread-61371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:13:27.397 [DEBUG] [Thread-61371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:13:27.437 [DEBUG] [Thread-61371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:13:27.437 [DEBUG] [Thread-61371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:13:27.440 [DEBUG] [Thread-61371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:13:27.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:13:27.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:13:27.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:13:27.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:13:27.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:13:27.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:13:27.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:13:27.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:13:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:13:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.800743 -999.00  +16.60  10.15     38   +2.20 1 1 1 1 1     0    0 13.02 -62.78 ZNESW 15.2 10.2 190.4 15.2 17.2 -23.7 17.1 -22.9 16.9 -22.3 17.2 -23.1
2025-11-17T21:13:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:13:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:13:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.800743
2025-11-17T21:13:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:13:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:13:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:13:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:13:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:13:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:13:09', tmtdew=16.32, humidity=33.0, cloud=0.0, wind=12.33, temperature=16.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:13:09', seeing=1.05, atlas_timestamp='2025-11-17T19:13:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.10025000000000084, 0.10025000000000084, 0.018499999999999517, 0.12149999999999928, 0.17675000000000196, 0.0909999999999993, 0.07424999999999926, 0.09199999999999875, 0.12100000000000044, 0.13824999999999932, 0.136000000000001, 0.1429999999999989, 0.13624999999999865, 0.04550000000000054, 0.05150000000000077, 0.09224999999999994, 0.1385000000000005, 0.2134999999999998, 0.16225000000000023, 0.1659999999999986, 0.11374999999999957, 0.01925000000000132, 0.07624999999999993, 0.09999999999999964, 0.22750000000000092, 0.3207500000000003, 0.2835000000000001, 0.20000000000000107, 0.04650000000000176, 0.12049999999999983, 0.09800000000000075, 0.15124999999999922], zp_timestamp='2025-11-17T19:11:00')
2025-11-17T21:13:27.465 [DEBUG] [Thread-61371] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:13:27.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:13:27.561 [DEBUG] [Thread-61374] [transport.py] [_log()] starting thread (client mode): 0xd317e6e0
2025-11-17T21:13:27.561 [DEBUG] [Thread-61374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:13:27.576 [DEBUG] [Thread-61374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:13:27.576 [INFO] [Thread-61374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:13:27.583 [DEBUG] [Thread-61374] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:13:27.583 [DEBUG] [Thread-61374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:13:27.583 [DEBUG] [Thread-61374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:13:27.583 [DEBUG] [Thread-61374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] client lang: <none>
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] server lang: <none>
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] kex follows: False
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] Compression: none
2025-11-17T21:13:27.584 [DEBUG] [Thread-61374] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:13:27.644 [DEBUG] [Thread-61374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:13:27.644 [DEBUG] [Thread-61374] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:13:27.645 [DEBUG] [Thread-61374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:13:27.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:13:27.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:13:27.700 [DEBUG] [Thread-61374] [transport.py] [_log()] userauth is OK
2025-11-17T21:13:27.700 [DEBUG] [Thread-61374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:13:27.700 [DEBUG] [Thread-61374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:13:27.700 [DEBUG] [Thread-61374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:13:27.700 [DEBUG] [Thread-61374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:13:27.719 [INFO] [Thread-61374] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:13:27.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:13:27.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:13:28.565 [DEBUG] [Thread-61374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:13:28.565 [DEBUG] [Thread-61374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:13:28.619 [DEBUG] [Thread-61374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:13:28.619 [DEBUG] [Thread-61374] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:13:28.632 [DEBUG] [Thread-61374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:13:28.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:13:28.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:13:28.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:13:28.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:13:28.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:13:28.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:13:28.689 [DEBUG] [Thread-61374] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:13:37.167 [DEBUG] [Thread-61376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:13:41.098 [DEBUG] [Thread-61377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:13:46.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:13:46.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:13:52.209 [DEBUG] [Thread-61378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:13:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:13:58.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:13:58.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:13:59.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 13, 41), 16.29, 32.94, 0.0, 14.65, 16.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:13:59.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:13:41
2025-11-17T21:13:59.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:13:59.642 [DEBUG] [Thread-61379] [transport.py] [_log()] starting thread (client mode): 0xd31353f0
2025-11-17T21:13:59.642 [DEBUG] [Thread-61379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:13:59.662 [DEBUG] [Thread-61379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:13:59.663 [INFO] [Thread-61379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:13:59.666 [DEBUG] [Thread-61379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:13:59.666 [DEBUG] [Thread-61379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:13:59.666 [DEBUG] [Thread-61379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:13:59.666 [DEBUG] [Thread-61379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:13:59.666 [DEBUG] [Thread-61379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:13:59.666 [DEBUG] [Thread-61379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:13:59.666 [DEBUG] [Thread-61379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:13:59.666 [DEBUG] [Thread-61379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] client lang: <none>
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] server lang: <none>
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] kex follows: False
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] Compression: none
2025-11-17T21:13:59.667 [DEBUG] [Thread-61379] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:13:59.684 [DEBUG] [Thread-61379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:13:59.684 [DEBUG] [Thread-61379] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:13:59.685 [DEBUG] [Thread-61379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:13:59.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:13:59.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:13:59.686 [DEBUG] [Thread-61379] [transport.py] [_log()] userauth is OK
2025-11-17T21:13:59.687 [DEBUG] [Thread-61379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:13:59.687 [DEBUG] [Thread-61379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:13:59.687 [DEBUG] [Thread-61379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:13:59.687 [DEBUG] [Thread-61379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:13:59.705 [INFO] [Thread-61379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:13:59.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:14:00.321 [DEBUG] [Thread-61379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:14:00.321 [DEBUG] [Thread-61379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:14:00.322 [DEBUG] [Thread-61379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:14:00.362 [DEBUG] [Thread-61379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:14:00.362 [DEBUG] [Thread-61379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:14:00.365 [DEBUG] [Thread-61379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:14:00.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:14:00.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:14:00.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:14:00.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:14:00.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:14:00.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:14:00.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:14:00.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:14:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:14:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.801090 -999.00  +16.60  10.14     38   +2.20 1 1 1 1 1     0    0 12.67 -66.63 ZNESW 11.4 10.1 189.6 17.1 17.2 -23.7 17.1 -22.9 16.9 -22.3 17.1 -23.2
2025-11-17T21:14:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:14:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:14:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.801090
2025-11-17T21:14:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:14:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:14:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:14:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:14:00.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:14:00.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:13:41', tmtdew=16.29, humidity=32.94, cloud=0.0, wind=14.65, temperature=16.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:13:41', seeing=1.17, atlas_timestamp='2025-11-17T19:13:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.10025000000000084, 0.10025000000000084, 0.018499999999999517, 0.12149999999999928, 0.17675000000000196, 0.0909999999999993, 0.07424999999999926, 0.09199999999999875, 0.12100000000000044, 0.13824999999999932, 0.136000000000001, 0.1429999999999989, 0.13624999999999865, 0.04550000000000054, 0.05150000000000077, 0.09224999999999994, 0.1385000000000005, 0.2134999999999998, 0.16225000000000023, 0.1659999999999986, 0.11374999999999957, 0.01925000000000132, 0.07624999999999993, 0.09999999999999964, 0.22750000000000092, 0.3207500000000003, 0.2835000000000001, 0.20000000000000107, 0.04650000000000176, 0.12049999999999983, 0.09800000000000075, 0.15124999999999922], zp_timestamp='2025-11-17T19:11:00')
2025-11-17T21:14:00.392 [DEBUG] [Thread-61379] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:14:00.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:14:00.488 [DEBUG] [Thread-61382] [transport.py] [_log()] starting thread (client mode): 0xd31b1270
2025-11-17T21:14:00.488 [DEBUG] [Thread-61382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:14:00.503 [DEBUG] [Thread-61382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:14:00.504 [INFO] [Thread-61382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:14:00.511 [DEBUG] [Thread-61382] [transport.py] [_log()] client lang: <none>
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] server lang: <none>
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] kex follows: False
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] Compression: none
2025-11-17T21:14:00.512 [DEBUG] [Thread-61382] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:14:00.567 [DEBUG] [Thread-61382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:14:00.568 [DEBUG] [Thread-61382] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:14:00.568 [DEBUG] [Thread-61382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:14:00.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:14:00.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:14:00.624 [DEBUG] [Thread-61382] [transport.py] [_log()] userauth is OK
2025-11-17T21:14:00.624 [DEBUG] [Thread-61382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:14:00.624 [DEBUG] [Thread-61382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:14:00.625 [DEBUG] [Thread-61382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:14:00.625 [DEBUG] [Thread-61382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:14:00.643 [INFO] [Thread-61382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:14:00.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:14:00.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:14:01.477 [DEBUG] [Thread-61382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:14:01.477 [DEBUG] [Thread-61382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:14:01.525 [DEBUG] [Thread-61382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:14:01.525 [DEBUG] [Thread-61382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:14:01.534 [DEBUG] [Thread-61382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:14:01.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:14:01.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:14:01.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:14:01.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:14:01.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:14:01.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:14:01.569 [DEBUG] [Thread-61382] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:14:07.237 [DEBUG] [Thread-61384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:14:22.277 [DEBUG] [Thread-61385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:14:31.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:14:31.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:14:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:14:32.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 14, 13), 16.3, 32.92, 0.0, 14.2, 16.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:14:32.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:14:13
2025-11-17T21:14:32.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:14:32.540 [DEBUG] [Thread-61386] [transport.py] [_log()] starting thread (client mode): 0xd31ee590
2025-11-17T21:14:32.540 [DEBUG] [Thread-61386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:14:32.561 [DEBUG] [Thread-61386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:14:32.562 [INFO] [Thread-61386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:14:32.565 [DEBUG] [Thread-61386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:14:32.565 [DEBUG] [Thread-61386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] client lang: <none>
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] server lang: <none>
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] kex follows: False
2025-11-17T21:14:32.566 [DEBUG] [Thread-61386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:14:32.567 [DEBUG] [Thread-61386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:14:32.567 [DEBUG] [Thread-61386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:14:32.567 [DEBUG] [Thread-61386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:14:32.567 [DEBUG] [Thread-61386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:14:32.567 [DEBUG] [Thread-61386] [transport.py] [_log()] Compression: none
2025-11-17T21:14:32.567 [DEBUG] [Thread-61386] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:14:32.578 [DEBUG] [Thread-61386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:14:32.579 [DEBUG] [Thread-61386] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:14:32.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:14:32.581 [DEBUG] [Thread-61386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:14:32.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:14:32.583 [DEBUG] [Thread-61386] [transport.py] [_log()] userauth is OK
2025-11-17T21:14:32.583 [DEBUG] [Thread-61386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:14:32.583 [DEBUG] [Thread-61386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:14:32.583 [DEBUG] [Thread-61386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:14:32.583 [DEBUG] [Thread-61386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:14:32.607 [INFO] [Thread-61386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:14:32.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:14:33.225 [DEBUG] [Thread-61386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:14:33.225 [DEBUG] [Thread-61386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:14:33.226 [DEBUG] [Thread-61386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:14:33.266 [DEBUG] [Thread-61386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:14:33.267 [DEBUG] [Thread-61386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:14:33.269 [DEBUG] [Thread-61386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:14:33.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:14:33.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:14:33.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:14:33.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:14:33.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:14:33.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:14:33.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:14:33.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:14:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:14:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.801437 -999.00  +16.60   9.06     38   +2.20 1 1 1 1 1     0    0 13.37 -58.28 ZNESW 7.8 9.1 203.8 12.8 17.2 -23.8 17.1 -22.8 16.9 -22.3 17.1 -23.2
2025-11-17T21:14:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:14:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:14:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.801437
2025-11-17T21:14:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:14:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:14:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:14:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:14:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:14:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:14:13', tmtdew=16.3, humidity=32.92, cloud=0.0, wind=14.2, temperature=16.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:14:13', seeing=1.16, atlas_timestamp='2025-11-17T19:14:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.10025000000000084, 0.10025000000000084, 0.018499999999999517, 0.12149999999999928, 0.17675000000000196, 0.0909999999999993, 0.07424999999999926, 0.09199999999999875, 0.12100000000000044, 0.13824999999999932, 0.136000000000001, 0.1429999999999989, 0.13624999999999865, 0.04550000000000054, 0.05150000000000077, 0.09224999999999994, 0.1385000000000005, 0.2134999999999998, 0.16225000000000023, 0.1659999999999986, 0.11374999999999957, 0.01925000000000132, 0.07624999999999993, 0.09999999999999964, 0.22750000000000092, 0.3207500000000003, 0.2835000000000001, 0.20000000000000107, 0.04650000000000176, 0.12049999999999983, 0.09800000000000075, 0.15124999999999922], zp_timestamp='2025-11-17T19:11:00')
2025-11-17T21:14:33.294 [DEBUG] [Thread-61386] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:14:33.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:14:33.389 [DEBUG] [Thread-61389] [transport.py] [_log()] starting thread (client mode): 0xd3134e50
2025-11-17T21:14:33.389 [DEBUG] [Thread-61389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:14:33.404 [DEBUG] [Thread-61389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:14:33.404 [INFO] [Thread-61389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:14:33.412 [DEBUG] [Thread-61389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:14:33.412 [DEBUG] [Thread-61389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:14:33.412 [DEBUG] [Thread-61389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:14:33.412 [DEBUG] [Thread-61389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:14:33.412 [DEBUG] [Thread-61389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] client lang: <none>
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] server lang: <none>
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] kex follows: False
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] Compression: none
2025-11-17T21:14:33.413 [DEBUG] [Thread-61389] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:14:33.472 [DEBUG] [Thread-61389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:14:33.473 [DEBUG] [Thread-61389] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:14:33.473 [DEBUG] [Thread-61389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:14:33.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:14:33.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:14:33.528 [DEBUG] [Thread-61389] [transport.py] [_log()] userauth is OK
2025-11-17T21:14:33.528 [DEBUG] [Thread-61389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:14:33.528 [DEBUG] [Thread-61389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:14:33.528 [DEBUG] [Thread-61389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:14:33.528 [DEBUG] [Thread-61389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:14:33.547 [INFO] [Thread-61389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:14:33.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:14:33.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:14:34.390 [DEBUG] [Thread-61389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:14:34.391 [DEBUG] [Thread-61389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:14:34.438 [DEBUG] [Thread-61389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:14:34.438 [DEBUG] [Thread-61389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:14:34.447 [DEBUG] [Thread-61389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:14:34.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:14:34.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:14:34.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:14:34.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:14:34.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:14:34.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:14:34.480 [DEBUG] [Thread-61389] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:14:37.308 [DEBUG] [Thread-61391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:14:41.178 [DEBUG] [Thread-61392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:14:46.889 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:14:46.890 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:14:52.348 [DEBUG] [Thread-61393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:15:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:15:04.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:15:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:15:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 14, 45), 16.26, 33.0, 0.0, 12.05, 16.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:15:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:14:45
2025-11-17T21:15:05.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:15:05.468 [DEBUG] [Thread-61394] [transport.py] [_log()] starting thread (client mode): 0xd3134850
2025-11-17T21:15:05.468 [DEBUG] [Thread-61394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:15:05.488 [DEBUG] [Thread-61394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:15:05.488 [INFO] [Thread-61394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:15:05.491 [DEBUG] [Thread-61394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:15:05.491 [DEBUG] [Thread-61394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:15:05.491 [DEBUG] [Thread-61394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:15:05.491 [DEBUG] [Thread-61394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:15:05.491 [DEBUG] [Thread-61394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:15:05.491 [DEBUG] [Thread-61394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:15:05.491 [DEBUG] [Thread-61394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] client lang: <none>
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] server lang: <none>
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] kex follows: False
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] Compression: none
2025-11-17T21:15:05.492 [DEBUG] [Thread-61394] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:15:05.507 [DEBUG] [Thread-61394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:15:05.507 [DEBUG] [Thread-61394] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:15:05.508 [DEBUG] [Thread-61394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:15:05.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:15:05.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:15:05.508 [DEBUG] [Thread-61394] [transport.py] [_log()] userauth is OK
2025-11-17T21:15:05.508 [DEBUG] [Thread-61394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:15:05.508 [DEBUG] [Thread-61394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:15:05.509 [DEBUG] [Thread-61394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:15:05.509 [DEBUG] [Thread-61394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:15:05.521 [INFO] [Thread-61394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:15:05.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:15:07.376 [DEBUG] [Thread-61396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:15:08.000 [DEBUG] [Thread-61394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:15:08.000 [DEBUG] [Thread-61394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:15:08.000 [DEBUG] [Thread-61394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:15:08.041 [DEBUG] [Thread-61394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:15:08.041 [DEBUG] [Thread-61394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:15:08.043 [DEBUG] [Thread-61394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:15:08.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:15:08.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:15:08.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:15:08.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:15:08.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:15:08.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:15:08.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:15:08.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:15:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:15:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.801785 -999.00  +16.60  10.81     38   +2.20 1 1 1 1 1     0    0 13.25 -61.08 ZNESW 11.8 10.8 190.6 14.8 17.1 -23.7 17.1 -22.9 16.8 -22.3 17.1 -23.3
2025-11-17T21:15:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:15:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:15:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.801785
2025-11-17T21:15:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:15:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:15:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:15:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:15:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:15:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:14:45', tmtdew=16.26, humidity=33.0, cloud=0.0, wind=12.05, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:14:45', seeing=1.16, atlas_timestamp='2025-11-17T19:14:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.10025000000000084, 0.10025000000000084, 0.018499999999999517, 0.12149999999999928, 0.17675000000000196, 0.0909999999999993, 0.07424999999999926, 0.09199999999999875, 0.12100000000000044, 0.13824999999999932, 0.136000000000001, 0.1429999999999989, 0.13624999999999865, 0.04550000000000054, 0.05150000000000077, 0.09224999999999994, 0.1385000000000005, 0.2134999999999998, 0.16225000000000023, 0.1659999999999986, 0.11374999999999957, 0.01925000000000132, 0.07624999999999993, 0.09999999999999964, 0.22750000000000092, 0.3207500000000003, 0.2835000000000001, 0.20000000000000107, 0.04650000000000176, 0.12049999999999983, 0.09800000000000075, 0.15124999999999922], zp_timestamp='2025-11-17T19:11:00')
2025-11-17T21:15:08.072 [DEBUG] [Thread-61394] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:15:08.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:15:08.158 [DEBUG] [Thread-61398] [transport.py] [_log()] starting thread (client mode): 0xd317f430
2025-11-17T21:15:08.159 [DEBUG] [Thread-61398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:15:08.177 [DEBUG] [Thread-61398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:15:08.177 [INFO] [Thread-61398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] client lang: <none>
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] server lang: <none>
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] kex follows: False
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:15:08.184 [DEBUG] [Thread-61398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:15:08.185 [DEBUG] [Thread-61398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:15:08.185 [DEBUG] [Thread-61398] [transport.py] [_log()] Compression: none
2025-11-17T21:15:08.185 [DEBUG] [Thread-61398] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:15:08.245 [DEBUG] [Thread-61398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:15:08.246 [DEBUG] [Thread-61398] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:15:08.246 [DEBUG] [Thread-61398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:15:08.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:15:08.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:15:08.304 [DEBUG] [Thread-61398] [transport.py] [_log()] userauth is OK
2025-11-17T21:15:08.304 [DEBUG] [Thread-61398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:15:08.304 [DEBUG] [Thread-61398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:15:08.304 [DEBUG] [Thread-61398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:15:08.304 [DEBUG] [Thread-61398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:15:08.322 [INFO] [Thread-61398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:15:08.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:15:08.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:15:09.193 [DEBUG] [Thread-61398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:15:09.194 [DEBUG] [Thread-61398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:15:09.242 [DEBUG] [Thread-61398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:15:09.242 [DEBUG] [Thread-61398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:15:09.251 [DEBUG] [Thread-61398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:15:09.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:15:09.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:15:09.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:15:09.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:15:09.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:15:09.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:15:09.286 [DEBUG] [Thread-61398] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:15:22.406 [DEBUG] [Thread-61400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:15:37.447 [DEBUG] [Thread-61401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:15:39.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:15:39.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:15:39.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:15:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 15, 17), 16.26, 32.99, 0.0, 12.9, 16.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:15:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:15:17
2025-11-17T21:15:40.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:15:40.240 [DEBUG] [Thread-61402] [transport.py] [_log()] starting thread (client mode): 0xd317d270
2025-11-17T21:15:40.241 [DEBUG] [Thread-61402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:15:40.260 [DEBUG] [Thread-61402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:15:40.260 [INFO] [Thread-61402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:15:40.264 [DEBUG] [Thread-61402] [transport.py] [_log()] client lang: <none>
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] server lang: <none>
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] kex follows: False
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] Compression: none
2025-11-17T21:15:40.265 [DEBUG] [Thread-61402] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:15:40.282 [DEBUG] [Thread-61402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:15:40.282 [DEBUG] [Thread-61402] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:15:40.283 [DEBUG] [Thread-61402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:15:40.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:15:40.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:15:40.285 [DEBUG] [Thread-61402] [transport.py] [_log()] userauth is OK
2025-11-17T21:15:40.285 [DEBUG] [Thread-61402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:15:40.285 [DEBUG] [Thread-61402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:15:40.285 [DEBUG] [Thread-61402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:15:40.285 [DEBUG] [Thread-61402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:15:40.309 [INFO] [Thread-61402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:15:40.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:15:40.965 [DEBUG] [Thread-61402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:15:40.965 [DEBUG] [Thread-61402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:15:40.965 [DEBUG] [Thread-61402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:15:41.006 [DEBUG] [Thread-61402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:15:41.007 [DEBUG] [Thread-61402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:15:41.010 [DEBUG] [Thread-61402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:15:41.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:15:41.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:15:41.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:15:41.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:15:41.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:15:41.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:15:41.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:15:41.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:15:41.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:15:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.802132 -999.00  +16.60   8.91     38   +2.30 1 1 1 1 1     0    0 13.19 -58.15 ZNESW 12.2 8.9 192.8 13.4 17.2 -23.7 17.1 -22.9 16.8 -22.2 17.1 -23.1
2025-11-17T21:15:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:15:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:15:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.802132
2025-11-17T21:15:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:15:41.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:15:41.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:15:41.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:15:41.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:15:41.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:15:17', tmtdew=16.26, humidity=32.99, cloud=0.0, wind=12.9, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:15:17', seeing=1.19, atlas_timestamp='2025-11-17T19:15:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.06674999999999898, 0.10025000000000084, 0.10025000000000084, 0.018499999999999517, 0.12149999999999928, 0.17675000000000196, 0.0909999999999993, 0.07424999999999926, 0.09199999999999875, 0.12100000000000044, 0.13824999999999932, 0.136000000000001, 0.1429999999999989, 0.13624999999999865, 0.04550000000000054, 0.05150000000000077, 0.09224999999999994, 0.1385000000000005, 0.2134999999999998, 0.16225000000000023, 0.1659999999999986, 0.11374999999999957, 0.01925000000000132, 0.07624999999999993, 0.09999999999999964, 0.22750000000000092, 0.3207500000000003, 0.2835000000000001, 0.20000000000000107, 0.04650000000000176, 0.12049999999999983, 0.09800000000000075, 0.15124999999999922], zp_timestamp='2025-11-17T19:11:00')
2025-11-17T21:15:41.034 [DEBUG] [Thread-61402] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:15:41.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:15:41.129 [DEBUG] [Thread-61405] [transport.py] [_log()] starting thread (client mode): 0xd0711660
2025-11-17T21:15:41.130 [DEBUG] [Thread-61405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:15:41.145 [DEBUG] [Thread-61405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:15:41.145 [INFO] [Thread-61405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:15:41.152 [DEBUG] [Thread-61405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:15:41.152 [DEBUG] [Thread-61405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] client lang: <none>
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] server lang: <none>
2025-11-17T21:15:41.153 [DEBUG] [Thread-61405] [transport.py] [_log()] kex follows: False
2025-11-17T21:15:41.154 [DEBUG] [Thread-61405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:15:41.154 [DEBUG] [Thread-61405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:15:41.154 [DEBUG] [Thread-61405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:15:41.154 [DEBUG] [Thread-61405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:15:41.154 [DEBUG] [Thread-61405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:15:41.154 [DEBUG] [Thread-61405] [transport.py] [_log()] Compression: none
2025-11-17T21:15:41.154 [DEBUG] [Thread-61405] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:15:41.215 [DEBUG] [Thread-61405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:15:41.216 [DEBUG] [Thread-61405] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:15:41.216 [DEBUG] [Thread-61405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:15:41.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:15:41.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:15:41.259 [DEBUG] [Thread-61407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:15:41.272 [DEBUG] [Thread-61405] [transport.py] [_log()] userauth is OK
2025-11-17T21:15:41.272 [DEBUG] [Thread-61405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:15:41.272 [DEBUG] [Thread-61405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:15:41.272 [DEBUG] [Thread-61405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:15:41.272 [DEBUG] [Thread-61405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:15:41.286 [INFO] [Thread-61405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:15:41.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:15:41.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:15:42.185 [DEBUG] [Thread-61405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:15:42.185 [DEBUG] [Thread-61405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:15:42.233 [DEBUG] [Thread-61405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:15:42.233 [DEBUG] [Thread-61405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:15:42.241 [DEBUG] [Thread-61405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:15:42.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:15:42.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:15:42.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:15:42.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:15:42.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:15:42.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:15:42.273 [DEBUG] [Thread-61405] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:15:47.094 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:15:47.094 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:15:52.478 [DEBUG] [Thread-61408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:16:07.527 [DEBUG] [Thread-61409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:16:12.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:16:12.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:16:12.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:16:12.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 15, 49), 16.17, 33.2, 0.0, 15.03, 16.4, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:16:12.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:15:49
2025-11-17T21:16:13.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:16:13.234 [DEBUG] [Thread-61410] [transport.py] [_log()] starting thread (client mode): 0xd31b0460
2025-11-17T21:16:13.234 [DEBUG] [Thread-61410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:16:13.253 [DEBUG] [Thread-61410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:16:13.253 [INFO] [Thread-61410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] client lang: <none>
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] server lang: <none>
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] kex follows: False
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] Compression: none
2025-11-17T21:16:13.257 [DEBUG] [Thread-61410] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:16:13.275 [DEBUG] [Thread-61410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:16:13.275 [DEBUG] [Thread-61410] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:16:13.276 [DEBUG] [Thread-61410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:16:13.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:16:13.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:16:13.277 [DEBUG] [Thread-61410] [transport.py] [_log()] userauth is OK
2025-11-17T21:16:13.278 [DEBUG] [Thread-61410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:16:13.278 [DEBUG] [Thread-61410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:16:13.278 [DEBUG] [Thread-61410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:16:13.278 [DEBUG] [Thread-61410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:16:13.296 [INFO] [Thread-61410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:16:13.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:16:13.895 [DEBUG] [Thread-61410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:16:13.895 [DEBUG] [Thread-61410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:16:13.895 [DEBUG] [Thread-61410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:16:13.935 [DEBUG] [Thread-61410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:16:13.936 [DEBUG] [Thread-61410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:16:13.938 [DEBUG] [Thread-61410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:16:13.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:16:13.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:16:13.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:16:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:16:13.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:16:13.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:16:13.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:16:13.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:16:13.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:16:13.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.802480 -999.00  +16.60  10.48     38   +2.20 1 1 1 1 1     0    0 12.95 -59.62 ZNESW 10.2 10.5 193.0 11.9 17.1 -23.7 17.1 -23.0 16.8 -22.4 17.1 -23.1
2025-11-17T21:16:13.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:16:13.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:16:13.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.802480
2025-11-17T21:16:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:16:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:16:13.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:16:13.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:16:13.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:16:13.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:15:49', tmtdew=16.17, humidity=33.2, cloud=0.0, wind=15.03, temperature=16.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:15:49', seeing=1.18, atlas_timestamp='2025-11-17T19:15:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:14:00')
2025-11-17T21:16:13.963 [DEBUG] [Thread-61410] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:16:14.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:16:14.060 [DEBUG] [Thread-61413] [transport.py] [_log()] starting thread (client mode): 0xd317f610
2025-11-17T21:16:14.060 [DEBUG] [Thread-61413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:16:14.075 [DEBUG] [Thread-61413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:16:14.075 [INFO] [Thread-61413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:16:14.083 [DEBUG] [Thread-61413] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] client lang: <none>
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] server lang: <none>
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] kex follows: False
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:16:14.084 [DEBUG] [Thread-61413] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:16:14.085 [DEBUG] [Thread-61413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:16:14.085 [DEBUG] [Thread-61413] [transport.py] [_log()] Compression: none
2025-11-17T21:16:14.085 [DEBUG] [Thread-61413] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:16:14.144 [DEBUG] [Thread-61413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:16:14.145 [DEBUG] [Thread-61413] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:16:14.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:16:14.146 [DEBUG] [Thread-61413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:16:14.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:16:14.208 [DEBUG] [Thread-61413] [transport.py] [_log()] userauth is OK
2025-11-17T21:16:14.208 [DEBUG] [Thread-61413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:16:14.208 [DEBUG] [Thread-61413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:16:14.208 [DEBUG] [Thread-61413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:16:14.208 [DEBUG] [Thread-61413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:16:14.228 [INFO] [Thread-61413] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:16:14.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:16:14.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:16:15.055 [DEBUG] [Thread-61413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:16:15.055 [DEBUG] [Thread-61413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:16:15.103 [DEBUG] [Thread-61413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:16:15.104 [DEBUG] [Thread-61413] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:16:15.112 [DEBUG] [Thread-61413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:16:15.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:16:15.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:16:15.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:16:15.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:16:15.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:16:15.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:16:15.148 [DEBUG] [Thread-61413] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:16:22.558 [DEBUG] [Thread-61415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:16:37.590 [DEBUG] [Thread-61416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:16:41.327 [DEBUG] [Thread-61417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:16:45.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:16:45.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:16:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:16:45.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 16, 21), 16.14, 33.3, 0.0, 16.0, 16.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:16:45.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:16:21
2025-11-17T21:16:45.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:16:46.099 [DEBUG] [Thread-61418] [transport.py] [_log()] starting thread (client mode): 0xd31351e0
2025-11-17T21:16:46.099 [DEBUG] [Thread-61418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:16:46.120 [DEBUG] [Thread-61418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:16:46.120 [INFO] [Thread-61418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:16:46.123 [DEBUG] [Thread-61418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:16:46.123 [DEBUG] [Thread-61418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] client lang: <none>
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] server lang: <none>
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] kex follows: False
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:16:46.124 [DEBUG] [Thread-61418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:16:46.125 [DEBUG] [Thread-61418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:16:46.125 [DEBUG] [Thread-61418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:16:46.125 [DEBUG] [Thread-61418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:16:46.125 [DEBUG] [Thread-61418] [transport.py] [_log()] Compression: none
2025-11-17T21:16:46.125 [DEBUG] [Thread-61418] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:16:46.144 [DEBUG] [Thread-61418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:16:46.145 [DEBUG] [Thread-61418] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:16:46.145 [DEBUG] [Thread-61418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:16:46.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:16:46.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:16:46.147 [DEBUG] [Thread-61418] [transport.py] [_log()] userauth is OK
2025-11-17T21:16:46.147 [DEBUG] [Thread-61418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:16:46.147 [DEBUG] [Thread-61418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:16:46.147 [DEBUG] [Thread-61418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:16:46.147 [DEBUG] [Thread-61418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:16:46.170 [INFO] [Thread-61418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:16:46.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:16:46.746 [DEBUG] [Thread-61418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:16:46.747 [DEBUG] [Thread-61418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:16:46.747 [DEBUG] [Thread-61418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:16:46.787 [DEBUG] [Thread-61418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:16:46.787 [DEBUG] [Thread-61418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:16:46.790 [DEBUG] [Thread-61418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:16:46.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:16:46.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:16:46.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:16:46.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:16:46.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:16:46.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:16:46.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:16:46.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:16:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:16:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.803173 -999.00  +16.50  12.00     38   +2.30 1 1 1 1 1     0    0 12.90 -66.58 ZNESW 10.7 12.0 201.6 17.5 17.1 -23.7 17.0 -23.2 16.8 -22.3 17.0 -23.1
2025-11-17T21:16:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:16:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:16:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.803173
2025-11-17T21:16:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:16:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:16:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:16:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:16:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:16:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:16:21', tmtdew=16.14, humidity=33.3, cloud=0.0, wind=16.0, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:16:21', seeing=1.41, atlas_timestamp='2025-11-17T19:16:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:14:00')
2025-11-17T21:16:46.815 [DEBUG] [Thread-61418] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:16:46.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:16:46.917 [DEBUG] [Thread-61421] [transport.py] [_log()] starting thread (client mode): 0xd317ded0
2025-11-17T21:16:46.917 [DEBUG] [Thread-61421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:16:46.932 [DEBUG] [Thread-61421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:16:46.932 [INFO] [Thread-61421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] client lang: <none>
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] server lang: <none>
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] kex follows: False
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:16:46.940 [DEBUG] [Thread-61421] [transport.py] [_log()] Compression: none
2025-11-17T21:16:46.941 [DEBUG] [Thread-61421] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:16:46.995 [DEBUG] [Thread-61421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:16:46.996 [DEBUG] [Thread-61421] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:16:46.996 [DEBUG] [Thread-61421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:16:46.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:16:46.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:16:47.052 [DEBUG] [Thread-61421] [transport.py] [_log()] userauth is OK
2025-11-17T21:16:47.052 [DEBUG] [Thread-61421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:16:47.052 [DEBUG] [Thread-61421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:16:47.052 [DEBUG] [Thread-61421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:16:47.052 [DEBUG] [Thread-61421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:16:47.071 [INFO] [Thread-61421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:16:47.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:16:47.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:16:47.297 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:16:47.297 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:16:47.908 [DEBUG] [Thread-61421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:16:47.908 [DEBUG] [Thread-61421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:16:47.955 [DEBUG] [Thread-61421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:16:47.955 [DEBUG] [Thread-61421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:16:47.964 [DEBUG] [Thread-61421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:16:47.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:16:47.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:16:47.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:16:47.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:16:47.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:16:47.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:16:47.998 [DEBUG] [Thread-61421] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:16:52.617 [DEBUG] [Thread-61423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:17:07.658 [DEBUG] [Thread-61424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:17:18.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:17:18.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:17:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:17:18.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 16, 53), 15.98, 33.7, 0.0, 15.09, 16.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:17:18.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:16:53
2025-11-17T21:17:18.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:17:18.943 [DEBUG] [Thread-61425] [transport.py] [_log()] starting thread (client mode): 0xd0711600
2025-11-17T21:17:18.943 [DEBUG] [Thread-61425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:17:18.962 [DEBUG] [Thread-61425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:17:18.963 [INFO] [Thread-61425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:17:18.965 [DEBUG] [Thread-61425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:17:18.965 [DEBUG] [Thread-61425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] client lang: <none>
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] server lang: <none>
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] kex follows: False
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:17:18.966 [DEBUG] [Thread-61425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:17:18.967 [DEBUG] [Thread-61425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:17:18.967 [DEBUG] [Thread-61425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:17:18.967 [DEBUG] [Thread-61425] [transport.py] [_log()] Compression: none
2025-11-17T21:17:18.967 [DEBUG] [Thread-61425] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:17:18.985 [DEBUG] [Thread-61425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:17:18.986 [DEBUG] [Thread-61425] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:17:18.986 [DEBUG] [Thread-61425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:17:18.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:17:18.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:17:18.988 [DEBUG] [Thread-61425] [transport.py] [_log()] userauth is OK
2025-11-17T21:17:18.988 [DEBUG] [Thread-61425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:17:18.988 [DEBUG] [Thread-61425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:17:18.989 [DEBUG] [Thread-61425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:17:18.989 [DEBUG] [Thread-61425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:17:19.003 [INFO] [Thread-61425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:17:19.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:17:19.607 [DEBUG] [Thread-61425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:17:19.607 [DEBUG] [Thread-61425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:17:19.607 [DEBUG] [Thread-61425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:17:19.648 [DEBUG] [Thread-61425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:17:19.648 [DEBUG] [Thread-61425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:17:19.651 [DEBUG] [Thread-61425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:17:19.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:17:19.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:17:19.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:17:19.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:17:19.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:17:19.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:17:19.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:17:19.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:17:19.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:17:19.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.803521 -999.00  +16.50   8.70     38   +2.40 1 1 1 1 1     0    0 12.74 -70.12 ZNESW 8.9 8.7 200.8 12.8 17.1 -23.7 17.0 -23.0 16.8 -22.3 17.0 -23.3
2025-11-17T21:17:19.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:17:19.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:17:19.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.803521
2025-11-17T21:17:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:17:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:17:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:17:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:17:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:17:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:16:53', tmtdew=15.98, humidity=33.7, cloud=0.0, wind=15.09, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:16:53', seeing=1.22, atlas_timestamp='2025-11-17T19:17:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:14:00')
2025-11-17T21:17:19.669 [DEBUG] [Thread-61425] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:17:19.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:17:19.764 [DEBUG] [Thread-61428] [transport.py] [_log()] starting thread (client mode): 0xd31cd870
2025-11-17T21:17:19.764 [DEBUG] [Thread-61428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:17:19.781 [DEBUG] [Thread-61428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:17:19.781 [INFO] [Thread-61428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:17:19.788 [DEBUG] [Thread-61428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:17:19.788 [DEBUG] [Thread-61428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] client lang: <none>
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] server lang: <none>
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] kex follows: False
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] Compression: none
2025-11-17T21:17:19.789 [DEBUG] [Thread-61428] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:17:19.848 [DEBUG] [Thread-61428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:17:19.848 [DEBUG] [Thread-61428] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:17:19.849 [DEBUG] [Thread-61428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:17:19.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:17:19.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:17:19.904 [DEBUG] [Thread-61428] [transport.py] [_log()] userauth is OK
2025-11-17T21:17:19.904 [DEBUG] [Thread-61428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:17:19.904 [DEBUG] [Thread-61428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:17:19.904 [DEBUG] [Thread-61428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:17:19.905 [DEBUG] [Thread-61428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:17:19.923 [INFO] [Thread-61428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:17:19.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:17:19.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:17:20.766 [DEBUG] [Thread-61428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:17:20.766 [DEBUG] [Thread-61428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:17:20.814 [DEBUG] [Thread-61428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:17:20.814 [DEBUG] [Thread-61428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:17:20.823 [DEBUG] [Thread-61428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:17:20.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:17:20.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')
2025-11-17T21:17:20.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:17:20.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:17:20.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:17:20.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:17:20.857 [DEBUG] [Thread-61428] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:17:22.692 [DEBUG] [Thread-61430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:17:37.729 [DEBUG] [Thread-61431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:17:41.388 [DEBUG] [Thread-61432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:17:47.500 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:17:47.501 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:17:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:17:50.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:17:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:17:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 17, 25), 16.01, 33.62, 0.0, 14.1, 16.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:17:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:17:25
2025-11-17T21:17:51.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:17:51.795 [DEBUG] [Thread-61433] [transport.py] [_log()] starting thread (client mode): 0xd3134820
2025-11-17T21:17:51.795 [DEBUG] [Thread-61433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:17:51.816 [DEBUG] [Thread-61433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:17:51.816 [INFO] [Thread-61433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:17:51.820 [DEBUG] [Thread-61433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:17:51.820 [DEBUG] [Thread-61433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] client lang: <none>
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] server lang: <none>
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] kex follows: False
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] Compression: none
2025-11-17T21:17:51.821 [DEBUG] [Thread-61433] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:17:51.841 [DEBUG] [Thread-61433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:17:51.842 [DEBUG] [Thread-61433] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:17:51.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:17:51.843 [DEBUG] [Thread-61433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:17:51.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:17:51.845 [DEBUG] [Thread-61433] [transport.py] [_log()] userauth is OK
2025-11-17T21:17:51.845 [DEBUG] [Thread-61433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:17:51.845 [DEBUG] [Thread-61433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:17:51.845 [DEBUG] [Thread-61433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:17:51.845 [DEBUG] [Thread-61433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:17:51.869 [INFO] [Thread-61433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:17:51.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:17:52.462 [DEBUG] [Thread-61433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:17:52.462 [DEBUG] [Thread-61433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:17:52.463 [DEBUG] [Thread-61433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:17:52.504 [DEBUG] [Thread-61433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:17:52.504 [DEBUG] [Thread-61433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:17:52.507 [DEBUG] [Thread-61433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:17:52.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:17:52.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:17:52.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:17:52.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:17:52.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:17:52.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:17:52.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:17:52.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:17:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:17:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.803521 -999.00  +16.50   8.70     38   +2.40 1 1 1 1 1     0    0 12.74 -70.12 ZNESW 8.9 8.7 200.8 12.8 17.1 -23.7 17.0 -23.0 16.8 -22.3 17.0 -23.3
2025-11-17T21:17:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:17:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:17:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.803521
2025-11-17T21:17:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:17:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:17:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:17:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:17:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:17:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:17:25', tmtdew=16.01, humidity=33.62, cloud=0.0, wind=14.1, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:17:25', seeing=1.45, atlas_timestamp='2025-11-17T19:17:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:14:00')
2025-11-17T21:17:52.531 [DEBUG] [Thread-61433] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:17:52.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:17:52.628 [DEBUG] [Thread-61436] [transport.py] [_log()] starting thread (client mode): 0xd0710910
2025-11-17T21:17:52.628 [DEBUG] [Thread-61436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:17:52.643 [DEBUG] [Thread-61436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:17:52.643 [INFO] [Thread-61436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:17:52.650 [DEBUG] [Thread-61436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] client lang: <none>
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] server lang: <none>
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] kex follows: False
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] Compression: none
2025-11-17T21:17:52.651 [DEBUG] [Thread-61436] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:17:52.709 [DEBUG] [Thread-61436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:17:52.710 [DEBUG] [Thread-61436] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:17:52.710 [DEBUG] [Thread-61436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:17:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:17:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:17:52.756 [DEBUG] [Thread-61438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:17:52.768 [DEBUG] [Thread-61436] [transport.py] [_log()] userauth is OK
2025-11-17T21:17:52.768 [DEBUG] [Thread-61436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:17:52.769 [DEBUG] [Thread-61436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:17:52.769 [DEBUG] [Thread-61436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:17:52.769 [DEBUG] [Thread-61436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:17:52.787 [INFO] [Thread-61436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:17:52.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:17:52.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:17:53.633 [DEBUG] [Thread-61436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:17:53.633 [DEBUG] [Thread-61436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:17:53.681 [DEBUG] [Thread-61436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:17:53.681 [DEBUG] [Thread-61436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:17:53.690 [DEBUG] [Thread-61436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:17:53.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:17:53.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:17:53.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:17:53.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:17:53.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:17:53.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:17:53.726 [DEBUG] [Thread-61436] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:18:07.793 [DEBUG] [Thread-61439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:18:22.821 [DEBUG] [Thread-61440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:18:23.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:18:23.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:18:23.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:18:24.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 17, 57), 16.08, 33.57, 0.0, 14.72, 16.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:18:24.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:17:57
2025-11-17T21:18:24.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:18:24.668 [DEBUG] [Thread-61441] [transport.py] [_log()] starting thread (client mode): 0xd7bc7040
2025-11-17T21:18:24.668 [DEBUG] [Thread-61441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:18:24.678 [DEBUG] [Thread-61441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:18:24.678 [INFO] [Thread-61441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] client lang: <none>
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] server lang: <none>
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] kex follows: False
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] Compression: none
2025-11-17T21:18:24.679 [DEBUG] [Thread-61441] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:18:24.687 [DEBUG] [Thread-61441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:18:24.687 [DEBUG] [Thread-61441] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:18:24.688 [DEBUG] [Thread-61441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:18:24.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:18:24.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:18:24.689 [DEBUG] [Thread-61441] [transport.py] [_log()] userauth is OK
2025-11-17T21:18:24.689 [DEBUG] [Thread-61441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:18:24.689 [DEBUG] [Thread-61441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:18:24.690 [DEBUG] [Thread-61441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:18:24.690 [DEBUG] [Thread-61441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:18:24.724 [INFO] [Thread-61441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:18:24.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:18:25.459 [DEBUG] [Thread-61441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:18:25.460 [DEBUG] [Thread-61441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:18:25.460 [DEBUG] [Thread-61441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:18:25.500 [DEBUG] [Thread-61441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:18:25.501 [DEBUG] [Thread-61441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:18:25.504 [DEBUG] [Thread-61441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:18:25.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:18:25.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:18:25.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:18:25.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:18:25.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:18:25.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:18:25.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:18:25.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:18:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:18:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.803868 -999.00  +16.50  12.81     38   +2.30 1 1 1 1 1     0    0 12.77 -69.83 ZNESW 11.1 12.8 195.4 14.8 17.1 -23.8 17.0 -23.0 16.8 -22.4 17.0 -23.4
2025-11-17T21:18:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:18:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:18:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.803868
2025-11-17T21:18:25.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:18:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:18:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:18:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:18:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:18:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:17:57', tmtdew=16.08, humidity=33.57, cloud=0.0, wind=14.72, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:17:57', seeing=1.45, atlas_timestamp='2025-11-17T19:17:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:14:00')
2025-11-17T21:18:25.527 [DEBUG] [Thread-61441] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:18:25.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:18:25.624 [DEBUG] [Thread-61444] [transport.py] [_log()] starting thread (client mode): 0xd7bc62c0
2025-11-17T21:18:25.624 [DEBUG] [Thread-61444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:18:25.640 [DEBUG] [Thread-61444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:18:25.641 [INFO] [Thread-61444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:18:25.648 [DEBUG] [Thread-61444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:18:25.648 [DEBUG] [Thread-61444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:18:25.648 [DEBUG] [Thread-61444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] client lang: <none>
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] server lang: <none>
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] kex follows: False
2025-11-17T21:18:25.649 [DEBUG] [Thread-61444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:18:25.650 [DEBUG] [Thread-61444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:18:25.650 [DEBUG] [Thread-61444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:18:25.650 [DEBUG] [Thread-61444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:18:25.650 [DEBUG] [Thread-61444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:18:25.650 [DEBUG] [Thread-61444] [transport.py] [_log()] Compression: none
2025-11-17T21:18:25.650 [DEBUG] [Thread-61444] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:18:25.708 [DEBUG] [Thread-61444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:18:25.708 [DEBUG] [Thread-61444] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:18:25.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:18:25.709 [DEBUG] [Thread-61444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:18:25.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:18:25.764 [DEBUG] [Thread-61444] [transport.py] [_log()] userauth is OK
2025-11-17T21:18:25.764 [DEBUG] [Thread-61444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:18:25.765 [DEBUG] [Thread-61444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:18:25.765 [DEBUG] [Thread-61444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:18:25.765 [DEBUG] [Thread-61444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:18:25.784 [INFO] [Thread-61444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:18:25.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:18:25.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:18:26.664 [DEBUG] [Thread-61444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:18:26.664 [DEBUG] [Thread-61444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:18:26.712 [DEBUG] [Thread-61444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:18:26.712 [DEBUG] [Thread-61444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:18:26.722 [DEBUG] [Thread-61444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:18:26.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:18:26.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:18:26.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:18:26.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:18:26.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:18:26.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:18:26.757 [DEBUG] [Thread-61444] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:18:37.849 [DEBUG] [Thread-61446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:18:41.445 [DEBUG] [Thread-61447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:18:44.962 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:18:47.706 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:18:47.707 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:18:52.890 [DEBUG] [Thread-61448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:18:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:18:56.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:18:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:18:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 18, 29), 15.9, 34.0, 0.0, 13.18, 16.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:18:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:18:29
2025-11-17T21:18:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:18:57.714 [DEBUG] [Thread-61449] [transport.py] [_log()] starting thread (client mode): 0xd0713bb0
2025-11-17T21:18:57.714 [DEBUG] [Thread-61449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:18:57.735 [DEBUG] [Thread-61449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:18:57.735 [INFO] [Thread-61449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] client lang: <none>
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] server lang: <none>
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] kex follows: False
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] Compression: none
2025-11-17T21:18:57.739 [DEBUG] [Thread-61449] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:18:57.756 [DEBUG] [Thread-61449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:18:57.756 [DEBUG] [Thread-61449] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:18:57.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:18:57.757 [DEBUG] [Thread-61449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:18:57.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:18:57.757 [DEBUG] [Thread-61449] [transport.py] [_log()] userauth is OK
2025-11-17T21:18:57.757 [DEBUG] [Thread-61449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:18:57.757 [DEBUG] [Thread-61449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:18:57.757 [DEBUG] [Thread-61449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:18:57.757 [DEBUG] [Thread-61449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:18:57.786 [INFO] [Thread-61449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:18:57.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:18:58.413 [DEBUG] [Thread-61449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:18:58.413 [DEBUG] [Thread-61449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:18:58.413 [DEBUG] [Thread-61449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:18:58.454 [DEBUG] [Thread-61449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:18:58.454 [DEBUG] [Thread-61449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:18:58.456 [DEBUG] [Thread-61449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:18:58.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:18:58.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:18:58.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:18:58.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:18:58.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:18:58.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:18:58.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:18:58.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:18:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:18:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.804215 -999.00  +16.50  10.10     38   +2.30 1 1 1 1 1     0    0 12.68 -67.89 ZNESW 10.6 10.1 186.8 14.5 17.1 -23.8 17.0 -23.1 16.8 -22.3 17.0 -23.0
2025-11-17T21:18:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:18:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:18:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.804215
2025-11-17T21:18:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:18:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:18:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:18:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:18:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:18:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:18:29', tmtdew=15.9, humidity=34.0, cloud=0.0, wind=13.18, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:18:29', seeing=1.35, atlas_timestamp='2025-11-17T19:18:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:17:00')
2025-11-17T21:18:58.474 [DEBUG] [Thread-61449] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:18:58.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:18:58.561 [DEBUG] [Thread-61452] [transport.py] [_log()] starting thread (client mode): 0xd0713eb0
2025-11-17T21:18:58.561 [DEBUG] [Thread-61452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:18:58.576 [DEBUG] [Thread-61452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:18:58.576 [INFO] [Thread-61452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:18:58.583 [DEBUG] [Thread-61452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] client lang: <none>
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] server lang: <none>
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] kex follows: False
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] Compression: none
2025-11-17T21:18:58.584 [DEBUG] [Thread-61452] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:18:58.639 [DEBUG] [Thread-61452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:18:58.639 [DEBUG] [Thread-61452] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:18:58.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:18:58.639 [DEBUG] [Thread-61452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:18:58.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:18:58.696 [DEBUG] [Thread-61452] [transport.py] [_log()] userauth is OK
2025-11-17T21:18:58.696 [DEBUG] [Thread-61452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:18:58.696 [DEBUG] [Thread-61452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:18:58.696 [DEBUG] [Thread-61452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:18:58.696 [DEBUG] [Thread-61452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:18:58.710 [INFO] [Thread-61452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:18:58.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:18:58.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:18:59.625 [DEBUG] [Thread-61452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:18:59.625 [DEBUG] [Thread-61452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:18:59.673 [DEBUG] [Thread-61452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:18:59.673 [DEBUG] [Thread-61452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:18:59.682 [DEBUG] [Thread-61452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:18:59.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:18:59.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:18:59.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:18:59.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:18:59.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:18:59.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:18:59.713 [DEBUG] [Thread-61452] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:19:07.920 [DEBUG] [Thread-61454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:19:22.969 [DEBUG] [Thread-61455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:19:29.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:19:29.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:19:29.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:19:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 19, 1), 15.93, 33.93, 0.0, 15.16, 16.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:19:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:19:01
2025-11-17T21:19:30.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:19:30.657 [DEBUG] [Thread-61456] [transport.py] [_log()] starting thread (client mode): 0xd0787430
2025-11-17T21:19:30.657 [DEBUG] [Thread-61456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:19:30.676 [DEBUG] [Thread-61456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:19:30.676 [INFO] [Thread-61456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:19:30.679 [DEBUG] [Thread-61456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:19:30.679 [DEBUG] [Thread-61456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:19:30.679 [DEBUG] [Thread-61456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:19:30.679 [DEBUG] [Thread-61456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] client lang: <none>
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] server lang: <none>
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] kex follows: False
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] Compression: none
2025-11-17T21:19:30.680 [DEBUG] [Thread-61456] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:19:30.697 [DEBUG] [Thread-61456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:19:30.697 [DEBUG] [Thread-61456] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:19:30.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:19:30.698 [DEBUG] [Thread-61456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:19:30.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:19:30.701 [DEBUG] [Thread-61456] [transport.py] [_log()] userauth is OK
2025-11-17T21:19:30.701 [DEBUG] [Thread-61456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:19:30.701 [DEBUG] [Thread-61456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:19:30.701 [DEBUG] [Thread-61456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:19:30.701 [DEBUG] [Thread-61456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:19:30.725 [INFO] [Thread-61456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:19:30.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:19:31.355 [DEBUG] [Thread-61456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:19:31.355 [DEBUG] [Thread-61456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:19:31.355 [DEBUG] [Thread-61456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:19:31.395 [DEBUG] [Thread-61456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:19:31.396 [DEBUG] [Thread-61456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:19:31.399 [DEBUG] [Thread-61456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:19:31.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:19:31.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:19:31.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:19:31.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:19:31.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:19:31.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:19:31.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:19:31.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:19:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:19:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.804562 -999.00  +16.50   7.95     38   +2.30 1 1 1 1 1     0    0 12.87 -65.59 ZNESW 9.0 8.0 191.2 12.3 17.1 -23.8 -999.0 -999.0 16.8 -22.4 17.0 -23.2
2025-11-17T21:19:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:19:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:19:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.804562
2025-11-17T21:19:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:19:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:19:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:19:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:19:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:19:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:19:01', tmtdew=15.93, humidity=33.93, cloud=0.0, wind=15.16, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:19:01', seeing=1.48, atlas_timestamp='2025-11-17T19:18:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:17:00')
2025-11-17T21:19:31.425 [DEBUG] [Thread-61456] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:19:31.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:19:31.523 [DEBUG] [Thread-61459] [transport.py] [_log()] starting thread (client mode): 0xd31cdb70
2025-11-17T21:19:31.523 [DEBUG] [Thread-61459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:19:31.544 [DEBUG] [Thread-61459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:19:31.544 [INFO] [Thread-61459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:19:31.551 [DEBUG] [Thread-61459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:19:31.551 [DEBUG] [Thread-61459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:19:31.551 [DEBUG] [Thread-61459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:19:31.551 [DEBUG] [Thread-61459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:19:31.551 [DEBUG] [Thread-61459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:19:31.551 [DEBUG] [Thread-61459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:19:31.551 [DEBUG] [Thread-61459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:19:31.551 [DEBUG] [Thread-61459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] client lang: <none>
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] server lang: <none>
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] kex follows: False
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] Compression: none
2025-11-17T21:19:31.552 [DEBUG] [Thread-61459] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:19:31.608 [DEBUG] [Thread-61459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:19:31.608 [DEBUG] [Thread-61459] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:19:31.609 [DEBUG] [Thread-61459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:19:31.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:19:31.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:19:31.664 [DEBUG] [Thread-61459] [transport.py] [_log()] userauth is OK
2025-11-17T21:19:31.665 [DEBUG] [Thread-61459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:19:31.665 [DEBUG] [Thread-61459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:19:31.665 [DEBUG] [Thread-61459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:19:31.665 [DEBUG] [Thread-61459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:19:31.685 [INFO] [Thread-61459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:19:31.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:19:31.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:19:32.565 [DEBUG] [Thread-61459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:19:32.565 [DEBUG] [Thread-61459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:19:32.617 [DEBUG] [Thread-61459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:19:32.617 [DEBUG] [Thread-61459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:19:32.630 [DEBUG] [Thread-61459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:19:32.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:19:32.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:19:32.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:19:32.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:19:32.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:19:32.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:19:32.664 [DEBUG] [Thread-61459] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:19:37.995 [DEBUG] [Thread-61461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:19:41.524 [DEBUG] [Thread-61462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:19:47.909 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:19:47.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:19:53.030 [DEBUG] [Thread-61463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:20:02.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:20:02.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:20:02.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:20:03.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 19, 33), 15.92, 33.95, 0.0, 16.13, 16.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:20:03.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:19:33
2025-11-17T21:20:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:20:03.635 [DEBUG] [Thread-61464] [transport.py] [_log()] starting thread (client mode): 0xd31cea70
2025-11-17T21:20:03.635 [DEBUG] [Thread-61464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:20:03.655 [DEBUG] [Thread-61464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:20:03.655 [INFO] [Thread-61464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] client lang: <none>
2025-11-17T21:20:03.658 [DEBUG] [Thread-61464] [transport.py] [_log()] server lang: <none>
2025-11-17T21:20:03.659 [DEBUG] [Thread-61464] [transport.py] [_log()] kex follows: False
2025-11-17T21:20:03.659 [DEBUG] [Thread-61464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:20:03.659 [DEBUG] [Thread-61464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:20:03.659 [DEBUG] [Thread-61464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:20:03.659 [DEBUG] [Thread-61464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:20:03.659 [DEBUG] [Thread-61464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:20:03.659 [DEBUG] [Thread-61464] [transport.py] [_log()] Compression: none
2025-11-17T21:20:03.659 [DEBUG] [Thread-61464] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:20:03.675 [DEBUG] [Thread-61464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:20:03.676 [DEBUG] [Thread-61464] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:20:03.676 [DEBUG] [Thread-61464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:20:03.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:20:03.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:20:03.678 [DEBUG] [Thread-61464] [transport.py] [_log()] userauth is OK
2025-11-17T21:20:03.679 [DEBUG] [Thread-61464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:20:03.679 [DEBUG] [Thread-61464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:20:03.679 [DEBUG] [Thread-61464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:20:03.679 [DEBUG] [Thread-61464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:20:03.703 [INFO] [Thread-61464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:20:03.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:20:04.516 [DEBUG] [Thread-61464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:20:04.517 [DEBUG] [Thread-61464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:20:04.517 [DEBUG] [Thread-61464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:20:04.558 [DEBUG] [Thread-61464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:20:04.558 [DEBUG] [Thread-61464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:20:04.561 [DEBUG] [Thread-61464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:20:04.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:20:04.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:20:04.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:20:04.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:20:04.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:20:04.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:20:04.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:20:04.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:20:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:20:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.804909 -999.00  +16.40   6.32     38   +2.30 1 1 1 1 1     0    0 12.87 -67.55 ZNESW 9.0 6.3 204.7 10.1 17.1 -23.8 17.0 -22.8 16.7 -22.3 16.9 -23.2
2025-11-17T21:20:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:20:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:20:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.804909
2025-11-17T21:20:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:20:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:20:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:20:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:20:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:20:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:19:33', tmtdew=15.92, humidity=33.95, cloud=0.0, wind=16.13, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:19:33', seeing=1.36, atlas_timestamp='2025-11-17T19:19:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:17:00')
2025-11-17T21:20:04.587 [DEBUG] [Thread-61464] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:20:04.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:20:04.683 [DEBUG] [Thread-61467] [transport.py] [_log()] starting thread (client mode): 0xd317fb20
2025-11-17T21:20:04.684 [DEBUG] [Thread-61467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:20:04.698 [DEBUG] [Thread-61467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:20:04.698 [INFO] [Thread-61467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:20:04.705 [DEBUG] [Thread-61467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] client lang: <none>
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] server lang: <none>
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] kex follows: False
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] Compression: none
2025-11-17T21:20:04.706 [DEBUG] [Thread-61467] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:20:04.765 [DEBUG] [Thread-61467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:20:04.765 [DEBUG] [Thread-61467] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:20:04.766 [DEBUG] [Thread-61467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:20:04.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:20:04.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:20:04.829 [DEBUG] [Thread-61467] [transport.py] [_log()] userauth is OK
2025-11-17T21:20:04.829 [DEBUG] [Thread-61467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:20:04.829 [DEBUG] [Thread-61467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:20:04.829 [DEBUG] [Thread-61467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:20:04.829 [DEBUG] [Thread-61467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:20:04.847 [INFO] [Thread-61467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:20:04.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:20:04.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:20:05.722 [DEBUG] [Thread-61467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:20:05.723 [DEBUG] [Thread-61467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:20:05.770 [DEBUG] [Thread-61467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:20:05.770 [DEBUG] [Thread-61467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:20:05.779 [DEBUG] [Thread-61467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:20:05.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:20:05.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:20:05.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:20:05.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:20:05.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:20:05.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:20:05.810 [DEBUG] [Thread-61467] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:20:08.060 [DEBUG] [Thread-61469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:20:23.109 [DEBUG] [Thread-61470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:20:35.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:20:35.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:20:35.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:20:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 20, 5), 15.84, 34.15, 0.0, 14.98, 16.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:20:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:20:05
2025-11-17T21:20:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:20:36.731 [DEBUG] [Thread-61471] [transport.py] [_log()] starting thread (client mode): 0xd31cf700
2025-11-17T21:20:36.731 [DEBUG] [Thread-61471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:20:36.753 [DEBUG] [Thread-61471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:20:36.753 [INFO] [Thread-61471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:20:36.756 [DEBUG] [Thread-61471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:20:36.756 [DEBUG] [Thread-61471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:20:36.756 [DEBUG] [Thread-61471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:20:36.756 [DEBUG] [Thread-61471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:20:36.756 [DEBUG] [Thread-61471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:20:36.756 [DEBUG] [Thread-61471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] client lang: <none>
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] server lang: <none>
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] kex follows: False
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] Compression: none
2025-11-17T21:20:36.757 [DEBUG] [Thread-61471] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:20:36.773 [DEBUG] [Thread-61471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:20:36.774 [DEBUG] [Thread-61471] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:20:36.774 [DEBUG] [Thread-61471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:20:36.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:20:36.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:20:36.776 [DEBUG] [Thread-61471] [transport.py] [_log()] userauth is OK
2025-11-17T21:20:36.776 [DEBUG] [Thread-61471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:20:36.776 [DEBUG] [Thread-61471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:20:36.776 [DEBUG] [Thread-61471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:20:36.777 [DEBUG] [Thread-61471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:20:36.812 [INFO] [Thread-61471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:20:36.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:20:37.460 [DEBUG] [Thread-61471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:20:37.460 [DEBUG] [Thread-61471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:20:37.460 [DEBUG] [Thread-61471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:20:37.500 [DEBUG] [Thread-61471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:20:37.500 [DEBUG] [Thread-61471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:20:37.503 [DEBUG] [Thread-61471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:20:37.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:20:37.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:20:37.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:20:37.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:20:37.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:20:37.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:20:37.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:20:37.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:20:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:20:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.805604 -999.00  +16.40  11.69     39   +2.40 1 1 1 1 1     0    0 12.71 -73.03 ZNESW 15.8 11.7 195.4 13.1 17.0 -23.7 16.9 -23.2 16.7 -22.4 16.9 -23.2
2025-11-17T21:20:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:20:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:20:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.805604
2025-11-17T21:20:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:20:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:20:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:20:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:20:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:20:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:20:05', tmtdew=15.84, humidity=34.15, cloud=0.0, wind=14.98, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:20:05', seeing=1.81, atlas_timestamp='2025-11-17T19:20:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:17:00')
2025-11-17T21:20:37.527 [DEBUG] [Thread-61471] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:20:37.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:20:37.623 [DEBUG] [Thread-61474] [transport.py] [_log()] starting thread (client mode): 0xd31cef20
2025-11-17T21:20:37.624 [DEBUG] [Thread-61474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:20:37.638 [DEBUG] [Thread-61474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:20:37.638 [INFO] [Thread-61474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:20:37.645 [DEBUG] [Thread-61474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] client lang: <none>
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] server lang: <none>
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] kex follows: False
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] Compression: none
2025-11-17T21:20:37.646 [DEBUG] [Thread-61474] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:20:37.703 [DEBUG] [Thread-61474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:20:37.703 [DEBUG] [Thread-61474] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:20:37.703 [DEBUG] [Thread-61474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:20:37.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:20:37.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:20:37.760 [DEBUG] [Thread-61474] [transport.py] [_log()] userauth is OK
2025-11-17T21:20:37.760 [DEBUG] [Thread-61474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:20:37.760 [DEBUG] [Thread-61474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:20:37.761 [DEBUG] [Thread-61474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:20:37.761 [DEBUG] [Thread-61474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:20:37.780 [INFO] [Thread-61474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:20:37.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:20:37.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:20:38.138 [DEBUG] [Thread-61476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:20:38.593 [DEBUG] [Thread-61474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:20:38.593 [DEBUG] [Thread-61474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:20:38.641 [DEBUG] [Thread-61474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:20:38.641 [DEBUG] [Thread-61474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:20:38.649 [DEBUG] [Thread-61474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:20:38.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:20:38.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:20:38.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:20:38.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:20:38.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:20:38.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:20:38.680 [DEBUG] [Thread-61474] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:20:41.598 [DEBUG] [Thread-61477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:20:48.113 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:20:48.114 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:20:53.170 [DEBUG] [Thread-61478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:21:08.199 [DEBUG] [Thread-61479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:21:08.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:21:08.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:21:08.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:21:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 20, 37), 15.75, 34.5, 0.0, 13.09, 16.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:21:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:20:37
2025-11-17T21:21:09.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:21:09.624 [DEBUG] [Thread-61480] [transport.py] [_log()] starting thread (client mode): 0xd31b1270
2025-11-17T21:21:09.625 [DEBUG] [Thread-61480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:21:09.644 [DEBUG] [Thread-61480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:21:09.644 [INFO] [Thread-61480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:21:09.648 [DEBUG] [Thread-61480] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:21:09.648 [DEBUG] [Thread-61480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:21:09.648 [DEBUG] [Thread-61480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:21:09.648 [DEBUG] [Thread-61480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:21:09.648 [DEBUG] [Thread-61480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:21:09.648 [DEBUG] [Thread-61480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:21:09.648 [DEBUG] [Thread-61480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] client lang: <none>
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] server lang: <none>
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] kex follows: False
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:21:09.649 [DEBUG] [Thread-61480] [transport.py] [_log()] Compression: none
2025-11-17T21:21:09.650 [DEBUG] [Thread-61480] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:21:09.670 [DEBUG] [Thread-61480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:21:09.670 [DEBUG] [Thread-61480] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:21:09.671 [DEBUG] [Thread-61480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:21:09.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:21:09.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:21:09.673 [DEBUG] [Thread-61480] [transport.py] [_log()] userauth is OK
2025-11-17T21:21:09.673 [DEBUG] [Thread-61480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:21:09.673 [DEBUG] [Thread-61480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:21:09.673 [DEBUG] [Thread-61480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:21:09.673 [DEBUG] [Thread-61480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:21:09.687 [INFO] [Thread-61480] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:21:09.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:21:10.352 [DEBUG] [Thread-61480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:21:10.352 [DEBUG] [Thread-61480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:21:10.352 [DEBUG] [Thread-61480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:21:10.393 [DEBUG] [Thread-61480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:21:10.393 [DEBUG] [Thread-61480] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:21:10.395 [DEBUG] [Thread-61480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:21:10.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:21:10.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:21:10.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:21:10.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:21:10.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:21:10.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:21:10.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.805951 -999.00  +16.40   8.11     38   +2.30 1 1 1 1 1     0    0 12.17 -80.27 ZNESW 5.6 8.1 188.8 12.8 17.0 -23.7 16.9 -22.8 16.7 -22.5 16.9 -23.3
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.805951
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:21:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:20:37', tmtdew=15.75, humidity=34.5, cloud=0.0, wind=13.09, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:20:37', seeing=1.33, atlas_timestamp='2025-11-17T19:20:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:17:00')
2025-11-17T21:21:10.413 [DEBUG] [Thread-61480] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:21:10.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:21:10.499 [DEBUG] [Thread-61483] [transport.py] [_log()] starting thread (client mode): 0xd31cd7e0
2025-11-17T21:21:10.499 [DEBUG] [Thread-61483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:21:10.513 [DEBUG] [Thread-61483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:21:10.513 [INFO] [Thread-61483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:21:10.520 [DEBUG] [Thread-61483] [transport.py] [_log()] client lang: <none>
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] server lang: <none>
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] kex follows: False
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] Compression: none
2025-11-17T21:21:10.521 [DEBUG] [Thread-61483] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:21:10.579 [DEBUG] [Thread-61483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:21:10.579 [DEBUG] [Thread-61483] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:21:10.579 [DEBUG] [Thread-61483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:21:10.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:21:10.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:21:10.636 [DEBUG] [Thread-61483] [transport.py] [_log()] userauth is OK
2025-11-17T21:21:10.636 [DEBUG] [Thread-61483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:21:10.636 [DEBUG] [Thread-61483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:21:10.636 [DEBUG] [Thread-61483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:21:10.636 [DEBUG] [Thread-61483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:21:10.650 [INFO] [Thread-61483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:21:10.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:21:10.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:21:11.475 [DEBUG] [Thread-61483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:21:11.475 [DEBUG] [Thread-61483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:21:11.523 [DEBUG] [Thread-61483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:21:11.523 [DEBUG] [Thread-61483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:21:11.531 [DEBUG] [Thread-61483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:21:11.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:21:11.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:21:11.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:21:11.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:21:11.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:21:11.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:21:11.568 [DEBUG] [Thread-61483] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:21:23.230 [DEBUG] [Thread-61485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:21:38.272 [DEBUG] [Thread-61486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:21:41.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:21:41.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:21:41.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:21:41.673 [DEBUG] [Thread-61487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:21:42.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 21, 9), 15.73, 34.55, 0.0, 12.49, 16.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:21:42.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:21:09
2025-11-17T21:21:42.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:21:42.602 [DEBUG] [Thread-61488] [transport.py] [_log()] starting thread (client mode): 0xd0701d20
2025-11-17T21:21:42.602 [DEBUG] [Thread-61488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:21:42.622 [DEBUG] [Thread-61488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:21:42.622 [INFO] [Thread-61488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:21:42.625 [DEBUG] [Thread-61488] [transport.py] [_log()] client lang: <none>
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] server lang: <none>
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] kex follows: False
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] Compression: none
2025-11-17T21:21:42.626 [DEBUG] [Thread-61488] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:21:42.644 [DEBUG] [Thread-61488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:21:42.645 [DEBUG] [Thread-61488] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:21:42.645 [DEBUG] [Thread-61488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:21:42.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:21:42.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:21:42.646 [DEBUG] [Thread-61488] [transport.py] [_log()] userauth is OK
2025-11-17T21:21:42.646 [DEBUG] [Thread-61488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:21:42.646 [DEBUG] [Thread-61488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:21:42.646 [DEBUG] [Thread-61488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:21:42.646 [DEBUG] [Thread-61488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:21:42.655 [INFO] [Thread-61488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:21:42.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:21:43.288 [DEBUG] [Thread-61488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:21:43.288 [DEBUG] [Thread-61488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:21:43.288 [DEBUG] [Thread-61488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:21:43.329 [DEBUG] [Thread-61488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:21:43.329 [DEBUG] [Thread-61488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:21:43.331 [DEBUG] [Thread-61488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:21:43.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:21:43.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:21:43.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:21:43.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:21:43.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:21:43.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:21:43.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:21:43.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.806298 -999.00  +16.30   8.53     39   +2.50 1 1 1 1 1     0    0 12.24 -84.92 ZNESW 9.8 8.5 195.2 11.4 17.0 -23.6 16.9 -23.0 16.6 -22.4 16.9 -23.3
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.806298
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:21:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:21:09', tmtdew=15.73, humidity=34.55, cloud=0.0, wind=12.49, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:21:09', seeing=1.37, atlas_timestamp='2025-11-17T19:21:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.1322499999999991, 0.08525000000000027, 0.0804999999999989, 0.1144999999999996, 0.15525000000000055, 0.09849999999999959, 0.05525000000000091, 0.10050000000000026, 0.11400000000000077, 0.12824999999999953, 0.1435000000000013, 0.2569999999999997, 0.12175000000000047, 0.05799999999999983, 0.05299999999999905, 0.11624999999999908, 0.1509999999999998, 0.23399999999999999, 0.2132499999999986, 0.2754999999999974, 0.10574999999999868, 0.06325000000000003, 0.09825000000000017, 0.10199999999999854, 0.2115000000000009, 0.2997499999999995, 0.36549999999999994, 0.36600000000000055, 0.11750000000000149, 0.22900000000000098, 0.08900000000000041, 0.1377499999999987], zp_timestamp='2025-11-17T19:17:00')
2025-11-17T21:21:43.349 [DEBUG] [Thread-61488] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:21:43.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:21:43.434 [DEBUG] [Thread-61491] [transport.py] [_log()] starting thread (client mode): 0xd0701990
2025-11-17T21:21:43.434 [DEBUG] [Thread-61491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:21:43.449 [DEBUG] [Thread-61491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:21:43.449 [INFO] [Thread-61491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] client lang: <none>
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] server lang: <none>
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] kex follows: False
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:21:43.456 [DEBUG] [Thread-61491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:21:43.457 [DEBUG] [Thread-61491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:21:43.457 [DEBUG] [Thread-61491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:21:43.457 [DEBUG] [Thread-61491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:21:43.457 [DEBUG] [Thread-61491] [transport.py] [_log()] Compression: none
2025-11-17T21:21:43.457 [DEBUG] [Thread-61491] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:21:43.511 [DEBUG] [Thread-61491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:21:43.511 [DEBUG] [Thread-61491] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:21:43.511 [DEBUG] [Thread-61491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:21:43.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:21:43.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:21:43.568 [DEBUG] [Thread-61491] [transport.py] [_log()] userauth is OK
2025-11-17T21:21:43.569 [DEBUG] [Thread-61491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:21:43.569 [DEBUG] [Thread-61491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:21:43.569 [DEBUG] [Thread-61491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:21:43.569 [DEBUG] [Thread-61491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:21:43.582 [INFO] [Thread-61491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:21:43.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:21:43.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:21:44.459 [DEBUG] [Thread-61491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:21:44.459 [DEBUG] [Thread-61491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:21:44.507 [DEBUG] [Thread-61491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:21:44.507 [DEBUG] [Thread-61491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:21:44.516 [DEBUG] [Thread-61491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:21:44.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:21:44.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:21:44.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:21:44.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:21:44.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:21:44.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:21:44.551 [DEBUG] [Thread-61491] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:21:48.319 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:21:48.320 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:21:53.300 [DEBUG] [Thread-61493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:22:08.342 [DEBUG] [Thread-61494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:22:14.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:22:14.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:22:14.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:22:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 21, 41), 15.59, 34.76, 0.0, 13.0, 16.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:22:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:21:41
2025-11-17T21:22:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:22:15.547 [DEBUG] [Thread-61495] [transport.py] [_log()] starting thread (client mode): 0xd07be470
2025-11-17T21:22:15.547 [DEBUG] [Thread-61495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:22:15.560 [DEBUG] [Thread-61495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:22:15.560 [INFO] [Thread-61495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] client lang: <none>
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] server lang: <none>
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] kex follows: False
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] Compression: none
2025-11-17T21:22:15.563 [DEBUG] [Thread-61495] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:22:15.578 [DEBUG] [Thread-61495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:22:15.578 [DEBUG] [Thread-61495] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:22:15.579 [DEBUG] [Thread-61495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:22:15.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:22:15.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:22:15.579 [DEBUG] [Thread-61495] [transport.py] [_log()] userauth is OK
2025-11-17T21:22:15.579 [DEBUG] [Thread-61495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:22:15.579 [DEBUG] [Thread-61495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:22:15.579 [DEBUG] [Thread-61495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:22:15.579 [DEBUG] [Thread-61495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:22:15.589 [INFO] [Thread-61495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:22:15.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:22:16.254 [DEBUG] [Thread-61495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:22:16.254 [DEBUG] [Thread-61495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:22:16.255 [DEBUG] [Thread-61495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:22:16.295 [DEBUG] [Thread-61495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:22:16.295 [DEBUG] [Thread-61495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:22:16.298 [DEBUG] [Thread-61495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:22:16.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:22:16.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:22:16.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:22:16.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:22:16.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:22:16.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:22:16.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:22:16.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:22:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:22:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.806646 -999.00  +16.30   7.11     39   +2.50 1 1 1 1 1     0    0 11.63 -95.22 ZNESW 11.2 7.1 187.6 9.8 17.0 -23.7 16.9 -23.0 16.7 -22.5 16.9 -23.3
2025-11-17T21:22:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:22:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:22:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.806646
2025-11-17T21:22:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:22:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:22:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:22:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:22:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:22:16.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:21:41', tmtdew=15.59, humidity=34.76, cloud=0.0, wind=13.0, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:22:13', seeing=1.45, atlas_timestamp='2025-11-17T19:21:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:20:00')
2025-11-17T21:22:16.318 [DEBUG] [Thread-61495] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:22:16.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:22:16.411 [DEBUG] [Thread-61498] [transport.py] [_log()] starting thread (client mode): 0xd317dc90
2025-11-17T21:22:16.411 [DEBUG] [Thread-61498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:22:16.426 [DEBUG] [Thread-61498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:22:16.426 [INFO] [Thread-61498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:22:16.433 [DEBUG] [Thread-61498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] client lang: <none>
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] server lang: <none>
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] kex follows: False
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] Compression: none
2025-11-17T21:22:16.434 [DEBUG] [Thread-61498] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:22:16.495 [DEBUG] [Thread-61498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:22:16.496 [DEBUG] [Thread-61498] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:22:16.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:22:16.497 [DEBUG] [Thread-61498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:22:16.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:22:16.552 [DEBUG] [Thread-61498] [transport.py] [_log()] userauth is OK
2025-11-17T21:22:16.553 [DEBUG] [Thread-61498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:22:16.553 [DEBUG] [Thread-61498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:22:16.553 [DEBUG] [Thread-61498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:22:16.553 [DEBUG] [Thread-61498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:22:16.572 [INFO] [Thread-61498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:22:16.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:22:16.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:22:17.416 [DEBUG] [Thread-61498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:22:17.416 [DEBUG] [Thread-61498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:22:17.466 [DEBUG] [Thread-61498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:22:17.466 [DEBUG] [Thread-61498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:22:17.476 [DEBUG] [Thread-61498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:22:17.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:22:17.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:22: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') -> 00000000
2025-11-17T21:22:17.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:22:17.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:22:17.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:22:17.516 [DEBUG] [Thread-61498] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:22:23.367 [DEBUG] [Thread-61500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:22:38.416 [DEBUG] [Thread-61501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:22:41.732 [DEBUG] [Thread-61502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:22:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:22:47.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:22:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:22:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 22, 13), 15.58, 34.78, 0.0, 13.78, 16.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:22:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:22:13
2025-11-17T21:22:48.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:22:48.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:22:48.522 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:22:48.555 [DEBUG] [Thread-61503] [transport.py] [_log()] starting thread (client mode): 0xd7bc6650
2025-11-17T21:22:48.555 [DEBUG] [Thread-61503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:22:48.575 [DEBUG] [Thread-61503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:22:48.575 [INFO] [Thread-61503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] client lang: <none>
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] server lang: <none>
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] kex follows: False
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:22:48.578 [DEBUG] [Thread-61503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:22:48.579 [DEBUG] [Thread-61503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:22:48.579 [DEBUG] [Thread-61503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:22:48.579 [DEBUG] [Thread-61503] [transport.py] [_log()] Compression: none
2025-11-17T21:22:48.579 [DEBUG] [Thread-61503] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:22:48.595 [DEBUG] [Thread-61503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:22:48.596 [DEBUG] [Thread-61503] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:22:48.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:22:48.596 [DEBUG] [Thread-61503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:22:48.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:22:48.597 [DEBUG] [Thread-61503] [transport.py] [_log()] userauth is OK
2025-11-17T21:22:48.597 [DEBUG] [Thread-61503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:22:48.597 [DEBUG] [Thread-61503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:22:48.597 [DEBUG] [Thread-61503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:22:48.597 [DEBUG] [Thread-61503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:22:48.610 [INFO] [Thread-61503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:22:48.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:22:49.261 [DEBUG] [Thread-61503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:22:49.261 [DEBUG] [Thread-61503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:22:49.261 [DEBUG] [Thread-61503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:22:49.302 [DEBUG] [Thread-61503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:22:49.302 [DEBUG] [Thread-61503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:22:49.305 [DEBUG] [Thread-61503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:22:49.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:22:49.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:22:49.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:22:49.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:22:49.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:22:49.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:22:49.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:22:49.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.806993 -999.00  +16.30   9.14     39   +2.50 1 1 1 1 1     0    0 11.43 -102.12 ZNESW 7.9 9.1 194.6 13.3 16.9 -23.7 16.9 -22.9 16.6 -22.5 16.9 -23.3
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.806993
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:22:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:22:13', tmtdew=15.58, humidity=34.78, cloud=0.0, wind=13.78, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:22:45', seeing=1.32, atlas_timestamp='2025-11-17T19:22:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:20:00')
2025-11-17T21:22:49.325 [DEBUG] [Thread-61503] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:22:49.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:22:49.409 [DEBUG] [Thread-61506] [transport.py] [_log()] starting thread (client mode): 0xd0700100
2025-11-17T21:22:49.410 [DEBUG] [Thread-61506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:22:49.425 [DEBUG] [Thread-61506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:22:49.426 [INFO] [Thread-61506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:22:49.433 [DEBUG] [Thread-61506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] client lang: <none>
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] server lang: <none>
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] kex follows: False
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] Compression: none
2025-11-17T21:22:49.434 [DEBUG] [Thread-61506] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:22:49.495 [DEBUG] [Thread-61506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:22:49.496 [DEBUG] [Thread-61506] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:22:49.496 [DEBUG] [Thread-61506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:22:49.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:22:49.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:22:49.552 [DEBUG] [Thread-61506] [transport.py] [_log()] userauth is OK
2025-11-17T21:22:49.552 [DEBUG] [Thread-61506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:22:49.552 [DEBUG] [Thread-61506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:22:49.552 [DEBUG] [Thread-61506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:22:49.552 [DEBUG] [Thread-61506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:22:49.566 [INFO] [Thread-61506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:22:49.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:22:49.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:22:50.419 [DEBUG] [Thread-61506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:22:50.420 [DEBUG] [Thread-61506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:22:50.468 [DEBUG] [Thread-61506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:22:50.468 [DEBUG] [Thread-61506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:22:50.476 [DEBUG] [Thread-61506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:22:50.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:22:50.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:22: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
2025-11-17T21:22:50.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:22:50.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:22:50.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:22:50.508 [DEBUG] [Thread-61506] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:22:53.444 [DEBUG] [Thread-61508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:23:08.494 [DEBUG] [Thread-61509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:23:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:23:20.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:23:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:23:21.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 23, 17), 15.49, 34.88, 0.0, 12.93, 16.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:23:21.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:23:17
2025-11-17T21:23:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:23:21.467 [DEBUG] [Thread-61510] [transport.py] [_log()] starting thread (client mode): 0xd7bc6a70
2025-11-17T21:23:21.467 [DEBUG] [Thread-61510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:23:21.487 [DEBUG] [Thread-61510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:23:21.487 [INFO] [Thread-61510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] client lang: <none>
2025-11-17T21:23:21.490 [DEBUG] [Thread-61510] [transport.py] [_log()] server lang: <none>
2025-11-17T21:23:21.491 [DEBUG] [Thread-61510] [transport.py] [_log()] kex follows: False
2025-11-17T21:23:21.491 [DEBUG] [Thread-61510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:23:21.491 [DEBUG] [Thread-61510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:23:21.491 [DEBUG] [Thread-61510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:23:21.491 [DEBUG] [Thread-61510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:23:21.491 [DEBUG] [Thread-61510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:23:21.491 [DEBUG] [Thread-61510] [transport.py] [_log()] Compression: none
2025-11-17T21:23:21.491 [DEBUG] [Thread-61510] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:23:21.509 [DEBUG] [Thread-61510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:23:21.509 [DEBUG] [Thread-61510] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:23:21.510 [DEBUG] [Thread-61510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:23:21.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:23:21.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:23:21.511 [DEBUG] [Thread-61510] [transport.py] [_log()] userauth is OK
2025-11-17T21:23:21.512 [DEBUG] [Thread-61510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:23:21.512 [DEBUG] [Thread-61510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:23:21.512 [DEBUG] [Thread-61510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:23:21.512 [DEBUG] [Thread-61510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:23:21.534 [INFO] [Thread-61510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:23:21.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:23:22.161 [DEBUG] [Thread-61510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:23:22.161 [DEBUG] [Thread-61510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:23:22.162 [DEBUG] [Thread-61510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:23:22.202 [DEBUG] [Thread-61510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:23:22.202 [DEBUG] [Thread-61510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:23:22.205 [DEBUG] [Thread-61510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:23:22.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:23:22.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:23:22.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:23:22.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:23:22.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:23:22.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:23:22.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:23:22.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:23:22.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:23:22.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.807340 -999.00  +16.30   9.97     39   +2.40 1 1 1 1 1     0    0 11.52 -107.10 ZNESW 8.5 10.0 195.8 10.8 16.9 -23.7 16.9 -23.0 16.6 -22.5 16.9 -23.6
2025-11-17T21:23:22.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:23:22.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:23:22.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.807340
2025-11-17T21:23:22.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:23:22.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:23:22.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:23:22.230 [DEBUG] [Thread-61510] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:23:22.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:23:22.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:23:22.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:23:17', tmtdew=15.49, humidity=34.88, cloud=0.0, wind=12.93, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:23:17', seeing=1.7, atlas_timestamp='2025-11-17T19:22:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:20:00')
2025-11-17T21:23:22.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:23:22.327 [DEBUG] [Thread-61513] [transport.py] [_log()] starting thread (client mode): 0xd317fca0
2025-11-17T21:23:22.328 [DEBUG] [Thread-61513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:23:22.346 [DEBUG] [Thread-61513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:23:22.347 [INFO] [Thread-61513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:23:22.354 [DEBUG] [Thread-61513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:23:22.354 [DEBUG] [Thread-61513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:23:22.354 [DEBUG] [Thread-61513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:23:22.354 [DEBUG] [Thread-61513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] client lang: <none>
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] server lang: <none>
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] kex follows: False
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:23:22.355 [DEBUG] [Thread-61513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:23:22.356 [DEBUG] [Thread-61513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:23:22.356 [DEBUG] [Thread-61513] [transport.py] [_log()] Compression: none
2025-11-17T21:23:22.356 [DEBUG] [Thread-61513] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:23:22.413 [DEBUG] [Thread-61513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:23:22.413 [DEBUG] [Thread-61513] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:23:22.414 [DEBUG] [Thread-61513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:23:22.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:23:22.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:23:22.468 [DEBUG] [Thread-61513] [transport.py] [_log()] userauth is OK
2025-11-17T21:23:22.469 [DEBUG] [Thread-61513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:23:22.469 [DEBUG] [Thread-61513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:23:22.469 [DEBUG] [Thread-61513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:23:22.469 [DEBUG] [Thread-61513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:23:22.497 [INFO] [Thread-61513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:23:22.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:23:22.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:23:23.318 [DEBUG] [Thread-61513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:23:23.318 [DEBUG] [Thread-61513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:23:23.357 [DEBUG] [Thread-61513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:23:23.357 [DEBUG] [Thread-61513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:23:23.366 [DEBUG] [Thread-61513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:23:23.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:23:23.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')
2025-11-17T21:23:23.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:23:23.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:23:23.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:23:23.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:23:23.400 [DEBUG] [Thread-61513] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:23:23.525 [DEBUG] [Thread-61515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:23:38.569 [DEBUG] [Thread-61516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:23:41.793 [DEBUG] [Thread-61517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:23:48.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:23:48.725 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:23:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:23:53.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:23:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:23:53.602 [DEBUG] [Thread-61518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:23:54.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 23, 49), 15.44, 34.98, 0.0, 12.95, 16.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:23:54.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:23:49
2025-11-17T21:23:54.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:23:54.356 [DEBUG] [Thread-61519] [transport.py] [_log()] starting thread (client mode): 0xd31376d0
2025-11-17T21:23:54.357 [DEBUG] [Thread-61519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:23:54.377 [DEBUG] [Thread-61519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:23:54.378 [INFO] [Thread-61519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:23:54.381 [DEBUG] [Thread-61519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:23:54.381 [DEBUG] [Thread-61519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:23:54.381 [DEBUG] [Thread-61519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:23:54.381 [DEBUG] [Thread-61519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:23:54.381 [DEBUG] [Thread-61519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:23:54.381 [DEBUG] [Thread-61519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:23:54.381 [DEBUG] [Thread-61519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] client lang: <none>
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] server lang: <none>
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] kex follows: False
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] Compression: none
2025-11-17T21:23:54.382 [DEBUG] [Thread-61519] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:23:54.399 [DEBUG] [Thread-61519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:23:54.399 [DEBUG] [Thread-61519] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:23:54.399 [DEBUG] [Thread-61519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:23:54.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:23:54.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:23:54.402 [DEBUG] [Thread-61519] [transport.py] [_log()] userauth is OK
2025-11-17T21:23:54.402 [DEBUG] [Thread-61519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:23:54.402 [DEBUG] [Thread-61519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:23:54.402 [DEBUG] [Thread-61519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:23:54.402 [DEBUG] [Thread-61519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:23:54.441 [INFO] [Thread-61519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:23:54.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:23:55.080 [DEBUG] [Thread-61519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:23:55.081 [DEBUG] [Thread-61519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:23:55.081 [DEBUG] [Thread-61519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:23:55.121 [DEBUG] [Thread-61519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:23:55.121 [DEBUG] [Thread-61519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:23:55.125 [DEBUG] [Thread-61519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:23:55.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:23:55.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:23:55.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:23:55.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:23:55.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:23:55.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:23:55.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:23:55.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:23:55.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:23:55.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.808034 -999.00  +16.30   7.87     39   +2.60 1 1 1 1 1     0    0 11.58 -97.20 ZNESW 8.6 7.9 202.5 16.0 16.9 -23.7 16.8 -22.8 16.6 -22.4 16.8 -23.4
2025-11-17T21:23:55.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:23:55.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:23:55.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.808034
2025-11-17T21:23:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:23:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:23:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:23:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:23:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:23:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:23:49', tmtdew=15.44, humidity=34.98, cloud=0.0, wind=12.95, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:23:49', seeing=1.83, atlas_timestamp='2025-11-17T19:23:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:20:00')
2025-11-17T21:23:55.151 [DEBUG] [Thread-61519] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:23:55.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:23:55.248 [DEBUG] [Thread-61522] [transport.py] [_log()] starting thread (client mode): 0xd31b1270
2025-11-17T21:23:55.248 [DEBUG] [Thread-61522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:23:55.262 [DEBUG] [Thread-61522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:23:55.262 [INFO] [Thread-61522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:23:55.270 [DEBUG] [Thread-61522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:23:55.270 [DEBUG] [Thread-61522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:23:55.270 [DEBUG] [Thread-61522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:23:55.270 [DEBUG] [Thread-61522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:23:55.270 [DEBUG] [Thread-61522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:23:55.270 [DEBUG] [Thread-61522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] client lang: <none>
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] server lang: <none>
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] kex follows: False
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] Compression: none
2025-11-17T21:23:55.271 [DEBUG] [Thread-61522] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:23:55.327 [DEBUG] [Thread-61522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:23:55.328 [DEBUG] [Thread-61522] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:23:55.328 [DEBUG] [Thread-61522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:23:55.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:23:55.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:23:55.384 [DEBUG] [Thread-61522] [transport.py] [_log()] userauth is OK
2025-11-17T21:23:55.385 [DEBUG] [Thread-61522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:23:55.385 [DEBUG] [Thread-61522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:23:55.385 [DEBUG] [Thread-61522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:23:55.385 [DEBUG] [Thread-61522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:23:55.404 [INFO] [Thread-61522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:23:55.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:23:55.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:23:56.300 [DEBUG] [Thread-61522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:23:56.300 [DEBUG] [Thread-61522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:23:56.348 [DEBUG] [Thread-61522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:23:56.348 [DEBUG] [Thread-61522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:23:56.357 [DEBUG] [Thread-61522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:23:56.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:23:56.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:23:56.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:23:56.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:23:56.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:23:56.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:23:56.391 [DEBUG] [Thread-61522] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:24:08.627 [DEBUG] [Thread-61524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:24:23.659 [DEBUG] [Thread-61525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:24:26.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:24:26.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:24:26.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:24:27.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 24, 21), 15.44, 35.0, 0.0, 12.07, 16.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:24:27.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:24:21
2025-11-17T21:24:27.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:24:27.354 [DEBUG] [Thread-61526] [transport.py] [_log()] starting thread (client mode): 0xd31509d0
2025-11-17T21:24:27.354 [DEBUG] [Thread-61526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:24:27.375 [DEBUG] [Thread-61526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:24:27.375 [INFO] [Thread-61526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:24:27.378 [DEBUG] [Thread-61526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:24:27.378 [DEBUG] [Thread-61526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:24:27.378 [DEBUG] [Thread-61526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:24:27.378 [DEBUG] [Thread-61526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:24:27.378 [DEBUG] [Thread-61526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:24:27.378 [DEBUG] [Thread-61526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:24:27.378 [DEBUG] [Thread-61526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] client lang: <none>
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] server lang: <none>
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] kex follows: False
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] Compression: none
2025-11-17T21:24:27.379 [DEBUG] [Thread-61526] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:24:27.399 [DEBUG] [Thread-61526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:24:27.399 [DEBUG] [Thread-61526] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:24:27.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:24:27.401 [DEBUG] [Thread-61526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:24:27.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:24:27.403 [DEBUG] [Thread-61526] [transport.py] [_log()] userauth is OK
2025-11-17T21:24:27.403 [DEBUG] [Thread-61526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:24:27.403 [DEBUG] [Thread-61526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:24:27.403 [DEBUG] [Thread-61526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:24:27.403 [DEBUG] [Thread-61526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:24:27.427 [INFO] [Thread-61526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:24:27.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:24:28.077 [DEBUG] [Thread-61526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:24:28.077 [DEBUG] [Thread-61526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:24:28.078 [DEBUG] [Thread-61526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:24:28.117 [DEBUG] [Thread-61526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:24:28.117 [DEBUG] [Thread-61526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:24:28.121 [DEBUG] [Thread-61526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:24:28.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:24:28.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:24:28.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:24:28.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:24:28.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:24:28.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:24:28.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:24:28.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:24:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:24:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.808382 -999.00  +16.30   7.12     39   +2.50 1 1 1 1 1     0    0 11.31 -95.14 ZNESW 7.7 7.1 203.0 10.9 16.9 -23.7 16.8 -22.9 16.6 -22.5 16.8 -23.2
2025-11-17T21:24:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:24:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:24:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.808382
2025-11-17T21:24:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:24:28.139 [DEBUG] [Thread-61526] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:24:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:24:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:24:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:24:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:24:28.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:24:21', tmtdew=15.44, humidity=35.0, cloud=0.0, wind=12.07, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:24:21', seeing=1.68, atlas_timestamp='2025-11-17T19:24:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:20:00')
2025-11-17T21:24:28.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:24:28.247 [DEBUG] [Thread-61529] [transport.py] [_log()] starting thread (client mode): 0xd3151870
2025-11-17T21:24:28.247 [DEBUG] [Thread-61529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:24:28.262 [DEBUG] [Thread-61529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:24:28.262 [INFO] [Thread-61529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:24:28.269 [DEBUG] [Thread-61529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] client lang: <none>
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] server lang: <none>
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] kex follows: False
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] Compression: none
2025-11-17T21:24:28.270 [DEBUG] [Thread-61529] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:24:28.328 [DEBUG] [Thread-61529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:24:28.328 [DEBUG] [Thread-61529] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:24:28.338 [DEBUG] [Thread-61529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:24:28.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:24:28.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:24:28.388 [DEBUG] [Thread-61529] [transport.py] [_log()] userauth is OK
2025-11-17T21:24:28.389 [DEBUG] [Thread-61529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:24:28.389 [DEBUG] [Thread-61529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:24:28.389 [DEBUG] [Thread-61529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:24:28.389 [DEBUG] [Thread-61529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:24:28.408 [INFO] [Thread-61529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:24:28.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:24:28.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:24:29.284 [DEBUG] [Thread-61529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:24:29.285 [DEBUG] [Thread-61529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:24:29.332 [DEBUG] [Thread-61529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:24:29.333 [DEBUG] [Thread-61529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:24:29.342 [DEBUG] [Thread-61529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:24:29.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:24:29.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:24:29.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:24:29.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:24:29.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:24:29.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:24:29.378 [DEBUG] [Thread-61529] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:24:38.686 [DEBUG] [Thread-61531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:24:41.856 [DEBUG] [Thread-61532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:24:48.956 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:24:48.957 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:24:53.726 [DEBUG] [Thread-61533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:24:59.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:24:59.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:24:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:25:00.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 24, 53), 15.45, 34.96, 0.0, 11.66, 16.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:25:00.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:24:53
2025-11-17T21:25:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:25:00.329 [DEBUG] [Thread-61534] [transport.py] [_log()] starting thread (client mode): 0xd3151000
2025-11-17T21:25:00.330 [DEBUG] [Thread-61534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:25:00.350 [DEBUG] [Thread-61534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:25:00.350 [INFO] [Thread-61534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:25:00.353 [DEBUG] [Thread-61534] [transport.py] [_log()] client lang: <none>
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] server lang: <none>
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] kex follows: False
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] Compression: none
2025-11-17T21:25:00.354 [DEBUG] [Thread-61534] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:25:00.373 [DEBUG] [Thread-61534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:25:00.374 [DEBUG] [Thread-61534] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:25:00.374 [DEBUG] [Thread-61534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:25:00.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:25:00.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:25:00.376 [DEBUG] [Thread-61534] [transport.py] [_log()] userauth is OK
2025-11-17T21:25:00.376 [DEBUG] [Thread-61534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:25:00.377 [DEBUG] [Thread-61534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:25:00.377 [DEBUG] [Thread-61534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:25:00.377 [DEBUG] [Thread-61534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:25:00.401 [INFO] [Thread-61534] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:25:00.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:25:01.048 [DEBUG] [Thread-61534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:25:01.049 [DEBUG] [Thread-61534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:25:01.049 [DEBUG] [Thread-61534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:25:01.089 [DEBUG] [Thread-61534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:25:01.090 [DEBUG] [Thread-61534] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:25:01.093 [DEBUG] [Thread-61534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:25:01.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:25:01.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:25:01.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:25:01.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:25:01.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:25:01.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:25:01.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:25:01.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:25:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:25:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.808729 -999.00  +16.30   8.67     39   +2.50 1 1 1 1 1     0    0 11.62 -92.64 ZNESW 6.1 8.7 196.2 10.2 16.9 -23.9 16.8 -23.1 16.5 -22.4 16.8 -23.4
2025-11-17T21:25:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:25:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:25:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.808729
2025-11-17T21:25:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:25:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:25:01.117 [DEBUG] [Thread-61534] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:25:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:25:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:25:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:25:01.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:24:53', tmtdew=15.45, humidity=34.96, cloud=0.0, wind=11.66, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:24:53', seeing=1.84, atlas_timestamp='2025-11-17T19:24:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:23:00')
2025-11-17T21:25:01.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:25:01.226 [DEBUG] [Thread-61537] [transport.py] [_log()] starting thread (client mode): 0xd31500a0
2025-11-17T21:25:01.227 [DEBUG] [Thread-61537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:25:01.241 [DEBUG] [Thread-61537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:25:01.241 [INFO] [Thread-61537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] client lang: <none>
2025-11-17T21:25:01.249 [DEBUG] [Thread-61537] [transport.py] [_log()] server lang: <none>
2025-11-17T21:25:01.250 [DEBUG] [Thread-61537] [transport.py] [_log()] kex follows: False
2025-11-17T21:25:01.250 [DEBUG] [Thread-61537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:25:01.250 [DEBUG] [Thread-61537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:25:01.250 [DEBUG] [Thread-61537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:25:01.250 [DEBUG] [Thread-61537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:25:01.250 [DEBUG] [Thread-61537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:25:01.250 [DEBUG] [Thread-61537] [transport.py] [_log()] Compression: none
2025-11-17T21:25:01.250 [DEBUG] [Thread-61537] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:25:01.308 [DEBUG] [Thread-61537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:25:01.309 [DEBUG] [Thread-61537] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:25:01.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:25:01.310 [DEBUG] [Thread-61537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:25:01.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:25:01.365 [DEBUG] [Thread-61537] [transport.py] [_log()] userauth is OK
2025-11-17T21:25:01.365 [DEBUG] [Thread-61537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:25:01.365 [DEBUG] [Thread-61537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:25:01.365 [DEBUG] [Thread-61537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:25:01.365 [DEBUG] [Thread-61537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:25:01.384 [INFO] [Thread-61537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:25:01.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:25:01.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:25:02.229 [DEBUG] [Thread-61537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:25:02.230 [DEBUG] [Thread-61537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:25:02.277 [DEBUG] [Thread-61537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:25:02.277 [DEBUG] [Thread-61537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:25:02.287 [DEBUG] [Thread-61537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:25:02.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:25:02.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:25:02.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:25:02.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:25:02.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:25:02.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:25:02.320 [DEBUG] [Thread-61537] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:25:08.755 [DEBUG] [Thread-61539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:25:23.802 [DEBUG] [Thread-61540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:25:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:25:32.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:25:32.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:25:32.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 25, 25), 15.43, 35.0, 0.0, 11.26, 16.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:25:32.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:25:25
2025-11-17T21:25:33.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:25:33.249 [DEBUG] [Thread-61541] [transport.py] [_log()] starting thread (client mode): 0xd3134a90
2025-11-17T21:25:33.249 [DEBUG] [Thread-61541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:25:33.261 [DEBUG] [Thread-61541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:25:33.261 [INFO] [Thread-61541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:25:33.264 [DEBUG] [Thread-61541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] client lang: <none>
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] server lang: <none>
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] kex follows: False
2025-11-17T21:25:33.265 [DEBUG] [Thread-61541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:25:33.266 [DEBUG] [Thread-61541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:25:33.266 [DEBUG] [Thread-61541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:25:33.266 [DEBUG] [Thread-61541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:25:33.266 [DEBUG] [Thread-61541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:25:33.266 [DEBUG] [Thread-61541] [transport.py] [_log()] Compression: none
2025-11-17T21:25:33.266 [DEBUG] [Thread-61541] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:25:33.284 [DEBUG] [Thread-61541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:25:33.285 [DEBUG] [Thread-61541] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:25:33.286 [DEBUG] [Thread-61541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:25:33.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:25:33.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:25:33.288 [DEBUG] [Thread-61541] [transport.py] [_log()] userauth is OK
2025-11-17T21:25:33.288 [DEBUG] [Thread-61541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:25:33.289 [DEBUG] [Thread-61541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:25:33.289 [DEBUG] [Thread-61541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:25:33.289 [DEBUG] [Thread-61541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:25:33.317 [INFO] [Thread-61541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:25:33.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:25:33.954 [DEBUG] [Thread-61541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:25:33.954 [DEBUG] [Thread-61541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:25:33.955 [DEBUG] [Thread-61541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:25:33.995 [DEBUG] [Thread-61541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:25:33.996 [DEBUG] [Thread-61541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:25:33.998 [DEBUG] [Thread-61541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:25:34.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:25:34.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:25:34.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:25:34.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:25:34.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:25:34.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:25:34.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:25:34.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:25:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:25:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.809076 -999.00  +16.30   8.19     39   +2.50 1 1 1 1 1     0    0 11.66 -86.22 ZNESW 8.3 8.2 191.6 11.4 16.9 -23.9 16.8 -22.9 16.6 -22.5 16.8 -23.5
2025-11-17T21:25:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:25:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:25:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.809076
2025-11-17T21:25:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:25:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:25:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:25:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:25:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:25:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:25:25', tmtdew=15.43, humidity=35.0, cloud=0.0, wind=11.26, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:25:25', seeing=1.46, atlas_timestamp='2025-11-17T19:25:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:23:00')
2025-11-17T21:25:34.022 [DEBUG] [Thread-61541] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:25:34.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:25:34.120 [DEBUG] [Thread-61544] [transport.py] [_log()] starting thread (client mode): 0xd0702350
2025-11-17T21:25:34.120 [DEBUG] [Thread-61544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:25:34.135 [DEBUG] [Thread-61544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:25:34.135 [INFO] [Thread-61544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:25:34.143 [DEBUG] [Thread-61544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:25:34.143 [DEBUG] [Thread-61544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:25:34.143 [DEBUG] [Thread-61544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:25:34.143 [DEBUG] [Thread-61544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:25:34.143 [DEBUG] [Thread-61544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:25:34.143 [DEBUG] [Thread-61544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:25:34.143 [DEBUG] [Thread-61544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] client lang: <none>
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] server lang: <none>
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] kex follows: False
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:25:34.144 [DEBUG] [Thread-61544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:25:34.145 [DEBUG] [Thread-61544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:25:34.145 [DEBUG] [Thread-61544] [transport.py] [_log()] Compression: none
2025-11-17T21:25:34.145 [DEBUG] [Thread-61544] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:25:34.206 [DEBUG] [Thread-61544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:25:34.207 [DEBUG] [Thread-61544] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:25:34.207 [DEBUG] [Thread-61544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:25:34.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:25:34.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:25:34.265 [DEBUG] [Thread-61544] [transport.py] [_log()] userauth is OK
2025-11-17T21:25:34.265 [DEBUG] [Thread-61544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:25:34.265 [DEBUG] [Thread-61544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:25:34.265 [DEBUG] [Thread-61544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:25:34.265 [DEBUG] [Thread-61544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:25:34.282 [INFO] [Thread-61544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:25:34.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:25:34.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:25:35.112 [DEBUG] [Thread-61544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:25:35.113 [DEBUG] [Thread-61544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:25:35.160 [DEBUG] [Thread-61544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:25:35.160 [DEBUG] [Thread-61544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:25:35.169 [DEBUG] [Thread-61544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:25:35.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:25:35.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:25:35.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:25:35.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:25:35.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:25:35.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:25:35.203 [DEBUG] [Thread-61544] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:25:38.827 [DEBUG] [Thread-61546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:25:41.930 [DEBUG] [Thread-61547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:25:49.158 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:25:49.159 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:25:53.878 [DEBUG] [Thread-61548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:26:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:26:05.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:26:05.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:26:05.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 25, 57), 15.36, 35.05, 0.0, 13.27, 16.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:26:05.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:25:57
2025-11-17T21:26:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:26:06.166 [DEBUG] [Thread-61549] [transport.py] [_log()] starting thread (client mode): 0xd07bf9d0
2025-11-17T21:26:06.166 [DEBUG] [Thread-61549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:26:06.179 [DEBUG] [Thread-61549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:26:06.179 [INFO] [Thread-61549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:26:06.180 [DEBUG] [Thread-61549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:26:06.180 [DEBUG] [Thread-61549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] client lang: <none>
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] server lang: <none>
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] kex follows: False
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] Compression: none
2025-11-17T21:26:06.181 [DEBUG] [Thread-61549] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:26:06.190 [DEBUG] [Thread-61549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:26:06.190 [DEBUG] [Thread-61549] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:26:06.191 [DEBUG] [Thread-61549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:26:06.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:26:06.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:26:06.191 [DEBUG] [Thread-61549] [transport.py] [_log()] userauth is OK
2025-11-17T21:26:06.191 [DEBUG] [Thread-61549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:26:06.191 [DEBUG] [Thread-61549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:26:06.191 [DEBUG] [Thread-61549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:26:06.191 [DEBUG] [Thread-61549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:26:06.200 [INFO] [Thread-61549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:26:06.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:26:06.783 [DEBUG] [Thread-61549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:26:06.783 [DEBUG] [Thread-61549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:26:06.784 [DEBUG] [Thread-61549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:26:06.824 [DEBUG] [Thread-61549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:26:06.825 [DEBUG] [Thread-61549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:26:06.828 [DEBUG] [Thread-61549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:26:06.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:26:06.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:26:06.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:26:06.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:26:06.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:26:06.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:26:06.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:26:06.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:26:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:26:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.809423 -999.00  +16.20   6.22     39   +2.50 1 1 1 1 1     0    0 11.85 -87.50 ZNESW 6.7 6.2 191.4 9.5 16.8 -23.8 16.8 -23.1 16.6 -22.6 16.8 -23.4
2025-11-17T21:26:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:26:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:26:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.809423
2025-11-17T21:26:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:26:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:26:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:26:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:26:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:26:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:25:57', tmtdew=15.36, humidity=35.05, cloud=0.0, wind=13.27, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:25:57', seeing=1.46, atlas_timestamp='2025-11-17T19:25:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:23:00')
2025-11-17T21:26:06.854 [DEBUG] [Thread-61549] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:26:06.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:26:06.950 [DEBUG] [Thread-61552] [transport.py] [_log()] starting thread (client mode): 0xd7bc6170
2025-11-17T21:26:06.950 [DEBUG] [Thread-61552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:26:06.965 [DEBUG] [Thread-61552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:26:06.965 [INFO] [Thread-61552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:26:06.972 [DEBUG] [Thread-61552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] client lang: <none>
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] server lang: <none>
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] kex follows: False
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:26:06.973 [DEBUG] [Thread-61552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:26:06.974 [DEBUG] [Thread-61552] [transport.py] [_log()] Compression: none
2025-11-17T21:26:06.974 [DEBUG] [Thread-61552] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:26:07.033 [DEBUG] [Thread-61552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:26:07.033 [DEBUG] [Thread-61552] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:26:07.034 [DEBUG] [Thread-61552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:26:07.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:26:07.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:26:07.092 [DEBUG] [Thread-61552] [transport.py] [_log()] userauth is OK
2025-11-17T21:26:07.093 [DEBUG] [Thread-61552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:26:07.093 [DEBUG] [Thread-61552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:26:07.093 [DEBUG] [Thread-61552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:26:07.093 [DEBUG] [Thread-61552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:26:07.113 [INFO] [Thread-61552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:26:07.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:26:07.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:26:07.984 [DEBUG] [Thread-61552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:26:07.985 [DEBUG] [Thread-61552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:26:08.032 [DEBUG] [Thread-61552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:26:08.032 [DEBUG] [Thread-61552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:26:08.041 [DEBUG] [Thread-61552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:26:08.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:26:08.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:26:08.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:26:08.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:26:08.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:26:08.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:26:08.076 [DEBUG] [Thread-61552] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:26:08.906 [DEBUG] [Thread-61554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:26:23.949 [DEBUG] [Thread-61555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:26:38.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:26:38.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:26:38.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:26:38.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 26, 29), 15.35, 35.08, 0.0, 14.05, 16.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:26:38.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:26:29
2025-11-17T21:26:38.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:26:38.987 [DEBUG] [Thread-61556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:26:39.034 [DEBUG] [Thread-61557] [transport.py] [_log()] starting thread (client mode): 0xd07be950
2025-11-17T21:26:39.034 [DEBUG] [Thread-61557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:26:39.055 [DEBUG] [Thread-61557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:26:39.055 [INFO] [Thread-61557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:26:39.057 [DEBUG] [Thread-61557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:26:39.057 [DEBUG] [Thread-61557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:26:39.057 [DEBUG] [Thread-61557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:26:39.057 [DEBUG] [Thread-61557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:26:39.057 [DEBUG] [Thread-61557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:26:39.057 [DEBUG] [Thread-61557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:26:39.057 [DEBUG] [Thread-61557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:26:39.057 [DEBUG] [Thread-61557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] client lang: <none>
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] server lang: <none>
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] kex follows: False
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] Compression: none
2025-11-17T21:26:39.058 [DEBUG] [Thread-61557] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:26:39.068 [DEBUG] [Thread-61557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:26:39.068 [DEBUG] [Thread-61557] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:26:39.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:26:39.069 [DEBUG] [Thread-61557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:26:39.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:26:39.071 [DEBUG] [Thread-61557] [transport.py] [_log()] userauth is OK
2025-11-17T21:26:39.071 [DEBUG] [Thread-61557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:26:39.072 [DEBUG] [Thread-61557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:26:39.072 [DEBUG] [Thread-61557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:26:39.072 [DEBUG] [Thread-61557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:26:39.095 [INFO] [Thread-61557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:26:39.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:26:39.663 [DEBUG] [Thread-61557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:26:39.663 [DEBUG] [Thread-61557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:26:39.663 [DEBUG] [Thread-61557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:26:39.704 [DEBUG] [Thread-61557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:26:39.704 [DEBUG] [Thread-61557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:26:39.706 [DEBUG] [Thread-61557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:26:39.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:26:39.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:26:39.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:26:39.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:26:39.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:26:39.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:26:39.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:26:39.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:26:39.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:26:39.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.809770 -999.00  +16.20  11.62     40   +2.60 1 1 1 1 1     0    0 11.56 -96.32 ZNESW 10.5 11.6 190.6 14.2 16.9 -23.8 16.8 -23.3 16.5 -22.5 16.8 -23.4
2025-11-17T21:26:39.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:26:39.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:26:39.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.809770
2025-11-17T21:26:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:26:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:26:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:26:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:26:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:26:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:26:29', tmtdew=15.35, humidity=35.08, cloud=0.0, wind=14.05, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:26:29', seeing=1.51, atlas_timestamp='2025-11-17T19:26:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:23:00')
2025-11-17T21:26:39.727 [DEBUG] [Thread-61557] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:26:39.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:26:39.812 [DEBUG] [Thread-61560] [transport.py] [_log()] starting thread (client mode): 0xd7bc7fd0
2025-11-17T21:26:39.812 [DEBUG] [Thread-61560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:26:39.826 [DEBUG] [Thread-61560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:26:39.826 [INFO] [Thread-61560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] client lang: <none>
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] server lang: <none>
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] kex follows: False
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] Compression: none
2025-11-17T21:26:39.834 [DEBUG] [Thread-61560] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:26:39.894 [DEBUG] [Thread-61560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:26:39.894 [DEBUG] [Thread-61560] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:26:39.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:26:39.894 [DEBUG] [Thread-61560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:26:39.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:26:39.952 [DEBUG] [Thread-61560] [transport.py] [_log()] userauth is OK
2025-11-17T21:26:39.952 [DEBUG] [Thread-61560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:26:39.952 [DEBUG] [Thread-61560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:26:39.952 [DEBUG] [Thread-61560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:26:39.952 [DEBUG] [Thread-61560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:26:39.966 [INFO] [Thread-61560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:26:39.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:26:39.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:26:40.865 [DEBUG] [Thread-61560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:26:40.865 [DEBUG] [Thread-61560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:26:40.913 [DEBUG] [Thread-61560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:26:40.913 [DEBUG] [Thread-61560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:26:40.921 [DEBUG] [Thread-61560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:26:40.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:26:40.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:26:40.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:26:40.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:26:40.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:26:40.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:26:40.953 [DEBUG] [Thread-61560] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:26:42.004 [DEBUG] [Thread-61562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:26:49.364 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:26:49.366 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:26:54.013 [DEBUG] [Thread-61563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:27:09.057 [DEBUG] [Thread-61564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:27:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:27:10.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:27:10.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:27:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 27, 1), 15.21, 35.66, 0.0, 11.17, 16.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:27:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:27:01
2025-11-17T21:27:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:27:11.892 [DEBUG] [Thread-61565] [transport.py] [_log()] starting thread (client mode): 0xd0784b50
2025-11-17T21:27:11.892 [DEBUG] [Thread-61565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:27:11.912 [DEBUG] [Thread-61565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:27:11.912 [INFO] [Thread-61565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:27:11.916 [DEBUG] [Thread-61565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] client lang: <none>
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] server lang: <none>
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] kex follows: False
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] Compression: none
2025-11-17T21:27:11.917 [DEBUG] [Thread-61565] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:27:11.934 [DEBUG] [Thread-61565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:27:11.935 [DEBUG] [Thread-61565] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:27:11.935 [DEBUG] [Thread-61565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:27:11.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:27:11.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:27:11.937 [DEBUG] [Thread-61565] [transport.py] [_log()] userauth is OK
2025-11-17T21:27:11.937 [DEBUG] [Thread-61565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:27:11.937 [DEBUG] [Thread-61565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:27:11.937 [DEBUG] [Thread-61565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:27:11.937 [DEBUG] [Thread-61565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:27:11.972 [INFO] [Thread-61565] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:27:11.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:27:12.540 [DEBUG] [Thread-61565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:27:12.541 [DEBUG] [Thread-61565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:27:12.541 [DEBUG] [Thread-61565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:27:12.581 [DEBUG] [Thread-61565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:27:12.582 [DEBUG] [Thread-61565] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:27:12.585 [DEBUG] [Thread-61565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:27:12.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:27:12.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:27:12.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:27:12.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:27:12.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:27:12.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:27:12.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:27:12.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:27:12.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:27:12.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.809770 -999.00  +16.20  11.62     40   +2.60 1 1 1 1 1     0    0 11.56 -96.32 ZNESW 10.5 11.6 190.6 14.2 16.9 -23.8 16.8 -23.3 16.5 -22.5 16.8 -23.4
2025-11-17T21:27:12.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:27:12.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:27:12.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.809770
2025-11-17T21:27:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:27:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:27:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:27:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:27:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:27:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:27:01', tmtdew=15.21, humidity=35.66, cloud=0.0, wind=11.17, temperature=16.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:27:01', seeing=1.37, atlas_timestamp='2025-11-17T19:26:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:23:00')
2025-11-17T21:27:12.609 [DEBUG] [Thread-61565] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:27:12.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:27:12.705 [DEBUG] [Thread-61568] [transport.py] [_log()] starting thread (client mode): 0xd0702590
2025-11-17T21:27:12.705 [DEBUG] [Thread-61568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:27:12.723 [DEBUG] [Thread-61568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:27:12.723 [INFO] [Thread-61568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] client lang: <none>
2025-11-17T21:27:12.731 [DEBUG] [Thread-61568] [transport.py] [_log()] server lang: <none>
2025-11-17T21:27:12.732 [DEBUG] [Thread-61568] [transport.py] [_log()] kex follows: False
2025-11-17T21:27:12.732 [DEBUG] [Thread-61568] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:27:12.732 [DEBUG] [Thread-61568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:27:12.732 [DEBUG] [Thread-61568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:27:12.732 [DEBUG] [Thread-61568] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:27:12.732 [DEBUG] [Thread-61568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:27:12.732 [DEBUG] [Thread-61568] [transport.py] [_log()] Compression: none
2025-11-17T21:27:12.732 [DEBUG] [Thread-61568] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:27:12.788 [DEBUG] [Thread-61568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:27:12.788 [DEBUG] [Thread-61568] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:27:12.789 [DEBUG] [Thread-61568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:27:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:27:12.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:27:12.844 [DEBUG] [Thread-61568] [transport.py] [_log()] userauth is OK
2025-11-17T21:27:12.845 [DEBUG] [Thread-61568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:27:12.845 [DEBUG] [Thread-61568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:27:12.845 [DEBUG] [Thread-61568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:27:12.845 [DEBUG] [Thread-61568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:27:12.864 [INFO] [Thread-61568] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:27:12.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:27:12.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:27:13.752 [DEBUG] [Thread-61568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:27:13.752 [DEBUG] [Thread-61568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:27:13.800 [DEBUG] [Thread-61568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:27:13.800 [DEBUG] [Thread-61568] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:27:13.810 [DEBUG] [Thread-61568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:27:13.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:27:13.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:27:13.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:27:13.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:27:13.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:27:13.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:27:13.845 [DEBUG] [Thread-61568] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:27:24.083 [DEBUG] [Thread-61570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:27:39.115 [DEBUG] [Thread-61571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:27:42.079 [DEBUG] [Thread-61572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:27:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:27:43.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:27:43.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:27:44.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 27, 33), 15.31, 35.39, 0.0, 11.79, 16.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:27:44.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:27:33
2025-11-17T21:27:44.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:27:44.795 [DEBUG] [Thread-61573] [transport.py] [_log()] starting thread (client mode): 0xd0702b60
2025-11-17T21:27:44.795 [DEBUG] [Thread-61573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:27:44.815 [DEBUG] [Thread-61573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:27:44.815 [INFO] [Thread-61573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] client lang: <none>
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] server lang: <none>
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] kex follows: False
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:27:44.818 [DEBUG] [Thread-61573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:27:44.819 [DEBUG] [Thread-61573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:27:44.819 [DEBUG] [Thread-61573] [transport.py] [_log()] Compression: none
2025-11-17T21:27:44.819 [DEBUG] [Thread-61573] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:27:44.834 [DEBUG] [Thread-61573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:27:44.834 [DEBUG] [Thread-61573] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:27:44.834 [DEBUG] [Thread-61573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:27:44.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:27:44.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:27:44.837 [DEBUG] [Thread-61573] [transport.py] [_log()] userauth is OK
2025-11-17T21:27:44.837 [DEBUG] [Thread-61573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:27:44.837 [DEBUG] [Thread-61573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:27:44.837 [DEBUG] [Thread-61573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:27:44.837 [DEBUG] [Thread-61573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:27:44.861 [INFO] [Thread-61573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:27:44.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:27:45.516 [DEBUG] [Thread-61573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:27:45.516 [DEBUG] [Thread-61573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:27:45.516 [DEBUG] [Thread-61573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:27:45.556 [DEBUG] [Thread-61573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:27:45.557 [DEBUG] [Thread-61573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:27:45.560 [DEBUG] [Thread-61573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:27:45.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:27:45.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:27:45.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:27:45.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:27:45.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:27:45.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:27:45.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:27:45.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:27:45.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:27:45.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.810465 -999.00  +16.20  10.68     40   +2.70 1 1 1 1 1     0    0 11.52 -89.78 ZNESW 11.6 10.7 192.8 14.2 16.8 -23.8 16.8 -23.1 16.5 -22.6 16.7 -23.4
2025-11-17T21:27:45.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:27:45.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:27:45.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.810465
2025-11-17T21:27:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:27:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:27:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:27:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:27:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:27:45.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:27:33', tmtdew=15.31, humidity=35.39, cloud=0.0, wind=11.79, temperature=16.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:27:33', seeing=1.28, atlas_timestamp='2025-11-17T19:27:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.18625000000000114, 0.1662499999999998, 0.11899999999999977, 0.09750000000000014, 0.14425000000000132, 0.023999999999999133, 0.03825000000000145, 0.10800000000000054, 0.1529999999999987, 0.2682500000000001, 0.2110000000000003, 0.16999999999999993, 0.12025000000000041, 0.05999999999999872, 0.019999999999999574, 0.09724999999999895, 0.16050000000000075, 0.254999999999999, 0.28224999999999945, 0.20399999999999885, 0.11774999999999913, 0.05025000000000013, 0.05725000000000158, 0.08499999999999908, 0.2240000000000002, 0.26975000000000016, 0.3494999999999999, 0.30400000000000027, 0.10600000000000165, 0.35550000000000104, 0.08950000000000102, 0.09574999999999889], zp_timestamp='2025-11-17T19:23:00')
2025-11-17T21:27:45.586 [DEBUG] [Thread-61573] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:27:45.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:27:45.686 [DEBUG] [Thread-61576] [transport.py] [_log()] starting thread (client mode): 0xd0784b50
2025-11-17T21:27:45.686 [DEBUG] [Thread-61576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:27:45.704 [DEBUG] [Thread-61576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:27:45.704 [INFO] [Thread-61576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:27:45.711 [DEBUG] [Thread-61576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:27:45.711 [DEBUG] [Thread-61576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:27:45.711 [DEBUG] [Thread-61576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:27:45.711 [DEBUG] [Thread-61576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] client lang: <none>
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] server lang: <none>
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] kex follows: False
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] Compression: none
2025-11-17T21:27:45.712 [DEBUG] [Thread-61576] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:27:45.768 [DEBUG] [Thread-61576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:27:45.769 [DEBUG] [Thread-61576] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:27:45.769 [DEBUG] [Thread-61576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:27:45.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:27:45.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:27:45.824 [DEBUG] [Thread-61576] [transport.py] [_log()] userauth is OK
2025-11-17T21:27:45.825 [DEBUG] [Thread-61576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:27:45.825 [DEBUG] [Thread-61576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:27:45.825 [DEBUG] [Thread-61576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:27:45.825 [DEBUG] [Thread-61576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:27:45.849 [INFO] [Thread-61576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:27:45.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:27:45.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:27:46.712 [DEBUG] [Thread-61576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:27:46.713 [DEBUG] [Thread-61576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:27:46.760 [DEBUG] [Thread-61576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:27:46.760 [DEBUG] [Thread-61576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:27:46.769 [DEBUG] [Thread-61576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:27:46.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:27:46.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:27:46.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:27:46.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:27:46.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:27:46.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:27:46.804 [DEBUG] [Thread-61576] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:27:49.567 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:27:49.568 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:27:54.149 [DEBUG] [Thread-61578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:09.197 [DEBUG] [Thread-61579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:16.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:28:16.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:28:16.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:28:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 28, 5), 15.21, 35.68, 0.0, 11.52, 16.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:28:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:28:05
2025-11-17T21:28:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:28:17.742 [DEBUG] [Thread-61580] [transport.py] [_log()] starting thread (client mode): 0xd31504f0
2025-11-17T21:28:17.742 [DEBUG] [Thread-61580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:28:17.766 [DEBUG] [Thread-61580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:28:17.767 [INFO] [Thread-61580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:28:17.770 [DEBUG] [Thread-61580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:28:17.771 [DEBUG] [Thread-61580] [transport.py] [_log()] client lang: <none>
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] server lang: <none>
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] kex follows: False
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] Compression: none
2025-11-17T21:28:17.772 [DEBUG] [Thread-61580] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:28:17.791 [DEBUG] [Thread-61580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:28:17.792 [DEBUG] [Thread-61580] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:28:17.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:28:17.792 [DEBUG] [Thread-61580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:28:17.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:28:17.795 [DEBUG] [Thread-61580] [transport.py] [_log()] userauth is OK
2025-11-17T21:28:17.795 [DEBUG] [Thread-61580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:28:17.795 [DEBUG] [Thread-61580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:28:17.795 [DEBUG] [Thread-61580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:28:17.795 [DEBUG] [Thread-61580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:28:17.818 [INFO] [Thread-61580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:28:17.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:28:18.463 [DEBUG] [Thread-61580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:28:18.463 [DEBUG] [Thread-61580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:28:18.463 [DEBUG] [Thread-61580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:28:18.504 [DEBUG] [Thread-61580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:28:18.504 [DEBUG] [Thread-61580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:28:18.507 [DEBUG] [Thread-61580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:28:18.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:28:18.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:28:18.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:28:18.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:28:18.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:28:18.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:28:18.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:28:18.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:28:18.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:28:18.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.810812 -999.00  +16.20  14.64     40   +2.70 1 1 1 1 1     0    0 11.67 -87.85 ZNESW 12.1 14.6 190.8 15.2 16.8 -23.8 16.7 -23.1 16.5 -22.6 16.7 -23.4
2025-11-17T21:28:18.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:28:18.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:28:18.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.810812
2025-11-17T21:28:18.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:28:18.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:28:18.532 [DEBUG] [Thread-61580] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:28:18.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:28:18.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:28:18.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:28:18.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:28:05', tmtdew=15.21, humidity=35.68, cloud=0.0, wind=11.52, temperature=16.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:28:06', seeing=1.3, atlas_timestamp='2025-11-17T19:27:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.055749999999999744, 0.09725000000000072, 0.11625000000000085, 0.07449999999999868, 0.10699999999999932, 0.15325000000000166, 0.08499999999999908, 0.06725000000000136, 0.1274999999999995, 0.15050000000000097, 0.17875000000000085, 0.16350000000000087, 0.1739999999999995, 0.08624999999999972, 0.0909999999999993, 0.016000000000000014, 0.1352499999999992, 0.2505000000000006, 0.3274999999999988, 0.23224999999999874, 0.192499999999999, 0.09675000000000011, 0.07275000000000098, 0.07375000000000043, 0.08699999999999974, 0.24050000000000082, 0.3462500000000013, 0.34750000000000014, 0.3120000000000003, 0.08500000000000085, 0.16000000000000014, 0.11050000000000004, 0.12074999999999925], zp_timestamp='2025-11-17T19:26:00')
2025-11-17T21:28:18.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:28:18.633 [DEBUG] [Thread-61583] [transport.py] [_log()] starting thread (client mode): 0xd3137340
2025-11-17T21:28:18.633 [DEBUG] [Thread-61583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:28:18.648 [DEBUG] [Thread-61583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:28:18.648 [INFO] [Thread-61583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] client lang: <none>
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] server lang: <none>
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] kex follows: False
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:28:18.656 [DEBUG] [Thread-61583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:28:18.657 [DEBUG] [Thread-61583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:28:18.657 [DEBUG] [Thread-61583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:28:18.657 [DEBUG] [Thread-61583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:28:18.657 [DEBUG] [Thread-61583] [transport.py] [_log()] Compression: none
2025-11-17T21:28:18.657 [DEBUG] [Thread-61583] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:28:18.712 [DEBUG] [Thread-61583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:28:18.712 [DEBUG] [Thread-61583] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:28:18.713 [DEBUG] [Thread-61583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:28:18.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:28:18.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:28:18.768 [DEBUG] [Thread-61583] [transport.py] [_log()] userauth is OK
2025-11-17T21:28:18.769 [DEBUG] [Thread-61583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:28:18.769 [DEBUG] [Thread-61583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:28:18.769 [DEBUG] [Thread-61583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:28:18.769 [DEBUG] [Thread-61583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:28:18.788 [INFO] [Thread-61583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:28:18.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:28:18.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:28:19.705 [DEBUG] [Thread-61583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:28:19.705 [DEBUG] [Thread-61583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:28:19.753 [DEBUG] [Thread-61583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:28:19.753 [DEBUG] [Thread-61583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:28:19.765 [DEBUG] [Thread-61583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:28:19.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:28:19.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:28:19.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:28:19.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:28:19.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:28:19.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:28:19.802 [DEBUG] [Thread-61583] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:28:24.231 [DEBUG] [Thread-61585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:39.272 [DEBUG] [Thread-61586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:42.155 [DEBUG] [Thread-61587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:45.798 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:49.771 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:49.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:28:49.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:28:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:28:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 28, 37), 15.16, 35.65, 0.0, 14.75, 15.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:28:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:28:37
2025-11-17T21:28:50.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:28:50.741 [DEBUG] [Thread-61588] [transport.py] [_log()] starting thread (client mode): 0xd0703f70
2025-11-17T21:28:50.741 [DEBUG] [Thread-61588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:28:50.761 [DEBUG] [Thread-61588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:28:50.762 [INFO] [Thread-61588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:28:50.764 [DEBUG] [Thread-61588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:28:50.764 [DEBUG] [Thread-61588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:28:50.764 [DEBUG] [Thread-61588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:28:50.764 [DEBUG] [Thread-61588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:28:50.764 [DEBUG] [Thread-61588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] client lang: <none>
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] server lang: <none>
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] kex follows: False
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] Compression: none
2025-11-17T21:28:50.765 [DEBUG] [Thread-61588] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:28:50.786 [DEBUG] [Thread-61588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:28:50.787 [DEBUG] [Thread-61588] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:28:50.787 [DEBUG] [Thread-61588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:28:50.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:28:50.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:28:50.790 [DEBUG] [Thread-61588] [transport.py] [_log()] userauth is OK
2025-11-17T21:28:50.790 [DEBUG] [Thread-61588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:28:50.790 [DEBUG] [Thread-61588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:28:50.790 [DEBUG] [Thread-61588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:28:50.790 [DEBUG] [Thread-61588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:28:50.814 [INFO] [Thread-61588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:28:50.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:28:51.453 [DEBUG] [Thread-61588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:28:51.453 [DEBUG] [Thread-61588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:28:51.453 [DEBUG] [Thread-61588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:28:51.494 [DEBUG] [Thread-61588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:28:51.494 [DEBUG] [Thread-61588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:28:51.497 [DEBUG] [Thread-61588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:28:51.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:28:51.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:28:51.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:28:51.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:28:51.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:28:51.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:28:51.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:28:51.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:28:51.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:28:51.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.811159 -999.00  +16.20   8.70     40   +2.70 1 1 1 1 1     0    0 11.76 -85.57 ZNESW 11.4 8.7 190.0 13.5 16.8 -23.9 -999.0 -999.0 16.4 -22.5 16.7 -23.5
2025-11-17T21:28:51.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:28:51.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:28:51.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.811159
2025-11-17T21:28:51.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:28:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:28:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:28:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:28:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:28:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:28:37', tmtdew=15.16, humidity=35.65, cloud=0.0, wind=14.75, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:28:37', seeing=1.3, atlas_timestamp='2025-11-17T19:28:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.055749999999999744, 0.09725000000000072, 0.11625000000000085, 0.07449999999999868, 0.10699999999999932, 0.15325000000000166, 0.08499999999999908, 0.06725000000000136, 0.1274999999999995, 0.15050000000000097, 0.17875000000000085, 0.16350000000000087, 0.1739999999999995, 0.08624999999999972, 0.0909999999999993, 0.016000000000000014, 0.1352499999999992, 0.2505000000000006, 0.3274999999999988, 0.23224999999999874, 0.192499999999999, 0.09675000000000011, 0.07275000000000098, 0.07375000000000043, 0.08699999999999974, 0.24050000000000082, 0.3462500000000013, 0.34750000000000014, 0.3120000000000003, 0.08500000000000085, 0.16000000000000014, 0.11050000000000004, 0.12074999999999925], zp_timestamp='2025-11-17T19:26:00')
2025-11-17T21:28:51.521 [DEBUG] [Thread-61588] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:28:51.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:28:51.618 [DEBUG] [Thread-61591] [transport.py] [_log()] starting thread (client mode): 0xd07850f0
2025-11-17T21:28:51.619 [DEBUG] [Thread-61591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:28:51.633 [DEBUG] [Thread-61591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:28:51.634 [INFO] [Thread-61591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:28:51.641 [DEBUG] [Thread-61591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:28:51.641 [DEBUG] [Thread-61591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] client lang: <none>
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] server lang: <none>
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] kex follows: False
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:28:51.642 [DEBUG] [Thread-61591] [transport.py] [_log()] Compression: none
2025-11-17T21:28:51.643 [DEBUG] [Thread-61591] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:28:51.700 [DEBUG] [Thread-61591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:28:51.701 [DEBUG] [Thread-61591] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:28:51.701 [DEBUG] [Thread-61591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:28:51.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:28:51.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:28:51.756 [DEBUG] [Thread-61591] [transport.py] [_log()] userauth is OK
2025-11-17T21:28:51.757 [DEBUG] [Thread-61591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:28:51.757 [DEBUG] [Thread-61591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:28:51.757 [DEBUG] [Thread-61591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:28:51.757 [DEBUG] [Thread-61591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:28:51.775 [INFO] [Thread-61591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:28:51.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:28:51.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:28:52.619 [DEBUG] [Thread-61591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:28:52.620 [DEBUG] [Thread-61591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:28:52.667 [DEBUG] [Thread-61591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:28:52.667 [DEBUG] [Thread-61591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:28:52.676 [DEBUG] [Thread-61591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:28:52.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:28:52.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:28:52.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:28:52.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:28:52.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:28:52.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:28:52.711 [DEBUG] [Thread-61591] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:28:54.192 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:54.302 [DEBUG] [Thread-61593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:28:58.476 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:29:09.353 [DEBUG] [Thread-61594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:29:22.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:29:22.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:29:22.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:29:23.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 29, 10), 15.11, 35.8, 0.0, 14.24, 15.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:29:23.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:29:10
2025-11-17T21:29:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:29:23.649 [DEBUG] [Thread-61595] [transport.py] [_log()] starting thread (client mode): 0xd3150520
2025-11-17T21:29:23.650 [DEBUG] [Thread-61595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:29:23.670 [DEBUG] [Thread-61595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:29:23.670 [INFO] [Thread-61595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] client lang: <none>
2025-11-17T21:29:23.674 [DEBUG] [Thread-61595] [transport.py] [_log()] server lang: <none>
2025-11-17T21:29:23.675 [DEBUG] [Thread-61595] [transport.py] [_log()] kex follows: False
2025-11-17T21:29:23.675 [DEBUG] [Thread-61595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:29:23.675 [DEBUG] [Thread-61595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:29:23.675 [DEBUG] [Thread-61595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:29:23.675 [DEBUG] [Thread-61595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:29:23.675 [DEBUG] [Thread-61595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:29:23.675 [DEBUG] [Thread-61595] [transport.py] [_log()] Compression: none
2025-11-17T21:29:23.675 [DEBUG] [Thread-61595] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:29:23.693 [DEBUG] [Thread-61595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:29:23.694 [DEBUG] [Thread-61595] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:29:23.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:29:23.695 [DEBUG] [Thread-61595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:29:23.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:29:23.696 [DEBUG] [Thread-61595] [transport.py] [_log()] userauth is OK
2025-11-17T21:29:23.696 [DEBUG] [Thread-61595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:29:23.696 [DEBUG] [Thread-61595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:29:23.697 [DEBUG] [Thread-61595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:29:23.697 [DEBUG] [Thread-61595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:29:23.721 [INFO] [Thread-61595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:29:23.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:29:24.359 [DEBUG] [Thread-61595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:29:24.359 [DEBUG] [Thread-61595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:29:24.359 [DEBUG] [Thread-61595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:29:24.386 [DEBUG] [Thread-61597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:29:24.399 [DEBUG] [Thread-61595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:29:24.400 [DEBUG] [Thread-61595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:29:24.403 [DEBUG] [Thread-61595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:29:24.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:29:24.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:29:24.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:29:24.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:29:24.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:29:24.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:29:24.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:29:24.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:29:24.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:29:24.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.811507 -999.00  +16.10   9.70     40   +2.60 1 1 1 1 1     0    0 11.86 -82.38 ZNESW 7.2 9.7 198.6 12.2 16.7 -23.9 16.7 -23.1 16.5 -22.4 16.7 -23.4
2025-11-17T21:29:24.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:29:24.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:29:24.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.811507
2025-11-17T21:29:24.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:29:24.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:29:24.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:29:24.426 [DEBUG] [Thread-61595] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:29:24.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:29:24.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:29:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:29:10', tmtdew=15.11, humidity=35.8, cloud=0.0, wind=14.24, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:29:10', seeing=1.51, atlas_timestamp='2025-11-17T19:28:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.055749999999999744, 0.09725000000000072, 0.11625000000000085, 0.07449999999999868, 0.10699999999999932, 0.15325000000000166, 0.08499999999999908, 0.06725000000000136, 0.1274999999999995, 0.15050000000000097, 0.17875000000000085, 0.16350000000000087, 0.1739999999999995, 0.08624999999999972, 0.0909999999999993, 0.016000000000000014, 0.1352499999999992, 0.2505000000000006, 0.3274999999999988, 0.23224999999999874, 0.192499999999999, 0.09675000000000011, 0.07275000000000098, 0.07375000000000043, 0.08699999999999974, 0.24050000000000082, 0.3462500000000013, 0.34750000000000014, 0.3120000000000003, 0.08500000000000085, 0.16000000000000014, 0.11050000000000004, 0.12074999999999925], zp_timestamp='2025-11-17T19:26:00')
2025-11-17T21:29:24.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:29:24.524 [DEBUG] [Thread-61599] [transport.py] [_log()] starting thread (client mode): 0xd07023b0
2025-11-17T21:29:24.524 [DEBUG] [Thread-61599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:29:24.540 [DEBUG] [Thread-61599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:29:24.540 [INFO] [Thread-61599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:29:24.547 [DEBUG] [Thread-61599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:29:24.547 [DEBUG] [Thread-61599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:29:24.547 [DEBUG] [Thread-61599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] client lang: <none>
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] server lang: <none>
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] kex follows: False
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] Compression: none
2025-11-17T21:29:24.548 [DEBUG] [Thread-61599] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:29:24.609 [DEBUG] [Thread-61599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:29:24.609 [DEBUG] [Thread-61599] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:29:24.609 [DEBUG] [Thread-61599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:29:24.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:29:24.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:29:24.668 [DEBUG] [Thread-61599] [transport.py] [_log()] userauth is OK
2025-11-17T21:29:24.668 [DEBUG] [Thread-61599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:29:24.668 [DEBUG] [Thread-61599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:29:24.668 [DEBUG] [Thread-61599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:29:24.668 [DEBUG] [Thread-61599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:29:24.690 [INFO] [Thread-61599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:29:24.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:29:24.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:29:25.542 [DEBUG] [Thread-61599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:29:25.542 [DEBUG] [Thread-61599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:29:25.590 [DEBUG] [Thread-61599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:29:25.590 [DEBUG] [Thread-61599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:29:25.601 [DEBUG] [Thread-61599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:29:25.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:29:25.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:29: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') -> 00000000
2025-11-17T21:29:25.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:29:25.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:29:25.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:29:25.635 [DEBUG] [Thread-61599] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:29:39.418 [DEBUG] [Thread-61601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:29:42.223 [DEBUG] [Thread-61602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:29:49.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:29:49.977 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:29:54.460 [DEBUG] [Thread-61603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:29:55.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:29:55.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:29:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:29:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 29, 42), 15.17, 35.75, 0.0, 13.16, 15.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:29:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:29:42
2025-11-17T21:29:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:29:56.610 [DEBUG] [Thread-61604] [transport.py] [_log()] starting thread (client mode): 0xd7bc68c0
2025-11-17T21:29:56.610 [DEBUG] [Thread-61604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:29:56.632 [DEBUG] [Thread-61604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:29:56.632 [INFO] [Thread-61604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] client lang: <none>
2025-11-17T21:29:56.635 [DEBUG] [Thread-61604] [transport.py] [_log()] server lang: <none>
2025-11-17T21:29:56.636 [DEBUG] [Thread-61604] [transport.py] [_log()] kex follows: False
2025-11-17T21:29:56.636 [DEBUG] [Thread-61604] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:29:56.636 [DEBUG] [Thread-61604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:29:56.636 [DEBUG] [Thread-61604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:29:56.636 [DEBUG] [Thread-61604] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:29:56.636 [DEBUG] [Thread-61604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:29:56.636 [DEBUG] [Thread-61604] [transport.py] [_log()] Compression: none
2025-11-17T21:29:56.636 [DEBUG] [Thread-61604] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:29:56.652 [DEBUG] [Thread-61604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:29:56.653 [DEBUG] [Thread-61604] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:29:56.653 [DEBUG] [Thread-61604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:29:56.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:29:56.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:29:56.653 [DEBUG] [Thread-61604] [transport.py] [_log()] userauth is OK
2025-11-17T21:29:56.654 [DEBUG] [Thread-61604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:29:56.654 [DEBUG] [Thread-61604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:29:56.654 [DEBUG] [Thread-61604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:29:56.654 [DEBUG] [Thread-61604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:29:56.663 [INFO] [Thread-61604] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:29:56.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:29:57.300 [DEBUG] [Thread-61604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:29:57.300 [DEBUG] [Thread-61604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:29:57.300 [DEBUG] [Thread-61604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:29:57.341 [DEBUG] [Thread-61604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:29:57.341 [DEBUG] [Thread-61604] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:29:57.344 [DEBUG] [Thread-61604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:29:57.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:29:57.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:29:57.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:29:57.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:29:57.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:29:57.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:29:57.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:29:57.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:29:57.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:29:57.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.811854 -999.00  +16.10  10.20     40   +2.70 1 1 1 1 1     0    0 11.79 -87.11 ZNESW 7.1 10.2 193.0 13.9 16.8 -23.9 16.6 -23.2 16.4 -22.4 16.7 -23.5
2025-11-17T21:29:57.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:29:57.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:29:57.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.811854
2025-11-17T21:29:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:29:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:29:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:29:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:29:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:29:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:29:42', tmtdew=15.17, humidity=35.75, cloud=0.0, wind=13.16, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:29:42', seeing=2.12, atlas_timestamp='2025-11-17T19:29:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.055749999999999744, 0.09725000000000072, 0.11625000000000085, 0.07449999999999868, 0.10699999999999932, 0.15325000000000166, 0.08499999999999908, 0.06725000000000136, 0.1274999999999995, 0.15050000000000097, 0.17875000000000085, 0.16350000000000087, 0.1739999999999995, 0.08624999999999972, 0.0909999999999993, 0.016000000000000014, 0.1352499999999992, 0.2505000000000006, 0.3274999999999988, 0.23224999999999874, 0.192499999999999, 0.09675000000000011, 0.07275000000000098, 0.07375000000000043, 0.08699999999999974, 0.24050000000000082, 0.3462500000000013, 0.34750000000000014, 0.3120000000000003, 0.08500000000000085, 0.16000000000000014, 0.11050000000000004, 0.12074999999999925], zp_timestamp='2025-11-17T19:26:00')
2025-11-17T21:29:57.365 [DEBUG] [Thread-61604] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:29:57.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:29:57.451 [DEBUG] [Thread-61607] [transport.py] [_log()] starting thread (client mode): 0xd3151ae0
2025-11-17T21:29:57.451 [DEBUG] [Thread-61607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:29:57.466 [DEBUG] [Thread-61607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:29:57.466 [INFO] [Thread-61607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:29:57.473 [DEBUG] [Thread-61607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] client lang: <none>
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] server lang: <none>
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] kex follows: False
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] Compression: none
2025-11-17T21:29:57.474 [DEBUG] [Thread-61607] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:29:57.536 [DEBUG] [Thread-61607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:29:57.536 [DEBUG] [Thread-61607] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:29:57.536 [DEBUG] [Thread-61607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:29:57.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:29:57.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:29:57.592 [DEBUG] [Thread-61607] [transport.py] [_log()] userauth is OK
2025-11-17T21:29:57.592 [DEBUG] [Thread-61607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:29:57.592 [DEBUG] [Thread-61607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:29:57.592 [DEBUG] [Thread-61607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:29:57.592 [DEBUG] [Thread-61607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:29:57.606 [INFO] [Thread-61607] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:29:57.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:29:57.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:29:58.464 [DEBUG] [Thread-61607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:29:58.464 [DEBUG] [Thread-61607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:29:58.512 [DEBUG] [Thread-61607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:29:58.512 [DEBUG] [Thread-61607] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:29:58.520 [DEBUG] [Thread-61607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:29:58.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:29:58.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:29:58.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:29:58.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:29:58.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:29:58.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:29:58.551 [DEBUG] [Thread-61607] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:30:09.486 [DEBUG] [Thread-61609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:30:24.525 [DEBUG] [Thread-61610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:30:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:30:28.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:30:28.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:30:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 30, 14), 15.08, 35.99, 0.0, 14.03, 16.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:30:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:30:14
2025-11-17T21:30:29.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:30:29.480 [DEBUG] [Thread-61611] [transport.py] [_log()] starting thread (client mode): 0xd7bc7a30
2025-11-17T21:30:29.481 [DEBUG] [Thread-61611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:30:29.502 [DEBUG] [Thread-61611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:30:29.502 [INFO] [Thread-61611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:30:29.505 [DEBUG] [Thread-61611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:30:29.505 [DEBUG] [Thread-61611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] client lang: <none>
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] server lang: <none>
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] kex follows: False
2025-11-17T21:30:29.506 [DEBUG] [Thread-61611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:30:29.507 [DEBUG] [Thread-61611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:30:29.507 [DEBUG] [Thread-61611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:30:29.507 [DEBUG] [Thread-61611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:30:29.507 [DEBUG] [Thread-61611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:30:29.507 [DEBUG] [Thread-61611] [transport.py] [_log()] Compression: none
2025-11-17T21:30:29.507 [DEBUG] [Thread-61611] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:30:29.527 [DEBUG] [Thread-61611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:30:29.527 [DEBUG] [Thread-61611] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:30:29.528 [DEBUG] [Thread-61611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:30:29.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:30:29.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:30:29.530 [DEBUG] [Thread-61611] [transport.py] [_log()] userauth is OK
2025-11-17T21:30:29.530 [DEBUG] [Thread-61611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:30:29.530 [DEBUG] [Thread-61611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:30:29.530 [DEBUG] [Thread-61611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:30:29.530 [DEBUG] [Thread-61611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:30:29.547 [INFO] [Thread-61611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:30:29.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:30:30.167 [DEBUG] [Thread-61611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:30:30.167 [DEBUG] [Thread-61611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:30:30.168 [DEBUG] [Thread-61611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:30:30.208 [DEBUG] [Thread-61611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:30:30.208 [DEBUG] [Thread-61611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:30:30.211 [DEBUG] [Thread-61611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:30:30.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:30:30.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:30:30.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:30:30.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:30:30.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:30:30.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:30:30.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:30:30.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:30:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:30:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.812201 -999.00  +16.10   6.60     40   +2.60 1 1 1 1 1     0    0 11.83 -85.15 ZNESW 8.2 6.6 188.2 10.8 16.7 -23.9 16.6 -23.1 16.4 -22.5 16.7 -23.7
2025-11-17T21:30:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:30:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:30:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.812201
2025-11-17T21:30:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:30:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:30:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:30:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:30:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:30:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:30:14', tmtdew=15.08, humidity=35.99, cloud=0.0, wind=14.03, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:30:14', seeing=1.5, atlas_timestamp='2025-11-17T19:29:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.055749999999999744, 0.09725000000000072, 0.11625000000000085, 0.07449999999999868, 0.10699999999999932, 0.15325000000000166, 0.08499999999999908, 0.06725000000000136, 0.1274999999999995, 0.15050000000000097, 0.17875000000000085, 0.16350000000000087, 0.1739999999999995, 0.08624999999999972, 0.0909999999999993, 0.016000000000000014, 0.1352499999999992, 0.2505000000000006, 0.3274999999999988, 0.23224999999999874, 0.192499999999999, 0.09675000000000011, 0.07275000000000098, 0.07375000000000043, 0.08699999999999974, 0.24050000000000082, 0.3462500000000013, 0.34750000000000014, 0.3120000000000003, 0.08500000000000085, 0.16000000000000014, 0.11050000000000004, 0.12074999999999925], zp_timestamp='2025-11-17T19:26:00')
2025-11-17T21:30:30.237 [DEBUG] [Thread-61611] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:30:30.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:30:30.332 [DEBUG] [Thread-61614] [transport.py] [_log()] starting thread (client mode): 0xd31cce80
2025-11-17T21:30:30.332 [DEBUG] [Thread-61614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:30:30.349 [DEBUG] [Thread-61614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:30:30.349 [INFO] [Thread-61614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:30:30.356 [DEBUG] [Thread-61614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:30:30.356 [DEBUG] [Thread-61614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] client lang: <none>
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] server lang: <none>
2025-11-17T21:30:30.357 [DEBUG] [Thread-61614] [transport.py] [_log()] kex follows: False
2025-11-17T21:30:30.358 [DEBUG] [Thread-61614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:30:30.358 [DEBUG] [Thread-61614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:30:30.358 [DEBUG] [Thread-61614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:30:30.358 [DEBUG] [Thread-61614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:30:30.358 [DEBUG] [Thread-61614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:30:30.358 [DEBUG] [Thread-61614] [transport.py] [_log()] Compression: none
2025-11-17T21:30:30.358 [DEBUG] [Thread-61614] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:30:30.418 [DEBUG] [Thread-61614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:30:30.418 [DEBUG] [Thread-61614] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:30:30.419 [DEBUG] [Thread-61614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:30:30.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:30:30.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:30:30.476 [DEBUG] [Thread-61614] [transport.py] [_log()] userauth is OK
2025-11-17T21:30:30.477 [DEBUG] [Thread-61614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:30:30.477 [DEBUG] [Thread-61614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:30:30.477 [DEBUG] [Thread-61614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:30:30.477 [DEBUG] [Thread-61614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:30:30.497 [INFO] [Thread-61614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:30:30.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:30:30.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:30:31.322 [DEBUG] [Thread-61614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:30:31.322 [DEBUG] [Thread-61614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:30:31.370 [DEBUG] [Thread-61614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:30:31.370 [DEBUG] [Thread-61614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:30:31.379 [DEBUG] [Thread-61614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:30:31.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:30:31.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:30:31.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:30:31.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:30:31.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:30:31.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:30:31.414 [DEBUG] [Thread-61614] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:30:39.552 [DEBUG] [Thread-61616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:30:42.280 [DEBUG] [Thread-61617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:30:50.181 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:30:50.182 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:30:54.584 [DEBUG] [Thread-61618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:31:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:31:01.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:31:01.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:31:02.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 30, 46), 14.95, 36.06, 0.0, 15.02, 15.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:31:02.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:30:46
2025-11-17T21:31:02.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:31:02.354 [DEBUG] [Thread-61619] [transport.py] [_log()] starting thread (client mode): 0xd0787f10
2025-11-17T21:31:02.354 [DEBUG] [Thread-61619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:31:02.373 [DEBUG] [Thread-61619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:31:02.373 [INFO] [Thread-61619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:31:02.376 [DEBUG] [Thread-61619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:31:02.376 [DEBUG] [Thread-61619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:31:02.376 [DEBUG] [Thread-61619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:31:02.376 [DEBUG] [Thread-61619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:31:02.376 [DEBUG] [Thread-61619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] client lang: <none>
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] server lang: <none>
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] kex follows: False
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] Compression: none
2025-11-17T21:31:02.377 [DEBUG] [Thread-61619] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:31:02.396 [DEBUG] [Thread-61619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:31:02.396 [DEBUG] [Thread-61619] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:31:02.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:31:02.397 [DEBUG] [Thread-61619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:31:02.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:31:02.399 [DEBUG] [Thread-61619] [transport.py] [_log()] userauth is OK
2025-11-17T21:31:02.399 [DEBUG] [Thread-61619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:31:02.400 [DEBUG] [Thread-61619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:31:02.400 [DEBUG] [Thread-61619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:31:02.400 [DEBUG] [Thread-61619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:31:02.417 [INFO] [Thread-61619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:31:02.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:31:03.018 [DEBUG] [Thread-61619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:31:03.019 [DEBUG] [Thread-61619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:31:03.019 [DEBUG] [Thread-61619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:31:03.059 [DEBUG] [Thread-61619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:31:03.060 [DEBUG] [Thread-61619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:31:03.063 [DEBUG] [Thread-61619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:31:03.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:31:03.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:31:03.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:31:03.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:31:03.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:31:03.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:31:03.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:31:03.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:31:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:31:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.812895 -999.00  +16.00   8.47     40   +2.70 1 1 1 1 1     0    0 11.85 -84.30 ZNESW 7.1 8.5 184.8 13.8 16.7 -23.9 16.6 -22.9 16.4 -22.5 16.6 -23.4
2025-11-17T21:31:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:31:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:31:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.812895
2025-11-17T21:31:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:31:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:31:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:31:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:31:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:31:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:30:46', tmtdew=14.95, humidity=36.06, cloud=0.0, wind=15.02, temperature=15.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:30:46', seeing=1.5, atlas_timestamp='2025-11-17T19:30:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:29:00')
2025-11-17T21:31:03.091 [DEBUG] [Thread-61619] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:31:03.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:31:03.188 [DEBUG] [Thread-61622] [transport.py] [_log()] starting thread (client mode): 0xd07bfd00
2025-11-17T21:31:03.188 [DEBUG] [Thread-61622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:31:03.204 [DEBUG] [Thread-61622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:31:03.204 [INFO] [Thread-61622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:31:03.211 [DEBUG] [Thread-61622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] client lang: <none>
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] server lang: <none>
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] kex follows: False
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] Compression: none
2025-11-17T21:31:03.212 [DEBUG] [Thread-61622] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:31:03.268 [DEBUG] [Thread-61622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:31:03.269 [DEBUG] [Thread-61622] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:31:03.269 [DEBUG] [Thread-61622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:31:03.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:31:03.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:31:03.329 [DEBUG] [Thread-61622] [transport.py] [_log()] userauth is OK
2025-11-17T21:31:03.329 [DEBUG] [Thread-61622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:31:03.329 [DEBUG] [Thread-61622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:31:03.329 [DEBUG] [Thread-61622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:31:03.329 [DEBUG] [Thread-61622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:31:03.348 [INFO] [Thread-61622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:31:03.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:31:03.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:31:04.219 [DEBUG] [Thread-61622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:31:04.220 [DEBUG] [Thread-61622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:31:04.267 [DEBUG] [Thread-61622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:31:04.267 [DEBUG] [Thread-61622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:31:04.276 [DEBUG] [Thread-61622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:31:04.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:31:04.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:31:04.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:31:04.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:31:04.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:31:04.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:31:04.310 [DEBUG] [Thread-61622] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:31:09.612 [DEBUG] [Thread-61624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:31:24.658 [DEBUG] [Thread-61625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:31:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:31:34.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:31: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
2025-11-17T21:31:34.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 31, 18), 15.0, 35.94, 0.0, 14.77, 15.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:31:34.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:31:18
2025-11-17T21:31:35.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:31:35.272 [DEBUG] [Thread-61626] [transport.py] [_log()] starting thread (client mode): 0xd0711f60
2025-11-17T21:31:35.273 [DEBUG] [Thread-61626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:31:35.289 [DEBUG] [Thread-61626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:31:35.289 [INFO] [Thread-61626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] client lang: <none>
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] server lang: <none>
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] kex follows: False
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:31:35.292 [DEBUG] [Thread-61626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:31:35.293 [DEBUG] [Thread-61626] [transport.py] [_log()] Compression: none
2025-11-17T21:31:35.293 [DEBUG] [Thread-61626] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:31:35.310 [DEBUG] [Thread-61626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:31:35.312 [DEBUG] [Thread-61626] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:31:35.314 [DEBUG] [Thread-61626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:31:35.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:31:35.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:31:35.315 [DEBUG] [Thread-61626] [transport.py] [_log()] userauth is OK
2025-11-17T21:31:35.315 [DEBUG] [Thread-61626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:31:35.315 [DEBUG] [Thread-61626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:31:35.315 [DEBUG] [Thread-61626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:31:35.316 [DEBUG] [Thread-61626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:31:35.338 [INFO] [Thread-61626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:31:35.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:31:35.978 [DEBUG] [Thread-61626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:31:35.978 [DEBUG] [Thread-61626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:31:35.978 [DEBUG] [Thread-61626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:31:36.019 [DEBUG] [Thread-61626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:31:36.020 [DEBUG] [Thread-61626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:31:36.022 [DEBUG] [Thread-61626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:31:36.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:31:36.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:31:36.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:31:36.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:31:36.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:31:36.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:31:36.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:31:36.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:31:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:31:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.813243 -999.00  +16.00   9.07     41   +2.80 1 1 1 1 1     0    0 11.78 -84.96 ZNESW 6.5 9.1 187.6 17.4 16.7 -23.7 16.6 -23.0 16.4 -22.5 16.6 -23.5
2025-11-17T21:31:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:31:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:31:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.813243
2025-11-17T21:31:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:31:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:31:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:31:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:31:36.045 [DEBUG] [Thread-61626] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:31:36.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:31:36.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:31:18', tmtdew=15.0, humidity=35.94, cloud=0.0, wind=14.77, temperature=15.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:31:18', seeing=1.37, atlas_timestamp='2025-11-17T19:31:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:29:00')
2025-11-17T21:31:36.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:31:36.147 [DEBUG] [Thread-61629] [transport.py] [_log()] starting thread (client mode): 0xd0712b90
2025-11-17T21:31:36.147 [DEBUG] [Thread-61629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:31:36.162 [DEBUG] [Thread-61629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:31:36.162 [INFO] [Thread-61629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:31:36.170 [DEBUG] [Thread-61629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:31:36.170 [DEBUG] [Thread-61629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:31:36.170 [DEBUG] [Thread-61629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:31:36.170 [DEBUG] [Thread-61629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:31:36.170 [DEBUG] [Thread-61629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] client lang: <none>
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] server lang: <none>
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] kex follows: False
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:31:36.171 [DEBUG] [Thread-61629] [transport.py] [_log()] Compression: none
2025-11-17T21:31:36.172 [DEBUG] [Thread-61629] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:31:36.228 [DEBUG] [Thread-61629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:31:36.228 [DEBUG] [Thread-61629] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:31:36.229 [DEBUG] [Thread-61629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:31:36.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:31:36.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:31:36.284 [DEBUG] [Thread-61629] [transport.py] [_log()] userauth is OK
2025-11-17T21:31:36.284 [DEBUG] [Thread-61629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:31:36.284 [DEBUG] [Thread-61629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:31:36.284 [DEBUG] [Thread-61629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:31:36.284 [DEBUG] [Thread-61629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:31:36.298 [INFO] [Thread-61629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:31:36.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:31:36.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:31:37.186 [DEBUG] [Thread-61629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:31:37.187 [DEBUG] [Thread-61629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:31:37.234 [DEBUG] [Thread-61629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:31:37.234 [DEBUG] [Thread-61629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:31:37.243 [DEBUG] [Thread-61629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:31:37.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:31:37.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:31: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') -> 00000000
2025-11-17T21:31:37.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:31:37.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:31:37.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:31:37.277 [DEBUG] [Thread-61629] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:31:39.691 [DEBUG] [Thread-61631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:31:42.338 [DEBUG] [Thread-61632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:31:50.384 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:31:50.385 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:31:54.730 [DEBUG] [Thread-61633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:32:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:32:07.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:32:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:32:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 31, 50), 14.88, 36.63, 0.0, 16.13, 15.97, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:32:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:31:50
2025-11-17T21:32:08.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:32:08.184 [DEBUG] [Thread-61634] [transport.py] [_log()] starting thread (client mode): 0xd0710400
2025-11-17T21:32:08.185 [DEBUG] [Thread-61634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:32:08.205 [DEBUG] [Thread-61634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:32:08.206 [INFO] [Thread-61634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:32:08.209 [DEBUG] [Thread-61634] [transport.py] [_log()] client lang: <none>
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] server lang: <none>
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] kex follows: False
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] Compression: none
2025-11-17T21:32:08.210 [DEBUG] [Thread-61634] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:32:08.227 [DEBUG] [Thread-61634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:32:08.227 [DEBUG] [Thread-61634] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:32:08.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:32:08.228 [DEBUG] [Thread-61634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:32:08.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:32:08.230 [DEBUG] [Thread-61634] [transport.py] [_log()] userauth is OK
2025-11-17T21:32:08.230 [DEBUG] [Thread-61634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:32:08.230 [DEBUG] [Thread-61634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:32:08.230 [DEBUG] [Thread-61634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:32:08.230 [DEBUG] [Thread-61634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:32:08.255 [INFO] [Thread-61634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:32:08.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:32:08.925 [DEBUG] [Thread-61634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:32:08.925 [DEBUG] [Thread-61634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:32:08.925 [DEBUG] [Thread-61634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:32:08.965 [DEBUG] [Thread-61634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:32:08.965 [DEBUG] [Thread-61634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:32:08.968 [DEBUG] [Thread-61634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:32:08.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:32:08.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:32:08.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:32:08.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:32:08.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:32:08.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:32:08.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.813590 -999.00  +16.00  11.31     41   +2.80 1 1 1 1 1     0    0 11.58 -86.12 ZNESW 9.4 11.3 179.8 13.8 16.6 -23.8 16.6 -23.0 16.4 -22.5 16.6 -23.1
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.813590
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:32:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:31:50', tmtdew=14.88, humidity=36.63, cloud=0.0, wind=16.13, temperature=15.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:31:50', seeing=1.51, atlas_timestamp='2025-11-17T19:31:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:29:00')
2025-11-17T21:32:08.985 [DEBUG] [Thread-61634] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:32:09.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:32:09.072 [DEBUG] [Thread-61637] [transport.py] [_log()] starting thread (client mode): 0xd31516f0
2025-11-17T21:32:09.073 [DEBUG] [Thread-61637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:32:09.087 [DEBUG] [Thread-61637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:32:09.087 [INFO] [Thread-61637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:32:09.094 [DEBUG] [Thread-61637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:32:09.095 [DEBUG] [Thread-61637] [transport.py] [_log()] client lang: <none>
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] server lang: <none>
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] kex follows: False
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] Compression: none
2025-11-17T21:32:09.096 [DEBUG] [Thread-61637] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:32:09.153 [DEBUG] [Thread-61637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:32:09.153 [DEBUG] [Thread-61637] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:32:09.154 [DEBUG] [Thread-61637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:32:09.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:32:09.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:32:09.209 [DEBUG] [Thread-61637] [transport.py] [_log()] userauth is OK
2025-11-17T21:32:09.209 [DEBUG] [Thread-61637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:32:09.209 [DEBUG] [Thread-61637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:32:09.209 [DEBUG] [Thread-61637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:32:09.209 [DEBUG] [Thread-61637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:32:09.227 [INFO] [Thread-61637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:32:09.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:32:09.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:32:09.757 [DEBUG] [Thread-61639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:32:10.062 [DEBUG] [Thread-61637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:32:10.063 [DEBUG] [Thread-61637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:32:10.110 [DEBUG] [Thread-61637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:32:10.110 [DEBUG] [Thread-61637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:32:10.119 [DEBUG] [Thread-61637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:32:10.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:32:10.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:32: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') -> 00000000
2025-11-17T21:32:10.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:32:10.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:32:10.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:32:10.152 [DEBUG] [Thread-61637] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:32:24.796 [DEBUG] [Thread-61640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:32:39.825 [DEBUG] [Thread-61641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:32:40.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:32:40.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:32:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:32:40.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 32, 22), 14.87, 36.66, 0.0, 14.82, 15.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:32:40.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:32:22
2025-11-17T21:32:40.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:32:41.095 [DEBUG] [Thread-61642] [transport.py] [_log()] starting thread (client mode): 0xd31cdb70
2025-11-17T21:32:41.095 [DEBUG] [Thread-61642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:32:41.115 [DEBUG] [Thread-61642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:32:41.115 [INFO] [Thread-61642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] client lang: <none>
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] server lang: <none>
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] kex follows: False
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] Compression: none
2025-11-17T21:32:41.117 [DEBUG] [Thread-61642] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:32:41.136 [DEBUG] [Thread-61642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:32:41.137 [DEBUG] [Thread-61642] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:32:41.137 [DEBUG] [Thread-61642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:32:41.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:32:41.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:32:41.140 [DEBUG] [Thread-61642] [transport.py] [_log()] userauth is OK
2025-11-17T21:32:41.140 [DEBUG] [Thread-61642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:32:41.140 [DEBUG] [Thread-61642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:32:41.140 [DEBUG] [Thread-61642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:32:41.140 [DEBUG] [Thread-61642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:32:41.157 [INFO] [Thread-61642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:32:41.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:32:41.733 [DEBUG] [Thread-61642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:32:41.733 [DEBUG] [Thread-61642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:32:41.733 [DEBUG] [Thread-61642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:32:41.774 [DEBUG] [Thread-61642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:32:41.775 [DEBUG] [Thread-61642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:32:41.777 [DEBUG] [Thread-61642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:32:41.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:32:41.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:32:41.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:32:41.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:32:41.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:32:41.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:32:41.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:32:41.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:32:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:32:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.813937 -999.00  +16.00  10.53     41   +2.80 1 1 1 1 1     0    0 10.94 -96.90 ZNESW 11.5 10.5 187.6 14.8 16.6 -23.7 16.5 -23.2 16.3 -22.5 16.6 -23.3
2025-11-17T21:32:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:32:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:32:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.813937
2025-11-17T21:32:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:32:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:32:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:32:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:32:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:32:41.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:32:22', tmtdew=14.87, humidity=36.66, cloud=0.0, wind=14.82, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:32:22', seeing=1.41, atlas_timestamp='2025-11-17T19:32:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:29:00')
2025-11-17T21:32:41.802 [DEBUG] [Thread-61642] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:32:41.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:32:41.898 [DEBUG] [Thread-61645] [transport.py] [_log()] starting thread (client mode): 0xd3153100
2025-11-17T21:32:41.898 [DEBUG] [Thread-61645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:32:41.913 [DEBUG] [Thread-61645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:32:41.913 [INFO] [Thread-61645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:32:41.920 [DEBUG] [Thread-61645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:32:41.920 [DEBUG] [Thread-61645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] client lang: <none>
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] server lang: <none>
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] kex follows: False
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] Compression: none
2025-11-17T21:32:41.921 [DEBUG] [Thread-61645] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:32:41.980 [DEBUG] [Thread-61645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:32:41.981 [DEBUG] [Thread-61645] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:32:41.981 [DEBUG] [Thread-61645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:32:41.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:32:41.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:32:42.036 [DEBUG] [Thread-61645] [transport.py] [_log()] userauth is OK
2025-11-17T21:32:42.037 [DEBUG] [Thread-61645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:32:42.037 [DEBUG] [Thread-61645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:32:42.037 [DEBUG] [Thread-61645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:32:42.037 [DEBUG] [Thread-61645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:32:42.055 [INFO] [Thread-61645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:32:42.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:32:42.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:32:42.413 [DEBUG] [Thread-61647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:32:42.871 [DEBUG] [Thread-61645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:32:42.871 [DEBUG] [Thread-61645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:32:42.919 [DEBUG] [Thread-61645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:32:42.919 [DEBUG] [Thread-61645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:32:42.928 [DEBUG] [Thread-61645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:32:42.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:32: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')
2025-11-17T21:32:42.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:32:42.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:32:42.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:32:42.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:32:42.963 [DEBUG] [Thread-61645] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:32:50.587 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:32:50.588 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:32:54.855 [DEBUG] [Thread-61648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:33:09.889 [DEBUG] [Thread-61649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:33:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:33:12.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:33:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:33:13.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 32, 54), 14.85, 36.56, 0.0, 16.0, 15.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:33:13.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:32:54
2025-11-17T21:33:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:33:13.916 [DEBUG] [Thread-61650] [transport.py] [_log()] starting thread (client mode): 0xd7bc65c0
2025-11-17T21:33:13.917 [DEBUG] [Thread-61650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:33:13.937 [DEBUG] [Thread-61650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:33:13.937 [INFO] [Thread-61650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] client lang: <none>
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] server lang: <none>
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] kex follows: False
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:33:13.940 [DEBUG] [Thread-61650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:33:13.941 [DEBUG] [Thread-61650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:33:13.941 [DEBUG] [Thread-61650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:33:13.941 [DEBUG] [Thread-61650] [transport.py] [_log()] Compression: none
2025-11-17T21:33:13.941 [DEBUG] [Thread-61650] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:33:13.957 [DEBUG] [Thread-61650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:33:13.958 [DEBUG] [Thread-61650] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:33:13.958 [DEBUG] [Thread-61650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:33:13.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:33:13.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:33:13.960 [DEBUG] [Thread-61650] [transport.py] [_log()] userauth is OK
2025-11-17T21:33:13.960 [DEBUG] [Thread-61650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:33:13.960 [DEBUG] [Thread-61650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:33:13.961 [DEBUG] [Thread-61650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:33:13.961 [DEBUG] [Thread-61650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:33:13.983 [INFO] [Thread-61650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:33:13.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:33:14.575 [DEBUG] [Thread-61650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:33:14.575 [DEBUG] [Thread-61650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:33:14.576 [DEBUG] [Thread-61650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:33:14.616 [DEBUG] [Thread-61650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:33:14.616 [DEBUG] [Thread-61650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:33:14.619 [DEBUG] [Thread-61650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:33:14.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:33:14.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:33:14.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:33:14.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:33:14.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:33:14.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:33:14.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:33:14.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:33:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:33:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.814284 -999.00  +16.00  13.83     41   +2.90 1 1 1 1 1     0    0 11.46 -91.75 ZNESW 13.4 13.8 182.0 16.5 16.6 -23.8 16.5 -23.1 16.4 -22.6 16.6 -23.5
2025-11-17T21:33:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:33:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:33:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.814284
2025-11-17T21:33:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:33:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:33:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:33:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:33:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:33:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:32:54', tmtdew=14.85, humidity=36.56, cloud=0.0, wind=16.0, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:32:54', seeing=1.27, atlas_timestamp='2025-11-17T19:32:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:29:00')
2025-11-17T21:33:14.637 [DEBUG] [Thread-61650] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:33:14.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:33:14.720 [DEBUG] [Thread-61653] [transport.py] [_log()] starting thread (client mode): 0xd07121a0
2025-11-17T21:33:14.721 [DEBUG] [Thread-61653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:33:14.735 [DEBUG] [Thread-61653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:33:14.735 [INFO] [Thread-61653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] client lang: <none>
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] server lang: <none>
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] kex follows: False
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:33:14.743 [DEBUG] [Thread-61653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:33:14.744 [DEBUG] [Thread-61653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:33:14.744 [DEBUG] [Thread-61653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:33:14.744 [DEBUG] [Thread-61653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:33:14.744 [DEBUG] [Thread-61653] [transport.py] [_log()] Compression: none
2025-11-17T21:33:14.744 [DEBUG] [Thread-61653] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:33:14.802 [DEBUG] [Thread-61653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:33:14.803 [DEBUG] [Thread-61653] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:33:14.803 [DEBUG] [Thread-61653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:33:14.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:33:14.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:33:14.862 [DEBUG] [Thread-61653] [transport.py] [_log()] userauth is OK
2025-11-17T21:33:14.863 [DEBUG] [Thread-61653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:33:14.863 [DEBUG] [Thread-61653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:33:14.863 [DEBUG] [Thread-61653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:33:14.863 [DEBUG] [Thread-61653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:33:14.882 [INFO] [Thread-61653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:33:14.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:33:14.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:33:15.714 [DEBUG] [Thread-61653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:33:15.714 [DEBUG] [Thread-61653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:33:15.761 [DEBUG] [Thread-61653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:33:15.761 [DEBUG] [Thread-61653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:33:15.770 [DEBUG] [Thread-61653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:33:15.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:33:15.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:33:15.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:33:15.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:33:15.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:33:15.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:33:15.805 [DEBUG] [Thread-61653] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:33:24.918 [DEBUG] [Thread-61655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:33:39.957 [DEBUG] [Thread-61656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:33:42.493 [DEBUG] [Thread-61657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:33:45.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:33:45.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:33:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:33:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 33, 26), 14.8, 36.71, 0.0, 17.15, 15.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:33:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:33:26
2025-11-17T21:33:46.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:33:46.817 [DEBUG] [Thread-61658] [transport.py] [_log()] starting thread (client mode): 0xd7bc5ff0
2025-11-17T21:33:46.817 [DEBUG] [Thread-61658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:33:46.837 [DEBUG] [Thread-61658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:33:46.837 [INFO] [Thread-61658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] client lang: <none>
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] server lang: <none>
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] kex follows: False
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] Compression: none
2025-11-17T21:33:46.841 [DEBUG] [Thread-61658] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:33:46.857 [DEBUG] [Thread-61658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:33:46.857 [DEBUG] [Thread-61658] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:33:46.858 [DEBUG] [Thread-61658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:33:46.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:33:46.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:33:46.858 [DEBUG] [Thread-61658] [transport.py] [_log()] userauth is OK
2025-11-17T21:33:46.858 [DEBUG] [Thread-61658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:33:46.858 [DEBUG] [Thread-61658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:33:46.858 [DEBUG] [Thread-61658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:33:46.858 [DEBUG] [Thread-61658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:33:46.875 [INFO] [Thread-61658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:33:46.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:33:47.480 [DEBUG] [Thread-61658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:33:47.480 [DEBUG] [Thread-61658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:33:47.480 [DEBUG] [Thread-61658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:33:47.521 [DEBUG] [Thread-61658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:33:47.521 [DEBUG] [Thread-61658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:33:47.523 [DEBUG] [Thread-61658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:33:47.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:33:47.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:33:47.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:33:47.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:33:47.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:33:47.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:33:47.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:33:47.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.814631 -999.00  +16.00  12.75     41   +2.90 1 1 1 1 1     0    0 11.38 -89.29 ZNESW 13.2 12.8 186.4 16.2 16.6 -23.8 16.5 -23.3 16.3 -22.5 16.6 -23.3
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.814631
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:33:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:33:26', tmtdew=14.8, humidity=36.71, cloud=0.0, wind=17.15, temperature=15.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:33:26', seeing=1.25, atlas_timestamp='2025-11-17T19:33:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:29:00')
2025-11-17T21:33:47.542 [DEBUG] [Thread-61658] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:33:47.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:33:47.629 [DEBUG] [Thread-61661] [transport.py] [_log()] starting thread (client mode): 0xd7bc63b0
2025-11-17T21:33:47.629 [DEBUG] [Thread-61661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:33:47.645 [DEBUG] [Thread-61661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:33:47.645 [INFO] [Thread-61661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] client lang: <none>
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] server lang: <none>
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] kex follows: False
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] Compression: none
2025-11-17T21:33:47.653 [DEBUG] [Thread-61661] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:33:47.712 [DEBUG] [Thread-61661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:33:47.712 [DEBUG] [Thread-61661] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:33:47.712 [DEBUG] [Thread-61661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:33:47.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:33:47.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:33:47.768 [DEBUG] [Thread-61661] [transport.py] [_log()] userauth is OK
2025-11-17T21:33:47.768 [DEBUG] [Thread-61661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:33:47.768 [DEBUG] [Thread-61661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:33:47.768 [DEBUG] [Thread-61661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:33:47.768 [DEBUG] [Thread-61661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:33:47.783 [INFO] [Thread-61661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:33:47.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:33:47.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:33:48.641 [DEBUG] [Thread-61661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:33:48.641 [DEBUG] [Thread-61661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:33:48.690 [DEBUG] [Thread-61661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:33:48.690 [DEBUG] [Thread-61661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:33:48.699 [DEBUG] [Thread-61661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:33:48.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:33:48.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:33:48.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:33:48.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:33:48.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:33:48.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:33:48.730 [DEBUG] [Thread-61661] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:33:50.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:33:50.791 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:33:54.986 [DEBUG] [Thread-61663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:34:10.029 [DEBUG] [Thread-61664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:34:18.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:34:18.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:34:18.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:34:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 33, 58), 14.73, 36.74, 0.0, 16.62, 15.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:34:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:33:58
2025-11-17T21:34:19.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:34:19.693 [DEBUG] [Thread-61665] [transport.py] [_log()] starting thread (client mode): 0xd317d210
2025-11-17T21:34:19.693 [DEBUG] [Thread-61665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:34:19.714 [DEBUG] [Thread-61665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:34:19.714 [INFO] [Thread-61665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:34:19.717 [DEBUG] [Thread-61665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:34:19.717 [DEBUG] [Thread-61665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:34:19.717 [DEBUG] [Thread-61665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] client lang: <none>
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] server lang: <none>
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] kex follows: False
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] Compression: none
2025-11-17T21:34:19.718 [DEBUG] [Thread-61665] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:34:19.738 [DEBUG] [Thread-61665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:34:19.739 [DEBUG] [Thread-61665] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:34:19.739 [DEBUG] [Thread-61665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:34:19.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:34:19.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:34:19.741 [DEBUG] [Thread-61665] [transport.py] [_log()] userauth is OK
2025-11-17T21:34:19.741 [DEBUG] [Thread-61665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:34:19.742 [DEBUG] [Thread-61665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:34:19.742 [DEBUG] [Thread-61665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:34:19.742 [DEBUG] [Thread-61665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:34:19.777 [INFO] [Thread-61665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:34:19.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:34:20.419 [DEBUG] [Thread-61665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:34:20.419 [DEBUG] [Thread-61665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:34:20.419 [DEBUG] [Thread-61665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:34:20.460 [DEBUG] [Thread-61665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:34:20.460 [DEBUG] [Thread-61665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:34:20.463 [DEBUG] [Thread-61665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:34:20.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:34:20.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:34:20.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:34:20.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:34:20.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:34:20.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:34:20.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:34:20.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:34:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:34:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.815326 -999.00  +15.90  10.96     41   +2.90 1 1 1 1 1     0    0 11.32 -82.71 ZNESW 10.8 11.0 184.0 16.2 16.6 -23.9 16.4 -23.3 16.2 -22.5 16.6 -23.5
2025-11-17T21:34:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:34:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:34:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.815326
2025-11-17T21:34:20.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:34:20.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:34:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:34:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:34:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:34:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:33:58', tmtdew=14.73, humidity=36.74, cloud=0.0, wind=16.62, temperature=15.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:33:58', seeing=1.25, atlas_timestamp='2025-11-17T19:34:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:32:00')
2025-11-17T21:34:20.488 [DEBUG] [Thread-61665] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:34:20.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:34:20.585 [DEBUG] [Thread-61668] [transport.py] [_log()] starting thread (client mode): 0xd3151030
2025-11-17T21:34:20.585 [DEBUG] [Thread-61668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:34:20.599 [DEBUG] [Thread-61668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:34:20.600 [INFO] [Thread-61668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:34:20.607 [DEBUG] [Thread-61668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:34:20.607 [DEBUG] [Thread-61668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:34:20.607 [DEBUG] [Thread-61668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] client lang: <none>
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] server lang: <none>
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] kex follows: False
2025-11-17T21:34:20.608 [DEBUG] [Thread-61668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:34:20.609 [DEBUG] [Thread-61668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:34:20.609 [DEBUG] [Thread-61668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:34:20.609 [DEBUG] [Thread-61668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:34:20.609 [DEBUG] [Thread-61668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:34:20.609 [DEBUG] [Thread-61668] [transport.py] [_log()] Compression: none
2025-11-17T21:34:20.609 [DEBUG] [Thread-61668] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:34:20.665 [DEBUG] [Thread-61668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:34:20.665 [DEBUG] [Thread-61668] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:34:20.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:34:20.666 [DEBUG] [Thread-61668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:34:20.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:34:20.725 [DEBUG] [Thread-61668] [transport.py] [_log()] userauth is OK
2025-11-17T21:34:20.725 [DEBUG] [Thread-61668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:34:20.725 [DEBUG] [Thread-61668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:34:20.725 [DEBUG] [Thread-61668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:34:20.725 [DEBUG] [Thread-61668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:34:20.744 [INFO] [Thread-61668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:34:20.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:34:20.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:34:21.577 [DEBUG] [Thread-61668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:34:21.577 [DEBUG] [Thread-61668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:34:21.625 [DEBUG] [Thread-61668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:34:21.625 [DEBUG] [Thread-61668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:34:21.634 [DEBUG] [Thread-61668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:34:21.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:34:21.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')
2025-11-17T21:34:21.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
2025-11-17T21:34:21.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:34:21.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:34:21.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:34:21.671 [DEBUG] [Thread-61668] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:34:25.059 [DEBUG] [Thread-61670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:34:40.087 [DEBUG] [Thread-61671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:34:42.577 [DEBUG] [Thread-61672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:34:50.992 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:34:50.994 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:34:51.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:34:51.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:34:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:34:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 34, 30), 14.66, 36.93, 0.0, 15.74, 15.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:34:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:34:30
2025-11-17T21:34:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:34:52.600 [DEBUG] [Thread-61673] [transport.py] [_log()] starting thread (client mode): 0xd317d3f0
2025-11-17T21:34:52.600 [DEBUG] [Thread-61673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:34:52.614 [DEBUG] [Thread-61673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:34:52.614 [INFO] [Thread-61673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:34:52.616 [DEBUG] [Thread-61673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] client lang: <none>
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] server lang: <none>
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] kex follows: False
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] Compression: none
2025-11-17T21:34:52.617 [DEBUG] [Thread-61673] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:34:52.634 [DEBUG] [Thread-61673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:34:52.634 [DEBUG] [Thread-61673] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:34:52.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:34:52.635 [DEBUG] [Thread-61673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:34:52.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:34:52.637 [DEBUG] [Thread-61673] [transport.py] [_log()] userauth is OK
2025-11-17T21:34:52.637 [DEBUG] [Thread-61673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:34:52.637 [DEBUG] [Thread-61673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:34:52.637 [DEBUG] [Thread-61673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:34:52.638 [DEBUG] [Thread-61673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:34:52.662 [INFO] [Thread-61673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:34:52.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:34:53.310 [DEBUG] [Thread-61673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:34:53.311 [DEBUG] [Thread-61673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:34:53.311 [DEBUG] [Thread-61673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:34:53.351 [DEBUG] [Thread-61673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:34:53.352 [DEBUG] [Thread-61673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:34:53.354 [DEBUG] [Thread-61673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:34:53.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:34:53.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:34:53.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:34:53.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:34:53.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:34:53.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:34:53.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:34:53.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:34:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:34:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.815673 -999.00  +15.90   9.71     41   +2.90 1 1 1 1 1     0    0 11.65 -81.20 ZNESW 11.4 9.7 187.0 16.2 16.6 -23.9 16.4 -23.2 16.2 -22.6 16.5 -23.5
2025-11-17T21:34:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:34:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:34:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.815673
2025-11-17T21:34:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:34:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:34:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:34:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:34:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:34:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:34:30', tmtdew=14.66, humidity=36.93, cloud=0.0, wind=15.74, temperature=15.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:34:30', seeing=1.3, atlas_timestamp='2025-11-17T19:34:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:32:00')
2025-11-17T21:34:53.379 [DEBUG] [Thread-61673] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:34:53.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:34:53.474 [DEBUG] [Thread-61676] [transport.py] [_log()] starting thread (client mode): 0xd317e770
2025-11-17T21:34:53.475 [DEBUG] [Thread-61676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:34:53.489 [DEBUG] [Thread-61676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:34:53.490 [INFO] [Thread-61676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] client lang: <none>
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] server lang: <none>
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] kex follows: False
2025-11-17T21:34:53.497 [DEBUG] [Thread-61676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:34:53.498 [DEBUG] [Thread-61676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:34:53.498 [DEBUG] [Thread-61676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:34:53.498 [DEBUG] [Thread-61676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:34:53.498 [DEBUG] [Thread-61676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:34:53.498 [DEBUG] [Thread-61676] [transport.py] [_log()] Compression: none
2025-11-17T21:34:53.498 [DEBUG] [Thread-61676] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:34:53.556 [DEBUG] [Thread-61676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:34:53.557 [DEBUG] [Thread-61676] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:34:53.557 [DEBUG] [Thread-61676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:34:53.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:34:53.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:34:53.613 [DEBUG] [Thread-61676] [transport.py] [_log()] userauth is OK
2025-11-17T21:34:53.613 [DEBUG] [Thread-61676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:34:53.613 [DEBUG] [Thread-61676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:34:53.613 [DEBUG] [Thread-61676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:34:53.613 [DEBUG] [Thread-61676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:34:53.633 [INFO] [Thread-61676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:34:53.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:34:53.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:34:54.494 [DEBUG] [Thread-61676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:34:54.494 [DEBUG] [Thread-61676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:34:54.541 [DEBUG] [Thread-61676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:34:54.541 [DEBUG] [Thread-61676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:34:54.559 [DEBUG] [Thread-61676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:34:54.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:34:54.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:34:54.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:34:54.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:34:54.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:34:54.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:34:54.593 [DEBUG] [Thread-61676] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:34:55.116 [DEBUG] [Thread-61678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:10.161 [DEBUG] [Thread-61679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:24.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:35:24.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:35:24.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:35:25.190 [DEBUG] [Thread-61680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:25.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 35, 2), 14.68, 36.89, 0.0, 15.95, 15.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:35:25.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:35:02
2025-11-17T21:35:25.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:35:25.535 [DEBUG] [Thread-61681] [transport.py] [_log()] starting thread (client mode): 0xd317c760
2025-11-17T21:35:25.535 [DEBUG] [Thread-61681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:35:25.555 [DEBUG] [Thread-61681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:35:25.556 [INFO] [Thread-61681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] client lang: <none>
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] server lang: <none>
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] kex follows: False
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] Compression: none
2025-11-17T21:35:25.559 [DEBUG] [Thread-61681] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:35:25.576 [DEBUG] [Thread-61681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:35:25.576 [DEBUG] [Thread-61681] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:35:25.577 [DEBUG] [Thread-61681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:35:25.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:35:25.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:35:25.579 [DEBUG] [Thread-61681] [transport.py] [_log()] userauth is OK
2025-11-17T21:35:25.579 [DEBUG] [Thread-61681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:35:25.579 [DEBUG] [Thread-61681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:35:25.579 [DEBUG] [Thread-61681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:35:25.579 [DEBUG] [Thread-61681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:35:25.604 [INFO] [Thread-61681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:35:25.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:35:26.234 [DEBUG] [Thread-61681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:35:26.234 [DEBUG] [Thread-61681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:35:26.234 [DEBUG] [Thread-61681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:35:26.275 [DEBUG] [Thread-61681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:35:26.276 [DEBUG] [Thread-61681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:35:26.279 [DEBUG] [Thread-61681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:35:26.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:35:26.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:35:26.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:35:26.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:35:26.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:35:26.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:35:26.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:35:26.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:35:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:35:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.816020 -999.00  +15.90  14.00     41   +2.90 1 1 1 1 1     0    0 11.58 -81.15 ZNESW 10.2 14.0 193.4 17.6 16.6 -23.9 16.4 -23.2 16.2 -22.6 16.5 -23.6
2025-11-17T21:35:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:35:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:35:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.816020
2025-11-17T21:35:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:35:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:35:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:35:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:35:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:35:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:35:02', tmtdew=14.68, humidity=36.89, cloud=0.0, wind=15.95, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:35:02', seeing=1.47, atlas_timestamp='2025-11-17T19:35:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:32:00')
2025-11-17T21:35:26.303 [DEBUG] [Thread-61681] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:35:26.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:35:26.399 [DEBUG] [Thread-61684] [transport.py] [_log()] starting thread (client mode): 0xd317ca00
2025-11-17T21:35:26.399 [DEBUG] [Thread-61684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:35:26.414 [DEBUG] [Thread-61684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:35:26.415 [INFO] [Thread-61684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] client lang: <none>
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] server lang: <none>
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] kex follows: False
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:35:26.422 [DEBUG] [Thread-61684] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:35:26.423 [DEBUG] [Thread-61684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:35:26.423 [DEBUG] [Thread-61684] [transport.py] [_log()] Compression: none
2025-11-17T21:35:26.423 [DEBUG] [Thread-61684] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:35:26.480 [DEBUG] [Thread-61684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:35:26.480 [DEBUG] [Thread-61684] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:35:26.481 [DEBUG] [Thread-61684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:35:26.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:35:26.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:35:26.541 [DEBUG] [Thread-61684] [transport.py] [_log()] userauth is OK
2025-11-17T21:35:26.541 [DEBUG] [Thread-61684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:35:26.541 [DEBUG] [Thread-61684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:35:26.541 [DEBUG] [Thread-61684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:35:26.541 [DEBUG] [Thread-61684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:35:26.560 [INFO] [Thread-61684] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:35:26.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:35:26.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:35:27.433 [DEBUG] [Thread-61684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:35:27.433 [DEBUG] [Thread-61684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:35:27.480 [DEBUG] [Thread-61684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:35:27.480 [DEBUG] [Thread-61684] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:35:27.489 [DEBUG] [Thread-61684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:35:27.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:35:27.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:35:27.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:35:27.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:35:27.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:35:27.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:35:27.524 [DEBUG] [Thread-61684] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:35:39.834 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:40.217 [DEBUG] [Thread-61686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:42.628 [DEBUG] [Thread-61687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:51.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:51.198 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:55.256 [DEBUG] [Thread-61688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:35:57.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:35:57.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:35:57.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:35:58.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 35, 34), 14.58, 37.38, 0.0, 16.04, 15.76, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:35:58.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:35:34
2025-11-17T21:35:58.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:35:58.469 [DEBUG] [Thread-61689] [transport.py] [_log()] starting thread (client mode): 0xd7bc6950
2025-11-17T21:35:58.469 [DEBUG] [Thread-61689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:35:58.488 [DEBUG] [Thread-61689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:35:58.488 [INFO] [Thread-61689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:35:58.491 [DEBUG] [Thread-61689] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:35:58.491 [DEBUG] [Thread-61689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:35:58.491 [DEBUG] [Thread-61689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:35:58.491 [DEBUG] [Thread-61689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] client lang: <none>
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] server lang: <none>
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] kex follows: False
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] Compression: none
2025-11-17T21:35:58.492 [DEBUG] [Thread-61689] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:35:58.508 [DEBUG] [Thread-61689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:35:58.508 [DEBUG] [Thread-61689] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:35:58.509 [DEBUG] [Thread-61689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:35:58.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:35:58.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:35:58.510 [DEBUG] [Thread-61689] [transport.py] [_log()] userauth is OK
2025-11-17T21:35:58.510 [DEBUG] [Thread-61689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:35:58.510 [DEBUG] [Thread-61689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:35:58.510 [DEBUG] [Thread-61689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:35:58.510 [DEBUG] [Thread-61689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:35:58.525 [INFO] [Thread-61689] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:35:58.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:35:59.137 [DEBUG] [Thread-61689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:35:59.137 [DEBUG] [Thread-61689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:35:59.138 [DEBUG] [Thread-61689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:35:59.178 [DEBUG] [Thread-61689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:35:59.178 [DEBUG] [Thread-61689] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:35:59.180 [DEBUG] [Thread-61689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:35:59.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:35:59.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:35:59.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:35:59.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:35:59.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:35:59.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:35:59.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:35:59.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:35:59.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:35:59.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.816367 -999.00  +15.90  11.53     41   +2.90 1 1 1 1 1     0    0 11.07 -88.12 ZNESW 12.1 11.5 197.0 15.1 16.5 -24.0 16.4 -23.3 16.2 -22.5 16.4 -23.6
2025-11-17T21:35:59.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:35:59.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:35:59.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.816367
2025-11-17T21:35:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:35:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:35:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:35:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:35:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:35:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:35:34', tmtdew=14.58, humidity=37.38, cloud=0.0, wind=16.04, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:35:34', seeing=1.35, atlas_timestamp='2025-11-17T19:35:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:32:00')
2025-11-17T21:35:59.203 [DEBUG] [Thread-61689] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:35:59.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:35:59.299 [DEBUG] [Thread-61692] [transport.py] [_log()] starting thread (client mode): 0xd7bc6a10
2025-11-17T21:35:59.299 [DEBUG] [Thread-61692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:35:59.314 [DEBUG] [Thread-61692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:35:59.314 [INFO] [Thread-61692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:35:59.321 [DEBUG] [Thread-61692] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] client lang: <none>
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] server lang: <none>
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] kex follows: False
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] Compression: none
2025-11-17T21:35:59.322 [DEBUG] [Thread-61692] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:35:59.381 [DEBUG] [Thread-61692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:35:59.381 [DEBUG] [Thread-61692] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:35:59.381 [DEBUG] [Thread-61692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:35:59.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:35:59.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:35:59.436 [DEBUG] [Thread-61692] [transport.py] [_log()] userauth is OK
2025-11-17T21:35:59.436 [DEBUG] [Thread-61692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:35:59.437 [DEBUG] [Thread-61692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:35:59.437 [DEBUG] [Thread-61692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:35:59.437 [DEBUG] [Thread-61692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:35:59.455 [INFO] [Thread-61692] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:35:59.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:35:59.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:36:00.317 [DEBUG] [Thread-61692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:36:00.317 [DEBUG] [Thread-61692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:36:00.364 [DEBUG] [Thread-61692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:36:00.365 [DEBUG] [Thread-61692] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:36:00.374 [DEBUG] [Thread-61692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:36:00.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:36:00.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:36:00.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:36:00.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:36:00.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:36:00.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:36:00.408 [DEBUG] [Thread-61692] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:36:10.283 [DEBUG] [Thread-61694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:36:25.332 [DEBUG] [Thread-61695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:36:30.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:36:30.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:36:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:36:31.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 36, 6), 14.56, 37.41, 0.0, 17.01, 15.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:36:31.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:36:06
2025-11-17T21:36:31.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:36:31.354 [DEBUG] [Thread-61696] [transport.py] [_log()] starting thread (client mode): 0xd317ec50
2025-11-17T21:36:31.354 [DEBUG] [Thread-61696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:36:31.374 [DEBUG] [Thread-61696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:36:31.375 [INFO] [Thread-61696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:36:31.378 [DEBUG] [Thread-61696] [transport.py] [_log()] client lang: <none>
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] server lang: <none>
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] kex follows: False
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] Compression: none
2025-11-17T21:36:31.379 [DEBUG] [Thread-61696] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:36:31.398 [DEBUG] [Thread-61696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:36:31.398 [DEBUG] [Thread-61696] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:36:31.399 [DEBUG] [Thread-61696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:36:31.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:36:31.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:36:31.401 [DEBUG] [Thread-61696] [transport.py] [_log()] userauth is OK
2025-11-17T21:36:31.401 [DEBUG] [Thread-61696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:36:31.401 [DEBUG] [Thread-61696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:36:31.401 [DEBUG] [Thread-61696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:36:31.401 [DEBUG] [Thread-61696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:36:31.426 [INFO] [Thread-61696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:36:31.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:36:32.078 [DEBUG] [Thread-61696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:36:32.078 [DEBUG] [Thread-61696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:36:32.078 [DEBUG] [Thread-61696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:36:32.119 [DEBUG] [Thread-61696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:36:32.120 [DEBUG] [Thread-61696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:36:32.123 [DEBUG] [Thread-61696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:36:32.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:36:32.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:36:32.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:36:32.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:36:32.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:36:32.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:36:32.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:36:32.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:36:32.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:36:32.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.816367 -999.00  +15.90  11.53     41   +2.90 1 1 1 1 1     0    0 11.07 -88.12 ZNESW 12.1 11.5 197.0 15.1 16.5 -24.0 16.4 -23.3 16.2 -22.5 16.4 -23.6
2025-11-17T21:36:32.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:36:32.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:36:32.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.816367
2025-11-17T21:36:32.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:36:32.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:36:32.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:36:32.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:36:32.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:36:32.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:36:06', tmtdew=14.56, humidity=37.41, cloud=0.0, wind=17.01, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:36:06', seeing=1.56, atlas_timestamp='2025-11-17T19:35:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.07424999999999926, 0.10025000000000084, 0.0757500000000011, 0.09799999999999898, 0.1039999999999992, 0.13375000000000092, 0.0860000000000003, 0.051249999999999574, 0.12650000000000006, 0.12899999999999956, 0.15174999999999983, 0.13400000000000034, 0.15899999999999892, 0.161249999999999, 0.07099999999999973, 0.03999999999999915, 0.10125000000000028, 0.19449999999999967, 0.2469999999999999, 0.26924999999999955, 0.18499999999999872, 0.09774999999999956, 0.006750000000000256, 0.06975000000000087, 0.10599999999999987, 0.23850000000000016, 0.27974999999999994, 0.6449999999999996, 0.40500000000000025, 0.002000000000000668, 0.053000000000000824, 0.1490000000000009, 0.13274999999999793], zp_timestamp='2025-11-17T19:32:00')
2025-11-17T21:36:32.150 [DEBUG] [Thread-61696] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:36:32.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:36:32.248 [DEBUG] [Thread-61699] [transport.py] [_log()] starting thread (client mode): 0xd7bc6020
2025-11-17T21:36:32.248 [DEBUG] [Thread-61699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:36:32.263 [DEBUG] [Thread-61699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:36:32.263 [INFO] [Thread-61699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:36:32.271 [DEBUG] [Thread-61699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:36:32.271 [DEBUG] [Thread-61699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:36:32.271 [DEBUG] [Thread-61699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:36:32.271 [DEBUG] [Thread-61699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:36:32.271 [DEBUG] [Thread-61699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] client lang: <none>
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] server lang: <none>
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] kex follows: False
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] Compression: none
2025-11-17T21:36:32.272 [DEBUG] [Thread-61699] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:36:32.332 [DEBUG] [Thread-61699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:36:32.332 [DEBUG] [Thread-61699] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:36:32.333 [DEBUG] [Thread-61699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:36:32.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:36:32.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:36:32.389 [DEBUG] [Thread-61699] [transport.py] [_log()] userauth is OK
2025-11-17T21:36:32.389 [DEBUG] [Thread-61699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:36:32.389 [DEBUG] [Thread-61699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:36:32.389 [DEBUG] [Thread-61699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:36:32.389 [DEBUG] [Thread-61699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:36:32.409 [INFO] [Thread-61699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:36:32.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:36:32.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:36:33.239 [DEBUG] [Thread-61699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:36:33.239 [DEBUG] [Thread-61699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:36:33.286 [DEBUG] [Thread-61699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:36:33.286 [DEBUG] [Thread-61699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:36:33.295 [DEBUG] [Thread-61699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:36:33.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:36:33.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:36:33.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:36:33.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:36:33.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:36:33.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:36:33.328 [DEBUG] [Thread-61699] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:36:40.358 [DEBUG] [Thread-61701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:36:42.694 [DEBUG] [Thread-61702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:36:51.401 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:36:51.402 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:36:55.398 [DEBUG] [Thread-61703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:37:03.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:37:03.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:37:03.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:37:04.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 36, 38), 14.5, 37.46, 0.0, 18.21, 15.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:37:04.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:36:38
2025-11-17T21:37:04.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:37:04.286 [DEBUG] [Thread-61704] [transport.py] [_log()] starting thread (client mode): 0xd0785270
2025-11-17T21:37:04.286 [DEBUG] [Thread-61704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:37:04.307 [DEBUG] [Thread-61704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:37:04.307 [INFO] [Thread-61704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] client lang: <none>
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] server lang: <none>
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] kex follows: False
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:37:04.310 [DEBUG] [Thread-61704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:37:04.311 [DEBUG] [Thread-61704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:37:04.311 [DEBUG] [Thread-61704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:37:04.311 [DEBUG] [Thread-61704] [transport.py] [_log()] Compression: none
2025-11-17T21:37:04.311 [DEBUG] [Thread-61704] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:37:04.324 [DEBUG] [Thread-61704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:37:04.324 [DEBUG] [Thread-61704] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:37:04.324 [DEBUG] [Thread-61704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:37:04.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:37:04.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:37:04.325 [DEBUG] [Thread-61704] [transport.py] [_log()] userauth is OK
2025-11-17T21:37:04.325 [DEBUG] [Thread-61704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:37:04.325 [DEBUG] [Thread-61704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:37:04.325 [DEBUG] [Thread-61704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:37:04.325 [DEBUG] [Thread-61704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:37:04.334 [INFO] [Thread-61704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:37:04.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:37:04.982 [DEBUG] [Thread-61704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:37:04.982 [DEBUG] [Thread-61704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:37:04.982 [DEBUG] [Thread-61704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:37:05.023 [DEBUG] [Thread-61704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:37:05.023 [DEBUG] [Thread-61704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:37:05.025 [DEBUG] [Thread-61704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:37:05.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:37:05.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:37:05.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:37:05.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:37:05.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:37:05.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:37:05.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.816715 -999.00  +15.80   9.32     42   +2.90 1 1 1 1 1     0    0 11.24 -90.38 ZNESW 16.3 9.3 189.3 13.0 16.4 -23.9 16.4 -23.2 16.2 -22.6 16.4 -23.5
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.816715
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:37:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:36:38', tmtdew=14.5, humidity=37.46, cloud=0.0, wind=18.21, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:36:38', seeing=1.56, atlas_timestamp='2025-11-17T19:36:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:35:00')
2025-11-17T21:37:05.045 [DEBUG] [Thread-61704] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:37:05.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:37:05.130 [DEBUG] [Thread-61707] [transport.py] [_log()] starting thread (client mode): 0xd317d630
2025-11-17T21:37:05.130 [DEBUG] [Thread-61707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:37:05.145 [DEBUG] [Thread-61707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:37:05.145 [INFO] [Thread-61707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] client lang: <none>
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] server lang: <none>
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] kex follows: False
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] Compression: none
2025-11-17T21:37:05.153 [DEBUG] [Thread-61707] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:37:05.211 [DEBUG] [Thread-61707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:37:05.211 [DEBUG] [Thread-61707] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:37:05.211 [DEBUG] [Thread-61707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:37:05.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:37:05.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:37:05.273 [DEBUG] [Thread-61707] [transport.py] [_log()] userauth is OK
2025-11-17T21:37:05.273 [DEBUG] [Thread-61707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:37:05.273 [DEBUG] [Thread-61707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:37:05.273 [DEBUG] [Thread-61707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:37:05.274 [DEBUG] [Thread-61707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:37:05.300 [INFO] [Thread-61707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:37:05.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:37:05.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:37:06.132 [DEBUG] [Thread-61707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:37:06.132 [DEBUG] [Thread-61707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:37:06.180 [DEBUG] [Thread-61707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:37:06.180 [DEBUG] [Thread-61707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:37:06.189 [DEBUG] [Thread-61707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:37:06.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:37:06.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:37:06.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:37:06.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:37:06.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:37:06.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:37:06.223 [DEBUG] [Thread-61707] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:37:10.424 [DEBUG] [Thread-61709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:37:25.454 [DEBUG] [Thread-61710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:37:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:37:36.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:37:36.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:37:36.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 37, 10), 14.46, 37.57, 0.0, 18.9, 15.74, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:37:36.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:37:10
2025-11-17T21:37:37.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:37:37.160 [DEBUG] [Thread-61711] [transport.py] [_log()] starting thread (client mode): 0xd0713c70
2025-11-17T21:37:37.160 [DEBUG] [Thread-61711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:37:37.178 [DEBUG] [Thread-61711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:37:37.178 [INFO] [Thread-61711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] client lang: <none>
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] server lang: <none>
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] kex follows: False
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:37:37.180 [DEBUG] [Thread-61711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:37:37.181 [DEBUG] [Thread-61711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:37:37.181 [DEBUG] [Thread-61711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:37:37.181 [DEBUG] [Thread-61711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:37:37.181 [DEBUG] [Thread-61711] [transport.py] [_log()] Compression: none
2025-11-17T21:37:37.181 [DEBUG] [Thread-61711] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:37:37.190 [DEBUG] [Thread-61711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:37:37.191 [DEBUG] [Thread-61711] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:37:37.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:37:37.192 [DEBUG] [Thread-61711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:37:37.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:37:37.194 [DEBUG] [Thread-61711] [transport.py] [_log()] userauth is OK
2025-11-17T21:37:37.194 [DEBUG] [Thread-61711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:37:37.194 [DEBUG] [Thread-61711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:37:37.194 [DEBUG] [Thread-61711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:37:37.194 [DEBUG] [Thread-61711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:37:37.211 [INFO] [Thread-61711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:37:37.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:37:37.796 [DEBUG] [Thread-61711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:37:37.797 [DEBUG] [Thread-61711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:37:37.797 [DEBUG] [Thread-61711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:37:37.837 [DEBUG] [Thread-61711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:37:37.838 [DEBUG] [Thread-61711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:37:37.841 [DEBUG] [Thread-61711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:37:37.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:37:37.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:37:37.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:37:37.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:37:37.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:37:37.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:37:37.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:37:37.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:37:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:37:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.817062 -999.00  +15.80  12.82     42   +2.90 1 1 1 1 1     0    0 11.20 -92.73 ZNESW 10.1 12.8 186.0 16.3 16.5 -23.9 16.4 -23.4 16.2 -22.8 16.4 -23.6
2025-11-17T21:37:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:37:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:37:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.817062
2025-11-17T21:37:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:37:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:37:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:37:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:37:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:37:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:37:10', tmtdew=14.46, humidity=37.57, cloud=0.0, wind=18.9, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:37:10', seeing=1.4, atlas_timestamp='2025-11-17T19:36:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:35:00')
2025-11-17T21:37:37.869 [DEBUG] [Thread-61711] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:37:37.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:37:37.965 [DEBUG] [Thread-61714] [transport.py] [_log()] starting thread (client mode): 0xd0712500
2025-11-17T21:37:37.965 [DEBUG] [Thread-61714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:37:37.984 [DEBUG] [Thread-61714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:37:37.984 [INFO] [Thread-61714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] client lang: <none>
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] server lang: <none>
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] kex follows: False
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:37:37.992 [DEBUG] [Thread-61714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:37:37.993 [DEBUG] [Thread-61714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:37:37.993 [DEBUG] [Thread-61714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:37:37.993 [DEBUG] [Thread-61714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:37:37.993 [DEBUG] [Thread-61714] [transport.py] [_log()] Compression: none
2025-11-17T21:37:37.993 [DEBUG] [Thread-61714] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:37:38.050 [DEBUG] [Thread-61714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:37:38.051 [DEBUG] [Thread-61714] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:37:38.051 [DEBUG] [Thread-61714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:37:38.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:37:38.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:37:38.113 [DEBUG] [Thread-61714] [transport.py] [_log()] userauth is OK
2025-11-17T21:37:38.113 [DEBUG] [Thread-61714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:37:38.113 [DEBUG] [Thread-61714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:37:38.113 [DEBUG] [Thread-61714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:37:38.113 [DEBUG] [Thread-61714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:37:38.128 [INFO] [Thread-61714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:37:38.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:37:38.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:37:39.019 [DEBUG] [Thread-61714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:37:39.019 [DEBUG] [Thread-61714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:37:39.067 [DEBUG] [Thread-61714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:37:39.067 [DEBUG] [Thread-61714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:37:39.075 [DEBUG] [Thread-61714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:37:39.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:37:39.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:37:39.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:37:39.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:37:39.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:37:39.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:37:39.107 [DEBUG] [Thread-61714] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:37:40.483 [DEBUG] [Thread-61716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:37:42.764 [DEBUG] [Thread-61717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:37:51.605 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:37:51.606 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:37:55.514 [DEBUG] [Thread-61718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:38:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:38:09.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:38:09.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:38:09.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 37, 42), 14.47, 37.54, 0.0, 18.56, 15.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:38:09.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:37:42
2025-11-17T21:38:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:38:10.035 [DEBUG] [Thread-61719] [transport.py] [_log()] starting thread (client mode): 0xd317c430
2025-11-17T21:38:10.035 [DEBUG] [Thread-61719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:38:10.055 [DEBUG] [Thread-61719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:38:10.055 [INFO] [Thread-61719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] client lang: <none>
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] server lang: <none>
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] kex follows: False
2025-11-17T21:38:10.058 [DEBUG] [Thread-61719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:38:10.059 [DEBUG] [Thread-61719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:38:10.059 [DEBUG] [Thread-61719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:38:10.059 [DEBUG] [Thread-61719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:38:10.059 [DEBUG] [Thread-61719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:38:10.059 [DEBUG] [Thread-61719] [transport.py] [_log()] Compression: none
2025-11-17T21:38:10.059 [DEBUG] [Thread-61719] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:38:10.074 [DEBUG] [Thread-61719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:38:10.074 [DEBUG] [Thread-61719] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:38:10.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:38:10.075 [DEBUG] [Thread-61719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:38:10.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:38:10.077 [DEBUG] [Thread-61719] [transport.py] [_log()] userauth is OK
2025-11-17T21:38:10.077 [DEBUG] [Thread-61719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:38:10.078 [DEBUG] [Thread-61719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:38:10.078 [DEBUG] [Thread-61719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:38:10.078 [DEBUG] [Thread-61719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:38:10.111 [INFO] [Thread-61719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:38:10.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:38:10.542 [DEBUG] [Thread-61721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:38:10.757 [DEBUG] [Thread-61719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:38:10.758 [DEBUG] [Thread-61719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:38:10.758 [DEBUG] [Thread-61719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:38:10.798 [DEBUG] [Thread-61719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:38:10.798 [DEBUG] [Thread-61719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:38:10.800 [DEBUG] [Thread-61719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:38:10.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:38:10.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:38:10.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:38:10.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:38:10.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:38:10.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:38:10.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:38:10.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:38:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:38:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.817756 -999.00  +15.80  11.20     42   +2.90 1 1 1 1 1     0    0 10.63 -95.22 ZNESW 8.8 11.2 191.4 17.4 16.4 -24.0 16.4 -23.2 16.1 -22.7 16.4 -23.6
2025-11-17T21:38:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:38:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:38:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.817756
2025-11-17T21:38:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:38:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:38:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:38:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:38:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:38:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:37:42', tmtdew=14.47, humidity=37.54, cloud=0.0, wind=18.56, temperature=15.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:37:42', seeing=1.28, atlas_timestamp='2025-11-17T19:37:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:35:00')
2025-11-17T21:38:10.823 [DEBUG] [Thread-61719] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:38:10.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:38:10.919 [DEBUG] [Thread-61723] [transport.py] [_log()] starting thread (client mode): 0xd0713be0
2025-11-17T21:38:10.919 [DEBUG] [Thread-61723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:38:10.935 [DEBUG] [Thread-61723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:38:10.935 [INFO] [Thread-61723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:38:10.943 [DEBUG] [Thread-61723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:38:10.943 [DEBUG] [Thread-61723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:38:10.943 [DEBUG] [Thread-61723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] client lang: <none>
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] server lang: <none>
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] kex follows: False
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] Compression: none
2025-11-17T21:38:10.944 [DEBUG] [Thread-61723] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:38:11.000 [DEBUG] [Thread-61723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:38:11.001 [DEBUG] [Thread-61723] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:38:11.001 [DEBUG] [Thread-61723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:38:11.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:38:11.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:38:11.057 [DEBUG] [Thread-61723] [transport.py] [_log()] userauth is OK
2025-11-17T21:38:11.057 [DEBUG] [Thread-61723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:38:11.057 [DEBUG] [Thread-61723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:38:11.057 [DEBUG] [Thread-61723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:38:11.057 [DEBUG] [Thread-61723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:38:11.076 [INFO] [Thread-61723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:38:11.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:38:11.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:38:12.005 [DEBUG] [Thread-61723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:38:12.005 [DEBUG] [Thread-61723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:38:12.053 [DEBUG] [Thread-61723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:38:12.053 [DEBUG] [Thread-61723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:38:12.062 [DEBUG] [Thread-61723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:38:12.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:38:12.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:38:12.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:38:12.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:38:12.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:38:12.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:38:12.097 [DEBUG] [Thread-61723] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:38:25.570 [DEBUG] [Thread-61725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:38:40.611 [DEBUG] [Thread-61726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:38:42.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:38:42.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:38:42.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
2025-11-17T21:38:42.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 38, 14), 14.45, 37.57, 0.0, 18.16, 15.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:38:42.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:38:14
2025-11-17T21:38:42.836 [DEBUG] [Thread-61727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:38:42.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:38:43.044 [DEBUG] [Thread-61728] [transport.py] [_log()] starting thread (client mode): 0xd7bc6140
2025-11-17T21:38:43.044 [DEBUG] [Thread-61728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:38:43.063 [DEBUG] [Thread-61728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:38:43.063 [INFO] [Thread-61728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] client lang: <none>
2025-11-17T21:38:43.066 [DEBUG] [Thread-61728] [transport.py] [_log()] server lang: <none>
2025-11-17T21:38:43.067 [DEBUG] [Thread-61728] [transport.py] [_log()] kex follows: False
2025-11-17T21:38:43.067 [DEBUG] [Thread-61728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:38:43.067 [DEBUG] [Thread-61728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:38:43.067 [DEBUG] [Thread-61728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:38:43.067 [DEBUG] [Thread-61728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:38:43.067 [DEBUG] [Thread-61728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:38:43.067 [DEBUG] [Thread-61728] [transport.py] [_log()] Compression: none
2025-11-17T21:38:43.067 [DEBUG] [Thread-61728] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:38:43.083 [DEBUG] [Thread-61728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:38:43.083 [DEBUG] [Thread-61728] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:38:43.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:38:43.084 [DEBUG] [Thread-61728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:38:43.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:38:43.125 [DEBUG] [Thread-61728] [transport.py] [_log()] userauth is OK
2025-11-17T21:38:43.125 [DEBUG] [Thread-61728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:38:43.125 [DEBUG] [Thread-61728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:38:43.125 [DEBUG] [Thread-61728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:38:43.125 [DEBUG] [Thread-61728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:38:43.150 [INFO] [Thread-61728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:38:43.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:38:43.905 [DEBUG] [Thread-61728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:38:43.905 [DEBUG] [Thread-61728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:38:43.905 [DEBUG] [Thread-61728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:38:43.946 [DEBUG] [Thread-61728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:38:43.947 [DEBUG] [Thread-61728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:38:43.950 [DEBUG] [Thread-61728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:38:43.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:38:43.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:38:43.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:38:43.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:38:43.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:38:43.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:38:43.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:38:43.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:38:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:38:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.818104 -999.00  +15.80  12.46     42   +3.00 1 1 1 1 1     0    0 10.27 -103.82 ZNESW 12.0 12.5 186.0 15.9 16.4 -24.0 16.4 -23.4 16.1 -22.6 16.4 -23.6
2025-11-17T21:38:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:38:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:38:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.818104
2025-11-17T21:38:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:38:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:38:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:38:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:38:43.966 [DEBUG] [Thread-61728] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:38:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:38:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:38:14', tmtdew=14.45, humidity=37.57, cloud=0.0, wind=18.16, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:38:14', seeing=1.28, atlas_timestamp='2025-11-17T19:38:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:35:00')
2025-11-17T21:38:44.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:38:44.060 [DEBUG] [Thread-61731] [transport.py] [_log()] starting thread (client mode): 0xd317c760
2025-11-17T21:38:44.060 [DEBUG] [Thread-61731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:38:44.075 [DEBUG] [Thread-61731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:38:44.075 [INFO] [Thread-61731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:38:44.083 [DEBUG] [Thread-61731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:38:44.083 [DEBUG] [Thread-61731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:38:44.083 [DEBUG] [Thread-61731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] client lang: <none>
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] server lang: <none>
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] kex follows: False
2025-11-17T21:38:44.084 [DEBUG] [Thread-61731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:38:44.085 [DEBUG] [Thread-61731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:38:44.085 [DEBUG] [Thread-61731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:38:44.085 [DEBUG] [Thread-61731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:38:44.085 [DEBUG] [Thread-61731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:38:44.085 [DEBUG] [Thread-61731] [transport.py] [_log()] Compression: none
2025-11-17T21:38:44.085 [DEBUG] [Thread-61731] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:38:44.141 [DEBUG] [Thread-61731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:38:44.141 [DEBUG] [Thread-61731] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:38:44.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:38:44.142 [DEBUG] [Thread-61731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:38:44.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:38:44.197 [DEBUG] [Thread-61731] [transport.py] [_log()] userauth is OK
2025-11-17T21:38:44.197 [DEBUG] [Thread-61731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:38:44.197 [DEBUG] [Thread-61731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:38:44.197 [DEBUG] [Thread-61731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:38:44.197 [DEBUG] [Thread-61731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:38:44.216 [INFO] [Thread-61731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:38:44.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:38:44.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:38:45.045 [DEBUG] [Thread-61731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:38:45.045 [DEBUG] [Thread-61731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:38:45.093 [DEBUG] [Thread-61731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:38:45.093 [DEBUG] [Thread-61731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:38:45.102 [DEBUG] [Thread-61731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:38:45.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:38:45.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:38:45.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:38:45.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:38:45.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:38:45.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:38:45.136 [DEBUG] [Thread-61731] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:38:51.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:38:51.812 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:38:55.640 [DEBUG] [Thread-61733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:39:10.680 [DEBUG] [Thread-61734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:39:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:39:15.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:39:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:39:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 38, 46), 14.44, 37.61, 0.0, 18.3, 15.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:39:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:38:46
2025-11-17T21:39:15.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:39:16.084 [DEBUG] [Thread-61735] [transport.py] [_log()] starting thread (client mode): 0xd317ce50
2025-11-17T21:39:16.084 [DEBUG] [Thread-61735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:39:16.105 [DEBUG] [Thread-61735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:39:16.105 [INFO] [Thread-61735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:39:16.108 [DEBUG] [Thread-61735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] client lang: <none>
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] server lang: <none>
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] kex follows: False
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] Compression: none
2025-11-17T21:39:16.109 [DEBUG] [Thread-61735] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:39:16.127 [DEBUG] [Thread-61735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:39:16.127 [DEBUG] [Thread-61735] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:39:16.128 [DEBUG] [Thread-61735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:39:16.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:39:16.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:39:16.129 [DEBUG] [Thread-61735] [transport.py] [_log()] userauth is OK
2025-11-17T21:39:16.130 [DEBUG] [Thread-61735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:39:16.130 [DEBUG] [Thread-61735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:39:16.130 [DEBUG] [Thread-61735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:39:16.130 [DEBUG] [Thread-61735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:39:16.151 [INFO] [Thread-61735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:39:16.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:39:16.773 [DEBUG] [Thread-61735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:39:16.773 [DEBUG] [Thread-61735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:39:16.774 [DEBUG] [Thread-61735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:39:16.814 [DEBUG] [Thread-61735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:39:16.814 [DEBUG] [Thread-61735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:39:16.817 [DEBUG] [Thread-61735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:39:16.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:39:16.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:39:16.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:39:16.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:39:16.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:39:16.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:39:16.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.818451 -999.00  +15.70   8.64     42   +3.00 1 1 1 1 1     0    0 10.53 -105.86 ZNESW 9.7 8.6 195.0 17.1 16.4 -24.0 16.3 -23.3 16.1 -22.8 16.3 -23.5
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.818451
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:39:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:38:46', tmtdew=14.44, humidity=37.61, cloud=0.0, wind=18.3, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:38:46', seeing=1.63, atlas_timestamp='2025-11-17T19:38:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:35:00')
2025-11-17T21:39:16.836 [DEBUG] [Thread-61735] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:39:16.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:39:16.919 [DEBUG] [Thread-61738] [transport.py] [_log()] starting thread (client mode): 0xd3137e80
2025-11-17T21:39:16.919 [DEBUG] [Thread-61738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:39:16.935 [DEBUG] [Thread-61738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:39:16.935 [INFO] [Thread-61738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:39:16.942 [DEBUG] [Thread-61738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:39:16.942 [DEBUG] [Thread-61738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:39:16.942 [DEBUG] [Thread-61738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:39:16.942 [DEBUG] [Thread-61738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] client lang: <none>
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] server lang: <none>
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] kex follows: False
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] Compression: none
2025-11-17T21:39:16.943 [DEBUG] [Thread-61738] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:39:17.000 [DEBUG] [Thread-61738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:39:17.001 [DEBUG] [Thread-61738] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:39:17.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:39:17.002 [DEBUG] [Thread-61738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:39:17.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:39:17.057 [DEBUG] [Thread-61738] [transport.py] [_log()] userauth is OK
2025-11-17T21:39:17.057 [DEBUG] [Thread-61738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:39:17.057 [DEBUG] [Thread-61738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:39:17.057 [DEBUG] [Thread-61738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:39:17.057 [DEBUG] [Thread-61738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:39:17.076 [INFO] [Thread-61738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:39:17.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:39:17.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:39:17.923 [DEBUG] [Thread-61738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:39:17.923 [DEBUG] [Thread-61738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:39:17.971 [DEBUG] [Thread-61738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:39:17.971 [DEBUG] [Thread-61738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:39:17.980 [DEBUG] [Thread-61738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:39:17.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:39:17.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:39:17.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:39:18.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:39:18.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:39:18.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:39:18.015 [DEBUG] [Thread-61738] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:39:25.711 [DEBUG] [Thread-61740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:39:40.756 [DEBUG] [Thread-61741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:39:42.910 [DEBUG] [Thread-61742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:39:48.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:39:48.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:39:48.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:39:48.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 39, 18), 14.4, 37.72, 0.0, 18.62, 15.71, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:39:48.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:39:18
2025-11-17T21:39:48.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:39:48.957 [DEBUG] [Thread-61743] [transport.py] [_log()] starting thread (client mode): 0xd31ce710
2025-11-17T21:39:48.958 [DEBUG] [Thread-61743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:39:48.977 [DEBUG] [Thread-61743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:39:48.978 [INFO] [Thread-61743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] client lang: <none>
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] server lang: <none>
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] kex follows: False
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] Compression: none
2025-11-17T21:39:48.981 [DEBUG] [Thread-61743] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:39:48.998 [DEBUG] [Thread-61743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:39:48.999 [DEBUG] [Thread-61743] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:39:48.999 [DEBUG] [Thread-61743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:39:48.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:39:49.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:39:49.001 [DEBUG] [Thread-61743] [transport.py] [_log()] userauth is OK
2025-11-17T21:39:49.001 [DEBUG] [Thread-61743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:39:49.001 [DEBUG] [Thread-61743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:39:49.001 [DEBUG] [Thread-61743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:39:49.001 [DEBUG] [Thread-61743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:39:49.034 [INFO] [Thread-61743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:39:49.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:39:49.826 [DEBUG] [Thread-61743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:39:49.826 [DEBUG] [Thread-61743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:39:49.827 [DEBUG] [Thread-61743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:39:49.867 [DEBUG] [Thread-61743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:39:49.867 [DEBUG] [Thread-61743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:39:49.869 [DEBUG] [Thread-61743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:39:49.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:39:49.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:39:49.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:39:49.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:39:49.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:39:49.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:39:49.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:39:49.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:39:49.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:39:49.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.818798 -999.00  +15.70  16.19     42   +3.00 1 1 1 1 1     0    0 10.39 -107.97 ZNESW 14.1 16.2 181.6 19.1 16.4 -24.0 16.3 -23.4 16.1 -22.7 16.4 -23.6
2025-11-17T21:39:49.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:39:49.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:39:49.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.818798
2025-11-17T21:39:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:39:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:39:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:39:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:39:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:39:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:39:18', tmtdew=14.4, humidity=37.72, cloud=0.0, wind=18.62, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:39:18', seeing=1.74, atlas_timestamp='2025-11-17T19:39:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:35:00')
2025-11-17T21:39:49.896 [DEBUG] [Thread-61743] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:39:49.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:39:49.991 [DEBUG] [Thread-61746] [transport.py] [_log()] starting thread (client mode): 0xd7bc64a0
2025-11-17T21:39:49.991 [DEBUG] [Thread-61746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:39:50.005 [DEBUG] [Thread-61746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:39:50.005 [INFO] [Thread-61746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:39:50.013 [DEBUG] [Thread-61746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:39:50.013 [DEBUG] [Thread-61746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:39:50.013 [DEBUG] [Thread-61746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:39:50.013 [DEBUG] [Thread-61746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:39:50.013 [DEBUG] [Thread-61746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:39:50.013 [DEBUG] [Thread-61746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] client lang: <none>
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] server lang: <none>
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] kex follows: False
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] Compression: none
2025-11-17T21:39:50.014 [DEBUG] [Thread-61746] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:39:50.076 [DEBUG] [Thread-61746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:39:50.076 [DEBUG] [Thread-61746] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:39:50.077 [DEBUG] [Thread-61746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:39:50.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:39:50.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:39:50.137 [DEBUG] [Thread-61746] [transport.py] [_log()] userauth is OK
2025-11-17T21:39:50.137 [DEBUG] [Thread-61746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:39:50.137 [DEBUG] [Thread-61746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:39:50.137 [DEBUG] [Thread-61746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:39:50.137 [DEBUG] [Thread-61746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:39:50.156 [INFO] [Thread-61746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:39:50.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:39:50.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:39:50.995 [DEBUG] [Thread-61746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:39:50.995 [DEBUG] [Thread-61746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:39:51.043 [DEBUG] [Thread-61746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:39:51.043 [DEBUG] [Thread-61746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:39:51.053 [DEBUG] [Thread-61746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:39:51.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:39:51.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:39:51.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:39:51.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:39:51.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:39:51.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:39:51.084 [DEBUG] [Thread-61746] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:39:52.077 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:39:52.078 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:39:55.784 [DEBUG] [Thread-61748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:40:10.824 [DEBUG] [Thread-61749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:40:21.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:40:21.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:40:21.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:40:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 39, 50), 14.39, 37.72, 0.0, 17.04, 15.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:40:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:39:50
2025-11-17T21:40:21.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:40:22.035 [DEBUG] [Thread-61750] [transport.py] [_log()] starting thread (client mode): 0xd07123e0
2025-11-17T21:40:22.035 [DEBUG] [Thread-61750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:40:22.056 [DEBUG] [Thread-61750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:40:22.057 [INFO] [Thread-61750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:40:22.060 [DEBUG] [Thread-61750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] client lang: <none>
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] server lang: <none>
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] kex follows: False
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] Compression: none
2025-11-17T21:40:22.061 [DEBUG] [Thread-61750] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:40:22.079 [DEBUG] [Thread-61750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:40:22.080 [DEBUG] [Thread-61750] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:40:22.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:40:22.081 [DEBUG] [Thread-61750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:40:22.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:40:22.082 [DEBUG] [Thread-61750] [transport.py] [_log()] userauth is OK
2025-11-17T21:40:22.083 [DEBUG] [Thread-61750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:40:22.083 [DEBUG] [Thread-61750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:40:22.083 [DEBUG] [Thread-61750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:40:22.083 [DEBUG] [Thread-61750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:40:22.116 [INFO] [Thread-61750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:40:22.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:40:22.705 [DEBUG] [Thread-61750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:40:22.705 [DEBUG] [Thread-61750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:40:22.705 [DEBUG] [Thread-61750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:40:22.746 [DEBUG] [Thread-61750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:40:22.746 [DEBUG] [Thread-61750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:40:22.748 [DEBUG] [Thread-61750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:40:22.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:40:22.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:40:22.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:40:22.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:40:22.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:40:22.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:40:22.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:40:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:40:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:40:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.819145 -999.00  +15.70  14.23     42   +3.00 1 1 1 1 1     0    0 10.35 -108.55 ZNESW 12.3 14.2 178.4 19.1 16.4 -24.0 16.3 -23.4 16.1 -22.7 16.3 -23.6
2025-11-17T21:40:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:40:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:40:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.819145
2025-11-17T21:40:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:40:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:40:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:40:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:40:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:40:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:39:50', tmtdew=14.39, humidity=37.72, cloud=0.0, wind=17.04, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:39:50', seeing=1.29, atlas_timestamp='2025-11-17T19:39:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:38:00')
2025-11-17T21:40:22.767 [DEBUG] [Thread-61750] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:40:22.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:40:22.856 [DEBUG] [Thread-61753] [transport.py] [_log()] starting thread (client mode): 0xd07015a0
2025-11-17T21:40:22.856 [DEBUG] [Thread-61753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:40:22.873 [DEBUG] [Thread-61753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:40:22.873 [INFO] [Thread-61753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:40:22.885 [DEBUG] [Thread-61753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] client lang: <none>
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] server lang: <none>
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] kex follows: False
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] Compression: none
2025-11-17T21:40:22.886 [DEBUG] [Thread-61753] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:40:22.939 [DEBUG] [Thread-61753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:40:22.939 [DEBUG] [Thread-61753] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:40:22.939 [DEBUG] [Thread-61753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:40:22.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:40:22.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:40:23.001 [DEBUG] [Thread-61753] [transport.py] [_log()] userauth is OK
2025-11-17T21:40:23.001 [DEBUG] [Thread-61753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:40:23.001 [DEBUG] [Thread-61753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:40:23.001 [DEBUG] [Thread-61753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:40:23.001 [DEBUG] [Thread-61753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:40:23.015 [INFO] [Thread-61753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:40:23.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:40:23.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:40:23.850 [DEBUG] [Thread-61753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:40:23.850 [DEBUG] [Thread-61753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:40:23.898 [DEBUG] [Thread-61753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:40:23.898 [DEBUG] [Thread-61753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:40:23.906 [DEBUG] [Thread-61753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:40:23.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:40:23.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:40:23.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:40:23.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:40:23.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:40:23.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:40:23.938 [DEBUG] [Thread-61753] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:40:25.849 [DEBUG] [Thread-61755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:40:40.890 [DEBUG] [Thread-61756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:40:42.986 [DEBUG] [Thread-61757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:40:52.279 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:40:52.280 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:40:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:40:53.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:40:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:40:54.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 40, 22), 14.39, 37.72, 0.0, 16.36, 15.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:40:54.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:40:22
2025-11-17T21:40:54.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:40:54.958 [DEBUG] [Thread-61758] [transport.py] [_log()] starting thread (client mode): 0xd317c670
2025-11-17T21:40:54.958 [DEBUG] [Thread-61758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:40:54.979 [DEBUG] [Thread-61758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:40:54.979 [INFO] [Thread-61758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:40:54.982 [DEBUG] [Thread-61758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:40:54.982 [DEBUG] [Thread-61758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:40:54.982 [DEBUG] [Thread-61758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:40:54.982 [DEBUG] [Thread-61758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:40:54.982 [DEBUG] [Thread-61758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] client lang: <none>
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] server lang: <none>
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] kex follows: False
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] Compression: none
2025-11-17T21:40:54.983 [DEBUG] [Thread-61758] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:40:55.001 [DEBUG] [Thread-61758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:40:55.001 [DEBUG] [Thread-61758] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:40:55.001 [DEBUG] [Thread-61758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:40:55.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:40:55.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:40:55.002 [DEBUG] [Thread-61758] [transport.py] [_log()] userauth is OK
2025-11-17T21:40:55.002 [DEBUG] [Thread-61758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:40:55.002 [DEBUG] [Thread-61758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:40:55.002 [DEBUG] [Thread-61758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:40:55.002 [DEBUG] [Thread-61758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:40:55.029 [INFO] [Thread-61758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:40:55.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:40:55.873 [DEBUG] [Thread-61758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:40:55.873 [DEBUG] [Thread-61758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:40:55.873 [DEBUG] [Thread-61758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:40:55.914 [DEBUG] [Thread-61758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:40:55.914 [DEBUG] [Thread-61758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:40:55.917 [DEBUG] [Thread-61758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:40:55.919 [DEBUG] [Thread-61760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:40:55.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:40:55.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:40:55.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:40:55.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:40:55.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:40:55.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:40:55.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:40:55.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.819840 -999.00  +15.70  13.76     42   +3.00 1 1 1 1 1     0    0 9.55 -120.65 ZNESW 14.0 13.8 182.8 16.1 16.4 -24.0 16.2 -23.4 16.1 -22.6 16.3 -23.5
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.819840
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:40:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:40:22', tmtdew=14.39, humidity=37.72, cloud=0.0, wind=16.36, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:40:22', seeing=1.44, atlas_timestamp='2025-11-17T19:40:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:38:00')
2025-11-17T21:40:55.934 [DEBUG] [Thread-61758] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:40:56.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:40:56.020 [DEBUG] [Thread-61762] [transport.py] [_log()] starting thread (client mode): 0xd0711c60
2025-11-17T21:40:56.020 [DEBUG] [Thread-61762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:40:56.036 [DEBUG] [Thread-61762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:40:56.036 [INFO] [Thread-61762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:40:56.043 [DEBUG] [Thread-61762] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:40:56.043 [DEBUG] [Thread-61762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:40:56.043 [DEBUG] [Thread-61762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:40:56.043 [DEBUG] [Thread-61762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:40:56.043 [DEBUG] [Thread-61762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:40:56.043 [DEBUG] [Thread-61762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:40:56.043 [DEBUG] [Thread-61762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:40:56.043 [DEBUG] [Thread-61762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] client lang: <none>
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] server lang: <none>
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] kex follows: False
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] Compression: none
2025-11-17T21:40:56.044 [DEBUG] [Thread-61762] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:40:56.099 [DEBUG] [Thread-61762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:40:56.099 [DEBUG] [Thread-61762] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:40:56.099 [DEBUG] [Thread-61762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:40:56.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:40:56.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:40:56.156 [DEBUG] [Thread-61762] [transport.py] [_log()] userauth is OK
2025-11-17T21:40:56.156 [DEBUG] [Thread-61762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:40:56.156 [DEBUG] [Thread-61762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:40:56.156 [DEBUG] [Thread-61762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:40:56.156 [DEBUG] [Thread-61762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:40:56.170 [INFO] [Thread-61762] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:40:56.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:40:56.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:40:57.023 [DEBUG] [Thread-61762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:40:57.023 [DEBUG] [Thread-61762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:40:57.071 [DEBUG] [Thread-61762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:40:57.071 [DEBUG] [Thread-61762] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:40:57.079 [DEBUG] [Thread-61762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:40:57.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:40:57.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:40:57.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:40:57.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:40:57.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:40:57.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:40:57.110 [DEBUG] [Thread-61762] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:41:10.946 [DEBUG] [Thread-61764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:41:25.985 [DEBUG] [Thread-61765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:41:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:41:27.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:41:27.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:41:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 40, 54), 14.29, 37.74, 0.0, 18.79, 15.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:41:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:40:54
2025-11-17T21:41:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:41:28.102 [DEBUG] [Thread-61766] [transport.py] [_log()] starting thread (client mode): 0xd31369e0
2025-11-17T21:41:28.102 [DEBUG] [Thread-61766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:41:28.122 [DEBUG] [Thread-61766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:41:28.122 [INFO] [Thread-61766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] client lang: <none>
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] server lang: <none>
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] kex follows: False
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:41:28.125 [DEBUG] [Thread-61766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:41:28.126 [DEBUG] [Thread-61766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:41:28.126 [DEBUG] [Thread-61766] [transport.py] [_log()] Compression: none
2025-11-17T21:41:28.126 [DEBUG] [Thread-61766] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:41:28.143 [DEBUG] [Thread-61766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:41:28.143 [DEBUG] [Thread-61766] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:41:28.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:41:28.144 [DEBUG] [Thread-61766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:41:28.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:41:28.144 [DEBUG] [Thread-61766] [transport.py] [_log()] userauth is OK
2025-11-17T21:41:28.144 [DEBUG] [Thread-61766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:41:28.144 [DEBUG] [Thread-61766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:41:28.144 [DEBUG] [Thread-61766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:41:28.144 [DEBUG] [Thread-61766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:41:28.172 [INFO] [Thread-61766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:41:28.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:41:28.843 [DEBUG] [Thread-61766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:41:28.843 [DEBUG] [Thread-61766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:41:28.844 [DEBUG] [Thread-61766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:41:28.884 [DEBUG] [Thread-61766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:41:28.885 [DEBUG] [Thread-61766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:41:28.887 [DEBUG] [Thread-61766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:41:28.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:41:28.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:41:28.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:41:28.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:41:28.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:41:28.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:41:28.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:41:28.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:41:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:41:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.820187 -999.00  +15.70  11.03     42   +3.00 1 1 1 1 1     0    0 9.62 -131.97 ZNESW 10.9 11.0 182.0 17.9 16.4 -24.0 16.2 -23.2 16.0 -22.6 16.3 -23.6
2025-11-17T21:41:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:41:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:41:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.820187
2025-11-17T21:41:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:41:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:41:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:41:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:41:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:41:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:40:54', tmtdew=14.29, humidity=37.74, cloud=0.0, wind=18.79, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:41:26', seeing=1.76, atlas_timestamp='2025-11-17T19:41:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:38:00')
2025-11-17T21:41:28.913 [DEBUG] [Thread-61766] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:41:29.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:41:29.012 [DEBUG] [Thread-61769] [transport.py] [_log()] starting thread (client mode): 0xd07120e0
2025-11-17T21:41:29.013 [DEBUG] [Thread-61769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:41:29.029 [DEBUG] [Thread-61769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:41:29.029 [INFO] [Thread-61769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] client lang: <none>
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] server lang: <none>
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] kex follows: False
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:41:29.037 [DEBUG] [Thread-61769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:41:29.038 [DEBUG] [Thread-61769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:41:29.038 [DEBUG] [Thread-61769] [transport.py] [_log()] Compression: none
2025-11-17T21:41:29.038 [DEBUG] [Thread-61769] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:41:29.096 [DEBUG] [Thread-61769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:41:29.097 [DEBUG] [Thread-61769] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:41:29.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:41:29.098 [DEBUG] [Thread-61769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:41:29.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:41:29.152 [DEBUG] [Thread-61769] [transport.py] [_log()] userauth is OK
2025-11-17T21:41:29.153 [DEBUG] [Thread-61769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:41:29.153 [DEBUG] [Thread-61769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:41:29.153 [DEBUG] [Thread-61769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:41:29.153 [DEBUG] [Thread-61769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:41:29.172 [INFO] [Thread-61769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:41:29.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:41:29.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:41:30.012 [DEBUG] [Thread-61769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:41:30.013 [DEBUG] [Thread-61769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:41:30.060 [DEBUG] [Thread-61769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:41:30.060 [DEBUG] [Thread-61769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:41:30.069 [DEBUG] [Thread-61769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:41:30.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:41:30.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:41:30.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:41:30.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:41:30.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:41:30.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:41:30.104 [DEBUG] [Thread-61769] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:41:41.013 [DEBUG] [Thread-61771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:41:43.065 [DEBUG] [Thread-61772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:41:52.485 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:41:52.486 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:41:56.063 [DEBUG] [Thread-61773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:42:00.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:42:00.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:42:00.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:42:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 41, 26), 14.26, 37.81, 0.0, 18.19, 15.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:42:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:41:26
2025-11-17T21:42:00.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:42:01.083 [DEBUG] [Thread-61774] [transport.py] [_log()] starting thread (client mode): 0xd31cea40
2025-11-17T21:42:01.083 [DEBUG] [Thread-61774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:42:01.105 [DEBUG] [Thread-61774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:42:01.105 [INFO] [Thread-61774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] client lang: <none>
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] server lang: <none>
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] kex follows: False
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] Compression: none
2025-11-17T21:42:01.107 [DEBUG] [Thread-61774] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:42:01.118 [DEBUG] [Thread-61774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:42:01.118 [DEBUG] [Thread-61774] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:42:01.118 [DEBUG] [Thread-61774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:42:01.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:42:01.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:42:01.120 [DEBUG] [Thread-61774] [transport.py] [_log()] userauth is OK
2025-11-17T21:42:01.120 [DEBUG] [Thread-61774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:42:01.120 [DEBUG] [Thread-61774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:42:01.121 [DEBUG] [Thread-61774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:42:01.121 [DEBUG] [Thread-61774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:42:01.137 [INFO] [Thread-61774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:42:01.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:42:01.753 [DEBUG] [Thread-61774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:42:01.753 [DEBUG] [Thread-61774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:42:01.753 [DEBUG] [Thread-61774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:42:01.794 [DEBUG] [Thread-61774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:42:01.794 [DEBUG] [Thread-61774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:42:01.797 [DEBUG] [Thread-61774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:42:01.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:42:01.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:42:01.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:42:01.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:42:01.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:42:01.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:42:01.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:42:01.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:42:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:42:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.820534 -999.00  +15.70  13.39     42   +3.00 1 1 1 1 1     0    0 9.39 -131.71 ZNESW 16.8 13.4 186.2 16.9 16.4 -24.0 16.2 -23.4 15.9 -22.6 16.3 -23.5
2025-11-17T21:42:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:42:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:42:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.820534
2025-11-17T21:42:01.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:42:01.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:42:01.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:42:01.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:42:01.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:42:01.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:41:26', tmtdew=14.26, humidity=37.81, cloud=0.0, wind=18.19, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:41:58', seeing=1.49, atlas_timestamp='2025-11-17T19:41:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:38:00')
2025-11-17T21:42:01.824 [DEBUG] [Thread-61774] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:42:01.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:42:01.920 [DEBUG] [Thread-61777] [transport.py] [_log()] starting thread (client mode): 0xd7bc5f60
2025-11-17T21:42:01.920 [DEBUG] [Thread-61777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:42:01.935 [DEBUG] [Thread-61777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:42:01.935 [INFO] [Thread-61777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:42:01.942 [DEBUG] [Thread-61777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:42:01.942 [DEBUG] [Thread-61777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:42:01.943 [DEBUG] [Thread-61777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:42:01.943 [DEBUG] [Thread-61777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:42:01.943 [DEBUG] [Thread-61777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:42:01.943 [DEBUG] [Thread-61777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:42:01.943 [DEBUG] [Thread-61777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:42:01.943 [DEBUG] [Thread-61777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:42:01.943 [DEBUG] [Thread-61777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:42:01.943 [DEBUG] [Thread-61777] [transport.py] [_log()] client lang: <none>
2025-11-17T21:42:01.944 [DEBUG] [Thread-61777] [transport.py] [_log()] server lang: <none>
2025-11-17T21:42:01.944 [DEBUG] [Thread-61777] [transport.py] [_log()] kex follows: False
2025-11-17T21:42:01.944 [DEBUG] [Thread-61777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:42:01.944 [DEBUG] [Thread-61777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:42:01.944 [DEBUG] [Thread-61777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:42:01.944 [DEBUG] [Thread-61777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:42:01.944 [DEBUG] [Thread-61777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:42:01.944 [DEBUG] [Thread-61777] [transport.py] [_log()] Compression: none
2025-11-17T21:42:01.945 [DEBUG] [Thread-61777] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:42:01.999 [DEBUG] [Thread-61777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:42:02.000 [DEBUG] [Thread-61777] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:42:02.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:42:02.000 [DEBUG] [Thread-61777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:42:02.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:42:02.056 [DEBUG] [Thread-61777] [transport.py] [_log()] userauth is OK
2025-11-17T21:42:02.056 [DEBUG] [Thread-61777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:42:02.056 [DEBUG] [Thread-61777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:42:02.056 [DEBUG] [Thread-61777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:42:02.056 [DEBUG] [Thread-61777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:42:02.070 [INFO] [Thread-61777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:42:02.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:42:02.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:42:02.925 [DEBUG] [Thread-61777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:42:02.925 [DEBUG] [Thread-61777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:42:02.972 [DEBUG] [Thread-61777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:42:02.973 [DEBUG] [Thread-61777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:42:02.982 [DEBUG] [Thread-61777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:42:02.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:42: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')
2025-11-17T21:42: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
2025-11-17T21:42:03.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:42:03.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:42:03.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:42:03.016 [DEBUG] [Thread-61777] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:42:11.094 [DEBUG] [Thread-61779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:42:21.346 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:42:26.127 [DEBUG] [Thread-61780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:42:33.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:42:33.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:42:33.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:42:33.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 42, 30), 14.32, 37.79, 0.0, 18.39, 15.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:42:33.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:42:30
2025-11-17T21:42:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:42:33.974 [DEBUG] [Thread-61781] [transport.py] [_log()] starting thread (client mode): 0xd7bc7c70
2025-11-17T21:42:33.974 [DEBUG] [Thread-61781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:42:33.994 [DEBUG] [Thread-61781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:42:33.994 [INFO] [Thread-61781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:42:33.997 [DEBUG] [Thread-61781] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:42:33.997 [DEBUG] [Thread-61781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:42:33.997 [DEBUG] [Thread-61781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:42:33.997 [DEBUG] [Thread-61781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:42:33.997 [DEBUG] [Thread-61781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:42:33.997 [DEBUG] [Thread-61781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:42:33.997 [DEBUG] [Thread-61781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] client lang: <none>
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] server lang: <none>
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] kex follows: False
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] Compression: none
2025-11-17T21:42:33.998 [DEBUG] [Thread-61781] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:42:34.018 [DEBUG] [Thread-61781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:42:34.019 [DEBUG] [Thread-61781] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:42:34.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:42:34.020 [DEBUG] [Thread-61781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:42:34.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:42:34.023 [DEBUG] [Thread-61781] [transport.py] [_log()] userauth is OK
2025-11-17T21:42:34.023 [DEBUG] [Thread-61781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:42:34.023 [DEBUG] [Thread-61781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:42:34.023 [DEBUG] [Thread-61781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:42:34.024 [DEBUG] [Thread-61781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:42:34.058 [INFO] [Thread-61781] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:42:34.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:42:34.717 [DEBUG] [Thread-61781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:42:34.718 [DEBUG] [Thread-61781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:42:34.718 [DEBUG] [Thread-61781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:42:34.758 [DEBUG] [Thread-61781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:42:34.759 [DEBUG] [Thread-61781] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:42:34.762 [DEBUG] [Thread-61781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:42:34.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:42:34.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:42:34.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:42:34.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:42:34.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:42:34.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:42:34.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:42:34.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:42:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:42:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.820881 -999.00  +15.70  13.05     42   +3.10 1 1 1 1 1     0    0 9.86 -123.15 ZNESW 10.2 13.1 180.4 22.8 16.3 -24.0 16.1 -23.3 15.9 -22.5 16.3 -23.4
2025-11-17T21:42:34.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:42:34.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:42:34.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.820881
2025-11-17T21:42:34.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:42:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:42:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:42:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:42:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:42:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:42:30', tmtdew=14.32, humidity=37.79, cloud=0.0, wind=18.39, temperature=15.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:42:30', seeing=1.44, atlas_timestamp='2025-11-17T19:42:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.059749999999999304, 0.09224999999999994, 0.1122500000000013, 0.11350000000000016, 0.08050000000000068, 0.0892500000000016, 0.10299999999999976, 0.025249999999999773, 0.10749999999999993, 0.09699999999999953, 0.18425000000000047, 0.16999999999999993, 0.1490000000000009, 0.055749999999999744, 0.08099999999999952, 0.016000000000000014, 0.08974999999999866, 0.13699999999999868, 0.37799999999999834, 0.2652499999999982, 0.17299999999999827, 0.08974999999999866, 0.0182500000000001, 0.08774999999999977, 0.1039999999999992, 0.19449999999999967, 0.4562500000000007, 0.5785, 0.30049999999999955, -0.006999999999999673, 0.0730000000000004, 0.04600000000000115, 0.11724999999999852], zp_timestamp='2025-11-17T19:38:00')
2025-11-17T21:42:34.786 [DEBUG] [Thread-61781] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:42:34.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:42:34.894 [DEBUG] [Thread-61784] [transport.py] [_log()] starting thread (client mode): 0xd0702aa0
2025-11-17T21:42:34.894 [DEBUG] [Thread-61784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:42:34.910 [DEBUG] [Thread-61784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:42:34.911 [INFO] [Thread-61784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] client lang: <none>
2025-11-17T21:42:34.918 [DEBUG] [Thread-61784] [transport.py] [_log()] server lang: <none>
2025-11-17T21:42:34.919 [DEBUG] [Thread-61784] [transport.py] [_log()] kex follows: False
2025-11-17T21:42:34.919 [DEBUG] [Thread-61784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:42:34.919 [DEBUG] [Thread-61784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:42:34.919 [DEBUG] [Thread-61784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:42:34.919 [DEBUG] [Thread-61784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:42:34.919 [DEBUG] [Thread-61784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:42:34.919 [DEBUG] [Thread-61784] [transport.py] [_log()] Compression: none
2025-11-17T21:42:34.919 [DEBUG] [Thread-61784] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:42:34.976 [DEBUG] [Thread-61784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:42:34.977 [DEBUG] [Thread-61784] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:42:34.977 [DEBUG] [Thread-61784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:42:34.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:42:34.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:42:35.032 [DEBUG] [Thread-61784] [transport.py] [_log()] userauth is OK
2025-11-17T21:42:35.033 [DEBUG] [Thread-61784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:42:35.033 [DEBUG] [Thread-61784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:42:35.033 [DEBUG] [Thread-61784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:42:35.033 [DEBUG] [Thread-61784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:42:35.051 [INFO] [Thread-61784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:42:35.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:42:35.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:42:35.892 [DEBUG] [Thread-61784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:42:35.892 [DEBUG] [Thread-61784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:42:35.940 [DEBUG] [Thread-61784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:42:35.940 [DEBUG] [Thread-61784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:42:35.949 [DEBUG] [Thread-61784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:42:35.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:42:35.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:42:35.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:42:35.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:42:35.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:42:35.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:42:35.983 [DEBUG] [Thread-61784] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:42:41.156 [DEBUG] [Thread-61786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:42:43.122 [DEBUG] [Thread-61787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:42:52.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:42:52.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:42:56.205 [DEBUG] [Thread-61788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:43:06.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:43:06.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:43:06.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:43:06.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 43, 2), 14.3, 37.82, 0.0, 19.82, 15.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:43:06.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:43:02
2025-11-17T21:43:06.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:43:06.936 [DEBUG] [Thread-61789] [transport.py] [_log()] starting thread (client mode): 0xd3152740
2025-11-17T21:43:06.937 [DEBUG] [Thread-61789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:43:06.956 [DEBUG] [Thread-61789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:43:06.957 [INFO] [Thread-61789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:43:06.960 [DEBUG] [Thread-61789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:43:06.960 [DEBUG] [Thread-61789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:43:06.960 [DEBUG] [Thread-61789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:43:06.960 [DEBUG] [Thread-61789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] client lang: <none>
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] server lang: <none>
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] kex follows: False
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] Compression: none
2025-11-17T21:43:06.961 [DEBUG] [Thread-61789] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:43:06.978 [DEBUG] [Thread-61789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:43:06.979 [DEBUG] [Thread-61789] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:43:06.979 [DEBUG] [Thread-61789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:43:06.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:43:06.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:43:06.981 [DEBUG] [Thread-61789] [transport.py] [_log()] userauth is OK
2025-11-17T21:43:06.981 [DEBUG] [Thread-61789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:43:06.981 [DEBUG] [Thread-61789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:43:06.981 [DEBUG] [Thread-61789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:43:06.981 [DEBUG] [Thread-61789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:43:07.003 [INFO] [Thread-61789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:43:07.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:43:07.607 [DEBUG] [Thread-61789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:43:07.607 [DEBUG] [Thread-61789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:43:07.607 [DEBUG] [Thread-61789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:43:07.647 [DEBUG] [Thread-61789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:43:07.648 [DEBUG] [Thread-61789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:43:07.650 [DEBUG] [Thread-61789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:43:07.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:43:07.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:43:07.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:43:07.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:43:07.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:43:07.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:43:07.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:43:07.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:43:07.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:43:07.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.821228 -999.00  +15.60  10.38     42   +3.00 1 1 1 1 1     0    0 9.43 -134.95 ZNESW 16.1 10.4 186.2 16.7 16.3 -24.1 16.1 -23.3 15.9 -22.7 16.2 -23.5
2025-11-17T21:43:07.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:43:07.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:43:07.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.821228
2025-11-17T21:43:07.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:43:07.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:43:07.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:43:07.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:43:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:43:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:43:02', tmtdew=14.3, humidity=37.82, cloud=0.0, wind=19.82, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:43:02', seeing=1.76, atlas_timestamp='2025-11-17T19:42:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.08375000000000021, 0.11824999999999974, 0.1067499999999999, 0.07949999999999946, 0.13150000000000084, 0.18125000000000213, 0.10699999999999932, 0.08975000000000044, 0.07949999999999946, 0.12900000000000134, 0.13625000000000043, 0.15949999999999953, 0.16000000000000014, 0.1302500000000002, 0.058999999999999275, 0.042500000000000426, 0.11924999999999919, 0.24549999999999983, 0.3119999999999994, 0.22724999999999973, 0.19200000000000017, 0.11624999999999908, 0.06625000000000014, 0.059749999999999304, 0.09849999999999959, 0.3365000000000009, 0.5412499999999998, 0.46950000000000003, 0.39300000000000157, 0.10500000000000043, 0.12500000000000178, 0.0940000000000012, 0.12124999999999986], zp_timestamp='2025-11-17T19:41:00')
2025-11-17T21:43:07.676 [DEBUG] [Thread-61789] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:43:07.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:43:07.775 [DEBUG] [Thread-61792] [transport.py] [_log()] starting thread (client mode): 0xd3151090
2025-11-17T21:43:07.775 [DEBUG] [Thread-61792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:43:07.790 [DEBUG] [Thread-61792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:43:07.790 [INFO] [Thread-61792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] client lang: <none>
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] server lang: <none>
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] kex follows: False
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:43:07.798 [DEBUG] [Thread-61792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:43:07.799 [DEBUG] [Thread-61792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:43:07.799 [DEBUG] [Thread-61792] [transport.py] [_log()] Compression: none
2025-11-17T21:43:07.799 [DEBUG] [Thread-61792] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:43:07.856 [DEBUG] [Thread-61792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:43:07.856 [DEBUG] [Thread-61792] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:43:07.857 [DEBUG] [Thread-61792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:43:07.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:43:07.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:43:07.912 [DEBUG] [Thread-61792] [transport.py] [_log()] userauth is OK
2025-11-17T21:43:07.913 [DEBUG] [Thread-61792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:43:07.913 [DEBUG] [Thread-61792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:43:07.913 [DEBUG] [Thread-61792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:43:07.913 [DEBUG] [Thread-61792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:43:07.931 [INFO] [Thread-61792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:43:07.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:43:07.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:43:08.824 [DEBUG] [Thread-61792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:43:08.824 [DEBUG] [Thread-61792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:43:08.872 [DEBUG] [Thread-61792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:43:08.872 [DEBUG] [Thread-61792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:43:08.881 [DEBUG] [Thread-61792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:43:08.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:43:08.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:43:08.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:43:08.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:43:08.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:43:08.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:43:08.916 [DEBUG] [Thread-61792] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:43:11.234 [DEBUG] [Thread-61794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:43:26.284 [DEBUG] [Thread-61795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:43:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:43:38.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:43:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:43:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 43, 34), 14.18, 38.37, 0.0, 20.56, 15.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:43:39.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:43:34
2025-11-17T21:43:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:43:39.866 [DEBUG] [Thread-61796] [transport.py] [_log()] starting thread (client mode): 0xd0710610
2025-11-17T21:43:39.867 [DEBUG] [Thread-61796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:43:39.886 [DEBUG] [Thread-61796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:43:39.886 [INFO] [Thread-61796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:43:39.889 [DEBUG] [Thread-61796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:43:39.889 [DEBUG] [Thread-61796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] client lang: <none>
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] server lang: <none>
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] kex follows: False
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] Compression: none
2025-11-17T21:43:39.890 [DEBUG] [Thread-61796] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:43:39.906 [DEBUG] [Thread-61796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:43:39.907 [DEBUG] [Thread-61796] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:43:39.907 [DEBUG] [Thread-61796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:43:39.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:43:39.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:43:39.909 [DEBUG] [Thread-61796] [transport.py] [_log()] userauth is OK
2025-11-17T21:43:39.910 [DEBUG] [Thread-61796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:43:39.910 [DEBUG] [Thread-61796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:43:39.910 [DEBUG] [Thread-61796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:43:39.910 [DEBUG] [Thread-61796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:43:39.933 [INFO] [Thread-61796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:43:39.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:43:40.536 [DEBUG] [Thread-61796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:43:40.537 [DEBUG] [Thread-61796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:43:40.537 [DEBUG] [Thread-61796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:43:40.577 [DEBUG] [Thread-61796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:43:40.578 [DEBUG] [Thread-61796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:43:40.580 [DEBUG] [Thread-61796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:43:40.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:43:40.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:43:40.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:43:40.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:43:40.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:43:40.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:43:40.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:43:40.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:43:40.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:43:40.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.821576 -999.00  +15.60   9.89     42   +3.00 1 1 1 1 1     0    0 9.84 -125.48 ZNESW 13.4 9.9 189.4 15.7 16.2 -24.0 16.1 -23.3 15.9 -22.6 16.2 -23.6
2025-11-17T21:43:40.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:43:40.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:43:40.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.821576
2025-11-17T21:43:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:43:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:43:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:43:40.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:43:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:43:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:43:34', tmtdew=14.18, humidity=38.37, cloud=0.0, wind=20.56, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:43:34', seeing=1.59, atlas_timestamp='2025-11-17T19:43:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[0.08375000000000021, 0.11824999999999974, 0.1067499999999999, 0.07949999999999946, 0.13150000000000084, 0.18125000000000213, 0.10699999999999932, 0.08975000000000044, 0.07949999999999946, 0.12900000000000134, 0.13625000000000043, 0.15949999999999953, 0.16000000000000014, 0.1302500000000002, 0.058999999999999275, 0.042500000000000426, 0.11924999999999919, 0.24549999999999983, 0.3119999999999994, 0.22724999999999973, 0.19200000000000017, 0.11624999999999908, 0.06625000000000014, 0.059749999999999304, 0.09849999999999959, 0.3365000000000009, 0.5412499999999998, 0.46950000000000003, 0.39300000000000157, 0.10500000000000043, 0.12500000000000178, 0.0940000000000012, 0.12124999999999986], zp_timestamp='2025-11-17T19:41:00')
2025-11-17T21:43:40.605 [DEBUG] [Thread-61796] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:43:40.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:43:40.701 [DEBUG] [Thread-61799] [transport.py] [_log()] starting thread (client mode): 0xd31b1fc0
2025-11-17T21:43:40.701 [DEBUG] [Thread-61799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:43:40.716 [DEBUG] [Thread-61799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:43:40.716 [INFO] [Thread-61799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] client lang: <none>
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] server lang: <none>
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] kex follows: False
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:43:40.724 [DEBUG] [Thread-61799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:43:40.725 [DEBUG] [Thread-61799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:43:40.725 [DEBUG] [Thread-61799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:43:40.725 [DEBUG] [Thread-61799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:43:40.725 [DEBUG] [Thread-61799] [transport.py] [_log()] Compression: none
2025-11-17T21:43:40.725 [DEBUG] [Thread-61799] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:43:40.780 [DEBUG] [Thread-61799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:43:40.780 [DEBUG] [Thread-61799] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:43:40.780 [DEBUG] [Thread-61799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:43:40.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:43:40.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:43:40.838 [DEBUG] [Thread-61799] [transport.py] [_log()] userauth is OK
2025-11-17T21:43:40.838 [DEBUG] [Thread-61799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:43:40.839 [DEBUG] [Thread-61799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:43:40.839 [DEBUG] [Thread-61799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:43:40.839 [DEBUG] [Thread-61799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:43:40.860 [INFO] [Thread-61799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:43:40.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:43:40.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:43:41.312 [DEBUG] [Thread-61801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:43:41.718 [DEBUG] [Thread-61799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:43:41.718 [DEBUG] [Thread-61799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:43:41.766 [DEBUG] [Thread-61799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:43:41.766 [DEBUG] [Thread-61799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:43:41.775 [DEBUG] [Thread-61799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:43:41.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:43:41.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:43:41.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:43:41.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:43:41.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:43:41.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:43:41.809 [DEBUG] [Thread-61799] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:43:43.183 [DEBUG] [Thread-61802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:43:52.886 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:43:52.887 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:43:56.355 [DEBUG] [Thread-61803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:44:11.387 [DEBUG] [Thread-61804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:44:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:44:11.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:44:11.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:44:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 44, 6), 14.17, 38.41, 0.0, 19.94, 15.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:44:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:44:06
2025-11-17T21:44:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:44:12.742 [DEBUG] [Thread-61805] [transport.py] [_log()] starting thread (client mode): 0xd317d540
2025-11-17T21:44:12.742 [DEBUG] [Thread-61805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:44:12.755 [DEBUG] [Thread-61805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:44:12.755 [INFO] [Thread-61805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:44:12.758 [DEBUG] [Thread-61805] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:44:12.758 [DEBUG] [Thread-61805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:44:12.758 [DEBUG] [Thread-61805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] client lang: <none>
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] server lang: <none>
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] kex follows: False
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] Compression: none
2025-11-17T21:44:12.759 [DEBUG] [Thread-61805] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:44:12.767 [DEBUG] [Thread-61805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:44:12.768 [DEBUG] [Thread-61805] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:44:12.768 [DEBUG] [Thread-61805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:44:12.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:44:12.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:44:12.769 [DEBUG] [Thread-61805] [transport.py] [_log()] userauth is OK
2025-11-17T21:44:12.769 [DEBUG] [Thread-61805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:44:12.769 [DEBUG] [Thread-61805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:44:12.770 [DEBUG] [Thread-61805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:44:12.770 [DEBUG] [Thread-61805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:44:12.789 [INFO] [Thread-61805] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:44:12.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:44:13.389 [DEBUG] [Thread-61805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:44:13.390 [DEBUG] [Thread-61805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:44:13.390 [DEBUG] [Thread-61805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:44:13.430 [DEBUG] [Thread-61805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:44:13.430 [DEBUG] [Thread-61805] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:44:13.434 [DEBUG] [Thread-61805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:44:13.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:44:13.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:44:13.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:44:13.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:44:13.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:44:13.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:44:13.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:44:13.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:44:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:44:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.822270 -999.00  +15.60  13.69     43   +3.10 1 1 1 1 1     0    0 9.48 -118.45 ZNESW 14.6 13.7 183.4 17.9 16.2 -23.9 16.1 -23.1 15.9 -22.6 16.2 -23.4
2025-11-17T21:44:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:44:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:44:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.822270
2025-11-17T21:44:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:44:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:44:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:44:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:44:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:44:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:44:06', tmtdew=14.17, humidity=38.41, cloud=0.0, wind=19.94, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:44:06', seeing=1.66, atlas_timestamp='2025-11-17T19:44:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.08375000000000021, 0.11824999999999974, 0.1067499999999999, 0.07949999999999946, 0.13150000000000084, 0.18125000000000213, 0.10699999999999932, 0.08975000000000044, 0.07949999999999946, 0.12900000000000134, 0.13625000000000043, 0.15949999999999953, 0.16000000000000014, 0.1302500000000002, 0.058999999999999275, 0.042500000000000426, 0.11924999999999919, 0.24549999999999983, 0.3119999999999994, 0.22724999999999973, 0.19200000000000017, 0.11624999999999908, 0.06625000000000014, 0.059749999999999304, 0.09849999999999959, 0.3365000000000009, 0.5412499999999998, 0.46950000000000003, 0.39300000000000157, 0.10500000000000043, 0.12500000000000178, 0.0940000000000012, 0.12124999999999986], zp_timestamp='2025-11-17T19:41:00')
2025-11-17T21:44:13.457 [DEBUG] [Thread-61805] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:44:13.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:44:13.556 [DEBUG] [Thread-61808] [transport.py] [_log()] starting thread (client mode): 0xd317cac0
2025-11-17T21:44:13.556 [DEBUG] [Thread-61808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:44:13.571 [DEBUG] [Thread-61808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:44:13.571 [INFO] [Thread-61808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:44:13.578 [DEBUG] [Thread-61808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:44:13.578 [DEBUG] [Thread-61808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] client lang: <none>
2025-11-17T21:44:13.579 [DEBUG] [Thread-61808] [transport.py] [_log()] server lang: <none>
2025-11-17T21:44:13.580 [DEBUG] [Thread-61808] [transport.py] [_log()] kex follows: False
2025-11-17T21:44:13.580 [DEBUG] [Thread-61808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:44:13.580 [DEBUG] [Thread-61808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:44:13.580 [DEBUG] [Thread-61808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:44:13.580 [DEBUG] [Thread-61808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:44:13.580 [DEBUG] [Thread-61808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:44:13.580 [DEBUG] [Thread-61808] [transport.py] [_log()] Compression: none
2025-11-17T21:44:13.580 [DEBUG] [Thread-61808] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:44:13.638 [DEBUG] [Thread-61808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:44:13.638 [DEBUG] [Thread-61808] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:44:13.639 [DEBUG] [Thread-61808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:44:13.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:44:13.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:44:13.701 [DEBUG] [Thread-61808] [transport.py] [_log()] userauth is OK
2025-11-17T21:44:13.701 [DEBUG] [Thread-61808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:44:13.701 [DEBUG] [Thread-61808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:44:13.701 [DEBUG] [Thread-61808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:44:13.701 [DEBUG] [Thread-61808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:44:13.722 [INFO] [Thread-61808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:44:13.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:44:13.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:44:14.603 [DEBUG] [Thread-61808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:44:14.604 [DEBUG] [Thread-61808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:44:14.651 [DEBUG] [Thread-61808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:44:14.651 [DEBUG] [Thread-61808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:44:14.660 [DEBUG] [Thread-61808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:44:14.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:44:14.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:44: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
2025-11-17T21:44:14.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:44:14.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:44:14.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:44:14.698 [DEBUG] [Thread-61808] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:44:26.420 [DEBUG] [Thread-61810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:44:41.468 [DEBUG] [Thread-61811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:44:43.260 [DEBUG] [Thread-61812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:44:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:44:44.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:44:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:44:45.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 44, 38), 14.15, 38.47, 0.0, 22.46, 15.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:44:45.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:44:38
2025-11-17T21:44:45.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:44:45.696 [DEBUG] [Thread-61813] [transport.py] [_log()] starting thread (client mode): 0xd3137340
2025-11-17T21:44:45.696 [DEBUG] [Thread-61813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:44:45.707 [DEBUG] [Thread-61813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:44:45.707 [INFO] [Thread-61813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:44:45.708 [DEBUG] [Thread-61813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:44:45.708 [DEBUG] [Thread-61813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:44:45.708 [DEBUG] [Thread-61813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] client lang: <none>
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] server lang: <none>
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] kex follows: False
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] Compression: none
2025-11-17T21:44:45.709 [DEBUG] [Thread-61813] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:44:45.716 [DEBUG] [Thread-61813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:44:45.716 [DEBUG] [Thread-61813] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:44:45.716 [DEBUG] [Thread-61813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:44:45.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:44:45.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:44:45.717 [DEBUG] [Thread-61813] [transport.py] [_log()] userauth is OK
2025-11-17T21:44:45.717 [DEBUG] [Thread-61813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:44:45.717 [DEBUG] [Thread-61813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:44:45.718 [DEBUG] [Thread-61813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:44:45.718 [DEBUG] [Thread-61813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:44:45.728 [INFO] [Thread-61813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:44:45.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:44:46.261 [DEBUG] [Thread-61813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:44:46.262 [DEBUG] [Thread-61813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:44:46.262 [DEBUG] [Thread-61813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:44:46.302 [DEBUG] [Thread-61813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:44:46.302 [DEBUG] [Thread-61813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:44:46.304 [DEBUG] [Thread-61813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:44:46.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:44:46.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:44:46.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:44:46.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:44:46.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:44:46.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:44:46.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.822617 -999.00  +15.60  18.29     43   +3.10 1 1 1 1 1     0    0 9.36 -130.97 ZNESW 15.5 18.3 182.6 20.3 16.2 -23.8 16.1 -23.2 15.9 -22.5 16.2 -23.4
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.822617
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:44:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:44:38', tmtdew=14.15, humidity=38.47, cloud=0.0, wind=22.46, temperature=15.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:44:38', seeing=1.66, atlas_timestamp='2025-11-17T19:44:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.08375000000000021, 0.11824999999999974, 0.1067499999999999, 0.07949999999999946, 0.13150000000000084, 0.18125000000000213, 0.10699999999999932, 0.08975000000000044, 0.07949999999999946, 0.12900000000000134, 0.13625000000000043, 0.15949999999999953, 0.16000000000000014, 0.1302500000000002, 0.058999999999999275, 0.042500000000000426, 0.11924999999999919, 0.24549999999999983, 0.3119999999999994, 0.22724999999999973, 0.19200000000000017, 0.11624999999999908, 0.06625000000000014, 0.059749999999999304, 0.09849999999999959, 0.3365000000000009, 0.5412499999999998, 0.46950000000000003, 0.39300000000000157, 0.10500000000000043, 0.12500000000000178, 0.0940000000000012, 0.12124999999999986], zp_timestamp='2025-11-17T19:41:00')
2025-11-17T21:44:46.329 [DEBUG] [Thread-61813] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:44:46.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:44:46.415 [DEBUG] [Thread-61816] [transport.py] [_log()] starting thread (client mode): 0xd0702800
2025-11-17T21:44:46.415 [DEBUG] [Thread-61816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:44:46.429 [DEBUG] [Thread-61816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:44:46.429 [INFO] [Thread-61816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] client lang: <none>
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] server lang: <none>
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] kex follows: False
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] Compression: none
2025-11-17T21:44:46.437 [DEBUG] [Thread-61816] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:44:46.495 [DEBUG] [Thread-61816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:44:46.495 [DEBUG] [Thread-61816] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:44:46.496 [DEBUG] [Thread-61816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:44:46.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:44:46.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:44:46.552 [DEBUG] [Thread-61816] [transport.py] [_log()] userauth is OK
2025-11-17T21:44:46.552 [DEBUG] [Thread-61816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:44:46.552 [DEBUG] [Thread-61816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:44:46.552 [DEBUG] [Thread-61816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:44:46.552 [DEBUG] [Thread-61816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:44:46.569 [INFO] [Thread-61816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:44:46.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:44:46.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:44:47.401 [DEBUG] [Thread-61816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:44:47.401 [DEBUG] [Thread-61816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:44:47.449 [DEBUG] [Thread-61816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:44:47.449 [DEBUG] [Thread-61816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:44:47.457 [DEBUG] [Thread-61816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:44:47.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:44:47.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:44:47.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:44:47.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:44:47.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:44:47.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:44:47.489 [DEBUG] [Thread-61816] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:44:53.090 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:44:53.091 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:44:56.496 [DEBUG] [Thread-61818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:44:59.213 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:45:11.532 [DEBUG] [Thread-61819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:45:17.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:45:17.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:45:17.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:45:18.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 45, 10), 14.12, 38.54, 0.0, 20.08, 15.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:45:18.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:45:10
2025-11-17T21:45:18.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:45:18.421 [DEBUG] [Thread-61820] [transport.py] [_log()] starting thread (client mode): 0xd0755750
2025-11-17T21:45:18.421 [DEBUG] [Thread-61820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:45:18.442 [DEBUG] [Thread-61820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:45:18.443 [INFO] [Thread-61820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:45:18.445 [DEBUG] [Thread-61820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] client lang: <none>
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] server lang: <none>
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] kex follows: False
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] Compression: none
2025-11-17T21:45:18.446 [DEBUG] [Thread-61820] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:45:18.462 [DEBUG] [Thread-61820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:45:18.463 [DEBUG] [Thread-61820] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:45:18.463 [DEBUG] [Thread-61820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:45:18.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:45:18.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:45:18.465 [DEBUG] [Thread-61820] [transport.py] [_log()] userauth is OK
2025-11-17T21:45:18.465 [DEBUG] [Thread-61820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:45:18.466 [DEBUG] [Thread-61820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:45:18.466 [DEBUG] [Thread-61820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:45:18.466 [DEBUG] [Thread-61820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:45:18.490 [INFO] [Thread-61820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:45:18.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:45:19.070 [DEBUG] [Thread-61820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:45:19.079 [DEBUG] [Thread-61820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:45:19.079 [DEBUG] [Thread-61820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:45:19.112 [DEBUG] [Thread-61820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:45:19.112 [DEBUG] [Thread-61820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:45:19.114 [DEBUG] [Thread-61820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:45:19.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:45:19.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:45:19.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:45:19.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:45:19.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:45:19.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:45:19.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:45:19.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:45:19.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:45:19.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.822617 -999.00  +15.60  18.29     43   +3.10 1 1 1 1 1     0    0 9.36 -130.97 ZNESW 15.5 18.3 182.6 20.3 16.2 -23.8 16.1 -23.2 15.9 -22.5 16.2 -23.4
2025-11-17T21:45:19.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:45:19.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:45:19.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.822617
2025-11-17T21:45:19.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:45:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:45:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:45:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:45:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:45:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:45:10', tmtdew=14.12, humidity=38.54, cloud=0.0, wind=20.08, temperature=15.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:45:10', seeing=1.69, atlas_timestamp='2025-11-17T19:44:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.08375000000000021, 0.11824999999999974, 0.1067499999999999, 0.07949999999999946, 0.13150000000000084, 0.18125000000000213, 0.10699999999999932, 0.08975000000000044, 0.07949999999999946, 0.12900000000000134, 0.13625000000000043, 0.15949999999999953, 0.16000000000000014, 0.1302500000000002, 0.058999999999999275, 0.042500000000000426, 0.11924999999999919, 0.24549999999999983, 0.3119999999999994, 0.22724999999999973, 0.19200000000000017, 0.11624999999999908, 0.06625000000000014, 0.059749999999999304, 0.09849999999999959, 0.3365000000000009, 0.5412499999999998, 0.46950000000000003, 0.39300000000000157, 0.10500000000000043, 0.12500000000000178, 0.0940000000000012, 0.12124999999999986], zp_timestamp='2025-11-17T19:41:00')
2025-11-17T21:45:19.139 [DEBUG] [Thread-61820] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:45:19.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:45:19.242 [DEBUG] [Thread-61823] [transport.py] [_log()] starting thread (client mode): 0xd317cbb0
2025-11-17T21:45:19.242 [DEBUG] [Thread-61823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:45:19.265 [DEBUG] [Thread-61823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:45:19.265 [INFO] [Thread-61823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] client lang: <none>
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] server lang: <none>
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] kex follows: False
2025-11-17T21:45:19.274 [DEBUG] [Thread-61823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:45:19.275 [DEBUG] [Thread-61823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:45:19.275 [DEBUG] [Thread-61823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:45:19.275 [DEBUG] [Thread-61823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:45:19.275 [DEBUG] [Thread-61823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:45:19.275 [DEBUG] [Thread-61823] [transport.py] [_log()] Compression: none
2025-11-17T21:45:19.275 [DEBUG] [Thread-61823] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:45:19.332 [DEBUG] [Thread-61823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:45:19.333 [DEBUG] [Thread-61823] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:45:19.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:45:19.334 [DEBUG] [Thread-61823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:45:19.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:45:19.388 [DEBUG] [Thread-61823] [transport.py] [_log()] userauth is OK
2025-11-17T21:45:19.389 [DEBUG] [Thread-61823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:45:19.389 [DEBUG] [Thread-61823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:45:19.389 [DEBUG] [Thread-61823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:45:19.389 [DEBUG] [Thread-61823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:45:19.408 [INFO] [Thread-61823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:45:19.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:45:19.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:45:20.235 [DEBUG] [Thread-61823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:45:20.235 [DEBUG] [Thread-61823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:45:20.283 [DEBUG] [Thread-61823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:45:20.283 [DEBUG] [Thread-61823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:45:20.292 [DEBUG] [Thread-61823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:45:20.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:45:20.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:45:20.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:45:20.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:45:20.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:45:20.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:45:20.326 [DEBUG] [Thread-61823] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:45:26.558 [DEBUG] [Thread-61825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:45:41.587 [DEBUG] [Thread-61826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:45:43.322 [DEBUG] [Thread-61827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:45:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:45:50.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:45:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:45:51.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 45, 42), 14.13, 38.51, 0.0, 20.33, 15.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:45:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:45:42
2025-11-17T21:45:51.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:45:51.268 [DEBUG] [Thread-61828] [transport.py] [_log()] starting thread (client mode): 0xd0754760
2025-11-17T21:45:51.268 [DEBUG] [Thread-61828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:45:51.285 [DEBUG] [Thread-61828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:45:51.286 [INFO] [Thread-61828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:45:51.289 [DEBUG] [Thread-61828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:45:51.289 [DEBUG] [Thread-61828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:45:51.289 [DEBUG] [Thread-61828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:45:51.289 [DEBUG] [Thread-61828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:45:51.289 [DEBUG] [Thread-61828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:45:51.289 [DEBUG] [Thread-61828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:45:51.289 [DEBUG] [Thread-61828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:45:51.289 [DEBUG] [Thread-61828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] client lang: <none>
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] server lang: <none>
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] kex follows: False
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] Compression: none
2025-11-17T21:45:51.290 [DEBUG] [Thread-61828] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:45:51.308 [DEBUG] [Thread-61828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:45:51.309 [DEBUG] [Thread-61828] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:45:51.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:45:51.309 [DEBUG] [Thread-61828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:45:51.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:45:51.311 [DEBUG] [Thread-61828] [transport.py] [_log()] userauth is OK
2025-11-17T21:45:51.312 [DEBUG] [Thread-61828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:45:51.312 [DEBUG] [Thread-61828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:45:51.312 [DEBUG] [Thread-61828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:45:51.312 [DEBUG] [Thread-61828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:45:51.346 [INFO] [Thread-61828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:45:51.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:45:51.989 [DEBUG] [Thread-61828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:45:51.989 [DEBUG] [Thread-61828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:45:51.989 [DEBUG] [Thread-61828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:45:52.030 [DEBUG] [Thread-61828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:45:52.030 [DEBUG] [Thread-61828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:45:52.033 [DEBUG] [Thread-61828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:45:52.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:45:52.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:45:52.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:45:52.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:45:52.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:45:52.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:45:52.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:45:52.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:45:52.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:45:52.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.822964 -999.00  +15.60  14.00     43   +3.10 1 1 1 1 1     0    0 9.12 -129.69 ZNESW 11.1 14.0 194.0 18.0 16.2 -24.0 16.1 -23.1 15.9 -22.5 16.1 -23.7
2025-11-17T21:45:52.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:45:52.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:45:52.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.822964
2025-11-17T21:45:52.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:45:52.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:45:52.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:45:52.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:45:52.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:45:52.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:45:42', tmtdew=14.13, humidity=38.51, cloud=0.0, wind=20.33, temperature=15.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:45:42', seeing=1.91, atlas_timestamp='2025-11-17T19:45:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.08375000000000021, 0.11824999999999974, 0.1067499999999999, 0.07949999999999946, 0.13150000000000084, 0.18125000000000213, 0.10699999999999932, 0.08975000000000044, 0.07949999999999946, 0.12900000000000134, 0.13625000000000043, 0.15949999999999953, 0.16000000000000014, 0.1302500000000002, 0.058999999999999275, 0.042500000000000426, 0.11924999999999919, 0.24549999999999983, 0.3119999999999994, 0.22724999999999973, 0.19200000000000017, 0.11624999999999908, 0.06625000000000014, 0.059749999999999304, 0.09849999999999959, 0.3365000000000009, 0.5412499999999998, 0.46950000000000003, 0.39300000000000157, 0.10500000000000043, 0.12500000000000178, 0.0940000000000012, 0.12124999999999986], zp_timestamp='2025-11-17T19:41:00')
2025-11-17T21:45:52.058 [DEBUG] [Thread-61828] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:45:52.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:45:52.154 [DEBUG] [Thread-61831] [transport.py] [_log()] starting thread (client mode): 0xd7bc63b0
2025-11-17T21:45:52.154 [DEBUG] [Thread-61831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:45:52.174 [DEBUG] [Thread-61831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:45:52.175 [INFO] [Thread-61831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:45:52.182 [DEBUG] [Thread-61831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] client lang: <none>
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] server lang: <none>
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] kex follows: False
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] Compression: none
2025-11-17T21:45:52.183 [DEBUG] [Thread-61831] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:45:52.240 [DEBUG] [Thread-61831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:45:52.240 [DEBUG] [Thread-61831] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:45:52.241 [DEBUG] [Thread-61831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:45:52.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:45:52.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:45:52.296 [DEBUG] [Thread-61831] [transport.py] [_log()] userauth is OK
2025-11-17T21:45:52.296 [DEBUG] [Thread-61831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:45:52.297 [DEBUG] [Thread-61831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:45:52.297 [DEBUG] [Thread-61831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:45:52.297 [DEBUG] [Thread-61831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:45:52.317 [INFO] [Thread-61831] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:45:52.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:45:52.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:45:53.223 [DEBUG] [Thread-61831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:45:53.223 [DEBUG] [Thread-61831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:45:53.271 [DEBUG] [Thread-61831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:45:53.271 [DEBUG] [Thread-61831] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:45:53.280 [DEBUG] [Thread-61831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:45:53.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:45:53.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:45:53.294 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:45:53.295 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:45: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') -> 00000000
2025-11-17T21:45:53.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:45:53.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:45:53.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:45:53.315 [DEBUG] [Thread-61831] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:45:56.617 [DEBUG] [Thread-61833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:08.918 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:11.659 [DEBUG] [Thread-61834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:23.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:46:23.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:46:23.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:46:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 46, 14), 14.1, 38.59, 0.0, 20.66, 15.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:46:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:46:14
2025-11-17T21:46:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:46:24.282 [DEBUG] [Thread-61835] [transport.py] [_log()] starting thread (client mode): 0xd0756ad0
2025-11-17T21:46:24.282 [DEBUG] [Thread-61835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:46:24.304 [DEBUG] [Thread-61835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:46:24.304 [INFO] [Thread-61835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] client lang: <none>
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] server lang: <none>
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] kex follows: False
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:46:24.307 [DEBUG] [Thread-61835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:46:24.308 [DEBUG] [Thread-61835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:46:24.308 [DEBUG] [Thread-61835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:46:24.308 [DEBUG] [Thread-61835] [transport.py] [_log()] Compression: none
2025-11-17T21:46:24.308 [DEBUG] [Thread-61835] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:46:24.325 [DEBUG] [Thread-61835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:46:24.325 [DEBUG] [Thread-61835] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:46:24.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:46:24.326 [DEBUG] [Thread-61835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:46:24.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:46:24.327 [DEBUG] [Thread-61835] [transport.py] [_log()] userauth is OK
2025-11-17T21:46:24.328 [DEBUG] [Thread-61835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:46:24.328 [DEBUG] [Thread-61835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:46:24.328 [DEBUG] [Thread-61835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:46:24.328 [DEBUG] [Thread-61835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:46:24.352 [INFO] [Thread-61835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:46:24.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:46:24.995 [DEBUG] [Thread-61835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:46:24.995 [DEBUG] [Thread-61835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:46:24.995 [DEBUG] [Thread-61835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:46:25.036 [DEBUG] [Thread-61835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:46:25.036 [DEBUG] [Thread-61835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:46:25.039 [DEBUG] [Thread-61835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:46:25.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:46:25.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:46:25.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:46:25.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:46:25.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:46:25.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:46:25.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:46:25.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:46:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:46:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.823312 -999.00  +15.50  12.43     43   +3.00 1 1 1 1 1     0    0 9.55 -126.33 ZNESW 11.2 12.4 180.4 16.4 16.2 -24.0 16.1 -23.2 15.9 -22.4 16.1 -23.5
2025-11-17T21:46:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:46:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:46:25.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.823312
2025-11-17T21:46:25.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:46:25.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:46:25.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:46:25.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:46:25.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:46:25.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:46:14', tmtdew=14.1, humidity=38.59, cloud=0.0, wind=20.66, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:46:14', seeing=1.9, atlas_timestamp='2025-11-17T19:45:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:44:00')
2025-11-17T21:46:25.066 [DEBUG] [Thread-61835] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:46:25.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:46:25.164 [DEBUG] [Thread-61838] [transport.py] [_log()] starting thread (client mode): 0xd0756f80
2025-11-17T21:46:25.164 [DEBUG] [Thread-61838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:46:25.180 [DEBUG] [Thread-61838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:46:25.180 [INFO] [Thread-61838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:46:25.189 [DEBUG] [Thread-61838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:46:25.189 [DEBUG] [Thread-61838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:46:25.189 [DEBUG] [Thread-61838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:46:25.189 [DEBUG] [Thread-61838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] client lang: <none>
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] server lang: <none>
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] kex follows: False
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:46:25.190 [DEBUG] [Thread-61838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:46:25.191 [DEBUG] [Thread-61838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:46:25.191 [DEBUG] [Thread-61838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:46:25.191 [DEBUG] [Thread-61838] [transport.py] [_log()] Compression: none
2025-11-17T21:46:25.191 [DEBUG] [Thread-61838] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:46:25.248 [DEBUG] [Thread-61838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:46:25.248 [DEBUG] [Thread-61838] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:46:25.249 [DEBUG] [Thread-61838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:46:25.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:46:25.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:46:25.304 [DEBUG] [Thread-61838] [transport.py] [_log()] userauth is OK
2025-11-17T21:46:25.305 [DEBUG] [Thread-61838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:46:25.305 [DEBUG] [Thread-61838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:46:25.305 [DEBUG] [Thread-61838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:46:25.305 [DEBUG] [Thread-61838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:46:25.326 [INFO] [Thread-61838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:46:25.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:46:25.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:46:26.239 [DEBUG] [Thread-61838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:46:26.239 [DEBUG] [Thread-61838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:46:26.287 [DEBUG] [Thread-61838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:46:26.287 [DEBUG] [Thread-61838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:46:26.296 [DEBUG] [Thread-61838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:46:26.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:46:26.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:46:26.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:46:26.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:46:26.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:46:26.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:46:26.329 [DEBUG] [Thread-61838] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:46:26.688 [DEBUG] [Thread-61840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:41.728 [DEBUG] [Thread-61841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:43.393 [DEBUG] [Thread-61842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:53.499 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:53.500 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:46:56.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:46:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:46:56.756 [DEBUG] [Thread-61843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:46:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 46, 46), 14.09, 38.49, 0.0, 21.3, 15.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:46:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:46:46
2025-11-17T21:46:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:46:57.279 [DEBUG] [Thread-61844] [transport.py] [_log()] starting thread (client mode): 0xd7bc63b0
2025-11-17T21:46:57.279 [DEBUG] [Thread-61844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:46:57.297 [DEBUG] [Thread-61844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:46:57.298 [INFO] [Thread-61844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:46:57.303 [DEBUG] [Thread-61844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] client lang: <none>
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] server lang: <none>
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] kex follows: False
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] Compression: none
2025-11-17T21:46:57.304 [DEBUG] [Thread-61844] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:46:57.321 [DEBUG] [Thread-61844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:46:57.322 [DEBUG] [Thread-61844] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:46:57.322 [DEBUG] [Thread-61844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:46:57.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:46:57.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:46:57.324 [DEBUG] [Thread-61844] [transport.py] [_log()] userauth is OK
2025-11-17T21:46:57.325 [DEBUG] [Thread-61844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:46:57.325 [DEBUG] [Thread-61844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:46:57.325 [DEBUG] [Thread-61844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:46:57.325 [DEBUG] [Thread-61844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:46:57.348 [INFO] [Thread-61844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:46:57.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:46:58.023 [DEBUG] [Thread-61844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:46:58.023 [DEBUG] [Thread-61844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:46:58.024 [DEBUG] [Thread-61844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:46:58.064 [DEBUG] [Thread-61844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:46:58.064 [DEBUG] [Thread-61844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:46:58.067 [DEBUG] [Thread-61844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:46:58.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:46:58.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:46:58.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:46:58.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:46:58.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:46:58.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:46:58.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:46:58.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:46:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:46:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.823659 -999.00  +15.50  17.48     43   +3.10 1 1 1 1 1     0    0 8.77 -135.66 ZNESW 19.2 17.5 184.0 22.1 16.2 -23.9 16.1 -23.2 15.8 -22.4 16.1 -23.3
2025-11-17T21:46:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:46:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:46:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.823659
2025-11-17T21:46:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:46:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:46:58.090 [DEBUG] [Thread-61844] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:46:58.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:46:58.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:46:58.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:46:58.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:46:46', tmtdew=14.09, humidity=38.49, cloud=0.0, wind=21.3, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:46:46', seeing=1.5, atlas_timestamp='2025-11-17T19:46:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:44:00')
2025-11-17T21:46:58.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:46:58.187 [DEBUG] [Thread-61847] [transport.py] [_log()] starting thread (client mode): 0xd7bc5930
2025-11-17T21:46:58.187 [DEBUG] [Thread-61847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:46:58.202 [DEBUG] [Thread-61847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:46:58.203 [INFO] [Thread-61847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] client lang: <none>
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] server lang: <none>
2025-11-17T21:46:58.210 [DEBUG] [Thread-61847] [transport.py] [_log()] kex follows: False
2025-11-17T21:46:58.211 [DEBUG] [Thread-61847] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:46:58.211 [DEBUG] [Thread-61847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:46:58.211 [DEBUG] [Thread-61847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:46:58.211 [DEBUG] [Thread-61847] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:46:58.211 [DEBUG] [Thread-61847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:46:58.211 [DEBUG] [Thread-61847] [transport.py] [_log()] Compression: none
2025-11-17T21:46:58.211 [DEBUG] [Thread-61847] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:46:58.268 [DEBUG] [Thread-61847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:46:58.269 [DEBUG] [Thread-61847] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:46:58.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:46:58.270 [DEBUG] [Thread-61847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:46:58.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:46:58.329 [DEBUG] [Thread-61847] [transport.py] [_log()] userauth is OK
2025-11-17T21:46:58.329 [DEBUG] [Thread-61847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:46:58.329 [DEBUG] [Thread-61847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:46:58.330 [DEBUG] [Thread-61847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:46:58.330 [DEBUG] [Thread-61847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:46:58.349 [INFO] [Thread-61847] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:46:58.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:46:58.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:46:59.190 [DEBUG] [Thread-61847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:46:59.190 [DEBUG] [Thread-61847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:46:59.238 [DEBUG] [Thread-61847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:46:59.238 [DEBUG] [Thread-61847] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:46:59.247 [DEBUG] [Thread-61847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:46:59.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:46:59.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:46:59.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:46:59.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:46:59.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:46:59.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:46:59.281 [DEBUG] [Thread-61847] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:47:11.784 [DEBUG] [Thread-61849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:47:26.822 [DEBUG] [Thread-61850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:47:29.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:47:29.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:47:29.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:47:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 47, 18), 14.05, 38.61, 0.0, 22.55, 15.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:47:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:47:18
2025-11-17T21:47:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:47:30.198 [DEBUG] [Thread-61851] [transport.py] [_log()] starting thread (client mode): 0xd7bc5f60
2025-11-17T21:47:30.198 [DEBUG] [Thread-61851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:47:30.218 [DEBUG] [Thread-61851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:47:30.218 [INFO] [Thread-61851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:47:30.222 [DEBUG] [Thread-61851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:47:30.222 [DEBUG] [Thread-61851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:47:30.222 [DEBUG] [Thread-61851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:47:30.222 [DEBUG] [Thread-61851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:47:30.222 [DEBUG] [Thread-61851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:47:30.222 [DEBUG] [Thread-61851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] client lang: <none>
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] server lang: <none>
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] kex follows: False
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:47:30.223 [DEBUG] [Thread-61851] [transport.py] [_log()] Compression: none
2025-11-17T21:47:30.224 [DEBUG] [Thread-61851] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:47:30.244 [DEBUG] [Thread-61851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:47:30.245 [DEBUG] [Thread-61851] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:47:30.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:47:30.245 [DEBUG] [Thread-61851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:47:30.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:47:30.248 [DEBUG] [Thread-61851] [transport.py] [_log()] userauth is OK
2025-11-17T21:47:30.248 [DEBUG] [Thread-61851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:47:30.248 [DEBUG] [Thread-61851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:47:30.248 [DEBUG] [Thread-61851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:47:30.248 [DEBUG] [Thread-61851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:47:30.272 [INFO] [Thread-61851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:47:30.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:47:30.867 [DEBUG] [Thread-61851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:47:30.867 [DEBUG] [Thread-61851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:47:30.868 [DEBUG] [Thread-61851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:47:30.909 [DEBUG] [Thread-61851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:47:30.909 [DEBUG] [Thread-61851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:47:30.912 [DEBUG] [Thread-61851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:47:30.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:47:30.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:47:30.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:47:30.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:47:30.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:47:30.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:47:30.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:47:30.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:47:30.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:47:30.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.824006 -999.00  +15.50  15.40     43   +3.10 1 1 1 1 1     0    0 8.40 -156.47 ZNESW 20.1 15.4 173.4 20.2 16.2 -23.9 16.0 -23.2 15.8 -22.3 16.1 -23.3
2025-11-17T21:47:30.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:47:30.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:47:30.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.824006
2025-11-17T21:47:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:47:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:47:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:47:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:47:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:47:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:47:18', tmtdew=14.05, humidity=38.61, cloud=0.0, wind=22.55, temperature=15.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:47:18', seeing=1.68, atlas_timestamp='2025-11-17T19:46:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:44:00')
2025-11-17T21:47:30.938 [DEBUG] [Thread-61851] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:47:31.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:47:31.038 [DEBUG] [Thread-61854] [transport.py] [_log()] starting thread (client mode): 0xd7bc63b0
2025-11-17T21:47:31.038 [DEBUG] [Thread-61854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:47:31.052 [DEBUG] [Thread-61854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:47:31.052 [INFO] [Thread-61854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:47:31.060 [DEBUG] [Thread-61854] [transport.py] [_log()] client lang: <none>
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] server lang: <none>
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] kex follows: False
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] Compression: none
2025-11-17T21:47:31.061 [DEBUG] [Thread-61854] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:47:31.123 [DEBUG] [Thread-61854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:47:31.124 [DEBUG] [Thread-61854] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:47:31.125 [DEBUG] [Thread-61854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:47:31.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:47:31.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:47:31.182 [DEBUG] [Thread-61854] [transport.py] [_log()] userauth is OK
2025-11-17T21:47:31.182 [DEBUG] [Thread-61854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:47:31.183 [DEBUG] [Thread-61854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:47:31.183 [DEBUG] [Thread-61854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:47:31.183 [DEBUG] [Thread-61854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:47:31.204 [INFO] [Thread-61854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:47:31.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:47:31.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:47:32.065 [DEBUG] [Thread-61854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:47:32.065 [DEBUG] [Thread-61854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:47:32.113 [DEBUG] [Thread-61854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:47:32.113 [DEBUG] [Thread-61854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:47:32.122 [DEBUG] [Thread-61854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:47:32.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:47:32.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:47:32.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:47:32.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:47:32.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:47:32.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:47:32.155 [DEBUG] [Thread-61854] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:47:41.850 [DEBUG] [Thread-61856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:47:43.448 [DEBUG] [Thread-61857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:47:53.704 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:47:53.705 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:47:56.889 [DEBUG] [Thread-61858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:48:02.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:48:02.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:48:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:48:02.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 47, 50), 14.05, 38.57, 0.0, 21.09, 15.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:48:02.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:47:50
2025-11-17T21:48:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:48:03.164 [DEBUG] [Thread-61859] [transport.py] [_log()] starting thread (client mode): 0xd3150dc0
2025-11-17T21:48:03.164 [DEBUG] [Thread-61859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:48:03.184 [DEBUG] [Thread-61859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:48:03.184 [INFO] [Thread-61859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:48:03.187 [DEBUG] [Thread-61859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:48:03.187 [DEBUG] [Thread-61859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:48:03.187 [DEBUG] [Thread-61859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:48:03.187 [DEBUG] [Thread-61859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] client lang: <none>
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] server lang: <none>
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] kex follows: False
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] Compression: none
2025-11-17T21:48:03.188 [DEBUG] [Thread-61859] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:48:03.202 [DEBUG] [Thread-61859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:48:03.203 [DEBUG] [Thread-61859] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:48:03.203 [DEBUG] [Thread-61859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:48:03.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:48:03.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:48:03.204 [DEBUG] [Thread-61859] [transport.py] [_log()] userauth is OK
2025-11-17T21:48:03.204 [DEBUG] [Thread-61859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:48:03.204 [DEBUG] [Thread-61859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:48:03.204 [DEBUG] [Thread-61859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:48:03.204 [DEBUG] [Thread-61859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:48:03.218 [INFO] [Thread-61859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:48:03.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:48:03.997 [DEBUG] [Thread-61859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:48:03.997 [DEBUG] [Thread-61859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:48:03.997 [DEBUG] [Thread-61859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:48:04.037 [DEBUG] [Thread-61859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:48:04.037 [DEBUG] [Thread-61859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:48:04.040 [DEBUG] [Thread-61859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:48:04.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:48:04.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:48:04.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:48:04.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:48:04.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:48:04.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:48:04.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:48:04.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.824353 -999.00  +15.50  15.66     43   +3.10 1 1 1 1 1     0    0 8.55 -149.25 ZNESW 13.2 15.7 177.2 19.9 16.1 -23.8 16.0 -23.2 15.8 -22.3 16.1 -23.3
2025-11-17T21:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.824353
2025-11-17T21:48:04.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:48:04.059 [DEBUG] [Thread-61859] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:48:04.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:48:04.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:48:04.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:48:04.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:48:04.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:47:50', tmtdew=14.05, humidity=38.57, cloud=0.0, wind=21.09, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:47:50', seeing=1.68, atlas_timestamp='2025-11-17T19:47:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:44:00')
2025-11-17T21:48:04.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:48:04.150 [DEBUG] [Thread-61862] [transport.py] [_log()] starting thread (client mode): 0xd3150ca0
2025-11-17T21:48:04.150 [DEBUG] [Thread-61862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:48:04.165 [DEBUG] [Thread-61862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:48:04.165 [INFO] [Thread-61862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:48:04.172 [DEBUG] [Thread-61862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:48:04.172 [DEBUG] [Thread-61862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:48:04.172 [DEBUG] [Thread-61862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:48:04.172 [DEBUG] [Thread-61862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:48:04.172 [DEBUG] [Thread-61862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:48:04.172 [DEBUG] [Thread-61862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:48:04.172 [DEBUG] [Thread-61862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] client lang: <none>
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] server lang: <none>
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] kex follows: False
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] Compression: none
2025-11-17T21:48:04.173 [DEBUG] [Thread-61862] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:48:04.228 [DEBUG] [Thread-61862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:48:04.228 [DEBUG] [Thread-61862] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:48:04.229 [DEBUG] [Thread-61862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:48:04.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:48:04.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:48:04.284 [DEBUG] [Thread-61862] [transport.py] [_log()] userauth is OK
2025-11-17T21:48:04.285 [DEBUG] [Thread-61862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:48:04.285 [DEBUG] [Thread-61862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:48:04.285 [DEBUG] [Thread-61862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:48:04.285 [DEBUG] [Thread-61862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:48:04.304 [INFO] [Thread-61862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:48:04.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:48:04.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:48:05.115 [DEBUG] [Thread-61862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:48:05.115 [DEBUG] [Thread-61862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:48:05.164 [DEBUG] [Thread-61862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:48:05.164 [DEBUG] [Thread-61862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:48:05.173 [DEBUG] [Thread-61862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:48:05.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:48:05.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:48:05.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:48:05.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:48:05.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:48:05.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:48:05.207 [DEBUG] [Thread-61862] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:48:11.916 [DEBUG] [Thread-61864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:48:26.967 [DEBUG] [Thread-61865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:48:35.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:48:35.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:48:35.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:48:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 48, 22), 14.06, 38.54, 0.0, 21.7, 15.46, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:48:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:48:22
2025-11-17T21:48:36.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:48:36.168 [DEBUG] [Thread-61866] [transport.py] [_log()] starting thread (client mode): 0xd3150d60
2025-11-17T21:48:36.168 [DEBUG] [Thread-61866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:48:36.188 [DEBUG] [Thread-61866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:48:36.188 [INFO] [Thread-61866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:48:36.191 [DEBUG] [Thread-61866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] client lang: <none>
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] server lang: <none>
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] kex follows: False
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] Compression: none
2025-11-17T21:48:36.192 [DEBUG] [Thread-61866] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:48:36.209 [DEBUG] [Thread-61866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:48:36.210 [DEBUG] [Thread-61866] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:48:36.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:48:36.211 [DEBUG] [Thread-61866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:48:36.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:48:36.253 [DEBUG] [Thread-61866] [transport.py] [_log()] userauth is OK
2025-11-17T21:48:36.253 [DEBUG] [Thread-61866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:48:36.253 [DEBUG] [Thread-61866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:48:36.253 [DEBUG] [Thread-61866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:48:36.253 [DEBUG] [Thread-61866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:48:36.288 [INFO] [Thread-61866] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:48:36.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:48:36.935 [DEBUG] [Thread-61866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:48:36.936 [DEBUG] [Thread-61866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:48:36.936 [DEBUG] [Thread-61866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:48:36.977 [DEBUG] [Thread-61866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:48:36.977 [DEBUG] [Thread-61866] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:48:36.979 [DEBUG] [Thread-61866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:48:36.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:48:36.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:48:36.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:48:36.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:48:36.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:48:36.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:48:36.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:48:36.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:48:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:48:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.825048 -999.00  +15.50  17.40     43   +3.10 1 2 1 1 1     0    0 9.46 -124.92 ZNEsW 17.1 17.4 181.6 21.8 16.1 -23.9 16.0 -23.0 15.8 -22.2 16.1 -23.4
2025-11-17T21:48:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:48:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:48:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.825048
2025-11-17T21:48:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:48:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:48:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:48:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:48:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:48:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:48:22', tmtdew=14.06, humidity=38.54, cloud=0.0, wind=21.7, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:48:22', seeing=1.94, atlas_timestamp='2025-11-17T19:48:04.147', atlas_cloud=2, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:44:00')
2025-11-17T21:48:36.998 [DEBUG] [Thread-61866] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:48:37.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:48:37.084 [DEBUG] [Thread-61869] [transport.py] [_log()] starting thread (client mode): 0xd07019c0
2025-11-17T21:48:37.084 [DEBUG] [Thread-61869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:48:37.099 [DEBUG] [Thread-61869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:48:37.099 [INFO] [Thread-61869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:48:37.106 [DEBUG] [Thread-61869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:48:37.106 [DEBUG] [Thread-61869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:48:37.106 [DEBUG] [Thread-61869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:48:37.106 [DEBUG] [Thread-61869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:48:37.106 [DEBUG] [Thread-61869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:48:37.106 [DEBUG] [Thread-61869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:48:37.106 [DEBUG] [Thread-61869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] client lang: <none>
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] server lang: <none>
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] kex follows: False
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] Compression: none
2025-11-17T21:48:37.107 [DEBUG] [Thread-61869] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:48:37.163 [DEBUG] [Thread-61869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:48:37.163 [DEBUG] [Thread-61869] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:48:37.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:48:37.163 [DEBUG] [Thread-61869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:48:37.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:48:37.220 [DEBUG] [Thread-61869] [transport.py] [_log()] userauth is OK
2025-11-17T21:48:37.220 [DEBUG] [Thread-61869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:48:37.220 [DEBUG] [Thread-61869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:48:37.220 [DEBUG] [Thread-61869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:48:37.220 [DEBUG] [Thread-61869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:48:37.238 [INFO] [Thread-61869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:48:37.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:48:37.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:48:38.066 [DEBUG] [Thread-61869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:48:38.066 [DEBUG] [Thread-61869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:48:38.114 [DEBUG] [Thread-61869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:48:38.114 [DEBUG] [Thread-61869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:48:38.122 [DEBUG] [Thread-61869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:48:38.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:48:38.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:48:38.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:48:38.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:48:38.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:48:38.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:48:38.153 [DEBUG] [Thread-61869] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:48:41.993 [DEBUG] [Thread-61871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:48:43.515 [DEBUG] [Thread-61872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:48:53.909 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:48:53.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:48:57.028 [DEBUG] [Thread-61873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:03.091 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:49:08.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:49:08.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:49:08.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 48, 54), 14.03, 38.64, 0.0, 21.46, 15.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:49:08.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:48:54
2025-11-17T21:49:08.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:49:09.079 [DEBUG] [Thread-61874] [transport.py] [_log()] starting thread (client mode): 0xd7bc5900
2025-11-17T21:49:09.079 [DEBUG] [Thread-61874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:49:09.100 [DEBUG] [Thread-61874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:49:09.100 [INFO] [Thread-61874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] client lang: <none>
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] server lang: <none>
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] kex follows: False
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:49:09.101 [DEBUG] [Thread-61874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:49:09.102 [DEBUG] [Thread-61874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:49:09.102 [DEBUG] [Thread-61874] [transport.py] [_log()] Compression: none
2025-11-17T21:49:09.102 [DEBUG] [Thread-61874] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:49:09.110 [DEBUG] [Thread-61874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:49:09.110 [DEBUG] [Thread-61874] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:49:09.110 [DEBUG] [Thread-61874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:49:09.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:49:09.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:49:09.111 [DEBUG] [Thread-61874] [transport.py] [_log()] userauth is OK
2025-11-17T21:49:09.111 [DEBUG] [Thread-61874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:49:09.111 [DEBUG] [Thread-61874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:49:09.111 [DEBUG] [Thread-61874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:49:09.112 [DEBUG] [Thread-61874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:49:09.123 [INFO] [Thread-61874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:49:09.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:49:09.922 [DEBUG] [Thread-61874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:49:09.922 [DEBUG] [Thread-61874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:49:09.923 [DEBUG] [Thread-61874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:49:09.963 [DEBUG] [Thread-61874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:49:09.963 [DEBUG] [Thread-61874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:49:09.966 [DEBUG] [Thread-61874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:49:09.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:49:09.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:49:09.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:49:09.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:49:09.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:49:09.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:49:09.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:49:09.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:49:09.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:49:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.825395 -999.00  +15.40  14.75     43   +3.00 1 2 1 1 1     0    0 9.88 -110.75 ZNEsW 19.7 14.8 183.2 20.0 16.1 -23.9 16.0 -22.9 15.8 -22.2 16.0 -23.5
2025-11-17T21:49:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:49:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:49:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.825395
2025-11-17T21:49:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:49:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:49:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:49:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:49:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:49:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:48:54', tmtdew=14.03, humidity=38.64, cloud=0.0, wind=21.46, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:48:54', seeing=1.94, atlas_timestamp='2025-11-17T19:48:34.128', atlas_cloud=2, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:47:00')
2025-11-17T21:49:09.991 [DEBUG] [Thread-61874] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:49:10.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:49:10.094 [DEBUG] [Thread-61877] [transport.py] [_log()] starting thread (client mode): 0xd3150430
2025-11-17T21:49:10.094 [DEBUG] [Thread-61877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:49:10.109 [DEBUG] [Thread-61877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:49:10.109 [INFO] [Thread-61877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:49:10.116 [DEBUG] [Thread-61877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] client lang: <none>
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] server lang: <none>
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] kex follows: False
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] Compression: none
2025-11-17T21:49:10.117 [DEBUG] [Thread-61877] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:49:10.182 [DEBUG] [Thread-61877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:49:10.182 [DEBUG] [Thread-61877] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:49:10.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:49:10.183 [DEBUG] [Thread-61877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:49:10.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:49:10.240 [DEBUG] [Thread-61877] [transport.py] [_log()] userauth is OK
2025-11-17T21:49:10.241 [DEBUG] [Thread-61877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:49:10.241 [DEBUG] [Thread-61877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:49:10.241 [DEBUG] [Thread-61877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:49:10.241 [DEBUG] [Thread-61877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:49:10.260 [INFO] [Thread-61877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:49:10.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:49:10.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:49:11.101 [DEBUG] [Thread-61877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:49:11.101 [DEBUG] [Thread-61877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:49:11.150 [DEBUG] [Thread-61877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:49:11.150 [DEBUG] [Thread-61877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:49:11.159 [DEBUG] [Thread-61877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:49:11.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:49:11.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:49:11.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:49:11.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:49:11.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:49:11.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:49:11.196 [DEBUG] [Thread-61877] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:49:12.058 [DEBUG] [Thread-61879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:13.192 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:17.436 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:27.094 [DEBUG] [Thread-61880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:41.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:49:41.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:49:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:49:41.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 49, 26), 14.02, 38.64, 0.0, 21.32, 15.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:49:41.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:49:26
2025-11-17T21:49:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:49:42.120 [DEBUG] [Thread-61881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:42.120 [DEBUG] [Thread-61882] [transport.py] [_log()] starting thread (client mode): 0xd3135510
2025-11-17T21:49:42.121 [DEBUG] [Thread-61882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:49:42.141 [DEBUG] [Thread-61882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:49:42.141 [INFO] [Thread-61882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] client lang: <none>
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] server lang: <none>
2025-11-17T21:49:42.145 [DEBUG] [Thread-61882] [transport.py] [_log()] kex follows: False
2025-11-17T21:49:42.146 [DEBUG] [Thread-61882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:49:42.146 [DEBUG] [Thread-61882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:49:42.146 [DEBUG] [Thread-61882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:49:42.146 [DEBUG] [Thread-61882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:49:42.146 [DEBUG] [Thread-61882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:49:42.146 [DEBUG] [Thread-61882] [transport.py] [_log()] Compression: none
2025-11-17T21:49:42.146 [DEBUG] [Thread-61882] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:49:42.163 [DEBUG] [Thread-61882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:49:42.163 [DEBUG] [Thread-61882] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:49:42.164 [DEBUG] [Thread-61882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:49:42.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:49:42.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:49:42.166 [DEBUG] [Thread-61882] [transport.py] [_log()] userauth is OK
2025-11-17T21:49:42.166 [DEBUG] [Thread-61882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:49:42.166 [DEBUG] [Thread-61882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:49:42.166 [DEBUG] [Thread-61882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:49:42.166 [DEBUG] [Thread-61882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:49:42.200 [INFO] [Thread-61882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:49:42.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:49:42.847 [DEBUG] [Thread-61882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:49:42.850 [DEBUG] [Thread-61882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:49:42.850 [DEBUG] [Thread-61882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:49:42.888 [DEBUG] [Thread-61882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:49:42.888 [DEBUG] [Thread-61882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:49:42.891 [DEBUG] [Thread-61882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:49:42.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:49:42.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:49:42.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:49:42.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:49:42.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:49:42.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:49:42.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:49:42.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:49:42.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:49:42.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.825742 -999.00  +15.40  18.23     43   +3.10 1 2 1 1 1     0    0 10.28 -96.62 ZNEsW 16.7 18.2 179.6 22.5 16.1 -23.8 15.9 -23.0 15.8 -22.2 16.0 -23.1
2025-11-17T21:49:42.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:49:42.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:49:42.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.825742
2025-11-17T21:49:42.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:49:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:49:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:49:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:49:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:49:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:49:26', tmtdew=14.02, humidity=38.64, cloud=0.0, wind=21.32, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:49:26', seeing=2.26, atlas_timestamp='2025-11-17T19:49:04.109', atlas_cloud=2, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:47:00')
2025-11-17T21:49:42.910 [DEBUG] [Thread-61882] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:49:43.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:49:43.019 [DEBUG] [Thread-61885] [transport.py] [_log()] starting thread (client mode): 0xd3151780
2025-11-17T21:49:43.019 [DEBUG] [Thread-61885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:49:43.035 [DEBUG] [Thread-61885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:49:43.035 [INFO] [Thread-61885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:49:43.042 [DEBUG] [Thread-61885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:49:43.043 [DEBUG] [Thread-61885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:49:43.043 [DEBUG] [Thread-61885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:49:43.043 [DEBUG] [Thread-61885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:49:43.043 [DEBUG] [Thread-61885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:49:43.043 [DEBUG] [Thread-61885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:49:43.043 [DEBUG] [Thread-61885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:49:43.043 [DEBUG] [Thread-61885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] client lang: <none>
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] server lang: <none>
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] kex follows: False
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] Compression: none
2025-11-17T21:49:43.044 [DEBUG] [Thread-61885] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:49:43.100 [DEBUG] [Thread-61885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:49:43.100 [DEBUG] [Thread-61885] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:49:43.101 [DEBUG] [Thread-61885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:49:43.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:49:43.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:49:43.161 [DEBUG] [Thread-61885] [transport.py] [_log()] userauth is OK
2025-11-17T21:49:43.161 [DEBUG] [Thread-61885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:49:43.161 [DEBUG] [Thread-61885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:49:43.161 [DEBUG] [Thread-61885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:49:43.161 [DEBUG] [Thread-61885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:49:43.184 [INFO] [Thread-61885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:49:43.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:49:43.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:49:43.572 [DEBUG] [Thread-61887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:44.055 [DEBUG] [Thread-61885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:49:44.055 [DEBUG] [Thread-61885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:49:44.103 [DEBUG] [Thread-61885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:49:44.103 [DEBUG] [Thread-61885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:49:44.112 [DEBUG] [Thread-61885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:49:44.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:49:44.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21: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
2025-11-17T21:49:44.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:49:44.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:49:44.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:49:44.146 [DEBUG] [Thread-61885] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:49:54.114 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:54.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:49:57.146 [DEBUG] [Thread-61888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:50:12.176 [DEBUG] [Thread-61889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:50:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:50:14.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:50:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:50:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 49, 58), 13.99, 38.75, 0.0, 20.1, 15.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:50:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:49:58
2025-11-17T21:50:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:50:15.057 [DEBUG] [Thread-61890] [transport.py] [_log()] starting thread (client mode): 0xd31533a0
2025-11-17T21:50:15.057 [DEBUG] [Thread-61890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:50:15.077 [DEBUG] [Thread-61890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:50:15.077 [INFO] [Thread-61890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] client lang: <none>
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] server lang: <none>
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] kex follows: False
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:50:15.081 [DEBUG] [Thread-61890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:50:15.082 [DEBUG] [Thread-61890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:50:15.082 [DEBUG] [Thread-61890] [transport.py] [_log()] Compression: none
2025-11-17T21:50:15.082 [DEBUG] [Thread-61890] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:50:15.097 [DEBUG] [Thread-61890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:50:15.097 [DEBUG] [Thread-61890] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:50:15.098 [DEBUG] [Thread-61890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:50:15.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:50:15.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:50:15.099 [DEBUG] [Thread-61890] [transport.py] [_log()] userauth is OK
2025-11-17T21:50:15.099 [DEBUG] [Thread-61890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:50:15.100 [DEBUG] [Thread-61890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:50:15.100 [DEBUG] [Thread-61890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:50:15.100 [DEBUG] [Thread-61890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:50:15.123 [INFO] [Thread-61890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:50:15.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:50:18.455 [DEBUG] [Thread-61890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:50:18.456 [DEBUG] [Thread-61890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:50:18.456 [DEBUG] [Thread-61890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:50:18.496 [DEBUG] [Thread-61890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:50:18.496 [DEBUG] [Thread-61890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:50:18.499 [DEBUG] [Thread-61890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:50:18.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:50:18.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:50:18.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:50:18.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:50:18.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:50:18.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:50:18.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:50:18.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:50:18.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:50:18.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.826089 -999.00  +15.40  10.20     43   +3.00 1 2 1 1 1     0    0 10.13 -98.00 ZNEsW 13.9 10.2 181.6 16.7 16.1 -23.8 15.9 -22.7 15.8 -22.1 16.0 -23.3
2025-11-17T21:50:18.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:50:18.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:50:18.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.826089
2025-11-17T21:50:18.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:50:18.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:50:18.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:50:18.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:50:18.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:50:18.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:49:58', tmtdew=13.99, humidity=38.75, cloud=0.0, wind=20.1, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:49:58', seeing=2.06, atlas_timestamp='2025-11-17T19:49:34.090', atlas_cloud=2, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:47:00')
2025-11-17T21:50:18.527 [DEBUG] [Thread-61890] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:50:18.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:50:18.625 [DEBUG] [Thread-61893] [transport.py] [_log()] starting thread (client mode): 0xd31cecb0
2025-11-17T21:50:18.625 [DEBUG] [Thread-61893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:50:18.644 [DEBUG] [Thread-61893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:50:18.644 [INFO] [Thread-61893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:50:18.651 [DEBUG] [Thread-61893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] client lang: <none>
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] server lang: <none>
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] kex follows: False
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] Compression: none
2025-11-17T21:50:18.652 [DEBUG] [Thread-61893] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:50:18.712 [DEBUG] [Thread-61893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:50:18.713 [DEBUG] [Thread-61893] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:50:18.713 [DEBUG] [Thread-61893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:50:18.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:50:18.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:50:18.772 [DEBUG] [Thread-61893] [transport.py] [_log()] userauth is OK
2025-11-17T21:50:18.773 [DEBUG] [Thread-61893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:50:18.773 [DEBUG] [Thread-61893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:50:18.773 [DEBUG] [Thread-61893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:50:18.773 [DEBUG] [Thread-61893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:50:18.793 [INFO] [Thread-61893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:50:18.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:50:18.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:50:19.627 [DEBUG] [Thread-61893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:50:19.627 [DEBUG] [Thread-61893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:50:19.675 [DEBUG] [Thread-61893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:50:19.675 [DEBUG] [Thread-61893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:50:19.684 [DEBUG] [Thread-61893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:50:19.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:50:19.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:50:19.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:50:19.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:50:19.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:50:19.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:50:19.720 [DEBUG] [Thread-61893] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:50:27.211 [DEBUG] [Thread-61895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:50:42.260 [DEBUG] [Thread-61896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:50:43.639 [DEBUG] [Thread-61897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:50:49.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:50:49.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:50:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:50:50.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 50, 30), 14.02, 38.66, 0.0, 17.15, 15.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:50:50.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:50:30
2025-11-17T21:50:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:50:50.661 [DEBUG] [Thread-61898] [transport.py] [_log()] starting thread (client mode): 0xd3134df0
2025-11-17T21:50:50.661 [DEBUG] [Thread-61898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:50:50.682 [DEBUG] [Thread-61898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:50:50.682 [INFO] [Thread-61898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:50:50.685 [DEBUG] [Thread-61898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:50:50.685 [DEBUG] [Thread-61898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:50:50.685 [DEBUG] [Thread-61898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:50:50.685 [DEBUG] [Thread-61898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:50:50.685 [DEBUG] [Thread-61898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:50:50.685 [DEBUG] [Thread-61898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:50:50.685 [DEBUG] [Thread-61898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:50:50.685 [DEBUG] [Thread-61898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] client lang: <none>
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] server lang: <none>
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] kex follows: False
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] Compression: none
2025-11-17T21:50:50.686 [DEBUG] [Thread-61898] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:50:50.703 [DEBUG] [Thread-61898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:50:50.703 [DEBUG] [Thread-61898] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:50:50.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:50:50.704 [DEBUG] [Thread-61898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:50:50.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:50:50.706 [DEBUG] [Thread-61898] [transport.py] [_log()] userauth is OK
2025-11-17T21:50:50.706 [DEBUG] [Thread-61898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:50:50.706 [DEBUG] [Thread-61898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:50:50.707 [DEBUG] [Thread-61898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:50:50.707 [DEBUG] [Thread-61898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:50:50.728 [INFO] [Thread-61898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:50:50.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:50:51.379 [DEBUG] [Thread-61898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:50:51.380 [DEBUG] [Thread-61898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:50:51.380 [DEBUG] [Thread-61898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:50:51.421 [DEBUG] [Thread-61898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:50:51.421 [DEBUG] [Thread-61898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:50:51.424 [DEBUG] [Thread-61898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:50:51.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:50:51.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:50:51.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:50:51.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:50:51.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:50:51.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:50:51.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:50:51.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:50:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:50:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.826437 -999.00  +15.40  13.57     43   +3.10 1 1 1 1 1     0    0 10.06 -99.33 ZNESW 16.2 13.6 180.0 19.5 16.1 -23.8 15.9 -22.7 15.7 -22.0 16.0 -23.1
2025-11-17T21:50:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:50:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:50:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.826437
2025-11-17T21:50:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:50:51.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:50:51.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:50:51.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:50:51.449 [DEBUG] [Thread-61898] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:50:51.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:50:51.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:50:30', tmtdew=14.02, humidity=38.66, cloud=0.0, wind=17.15, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:50:30', seeing=2.25, atlas_timestamp='2025-11-17T19:50:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:47:00')
2025-11-17T21:50:51.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:50:51.550 [DEBUG] [Thread-61901] [transport.py] [_log()] starting thread (client mode): 0xd0703ca0
2025-11-17T21:50:51.550 [DEBUG] [Thread-61901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:50:51.565 [DEBUG] [Thread-61901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:50:51.565 [INFO] [Thread-61901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:50:51.572 [DEBUG] [Thread-61901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:50:51.572 [DEBUG] [Thread-61901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] client lang: <none>
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] server lang: <none>
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] kex follows: False
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:50:51.573 [DEBUG] [Thread-61901] [transport.py] [_log()] Compression: none
2025-11-17T21:50:51.574 [DEBUG] [Thread-61901] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:50:51.632 [DEBUG] [Thread-61901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:50:51.632 [DEBUG] [Thread-61901] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:50:51.633 [DEBUG] [Thread-61901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:50:51.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:50:51.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:50:51.688 [DEBUG] [Thread-61901] [transport.py] [_log()] userauth is OK
2025-11-17T21:50:51.688 [DEBUG] [Thread-61901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:50:51.689 [DEBUG] [Thread-61901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:50:51.689 [DEBUG] [Thread-61901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:50:51.689 [DEBUG] [Thread-61901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:50:51.708 [INFO] [Thread-61901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:50:51.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:50:51.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:50:52.566 [DEBUG] [Thread-61901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:50:52.566 [DEBUG] [Thread-61901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:50:52.613 [DEBUG] [Thread-61901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:50:52.613 [DEBUG] [Thread-61901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:50:52.622 [DEBUG] [Thread-61901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:50:52.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:50:52.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:50:52.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:50:52.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:50:52.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:50:52.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:50:52.656 [DEBUG] [Thread-61901] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:50:54.318 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:50:54.320 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:50:57.291 [DEBUG] [Thread-61903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:51:12.328 [DEBUG] [Thread-61904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:51:22.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:51:22.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:51:22.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:51:23.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 51, 2), 13.99, 38.72, 0.0, 19.3, 15.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:51:23.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:51:02
2025-11-17T21:51:23.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:51:23.598 [DEBUG] [Thread-61905] [transport.py] [_log()] starting thread (client mode): 0xd0701c30
2025-11-17T21:51:23.598 [DEBUG] [Thread-61905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:51:23.618 [DEBUG] [Thread-61905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:51:23.618 [INFO] [Thread-61905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:51:23.621 [DEBUG] [Thread-61905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:51:23.621 [DEBUG] [Thread-61905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:51:23.621 [DEBUG] [Thread-61905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:51:23.621 [DEBUG] [Thread-61905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:51:23.621 [DEBUG] [Thread-61905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:51:23.621 [DEBUG] [Thread-61905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] client lang: <none>
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] server lang: <none>
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] kex follows: False
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] Compression: none
2025-11-17T21:51:23.622 [DEBUG] [Thread-61905] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:51:23.640 [DEBUG] [Thread-61905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:51:23.641 [DEBUG] [Thread-61905] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:51:23.641 [DEBUG] [Thread-61905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:51:23.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:51:23.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:51:23.643 [DEBUG] [Thread-61905] [transport.py] [_log()] userauth is OK
2025-11-17T21:51:23.643 [DEBUG] [Thread-61905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:51:23.643 [DEBUG] [Thread-61905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:51:23.644 [DEBUG] [Thread-61905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:51:23.644 [DEBUG] [Thread-61905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:51:23.666 [INFO] [Thread-61905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:51:23.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:51:24.424 [DEBUG] [Thread-61905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:51:24.424 [DEBUG] [Thread-61905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:51:24.425 [DEBUG] [Thread-61905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:51:24.465 [DEBUG] [Thread-61905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:51:24.466 [DEBUG] [Thread-61905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:51:24.468 [DEBUG] [Thread-61905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:51:24.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:51:24.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:51:24.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:51:24.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:51:24.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:51:24.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:51:24.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:51:24.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:51:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:51:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.826784 -999.00  +15.40  12.00     43   +3.00 1 1 1 1 1     0    0 10.34 -92.08 ZNESW 11.2 12.0 185.7 21.1 16.0 -23.7 15.9 -22.7 15.7 -22.0 16.0 -23.0
2025-11-17T21:51:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:51:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:51:24.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.826784
2025-11-17T21:51:24.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:51:24.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:51:24.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:51:24.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:51:24.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:51:24.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:51:02', tmtdew=13.99, humidity=38.72, cloud=0.0, wind=19.3, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:51:02', seeing=2.35, atlas_timestamp='2025-11-17T19:50:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:47:00')
2025-11-17T21:51:24.497 [DEBUG] [Thread-61905] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:51:24.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:51:24.593 [DEBUG] [Thread-61908] [transport.py] [_log()] starting thread (client mode): 0xd3150e80
2025-11-17T21:51:24.593 [DEBUG] [Thread-61908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:51:24.609 [DEBUG] [Thread-61908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:51:24.609 [INFO] [Thread-61908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:51:24.617 [DEBUG] [Thread-61908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:51:24.617 [DEBUG] [Thread-61908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:51:24.617 [DEBUG] [Thread-61908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:51:24.617 [DEBUG] [Thread-61908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:51:24.617 [DEBUG] [Thread-61908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:51:24.617 [DEBUG] [Thread-61908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:51:24.617 [DEBUG] [Thread-61908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:51:24.617 [DEBUG] [Thread-61908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] client lang: <none>
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] server lang: <none>
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] kex follows: False
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:51:24.618 [DEBUG] [Thread-61908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:51:24.619 [DEBUG] [Thread-61908] [transport.py] [_log()] Compression: none
2025-11-17T21:51:24.619 [DEBUG] [Thread-61908] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:51:24.681 [DEBUG] [Thread-61908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:51:24.681 [DEBUG] [Thread-61908] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:51:24.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:51:24.683 [DEBUG] [Thread-61908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:51:24.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:51:24.737 [DEBUG] [Thread-61908] [transport.py] [_log()] userauth is OK
2025-11-17T21:51:24.737 [DEBUG] [Thread-61908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:51:24.737 [DEBUG] [Thread-61908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:51:24.737 [DEBUG] [Thread-61908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:51:24.737 [DEBUG] [Thread-61908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:51:24.759 [INFO] [Thread-61908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:51:24.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:51:24.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:51:25.595 [DEBUG] [Thread-61908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:51:25.595 [DEBUG] [Thread-61908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:51:25.643 [DEBUG] [Thread-61908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:51:25.643 [DEBUG] [Thread-61908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:51:25.651 [DEBUG] [Thread-61908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:51:25.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:51:25.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:51:25.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:51:25.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:51:25.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:51:25.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:51:25.684 [DEBUG] [Thread-61908] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:51:27.355 [DEBUG] [Thread-61910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:51:42.398 [DEBUG] [Thread-61911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:51:43.696 [DEBUG] [Thread-61912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:51:54.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:51:54.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:51:55.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:51:55.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:51:55.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:51:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 51, 34), 13.96, 38.82, 0.0, 17.73, 15.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:51:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:51:34
2025-11-17T21:51:56.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:51:56.662 [DEBUG] [Thread-61913] [transport.py] [_log()] starting thread (client mode): 0xd0700070
2025-11-17T21:51:56.662 [DEBUG] [Thread-61913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:51:56.683 [DEBUG] [Thread-61913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:51:56.683 [INFO] [Thread-61913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] client lang: <none>
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] server lang: <none>
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] kex follows: False
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] Compression: none
2025-11-17T21:51:56.686 [DEBUG] [Thread-61913] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:51:56.708 [DEBUG] [Thread-61913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:51:56.708 [DEBUG] [Thread-61913] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:51:56.709 [DEBUG] [Thread-61913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:51:56.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:51:56.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:51:56.711 [DEBUG] [Thread-61913] [transport.py] [_log()] userauth is OK
2025-11-17T21:51:56.711 [DEBUG] [Thread-61913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:51:56.711 [DEBUG] [Thread-61913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:51:56.711 [DEBUG] [Thread-61913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:51:56.711 [DEBUG] [Thread-61913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:51:56.734 [INFO] [Thread-61913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:51:56.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:51:57.369 [DEBUG] [Thread-61913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:51:57.369 [DEBUG] [Thread-61913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:51:57.369 [DEBUG] [Thread-61913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:51:57.409 [DEBUG] [Thread-61913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:51:57.409 [DEBUG] [Thread-61913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:51:57.412 [DEBUG] [Thread-61913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:51:57.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:51:57.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:51:57.427 [DEBUG] [Thread-61915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:51:57.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:51:57.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:51:57.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:51:57.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:51:57.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:51:57.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:51:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:51:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.827478 -999.00  +15.40   9.94     43   +3.00 1 2 1 1 1     0    0 10.29 -84.27 ZNEsW 10.8 9.9 182.5 19.0 16.0 -23.7 15.9 -22.6 15.7 -21.9 16.0 -22.9
2025-11-17T21:51:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:51:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:51:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.827478
2025-11-17T21:51:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:51:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:51:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:51:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:51:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:51:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:51:34', tmtdew=13.96, humidity=38.82, cloud=0.0, wind=17.73, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:51:34', seeing=2.35, atlas_timestamp='2025-11-17T19:51:34.099', atlas_cloud=2, atlas_rain=1, zp_data=[0.05274999999999963, 0.0832499999999996, 0.08375000000000021, 0.067499999999999, 0.08450000000000024, 0.12424999999999997, 0.09849999999999959, 0.03675000000000139, 0.0990000000000002, 0.08200000000000074, 0.1457499999999996, 0.14300000000000068, 0.14400000000000013, 0.0752499999999987, 0.027999999999998693, 0.028999999999999915, 0.10074999999999967, 0.18650000000000055, 0.23499999999999943, 0.31824999999999903, 0.2749999999999986, 0.1377499999999987, 0.03575000000000017, 0.028750000000000497, 0.08750000000000036, 0.27149999999999963, 0.39424999999999955, 0.6965000000000003, 0.6480000000000006, 0.02450000000000152, 0.05349999999999966, 0.07800000000000118, 0.08874999999999922], zp_timestamp='2025-11-17T19:47:00')
2025-11-17T21:51:57.438 [DEBUG] [Thread-61913] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:51:57.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:51:57.544 [DEBUG] [Thread-61917] [transport.py] [_log()] starting thread (client mode): 0xd0700100
2025-11-17T21:51:57.544 [DEBUG] [Thread-61917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:51:57.560 [DEBUG] [Thread-61917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:51:57.560 [INFO] [Thread-61917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:51:57.567 [DEBUG] [Thread-61917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:51:57.567 [DEBUG] [Thread-61917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:51:57.568 [DEBUG] [Thread-61917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:51:57.568 [DEBUG] [Thread-61917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:51:57.568 [DEBUG] [Thread-61917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:51:57.568 [DEBUG] [Thread-61917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:51:57.568 [DEBUG] [Thread-61917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:51:57.568 [DEBUG] [Thread-61917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:51:57.568 [DEBUG] [Thread-61917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:51:57.568 [DEBUG] [Thread-61917] [transport.py] [_log()] client lang: <none>
2025-11-17T21:51:57.569 [DEBUG] [Thread-61917] [transport.py] [_log()] server lang: <none>
2025-11-17T21:51:57.569 [DEBUG] [Thread-61917] [transport.py] [_log()] kex follows: False
2025-11-17T21:51:57.569 [DEBUG] [Thread-61917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:51:57.569 [DEBUG] [Thread-61917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:51:57.569 [DEBUG] [Thread-61917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:51:57.569 [DEBUG] [Thread-61917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:51:57.570 [DEBUG] [Thread-61917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:51:57.570 [DEBUG] [Thread-61917] [transport.py] [_log()] Compression: none
2025-11-17T21:51:57.570 [DEBUG] [Thread-61917] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:51:57.624 [DEBUG] [Thread-61917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:51:57.625 [DEBUG] [Thread-61917] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:51:57.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:51:57.626 [DEBUG] [Thread-61917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:51:57.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:51:57.680 [DEBUG] [Thread-61917] [transport.py] [_log()] userauth is OK
2025-11-17T21:51:57.681 [DEBUG] [Thread-61917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:51:57.681 [DEBUG] [Thread-61917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:51:57.681 [DEBUG] [Thread-61917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:51:57.681 [DEBUG] [Thread-61917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:51:57.701 [INFO] [Thread-61917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:51:57.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:51:57.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:51:58.532 [DEBUG] [Thread-61917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:51:58.533 [DEBUG] [Thread-61917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:51:58.580 [DEBUG] [Thread-61917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:51:58.580 [DEBUG] [Thread-61917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:51:58.589 [DEBUG] [Thread-61917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:51:58.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:51:58.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:51:58.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:51:58.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:51:58.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:51:58.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:51:58.624 [DEBUG] [Thread-61917] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:52:12.459 [DEBUG] [Thread-61919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:52:27.502 [DEBUG] [Thread-61920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:52:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:52:28.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:52:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:52:29.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 52, 6), 13.97, 38.79, 0.0, 19.14, 15.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:52:29.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:52:06
2025-11-17T21:52:29.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:52:29.567 [DEBUG] [Thread-61921] [transport.py] [_log()] starting thread (client mode): 0xd31cdcc0
2025-11-17T21:52:29.567 [DEBUG] [Thread-61921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:52:29.587 [DEBUG] [Thread-61921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:52:29.587 [INFO] [Thread-61921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:52:29.590 [DEBUG] [Thread-61921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:52:29.590 [DEBUG] [Thread-61921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:52:29.590 [DEBUG] [Thread-61921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:52:29.590 [DEBUG] [Thread-61921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:52:29.590 [DEBUG] [Thread-61921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] client lang: <none>
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] server lang: <none>
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] kex follows: False
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] Compression: none
2025-11-17T21:52:29.591 [DEBUG] [Thread-61921] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:52:29.610 [DEBUG] [Thread-61921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:52:29.610 [DEBUG] [Thread-61921] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:52:29.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:52:29.611 [DEBUG] [Thread-61921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:52:29.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:52:29.613 [DEBUG] [Thread-61921] [transport.py] [_log()] userauth is OK
2025-11-17T21:52:29.613 [DEBUG] [Thread-61921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:52:29.614 [DEBUG] [Thread-61921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:52:29.614 [DEBUG] [Thread-61921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:52:29.614 [DEBUG] [Thread-61921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:52:29.635 [INFO] [Thread-61921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:52:29.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:52:30.281 [DEBUG] [Thread-61921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:52:30.282 [DEBUG] [Thread-61921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:52:30.282 [DEBUG] [Thread-61921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:52:30.322 [DEBUG] [Thread-61921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:52:30.322 [DEBUG] [Thread-61921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:52:30.324 [DEBUG] [Thread-61921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:52:30.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:52:30.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:52:30.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:52:30.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:52:30.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:52:30.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:52:30.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:52:30.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.827825 -999.00  +15.40  17.60     43   +3.00 1 2 1 1 1     0    0 10.27 -80.71 ZNEsW 14.8 17.6 187.6 18.5 16.0 -23.6 15.9 -22.7 15.7 -21.9 16.0 -22.9
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.827825
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:52:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:52:06', tmtdew=13.97, humidity=38.79, cloud=0.0, wind=19.14, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:52:06', seeing=1.64, atlas_timestamp='2025-11-17T19:52:04.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:50:00')
2025-11-17T21:52:30.342 [DEBUG] [Thread-61921] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:52:30.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:52:30.431 [DEBUG] [Thread-61924] [transport.py] [_log()] starting thread (client mode): 0xd07014e0
2025-11-17T21:52:30.431 [DEBUG] [Thread-61924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:52:30.445 [DEBUG] [Thread-61924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:52:30.445 [INFO] [Thread-61924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] client lang: <none>
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] server lang: <none>
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] kex follows: False
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] Compression: none
2025-11-17T21:52:30.453 [DEBUG] [Thread-61924] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:52:30.511 [DEBUG] [Thread-61924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:52:30.512 [DEBUG] [Thread-61924] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:52:30.512 [DEBUG] [Thread-61924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:52:30.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:52:30.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:52:30.568 [DEBUG] [Thread-61924] [transport.py] [_log()] userauth is OK
2025-11-17T21:52:30.568 [DEBUG] [Thread-61924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:52:30.568 [DEBUG] [Thread-61924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:52:30.568 [DEBUG] [Thread-61924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:52:30.568 [DEBUG] [Thread-61924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:52:30.585 [INFO] [Thread-61924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:52:30.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:52:30.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:52:31.429 [DEBUG] [Thread-61924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:52:31.429 [DEBUG] [Thread-61924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:52:31.477 [DEBUG] [Thread-61924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:52:31.477 [DEBUG] [Thread-61924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:52:31.485 [DEBUG] [Thread-61924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:52:31.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:52:31.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:52: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
2025-11-17T21:52:31.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:52:31.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:52:31.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:52:31.517 [DEBUG] [Thread-61924] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:52:42.529 [DEBUG] [Thread-61926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:52:43.753 [DEBUG] [Thread-61927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:52:54.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:52:54.725 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:52:57.578 [DEBUG] [Thread-61928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:53:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:53:01.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:53:01.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:53:02.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 52, 38), 13.98, 38.75, 0.0, 21.01, 15.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:53:02.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:52:38
2025-11-17T21:53:02.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:53:02.456 [DEBUG] [Thread-61929] [transport.py] [_log()] starting thread (client mode): 0xd0757940
2025-11-17T21:53:02.456 [DEBUG] [Thread-61929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:53:02.475 [DEBUG] [Thread-61929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:53:02.476 [INFO] [Thread-61929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:53:02.479 [DEBUG] [Thread-61929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:53:02.479 [DEBUG] [Thread-61929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:53:02.479 [DEBUG] [Thread-61929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:53:02.479 [DEBUG] [Thread-61929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:53:02.479 [DEBUG] [Thread-61929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:53:02.479 [DEBUG] [Thread-61929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:53:02.479 [DEBUG] [Thread-61929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] client lang: <none>
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] server lang: <none>
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] kex follows: False
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] Compression: none
2025-11-17T21:53:02.480 [DEBUG] [Thread-61929] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:53:02.488 [DEBUG] [Thread-61929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:53:02.489 [DEBUG] [Thread-61929] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:53:02.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:53:02.490 [DEBUG] [Thread-61929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:53:02.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:53:02.491 [DEBUG] [Thread-61929] [transport.py] [_log()] userauth is OK
2025-11-17T21:53:02.492 [DEBUG] [Thread-61929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:53:02.492 [DEBUG] [Thread-61929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:53:02.492 [DEBUG] [Thread-61929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:53:02.492 [DEBUG] [Thread-61929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:53:02.527 [INFO] [Thread-61929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:53:02.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:53:03.174 [DEBUG] [Thread-61929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:53:03.174 [DEBUG] [Thread-61929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:53:03.175 [DEBUG] [Thread-61929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:53:03.215 [DEBUG] [Thread-61929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:53:03.216 [DEBUG] [Thread-61929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:53:03.219 [DEBUG] [Thread-61929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:53:03.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:53:03.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:53:03.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:53:03.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:53:03.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:53:03.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:53:03.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:53:03.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:53:03.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:53:03.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.828173 -999.00  +15.40  14.70     43   +3.10 1 2 1 1 1     0    0 10.42 -77.97 ZNEsW 11.6 14.7 200.6 19.6 16.0 -23.6 15.9 -22.6 15.7 -21.9 15.9 -22.8
2025-11-17T21:53:03.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:53:03.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:53:03.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.828173
2025-11-17T21:53:03.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:53:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:53:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:53:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:53:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:53:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:52:38', tmtdew=13.98, humidity=38.75, cloud=0.0, wind=21.01, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:52:38', seeing=1.81, atlas_timestamp='2025-11-17T19:52:34.147', atlas_cloud=2, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:50:00')
2025-11-17T21:53:03.246 [DEBUG] [Thread-61929] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:53:03.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:53:03.344 [DEBUG] [Thread-61932] [transport.py] [_log()] starting thread (client mode): 0xd0700a90
2025-11-17T21:53:03.344 [DEBUG] [Thread-61932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:53:03.359 [DEBUG] [Thread-61932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:53:03.359 [INFO] [Thread-61932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:53:03.367 [DEBUG] [Thread-61932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:53:03.367 [DEBUG] [Thread-61932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:53:03.367 [DEBUG] [Thread-61932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:53:03.367 [DEBUG] [Thread-61932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:53:03.367 [DEBUG] [Thread-61932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:53:03.367 [DEBUG] [Thread-61932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:53:03.367 [DEBUG] [Thread-61932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] client lang: <none>
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] server lang: <none>
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] kex follows: False
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:53:03.368 [DEBUG] [Thread-61932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:53:03.369 [DEBUG] [Thread-61932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:53:03.369 [DEBUG] [Thread-61932] [transport.py] [_log()] Compression: none
2025-11-17T21:53:03.369 [DEBUG] [Thread-61932] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:53:03.425 [DEBUG] [Thread-61932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:53:03.426 [DEBUG] [Thread-61932] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:53:03.426 [DEBUG] [Thread-61932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:53:03.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:53:03.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:53:03.485 [DEBUG] [Thread-61932] [transport.py] [_log()] userauth is OK
2025-11-17T21:53:03.485 [DEBUG] [Thread-61932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:53:03.485 [DEBUG] [Thread-61932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:53:03.485 [DEBUG] [Thread-61932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:53:03.485 [DEBUG] [Thread-61932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:53:03.506 [INFO] [Thread-61932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:53:03.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:53:03.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:53:04.432 [DEBUG] [Thread-61932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:53:04.432 [DEBUG] [Thread-61932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:53:04.480 [DEBUG] [Thread-61932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:53:04.480 [DEBUG] [Thread-61932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:53:04.489 [DEBUG] [Thread-61932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:53:04.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:53:04.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:53:04.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:53:04.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:53:04.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:53:04.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:53:04.523 [DEBUG] [Thread-61932] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:53:12.605 [DEBUG] [Thread-61934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:53:27.637 [DEBUG] [Thread-61935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:53:34.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:53:34.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:53:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:53:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 53, 10), 13.94, 38.87, 0.0, 20.56, 15.36, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:53:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:53:10
2025-11-17T21:53:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:53:35.467 [DEBUG] [Thread-61936] [transport.py] [_log()] starting thread (client mode): 0xd0712350
2025-11-17T21:53:35.467 [DEBUG] [Thread-61936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:53:35.487 [DEBUG] [Thread-61936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:53:35.487 [INFO] [Thread-61936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:53:35.490 [DEBUG] [Thread-61936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:53:35.490 [DEBUG] [Thread-61936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:53:35.490 [DEBUG] [Thread-61936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:53:35.490 [DEBUG] [Thread-61936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] client lang: <none>
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] server lang: <none>
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] kex follows: False
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] Compression: none
2025-11-17T21:53:35.491 [DEBUG] [Thread-61936] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:53:35.508 [DEBUG] [Thread-61936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:53:35.509 [DEBUG] [Thread-61936] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:53:35.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:53:35.509 [DEBUG] [Thread-61936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:53:35.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:53:35.512 [DEBUG] [Thread-61936] [transport.py] [_log()] userauth is OK
2025-11-17T21:53:35.512 [DEBUG] [Thread-61936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:53:35.512 [DEBUG] [Thread-61936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:53:35.512 [DEBUG] [Thread-61936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:53:35.512 [DEBUG] [Thread-61936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:53:35.546 [INFO] [Thread-61936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:53:35.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:53:36.164 [DEBUG] [Thread-61936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:53:36.174 [DEBUG] [Thread-61936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:53:36.174 [DEBUG] [Thread-61936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:53:36.205 [DEBUG] [Thread-61936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:53:36.206 [DEBUG] [Thread-61936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:53:36.208 [DEBUG] [Thread-61936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:53:36.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:53:36.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:53:36.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:53:36.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:53:36.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:53:36.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:53:36.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:53:36.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:53:36.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:53:36.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.828520 -999.00  +15.40  10.62     43   +3.00 1 2 1 1 1     0    0 10.76 -79.14 ZNEsW 10.4 10.6 188.8 16.5 16.0 -23.5 15.9 -22.6 15.7 -21.8 15.9 -22.7
2025-11-17T21:53:36.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:53:36.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:53:36.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.828520
2025-11-17T21:53:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:53:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:53:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:53:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:53:36.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:53:36.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:53:10', tmtdew=13.94, humidity=38.87, cloud=0.0, wind=20.56, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:53:10', seeing=1.81, atlas_timestamp='2025-11-17T19:53:04.128', atlas_cloud=2, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:50:00')
2025-11-17T21:53:36.233 [DEBUG] [Thread-61936] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:53:36.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:53:36.329 [DEBUG] [Thread-61939] [transport.py] [_log()] starting thread (client mode): 0xd3151d80
2025-11-17T21:53:36.329 [DEBUG] [Thread-61939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:53:36.346 [DEBUG] [Thread-61939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:53:36.347 [INFO] [Thread-61939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] client lang: <none>
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] server lang: <none>
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] kex follows: False
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:53:36.354 [DEBUG] [Thread-61939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:53:36.355 [DEBUG] [Thread-61939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:53:36.355 [DEBUG] [Thread-61939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:53:36.355 [DEBUG] [Thread-61939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:53:36.355 [DEBUG] [Thread-61939] [transport.py] [_log()] Compression: none
2025-11-17T21:53:36.355 [DEBUG] [Thread-61939] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:53:36.412 [DEBUG] [Thread-61939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:53:36.413 [DEBUG] [Thread-61939] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:53:36.413 [DEBUG] [Thread-61939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:53:36.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:53:36.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:53:36.469 [DEBUG] [Thread-61939] [transport.py] [_log()] userauth is OK
2025-11-17T21:53:36.469 [DEBUG] [Thread-61939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:53:36.469 [DEBUG] [Thread-61939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:53:36.469 [DEBUG] [Thread-61939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:53:36.469 [DEBUG] [Thread-61939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:53:36.488 [INFO] [Thread-61939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:53:36.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:53:36.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:53:37.338 [DEBUG] [Thread-61939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:53:37.338 [DEBUG] [Thread-61939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:53:37.386 [DEBUG] [Thread-61939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:53:37.386 [DEBUG] [Thread-61939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:53:37.395 [DEBUG] [Thread-61939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:53:37.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:53:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:53:37.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:53:37.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:53:37.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:53:37.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:53:37.429 [DEBUG] [Thread-61939] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:53:42.672 [DEBUG] [Thread-61941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:53:43.807 [DEBUG] [Thread-61942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:53:54.928 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:53:54.929 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:53:57.719 [DEBUG] [Thread-61943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:54:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:54:07.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:54:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:54:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 53, 42), 13.92, 38.79, 0.0, 18.69, 15.34, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:54:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:53:42
2025-11-17T21:54:08.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:54:08.345 [DEBUG] [Thread-61944] [transport.py] [_log()] starting thread (client mode): 0xd0713850
2025-11-17T21:54:08.345 [DEBUG] [Thread-61944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:54:08.365 [DEBUG] [Thread-61944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:54:08.365 [INFO] [Thread-61944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:54:08.368 [DEBUG] [Thread-61944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:54:08.368 [DEBUG] [Thread-61944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] client lang: <none>
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] server lang: <none>
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] kex follows: False
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:54:08.369 [DEBUG] [Thread-61944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:54:08.370 [DEBUG] [Thread-61944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:54:08.370 [DEBUG] [Thread-61944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:54:08.370 [DEBUG] [Thread-61944] [transport.py] [_log()] Compression: none
2025-11-17T21:54:08.370 [DEBUG] [Thread-61944] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:54:08.388 [DEBUG] [Thread-61944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:54:08.388 [DEBUG] [Thread-61944] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:54:08.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:54:08.389 [DEBUG] [Thread-61944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:54:08.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:54:08.391 [DEBUG] [Thread-61944] [transport.py] [_log()] userauth is OK
2025-11-17T21:54:08.391 [DEBUG] [Thread-61944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:54:08.392 [DEBUG] [Thread-61944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:54:08.392 [DEBUG] [Thread-61944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:54:08.392 [DEBUG] [Thread-61944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:54:08.409 [INFO] [Thread-61944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:54:08.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:54:09.045 [DEBUG] [Thread-61944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:54:09.046 [DEBUG] [Thread-61944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:54:09.046 [DEBUG] [Thread-61944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:54:09.086 [DEBUG] [Thread-61944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:54:09.086 [DEBUG] [Thread-61944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:54:09.090 [DEBUG] [Thread-61944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:54:09.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:54:09.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:54:09.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:54:09.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:54:09.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:54:09.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:54:09.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:54:09.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:54:09.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:54:09.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.828867 -999.00  +15.30  13.44     43   +3.00 1 2 1 1 1     0    0 10.32 -80.95 ZNEsW 11.7 13.4 183.6 15.0 16.0 -23.6 15.9 -22.7 15.7 -21.8 15.9 -23.0
2025-11-17T21:54:09.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:54:09.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:54:09.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.828867
2025-11-17T21:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T21:54:09.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:53:42', tmtdew=13.92, humidity=38.79, cloud=0.0, wind=18.69, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:53:42', seeing=2.25, atlas_timestamp='2025-11-17T19:53:34.109', atlas_cloud=2, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:50:00')
2025-11-17T21:54:09.107 [DEBUG] [Thread-61944] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:54:09.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:54:09.193 [DEBUG] [Thread-61947] [transport.py] [_log()] starting thread (client mode): 0xd3152230
2025-11-17T21:54:09.193 [DEBUG] [Thread-61947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:54:09.208 [DEBUG] [Thread-61947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:54:09.208 [INFO] [Thread-61947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] client lang: <none>
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] server lang: <none>
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] kex follows: False
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:54:09.216 [DEBUG] [Thread-61947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:54:09.217 [DEBUG] [Thread-61947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:54:09.217 [DEBUG] [Thread-61947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:54:09.217 [DEBUG] [Thread-61947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:54:09.217 [DEBUG] [Thread-61947] [transport.py] [_log()] Compression: none
2025-11-17T21:54:09.217 [DEBUG] [Thread-61947] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:54:09.272 [DEBUG] [Thread-61947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:54:09.273 [DEBUG] [Thread-61947] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:54:09.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:54:09.274 [DEBUG] [Thread-61947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:54:09.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:54:09.329 [DEBUG] [Thread-61947] [transport.py] [_log()] userauth is OK
2025-11-17T21:54:09.329 [DEBUG] [Thread-61947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:54:09.329 [DEBUG] [Thread-61947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:54:09.329 [DEBUG] [Thread-61947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:54:09.329 [DEBUG] [Thread-61947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:54:09.348 [INFO] [Thread-61947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:54:09.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:54:09.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:54:10.238 [DEBUG] [Thread-61947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:54:10.239 [DEBUG] [Thread-61947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:54:10.286 [DEBUG] [Thread-61947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:54:10.286 [DEBUG] [Thread-61947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:54:10.295 [DEBUG] [Thread-61947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:54:10.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:54:10.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:54:10.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:54:10.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:54:10.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:54:10.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:54:10.330 [DEBUG] [Thread-61947] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:54:12.749 [DEBUG] [Thread-61949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:54:27.784 [DEBUG] [Thread-61950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:54:40.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:54:40.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:54:40.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:54:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 54, 14), 13.93, 38.74, 0.0, 18.79, 15.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:54:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:54:14
2025-11-17T21:54:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:54:41.298 [DEBUG] [Thread-61951] [transport.py] [_log()] starting thread (client mode): 0xd31cc9a0
2025-11-17T21:54:41.298 [DEBUG] [Thread-61951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:54:41.318 [DEBUG] [Thread-61951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:54:41.318 [INFO] [Thread-61951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] client lang: <none>
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] server lang: <none>
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] kex follows: False
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] Compression: none
2025-11-17T21:54:41.321 [DEBUG] [Thread-61951] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:54:41.337 [DEBUG] [Thread-61951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:54:41.337 [DEBUG] [Thread-61951] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:54:41.338 [DEBUG] [Thread-61951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:54:41.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:54:41.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:54:41.339 [DEBUG] [Thread-61951] [transport.py] [_log()] userauth is OK
2025-11-17T21:54:41.340 [DEBUG] [Thread-61951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:54:41.340 [DEBUG] [Thread-61951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:54:41.340 [DEBUG] [Thread-61951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:54:41.340 [DEBUG] [Thread-61951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:54:41.360 [INFO] [Thread-61951] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:54:41.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:54:42.023 [DEBUG] [Thread-61951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:54:42.023 [DEBUG] [Thread-61951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:54:42.023 [DEBUG] [Thread-61951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:54:42.063 [DEBUG] [Thread-61951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:54:42.063 [DEBUG] [Thread-61951] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:54:42.066 [DEBUG] [Thread-61951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:54:42.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:54:42.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:54:42.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:54:42.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:54:42.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:54:42.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:54:42.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:54:42.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:54:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:54:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.829273 -999.00  +15.30  13.85     43   +3.10 1 1 1 1 1     0    0 10.54 -80.64 ZNESW 14.2 13.8 189.4 18.3 15.9 -23.3 15.8 -22.5 15.6 -21.7 15.9 -22.7
2025-11-17T21:54:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:54:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:54:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.829273
2025-11-17T21:54:42.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:54:42.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:54:42.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:54:42.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:54:42.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:54:42.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:54:14', tmtdew=13.93, humidity=38.74, cloud=0.0, wind=18.79, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:54:14', seeing=2.05, atlas_timestamp='2025-11-17T19:54:09.187', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:50:00')
2025-11-17T21:54:42.091 [DEBUG] [Thread-61951] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:54:42.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:54:42.197 [DEBUG] [Thread-61954] [transport.py] [_log()] starting thread (client mode): 0xd31cdff0
2025-11-17T21:54:42.197 [DEBUG] [Thread-61954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:54:42.212 [DEBUG] [Thread-61954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:54:42.212 [INFO] [Thread-61954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:54:42.219 [DEBUG] [Thread-61954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:54:42.220 [DEBUG] [Thread-61954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:54:42.220 [DEBUG] [Thread-61954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:54:42.220 [DEBUG] [Thread-61954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:54:42.220 [DEBUG] [Thread-61954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:54:42.220 [DEBUG] [Thread-61954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:54:42.220 [DEBUG] [Thread-61954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:54:42.220 [DEBUG] [Thread-61954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:54:42.220 [DEBUG] [Thread-61954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] client lang: <none>
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] server lang: <none>
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] kex follows: False
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:54:42.221 [DEBUG] [Thread-61954] [transport.py] [_log()] Compression: none
2025-11-17T21:54:42.222 [DEBUG] [Thread-61954] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:54:42.284 [DEBUG] [Thread-61954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:54:42.284 [DEBUG] [Thread-61954] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:54:42.285 [DEBUG] [Thread-61954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:54:42.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:54:42.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:54:42.340 [DEBUG] [Thread-61954] [transport.py] [_log()] userauth is OK
2025-11-17T21:54:42.340 [DEBUG] [Thread-61954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:54:42.340 [DEBUG] [Thread-61954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:54:42.340 [DEBUG] [Thread-61954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:54:42.340 [DEBUG] [Thread-61954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:54:42.357 [INFO] [Thread-61954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:54:42.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:54:42.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:54:42.811 [DEBUG] [Thread-61956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:54:43.183 [DEBUG] [Thread-61954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:54:43.183 [DEBUG] [Thread-61954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:54:43.230 [DEBUG] [Thread-61954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:54:43.230 [DEBUG] [Thread-61954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:54:43.239 [DEBUG] [Thread-61954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:54:43.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:54:43.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:54:43.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:54:43.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:54:43.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:54:43.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:54:43.275 [DEBUG] [Thread-61954] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:54:43.888 [DEBUG] [Thread-61957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:54:55.163 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:54:55.164 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:54:57.853 [DEBUG] [Thread-61958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:55:12.880 [DEBUG] [Thread-61959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:55:13.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:55:13.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:55:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:55:13.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 54, 46), 13.91, 38.79, 0.0, 22.71, 15.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:55:13.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:54:46
2025-11-17T21:55:14.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:55:14.203 [DEBUG] [Thread-61960] [transport.py] [_log()] starting thread (client mode): 0xd0701990
2025-11-17T21:55:14.203 [DEBUG] [Thread-61960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:55:14.224 [DEBUG] [Thread-61960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:55:14.224 [INFO] [Thread-61960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:55:14.227 [DEBUG] [Thread-61960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] client lang: <none>
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] server lang: <none>
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] kex follows: False
2025-11-17T21:55:14.228 [DEBUG] [Thread-61960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:55:14.229 [DEBUG] [Thread-61960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:55:14.229 [DEBUG] [Thread-61960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:55:14.229 [DEBUG] [Thread-61960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:55:14.229 [DEBUG] [Thread-61960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:55:14.229 [DEBUG] [Thread-61960] [transport.py] [_log()] Compression: none
2025-11-17T21:55:14.229 [DEBUG] [Thread-61960] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:55:14.247 [DEBUG] [Thread-61960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:55:14.248 [DEBUG] [Thread-61960] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:55:14.249 [DEBUG] [Thread-61960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:55:14.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:55:14.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:55:14.251 [DEBUG] [Thread-61960] [transport.py] [_log()] userauth is OK
2025-11-17T21:55:14.251 [DEBUG] [Thread-61960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:55:14.251 [DEBUG] [Thread-61960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:55:14.251 [DEBUG] [Thread-61960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:55:14.251 [DEBUG] [Thread-61960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:55:14.268 [INFO] [Thread-61960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:55:14.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:55:14.851 [DEBUG] [Thread-61960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:55:14.851 [DEBUG] [Thread-61960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:55:14.851 [DEBUG] [Thread-61960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:55:14.892 [DEBUG] [Thread-61960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:55:14.892 [DEBUG] [Thread-61960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:55:14.895 [DEBUG] [Thread-61960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:55:14.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:55:14.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:55:14.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:55:14.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:55:14.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:55:14.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:55:14.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:55:14.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:55:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:55:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.829908 -999.00  +15.40  18.29     43   +3.10 1 1 1 1 1     0    0 10.69 -76.01 ZNESW 17.2 18.3 186.4 23.9 15.9 -23.3 15.8 -22.5 15.7 -21.7 15.9 -22.6
2025-11-17T21:55:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:55:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:55:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.829908
2025-11-17T21:55:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:55:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:55:14.919 [DEBUG] [Thread-61960] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:55:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:55:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:55:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:55:14.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:54:46', tmtdew=13.91, humidity=38.79, cloud=0.0, wind=22.71, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:54:47', seeing=1.8, atlas_timestamp='2025-11-17T19:55:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:54:00')
2025-11-17T21:55:15.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:55:15.015 [DEBUG] [Thread-61963] [transport.py] [_log()] starting thread (client mode): 0xd0757e80
2025-11-17T21:55:15.016 [DEBUG] [Thread-61963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:55:15.030 [DEBUG] [Thread-61963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:55:15.031 [INFO] [Thread-61963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:55:15.038 [DEBUG] [Thread-61963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:55:15.038 [DEBUG] [Thread-61963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] client lang: <none>
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] server lang: <none>
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] kex follows: False
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] Compression: none
2025-11-17T21:55:15.039 [DEBUG] [Thread-61963] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:55:15.098 [DEBUG] [Thread-61963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:55:15.099 [DEBUG] [Thread-61963] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:55:15.099 [DEBUG] [Thread-61963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:55:15.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:55:15.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:55:15.157 [DEBUG] [Thread-61963] [transport.py] [_log()] userauth is OK
2025-11-17T21:55:15.157 [DEBUG] [Thread-61963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:55:15.157 [DEBUG] [Thread-61963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:55:15.157 [DEBUG] [Thread-61963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:55:15.157 [DEBUG] [Thread-61963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:55:15.176 [INFO] [Thread-61963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:55:15.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:55:15.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:55:15.975 [DEBUG] [Thread-61963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:55:15.976 [DEBUG] [Thread-61963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:55:16.023 [DEBUG] [Thread-61963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:55:16.023 [DEBUG] [Thread-61963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:55:16.032 [DEBUG] [Thread-61963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:55:16.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:55:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:55: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') -> 00000000
2025-11-17T21:55:16.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:55:16.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:55:16.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:55:16.067 [DEBUG] [Thread-61963] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:55:18.822 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:55:27.909 [DEBUG] [Thread-61965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:55:42.948 [DEBUG] [Thread-61966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:55:43.964 [DEBUG] [Thread-61967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:55:46.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:55:46.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:55:46.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:55:46.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 55, 18), 13.88, 38.89, 0.0, 21.16, 15.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:55:46.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:55:18
2025-11-17T21:55:46.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:55:47.076 [DEBUG] [Thread-61968] [transport.py] [_log()] starting thread (client mode): 0xd31cfdf0
2025-11-17T21:55:47.076 [DEBUG] [Thread-61968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:55:47.096 [DEBUG] [Thread-61968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:55:47.096 [INFO] [Thread-61968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:55:47.099 [DEBUG] [Thread-61968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] client lang: <none>
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] server lang: <none>
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] kex follows: False
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] Compression: none
2025-11-17T21:55:47.100 [DEBUG] [Thread-61968] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:55:47.107 [DEBUG] [Thread-61968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:55:47.107 [DEBUG] [Thread-61968] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:55:47.107 [DEBUG] [Thread-61968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:55:47.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:55:47.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:55:47.108 [DEBUG] [Thread-61968] [transport.py] [_log()] userauth is OK
2025-11-17T21:55:47.108 [DEBUG] [Thread-61968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:55:47.108 [DEBUG] [Thread-61968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:55:47.108 [DEBUG] [Thread-61968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:55:47.108 [DEBUG] [Thread-61968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:55:47.126 [INFO] [Thread-61968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:55:47.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:55:47.704 [DEBUG] [Thread-61968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:55:47.704 [DEBUG] [Thread-61968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:55:47.704 [DEBUG] [Thread-61968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:55:47.745 [DEBUG] [Thread-61968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:55:47.745 [DEBUG] [Thread-61968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:55:47.747 [DEBUG] [Thread-61968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:55:47.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:55:47.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:55:47.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:55:47.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:55:47.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:55:47.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:55:47.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:55:47.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:55:47.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:55:47.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.830256 -999.00  +15.40  14.59     43   +3.10 1 1 1 1 1     0    0 10.88 -67.28 ZNESW 13.5 14.6 186.0 21.1 16.0 -23.2 15.8 -22.3 15.6 -21.6 15.9 -22.5
2025-11-17T21:55:47.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:55:47.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:55:47.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.830256
2025-11-17T21:55:47.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:55:47.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:55:47.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:55:47.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:55:47.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:55:47.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:55:18', tmtdew=13.88, humidity=38.89, cloud=0.0, wind=21.16, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:55:19', seeing=1.39, atlas_timestamp='2025-11-17T19:55:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:54:00')
2025-11-17T21:55:47.770 [DEBUG] [Thread-61968] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:55:47.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:55:47.855 [DEBUG] [Thread-61971] [transport.py] [_log()] starting thread (client mode): 0xd0757e80
2025-11-17T21:55:47.855 [DEBUG] [Thread-61971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:55:47.870 [DEBUG] [Thread-61971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:55:47.870 [INFO] [Thread-61971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] client lang: <none>
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] server lang: <none>
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] kex follows: False
2025-11-17T21:55:47.877 [DEBUG] [Thread-61971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:55:47.878 [DEBUG] [Thread-61971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:55:47.878 [DEBUG] [Thread-61971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:55:47.878 [DEBUG] [Thread-61971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:55:47.878 [DEBUG] [Thread-61971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:55:47.878 [DEBUG] [Thread-61971] [transport.py] [_log()] Compression: none
2025-11-17T21:55:47.878 [DEBUG] [Thread-61971] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:55:47.935 [DEBUG] [Thread-61971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:55:47.936 [DEBUG] [Thread-61971] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:55:47.936 [DEBUG] [Thread-61971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:55:47.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:55:47.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:55:47.992 [DEBUG] [Thread-61971] [transport.py] [_log()] userauth is OK
2025-11-17T21:55:47.993 [DEBUG] [Thread-61971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:55:47.993 [DEBUG] [Thread-61971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:55:47.993 [DEBUG] [Thread-61971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:55:47.993 [DEBUG] [Thread-61971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:55:48.007 [INFO] [Thread-61971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:55:48.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:55:48.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:55:48.859 [DEBUG] [Thread-61971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:55:48.859 [DEBUG] [Thread-61971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:55:48.907 [DEBUG] [Thread-61971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:55:48.907 [DEBUG] [Thread-61971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:55:48.915 [DEBUG] [Thread-61971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:55:48.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:55:48.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:55:48.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:55:48.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:55:48.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:55:48.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:55:48.949 [DEBUG] [Thread-61971] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:55:55.367 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:55:55.368 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:55:57.972 [DEBUG] [Thread-61973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:56:13.012 [DEBUG] [Thread-61974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:56:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:56:18.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:56:18.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:56:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 55, 50), 13.88, 38.89, 0.0, 20.13, 15.28, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:56:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:55:50
2025-11-17T21:56:19.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:56:19.913 [DEBUG] [Thread-61975] [transport.py] [_log()] starting thread (client mode): 0xd317ffd0
2025-11-17T21:56:19.914 [DEBUG] [Thread-61975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:56:19.928 [DEBUG] [Thread-61975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:56:19.928 [INFO] [Thread-61975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] client lang: <none>
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] server lang: <none>
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] kex follows: False
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:56:19.930 [DEBUG] [Thread-61975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:56:19.931 [DEBUG] [Thread-61975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:56:19.931 [DEBUG] [Thread-61975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:56:19.931 [DEBUG] [Thread-61975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:56:19.931 [DEBUG] [Thread-61975] [transport.py] [_log()] Compression: none
2025-11-17T21:56:19.931 [DEBUG] [Thread-61975] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:56:19.940 [DEBUG] [Thread-61975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:56:19.941 [DEBUG] [Thread-61975] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:56:19.941 [DEBUG] [Thread-61975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:56:19.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:56:19.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:56:19.942 [DEBUG] [Thread-61975] [transport.py] [_log()] userauth is OK
2025-11-17T21:56:19.942 [DEBUG] [Thread-61975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:56:19.943 [DEBUG] [Thread-61975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:56:19.943 [DEBUG] [Thread-61975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:56:19.943 [DEBUG] [Thread-61975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:56:19.958 [INFO] [Thread-61975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:56:19.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:56:20.614 [DEBUG] [Thread-61975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:56:20.614 [DEBUG] [Thread-61975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:56:20.614 [DEBUG] [Thread-61975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:56:20.654 [DEBUG] [Thread-61975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:56:20.655 [DEBUG] [Thread-61975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:56:20.658 [DEBUG] [Thread-61975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:56:20.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:56:20.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:56:20.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:56:20.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:56:20.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:56:20.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:56:20.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:56:20.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:56:20.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:56:20.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.830256 -999.00  +15.40  14.59     43   +3.10 1 1 1 1 1     0    0 10.88 -67.28 ZNESW 13.5 14.6 186.0 21.1 16.0 -23.2 15.8 -22.3 15.6 -21.6 15.9 -22.5
2025-11-17T21:56:20.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:56:20.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:56:20.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.830256
2025-11-17T21:56:20.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:56:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:56:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:56:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:56:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:56:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:55:50', tmtdew=13.88, humidity=38.89, cloud=0.0, wind=20.13, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:55:51', seeing=1.89, atlas_timestamp='2025-11-17T19:55:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:54:00')
2025-11-17T21:56:20.685 [DEBUG] [Thread-61975] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:56:20.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:56:20.782 [DEBUG] [Thread-61978] [transport.py] [_log()] starting thread (client mode): 0xd317d930
2025-11-17T21:56:20.782 [DEBUG] [Thread-61978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:56:20.797 [DEBUG] [Thread-61978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:56:20.797 [INFO] [Thread-61978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] client lang: <none>
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] server lang: <none>
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] kex follows: False
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:56:20.805 [DEBUG] [Thread-61978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:56:20.806 [DEBUG] [Thread-61978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:56:20.806 [DEBUG] [Thread-61978] [transport.py] [_log()] Compression: none
2025-11-17T21:56:20.806 [DEBUG] [Thread-61978] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:56:20.864 [DEBUG] [Thread-61978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:56:20.865 [DEBUG] [Thread-61978] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:56:20.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:56:20.866 [DEBUG] [Thread-61978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:56:20.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:56:20.921 [DEBUG] [Thread-61978] [transport.py] [_log()] userauth is OK
2025-11-17T21:56:20.921 [DEBUG] [Thread-61978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:56:20.922 [DEBUG] [Thread-61978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:56:20.922 [DEBUG] [Thread-61978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:56:20.922 [DEBUG] [Thread-61978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:56:20.943 [INFO] [Thread-61978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:56:20.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:56:20.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:56:21.785 [DEBUG] [Thread-61978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:56:21.785 [DEBUG] [Thread-61978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:56:21.833 [DEBUG] [Thread-61978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:56:21.833 [DEBUG] [Thread-61978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:56:21.842 [DEBUG] [Thread-61978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:56:21.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:56:21.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:56:21.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:56:21.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:56:21.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:56:21.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:56:21.874 [DEBUG] [Thread-61978] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:56:28.054 [DEBUG] [Thread-61980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:56:43.095 [DEBUG] [Thread-61981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:56:44.037 [DEBUG] [Thread-61982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:56:51.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:56:51.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:56:51.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:56:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 56, 22), 13.89, 38.85, 0.0, 19.55, 15.26, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:56:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:56:22
2025-11-17T21:56:52.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:56:52.829 [DEBUG] [Thread-61983] [transport.py] [_log()] starting thread (client mode): 0xd07842e0
2025-11-17T21:56:52.829 [DEBUG] [Thread-61983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:56:52.851 [DEBUG] [Thread-61983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:56:52.851 [INFO] [Thread-61983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:56:52.854 [DEBUG] [Thread-61983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:56:52.854 [DEBUG] [Thread-61983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] client lang: <none>
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] server lang: <none>
2025-11-17T21:56:52.855 [DEBUG] [Thread-61983] [transport.py] [_log()] kex follows: False
2025-11-17T21:56:52.856 [DEBUG] [Thread-61983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:56:52.856 [DEBUG] [Thread-61983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:56:52.856 [DEBUG] [Thread-61983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:56:52.856 [DEBUG] [Thread-61983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:56:52.856 [DEBUG] [Thread-61983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:56:52.856 [DEBUG] [Thread-61983] [transport.py] [_log()] Compression: none
2025-11-17T21:56:52.856 [DEBUG] [Thread-61983] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:56:52.875 [DEBUG] [Thread-61983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:56:52.876 [DEBUG] [Thread-61983] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:56:52.877 [DEBUG] [Thread-61983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:56:52.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:56:52.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:56:52.879 [DEBUG] [Thread-61983] [transport.py] [_log()] userauth is OK
2025-11-17T21:56:52.879 [DEBUG] [Thread-61983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:56:52.879 [DEBUG] [Thread-61983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:56:52.879 [DEBUG] [Thread-61983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:56:52.879 [DEBUG] [Thread-61983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:56:52.915 [INFO] [Thread-61983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:56:52.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:56:53.530 [DEBUG] [Thread-61983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:56:53.530 [DEBUG] [Thread-61983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:56:53.530 [DEBUG] [Thread-61983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:56:53.571 [DEBUG] [Thread-61983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:56:53.571 [DEBUG] [Thread-61983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:56:53.573 [DEBUG] [Thread-61983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:56:53.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:56:53.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:56:53.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:56:53.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:56:53.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:56:53.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:56:53.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:56:53.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:56:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:56:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.830603 -999.00  +15.40  16.51     43   +3.10 1 1 1 1 1     0    0 10.60 -66.28 ZNESW 15.9 16.5 181.0 22.6 15.9 -23.2 15.8 -22.3 15.6 -21.5 15.9 -22.5
2025-11-17T21:56:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:56:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:56:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.830603
2025-11-17T21:56:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:56:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:56:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:56:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:56:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:56:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:56:22', tmtdew=13.89, humidity=38.85, cloud=0.0, wind=19.55, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:56:22', seeing=2.11, atlas_timestamp='2025-11-17T19:56:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:54:00')
2025-11-17T21:56:53.598 [DEBUG] [Thread-61983] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:56:53.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:56:53.698 [DEBUG] [Thread-61986] [transport.py] [_log()] starting thread (client mode): 0xd317f730
2025-11-17T21:56:53.698 [DEBUG] [Thread-61986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:56:53.717 [DEBUG] [Thread-61986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T21:56:53.717 [INFO] [Thread-61986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] client lang: <none>
2025-11-17T21:56:53.725 [DEBUG] [Thread-61986] [transport.py] [_log()] server lang: <none>
2025-11-17T21:56:53.726 [DEBUG] [Thread-61986] [transport.py] [_log()] kex follows: False
2025-11-17T21:56:53.726 [DEBUG] [Thread-61986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:56:53.726 [DEBUG] [Thread-61986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:56:53.726 [DEBUG] [Thread-61986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:56:53.726 [DEBUG] [Thread-61986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:56:53.726 [DEBUG] [Thread-61986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:56:53.726 [DEBUG] [Thread-61986] [transport.py] [_log()] Compression: none
2025-11-17T21:56:53.726 [DEBUG] [Thread-61986] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:56:53.785 [DEBUG] [Thread-61986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:56:53.785 [DEBUG] [Thread-61986] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:56:53.785 [DEBUG] [Thread-61986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T21:56:53.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T21:56:53.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:56:53.848 [DEBUG] [Thread-61986] [transport.py] [_log()] userauth is OK
2025-11-17T21:56:53.848 [DEBUG] [Thread-61986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:56:53.848 [DEBUG] [Thread-61986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:56:53.848 [DEBUG] [Thread-61986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T21:56:53.848 [DEBUG] [Thread-61986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:56:53.869 [INFO] [Thread-61986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:56:53.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T21:56:53.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:56:54.689 [DEBUG] [Thread-61986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:56:54.689 [DEBUG] [Thread-61986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:56:54.736 [DEBUG] [Thread-61986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:56:54.736 [DEBUG] [Thread-61986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:56:54.745 [DEBUG] [Thread-61986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:56:54.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:56:54.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T21:56:54.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T21:56:54.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:56:54.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:56:54.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:56:54.782 [DEBUG] [Thread-61986] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:56:55.569 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:56:55.570 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:56:58.122 [DEBUG] [Thread-61988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:57:13.160 [DEBUG] [Thread-61989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:57:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T21:57:24.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T21:57:24.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T21:57:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 21, 56, 54), 13.88, 38.9, 0.0, 18.84, 15.31, 0, 0, 0, 2, 0, 0),)
2025-11-17T21:57:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 21:56:54
2025-11-17T21:57:25.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T21:57:25.729 [DEBUG] [Thread-61990] [transport.py] [_log()] starting thread (client mode): 0xd7bc4f40
2025-11-17T21:57:25.729 [DEBUG] [Thread-61990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T21:57:25.738 [DEBUG] [Thread-61990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T21:57:25.739 [INFO] [Thread-61990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] client lang: <none>
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] server lang: <none>
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] kex follows: False
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] Compression: none
2025-11-17T21:57:25.740 [DEBUG] [Thread-61990] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T21:57:25.752 [DEBUG] [Thread-61990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T21:57:25.752 [DEBUG] [Thread-61990] [transport.py] [_log()] Switch to new keys ...
2025-11-17T21:57:25.752 [DEBUG] [Thread-61990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T21:57:25.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T21:57:25.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T21:57:25.755 [DEBUG] [Thread-61990] [transport.py] [_log()] userauth is OK
2025-11-17T21:57:25.756 [DEBUG] [Thread-61990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T21:57:25.756 [DEBUG] [Thread-61990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T21:57:25.756 [DEBUG] [Thread-61990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T21:57:25.756 [DEBUG] [Thread-61990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T21:57:25.769 [INFO] [Thread-61990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T21:57:25.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T21:57:26.387 [DEBUG] [Thread-61990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T21:57:26.387 [DEBUG] [Thread-61990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T21:57:26.387 [DEBUG] [Thread-61990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T21:57:26.428 [DEBUG] [Thread-61990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T21:57:26.428 [DEBUG] [Thread-61990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T21:57:26.430 [DEBUG] [Thread-61990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T21:57:26.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T21:57:26.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T21:57:26.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T21:57:26.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T21:57:26.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T21:57:26.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T21:57:26.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T21:57:26.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T21:57:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T21:57:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.830950 -999.00  +15.30  12.93     43   +3.10 1 1 1 1 1     0    0 10.74 -68.55 ZNESW 14.9 12.9 185.6 17.9 15.9 -23.2 15.8 -22.3 15.6 -21.7 15.9 -22.4
2025-11-17T21:57:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T21:57:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T21:57:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.830950
2025-11-17T21:57:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T21:57:26.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T21:57:26.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T21:57:26.454 [DEBUG] [Thread-61990] [transport.py] [_log()] EOF in transport thread
2025-11-17T21:57:26.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T21:57:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T21:57:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T21:56:54', tmtdew=13.88, humidity=38.9, cloud=0.0, wind=18.84, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T21:56:55', seeing=2.11, atlas_timestamp='2025-11-17T19:56:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1332500000000003, 0.2472499999999993, 0.19399999999999906, 0.18950000000000067, 0.23125000000000107, 0.14199999999999946, 0.0652500000000007, 0.13349999999999973, 0.1225000000000005, 0.2867499999999996, 0.3094999999999999, 0.3224999999999998, 0.13424999999999976, 0.11149999999999949, 0.08449999999999847, 0.1302500000000002, 0.21950000000000003, 0.4239999999999995, 0.4372499999999988, 0.41199999999999903, 0.20374999999999943, 0.06625000000000014, 0.056750000000000966, 0.09799999999999898, 0.2554999999999996, 0.5207500000000005, 0.5575000000000001, 0.7250000000000005, 0.23400000000000176, 0.11000000000000121, 0.08900000000000041, 0.09324999999999939], zp_timestamp='2025-11-17T19:54:00')
2025-11-17T21:57:26.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T21:57:28.190 [DEBUG] [Thread-61993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:57:43.221 [DEBUG] [Thread-61994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:57:44.088 [DEBUG] [Thread-61995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:57:55.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:57:55.773 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:57:58.252 [DEBUG] [Thread-61996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:58:13.283 [DEBUG] [Thread-61997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:58:28.307 [DEBUG] [Thread-61998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:58:43.335 [DEBUG] [Thread-61999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:58:44.146 [DEBUG] [Thread-62000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:58:55.975 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:58:55.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:58:58.363 [DEBUG] [Thread-62001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:59:13.388 [DEBUG] [Thread-62002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:59:28.418 [DEBUG] [Thread-62003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:59:40.731 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T21:59:43.446 [DEBUG] [Thread-62004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:59:44.204 [DEBUG] [Thread-62005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:59:56.188 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:59:56.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T21:59:58.481 [DEBUG] [Thread-62006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:00:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:00:10.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:00:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:00:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 0, 7), 13.78, 39.52, 0.0, 22.29, 15.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:00:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:00:07
2025-11-17T22:00:11.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:00:11.686 [DEBUG] [Thread-62007] [transport.py] [_log()] starting thread (client mode): 0xd7bc7d30
2025-11-17T22:00:11.686 [DEBUG] [Thread-62007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:00:11.705 [DEBUG] [Thread-62007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:00:11.706 [INFO] [Thread-62007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:00:11.708 [DEBUG] [Thread-62007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:00:11.708 [DEBUG] [Thread-62007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:00:11.708 [DEBUG] [Thread-62007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] client lang: <none>
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] server lang: <none>
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] kex follows: False
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] Compression: none
2025-11-17T22:00:11.709 [DEBUG] [Thread-62007] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:00:11.725 [DEBUG] [Thread-62007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:00:11.726 [DEBUG] [Thread-62007] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:00:11.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:00:11.727 [DEBUG] [Thread-62007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:00:11.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:00:11.729 [DEBUG] [Thread-62007] [transport.py] [_log()] userauth is OK
2025-11-17T22:00:11.729 [DEBUG] [Thread-62007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:00:11.729 [DEBUG] [Thread-62007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:00:11.729 [DEBUG] [Thread-62007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:00:11.729 [DEBUG] [Thread-62007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:00:11.749 [INFO] [Thread-62007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:00:11.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:00:12.773 [DEBUG] [Thread-62007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:00:12.774 [DEBUG] [Thread-62007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:00:12.774 [DEBUG] [Thread-62007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:00:12.814 [DEBUG] [Thread-62007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:00:12.815 [DEBUG] [Thread-62007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:00:12.818 [DEBUG] [Thread-62007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:00:12.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:00:12.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:00:12.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:00:12.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:00:12.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:00:12.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:00:12.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:00:12.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:00:12.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:00:12.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.833034 -999.00  +15.20  18.82     44   +3.00 1 1 1 1 1     0    0 11.17 -47.24 ZNESW 15.6 18.8 183.4 22.2 15.9 -23.2 15.7 -22.4 15.6 -21.7 15.8 -22.5
2025-11-17T22:00:12.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:00:12.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:00:12.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.833034
2025-11-17T22:00:12.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:00:12.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:00:12.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:00:12.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:00:12.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:00:12.845 [DEBUG] [Thread-62007] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:00:12.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:00:07', tmtdew=13.78, humidity=39.52, cloud=0.0, wind=22.29, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:00:07', seeing=2.0, atlas_timestamp='2025-11-17T19:59:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.15625, 0.12075000000000102, 0.24024999999999963, 0.25349999999999895, 0.26750000000000007, 0.18625000000000114, 0.1479999999999997, 0.09425000000000061, 0.11949999999999861, 0.16199999999999903, 0.2992499999999989, 0.26900000000000013, 0.307500000000001, 0.24124999999999908, 0.14599999999999902, 0.067499999999999, 0.10125000000000028, 0.30049999999999955, 0.4039999999999999, 0.42324999999999946, 0.5590000000000002, 0.33974999999999866, 0.0912500000000005, 0.0677500000000002, 0.07399999999999984, 0.27250000000000085, 0.4117499999999996, 0.5555000000000003, 0.6805000000000003, 0.3000000000000007, 0.1750000000000007, 0.03500000000000014, 0.06774999999999842], zp_timestamp='2025-11-17T19:56:00')
2025-11-17T22:00:12.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:00:12.944 [DEBUG] [Thread-62010] [transport.py] [_log()] starting thread (client mode): 0xd7bc63b0
2025-11-17T22:00:12.944 [DEBUG] [Thread-62010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:00:12.960 [DEBUG] [Thread-62010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:00:12.960 [INFO] [Thread-62010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:00:12.968 [DEBUG] [Thread-62010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:00:12.968 [DEBUG] [Thread-62010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:00:12.968 [DEBUG] [Thread-62010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:00:12.968 [DEBUG] [Thread-62010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:00:12.968 [DEBUG] [Thread-62010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:00:12.968 [DEBUG] [Thread-62010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] client lang: <none>
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] server lang: <none>
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] kex follows: False
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:00:12.969 [DEBUG] [Thread-62010] [transport.py] [_log()] Compression: none
2025-11-17T22:00:12.970 [DEBUG] [Thread-62010] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:00:13.029 [DEBUG] [Thread-62010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:00:13.030 [DEBUG] [Thread-62010] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:00:13.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:00:13.031 [DEBUG] [Thread-62010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:00:13.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:00:13.085 [DEBUG] [Thread-62010] [transport.py] [_log()] userauth is OK
2025-11-17T22:00:13.086 [DEBUG] [Thread-62010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:00:13.086 [DEBUG] [Thread-62010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:00:13.086 [DEBUG] [Thread-62010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:00:13.086 [DEBUG] [Thread-62010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:00:13.105 [INFO] [Thread-62010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:00:13.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:00:13.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:00:13.513 [DEBUG] [Thread-62012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:00:13.981 [DEBUG] [Thread-62010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:00:13.981 [DEBUG] [Thread-62010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:00:14.029 [DEBUG] [Thread-62010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:00:14.029 [DEBUG] [Thread-62010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:00:14.037 [DEBUG] [Thread-62010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:00:14.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:00:14.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:00:14.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:00:14.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:00:14.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:00:14.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:00:14.069 [DEBUG] [Thread-62010] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:00:28.547 [DEBUG] [Thread-62013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:00:43.576 [DEBUG] [Thread-62014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:00:44.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:00:44.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:00: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
2025-11-17T22:00:44.272 [DEBUG] [Thread-62015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:00:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 0, 39), 13.78, 39.54, 0.0, 23.06, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:00:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:00:39
2025-11-17T22:00:44.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:00:45.029 [DEBUG] [Thread-62016] [transport.py] [_log()] starting thread (client mode): 0xd7bc5900
2025-11-17T22:00:45.029 [DEBUG] [Thread-62016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:00:45.049 [DEBUG] [Thread-62016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:00:45.049 [INFO] [Thread-62016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:00:45.052 [DEBUG] [Thread-62016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:00:45.052 [DEBUG] [Thread-62016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:00:45.052 [DEBUG] [Thread-62016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:00:45.052 [DEBUG] [Thread-62016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:00:45.052 [DEBUG] [Thread-62016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:00:45.052 [DEBUG] [Thread-62016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:00:45.052 [DEBUG] [Thread-62016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:00:45.052 [DEBUG] [Thread-62016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] client lang: <none>
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] server lang: <none>
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] kex follows: False
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] Compression: none
2025-11-17T22:00:45.053 [DEBUG] [Thread-62016] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:00:45.071 [DEBUG] [Thread-62016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:00:45.072 [DEBUG] [Thread-62016] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:00:45.072 [DEBUG] [Thread-62016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:00:45.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:00:45.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:00:45.074 [DEBUG] [Thread-62016] [transport.py] [_log()] userauth is OK
2025-11-17T22:00:45.074 [DEBUG] [Thread-62016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:00:45.074 [DEBUG] [Thread-62016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:00:45.074 [DEBUG] [Thread-62016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:00:45.074 [DEBUG] [Thread-62016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:00:45.092 [INFO] [Thread-62016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:00:45.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:00:45.900 [DEBUG] [Thread-62016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:00:45.901 [DEBUG] [Thread-62016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:00:45.901 [DEBUG] [Thread-62016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:00:45.941 [DEBUG] [Thread-62016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:00:45.941 [DEBUG] [Thread-62016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:00:45.944 [DEBUG] [Thread-62016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:00:45.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:00:45.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:00:45.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:00:45.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:00:45.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:00:45.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:00:45.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:00:45.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:00:45.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:00:45.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.833380 -999.00  +15.20  16.59     44   +3.10 1 1 1 1 1     0    0 11.09 -44.99 ZNESW 21.1 16.6 184.6 20.1 15.9 -23.2 15.7 -22.2 15.5 -21.5 15.8 -22.4
2025-11-17T22:00:45.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:00:45.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:00:45.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.833380
2025-11-17T22:00:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:00:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:00:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:00:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:00:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:00:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:00:39', tmtdew=13.78, humidity=39.54, cloud=0.0, wind=23.06, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:00:39', seeing=2.19, atlas_timestamp='2025-11-17T20:00:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.15625, 0.12075000000000102, 0.24024999999999963, 0.25349999999999895, 0.26750000000000007, 0.18625000000000114, 0.1479999999999997, 0.09425000000000061, 0.11949999999999861, 0.16199999999999903, 0.2992499999999989, 0.26900000000000013, 0.307500000000001, 0.24124999999999908, 0.14599999999999902, 0.067499999999999, 0.10125000000000028, 0.30049999999999955, 0.4039999999999999, 0.42324999999999946, 0.5590000000000002, 0.33974999999999866, 0.0912500000000005, 0.0677500000000002, 0.07399999999999984, 0.27250000000000085, 0.4117499999999996, 0.5555000000000003, 0.6805000000000003, 0.3000000000000007, 0.1750000000000007, 0.03500000000000014, 0.06774999999999842], zp_timestamp='2025-11-17T19:56:00')
2025-11-17T22:00:45.968 [DEBUG] [Thread-62016] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:00:46.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:00:46.062 [DEBUG] [Thread-62019] [transport.py] [_log()] starting thread (client mode): 0xd317df60
2025-11-17T22:00:46.062 [DEBUG] [Thread-62019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:00:46.077 [DEBUG] [Thread-62019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:00:46.077 [INFO] [Thread-62019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:00:46.084 [DEBUG] [Thread-62019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:00:46.084 [DEBUG] [Thread-62019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] client lang: <none>
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] server lang: <none>
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] kex follows: False
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] Compression: none
2025-11-17T22:00:46.085 [DEBUG] [Thread-62019] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:00:46.147 [DEBUG] [Thread-62019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:00:46.148 [DEBUG] [Thread-62019] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:00:46.148 [DEBUG] [Thread-62019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:00:46.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:00:46.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:00:46.205 [DEBUG] [Thread-62019] [transport.py] [_log()] userauth is OK
2025-11-17T22:00:46.205 [DEBUG] [Thread-62019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:00:46.205 [DEBUG] [Thread-62019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:00:46.205 [DEBUG] [Thread-62019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:00:46.205 [DEBUG] [Thread-62019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:00:46.224 [INFO] [Thread-62019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:00:46.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:00:46.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:00:47.076 [DEBUG] [Thread-62019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:00:47.076 [DEBUG] [Thread-62019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:00:47.124 [DEBUG] [Thread-62019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:00:47.124 [DEBUG] [Thread-62019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:00:47.133 [DEBUG] [Thread-62019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:00:47.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:00:47.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:00:47.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:00:47.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:00:47.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:00:47.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:00:47.167 [DEBUG] [Thread-62019] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:00:56.394 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:00:56.395 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:00:58.605 [DEBUG] [Thread-62021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:01:13.644 [DEBUG] [Thread-62022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:01:17.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:01:17.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:01:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:01:17.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 1, 11), 13.81, 39.44, 0.0, 21.37, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:01:17.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:01:11
2025-11-17T22:01:17.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:01:18.144 [DEBUG] [Thread-62023] [transport.py] [_log()] starting thread (client mode): 0xd7bc5930
2025-11-17T22:01:18.144 [DEBUG] [Thread-62023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:01:18.164 [DEBUG] [Thread-62023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:01:18.165 [INFO] [Thread-62023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:01:18.168 [DEBUG] [Thread-62023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:01:18.168 [DEBUG] [Thread-62023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:01:18.168 [DEBUG] [Thread-62023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:01:18.168 [DEBUG] [Thread-62023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] client lang: <none>
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] server lang: <none>
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] kex follows: False
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] Compression: none
2025-11-17T22:01:18.169 [DEBUG] [Thread-62023] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:01:18.187 [DEBUG] [Thread-62023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:01:18.187 [DEBUG] [Thread-62023] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:01:18.187 [DEBUG] [Thread-62023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:01:18.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:01:18.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:01:18.189 [DEBUG] [Thread-62023] [transport.py] [_log()] userauth is OK
2025-11-17T22:01:18.189 [DEBUG] [Thread-62023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:01:18.189 [DEBUG] [Thread-62023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:01:18.189 [DEBUG] [Thread-62023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:01:18.189 [DEBUG] [Thread-62023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:01:18.209 [INFO] [Thread-62023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:01:18.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:01:18.837 [DEBUG] [Thread-62023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:01:18.837 [DEBUG] [Thread-62023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:01:18.837 [DEBUG] [Thread-62023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:01:18.878 [DEBUG] [Thread-62023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:01:18.878 [DEBUG] [Thread-62023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:01:18.881 [DEBUG] [Thread-62023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:01:18.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:01:18.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:01:18.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:01:18.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:01:18.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:01:18.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:01:18.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:01:18.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:01:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:01:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.833728 -999.00  +15.20  13.85     44   +3.00 1 1 1 1 1     0    0 11.22 -41.70 ZNESW 16.6 13.8 173.8 19.1 15.8 -23.1 15.7 -22.3 15.5 -21.5 15.8 -22.5
2025-11-17T22:01:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:01:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:01:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.833728
2025-11-17T22:01:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:01:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:01:18.907 [DEBUG] [Thread-62023] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:01:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:01:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:01:18.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:01:18.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:01:11', tmtdew=13.81, humidity=39.44, cloud=0.0, wind=21.37, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:01:11', seeing=2.17, atlas_timestamp='2025-11-17T20:00:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T19:59:00')
2025-11-17T22:01:18.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:01:19.004 [DEBUG] [Thread-62026] [transport.py] [_log()] starting thread (client mode): 0xd0710df0
2025-11-17T22:01:19.004 [DEBUG] [Thread-62026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:01:19.019 [DEBUG] [Thread-62026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:01:19.019 [INFO] [Thread-62026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:01:19.027 [DEBUG] [Thread-62026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:01:19.027 [DEBUG] [Thread-62026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:01:19.027 [DEBUG] [Thread-62026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:01:19.027 [DEBUG] [Thread-62026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:01:19.027 [DEBUG] [Thread-62026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:01:19.027 [DEBUG] [Thread-62026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] client lang: <none>
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] server lang: <none>
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] kex follows: False
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:01:19.028 [DEBUG] [Thread-62026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:01:19.029 [DEBUG] [Thread-62026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:01:19.029 [DEBUG] [Thread-62026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:01:19.029 [DEBUG] [Thread-62026] [transport.py] [_log()] Compression: none
2025-11-17T22:01:19.029 [DEBUG] [Thread-62026] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:01:19.084 [DEBUG] [Thread-62026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:01:19.084 [DEBUG] [Thread-62026] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:01:19.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:01:19.085 [DEBUG] [Thread-62026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:01:19.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:01:19.140 [DEBUG] [Thread-62026] [transport.py] [_log()] userauth is OK
2025-11-17T22:01:19.141 [DEBUG] [Thread-62026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:01:19.141 [DEBUG] [Thread-62026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:01:19.141 [DEBUG] [Thread-62026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:01:19.141 [DEBUG] [Thread-62026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:01:19.165 [INFO] [Thread-62026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:01:19.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:01:19.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:01:20.019 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:01:20.036 [DEBUG] [Thread-62026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:01:20.036 [DEBUG] [Thread-62026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:01:20.083 [DEBUG] [Thread-62026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:01:20.083 [DEBUG] [Thread-62026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:01:20.092 [DEBUG] [Thread-62026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:01:20.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:01:20.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:01:20.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:01:20.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:01:20.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:01:20.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:01:20.126 [DEBUG] [Thread-62026] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:01:28.672 [DEBUG] [Thread-62028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:01:43.712 [DEBUG] [Thread-62029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:01:44.346 [DEBUG] [Thread-62030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:01:50.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:01:50.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:01:50.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:01:50.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 1, 43), 13.74, 39.49, 0.0, 19.2, 15.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:01:50.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:01:43
2025-11-17T22:01:50.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:01:51.080 [DEBUG] [Thread-62031] [transport.py] [_log()] starting thread (client mode): 0xd0713670
2025-11-17T22:01:51.080 [DEBUG] [Thread-62031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:01:51.100 [DEBUG] [Thread-62031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:01:51.101 [INFO] [Thread-62031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] client lang: <none>
2025-11-17T22:01:51.104 [DEBUG] [Thread-62031] [transport.py] [_log()] server lang: <none>
2025-11-17T22:01:51.105 [DEBUG] [Thread-62031] [transport.py] [_log()] kex follows: False
2025-11-17T22:01:51.105 [DEBUG] [Thread-62031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:01:51.105 [DEBUG] [Thread-62031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:01:51.105 [DEBUG] [Thread-62031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:01:51.105 [DEBUG] [Thread-62031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:01:51.105 [DEBUG] [Thread-62031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:01:51.105 [DEBUG] [Thread-62031] [transport.py] [_log()] Compression: none
2025-11-17T22:01:51.105 [DEBUG] [Thread-62031] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:01:51.123 [DEBUG] [Thread-62031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:01:51.124 [DEBUG] [Thread-62031] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:01:51.124 [DEBUG] [Thread-62031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:01:51.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:01:51.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:01:51.126 [DEBUG] [Thread-62031] [transport.py] [_log()] userauth is OK
2025-11-17T22:01:51.126 [DEBUG] [Thread-62031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:01:51.126 [DEBUG] [Thread-62031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:01:51.126 [DEBUG] [Thread-62031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:01:51.127 [DEBUG] [Thread-62031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:01:51.150 [INFO] [Thread-62031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:01:51.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:01:51.923 [DEBUG] [Thread-62031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:01:51.923 [DEBUG] [Thread-62031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:01:51.924 [DEBUG] [Thread-62031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:01:51.964 [DEBUG] [Thread-62031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:01:51.964 [DEBUG] [Thread-62031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:01:51.967 [DEBUG] [Thread-62031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:01:51.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:01:51.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:01:51.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:01:51.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:01:51.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:01:51.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:01:51.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:01:51.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:01:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:01:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.834075 -999.00  +15.20  18.35     44   +3.00 1 1 1 1 1     0    0 11.27 -44.11 ZNESW 22.1 18.4 181.8 23.5 15.8 -23.2 15.7 -22.4 15.5 -21.5 15.8 -22.4
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.834075
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:01:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:01:43', tmtdew=13.74, humidity=39.49, cloud=0.0, wind=19.2, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:01:43', seeing=2.3, atlas_timestamp='2025-11-17T20:01:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T19:59:00')
2025-11-17T22:01:51.990 [DEBUG] [Thread-62031] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:01:52.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:01:52.079 [DEBUG] [Thread-62034] [transport.py] [_log()] starting thread (client mode): 0xd07103d0
2025-11-17T22:01:52.079 [DEBUG] [Thread-62034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:01:52.094 [DEBUG] [Thread-62034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:01:52.095 [INFO] [Thread-62034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] client lang: <none>
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] server lang: <none>
2025-11-17T22:01:52.106 [DEBUG] [Thread-62034] [transport.py] [_log()] kex follows: False
2025-11-17T22:01:52.107 [DEBUG] [Thread-62034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:01:52.107 [DEBUG] [Thread-62034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:01:52.107 [DEBUG] [Thread-62034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:01:52.107 [DEBUG] [Thread-62034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:01:52.107 [DEBUG] [Thread-62034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:01:52.107 [DEBUG] [Thread-62034] [transport.py] [_log()] Compression: none
2025-11-17T22:01:52.107 [DEBUG] [Thread-62034] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:01:52.163 [DEBUG] [Thread-62034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:01:52.163 [DEBUG] [Thread-62034] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:01:52.164 [DEBUG] [Thread-62034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:01:52.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:01:52.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:01:52.221 [DEBUG] [Thread-62034] [transport.py] [_log()] userauth is OK
2025-11-17T22:01:52.221 [DEBUG] [Thread-62034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:01:52.221 [DEBUG] [Thread-62034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:01:52.222 [DEBUG] [Thread-62034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:01:52.222 [DEBUG] [Thread-62034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:01:52.241 [INFO] [Thread-62034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:01:52.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:01:52.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:01:53.197 [DEBUG] [Thread-62034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:01:53.198 [DEBUG] [Thread-62034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:01:53.249 [DEBUG] [Thread-62034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:01:53.250 [DEBUG] [Thread-62034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:01:53.262 [DEBUG] [Thread-62034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:01:53.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:01:53.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:01:53.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:01:53.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:01:53.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:01:53.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:01:53.297 [DEBUG] [Thread-62034] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:01:56.598 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:01:56.599 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:01:58.738 [DEBUG] [Thread-62036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:02:13.787 [DEBUG] [Thread-62037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:02:23.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:02:23.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:02:23.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:02:23.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 2, 15), 13.73, 39.52, 0.0, 18.58, 15.16, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:02:23.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:02:15
2025-11-17T22:02:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:02:24.249 [DEBUG] [Thread-62038] [transport.py] [_log()] starting thread (client mode): 0xd317d9c0
2025-11-17T22:02:24.250 [DEBUG] [Thread-62038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:02:24.269 [DEBUG] [Thread-62038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:02:24.270 [INFO] [Thread-62038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:02:24.272 [DEBUG] [Thread-62038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] client lang: <none>
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] server lang: <none>
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] kex follows: False
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] Compression: none
2025-11-17T22:02:24.273 [DEBUG] [Thread-62038] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:02:24.291 [DEBUG] [Thread-62038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:02:24.291 [DEBUG] [Thread-62038] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:02:24.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:02:24.292 [DEBUG] [Thread-62038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:02:24.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:02:24.294 [DEBUG] [Thread-62038] [transport.py] [_log()] userauth is OK
2025-11-17T22:02:24.294 [DEBUG] [Thread-62038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:02:24.294 [DEBUG] [Thread-62038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:02:24.295 [DEBUG] [Thread-62038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:02:24.295 [DEBUG] [Thread-62038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:02:24.318 [INFO] [Thread-62038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:02:24.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:02:24.953 [DEBUG] [Thread-62038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:02:24.954 [DEBUG] [Thread-62038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:02:24.954 [DEBUG] [Thread-62038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:02:24.995 [DEBUG] [Thread-62038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:02:24.995 [DEBUG] [Thread-62038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:02:24.998 [DEBUG] [Thread-62038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:02:25.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:02:25.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:02:25.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:02:25.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:02:25.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:02:25.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:02:25.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:02:25.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:02:25.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:02:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.834770 -999.00  +15.10  15.20     44   +3.00 1 1 1 1 1     0    0 11.24 -42.91 ZNESW 19.2 15.2 174.2 20.9 15.8 -23.1 15.7 -22.3 15.4 -21.4 15.8 -22.3
2025-11-17T22:02:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:02:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:02:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.834770
2025-11-17T22:02:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:02:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:02:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:02:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:02:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:02:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:02:15', tmtdew=13.73, humidity=39.52, cloud=0.0, wind=18.58, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:02:15', seeing=2.12, atlas_timestamp='2025-11-17T20:02:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T19:59:00')
2025-11-17T22:02:25.022 [DEBUG] [Thread-62038] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:02:25.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:02:25.120 [DEBUG] [Thread-62041] [transport.py] [_log()] starting thread (client mode): 0xd317fbe0
2025-11-17T22:02:25.120 [DEBUG] [Thread-62041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:02:25.135 [DEBUG] [Thread-62041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:02:25.135 [INFO] [Thread-62041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:02:25.142 [DEBUG] [Thread-62041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:02:25.142 [DEBUG] [Thread-62041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:02:25.142 [DEBUG] [Thread-62041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:02:25.142 [DEBUG] [Thread-62041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:02:25.142 [DEBUG] [Thread-62041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:02:25.142 [DEBUG] [Thread-62041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:02:25.142 [DEBUG] [Thread-62041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] client lang: <none>
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] server lang: <none>
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] kex follows: False
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] Compression: none
2025-11-17T22:02:25.143 [DEBUG] [Thread-62041] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:02:25.207 [DEBUG] [Thread-62041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:02:25.207 [DEBUG] [Thread-62041] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:02:25.208 [DEBUG] [Thread-62041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:02:25.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:02:25.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:02:25.267 [DEBUG] [Thread-62041] [transport.py] [_log()] userauth is OK
2025-11-17T22:02:25.268 [DEBUG] [Thread-62041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:02:25.268 [DEBUG] [Thread-62041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:02:25.268 [DEBUG] [Thread-62041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:02:25.268 [DEBUG] [Thread-62041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:02:25.288 [INFO] [Thread-62041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:02:25.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:02:25.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:02:26.148 [DEBUG] [Thread-62041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:02:26.148 [DEBUG] [Thread-62041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:02:26.195 [DEBUG] [Thread-62041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:02:26.195 [DEBUG] [Thread-62041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:02:26.204 [DEBUG] [Thread-62041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:02:26.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:02: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')
2025-11-17T22:02:26.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:02:26.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:02:26.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:02:26.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:02:26.238 [DEBUG] [Thread-62041] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:02:28.814 [DEBUG] [Thread-62043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:02:43.856 [DEBUG] [Thread-62044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:02:44.425 [DEBUG] [Thread-62045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:02:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:02:56.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:02:56.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:02:56.802 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:02:56.802 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:02:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 2, 47), 13.67, 39.55, 0.0, 24.44, 15.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:02:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:02:47
2025-11-17T22:02:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:02:57.158 [DEBUG] [Thread-62046] [transport.py] [_log()] starting thread (client mode): 0xd07118a0
2025-11-17T22:02:57.158 [DEBUG] [Thread-62046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:02:57.179 [DEBUG] [Thread-62046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:02:57.179 [INFO] [Thread-62046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:02:57.182 [DEBUG] [Thread-62046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:02:57.182 [DEBUG] [Thread-62046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:02:57.182 [DEBUG] [Thread-62046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:02:57.182 [DEBUG] [Thread-62046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:02:57.182 [DEBUG] [Thread-62046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:02:57.182 [DEBUG] [Thread-62046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:02:57.182 [DEBUG] [Thread-62046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:02:57.182 [DEBUG] [Thread-62046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] client lang: <none>
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] server lang: <none>
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] kex follows: False
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] Compression: none
2025-11-17T22:02:57.183 [DEBUG] [Thread-62046] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:02:57.201 [DEBUG] [Thread-62046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:02:57.201 [DEBUG] [Thread-62046] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:02:57.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:02:57.202 [DEBUG] [Thread-62046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:02:57.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:02:57.204 [DEBUG] [Thread-62046] [transport.py] [_log()] userauth is OK
2025-11-17T22:02:57.204 [DEBUG] [Thread-62046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:02:57.204 [DEBUG] [Thread-62046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:02:57.204 [DEBUG] [Thread-62046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:02:57.204 [DEBUG] [Thread-62046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:02:57.222 [INFO] [Thread-62046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:02:57.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:02:57.865 [DEBUG] [Thread-62046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:02:57.865 [DEBUG] [Thread-62046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:02:57.865 [DEBUG] [Thread-62046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:02:57.906 [DEBUG] [Thread-62046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:02:57.906 [DEBUG] [Thread-62046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:02:57.909 [DEBUG] [Thread-62046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:02:57.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:02:57.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:02:57.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:02:57.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:02:57.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:02:57.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:02:57.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:02:57.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:02:57.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:02:57.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.835117 -999.00  +15.10  20.74     44   +3.00 1 1 1 1 1     0    0 11.12 -40.95 ZNESW 16.3 20.7 179.0 25.0 15.8 -23.0 15.7 -22.2 15.4 -21.5 15.7 -22.2
2025-11-17T22:02:57.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:02:57.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:02:57.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.835117
2025-11-17T22:02:57.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:02:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:02:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:02:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:02:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:02:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:02:47', tmtdew=13.67, humidity=39.55, cloud=0.0, wind=24.44, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:02:47', seeing=2.18, atlas_timestamp='2025-11-17T20:02:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T19:59:00')
2025-11-17T22:02:57.935 [DEBUG] [Thread-62046] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:02:58.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:02:58.032 [DEBUG] [Thread-62049] [transport.py] [_log()] starting thread (client mode): 0xd3137ac0
2025-11-17T22:02:58.032 [DEBUG] [Thread-62049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:02:58.047 [DEBUG] [Thread-62049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:02:58.048 [INFO] [Thread-62049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:02:58.055 [DEBUG] [Thread-62049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:02:58.055 [DEBUG] [Thread-62049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:02:58.055 [DEBUG] [Thread-62049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:02:58.055 [DEBUG] [Thread-62049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:02:58.055 [DEBUG] [Thread-62049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:02:58.055 [DEBUG] [Thread-62049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] client lang: <none>
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] server lang: <none>
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] kex follows: False
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] Compression: none
2025-11-17T22:02:58.056 [DEBUG] [Thread-62049] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:02:58.113 [DEBUG] [Thread-62049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:02:58.113 [DEBUG] [Thread-62049] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:02:58.114 [DEBUG] [Thread-62049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:02:58.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:02:58.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:02:58.173 [DEBUG] [Thread-62049] [transport.py] [_log()] userauth is OK
2025-11-17T22:02:58.173 [DEBUG] [Thread-62049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:02:58.173 [DEBUG] [Thread-62049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:02:58.173 [DEBUG] [Thread-62049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:02:58.173 [DEBUG] [Thread-62049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:02:58.198 [INFO] [Thread-62049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:02:58.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:02:58.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:02:58.884 [DEBUG] [Thread-62051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:02:59.056 [DEBUG] [Thread-62049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:02:59.056 [DEBUG] [Thread-62049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:02:59.104 [DEBUG] [Thread-62049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:02:59.104 [DEBUG] [Thread-62049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:02:59.113 [DEBUG] [Thread-62049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:02:59.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:02:59.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:02:59.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:02:59.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:02:59.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:02:59.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:02:59.148 [DEBUG] [Thread-62049] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:03:13.924 [DEBUG] [Thread-62052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:03:28.947 [DEBUG] [Thread-62053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:03:29.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:03:29.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:03:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:03:29.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 3, 19), 13.67, 39.54, 0.0, 24.28, 15.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:03:29.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:03:19
2025-11-17T22:03:29.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:03:30.148 [DEBUG] [Thread-62054] [transport.py] [_log()] starting thread (client mode): 0xd31cdf30
2025-11-17T22:03:30.148 [DEBUG] [Thread-62054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:03:30.169 [DEBUG] [Thread-62054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:03:30.169 [INFO] [Thread-62054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] client lang: <none>
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] server lang: <none>
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] kex follows: False
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] Compression: none
2025-11-17T22:03:30.173 [DEBUG] [Thread-62054] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:03:30.189 [DEBUG] [Thread-62054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:03:30.189 [DEBUG] [Thread-62054] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:03:30.189 [DEBUG] [Thread-62054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:03:30.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:03:30.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:03:30.190 [DEBUG] [Thread-62054] [transport.py] [_log()] userauth is OK
2025-11-17T22:03:30.190 [DEBUG] [Thread-62054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:03:30.190 [DEBUG] [Thread-62054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:03:30.190 [DEBUG] [Thread-62054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:03:30.190 [DEBUG] [Thread-62054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:03:30.207 [INFO] [Thread-62054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:03:30.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:03:30.843 [DEBUG] [Thread-62054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:03:30.843 [DEBUG] [Thread-62054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:03:30.843 [DEBUG] [Thread-62054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:03:30.884 [DEBUG] [Thread-62054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:03:30.884 [DEBUG] [Thread-62054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:03:30.886 [DEBUG] [Thread-62054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:03:30.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:03:30.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:03:30.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:03:30.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:03:30.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:03:30.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:03:30.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.835464 -999.00  +15.10  19.44     44   +3.00 1 1 1 1 1     0    0 11.12 -43.08 ZNESW 16.8 19.4 181.6 25.8 15.8 -23.0 15.6 -22.1 15.5 -21.4 15.8 -22.2
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.835464
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:03:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:03:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:03:19', tmtdew=13.67, humidity=39.54, cloud=0.0, wind=24.28, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:03:19', seeing=1.82, atlas_timestamp='2025-11-17T20:03:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T19:59:00')
2025-11-17T22:03:30.905 [DEBUG] [Thread-62054] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:03:30.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:03:30.990 [DEBUG] [Thread-62057] [transport.py] [_log()] starting thread (client mode): 0xd0710dc0
2025-11-17T22:03:30.991 [DEBUG] [Thread-62057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:03:31.008 [DEBUG] [Thread-62057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:03:31.008 [INFO] [Thread-62057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:03:31.015 [DEBUG] [Thread-62057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:03:31.015 [DEBUG] [Thread-62057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] client lang: <none>
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] server lang: <none>
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] kex follows: False
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] Compression: none
2025-11-17T22:03:31.016 [DEBUG] [Thread-62057] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:03:31.072 [DEBUG] [Thread-62057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:03:31.072 [DEBUG] [Thread-62057] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:03:31.072 [DEBUG] [Thread-62057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:03:31.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:03:31.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:03:31.128 [DEBUG] [Thread-62057] [transport.py] [_log()] userauth is OK
2025-11-17T22:03:31.128 [DEBUG] [Thread-62057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:03:31.128 [DEBUG] [Thread-62057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:03:31.129 [DEBUG] [Thread-62057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:03:31.129 [DEBUG] [Thread-62057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:03:31.147 [INFO] [Thread-62057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:03:31.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:03:31.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:03:32.019 [DEBUG] [Thread-62057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:03:32.019 [DEBUG] [Thread-62057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:03:32.067 [DEBUG] [Thread-62057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:03:32.067 [DEBUG] [Thread-62057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:03:32.075 [DEBUG] [Thread-62057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:03:32.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:03:32.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:03:32.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:03:32.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:03:32.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:03:32.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:03:32.107 [DEBUG] [Thread-62057] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:03:43.975 [DEBUG] [Thread-62059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:03:44.497 [DEBUG] [Thread-62060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:03:57.005 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:03:57.006 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:03:59.014 [DEBUG] [Thread-62061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:04:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:04:02.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:04:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:04:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 3, 51), 13.74, 39.5, 0.0, 19.41, 15.21, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:04:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:03:51
2025-11-17T22:04:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:04:03.094 [DEBUG] [Thread-62062] [transport.py] [_log()] starting thread (client mode): 0xd07100a0
2025-11-17T22:04:03.094 [DEBUG] [Thread-62062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:04:03.114 [DEBUG] [Thread-62062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:04:03.114 [INFO] [Thread-62062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:04:03.117 [DEBUG] [Thread-62062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] client lang: <none>
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] server lang: <none>
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] kex follows: False
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:04:03.118 [DEBUG] [Thread-62062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:04:03.119 [DEBUG] [Thread-62062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:04:03.119 [DEBUG] [Thread-62062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:04:03.119 [DEBUG] [Thread-62062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:04:03.119 [DEBUG] [Thread-62062] [transport.py] [_log()] Compression: none
2025-11-17T22:04:03.119 [DEBUG] [Thread-62062] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:04:03.136 [DEBUG] [Thread-62062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:04:03.137 [DEBUG] [Thread-62062] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:04:03.138 [DEBUG] [Thread-62062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:04:03.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:04:03.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:04:03.140 [DEBUG] [Thread-62062] [transport.py] [_log()] userauth is OK
2025-11-17T22:04:03.140 [DEBUG] [Thread-62062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:04:03.140 [DEBUG] [Thread-62062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:04:03.140 [DEBUG] [Thread-62062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:04:03.140 [DEBUG] [Thread-62062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:04:03.155 [INFO] [Thread-62062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:04:03.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:04:03.780 [DEBUG] [Thread-62062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:04:03.780 [DEBUG] [Thread-62062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:04:03.781 [DEBUG] [Thread-62062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:04:03.821 [DEBUG] [Thread-62062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:04:03.821 [DEBUG] [Thread-62062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:04:03.824 [DEBUG] [Thread-62062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:04:03.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:04:03.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:04:03.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:04:03.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:04:03.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:04:03.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:04:03.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:04:03.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:04:03.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:04:03.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.835811 -999.00  +15.10  17.11     44   +3.00 1 1 1 1 1     0    0 11.21 -44.78 ZNESW 17.9 17.1 182.2 20.9 15.8 -23.0 15.6 -22.2 15.4 -21.4 15.7 -22.5
2025-11-17T22:04:03.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:04:03.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:04:03.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.835811
2025-11-17T22:04:03.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:04:03.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:04:03.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:04:03.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:04:03.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:04:03.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:03:51', tmtdew=13.74, humidity=39.5, cloud=0.0, wind=19.41, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:03:51', seeing=1.82, atlas_timestamp='2025-11-17T20:03:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T19:59:00')
2025-11-17T22:04:03.850 [DEBUG] [Thread-62062] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:04:03.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:04:03.951 [DEBUG] [Thread-62065] [transport.py] [_log()] starting thread (client mode): 0xd317d000
2025-11-17T22:04:03.951 [DEBUG] [Thread-62065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:04:03.967 [DEBUG] [Thread-62065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:04:03.967 [INFO] [Thread-62065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:04:03.974 [DEBUG] [Thread-62065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] client lang: <none>
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] server lang: <none>
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] kex follows: False
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] Compression: none
2025-11-17T22:04:03.975 [DEBUG] [Thread-62065] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:04:04.032 [DEBUG] [Thread-62065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:04:04.033 [DEBUG] [Thread-62065] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:04:04.033 [DEBUG] [Thread-62065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:04:04.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:04:04.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:04:04.089 [DEBUG] [Thread-62065] [transport.py] [_log()] userauth is OK
2025-11-17T22:04:04.089 [DEBUG] [Thread-62065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:04:04.089 [DEBUG] [Thread-62065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:04:04.089 [DEBUG] [Thread-62065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:04:04.089 [DEBUG] [Thread-62065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:04:04.108 [INFO] [Thread-62065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:04:04.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:04:04.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:04:04.953 [DEBUG] [Thread-62065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:04:04.954 [DEBUG] [Thread-62065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:04:05.001 [DEBUG] [Thread-62065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:04:05.002 [DEBUG] [Thread-62065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:04:05.011 [DEBUG] [Thread-62065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:04:05.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:04:05.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:04:05.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
2025-11-17T22:04:05.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:04:05.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:04:05.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:04:05.044 [DEBUG] [Thread-62065] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:04:14.043 [DEBUG] [Thread-62067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:04:29.083 [DEBUG] [Thread-62068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:04:35.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:04:35.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:04:35.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:04:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 4, 23), 13.74, 39.47, 0.0, 19.18, 15.18, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:04:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:04:23
2025-11-17T22:04:35.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:04:36.007 [DEBUG] [Thread-62069] [transport.py] [_log()] starting thread (client mode): 0xd0713d30
2025-11-17T22:04:36.008 [DEBUG] [Thread-62069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:04:36.028 [DEBUG] [Thread-62069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:04:36.028 [INFO] [Thread-62069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] client lang: <none>
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] server lang: <none>
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] kex follows: False
2025-11-17T22:04:36.032 [DEBUG] [Thread-62069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:04:36.033 [DEBUG] [Thread-62069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:04:36.033 [DEBUG] [Thread-62069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:04:36.033 [DEBUG] [Thread-62069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:04:36.033 [DEBUG] [Thread-62069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:04:36.033 [DEBUG] [Thread-62069] [transport.py] [_log()] Compression: none
2025-11-17T22:04:36.033 [DEBUG] [Thread-62069] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:04:36.052 [DEBUG] [Thread-62069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:04:36.052 [DEBUG] [Thread-62069] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:04:36.053 [DEBUG] [Thread-62069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:04:36.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:04:36.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:04:36.054 [DEBUG] [Thread-62069] [transport.py] [_log()] userauth is OK
2025-11-17T22:04:36.055 [DEBUG] [Thread-62069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:04:36.055 [DEBUG] [Thread-62069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:04:36.055 [DEBUG] [Thread-62069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:04:36.055 [DEBUG] [Thread-62069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:04:36.080 [INFO] [Thread-62069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:04:36.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:04:36.728 [DEBUG] [Thread-62069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:04:36.729 [DEBUG] [Thread-62069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:04:36.729 [DEBUG] [Thread-62069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:04:36.769 [DEBUG] [Thread-62069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:04:36.770 [DEBUG] [Thread-62069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:04:36.773 [DEBUG] [Thread-62069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:04:36.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:04:36.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:04:36.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:04:36.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:04:36.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:04:36.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:04:36.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:04:36.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:04:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:04:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.836159 -999.00  +15.10  16.65     44   +3.00 1 1 1 1 1     0    0 11.17 -39.72 ZNESW 18.8 16.6 181.0 21.5 15.8 -22.8 15.6 -22.0 15.4 -21.3 15.7 -22.2
2025-11-17T22:04:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:04:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:04:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.836159
2025-11-17T22:04:36.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:04:36.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:04:36.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:04:36.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:04:36.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:04:36.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:04:23', tmtdew=13.74, humidity=39.47, cloud=0.0, wind=19.18, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:04:23', seeing=1.97, atlas_timestamp='2025-11-17T20:04:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T20:03:00')
2025-11-17T22:04:36.800 [DEBUG] [Thread-62069] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:04:36.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:04:36.896 [DEBUG] [Thread-62072] [transport.py] [_log()] starting thread (client mode): 0xd31cf970
2025-11-17T22:04:36.896 [DEBUG] [Thread-62072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:04:36.911 [DEBUG] [Thread-62072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:04:36.912 [INFO] [Thread-62072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:04:36.919 [DEBUG] [Thread-62072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:04:36.919 [DEBUG] [Thread-62072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] client lang: <none>
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] server lang: <none>
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] kex follows: False
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:04:36.920 [DEBUG] [Thread-62072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:04:36.921 [DEBUG] [Thread-62072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:04:36.921 [DEBUG] [Thread-62072] [transport.py] [_log()] Compression: none
2025-11-17T22:04:36.921 [DEBUG] [Thread-62072] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:04:36.983 [DEBUG] [Thread-62072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:04:36.983 [DEBUG] [Thread-62072] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:04:36.984 [DEBUG] [Thread-62072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:04:36.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:04:36.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:04:37.041 [DEBUG] [Thread-62072] [transport.py] [_log()] userauth is OK
2025-11-17T22:04:37.041 [DEBUG] [Thread-62072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:04:37.041 [DEBUG] [Thread-62072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:04:37.041 [DEBUG] [Thread-62072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:04:37.041 [DEBUG] [Thread-62072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:04:37.060 [INFO] [Thread-62072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:04:37.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:04:37.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:04:37.933 [DEBUG] [Thread-62072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:04:37.933 [DEBUG] [Thread-62072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:04:37.981 [DEBUG] [Thread-62072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:04:37.981 [DEBUG] [Thread-62072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:04:37.990 [DEBUG] [Thread-62072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:04:37.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:04:37.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:04:38.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:04:38.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:04:38.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:04:38.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:04:38.025 [DEBUG] [Thread-62072] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:04:44.113 [DEBUG] [Thread-62074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:04:44.571 [DEBUG] [Thread-62075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:04:57.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:04:57.211 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:04:59.142 [DEBUG] [Thread-62076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:05:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:05:08.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:05:08.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:05:08.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 4, 55), 13.73, 39.49, 0.0, 20.24, 15.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:05:08.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:04:55
2025-11-17T22:05:08.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:05:08.952 [DEBUG] [Thread-62077] [transport.py] [_log()] starting thread (client mode): 0xd31cfe20
2025-11-17T22:05:08.952 [DEBUG] [Thread-62077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:05:08.972 [DEBUG] [Thread-62077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:05:08.972 [INFO] [Thread-62077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:05:08.974 [DEBUG] [Thread-62077] [transport.py] [_log()] client lang: <none>
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] server lang: <none>
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] kex follows: False
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] Compression: none
2025-11-17T22:05:08.975 [DEBUG] [Thread-62077] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:05:08.983 [DEBUG] [Thread-62077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:05:08.984 [DEBUG] [Thread-62077] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:05:08.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:05:08.984 [DEBUG] [Thread-62077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:05:08.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:05:08.986 [DEBUG] [Thread-62077] [transport.py] [_log()] userauth is OK
2025-11-17T22:05:08.986 [DEBUG] [Thread-62077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:05:08.986 [DEBUG] [Thread-62077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:05:08.987 [DEBUG] [Thread-62077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:05:08.987 [DEBUG] [Thread-62077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:05:09.004 [INFO] [Thread-62077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:05:09.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:05:09.558 [DEBUG] [Thread-62077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:05:09.559 [DEBUG] [Thread-62077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:05:09.559 [DEBUG] [Thread-62077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:05:09.599 [DEBUG] [Thread-62077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:05:09.599 [DEBUG] [Thread-62077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:05:09.605 [DEBUG] [Thread-62077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:05:09.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:05:09.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:05:09.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:05:09.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:05:09.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:05:09.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:05:09.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:05:09.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:05:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:05:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.836506 -999.00  +15.10  19.55     44   +3.10 1 1 1 1 1     0    0 11.42 -37.48 ZNESW 21.0 19.6 179.2 26.2 15.8 -22.8 15.6 -22.1 15.4 -21.3 15.7 -22.1
2025-11-17T22:05:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:05:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:05:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.836506
2025-11-17T22:05:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:05:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:05:09.632 [DEBUG] [Thread-62077] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:05:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:05:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:05:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:05:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:04:55', tmtdew=13.73, humidity=39.49, cloud=0.0, wind=20.24, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:04:55', seeing=2.35, atlas_timestamp='2025-11-17T20:04:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T20:03:00')
2025-11-17T22:05:09.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:05:09.727 [DEBUG] [Thread-62080] [transport.py] [_log()] starting thread (client mode): 0xd0710730
2025-11-17T22:05:09.727 [DEBUG] [Thread-62080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:05:09.742 [DEBUG] [Thread-62080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:05:09.742 [INFO] [Thread-62080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] client lang: <none>
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] server lang: <none>
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] kex follows: False
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:05:09.750 [DEBUG] [Thread-62080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:05:09.751 [DEBUG] [Thread-62080] [transport.py] [_log()] Compression: none
2025-11-17T22:05:09.751 [DEBUG] [Thread-62080] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:05:09.812 [DEBUG] [Thread-62080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:05:09.812 [DEBUG] [Thread-62080] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:05:09.813 [DEBUG] [Thread-62080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:05:09.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:05:09.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:05:09.869 [DEBUG] [Thread-62080] [transport.py] [_log()] userauth is OK
2025-11-17T22:05:09.869 [DEBUG] [Thread-62080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:05:09.869 [DEBUG] [Thread-62080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:05:09.869 [DEBUG] [Thread-62080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:05:09.869 [DEBUG] [Thread-62080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:05:09.889 [INFO] [Thread-62080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:05:09.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:05:09.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:05:10.738 [DEBUG] [Thread-62080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:05:10.738 [DEBUG] [Thread-62080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:05:10.787 [DEBUG] [Thread-62080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:05:10.787 [DEBUG] [Thread-62080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:05:10.796 [DEBUG] [Thread-62080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:05:10.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:05:10.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')
2025-11-17T22:05:10.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:05:10.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:05:10.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:05:10.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:05:10.831 [DEBUG] [Thread-62080] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:05:14.171 [DEBUG] [Thread-62082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:05:29.209 [DEBUG] [Thread-62083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:05:40.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:05:40.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:05:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:05:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 5, 27), 13.68, 39.65, 0.0, 21.77, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:05:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:05:27
2025-11-17T22:05:41.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:05:41.776 [DEBUG] [Thread-62084] [transport.py] [_log()] starting thread (client mode): 0xd0713610
2025-11-17T22:05:41.776 [DEBUG] [Thread-62084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:05:41.796 [DEBUG] [Thread-62084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:05:41.796 [INFO] [Thread-62084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:05:41.799 [DEBUG] [Thread-62084] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:05:41.799 [DEBUG] [Thread-62084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:05:41.799 [DEBUG] [Thread-62084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:05:41.799 [DEBUG] [Thread-62084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:05:41.799 [DEBUG] [Thread-62084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] client lang: <none>
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] server lang: <none>
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] kex follows: False
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:05:41.800 [DEBUG] [Thread-62084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:05:41.801 [DEBUG] [Thread-62084] [transport.py] [_log()] Compression: none
2025-11-17T22:05:41.801 [DEBUG] [Thread-62084] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:05:41.819 [DEBUG] [Thread-62084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:05:41.819 [DEBUG] [Thread-62084] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:05:41.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:05:41.821 [DEBUG] [Thread-62084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:05:41.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:05:41.823 [DEBUG] [Thread-62084] [transport.py] [_log()] userauth is OK
2025-11-17T22:05:41.823 [DEBUG] [Thread-62084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:05:41.823 [DEBUG] [Thread-62084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:05:41.823 [DEBUG] [Thread-62084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:05:41.823 [DEBUG] [Thread-62084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:05:41.841 [INFO] [Thread-62084] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:05:41.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:05:42.520 [DEBUG] [Thread-62084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:05:42.520 [DEBUG] [Thread-62084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:05:42.520 [DEBUG] [Thread-62084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:05:42.561 [DEBUG] [Thread-62084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:05:42.561 [DEBUG] [Thread-62084] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:05:42.563 [DEBUG] [Thread-62084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:05:42.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:05:42.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:05:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:05:42.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:05:42.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:05:42.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:05:42.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:05:42.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:05:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:05:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.836506 -999.00  +15.10  19.55     44   +3.10 1 1 1 1 1     0    0 11.42 -37.48 ZNESW 21.0 19.6 179.2 26.2 15.8 -22.8 15.6 -22.1 15.4 -21.3 15.7 -22.1
2025-11-17T22:05:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:05:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:05:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.836506
2025-11-17T22:05:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:05:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:05:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:05:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:05:42.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:05:42.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:05:27', tmtdew=13.68, humidity=39.65, cloud=0.0, wind=21.77, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:05:27', seeing=2.04, atlas_timestamp='2025-11-17T20:04:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T20:03:00')
2025-11-17T22:05:42.589 [DEBUG] [Thread-62084] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:05:42.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:05:42.686 [DEBUG] [Thread-62087] [transport.py] [_log()] starting thread (client mode): 0xd317d000
2025-11-17T22:05:42.686 [DEBUG] [Thread-62087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:05:42.702 [DEBUG] [Thread-62087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:05:42.702 [INFO] [Thread-62087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:05:42.710 [DEBUG] [Thread-62087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:05:42.710 [DEBUG] [Thread-62087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:05:42.710 [DEBUG] [Thread-62087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:05:42.710 [DEBUG] [Thread-62087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:05:42.710 [DEBUG] [Thread-62087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:05:42.710 [DEBUG] [Thread-62087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:05:42.710 [DEBUG] [Thread-62087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:05:42.711 [DEBUG] [Thread-62087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:05:42.711 [DEBUG] [Thread-62087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:05:42.711 [DEBUG] [Thread-62087] [transport.py] [_log()] client lang: <none>
2025-11-17T22:05:42.711 [DEBUG] [Thread-62087] [transport.py] [_log()] server lang: <none>
2025-11-17T22:05:42.711 [DEBUG] [Thread-62087] [transport.py] [_log()] kex follows: False
2025-11-17T22:05:42.711 [DEBUG] [Thread-62087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:05:42.711 [DEBUG] [Thread-62087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:05:42.711 [DEBUG] [Thread-62087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:05:42.712 [DEBUG] [Thread-62087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:05:42.712 [DEBUG] [Thread-62087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:05:42.712 [DEBUG] [Thread-62087] [transport.py] [_log()] Compression: none
2025-11-17T22:05:42.712 [DEBUG] [Thread-62087] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:05:42.770 [DEBUG] [Thread-62087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:05:42.771 [DEBUG] [Thread-62087] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:05:42.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:05:42.772 [DEBUG] [Thread-62087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:05:42.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:05:42.829 [DEBUG] [Thread-62087] [transport.py] [_log()] userauth is OK
2025-11-17T22:05:42.829 [DEBUG] [Thread-62087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:05:42.829 [DEBUG] [Thread-62087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:05:42.829 [DEBUG] [Thread-62087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:05:42.829 [DEBUG] [Thread-62087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:05:42.852 [INFO] [Thread-62087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:05:42.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:05:42.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:05:43.768 [DEBUG] [Thread-62087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:05:43.768 [DEBUG] [Thread-62087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:05:43.816 [DEBUG] [Thread-62087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:05:43.816 [DEBUG] [Thread-62087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:05:43.825 [DEBUG] [Thread-62087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:05:43.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:05:43.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:05:43.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:05:43.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:05:43.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:05:43.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:05:43.860 [DEBUG] [Thread-62087] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:05:44.237 [DEBUG] [Thread-62089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:05:44.651 [DEBUG] [Thread-62090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:05:57.413 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:05:57.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:05:59.267 [DEBUG] [Thread-62091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:06:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:06:13.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:06:13.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:06:14.291 [DEBUG] [Thread-62092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:06:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 5, 59), 13.64, 39.62, 0.0, 21.26, 15.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:06:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:05:59
2025-11-17T22:06:14.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:06:14.784 [DEBUG] [Thread-62093] [transport.py] [_log()] starting thread (client mode): 0xd7bc5f60
2025-11-17T22:06:14.785 [DEBUG] [Thread-62093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:06:14.804 [DEBUG] [Thread-62093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:06:14.805 [INFO] [Thread-62093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] client lang: <none>
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] server lang: <none>
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] kex follows: False
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] Compression: none
2025-11-17T22:06:14.808 [DEBUG] [Thread-62093] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:06:14.826 [DEBUG] [Thread-62093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:06:14.827 [DEBUG] [Thread-62093] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:06:14.827 [DEBUG] [Thread-62093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:06:14.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:06:14.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:06:14.829 [DEBUG] [Thread-62093] [transport.py] [_log()] userauth is OK
2025-11-17T22:06:14.830 [DEBUG] [Thread-62093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:06:14.830 [DEBUG] [Thread-62093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:06:14.830 [DEBUG] [Thread-62093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:06:14.830 [DEBUG] [Thread-62093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:06:14.851 [INFO] [Thread-62093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:06:14.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:06:15.502 [DEBUG] [Thread-62093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:06:15.502 [DEBUG] [Thread-62093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:06:15.502 [DEBUG] [Thread-62093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:06:15.543 [DEBUG] [Thread-62093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:06:15.544 [DEBUG] [Thread-62093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:06:15.546 [DEBUG] [Thread-62093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:06:15.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:06:15.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:06:15.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:06:15.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:06:15.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:06:15.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:06:15.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:06:15.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.837200 -999.00  +15.10  11.95     44   +3.10 1 1 1 1 1     0    0 11.12 -36.97 ZNESW 14.1 11.9 181.2 22.3 15.7 -22.8 15.6 -21.9 15.4 -21.4 15.7 -22.1
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.837200
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:06:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:05:59', tmtdew=13.64, humidity=39.62, cloud=0.0, wind=21.26, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:05:59', seeing=1.76, atlas_timestamp='2025-11-17T20:05:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T20:03:00')
2025-11-17T22:06:15.568 [DEBUG] [Thread-62093] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:06:15.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:06:15.651 [DEBUG] [Thread-62096] [transport.py] [_log()] starting thread (client mode): 0xd07030d0
2025-11-17T22:06:15.651 [DEBUG] [Thread-62096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:06:15.666 [DEBUG] [Thread-62096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:06:15.666 [INFO] [Thread-62096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:06:15.673 [DEBUG] [Thread-62096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:06:15.673 [DEBUG] [Thread-62096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] client lang: <none>
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] server lang: <none>
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] kex follows: False
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] Compression: none
2025-11-17T22:06:15.674 [DEBUG] [Thread-62096] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:06:15.733 [DEBUG] [Thread-62096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:06:15.733 [DEBUG] [Thread-62096] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:06:15.734 [DEBUG] [Thread-62096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:06:15.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:06:15.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:06:15.789 [DEBUG] [Thread-62096] [transport.py] [_log()] userauth is OK
2025-11-17T22:06:15.789 [DEBUG] [Thread-62096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:06:15.789 [DEBUG] [Thread-62096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:06:15.789 [DEBUG] [Thread-62096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:06:15.789 [DEBUG] [Thread-62096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:06:15.809 [INFO] [Thread-62096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:06:15.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:06:15.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:06:16.687 [DEBUG] [Thread-62096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:06:16.688 [DEBUG] [Thread-62096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:06:16.735 [DEBUG] [Thread-62096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:06:16.735 [DEBUG] [Thread-62096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:06:16.744 [DEBUG] [Thread-62096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:06:16.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:06: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')
2025-11-17T22:06:16.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:06:16.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:06:16.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:06:16.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:06:16.779 [DEBUG] [Thread-62096] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:06:29.320 [DEBUG] [Thread-62098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:06:44.360 [DEBUG] [Thread-62099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:06:44.730 [DEBUG] [Thread-62100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:06:46.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:06:46.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:06:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:06:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 6, 31), 13.66, 39.57, 0.0, 21.01, 15.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:06:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:06:31
2025-11-17T22:06:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:06:47.729 [DEBUG] [Thread-62101] [transport.py] [_log()] starting thread (client mode): 0xd07102e0
2025-11-17T22:06:47.729 [DEBUG] [Thread-62101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:06:47.749 [DEBUG] [Thread-62101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:06:47.749 [INFO] [Thread-62101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:06:47.752 [DEBUG] [Thread-62101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] client lang: <none>
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] server lang: <none>
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] kex follows: False
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] Compression: none
2025-11-17T22:06:47.753 [DEBUG] [Thread-62101] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:06:47.771 [DEBUG] [Thread-62101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:06:47.771 [DEBUG] [Thread-62101] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:06:47.772 [DEBUG] [Thread-62101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:06:47.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:06:47.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:06:47.774 [DEBUG] [Thread-62101] [transport.py] [_log()] userauth is OK
2025-11-17T22:06:47.774 [DEBUG] [Thread-62101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:06:47.774 [DEBUG] [Thread-62101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:06:47.774 [DEBUG] [Thread-62101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:06:47.774 [DEBUG] [Thread-62101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:06:47.808 [INFO] [Thread-62101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:06:47.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:06:48.448 [DEBUG] [Thread-62101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:06:48.448 [DEBUG] [Thread-62101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:06:48.449 [DEBUG] [Thread-62101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:06:48.489 [DEBUG] [Thread-62101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:06:48.490 [DEBUG] [Thread-62101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:06:48.492 [DEBUG] [Thread-62101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:06:48.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:06:48.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:06:48.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:06:48.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:06:48.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:06:48.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:06:48.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:06:48.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:06:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:06:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.837547 -999.00  +15.10  14.75     44   +3.10 1 1 1 1 1     0    0 11.40 -35.07 ZNESW 16.0 14.8 176.2 26.1 15.7 -22.8 15.6 -22.0 15.4 -21.2 15.7 -22.1
2025-11-17T22:06:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:06:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:06:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.837547
2025-11-17T22:06:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:06:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:06:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:06:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:06:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:06:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:06:31', tmtdew=13.66, humidity=39.57, cloud=0.0, wind=21.01, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:06:31', seeing=1.76, atlas_timestamp='2025-11-17T20:06:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.22225000000000072, 0.3572500000000005, 0.2234999999999996, 0.3155000000000001, 0.34325000000000117, 0.16249999999999964, 0.15225000000000044, 0.19849999999999923, 0.18400000000000105, 0.3172499999999996, 0.36400000000000077, 0.36599999999999966, 0.29824999999999946, 0.19899999999999984, 0.1529999999999987, 0.13874999999999993, 0.3025000000000002, 0.4609999999999985, 0.48474999999999824, 0.5069999999999979, 0.43074999999999974, 0.17324999999999946, 0.1152500000000014, 0.1349999999999998, 0.3125, 0.4477500000000001, 0.5695000000000006, 0.6859999999999999, 0.4330000000000016, 0.31400000000000095, 0.08300000000000196, 0.07174999999999976], zp_timestamp='2025-11-17T20:03:00')
2025-11-17T22:06:48.519 [DEBUG] [Thread-62101] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:06:48.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:06:48.611 [DEBUG] [Thread-62104] [transport.py] [_log()] starting thread (client mode): 0xd31518d0
2025-11-17T22:06:48.611 [DEBUG] [Thread-62104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:06:48.626 [DEBUG] [Thread-62104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:06:48.626 [INFO] [Thread-62104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:06:48.634 [DEBUG] [Thread-62104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:06:48.634 [DEBUG] [Thread-62104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:06:48.634 [DEBUG] [Thread-62104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:06:48.634 [DEBUG] [Thread-62104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:06:48.634 [DEBUG] [Thread-62104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:06:48.634 [DEBUG] [Thread-62104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:06:48.634 [DEBUG] [Thread-62104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] client lang: <none>
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] server lang: <none>
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] kex follows: False
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:06:48.635 [DEBUG] [Thread-62104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:06:48.636 [DEBUG] [Thread-62104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:06:48.636 [DEBUG] [Thread-62104] [transport.py] [_log()] Compression: none
2025-11-17T22:06:48.636 [DEBUG] [Thread-62104] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:06:48.694 [DEBUG] [Thread-62104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:06:48.694 [DEBUG] [Thread-62104] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:06:48.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:06:48.696 [DEBUG] [Thread-62104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:06:48.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:06:48.754 [DEBUG] [Thread-62104] [transport.py] [_log()] userauth is OK
2025-11-17T22:06:48.754 [DEBUG] [Thread-62104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:06:48.754 [DEBUG] [Thread-62104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:06:48.755 [DEBUG] [Thread-62104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:06:48.755 [DEBUG] [Thread-62104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:06:48.776 [INFO] [Thread-62104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:06:48.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:06:48.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:06:49.588 [DEBUG] [Thread-62104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:06:49.589 [DEBUG] [Thread-62104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:06:49.636 [DEBUG] [Thread-62104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:06:49.636 [DEBUG] [Thread-62104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:06:49.645 [DEBUG] [Thread-62104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:06:49.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:06:49.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:06:49.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:06:49.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:06:49.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:06:49.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:06:49.680 [DEBUG] [Thread-62104] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:06:57.617 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:06:57.618 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:06:59.389 [DEBUG] [Thread-62106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:14.438 [DEBUG] [Thread-62107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:19.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:07:19.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:07:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:07:20.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 7, 3), 13.63, 39.64, 0.0, 19.29, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:07:20.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:07:03
2025-11-17T22:07:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:07:20.681 [DEBUG] [Thread-62108] [transport.py] [_log()] starting thread (client mode): 0xd0710700
2025-11-17T22:07:20.681 [DEBUG] [Thread-62108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:07:20.702 [DEBUG] [Thread-62108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:07:20.702 [INFO] [Thread-62108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] client lang: <none>
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] server lang: <none>
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] kex follows: False
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] Compression: none
2025-11-17T22:07:20.705 [DEBUG] [Thread-62108] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:07:20.722 [DEBUG] [Thread-62108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:07:20.722 [DEBUG] [Thread-62108] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:07:20.722 [DEBUG] [Thread-62108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:07:20.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:07:20.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:07:20.723 [DEBUG] [Thread-62108] [transport.py] [_log()] userauth is OK
2025-11-17T22:07:20.723 [DEBUG] [Thread-62108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:07:20.723 [DEBUG] [Thread-62108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:07:20.723 [DEBUG] [Thread-62108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:07:20.723 [DEBUG] [Thread-62108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:07:20.738 [INFO] [Thread-62108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:07:20.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:07:21.360 [DEBUG] [Thread-62108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:07:21.360 [DEBUG] [Thread-62108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:07:21.360 [DEBUG] [Thread-62108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:07:21.401 [DEBUG] [Thread-62108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:07:21.401 [DEBUG] [Thread-62108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:07:21.403 [DEBUG] [Thread-62108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:07:21.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:07:21.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:07:21.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:07:21.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:07:21.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:07:21.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:07:21.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.837895 -999.00  +15.10  17.94     44   +3.10 1 1 1 1 1     0    0 11.38 -33.84 ZNESW 16.0 17.9 172.8 20.3 15.8 -22.8 15.6 -21.9 15.4 -21.2 15.7 -22.1
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.837895
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:07:21.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:07:03', tmtdew=13.63, humidity=39.64, cloud=0.0, wind=19.29, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:07:03', seeing=1.61, atlas_timestamp='2025-11-17T20:06:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.21274999999999977, 0.21525000000000105, 0.22225000000000072, 0.3404999999999987, 0.2944999999999993, 0.27475000000000094, 0.2419999999999991, 0.2162500000000005, 0.2574999999999985, 0.20500000000000185, 0.3272499999999994, 0.3230000000000004, 0.4510000000000005, 0.3202499999999997, 0.20749999999999957, 0.17799999999999905, 0.2322500000000005, 0.3885000000000005, 0.48999999999999844, 0.42324999999999946, 0.6009999999999991, 0.4137499999999985, 0.23425000000000118, 0.17275000000000063, 0.23799999999999955, 0.3484999999999996, 0.5332499999999998, 0.6349999999999998, 0.766, 0.44200000000000106, 0.43350000000000044, 0.16900000000000048, 0.12575000000000003], zp_timestamp='2025-11-17T20:06:00')
2025-11-17T22:07:21.423 [DEBUG] [Thread-62108] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:07:21.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:07:21.505 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:21.508 [DEBUG] [Thread-62111] [transport.py] [_log()] starting thread (client mode): 0xd07120e0
2025-11-17T22:07:21.508 [DEBUG] [Thread-62111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:07:21.522 [DEBUG] [Thread-62111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:07:21.522 [INFO] [Thread-62111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:07:21.529 [DEBUG] [Thread-62111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:07:21.529 [DEBUG] [Thread-62111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:07:21.529 [DEBUG] [Thread-62111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:07:21.529 [DEBUG] [Thread-62111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:07:21.529 [DEBUG] [Thread-62111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:07:21.529 [DEBUG] [Thread-62111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] client lang: <none>
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] server lang: <none>
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] kex follows: False
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] Compression: none
2025-11-17T22:07:21.530 [DEBUG] [Thread-62111] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:07:21.587 [DEBUG] [Thread-62111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:07:21.588 [DEBUG] [Thread-62111] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:07:21.588 [DEBUG] [Thread-62111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:07:21.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:07:21.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:07:21.644 [DEBUG] [Thread-62111] [transport.py] [_log()] userauth is OK
2025-11-17T22:07:21.645 [DEBUG] [Thread-62111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:07:21.645 [DEBUG] [Thread-62111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:07:21.645 [DEBUG] [Thread-62111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:07:21.645 [DEBUG] [Thread-62111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:07:21.659 [INFO] [Thread-62111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:07:21.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:07:21.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:07:22.536 [DEBUG] [Thread-62111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:07:22.537 [DEBUG] [Thread-62111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:07:22.585 [DEBUG] [Thread-62111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:07:22.585 [DEBUG] [Thread-62111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:07:22.593 [DEBUG] [Thread-62111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:07:22.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:07:22.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:07:22.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:07:22.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:07:22.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:07:22.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:07:22.624 [DEBUG] [Thread-62111] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:07:29.467 [DEBUG] [Thread-62113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:30.798 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:35.018 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:44.509 [DEBUG] [Thread-62114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:44.789 [DEBUG] [Thread-62115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:52.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:07:52.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:07:52.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:07:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 7, 35), 13.69, 39.59, 0.0, 19.71, 15.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:07:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:07:35
2025-11-17T22:07:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:07:53.582 [DEBUG] [Thread-62116] [transport.py] [_log()] starting thread (client mode): 0xd317cb50
2025-11-17T22:07:53.582 [DEBUG] [Thread-62116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:07:53.602 [DEBUG] [Thread-62116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:07:53.602 [INFO] [Thread-62116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:07:53.603 [DEBUG] [Thread-62116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] client lang: <none>
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] server lang: <none>
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] kex follows: False
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] Compression: none
2025-11-17T22:07:53.604 [DEBUG] [Thread-62116] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:07:53.622 [DEBUG] [Thread-62116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:07:53.622 [DEBUG] [Thread-62116] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:07:53.623 [DEBUG] [Thread-62116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:07:53.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:07:53.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:07:53.625 [DEBUG] [Thread-62116] [transport.py] [_log()] userauth is OK
2025-11-17T22:07:53.625 [DEBUG] [Thread-62116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:07:53.625 [DEBUG] [Thread-62116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:07:53.625 [DEBUG] [Thread-62116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:07:53.625 [DEBUG] [Thread-62116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:07:53.661 [INFO] [Thread-62116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:07:53.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:07:54.318 [DEBUG] [Thread-62116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:07:54.318 [DEBUG] [Thread-62116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:07:54.319 [DEBUG] [Thread-62116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:07:54.359 [DEBUG] [Thread-62116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:07:54.359 [DEBUG] [Thread-62116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:07:54.362 [DEBUG] [Thread-62116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:07:54.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:07:54.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:07:54.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:07:54.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:07:54.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:07:54.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:07:54.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:07:54.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:07:54.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:07:54.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.838242 -999.00  +15.10  21.04     44   +3.10 1 1 1 1 1     0    0 10.98 -36.50 ZNESW 18.7 21.0 178.4 24.3 15.7 -22.8 15.6 -21.9 15.3 -21.3 15.7 -22.0
2025-11-17T22:07:54.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:07:54.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:07:54.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.838242
2025-11-17T22:07:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:07:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:07:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:07:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:07:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:07:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:07:35', tmtdew=13.69, humidity=39.59, cloud=0.0, wind=19.71, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:07:35', seeing=1.66, atlas_timestamp='2025-11-17T20:07:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.21274999999999977, 0.21525000000000105, 0.22225000000000072, 0.3404999999999987, 0.2944999999999993, 0.27475000000000094, 0.2419999999999991, 0.2162500000000005, 0.2574999999999985, 0.20500000000000185, 0.3272499999999994, 0.3230000000000004, 0.4510000000000005, 0.3202499999999997, 0.20749999999999957, 0.17799999999999905, 0.2322500000000005, 0.3885000000000005, 0.48999999999999844, 0.42324999999999946, 0.6009999999999991, 0.4137499999999985, 0.23425000000000118, 0.17275000000000063, 0.23799999999999955, 0.3484999999999996, 0.5332499999999998, 0.6349999999999998, 0.766, 0.44200000000000106, 0.43350000000000044, 0.16900000000000048, 0.12575000000000003], zp_timestamp='2025-11-17T20:06:00')
2025-11-17T22:07:54.386 [DEBUG] [Thread-62116] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:07:54.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:07:54.482 [DEBUG] [Thread-62119] [transport.py] [_log()] starting thread (client mode): 0xd0703430
2025-11-17T22:07:54.482 [DEBUG] [Thread-62119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:07:54.497 [DEBUG] [Thread-62119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:07:54.497 [INFO] [Thread-62119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:07:54.504 [DEBUG] [Thread-62119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:07:54.504 [DEBUG] [Thread-62119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:07:54.504 [DEBUG] [Thread-62119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:07:54.504 [DEBUG] [Thread-62119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:07:54.504 [DEBUG] [Thread-62119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:07:54.504 [DEBUG] [Thread-62119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:07:54.504 [DEBUG] [Thread-62119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:07:54.504 [DEBUG] [Thread-62119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] client lang: <none>
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] server lang: <none>
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] kex follows: False
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] Compression: none
2025-11-17T22:07:54.505 [DEBUG] [Thread-62119] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:07:54.560 [DEBUG] [Thread-62119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:07:54.560 [DEBUG] [Thread-62119] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:07:54.561 [DEBUG] [Thread-62119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:07:54.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:07:54.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:07:54.617 [DEBUG] [Thread-62119] [transport.py] [_log()] userauth is OK
2025-11-17T22:07:54.617 [DEBUG] [Thread-62119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:07:54.617 [DEBUG] [Thread-62119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:07:54.617 [DEBUG] [Thread-62119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:07:54.617 [DEBUG] [Thread-62119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:07:54.640 [INFO] [Thread-62119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:07:54.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:07:54.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:07:55.461 [DEBUG] [Thread-62119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:07:55.461 [DEBUG] [Thread-62119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:07:55.508 [DEBUG] [Thread-62119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:07:55.508 [DEBUG] [Thread-62119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:07:55.517 [DEBUG] [Thread-62119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:07:55.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:07:55.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:07:55.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:07:55.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:07:55.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:07:55.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:07:55.551 [DEBUG] [Thread-62119] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:07:57.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:57.823 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:07:59.536 [DEBUG] [Thread-62121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:08:14.567 [DEBUG] [Thread-62122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:08:25.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:08:25.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:08:25.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:08:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 8, 7), 13.67, 39.67, 0.0, 20.19, 15.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:08:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:08:07
2025-11-17T22:08:26.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:08:26.518 [DEBUG] [Thread-62123] [transport.py] [_log()] starting thread (client mode): 0xd0712bf0
2025-11-17T22:08:26.518 [DEBUG] [Thread-62123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:08:26.537 [DEBUG] [Thread-62123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:08:26.538 [INFO] [Thread-62123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:08:26.539 [DEBUG] [Thread-62123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:08:26.539 [DEBUG] [Thread-62123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] client lang: <none>
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] server lang: <none>
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] kex follows: False
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] Compression: none
2025-11-17T22:08:26.540 [DEBUG] [Thread-62123] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:08:26.560 [DEBUG] [Thread-62123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:08:26.560 [DEBUG] [Thread-62123] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:08:26.561 [DEBUG] [Thread-62123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:08:26.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:08:26.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:08:26.563 [DEBUG] [Thread-62123] [transport.py] [_log()] userauth is OK
2025-11-17T22:08:26.563 [DEBUG] [Thread-62123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:08:26.563 [DEBUG] [Thread-62123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:08:26.563 [DEBUG] [Thread-62123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:08:26.563 [DEBUG] [Thread-62123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:08:26.588 [INFO] [Thread-62123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:08:26.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:08:27.220 [DEBUG] [Thread-62123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:08:27.221 [DEBUG] [Thread-62123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:08:27.221 [DEBUG] [Thread-62123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:08:27.261 [DEBUG] [Thread-62123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:08:27.262 [DEBUG] [Thread-62123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:08:27.265 [DEBUG] [Thread-62123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:08:27.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:08:27.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:08:27.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:08:27.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:08:27.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:08:27.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:08:27.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:08:27.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:08:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:08:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.838589 -999.00  +15.10  21.15     44   +3.10 1 1 1 1 1     0    0 11.28 -36.32 ZNESW 17.5 21.1 179.2 23.2 15.7 -22.7 15.6 -21.9 15.3 -21.3 15.7 -22.2
2025-11-17T22:08:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:08:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:08:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.838589
2025-11-17T22:08:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:08:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:08:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:08:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:08:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:08:27.289 [DEBUG] [Thread-62123] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:08:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:08:07', tmtdew=13.67, humidity=39.67, cloud=0.0, wind=20.19, temperature=15.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:08:07', seeing=1.55, atlas_timestamp='2025-11-17T20:07:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.21274999999999977, 0.21525000000000105, 0.22225000000000072, 0.3404999999999987, 0.2944999999999993, 0.27475000000000094, 0.2419999999999991, 0.2162500000000005, 0.2574999999999985, 0.20500000000000185, 0.3272499999999994, 0.3230000000000004, 0.4510000000000005, 0.3202499999999997, 0.20749999999999957, 0.17799999999999905, 0.2322500000000005, 0.3885000000000005, 0.48999999999999844, 0.42324999999999946, 0.6009999999999991, 0.4137499999999985, 0.23425000000000118, 0.17275000000000063, 0.23799999999999955, 0.3484999999999996, 0.5332499999999998, 0.6349999999999998, 0.766, 0.44200000000000106, 0.43350000000000044, 0.16900000000000048, 0.12575000000000003], zp_timestamp='2025-11-17T20:06:00')
2025-11-17T22:08:27.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:08:27.386 [DEBUG] [Thread-62126] [transport.py] [_log()] starting thread (client mode): 0xd0754b50
2025-11-17T22:08:27.386 [DEBUG] [Thread-62126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:08:27.403 [DEBUG] [Thread-62126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:08:27.403 [INFO] [Thread-62126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:08:27.410 [DEBUG] [Thread-62126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] client lang: <none>
2025-11-17T22:08:27.411 [DEBUG] [Thread-62126] [transport.py] [_log()] server lang: <none>
2025-11-17T22:08:27.412 [DEBUG] [Thread-62126] [transport.py] [_log()] kex follows: False
2025-11-17T22:08:27.412 [DEBUG] [Thread-62126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:08:27.412 [DEBUG] [Thread-62126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:08:27.412 [DEBUG] [Thread-62126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:08:27.412 [DEBUG] [Thread-62126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:08:27.412 [DEBUG] [Thread-62126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:08:27.412 [DEBUG] [Thread-62126] [transport.py] [_log()] Compression: none
2025-11-17T22:08:27.412 [DEBUG] [Thread-62126] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:08:27.469 [DEBUG] [Thread-62126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:08:27.470 [DEBUG] [Thread-62126] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:08:27.471 [DEBUG] [Thread-62126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:08:27.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:08:27.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:08:27.529 [DEBUG] [Thread-62126] [transport.py] [_log()] userauth is OK
2025-11-17T22:08:27.529 [DEBUG] [Thread-62126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:08:27.529 [DEBUG] [Thread-62126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:08:27.529 [DEBUG] [Thread-62126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:08:27.530 [DEBUG] [Thread-62126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:08:27.550 [INFO] [Thread-62126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:08:27.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:08:27.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:08:28.399 [DEBUG] [Thread-62126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:08:28.399 [DEBUG] [Thread-62126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:08:28.447 [DEBUG] [Thread-62126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:08:28.447 [DEBUG] [Thread-62126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:08:28.457 [DEBUG] [Thread-62126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:08:28.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:08:28.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:08:28.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:08:28.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:08:28.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:08:28.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:08:28.491 [DEBUG] [Thread-62126] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:08:29.597 [DEBUG] [Thread-62128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:08:44.634 [DEBUG] [Thread-62129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:08:44.848 [DEBUG] [Thread-62130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:08:58.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:08:58.025 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:08:58.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:08:58.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:08:58.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:08:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 8, 39), 13.62, 39.67, 0.0, 20.33, 15.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:08:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:08:39
2025-11-17T22:08:59.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:08:59.429 [DEBUG] [Thread-62131] [transport.py] [_log()] starting thread (client mode): 0xd0754b20
2025-11-17T22:08:59.429 [DEBUG] [Thread-62131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:08:59.448 [DEBUG] [Thread-62131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:08:59.448 [INFO] [Thread-62131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:08:59.451 [DEBUG] [Thread-62131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:08:59.451 [DEBUG] [Thread-62131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] client lang: <none>
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] server lang: <none>
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] kex follows: False
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] Compression: none
2025-11-17T22:08:59.452 [DEBUG] [Thread-62131] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:08:59.472 [DEBUG] [Thread-62131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:08:59.473 [DEBUG] [Thread-62131] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:08:59.473 [DEBUG] [Thread-62131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:08:59.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:08:59.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:08:59.475 [DEBUG] [Thread-62131] [transport.py] [_log()] userauth is OK
2025-11-17T22:08:59.475 [DEBUG] [Thread-62131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:08:59.475 [DEBUG] [Thread-62131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:08:59.476 [DEBUG] [Thread-62131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:08:59.476 [DEBUG] [Thread-62131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:08:59.490 [INFO] [Thread-62131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:08:59.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:08:59.665 [DEBUG] [Thread-62133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:09:00.143 [DEBUG] [Thread-62131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:09:00.143 [DEBUG] [Thread-62131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:09:00.144 [DEBUG] [Thread-62131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:09:00.184 [DEBUG] [Thread-62131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:09:00.185 [DEBUG] [Thread-62131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:09:00.187 [DEBUG] [Thread-62131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:09:00.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:09:00.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:09:00.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:09:00.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:09:00.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:09:00.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:09:00.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:09:00.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:09:00.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:09:00.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.838936 -999.00  +15.10  16.65     44   +3.10 1 1 1 1 1     0    0 11.38 -35.30 ZNESW 13.3 16.6 178.8 20.2 15.7 -22.8 15.6 -21.9 15.3 -21.4 15.7 -22.2
2025-11-17T22:09:00.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:09:00.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:09:00.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.838936
2025-11-17T22:09:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:09:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:09:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:09:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:09:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:09:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:08:39', tmtdew=13.62, humidity=39.67, cloud=0.0, wind=20.33, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:08:39', seeing=1.67, atlas_timestamp='2025-11-17T20:08:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.21274999999999977, 0.21525000000000105, 0.22225000000000072, 0.3404999999999987, 0.2944999999999993, 0.27475000000000094, 0.2419999999999991, 0.2162500000000005, 0.2574999999999985, 0.20500000000000185, 0.3272499999999994, 0.3230000000000004, 0.4510000000000005, 0.3202499999999997, 0.20749999999999957, 0.17799999999999905, 0.2322500000000005, 0.3885000000000005, 0.48999999999999844, 0.42324999999999946, 0.6009999999999991, 0.4137499999999985, 0.23425000000000118, 0.17275000000000063, 0.23799999999999955, 0.3484999999999996, 0.5332499999999998, 0.6349999999999998, 0.766, 0.44200000000000106, 0.43350000000000044, 0.16900000000000048, 0.12575000000000003], zp_timestamp='2025-11-17T20:06:00')
2025-11-17T22:09:00.213 [DEBUG] [Thread-62131] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:09:00.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:09:00.310 [DEBUG] [Thread-62135] [transport.py] [_log()] starting thread (client mode): 0xd0702b60
2025-11-17T22:09:00.310 [DEBUG] [Thread-62135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:09:00.326 [DEBUG] [Thread-62135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:09:00.326 [INFO] [Thread-62135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:09:00.333 [DEBUG] [Thread-62135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] client lang: <none>
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] server lang: <none>
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] kex follows: False
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:09:00.334 [DEBUG] [Thread-62135] [transport.py] [_log()] Compression: none
2025-11-17T22:09:00.335 [DEBUG] [Thread-62135] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:09:00.393 [DEBUG] [Thread-62135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:09:00.393 [DEBUG] [Thread-62135] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:09:00.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:09:00.394 [DEBUG] [Thread-62135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:09:00.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:09:00.452 [DEBUG] [Thread-62135] [transport.py] [_log()] userauth is OK
2025-11-17T22:09:00.453 [DEBUG] [Thread-62135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:09:00.453 [DEBUG] [Thread-62135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:09:00.453 [DEBUG] [Thread-62135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:09:00.453 [DEBUG] [Thread-62135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:09:00.472 [INFO] [Thread-62135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:09:00.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:09:00.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:09:01.318 [DEBUG] [Thread-62135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:09:01.318 [DEBUG] [Thread-62135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:09:01.366 [DEBUG] [Thread-62135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:09:01.366 [DEBUG] [Thread-62135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:09:01.375 [DEBUG] [Thread-62135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:09:01.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:09:01.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:09:01.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:09:01.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:09:01.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:09:01.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:09:01.410 [DEBUG] [Thread-62135] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:09:14.694 [DEBUG] [Thread-62137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:09:29.734 [DEBUG] [Thread-62138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:09:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:09:31.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:09:31.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:09:32.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 9, 11), 13.6, 39.72, 0.0, 18.35, 15.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:09:32.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:09:11
2025-11-17T22:09:32.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:09:32.347 [DEBUG] [Thread-62139] [transport.py] [_log()] starting thread (client mode): 0xd3150e50
2025-11-17T22:09:32.347 [DEBUG] [Thread-62139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:09:32.366 [DEBUG] [Thread-62139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:09:32.367 [INFO] [Thread-62139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:09:32.369 [DEBUG] [Thread-62139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:09:32.369 [DEBUG] [Thread-62139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:09:32.369 [DEBUG] [Thread-62139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:09:32.369 [DEBUG] [Thread-62139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:09:32.369 [DEBUG] [Thread-62139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:09:32.369 [DEBUG] [Thread-62139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:09:32.369 [DEBUG] [Thread-62139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] client lang: <none>
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] server lang: <none>
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] kex follows: False
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] Compression: none
2025-11-17T22:09:32.370 [DEBUG] [Thread-62139] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:09:32.385 [DEBUG] [Thread-62139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:09:32.385 [DEBUG] [Thread-62139] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:09:32.386 [DEBUG] [Thread-62139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:09:32.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:09:32.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:09:32.387 [DEBUG] [Thread-62139] [transport.py] [_log()] userauth is OK
2025-11-17T22:09:32.387 [DEBUG] [Thread-62139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:09:32.387 [DEBUG] [Thread-62139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:09:32.387 [DEBUG] [Thread-62139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:09:32.387 [DEBUG] [Thread-62139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:09:32.408 [INFO] [Thread-62139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:09:32.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:09:33.026 [DEBUG] [Thread-62139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:09:33.026 [DEBUG] [Thread-62139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:09:33.026 [DEBUG] [Thread-62139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:09:33.067 [DEBUG] [Thread-62139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:09:33.068 [DEBUG] [Thread-62139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:09:33.071 [DEBUG] [Thread-62139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:09:33.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:09:33.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:09:33.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:09:33.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:09:33.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:09:33.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:09:33.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:09:33.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:09:33.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:09:33.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.839631 -999.00  +15.10  18.40     44   +3.10 1 2 1 1 1     0    0 11.23 -32.21 ZNEsW 13.3 18.4 176.6 20.7 15.7 -22.7 15.6 -21.8 15.4 -21.4 15.6 -22.0
2025-11-17T22:09:33.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:09:33.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:09:33.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.839631
2025-11-17T22:09:33.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:09:33.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:09:33.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:09:33.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:09:33.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:09:33.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:09:11', tmtdew=13.6, humidity=39.72, cloud=0.0, wind=18.35, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:09:11', seeing=1.67, atlas_timestamp='2025-11-17T20:09:04.118', atlas_cloud=2, atlas_rain=1, zp_data=[0.21274999999999977, 0.21525000000000105, 0.22225000000000072, 0.3404999999999987, 0.2944999999999993, 0.27475000000000094, 0.2419999999999991, 0.2162500000000005, 0.2574999999999985, 0.20500000000000185, 0.3272499999999994, 0.3230000000000004, 0.4510000000000005, 0.3202499999999997, 0.20749999999999957, 0.17799999999999905, 0.2322500000000005, 0.3885000000000005, 0.48999999999999844, 0.42324999999999946, 0.6009999999999991, 0.4137499999999985, 0.23425000000000118, 0.17275000000000063, 0.23799999999999955, 0.3484999999999996, 0.5332499999999998, 0.6349999999999998, 0.766, 0.44200000000000106, 0.43350000000000044, 0.16900000000000048, 0.12575000000000003], zp_timestamp='2025-11-17T20:06:00')
2025-11-17T22:09:33.094 [DEBUG] [Thread-62139] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:09:33.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:09:44.762 [DEBUG] [Thread-62142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:09:44.921 [DEBUG] [Thread-62143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:09:58.266 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:09:58.267 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:09:59.792 [DEBUG] [Thread-62144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:10:14.822 [DEBUG] [Thread-62145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:10:29.850 [DEBUG] [Thread-62146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:10:44.877 [DEBUG] [Thread-62147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:10:44.999 [DEBUG] [Thread-62148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:10:58.471 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:10:58.472 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:10:59.906 [DEBUG] [Thread-62149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:11:14.931 [DEBUG] [Thread-62150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:11:29.957 [DEBUG] [Thread-62151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:11:44.988 [DEBUG] [Thread-62152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:11:45.089 [DEBUG] [Thread-62153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:11:45.723 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T22:11:58.676 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:11:58.677 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:12:00.017 [DEBUG] [Thread-62154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:12:15.046 [DEBUG] [Thread-62155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:12:15.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:12:15.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:12:15.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:12:16.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 11, 51), 13.55, 39.84, 0.0, 19.53, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:12:16.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:11:51
2025-11-17T22:12:16.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:12:16.678 [DEBUG] [Thread-62156] [transport.py] [_log()] starting thread (client mode): 0xd0711ab0
2025-11-17T22:12:16.678 [DEBUG] [Thread-62156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:12:16.700 [DEBUG] [Thread-62156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:12:16.701 [INFO] [Thread-62156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] client lang: <none>
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] server lang: <none>
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] kex follows: False
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] Compression: none
2025-11-17T22:12:16.705 [DEBUG] [Thread-62156] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:12:16.724 [DEBUG] [Thread-62156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:12:16.724 [DEBUG] [Thread-62156] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:12:16.724 [DEBUG] [Thread-62156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:12:16.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:12:16.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:12:16.726 [DEBUG] [Thread-62156] [transport.py] [_log()] userauth is OK
2025-11-17T22:12:16.727 [DEBUG] [Thread-62156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:12:16.727 [DEBUG] [Thread-62156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:12:16.727 [DEBUG] [Thread-62156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:12:16.727 [DEBUG] [Thread-62156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:12:16.740 [INFO] [Thread-62156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:12:16.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:12:17.360 [DEBUG] [Thread-62156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:12:17.360 [DEBUG] [Thread-62156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:12:17.360 [DEBUG] [Thread-62156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:12:17.401 [DEBUG] [Thread-62156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:12:17.402 [DEBUG] [Thread-62156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:12:17.405 [DEBUG] [Thread-62156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:12:17.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:12:17.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:12:17.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:12:17.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:12:17.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:12:17.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:12:17.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:12:17.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:12:17.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:12:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.841367 -999.00  +15.10  12.84     44   +3.10 1 2 1 1 1     0    0 11.15 -36.33 ZNEsW 12.6 12.8 174.0 17.8 15.7 -22.7 15.6 -21.7 15.3 -21.3 15.6 -22.0
2025-11-17T22:12:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:12:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:12:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.841367
2025-11-17T22:12:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:12:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:12:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:12:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:12:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:12:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:11:51', tmtdew=13.55, humidity=39.84, cloud=0.0, wind=19.53, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:11:51', seeing=1.6, atlas_timestamp='2025-11-17T20:11:34.109', atlas_cloud=2, atlas_rain=1, zp_data=[0.21274999999999977, 0.21525000000000105, 0.22225000000000072, 0.3404999999999987, 0.2944999999999993, 0.27475000000000094, 0.2419999999999991, 0.2162500000000005, 0.2574999999999985, 0.20500000000000185, 0.3272499999999994, 0.3230000000000004, 0.4510000000000005, 0.3202499999999997, 0.20749999999999957, 0.17799999999999905, 0.2322500000000005, 0.3885000000000005, 0.48999999999999844, 0.42324999999999946, 0.6009999999999991, 0.4137499999999985, 0.23425000000000118, 0.17275000000000063, 0.23799999999999955, 0.3484999999999996, 0.5332499999999998, 0.6349999999999998, 0.766, 0.44200000000000106, 0.43350000000000044, 0.16900000000000048, 0.12575000000000003], zp_timestamp='2025-11-17T20:09:00')
2025-11-17T22:12:17.430 [DEBUG] [Thread-62156] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:12:17.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:12:17.526 [DEBUG] [Thread-62159] [transport.py] [_log()] starting thread (client mode): 0xd0710e80
2025-11-17T22:12:17.526 [DEBUG] [Thread-62159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:12:17.540 [DEBUG] [Thread-62159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:12:17.541 [INFO] [Thread-62159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:12:17.548 [DEBUG] [Thread-62159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:12:17.548 [DEBUG] [Thread-62159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:12:17.548 [DEBUG] [Thread-62159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] client lang: <none>
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] server lang: <none>
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] kex follows: False
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:12:17.549 [DEBUG] [Thread-62159] [transport.py] [_log()] Compression: none
2025-11-17T22:12:17.550 [DEBUG] [Thread-62159] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:12:17.604 [DEBUG] [Thread-62159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:12:17.605 [DEBUG] [Thread-62159] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:12:17.605 [DEBUG] [Thread-62159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:12:17.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:12:17.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:12:17.662 [DEBUG] [Thread-62159] [transport.py] [_log()] userauth is OK
2025-11-17T22:12:17.662 [DEBUG] [Thread-62159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:12:17.663 [DEBUG] [Thread-62159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:12:17.663 [DEBUG] [Thread-62159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:12:17.663 [DEBUG] [Thread-62159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:12:17.684 [INFO] [Thread-62159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:12:17.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:12:17.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:12:18.522 [DEBUG] [Thread-62159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:12:18.522 [DEBUG] [Thread-62159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:12:18.569 [DEBUG] [Thread-62159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:12:18.569 [DEBUG] [Thread-62159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:12:18.578 [DEBUG] [Thread-62159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:12:18.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:12:18.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:12:18.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:12:18.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:12:18.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:12:18.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:12:18.613 [DEBUG] [Thread-62159] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:12:30.077 [DEBUG] [Thread-62161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:12:45.106 [DEBUG] [Thread-62162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:12:45.147 [DEBUG] [Thread-62163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:12:48.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:12:48.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:12:48.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:12:49.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 12, 23), 13.55, 39.84, 0.0, 18.55, 15.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:12:49.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:12:23
2025-11-17T22:12:49.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:12:49.558 [DEBUG] [Thread-62164] [transport.py] [_log()] starting thread (client mode): 0xd0713f70
2025-11-17T22:12:49.558 [DEBUG] [Thread-62164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:12:49.580 [DEBUG] [Thread-62164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:12:49.580 [INFO] [Thread-62164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] client lang: <none>
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] server lang: <none>
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] kex follows: False
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] Compression: none
2025-11-17T22:12:49.583 [DEBUG] [Thread-62164] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:12:49.600 [DEBUG] [Thread-62164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:12:49.601 [DEBUG] [Thread-62164] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:12:49.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:12:49.602 [DEBUG] [Thread-62164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:12:49.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:12:49.604 [DEBUG] [Thread-62164] [transport.py] [_log()] userauth is OK
2025-11-17T22:12:49.604 [DEBUG] [Thread-62164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:12:49.604 [DEBUG] [Thread-62164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:12:49.604 [DEBUG] [Thread-62164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:12:49.604 [DEBUG] [Thread-62164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:12:49.637 [INFO] [Thread-62164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:12:49.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:12:50.271 [DEBUG] [Thread-62164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:12:50.271 [DEBUG] [Thread-62164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:12:50.272 [DEBUG] [Thread-62164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:12:50.312 [DEBUG] [Thread-62164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:12:50.313 [DEBUG] [Thread-62164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:12:50.316 [DEBUG] [Thread-62164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:12:50.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:12:50.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:12:50.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:12:50.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:12:50.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:12:50.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:12:50.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:12:50.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:12:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:12:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.842061 -999.00  +15.10  14.47     44   +3.10 1 2 1 1 1     0    0 11.35 -31.20 ZNEsW 15.4 14.5 168.2 16.6 15.7 -22.7 15.5 -21.6 15.3 -21.3 15.6 -21.9
2025-11-17T22:12:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:12:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:12:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.842061
2025-11-17T22:12:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:12:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:12:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:12:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:12:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:12:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:12:23', tmtdew=13.55, humidity=39.84, cloud=0.0, wind=18.55, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:12:23', seeing=1.6, atlas_timestamp='2025-11-17T20:12:34.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.21274999999999977, 0.21525000000000105, 0.22225000000000072, 0.3404999999999987, 0.2944999999999993, 0.27475000000000094, 0.2419999999999991, 0.2162500000000005, 0.2574999999999985, 0.20500000000000185, 0.3272499999999994, 0.3230000000000004, 0.4510000000000005, 0.3202499999999997, 0.20749999999999957, 0.17799999999999905, 0.2322500000000005, 0.3885000000000005, 0.48999999999999844, 0.42324999999999946, 0.6009999999999991, 0.4137499999999985, 0.23425000000000118, 0.17275000000000063, 0.23799999999999955, 0.3484999999999996, 0.5332499999999998, 0.6349999999999998, 0.766, 0.44200000000000106, 0.43350000000000044, 0.16900000000000048, 0.12575000000000003], zp_timestamp='2025-11-17T20:09:00')
2025-11-17T22:12:50.342 [DEBUG] [Thread-62164] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:12:50.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:12:50.439 [DEBUG] [Thread-62167] [transport.py] [_log()] starting thread (client mode): 0xd0756680
2025-11-17T22:12:50.439 [DEBUG] [Thread-62167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:12:50.453 [DEBUG] [Thread-62167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:12:50.454 [INFO] [Thread-62167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:12:50.461 [DEBUG] [Thread-62167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:12:50.461 [DEBUG] [Thread-62167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:12:50.461 [DEBUG] [Thread-62167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] client lang: <none>
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] server lang: <none>
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] kex follows: False
2025-11-17T22:12:50.462 [DEBUG] [Thread-62167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:12:50.463 [DEBUG] [Thread-62167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:12:50.463 [DEBUG] [Thread-62167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:12:50.463 [DEBUG] [Thread-62167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:12:50.463 [DEBUG] [Thread-62167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:12:50.463 [DEBUG] [Thread-62167] [transport.py] [_log()] Compression: none
2025-11-17T22:12:50.463 [DEBUG] [Thread-62167] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:12:50.520 [DEBUG] [Thread-62167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:12:50.520 [DEBUG] [Thread-62167] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:12:50.521 [DEBUG] [Thread-62167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:12:50.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:12:50.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:12:50.577 [DEBUG] [Thread-62167] [transport.py] [_log()] userauth is OK
2025-11-17T22:12:50.577 [DEBUG] [Thread-62167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:12:50.577 [DEBUG] [Thread-62167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:12:50.577 [DEBUG] [Thread-62167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:12:50.577 [DEBUG] [Thread-62167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:12:50.596 [INFO] [Thread-62167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:12:50.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:12:50.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:12:51.434 [DEBUG] [Thread-62167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:12:51.434 [DEBUG] [Thread-62167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:12:51.482 [DEBUG] [Thread-62167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:12:51.482 [DEBUG] [Thread-62167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:12:51.491 [DEBUG] [Thread-62167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:12:51.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:12:51.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:12:51.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:12:51.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:12:51.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:12:51.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:12:51.526 [DEBUG] [Thread-62167] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:12:58.881 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:12:58.882 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:13:00.132 [DEBUG] [Thread-62169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:13:15.174 [DEBUG] [Thread-62170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:13:21.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:13:21.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:13:21.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:13:22.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 12, 55), 13.53, 39.9, 0.0, 21.1, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:13:22.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:12:55
2025-11-17T22:13:22.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:13:22.462 [DEBUG] [Thread-62171] [transport.py] [_log()] starting thread (client mode): 0xd0757910
2025-11-17T22:13:22.463 [DEBUG] [Thread-62171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:13:22.483 [DEBUG] [Thread-62171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:13:22.483 [INFO] [Thread-62171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] client lang: <none>
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] server lang: <none>
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] kex follows: False
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] Compression: none
2025-11-17T22:13:22.487 [DEBUG] [Thread-62171] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:13:22.504 [DEBUG] [Thread-62171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:13:22.504 [DEBUG] [Thread-62171] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:13:22.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:13:22.505 [DEBUG] [Thread-62171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:13:22.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:13:22.507 [DEBUG] [Thread-62171] [transport.py] [_log()] userauth is OK
2025-11-17T22:13:22.508 [DEBUG] [Thread-62171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:13:22.508 [DEBUG] [Thread-62171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:13:22.508 [DEBUG] [Thread-62171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:13:22.508 [DEBUG] [Thread-62171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:13:22.544 [INFO] [Thread-62171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:13:22.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:13:23.198 [DEBUG] [Thread-62171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:13:23.199 [DEBUG] [Thread-62171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:13:23.199 [DEBUG] [Thread-62171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:13:23.239 [DEBUG] [Thread-62171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:13:23.240 [DEBUG] [Thread-62171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:13:23.242 [DEBUG] [Thread-62171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:13:23.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:13:23.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:13:23.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:13:23.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:13:23.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:13:23.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:13:23.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:13:23.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:13:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:13:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.842408 -999.00  +15.10  12.78     44   +3.20 1 1 1 1 1     0    0 11.30 -29.79 ZNESW 13.8 12.8 164.4 20.8 15.6 -22.6 15.5 -21.7 15.3 -21.2 15.6 -21.9
2025-11-17T22:13:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:13:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:13:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.842408
2025-11-17T22:13:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:13:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:13:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:13:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:13:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:13:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:12:55', tmtdew=13.53, humidity=39.9, cloud=0.0, wind=21.1, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:12:55', seeing=1.9, atlas_timestamp='2025-11-17T20:13:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.17425000000000068, 0.24825000000000053, 0.301499999999999, 0.27449999999999974, 0.25725000000000087, 0.22799999999999976, 0.12925000000000075, 0.18399999999999928, 0.2370000000000001, 0.3692499999999992, 0.42100000000000115, 0.3844999999999992, 0.3142499999999995, 0.18900000000000006, 0.19200000000000017, 0.19125000000000014, 0.3384999999999998, 0.5510000000000002, 0.5982499999999993, 0.762999999999999, 0.43824999999999914, 0.27825000000000166, 0.17575000000000074, 0.18349999999999866, 0.4090000000000016, 0.4897499999999999, 0.4710000000000001, 0.5720000000000001, 0.5600000000000014, 0.4350000000000014, 0.24350000000000094, 0.16474999999999973], zp_timestamp='2025-11-17T20:11:00')
2025-11-17T22:13:23.270 [DEBUG] [Thread-62171] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:13:23.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:13:23.366 [DEBUG] [Thread-62174] [transport.py] [_log()] starting thread (client mode): 0xd0756fb0
2025-11-17T22:13:23.366 [DEBUG] [Thread-62174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:13:23.381 [DEBUG] [Thread-62174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:13:23.381 [INFO] [Thread-62174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:13:23.389 [DEBUG] [Thread-62174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:13:23.389 [DEBUG] [Thread-62174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:13:23.389 [DEBUG] [Thread-62174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:13:23.389 [DEBUG] [Thread-62174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:13:23.389 [DEBUG] [Thread-62174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:13:23.389 [DEBUG] [Thread-62174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:13:23.389 [DEBUG] [Thread-62174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] client lang: <none>
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] server lang: <none>
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] kex follows: False
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:13:23.390 [DEBUG] [Thread-62174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:13:23.391 [DEBUG] [Thread-62174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:13:23.391 [DEBUG] [Thread-62174] [transport.py] [_log()] Compression: none
2025-11-17T22:13:23.391 [DEBUG] [Thread-62174] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:13:23.450 [DEBUG] [Thread-62174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:13:23.451 [DEBUG] [Thread-62174] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:13:23.451 [DEBUG] [Thread-62174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:13:23.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:13:23.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:13:23.510 [DEBUG] [Thread-62174] [transport.py] [_log()] userauth is OK
2025-11-17T22:13:23.510 [DEBUG] [Thread-62174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:13:23.510 [DEBUG] [Thread-62174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:13:23.510 [DEBUG] [Thread-62174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:13:23.510 [DEBUG] [Thread-62174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:13:23.529 [INFO] [Thread-62174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:13:23.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:13:23.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:13:24.367 [DEBUG] [Thread-62174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:13:24.367 [DEBUG] [Thread-62174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:13:24.415 [DEBUG] [Thread-62174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:13:24.415 [DEBUG] [Thread-62174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:13:24.425 [DEBUG] [Thread-62174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:13:24.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:13:24.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:13:24.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:13:24.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:13:24.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:13:24.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:13:24.460 [DEBUG] [Thread-62174] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:13:30.206 [DEBUG] [Thread-62176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:13:36.413 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:13:45.221 [DEBUG] [Thread-62177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:13:45.253 [DEBUG] [Thread-62178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:13:54.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:13:54.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:13:54.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:13:55.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 13, 27), 13.53, 39.9, 0.0, 21.19, 15.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:13:55.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:13:27
2025-11-17T22:13:55.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:13:55.400 [DEBUG] [Thread-62179] [transport.py] [_log()] starting thread (client mode): 0xd3153a90
2025-11-17T22:13:55.400 [DEBUG] [Thread-62179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:13:55.411 [DEBUG] [Thread-62179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:13:55.411 [INFO] [Thread-62179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:13:55.412 [DEBUG] [Thread-62179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] client lang: <none>
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] server lang: <none>
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] kex follows: False
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] Compression: none
2025-11-17T22:13:55.413 [DEBUG] [Thread-62179] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:13:55.422 [DEBUG] [Thread-62179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:13:55.422 [DEBUG] [Thread-62179] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:13:55.422 [DEBUG] [Thread-62179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:13:55.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:13:55.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:13:55.423 [DEBUG] [Thread-62179] [transport.py] [_log()] userauth is OK
2025-11-17T22:13:55.423 [DEBUG] [Thread-62179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:13:55.423 [DEBUG] [Thread-62179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:13:55.423 [DEBUG] [Thread-62179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:13:55.423 [DEBUG] [Thread-62179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:13:55.433 [INFO] [Thread-62179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:13:55.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:13:55.985 [DEBUG] [Thread-62179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:13:55.986 [DEBUG] [Thread-62179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:13:55.986 [DEBUG] [Thread-62179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:13:56.026 [DEBUG] [Thread-62179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:13:56.026 [DEBUG] [Thread-62179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:13:56.032 [DEBUG] [Thread-62179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:13:56.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:13:56.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:13:56.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:13:56.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:13:56.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:13:56.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:13:56.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:13:56.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:13:56.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:13:56.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.842756 -999.00  +15.10  14.71     44   +3.20 1 1 1 1 1     0    0 11.35 -29.44 ZNESW 14.0 14.7 175.8 19.7 15.6 -22.6 15.5 -21.9 15.3 -21.4 15.6 -21.8
2025-11-17T22:13:56.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:13:56.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:13:56.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.842756
2025-11-17T22:13:56.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:13:56.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:13:56.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:13:56.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:13:56.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:13:56.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:13:27', tmtdew=13.53, humidity=39.9, cloud=0.0, wind=21.19, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:13:27', seeing=1.58, atlas_timestamp='2025-11-17T20:13:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.17425000000000068, 0.24825000000000053, 0.301499999999999, 0.27449999999999974, 0.25725000000000087, 0.22799999999999976, 0.12925000000000075, 0.18399999999999928, 0.2370000000000001, 0.3692499999999992, 0.42100000000000115, 0.3844999999999992, 0.3142499999999995, 0.18900000000000006, 0.19200000000000017, 0.19125000000000014, 0.3384999999999998, 0.5510000000000002, 0.5982499999999993, 0.762999999999999, 0.43824999999999914, 0.27825000000000166, 0.17575000000000074, 0.18349999999999866, 0.4090000000000016, 0.4897499999999999, 0.4710000000000001, 0.5720000000000001, 0.5600000000000014, 0.4350000000000014, 0.24350000000000094, 0.16474999999999973], zp_timestamp='2025-11-17T20:11:00')
2025-11-17T22:13:56.057 [DEBUG] [Thread-62179] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:13:56.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:13:56.154 [DEBUG] [Thread-62182] [transport.py] [_log()] starting thread (client mode): 0xd3153d60
2025-11-17T22:13:56.154 [DEBUG] [Thread-62182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:13:56.169 [DEBUG] [Thread-62182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:13:56.169 [INFO] [Thread-62182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:13:56.176 [DEBUG] [Thread-62182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:13:56.177 [DEBUG] [Thread-62182] [transport.py] [_log()] client lang: <none>
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] server lang: <none>
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] kex follows: False
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] Compression: none
2025-11-17T22:13:56.178 [DEBUG] [Thread-62182] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:13:56.235 [DEBUG] [Thread-62182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:13:56.236 [DEBUG] [Thread-62182] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:13:56.236 [DEBUG] [Thread-62182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:13:56.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:13:56.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:13:56.293 [DEBUG] [Thread-62182] [transport.py] [_log()] userauth is OK
2025-11-17T22:13:56.293 [DEBUG] [Thread-62182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:13:56.293 [DEBUG] [Thread-62182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:13:56.293 [DEBUG] [Thread-62182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:13:56.293 [DEBUG] [Thread-62182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:13:56.313 [INFO] [Thread-62182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:13:56.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:13:56.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:13:57.172 [DEBUG] [Thread-62182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:13:57.172 [DEBUG] [Thread-62182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:13:57.220 [DEBUG] [Thread-62182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:13:57.220 [DEBUG] [Thread-62182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:13:57.229 [DEBUG] [Thread-62182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:13:57.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:13:57.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:13:57.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:13:57.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:13:57.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:13:57.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:13:57.263 [DEBUG] [Thread-62182] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:13:59.085 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:13:59.086 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:14:00.281 [DEBUG] [Thread-62184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:14:15.313 [DEBUG] [Thread-62185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:14:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:14:27.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:14:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:14:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 13, 59), 13.49, 39.89, 0.0, 21.56, 15.05, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:14:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:13:59
2025-11-17T22:14:28.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:14:28.238 [DEBUG] [Thread-62186] [transport.py] [_log()] starting thread (client mode): 0xd31509d0
2025-11-17T22:14:28.239 [DEBUG] [Thread-62186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:14:28.258 [DEBUG] [Thread-62186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:14:28.258 [INFO] [Thread-62186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] client lang: <none>
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] server lang: <none>
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] kex follows: False
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] Compression: none
2025-11-17T22:14:28.262 [DEBUG] [Thread-62186] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:14:28.271 [DEBUG] [Thread-62186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:14:28.271 [DEBUG] [Thread-62186] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:14:28.271 [DEBUG] [Thread-62186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:14:28.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:14:28.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:14:28.272 [DEBUG] [Thread-62186] [transport.py] [_log()] userauth is OK
2025-11-17T22:14:28.272 [DEBUG] [Thread-62186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:14:28.272 [DEBUG] [Thread-62186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:14:28.272 [DEBUG] [Thread-62186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:14:28.272 [DEBUG] [Thread-62186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:14:28.285 [INFO] [Thread-62186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:14:28.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:14:28.870 [DEBUG] [Thread-62186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:14:28.870 [DEBUG] [Thread-62186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:14:28.871 [DEBUG] [Thread-62186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:14:28.911 [DEBUG] [Thread-62186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:14:28.911 [DEBUG] [Thread-62186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:14:28.912 [DEBUG] [Thread-62186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:14:28.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:14:28.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:14:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:14:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:14:28.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:14:28.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:14:28.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.843103 -999.00  +15.10  15.80     44   +3.20 1 1 1 1 1     0    0 11.35 -28.13 ZNESW 12.0 15.8 168.8 22.2 15.6 -22.5 15.5 -21.8 15.2 -21.3 15.6 -21.9
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.843103
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:14:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:13:59', tmtdew=13.49, humidity=39.89, cloud=0.0, wind=21.56, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:13:59', seeing=1.65, atlas_timestamp='2025-11-17T20:14:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.17425000000000068, 0.24825000000000053, 0.301499999999999, 0.27449999999999974, 0.25725000000000087, 0.22799999999999976, 0.12925000000000075, 0.18399999999999928, 0.2370000000000001, 0.3692499999999992, 0.42100000000000115, 0.3844999999999992, 0.3142499999999995, 0.18900000000000006, 0.19200000000000017, 0.19125000000000014, 0.3384999999999998, 0.5510000000000002, 0.5982499999999993, 0.762999999999999, 0.43824999999999914, 0.27825000000000166, 0.17575000000000074, 0.18349999999999866, 0.4090000000000016, 0.4897499999999999, 0.4710000000000001, 0.5720000000000001, 0.5600000000000014, 0.4350000000000014, 0.24350000000000094, 0.16474999999999973], zp_timestamp='2025-11-17T20:11:00')
2025-11-17T22:14:28.931 [DEBUG] [Thread-62186] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:14:29.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:14:29.017 [DEBUG] [Thread-62189] [transport.py] [_log()] starting thread (client mode): 0xd3151ea0
2025-11-17T22:14:29.017 [DEBUG] [Thread-62189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:14:29.032 [DEBUG] [Thread-62189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:14:29.032 [INFO] [Thread-62189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:14:29.039 [DEBUG] [Thread-62189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:14:29.039 [DEBUG] [Thread-62189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] client lang: <none>
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] server lang: <none>
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] kex follows: False
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] Compression: none
2025-11-17T22:14:29.040 [DEBUG] [Thread-62189] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:14:29.096 [DEBUG] [Thread-62189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:14:29.096 [DEBUG] [Thread-62189] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:14:29.096 [DEBUG] [Thread-62189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:14:29.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:14:29.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:14:29.152 [DEBUG] [Thread-62189] [transport.py] [_log()] userauth is OK
2025-11-17T22:14:29.152 [DEBUG] [Thread-62189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:14:29.153 [DEBUG] [Thread-62189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:14:29.153 [DEBUG] [Thread-62189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:14:29.153 [DEBUG] [Thread-62189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:14:29.167 [INFO] [Thread-62189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:14:29.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:14:29.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:14:30.029 [DEBUG] [Thread-62189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:14:30.029 [DEBUG] [Thread-62189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:14:30.077 [DEBUG] [Thread-62189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:14:30.077 [DEBUG] [Thread-62189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:14:30.085 [DEBUG] [Thread-62189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:14:30.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:14:30.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:14:30.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:14:30.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:14:30.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:14:30.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:14:30.116 [DEBUG] [Thread-62189] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:14:30.338 [DEBUG] [Thread-62191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:14:45.295 [DEBUG] [Thread-62192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:14:45.371 [DEBUG] [Thread-62193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:14:59.292 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:14:59.293 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:15:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:15:00.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:15:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:15:00.402 [DEBUG] [Thread-62194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:15:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 14, 31), 13.5, 39.85, 0.0, 21.07, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:15:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:14:31
2025-11-17T22:15:00.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:15:01.047 [DEBUG] [Thread-62195] [transport.py] [_log()] starting thread (client mode): 0xd0756110
2025-11-17T22:15:01.047 [DEBUG] [Thread-62195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:15:01.067 [DEBUG] [Thread-62195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:15:01.068 [INFO] [Thread-62195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] client lang: <none>
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] server lang: <none>
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] kex follows: False
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] Compression: none
2025-11-17T22:15:01.071 [DEBUG] [Thread-62195] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:15:01.087 [DEBUG] [Thread-62195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:15:01.087 [DEBUG] [Thread-62195] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:15:01.088 [DEBUG] [Thread-62195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:15:01.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:15:01.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:15:01.092 [DEBUG] [Thread-62195] [transport.py] [_log()] userauth is OK
2025-11-17T22:15:01.092 [DEBUG] [Thread-62195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:15:01.093 [DEBUG] [Thread-62195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:15:01.093 [DEBUG] [Thread-62195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:15:01.093 [DEBUG] [Thread-62195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:15:01.116 [INFO] [Thread-62195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:15:01.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:15:01.739 [DEBUG] [Thread-62195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:15:01.739 [DEBUG] [Thread-62195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:15:01.739 [DEBUG] [Thread-62195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:15:01.780 [DEBUG] [Thread-62195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:15:01.780 [DEBUG] [Thread-62195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:15:01.782 [DEBUG] [Thread-62195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:15:01.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:15:01.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:15:01.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:15:01.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:15:01.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:15:01.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:15:01.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.843103 -999.00  +15.10  15.80     44   +3.20 1 1 1 1 1     0    0 11.35 -28.13 ZNESW 12.0 15.8 168.8 22.2 15.6 -22.5 15.5 -21.8 15.2 -21.3 15.6 -21.9
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.843103
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:15:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:14:31', tmtdew=13.5, humidity=39.85, cloud=0.0, wind=21.07, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:14:31', seeing=1.65, atlas_timestamp='2025-11-17T20:14:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.17425000000000068, 0.24825000000000053, 0.301499999999999, 0.27449999999999974, 0.25725000000000087, 0.22799999999999976, 0.12925000000000075, 0.18399999999999928, 0.2370000000000001, 0.3692499999999992, 0.42100000000000115, 0.3844999999999992, 0.3142499999999995, 0.18900000000000006, 0.19200000000000017, 0.19125000000000014, 0.3384999999999998, 0.5510000000000002, 0.5982499999999993, 0.762999999999999, 0.43824999999999914, 0.27825000000000166, 0.17575000000000074, 0.18349999999999866, 0.4090000000000016, 0.4897499999999999, 0.4710000000000001, 0.5720000000000001, 0.5600000000000014, 0.4350000000000014, 0.24350000000000094, 0.16474999999999973], zp_timestamp='2025-11-17T20:11:00')
2025-11-17T22:15:01.794 [DEBUG] [Thread-62195] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:15:01.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:15:01.877 [DEBUG] [Thread-62198] [transport.py] [_log()] starting thread (client mode): 0xd0754130
2025-11-17T22:15:01.877 [DEBUG] [Thread-62198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:15:01.894 [DEBUG] [Thread-62198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:15:01.894 [INFO] [Thread-62198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:15:01.902 [DEBUG] [Thread-62198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:15:01.902 [DEBUG] [Thread-62198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:15:01.902 [DEBUG] [Thread-62198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:15:01.902 [DEBUG] [Thread-62198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:15:01.902 [DEBUG] [Thread-62198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] client lang: <none>
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] server lang: <none>
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] kex follows: False
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] Compression: none
2025-11-17T22:15:01.903 [DEBUG] [Thread-62198] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:15:01.960 [DEBUG] [Thread-62198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:15:01.960 [DEBUG] [Thread-62198] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:15:01.960 [DEBUG] [Thread-62198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:15:01.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:15:01.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:15:02.016 [DEBUG] [Thread-62198] [transport.py] [_log()] userauth is OK
2025-11-17T22:15:02.016 [DEBUG] [Thread-62198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:15:02.016 [DEBUG] [Thread-62198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:15:02.016 [DEBUG] [Thread-62198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:15:02.016 [DEBUG] [Thread-62198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:15:02.031 [INFO] [Thread-62198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:15:02.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:15:02.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:15:02.939 [DEBUG] [Thread-62198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:15:02.939 [DEBUG] [Thread-62198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:15:02.987 [DEBUG] [Thread-62198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:15:02.987 [DEBUG] [Thread-62198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:15:02.997 [DEBUG] [Thread-62198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:15:03.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:15:03.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:15:03.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:15:03.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:15:03.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:15:03.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:15:03.031 [DEBUG] [Thread-62198] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:15:15.430 [DEBUG] [Thread-62200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:15:30.478 [DEBUG] [Thread-62201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:15:33.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:15:33.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:15:33.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:15:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 15, 3), 13.5, 39.84, 0.0, 22.36, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:15:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:15:03
2025-11-17T22:15:33.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:15:33.984 [DEBUG] [Thread-62202] [transport.py] [_log()] starting thread (client mode): 0xd7bc4f40
2025-11-17T22:15:33.984 [DEBUG] [Thread-62202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:15:34.004 [DEBUG] [Thread-62202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:15:34.004 [INFO] [Thread-62202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] client lang: <none>
2025-11-17T22:15:34.008 [DEBUG] [Thread-62202] [transport.py] [_log()] server lang: <none>
2025-11-17T22:15:34.009 [DEBUG] [Thread-62202] [transport.py] [_log()] kex follows: False
2025-11-17T22:15:34.009 [DEBUG] [Thread-62202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:15:34.009 [DEBUG] [Thread-62202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:15:34.009 [DEBUG] [Thread-62202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:15:34.009 [DEBUG] [Thread-62202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:15:34.009 [DEBUG] [Thread-62202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:15:34.009 [DEBUG] [Thread-62202] [transport.py] [_log()] Compression: none
2025-11-17T22:15:34.009 [DEBUG] [Thread-62202] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:15:34.028 [DEBUG] [Thread-62202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:15:34.028 [DEBUG] [Thread-62202] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:15:34.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:15:34.030 [DEBUG] [Thread-62202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:15:34.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:15:34.032 [DEBUG] [Thread-62202] [transport.py] [_log()] userauth is OK
2025-11-17T22:15:34.032 [DEBUG] [Thread-62202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:15:34.033 [DEBUG] [Thread-62202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:15:34.033 [DEBUG] [Thread-62202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:15:34.033 [DEBUG] [Thread-62202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:15:34.068 [INFO] [Thread-62202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:15:34.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:15:34.721 [DEBUG] [Thread-62202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:15:34.721 [DEBUG] [Thread-62202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:15:34.721 [DEBUG] [Thread-62202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:15:34.762 [DEBUG] [Thread-62202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:15:34.762 [DEBUG] [Thread-62202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:15:34.765 [DEBUG] [Thread-62202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:15:34.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:15:34.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:15:34.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:15:34.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:15:34.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:15:34.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:15:34.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:15:34.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:15:34.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:15:34.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.843450 -999.00  +15.10  17.47     44   +3.20 1 1 1 1 1     0    0 11.36 -25.91 ZNESW 16.8 17.5 170.8 20.5 15.7 -22.5 15.4 -21.8 15.3 -21.5 15.6 -21.9
2025-11-17T22:15:34.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:15:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:15:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.843450
2025-11-17T22:15:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:15:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:15:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:15:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:15:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:15:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:15:03', tmtdew=13.5, humidity=39.84, cloud=0.0, wind=22.36, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:15:03', seeing=1.54, atlas_timestamp='2025-11-17T20:14:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.17425000000000068, 0.24825000000000053, 0.301499999999999, 0.27449999999999974, 0.25725000000000087, 0.22799999999999976, 0.12925000000000075, 0.18399999999999928, 0.2370000000000001, 0.3692499999999992, 0.42100000000000115, 0.3844999999999992, 0.3142499999999995, 0.18900000000000006, 0.19200000000000017, 0.19125000000000014, 0.3384999999999998, 0.5510000000000002, 0.5982499999999993, 0.762999999999999, 0.43824999999999914, 0.27825000000000166, 0.17575000000000074, 0.18349999999999866, 0.4090000000000016, 0.4897499999999999, 0.4710000000000001, 0.5720000000000001, 0.5600000000000014, 0.4350000000000014, 0.24350000000000094, 0.16474999999999973], zp_timestamp='2025-11-17T20:11:00')
2025-11-17T22:15:34.791 [DEBUG] [Thread-62202] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:15:34.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:15:34.888 [DEBUG] [Thread-62205] [transport.py] [_log()] starting thread (client mode): 0xd31366b0
2025-11-17T22:15:34.888 [DEBUG] [Thread-62205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:15:34.907 [DEBUG] [Thread-62205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:15:34.908 [INFO] [Thread-62205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:15:34.915 [DEBUG] [Thread-62205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:15:34.915 [DEBUG] [Thread-62205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:15:34.915 [DEBUG] [Thread-62205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:15:34.915 [DEBUG] [Thread-62205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:15:34.915 [DEBUG] [Thread-62205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:15:34.915 [DEBUG] [Thread-62205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:15:34.915 [DEBUG] [Thread-62205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] client lang: <none>
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] server lang: <none>
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] kex follows: False
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] Compression: none
2025-11-17T22:15:34.916 [DEBUG] [Thread-62205] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:15:34.976 [DEBUG] [Thread-62205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:15:34.977 [DEBUG] [Thread-62205] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:15:34.977 [DEBUG] [Thread-62205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:15:34.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:15:34.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:15:35.033 [DEBUG] [Thread-62205] [transport.py] [_log()] userauth is OK
2025-11-17T22:15:35.033 [DEBUG] [Thread-62205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:15:35.033 [DEBUG] [Thread-62205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:15:35.033 [DEBUG] [Thread-62205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:15:35.033 [DEBUG] [Thread-62205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:15:35.052 [INFO] [Thread-62205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:15:35.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:15:35.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:15:35.910 [DEBUG] [Thread-62205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:15:35.910 [DEBUG] [Thread-62205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:15:35.958 [DEBUG] [Thread-62205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:15:35.959 [DEBUG] [Thread-62205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:15:35.967 [DEBUG] [Thread-62205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:15:35.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:15:35.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:15:35.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:15:35.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:15:35.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:15:35.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:15:35.998 [DEBUG] [Thread-62205] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:15:45.347 [DEBUG] [Thread-62207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:15:45.507 [DEBUG] [Thread-62208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:15:59.497 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:15:59.499 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:16:00.538 [DEBUG] [Thread-62209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:16:06.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:16:06.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:16:06.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:16:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 15, 35), 13.49, 39.85, 0.0, 19.73, 14.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:16:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:15:35
2025-11-17T22:16:06.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:16:06.962 [DEBUG] [Thread-62210] [transport.py] [_log()] starting thread (client mode): 0xd0754640
2025-11-17T22:16:06.963 [DEBUG] [Thread-62210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:16:06.977 [DEBUG] [Thread-62210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:16:06.977 [INFO] [Thread-62210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] client lang: <none>
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] server lang: <none>
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] kex follows: False
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:16:06.981 [DEBUG] [Thread-62210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:16:06.982 [DEBUG] [Thread-62210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:16:06.982 [DEBUG] [Thread-62210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:16:06.982 [DEBUG] [Thread-62210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:16:06.982 [DEBUG] [Thread-62210] [transport.py] [_log()] Compression: none
2025-11-17T22:16:06.982 [DEBUG] [Thread-62210] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:16:06.999 [DEBUG] [Thread-62210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:16:07.000 [DEBUG] [Thread-62210] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:16:07.000 [DEBUG] [Thread-62210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:16:07.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:16:07.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:16:07.002 [DEBUG] [Thread-62210] [transport.py] [_log()] userauth is OK
2025-11-17T22:16:07.002 [DEBUG] [Thread-62210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:16:07.002 [DEBUG] [Thread-62210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:16:07.003 [DEBUG] [Thread-62210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:16:07.003 [DEBUG] [Thread-62210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:16:07.017 [INFO] [Thread-62210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:16:07.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:16:07.803 [DEBUG] [Thread-62210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:16:07.803 [DEBUG] [Thread-62210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:16:07.803 [DEBUG] [Thread-62210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:16:07.844 [DEBUG] [Thread-62210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:16:07.844 [DEBUG] [Thread-62210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:16:07.847 [DEBUG] [Thread-62210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:16:07.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:16:07.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:16:07.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:16:07.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:16:07.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:16:07.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:16:07.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:16:07.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:16:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:16:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.844144 -999.00  +15.10  14.29     44   +3.20 1 1 1 1 1     0    0 11.49 -25.21 ZNESW 16.8 14.3 180.2 19.9 15.6 -22.8 15.4 -22.0 15.3 -21.7 15.6 -22.2
2025-11-17T22:16:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:16:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:16:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.844144
2025-11-17T22:16:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:16:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:16:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:16:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:16:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:16:07.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:15:35', tmtdew=13.49, humidity=39.85, cloud=0.0, wind=19.73, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:15:35', seeing=1.54, atlas_timestamp='2025-11-17T20:15:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.17425000000000068, 0.24825000000000053, 0.301499999999999, 0.27449999999999974, 0.25725000000000087, 0.22799999999999976, 0.12925000000000075, 0.18399999999999928, 0.2370000000000001, 0.3692499999999992, 0.42100000000000115, 0.3844999999999992, 0.3142499999999995, 0.18900000000000006, 0.19200000000000017, 0.19125000000000014, 0.3384999999999998, 0.5510000000000002, 0.5982499999999993, 0.762999999999999, 0.43824999999999914, 0.27825000000000166, 0.17575000000000074, 0.18349999999999866, 0.4090000000000016, 0.4897499999999999, 0.4710000000000001, 0.5720000000000001, 0.5600000000000014, 0.4350000000000014, 0.24350000000000094, 0.16474999999999973], zp_timestamp='2025-11-17T20:11:00')
2025-11-17T22:16:07.870 [DEBUG] [Thread-62210] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:16:07.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:16:07.969 [DEBUG] [Thread-62213] [transport.py] [_log()] starting thread (client mode): 0xd0757160
2025-11-17T22:16:07.969 [DEBUG] [Thread-62213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:16:07.984 [DEBUG] [Thread-62213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:16:07.984 [INFO] [Thread-62213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:16:07.991 [DEBUG] [Thread-62213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:16:07.992 [DEBUG] [Thread-62213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:16:07.992 [DEBUG] [Thread-62213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:16:07.992 [DEBUG] [Thread-62213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:16:07.992 [DEBUG] [Thread-62213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:16:07.992 [DEBUG] [Thread-62213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:16:07.992 [DEBUG] [Thread-62213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:16:07.992 [DEBUG] [Thread-62213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:16:07.992 [DEBUG] [Thread-62213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:16:07.993 [DEBUG] [Thread-62213] [transport.py] [_log()] client lang: <none>
2025-11-17T22:16:07.993 [DEBUG] [Thread-62213] [transport.py] [_log()] server lang: <none>
2025-11-17T22:16:07.993 [DEBUG] [Thread-62213] [transport.py] [_log()] kex follows: False
2025-11-17T22:16:07.993 [DEBUG] [Thread-62213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:16:07.993 [DEBUG] [Thread-62213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:16:07.993 [DEBUG] [Thread-62213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:16:07.993 [DEBUG] [Thread-62213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:16:07.993 [DEBUG] [Thread-62213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:16:07.994 [DEBUG] [Thread-62213] [transport.py] [_log()] Compression: none
2025-11-17T22:16:07.994 [DEBUG] [Thread-62213] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:16:08.052 [DEBUG] [Thread-62213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:16:08.053 [DEBUG] [Thread-62213] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:16:08.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:16:08.054 [DEBUG] [Thread-62213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:16:08.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:16:08.108 [DEBUG] [Thread-62213] [transport.py] [_log()] userauth is OK
2025-11-17T22:16:08.109 [DEBUG] [Thread-62213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:16:08.109 [DEBUG] [Thread-62213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:16:08.109 [DEBUG] [Thread-62213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:16:08.109 [DEBUG] [Thread-62213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:16:08.130 [INFO] [Thread-62213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:16:08.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:16:08.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:16:08.994 [DEBUG] [Thread-62213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:16:08.994 [DEBUG] [Thread-62213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:16:09.043 [DEBUG] [Thread-62213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:16:09.043 [DEBUG] [Thread-62213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:16:09.051 [DEBUG] [Thread-62213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:16:09.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:16:09.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:16:09.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:16:09.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:16:09.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:16:09.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:16:09.082 [DEBUG] [Thread-62213] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:16:15.566 [DEBUG] [Thread-62215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:16:30.616 [DEBUG] [Thread-62216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:16:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:16:39.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:16:39.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:16:39.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 16, 7), 13.45, 39.99, 0.0, 20.64, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:16:39.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:16:07
2025-11-17T22:16:39.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:16:40.043 [DEBUG] [Thread-62217] [transport.py] [_log()] starting thread (client mode): 0xd3151e40
2025-11-17T22:16:40.043 [DEBUG] [Thread-62217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:16:40.055 [DEBUG] [Thread-62217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:16:40.055 [INFO] [Thread-62217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:16:40.058 [DEBUG] [Thread-62217] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:16:40.058 [DEBUG] [Thread-62217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:16:40.058 [DEBUG] [Thread-62217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:16:40.058 [DEBUG] [Thread-62217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] client lang: <none>
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] server lang: <none>
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] kex follows: False
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] Compression: none
2025-11-17T22:16:40.059 [DEBUG] [Thread-62217] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:16:40.076 [DEBUG] [Thread-62217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:16:40.077 [DEBUG] [Thread-62217] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:16:40.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:16:40.078 [DEBUG] [Thread-62217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:16:40.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:16:40.121 [DEBUG] [Thread-62217] [transport.py] [_log()] userauth is OK
2025-11-17T22:16:40.121 [DEBUG] [Thread-62217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:16:40.121 [DEBUG] [Thread-62217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:16:40.121 [DEBUG] [Thread-62217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:16:40.121 [DEBUG] [Thread-62217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:16:40.140 [INFO] [Thread-62217] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:16:40.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:16:40.777 [DEBUG] [Thread-62217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:16:40.777 [DEBUG] [Thread-62217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:16:40.777 [DEBUG] [Thread-62217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:16:40.818 [DEBUG] [Thread-62217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:16:40.818 [DEBUG] [Thread-62217] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:16:40.820 [DEBUG] [Thread-62217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:16:40.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:16:40.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:16:40.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:16:40.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:16:40.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:16:40.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:16:40.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.844492 -999.00  +15.10  16.79     45   +3.20 1 1 1 1 1     0    0 11.33 -26.41 ZNESW 18.0 16.8 175.0 21.8 15.6 -22.8 15.4 -22.3 15.2 -21.8 15.6 -22.1
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.844492
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:16:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:16:07', tmtdew=13.45, humidity=39.99, cloud=0.0, wind=20.64, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:16:08', seeing=2.11, atlas_timestamp='2025-11-17T20:16:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:15:00')
2025-11-17T22:16:40.833 [DEBUG] [Thread-62217] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:16:40.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:16:40.918 [DEBUG] [Thread-62220] [transport.py] [_log()] starting thread (client mode): 0xd31ce440
2025-11-17T22:16:40.918 [DEBUG] [Thread-62220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:16:40.933 [DEBUG] [Thread-62220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:16:40.933 [INFO] [Thread-62220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] client lang: <none>
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] server lang: <none>
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] kex follows: False
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:16:40.940 [DEBUG] [Thread-62220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:16:40.941 [DEBUG] [Thread-62220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:16:40.941 [DEBUG] [Thread-62220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:16:40.941 [DEBUG] [Thread-62220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:16:40.941 [DEBUG] [Thread-62220] [transport.py] [_log()] Compression: none
2025-11-17T22:16:40.941 [DEBUG] [Thread-62220] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:16:40.995 [DEBUG] [Thread-62220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:16:40.995 [DEBUG] [Thread-62220] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:16:40.995 [DEBUG] [Thread-62220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:16:40.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:16:40.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:16:41.053 [DEBUG] [Thread-62220] [transport.py] [_log()] userauth is OK
2025-11-17T22:16:41.053 [DEBUG] [Thread-62220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:16:41.053 [DEBUG] [Thread-62220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:16:41.053 [DEBUG] [Thread-62220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:16:41.053 [DEBUG] [Thread-62220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:16:41.070 [INFO] [Thread-62220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:16:41.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:16:41.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:16:41.922 [DEBUG] [Thread-62220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:16:41.922 [DEBUG] [Thread-62220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:16:41.970 [DEBUG] [Thread-62220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:16:41.970 [DEBUG] [Thread-62220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:16:41.978 [DEBUG] [Thread-62220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:16:41.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:16:41.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:16:41.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:16:42.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:16:42.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:16:42.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:16:42.011 [DEBUG] [Thread-62220] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:16:45.403 [DEBUG] [Thread-62222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:16:45.644 [DEBUG] [Thread-62223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:16:59.700 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:16:59.701 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:17:00.695 [DEBUG] [Thread-62224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:17:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:17:12.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:17:12.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:17:12.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 16, 40), 13.45, 39.99, 0.0, 22.83, 15.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:17:12.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:16:40
2025-11-17T22:17:12.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:17:12.947 [DEBUG] [Thread-62225] [transport.py] [_log()] starting thread (client mode): 0xd3153880
2025-11-17T22:17:12.947 [DEBUG] [Thread-62225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:17:12.968 [DEBUG] [Thread-62225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:17:12.968 [INFO] [Thread-62225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] client lang: <none>
2025-11-17T22:17:12.969 [DEBUG] [Thread-62225] [transport.py] [_log()] server lang: <none>
2025-11-17T22:17:12.970 [DEBUG] [Thread-62225] [transport.py] [_log()] kex follows: False
2025-11-17T22:17:12.970 [DEBUG] [Thread-62225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:17:12.970 [DEBUG] [Thread-62225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:17:12.970 [DEBUG] [Thread-62225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:17:12.970 [DEBUG] [Thread-62225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:17:12.970 [DEBUG] [Thread-62225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:17:12.970 [DEBUG] [Thread-62225] [transport.py] [_log()] Compression: none
2025-11-17T22:17:12.970 [DEBUG] [Thread-62225] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:17:12.982 [DEBUG] [Thread-62225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:17:12.982 [DEBUG] [Thread-62225] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:17:12.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:17:12.982 [DEBUG] [Thread-62225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:17:12.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:17:12.983 [DEBUG] [Thread-62225] [transport.py] [_log()] userauth is OK
2025-11-17T22:17:12.983 [DEBUG] [Thread-62225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:17:12.983 [DEBUG] [Thread-62225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:17:12.983 [DEBUG] [Thread-62225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:17:12.983 [DEBUG] [Thread-62225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:17:13.001 [INFO] [Thread-62225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:17:13.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:17:13.779 [DEBUG] [Thread-62225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:17:13.779 [DEBUG] [Thread-62225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:17:13.779 [DEBUG] [Thread-62225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:17:13.820 [DEBUG] [Thread-62225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:17:13.820 [DEBUG] [Thread-62225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:17:13.822 [DEBUG] [Thread-62225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:17:13.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:17:13.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:17:13.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:17:13.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:17:13.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:17:13.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:17:13.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:17:13.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.844839 -999.00  +15.10  14.23     45   +3.20 1 1 1 1 1     0    0 11.43 -24.47 ZNESW 16.5 14.2 167.4 22.0 15.6 -22.9 15.5 -22.3 15.2 -21.8 15.6 -22.5
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.844839
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:17:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:16:40', tmtdew=13.45, humidity=39.99, cloud=0.0, wind=22.83, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:16:40', seeing=2.49, atlas_timestamp='2025-11-17T20:16:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:15:00')
2025-11-17T22:17:13.844 [DEBUG] [Thread-62225] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:17:13.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:17:13.930 [DEBUG] [Thread-62228] [transport.py] [_log()] starting thread (client mode): 0xd3153370
2025-11-17T22:17:13.930 [DEBUG] [Thread-62228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:17:13.945 [DEBUG] [Thread-62228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:17:13.945 [INFO] [Thread-62228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] client lang: <none>
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] server lang: <none>
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] kex follows: False
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] Compression: none
2025-11-17T22:17:13.953 [DEBUG] [Thread-62228] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:17:14.012 [DEBUG] [Thread-62228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:17:14.012 [DEBUG] [Thread-62228] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:17:14.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:17:14.012 [DEBUG] [Thread-62228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:17:14.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:17:14.069 [DEBUG] [Thread-62228] [transport.py] [_log()] userauth is OK
2025-11-17T22:17:14.069 [DEBUG] [Thread-62228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:17:14.069 [DEBUG] [Thread-62228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:17:14.069 [DEBUG] [Thread-62228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:17:14.069 [DEBUG] [Thread-62228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:17:14.083 [INFO] [Thread-62228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:17:14.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:17:14.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:17:14.910 [DEBUG] [Thread-62228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:17:14.910 [DEBUG] [Thread-62228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:17:14.957 [DEBUG] [Thread-62228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:17:14.957 [DEBUG] [Thread-62228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:17:14.966 [DEBUG] [Thread-62228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:17:14.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:17:14.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:17:14.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:17:14.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:17:14.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:17:14.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:17:15.001 [DEBUG] [Thread-62228] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:17:15.719 [DEBUG] [Thread-62230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:17:30.759 [DEBUG] [Thread-62231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:17:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:17:45.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:17:45.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:17:45.473 [DEBUG] [Thread-62232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:17:45.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 17, 12), 13.46, 39.95, 0.0, 23.4, 14.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:17:45.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:17:12
2025-11-17T22:17:45.786 [DEBUG] [Thread-62233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:17:45.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:17:46.014 [DEBUG] [Thread-62234] [transport.py] [_log()] starting thread (client mode): 0xd3134910
2025-11-17T22:17:46.014 [DEBUG] [Thread-62234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:17:46.033 [DEBUG] [Thread-62234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:17:46.033 [INFO] [Thread-62234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] client lang: <none>
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] server lang: <none>
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] kex follows: False
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] Compression: none
2025-11-17T22:17:46.036 [DEBUG] [Thread-62234] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:17:46.051 [DEBUG] [Thread-62234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:17:46.051 [DEBUG] [Thread-62234] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:17:46.051 [DEBUG] [Thread-62234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:17:46.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:17:46.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:17:46.052 [DEBUG] [Thread-62234] [transport.py] [_log()] userauth is OK
2025-11-17T22:17:46.052 [DEBUG] [Thread-62234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:17:46.052 [DEBUG] [Thread-62234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:17:46.052 [DEBUG] [Thread-62234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:17:46.052 [DEBUG] [Thread-62234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:17:46.068 [INFO] [Thread-62234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:17:46.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:17:46.663 [DEBUG] [Thread-62234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:17:46.663 [DEBUG] [Thread-62234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:17:46.664 [DEBUG] [Thread-62234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:17:46.705 [DEBUG] [Thread-62234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:17:46.705 [DEBUG] [Thread-62234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:17:46.708 [DEBUG] [Thread-62234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:17:46.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:17:46.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:17:46.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:17:46.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:17:46.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:17:46.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:17:46.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:17:46.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:17:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:17:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.845186 -999.00  +15.10  18.14     44   +3.20 1 1 1 1 1     0    0 11.39 -23.51 ZNESW 18.0 18.1 168.8 21.3 15.6 -23.1 15.4 -22.6 15.2 -22.3 15.6 -22.5
2025-11-17T22:17:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:17:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:17:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.845186
2025-11-17T22:17:46.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:17:46.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:17:46.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:17:46.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:17:46.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:17:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:17:12', tmtdew=13.46, humidity=39.95, cloud=0.0, wind=23.4, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:17:44', seeing=2.2, atlas_timestamp='2025-11-17T20:17:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:15:00')
2025-11-17T22:17:46.735 [DEBUG] [Thread-62234] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:17:46.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:17:46.829 [DEBUG] [Thread-62237] [transport.py] [_log()] starting thread (client mode): 0xd31529e0
2025-11-17T22:17:46.829 [DEBUG] [Thread-62237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:17:46.848 [DEBUG] [Thread-62237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:17:46.848 [INFO] [Thread-62237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] client lang: <none>
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] server lang: <none>
2025-11-17T22:17:46.856 [DEBUG] [Thread-62237] [transport.py] [_log()] kex follows: False
2025-11-17T22:17:46.857 [DEBUG] [Thread-62237] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:17:46.857 [DEBUG] [Thread-62237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:17:46.857 [DEBUG] [Thread-62237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:17:46.857 [DEBUG] [Thread-62237] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:17:46.857 [DEBUG] [Thread-62237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:17:46.857 [DEBUG] [Thread-62237] [transport.py] [_log()] Compression: none
2025-11-17T22:17:46.857 [DEBUG] [Thread-62237] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:17:46.913 [DEBUG] [Thread-62237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:17:46.913 [DEBUG] [Thread-62237] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:17:46.914 [DEBUG] [Thread-62237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:17:46.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:17:46.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:17:46.969 [DEBUG] [Thread-62237] [transport.py] [_log()] userauth is OK
2025-11-17T22:17:46.969 [DEBUG] [Thread-62237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:17:46.969 [DEBUG] [Thread-62237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:17:46.969 [DEBUG] [Thread-62237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:17:46.969 [DEBUG] [Thread-62237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:17:46.990 [INFO] [Thread-62237] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:17:46.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:17:46.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:17:47.895 [DEBUG] [Thread-62237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:17:47.895 [DEBUG] [Thread-62237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:17:47.943 [DEBUG] [Thread-62237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:17:47.943 [DEBUG] [Thread-62237] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:17:47.952 [DEBUG] [Thread-62237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:17:47.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:17:47.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:17:47.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:17:47.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:17:47.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:17:47.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:17:47.986 [DEBUG] [Thread-62237] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:17:59.911 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:17:59.913 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:18:00.812 [DEBUG] [Thread-62239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:18:15.854 [DEBUG] [Thread-62240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:18:18.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:18:18.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:18:18.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:18:18.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 17, 44), 13.45, 39.99, 0.0, 24.72, 15.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:18:18.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:17:44
2025-11-17T22:18:18.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:18:19.018 [DEBUG] [Thread-62241] [transport.py] [_log()] starting thread (client mode): 0xd31cd870
2025-11-17T22:18:19.018 [DEBUG] [Thread-62241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:18:19.037 [DEBUG] [Thread-62241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:18:19.037 [INFO] [Thread-62241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:18:19.040 [DEBUG] [Thread-62241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:18:19.040 [DEBUG] [Thread-62241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:18:19.040 [DEBUG] [Thread-62241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] client lang: <none>
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] server lang: <none>
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] kex follows: False
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] Compression: none
2025-11-17T22:18:19.041 [DEBUG] [Thread-62241] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:18:19.056 [DEBUG] [Thread-62241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:18:19.056 [DEBUG] [Thread-62241] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:18:19.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:18:19.057 [DEBUG] [Thread-62241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:18:19.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:18:19.058 [DEBUG] [Thread-62241] [transport.py] [_log()] userauth is OK
2025-11-17T22:18:19.058 [DEBUG] [Thread-62241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:18:19.058 [DEBUG] [Thread-62241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:18:19.058 [DEBUG] [Thread-62241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:18:19.058 [DEBUG] [Thread-62241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:18:19.069 [INFO] [Thread-62241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:18:19.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:18:19.842 [DEBUG] [Thread-62241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:18:19.842 [DEBUG] [Thread-62241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:18:19.842 [DEBUG] [Thread-62241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:18:19.883 [DEBUG] [Thread-62241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:18:19.883 [DEBUG] [Thread-62241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:18:19.885 [DEBUG] [Thread-62241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:18:19.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:18:19.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:18:19.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:18:19.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:18:19.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:18:19.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:18:19.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:18:19.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:18:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:18:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.845533 -999.00  +15.10  17.41     45   +3.30 1 1 1 1 1     0    0 11.58 -25.00 ZNESW 19.0 17.4 173.8 22.7 15.6 -22.8 15.4 -22.4 15.2 -22.2 15.6 -22.4
2025-11-17T22:18:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:18:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:18:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.845533
2025-11-17T22:18:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:18:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:18:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:18:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:18:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:18:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:17:44', tmtdew=13.45, humidity=39.99, cloud=0.0, wind=24.72, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:18:16', seeing=2.63, atlas_timestamp='2025-11-17T20:17:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:15:00')
2025-11-17T22:18:19.902 [DEBUG] [Thread-62241] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:18:19.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:18:19.990 [DEBUG] [Thread-62244] [transport.py] [_log()] starting thread (client mode): 0xd0702a40
2025-11-17T22:18:19.990 [DEBUG] [Thread-62244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:18:20.009 [DEBUG] [Thread-62244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:18:20.009 [INFO] [Thread-62244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] client lang: <none>
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] server lang: <none>
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] kex follows: False
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] Compression: none
2025-11-17T22:18:20.017 [DEBUG] [Thread-62244] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:18:20.076 [DEBUG] [Thread-62244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:18:20.076 [DEBUG] [Thread-62244] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:18:20.076 [DEBUG] [Thread-62244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:18:20.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:18:20.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:18:20.132 [DEBUG] [Thread-62244] [transport.py] [_log()] userauth is OK
2025-11-17T22:18:20.132 [DEBUG] [Thread-62244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:18:20.132 [DEBUG] [Thread-62244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:18:20.132 [DEBUG] [Thread-62244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:18:20.132 [DEBUG] [Thread-62244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:18:20.147 [INFO] [Thread-62244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:18:20.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:18:20.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:18:20.990 [DEBUG] [Thread-62244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:18:20.990 [DEBUG] [Thread-62244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:18:21.040 [DEBUG] [Thread-62244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:18:21.040 [DEBUG] [Thread-62244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:18:21.048 [DEBUG] [Thread-62244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:18:21.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:18:21.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:18:21.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:18:21.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:18:21.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:18:21.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:18:21.090 [DEBUG] [Thread-62244] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:18:30.882 [DEBUG] [Thread-62246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:18:45.530 [DEBUG] [Thread-62247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:18:45.931 [DEBUG] [Thread-62248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:18:51.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:18:51.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:18:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:18:51.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 18, 48), 13.43, 40.04, 0.0, 21.65, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:18:51.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:18:48
2025-11-17T22:18:51.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:18:52.051 [DEBUG] [Thread-62249] [transport.py] [_log()] starting thread (client mode): 0xd0701f00
2025-11-17T22:18:52.051 [DEBUG] [Thread-62249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:18:52.072 [DEBUG] [Thread-62249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:18:52.072 [INFO] [Thread-62249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:18:52.075 [DEBUG] [Thread-62249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:18:52.075 [DEBUG] [Thread-62249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:18:52.075 [DEBUG] [Thread-62249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:18:52.075 [DEBUG] [Thread-62249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] client lang: <none>
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] server lang: <none>
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] kex follows: False
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:18:52.076 [DEBUG] [Thread-62249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:18:52.077 [DEBUG] [Thread-62249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:18:52.077 [DEBUG] [Thread-62249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:18:52.077 [DEBUG] [Thread-62249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:18:52.077 [DEBUG] [Thread-62249] [transport.py] [_log()] Compression: none
2025-11-17T22:18:52.077 [DEBUG] [Thread-62249] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:18:52.096 [DEBUG] [Thread-62249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:18:52.096 [DEBUG] [Thread-62249] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:18:52.097 [DEBUG] [Thread-62249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:18:52.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:18:52.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:18:52.099 [DEBUG] [Thread-62249] [transport.py] [_log()] userauth is OK
2025-11-17T22:18:52.099 [DEBUG] [Thread-62249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:18:52.099 [DEBUG] [Thread-62249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:18:52.099 [DEBUG] [Thread-62249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:18:52.099 [DEBUG] [Thread-62249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:18:52.123 [INFO] [Thread-62249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:18:52.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:18:52.769 [DEBUG] [Thread-62249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:18:52.769 [DEBUG] [Thread-62249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:18:52.769 [DEBUG] [Thread-62249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:18:52.810 [DEBUG] [Thread-62249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:18:52.810 [DEBUG] [Thread-62249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:18:52.813 [DEBUG] [Thread-62249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:18:52.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:18:52.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:18:52.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:18:52.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:18:52.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:18:52.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:18:52.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:18:52.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:18:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:18:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.845881 -999.00  +15.10  18.55     45   +3.30 1 1 1 1 1     0    0 11.40 -26.75 ZNESW 18.4 18.6 174.0 23.0 15.6 -23.2 15.4 -22.6 15.2 -22.2 15.6 -22.5
2025-11-17T22:18:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:18:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:18:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.845881
2025-11-17T22:18:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:18:52.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:18:52.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:18:52.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:18:52.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:18:52.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:18:48', tmtdew=13.43, humidity=40.04, cloud=0.0, wind=21.65, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:18:48', seeing=2.69, atlas_timestamp='2025-11-17T20:18:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:15:00')
2025-11-17T22:18:52.839 [DEBUG] [Thread-62249] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:18:52.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:18:52.939 [DEBUG] [Thread-62252] [transport.py] [_log()] starting thread (client mode): 0xd31cc610
2025-11-17T22:18:52.939 [DEBUG] [Thread-62252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:18:52.955 [DEBUG] [Thread-62252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:18:52.955 [INFO] [Thread-62252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:18:52.963 [DEBUG] [Thread-62252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:18:52.964 [DEBUG] [Thread-62252] [transport.py] [_log()] client lang: <none>
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] server lang: <none>
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] kex follows: False
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] Compression: none
2025-11-17T22:18:52.965 [DEBUG] [Thread-62252] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:18:53.021 [DEBUG] [Thread-62252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:18:53.021 [DEBUG] [Thread-62252] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:18:53.022 [DEBUG] [Thread-62252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:18:53.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:18:53.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:18:53.080 [DEBUG] [Thread-62252] [transport.py] [_log()] userauth is OK
2025-11-17T22:18:53.081 [DEBUG] [Thread-62252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:18:53.081 [DEBUG] [Thread-62252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:18:53.081 [DEBUG] [Thread-62252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:18:53.081 [DEBUG] [Thread-62252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:18:53.100 [INFO] [Thread-62252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:18:53.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:18:53.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:18:53.907 [DEBUG] [Thread-62252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:18:53.907 [DEBUG] [Thread-62252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:18:53.956 [DEBUG] [Thread-62252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:18:53.956 [DEBUG] [Thread-62252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:18:53.965 [DEBUG] [Thread-62252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:18:53.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:18:53.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:18:53.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:18:53.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:18:53.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:18:53.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:18:54.000 [DEBUG] [Thread-62252] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:19:00.115 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:19:00.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:19:00.962 [DEBUG] [Thread-62254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:19:15.996 [DEBUG] [Thread-62255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:19:24.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:19:24.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:19:24.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:19:24.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 19, 20), 13.46, 39.95, 0.0, 22.41, 15.03, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:19:24.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:19:20
2025-11-17T22:19:24.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:19:24.959 [DEBUG] [Thread-62256] [transport.py] [_log()] starting thread (client mode): 0xd31ce470
2025-11-17T22:19:24.959 [DEBUG] [Thread-62256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:19:24.979 [DEBUG] [Thread-62256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:19:24.979 [INFO] [Thread-62256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] client lang: <none>
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] server lang: <none>
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] kex follows: False
2025-11-17T22:19:24.982 [DEBUG] [Thread-62256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:19:24.983 [DEBUG] [Thread-62256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:19:24.983 [DEBUG] [Thread-62256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:19:24.983 [DEBUG] [Thread-62256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:19:24.983 [DEBUG] [Thread-62256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:19:24.983 [DEBUG] [Thread-62256] [transport.py] [_log()] Compression: none
2025-11-17T22:19:24.983 [DEBUG] [Thread-62256] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:19:24.999 [DEBUG] [Thread-62256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:19:25.000 [DEBUG] [Thread-62256] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:19:25.000 [DEBUG] [Thread-62256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:19:25.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:19:25.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:19:25.002 [DEBUG] [Thread-62256] [transport.py] [_log()] userauth is OK
2025-11-17T22:19:25.003 [DEBUG] [Thread-62256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:19:25.003 [DEBUG] [Thread-62256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:19:25.003 [DEBUG] [Thread-62256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:19:25.003 [DEBUG] [Thread-62256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:19:25.021 [INFO] [Thread-62256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:19:25.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:19:25.609 [DEBUG] [Thread-62256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:19:25.609 [DEBUG] [Thread-62256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:19:25.609 [DEBUG] [Thread-62256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:19:25.650 [DEBUG] [Thread-62256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:19:25.651 [DEBUG] [Thread-62256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:19:25.653 [DEBUG] [Thread-62256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:19:25.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:19:25.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:19:25.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:19:25.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:19:25.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:19:25.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:19:25.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:19:25.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:19:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:19:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.846575 -999.00  +15.10  18.49     45   +3.30 1 2 1 1 1     0    0 11.26 -25.48 ZnESW 19.1 18.5 170.0 21.3 15.5 -23.3 15.4 -22.7 15.2 -22.4 15.5 -22.6
2025-11-17T22:19:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:19:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:19:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.846575
2025-11-17T22:19:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:19:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:19:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:19:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:19:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:19:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:19:20', tmtdew=13.46, humidity=39.95, cloud=0.0, wind=22.41, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:19:22', seeing=2.7, atlas_timestamp='2025-11-17T20:19:04.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:17:00')
2025-11-17T22:19:25.681 [DEBUG] [Thread-62256] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:19:25.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:19:25.779 [DEBUG] [Thread-62259] [transport.py] [_log()] starting thread (client mode): 0xd31cffd0
2025-11-17T22:19:25.779 [DEBUG] [Thread-62259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:19:25.794 [DEBUG] [Thread-62259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:19:25.794 [INFO] [Thread-62259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] client lang: <none>
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] server lang: <none>
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] kex follows: False
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:19:25.802 [DEBUG] [Thread-62259] [transport.py] [_log()] Compression: none
2025-11-17T22:19:25.803 [DEBUG] [Thread-62259] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:19:25.860 [DEBUG] [Thread-62259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:19:25.861 [DEBUG] [Thread-62259] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:19:25.861 [DEBUG] [Thread-62259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:19:25.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:19:25.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:19:25.916 [DEBUG] [Thread-62259] [transport.py] [_log()] userauth is OK
2025-11-17T22:19:25.917 [DEBUG] [Thread-62259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:19:25.917 [DEBUG] [Thread-62259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:19:25.917 [DEBUG] [Thread-62259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:19:25.917 [DEBUG] [Thread-62259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:19:25.938 [INFO] [Thread-62259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:19:25.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:19:25.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:19:26.769 [DEBUG] [Thread-62259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:19:26.769 [DEBUG] [Thread-62259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:19:26.818 [DEBUG] [Thread-62259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:19:26.818 [DEBUG] [Thread-62259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:19:26.827 [DEBUG] [Thread-62259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:19:26.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:19:26.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:19:26.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:19:26.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:19:26.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:19:26.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:19:26.861 [DEBUG] [Thread-62259] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:19:31.030 [DEBUG] [Thread-62261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:19:37.770 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:19:45.615 [DEBUG] [Thread-62262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:19:46.078 [DEBUG] [Thread-62263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:19:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:19:56.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:19: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
2025-11-17T22:19:57.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 19, 53), 13.44, 40.04, 0.0, 22.44, 15.08, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:19:57.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:19:53
2025-11-17T22:19:57.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:19:57.821 [DEBUG] [Thread-62264] [transport.py] [_log()] starting thread (client mode): 0xd317d5d0
2025-11-17T22:19:57.821 [DEBUG] [Thread-62264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:19:57.841 [DEBUG] [Thread-62264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:19:57.841 [INFO] [Thread-62264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] client lang: <none>
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] server lang: <none>
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] kex follows: False
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] Compression: none
2025-11-17T22:19:57.845 [DEBUG] [Thread-62264] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:19:57.862 [DEBUG] [Thread-62264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:19:57.863 [DEBUG] [Thread-62264] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:19:57.863 [DEBUG] [Thread-62264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:19:57.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:19:57.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:19:57.865 [DEBUG] [Thread-62264] [transport.py] [_log()] userauth is OK
2025-11-17T22:19:57.865 [DEBUG] [Thread-62264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:19:57.866 [DEBUG] [Thread-62264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:19:57.866 [DEBUG] [Thread-62264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:19:57.866 [DEBUG] [Thread-62264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:19:57.883 [INFO] [Thread-62264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:19:57.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:19:58.496 [DEBUG] [Thread-62264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:19:58.496 [DEBUG] [Thread-62264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:19:58.496 [DEBUG] [Thread-62264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:19:58.536 [DEBUG] [Thread-62264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:19:58.537 [DEBUG] [Thread-62264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:19:58.539 [DEBUG] [Thread-62264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:19:58.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:19:58.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:19:58.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:19:58.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:19:58.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:19:58.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:19:58.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:19:58.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:19:58.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:19:58.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.846922 -999.00  +15.00  19.09     45   +3.30 1 2 1 1 1     0    0 11.25 -28.52 ZnESW 20.5 19.1 171.8 24.7 15.6 -23.4 15.3 -22.9 15.2 -22.3 15.5 -22.5
2025-11-17T22:19:58.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:19:58.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:19:58.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.846922
2025-11-17T22:19:58.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:19:58.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:19:58.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:19:58.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:19:58.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:19:58.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:19:53', tmtdew=13.44, humidity=40.04, cloud=0.0, wind=22.44, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:19:54', seeing=2.7, atlas_timestamp='2025-11-17T20:19:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:17:00')
2025-11-17T22:19:58.564 [DEBUG] [Thread-62264] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:19:58.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:19:58.662 [DEBUG] [Thread-62267] [transport.py] [_log()] starting thread (client mode): 0xd3153cd0
2025-11-17T22:19:58.662 [DEBUG] [Thread-62267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:19:58.681 [DEBUG] [Thread-62267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:19:58.681 [INFO] [Thread-62267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:19:58.689 [DEBUG] [Thread-62267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:19:58.689 [DEBUG] [Thread-62267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] client lang: <none>
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] server lang: <none>
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] kex follows: False
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:19:58.690 [DEBUG] [Thread-62267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:19:58.691 [DEBUG] [Thread-62267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:19:58.691 [DEBUG] [Thread-62267] [transport.py] [_log()] Compression: none
2025-11-17T22:19:58.691 [DEBUG] [Thread-62267] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:19:58.749 [DEBUG] [Thread-62267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:19:58.749 [DEBUG] [Thread-62267] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:19:58.750 [DEBUG] [Thread-62267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:19:58.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:19:58.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:19:58.805 [DEBUG] [Thread-62267] [transport.py] [_log()] userauth is OK
2025-11-17T22:19:58.805 [DEBUG] [Thread-62267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:19:58.805 [DEBUG] [Thread-62267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:19:58.805 [DEBUG] [Thread-62267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:19:58.805 [DEBUG] [Thread-62267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:19:58.825 [INFO] [Thread-62267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:19:58.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:19:58.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:19:59.643 [DEBUG] [Thread-62267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:19:59.643 [DEBUG] [Thread-62267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:19:59.691 [DEBUG] [Thread-62267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:19:59.691 [DEBUG] [Thread-62267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:19:59.700 [DEBUG] [Thread-62267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:19:59.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:19:59.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:19:59.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:19:59.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:19:59.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:19:59.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:19:59.735 [DEBUG] [Thread-62267] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:20:00.321 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:20:00.322 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:20:01.109 [DEBUG] [Thread-62269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:20:16.149 [DEBUG] [Thread-62270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:20:29.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:20:29.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:20:29.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:20:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 20, 25), 13.45, 40.0, 0.0, 20.59, 15.11, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:20:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:20:25
2025-11-17T22:20:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:20:30.702 [DEBUG] [Thread-62271] [transport.py] [_log()] starting thread (client mode): 0xd31cec80
2025-11-17T22:20:30.702 [DEBUG] [Thread-62271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:20:30.722 [DEBUG] [Thread-62271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:20:30.722 [INFO] [Thread-62271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:20:30.725 [DEBUG] [Thread-62271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:20:30.725 [DEBUG] [Thread-62271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] client lang: <none>
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] server lang: <none>
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] kex follows: False
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] Compression: none
2025-11-17T22:20:30.726 [DEBUG] [Thread-62271] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:20:30.743 [DEBUG] [Thread-62271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:20:30.744 [DEBUG] [Thread-62271] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:20:30.744 [DEBUG] [Thread-62271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:20:30.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:20:30.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:20:30.746 [DEBUG] [Thread-62271] [transport.py] [_log()] userauth is OK
2025-11-17T22:20:30.746 [DEBUG] [Thread-62271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:20:30.746 [DEBUG] [Thread-62271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:20:30.746 [DEBUG] [Thread-62271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:20:30.746 [DEBUG] [Thread-62271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:20:30.764 [INFO] [Thread-62271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:20:30.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:20:31.174 [DEBUG] [Thread-62273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:20:31.376 [DEBUG] [Thread-62271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:20:31.376 [DEBUG] [Thread-62271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:20:31.377 [DEBUG] [Thread-62271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:20:31.417 [DEBUG] [Thread-62271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:20:31.418 [DEBUG] [Thread-62271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:20:31.421 [DEBUG] [Thread-62271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:20:31.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:20:31.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:20:31.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:20:31.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:20:31.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:20:31.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:20:31.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:20:31.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:20:31.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:20:31.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.847269 -999.00  +15.00  18.43     45   +3.30 1 2 1 1 1     0    0 11.17 -27.21 ZnESW 20.7 18.4 170.6 24.9 15.5 -23.2 15.4 -22.7 15.2 -22.1 15.4 -22.6
2025-11-17T22:20:31.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:20:31.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:20:31.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.847269
2025-11-17T22:20:31.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:20:31.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:20:31.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:20:31.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:20:31.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:20:31.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:20:25', tmtdew=13.45, humidity=40.0, cloud=0.0, wind=20.59, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:20:25', seeing=2.41, atlas_timestamp='2025-11-17T20:20:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:17:00')
2025-11-17T22:20:31.445 [DEBUG] [Thread-62271] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:20:31.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:20:31.541 [DEBUG] [Thread-62275] [transport.py] [_log()] starting thread (client mode): 0xd31500d0
2025-11-17T22:20:31.541 [DEBUG] [Thread-62275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:20:31.558 [DEBUG] [Thread-62275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:20:31.558 [INFO] [Thread-62275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:20:31.565 [DEBUG] [Thread-62275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:20:31.565 [DEBUG] [Thread-62275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] client lang: <none>
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] server lang: <none>
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] kex follows: False
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] Compression: none
2025-11-17T22:20:31.566 [DEBUG] [Thread-62275] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:20:31.628 [DEBUG] [Thread-62275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:20:31.629 [DEBUG] [Thread-62275] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:20:31.629 [DEBUG] [Thread-62275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:20:31.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:20:31.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:20:31.686 [DEBUG] [Thread-62275] [transport.py] [_log()] userauth is OK
2025-11-17T22:20:31.686 [DEBUG] [Thread-62275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:20:31.686 [DEBUG] [Thread-62275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:20:31.686 [DEBUG] [Thread-62275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:20:31.687 [DEBUG] [Thread-62275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:20:31.705 [INFO] [Thread-62275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:20:31.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:20:31.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:20:32.526 [DEBUG] [Thread-62275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:20:32.526 [DEBUG] [Thread-62275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:20:32.574 [DEBUG] [Thread-62275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:20:32.574 [DEBUG] [Thread-62275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:20:32.586 [DEBUG] [Thread-62275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:20:32.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:20:32.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:20:32.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:20:32.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:20:32.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:20:32.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:20:32.622 [DEBUG] [Thread-62275] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:20:45.704 [DEBUG] [Thread-62277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:20:46.207 [DEBUG] [Thread-62278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:21:00.525 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:21:00.527 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:21:01.249 [DEBUG] [Thread-62279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:21:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:21:02.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:21:02.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
2025-11-17T22:21:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 20, 57), 13.42, 39.95, 0.0, 21.3, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:21:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:20:57
2025-11-17T22:21:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:21:03.563 [DEBUG] [Thread-62280] [transport.py] [_log()] starting thread (client mode): 0xd0713430
2025-11-17T22:21:03.563 [DEBUG] [Thread-62280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:21:03.583 [DEBUG] [Thread-62280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:21:03.583 [INFO] [Thread-62280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] client lang: <none>
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] server lang: <none>
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] kex follows: False
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] Compression: none
2025-11-17T22:21:03.587 [DEBUG] [Thread-62280] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:21:03.604 [DEBUG] [Thread-62280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:21:03.605 [DEBUG] [Thread-62280] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:21:03.605 [DEBUG] [Thread-62280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:21:03.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:21:03.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:21:03.607 [DEBUG] [Thread-62280] [transport.py] [_log()] userauth is OK
2025-11-17T22:21:03.607 [DEBUG] [Thread-62280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:21:03.607 [DEBUG] [Thread-62280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:21:03.608 [DEBUG] [Thread-62280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:21:03.608 [DEBUG] [Thread-62280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:21:03.631 [INFO] [Thread-62280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:21:03.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:21:04.289 [DEBUG] [Thread-62280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:21:04.289 [DEBUG] [Thread-62280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:21:04.290 [DEBUG] [Thread-62280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:21:04.330 [DEBUG] [Thread-62280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:21:04.331 [DEBUG] [Thread-62280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:21:04.334 [DEBUG] [Thread-62280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:21:04.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:21:04.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:21:04.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:21:04.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:21:04.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:21:04.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:21:04.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:21:04.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:21:04.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:21:04.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.847617 -999.00  +15.00  18.12     45   +3.30 1 1 1 1 1     0    0 11.24 -30.02 ZNESW 15.7 18.1 164.4 21.3 15.5 -23.3 15.3 -22.7 15.2 -22.1 15.4 -22.7
2025-11-17T22:21:04.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:21:04.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:21:04.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.847617
2025-11-17T22:21:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:21:04.364 [DEBUG] [Thread-62280] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:21:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:21:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:21:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:21:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:21:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:20:57', tmtdew=13.42, humidity=39.95, cloud=0.0, wind=21.3, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:20:57', seeing=2.35, atlas_timestamp='2025-11-17T20:20:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:17:00')
2025-11-17T22:21:04.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:21:04.466 [DEBUG] [Thread-62283] [transport.py] [_log()] starting thread (client mode): 0xd0703a00
2025-11-17T22:21:04.466 [DEBUG] [Thread-62283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:21:04.484 [DEBUG] [Thread-62283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:21:04.484 [INFO] [Thread-62283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:21:04.492 [DEBUG] [Thread-62283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:21:04.492 [DEBUG] [Thread-62283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:21:04.492 [DEBUG] [Thread-62283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:21:04.492 [DEBUG] [Thread-62283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:21:04.492 [DEBUG] [Thread-62283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:21:04.492 [DEBUG] [Thread-62283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] client lang: <none>
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] server lang: <none>
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] kex follows: False
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:21:04.493 [DEBUG] [Thread-62283] [transport.py] [_log()] Compression: none
2025-11-17T22:21:04.494 [DEBUG] [Thread-62283] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:21:04.551 [DEBUG] [Thread-62283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:21:04.551 [DEBUG] [Thread-62283] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:21:04.552 [DEBUG] [Thread-62283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:21:04.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:21:04.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:21:04.609 [DEBUG] [Thread-62283] [transport.py] [_log()] userauth is OK
2025-11-17T22:21:04.609 [DEBUG] [Thread-62283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:21:04.610 [DEBUG] [Thread-62283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:21:04.610 [DEBUG] [Thread-62283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:21:04.610 [DEBUG] [Thread-62283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:21:04.629 [INFO] [Thread-62283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:21:04.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:21:04.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:21:05.477 [DEBUG] [Thread-62283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:21:05.478 [DEBUG] [Thread-62283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:21:05.525 [DEBUG] [Thread-62283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:21:05.525 [DEBUG] [Thread-62283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:21:05.534 [DEBUG] [Thread-62283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:21:05.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:21:05.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:21:05.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:21:05.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:21:05.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:21:05.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:21:05.570 [DEBUG] [Thread-62283] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:21:16.281 [DEBUG] [Thread-62285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:21:31.320 [DEBUG] [Thread-62286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:21:35.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:21:35.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:21:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:21:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 21, 29), 13.38, 40.07, 0.0, 21.97, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:21:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:21:29
2025-11-17T22:21:36.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:21:36.567 [DEBUG] [Thread-62287] [transport.py] [_log()] starting thread (client mode): 0xd0700730
2025-11-17T22:21:36.567 [DEBUG] [Thread-62287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:21:36.586 [DEBUG] [Thread-62287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:21:36.587 [INFO] [Thread-62287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:21:36.588 [DEBUG] [Thread-62287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:21:36.588 [DEBUG] [Thread-62287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:21:36.588 [DEBUG] [Thread-62287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:21:36.588 [DEBUG] [Thread-62287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] client lang: <none>
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] server lang: <none>
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] kex follows: False
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] Compression: none
2025-11-17T22:21:36.589 [DEBUG] [Thread-62287] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:21:36.599 [DEBUG] [Thread-62287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:21:36.599 [DEBUG] [Thread-62287] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:21:36.599 [DEBUG] [Thread-62287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:21:36.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:21:36.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:21:36.600 [DEBUG] [Thread-62287] [transport.py] [_log()] userauth is OK
2025-11-17T22:21:36.600 [DEBUG] [Thread-62287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:21:36.600 [DEBUG] [Thread-62287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:21:36.600 [DEBUG] [Thread-62287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:21:36.600 [DEBUG] [Thread-62287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:21:36.618 [INFO] [Thread-62287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:21:36.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:21:37.303 [DEBUG] [Thread-62287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:21:37.303 [DEBUG] [Thread-62287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:21:37.303 [DEBUG] [Thread-62287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:21:37.344 [DEBUG] [Thread-62287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:21:37.344 [DEBUG] [Thread-62287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:21:37.347 [DEBUG] [Thread-62287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:21:37.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:21:37.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:21:37.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:21:37.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:21:37.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:21:37.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:21:37.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:21:37.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:21:37.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:21:37.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.847964 -999.00  +15.00  15.68     45   +3.20 1 1 1 1 1     0    0 11.11 -27.14 ZNESW 16.8 15.7 167.6 17.8 15.5 -23.3 15.3 -22.6 15.1 -22.1 15.5 -22.7
2025-11-17T22:21:37.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:21:37.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:21:37.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.847964
2025-11-17T22:21:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:21:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:21:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:21:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:21:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:21:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:21:29', tmtdew=13.38, humidity=40.07, cloud=0.0, wind=21.97, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:21:30', seeing=1.82, atlas_timestamp='2025-11-17T20:21:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.5157499999999997, 0.2612500000000004, 0.5002500000000012, 0.6564999999999994, 0.5274999999999999, 0.8232500000000007, 0.2895000000000003, 0.21775000000000055, 0.2419999999999991, 0.33699999999999974, 0.7082499999999996, 0.27800000000000047, 0.3460000000000001, 0.5912499999999996, 0.24399999999999977, 0.20500000000000007, 0.2192500000000006, 0.4314999999999998, 0.48550000000000004, 0.2992499999999989, 0.39099999999999824, 0.45674999999999866, 0.31325000000000003, 0.2517499999999995, 0.21399999999999864, 0.48550000000000004, 0.5417500000000004, 0.3785000000000016, 0.3879999999999999, 0.5610000000000008, 0.5680000000000014, 0.29800000000000093, 0.21274999999999977], zp_timestamp='2025-11-17T20:17:00')
2025-11-17T22:21:37.366 [DEBUG] [Thread-62287] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:21:37.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:21:37.452 [DEBUG] [Thread-62290] [transport.py] [_log()] starting thread (client mode): 0xd317d150
2025-11-17T22:21:37.452 [DEBUG] [Thread-62290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:21:37.467 [DEBUG] [Thread-62290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:21:37.467 [INFO] [Thread-62290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] client lang: <none>
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] server lang: <none>
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] kex follows: False
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:21:37.474 [DEBUG] [Thread-62290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:21:37.475 [DEBUG] [Thread-62290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:21:37.475 [DEBUG] [Thread-62290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:21:37.475 [DEBUG] [Thread-62290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:21:37.475 [DEBUG] [Thread-62290] [transport.py] [_log()] Compression: none
2025-11-17T22:21:37.475 [DEBUG] [Thread-62290] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:21:37.531 [DEBUG] [Thread-62290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:21:37.531 [DEBUG] [Thread-62290] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:21:37.532 [DEBUG] [Thread-62290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:21:37.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:21:37.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:21:37.588 [DEBUG] [Thread-62290] [transport.py] [_log()] userauth is OK
2025-11-17T22:21:37.589 [DEBUG] [Thread-62290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:21:37.589 [DEBUG] [Thread-62290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:21:37.589 [DEBUG] [Thread-62290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:21:37.589 [DEBUG] [Thread-62290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:21:37.602 [INFO] [Thread-62290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:21:37.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:21:37.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:21:38.412 [DEBUG] [Thread-62290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:21:38.412 [DEBUG] [Thread-62290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:21:38.460 [DEBUG] [Thread-62290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:21:38.460 [DEBUG] [Thread-62290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:21:38.469 [DEBUG] [Thread-62290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:21:38.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:21:38.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:21:38.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:21:38.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:21:38.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:21:38.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:21:38.504 [DEBUG] [Thread-62290] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:21:45.772 [DEBUG] [Thread-62292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:21:46.346 [DEBUG] [Thread-62293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:22:00.731 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:22:00.732 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:22:01.388 [DEBUG] [Thread-62294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:22:08.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:22:08.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:22:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:22:09.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 22, 1), 13.41, 39.99, 0.0, 21.03, 15.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:22:09.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:22:01
2025-11-17T22:22:09.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:22:09.444 [DEBUG] [Thread-62295] [transport.py] [_log()] starting thread (client mode): 0xd317e7a0
2025-11-17T22:22:09.444 [DEBUG] [Thread-62295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:22:09.455 [DEBUG] [Thread-62295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:22:09.455 [INFO] [Thread-62295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:22:09.457 [DEBUG] [Thread-62295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:22:09.457 [DEBUG] [Thread-62295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:22:09.457 [DEBUG] [Thread-62295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] client lang: <none>
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] server lang: <none>
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] kex follows: False
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] Compression: none
2025-11-17T22:22:09.458 [DEBUG] [Thread-62295] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:22:09.475 [DEBUG] [Thread-62295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:22:09.475 [DEBUG] [Thread-62295] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:22:09.476 [DEBUG] [Thread-62295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:22:09.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:22:09.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:22:09.477 [DEBUG] [Thread-62295] [transport.py] [_log()] userauth is OK
2025-11-17T22:22:09.478 [DEBUG] [Thread-62295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:22:09.478 [DEBUG] [Thread-62295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:22:09.478 [DEBUG] [Thread-62295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:22:09.478 [DEBUG] [Thread-62295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:22:09.500 [INFO] [Thread-62295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:22:09.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:22:10.105 [DEBUG] [Thread-62295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:22:10.105 [DEBUG] [Thread-62295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:22:10.105 [DEBUG] [Thread-62295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:22:10.146 [DEBUG] [Thread-62295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:22:10.146 [DEBUG] [Thread-62295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:22:10.149 [DEBUG] [Thread-62295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:22:10.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:22:10.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:22:10.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:22:10.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:22:10.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:22:10.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:22:10.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:22:10.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:22:10.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:22:10.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.848311 -999.00  +15.00  15.58     45   +3.30 1 1 1 1 1     0    0 10.87 -30.18 ZNESW 11.8 15.6 161.8 21.2 15.5 -23.2 15.4 -22.6 15.2 -22.0 15.5 -22.6
2025-11-17T22:22:10.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:22:10.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:22:10.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.848311
2025-11-17T22:22:10.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:22:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:22:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:22:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:22:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:22:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:22:01', tmtdew=13.41, humidity=39.99, cloud=0.0, wind=21.03, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:22:01', seeing=1.75, atlas_timestamp='2025-11-17T20:21:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:21:00')
2025-11-17T22:22:10.166 [DEBUG] [Thread-62295] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:22:10.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:22:10.264 [DEBUG] [Thread-62298] [transport.py] [_log()] starting thread (client mode): 0xd317ee30
2025-11-17T22:22:10.264 [DEBUG] [Thread-62298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:22:10.279 [DEBUG] [Thread-62298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:22:10.279 [INFO] [Thread-62298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:22:10.286 [DEBUG] [Thread-62298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:22:10.286 [DEBUG] [Thread-62298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] client lang: <none>
2025-11-17T22:22:10.287 [DEBUG] [Thread-62298] [transport.py] [_log()] server lang: <none>
2025-11-17T22:22:10.288 [DEBUG] [Thread-62298] [transport.py] [_log()] kex follows: False
2025-11-17T22:22:10.288 [DEBUG] [Thread-62298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:22:10.288 [DEBUG] [Thread-62298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:22:10.288 [DEBUG] [Thread-62298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:22:10.288 [DEBUG] [Thread-62298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:22:10.288 [DEBUG] [Thread-62298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:22:10.288 [DEBUG] [Thread-62298] [transport.py] [_log()] Compression: none
2025-11-17T22:22:10.288 [DEBUG] [Thread-62298] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:22:10.345 [DEBUG] [Thread-62298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:22:10.346 [DEBUG] [Thread-62298] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:22:10.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:22:10.348 [DEBUG] [Thread-62298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:22:10.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:22:10.401 [DEBUG] [Thread-62298] [transport.py] [_log()] userauth is OK
2025-11-17T22:22:10.401 [DEBUG] [Thread-62298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:22:10.401 [DEBUG] [Thread-62298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:22:10.402 [DEBUG] [Thread-62298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:22:10.402 [DEBUG] [Thread-62298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:22:10.421 [INFO] [Thread-62298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:22:10.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:22:10.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:22:11.215 [DEBUG] [Thread-62298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:22:11.215 [DEBUG] [Thread-62298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:22:11.263 [DEBUG] [Thread-62298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:22:11.263 [DEBUG] [Thread-62298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:22:11.271 [DEBUG] [Thread-62298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:22:11.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:22:11.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:22:11.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:22:11.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:22:11.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:22:11.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:22:11.302 [DEBUG] [Thread-62298] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:22:16.415 [DEBUG] [Thread-62300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:22:31.452 [DEBUG] [Thread-62301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:22:41.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:22:41.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:22:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:22:41.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 22, 33), 13.56, 39.87, 0.0, 22.09, 15.39, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:22:41.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:22:33
2025-11-17T22:22:42.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:22:42.235 [DEBUG] [Thread-62302] [transport.py] [_log()] starting thread (client mode): 0xd0710070
2025-11-17T22:22:42.235 [DEBUG] [Thread-62302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:22:42.252 [DEBUG] [Thread-62302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:22:42.253 [INFO] [Thread-62302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:22:42.254 [DEBUG] [Thread-62302] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:22:42.254 [DEBUG] [Thread-62302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] client lang: <none>
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] server lang: <none>
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] kex follows: False
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] Compression: none
2025-11-17T22:22:42.255 [DEBUG] [Thread-62302] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:22:42.266 [DEBUG] [Thread-62302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:22:42.266 [DEBUG] [Thread-62302] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:22:42.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:22:42.267 [DEBUG] [Thread-62302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:22:42.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:22:42.268 [DEBUG] [Thread-62302] [transport.py] [_log()] userauth is OK
2025-11-17T22:22:42.269 [DEBUG] [Thread-62302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:22:42.269 [DEBUG] [Thread-62302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:22:42.269 [DEBUG] [Thread-62302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:22:42.269 [DEBUG] [Thread-62302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:22:42.292 [INFO] [Thread-62302] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:22:42.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:22:42.867 [DEBUG] [Thread-62302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:22:42.867 [DEBUG] [Thread-62302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:22:42.876 [DEBUG] [Thread-62302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:22:42.908 [DEBUG] [Thread-62302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:22:42.909 [DEBUG] [Thread-62302] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:22:42.912 [DEBUG] [Thread-62302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:22:42.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:22:42.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:22:42.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:22:42.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:22:42.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:22:42.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:22:42.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:22:42.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:22:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:22:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.849005 -999.00  +15.00  17.59     45   +3.30 1 1 1 1 1     0    0 11.39 -27.63 ZNESW 17.5 17.6 163.2 21.3 15.5 -23.3 15.3 -22.8 15.1 -22.0 15.4 -22.4
2025-11-17T22:22:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:22:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:22:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.849005
2025-11-17T22:22:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:22:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:22:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:22:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:22:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:22:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:22:33', tmtdew=13.56, humidity=39.87, cloud=0.0, wind=22.09, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:22:33', seeing=1.75, atlas_timestamp='2025-11-17T20:22:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:21:00')
2025-11-17T22:22:42.935 [DEBUG] [Thread-62302] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:22:43.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:22:43.033 [DEBUG] [Thread-62305] [transport.py] [_log()] starting thread (client mode): 0xd31cf8e0
2025-11-17T22:22:43.033 [DEBUG] [Thread-62305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:22:43.053 [DEBUG] [Thread-62305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:22:43.053 [INFO] [Thread-62305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:22:43.063 [DEBUG] [Thread-62305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] client lang: <none>
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] server lang: <none>
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] kex follows: False
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:22:43.064 [DEBUG] [Thread-62305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:22:43.065 [DEBUG] [Thread-62305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:22:43.065 [DEBUG] [Thread-62305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:22:43.065 [DEBUG] [Thread-62305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:22:43.065 [DEBUG] [Thread-62305] [transport.py] [_log()] Compression: none
2025-11-17T22:22:43.065 [DEBUG] [Thread-62305] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:22:43.120 [DEBUG] [Thread-62305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:22:43.121 [DEBUG] [Thread-62305] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:22:43.121 [DEBUG] [Thread-62305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:22:43.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:22:43.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:22:43.177 [DEBUG] [Thread-62305] [transport.py] [_log()] userauth is OK
2025-11-17T22:22:43.177 [DEBUG] [Thread-62305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:22:43.178 [DEBUG] [Thread-62305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:22:43.178 [DEBUG] [Thread-62305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:22:43.178 [DEBUG] [Thread-62305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:22:43.197 [INFO] [Thread-62305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:22:43.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:22:43.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:22:44.017 [DEBUG] [Thread-62305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:22:44.017 [DEBUG] [Thread-62305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:22:44.065 [DEBUG] [Thread-62305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:22:44.066 [DEBUG] [Thread-62305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:22:44.074 [DEBUG] [Thread-62305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:22:44.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:22:44.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:22:44.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:22:44.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:22:44.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:22:44.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:22:44.118 [DEBUG] [Thread-62305] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:22:45.829 [DEBUG] [Thread-62307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:22:46.482 [DEBUG] [Thread-62308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:23:00.931 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:23:00.932 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:23:01.526 [DEBUG] [Thread-62309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:23:14.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:23:14.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:23: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
2025-11-17T22:23:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 23, 5), 13.42, 39.95, 0.0, 18.24, 15.0, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:23:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:23:05
2025-11-17T22:23:14.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:23:15.066 [DEBUG] [Thread-62310] [transport.py] [_log()] starting thread (client mode): 0xd07037c0
2025-11-17T22:23:15.066 [DEBUG] [Thread-62310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:23:15.087 [DEBUG] [Thread-62310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:23:15.087 [INFO] [Thread-62310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:23:15.090 [DEBUG] [Thread-62310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:23:15.090 [DEBUG] [Thread-62310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:23:15.090 [DEBUG] [Thread-62310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:23:15.090 [DEBUG] [Thread-62310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:23:15.090 [DEBUG] [Thread-62310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] client lang: <none>
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] server lang: <none>
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] kex follows: False
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] Compression: none
2025-11-17T22:23:15.091 [DEBUG] [Thread-62310] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:23:15.108 [DEBUG] [Thread-62310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:23:15.108 [DEBUG] [Thread-62310] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:23:15.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:23:15.109 [DEBUG] [Thread-62310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:23:15.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:23:15.112 [DEBUG] [Thread-62310] [transport.py] [_log()] userauth is OK
2025-11-17T22:23:15.112 [DEBUG] [Thread-62310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:23:15.112 [DEBUG] [Thread-62310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:23:15.112 [DEBUG] [Thread-62310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:23:15.112 [DEBUG] [Thread-62310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:23:15.130 [INFO] [Thread-62310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:23:15.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:23:15.872 [DEBUG] [Thread-62310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:23:15.872 [DEBUG] [Thread-62310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:23:15.872 [DEBUG] [Thread-62310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:23:15.912 [DEBUG] [Thread-62310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:23:15.912 [DEBUG] [Thread-62310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:23:15.915 [DEBUG] [Thread-62310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:23:15.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:23:15.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:23:15.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:23:15.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:23:15.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:23:15.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:23:15.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:23:15.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:23:15.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:23:15.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.849005 -999.00  +15.00  17.59     45   +3.30 1 1 1 1 1     0    0 11.39 -27.63 ZNESW 17.5 17.6 163.2 21.3 15.5 -23.3 15.3 -22.8 15.1 -22.0 15.4 -22.4
2025-11-17T22:23:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:23:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:23:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.849005
2025-11-17T22:23:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:23:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:23:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:23:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:23:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:23:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:23:05', tmtdew=13.42, humidity=39.95, cloud=0.0, wind=18.24, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:23:06', seeing=1.64, atlas_timestamp='2025-11-17T20:22:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:21:00')
2025-11-17T22:23:15.940 [DEBUG] [Thread-62310] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:23:16.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:23:16.037 [DEBUG] [Thread-62313] [transport.py] [_log()] starting thread (client mode): 0xd0702980
2025-11-17T22:23:16.037 [DEBUG] [Thread-62313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:23:16.052 [DEBUG] [Thread-62313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:23:16.052 [INFO] [Thread-62313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:23:16.060 [DEBUG] [Thread-62313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:23:16.060 [DEBUG] [Thread-62313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:23:16.060 [DEBUG] [Thread-62313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:23:16.060 [DEBUG] [Thread-62313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:23:16.060 [DEBUG] [Thread-62313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:23:16.060 [DEBUG] [Thread-62313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:23:16.060 [DEBUG] [Thread-62313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:23:16.060 [DEBUG] [Thread-62313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] client lang: <none>
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] server lang: <none>
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] kex follows: False
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] Compression: none
2025-11-17T22:23:16.061 [DEBUG] [Thread-62313] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:23:16.116 [DEBUG] [Thread-62313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:23:16.116 [DEBUG] [Thread-62313] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:23:16.117 [DEBUG] [Thread-62313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:23:16.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:23:16.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:23:16.173 [DEBUG] [Thread-62313] [transport.py] [_log()] userauth is OK
2025-11-17T22:23:16.173 [DEBUG] [Thread-62313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:23:16.173 [DEBUG] [Thread-62313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:23:16.173 [DEBUG] [Thread-62313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:23:16.173 [DEBUG] [Thread-62313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:23:16.193 [INFO] [Thread-62313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:23:16.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:23:16.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:23:16.556 [DEBUG] [Thread-62315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:23:17.041 [DEBUG] [Thread-62313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:23:17.041 [DEBUG] [Thread-62313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:23:17.089 [DEBUG] [Thread-62313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:23:17.089 [DEBUG] [Thread-62313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:23:17.098 [DEBUG] [Thread-62313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:23:17.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:23:17.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:23:17.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:23:17.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:23:17.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:23:17.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:23:17.134 [DEBUG] [Thread-62313] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:23:31.593 [DEBUG] [Thread-62316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:23:45.891 [DEBUG] [Thread-62317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:23:46.626 [DEBUG] [Thread-62318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:23:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:23:47.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:23:47.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:23:47.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 23, 37), 13.3, 40.52, 0.0, 22.39, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:23:47.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:23:37
2025-11-17T22:23:47.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:23:48.081 [DEBUG] [Thread-62319] [transport.py] [_log()] starting thread (client mode): 0xd31cdd80
2025-11-17T22:23:48.081 [DEBUG] [Thread-62319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:23:48.103 [DEBUG] [Thread-62319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:23:48.103 [INFO] [Thread-62319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:23:48.107 [DEBUG] [Thread-62319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:23:48.107 [DEBUG] [Thread-62319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:23:48.107 [DEBUG] [Thread-62319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:23:48.107 [DEBUG] [Thread-62319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:23:48.107 [DEBUG] [Thread-62319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:23:48.107 [DEBUG] [Thread-62319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:23:48.107 [DEBUG] [Thread-62319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] client lang: <none>
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] server lang: <none>
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] kex follows: False
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:23:48.108 [DEBUG] [Thread-62319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:23:48.109 [DEBUG] [Thread-62319] [transport.py] [_log()] Compression: none
2025-11-17T22:23:48.109 [DEBUG] [Thread-62319] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:23:48.128 [DEBUG] [Thread-62319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:23:48.129 [DEBUG] [Thread-62319] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:23:48.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:23:48.130 [DEBUG] [Thread-62319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:23:48.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:23:48.132 [DEBUG] [Thread-62319] [transport.py] [_log()] userauth is OK
2025-11-17T22:23:48.132 [DEBUG] [Thread-62319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:23:48.132 [DEBUG] [Thread-62319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:23:48.132 [DEBUG] [Thread-62319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:23:48.133 [DEBUG] [Thread-62319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:23:48.156 [INFO] [Thread-62319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:23:48.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:23:48.794 [DEBUG] [Thread-62319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:23:48.794 [DEBUG] [Thread-62319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:23:48.794 [DEBUG] [Thread-62319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:23:48.835 [DEBUG] [Thread-62319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:23:48.836 [DEBUG] [Thread-62319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:23:48.839 [DEBUG] [Thread-62319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:23:48.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:23:48.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:23:48.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:23:48.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:23:48.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:23:48.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:23:48.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:23:48.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:23:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:23:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.849353 -999.00  +15.00  16.38     45   +3.30 1 1 1 1 1     0    0 11.43 -25.78 ZNESW 20.4 16.4 164.4 21.2 15.5 -23.2 15.3 -22.4 15.1 -22.0 15.4 -22.7
2025-11-17T22:23:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:23:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:23:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.849353
2025-11-17T22:23:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:23:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:23:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:23:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:23:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:23:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:23:37', tmtdew=13.3, humidity=40.52, cloud=0.0, wind=22.39, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:23:37', seeing=1.72, atlas_timestamp='2025-11-17T20:23:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:21:00')
2025-11-17T22:23:48.863 [DEBUG] [Thread-62319] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:23:48.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:23:48.958 [DEBUG] [Thread-62322] [transport.py] [_log()] starting thread (client mode): 0xd0710c10
2025-11-17T22:23:48.958 [DEBUG] [Thread-62322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:23:48.973 [DEBUG] [Thread-62322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:23:48.973 [INFO] [Thread-62322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:23:48.980 [DEBUG] [Thread-62322] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] client lang: <none>
2025-11-17T22:23:48.981 [DEBUG] [Thread-62322] [transport.py] [_log()] server lang: <none>
2025-11-17T22:23:48.982 [DEBUG] [Thread-62322] [transport.py] [_log()] kex follows: False
2025-11-17T22:23:48.982 [DEBUG] [Thread-62322] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:23:48.982 [DEBUG] [Thread-62322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:23:48.982 [DEBUG] [Thread-62322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:23:48.982 [DEBUG] [Thread-62322] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:23:48.982 [DEBUG] [Thread-62322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:23:48.982 [DEBUG] [Thread-62322] [transport.py] [_log()] Compression: none
2025-11-17T22:23:48.982 [DEBUG] [Thread-62322] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:23:49.036 [DEBUG] [Thread-62322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:23:49.036 [DEBUG] [Thread-62322] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:23:49.037 [DEBUG] [Thread-62322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:23:49.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:23:49.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:23:49.093 [DEBUG] [Thread-62322] [transport.py] [_log()] userauth is OK
2025-11-17T22:23:49.093 [DEBUG] [Thread-62322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:23:49.093 [DEBUG] [Thread-62322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:23:49.093 [DEBUG] [Thread-62322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:23:49.093 [DEBUG] [Thread-62322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:23:49.112 [INFO] [Thread-62322] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:23:49.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:23:49.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:23:49.928 [DEBUG] [Thread-62322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:23:49.928 [DEBUG] [Thread-62322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:23:49.976 [DEBUG] [Thread-62322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:23:49.976 [DEBUG] [Thread-62322] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:23:49.985 [DEBUG] [Thread-62322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:23:49.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:23:49.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:23:50.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:23:50.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:23:50.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:23:50.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:23:50.021 [DEBUG] [Thread-62322] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:24:01.136 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:24:01.138 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:24:01.662 [DEBUG] [Thread-62324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:24:16.699 [DEBUG] [Thread-62325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:24:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:24:20.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:24:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:24:20.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 24, 9), 13.28, 40.57, 0.0, 22.92, 14.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:24:20.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:24:09
2025-11-17T22:24:20.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:24:20.941 [DEBUG] [Thread-62326] [transport.py] [_log()] starting thread (client mode): 0xd0712cb0
2025-11-17T22:24:20.941 [DEBUG] [Thread-62326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:24:20.962 [DEBUG] [Thread-62326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:24:20.962 [INFO] [Thread-62326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] client lang: <none>
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] server lang: <none>
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] kex follows: False
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:24:20.965 [DEBUG] [Thread-62326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:24:20.966 [DEBUG] [Thread-62326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:24:20.966 [DEBUG] [Thread-62326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:24:20.966 [DEBUG] [Thread-62326] [transport.py] [_log()] Compression: none
2025-11-17T22:24:20.966 [DEBUG] [Thread-62326] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:24:20.982 [DEBUG] [Thread-62326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:24:20.982 [DEBUG] [Thread-62326] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:24:20.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:24:20.983 [DEBUG] [Thread-62326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:24:20.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:24:20.984 [DEBUG] [Thread-62326] [transport.py] [_log()] userauth is OK
2025-11-17T22:24:20.985 [DEBUG] [Thread-62326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:24:20.985 [DEBUG] [Thread-62326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:24:20.985 [DEBUG] [Thread-62326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:24:20.985 [DEBUG] [Thread-62326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:24:21.002 [INFO] [Thread-62326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:24:21.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:24:21.753 [DEBUG] [Thread-62326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:24:21.753 [DEBUG] [Thread-62326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:24:21.754 [DEBUG] [Thread-62326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:24:21.794 [DEBUG] [Thread-62326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:24:21.795 [DEBUG] [Thread-62326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:24:21.798 [DEBUG] [Thread-62326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:24:21.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:24:21.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:24:21.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:24:21.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:24:21.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:24:21.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:24:21.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:24:21.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:24:21.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:24:21.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.849700 -999.00  +15.00  17.93     45   +3.30 1 1 1 1 1     0    0 11.27 -25.73 ZNESW 12.1 17.9 171.6 19.9 15.5 -23.2 15.3 -22.5 15.1 -21.9 15.4 -22.4
2025-11-17T22:24:21.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:24:21.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:24:21.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.849700
2025-11-17T22:24:21.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:24:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:24:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:24:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:24:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:24:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:24:09', tmtdew=13.28, humidity=40.57, cloud=0.0, wind=22.92, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:24:10', seeing=2.08, atlas_timestamp='2025-11-17T20:23:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:21:00')
2025-11-17T22:24:21.824 [DEBUG] [Thread-62326] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:24:21.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:24:21.922 [DEBUG] [Thread-62329] [transport.py] [_log()] starting thread (client mode): 0xd0712c20
2025-11-17T22:24:21.922 [DEBUG] [Thread-62329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:24:21.943 [DEBUG] [Thread-62329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:24:21.943 [INFO] [Thread-62329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:24:21.950 [DEBUG] [Thread-62329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:24:21.951 [DEBUG] [Thread-62329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:24:21.951 [DEBUG] [Thread-62329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:24:21.951 [DEBUG] [Thread-62329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:24:21.951 [DEBUG] [Thread-62329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:24:21.951 [DEBUG] [Thread-62329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:24:21.951 [DEBUG] [Thread-62329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:24:21.951 [DEBUG] [Thread-62329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] client lang: <none>
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] server lang: <none>
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] kex follows: False
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:24:21.952 [DEBUG] [Thread-62329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:24:21.953 [DEBUG] [Thread-62329] [transport.py] [_log()] Compression: none
2025-11-17T22:24:21.953 [DEBUG] [Thread-62329] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:24:22.015 [DEBUG] [Thread-62329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:24:22.015 [DEBUG] [Thread-62329] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:24:22.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:24:22.016 [DEBUG] [Thread-62329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:24:22.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:24:22.073 [DEBUG] [Thread-62329] [transport.py] [_log()] userauth is OK
2025-11-17T22:24:22.073 [DEBUG] [Thread-62329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:24:22.073 [DEBUG] [Thread-62329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:24:22.073 [DEBUG] [Thread-62329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:24:22.073 [DEBUG] [Thread-62329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:24:22.094 [INFO] [Thread-62329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:24:22.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:24:22.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:24:22.921 [DEBUG] [Thread-62329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:24:22.921 [DEBUG] [Thread-62329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:24:22.968 [DEBUG] [Thread-62329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:24:22.968 [DEBUG] [Thread-62329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:24:22.980 [DEBUG] [Thread-62329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:24:22.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:24:22.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:24:22.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:24:23.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:24:23.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:24:23.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:24:23.016 [DEBUG] [Thread-62329] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:24:31.730 [DEBUG] [Thread-62331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:24:45.969 [DEBUG] [Thread-62332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:24:46.776 [DEBUG] [Thread-62333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:24:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:24:53.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:24:53.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:24:53.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 24, 41), 13.33, 40.57, 0.0, 20.59, 14.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:24:53.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:24:41
2025-11-17T22:24:53.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:24:53.943 [DEBUG] [Thread-62334] [transport.py] [_log()] starting thread (client mode): 0xd7bc61a0
2025-11-17T22:24:53.943 [DEBUG] [Thread-62334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:24:53.964 [DEBUG] [Thread-62334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:24:53.964 [INFO] [Thread-62334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:24:53.967 [DEBUG] [Thread-62334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:24:53.967 [DEBUG] [Thread-62334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] client lang: <none>
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] server lang: <none>
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] kex follows: False
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] Compression: none
2025-11-17T22:24:53.968 [DEBUG] [Thread-62334] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:24:53.986 [DEBUG] [Thread-62334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:24:53.986 [DEBUG] [Thread-62334] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:24:53.987 [DEBUG] [Thread-62334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:24:53.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:24:53.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:24:53.988 [DEBUG] [Thread-62334] [transport.py] [_log()] userauth is OK
2025-11-17T22:24:53.989 [DEBUG] [Thread-62334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:24:53.989 [DEBUG] [Thread-62334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:24:53.989 [DEBUG] [Thread-62334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:24:53.989 [DEBUG] [Thread-62334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:24:54.024 [INFO] [Thread-62334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:24:54.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:24:54.661 [DEBUG] [Thread-62334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:24:54.661 [DEBUG] [Thread-62334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:24:54.661 [DEBUG] [Thread-62334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:24:54.701 [DEBUG] [Thread-62334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:24:54.702 [DEBUG] [Thread-62334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:24:54.704 [DEBUG] [Thread-62334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:24:54.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:24:54.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:24:54.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:24:54.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:24:54.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:24:54.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:24:54.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:24:54.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:24:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:24:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.850047 -999.00  +15.00  15.56     45   +3.30 1 1 1 1 1     0    0 11.18 -28.44 ZNESW 16.6 15.6 164.6 21.1 15.4 -23.2 15.3 -22.3 15.1 -21.7 15.4 -22.6
2025-11-17T22:24:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:24:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:24:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.850047
2025-11-17T22:24:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:24:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:24:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:24:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:24:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:24:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:24:41', tmtdew=13.33, humidity=40.57, cloud=0.0, wind=20.59, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:24:42', seeing=2.08, atlas_timestamp='2025-11-17T20:24:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:21:00')
2025-11-17T22:24:54.728 [DEBUG] [Thread-62334] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:24:54.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:24:54.826 [DEBUG] [Thread-62337] [transport.py] [_log()] starting thread (client mode): 0xd0710760
2025-11-17T22:24:54.826 [DEBUG] [Thread-62337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:24:54.842 [DEBUG] [Thread-62337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:24:54.842 [INFO] [Thread-62337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:24:54.849 [DEBUG] [Thread-62337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:24:54.849 [DEBUG] [Thread-62337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:24:54.849 [DEBUG] [Thread-62337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:24:54.849 [DEBUG] [Thread-62337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] client lang: <none>
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] server lang: <none>
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] kex follows: False
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] Compression: none
2025-11-17T22:24:54.850 [DEBUG] [Thread-62337] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:24:54.908 [DEBUG] [Thread-62337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:24:54.909 [DEBUG] [Thread-62337] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:24:54.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:24:54.910 [DEBUG] [Thread-62337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:24:54.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:24:54.965 [DEBUG] [Thread-62337] [transport.py] [_log()] userauth is OK
2025-11-17T22:24:54.965 [DEBUG] [Thread-62337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:24:54.965 [DEBUG] [Thread-62337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:24:54.965 [DEBUG] [Thread-62337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:24:54.965 [DEBUG] [Thread-62337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:24:54.984 [INFO] [Thread-62337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:24:54.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:24:54.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:24:55.841 [DEBUG] [Thread-62337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:24:55.841 [DEBUG] [Thread-62337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:24:55.889 [DEBUG] [Thread-62337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:24:55.889 [DEBUG] [Thread-62337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:24:55.898 [DEBUG] [Thread-62337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:24:55.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:24:55.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:24:55.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:24:55.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:24:55.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:24:55.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:24:55.933 [DEBUG] [Thread-62337] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:25:01.448 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:01.449 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:01.801 [DEBUG] [Thread-62339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:16.844 [DEBUG] [Thread-62340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:25:25.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:25:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:25:26.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 25, 13), 13.32, 40.59, 0.0, 20.33, 14.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:25:26.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:25:13
2025-11-17T22:25:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:25:26.933 [DEBUG] [Thread-62341] [transport.py] [_log()] starting thread (client mode): 0xd0710220
2025-11-17T22:25:26.934 [DEBUG] [Thread-62341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:25:26.954 [DEBUG] [Thread-62341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:25:26.954 [INFO] [Thread-62341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:25:26.955 [DEBUG] [Thread-62341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] client lang: <none>
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] server lang: <none>
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] kex follows: False
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] Compression: none
2025-11-17T22:25:26.956 [DEBUG] [Thread-62341] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:25:26.964 [DEBUG] [Thread-62341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:25:26.965 [DEBUG] [Thread-62341] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:25:26.965 [DEBUG] [Thread-62341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:25:26.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:25:26.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:25:26.965 [DEBUG] [Thread-62341] [transport.py] [_log()] userauth is OK
2025-11-17T22:25:26.965 [DEBUG] [Thread-62341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:25:26.966 [DEBUG] [Thread-62341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:25:26.966 [DEBUG] [Thread-62341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:25:26.966 [DEBUG] [Thread-62341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:25:26.975 [INFO] [Thread-62341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:25:26.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:25:28.320 [DEBUG] [Thread-62341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:25:28.320 [DEBUG] [Thread-62341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:25:28.320 [DEBUG] [Thread-62341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:25:28.361 [DEBUG] [Thread-62341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:25:28.361 [DEBUG] [Thread-62341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:25:28.363 [DEBUG] [Thread-62341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:25:28.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:25:28.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:25:28.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:25:28.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:25:28.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:25:28.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:25:28.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:25:28.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:25:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:25:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.850395 -999.00  +15.00  13.95     45   +3.30 1 1 1 1 1     0    0 11.11 -29.73 ZNESW 12.1 13.9 157.6 17.4 15.4 -23.2 15.3 -22.4 15.1 -21.8 15.4 -22.4
2025-11-17T22:25:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:25:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:25:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.850395
2025-11-17T22:25:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:25:28.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:25:28.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:25:28.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:25:28.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:25:28.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:25:13', tmtdew=13.32, humidity=40.59, cloud=0.0, wind=20.33, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:25:14', seeing=2.0, atlas_timestamp='2025-11-17T20:24:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:23:00')
2025-11-17T22:25:28.378 [DEBUG] [Thread-62341] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:25:28.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:25:28.463 [DEBUG] [Thread-62344] [transport.py] [_log()] starting thread (client mode): 0xd0710910
2025-11-17T22:25:28.464 [DEBUG] [Thread-62344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:25:28.478 [DEBUG] [Thread-62344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:25:28.478 [INFO] [Thread-62344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] client lang: <none>
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] server lang: <none>
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] kex follows: False
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:25:28.486 [DEBUG] [Thread-62344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:25:28.487 [DEBUG] [Thread-62344] [transport.py] [_log()] Compression: none
2025-11-17T22:25:28.487 [DEBUG] [Thread-62344] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:25:28.547 [DEBUG] [Thread-62344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:25:28.547 [DEBUG] [Thread-62344] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:25:28.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:25:28.548 [DEBUG] [Thread-62344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:25:28.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:25:28.604 [DEBUG] [Thread-62344] [transport.py] [_log()] userauth is OK
2025-11-17T22:25:28.604 [DEBUG] [Thread-62344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:25:28.604 [DEBUG] [Thread-62344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:25:28.604 [DEBUG] [Thread-62344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:25:28.604 [DEBUG] [Thread-62344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:25:28.626 [INFO] [Thread-62344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:25:28.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:25:28.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:25:29.454 [DEBUG] [Thread-62344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:25:29.454 [DEBUG] [Thread-62344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:25:29.502 [DEBUG] [Thread-62344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:25:29.502 [DEBUG] [Thread-62344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:25:29.511 [DEBUG] [Thread-62344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:25:29.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:25:29.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:25:29.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:25:29.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:25:29.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:25:29.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:25:29.542 [DEBUG] [Thread-62344] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:25:31.874 [DEBUG] [Thread-62346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:39.299 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:46.047 [DEBUG] [Thread-62347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:46.914 [DEBUG] [Thread-62348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:49.274 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:53.550 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:25:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:25:59.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:25:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:26:00.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 25, 45), 13.33, 40.55, 0.0, 19.97, 14.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:26:00.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:25:45
2025-11-17T22:26:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:26:00.507 [DEBUG] [Thread-62349] [transport.py] [_log()] starting thread (client mode): 0xd0711a80
2025-11-17T22:26:00.508 [DEBUG] [Thread-62349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:26:00.527 [DEBUG] [Thread-62349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:26:00.528 [INFO] [Thread-62349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] client lang: <none>
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] server lang: <none>
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] kex follows: False
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] Compression: none
2025-11-17T22:26:00.532 [DEBUG] [Thread-62349] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:26:00.549 [DEBUG] [Thread-62349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:26:00.550 [DEBUG] [Thread-62349] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:26:00.550 [DEBUG] [Thread-62349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:26:00.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:26:00.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:26:00.593 [DEBUG] [Thread-62349] [transport.py] [_log()] userauth is OK
2025-11-17T22:26:00.593 [DEBUG] [Thread-62349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:26:00.593 [DEBUG] [Thread-62349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:26:00.593 [DEBUG] [Thread-62349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:26:00.593 [DEBUG] [Thread-62349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:26:00.626 [INFO] [Thread-62349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:26:00.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:26:01.220 [DEBUG] [Thread-62349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:26:01.220 [DEBUG] [Thread-62349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:26:01.220 [DEBUG] [Thread-62349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:26:01.260 [DEBUG] [Thread-62349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:26:01.260 [DEBUG] [Thread-62349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:26:01.264 [DEBUG] [Thread-62349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:26:01.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:26:01.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:26:01.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:26:01.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:26:01.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:26:01.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:26:01.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:26:01.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.851089 -999.00  +14.90  13.44     45   +3.30 1 1 1 1 1     0    0 11.01 -30.13 ZNESW 13.1 13.4 166.8 19.4 15.4 -23.3 15.3 -22.4 15.1 -21.7 15.4 -22.6
2025-11-17T22:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.851089
2025-11-17T22:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:26:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:26:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:26:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:26:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:26:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:25:45', tmtdew=13.33, humidity=40.55, cloud=0.0, wind=19.97, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:25:46', seeing=2.82, atlas_timestamp='2025-11-17T20:25:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:23:00')
2025-11-17T22:26:01.287 [DEBUG] [Thread-62349] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:26:01.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:26:01.385 [DEBUG] [Thread-62352] [transport.py] [_log()] starting thread (client mode): 0xd0711b70
2025-11-17T22:26:01.385 [DEBUG] [Thread-62352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:26:01.403 [DEBUG] [Thread-62352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:26:01.404 [INFO] [Thread-62352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:26:01.411 [DEBUG] [Thread-62352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:26:01.411 [DEBUG] [Thread-62352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:26:01.411 [DEBUG] [Thread-62352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:26:01.411 [DEBUG] [Thread-62352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:26:01.411 [DEBUG] [Thread-62352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:26:01.411 [DEBUG] [Thread-62352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:26:01.411 [DEBUG] [Thread-62352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:26:01.411 [DEBUG] [Thread-62352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] client lang: <none>
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] server lang: <none>
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] kex follows: False
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] Compression: none
2025-11-17T22:26:01.412 [DEBUG] [Thread-62352] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:26:01.474 [DEBUG] [Thread-62352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:26:01.474 [DEBUG] [Thread-62352] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:26:01.474 [DEBUG] [Thread-62352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:26:01.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:26:01.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:26:01.532 [DEBUG] [Thread-62352] [transport.py] [_log()] userauth is OK
2025-11-17T22:26:01.533 [DEBUG] [Thread-62352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:26:01.533 [DEBUG] [Thread-62352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:26:01.533 [DEBUG] [Thread-62352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:26:01.533 [DEBUG] [Thread-62352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:26:01.552 [INFO] [Thread-62352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:26:01.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:26:01.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:26:01.670 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:26:01.671 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:26:01.942 [DEBUG] [Thread-62354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:26:02.420 [DEBUG] [Thread-62352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:26:02.420 [DEBUG] [Thread-62352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:26:02.467 [DEBUG] [Thread-62352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:26:02.467 [DEBUG] [Thread-62352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:26:02.481 [DEBUG] [Thread-62352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:26:02.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:26:02.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:26:02.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:26:02.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:26:02.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:26:02.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:26:02.517 [DEBUG] [Thread-62352] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:26:16.973 [DEBUG] [Thread-62355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:26:32.003 [DEBUG] [Thread-62356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:26:32.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:26:32.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:26:32.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:26:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 26, 17), 13.3, 40.63, 0.0, 20.08, 14.95, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:26:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:26:17
2025-11-17T22:26:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:26:33.484 [DEBUG] [Thread-62357] [transport.py] [_log()] starting thread (client mode): 0xd317ffd0
2025-11-17T22:26:33.484 [DEBUG] [Thread-62357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:26:33.505 [DEBUG] [Thread-62357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:26:33.505 [INFO] [Thread-62357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:26:33.508 [DEBUG] [Thread-62357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:26:33.508 [DEBUG] [Thread-62357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:26:33.508 [DEBUG] [Thread-62357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:26:33.508 [DEBUG] [Thread-62357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:26:33.508 [DEBUG] [Thread-62357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:26:33.508 [DEBUG] [Thread-62357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:26:33.508 [DEBUG] [Thread-62357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] client lang: <none>
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] server lang: <none>
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] kex follows: False
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] Compression: none
2025-11-17T22:26:33.509 [DEBUG] [Thread-62357] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:26:33.527 [DEBUG] [Thread-62357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:26:33.528 [DEBUG] [Thread-62357] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:26:33.528 [DEBUG] [Thread-62357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:26:33.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:26:33.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:26:33.530 [DEBUG] [Thread-62357] [transport.py] [_log()] userauth is OK
2025-11-17T22:26:33.530 [DEBUG] [Thread-62357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:26:33.530 [DEBUG] [Thread-62357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:26:33.530 [DEBUG] [Thread-62357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:26:33.530 [DEBUG] [Thread-62357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:26:33.548 [INFO] [Thread-62357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:26:33.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:26:34.152 [DEBUG] [Thread-62357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:26:34.152 [DEBUG] [Thread-62357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:26:34.152 [DEBUG] [Thread-62357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:26:34.194 [DEBUG] [Thread-62357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:26:34.194 [DEBUG] [Thread-62357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:26:34.197 [DEBUG] [Thread-62357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:26:34.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:26:34.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:26:34.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:26:34.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:26:34.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:26:34.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:26:34.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:26:34.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:26:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:26:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.851436 -999.00  +14.90  13.46     45   +3.30 1 1 1 1 1     0    0 10.97 -28.23 ZNESW 14.0 13.5 164.6 17.3 15.4 -23.2 15.3 -22.3 15.1 -21.6 15.4 -22.6
2025-11-17T22:26:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:26:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:26:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.851436
2025-11-17T22:26:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:26:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:26:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:26:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:26:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:26:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:26:17', tmtdew=13.3, humidity=40.63, cloud=0.0, wind=20.08, temperature=14.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:26:18', seeing=2.49, atlas_timestamp='2025-11-17T20:26:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:23:00')
2025-11-17T22:26:34.220 [DEBUG] [Thread-62357] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:26:34.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:26:34.318 [DEBUG] [Thread-62360] [transport.py] [_log()] starting thread (client mode): 0xd317c9a0
2025-11-17T22:26:34.318 [DEBUG] [Thread-62360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:26:34.332 [DEBUG] [Thread-62360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:26:34.333 [INFO] [Thread-62360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:26:34.340 [DEBUG] [Thread-62360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:26:34.340 [DEBUG] [Thread-62360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:26:34.340 [DEBUG] [Thread-62360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] client lang: <none>
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] server lang: <none>
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] kex follows: False
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:26:34.341 [DEBUG] [Thread-62360] [transport.py] [_log()] Compression: none
2025-11-17T22:26:34.342 [DEBUG] [Thread-62360] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:26:34.400 [DEBUG] [Thread-62360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:26:34.401 [DEBUG] [Thread-62360] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:26:34.401 [DEBUG] [Thread-62360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:26:34.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:26:34.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:26:34.457 [DEBUG] [Thread-62360] [transport.py] [_log()] userauth is OK
2025-11-17T22:26:34.457 [DEBUG] [Thread-62360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:26:34.457 [DEBUG] [Thread-62360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:26:34.457 [DEBUG] [Thread-62360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:26:34.457 [DEBUG] [Thread-62360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:26:34.476 [INFO] [Thread-62360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:26:34.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:26:34.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:26:35.277 [DEBUG] [Thread-62360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:26:35.277 [DEBUG] [Thread-62360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:26:35.326 [DEBUG] [Thread-62360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:26:35.326 [DEBUG] [Thread-62360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:26:35.335 [DEBUG] [Thread-62360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:26:35.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:26:35.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:26:35.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:26:35.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:26:35.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:26:35.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:26:35.369 [DEBUG] [Thread-62360] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:26:46.100 [DEBUG] [Thread-62362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:26:47.033 [DEBUG] [Thread-62363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:27:01.884 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:27:01.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:27:02.073 [DEBUG] [Thread-62364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:27:05.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:27:05.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:27:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:27:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 26, 49), 13.25, 40.65, 0.0, 17.64, 14.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:27:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:26:49
2025-11-17T22:27:06.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:27:06.327 [DEBUG] [Thread-62365] [transport.py] [_log()] starting thread (client mode): 0xd317dab0
2025-11-17T22:27:06.327 [DEBUG] [Thread-62365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:27:06.348 [DEBUG] [Thread-62365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:27:06.349 [INFO] [Thread-62365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:27:06.352 [DEBUG] [Thread-62365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:27:06.352 [DEBUG] [Thread-62365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:27:06.352 [DEBUG] [Thread-62365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:27:06.352 [DEBUG] [Thread-62365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] client lang: <none>
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] server lang: <none>
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] kex follows: False
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] Compression: none
2025-11-17T22:27:06.353 [DEBUG] [Thread-62365] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:27:06.369 [DEBUG] [Thread-62365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:27:06.370 [DEBUG] [Thread-62365] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:27:06.370 [DEBUG] [Thread-62365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:27:06.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:27:06.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:27:06.372 [DEBUG] [Thread-62365] [transport.py] [_log()] userauth is OK
2025-11-17T22:27:06.373 [DEBUG] [Thread-62365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:27:06.373 [DEBUG] [Thread-62365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:27:06.373 [DEBUG] [Thread-62365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:27:06.373 [DEBUG] [Thread-62365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:27:06.397 [INFO] [Thread-62365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:27:06.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:27:07.018 [DEBUG] [Thread-62365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:27:07.018 [DEBUG] [Thread-62365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:27:07.019 [DEBUG] [Thread-62365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:27:07.060 [DEBUG] [Thread-62365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:27:07.060 [DEBUG] [Thread-62365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:27:07.063 [DEBUG] [Thread-62365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:27:07.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:27:07.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:27:07.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:27:07.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:27:07.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:27:07.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:27:07.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:27:07.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:27:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:27:07.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.851783 -999.00  +14.90  10.40     45   +3.30 1 1 1 1 1     0    0 10.84 -28.76 ZNESW 11.0 10.4 161.0 20.1 15.4 -23.2 15.2 -22.3 15.1 -21.7 15.4 -22.4
2025-11-17T22:27:07.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:27:07.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:27:07.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.851783
2025-11-17T22:27:07.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:27:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:27:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:27:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:27:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:27:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:26:49', tmtdew=13.25, humidity=40.65, cloud=0.0, wind=17.64, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:26:50', seeing=2.97, atlas_timestamp='2025-11-17T20:26:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:23:00')
2025-11-17T22:27:07.089 [DEBUG] [Thread-62365] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:27:07.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:27:07.186 [DEBUG] [Thread-62368] [transport.py] [_log()] starting thread (client mode): 0xd317d630
2025-11-17T22:27:07.186 [DEBUG] [Thread-62368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:27:07.201 [DEBUG] [Thread-62368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:27:07.201 [INFO] [Thread-62368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:27:07.209 [DEBUG] [Thread-62368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:27:07.209 [DEBUG] [Thread-62368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:27:07.209 [DEBUG] [Thread-62368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:27:07.209 [DEBUG] [Thread-62368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:27:07.209 [DEBUG] [Thread-62368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] client lang: <none>
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] server lang: <none>
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] kex follows: False
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] Compression: none
2025-11-17T22:27:07.210 [DEBUG] [Thread-62368] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:27:07.268 [DEBUG] [Thread-62368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:27:07.269 [DEBUG] [Thread-62368] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:27:07.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:27:07.270 [DEBUG] [Thread-62368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:27:07.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:27:07.324 [DEBUG] [Thread-62368] [transport.py] [_log()] userauth is OK
2025-11-17T22:27:07.325 [DEBUG] [Thread-62368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:27:07.325 [DEBUG] [Thread-62368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:27:07.325 [DEBUG] [Thread-62368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:27:07.325 [DEBUG] [Thread-62368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:27:07.343 [INFO] [Thread-62368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:27:07.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:27:07.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:27:08.197 [DEBUG] [Thread-62368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:27:08.197 [DEBUG] [Thread-62368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:27:08.244 [DEBUG] [Thread-62368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:27:08.245 [DEBUG] [Thread-62368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:27:08.253 [DEBUG] [Thread-62368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:27:08.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:27:08.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:27:08.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:27:08.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:27:08.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:27:08.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:27:08.288 [DEBUG] [Thread-62368] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:27:17.100 [DEBUG] [Thread-62370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:27:32.143 [DEBUG] [Thread-62371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:27:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:27:38.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:27:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:27:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 27, 21), 13.26, 40.6, 0.0, 18.17, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:27:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:27:21
2025-11-17T22:27:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:27:39.240 [DEBUG] [Thread-62372] [transport.py] [_log()] starting thread (client mode): 0xd0712bf0
2025-11-17T22:27:39.240 [DEBUG] [Thread-62372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:27:39.261 [DEBUG] [Thread-62372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:27:39.261 [INFO] [Thread-62372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:27:39.264 [DEBUG] [Thread-62372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:27:39.264 [DEBUG] [Thread-62372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:27:39.264 [DEBUG] [Thread-62372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:27:39.264 [DEBUG] [Thread-62372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:27:39.264 [DEBUG] [Thread-62372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:27:39.264 [DEBUG] [Thread-62372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] client lang: <none>
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] server lang: <none>
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] kex follows: False
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:27:39.265 [DEBUG] [Thread-62372] [transport.py] [_log()] Compression: none
2025-11-17T22:27:39.266 [DEBUG] [Thread-62372] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:27:39.286 [DEBUG] [Thread-62372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:27:39.286 [DEBUG] [Thread-62372] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:27:39.287 [DEBUG] [Thread-62372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:27:39.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:27:39.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:27:39.289 [DEBUG] [Thread-62372] [transport.py] [_log()] userauth is OK
2025-11-17T22:27:39.289 [DEBUG] [Thread-62372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:27:39.289 [DEBUG] [Thread-62372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:27:39.289 [DEBUG] [Thread-62372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:27:39.289 [DEBUG] [Thread-62372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:27:39.307 [INFO] [Thread-62372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:27:39.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:27:39.893 [DEBUG] [Thread-62372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:27:39.894 [DEBUG] [Thread-62372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:27:39.894 [DEBUG] [Thread-62372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:27:39.934 [DEBUG] [Thread-62372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:27:39.935 [DEBUG] [Thread-62372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:27:39.937 [DEBUG] [Thread-62372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:27:39.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:27:39.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:27:39.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:27:39.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:27:39.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:27:39.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:27:39.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:27:39.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:27:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:27:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.852130 -999.00  +14.90  10.27     45   +3.20 1 1 1 1 1     0    0 11.02 -27.48 ZNESW 13.3 10.3 160.0 16.5 15.4 -23.3 15.2 -22.1 15.1 -21.7 15.4 -22.5
2025-11-17T22:27:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:27:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:27:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.852130
2025-11-17T22:27:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:27:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:27:39.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:27:39.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:27:39.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:27:39.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:27:21', tmtdew=13.26, humidity=40.6, cloud=0.0, wind=18.17, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:27:22', seeing=2.97, atlas_timestamp='2025-11-17T20:27:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[0.1377499999999987, 0.1412500000000012, 0.1747500000000013, 0.15850000000000009, 0.15249999999999986, 0.22025000000000006, 0.1255000000000006, 0.11825000000000152, 0.1794999999999991, 0.17950000000000088, 0.2182499999999994, 0.19100000000000072, 0.26399999999999935, 0.14925000000000033, 0.19350000000000023, 0.2889999999999997, 0.27924999999999933, 0.3625000000000007, 0.28200000000000003, 0.30324999999999847, 0.352999999999998, 0.3387499999999992, 0.4667500000000011, 0.48575000000000035, 0.565999999999999, 0.5555000000000003, 0.30824999999999925, 0.4394999999999998, 0.49900000000000055, 0.6060000000000016, 1.0100000000000007, 0.4560000000000022, 0.3067499999999992], zp_timestamp='2025-11-17T20:23:00')
2025-11-17T22:27:39.962 [DEBUG] [Thread-62372] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:27:40.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:27:40.059 [DEBUG] [Thread-62375] [transport.py] [_log()] starting thread (client mode): 0xd31351e0
2025-11-17T22:27:40.059 [DEBUG] [Thread-62375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:27:40.073 [DEBUG] [Thread-62375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:27:40.074 [INFO] [Thread-62375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] client lang: <none>
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] server lang: <none>
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] kex follows: False
2025-11-17T22:27:40.081 [DEBUG] [Thread-62375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:27:40.082 [DEBUG] [Thread-62375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:27:40.082 [DEBUG] [Thread-62375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:27:40.082 [DEBUG] [Thread-62375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:27:40.082 [DEBUG] [Thread-62375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:27:40.082 [DEBUG] [Thread-62375] [transport.py] [_log()] Compression: none
2025-11-17T22:27:40.082 [DEBUG] [Thread-62375] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:27:40.144 [DEBUG] [Thread-62375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:27:40.144 [DEBUG] [Thread-62375] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:27:40.145 [DEBUG] [Thread-62375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:27:40.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:27:40.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:27:40.201 [DEBUG] [Thread-62375] [transport.py] [_log()] userauth is OK
2025-11-17T22:27:40.201 [DEBUG] [Thread-62375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:27:40.202 [DEBUG] [Thread-62375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:27:40.202 [DEBUG] [Thread-62375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:27:40.202 [DEBUG] [Thread-62375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:27:40.222 [INFO] [Thread-62375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:27:40.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:27:40.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:27:41.040 [DEBUG] [Thread-62375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:27:41.041 [DEBUG] [Thread-62375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:27:41.088 [DEBUG] [Thread-62375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:27:41.089 [DEBUG] [Thread-62375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:27:41.098 [DEBUG] [Thread-62375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:27:41.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:27:41.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:27:41.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:27:41.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:27:41.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:27:41.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:27:41.133 [DEBUG] [Thread-62375] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:27:46.157 [DEBUG] [Thread-62377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:27:47.181 [DEBUG] [Thread-62378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:28:02.094 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:28:02.095 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:28:02.220 [DEBUG] [Thread-62379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:28:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:28:11.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:28:11.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:28:11.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 27, 54), 13.25, 40.63, 0.0, 19.87, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:28:11.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:27:54
2025-11-17T22:28:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:28:12.069 [DEBUG] [Thread-62380] [transport.py] [_log()] starting thread (client mode): 0xd0712b90
2025-11-17T22:28:12.069 [DEBUG] [Thread-62380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:28:12.089 [DEBUG] [Thread-62380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:28:12.089 [INFO] [Thread-62380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:28:12.092 [DEBUG] [Thread-62380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] client lang: <none>
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] server lang: <none>
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] kex follows: False
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:28:12.093 [DEBUG] [Thread-62380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:28:12.094 [DEBUG] [Thread-62380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:28:12.094 [DEBUG] [Thread-62380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:28:12.094 [DEBUG] [Thread-62380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:28:12.094 [DEBUG] [Thread-62380] [transport.py] [_log()] Compression: none
2025-11-17T22:28:12.094 [DEBUG] [Thread-62380] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:28:12.111 [DEBUG] [Thread-62380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:28:12.112 [DEBUG] [Thread-62380] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:28:12.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:28:12.113 [DEBUG] [Thread-62380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:28:12.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:28:12.114 [DEBUG] [Thread-62380] [transport.py] [_log()] userauth is OK
2025-11-17T22:28:12.115 [DEBUG] [Thread-62380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:28:12.115 [DEBUG] [Thread-62380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:28:12.115 [DEBUG] [Thread-62380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:28:12.115 [DEBUG] [Thread-62380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:28:12.149 [INFO] [Thread-62380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:28:12.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:28:12.766 [DEBUG] [Thread-62380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:28:12.766 [DEBUG] [Thread-62380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:28:12.766 [DEBUG] [Thread-62380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:28:12.806 [DEBUG] [Thread-62380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:28:12.806 [DEBUG] [Thread-62380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:28:12.809 [DEBUG] [Thread-62380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:28:12.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:28:12.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:28:12.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:28:12.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:28:12.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:28:12.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:28:12.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:28:12.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:28:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:28:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.852478 -999.00  +14.90  12.77     45   +3.30 1 1 1 1 1     0    0 10.96 -26.17 ZNESW 14.1 12.8 178.2 18.3 15.4 -23.2 15.3 -22.1 15.1 -21.6 15.4 -22.4
2025-11-17T22:28:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:28:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:28:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.852478
2025-11-17T22:28:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:28:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:28:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:28:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:28:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:28:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:27:54', tmtdew=13.25, humidity=40.63, cloud=0.0, wind=19.87, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:27:54', seeing=2.97, atlas_timestamp='2025-11-17T20:27:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.15075000000000038, 0.06825000000000081, 0.1537500000000005, 0.14999999999999858, 0.1875, 0.25125000000000064, 0.16149999999999842, 0.0832499999999996, 0.1479999999999997, 0.06300000000000061, 0.1427499999999995, 0.1980000000000004, 0.32099999999999973, 0.254249999999999, 0.24499999999999922, 0.09299999999999997, 0.11425000000000018, 0.19650000000000034, 0.25599999999999845, 0.27424999999999855, 0.4209999999999994, 0.3457499999999989, 0.3597500000000018, 0.3377499999999998, 0.1429999999999989, 0.2550000000000008, 0.3202499999999997, 0.5575000000000001, 0.6640000000000006, 0.46800000000000175, 0.8790000000000013, 0.6140000000000008, 0.5047499999999996], zp_timestamp='2025-11-17T20:27:00')
2025-11-17T22:28:12.835 [DEBUG] [Thread-62380] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:28:12.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:28:12.943 [DEBUG] [Thread-62383] [transport.py] [_log()] starting thread (client mode): 0xd0712380
2025-11-17T22:28:12.943 [DEBUG] [Thread-62383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:28:12.959 [DEBUG] [Thread-62383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:28:12.959 [INFO] [Thread-62383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:28:12.966 [DEBUG] [Thread-62383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:28:12.966 [DEBUG] [Thread-62383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:28:12.966 [DEBUG] [Thread-62383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:28:12.966 [DEBUG] [Thread-62383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] client lang: <none>
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] server lang: <none>
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] kex follows: False
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] Compression: none
2025-11-17T22:28:12.967 [DEBUG] [Thread-62383] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:28:13.024 [DEBUG] [Thread-62383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:28:13.025 [DEBUG] [Thread-62383] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:28:13.025 [DEBUG] [Thread-62383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:28:13.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:28:13.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:28:13.081 [DEBUG] [Thread-62383] [transport.py] [_log()] userauth is OK
2025-11-17T22:28:13.081 [DEBUG] [Thread-62383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:28:13.081 [DEBUG] [Thread-62383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:28:13.081 [DEBUG] [Thread-62383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:28:13.081 [DEBUG] [Thread-62383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:28:13.100 [INFO] [Thread-62383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:28:13.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:28:13.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:28:13.964 [DEBUG] [Thread-62383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:28:13.964 [DEBUG] [Thread-62383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:28:14.011 [DEBUG] [Thread-62383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:28:14.011 [DEBUG] [Thread-62383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:28:14.020 [DEBUG] [Thread-62383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:28:14.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:28:14.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:28: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') -> 00000000
2025-11-17T22:28:14.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:28:14.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:28:14.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:28:14.055 [DEBUG] [Thread-62383] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:28:17.243 [DEBUG] [Thread-62385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:28:32.292 [DEBUG] [Thread-62386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:28:44.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:28:44.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:28:44.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
2025-11-17T22:28:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 28, 26), 13.24, 40.67, 0.0, 20.03, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:28:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:28:26
2025-11-17T22:28:44.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:28:45.027 [DEBUG] [Thread-62387] [transport.py] [_log()] starting thread (client mode): 0xd317fdc0
2025-11-17T22:28:45.027 [DEBUG] [Thread-62387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:28:45.048 [DEBUG] [Thread-62387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:28:45.048 [INFO] [Thread-62387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:28:45.051 [DEBUG] [Thread-62387] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:28:45.051 [DEBUG] [Thread-62387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:28:45.051 [DEBUG] [Thread-62387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:28:45.051 [DEBUG] [Thread-62387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:28:45.051 [DEBUG] [Thread-62387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:28:45.051 [DEBUG] [Thread-62387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:28:45.051 [DEBUG] [Thread-62387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:28:45.051 [DEBUG] [Thread-62387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] client lang: <none>
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] server lang: <none>
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] kex follows: False
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] Compression: none
2025-11-17T22:28:45.052 [DEBUG] [Thread-62387] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:28:45.069 [DEBUG] [Thread-62387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:28:45.069 [DEBUG] [Thread-62387] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:28:45.070 [DEBUG] [Thread-62387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:28:45.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:28:45.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:28:45.072 [DEBUG] [Thread-62387] [transport.py] [_log()] userauth is OK
2025-11-17T22:28:45.072 [DEBUG] [Thread-62387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:28:45.072 [DEBUG] [Thread-62387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:28:45.072 [DEBUG] [Thread-62387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:28:45.072 [DEBUG] [Thread-62387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:28:45.089 [INFO] [Thread-62387] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:28:45.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:28:45.715 [DEBUG] [Thread-62387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:28:45.716 [DEBUG] [Thread-62387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:28:45.716 [DEBUG] [Thread-62387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:28:45.756 [DEBUG] [Thread-62387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:28:45.756 [DEBUG] [Thread-62387] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:28:45.759 [DEBUG] [Thread-62387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:28:45.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:28:45.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:28:45.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:28:45.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:28:45.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:28:45.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:28:45.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:28:45.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:28:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:28:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.853172 -999.00  +14.80  15.30     45   +3.30 1 2 1 1 1     0    0 11.25 -26.02 ZNEsW 14.8 15.3 172.1 18.8 15.4 -23.1 15.2 -22.1 15.0 -21.4 15.3 -22.3
2025-11-17T22:28:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:28:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:28:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.853172
2025-11-17T22:28:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:28:45.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:28:45.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:28:45.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:28:45.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:28:45.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:28:26', tmtdew=13.24, humidity=40.67, cloud=0.0, wind=20.03, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:28:26', seeing=2.97, atlas_timestamp='2025-11-17T20:28:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.15075000000000038, 0.06825000000000081, 0.1537500000000005, 0.14999999999999858, 0.1875, 0.25125000000000064, 0.16149999999999842, 0.0832499999999996, 0.1479999999999997, 0.06300000000000061, 0.1427499999999995, 0.1980000000000004, 0.32099999999999973, 0.254249999999999, 0.24499999999999922, 0.09299999999999997, 0.11425000000000018, 0.19650000000000034, 0.25599999999999845, 0.27424999999999855, 0.4209999999999994, 0.3457499999999989, 0.3597500000000018, 0.3377499999999998, 0.1429999999999989, 0.2550000000000008, 0.3202499999999997, 0.5575000000000001, 0.6640000000000006, 0.46800000000000175, 0.8790000000000013, 0.6140000000000008, 0.5047499999999996], zp_timestamp='2025-11-17T20:27:00')
2025-11-17T22:28:45.783 [DEBUG] [Thread-62387] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:28:45.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:28:45.872 [DEBUG] [Thread-62390] [transport.py] [_log()] starting thread (client mode): 0xd07129b0
2025-11-17T22:28:45.872 [DEBUG] [Thread-62390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:28:45.889 [DEBUG] [Thread-62390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:28:45.889 [INFO] [Thread-62390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:28:45.896 [DEBUG] [Thread-62390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:28:45.897 [DEBUG] [Thread-62390] [transport.py] [_log()] client lang: <none>
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] server lang: <none>
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] kex follows: False
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] Compression: none
2025-11-17T22:28:45.898 [DEBUG] [Thread-62390] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:28:45.956 [DEBUG] [Thread-62390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:28:45.957 [DEBUG] [Thread-62390] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:28:45.957 [DEBUG] [Thread-62390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:28:45.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:28:45.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:28:46.012 [DEBUG] [Thread-62390] [transport.py] [_log()] userauth is OK
2025-11-17T22:28:46.013 [DEBUG] [Thread-62390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:28:46.013 [DEBUG] [Thread-62390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:28:46.013 [DEBUG] [Thread-62390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:28:46.013 [DEBUG] [Thread-62390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:28:46.033 [INFO] [Thread-62390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:28:46.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:28:46.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:28:46.223 [DEBUG] [Thread-62392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:28:46.888 [DEBUG] [Thread-62390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:28:46.889 [DEBUG] [Thread-62390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:28:46.936 [DEBUG] [Thread-62390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:28:46.937 [DEBUG] [Thread-62390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:28:46.945 [DEBUG] [Thread-62390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:28:46.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:28:46.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:28:46.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
2025-11-17T22:28:46.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:28:46.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:28:46.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:28:46.979 [DEBUG] [Thread-62390] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:28:47.320 [DEBUG] [Thread-62393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:29:02.298 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:29:02.299 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:29:02.363 [DEBUG] [Thread-62394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:29:17.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:29:17.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:29:17.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:29:17.391 [DEBUG] [Thread-62395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:29:17.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 28, 58), 13.25, 40.65, 0.0, 20.27, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:29:17.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:28:58
2025-11-17T22:29:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:29:17.947 [DEBUG] [Thread-62396] [transport.py] [_log()] starting thread (client mode): 0xd317e7a0
2025-11-17T22:29:17.948 [DEBUG] [Thread-62396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:29:17.965 [DEBUG] [Thread-62396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:29:17.965 [INFO] [Thread-62396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:29:17.968 [DEBUG] [Thread-62396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] client lang: <none>
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] server lang: <none>
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] kex follows: False
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] Compression: none
2025-11-17T22:29:17.969 [DEBUG] [Thread-62396] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:29:17.984 [DEBUG] [Thread-62396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:29:17.984 [DEBUG] [Thread-62396] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:29:17.984 [DEBUG] [Thread-62396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:29:17.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:29:17.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:29:17.985 [DEBUG] [Thread-62396] [transport.py] [_log()] userauth is OK
2025-11-17T22:29:17.985 [DEBUG] [Thread-62396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:29:17.985 [DEBUG] [Thread-62396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:29:17.985 [DEBUG] [Thread-62396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:29:17.985 [DEBUG] [Thread-62396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:29:17.994 [INFO] [Thread-62396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:29:17.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:29:18.607 [DEBUG] [Thread-62396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:29:18.607 [DEBUG] [Thread-62396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:29:18.607 [DEBUG] [Thread-62396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:29:18.648 [DEBUG] [Thread-62396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:29:18.648 [DEBUG] [Thread-62396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:29:18.650 [DEBUG] [Thread-62396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:29:18.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:29:18.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:29:18.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:29:18.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:29:18.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:29:18.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:29:18.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:29:18.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:29:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:29:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.853519 -999.00  +14.80  14.64     45   +3.30 1 2 1 1 1     0    0 11.25 -24.80 ZNEsW 10.8 14.6 172.6 17.4 15.4 -23.0 15.2 -22.1 15.1 -21.4 15.4 -22.4
2025-11-17T22:29:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:29:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:29:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.853519
2025-11-17T22:29:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:29:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:29:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:29:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:29:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:29:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:28:58', tmtdew=13.25, humidity=40.65, cloud=0.0, wind=20.27, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:28:58', seeing=2.97, atlas_timestamp='2025-11-17T20:29:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.15075000000000038, 0.06825000000000081, 0.1537500000000005, 0.14999999999999858, 0.1875, 0.25125000000000064, 0.16149999999999842, 0.0832499999999996, 0.1479999999999997, 0.06300000000000061, 0.1427499999999995, 0.1980000000000004, 0.32099999999999973, 0.254249999999999, 0.24499999999999922, 0.09299999999999997, 0.11425000000000018, 0.19650000000000034, 0.25599999999999845, 0.27424999999999855, 0.4209999999999994, 0.3457499999999989, 0.3597500000000018, 0.3377499999999998, 0.1429999999999989, 0.2550000000000008, 0.3202499999999997, 0.5575000000000001, 0.6640000000000006, 0.46800000000000175, 0.8790000000000013, 0.6140000000000008, 0.5047499999999996], zp_timestamp='2025-11-17T20:27:00')
2025-11-17T22:29:18.670 [DEBUG] [Thread-62396] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:29:18.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:29:18.756 [DEBUG] [Thread-62399] [transport.py] [_log()] starting thread (client mode): 0xd07565c0
2025-11-17T22:29:18.756 [DEBUG] [Thread-62399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:29:18.771 [DEBUG] [Thread-62399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:29:18.771 [INFO] [Thread-62399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] client lang: <none>
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] server lang: <none>
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] kex follows: False
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] Compression: none
2025-11-17T22:29:18.779 [DEBUG] [Thread-62399] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:29:18.835 [DEBUG] [Thread-62399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:29:18.835 [DEBUG] [Thread-62399] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:29:18.835 [DEBUG] [Thread-62399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:29:18.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:29:18.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:29:18.892 [DEBUG] [Thread-62399] [transport.py] [_log()] userauth is OK
2025-11-17T22:29:18.892 [DEBUG] [Thread-62399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:29:18.892 [DEBUG] [Thread-62399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:29:18.892 [DEBUG] [Thread-62399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:29:18.892 [DEBUG] [Thread-62399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:29:18.907 [INFO] [Thread-62399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:29:18.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:29:18.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:29:19.734 [DEBUG] [Thread-62399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:29:19.734 [DEBUG] [Thread-62399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:29:19.782 [DEBUG] [Thread-62399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:29:19.782 [DEBUG] [Thread-62399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:29:19.790 [DEBUG] [Thread-62399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:29:19.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:29:19.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:29:19.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:29:19.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:29:19.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:29:19.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:29:19.822 [DEBUG] [Thread-62399] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:29:32.415 [DEBUG] [Thread-62401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:29:46.279 [DEBUG] [Thread-62402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:29:47.456 [DEBUG] [Thread-62403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:29:49.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:29:49.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:29:49.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:29:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 29, 30), 13.24, 40.67, 0.0, 19.13, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:29:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:29:30
2025-11-17T22:29:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:29:50.775 [DEBUG] [Thread-62404] [transport.py] [_log()] starting thread (client mode): 0xd317d1e0
2025-11-17T22:29:50.776 [DEBUG] [Thread-62404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:29:50.794 [DEBUG] [Thread-62404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:29:50.795 [INFO] [Thread-62404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] client lang: <none>
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] server lang: <none>
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] kex follows: False
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] Compression: none
2025-11-17T22:29:50.798 [DEBUG] [Thread-62404] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:29:50.811 [DEBUG] [Thread-62404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:29:50.811 [DEBUG] [Thread-62404] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:29:50.812 [DEBUG] [Thread-62404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:29:50.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:29:50.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:29:50.813 [DEBUG] [Thread-62404] [transport.py] [_log()] userauth is OK
2025-11-17T22:29:50.813 [DEBUG] [Thread-62404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:29:50.813 [DEBUG] [Thread-62404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:29:50.813 [DEBUG] [Thread-62404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:29:50.813 [DEBUG] [Thread-62404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:29:50.848 [INFO] [Thread-62404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:29:50.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:29:51.426 [DEBUG] [Thread-62404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:29:51.426 [DEBUG] [Thread-62404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:29:51.426 [DEBUG] [Thread-62404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:29:51.467 [DEBUG] [Thread-62404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:29:51.467 [DEBUG] [Thread-62404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:29:51.470 [DEBUG] [Thread-62404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:29:51.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:29:51.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:29:51.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:29:51.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:29:51.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:29:51.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:29:51.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:29:51.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:29:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:29:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.853866 -999.00  +14.80  15.90     45   +3.30 1 2 1 1 1     0    0 11.12 -24.23 ZNEsW 12.7 15.9 168.6 20.7 15.3 -23.0 15.2 -22.0 15.0 -21.4 15.3 -22.1
2025-11-17T22:29:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:29:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:29:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.853866
2025-11-17T22:29:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:29:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:29:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:29:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:29:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:29:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:29:30', tmtdew=13.24, humidity=40.67, cloud=0.0, wind=19.13, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:29:30', seeing=2.59, atlas_timestamp='2025-11-17T20:29:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.15075000000000038, 0.06825000000000081, 0.1537500000000005, 0.14999999999999858, 0.1875, 0.25125000000000064, 0.16149999999999842, 0.0832499999999996, 0.1479999999999997, 0.06300000000000061, 0.1427499999999995, 0.1980000000000004, 0.32099999999999973, 0.254249999999999, 0.24499999999999922, 0.09299999999999997, 0.11425000000000018, 0.19650000000000034, 0.25599999999999845, 0.27424999999999855, 0.4209999999999994, 0.3457499999999989, 0.3597500000000018, 0.3377499999999998, 0.1429999999999989, 0.2550000000000008, 0.3202499999999997, 0.5575000000000001, 0.6640000000000006, 0.46800000000000175, 0.8790000000000013, 0.6140000000000008, 0.5047499999999996], zp_timestamp='2025-11-17T20:27:00')
2025-11-17T22:29:51.499 [DEBUG] [Thread-62404] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:29:51.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:29:51.595 [DEBUG] [Thread-62407] [transport.py] [_log()] starting thread (client mode): 0xd317de40
2025-11-17T22:29:51.595 [DEBUG] [Thread-62407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:29:51.610 [DEBUG] [Thread-62407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:29:51.610 [INFO] [Thread-62407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] client lang: <none>
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] server lang: <none>
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] kex follows: False
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:29:51.618 [DEBUG] [Thread-62407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:29:51.619 [DEBUG] [Thread-62407] [transport.py] [_log()] Compression: none
2025-11-17T22:29:51.619 [DEBUG] [Thread-62407] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:29:51.677 [DEBUG] [Thread-62407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:29:51.677 [DEBUG] [Thread-62407] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:29:51.678 [DEBUG] [Thread-62407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:29:51.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:29:51.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:29:51.736 [DEBUG] [Thread-62407] [transport.py] [_log()] userauth is OK
2025-11-17T22:29:51.737 [DEBUG] [Thread-62407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:29:51.737 [DEBUG] [Thread-62407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:29:51.737 [DEBUG] [Thread-62407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:29:51.737 [DEBUG] [Thread-62407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:29:51.757 [INFO] [Thread-62407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:29:51.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:29:51.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:29:52.615 [DEBUG] [Thread-62407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:29:52.615 [DEBUG] [Thread-62407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:29:52.663 [DEBUG] [Thread-62407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:29:52.663 [DEBUG] [Thread-62407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:29:52.672 [DEBUG] [Thread-62407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:29:52.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:29:52.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:29: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
2025-11-17T22:29:52.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:29:52.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:29:52.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:29:52.707 [DEBUG] [Thread-62407] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:30:02.482 [DEBUG] [Thread-62409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:30:02.501 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:30:02.502 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:30:17.515 [DEBUG] [Thread-62410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:30:22.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:30:22.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:30:22.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:30:23.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 30, 2), 13.23, 40.7, 0.0, 19.85, 14.88, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:30:23.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:30:02
2025-11-17T22:30:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:30:23.677 [DEBUG] [Thread-62411] [transport.py] [_log()] starting thread (client mode): 0xd317e980
2025-11-17T22:30:23.678 [DEBUG] [Thread-62411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:30:23.696 [DEBUG] [Thread-62411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:30:23.696 [INFO] [Thread-62411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:30:23.700 [DEBUG] [Thread-62411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:30:23.700 [DEBUG] [Thread-62411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] client lang: <none>
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] server lang: <none>
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] kex follows: False
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] Compression: none
2025-11-17T22:30:23.701 [DEBUG] [Thread-62411] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:30:23.711 [DEBUG] [Thread-62411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:30:23.711 [DEBUG] [Thread-62411] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:30:23.712 [DEBUG] [Thread-62411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:30:23.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:30:23.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:30:23.713 [DEBUG] [Thread-62411] [transport.py] [_log()] userauth is OK
2025-11-17T22:30:23.714 [DEBUG] [Thread-62411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:30:23.714 [DEBUG] [Thread-62411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:30:23.714 [DEBUG] [Thread-62411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:30:23.714 [DEBUG] [Thread-62411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:30:23.730 [INFO] [Thread-62411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:30:23.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:30:24.295 [DEBUG] [Thread-62411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:30:24.295 [DEBUG] [Thread-62411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:30:24.295 [DEBUG] [Thread-62411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:30:24.336 [DEBUG] [Thread-62411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:30:24.336 [DEBUG] [Thread-62411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:30:24.339 [DEBUG] [Thread-62411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:30:24.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:30:24.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:30:24.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:30:24.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:30:24.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:30:24.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:30:24.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:30:24.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:30:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:30:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.854213 -999.00  +14.80  18.25     45   +3.30 1 2 1 1 1     0    0 11.11 -23.61 ZNEsW 16.2 18.2 167.4 24.3 15.3 -23.0 15.2 -21.9 15.0 -21.3 15.3 -22.2
2025-11-17T22:30:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:30:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:30:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.854213
2025-11-17T22:30:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:30:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:30:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:30:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:30:24.365 [DEBUG] [Thread-62411] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:30:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:30:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:30:02', tmtdew=13.23, humidity=40.7, cloud=0.0, wind=19.85, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:30:02', seeing=2.59, atlas_timestamp='2025-11-17T20:30:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.15075000000000038, 0.06825000000000081, 0.1537500000000005, 0.14999999999999858, 0.1875, 0.25125000000000064, 0.16149999999999842, 0.0832499999999996, 0.1479999999999997, 0.06300000000000061, 0.1427499999999995, 0.1980000000000004, 0.32099999999999973, 0.254249999999999, 0.24499999999999922, 0.09299999999999997, 0.11425000000000018, 0.19650000000000034, 0.25599999999999845, 0.27424999999999855, 0.4209999999999994, 0.3457499999999989, 0.3597500000000018, 0.3377499999999998, 0.1429999999999989, 0.2550000000000008, 0.3202499999999997, 0.5575000000000001, 0.6640000000000006, 0.46800000000000175, 0.8790000000000013, 0.6140000000000008, 0.5047499999999996], zp_timestamp='2025-11-17T20:27:00')
2025-11-17T22:30:24.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:30:24.464 [DEBUG] [Thread-62414] [transport.py] [_log()] starting thread (client mode): 0xd31351e0
2025-11-17T22:30:24.464 [DEBUG] [Thread-62414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:30:24.479 [DEBUG] [Thread-62414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:30:24.479 [INFO] [Thread-62414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] client lang: <none>
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] server lang: <none>
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] kex follows: False
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:30:24.487 [DEBUG] [Thread-62414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:30:24.488 [DEBUG] [Thread-62414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:30:24.488 [DEBUG] [Thread-62414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:30:24.488 [DEBUG] [Thread-62414] [transport.py] [_log()] Compression: none
2025-11-17T22:30:24.488 [DEBUG] [Thread-62414] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:30:24.550 [DEBUG] [Thread-62414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:30:24.550 [DEBUG] [Thread-62414] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:30:24.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:30:24.551 [DEBUG] [Thread-62414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:30:24.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:30:24.608 [DEBUG] [Thread-62414] [transport.py] [_log()] userauth is OK
2025-11-17T22:30:24.609 [DEBUG] [Thread-62414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:30:24.609 [DEBUG] [Thread-62414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:30:24.609 [DEBUG] [Thread-62414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:30:24.609 [DEBUG] [Thread-62414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:30:24.630 [INFO] [Thread-62414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:30:24.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:30:24.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:30:25.472 [DEBUG] [Thread-62414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:30:25.472 [DEBUG] [Thread-62414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:30:25.519 [DEBUG] [Thread-62414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:30:25.519 [DEBUG] [Thread-62414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:30:25.528 [DEBUG] [Thread-62414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:30:25.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:30:25.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:30:25.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:30:25.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:30:25.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:30:25.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:30:25.563 [DEBUG] [Thread-62414] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:30:32.544 [DEBUG] [Thread-62416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:30:46.357 [DEBUG] [Thread-62417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:30:47.574 [DEBUG] [Thread-62418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:30:55.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:30:55.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:30:55.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:30:56.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 30, 34), 13.36, 40.37, 0.0, 24.52, 15.06, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:30:56.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:30:34
2025-11-17T22:30:56.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:30:56.493 [DEBUG] [Thread-62419] [transport.py] [_log()] starting thread (client mode): 0xd317d810
2025-11-17T22:30:56.493 [DEBUG] [Thread-62419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:30:56.512 [DEBUG] [Thread-62419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:30:56.513 [INFO] [Thread-62419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] client lang: <none>
2025-11-17T22:30:56.516 [DEBUG] [Thread-62419] [transport.py] [_log()] server lang: <none>
2025-11-17T22:30:56.517 [DEBUG] [Thread-62419] [transport.py] [_log()] kex follows: False
2025-11-17T22:30:56.517 [DEBUG] [Thread-62419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:30:56.517 [DEBUG] [Thread-62419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:30:56.517 [DEBUG] [Thread-62419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:30:56.517 [DEBUG] [Thread-62419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:30:56.517 [DEBUG] [Thread-62419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:30:56.517 [DEBUG] [Thread-62419] [transport.py] [_log()] Compression: none
2025-11-17T22:30:56.517 [DEBUG] [Thread-62419] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:30:56.535 [DEBUG] [Thread-62419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:30:56.536 [DEBUG] [Thread-62419] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:30:56.537 [DEBUG] [Thread-62419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:30:56.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:30:56.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:30:56.538 [DEBUG] [Thread-62419] [transport.py] [_log()] userauth is OK
2025-11-17T22:30:56.539 [DEBUG] [Thread-62419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:30:56.539 [DEBUG] [Thread-62419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:30:56.539 [DEBUG] [Thread-62419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:30:56.539 [DEBUG] [Thread-62419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:30:56.561 [INFO] [Thread-62419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:30:56.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:30:57.193 [DEBUG] [Thread-62419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:30:57.193 [DEBUG] [Thread-62419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:30:57.194 [DEBUG] [Thread-62419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:30:57.234 [DEBUG] [Thread-62419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:30:57.234 [DEBUG] [Thread-62419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:30:57.237 [DEBUG] [Thread-62419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:30:57.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:30:57.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:30:57.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:30:57.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:30:57.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:30:57.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:30:57.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:30:57.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:30:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:30:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.854213 -999.00  +14.80  18.25     45   +3.30 1 2 1 1 1     0    0 11.11 -23.61 ZNEsW 16.2 18.2 167.4 24.3 15.3 -23.0 15.2 -21.9 15.0 -21.3 15.3 -22.2
2025-11-17T22:30:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:30:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:30:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.854213
2025-11-17T22:30:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:30:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:30:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:30:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:30:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:30:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:30:34', tmtdew=13.36, humidity=40.37, cloud=0.0, wind=24.52, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:30:34', seeing=2.59, atlas_timestamp='2025-11-17T20:30:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.15075000000000038, 0.06825000000000081, 0.1537500000000005, 0.14999999999999858, 0.1875, 0.25125000000000064, 0.16149999999999842, 0.0832499999999996, 0.1479999999999997, 0.06300000000000061, 0.1427499999999995, 0.1980000000000004, 0.32099999999999973, 0.254249999999999, 0.24499999999999922, 0.09299999999999997, 0.11425000000000018, 0.19650000000000034, 0.25599999999999845, 0.27424999999999855, 0.4209999999999994, 0.3457499999999989, 0.3597500000000018, 0.3377499999999998, 0.1429999999999989, 0.2550000000000008, 0.3202499999999997, 0.5575000000000001, 0.6640000000000006, 0.46800000000000175, 0.8790000000000013, 0.6140000000000008, 0.5047499999999996], zp_timestamp='2025-11-17T20:27:00')
2025-11-17T22:30:57.261 [DEBUG] [Thread-62419] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:30:57.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:30:57.358 [DEBUG] [Thread-62422] [transport.py] [_log()] starting thread (client mode): 0xd0754850
2025-11-17T22:30:57.358 [DEBUG] [Thread-62422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:30:57.373 [DEBUG] [Thread-62422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:30:57.373 [INFO] [Thread-62422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:30:57.380 [DEBUG] [Thread-62422] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:30:57.380 [DEBUG] [Thread-62422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:30:57.380 [DEBUG] [Thread-62422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:30:57.380 [DEBUG] [Thread-62422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] client lang: <none>
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] server lang: <none>
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] kex follows: False
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:30:57.381 [DEBUG] [Thread-62422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:30:57.382 [DEBUG] [Thread-62422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:30:57.382 [DEBUG] [Thread-62422] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:30:57.382 [DEBUG] [Thread-62422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:30:57.382 [DEBUG] [Thread-62422] [transport.py] [_log()] Compression: none
2025-11-17T22:30:57.382 [DEBUG] [Thread-62422] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:30:57.440 [DEBUG] [Thread-62422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:30:57.441 [DEBUG] [Thread-62422] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:30:57.442 [DEBUG] [Thread-62422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:30:57.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:30:57.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:30:57.496 [DEBUG] [Thread-62422] [transport.py] [_log()] userauth is OK
2025-11-17T22:30:57.497 [DEBUG] [Thread-62422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:30:57.497 [DEBUG] [Thread-62422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:30:57.497 [DEBUG] [Thread-62422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:30:57.497 [DEBUG] [Thread-62422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:30:57.521 [INFO] [Thread-62422] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:30:57.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:30:57.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:30:58.362 [DEBUG] [Thread-62422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:30:58.362 [DEBUG] [Thread-62422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:30:58.410 [DEBUG] [Thread-62422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:30:58.410 [DEBUG] [Thread-62422] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:30:58.419 [DEBUG] [Thread-62422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:30:58.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:30:58.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:30:58.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:30:58.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:30:58.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:30:58.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:30:58.452 [DEBUG] [Thread-62422] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:31:02.601 [DEBUG] [Thread-62424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:31:02.703 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:31:02.703 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:31:17.637 [DEBUG] [Thread-62425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:31:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:31:28.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:31:28.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:31:29.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 31, 6), 13.13, 40.82, 0.0, 22.2, 14.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:31:29.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:31:06
2025-11-17T22:31:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:31:29.392 [DEBUG] [Thread-62426] [transport.py] [_log()] starting thread (client mode): 0xd0757610
2025-11-17T22:31:29.393 [DEBUG] [Thread-62426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:31:29.412 [DEBUG] [Thread-62426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:31:29.412 [INFO] [Thread-62426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] client lang: <none>
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] server lang: <none>
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] kex follows: False
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] Compression: none
2025-11-17T22:31:29.414 [DEBUG] [Thread-62426] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:31:29.427 [DEBUG] [Thread-62426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:31:29.428 [DEBUG] [Thread-62426] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:31:29.429 [DEBUG] [Thread-62426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:31:29.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:31:29.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:31:29.430 [DEBUG] [Thread-62426] [transport.py] [_log()] userauth is OK
2025-11-17T22:31:29.431 [DEBUG] [Thread-62426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:31:29.431 [DEBUG] [Thread-62426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:31:29.431 [DEBUG] [Thread-62426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:31:29.431 [DEBUG] [Thread-62426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:31:29.457 [INFO] [Thread-62426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:31:29.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:31:30.087 [DEBUG] [Thread-62426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:31:30.088 [DEBUG] [Thread-62426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:31:30.088 [DEBUG] [Thread-62426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:31:30.128 [DEBUG] [Thread-62426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:31:30.129 [DEBUG] [Thread-62426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:31:30.131 [DEBUG] [Thread-62426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:31:30.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:31:30.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:31:30.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:31:30.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:31:30.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:31:30.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:31:30.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:31:30.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:31:30.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:31:30.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.854561 -999.00  +14.80  14.54     45   +3.20 1 2 1 1 1     0    0 11.06 -24.56 ZNEsW 15.7 14.5 169.6 18.1 15.4 -22.9 15.2 -21.8 15.1 -21.2 15.3 -22.2
2025-11-17T22:31:30.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:31:30.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:31:30.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.854561
2025-11-17T22:31:30.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:31:30.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:31:30.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:31:30.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:31:30.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:31:30.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:31:06', tmtdew=13.13, humidity=40.82, cloud=0.0, wind=22.2, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:31:06', seeing=2.34, atlas_timestamp='2025-11-17T20:30:34.070', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:30:00')
2025-11-17T22:31:30.156 [DEBUG] [Thread-62426] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:31:30.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:31:30.253 [DEBUG] [Thread-62429] [transport.py] [_log()] starting thread (client mode): 0xd0711db0
2025-11-17T22:31:30.253 [DEBUG] [Thread-62429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:31:30.267 [DEBUG] [Thread-62429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:31:30.268 [INFO] [Thread-62429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:31:30.275 [DEBUG] [Thread-62429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] client lang: <none>
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] server lang: <none>
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] kex follows: False
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:31:30.276 [DEBUG] [Thread-62429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:31:30.277 [DEBUG] [Thread-62429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:31:30.277 [DEBUG] [Thread-62429] [transport.py] [_log()] Compression: none
2025-11-17T22:31:30.277 [DEBUG] [Thread-62429] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:31:30.333 [DEBUG] [Thread-62429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:31:30.333 [DEBUG] [Thread-62429] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:31:30.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:31:30.334 [DEBUG] [Thread-62429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:31:30.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:31:30.388 [DEBUG] [Thread-62429] [transport.py] [_log()] userauth is OK
2025-11-17T22:31:30.389 [DEBUG] [Thread-62429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:31:30.389 [DEBUG] [Thread-62429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:31:30.389 [DEBUG] [Thread-62429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:31:30.389 [DEBUG] [Thread-62429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:31:30.407 [INFO] [Thread-62429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:31:30.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:31:30.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:31:31.229 [DEBUG] [Thread-62429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:31:31.229 [DEBUG] [Thread-62429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:31:31.276 [DEBUG] [Thread-62429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:31:31.276 [DEBUG] [Thread-62429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:31:31.285 [DEBUG] [Thread-62429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:31:31.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:31:31.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:31:31.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:31:31.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:31:31.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:31:31.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:31:31.320 [DEBUG] [Thread-62429] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:31:32.664 [DEBUG] [Thread-62431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:31:46.434 [DEBUG] [Thread-62432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:31:47.707 [DEBUG] [Thread-62433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:31:55.070 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:32:01.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:32:01.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:32:01.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:32:01.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 31, 38), 13.18, 40.82, 0.0, 21.33, 14.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:32:01.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:31:38
2025-11-17T22:32:02.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:32:02.268 [DEBUG] [Thread-62434] [transport.py] [_log()] starting thread (client mode): 0xd31cc9a0
2025-11-17T22:32:02.269 [DEBUG] [Thread-62434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:32:02.290 [DEBUG] [Thread-62434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:32:02.290 [INFO] [Thread-62434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] client lang: <none>
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] server lang: <none>
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] kex follows: False
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] Compression: none
2025-11-17T22:32:02.293 [DEBUG] [Thread-62434] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:32:02.311 [DEBUG] [Thread-62434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:32:02.311 [DEBUG] [Thread-62434] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:32:02.312 [DEBUG] [Thread-62434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:32:02.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:32:02.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:32:02.314 [DEBUG] [Thread-62434] [transport.py] [_log()] userauth is OK
2025-11-17T22:32:02.314 [DEBUG] [Thread-62434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:32:02.314 [DEBUG] [Thread-62434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:32:02.314 [DEBUG] [Thread-62434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:32:02.314 [DEBUG] [Thread-62434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:32:02.335 [INFO] [Thread-62434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:32:02.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:32:02.734 [DEBUG] [Thread-62436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:32:02.905 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:32:02.906 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:32:02.978 [DEBUG] [Thread-62434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:32:02.978 [DEBUG] [Thread-62434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:32:02.979 [DEBUG] [Thread-62434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:32:03.019 [DEBUG] [Thread-62434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:32:03.019 [DEBUG] [Thread-62434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:32:03.022 [DEBUG] [Thread-62434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:32:03.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:32:03.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:32:03.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:32:03.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:32:03.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:32:03.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:32:03.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:32:03.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:32:03.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:32:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.854908 -999.00  +14.80  14.79     45   +3.20 1 2 1 1 1     0    0 11.12 -23.59 ZNEsW 13.7 14.8 168.6 19.2 15.3 -22.9 15.2 -21.7 15.0 -21.1 15.3 -22.3
2025-11-17T22:32:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:32:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:32:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.854908
2025-11-17T22:32:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:32:03.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:32:03.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:32:03.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:32:03.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:32:03.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:31:38', tmtdew=13.18, humidity=40.82, cloud=0.0, wind=21.33, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:31:38', seeing=1.94, atlas_timestamp='2025-11-17T20:31:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:30:00')
2025-11-17T22:32:03.047 [DEBUG] [Thread-62434] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:32:03.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:32:03.145 [DEBUG] [Thread-62438] [transport.py] [_log()] starting thread (client mode): 0xd3134340
2025-11-17T22:32:03.145 [DEBUG] [Thread-62438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:32:03.160 [DEBUG] [Thread-62438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:32:03.160 [INFO] [Thread-62438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:32:03.168 [DEBUG] [Thread-62438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:32:03.168 [DEBUG] [Thread-62438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:32:03.168 [DEBUG] [Thread-62438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:32:03.168 [DEBUG] [Thread-62438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:32:03.168 [DEBUG] [Thread-62438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] client lang: <none>
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] server lang: <none>
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] kex follows: False
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:32:03.169 [DEBUG] [Thread-62438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:32:03.170 [DEBUG] [Thread-62438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:32:03.170 [DEBUG] [Thread-62438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:32:03.170 [DEBUG] [Thread-62438] [transport.py] [_log()] Compression: none
2025-11-17T22:32:03.170 [DEBUG] [Thread-62438] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:32:03.225 [DEBUG] [Thread-62438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:32:03.225 [DEBUG] [Thread-62438] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:32:03.226 [DEBUG] [Thread-62438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:32:03.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:32:03.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:32:03.280 [DEBUG] [Thread-62438] [transport.py] [_log()] userauth is OK
2025-11-17T22:32:03.281 [DEBUG] [Thread-62438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:32:03.281 [DEBUG] [Thread-62438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:32:03.281 [DEBUG] [Thread-62438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:32:03.281 [DEBUG] [Thread-62438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:32:03.301 [INFO] [Thread-62438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:32:03.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:32:03.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:32:04.162 [DEBUG] [Thread-62438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:32:04.162 [DEBUG] [Thread-62438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:32:04.209 [DEBUG] [Thread-62438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:32:04.209 [DEBUG] [Thread-62438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:32:04.219 [DEBUG] [Thread-62438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:32:04.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:32:04.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:32:04.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:32:04.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:32:04.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:32:04.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:32:04.253 [DEBUG] [Thread-62438] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:32:17.769 [DEBUG] [Thread-62440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:32:32.809 [DEBUG] [Thread-62441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:32:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:32:34.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:32:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:32:34.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 32, 10), 13.18, 40.82, 0.0, 20.75, 14.85, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:32:34.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:32:10
2025-11-17T22:32:35.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:32:35.251 [DEBUG] [Thread-62442] [transport.py] [_log()] starting thread (client mode): 0xd3152c80
2025-11-17T22:32:35.252 [DEBUG] [Thread-62442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:32:35.272 [DEBUG] [Thread-62442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:32:35.273 [INFO] [Thread-62442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] client lang: <none>
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] server lang: <none>
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] kex follows: False
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] Compression: none
2025-11-17T22:32:35.274 [DEBUG] [Thread-62442] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:32:35.290 [DEBUG] [Thread-62442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:32:35.290 [DEBUG] [Thread-62442] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:32:35.291 [DEBUG] [Thread-62442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:32:35.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:32:35.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:32:35.292 [DEBUG] [Thread-62442] [transport.py] [_log()] userauth is OK
2025-11-17T22:32:35.292 [DEBUG] [Thread-62442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:32:35.292 [DEBUG] [Thread-62442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:32:35.292 [DEBUG] [Thread-62442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:32:35.292 [DEBUG] [Thread-62442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:32:35.301 [INFO] [Thread-62442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:32:35.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:32:35.900 [DEBUG] [Thread-62442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:32:35.900 [DEBUG] [Thread-62442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:32:35.900 [DEBUG] [Thread-62442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:32:35.941 [DEBUG] [Thread-62442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:32:35.941 [DEBUG] [Thread-62442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:32:35.943 [DEBUG] [Thread-62442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:32:35.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:32:35.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:32:35.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:32:35.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:32:35.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:32:35.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:32:35.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.855255 -999.00  +14.80  13.74     46   +3.30 1 2 1 1 1     0    0 11.15 -23.87 ZNEsW 16.3 13.7 164.2 17.9 15.3 -22.9 15.2 -21.7 15.0 -21.1 15.3 -22.4
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.855255
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:32:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:32:10', tmtdew=13.18, humidity=40.82, cloud=0.0, wind=20.75, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:32:10', seeing=1.93, atlas_timestamp='2025-11-17T20:31:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:30:00')
2025-11-17T22:32:35.961 [DEBUG] [Thread-62442] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:32:36.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:32:36.047 [DEBUG] [Thread-62445] [transport.py] [_log()] starting thread (client mode): 0xd3152980
2025-11-17T22:32:36.047 [DEBUG] [Thread-62445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:32:36.061 [DEBUG] [Thread-62445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:32:36.061 [INFO] [Thread-62445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] client lang: <none>
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] server lang: <none>
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] kex follows: False
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] Compression: none
2025-11-17T22:32:36.069 [DEBUG] [Thread-62445] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:32:36.127 [DEBUG] [Thread-62445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:32:36.128 [DEBUG] [Thread-62445] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:32:36.128 [DEBUG] [Thread-62445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:32:36.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:32:36.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:32:36.184 [DEBUG] [Thread-62445] [transport.py] [_log()] userauth is OK
2025-11-17T22:32:36.184 [DEBUG] [Thread-62445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:32:36.184 [DEBUG] [Thread-62445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:32:36.184 [DEBUG] [Thread-62445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:32:36.184 [DEBUG] [Thread-62445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:32:36.199 [INFO] [Thread-62445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:32:36.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:32:36.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:32:37.066 [DEBUG] [Thread-62445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:32:37.066 [DEBUG] [Thread-62445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:32:37.114 [DEBUG] [Thread-62445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:32:37.114 [DEBUG] [Thread-62445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:32:37.122 [DEBUG] [Thread-62445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:32:37.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:32:37.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:32:37.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:32:37.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:32:37.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:32:37.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:32:37.153 [DEBUG] [Thread-62445] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:32:46.511 [DEBUG] [Thread-62447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:32:47.835 [DEBUG] [Thread-62448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:33:02.875 [DEBUG] [Thread-62449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:33:03.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:33:03.108 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:33:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:33:07.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:33:07.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
2025-11-17T22:33:07.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 32, 42), 13.19, 40.78, 0.0, 19.13, 14.86, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:33:07.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:32:42
2025-11-17T22:33:07.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:33:08.130 [DEBUG] [Thread-62450] [transport.py] [_log()] starting thread (client mode): 0xd31518d0
2025-11-17T22:33:08.130 [DEBUG] [Thread-62450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:33:08.149 [DEBUG] [Thread-62450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:33:08.149 [INFO] [Thread-62450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:33:08.152 [DEBUG] [Thread-62450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] client lang: <none>
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] server lang: <none>
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] kex follows: False
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] Compression: none
2025-11-17T22:33:08.153 [DEBUG] [Thread-62450] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:33:08.174 [DEBUG] [Thread-62450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:33:08.175 [DEBUG] [Thread-62450] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:33:08.176 [DEBUG] [Thread-62450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:33:08.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:33:08.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:33:08.177 [DEBUG] [Thread-62450] [transport.py] [_log()] userauth is OK
2025-11-17T22:33:08.178 [DEBUG] [Thread-62450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:33:08.178 [DEBUG] [Thread-62450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:33:08.178 [DEBUG] [Thread-62450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:33:08.178 [DEBUG] [Thread-62450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:33:08.200 [INFO] [Thread-62450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:33:08.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:33:08.804 [DEBUG] [Thread-62450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:33:08.805 [DEBUG] [Thread-62450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:33:08.805 [DEBUG] [Thread-62450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:33:08.845 [DEBUG] [Thread-62450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:33:08.845 [DEBUG] [Thread-62450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:33:08.848 [DEBUG] [Thread-62450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:33:08.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:33:08.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:33:08.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:33:08.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:33:08.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:33:08.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:33:08.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:33:08.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:33:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:33:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.855950 -999.00  +14.80  15.94     46   +3.30 1 2 1 1 1     0    0 11.08 -26.54 ZNEsW 17.6 15.9 162.4 20.8 15.4 -22.8 15.2 -21.5 15.0 -21.1 15.3 -22.1
2025-11-17T22:33:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:33:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:33:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.855950
2025-11-17T22:33:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:33:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:33:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:33:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:33:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:33:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:32:42', tmtdew=13.19, humidity=40.78, cloud=0.0, wind=19.13, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:32:42', seeing=1.85, atlas_timestamp='2025-11-17T20:32:34.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:30:00')
2025-11-17T22:33:08.874 [DEBUG] [Thread-62450] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:33:08.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:33:08.969 [DEBUG] [Thread-62453] [transport.py] [_log()] starting thread (client mode): 0xd0711e70
2025-11-17T22:33:08.969 [DEBUG] [Thread-62453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:33:08.983 [DEBUG] [Thread-62453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:33:08.983 [INFO] [Thread-62453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:33:08.990 [DEBUG] [Thread-62453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:33:08.990 [DEBUG] [Thread-62453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:33:08.990 [DEBUG] [Thread-62453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] client lang: <none>
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] server lang: <none>
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] kex follows: False
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] Compression: none
2025-11-17T22:33:08.991 [DEBUG] [Thread-62453] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:33:09.047 [DEBUG] [Thread-62453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:33:09.047 [DEBUG] [Thread-62453] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:33:09.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:33:09.048 [DEBUG] [Thread-62453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:33:09.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:33:09.104 [DEBUG] [Thread-62453] [transport.py] [_log()] userauth is OK
2025-11-17T22:33:09.105 [DEBUG] [Thread-62453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:33:09.105 [DEBUG] [Thread-62453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:33:09.105 [DEBUG] [Thread-62453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:33:09.105 [DEBUG] [Thread-62453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:33:09.123 [INFO] [Thread-62453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:33:09.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:33:09.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:33:09.949 [DEBUG] [Thread-62453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:33:09.949 [DEBUG] [Thread-62453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:33:09.997 [DEBUG] [Thread-62453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:33:09.997 [DEBUG] [Thread-62453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:33:10.006 [DEBUG] [Thread-62453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:33:10.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:33:10.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:33:10.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:33:10.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:33:10.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:33:10.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:33:10.040 [DEBUG] [Thread-62453] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:33:17.900 [DEBUG] [Thread-62455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:33:32.944 [DEBUG] [Thread-62456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:33:40.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:33:40.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:33:40.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:33:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 33, 14), 13.18, 40.8, 0.0, 20.41, 14.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:33:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:33:14
2025-11-17T22:33:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:33:40.977 [DEBUG] [Thread-62457] [transport.py] [_log()] starting thread (client mode): 0xd0757160
2025-11-17T22:33:40.977 [DEBUG] [Thread-62457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:33:40.997 [DEBUG] [Thread-62457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:33:40.997 [INFO] [Thread-62457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:33:41.000 [DEBUG] [Thread-62457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] client lang: <none>
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] server lang: <none>
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] kex follows: False
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] Compression: none
2025-11-17T22:33:41.001 [DEBUG] [Thread-62457] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:33:41.018 [DEBUG] [Thread-62457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:33:41.018 [DEBUG] [Thread-62457] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:33:41.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:33:41.019 [DEBUG] [Thread-62457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:33:41.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:33:41.023 [DEBUG] [Thread-62457] [transport.py] [_log()] userauth is OK
2025-11-17T22:33:41.024 [DEBUG] [Thread-62457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:33:41.024 [DEBUG] [Thread-62457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:33:41.024 [DEBUG] [Thread-62457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:33:41.024 [DEBUG] [Thread-62457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:33:41.041 [INFO] [Thread-62457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:33:41.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:33:41.783 [DEBUG] [Thread-62457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:33:41.784 [DEBUG] [Thread-62457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:33:41.784 [DEBUG] [Thread-62457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:33:41.825 [DEBUG] [Thread-62457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:33:41.825 [DEBUG] [Thread-62457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:33:41.829 [DEBUG] [Thread-62457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:33:41.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:33:41.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:33:41.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:33:41.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:33:41.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:33:41.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:33:41.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:33:41.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:33:41.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:33:41.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.856297 -999.00  +14.80  14.36     46   +3.30 1 2 1 1 1     0    0 11.11 -26.13 ZNEsW 17.0 14.4 163.2 19.4 15.4 -22.8 15.2 -21.5 15.0 -21.1 15.3 -22.2
2025-11-17T22:33:41.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:33:41.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:33:41.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.856297
2025-11-17T22:33:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:33:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:33:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:33:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:33:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:33:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:33:14', tmtdew=13.18, humidity=40.8, cloud=0.0, wind=20.41, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:33:14', seeing=1.85, atlas_timestamp='2025-11-17T20:33:04.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:30:00')
2025-11-17T22:33:41.853 [DEBUG] [Thread-62457] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:33:41.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:33:41.953 [DEBUG] [Thread-62460] [transport.py] [_log()] starting thread (client mode): 0xd0757f10
2025-11-17T22:33:41.953 [DEBUG] [Thread-62460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:33:41.968 [DEBUG] [Thread-62460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:33:41.968 [INFO] [Thread-62460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:33:41.975 [DEBUG] [Thread-62460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:33:41.976 [DEBUG] [Thread-62460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:33:41.976 [DEBUG] [Thread-62460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:33:41.976 [DEBUG] [Thread-62460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:33:41.976 [DEBUG] [Thread-62460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:33:41.976 [DEBUG] [Thread-62460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:33:41.976 [DEBUG] [Thread-62460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:33:41.976 [DEBUG] [Thread-62460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] client lang: <none>
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] server lang: <none>
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] kex follows: False
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] Compression: none
2025-11-17T22:33:41.977 [DEBUG] [Thread-62460] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:33:42.040 [DEBUG] [Thread-62460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:33:42.041 [DEBUG] [Thread-62460] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:33:42.041 [DEBUG] [Thread-62460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:33:42.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:33:42.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:33:42.096 [DEBUG] [Thread-62460] [transport.py] [_log()] userauth is OK
2025-11-17T22:33:42.096 [DEBUG] [Thread-62460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:33:42.097 [DEBUG] [Thread-62460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:33:42.097 [DEBUG] [Thread-62460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:33:42.097 [DEBUG] [Thread-62460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:33:42.115 [INFO] [Thread-62460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:33:42.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:33:42.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:33:42.957 [DEBUG] [Thread-62460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:33:42.957 [DEBUG] [Thread-62460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:33:43.005 [DEBUG] [Thread-62460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:33:43.005 [DEBUG] [Thread-62460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:33:43.014 [DEBUG] [Thread-62460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:33:43.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:33:43.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:33:43.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:33:43.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:33:43.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:33:43.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:33:43.058 [DEBUG] [Thread-62460] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:33:46.567 [DEBUG] [Thread-62462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:33:47.971 [DEBUG] [Thread-62463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:34:03.002 [DEBUG] [Thread-62464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:34:03.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:34:03.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:34:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:34:13.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:34:13.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:34:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 33, 46), 13.13, 40.82, 0.0, 21.46, 14.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:34:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:33:46
2025-11-17T22:34:13.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:34:13.987 [DEBUG] [Thread-62465] [transport.py] [_log()] starting thread (client mode): 0xd3134e50
2025-11-17T22:34:13.987 [DEBUG] [Thread-62465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:34:14.006 [DEBUG] [Thread-62465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:34:14.006 [INFO] [Thread-62465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:34:14.009 [DEBUG] [Thread-62465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:34:14.009 [DEBUG] [Thread-62465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:34:14.009 [DEBUG] [Thread-62465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] client lang: <none>
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] server lang: <none>
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] kex follows: False
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] Compression: none
2025-11-17T22:34:14.010 [DEBUG] [Thread-62465] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:34:14.026 [DEBUG] [Thread-62465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:34:14.027 [DEBUG] [Thread-62465] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:34:14.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:34:14.028 [DEBUG] [Thread-62465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:34:14.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:34:14.029 [DEBUG] [Thread-62465] [transport.py] [_log()] userauth is OK
2025-11-17T22:34:14.030 [DEBUG] [Thread-62465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:34:14.030 [DEBUG] [Thread-62465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:34:14.030 [DEBUG] [Thread-62465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:34:14.030 [DEBUG] [Thread-62465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:34:14.056 [INFO] [Thread-62465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:34:14.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:34:14.688 [DEBUG] [Thread-62465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:34:14.688 [DEBUG] [Thread-62465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:34:14.689 [DEBUG] [Thread-62465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:34:14.729 [DEBUG] [Thread-62465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:34:14.729 [DEBUG] [Thread-62465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:34:14.732 [DEBUG] [Thread-62465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:34:14.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:34:14.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:34:14.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:34:14.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:34:14.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:34:14.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:34:14.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:34:14.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:34:14.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:34:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.856644 -999.00  +14.80  15.59     46   +3.30 1 2 1 1 1     0    0 11.07 -26.37 ZNEsW 15.5 15.6 166.8 19.0 15.4 -22.8 15.2 -21.7 15.0 -21.2 15.3 -22.3
2025-11-17T22:34:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:34:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:34:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.856644
2025-11-17T22:34:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:34:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:34:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:34:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:34:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:34:14.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:33:46', tmtdew=13.13, humidity=40.82, cloud=0.0, wind=21.46, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:33:46', seeing=1.83, atlas_timestamp='2025-11-17T20:33:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:33:00')
2025-11-17T22:34:14.756 [DEBUG] [Thread-62465] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:34:14.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:34:14.853 [DEBUG] [Thread-62468] [transport.py] [_log()] starting thread (client mode): 0xd3153eb0
2025-11-17T22:34:14.853 [DEBUG] [Thread-62468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:34:14.868 [DEBUG] [Thread-62468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:34:14.868 [INFO] [Thread-62468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:34:14.875 [DEBUG] [Thread-62468] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:34:14.875 [DEBUG] [Thread-62468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:34:14.875 [DEBUG] [Thread-62468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] client lang: <none>
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] server lang: <none>
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] kex follows: False
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] Compression: none
2025-11-17T22:34:14.876 [DEBUG] [Thread-62468] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:34:14.933 [DEBUG] [Thread-62468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:34:14.933 [DEBUG] [Thread-62468] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:34:14.934 [DEBUG] [Thread-62468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:34:14.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:34:14.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:34:14.988 [DEBUG] [Thread-62468] [transport.py] [_log()] userauth is OK
2025-11-17T22:34:14.988 [DEBUG] [Thread-62468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:34:14.989 [DEBUG] [Thread-62468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:34:14.989 [DEBUG] [Thread-62468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:34:14.989 [DEBUG] [Thread-62468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:34:15.008 [INFO] [Thread-62468] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:34:15.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:34:15.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:34:15.878 [DEBUG] [Thread-62468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:34:15.878 [DEBUG] [Thread-62468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:34:15.927 [DEBUG] [Thread-62468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:34:15.927 [DEBUG] [Thread-62468] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:34:15.936 [DEBUG] [Thread-62468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:34:15.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:34:15.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:34:15.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:34:15.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:34:15.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:34:15.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:34:15.970 [DEBUG] [Thread-62468] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:34:18.033 [DEBUG] [Thread-62470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:34:33.069 [DEBUG] [Thread-62471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:34:45.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:34:45.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:34:45.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:34:46.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 34, 18), 13.1, 40.87, 0.0, 22.6, 14.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:34:46.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:34:18
2025-11-17T22:34:46.636 [DEBUG] [Thread-62472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:34:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:34:46.891 [DEBUG] [Thread-62473] [transport.py] [_log()] starting thread (client mode): 0xd3150a90
2025-11-17T22:34:46.891 [DEBUG] [Thread-62473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:34:46.911 [DEBUG] [Thread-62473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:34:46.911 [INFO] [Thread-62473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:34:46.921 [DEBUG] [Thread-62473] [transport.py] [_log()] client lang: <none>
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] server lang: <none>
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] kex follows: False
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] Compression: none
2025-11-17T22:34:46.922 [DEBUG] [Thread-62473] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:34:46.940 [DEBUG] [Thread-62473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:34:46.941 [DEBUG] [Thread-62473] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:34:46.941 [DEBUG] [Thread-62473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:34:46.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:34:46.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:34:46.943 [DEBUG] [Thread-62473] [transport.py] [_log()] userauth is OK
2025-11-17T22:34:46.943 [DEBUG] [Thread-62473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:34:46.943 [DEBUG] [Thread-62473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:34:46.943 [DEBUG] [Thread-62473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:34:46.943 [DEBUG] [Thread-62473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:34:46.966 [INFO] [Thread-62473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:34:46.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:34:47.724 [DEBUG] [Thread-62473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:34:47.724 [DEBUG] [Thread-62473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:34:47.725 [DEBUG] [Thread-62473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:34:47.765 [DEBUG] [Thread-62473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:34:47.766 [DEBUG] [Thread-62473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:34:47.768 [DEBUG] [Thread-62473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:34:47.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:34:47.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:34:47.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:34:47.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:34:47.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:34:47.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:34:47.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:34:47.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:34:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:34:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.856991 -999.00  +14.80  15.44     46   +3.30 1 2 1 1 1     0    0 10.75 -28.52 ZNEsW 16.3 15.4 164.8 19.4 15.3 -22.8 15.2 -21.7 15.0 -21.2 15.3 -22.5
2025-11-17T22:34:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:34:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:34:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.856991
2025-11-17T22:34:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:34:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:34:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:34:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:34:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:34:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:34:18', tmtdew=13.1, humidity=40.87, cloud=0.0, wind=22.6, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:34:18', seeing=1.66, atlas_timestamp='2025-11-17T20:34:04.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:33:00')
2025-11-17T22:34:47.793 [DEBUG] [Thread-62473] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:34:47.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:34:47.886 [DEBUG] [Thread-62476] [transport.py] [_log()] starting thread (client mode): 0xd3160970
2025-11-17T22:34:47.886 [DEBUG] [Thread-62476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:34:47.902 [DEBUG] [Thread-62476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:34:47.902 [INFO] [Thread-62476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:34:47.909 [DEBUG] [Thread-62476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:34:47.909 [DEBUG] [Thread-62476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] client lang: <none>
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] server lang: <none>
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] kex follows: False
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] Compression: none
2025-11-17T22:34:47.910 [DEBUG] [Thread-62476] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:34:47.968 [DEBUG] [Thread-62476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:34:47.969 [DEBUG] [Thread-62476] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:34:47.969 [DEBUG] [Thread-62476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:34:47.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:34:47.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:34:48.024 [DEBUG] [Thread-62476] [transport.py] [_log()] userauth is OK
2025-11-17T22:34:48.025 [DEBUG] [Thread-62476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:34:48.025 [DEBUG] [Thread-62476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:34:48.025 [DEBUG] [Thread-62476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:34:48.025 [DEBUG] [Thread-62476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:34:48.044 [INFO] [Thread-62476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:34:48.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:34:48.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:34:48.094 [DEBUG] [Thread-62478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:34:48.858 [DEBUG] [Thread-62476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:34:48.858 [DEBUG] [Thread-62476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:34:48.905 [DEBUG] [Thread-62476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:34:48.905 [DEBUG] [Thread-62476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:34:48.914 [DEBUG] [Thread-62476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:34:48.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:34:48.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:34:48.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:34:48.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:34:48.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:34:48.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:34:48.949 [DEBUG] [Thread-62476] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:35:03.143 [DEBUG] [Thread-62479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:35:03.513 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:35:03.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:35:18.173 [DEBUG] [Thread-62480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:35:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:35:18.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:35:18.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:35:19.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 34, 50), 13.08, 40.95, 0.0, 22.43, 14.81, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:35:19.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:34:50
2025-11-17T22:35:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:35:19.880 [DEBUG] [Thread-62481] [transport.py] [_log()] starting thread (client mode): 0xd3161060
2025-11-17T22:35:19.880 [DEBUG] [Thread-62481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:35:19.900 [DEBUG] [Thread-62481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:35:19.900 [INFO] [Thread-62481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:35:19.903 [DEBUG] [Thread-62481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:35:19.903 [DEBUG] [Thread-62481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:35:19.903 [DEBUG] [Thread-62481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:35:19.903 [DEBUG] [Thread-62481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:35:19.903 [DEBUG] [Thread-62481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:35:19.903 [DEBUG] [Thread-62481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:35:19.903 [DEBUG] [Thread-62481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] client lang: <none>
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] server lang: <none>
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] kex follows: False
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] Compression: none
2025-11-17T22:35:19.904 [DEBUG] [Thread-62481] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:35:19.922 [DEBUG] [Thread-62481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:35:19.922 [DEBUG] [Thread-62481] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:35:19.923 [DEBUG] [Thread-62481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:35:19.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:35:19.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:35:19.925 [DEBUG] [Thread-62481] [transport.py] [_log()] userauth is OK
2025-11-17T22:35:19.925 [DEBUG] [Thread-62481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:35:19.925 [DEBUG] [Thread-62481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:35:19.925 [DEBUG] [Thread-62481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:35:19.925 [DEBUG] [Thread-62481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:35:19.947 [INFO] [Thread-62481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:35:19.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:35:20.591 [DEBUG] [Thread-62481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:35:20.591 [DEBUG] [Thread-62481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:35:20.591 [DEBUG] [Thread-62481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:35:20.632 [DEBUG] [Thread-62481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:35:20.632 [DEBUG] [Thread-62481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:35:20.635 [DEBUG] [Thread-62481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:35:20.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:35:20.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:35:20.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:35:20.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:35:20.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:35:20.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:35:20.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:35:20.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:35:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:35:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.857338 -999.00  +14.80  19.37     46   +3.30 1 2 1 1 1     0    0 11.06 -30.97 ZNEsW 19.3 19.4 170.4 25.1 15.3 -22.8 15.2 -21.5 15.0 -21.3 15.3 -22.3
2025-11-17T22:35:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:35:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:35:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.857338
2025-11-17T22:35:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:35:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:35:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:35:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:35:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:35:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:34:50', tmtdew=13.08, humidity=40.95, cloud=0.0, wind=22.43, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:34:50', seeing=2.18, atlas_timestamp='2025-11-17T20:34:34.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:33:00')
2025-11-17T22:35:20.660 [DEBUG] [Thread-62481] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:35:20.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:35:20.756 [DEBUG] [Thread-62484] [transport.py] [_log()] starting thread (client mode): 0xd31638b0
2025-11-17T22:35:20.756 [DEBUG] [Thread-62484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:35:20.771 [DEBUG] [Thread-62484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:35:20.772 [INFO] [Thread-62484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:35:20.779 [DEBUG] [Thread-62484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:35:20.779 [DEBUG] [Thread-62484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:35:20.779 [DEBUG] [Thread-62484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:35:20.779 [DEBUG] [Thread-62484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:35:20.779 [DEBUG] [Thread-62484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:35:20.779 [DEBUG] [Thread-62484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:35:20.779 [DEBUG] [Thread-62484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:35:20.779 [DEBUG] [Thread-62484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] client lang: <none>
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] server lang: <none>
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] kex follows: False
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] Compression: none
2025-11-17T22:35:20.780 [DEBUG] [Thread-62484] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:35:20.836 [DEBUG] [Thread-62484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:35:20.836 [DEBUG] [Thread-62484] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:35:20.837 [DEBUG] [Thread-62484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:35:20.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:35:20.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:35:20.892 [DEBUG] [Thread-62484] [transport.py] [_log()] userauth is OK
2025-11-17T22:35:20.892 [DEBUG] [Thread-62484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:35:20.893 [DEBUG] [Thread-62484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:35:20.893 [DEBUG] [Thread-62484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:35:20.893 [DEBUG] [Thread-62484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:35:20.914 [INFO] [Thread-62484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:35:20.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:35:20.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:35:21.855 [DEBUG] [Thread-62484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:35:21.855 [DEBUG] [Thread-62484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:35:21.903 [DEBUG] [Thread-62484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:35:21.903 [DEBUG] [Thread-62484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:35:21.912 [DEBUG] [Thread-62484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:35:21.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:35:21.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:35:21.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:35:21.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:35:21.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:35:21.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:35:21.946 [DEBUG] [Thread-62484] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:35:33.204 [DEBUG] [Thread-62486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:35:46.688 [DEBUG] [Thread-62487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:35:48.251 [DEBUG] [Thread-62488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:35:51.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:35:51.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:35:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:35:52.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 35, 22), 13.07, 40.98, 0.0, 24.49, 14.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:35:52.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:35:22
2025-11-17T22:35:52.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:35:52.909 [DEBUG] [Thread-62489] [transport.py] [_log()] starting thread (client mode): 0xd0701240
2025-11-17T22:35:52.910 [DEBUG] [Thread-62489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:35:52.932 [DEBUG] [Thread-62489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:35:52.932 [INFO] [Thread-62489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] client lang: <none>
2025-11-17T22:35:52.935 [DEBUG] [Thread-62489] [transport.py] [_log()] server lang: <none>
2025-11-17T22:35:52.936 [DEBUG] [Thread-62489] [transport.py] [_log()] kex follows: False
2025-11-17T22:35:52.936 [DEBUG] [Thread-62489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:35:52.936 [DEBUG] [Thread-62489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:35:52.936 [DEBUG] [Thread-62489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:35:52.936 [DEBUG] [Thread-62489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:35:52.936 [DEBUG] [Thread-62489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:35:52.936 [DEBUG] [Thread-62489] [transport.py] [_log()] Compression: none
2025-11-17T22:35:52.936 [DEBUG] [Thread-62489] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:35:52.953 [DEBUG] [Thread-62489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:35:52.954 [DEBUG] [Thread-62489] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:35:52.954 [DEBUG] [Thread-62489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:35:52.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:35:52.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:35:52.956 [DEBUG] [Thread-62489] [transport.py] [_log()] userauth is OK
2025-11-17T22:35:52.956 [DEBUG] [Thread-62489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:35:52.956 [DEBUG] [Thread-62489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:35:52.956 [DEBUG] [Thread-62489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:35:52.956 [DEBUG] [Thread-62489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:35:52.974 [INFO] [Thread-62489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:35:52.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:35:53.619 [DEBUG] [Thread-62489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:35:53.619 [DEBUG] [Thread-62489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:35:53.619 [DEBUG] [Thread-62489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:35:53.660 [DEBUG] [Thread-62489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:35:53.661 [DEBUG] [Thread-62489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:35:53.664 [DEBUG] [Thread-62489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:35:53.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:35:53.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:35:53.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:35:53.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:35:53.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:35:53.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:35:53.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:35:53.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:35:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:35:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.858033 -999.00  +14.70  17.97     46   +3.30 1 2 1 1 1     0    0 10.72 -35.50 ZNEsW 18.6 18.0 165.2 22.9 15.3 -22.7 15.2 -21.5 15.0 -21.4 15.3 -22.3
2025-11-17T22:35:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:35:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:35:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.858033
2025-11-17T22:35:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:35:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:35:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:35:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:35:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:35:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:35:22', tmtdew=13.07, humidity=40.98, cloud=0.0, wind=24.49, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:35:22', seeing=2.17, atlas_timestamp='2025-11-17T20:35:34.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:33:00')
2025-11-17T22:35:53.685 [DEBUG] [Thread-62489] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:35:53.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:35:53.771 [DEBUG] [Thread-62492] [transport.py] [_log()] starting thread (client mode): 0xd3136890
2025-11-17T22:35:53.771 [DEBUG] [Thread-62492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:35:53.786 [DEBUG] [Thread-62492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:35:53.786 [INFO] [Thread-62492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:35:53.794 [DEBUG] [Thread-62492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:35:53.794 [DEBUG] [Thread-62492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:35:53.794 [DEBUG] [Thread-62492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:35:53.794 [DEBUG] [Thread-62492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] client lang: <none>
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] server lang: <none>
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] kex follows: False
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] Compression: none
2025-11-17T22:35:53.795 [DEBUG] [Thread-62492] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:35:53.852 [DEBUG] [Thread-62492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:35:53.853 [DEBUG] [Thread-62492] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:35:53.853 [DEBUG] [Thread-62492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:35:53.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:35:53.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:35:53.908 [DEBUG] [Thread-62492] [transport.py] [_log()] userauth is OK
2025-11-17T22:35:53.909 [DEBUG] [Thread-62492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:35:53.909 [DEBUG] [Thread-62492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:35:53.909 [DEBUG] [Thread-62492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:35:53.909 [DEBUG] [Thread-62492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:35:53.928 [INFO] [Thread-62492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:35:53.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:35:53.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:35:54.746 [DEBUG] [Thread-62492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:35:54.746 [DEBUG] [Thread-62492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:35:54.794 [DEBUG] [Thread-62492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:35:54.794 [DEBUG] [Thread-62492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:35:54.803 [DEBUG] [Thread-62492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:35:54.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:35:54.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:35:54.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:35:54.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:35:54.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:35:54.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:35:54.837 [DEBUG] [Thread-62492] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:36:03.275 [DEBUG] [Thread-62494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:36:03.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:36:03.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:36:18.316 [DEBUG] [Thread-62495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:36:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:36:24.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:36:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:36:25.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 35, 54), 13.03, 41.47, 0.0, 24.6, 14.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:36:25.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:35:54
2025-11-17T22:36:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:36:25.835 [DEBUG] [Thread-62496] [transport.py] [_log()] starting thread (client mode): 0xd0703550
2025-11-17T22:36:25.835 [DEBUG] [Thread-62496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:36:25.855 [DEBUG] [Thread-62496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:36:25.855 [INFO] [Thread-62496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] client lang: <none>
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] server lang: <none>
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] kex follows: False
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] Compression: none
2025-11-17T22:36:25.857 [DEBUG] [Thread-62496] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:36:25.870 [DEBUG] [Thread-62496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:36:25.870 [DEBUG] [Thread-62496] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:36:25.871 [DEBUG] [Thread-62496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:36:25.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:36:25.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:36:25.871 [DEBUG] [Thread-62496] [transport.py] [_log()] userauth is OK
2025-11-17T22:36:25.871 [DEBUG] [Thread-62496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:36:25.871 [DEBUG] [Thread-62496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:36:25.871 [DEBUG] [Thread-62496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:36:25.871 [DEBUG] [Thread-62496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:36:25.882 [INFO] [Thread-62496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:36:25.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:36:26.496 [DEBUG] [Thread-62496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:36:26.496 [DEBUG] [Thread-62496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:36:26.496 [DEBUG] [Thread-62496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:36:26.537 [DEBUG] [Thread-62496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:36:26.537 [DEBUG] [Thread-62496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:36:26.540 [DEBUG] [Thread-62496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:36:26.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:36:26.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:36:26.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:36:26.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:36:26.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:36:26.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:36:26.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:36:26.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:36:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:36:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.858380 -999.00  +14.70  21.90     46   +3.30 1 2 1 1 1     0    0 10.43 -37.14 ZNEsW 19.1 21.9 170.4 29.0 15.3 -22.8 15.2 -21.7 15.0 -21.4 15.3 -22.3
2025-11-17T22:36:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:36:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:36:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.858380
2025-11-17T22:36:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:36:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:36:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:36:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:36:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:36:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:35:54', tmtdew=13.03, humidity=41.47, cloud=0.0, wind=24.6, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:35:54', seeing=2.03, atlas_timestamp='2025-11-17T20:36:04.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:33:00')
2025-11-17T22:36:26.559 [DEBUG] [Thread-62496] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:36:26.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:36:26.647 [DEBUG] [Thread-62499] [transport.py] [_log()] starting thread (client mode): 0xd0700f10
2025-11-17T22:36:26.647 [DEBUG] [Thread-62499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:36:26.664 [DEBUG] [Thread-62499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:36:26.664 [INFO] [Thread-62499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:36:26.671 [DEBUG] [Thread-62499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] client lang: <none>
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] server lang: <none>
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] kex follows: False
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] Compression: none
2025-11-17T22:36:26.672 [DEBUG] [Thread-62499] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:36:26.728 [DEBUG] [Thread-62499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:36:26.728 [DEBUG] [Thread-62499] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:36:26.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:36:26.728 [DEBUG] [Thread-62499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:36:26.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:36:26.784 [DEBUG] [Thread-62499] [transport.py] [_log()] userauth is OK
2025-11-17T22:36:26.784 [DEBUG] [Thread-62499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:36:26.784 [DEBUG] [Thread-62499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:36:26.784 [DEBUG] [Thread-62499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:36:26.784 [DEBUG] [Thread-62499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:36:26.798 [INFO] [Thread-62499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:36:26.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:36:26.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:36:27.620 [DEBUG] [Thread-62499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:36:27.620 [DEBUG] [Thread-62499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:36:27.668 [DEBUG] [Thread-62499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:36:27.668 [DEBUG] [Thread-62499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:36:27.676 [DEBUG] [Thread-62499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:36:27.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:36:27.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:36:27.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:36:27.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:36:27.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:36:27.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:36:27.707 [DEBUG] [Thread-62499] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:36:33.344 [DEBUG] [Thread-62501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:36:46.766 [DEBUG] [Thread-62502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:36:48.390 [DEBUG] [Thread-62503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:36:57.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:36:57.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:36:57.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:36:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 36, 26), 13.02, 41.5, 0.0, 23.29, 14.83, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:36:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:36:26
2025-11-17T22:36:58.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:36:58.631 [DEBUG] [Thread-62504] [transport.py] [_log()] starting thread (client mode): 0xd31614e0
2025-11-17T22:36:58.631 [DEBUG] [Thread-62504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:36:58.651 [DEBUG] [Thread-62504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:36:58.652 [INFO] [Thread-62504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] client lang: <none>
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] server lang: <none>
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] kex follows: False
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:36:58.655 [DEBUG] [Thread-62504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:36:58.656 [DEBUG] [Thread-62504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:36:58.656 [DEBUG] [Thread-62504] [transport.py] [_log()] Compression: none
2025-11-17T22:36:58.656 [DEBUG] [Thread-62504] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:36:58.673 [DEBUG] [Thread-62504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:36:58.673 [DEBUG] [Thread-62504] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:36:58.674 [DEBUG] [Thread-62504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:36:58.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:36:58.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:36:58.717 [DEBUG] [Thread-62504] [transport.py] [_log()] userauth is OK
2025-11-17T22:36:58.717 [DEBUG] [Thread-62504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:36:58.717 [DEBUG] [Thread-62504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:36:58.717 [DEBUG] [Thread-62504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:36:58.717 [DEBUG] [Thread-62504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:36:58.741 [INFO] [Thread-62504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:36:58.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:36:59.336 [DEBUG] [Thread-62504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:36:59.336 [DEBUG] [Thread-62504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:36:59.336 [DEBUG] [Thread-62504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:36:59.377 [DEBUG] [Thread-62504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:36:59.377 [DEBUG] [Thread-62504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:36:59.379 [DEBUG] [Thread-62504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:36:59.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:36:59.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:36:59.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:36:59.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:36:59.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:36:59.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:36:59.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:36:59.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:36:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:36:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.858727 -999.00  +14.80  18.94     46   +3.40 1 2 1 1 1     0    0 10.61 -37.93 ZNEsW 17.6 18.9 174.4 24.7 15.2 -22.8 15.2 -21.6 15.0 -21.3 15.3 -22.3
2025-11-17T22:36:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:36:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:36:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.858727
2025-11-17T22:36:59.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:36:59.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:36:59.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:36:59.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:36:59.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:36:59.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:36:26', tmtdew=13.02, humidity=41.5, cloud=0.0, wind=23.29, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:36:26', seeing=2.32, atlas_timestamp='2025-11-17T20:36:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.14874999999999972, 0.11524999999999963, 0.20924999999999905, 0.18549999999999933, 0.12750000000000128, 0.21075000000000088, 0.16300000000000026, 0.14975000000000094, 0.19449999999999967, 0.19099999999999895, 0.3432499999999994, 0.5249999999999995, 0.34999999999999964, 0.2422500000000003, 0.17300000000000004, 0.1559999999999988, 0.18524999999999991, 0.20950000000000024, 0.6169999999999991, 0.9357499999999987, 0.7879999999999985, 0.3347499999999979, 0.24325000000000152, 0.3077500000000004, 0.1819999999999986, 0.19350000000000023, 0.38724999999999987, 0.9150000000000009, 0.8090000000000002, 0.386000000000001, 0.7085000000000008, 0.5310000000000006, 0.12274999999999991], zp_timestamp='2025-11-17T20:33:00')
2025-11-17T22:36:59.392 [DEBUG] [Thread-62504] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:36:59.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:36:59.479 [DEBUG] [Thread-62507] [transport.py] [_log()] starting thread (client mode): 0xd3162e00
2025-11-17T22:36:59.479 [DEBUG] [Thread-62507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:36:59.494 [DEBUG] [Thread-62507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:36:59.494 [INFO] [Thread-62507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] client lang: <none>
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] server lang: <none>
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] kex follows: False
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] Compression: none
2025-11-17T22:36:59.502 [DEBUG] [Thread-62507] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:36:59.559 [DEBUG] [Thread-62507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:36:59.559 [DEBUG] [Thread-62507] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:36:59.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:36:59.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:36:59.559 [DEBUG] [Thread-62507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:36:59.616 [DEBUG] [Thread-62507] [transport.py] [_log()] userauth is OK
2025-11-17T22:36:59.616 [DEBUG] [Thread-62507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:36:59.616 [DEBUG] [Thread-62507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:36:59.616 [DEBUG] [Thread-62507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:36:59.616 [DEBUG] [Thread-62507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:36:59.633 [INFO] [Thread-62507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:36:59.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:36:59.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:37:00.463 [DEBUG] [Thread-62507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:37:00.463 [DEBUG] [Thread-62507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:37:00.511 [DEBUG] [Thread-62507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:37:00.511 [DEBUG] [Thread-62507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:37:00.519 [DEBUG] [Thread-62507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:37:00.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:37:00.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:37:00.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:37:00.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:37:00.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:37:00.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:37:00.550 [DEBUG] [Thread-62507] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:37:03.418 [DEBUG] [Thread-62509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:37:03.918 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:37:03.919 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:37:18.452 [DEBUG] [Thread-62510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:37:30.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:37:30.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:37:30.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:37:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 36, 58), 13.03, 41.48, 0.0, 24.12, 14.91, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:37:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:36:58
2025-11-17T22:37:31.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:37:31.527 [DEBUG] [Thread-62511] [transport.py] [_log()] starting thread (client mode): 0xd3161a80
2025-11-17T22:37:31.527 [DEBUG] [Thread-62511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:37:31.547 [DEBUG] [Thread-62511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:37:31.547 [INFO] [Thread-62511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] client lang: <none>
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] server lang: <none>
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] kex follows: False
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:37:31.550 [DEBUG] [Thread-62511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:37:31.551 [DEBUG] [Thread-62511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:37:31.551 [DEBUG] [Thread-62511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:37:31.551 [DEBUG] [Thread-62511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:37:31.551 [DEBUG] [Thread-62511] [transport.py] [_log()] Compression: none
2025-11-17T22:37:31.551 [DEBUG] [Thread-62511] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:37:31.567 [DEBUG] [Thread-62511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:37:31.567 [DEBUG] [Thread-62511] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:37:31.567 [DEBUG] [Thread-62511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:37:31.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:37:31.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:37:31.608 [DEBUG] [Thread-62511] [transport.py] [_log()] userauth is OK
2025-11-17T22:37:31.608 [DEBUG] [Thread-62511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:37:31.608 [DEBUG] [Thread-62511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:37:31.608 [DEBUG] [Thread-62511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:37:31.608 [DEBUG] [Thread-62511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:37:31.624 [INFO] [Thread-62511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:37:31.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:37:32.280 [DEBUG] [Thread-62511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:37:32.280 [DEBUG] [Thread-62511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:37:32.280 [DEBUG] [Thread-62511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:37:32.321 [DEBUG] [Thread-62511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:37:32.321 [DEBUG] [Thread-62511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:37:32.323 [DEBUG] [Thread-62511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:37:32.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:37:32.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:37:32.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:37:32.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:37:32.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:37:32.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:37:32.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.859075 -999.00  +14.80  22.06     47   +3.60 1 2 1 1 1     0    0 10.25 -41.53 ZNEsW 22.7 22.1 178.8 28.7 15.3 -22.8 15.2 -21.4 15.0 -21.2 15.3 -22.1
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.859075
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:37:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:36:58', tmtdew=13.03, humidity=41.48, cloud=0.0, wind=24.12, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:36:58', seeing=2.26, atlas_timestamp='2025-11-17T20:37:04.080', atlas_cloud=2, atlas_rain=1, zp_data=[0.36774999999999913, 0.17125000000000057, 0.58725, 0.29299999999999926, 0.30049999999999955, 0.29025000000000034, 0.1144999999999996, 0.1902500000000007, 0.14199999999999946, 0.2289999999999992, 0.74275, 0.7039999999999997, 0.3460000000000001, 0.5887499999999992, 0.17600000000000016, 0.15399999999999991, 0.13574999999999982, 0.3614999999999995, 0.8109999999999999, 0.8402499999999993, 0.47499999999999876, 0.441749999999999, 0.18524999999999991, 0.23375000000000057, 0.15700000000000003, 0.4584999999999999, 0.7837500000000004, 0.7635000000000005, 0.47000000000000064, 0.2890000000000006, 0.42650000000000077, 0.35300000000000065, 0.2082499999999996], zp_timestamp='2025-11-17T20:35:00')
2025-11-17T22:37:32.342 [DEBUG] [Thread-62511] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:37:32.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:37:32.428 [DEBUG] [Thread-62514] [transport.py] [_log()] starting thread (client mode): 0xd3153ca0
2025-11-17T22:37:32.428 [DEBUG] [Thread-62514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:37:32.442 [DEBUG] [Thread-62514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:37:32.442 [INFO] [Thread-62514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] client lang: <none>
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] server lang: <none>
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] kex follows: False
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] Compression: none
2025-11-17T22:37:32.450 [DEBUG] [Thread-62514] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:37:32.507 [DEBUG] [Thread-62514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:37:32.507 [DEBUG] [Thread-62514] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:37:32.507 [DEBUG] [Thread-62514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:37:32.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:37:32.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:37:32.564 [DEBUG] [Thread-62514] [transport.py] [_log()] userauth is OK
2025-11-17T22:37:32.564 [DEBUG] [Thread-62514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:37:32.564 [DEBUG] [Thread-62514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:37:32.564 [DEBUG] [Thread-62514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:37:32.564 [DEBUG] [Thread-62514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:37:32.578 [INFO] [Thread-62514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:37:32.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:37:32.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:37:33.403 [DEBUG] [Thread-62514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:37:33.403 [DEBUG] [Thread-62514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:37:33.451 [DEBUG] [Thread-62514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:37:33.451 [DEBUG] [Thread-62514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:37:33.460 [DEBUG] [Thread-62514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:37:33.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:37:33.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:37:33.477 [DEBUG] [Thread-62516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:37:33.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:37:33.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:37:33.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:37:33.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:37:33.495 [DEBUG] [Thread-62514] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:37:46.841 [DEBUG] [Thread-62517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:37:48.524 [DEBUG] [Thread-62518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:37:56.494 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:38:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:38:03.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:38:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:38:03.556 [DEBUG] [Thread-62519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:38:04.123 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:38:04.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:38:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 37, 30), 12.97, 41.67, 0.0, 23.96, 14.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:38:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:37:30
2025-11-17T22:38:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:38:04.518 [DEBUG] [Thread-62520] [transport.py] [_log()] starting thread (client mode): 0xd31b1270
2025-11-17T22:38:04.518 [DEBUG] [Thread-62520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:38:04.538 [DEBUG] [Thread-62520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:38:04.538 [INFO] [Thread-62520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] client lang: <none>
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] server lang: <none>
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] kex follows: False
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] Compression: none
2025-11-17T22:38:04.541 [DEBUG] [Thread-62520] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:38:04.560 [DEBUG] [Thread-62520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:38:04.560 [DEBUG] [Thread-62520] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:38:04.560 [DEBUG] [Thread-62520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:38:04.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:38:04.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:38:04.561 [DEBUG] [Thread-62520] [transport.py] [_log()] userauth is OK
2025-11-17T22:38:04.561 [DEBUG] [Thread-62520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:38:04.561 [DEBUG] [Thread-62520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:38:04.561 [DEBUG] [Thread-62520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:38:04.561 [DEBUG] [Thread-62520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:38:04.570 [INFO] [Thread-62520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:38:04.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:38:05.163 [DEBUG] [Thread-62520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:38:05.163 [DEBUG] [Thread-62520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:38:05.164 [DEBUG] [Thread-62520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:38:05.205 [DEBUG] [Thread-62520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:38:05.205 [DEBUG] [Thread-62520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:38:05.208 [DEBUG] [Thread-62520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:38:05.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:38:05.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:38:05.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:38:05.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:38:05.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:38:05.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:38:05.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:38:05.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:38:05.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:38:05.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.859422 -999.00  +14.90  12.28     46   +3.60 1 1 1 1 1     0    0 10.32 -39.70 ZNESW 16.0 12.3 183.6 22.4 15.3 -22.8 15.2 -21.5 15.0 -21.3 15.3 -22.5
2025-11-17T22:38:05.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:38:05.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:38:05.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.859422
2025-11-17T22:38:05.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:38:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:38:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:38:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:38:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:38:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:37:30', tmtdew=12.97, humidity=41.67, cloud=0.0, wind=23.96, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:38:03', seeing=2.17, atlas_timestamp='2025-11-17T20:37:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[0.36774999999999913, 0.17125000000000057, 0.58725, 0.29299999999999926, 0.30049999999999955, 0.29025000000000034, 0.1144999999999996, 0.1902500000000007, 0.14199999999999946, 0.2289999999999992, 0.74275, 0.7039999999999997, 0.3460000000000001, 0.5887499999999992, 0.17600000000000016, 0.15399999999999991, 0.13574999999999982, 0.3614999999999995, 0.8109999999999999, 0.8402499999999993, 0.47499999999999876, 0.441749999999999, 0.18524999999999991, 0.23375000000000057, 0.15700000000000003, 0.4584999999999999, 0.7837500000000004, 0.7635000000000005, 0.47000000000000064, 0.2890000000000006, 0.42650000000000077, 0.35300000000000065, 0.2082499999999996], zp_timestamp='2025-11-17T20:35:00')
2025-11-17T22:38:05.233 [DEBUG] [Thread-62520] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:38:05.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:38:05.329 [DEBUG] [Thread-62523] [transport.py] [_log()] starting thread (client mode): 0xd31615a0
2025-11-17T22:38:05.329 [DEBUG] [Thread-62523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:38:05.344 [DEBUG] [Thread-62523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:38:05.345 [INFO] [Thread-62523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] client lang: <none>
2025-11-17T22:38:05.352 [DEBUG] [Thread-62523] [transport.py] [_log()] server lang: <none>
2025-11-17T22:38:05.353 [DEBUG] [Thread-62523] [transport.py] [_log()] kex follows: False
2025-11-17T22:38:05.353 [DEBUG] [Thread-62523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:38:05.353 [DEBUG] [Thread-62523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:38:05.353 [DEBUG] [Thread-62523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:38:05.353 [DEBUG] [Thread-62523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:38:05.353 [DEBUG] [Thread-62523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:38:05.353 [DEBUG] [Thread-62523] [transport.py] [_log()] Compression: none
2025-11-17T22:38:05.353 [DEBUG] [Thread-62523] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:38:05.417 [DEBUG] [Thread-62523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:38:05.417 [DEBUG] [Thread-62523] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:38:05.417 [DEBUG] [Thread-62523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:38:05.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:38:05.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:38:05.472 [DEBUG] [Thread-62523] [transport.py] [_log()] userauth is OK
2025-11-17T22:38:05.473 [DEBUG] [Thread-62523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:38:05.473 [DEBUG] [Thread-62523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:38:05.473 [DEBUG] [Thread-62523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:38:05.473 [DEBUG] [Thread-62523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:38:05.495 [INFO] [Thread-62523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:38:05.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:38:05.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:38:06.346 [DEBUG] [Thread-62523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:38:06.346 [DEBUG] [Thread-62523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:38:06.394 [DEBUG] [Thread-62523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:38:06.394 [DEBUG] [Thread-62523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:38:06.403 [DEBUG] [Thread-62523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:38:06.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:38:06.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:38:06.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:38:06.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:38:06.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:38:06.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:38:06.441 [DEBUG] [Thread-62523] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:38:18.586 [DEBUG] [Thread-62525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:38:33.629 [DEBUG] [Thread-62526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:38:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:38:36.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:38:36.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:38:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 38, 2), 12.99, 41.6, 0.0, 21.51, 14.96, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:38:37.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:38:02
2025-11-17T22:38:37.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:38:37.415 [DEBUG] [Thread-62527] [transport.py] [_log()] starting thread (client mode): 0xd3163eb0
2025-11-17T22:38:37.416 [DEBUG] [Thread-62527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:38:37.434 [DEBUG] [Thread-62527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:38:37.434 [INFO] [Thread-62527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] client lang: <none>
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] server lang: <none>
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] kex follows: False
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] Compression: none
2025-11-17T22:38:37.436 [DEBUG] [Thread-62527] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:38:37.452 [DEBUG] [Thread-62527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:38:37.452 [DEBUG] [Thread-62527] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:38:37.452 [DEBUG] [Thread-62527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:38:37.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:38:37.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:38:37.454 [DEBUG] [Thread-62527] [transport.py] [_log()] userauth is OK
2025-11-17T22:38:37.454 [DEBUG] [Thread-62527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:38:37.454 [DEBUG] [Thread-62527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:38:37.454 [DEBUG] [Thread-62527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:38:37.454 [DEBUG] [Thread-62527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:38:37.472 [INFO] [Thread-62527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:38:37.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:38:38.107 [DEBUG] [Thread-62527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:38:38.107 [DEBUG] [Thread-62527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:38:38.107 [DEBUG] [Thread-62527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:38:38.148 [DEBUG] [Thread-62527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:38:38.148 [DEBUG] [Thread-62527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:38:38.151 [DEBUG] [Thread-62527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:38:38.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:38:38.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:38:38.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:38:38.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:38:38.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:38:38.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:38:38.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:38:38.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:38:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:38:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.859770 -999.00  +14.90  15.84     46   +3.50 1 1 1 1 1     0    0 10.46 -39.44 ZNESW 18.8 15.8 165.4 19.0 15.3 -22.9 15.2 -21.7 15.0 -21.4 15.3 -22.3
2025-11-17T22:38:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:38:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:38:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.859770
2025-11-17T22:38:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:38:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:38:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:38:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:38:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:38:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:38:02', tmtdew=12.99, humidity=41.6, cloud=0.0, wind=21.51, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:38:35', seeing=2.13, atlas_timestamp='2025-11-17T20:38:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[0.36774999999999913, 0.17125000000000057, 0.58725, 0.29299999999999926, 0.30049999999999955, 0.29025000000000034, 0.1144999999999996, 0.1902500000000007, 0.14199999999999946, 0.2289999999999992, 0.74275, 0.7039999999999997, 0.3460000000000001, 0.5887499999999992, 0.17600000000000016, 0.15399999999999991, 0.13574999999999982, 0.3614999999999995, 0.8109999999999999, 0.8402499999999993, 0.47499999999999876, 0.441749999999999, 0.18524999999999991, 0.23375000000000057, 0.15700000000000003, 0.4584999999999999, 0.7837500000000004, 0.7635000000000005, 0.47000000000000064, 0.2890000000000006, 0.42650000000000077, 0.35300000000000065, 0.2082499999999996], zp_timestamp='2025-11-17T20:35:00')
2025-11-17T22:38:38.175 [DEBUG] [Thread-62527] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:38:38.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:38:38.276 [DEBUG] [Thread-62530] [transport.py] [_log()] starting thread (client mode): 0xd3160c40
2025-11-17T22:38:38.276 [DEBUG] [Thread-62530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:38:38.292 [DEBUG] [Thread-62530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:38:38.292 [INFO] [Thread-62530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:38:38.300 [DEBUG] [Thread-62530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:38:38.300 [DEBUG] [Thread-62530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:38:38.300 [DEBUG] [Thread-62530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:38:38.300 [DEBUG] [Thread-62530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:38:38.300 [DEBUG] [Thread-62530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:38:38.300 [DEBUG] [Thread-62530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:38:38.300 [DEBUG] [Thread-62530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:38:38.300 [DEBUG] [Thread-62530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] client lang: <none>
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] server lang: <none>
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] kex follows: False
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:38:38.301 [DEBUG] [Thread-62530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:38:38.302 [DEBUG] [Thread-62530] [transport.py] [_log()] Compression: none
2025-11-17T22:38:38.302 [DEBUG] [Thread-62530] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:38:38.360 [DEBUG] [Thread-62530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:38:38.361 [DEBUG] [Thread-62530] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:38:38.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:38:38.362 [DEBUG] [Thread-62530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:38:38.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:38:38.416 [DEBUG] [Thread-62530] [transport.py] [_log()] userauth is OK
2025-11-17T22:38:38.417 [DEBUG] [Thread-62530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:38:38.417 [DEBUG] [Thread-62530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:38:38.417 [DEBUG] [Thread-62530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:38:38.417 [DEBUG] [Thread-62530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:38:38.440 [INFO] [Thread-62530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:38:38.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:38:38.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:38:39.327 [DEBUG] [Thread-62530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:38:39.327 [DEBUG] [Thread-62530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:38:39.375 [DEBUG] [Thread-62530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:38:39.376 [DEBUG] [Thread-62530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:38:39.385 [DEBUG] [Thread-62530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:38:39.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:38:39.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:38:39.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:38:39.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:38:39.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:38:39.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:38:39.420 [DEBUG] [Thread-62530] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:38:46.929 [DEBUG] [Thread-62532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:38:48.658 [DEBUG] [Thread-62533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:39:03.703 [DEBUG] [Thread-62534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:39:04.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:39:04.327 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:39:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:39:09.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:39:09.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:39:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 39, 7), 13.1, 40.92, 0.0, 20.68, 14.98, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:39:10.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:39:07
2025-11-17T22:39:10.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:39:10.368 [DEBUG] [Thread-62535] [transport.py] [_log()] starting thread (client mode): 0xd3135c60
2025-11-17T22:39:10.368 [DEBUG] [Thread-62535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:39:10.378 [DEBUG] [Thread-62535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:39:10.378 [INFO] [Thread-62535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] client lang: <none>
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] server lang: <none>
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] kex follows: False
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] Compression: none
2025-11-17T22:39:10.381 [DEBUG] [Thread-62535] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:39:10.394 [DEBUG] [Thread-62535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:39:10.395 [DEBUG] [Thread-62535] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:39:10.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:39:10.396 [DEBUG] [Thread-62535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:39:10.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:39:10.398 [DEBUG] [Thread-62535] [transport.py] [_log()] userauth is OK
2025-11-17T22:39:10.398 [DEBUG] [Thread-62535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:39:10.398 [DEBUG] [Thread-62535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:39:10.398 [DEBUG] [Thread-62535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:39:10.398 [DEBUG] [Thread-62535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:39:10.423 [INFO] [Thread-62535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:39:10.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:39:11.027 [DEBUG] [Thread-62535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:39:11.027 [DEBUG] [Thread-62535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:39:11.027 [DEBUG] [Thread-62535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:39:11.069 [DEBUG] [Thread-62535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:39:11.069 [DEBUG] [Thread-62535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:39:11.072 [DEBUG] [Thread-62535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:39:11.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:39:11.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:39:11.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:39:11.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:39:11.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:39:11.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:39:11.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:39:11.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:39:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:39:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.860116 -999.00  +14.90  15.26     46   +3.50 1 1 1 1 1     0    0 10.47 -35.40 ZNESW 16.5 15.3 173.6 21.1 15.3 -23.1 15.2 -21.7 15.0 -21.2 15.3 -22.3
2025-11-17T22:39:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:39:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:39:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.860116
2025-11-17T22:39:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:39:11.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:39:11.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:39:11.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:39:11.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:39:11.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:39:07', tmtdew=13.1, humidity=40.92, cloud=0.0, wind=20.68, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:39:07', seeing=2.15, atlas_timestamp='2025-11-17T20:38:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.36774999999999913, 0.17125000000000057, 0.58725, 0.29299999999999926, 0.30049999999999955, 0.29025000000000034, 0.1144999999999996, 0.1902500000000007, 0.14199999999999946, 0.2289999999999992, 0.74275, 0.7039999999999997, 0.3460000000000001, 0.5887499999999992, 0.17600000000000016, 0.15399999999999991, 0.13574999999999982, 0.3614999999999995, 0.8109999999999999, 0.8402499999999993, 0.47499999999999876, 0.441749999999999, 0.18524999999999991, 0.23375000000000057, 0.15700000000000003, 0.4584999999999999, 0.7837500000000004, 0.7635000000000005, 0.47000000000000064, 0.2890000000000006, 0.42650000000000077, 0.35300000000000065, 0.2082499999999996], zp_timestamp='2025-11-17T20:35:00')
2025-11-17T22:39:11.097 [DEBUG] [Thread-62535] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:39:11.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:39:11.192 [DEBUG] [Thread-62538] [transport.py] [_log()] starting thread (client mode): 0xd3134a90
2025-11-17T22:39:11.192 [DEBUG] [Thread-62538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:39:11.207 [DEBUG] [Thread-62538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:39:11.208 [INFO] [Thread-62538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:39:11.215 [DEBUG] [Thread-62538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:39:11.215 [DEBUG] [Thread-62538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:39:11.215 [DEBUG] [Thread-62538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:39:11.215 [DEBUG] [Thread-62538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:39:11.215 [DEBUG] [Thread-62538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] client lang: <none>
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] server lang: <none>
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] kex follows: False
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] Compression: none
2025-11-17T22:39:11.216 [DEBUG] [Thread-62538] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:39:11.275 [DEBUG] [Thread-62538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:39:11.275 [DEBUG] [Thread-62538] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:39:11.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:39:11.276 [DEBUG] [Thread-62538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:39:11.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:39:11.332 [DEBUG] [Thread-62538] [transport.py] [_log()] userauth is OK
2025-11-17T22:39:11.332 [DEBUG] [Thread-62538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:39:11.333 [DEBUG] [Thread-62538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:39:11.333 [DEBUG] [Thread-62538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:39:11.333 [DEBUG] [Thread-62538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:39:11.352 [INFO] [Thread-62538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:39:11.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:39:11.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:39:12.208 [DEBUG] [Thread-62538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:39:12.208 [DEBUG] [Thread-62538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:39:12.256 [DEBUG] [Thread-62538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:39:12.256 [DEBUG] [Thread-62538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:39:12.265 [DEBUG] [Thread-62538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:39:12.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:39:12.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:39:12.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:39:12.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:39:12.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:39:12.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:39:12.299 [DEBUG] [Thread-62538] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:39:18.730 [DEBUG] [Thread-62540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:39:33.769 [DEBUG] [Thread-62541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:39:42.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:39:42.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:39:42.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:39:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 39, 38), 13.08, 41.47, 0.0, 16.43, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:39:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:39:38
2025-11-17T22:39:43.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:39:43.257 [DEBUG] [Thread-62542] [transport.py] [_log()] starting thread (client mode): 0xd3152950
2025-11-17T22:39:43.257 [DEBUG] [Thread-62542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:39:43.271 [DEBUG] [Thread-62542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:39:43.271 [INFO] [Thread-62542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] client lang: <none>
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] server lang: <none>
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] kex follows: False
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] Compression: none
2025-11-17T22:39:43.274 [DEBUG] [Thread-62542] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:39:43.282 [DEBUG] [Thread-62542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:39:43.282 [DEBUG] [Thread-62542] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:39:43.282 [DEBUG] [Thread-62542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:39:43.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:39:43.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:39:43.283 [DEBUG] [Thread-62542] [transport.py] [_log()] userauth is OK
2025-11-17T22:39:43.283 [DEBUG] [Thread-62542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:39:43.283 [DEBUG] [Thread-62542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:39:43.283 [DEBUG] [Thread-62542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:39:43.283 [DEBUG] [Thread-62542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:39:43.296 [INFO] [Thread-62542] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:39:43.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:39:43.898 [DEBUG] [Thread-62542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:39:43.899 [DEBUG] [Thread-62542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:39:43.899 [DEBUG] [Thread-62542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:39:43.940 [DEBUG] [Thread-62542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:39:43.940 [DEBUG] [Thread-62542] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:39:43.943 [DEBUG] [Thread-62542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:39:43.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:39:43.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:39:43.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:39:43.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:39:43.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:39:43.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:39:43.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:39:43.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:39:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:39:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.860811 -999.00  +15.00  20.00     46   +3.60 1 1 1 1 1     0    0 10.39 -34.82 ZNESW 19.4 20.0 171.6 23.2 15.3 -23.0 15.2 -21.6 15.0 -21.1 15.3 -22.1
2025-11-17T22:39:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:39:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:39:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.860811
2025-11-17T22:39:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:39:43.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:39:43.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:39:43.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:39:43.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:39:43.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:39:38', tmtdew=13.08, humidity=41.47, cloud=0.0, wind=16.43, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:39:39', seeing=2.21, atlas_timestamp='2025-11-17T20:39:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.36774999999999913, 0.17125000000000057, 0.58725, 0.29299999999999926, 0.30049999999999955, 0.29025000000000034, 0.1144999999999996, 0.1902500000000007, 0.14199999999999946, 0.2289999999999992, 0.74275, 0.7039999999999997, 0.3460000000000001, 0.5887499999999992, 0.17600000000000016, 0.15399999999999991, 0.13574999999999982, 0.3614999999999995, 0.8109999999999999, 0.8402499999999993, 0.47499999999999876, 0.441749999999999, 0.18524999999999991, 0.23375000000000057, 0.15700000000000003, 0.4584999999999999, 0.7837500000000004, 0.7635000000000005, 0.47000000000000064, 0.2890000000000006, 0.42650000000000077, 0.35300000000000065, 0.2082499999999996], zp_timestamp='2025-11-17T20:35:00')
2025-11-17T22:39:43.969 [DEBUG] [Thread-62542] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:39:44.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:39:44.064 [DEBUG] [Thread-62545] [transport.py] [_log()] starting thread (client mode): 0xd3134df0
2025-11-17T22:39:44.064 [DEBUG] [Thread-62545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:39:44.078 [DEBUG] [Thread-62545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:39:44.078 [INFO] [Thread-62545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:39:44.086 [DEBUG] [Thread-62545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:39:44.086 [DEBUG] [Thread-62545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] client lang: <none>
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] server lang: <none>
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] kex follows: False
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] Compression: none
2025-11-17T22:39:44.087 [DEBUG] [Thread-62545] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:39:44.144 [DEBUG] [Thread-62545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:39:44.144 [DEBUG] [Thread-62545] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:39:44.145 [DEBUG] [Thread-62545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:39:44.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:39:44.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:39:44.200 [DEBUG] [Thread-62545] [transport.py] [_log()] userauth is OK
2025-11-17T22:39:44.200 [DEBUG] [Thread-62545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:39:44.200 [DEBUG] [Thread-62545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:39:44.200 [DEBUG] [Thread-62545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:39:44.200 [DEBUG] [Thread-62545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:39:44.220 [INFO] [Thread-62545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:39:44.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:39:44.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:39:45.042 [DEBUG] [Thread-62545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:39:45.043 [DEBUG] [Thread-62545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:39:45.090 [DEBUG] [Thread-62545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:39:45.090 [DEBUG] [Thread-62545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:39:45.099 [DEBUG] [Thread-62545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:39:45.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:39:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:39:45.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:39:45.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:39:45.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:39:45.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:39:45.134 [DEBUG] [Thread-62545] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:39:46.986 [DEBUG] [Thread-62547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:39:48.795 [DEBUG] [Thread-62548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:40:03.836 [DEBUG] [Thread-62549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:40:04.578 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:40:04.579 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:40:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:40:15.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:40:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:40:15.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 40, 11), 13.07, 41.5, 0.0, 16.66, 14.93, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:40:15.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:40:11
2025-11-17T22:40:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:40:16.088 [DEBUG] [Thread-62550] [transport.py] [_log()] starting thread (client mode): 0xd3150a00
2025-11-17T22:40:16.088 [DEBUG] [Thread-62550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:40:16.109 [DEBUG] [Thread-62550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:40:16.109 [INFO] [Thread-62550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] client lang: <none>
2025-11-17T22:40:16.112 [DEBUG] [Thread-62550] [transport.py] [_log()] server lang: <none>
2025-11-17T22:40:16.113 [DEBUG] [Thread-62550] [transport.py] [_log()] kex follows: False
2025-11-17T22:40:16.113 [DEBUG] [Thread-62550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:40:16.113 [DEBUG] [Thread-62550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:40:16.113 [DEBUG] [Thread-62550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:40:16.113 [DEBUG] [Thread-62550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:40:16.113 [DEBUG] [Thread-62550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:40:16.113 [DEBUG] [Thread-62550] [transport.py] [_log()] Compression: none
2025-11-17T22:40:16.113 [DEBUG] [Thread-62550] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:40:16.131 [DEBUG] [Thread-62550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:40:16.132 [DEBUG] [Thread-62550] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:40:16.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:40:16.133 [DEBUG] [Thread-62550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:40:16.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:40:16.135 [DEBUG] [Thread-62550] [transport.py] [_log()] userauth is OK
2025-11-17T22:40:16.135 [DEBUG] [Thread-62550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:40:16.135 [DEBUG] [Thread-62550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:40:16.135 [DEBUG] [Thread-62550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:40:16.135 [DEBUG] [Thread-62550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:40:16.159 [INFO] [Thread-62550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:40:16.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:40:16.939 [DEBUG] [Thread-62550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:40:16.939 [DEBUG] [Thread-62550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:40:16.939 [DEBUG] [Thread-62550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:40:16.980 [DEBUG] [Thread-62550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:40:16.980 [DEBUG] [Thread-62550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:40:16.982 [DEBUG] [Thread-62550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:40:16.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:40:16.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:40:16.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:40:16.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:40:16.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:40:16.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:40:16.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:40:16.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:40:16.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:40:16.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.860811 -999.00  +15.00  20.00     46   +3.60 1 1 1 1 1     0    0 10.39 -34.82 ZNESW 19.4 20.0 171.6 23.2 15.3 -23.0 15.2 -21.6 15.0 -21.1 15.3 -22.1
2025-11-17T22:40:16.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:40:16.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:40:16.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.860811
2025-11-17T22:40:17.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:40:17.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:40:17.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:40:17.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:40:17.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:40:17.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:40:11', tmtdew=13.07, humidity=41.5, cloud=0.0, wind=16.66, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:40:11', seeing=1.8, atlas_timestamp='2025-11-17T20:39:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.10474999999999923, 0.21025000000000027, 0.15725000000000122, 0.22049999999999947, 0.20650000000000013, 0.3097500000000011, 0.07149999999999856, 0.13925000000000054, 0.28749999999999964, 0.2184999999999988, 0.286249999999999, 0.19399999999999906, 0.3609999999999989, 0.23724999999999952, 0.05299999999999905, 0.31700000000000017, 0.4532500000000006, 0.4405000000000001, 0.6129999999999995, 0.4347499999999975, 0.9259999999999984, 0.3902499999999982, 0.11925000000000097, 0.19175000000000075, 0.17799999999999905, 0.7355, 0.86775, 1.1325000000000003, 0.8525, 0.7020000000000008, 0.3055000000000012, 0.19700000000000095, 0.1247499999999988], zp_timestamp='2025-11-17T20:39:00')
2025-11-17T22:40:17.001 [DEBUG] [Thread-62550] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:40:17.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:40:17.087 [DEBUG] [Thread-62553] [transport.py] [_log()] starting thread (client mode): 0xd31cf3d0
2025-11-17T22:40:17.087 [DEBUG] [Thread-62553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:40:17.103 [DEBUG] [Thread-62553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:40:17.103 [INFO] [Thread-62553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:40:17.110 [DEBUG] [Thread-62553] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:40:17.110 [DEBUG] [Thread-62553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:40:17.110 [DEBUG] [Thread-62553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:40:17.110 [DEBUG] [Thread-62553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:40:17.110 [DEBUG] [Thread-62553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:40:17.110 [DEBUG] [Thread-62553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] client lang: <none>
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] server lang: <none>
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] kex follows: False
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] Compression: none
2025-11-17T22:40:17.111 [DEBUG] [Thread-62553] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:40:17.167 [DEBUG] [Thread-62553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:40:17.167 [DEBUG] [Thread-62553] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:40:17.167 [DEBUG] [Thread-62553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:40:17.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:40:17.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:40:17.224 [DEBUG] [Thread-62553] [transport.py] [_log()] userauth is OK
2025-11-17T22:40:17.225 [DEBUG] [Thread-62553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:40:17.225 [DEBUG] [Thread-62553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:40:17.225 [DEBUG] [Thread-62553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:40:17.225 [DEBUG] [Thread-62553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:40:17.239 [INFO] [Thread-62553] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:40:17.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:40:17.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:40:18.082 [DEBUG] [Thread-62553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:40:18.082 [DEBUG] [Thread-62553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:40:18.130 [DEBUG] [Thread-62553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:40:18.130 [DEBUG] [Thread-62553] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:40:18.138 [DEBUG] [Thread-62553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:40:18.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:40:18.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:40:18.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:40:18.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:40:18.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:40:18.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:40:18.171 [DEBUG] [Thread-62553] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:40:18.863 [DEBUG] [Thread-62555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:40:33.905 [DEBUG] [Thread-62556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:40:47.053 [DEBUG] [Thread-62557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:40:48.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:40:48.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:40:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:40:48.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 40, 43), 12.96, 41.65, 0.0, 18.74, 14.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:40:48.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:40:43
2025-11-17T22:40:48.935 [DEBUG] [Thread-62558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:40:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:40:49.089 [DEBUG] [Thread-62559] [transport.py] [_log()] starting thread (client mode): 0xd7bc6650
2025-11-17T22:40:49.089 [DEBUG] [Thread-62559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:40:49.111 [DEBUG] [Thread-62559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:40:49.111 [INFO] [Thread-62559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:40:49.114 [DEBUG] [Thread-62559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:40:49.114 [DEBUG] [Thread-62559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:40:49.114 [DEBUG] [Thread-62559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] client lang: <none>
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] server lang: <none>
2025-11-17T22:40:49.115 [DEBUG] [Thread-62559] [transport.py] [_log()] kex follows: False
2025-11-17T22:40:49.116 [DEBUG] [Thread-62559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:40:49.116 [DEBUG] [Thread-62559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:40:49.116 [DEBUG] [Thread-62559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:40:49.116 [DEBUG] [Thread-62559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:40:49.116 [DEBUG] [Thread-62559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:40:49.116 [DEBUG] [Thread-62559] [transport.py] [_log()] Compression: none
2025-11-17T22:40:49.116 [DEBUG] [Thread-62559] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:40:49.134 [DEBUG] [Thread-62559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:40:49.135 [DEBUG] [Thread-62559] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:40:49.135 [DEBUG] [Thread-62559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:40:49.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:40:49.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:40:49.137 [DEBUG] [Thread-62559] [transport.py] [_log()] userauth is OK
2025-11-17T22:40:49.137 [DEBUG] [Thread-62559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:40:49.137 [DEBUG] [Thread-62559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:40:49.137 [DEBUG] [Thread-62559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:40:49.137 [DEBUG] [Thread-62559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:40:49.161 [INFO] [Thread-62559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:40:49.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:40:49.821 [DEBUG] [Thread-62559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:40:49.821 [DEBUG] [Thread-62559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:40:49.822 [DEBUG] [Thread-62559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:40:49.862 [DEBUG] [Thread-62559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:40:49.862 [DEBUG] [Thread-62559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:40:49.865 [DEBUG] [Thread-62559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:40:49.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:40:49.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:40:49.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:40:49.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:40:49.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:40:49.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:40:49.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:40:49.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:40:49.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:40:49.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.861158 -999.00  +14.90  10.92     46   +3.60 1 1 1 1 1     0    0 10.74 -32.55 ZNESW 13.2 10.9 159.9 20.1 15.4 -23.0 15.2 -21.5 15.0 -20.8 15.3 -21.8
2025-11-17T22:40:49.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:40:49.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:40:49.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.861158
2025-11-17T22:40:49.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:40:49.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:40:49.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:40:49.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:40:49.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T22:40:49.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:40:43', tmtdew=12.96, humidity=41.65, cloud=0.0, wind=18.74, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:40:43', seeing=1.8, atlas_timestamp='2025-11-17T20:40:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.10474999999999923, 0.21025000000000027, 0.15725000000000122, 0.22049999999999947, 0.20650000000000013, 0.3097500000000011, 0.07149999999999856, 0.13925000000000054, 0.28749999999999964, 0.2184999999999988, 0.286249999999999, 0.19399999999999906, 0.3609999999999989, 0.23724999999999952, 0.05299999999999905, 0.31700000000000017, 0.4532500000000006, 0.4405000000000001, 0.6129999999999995, 0.4347499999999975, 0.9259999999999984, 0.3902499999999982, 0.11925000000000097, 0.19175000000000075, 0.17799999999999905, 0.7355, 0.86775, 1.1325000000000003, 0.8525, 0.7020000000000008, 0.3055000000000012, 0.19700000000000095, 0.1247499999999988], zp_timestamp='2025-11-17T20:39:00')
2025-11-17T22:40:49.888 [DEBUG] [Thread-62559] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:40:49.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:40:49.982 [DEBUG] [Thread-62562] [transport.py] [_log()] starting thread (client mode): 0xd3135f90
2025-11-17T22:40:49.982 [DEBUG] [Thread-62562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:40:49.997 [DEBUG] [Thread-62562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:40:49.997 [INFO] [Thread-62562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] client lang: <none>
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] server lang: <none>
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] kex follows: False
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:40:50.005 [DEBUG] [Thread-62562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:40:50.006 [DEBUG] [Thread-62562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:40:50.006 [DEBUG] [Thread-62562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:40:50.006 [DEBUG] [Thread-62562] [transport.py] [_log()] Compression: none
2025-11-17T22:40:50.006 [DEBUG] [Thread-62562] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:40:50.063 [DEBUG] [Thread-62562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:40:50.064 [DEBUG] [Thread-62562] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:40:50.064 [DEBUG] [Thread-62562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:40:50.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:40:50.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:40:50.120 [DEBUG] [Thread-62562] [transport.py] [_log()] userauth is OK
2025-11-17T22:40:50.120 [DEBUG] [Thread-62562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:40:50.120 [DEBUG] [Thread-62562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:40:50.120 [DEBUG] [Thread-62562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:40:50.120 [DEBUG] [Thread-62562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:40:50.140 [INFO] [Thread-62562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:40:50.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:40:50.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:40:50.979 [DEBUG] [Thread-62562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:40:50.979 [DEBUG] [Thread-62562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:40:51.028 [DEBUG] [Thread-62562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:40:51.028 [DEBUG] [Thread-62562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:40:51.037 [DEBUG] [Thread-62562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:40:51.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:40:51.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:40:51.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:40:51.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:40:51.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:40:51.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:40:51.071 [DEBUG] [Thread-62562] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:41:03.961 [DEBUG] [Thread-62564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:41:04.782 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:41:04.783 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:41:19.002 [DEBUG] [Thread-62565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:41:21.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:41:21.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:41:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:41:21.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 41, 15), 12.98, 41.6, 0.0, 17.43, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:41:21.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:41:15
2025-11-17T22:41:21.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:41:22.029 [DEBUG] [Thread-62566] [transport.py] [_log()] starting thread (client mode): 0xd0756a40
2025-11-17T22:41:22.029 [DEBUG] [Thread-62566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:41:22.049 [DEBUG] [Thread-62566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:41:22.049 [INFO] [Thread-62566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:41:22.052 [DEBUG] [Thread-62566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:41:22.052 [DEBUG] [Thread-62566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:41:22.052 [DEBUG] [Thread-62566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:41:22.052 [DEBUG] [Thread-62566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:41:22.052 [DEBUG] [Thread-62566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] client lang: <none>
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] server lang: <none>
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] kex follows: False
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:41:22.053 [DEBUG] [Thread-62566] [transport.py] [_log()] Compression: none
2025-11-17T22:41:22.054 [DEBUG] [Thread-62566] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:41:22.072 [DEBUG] [Thread-62566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:41:22.072 [DEBUG] [Thread-62566] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:41:22.073 [DEBUG] [Thread-62566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:41:22.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:41:22.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:41:22.075 [DEBUG] [Thread-62566] [transport.py] [_log()] userauth is OK
2025-11-17T22:41:22.075 [DEBUG] [Thread-62566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:41:22.075 [DEBUG] [Thread-62566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:41:22.076 [DEBUG] [Thread-62566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:41:22.076 [DEBUG] [Thread-62566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:41:22.100 [INFO] [Thread-62566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:41:22.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:41:22.720 [DEBUG] [Thread-62566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:41:22.720 [DEBUG] [Thread-62566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:41:22.720 [DEBUG] [Thread-62566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:41:22.760 [DEBUG] [Thread-62566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:41:22.761 [DEBUG] [Thread-62566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:41:22.763 [DEBUG] [Thread-62566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:41:22.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:41:22.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:41:22.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:41:22.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:41:22.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:41:22.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:41:22.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:41:22.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:41:22.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:41:22.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.861505 -999.00  +15.00  14.85     46   +3.50 1 2 1 1 1     0    0 10.74 -31.92 ZNESw 12.4 14.8 152.0 19.3 15.4 -23.0 15.2 -21.3 15.0 -20.7 15.3 -21.7
2025-11-17T22:41:22.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:41:22.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:41:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.861505
2025-11-17T22:41:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:41:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:41:22.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:41:22.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:41:22.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:41:22.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:41:15', tmtdew=12.98, humidity=41.6, cloud=0.0, wind=17.43, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:41:15', seeing=2.29, atlas_timestamp='2025-11-17T20:40:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.10474999999999923, 0.21025000000000027, 0.15725000000000122, 0.22049999999999947, 0.20650000000000013, 0.3097500000000011, 0.07149999999999856, 0.13925000000000054, 0.28749999999999964, 0.2184999999999988, 0.286249999999999, 0.19399999999999906, 0.3609999999999989, 0.23724999999999952, 0.05299999999999905, 0.31700000000000017, 0.4532500000000006, 0.4405000000000001, 0.6129999999999995, 0.4347499999999975, 0.9259999999999984, 0.3902499999999982, 0.11925000000000097, 0.19175000000000075, 0.17799999999999905, 0.7355, 0.86775, 1.1325000000000003, 0.8525, 0.7020000000000008, 0.3055000000000012, 0.19700000000000095, 0.1247499999999988], zp_timestamp='2025-11-17T20:39:00')
2025-11-17T22:41:22.789 [DEBUG] [Thread-62566] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:41:22.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:41:22.881 [DEBUG] [Thread-62569] [transport.py] [_log()] starting thread (client mode): 0xd0702aa0
2025-11-17T22:41:22.881 [DEBUG] [Thread-62569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:41:22.897 [DEBUG] [Thread-62569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:41:22.897 [INFO] [Thread-62569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:41:22.904 [DEBUG] [Thread-62569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:41:22.904 [DEBUG] [Thread-62569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:41:22.904 [DEBUG] [Thread-62569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] client lang: <none>
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] server lang: <none>
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] kex follows: False
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] Compression: none
2025-11-17T22:41:22.905 [DEBUG] [Thread-62569] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:41:22.964 [DEBUG] [Thread-62569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:41:22.964 [DEBUG] [Thread-62569] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:41:22.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:41:22.965 [DEBUG] [Thread-62569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:41:22.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:41:23.020 [DEBUG] [Thread-62569] [transport.py] [_log()] userauth is OK
2025-11-17T22:41:23.020 [DEBUG] [Thread-62569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:41:23.020 [DEBUG] [Thread-62569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:41:23.021 [DEBUG] [Thread-62569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:41:23.021 [DEBUG] [Thread-62569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:41:23.044 [INFO] [Thread-62569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:41:23.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:41:23.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:41:23.871 [DEBUG] [Thread-62569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:41:23.871 [DEBUG] [Thread-62569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:41:23.919 [DEBUG] [Thread-62569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:41:23.919 [DEBUG] [Thread-62569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:41:23.928 [DEBUG] [Thread-62569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:41:23.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:41:23.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:41:23.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:41:23.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:41:23.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:41:23.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:41:23.963 [DEBUG] [Thread-62569] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:41:34.030 [DEBUG] [Thread-62571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:41:47.110 [DEBUG] [Thread-62572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:41:49.059 [DEBUG] [Thread-62573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:41:53.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:41:53.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:41:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:41:54.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 41, 47), 12.9, 41.68, 0.0, 18.54, 14.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:41:54.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:41:47
2025-11-17T22:41:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:41:54.917 [DEBUG] [Thread-62574] [transport.py] [_log()] starting thread (client mode): 0xd3136bf0
2025-11-17T22:41:54.917 [DEBUG] [Thread-62574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:41:54.937 [DEBUG] [Thread-62574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:41:54.937 [INFO] [Thread-62574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] client lang: <none>
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] server lang: <none>
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] kex follows: False
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:41:54.940 [DEBUG] [Thread-62574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:41:54.941 [DEBUG] [Thread-62574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:41:54.941 [DEBUG] [Thread-62574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:41:54.941 [DEBUG] [Thread-62574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:41:54.941 [DEBUG] [Thread-62574] [transport.py] [_log()] Compression: none
2025-11-17T22:41:54.941 [DEBUG] [Thread-62574] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:41:54.957 [DEBUG] [Thread-62574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:41:54.958 [DEBUG] [Thread-62574] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:41:54.958 [DEBUG] [Thread-62574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:41:54.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:41:54.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:41:54.960 [DEBUG] [Thread-62574] [transport.py] [_log()] userauth is OK
2025-11-17T22:41:54.960 [DEBUG] [Thread-62574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:41:54.960 [DEBUG] [Thread-62574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:41:54.961 [DEBUG] [Thread-62574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:41:54.961 [DEBUG] [Thread-62574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:41:54.995 [INFO] [Thread-62574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:41:54.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:41:55.647 [DEBUG] [Thread-62574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:41:55.647 [DEBUG] [Thread-62574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:41:55.648 [DEBUG] [Thread-62574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:41:55.689 [DEBUG] [Thread-62574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:41:55.689 [DEBUG] [Thread-62574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:41:55.692 [DEBUG] [Thread-62574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:41:55.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:41:55.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:41:55.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:41:55.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:41:55.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:41:55.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:41:55.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:41:55.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:41:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:41:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.861852 -999.00  +14.90  13.16     46   +3.50 1 2 1 1 1     0    0 10.77 -28.73 ZNESw 12.7 13.2 164.2 17.0 15.4 -22.9 15.2 -21.2 15.0 -20.4 15.3 -21.6
2025-11-17T22:41:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:41:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:41:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.861852
2025-11-17T22:41:55.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:41:55.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:41:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:41:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:41:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:41:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:41:47', tmtdew=12.9, humidity=41.68, cloud=0.0, wind=18.54, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:41:47', seeing=2.53, atlas_timestamp='2025-11-17T20:41:04.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.10474999999999923, 0.21025000000000027, 0.15725000000000122, 0.22049999999999947, 0.20650000000000013, 0.3097500000000011, 0.07149999999999856, 0.13925000000000054, 0.28749999999999964, 0.2184999999999988, 0.286249999999999, 0.19399999999999906, 0.3609999999999989, 0.23724999999999952, 0.05299999999999905, 0.31700000000000017, 0.4532500000000006, 0.4405000000000001, 0.6129999999999995, 0.4347499999999975, 0.9259999999999984, 0.3902499999999982, 0.11925000000000097, 0.19175000000000075, 0.17799999999999905, 0.7355, 0.86775, 1.1325000000000003, 0.8525, 0.7020000000000008, 0.3055000000000012, 0.19700000000000095, 0.1247499999999988], zp_timestamp='2025-11-17T20:39:00')
2025-11-17T22:41:55.716 [DEBUG] [Thread-62574] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:41:55.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:41:55.813 [DEBUG] [Thread-62577] [transport.py] [_log()] starting thread (client mode): 0xd31638e0
2025-11-17T22:41:55.813 [DEBUG] [Thread-62577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:41:55.832 [DEBUG] [Thread-62577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:41:55.833 [INFO] [Thread-62577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:41:55.842 [DEBUG] [Thread-62577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] client lang: <none>
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] server lang: <none>
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] kex follows: False
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:41:55.843 [DEBUG] [Thread-62577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:41:55.844 [DEBUG] [Thread-62577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:41:55.844 [DEBUG] [Thread-62577] [transport.py] [_log()] Compression: none
2025-11-17T22:41:55.844 [DEBUG] [Thread-62577] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:41:55.900 [DEBUG] [Thread-62577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:41:55.900 [DEBUG] [Thread-62577] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:41:55.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:41:55.901 [DEBUG] [Thread-62577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:41:55.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:41:55.956 [DEBUG] [Thread-62577] [transport.py] [_log()] userauth is OK
2025-11-17T22:41:55.956 [DEBUG] [Thread-62577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:41:55.956 [DEBUG] [Thread-62577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:41:55.957 [DEBUG] [Thread-62577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:41:55.957 [DEBUG] [Thread-62577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:41:55.975 [INFO] [Thread-62577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:41:55.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:41:55.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:41:56.849 [DEBUG] [Thread-62577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:41:56.850 [DEBUG] [Thread-62577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:41:56.897 [DEBUG] [Thread-62577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:41:56.897 [DEBUG] [Thread-62577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:41:56.906 [DEBUG] [Thread-62577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:41:56.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:41:56.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:41:56.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:41:56.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:41:56.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:41:56.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:41:56.940 [DEBUG] [Thread-62577] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:42:04.090 [DEBUG] [Thread-62579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:42:04.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:42:04.989 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:42:19.130 [DEBUG] [Thread-62580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:42:26.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:42:26.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:42:26.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:42:27.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 42, 19), 12.88, 41.75, 0.0, 18.37, 14.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:42:27.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:42:19
2025-11-17T22:42:27.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:42:27.896 [DEBUG] [Thread-62581] [transport.py] [_log()] starting thread (client mode): 0xd3136da0
2025-11-17T22:42:27.897 [DEBUG] [Thread-62581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:42:27.919 [DEBUG] [Thread-62581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:42:27.919 [INFO] [Thread-62581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] client lang: <none>
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] server lang: <none>
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] kex follows: False
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] Compression: none
2025-11-17T22:42:27.923 [DEBUG] [Thread-62581] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:42:27.942 [DEBUG] [Thread-62581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:42:27.942 [DEBUG] [Thread-62581] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:42:27.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:42:27.943 [DEBUG] [Thread-62581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:42:27.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:42:27.945 [DEBUG] [Thread-62581] [transport.py] [_log()] userauth is OK
2025-11-17T22:42:27.946 [DEBUG] [Thread-62581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:42:27.946 [DEBUG] [Thread-62581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:42:27.946 [DEBUG] [Thread-62581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:42:27.946 [DEBUG] [Thread-62581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:42:27.981 [INFO] [Thread-62581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:42:27.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:42:28.602 [DEBUG] [Thread-62581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:42:28.602 [DEBUG] [Thread-62581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:42:28.602 [DEBUG] [Thread-62581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:42:28.642 [DEBUG] [Thread-62581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:42:28.643 [DEBUG] [Thread-62581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:42:28.645 [DEBUG] [Thread-62581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:42:28.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:42:28.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:42:28.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:42:28.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:42:28.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:42:28.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:42:28.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:42:28.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:42:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:42:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.862199 -999.00  +14.90  15.19     46   +3.40 1 2 1 1 1     0    0 10.77 -29.09 ZNESw 14.4 15.2 168.6 18.6 15.3 -22.7 15.2 -21.0 15.0 -20.1 15.3 -21.3
2025-11-17T22:42:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:42:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:42:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.862199
2025-11-17T22:42:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:42:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:42:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:42:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:42:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:42:28.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:42:19', tmtdew=12.88, humidity=41.75, cloud=0.0, wind=18.37, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:42:19', seeing=2.53, atlas_timestamp='2025-11-17T20:41:33.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.10474999999999923, 0.21025000000000027, 0.15725000000000122, 0.22049999999999947, 0.20650000000000013, 0.3097500000000011, 0.07149999999999856, 0.13925000000000054, 0.28749999999999964, 0.2184999999999988, 0.286249999999999, 0.19399999999999906, 0.3609999999999989, 0.23724999999999952, 0.05299999999999905, 0.31700000000000017, 0.4532500000000006, 0.4405000000000001, 0.6129999999999995, 0.4347499999999975, 0.9259999999999984, 0.3902499999999982, 0.11925000000000097, 0.19175000000000075, 0.17799999999999905, 0.7355, 0.86775, 1.1325000000000003, 0.8525, 0.7020000000000008, 0.3055000000000012, 0.19700000000000095, 0.1247499999999988], zp_timestamp='2025-11-17T20:39:00')
2025-11-17T22:42:28.669 [DEBUG] [Thread-62581] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:42:28.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:42:28.765 [DEBUG] [Thread-62584] [transport.py] [_log()] starting thread (client mode): 0xd31cebc0
2025-11-17T22:42:28.766 [DEBUG] [Thread-62584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:42:28.783 [DEBUG] [Thread-62584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:42:28.783 [INFO] [Thread-62584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] client lang: <none>
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] server lang: <none>
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] kex follows: False
2025-11-17T22:42:28.791 [DEBUG] [Thread-62584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:42:28.792 [DEBUG] [Thread-62584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:42:28.792 [DEBUG] [Thread-62584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:42:28.792 [DEBUG] [Thread-62584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:42:28.792 [DEBUG] [Thread-62584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:42:28.792 [DEBUG] [Thread-62584] [transport.py] [_log()] Compression: none
2025-11-17T22:42:28.792 [DEBUG] [Thread-62584] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:42:28.851 [DEBUG] [Thread-62584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:42:28.851 [DEBUG] [Thread-62584] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:42:28.852 [DEBUG] [Thread-62584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:42:28.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:42:28.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:42:28.912 [DEBUG] [Thread-62584] [transport.py] [_log()] userauth is OK
2025-11-17T22:42:28.912 [DEBUG] [Thread-62584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:42:28.913 [DEBUG] [Thread-62584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:42:28.913 [DEBUG] [Thread-62584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:42:28.913 [DEBUG] [Thread-62584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:42:28.933 [INFO] [Thread-62584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:42:28.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:42:28.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:42:29.798 [DEBUG] [Thread-62584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:42:29.798 [DEBUG] [Thread-62584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:42:29.845 [DEBUG] [Thread-62584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:42:29.845 [DEBUG] [Thread-62584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:42:29.854 [DEBUG] [Thread-62584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:42:29.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:42: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')
2025-11-17T22:42:29.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:42:29.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:42:29.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:42:29.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:42:29.888 [DEBUG] [Thread-62584] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:42:34.162 [DEBUG] [Thread-62586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:42:47.176 [DEBUG] [Thread-62587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:42:49.206 [DEBUG] [Thread-62588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:42:59.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:42:59.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:42:59.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:43:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 42, 51), 12.88, 41.75, 0.0, 14.42, 14.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:43:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:42:51
2025-11-17T22:43:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:43:00.838 [DEBUG] [Thread-62589] [transport.py] [_log()] starting thread (client mode): 0xd07565c0
2025-11-17T22:43:00.838 [DEBUG] [Thread-62589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:43:00.858 [DEBUG] [Thread-62589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:43:00.859 [INFO] [Thread-62589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] client lang: <none>
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] server lang: <none>
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] kex follows: False
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] Compression: none
2025-11-17T22:43:00.862 [DEBUG] [Thread-62589] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:43:00.880 [DEBUG] [Thread-62589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:43:00.880 [DEBUG] [Thread-62589] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:43:00.881 [DEBUG] [Thread-62589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:43:00.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:43:00.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:43:00.882 [DEBUG] [Thread-62589] [transport.py] [_log()] userauth is OK
2025-11-17T22:43:00.883 [DEBUG] [Thread-62589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:43:00.883 [DEBUG] [Thread-62589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:43:00.883 [DEBUG] [Thread-62589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:43:00.883 [DEBUG] [Thread-62589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:43:00.908 [INFO] [Thread-62589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:43:00.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:43:01.531 [DEBUG] [Thread-62589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:43:01.532 [DEBUG] [Thread-62589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:43:01.532 [DEBUG] [Thread-62589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:43:01.572 [DEBUG] [Thread-62589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:43:01.572 [DEBUG] [Thread-62589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:43:01.576 [DEBUG] [Thread-62589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:43:01.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:43:01.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:43:01.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:43:01.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:43:01.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:43:01.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:43:01.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:43:01.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:43:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:43:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.862547 -999.00  +14.80  12.90     46   +3.40 1 2 1 1 1     0    0 10.79 -28.89 ZNESw 13.6 12.9 151.4 18.4 15.3 -22.3 15.2 -20.7 15.0 -19.9 15.2 -21.0
2025-11-17T22:43:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:43:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:43:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.862547
2025-11-17T22:43:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:43:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:43:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:43:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:43:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:43:01.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:42:51', tmtdew=12.88, humidity=41.75, cloud=0.0, wind=14.42, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:42:51', seeing=2.6, atlas_timestamp='2025-11-17T20:42:04.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.10474999999999923, 0.21025000000000027, 0.15725000000000122, 0.22049999999999947, 0.20650000000000013, 0.3097500000000011, 0.07149999999999856, 0.13925000000000054, 0.28749999999999964, 0.2184999999999988, 0.286249999999999, 0.19399999999999906, 0.3609999999999989, 0.23724999999999952, 0.05299999999999905, 0.31700000000000017, 0.4532500000000006, 0.4405000000000001, 0.6129999999999995, 0.4347499999999975, 0.9259999999999984, 0.3902499999999982, 0.11925000000000097, 0.19175000000000075, 0.17799999999999905, 0.7355, 0.86775, 1.1325000000000003, 0.8525, 0.7020000000000008, 0.3055000000000012, 0.19700000000000095, 0.1247499999999988], zp_timestamp='2025-11-17T20:39:00')
2025-11-17T22:43:01.603 [DEBUG] [Thread-62589] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:43:01.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:43:01.699 [DEBUG] [Thread-62592] [transport.py] [_log()] starting thread (client mode): 0xd3151990
2025-11-17T22:43:01.699 [DEBUG] [Thread-62592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:43:01.713 [DEBUG] [Thread-62592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:43:01.713 [INFO] [Thread-62592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:43:01.723 [DEBUG] [Thread-62592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:43:01.723 [DEBUG] [Thread-62592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:43:01.723 [DEBUG] [Thread-62592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:43:01.723 [DEBUG] [Thread-62592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:43:01.723 [DEBUG] [Thread-62592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] client lang: <none>
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] server lang: <none>
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] kex follows: False
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:43:01.724 [DEBUG] [Thread-62592] [transport.py] [_log()] Compression: none
2025-11-17T22:43:01.725 [DEBUG] [Thread-62592] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:43:01.784 [DEBUG] [Thread-62592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:43:01.785 [DEBUG] [Thread-62592] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:43:01.785 [DEBUG] [Thread-62592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:43:01.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:43:01.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:43:01.840 [DEBUG] [Thread-62592] [transport.py] [_log()] userauth is OK
2025-11-17T22:43:01.840 [DEBUG] [Thread-62592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:43:01.841 [DEBUG] [Thread-62592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:43:01.841 [DEBUG] [Thread-62592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:43:01.841 [DEBUG] [Thread-62592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:43:01.867 [INFO] [Thread-62592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:43:01.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:43:01.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:43:02.704 [DEBUG] [Thread-62592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:43:02.704 [DEBUG] [Thread-62592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:43:02.752 [DEBUG] [Thread-62592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:43:02.752 [DEBUG] [Thread-62592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:43:02.761 [DEBUG] [Thread-62592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:43:02.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:43:02.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:43:02.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:43:02.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:43:02.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:43:02.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:43:02.793 [DEBUG] [Thread-62592] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:43:04.239 [DEBUG] [Thread-62594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:43:05.191 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:43:05.193 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:43:19.280 [DEBUG] [Thread-62595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:43:32.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:43:32.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:43:32.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:43:33.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 43, 23), 12.9, 41.7, 0.0, 13.8, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:43:33.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:43:23
2025-11-17T22:43:33.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:43:33.759 [DEBUG] [Thread-62596] [transport.py] [_log()] starting thread (client mode): 0xd31cefe0
2025-11-17T22:43:33.759 [DEBUG] [Thread-62596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:43:33.779 [DEBUG] [Thread-62596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:43:33.779 [INFO] [Thread-62596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] client lang: <none>
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] server lang: <none>
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] kex follows: False
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] Compression: none
2025-11-17T22:43:33.783 [DEBUG] [Thread-62596] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:43:33.799 [DEBUG] [Thread-62596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:43:33.799 [DEBUG] [Thread-62596] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:43:33.799 [DEBUG] [Thread-62596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:43:33.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:43:33.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:43:33.800 [DEBUG] [Thread-62596] [transport.py] [_log()] userauth is OK
2025-11-17T22:43:33.800 [DEBUG] [Thread-62596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:43:33.800 [DEBUG] [Thread-62596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:43:33.800 [DEBUG] [Thread-62596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:43:33.800 [DEBUG] [Thread-62596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:43:33.819 [INFO] [Thread-62596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:43:33.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:43:34.308 [DEBUG] [Thread-62598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:43:34.497 [DEBUG] [Thread-62596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:43:34.497 [DEBUG] [Thread-62596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:43:34.497 [DEBUG] [Thread-62596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:43:34.538 [DEBUG] [Thread-62596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:43:34.539 [DEBUG] [Thread-62596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:43:34.541 [DEBUG] [Thread-62596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:43:34.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:43:34.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:43:34.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:43:34.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:43:34.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:43:34.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:43:34.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:43:34.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:43:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:43:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.863241 -999.00  +14.80  14.73     46   +3.40 1 2 1 1 1     0    0 10.67 -25.55 ZNESw 11.4 14.7 161.3 16.6 15.3 -21.7 15.2 -20.3 15.0 -19.4 15.3 -20.6
2025-11-17T22:43:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:43:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:43:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.863241
2025-11-17T22:43:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:43:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:43:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:43:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:43:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:43:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:43:23', tmtdew=12.9, humidity=41.7, cloud=0.0, wind=13.8, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:43:23', seeing=2.89, atlas_timestamp='2025-11-17T20:43:04.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.10474999999999923, 0.21025000000000027, 0.15725000000000122, 0.22049999999999947, 0.20650000000000013, 0.3097500000000011, 0.07149999999999856, 0.13925000000000054, 0.28749999999999964, 0.2184999999999988, 0.286249999999999, 0.19399999999999906, 0.3609999999999989, 0.23724999999999952, 0.05299999999999905, 0.31700000000000017, 0.4532500000000006, 0.4405000000000001, 0.6129999999999995, 0.4347499999999975, 0.9259999999999984, 0.3902499999999982, 0.11925000000000097, 0.19175000000000075, 0.17799999999999905, 0.7355, 0.86775, 1.1325000000000003, 0.8525, 0.7020000000000008, 0.3055000000000012, 0.19700000000000095, 0.1247499999999988], zp_timestamp='2025-11-17T20:42:00')
2025-11-17T22:43:34.562 [DEBUG] [Thread-62596] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:43:34.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:43:47.247 [DEBUG] [Thread-62600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:43:49.340 [DEBUG] [Thread-62601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:43:58.102 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:04.381 [DEBUG] [Thread-62602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:05.397 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:05.398 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:19.407 [DEBUG] [Thread-62603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:34.435 [DEBUG] [Thread-62604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:47.326 [DEBUG] [Thread-62605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:49.464 [DEBUG] [Thread-62606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:54.816 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:44:57.974 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:03.055 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:04.492 [DEBUG] [Thread-62607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:05.601 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:05.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:08.411 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:19.525 [DEBUG] [Thread-62608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:27.846 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:32.236 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:34.551 [DEBUG] [Thread-62609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:41.612 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:46.014 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:47.408 [DEBUG] [Thread-62610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:49.580 [DEBUG] [Thread-62611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:49.627 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T22:45:52.925 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:45:57.323 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:04.607 [DEBUG] [Thread-62612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:05.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:05.808 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:19.636 [DEBUG] [Thread-62613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:46:19.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:46:19.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:46:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 46, 3), 12.76, 41.83, 0.0, 19.37, 14.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:46:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:46:03
2025-11-17T22:46:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:46:20.601 [DEBUG] [Thread-62614] [transport.py] [_log()] starting thread (client mode): 0xd0713490
2025-11-17T22:46:20.601 [DEBUG] [Thread-62614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:46:20.621 [DEBUG] [Thread-62614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:46:20.622 [INFO] [Thread-62614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:46:20.625 [DEBUG] [Thread-62614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:46:20.625 [DEBUG] [Thread-62614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:46:20.625 [DEBUG] [Thread-62614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:46:20.625 [DEBUG] [Thread-62614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:46:20.625 [DEBUG] [Thread-62614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:46:20.625 [DEBUG] [Thread-62614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:46:20.625 [DEBUG] [Thread-62614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:46:20.625 [DEBUG] [Thread-62614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] client lang: <none>
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] server lang: <none>
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] kex follows: False
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] Compression: none
2025-11-17T22:46:20.626 [DEBUG] [Thread-62614] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:46:20.641 [DEBUG] [Thread-62614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:46:20.642 [DEBUG] [Thread-62614] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:46:20.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:46:20.643 [DEBUG] [Thread-62614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:46:20.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:46:20.645 [DEBUG] [Thread-62614] [transport.py] [_log()] userauth is OK
2025-11-17T22:46:20.645 [DEBUG] [Thread-62614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:46:20.645 [DEBUG] [Thread-62614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:46:20.645 [DEBUG] [Thread-62614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:46:20.646 [DEBUG] [Thread-62614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:46:20.682 [INFO] [Thread-62614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:46:20.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:46:21.305 [DEBUG] [Thread-62614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:46:21.305 [DEBUG] [Thread-62614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:46:21.305 [DEBUG] [Thread-62614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:46:21.346 [DEBUG] [Thread-62614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:46:21.347 [DEBUG] [Thread-62614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:46:21.350 [DEBUG] [Thread-62614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:46:21.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:46:21.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:46:21.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:46:21.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:46:21.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:46:21.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:46:21.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:46:21.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:46:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:46:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.864977 -999.00  +14.80  11.09     46   +3.60 1 2 1 1 1     0    0 10.84 -24.68 ZNEsW 9.1 11.1 173.4 17.3 15.3 -20.9 15.2 -19.3 15.0 -18.4 15.3 -19.6
2025-11-17T22:46:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:46:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:46:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.864977
2025-11-17T22:46:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:46:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:46:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:46:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:46:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:46:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:46:03', tmtdew=12.76, humidity=41.83, cloud=0.0, wind=19.37, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:46:03', seeing=2.48, atlas_timestamp='2025-11-17T20:45:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:45:00')
2025-11-17T22:46:21.374 [DEBUG] [Thread-62614] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:46:21.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:46:21.472 [DEBUG] [Thread-62617] [transport.py] [_log()] starting thread (client mode): 0xd31cf8e0
2025-11-17T22:46:21.472 [DEBUG] [Thread-62617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:46:21.493 [DEBUG] [Thread-62617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:46:21.494 [INFO] [Thread-62617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:46:21.501 [DEBUG] [Thread-62617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] client lang: <none>
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] server lang: <none>
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] kex follows: False
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:46:21.502 [DEBUG] [Thread-62617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:46:21.503 [DEBUG] [Thread-62617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:46:21.503 [DEBUG] [Thread-62617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:46:21.503 [DEBUG] [Thread-62617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:46:21.503 [DEBUG] [Thread-62617] [transport.py] [_log()] Compression: none
2025-11-17T22:46:21.503 [DEBUG] [Thread-62617] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:46:21.560 [DEBUG] [Thread-62617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:46:21.561 [DEBUG] [Thread-62617] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:46:21.561 [DEBUG] [Thread-62617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:46:21.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:46:21.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:46:21.624 [DEBUG] [Thread-62617] [transport.py] [_log()] userauth is OK
2025-11-17T22:46:21.624 [DEBUG] [Thread-62617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:46:21.624 [DEBUG] [Thread-62617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:46:21.624 [DEBUG] [Thread-62617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:46:21.624 [DEBUG] [Thread-62617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:46:21.645 [INFO] [Thread-62617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:46:21.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:46:21.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:46:22.469 [DEBUG] [Thread-62617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:46:22.470 [DEBUG] [Thread-62617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:46:22.517 [DEBUG] [Thread-62617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:46:22.517 [DEBUG] [Thread-62617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:46:22.526 [DEBUG] [Thread-62617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:46:22.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:46:22.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:46:22.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:46:22.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:46:22.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:46:22.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:46:22.561 [DEBUG] [Thread-62617] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:46:34.669 [DEBUG] [Thread-62619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:47.460 [DEBUG] [Thread-62620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:49.716 [DEBUG] [Thread-62621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:46:52.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:46:52.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:46:53.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 46, 35), 12.78, 41.77, 0.0, 20.31, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:46:53.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:46:35
2025-11-17T22:46:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:46:53.529 [DEBUG] [Thread-62622] [transport.py] [_log()] starting thread (client mode): 0xd07566b0
2025-11-17T22:46:53.529 [DEBUG] [Thread-62622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:46:53.554 [DEBUG] [Thread-62622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:46:53.554 [INFO] [Thread-62622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:46:53.558 [DEBUG] [Thread-62622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:46:53.558 [DEBUG] [Thread-62622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:46:53.558 [DEBUG] [Thread-62622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:46:53.558 [DEBUG] [Thread-62622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:46:53.558 [DEBUG] [Thread-62622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:46:53.558 [DEBUG] [Thread-62622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] client lang: <none>
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] server lang: <none>
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] kex follows: False
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:46:53.559 [DEBUG] [Thread-62622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:46:53.560 [DEBUG] [Thread-62622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:46:53.560 [DEBUG] [Thread-62622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:46:53.560 [DEBUG] [Thread-62622] [transport.py] [_log()] Compression: none
2025-11-17T22:46:53.560 [DEBUG] [Thread-62622] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:46:53.580 [DEBUG] [Thread-62622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:46:53.581 [DEBUG] [Thread-62622] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:46:53.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:46:53.582 [DEBUG] [Thread-62622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:46:53.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:46:53.584 [DEBUG] [Thread-62622] [transport.py] [_log()] userauth is OK
2025-11-17T22:46:53.584 [DEBUG] [Thread-62622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:46:53.584 [DEBUG] [Thread-62622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:46:53.584 [DEBUG] [Thread-62622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:46:53.584 [DEBUG] [Thread-62622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:46:53.620 [INFO] [Thread-62622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:46:53.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:46:54.245 [DEBUG] [Thread-62622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:46:54.245 [DEBUG] [Thread-62622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:46:54.245 [DEBUG] [Thread-62622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:46:54.286 [DEBUG] [Thread-62622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:46:54.287 [DEBUG] [Thread-62622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:46:54.290 [DEBUG] [Thread-62622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:46:54.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:46:54.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:46:54.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:46:54.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:46:54.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:46:54.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:46:54.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:46:54.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:46:54.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:46:54.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.865672 -999.00  +14.70  11.51     46   +3.40 1 2 1 1 1     0    0 10.72 -22.59 ZNES. 11.4 11.5 172.0 14.6 15.3 -20.4 15.2 -18.9 15.0 -17.9 15.3 -19.1
2025-11-17T22:46:54.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:46:54.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:46:54.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.865672
2025-11-17T22:46:54.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:46:54.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:46:54.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:46:54.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:46:54.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:46:54.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:46:35', tmtdew=12.78, humidity=41.77, cloud=0.0, wind=20.31, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:46:35', seeing=2.48, atlas_timestamp='2025-11-17T20:46:34.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:45:00')
2025-11-17T22:46:54.316 [DEBUG] [Thread-62622] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:46:54.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:46:54.412 [DEBUG] [Thread-62625] [transport.py] [_log()] starting thread (client mode): 0xd07549d0
2025-11-17T22:46:54.412 [DEBUG] [Thread-62625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:46:54.429 [DEBUG] [Thread-62625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:46:54.429 [INFO] [Thread-62625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:46:54.436 [DEBUG] [Thread-62625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] client lang: <none>
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] server lang: <none>
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] kex follows: False
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:46:54.437 [DEBUG] [Thread-62625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:46:54.438 [DEBUG] [Thread-62625] [transport.py] [_log()] Compression: none
2025-11-17T22:46:54.438 [DEBUG] [Thread-62625] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:46:54.496 [DEBUG] [Thread-62625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:46:54.496 [DEBUG] [Thread-62625] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:46:54.497 [DEBUG] [Thread-62625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:46:54.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:46:54.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:46:54.554 [DEBUG] [Thread-62625] [transport.py] [_log()] userauth is OK
2025-11-17T22:46:54.554 [DEBUG] [Thread-62625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:46:54.554 [DEBUG] [Thread-62625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:46:54.554 [DEBUG] [Thread-62625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:46:54.554 [DEBUG] [Thread-62625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:46:54.573 [INFO] [Thread-62625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:46:54.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:46:54.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:46:55.465 [DEBUG] [Thread-62625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:46:55.465 [DEBUG] [Thread-62625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:46:55.513 [DEBUG] [Thread-62625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:46:55.513 [DEBUG] [Thread-62625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:46:55.522 [DEBUG] [Thread-62625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:46:55.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:46:55.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:46:55.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:46:55.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:46:55.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:46:55.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:46:55.557 [DEBUG] [Thread-62625] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:46:56.531 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:46:59.600 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:47:04.744 [DEBUG] [Thread-62627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:47:06.011 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:47:06.012 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:47:19.786 [DEBUG] [Thread-62628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:47:25.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:47:25.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:47:25.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:47:26.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 47, 7), 12.74, 41.88, 0.0, 19.46, 14.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:47:26.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:47:07
2025-11-17T22:47:26.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:47:26.577 [DEBUG] [Thread-62629] [transport.py] [_log()] starting thread (client mode): 0xd0711480
2025-11-17T22:47:26.577 [DEBUG] [Thread-62629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:47:26.598 [DEBUG] [Thread-62629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:47:26.598 [INFO] [Thread-62629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] client lang: <none>
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] server lang: <none>
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] kex follows: False
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] Compression: none
2025-11-17T22:47:26.602 [DEBUG] [Thread-62629] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:47:26.617 [DEBUG] [Thread-62629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:47:26.617 [DEBUG] [Thread-62629] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:47:26.617 [DEBUG] [Thread-62629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:47:26.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:47:26.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:47:26.618 [DEBUG] [Thread-62629] [transport.py] [_log()] userauth is OK
2025-11-17T22:47:26.618 [DEBUG] [Thread-62629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:47:26.618 [DEBUG] [Thread-62629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:47:26.618 [DEBUG] [Thread-62629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:47:26.618 [DEBUG] [Thread-62629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:47:26.627 [INFO] [Thread-62629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:47:26.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:47:27.282 [DEBUG] [Thread-62629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:47:27.282 [DEBUG] [Thread-62629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:47:27.282 [DEBUG] [Thread-62629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:47:27.323 [DEBUG] [Thread-62629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:47:27.323 [DEBUG] [Thread-62629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:47:27.325 [DEBUG] [Thread-62629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:47:27.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:47:27.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:47:27.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:47:27.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:47:27.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:47:27.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:47:27.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.866019 -999.00  +14.70  12.39     46   +3.50 1 2 1 1 1     0    0 10.59 -22.49 ZNES. 18.1 12.4 164.1 17.4 15.3 -20.0 15.2 -18.4 15.0 -17.5 15.3 -18.9
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.866019
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:47:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:47:07', tmtdew=12.74, humidity=41.88, cloud=0.0, wind=19.46, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:47:07', seeing=2.48, atlas_timestamp='2025-11-17T20:47:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:45:00')
2025-11-17T22:47:27.341 [DEBUG] [Thread-62629] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:47:27.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:47:27.428 [DEBUG] [Thread-62632] [transport.py] [_log()] starting thread (client mode): 0xd317c4f0
2025-11-17T22:47:27.428 [DEBUG] [Thread-62632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:47:27.446 [DEBUG] [Thread-62632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:47:27.446 [INFO] [Thread-62632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] client lang: <none>
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] server lang: <none>
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] kex follows: False
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] Compression: none
2025-11-17T22:47:27.457 [DEBUG] [Thread-62632] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:47:27.515 [DEBUG] [Thread-62632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:47:27.515 [DEBUG] [Thread-62632] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:47:27.515 [DEBUG] [Thread-62632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:47:27.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:47:27.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:47:27.571 [DEBUG] [Thread-62632] [transport.py] [_log()] userauth is OK
2025-11-17T22:47:27.572 [DEBUG] [Thread-62632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:47:27.572 [DEBUG] [Thread-62632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:47:27.572 [DEBUG] [Thread-62632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:47:27.572 [DEBUG] [Thread-62632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:47:27.586 [INFO] [Thread-62632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:47:27.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:47:27.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:47:28.431 [DEBUG] [Thread-62632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:47:28.431 [DEBUG] [Thread-62632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:47:28.478 [DEBUG] [Thread-62632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:47:28.478 [DEBUG] [Thread-62632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:47:28.487 [DEBUG] [Thread-62632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:47:28.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:47:28.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:47:28.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:47:28.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:47:28.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:47:28.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:47:28.521 [DEBUG] [Thread-62632] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:47:34.814 [DEBUG] [Thread-62634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:47:47.520 [DEBUG] [Thread-62635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:47:49.854 [DEBUG] [Thread-62636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:47:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:47:58.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:47:58.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:47:59.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 47, 39), 12.8, 41.85, 0.0, 18.51, 14.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:47:59.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:47:39
2025-11-17T22:47:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:47:59.485 [DEBUG] [Thread-62637] [transport.py] [_log()] starting thread (client mode): 0xd0710ac0
2025-11-17T22:47:59.485 [DEBUG] [Thread-62637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:47:59.505 [DEBUG] [Thread-62637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:47:59.505 [INFO] [Thread-62637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] client lang: <none>
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] server lang: <none>
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] kex follows: False
2025-11-17T22:47:59.509 [DEBUG] [Thread-62637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:47:59.510 [DEBUG] [Thread-62637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:47:59.510 [DEBUG] [Thread-62637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:47:59.510 [DEBUG] [Thread-62637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:47:59.510 [DEBUG] [Thread-62637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:47:59.510 [DEBUG] [Thread-62637] [transport.py] [_log()] Compression: none
2025-11-17T22:47:59.510 [DEBUG] [Thread-62637] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:47:59.530 [DEBUG] [Thread-62637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:47:59.530 [DEBUG] [Thread-62637] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:47:59.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:47:59.531 [DEBUG] [Thread-62637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:47:59.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:47:59.533 [DEBUG] [Thread-62637] [transport.py] [_log()] userauth is OK
2025-11-17T22:47:59.533 [DEBUG] [Thread-62637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:47:59.533 [DEBUG] [Thread-62637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:47:59.533 [DEBUG] [Thread-62637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:47:59.533 [DEBUG] [Thread-62637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:47:59.557 [INFO] [Thread-62637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:47:59.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:48:00.199 [DEBUG] [Thread-62637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:48:00.200 [DEBUG] [Thread-62637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:48:00.200 [DEBUG] [Thread-62637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:48:00.240 [DEBUG] [Thread-62637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:48:00.240 [DEBUG] [Thread-62637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:48:00.243 [DEBUG] [Thread-62637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:48:00.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:48:00.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:48:00.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:48:00.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:48:00.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:48:00.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:48:00.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:48:00.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:48:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:48:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.866366 -999.00  +14.70  15.13     47   +3.50 1 2 1 1 1     0    0 10.75 -22.73 ZNES. 16.1 15.1 171.6 19.7 15.3 -19.6 15.2 -18.2 15.0 -17.4 15.3 -18.6
2025-11-17T22:48:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:48:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:48:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.866366
2025-11-17T22:48:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:48:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:48:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:48:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:48:00.264 [DEBUG] [Thread-62637] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:48:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:48:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:47:39', tmtdew=12.8, humidity=41.85, cloud=0.0, wind=18.51, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:47:39', seeing=2.48, atlas_timestamp='2025-11-17T20:47:34.022', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:45:00')
2025-11-17T22:48:00.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:48:00.364 [DEBUG] [Thread-62640] [transport.py] [_log()] starting thread (client mode): 0xd0712830
2025-11-17T22:48:00.364 [DEBUG] [Thread-62640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:48:00.378 [DEBUG] [Thread-62640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:48:00.378 [INFO] [Thread-62640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:48:00.386 [DEBUG] [Thread-62640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:48:00.386 [DEBUG] [Thread-62640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:48:00.386 [DEBUG] [Thread-62640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:48:00.386 [DEBUG] [Thread-62640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:48:00.386 [DEBUG] [Thread-62640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:48:00.386 [DEBUG] [Thread-62640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:48:00.386 [DEBUG] [Thread-62640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:48:00.386 [DEBUG] [Thread-62640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:48:00.387 [DEBUG] [Thread-62640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:48:00.387 [DEBUG] [Thread-62640] [transport.py] [_log()] client lang: <none>
2025-11-17T22:48:00.387 [DEBUG] [Thread-62640] [transport.py] [_log()] server lang: <none>
2025-11-17T22:48:00.387 [DEBUG] [Thread-62640] [transport.py] [_log()] kex follows: False
2025-11-17T22:48:00.387 [DEBUG] [Thread-62640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:48:00.387 [DEBUG] [Thread-62640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:48:00.387 [DEBUG] [Thread-62640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:48:00.387 [DEBUG] [Thread-62640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:48:00.388 [DEBUG] [Thread-62640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:48:00.388 [DEBUG] [Thread-62640] [transport.py] [_log()] Compression: none
2025-11-17T22:48:00.388 [DEBUG] [Thread-62640] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:48:00.447 [DEBUG] [Thread-62640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:48:00.448 [DEBUG] [Thread-62640] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:48:00.448 [DEBUG] [Thread-62640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:48:00.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:48:00.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:48:00.504 [DEBUG] [Thread-62640] [transport.py] [_log()] userauth is OK
2025-11-17T22:48:00.504 [DEBUG] [Thread-62640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:48:00.504 [DEBUG] [Thread-62640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:48:00.504 [DEBUG] [Thread-62640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:48:00.504 [DEBUG] [Thread-62640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:48:00.528 [INFO] [Thread-62640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:48:00.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:48:00.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:48:01.345 [DEBUG] [Thread-62640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:48:01.345 [DEBUG] [Thread-62640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:48:01.393 [DEBUG] [Thread-62640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:48:01.393 [DEBUG] [Thread-62640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:48:01.401 [DEBUG] [Thread-62640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:48:01.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:48: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')
2025-11-17T22:48:01.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:48:01.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:48:01.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:48:01.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:48:01.432 [DEBUG] [Thread-62640] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:48:04.878 [DEBUG] [Thread-62642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:48:06.215 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:48:06.216 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:48:19.909 [DEBUG] [Thread-62643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:48:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:48:31.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:48: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
2025-11-17T22:48:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 48, 11), 12.76, 41.98, 0.0, 18.51, 14.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:48:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:48:11
2025-11-17T22:48:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:48:32.390 [DEBUG] [Thread-62644] [transport.py] [_log()] starting thread (client mode): 0xd31343a0
2025-11-17T22:48:32.390 [DEBUG] [Thread-62644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:48:32.410 [DEBUG] [Thread-62644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:48:32.411 [INFO] [Thread-62644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] client lang: <none>
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] server lang: <none>
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] kex follows: False
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] Compression: none
2025-11-17T22:48:32.414 [DEBUG] [Thread-62644] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:48:32.431 [DEBUG] [Thread-62644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:48:32.431 [DEBUG] [Thread-62644] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:48:32.432 [DEBUG] [Thread-62644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:48:32.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:48:32.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:48:32.434 [DEBUG] [Thread-62644] [transport.py] [_log()] userauth is OK
2025-11-17T22:48:32.434 [DEBUG] [Thread-62644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:48:32.434 [DEBUG] [Thread-62644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:48:32.434 [DEBUG] [Thread-62644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:48:32.434 [DEBUG] [Thread-62644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:48:32.455 [INFO] [Thread-62644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:48:32.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:48:33.103 [DEBUG] [Thread-62644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:48:33.103 [DEBUG] [Thread-62644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:48:33.104 [DEBUG] [Thread-62644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:48:33.144 [DEBUG] [Thread-62644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:48:33.145 [DEBUG] [Thread-62644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:48:33.147 [DEBUG] [Thread-62644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:48:33.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:48:33.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:48:33.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:48:33.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:48:33.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:48:33.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:48:33.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:48:33.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:48:33.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:48:33.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.866713 -999.00  +14.70  15.01     47   +3.50 1 2 1 1 1     0    0 10.75 -22.43 ZNESw 13.9 15.0 175.8 22.6 15.3 -19.4 15.2 -18.0 15.0 -17.1 15.3 -18.4
2025-11-17T22:48:33.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:48:33.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:48:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.866713
2025-11-17T22:48:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:48:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:48:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:48:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:48:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:48:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:48:11', tmtdew=12.76, humidity=41.98, cloud=0.0, wind=18.51, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:48:11', seeing=2.48, atlas_timestamp='2025-11-17T20:48:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:45:00')
2025-11-17T22:48:33.173 [DEBUG] [Thread-62644] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:48:33.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:48:33.269 [DEBUG] [Thread-62647] [transport.py] [_log()] starting thread (client mode): 0xd3134d90
2025-11-17T22:48:33.269 [DEBUG] [Thread-62647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:48:33.289 [DEBUG] [Thread-62647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:48:33.290 [INFO] [Thread-62647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] client lang: <none>
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] server lang: <none>
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] kex follows: False
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:48:33.300 [DEBUG] [Thread-62647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:48:33.301 [DEBUG] [Thread-62647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:48:33.301 [DEBUG] [Thread-62647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:48:33.301 [DEBUG] [Thread-62647] [transport.py] [_log()] Compression: none
2025-11-17T22:48:33.301 [DEBUG] [Thread-62647] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:48:33.362 [DEBUG] [Thread-62647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:48:33.362 [DEBUG] [Thread-62647] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:48:33.363 [DEBUG] [Thread-62647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:48:33.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:48:33.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:48:33.426 [DEBUG] [Thread-62647] [transport.py] [_log()] userauth is OK
2025-11-17T22:48:33.426 [DEBUG] [Thread-62647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:48:33.427 [DEBUG] [Thread-62647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:48:33.427 [DEBUG] [Thread-62647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:48:33.427 [DEBUG] [Thread-62647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:48:33.450 [INFO] [Thread-62647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:48:33.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:48:33.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:48:34.271 [DEBUG] [Thread-62647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:48:34.271 [DEBUG] [Thread-62647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:48:34.321 [DEBUG] [Thread-62647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:48:34.321 [DEBUG] [Thread-62647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:48:34.330 [DEBUG] [Thread-62647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:48:34.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:48:34.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:48:34.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:48:34.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:48:34.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:48:34.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:48:34.363 [DEBUG] [Thread-62647] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:48:34.936 [DEBUG] [Thread-62649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:48:47.578 [DEBUG] [Thread-62650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:48:49.987 [DEBUG] [Thread-62651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:49:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:49:04.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:49:04.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:49:05.015 [DEBUG] [Thread-62652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:49:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 48, 43), 12.71, 41.96, 0.0, 22.06, 14.78, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:49:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:48:43
2025-11-17T22:49:05.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:49:05.310 [DEBUG] [Thread-62653] [transport.py] [_log()] starting thread (client mode): 0xd3137d90
2025-11-17T22:49:05.310 [DEBUG] [Thread-62653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:49:05.321 [DEBUG] [Thread-62653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:49:05.322 [INFO] [Thread-62653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] client lang: <none>
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] server lang: <none>
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] kex follows: False
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:49:05.324 [DEBUG] [Thread-62653] [transport.py] [_log()] Compression: none
2025-11-17T22:49:05.325 [DEBUG] [Thread-62653] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:49:05.338 [DEBUG] [Thread-62653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:49:05.339 [DEBUG] [Thread-62653] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:49:05.339 [DEBUG] [Thread-62653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:49:05.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:49:05.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:49:05.340 [DEBUG] [Thread-62653] [transport.py] [_log()] userauth is OK
2025-11-17T22:49:05.341 [DEBUG] [Thread-62653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:49:05.341 [DEBUG] [Thread-62653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:49:05.341 [DEBUG] [Thread-62653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:49:05.341 [DEBUG] [Thread-62653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:49:05.364 [INFO] [Thread-62653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:49:05.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:49:06.005 [DEBUG] [Thread-62653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:49:06.006 [DEBUG] [Thread-62653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:49:06.006 [DEBUG] [Thread-62653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:49:06.046 [DEBUG] [Thread-62653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:49:06.047 [DEBUG] [Thread-62653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:49:06.050 [DEBUG] [Thread-62653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:49:06.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:49:06.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:49:06.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:49:06.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:49:06.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:49:06.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:49:06.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:49:06.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:49:06.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:49:06.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.867060 -999.00  +14.70  10.96     47   +3.50 1 2 1 1 1     0    0 10.83 -22.53 ZNESw 18.5 11.0 176.2 15.5 15.3 -19.2 15.2 -17.8 15.1 -17.2 15.3 -18.4
2025-11-17T22:49:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:49:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:49:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.867060
2025-11-17T22:49:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:49:06.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:49:06.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:49:06.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:49:06.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:49:06.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:48:43', tmtdew=12.71, humidity=41.96, cloud=0.0, wind=22.06, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:48:43', seeing=2.22, atlas_timestamp='2025-11-17T20:48:33.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:45:00')
2025-11-17T22:49:06.076 [DEBUG] [Thread-62653] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:49:06.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:49:06.175 [DEBUG] [Thread-62656] [transport.py] [_log()] starting thread (client mode): 0xd3134850
2025-11-17T22:49:06.175 [DEBUG] [Thread-62656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:49:06.191 [DEBUG] [Thread-62656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:49:06.191 [INFO] [Thread-62656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:49:06.198 [DEBUG] [Thread-62656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] client lang: <none>
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] server lang: <none>
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] kex follows: False
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] Compression: none
2025-11-17T22:49:06.199 [DEBUG] [Thread-62656] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:49:06.255 [DEBUG] [Thread-62656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:49:06.256 [DEBUG] [Thread-62656] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:49:06.256 [DEBUG] [Thread-62656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:49:06.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:49:06.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:49:06.312 [DEBUG] [Thread-62656] [transport.py] [_log()] userauth is OK
2025-11-17T22:49:06.312 [DEBUG] [Thread-62656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:49:06.312 [DEBUG] [Thread-62656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:49:06.312 [DEBUG] [Thread-62656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:49:06.312 [DEBUG] [Thread-62656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:49:06.331 [INFO] [Thread-62656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:49:06.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:49:06.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:49:06.418 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:49:06.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:49:07.164 [DEBUG] [Thread-62656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:49:07.164 [DEBUG] [Thread-62656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:49:07.212 [DEBUG] [Thread-62656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:49:07.212 [DEBUG] [Thread-62656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:49:07.221 [DEBUG] [Thread-62656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:49:07.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:49:07.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:49:07.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:49:07.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:49:07.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:49:07.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:49:07.254 [DEBUG] [Thread-62656] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:49:20.040 [DEBUG] [Thread-62658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:49:35.082 [DEBUG] [Thread-62659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:49:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:49:37.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:49:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:49:37.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 49, 15), 12.72, 41.95, 0.0, 22.43, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:49:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:49:15
2025-11-17T22:49:38.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:49:38.213 [DEBUG] [Thread-62660] [transport.py] [_log()] starting thread (client mode): 0xd3134520
2025-11-17T22:49:38.213 [DEBUG] [Thread-62660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:49:38.232 [DEBUG] [Thread-62660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:49:38.232 [INFO] [Thread-62660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:49:38.235 [DEBUG] [Thread-62660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] client lang: <none>
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] server lang: <none>
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] kex follows: False
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:49:38.236 [DEBUG] [Thread-62660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:49:38.237 [DEBUG] [Thread-62660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:49:38.237 [DEBUG] [Thread-62660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:49:38.237 [DEBUG] [Thread-62660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:49:38.237 [DEBUG] [Thread-62660] [transport.py] [_log()] Compression: none
2025-11-17T22:49:38.237 [DEBUG] [Thread-62660] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:49:38.254 [DEBUG] [Thread-62660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:49:38.254 [DEBUG] [Thread-62660] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:49:38.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:49:38.255 [DEBUG] [Thread-62660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:49:38.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:49:38.257 [DEBUG] [Thread-62660] [transport.py] [_log()] userauth is OK
2025-11-17T22:49:38.257 [DEBUG] [Thread-62660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:49:38.257 [DEBUG] [Thread-62660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:49:38.257 [DEBUG] [Thread-62660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:49:38.257 [DEBUG] [Thread-62660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:49:38.275 [INFO] [Thread-62660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:49:38.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:49:38.863 [DEBUG] [Thread-62660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:49:38.863 [DEBUG] [Thread-62660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:49:38.864 [DEBUG] [Thread-62660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:49:38.904 [DEBUG] [Thread-62660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:49:38.904 [DEBUG] [Thread-62660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:49:38.907 [DEBUG] [Thread-62660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:49:38.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:49:38.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:49:38.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:49:38.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:49:38.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:49:38.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:49:38.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:49:38.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:49:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:49:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.867408 -999.00  +14.70  16.47     47   +3.60 1 2 1 1 1     0    0 10.73 -23.39 zNE.w 15.5 16.5 166.4 18.5 15.3 -19.0 15.2 -17.7 15.0 -17.3 15.3 -18.4
2025-11-17T22:49:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:49:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:49:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.867408
2025-11-17T22:49:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:49:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:49:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:49:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:49:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:49:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:49:15', tmtdew=12.72, humidity=41.95, cloud=0.0, wind=22.43, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:49:15', seeing=2.22, atlas_timestamp='2025-11-17T20:49:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:48:00')
2025-11-17T22:49:38.937 [DEBUG] [Thread-62660] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:49:39.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:49:39.034 [DEBUG] [Thread-62663] [transport.py] [_log()] starting thread (client mode): 0xd317cac0
2025-11-17T22:49:39.034 [DEBUG] [Thread-62663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:49:39.049 [DEBUG] [Thread-62663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:49:39.049 [INFO] [Thread-62663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] client lang: <none>
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] server lang: <none>
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] kex follows: False
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:49:39.057 [DEBUG] [Thread-62663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:49:39.058 [DEBUG] [Thread-62663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:49:39.058 [DEBUG] [Thread-62663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:49:39.058 [DEBUG] [Thread-62663] [transport.py] [_log()] Compression: none
2025-11-17T22:49:39.058 [DEBUG] [Thread-62663] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:49:39.116 [DEBUG] [Thread-62663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:49:39.116 [DEBUG] [Thread-62663] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:49:39.117 [DEBUG] [Thread-62663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:49:39.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:49:39.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:49:39.172 [DEBUG] [Thread-62663] [transport.py] [_log()] userauth is OK
2025-11-17T22:49:39.172 [DEBUG] [Thread-62663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:49:39.172 [DEBUG] [Thread-62663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:49:39.173 [DEBUG] [Thread-62663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:49:39.173 [DEBUG] [Thread-62663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:49:39.192 [INFO] [Thread-62663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:49:39.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:49:39.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:49:40.028 [DEBUG] [Thread-62663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:49:40.028 [DEBUG] [Thread-62663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:49:40.075 [DEBUG] [Thread-62663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:49:40.075 [DEBUG] [Thread-62663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:49:40.084 [DEBUG] [Thread-62663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:49:40.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:49:40.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:49:40.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:49:40.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:49:40.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:49:40.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:49:40.118 [DEBUG] [Thread-62663] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:49:47.657 [DEBUG] [Thread-62665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:49:50.110 [DEBUG] [Thread-62666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:05.146 [DEBUG] [Thread-62667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:06.621 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:06.622 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:50:10.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:50:10.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:50:10.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 49, 47), 12.76, 41.96, 0.0, 20.08, 14.75, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:50:10.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:49:47
2025-11-17T22:50:10.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:50:11.068 [DEBUG] [Thread-62668] [transport.py] [_log()] starting thread (client mode): 0xd317ead0
2025-11-17T22:50:11.068 [DEBUG] [Thread-62668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:50:11.088 [DEBUG] [Thread-62668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:50:11.088 [INFO] [Thread-62668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] client lang: <none>
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] server lang: <none>
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] kex follows: False
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] Compression: none
2025-11-17T22:50:11.090 [DEBUG] [Thread-62668] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:50:11.100 [DEBUG] [Thread-62668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:50:11.101 [DEBUG] [Thread-62668] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:50:11.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:50:11.102 [DEBUG] [Thread-62668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:50:11.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:50:11.103 [DEBUG] [Thread-62668] [transport.py] [_log()] userauth is OK
2025-11-17T22:50:11.103 [DEBUG] [Thread-62668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:50:11.103 [DEBUG] [Thread-62668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:50:11.103 [DEBUG] [Thread-62668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:50:11.104 [DEBUG] [Thread-62668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:50:11.127 [INFO] [Thread-62668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:50:11.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:50:11.685 [DEBUG] [Thread-62668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:50:11.685 [DEBUG] [Thread-62668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:50:11.686 [DEBUG] [Thread-62668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:50:11.726 [DEBUG] [Thread-62668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:50:11.726 [DEBUG] [Thread-62668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:50:11.729 [DEBUG] [Thread-62668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:50:11.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:50:11.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:50:11.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:50:11.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:50:11.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:50:11.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:50:11.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:50:11.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:50:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:50:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.868102 -999.00  +14.70  14.25     47   +3.50 1 2 1 1 1     0    0 10.73 -23.49 zNE.W 11.1 14.2 178.4 21.0 15.3 -19.1 15.2 -17.9 15.0 -17.5 15.3 -18.5
2025-11-17T22:50:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:50:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:50:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.868102
2025-11-17T22:50:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:50:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:50:11.754 [DEBUG] [Thread-62668] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:50:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:50:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:50:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:50:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:49:47', tmtdew=12.76, humidity=41.96, cloud=0.0, wind=20.08, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:49:47', seeing=2.22, atlas_timestamp='2025-11-17T20:50:04.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:48:00')
2025-11-17T22:50:11.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:50:11.850 [DEBUG] [Thread-62671] [transport.py] [_log()] starting thread (client mode): 0xd0713370
2025-11-17T22:50:11.850 [DEBUG] [Thread-62671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:50:11.866 [DEBUG] [Thread-62671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:50:11.866 [INFO] [Thread-62671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:50:11.873 [DEBUG] [Thread-62671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:50:11.873 [DEBUG] [Thread-62671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] client lang: <none>
2025-11-17T22:50:11.874 [DEBUG] [Thread-62671] [transport.py] [_log()] server lang: <none>
2025-11-17T22:50:11.875 [DEBUG] [Thread-62671] [transport.py] [_log()] kex follows: False
2025-11-17T22:50:11.875 [DEBUG] [Thread-62671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:50:11.875 [DEBUG] [Thread-62671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:50:11.875 [DEBUG] [Thread-62671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:50:11.875 [DEBUG] [Thread-62671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:50:11.875 [DEBUG] [Thread-62671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:50:11.875 [DEBUG] [Thread-62671] [transport.py] [_log()] Compression: none
2025-11-17T22:50:11.875 [DEBUG] [Thread-62671] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:50:11.932 [DEBUG] [Thread-62671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:50:11.932 [DEBUG] [Thread-62671] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:50:11.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:50:11.933 [DEBUG] [Thread-62671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:50:11.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:50:11.988 [DEBUG] [Thread-62671] [transport.py] [_log()] userauth is OK
2025-11-17T22:50:11.989 [DEBUG] [Thread-62671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:50:11.989 [DEBUG] [Thread-62671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:50:11.989 [DEBUG] [Thread-62671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:50:11.989 [DEBUG] [Thread-62671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:50:12.009 [INFO] [Thread-62671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:50:12.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:50:12.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:50:12.867 [DEBUG] [Thread-62671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:50:12.867 [DEBUG] [Thread-62671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:50:12.915 [DEBUG] [Thread-62671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:50:12.915 [DEBUG] [Thread-62671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:50:12.924 [DEBUG] [Thread-62671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:50:12.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:50:12.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:50:12.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:50:12.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:50:12.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:50:12.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:50:12.959 [DEBUG] [Thread-62671] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:50:20.178 [DEBUG] [Thread-62673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:23.399 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:28.827 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:31.894 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:35.218 [DEBUG] [Thread-62674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:38.275 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:42.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:50:42.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:50:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:50:43.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 50, 19), 12.75, 41.98, 0.0, 18.83, 14.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:50:43.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:50:19
2025-11-17T22:50:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:50:43.912 [DEBUG] [Thread-62675] [transport.py] [_log()] starting thread (client mode): 0xd317f640
2025-11-17T22:50:43.912 [DEBUG] [Thread-62675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:50:43.934 [DEBUG] [Thread-62675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:50:43.934 [INFO] [Thread-62675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] client lang: <none>
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] server lang: <none>
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] kex follows: False
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:50:43.937 [DEBUG] [Thread-62675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:50:43.938 [DEBUG] [Thread-62675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:50:43.938 [DEBUG] [Thread-62675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:50:43.938 [DEBUG] [Thread-62675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:50:43.938 [DEBUG] [Thread-62675] [transport.py] [_log()] Compression: none
2025-11-17T22:50:43.938 [DEBUG] [Thread-62675] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:50:43.955 [DEBUG] [Thread-62675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:50:43.956 [DEBUG] [Thread-62675] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:50:43.956 [DEBUG] [Thread-62675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:50:43.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:50:43.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:50:43.958 [DEBUG] [Thread-62675] [transport.py] [_log()] userauth is OK
2025-11-17T22:50:43.958 [DEBUG] [Thread-62675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:50:43.958 [DEBUG] [Thread-62675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:50:43.958 [DEBUG] [Thread-62675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:50:43.958 [DEBUG] [Thread-62675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:50:43.982 [INFO] [Thread-62675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:50:43.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:50:44.633 [DEBUG] [Thread-62675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:50:44.633 [DEBUG] [Thread-62675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:50:44.633 [DEBUG] [Thread-62675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:50:44.675 [DEBUG] [Thread-62675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:50:44.675 [DEBUG] [Thread-62675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:50:44.678 [DEBUG] [Thread-62675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:50:44.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:50:44.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:50:44.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:50:44.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:50:44.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:50:44.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:50:44.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:50:44.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:50:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:50:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.868102 -999.00  +14.70  14.25     47   +3.50 1 2 1 1 1     0    0 10.73 -23.49 zNE.W 11.1 14.2 178.4 21.0 15.3 -19.1 15.2 -17.9 15.0 -17.5 15.3 -18.5
2025-11-17T22:50:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:50:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:50:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.868102
2025-11-17T22:50:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:50:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:50:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:50:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:50:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:50:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:50:19', tmtdew=12.75, humidity=41.98, cloud=0.0, wind=18.83, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:50:19', seeing=2.22, atlas_timestamp='2025-11-17T20:50:04.013', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:48:00')
2025-11-17T22:50:44.703 [DEBUG] [Thread-62675] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:50:44.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:50:44.799 [DEBUG] [Thread-62678] [transport.py] [_log()] starting thread (client mode): 0xd317ded0
2025-11-17T22:50:44.799 [DEBUG] [Thread-62678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:50:44.814 [DEBUG] [Thread-62678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:50:44.814 [INFO] [Thread-62678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] client lang: <none>
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] server lang: <none>
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] kex follows: False
2025-11-17T22:50:44.822 [DEBUG] [Thread-62678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:50:44.823 [DEBUG] [Thread-62678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:50:44.823 [DEBUG] [Thread-62678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:50:44.823 [DEBUG] [Thread-62678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:50:44.823 [DEBUG] [Thread-62678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:50:44.823 [DEBUG] [Thread-62678] [transport.py] [_log()] Compression: none
2025-11-17T22:50:44.823 [DEBUG] [Thread-62678] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:50:44.883 [DEBUG] [Thread-62678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:50:44.884 [DEBUG] [Thread-62678] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:50:44.884 [DEBUG] [Thread-62678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:50:44.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:50:44.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:50:44.940 [DEBUG] [Thread-62678] [transport.py] [_log()] userauth is OK
2025-11-17T22:50:44.940 [DEBUG] [Thread-62678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:50:44.940 [DEBUG] [Thread-62678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:50:44.940 [DEBUG] [Thread-62678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:50:44.940 [DEBUG] [Thread-62678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:50:44.960 [INFO] [Thread-62678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:50:44.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:50:44.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:50:45.809 [DEBUG] [Thread-62678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:50:45.809 [DEBUG] [Thread-62678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:50:45.857 [DEBUG] [Thread-62678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:50:45.857 [DEBUG] [Thread-62678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:50:45.866 [DEBUG] [Thread-62678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:50:45.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:50:45.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:50:45.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:50:45.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:50:45.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:50:45.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:50:45.900 [DEBUG] [Thread-62678] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:50:47.730 [DEBUG] [Thread-62680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:50:50.254 [DEBUG] [Thread-62681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:51:05.294 [DEBUG] [Thread-62682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:51:06.824 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:51:06.825 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:51:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:51:15.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:51:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:51:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 50, 51), 12.64, 42.53, 0.0, 20.43, 14.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:51:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:50:51
2025-11-17T22:51:16.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:51:16.911 [DEBUG] [Thread-62683] [transport.py] [_log()] starting thread (client mode): 0xd3134a60
2025-11-17T22:51:16.911 [DEBUG] [Thread-62683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:51:16.931 [DEBUG] [Thread-62683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:51:16.931 [INFO] [Thread-62683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:51:16.934 [DEBUG] [Thread-62683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:51:16.934 [DEBUG] [Thread-62683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:51:16.934 [DEBUG] [Thread-62683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:51:16.934 [DEBUG] [Thread-62683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:51:16.934 [DEBUG] [Thread-62683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:51:16.934 [DEBUG] [Thread-62683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] client lang: <none>
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] server lang: <none>
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] kex follows: False
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] Compression: none
2025-11-17T22:51:16.935 [DEBUG] [Thread-62683] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:51:16.951 [DEBUG] [Thread-62683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:51:16.951 [DEBUG] [Thread-62683] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:51:16.952 [DEBUG] [Thread-62683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:51:16.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:51:16.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:51:16.952 [DEBUG] [Thread-62683] [transport.py] [_log()] userauth is OK
2025-11-17T22:51:16.952 [DEBUG] [Thread-62683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:51:16.952 [DEBUG] [Thread-62683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:51:16.952 [DEBUG] [Thread-62683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:51:16.952 [DEBUG] [Thread-62683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:51:16.963 [INFO] [Thread-62683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:51:16.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:51:17.708 [DEBUG] [Thread-62683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:51:17.708 [DEBUG] [Thread-62683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:51:17.708 [DEBUG] [Thread-62683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:51:17.749 [DEBUG] [Thread-62683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:51:17.749 [DEBUG] [Thread-62683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:51:17.751 [DEBUG] [Thread-62683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:51:17.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:51:17.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:51:17.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:51:17.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:51:17.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:51:17.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:51:17.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.868449 -999.00  +14.70  15.85     47   +3.50 1 2 1 1 1     0    0 10.66 -22.92 zNE.W 13.2 15.8 166.2 18.0 15.3 -19.0 15.2 -17.9 15.0 -17.5 15.3 -18.4
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.868449
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:51:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:50:51', tmtdew=12.64, humidity=42.53, cloud=0.0, wind=20.43, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:50:51', seeing=2.08, atlas_timestamp='2025-11-17T20:50:33.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:48:00')
2025-11-17T22:51:17.769 [DEBUG] [Thread-62683] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:51:17.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:51:17.855 [DEBUG] [Thread-62686] [transport.py] [_log()] starting thread (client mode): 0xd3134970
2025-11-17T22:51:17.856 [DEBUG] [Thread-62686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:51:17.870 [DEBUG] [Thread-62686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:51:17.870 [INFO] [Thread-62686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:51:17.878 [DEBUG] [Thread-62686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:51:17.878 [DEBUG] [Thread-62686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] client lang: <none>
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] server lang: <none>
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] kex follows: False
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] Compression: none
2025-11-17T22:51:17.879 [DEBUG] [Thread-62686] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:51:17.934 [DEBUG] [Thread-62686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:51:17.934 [DEBUG] [Thread-62686] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:51:17.935 [DEBUG] [Thread-62686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:51:17.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:51:17.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:51:17.992 [DEBUG] [Thread-62686] [transport.py] [_log()] userauth is OK
2025-11-17T22:51:17.992 [DEBUG] [Thread-62686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:51:17.992 [DEBUG] [Thread-62686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:51:17.992 [DEBUG] [Thread-62686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:51:17.992 [DEBUG] [Thread-62686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:51:18.007 [INFO] [Thread-62686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:51:18.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:51:18.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:51:18.841 [DEBUG] [Thread-62686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:51:18.841 [DEBUG] [Thread-62686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:51:18.889 [DEBUG] [Thread-62686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:51:18.889 [DEBUG] [Thread-62686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:51:18.897 [DEBUG] [Thread-62686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:51:18.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:51:18.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:51:18.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:51:18.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:51:18.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:51:18.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:51:18.928 [DEBUG] [Thread-62686] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:51:20.325 [DEBUG] [Thread-62688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:51:35.367 [DEBUG] [Thread-62689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:51:47.809 [DEBUG] [Thread-62690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:51:48.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:51:48.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:51:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:51:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 51, 23), 12.63, 42.56, 0.0, 19.52, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:51:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:51:23
2025-11-17T22:51:49.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:51:49.889 [DEBUG] [Thread-62691] [transport.py] [_log()] starting thread (client mode): 0xd317c9d0
2025-11-17T22:51:49.889 [DEBUG] [Thread-62691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:51:49.910 [DEBUG] [Thread-62691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:51:49.910 [INFO] [Thread-62691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:51:49.913 [DEBUG] [Thread-62691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] client lang: <none>
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] server lang: <none>
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] kex follows: False
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] Compression: none
2025-11-17T22:51:49.914 [DEBUG] [Thread-62691] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:51:49.931 [DEBUG] [Thread-62691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:51:49.932 [DEBUG] [Thread-62691] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:51:49.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:51:49.933 [DEBUG] [Thread-62691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:51:49.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:51:49.935 [DEBUG] [Thread-62691] [transport.py] [_log()] userauth is OK
2025-11-17T22:51:49.935 [DEBUG] [Thread-62691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:51:49.935 [DEBUG] [Thread-62691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:51:49.935 [DEBUG] [Thread-62691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:51:49.936 [DEBUG] [Thread-62691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:51:49.953 [INFO] [Thread-62691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:51:49.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:51:50.396 [DEBUG] [Thread-62693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:51:50.561 [DEBUG] [Thread-62691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:51:50.561 [DEBUG] [Thread-62691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:51:50.561 [DEBUG] [Thread-62691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:51:50.602 [DEBUG] [Thread-62691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:51:50.602 [DEBUG] [Thread-62691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:51:50.605 [DEBUG] [Thread-62691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:51:50.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:51:50.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:51:50.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:51:50.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:51:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:51:50.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:51:50.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:51:50.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:51:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:51:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.868797 -999.00  +14.70  12.38     47   +3.60 1 2 1 1 1     0    0 10.70 -21.73 ZNEsW 14.8 12.4 169.4 14.3 15.3 -19.0 15.2 -17.8 15.0 -17.2 15.3 -18.5
2025-11-17T22:51:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:51:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:51:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.868797
2025-11-17T22:51:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:51:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:51:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:51:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:51:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:51:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:51:23', tmtdew=12.63, humidity=42.56, cloud=0.0, wind=19.52, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:51:23', seeing=2.08, atlas_timestamp='2025-11-17T20:51:04.061', atlas_cloud=2, atlas_rain=1, zp_data=[0.48775000000000013, 0.43074999999999974, 0.9347500000000002, 0.17549999999999955, 0.18549999999999933, 0.45775000000000077, 0.5999999999999996, 0.36125000000000185, 0.5484999999999989, 0.5060000000000002, 0.7482499999999996, 0.266, 0.6890000000000001, 0.20324999999999882, 0.7589999999999995, 0.5769999999999991, 0.1462500000000002, 0.2550000000000008, 0.8699999999999992, 1.209249999999999, nan, 0.8882499999999984, 0.6182500000000006, 0.1067499999999999, 0.10749999999999993, 0.38149999999999995, 0.9967500000000005, 1.4465000000000003, nan, 1.075000000000001, 0.3850000000000007, 0.10400000000000098, 0.14974999999999916], zp_timestamp='2025-11-17T20:48:00')
2025-11-17T22:51:50.629 [DEBUG] [Thread-62691] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:51:50.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:51:50.731 [DEBUG] [Thread-62695] [transport.py] [_log()] starting thread (client mode): 0xd31cc220
2025-11-17T22:51:50.731 [DEBUG] [Thread-62695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:51:50.746 [DEBUG] [Thread-62695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:51:50.746 [INFO] [Thread-62695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:51:50.753 [DEBUG] [Thread-62695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] client lang: <none>
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] server lang: <none>
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] kex follows: False
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] Compression: none
2025-11-17T22:51:50.754 [DEBUG] [Thread-62695] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:51:50.812 [DEBUG] [Thread-62695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:51:50.812 [DEBUG] [Thread-62695] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:51:50.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:51:50.814 [DEBUG] [Thread-62695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:51:50.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:51:50.868 [DEBUG] [Thread-62695] [transport.py] [_log()] userauth is OK
2025-11-17T22:51:50.868 [DEBUG] [Thread-62695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:51:50.868 [DEBUG] [Thread-62695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:51:50.868 [DEBUG] [Thread-62695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:51:50.868 [DEBUG] [Thread-62695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:51:50.885 [INFO] [Thread-62695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:51:50.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:51:50.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:51:51.740 [DEBUG] [Thread-62695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:51:51.740 [DEBUG] [Thread-62695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:51:51.788 [DEBUG] [Thread-62695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:51:51.788 [DEBUG] [Thread-62695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:51:51.797 [DEBUG] [Thread-62695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:51:51.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:51:51.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:51:51.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:51:51.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:51:51.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:51:51.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:51:51.832 [DEBUG] [Thread-62695] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:52:05.424 [DEBUG] [Thread-62697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:52:07.028 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:52:07.029 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:52:20.470 [DEBUG] [Thread-62698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:52:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:52:21.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:52:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:52:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 51, 55), 12.65, 42.5, 0.0, 20.33, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:52:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:51:55
2025-11-17T22:52:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:52:22.780 [DEBUG] [Thread-62699] [transport.py] [_log()] starting thread (client mode): 0xd31cdcc0
2025-11-17T22:52:22.780 [DEBUG] [Thread-62699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:52:22.801 [DEBUG] [Thread-62699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:52:22.801 [INFO] [Thread-62699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:52:22.804 [DEBUG] [Thread-62699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:52:22.804 [DEBUG] [Thread-62699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:52:22.804 [DEBUG] [Thread-62699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] client lang: <none>
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] server lang: <none>
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] kex follows: False
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:52:22.805 [DEBUG] [Thread-62699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:52:22.806 [DEBUG] [Thread-62699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:52:22.806 [DEBUG] [Thread-62699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:52:22.806 [DEBUG] [Thread-62699] [transport.py] [_log()] Compression: none
2025-11-17T22:52:22.806 [DEBUG] [Thread-62699] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:52:22.824 [DEBUG] [Thread-62699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:52:22.825 [DEBUG] [Thread-62699] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:52:22.825 [DEBUG] [Thread-62699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:52:22.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:52:22.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:52:22.826 [DEBUG] [Thread-62699] [transport.py] [_log()] userauth is OK
2025-11-17T22:52:22.826 [DEBUG] [Thread-62699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:52:22.826 [DEBUG] [Thread-62699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:52:22.826 [DEBUG] [Thread-62699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:52:22.826 [DEBUG] [Thread-62699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:52:22.847 [INFO] [Thread-62699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:52:22.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:52:23.606 [DEBUG] [Thread-62699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:52:23.606 [DEBUG] [Thread-62699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:52:23.607 [DEBUG] [Thread-62699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:52:23.647 [DEBUG] [Thread-62699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:52:23.648 [DEBUG] [Thread-62699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:52:23.650 [DEBUG] [Thread-62699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:52:23.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:52:23.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:52:23.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:52:23.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:52:23.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:52:23.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:52:23.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:52:23.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:52:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:52:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.869144 -999.00  +14.70  17.35     47   +3.70 1 2 1 1 1     0    0 10.64 -21.68 ZNE.. 14.7 17.4 172.4 22.2 15.4 -19.1 15.2 -17.8 15.0 -17.2 15.3 -18.2
2025-11-17T22:52:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:52:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:52:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.869144
2025-11-17T22:52:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:52:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:52:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:52:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:52:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:52:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:51:55', tmtdew=12.65, humidity=42.5, cloud=0.0, wind=20.33, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:51:55', seeing=2.07, atlas_timestamp='2025-11-17T20:51:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[1.1637499999999994, 0.6862500000000011, nan, 1.1784999999999997, 0.9875000000000007, 0.6182500000000006, 1.3469999999999995, 1.0747500000000008, 0.42799999999999905, 0.24399999999999977, 2.1762499999999996, 2.0584999999999996, 1.468, 0.8682499999999997, 1.0625, 0.18499999999999872, 0.11925000000000097, 0.3595000000000006, 1.5619999999999994, 1.9957499999999992, 1.5924999999999985, 0.6287499999999984, 0.6072500000000005, 0.5487500000000001, 0.7704999999999993, 0.44650000000000034, 0.94625, 1.1115000000000004, nan, 1.3125000000000009, 0.5070000000000014, 0.2710000000000008, 0.11025000000000063], zp_timestamp='2025-11-17T20:51:00')
2025-11-17T22:52:23.673 [DEBUG] [Thread-62699] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:52:23.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:52:35.495 [DEBUG] [Thread-62702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:52:47.889 [DEBUG] [Thread-62703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:52:50.539 [DEBUG] [Thread-62704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:05.573 [DEBUG] [Thread-62705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:07.231 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:07.232 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:20.604 [DEBUG] [Thread-62706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:35.627 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:35.632 [DEBUG] [Thread-62707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:38.749 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:43.810 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:47.966 [DEBUG] [Thread-62708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:49.203 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:53:50.662 [DEBUG] [Thread-62709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:05.686 [DEBUG] [Thread-62710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:07.437 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:07.438 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:08.596 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:13.027 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:20.717 [DEBUG] [Thread-62711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:32.360 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:35.749 [DEBUG] [Thread-62712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:36.754 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:38.011 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T22:54:43.468 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:47.820 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:48.023 [DEBUG] [Thread-62713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:54:50.774 [DEBUG] [Thread-62714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:05.808 [DEBUG] [Thread-62715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:07.641 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:07.642 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:55:08.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:55:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:55:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 54, 35), 12.48, 43.18, 0.0, 20.4, 14.68, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:55:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:54:35
2025-11-17T22:55:08.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:55:09.041 [DEBUG] [Thread-62716] [transport.py] [_log()] starting thread (client mode): 0xd07111e0
2025-11-17T22:55:09.042 [DEBUG] [Thread-62716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:55:09.061 [DEBUG] [Thread-62716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:55:09.061 [INFO] [Thread-62716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] client lang: <none>
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] server lang: <none>
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] kex follows: False
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] Compression: none
2025-11-17T22:55:09.065 [DEBUG] [Thread-62716] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:55:09.080 [DEBUG] [Thread-62716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:55:09.080 [DEBUG] [Thread-62716] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:55:09.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:55:09.080 [DEBUG] [Thread-62716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:55:09.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:55:09.081 [DEBUG] [Thread-62716] [transport.py] [_log()] userauth is OK
2025-11-17T22:55:09.081 [DEBUG] [Thread-62716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:55:09.081 [DEBUG] [Thread-62716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:55:09.081 [DEBUG] [Thread-62716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:55:09.081 [DEBUG] [Thread-62716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:55:09.092 [INFO] [Thread-62716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:55:09.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:55:11.590 [DEBUG] [Thread-62716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:55:11.590 [DEBUG] [Thread-62716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:55:11.590 [DEBUG] [Thread-62716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:55:11.631 [DEBUG] [Thread-62716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:55:11.631 [DEBUG] [Thread-62716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:55:11.633 [DEBUG] [Thread-62716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:55:11.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:55:11.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:55:11.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:55:11.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:55:11.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:55:11.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:55:11.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.871227 -999.00  +14.60  14.18     48   +3.80 1 2 1 1 1     0    0 10.67 -25.29 zNES. 14.8 14.2 158.0 20.7 15.3 -18.2 15.2 -17.0 15.0 -16.4 15.3 -17.2
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.871227
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:55:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:54:35', tmtdew=12.48, humidity=43.18, cloud=0.0, wind=20.4, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:55:07', seeing=1.78, atlas_timestamp='2025-11-17T20:54:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[1.1637499999999994, 0.6862500000000011, nan, 1.1784999999999997, 0.9875000000000007, 0.6182500000000006, 1.3469999999999995, 1.0747500000000008, 0.42799999999999905, 0.24399999999999977, 2.1762499999999996, 2.0584999999999996, 1.468, 0.8682499999999997, 1.0625, 0.18499999999999872, 0.11925000000000097, 0.3595000000000006, 1.5619999999999994, 1.9957499999999992, 1.5924999999999985, 0.6287499999999984, 0.6072500000000005, 0.5487500000000001, 0.7704999999999993, 0.44650000000000034, 0.94625, 1.1115000000000004, nan, 1.3125000000000009, 0.5070000000000014, 0.2710000000000008, 0.11025000000000063], zp_timestamp='2025-11-17T20:51:00')
2025-11-17T22:55:11.704 [DEBUG] [Thread-62716] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:55:11.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:55:11.790 [DEBUG] [Thread-62719] [transport.py] [_log()] starting thread (client mode): 0xd0711360
2025-11-17T22:55:11.790 [DEBUG] [Thread-62719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:55:11.805 [DEBUG] [Thread-62719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:55:11.805 [INFO] [Thread-62719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] client lang: <none>
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] server lang: <none>
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] kex follows: False
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] Compression: none
2025-11-17T22:55:11.813 [DEBUG] [Thread-62719] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:55:11.870 [DEBUG] [Thread-62719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:55:11.871 [DEBUG] [Thread-62719] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:55:11.871 [DEBUG] [Thread-62719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:55:11.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:55:11.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:55:11.928 [DEBUG] [Thread-62719] [transport.py] [_log()] userauth is OK
2025-11-17T22:55:11.928 [DEBUG] [Thread-62719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:55:11.928 [DEBUG] [Thread-62719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:55:11.928 [DEBUG] [Thread-62719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:55:11.928 [DEBUG] [Thread-62719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:55:11.942 [INFO] [Thread-62719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:55:11.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:55:11.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:55:12.853 [DEBUG] [Thread-62719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:55:12.853 [DEBUG] [Thread-62719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:55:12.902 [DEBUG] [Thread-62719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:55:12.902 [DEBUG] [Thread-62719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:55:12.911 [DEBUG] [Thread-62719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:55:12.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:55:12.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:55:12.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:55:12.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:55:12.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:55:12.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:55:12.943 [DEBUG] [Thread-62719] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:55:20.833 [DEBUG] [Thread-62721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:35.875 [DEBUG] [Thread-62722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:55:42.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:55:42.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:55:43.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 55, 39), 12.47, 42.71, 0.0, 19.96, 14.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:55:43.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:55:39
2025-11-17T22:55:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:55:43.903 [DEBUG] [Thread-62723] [transport.py] [_log()] starting thread (client mode): 0xd317d810
2025-11-17T22:55:43.903 [DEBUG] [Thread-62723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:55:43.924 [DEBUG] [Thread-62723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:55:43.924 [INFO] [Thread-62723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] client lang: <none>
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] server lang: <none>
2025-11-17T22:55:43.927 [DEBUG] [Thread-62723] [transport.py] [_log()] kex follows: False
2025-11-17T22:55:43.928 [DEBUG] [Thread-62723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:55:43.928 [DEBUG] [Thread-62723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:55:43.928 [DEBUG] [Thread-62723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:55:43.928 [DEBUG] [Thread-62723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:55:43.928 [DEBUG] [Thread-62723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:55:43.928 [DEBUG] [Thread-62723] [transport.py] [_log()] Compression: none
2025-11-17T22:55:43.928 [DEBUG] [Thread-62723] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:55:43.944 [DEBUG] [Thread-62723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:55:43.944 [DEBUG] [Thread-62723] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:55:43.945 [DEBUG] [Thread-62723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:55:43.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:55:43.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:55:43.947 [DEBUG] [Thread-62723] [transport.py] [_log()] userauth is OK
2025-11-17T22:55:43.947 [DEBUG] [Thread-62723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:55:43.947 [DEBUG] [Thread-62723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:55:43.947 [DEBUG] [Thread-62723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:55:43.947 [DEBUG] [Thread-62723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:55:43.971 [INFO] [Thread-62723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:55:43.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:55:44.628 [DEBUG] [Thread-62723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:55:44.628 [DEBUG] [Thread-62723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:55:44.629 [DEBUG] [Thread-62723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:55:44.669 [DEBUG] [Thread-62723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:55:44.670 [DEBUG] [Thread-62723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:55:44.672 [DEBUG] [Thread-62723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:55:44.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:55:44.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:55:44.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:55:44.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:55:44.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:55:44.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:55:44.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:55:44.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:55:44.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:55:44.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.871574 -999.00  +14.60  11.43     48   +3.80 1 2 1 1 1     0    0 10.52 -27.83 zNES. 13.3 11.4 156.6 16.9 15.3 -18.0 15.2 -16.8 15.0 -16.5 15.3 -17.3
2025-11-17T22:55:44.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:55:44.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:55:44.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.871574
2025-11-17T22:55:44.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:55:44.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:55:44.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:55:44.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:55:44.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:55:44.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:55:39', tmtdew=12.47, humidity=42.71, cloud=0.0, wind=19.96, temperature=14.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:55:39', seeing=1.78, atlas_timestamp='2025-11-17T20:55:03.994', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:54:00')
2025-11-17T22:55:44.697 [DEBUG] [Thread-62723] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:55:44.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:55:44.793 [DEBUG] [Thread-62726] [transport.py] [_log()] starting thread (client mode): 0xd3136dd0
2025-11-17T22:55:44.793 [DEBUG] [Thread-62726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:55:44.812 [DEBUG] [Thread-62726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:55:44.812 [INFO] [Thread-62726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:55:44.819 [DEBUG] [Thread-62726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:55:44.820 [DEBUG] [Thread-62726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:55:44.820 [DEBUG] [Thread-62726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:55:44.820 [DEBUG] [Thread-62726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:55:44.820 [DEBUG] [Thread-62726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:55:44.820 [DEBUG] [Thread-62726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:55:44.820 [DEBUG] [Thread-62726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:55:44.820 [DEBUG] [Thread-62726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:55:44.820 [DEBUG] [Thread-62726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:55:44.821 [DEBUG] [Thread-62726] [transport.py] [_log()] client lang: <none>
2025-11-17T22:55:44.821 [DEBUG] [Thread-62726] [transport.py] [_log()] server lang: <none>
2025-11-17T22:55:44.821 [DEBUG] [Thread-62726] [transport.py] [_log()] kex follows: False
2025-11-17T22:55:44.821 [DEBUG] [Thread-62726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:55:44.821 [DEBUG] [Thread-62726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:55:44.821 [DEBUG] [Thread-62726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:55:44.821 [DEBUG] [Thread-62726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:55:44.821 [DEBUG] [Thread-62726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:55:44.822 [DEBUG] [Thread-62726] [transport.py] [_log()] Compression: none
2025-11-17T22:55:44.822 [DEBUG] [Thread-62726] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:55:44.880 [DEBUG] [Thread-62726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:55:44.880 [DEBUG] [Thread-62726] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:55:44.881 [DEBUG] [Thread-62726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:55:44.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:55:44.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:55:44.940 [DEBUG] [Thread-62726] [transport.py] [_log()] userauth is OK
2025-11-17T22:55:44.940 [DEBUG] [Thread-62726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:55:44.940 [DEBUG] [Thread-62726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:55:44.940 [DEBUG] [Thread-62726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:55:44.940 [DEBUG] [Thread-62726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:55:44.960 [INFO] [Thread-62726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:55:44.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:55:44.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:55:45.804 [DEBUG] [Thread-62726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:55:45.804 [DEBUG] [Thread-62726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:55:45.853 [DEBUG] [Thread-62726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:55:45.853 [DEBUG] [Thread-62726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:55:45.862 [DEBUG] [Thread-62726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:55:45.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:55:45.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:55:45.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:55:45.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:55:45.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:55:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:55:45.895 [DEBUG] [Thread-62726] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:55:46.780 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:48.102 [DEBUG] [Thread-62728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:49.842 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:55:50.900 [DEBUG] [Thread-62729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:05.942 [DEBUG] [Thread-62730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:07.843 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:07.844 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:11.270 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:56:15.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:56:15.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:56:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 56, 11), 12.43, 42.85, 0.0, 19.53, 14.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:56:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:56:11
2025-11-17T22:56:16.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:56:16.844 [DEBUG] [Thread-62731] [transport.py] [_log()] starting thread (client mode): 0xd317c790
2025-11-17T22:56:16.844 [DEBUG] [Thread-62731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:56:16.865 [DEBUG] [Thread-62731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:56:16.865 [INFO] [Thread-62731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:56:16.868 [DEBUG] [Thread-62731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:56:16.868 [DEBUG] [Thread-62731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:56:16.868 [DEBUG] [Thread-62731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:56:16.868 [DEBUG] [Thread-62731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:56:16.868 [DEBUG] [Thread-62731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] client lang: <none>
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] server lang: <none>
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] kex follows: False
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] Compression: none
2025-11-17T22:56:16.869 [DEBUG] [Thread-62731] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:56:16.886 [DEBUG] [Thread-62731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:56:16.886 [DEBUG] [Thread-62731] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:56:16.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:56:16.887 [DEBUG] [Thread-62731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:56:16.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:56:16.889 [DEBUG] [Thread-62731] [transport.py] [_log()] userauth is OK
2025-11-17T22:56:16.889 [DEBUG] [Thread-62731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:56:16.889 [DEBUG] [Thread-62731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:56:16.889 [DEBUG] [Thread-62731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:56:16.890 [DEBUG] [Thread-62731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:56:16.914 [INFO] [Thread-62731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:56:16.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:56:17.576 [DEBUG] [Thread-62731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:56:17.576 [DEBUG] [Thread-62731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:56:17.576 [DEBUG] [Thread-62731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:56:17.618 [DEBUG] [Thread-62731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:56:17.618 [DEBUG] [Thread-62731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:56:17.621 [DEBUG] [Thread-62731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:56:17.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:56:17.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:56:17.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:56:17.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:56:17.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:56:17.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:56:17.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:56:17.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:56:17.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:56:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.871921 -999.00  +14.60  11.55     47   +3.70 1 2 1 1 1     0    0 10.46 -29.18 zNES. 20.0 11.6 157.4 16.0 15.3 -17.9 15.2 -16.7 15.0 -16.5 15.3 -17.3
2025-11-17T22:56:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:56:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:56:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.871921
2025-11-17T22:56:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:56:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:56:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:56:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:56:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:56:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:56:11', tmtdew=12.43, humidity=42.85, cloud=0.0, wind=19.53, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:56:11', seeing=1.74, atlas_timestamp='2025-11-17T20:55:33.974', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:54:00')
2025-11-17T22:56:17.645 [DEBUG] [Thread-62731] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:56:17.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:56:17.752 [DEBUG] [Thread-62734] [transport.py] [_log()] starting thread (client mode): 0xd31ccc40
2025-11-17T22:56:17.752 [DEBUG] [Thread-62734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:56:17.768 [DEBUG] [Thread-62734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:56:17.769 [INFO] [Thread-62734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:56:17.776 [DEBUG] [Thread-62734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] client lang: <none>
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] server lang: <none>
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] kex follows: False
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:56:17.777 [DEBUG] [Thread-62734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:56:17.778 [DEBUG] [Thread-62734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:56:17.778 [DEBUG] [Thread-62734] [transport.py] [_log()] Compression: none
2025-11-17T22:56:17.778 [DEBUG] [Thread-62734] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:56:17.840 [DEBUG] [Thread-62734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:56:17.840 [DEBUG] [Thread-62734] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:56:17.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:56:17.841 [DEBUG] [Thread-62734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:56:17.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:56:17.896 [DEBUG] [Thread-62734] [transport.py] [_log()] userauth is OK
2025-11-17T22:56:17.896 [DEBUG] [Thread-62734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:56:17.896 [DEBUG] [Thread-62734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:56:17.896 [DEBUG] [Thread-62734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:56:17.896 [DEBUG] [Thread-62734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:56:17.920 [INFO] [Thread-62734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:56:17.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:56:17.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:56:18.760 [DEBUG] [Thread-62734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:56:18.760 [DEBUG] [Thread-62734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:56:18.807 [DEBUG] [Thread-62734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:56:18.807 [DEBUG] [Thread-62734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:56:18.816 [DEBUG] [Thread-62734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:56:18.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:56:18.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:56:18.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:56:18.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:56:18.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:56:18.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:56:18.850 [DEBUG] [Thread-62734] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:56:20.972 [DEBUG] [Thread-62736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:36.013 [DEBUG] [Thread-62737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:48.177 [DEBUG] [Thread-62738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:48.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:56:48.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:56:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:56:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 56, 43), 12.42, 42.86, 0.0, 20.8, 14.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:56:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:56:43
2025-11-17T22:56:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:56:49.815 [DEBUG] [Thread-62739] [transport.py] [_log()] starting thread (client mode): 0xd317c940
2025-11-17T22:56:49.815 [DEBUG] [Thread-62739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:56:49.835 [DEBUG] [Thread-62739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:56:49.836 [INFO] [Thread-62739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:56:49.838 [DEBUG] [Thread-62739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:56:49.838 [DEBUG] [Thread-62739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] client lang: <none>
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] server lang: <none>
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] kex follows: False
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] Compression: none
2025-11-17T22:56:49.839 [DEBUG] [Thread-62739] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:56:49.853 [DEBUG] [Thread-62739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:56:49.854 [DEBUG] [Thread-62739] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:56:49.854 [DEBUG] [Thread-62739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:56:49.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:56:49.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:56:49.856 [DEBUG] [Thread-62739] [transport.py] [_log()] userauth is OK
2025-11-17T22:56:49.857 [DEBUG] [Thread-62739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:56:49.857 [DEBUG] [Thread-62739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:56:49.857 [DEBUG] [Thread-62739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:56:49.857 [DEBUG] [Thread-62739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:56:49.875 [INFO] [Thread-62739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:56:49.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:56:50.481 [DEBUG] [Thread-62739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:56:50.482 [DEBUG] [Thread-62739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:56:50.482 [DEBUG] [Thread-62739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:56:50.522 [DEBUG] [Thread-62739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:56:50.522 [DEBUG] [Thread-62739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:56:50.525 [DEBUG] [Thread-62739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:56:50.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:56:50.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:56:50.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:56:50.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:56:50.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:56:50.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:56:50.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:56:50.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:56:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:56:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.872269 -999.00  +14.60  13.90     48   +3.70 1 2 1 1 1     0    0 10.63 -28.39 ZNEs. 16.6 13.9 156.4 23.0 15.3 -17.8 15.2 -16.7 15.0 -16.4 15.3 -17.0
2025-11-17T22:56:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:56:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:56:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.872269
2025-11-17T22:56:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:56:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:56:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:56:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:56:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:56:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:56:43', tmtdew=12.42, humidity=42.86, cloud=0.0, wind=20.8, temperature=14.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:56:43', seeing=1.74, atlas_timestamp='2025-11-17T20:56:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:54:00')
2025-11-17T22:56:50.549 [DEBUG] [Thread-62739] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:56:50.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:56:50.643 [DEBUG] [Thread-62742] [transport.py] [_log()] starting thread (client mode): 0xd0712b90
2025-11-17T22:56:50.643 [DEBUG] [Thread-62742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:56:50.659 [DEBUG] [Thread-62742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:56:50.659 [INFO] [Thread-62742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:56:50.667 [DEBUG] [Thread-62742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:56:50.667 [DEBUG] [Thread-62742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:56:50.667 [DEBUG] [Thread-62742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:56:50.667 [DEBUG] [Thread-62742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:56:50.667 [DEBUG] [Thread-62742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:56:50.667 [DEBUG] [Thread-62742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] client lang: <none>
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] server lang: <none>
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] kex follows: False
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] Compression: none
2025-11-17T22:56:50.668 [DEBUG] [Thread-62742] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:56:50.724 [DEBUG] [Thread-62742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:56:50.725 [DEBUG] [Thread-62742] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:56:50.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:56:50.725 [DEBUG] [Thread-62742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:56:50.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:56:50.784 [DEBUG] [Thread-62742] [transport.py] [_log()] userauth is OK
2025-11-17T22:56:50.784 [DEBUG] [Thread-62742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:56:50.785 [DEBUG] [Thread-62742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:56:50.785 [DEBUG] [Thread-62742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:56:50.785 [DEBUG] [Thread-62742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:56:50.804 [INFO] [Thread-62742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:56:50.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:56:50.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:56:51.043 [DEBUG] [Thread-62744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:56:51.626 [DEBUG] [Thread-62742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:56:51.626 [DEBUG] [Thread-62742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:56:51.673 [DEBUG] [Thread-62742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:56:51.673 [DEBUG] [Thread-62742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:56:51.682 [DEBUG] [Thread-62742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:56:51.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:56:51.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:56:51.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:56:51.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:56:51.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:56:51.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:56:51.715 [DEBUG] [Thread-62742] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:57:06.079 [DEBUG] [Thread-62745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:57:08.048 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:57:08.049 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:57:21.105 [DEBUG] [Thread-62746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:57:21.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:57:21.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:57:21.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:57:22.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 57, 15), 12.42, 42.9, 0.0, 20.27, 14.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:57:22.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:57:15
2025-11-17T22:57:22.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:57:22.661 [DEBUG] [Thread-62747] [transport.py] [_log()] starting thread (client mode): 0xd31cd3f0
2025-11-17T22:57:22.662 [DEBUG] [Thread-62747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:57:22.682 [DEBUG] [Thread-62747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:57:22.682 [INFO] [Thread-62747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:57:22.685 [DEBUG] [Thread-62747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:57:22.685 [DEBUG] [Thread-62747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:57:22.685 [DEBUG] [Thread-62747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:57:22.685 [DEBUG] [Thread-62747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] client lang: <none>
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] server lang: <none>
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] kex follows: False
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:57:22.686 [DEBUG] [Thread-62747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:57:22.687 [DEBUG] [Thread-62747] [transport.py] [_log()] Compression: none
2025-11-17T22:57:22.687 [DEBUG] [Thread-62747] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:57:22.707 [DEBUG] [Thread-62747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:57:22.708 [DEBUG] [Thread-62747] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:57:22.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:57:22.709 [DEBUG] [Thread-62747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:57:22.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:57:22.711 [DEBUG] [Thread-62747] [transport.py] [_log()] userauth is OK
2025-11-17T22:57:22.712 [DEBUG] [Thread-62747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:57:22.712 [DEBUG] [Thread-62747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:57:22.712 [DEBUG] [Thread-62747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:57:22.712 [DEBUG] [Thread-62747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:57:22.733 [INFO] [Thread-62747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:57:22.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:57:23.356 [DEBUG] [Thread-62747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:57:23.356 [DEBUG] [Thread-62747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:57:23.356 [DEBUG] [Thread-62747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:57:23.396 [DEBUG] [Thread-62747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:57:23.396 [DEBUG] [Thread-62747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:57:23.399 [DEBUG] [Thread-62747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:57:23.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:57:23.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:57:23.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:57:23.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:57:23.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:57:23.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:57:23.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:57:23.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:57:23.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:57:23.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.872963 -999.00  +14.70  14.29     48   +3.90 1 2 1 1 1     0    0 10.21 -33.96 ZNESw 11.9 14.3 151.2 20.6 15.4 -17.7 15.2 -16.8 15.1 -16.5 15.3 -16.9
2025-11-17T22:57:23.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:57:23.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:57:23.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.872963
2025-11-17T22:57:23.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:57:23.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:57:23.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:57:23.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:57:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:57:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:57:15', tmtdew=12.42, humidity=42.9, cloud=0.0, wind=20.27, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:57:15', seeing=1.29, atlas_timestamp='2025-11-17T20:57:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:54:00')
2025-11-17T22:57:23.424 [DEBUG] [Thread-62747] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:57:23.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:57:23.520 [DEBUG] [Thread-62750] [transport.py] [_log()] starting thread (client mode): 0xd3160070
2025-11-17T22:57:23.520 [DEBUG] [Thread-62750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:57:23.535 [DEBUG] [Thread-62750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:57:23.536 [INFO] [Thread-62750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] client lang: <none>
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] server lang: <none>
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] kex follows: False
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:57:23.543 [DEBUG] [Thread-62750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:57:23.544 [DEBUG] [Thread-62750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:57:23.544 [DEBUG] [Thread-62750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:57:23.544 [DEBUG] [Thread-62750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:57:23.544 [DEBUG] [Thread-62750] [transport.py] [_log()] Compression: none
2025-11-17T22:57:23.544 [DEBUG] [Thread-62750] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:57:23.600 [DEBUG] [Thread-62750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:57:23.601 [DEBUG] [Thread-62750] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:57:23.601 [DEBUG] [Thread-62750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:57:23.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:57:23.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:57:23.661 [DEBUG] [Thread-62750] [transport.py] [_log()] userauth is OK
2025-11-17T22:57:23.661 [DEBUG] [Thread-62750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:57:23.661 [DEBUG] [Thread-62750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:57:23.661 [DEBUG] [Thread-62750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:57:23.661 [DEBUG] [Thread-62750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:57:23.680 [INFO] [Thread-62750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:57:23.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:57:23.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:57:24.510 [DEBUG] [Thread-62750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:57:24.510 [DEBUG] [Thread-62750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:57:24.558 [DEBUG] [Thread-62750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:57:24.558 [DEBUG] [Thread-62750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:57:24.567 [DEBUG] [Thread-62750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:57:24.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:57:24.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:57:24.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:57:24.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:57:24.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:57:24.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:57:24.601 [DEBUG] [Thread-62750] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:57:36.135 [DEBUG] [Thread-62752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:57:48.231 [DEBUG] [Thread-62753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:57:51.172 [DEBUG] [Thread-62754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:57:54.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:57:54.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:57:54.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:57:55.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 57, 47), 12.42, 43.38, 0.0, 19.89, 14.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:57:55.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:57:47
2025-11-17T22:57:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:57:55.550 [DEBUG] [Thread-62755] [transport.py] [_log()] starting thread (client mode): 0xd3136830
2025-11-17T22:57:55.551 [DEBUG] [Thread-62755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:57:55.571 [DEBUG] [Thread-62755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:57:55.572 [INFO] [Thread-62755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:57:55.574 [DEBUG] [Thread-62755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] client lang: <none>
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] server lang: <none>
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] kex follows: False
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] Compression: none
2025-11-17T22:57:55.575 [DEBUG] [Thread-62755] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:57:55.591 [DEBUG] [Thread-62755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:57:55.592 [DEBUG] [Thread-62755] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:57:55.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:57:55.592 [DEBUG] [Thread-62755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:57:55.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:57:55.597 [DEBUG] [Thread-62755] [transport.py] [_log()] userauth is OK
2025-11-17T22:57:55.597 [DEBUG] [Thread-62755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:57:55.597 [DEBUG] [Thread-62755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:57:55.597 [DEBUG] [Thread-62755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:57:55.597 [DEBUG] [Thread-62755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:57:55.621 [INFO] [Thread-62755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:57:55.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:57:56.225 [DEBUG] [Thread-62755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:57:56.226 [DEBUG] [Thread-62755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:57:56.226 [DEBUG] [Thread-62755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:57:56.266 [DEBUG] [Thread-62755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:57:56.266 [DEBUG] [Thread-62755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:57:56.269 [DEBUG] [Thread-62755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:57:56.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:57:56.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:57:56.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:57:56.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:57:56.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:57:56.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:57:56.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:57:56.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:57:56.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:57:56.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.873310 -999.00  +14.70  10.49     48   +3.90 1 2 1 1 1     0    0 10.53 -36.74 ZNESw 13.8 10.5 150.2 21.2 15.3 -17.7 15.2 -16.8 15.0 -16.6 15.3 -17.1
2025-11-17T22:57:56.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:57:56.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:57:56.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.873310
2025-11-17T22:57:56.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:57:56.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:57:56.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:57:56.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:57:56.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:57:56.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:57:47', tmtdew=12.42, humidity=43.38, cloud=0.0, wind=19.89, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:57:47', seeing=1.29, atlas_timestamp='2025-11-17T20:57:33.984', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:54:00')
2025-11-17T22:57:56.290 [DEBUG] [Thread-62755] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:57:56.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:57:56.388 [DEBUG] [Thread-62758] [transport.py] [_log()] starting thread (client mode): 0xd0702ad0
2025-11-17T22:57:56.388 [DEBUG] [Thread-62758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:57:56.402 [DEBUG] [Thread-62758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:57:56.402 [INFO] [Thread-62758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:57:56.410 [DEBUG] [Thread-62758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:57:56.410 [DEBUG] [Thread-62758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:57:56.410 [DEBUG] [Thread-62758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] client lang: <none>
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] server lang: <none>
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] kex follows: False
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:57:56.411 [DEBUG] [Thread-62758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:57:56.412 [DEBUG] [Thread-62758] [transport.py] [_log()] Compression: none
2025-11-17T22:57:56.412 [DEBUG] [Thread-62758] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:57:56.468 [DEBUG] [Thread-62758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:57:56.469 [DEBUG] [Thread-62758] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:57:56.469 [DEBUG] [Thread-62758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:57:56.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:57:56.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:57:56.525 [DEBUG] [Thread-62758] [transport.py] [_log()] userauth is OK
2025-11-17T22:57:56.525 [DEBUG] [Thread-62758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:57:56.525 [DEBUG] [Thread-62758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:57:56.525 [DEBUG] [Thread-62758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:57:56.525 [DEBUG] [Thread-62758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:57:56.544 [INFO] [Thread-62758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:57:56.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:57:56.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:57:57.388 [DEBUG] [Thread-62758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:57:57.389 [DEBUG] [Thread-62758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:57:57.436 [DEBUG] [Thread-62758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:57:57.436 [DEBUG] [Thread-62758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:57:57.445 [DEBUG] [Thread-62758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:57:57.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:57:57.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:57:57.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:57:57.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:57:57.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:57:57.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:57:57.478 [DEBUG] [Thread-62758] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:58:06.202 [DEBUG] [Thread-62760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:58:08.255 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:58:08.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:58:21.244 [DEBUG] [Thread-62761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:58:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:58:27.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:58:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:58:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 58, 19), 12.4, 43.45, 0.0, 19.64, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:58:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:58:19
2025-11-17T22:58:28.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:58:28.414 [DEBUG] [Thread-62762] [transport.py] [_log()] starting thread (client mode): 0xd3136170
2025-11-17T22:58:28.414 [DEBUG] [Thread-62762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:58:28.434 [DEBUG] [Thread-62762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:58:28.434 [INFO] [Thread-62762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] client lang: <none>
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] server lang: <none>
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] kex follows: False
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:58:28.437 [DEBUG] [Thread-62762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:58:28.438 [DEBUG] [Thread-62762] [transport.py] [_log()] Compression: none
2025-11-17T22:58:28.438 [DEBUG] [Thread-62762] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:58:28.456 [DEBUG] [Thread-62762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:58:28.457 [DEBUG] [Thread-62762] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:58:28.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:58:28.457 [DEBUG] [Thread-62762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:58:28.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:58:28.459 [DEBUG] [Thread-62762] [transport.py] [_log()] userauth is OK
2025-11-17T22:58:28.459 [DEBUG] [Thread-62762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:58:28.460 [DEBUG] [Thread-62762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:58:28.460 [DEBUG] [Thread-62762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:58:28.460 [DEBUG] [Thread-62762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:58:28.476 [INFO] [Thread-62762] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:58:28.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:58:29.106 [DEBUG] [Thread-62762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:58:29.106 [DEBUG] [Thread-62762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:58:29.107 [DEBUG] [Thread-62762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:58:29.147 [DEBUG] [Thread-62762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:58:29.148 [DEBUG] [Thread-62762] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:58:29.151 [DEBUG] [Thread-62762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:58:29.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:58:29.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:58:29.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:58:29.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:58:29.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:58:29.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:58:29.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:58:29.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:58:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:58:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.873658 -999.00  +14.70  11.57     48   +3.80 1 2 1 1 1     0    0 10.00 -38.46 ZNESw 16.0 11.6 158.4 17.0 15.3 -17.6 15.2 -16.8 15.0 -16.6 15.3 -17.0
2025-11-17T22:58:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:58:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:58:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.873658
2025-11-17T22:58:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:58:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:58:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:58:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:58:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:58:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:58:19', tmtdew=12.4, humidity=43.45, cloud=0.0, wind=19.64, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:58:19', seeing=1.29, atlas_timestamp='2025-11-17T20:58:04.051', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:57:00')
2025-11-17T22:58:29.175 [DEBUG] [Thread-62762] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:58:29.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:58:29.268 [DEBUG] [Thread-62765] [transport.py] [_log()] starting thread (client mode): 0xd07032b0
2025-11-17T22:58:29.269 [DEBUG] [Thread-62765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:58:29.283 [DEBUG] [Thread-62765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:58:29.283 [INFO] [Thread-62765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:58:29.290 [DEBUG] [Thread-62765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:58:29.290 [DEBUG] [Thread-62765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] client lang: <none>
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] server lang: <none>
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] kex follows: False
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] Compression: none
2025-11-17T22:58:29.291 [DEBUG] [Thread-62765] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:58:29.348 [DEBUG] [Thread-62765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:58:29.349 [DEBUG] [Thread-62765] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:58:29.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:58:29.350 [DEBUG] [Thread-62765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:58:29.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:58:29.405 [DEBUG] [Thread-62765] [transport.py] [_log()] userauth is OK
2025-11-17T22:58:29.405 [DEBUG] [Thread-62765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:58:29.405 [DEBUG] [Thread-62765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:58:29.405 [DEBUG] [Thread-62765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:58:29.405 [DEBUG] [Thread-62765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:58:29.421 [INFO] [Thread-62765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:58:29.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:58:29.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:58:30.219 [DEBUG] [Thread-62765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:58:30.219 [DEBUG] [Thread-62765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:58:30.267 [DEBUG] [Thread-62765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:58:30.267 [DEBUG] [Thread-62765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:58:30.276 [DEBUG] [Thread-62765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:58:30.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:58:30.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:58:30.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:58:30.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:58:30.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:58:30.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:58:30.310 [DEBUG] [Thread-62765] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:58:36.272 [DEBUG] [Thread-62767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:58:48.304 [DEBUG] [Thread-62768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:58:51.319 [DEBUG] [Thread-62769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:59:00.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:59:00.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:59:00.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:59:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 58, 51), 12.37, 43.38, 0.0, 19.78, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:59:00.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:58:51
2025-11-17T22:59:01.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:59:01.273 [DEBUG] [Thread-62770] [transport.py] [_log()] starting thread (client mode): 0xd31ceaa0
2025-11-17T22:59:01.273 [DEBUG] [Thread-62770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:59:01.294 [DEBUG] [Thread-62770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:59:01.294 [INFO] [Thread-62770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:59:01.297 [DEBUG] [Thread-62770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:59:01.297 [DEBUG] [Thread-62770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:59:01.297 [DEBUG] [Thread-62770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:59:01.297 [DEBUG] [Thread-62770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:59:01.297 [DEBUG] [Thread-62770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:59:01.297 [DEBUG] [Thread-62770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:59:01.297 [DEBUG] [Thread-62770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] client lang: <none>
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] server lang: <none>
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] kex follows: False
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] Compression: none
2025-11-17T22:59:01.298 [DEBUG] [Thread-62770] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:59:01.314 [DEBUG] [Thread-62770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:59:01.314 [DEBUG] [Thread-62770] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:59:01.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:59:01.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:59:01.314 [DEBUG] [Thread-62770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:59:01.315 [DEBUG] [Thread-62770] [transport.py] [_log()] userauth is OK
2025-11-17T22:59:01.315 [DEBUG] [Thread-62770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:59:01.315 [DEBUG] [Thread-62770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:59:01.315 [DEBUG] [Thread-62770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:59:01.315 [DEBUG] [Thread-62770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:59:01.330 [INFO] [Thread-62770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:59:01.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:59:01.916 [DEBUG] [Thread-62770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:59:01.916 [DEBUG] [Thread-62770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:59:01.916 [DEBUG] [Thread-62770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:59:01.957 [DEBUG] [Thread-62770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:59:01.957 [DEBUG] [Thread-62770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:59:01.958 [DEBUG] [Thread-62770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:59:01.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:59:01.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:59:01.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:59:01.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:59:01.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:59:01.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:59:01.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:59:01.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:59:01.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:59:01.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.874005 -999.00  +14.70  12.94     48   +3.90 1 2 1 1 1     0    0 10.14 -39.38 ZNES. 11.8 12.9 153.6 22.0 15.3 -17.5 15.2 -17.0 15.0 -16.6 15.3 -17.0
2025-11-17T22:59:01.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:59:01.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:59:01.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.874005
2025-11-17T22:59:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:59:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:59:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:59:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:59:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:59:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:58:51', tmtdew=12.37, humidity=43.38, cloud=0.0, wind=19.78, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:58:51', seeing=2.3, atlas_timestamp='2025-11-17T20:58:34.032', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:57:00')
2025-11-17T22:59:01.980 [DEBUG] [Thread-62770] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:59:02.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:59:02.069 [DEBUG] [Thread-62773] [transport.py] [_log()] starting thread (client mode): 0xd317c6d0
2025-11-17T22:59:02.069 [DEBUG] [Thread-62773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:59:02.083 [DEBUG] [Thread-62773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:59:02.083 [INFO] [Thread-62773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] client lang: <none>
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] server lang: <none>
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] kex follows: False
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] Compression: none
2025-11-17T22:59:02.091 [DEBUG] [Thread-62773] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:59:02.148 [DEBUG] [Thread-62773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:59:02.148 [DEBUG] [Thread-62773] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:59:02.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:59:02.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:59:02.149 [DEBUG] [Thread-62773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:59:02.205 [DEBUG] [Thread-62773] [transport.py] [_log()] userauth is OK
2025-11-17T22:59:02.205 [DEBUG] [Thread-62773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:59:02.205 [DEBUG] [Thread-62773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:59:02.205 [DEBUG] [Thread-62773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:59:02.205 [DEBUG] [Thread-62773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:59:02.223 [INFO] [Thread-62773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:59:02.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:59:02.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:59:03.066 [DEBUG] [Thread-62773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:59:03.066 [DEBUG] [Thread-62773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:59:03.114 [DEBUG] [Thread-62773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:59:03.114 [DEBUG] [Thread-62773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:59:03.122 [DEBUG] [Thread-62773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:59:03.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:59:03.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:59:03.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:59:03.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:59:03.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:59:03.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:59:03.165 [DEBUG] [Thread-62773] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:59:06.347 [DEBUG] [Thread-62775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:59:08.462 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:59:08.464 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:59:21.391 [DEBUG] [Thread-62776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:59:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T22:59:33.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T22:59:33.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T22:59:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 59, 23), 12.36, 43.4, 0.0, 22.18, 14.73, 0, 0, 0, 2, 0, 0),)
2025-11-17T22:59:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:59:23
2025-11-17T22:59:33.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T22:59:34.115 [DEBUG] [Thread-62777] [transport.py] [_log()] starting thread (client mode): 0xd3134940
2025-11-17T22:59:34.115 [DEBUG] [Thread-62777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:59:34.135 [DEBUG] [Thread-62777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T22:59:34.135 [INFO] [Thread-62777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:59:34.139 [DEBUG] [Thread-62777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] client lang: <none>
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] server lang: <none>
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] kex follows: False
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] Compression: none
2025-11-17T22:59:34.140 [DEBUG] [Thread-62777] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:59:34.158 [DEBUG] [Thread-62777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:59:34.158 [DEBUG] [Thread-62777] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:59:34.159 [DEBUG] [Thread-62777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T22:59:34.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T22:59:34.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:59:34.161 [DEBUG] [Thread-62777] [transport.py] [_log()] userauth is OK
2025-11-17T22:59:34.161 [DEBUG] [Thread-62777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:59:34.161 [DEBUG] [Thread-62777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:59:34.161 [DEBUG] [Thread-62777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T22:59:34.161 [DEBUG] [Thread-62777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:59:34.186 [INFO] [Thread-62777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:59:34.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:59:34.849 [DEBUG] [Thread-62777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:59:34.849 [DEBUG] [Thread-62777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:59:34.849 [DEBUG] [Thread-62777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T22:59:34.890 [DEBUG] [Thread-62777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:59:34.891 [DEBUG] [Thread-62777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:59:34.893 [DEBUG] [Thread-62777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:59:34.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:59:34.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T22:59:34.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T22:59:34.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T22:59:34.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:59:34.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T22:59:34.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:59:34.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:59:34.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T22:59:34.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.874352 -999.00  +14.70  15.72     48   +3.90 1 2 1 1 1     0    0 10.11 -40.91 ZNES. 18.0 15.7 166.8 17.2 15.3 -17.4 15.2 -16.9 15.0 -16.7 15.3 -17.0
2025-11-17T22:59:34.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T22:59:34.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T22:59:34.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.874352
2025-11-17T22:59:34.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T22:59:34.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T22:59:34.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T22:59:34.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T22:59:34.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T22:59:34.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:59:23', tmtdew=12.36, humidity=43.4, cloud=0.0, wind=22.18, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:59:23', seeing=2.3, atlas_timestamp='2025-11-17T20:59:04.013', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:57:00')
2025-11-17T22:59:34.920 [DEBUG] [Thread-62777] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:59:35.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T22:59:35.013 [DEBUG] [Thread-62780] [transport.py] [_log()] starting thread (client mode): 0xd3136890
2025-11-17T22:59:35.013 [DEBUG] [Thread-62780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T22:59:35.028 [DEBUG] [Thread-62780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T22:59:35.028 [INFO] [Thread-62780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T22:59:35.039 [DEBUG] [Thread-62780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T22:59:35.039 [DEBUG] [Thread-62780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T22:59:35.039 [DEBUG] [Thread-62780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T22:59:35.039 [DEBUG] [Thread-62780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] client lang: <none>
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] server lang: <none>
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] kex follows: False
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T22:59:35.040 [DEBUG] [Thread-62780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T22:59:35.041 [DEBUG] [Thread-62780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T22:59:35.041 [DEBUG] [Thread-62780] [transport.py] [_log()] Compression: none
2025-11-17T22:59:35.041 [DEBUG] [Thread-62780] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T22:59:35.097 [DEBUG] [Thread-62780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T22:59:35.097 [DEBUG] [Thread-62780] [transport.py] [_log()] Switch to new keys ...
2025-11-17T22:59:35.098 [DEBUG] [Thread-62780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T22:59:35.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T22:59:35.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T22:59:35.153 [DEBUG] [Thread-62780] [transport.py] [_log()] userauth is OK
2025-11-17T22:59:35.153 [DEBUG] [Thread-62780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T22:59:35.154 [DEBUG] [Thread-62780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T22:59:35.154 [DEBUG] [Thread-62780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T22:59:35.154 [DEBUG] [Thread-62780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T22:59:35.176 [INFO] [Thread-62780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T22:59:35.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T22:59:35.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T22:59:36.018 [DEBUG] [Thread-62780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T22:59:36.019 [DEBUG] [Thread-62780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T22:59:36.066 [DEBUG] [Thread-62780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T22:59:36.066 [DEBUG] [Thread-62780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T22:59:36.075 [DEBUG] [Thread-62780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T22:59:36.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T22:59:36.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T22:59:36.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T22:59:36.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T22:59:36.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T22:59:36.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T22:59:36.109 [DEBUG] [Thread-62780] [transport.py] [_log()] EOF in transport thread
2025-11-17T22:59:36.421 [DEBUG] [Thread-62782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:59:48.361 [DEBUG] [Thread-62783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T22:59:51.459 [DEBUG] [Thread-62784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:00:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:00:06.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:00:06.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:00:06.488 [DEBUG] [Thread-62785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:00:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 22, 59, 55), 12.39, 43.46, 0.0, 20.93, 14.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:00:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 22:59:55
2025-11-17T23:00:06.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:00:07.035 [DEBUG] [Thread-62786] [transport.py] [_log()] starting thread (client mode): 0xd31cfb20
2025-11-17T23:00:07.035 [DEBUG] [Thread-62786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:00:07.056 [DEBUG] [Thread-62786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:00:07.056 [INFO] [Thread-62786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] client lang: <none>
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] server lang: <none>
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] kex follows: False
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] Compression: none
2025-11-17T23:00:07.058 [DEBUG] [Thread-62786] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:00:07.067 [DEBUG] [Thread-62786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:00:07.068 [DEBUG] [Thread-62786] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:00:07.068 [DEBUG] [Thread-62786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:00:07.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:00:07.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:00:07.069 [DEBUG] [Thread-62786] [transport.py] [_log()] userauth is OK
2025-11-17T23:00:07.070 [DEBUG] [Thread-62786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:00:07.070 [DEBUG] [Thread-62786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:00:07.070 [DEBUG] [Thread-62786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:00:07.070 [DEBUG] [Thread-62786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:00:07.082 [INFO] [Thread-62786] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:00:07.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:00:07.885 [DEBUG] [Thread-62786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:00:07.886 [DEBUG] [Thread-62786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:00:07.886 [DEBUG] [Thread-62786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:00:07.926 [DEBUG] [Thread-62786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:00:07.926 [DEBUG] [Thread-62786] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:00:07.928 [DEBUG] [Thread-62786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:00:07.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:00:07.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:00:07.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:00:07.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:00:07.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:00:07.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:00:07.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:00:07.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:00:07.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:00:07.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.874699 -999.00  +14.70  12.56     48   +3.90 1 1 1 1 1     0    0 9.88 -40.43 ZNESW 12.7 12.6 150.8 20.7 15.4 -17.4 15.2 -17.0 15.0 -16.7 15.3 -17.0
2025-11-17T23:00:07.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:00:07.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:00:07.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.874699
2025-11-17T23:00:07.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:00:07.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:00:07.945 [DEBUG] [Thread-62786] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:00:07.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:00:07.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:00:07.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:00:07.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T22:59:55', tmtdew=12.39, humidity=43.46, cloud=0.0, wind=20.93, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T22:59:55', seeing=1.89, atlas_timestamp='2025-11-17T20:59:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:57:00')
2025-11-17T23:00:08.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:00:08.040 [DEBUG] [Thread-62789] [transport.py] [_log()] starting thread (client mode): 0xd3134940
2025-11-17T23:00:08.040 [DEBUG] [Thread-62789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:00:08.054 [DEBUG] [Thread-62789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:00:08.054 [INFO] [Thread-62789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] client lang: <none>
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] server lang: <none>
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] kex follows: False
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:00:08.062 [DEBUG] [Thread-62789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:00:08.063 [DEBUG] [Thread-62789] [transport.py] [_log()] Compression: none
2025-11-17T23:00:08.063 [DEBUG] [Thread-62789] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:00:08.120 [DEBUG] [Thread-62789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:00:08.120 [DEBUG] [Thread-62789] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:00:08.121 [DEBUG] [Thread-62789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:00:08.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:00:08.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:00:08.182 [DEBUG] [Thread-62789] [transport.py] [_log()] userauth is OK
2025-11-17T23:00:08.182 [DEBUG] [Thread-62789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:00:08.182 [DEBUG] [Thread-62789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:00:08.182 [DEBUG] [Thread-62789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:00:08.182 [DEBUG] [Thread-62789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:00:08.201 [INFO] [Thread-62789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:00:08.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:00:08.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:00:08.669 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:00:08.670 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:00:09.038 [DEBUG] [Thread-62789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:00:09.038 [DEBUG] [Thread-62789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:00:09.085 [DEBUG] [Thread-62789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:00:09.086 [DEBUG] [Thread-62789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:00:09.094 [DEBUG] [Thread-62789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:00:09.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:00:09.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:00:09.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:00:09.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:00:09.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:00:09.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:00:09.128 [DEBUG] [Thread-62789] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:00:21.514 [DEBUG] [Thread-62791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:00:36.545 [DEBUG] [Thread-62792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:00:39.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:00:39.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:00:39.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:00:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 0, 27), 12.41, 43.41, 0.0, 20.36, 14.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:00:39.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:00:27
2025-11-17T23:00:39.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:00:40.091 [DEBUG] [Thread-62793] [transport.py] [_log()] starting thread (client mode): 0xd3136e90
2025-11-17T23:00:40.091 [DEBUG] [Thread-62793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:00:40.110 [DEBUG] [Thread-62793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:00:40.111 [INFO] [Thread-62793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] client lang: <none>
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] server lang: <none>
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] kex follows: False
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] Compression: none
2025-11-17T23:00:40.114 [DEBUG] [Thread-62793] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:00:40.131 [DEBUG] [Thread-62793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:00:40.131 [DEBUG] [Thread-62793] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:00:40.132 [DEBUG] [Thread-62793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:00:40.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:00:40.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:00:40.133 [DEBUG] [Thread-62793] [transport.py] [_log()] userauth is OK
2025-11-17T23:00:40.134 [DEBUG] [Thread-62793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:00:40.134 [DEBUG] [Thread-62793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:00:40.134 [DEBUG] [Thread-62793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:00:40.134 [DEBUG] [Thread-62793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:00:40.156 [INFO] [Thread-62793] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:00:40.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:00:40.781 [DEBUG] [Thread-62793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:00:40.781 [DEBUG] [Thread-62793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:00:40.782 [DEBUG] [Thread-62793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:00:40.822 [DEBUG] [Thread-62793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:00:40.823 [DEBUG] [Thread-62793] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:00:40.826 [DEBUG] [Thread-62793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:00:40.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:00:40.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:00:40.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:00:40.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:00:40.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:00:40.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:00:40.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:00:40.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:00:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:00:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.874699 -999.00  +14.70  12.56     48   +3.90 1 1 1 1 1     0    0 9.88 -40.43 ZNESW 12.7 12.6 150.8 20.7 15.4 -17.4 15.2 -17.0 15.0 -16.7 15.3 -17.0
2025-11-17T23:00:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:00:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:00:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.874699
2025-11-17T23:00:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:00:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:00:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:00:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:00:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:00:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:00:27', tmtdew=12.41, humidity=43.41, cloud=0.0, wind=20.36, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:00:27', seeing=1.76, atlas_timestamp='2025-11-17T20:59:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:57:00')
2025-11-17T23:00:40.854 [DEBUG] [Thread-62793] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:00:40.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:00:40.950 [DEBUG] [Thread-62796] [transport.py] [_log()] starting thread (client mode): 0xd3136ef0
2025-11-17T23:00:40.950 [DEBUG] [Thread-62796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:00:40.965 [DEBUG] [Thread-62796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:00:40.965 [INFO] [Thread-62796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] client lang: <none>
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] server lang: <none>
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] kex follows: False
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] Compression: none
2025-11-17T23:00:40.973 [DEBUG] [Thread-62796] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:00:41.029 [DEBUG] [Thread-62796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:00:41.029 [DEBUG] [Thread-62796] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:00:41.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:00:41.030 [DEBUG] [Thread-62796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:00:41.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:00:41.086 [DEBUG] [Thread-62796] [transport.py] [_log()] userauth is OK
2025-11-17T23:00:41.086 [DEBUG] [Thread-62796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:00:41.086 [DEBUG] [Thread-62796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:00:41.086 [DEBUG] [Thread-62796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:00:41.086 [DEBUG] [Thread-62796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:00:41.105 [INFO] [Thread-62796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:00:41.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:00:41.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:00:41.943 [DEBUG] [Thread-62796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:00:41.944 [DEBUG] [Thread-62796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:00:41.991 [DEBUG] [Thread-62796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:00:41.991 [DEBUG] [Thread-62796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:00:42.000 [DEBUG] [Thread-62796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:00:42.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:00:42.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:00:42.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:00:42.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:00:42.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:00:42.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:00:42.032 [DEBUG] [Thread-62796] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:00:48.437 [DEBUG] [Thread-62798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:00:51.577 [DEBUG] [Thread-62799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:01:06.622 [DEBUG] [Thread-62800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:01:08.875 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:01:08.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:01:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:01:12.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:01:12.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:01:12.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 0, 59), 12.37, 43.53, 0.0, 16.85, 14.67, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:01:12.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:00:59
2025-11-17T23:01:12.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:01:12.986 [DEBUG] [Thread-62801] [transport.py] [_log()] starting thread (client mode): 0xd31cc880
2025-11-17T23:01:12.987 [DEBUG] [Thread-62801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:01:13.006 [DEBUG] [Thread-62801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:01:13.006 [INFO] [Thread-62801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:01:13.009 [DEBUG] [Thread-62801] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:01:13.009 [DEBUG] [Thread-62801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] client lang: <none>
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] server lang: <none>
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] kex follows: False
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] Compression: none
2025-11-17T23:01:13.010 [DEBUG] [Thread-62801] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:01:13.027 [DEBUG] [Thread-62801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:01:13.028 [DEBUG] [Thread-62801] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:01:13.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:01:13.029 [DEBUG] [Thread-62801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:01:13.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:01:13.031 [DEBUG] [Thread-62801] [transport.py] [_log()] userauth is OK
2025-11-17T23:01:13.031 [DEBUG] [Thread-62801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:01:13.031 [DEBUG] [Thread-62801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:01:13.031 [DEBUG] [Thread-62801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:01:13.031 [DEBUG] [Thread-62801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:01:13.057 [INFO] [Thread-62801] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:01:13.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:01:13.846 [DEBUG] [Thread-62801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:01:13.846 [DEBUG] [Thread-62801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:01:13.847 [DEBUG] [Thread-62801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:01:13.887 [DEBUG] [Thread-62801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:01:13.887 [DEBUG] [Thread-62801] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:01:13.890 [DEBUG] [Thread-62801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:01:13.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:01:13.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:01:13.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:01:13.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:01:13.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:01:13.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:01:13.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:01:13.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:01:13.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:01:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.875394 -999.00  +14.70  13.00     48   +3.80 1 2 1 1 1     0    0 10.04 -41.21 znESW 17.3 13.0 165.4 16.1 15.4 -17.4 15.2 -17.2 15.0 -16.9 15.3 -17.2
2025-11-17T23:01:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:01:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:01:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.875394
2025-11-17T23:01:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:01:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:01:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:01:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:01:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:01:13.916 [DEBUG] [Thread-62801] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:01:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:00:59', tmtdew=12.37, humidity=43.53, cloud=0.0, wind=16.85, temperature=14.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:00:59', seeing=2.05, atlas_timestamp='2025-11-17T21:00:34.042', atlas_cloud=2, atlas_rain=1, zp_data=[1.5997499999999993, 0.9987500000000011, 1.6282500000000004, 1.2984999999999989, 2.0795000000000003, 1.1507500000000013, 1.6174999999999997, 1.3912500000000003, 1.1584999999999992, 0.9380000000000006, 1.8747499999999997, 1.888, 2.3999999999999995, 1.9052499999999997, 1.5785, 0.8349999999999991, 0.2992500000000007, 1.0625, 1.158999999999999, 1.4872499999999986, nan, 2.5127499999999987, 1.0512500000000005, 0.31375000000000064, 0.5879999999999992, 0.8224999999999998, 0.91275, 0.6395, 1.3730000000000002, nan, 0.47250000000000103, 0.18350000000000044, 0.7097499999999988], zp_timestamp='2025-11-17T20:57:00')
2025-11-17T23:01:14.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:01:14.020 [DEBUG] [Thread-62804] [transport.py] [_log()] starting thread (client mode): 0xd3151b70
2025-11-17T23:01:14.020 [DEBUG] [Thread-62804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:01:14.035 [DEBUG] [Thread-62804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:01:14.035 [INFO] [Thread-62804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:01:14.042 [DEBUG] [Thread-62804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] client lang: <none>
2025-11-17T23:01:14.043 [DEBUG] [Thread-62804] [transport.py] [_log()] server lang: <none>
2025-11-17T23:01:14.044 [DEBUG] [Thread-62804] [transport.py] [_log()] kex follows: False
2025-11-17T23:01:14.044 [DEBUG] [Thread-62804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:01:14.044 [DEBUG] [Thread-62804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:01:14.044 [DEBUG] [Thread-62804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:01:14.044 [DEBUG] [Thread-62804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:01:14.044 [DEBUG] [Thread-62804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:01:14.044 [DEBUG] [Thread-62804] [transport.py] [_log()] Compression: none
2025-11-17T23:01:14.044 [DEBUG] [Thread-62804] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:01:14.107 [DEBUG] [Thread-62804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:01:14.107 [DEBUG] [Thread-62804] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:01:14.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:01:14.108 [DEBUG] [Thread-62804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:01:14.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:01:14.162 [DEBUG] [Thread-62804] [transport.py] [_log()] userauth is OK
2025-11-17T23:01:14.163 [DEBUG] [Thread-62804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:01:14.163 [DEBUG] [Thread-62804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:01:14.163 [DEBUG] [Thread-62804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:01:14.163 [DEBUG] [Thread-62804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:01:14.182 [INFO] [Thread-62804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:01:14.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:01:14.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:01:15.040 [DEBUG] [Thread-62804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:01:15.041 [DEBUG] [Thread-62804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:01:15.088 [DEBUG] [Thread-62804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:01:15.089 [DEBUG] [Thread-62804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:01:15.097 [DEBUG] [Thread-62804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:01:15.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:01:15.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:01:15.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:01:15.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:01:15.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:01:15.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:01:15.136 [DEBUG] [Thread-62804] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:01:21.656 [DEBUG] [Thread-62806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:01:36.703 [DEBUG] [Thread-62807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:01:45.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:01:45.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:01:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:01:45.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 1, 31), 12.37, 43.51, 0.0, 16.39, 14.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:01:45.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:01:31
2025-11-17T23:01:45.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:01:46.094 [DEBUG] [Thread-62808] [transport.py] [_log()] starting thread (client mode): 0xd3150430
2025-11-17T23:01:46.094 [DEBUG] [Thread-62808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:01:46.112 [DEBUG] [Thread-62808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:01:46.112 [INFO] [Thread-62808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] client lang: <none>
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] server lang: <none>
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] kex follows: False
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] Compression: none
2025-11-17T23:01:46.116 [DEBUG] [Thread-62808] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:01:46.127 [DEBUG] [Thread-62808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:01:46.127 [DEBUG] [Thread-62808] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:01:46.128 [DEBUG] [Thread-62808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:01:46.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:01:46.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:01:46.130 [DEBUG] [Thread-62808] [transport.py] [_log()] userauth is OK
2025-11-17T23:01:46.130 [DEBUG] [Thread-62808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:01:46.130 [DEBUG] [Thread-62808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:01:46.130 [DEBUG] [Thread-62808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:01:46.130 [DEBUG] [Thread-62808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:01:46.155 [INFO] [Thread-62808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:01:46.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:01:46.795 [DEBUG] [Thread-62808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:01:46.795 [DEBUG] [Thread-62808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:01:46.795 [DEBUG] [Thread-62808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:01:46.836 [DEBUG] [Thread-62808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:01:46.837 [DEBUG] [Thread-62808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:01:46.839 [DEBUG] [Thread-62808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:01:46.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:01:46.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:01:46.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:01:46.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:01:46.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:01:46.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:01:46.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:01:46.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:01:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:01:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.875741 -999.00  +14.70  12.57     48   +3.90 1 1 1 1 1     0    0 9.89 -41.11 ZNESW 14.1 12.6 155.3 17.6 15.3 -17.6 15.2 -17.3 15.0 -16.9 15.3 -17.1
2025-11-17T23:01:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:01:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:01:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.875741
2025-11-17T23:01:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:01:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:01:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:01:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:01:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:01:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:01:31', tmtdew=12.37, humidity=43.51, cloud=0.0, wind=16.39, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:01:31', seeing=2.01, atlas_timestamp='2025-11-17T21:01:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:00:00')
2025-11-17T23:01:46.864 [DEBUG] [Thread-62808] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:01:46.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:01:46.959 [DEBUG] [Thread-62811] [transport.py] [_log()] starting thread (client mode): 0xd3134160
2025-11-17T23:01:46.959 [DEBUG] [Thread-62811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:01:46.975 [DEBUG] [Thread-62811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:01:46.976 [INFO] [Thread-62811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] client lang: <none>
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] server lang: <none>
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] kex follows: False
2025-11-17T23:01:46.983 [DEBUG] [Thread-62811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:01:46.984 [DEBUG] [Thread-62811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:01:46.984 [DEBUG] [Thread-62811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:01:46.984 [DEBUG] [Thread-62811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:01:46.984 [DEBUG] [Thread-62811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:01:46.984 [DEBUG] [Thread-62811] [transport.py] [_log()] Compression: none
2025-11-17T23:01:46.984 [DEBUG] [Thread-62811] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:01:47.042 [DEBUG] [Thread-62811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:01:47.042 [DEBUG] [Thread-62811] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:01:47.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:01:47.043 [DEBUG] [Thread-62811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:01:47.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:01:47.098 [DEBUG] [Thread-62811] [transport.py] [_log()] userauth is OK
2025-11-17T23:01:47.098 [DEBUG] [Thread-62811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:01:47.098 [DEBUG] [Thread-62811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:01:47.098 [DEBUG] [Thread-62811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:01:47.098 [DEBUG] [Thread-62811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:01:47.117 [INFO] [Thread-62811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:01:47.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:01:47.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:01:48.022 [DEBUG] [Thread-62811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:01:48.022 [DEBUG] [Thread-62811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:01:48.070 [DEBUG] [Thread-62811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:01:48.070 [DEBUG] [Thread-62811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:01:48.079 [DEBUG] [Thread-62811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:01:48.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:01:48.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:01:48.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:01:48.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:01:48.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:01:48.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:01:48.113 [DEBUG] [Thread-62811] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:01:48.527 [DEBUG] [Thread-62813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:01:51.729 [DEBUG] [Thread-62814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:02:06.774 [DEBUG] [Thread-62815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:02:09.082 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:02:09.083 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:02:18.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:02:18.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:02:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:02:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 2, 3), 12.38, 43.5, 0.0, 16.82, 14.65, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:02:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:02:03
2025-11-17T23:02:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:02:19.055 [DEBUG] [Thread-62816] [transport.py] [_log()] starting thread (client mode): 0xd31529b0
2025-11-17T23:02:19.055 [DEBUG] [Thread-62816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:02:19.077 [DEBUG] [Thread-62816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:02:19.077 [INFO] [Thread-62816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:02:19.081 [DEBUG] [Thread-62816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] client lang: <none>
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] server lang: <none>
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] kex follows: False
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:02:19.082 [DEBUG] [Thread-62816] [transport.py] [_log()] Compression: none
2025-11-17T23:02:19.083 [DEBUG] [Thread-62816] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:02:19.103 [DEBUG] [Thread-62816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:02:19.104 [DEBUG] [Thread-62816] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:02:19.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:02:19.105 [DEBUG] [Thread-62816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:02:19.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:02:19.107 [DEBUG] [Thread-62816] [transport.py] [_log()] userauth is OK
2025-11-17T23:02:19.107 [DEBUG] [Thread-62816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:02:19.108 [DEBUG] [Thread-62816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:02:19.108 [DEBUG] [Thread-62816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:02:19.108 [DEBUG] [Thread-62816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:02:19.133 [INFO] [Thread-62816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:02:19.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:02:19.951 [DEBUG] [Thread-62816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:02:19.951 [DEBUG] [Thread-62816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:02:19.951 [DEBUG] [Thread-62816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:02:19.991 [DEBUG] [Thread-62816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:02:19.991 [DEBUG] [Thread-62816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:02:19.994 [DEBUG] [Thread-62816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:02:20.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:02:20.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:02:20.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:02:20.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:02:20.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:02:20.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:02:20.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:02:20.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:02:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:02:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.876088 -999.00  +14.70  15.19     48   +3.90 1 1 1 1 1     0    0 9.83 -42.29 ZNESW 13.1 15.2 159.2 21.2 15.3 -17.5 15.2 -17.2 15.0 -16.9 15.3 -17.2
2025-11-17T23:02:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:02:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:02:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.876088
2025-11-17T23:02:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:02:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:02:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:02:20.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:02:20.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:02:20.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:02:03', tmtdew=12.38, humidity=43.5, cloud=0.0, wind=16.82, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:02:03', seeing=2.14, atlas_timestamp='2025-11-17T21:01:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:00:00')
2025-11-17T23:02:20.019 [DEBUG] [Thread-62816] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:02:20.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:02:20.111 [DEBUG] [Thread-62819] [transport.py] [_log()] starting thread (client mode): 0xd3153400
2025-11-17T23:02:20.111 [DEBUG] [Thread-62819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:02:20.126 [DEBUG] [Thread-62819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:02:20.126 [INFO] [Thread-62819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:02:20.134 [DEBUG] [Thread-62819] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:02:20.134 [DEBUG] [Thread-62819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:02:20.134 [DEBUG] [Thread-62819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:02:20.134 [DEBUG] [Thread-62819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:02:20.134 [DEBUG] [Thread-62819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:02:20.134 [DEBUG] [Thread-62819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:02:20.134 [DEBUG] [Thread-62819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:02:20.134 [DEBUG] [Thread-62819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:02:20.135 [DEBUG] [Thread-62819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:02:20.135 [DEBUG] [Thread-62819] [transport.py] [_log()] client lang: <none>
2025-11-17T23:02:20.135 [DEBUG] [Thread-62819] [transport.py] [_log()] server lang: <none>
2025-11-17T23:02:20.135 [DEBUG] [Thread-62819] [transport.py] [_log()] kex follows: False
2025-11-17T23:02:20.135 [DEBUG] [Thread-62819] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:02:20.135 [DEBUG] [Thread-62819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:02:20.135 [DEBUG] [Thread-62819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:02:20.135 [DEBUG] [Thread-62819] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:02:20.136 [DEBUG] [Thread-62819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:02:20.136 [DEBUG] [Thread-62819] [transport.py] [_log()] Compression: none
2025-11-17T23:02:20.136 [DEBUG] [Thread-62819] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:02:20.195 [DEBUG] [Thread-62819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:02:20.195 [DEBUG] [Thread-62819] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:02:20.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:02:20.197 [DEBUG] [Thread-62819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:02:20.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:02:20.250 [DEBUG] [Thread-62819] [transport.py] [_log()] userauth is OK
2025-11-17T23:02:20.251 [DEBUG] [Thread-62819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:02:20.251 [DEBUG] [Thread-62819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:02:20.251 [DEBUG] [Thread-62819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:02:20.251 [DEBUG] [Thread-62819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:02:20.273 [INFO] [Thread-62819] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:02:20.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:02:20.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:02:21.160 [DEBUG] [Thread-62819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:02:21.160 [DEBUG] [Thread-62819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:02:21.208 [DEBUG] [Thread-62819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:02:21.209 [DEBUG] [Thread-62819] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:02:21.217 [DEBUG] [Thread-62819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:02:21.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:02:21.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:02:21.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:02:21.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:02:21.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:02:21.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:02:21.252 [DEBUG] [Thread-62819] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:02:21.803 [DEBUG] [Thread-62821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:02:36.842 [DEBUG] [Thread-62822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:02:48.610 [DEBUG] [Thread-62823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:02:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:02:51.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:02:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:02:51.863 [DEBUG] [Thread-62824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:02:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 2, 35), 12.28, 43.5, 0.0, 20.4, 14.58, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:02:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:02:35
2025-11-17T23:02:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:02:52.249 [DEBUG] [Thread-62825] [transport.py] [_log()] starting thread (client mode): 0xd3135c60
2025-11-17T23:02:52.249 [DEBUG] [Thread-62825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:02:52.268 [DEBUG] [Thread-62825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:02:52.269 [INFO] [Thread-62825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] client lang: <none>
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] server lang: <none>
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] kex follows: False
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] Compression: none
2025-11-17T23:02:52.272 [DEBUG] [Thread-62825] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:02:52.287 [DEBUG] [Thread-62825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:02:52.288 [DEBUG] [Thread-62825] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:02:52.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:02:52.288 [DEBUG] [Thread-62825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:02:52.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:02:52.288 [DEBUG] [Thread-62825] [transport.py] [_log()] userauth is OK
2025-11-17T23:02:52.288 [DEBUG] [Thread-62825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:02:52.288 [DEBUG] [Thread-62825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:02:52.288 [DEBUG] [Thread-62825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:02:52.288 [DEBUG] [Thread-62825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:02:52.303 [INFO] [Thread-62825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:02:52.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:02:52.947 [DEBUG] [Thread-62825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:02:52.947 [DEBUG] [Thread-62825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:02:52.948 [DEBUG] [Thread-62825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:02:52.988 [DEBUG] [Thread-62825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:02:52.988 [DEBUG] [Thread-62825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:02:52.990 [DEBUG] [Thread-62825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:02:53.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:02:53.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:02:53.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:02:53.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:02:53.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:02:53.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:02:53.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.876435 -999.00  +14.70  14.29     48   +4.00 1 2 1 1 1     0    0 9.88 -39.68 ZnESW 18.4 14.3 158.8 22.1 15.3 -17.6 15.2 -17.4 15.0 -17.0 15.3 -17.2
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.876435
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:02:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:02:35', tmtdew=12.28, humidity=43.5, cloud=0.0, wind=20.4, temperature=14.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:02:35', seeing=2.14, atlas_timestamp='2025-11-17T21:02:03.984', atlas_cloud=2, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:00:00')
2025-11-17T23:02:53.009 [DEBUG] [Thread-62825] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:02:53.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:02:53.095 [DEBUG] [Thread-62828] [transport.py] [_log()] starting thread (client mode): 0xd3136a70
2025-11-17T23:02:53.095 [DEBUG] [Thread-62828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:02:53.110 [DEBUG] [Thread-62828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:02:53.110 [INFO] [Thread-62828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] client lang: <none>
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] server lang: <none>
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] kex follows: False
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] Compression: none
2025-11-17T23:02:53.118 [DEBUG] [Thread-62828] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:02:53.177 [DEBUG] [Thread-62828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:02:53.177 [DEBUG] [Thread-62828] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:02:53.177 [DEBUG] [Thread-62828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:02:53.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:02:53.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:02:53.234 [DEBUG] [Thread-62828] [transport.py] [_log()] userauth is OK
2025-11-17T23:02:53.234 [DEBUG] [Thread-62828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:02:53.234 [DEBUG] [Thread-62828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:02:53.234 [DEBUG] [Thread-62828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:02:53.234 [DEBUG] [Thread-62828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:02:53.248 [INFO] [Thread-62828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:02:53.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:02:53.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:02:54.094 [DEBUG] [Thread-62828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:02:54.094 [DEBUG] [Thread-62828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:02:54.142 [DEBUG] [Thread-62828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:02:54.142 [DEBUG] [Thread-62828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:02:54.150 [DEBUG] [Thread-62828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:02:54.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:02:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:02:54.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:02:54.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:02:54.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:02:54.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:02:54.182 [DEBUG] [Thread-62828] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:03:06.892 [DEBUG] [Thread-62830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:03:09.291 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:03:09.292 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:03:21.937 [DEBUG] [Thread-62831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:03:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:03:24.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:03:24.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:03:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 3, 7), 12.23, 43.63, 0.0, 25.04, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:03:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:03:07
2025-11-17T23:03:24.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:03:25.114 [DEBUG] [Thread-62832] [transport.py] [_log()] starting thread (client mode): 0xd07038e0
2025-11-17T23:03:25.115 [DEBUG] [Thread-62832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:03:25.139 [DEBUG] [Thread-62832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:03:25.139 [INFO] [Thread-62832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:03:25.140 [DEBUG] [Thread-62832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] client lang: <none>
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] server lang: <none>
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] kex follows: False
2025-11-17T23:03:25.141 [DEBUG] [Thread-62832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:03:25.142 [DEBUG] [Thread-62832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:03:25.142 [DEBUG] [Thread-62832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:03:25.142 [DEBUG] [Thread-62832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:03:25.142 [DEBUG] [Thread-62832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:03:25.142 [DEBUG] [Thread-62832] [transport.py] [_log()] Compression: none
2025-11-17T23:03:25.142 [DEBUG] [Thread-62832] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:03:25.163 [DEBUG] [Thread-62832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:03:25.164 [DEBUG] [Thread-62832] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:03:25.164 [DEBUG] [Thread-62832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:03:25.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:03:25.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:03:25.166 [DEBUG] [Thread-62832] [transport.py] [_log()] userauth is OK
2025-11-17T23:03:25.166 [DEBUG] [Thread-62832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:03:25.166 [DEBUG] [Thread-62832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:03:25.166 [DEBUG] [Thread-62832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:03:25.166 [DEBUG] [Thread-62832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:03:25.184 [INFO] [Thread-62832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:03:25.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:03:25.945 [DEBUG] [Thread-62832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:03:25.946 [DEBUG] [Thread-62832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:03:25.946 [DEBUG] [Thread-62832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:03:25.986 [DEBUG] [Thread-62832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:03:25.986 [DEBUG] [Thread-62832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:03:25.989 [DEBUG] [Thread-62832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:03:26.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:03:26.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:03:26.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:03:26.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:03:26.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:03:26.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:03:26.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:03:26.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:03:26.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:03:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.876782 -999.00  +14.70  16.45     48   +3.90 1 2 1 1 1     0    0 9.62 -40.05 ZnESW 18.6 16.4 163.4 24.1 15.4 -17.8 15.1 -17.4 14.9 -17.1 15.3 -17.1
2025-11-17T23:03:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:03:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:03:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.876782
2025-11-17T23:03:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:03:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:03:26.012 [DEBUG] [Thread-62832] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:03:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:03:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:03:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:03:26.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:03:07', tmtdew=12.23, humidity=43.63, cloud=0.0, wind=25.04, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:03:07', seeing=2.14, atlas_timestamp='2025-11-17T21:02:33.965', atlas_cloud=2, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:00:00')
2025-11-17T23:03:26.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:03:26.107 [DEBUG] [Thread-62835] [transport.py] [_log()] starting thread (client mode): 0xd3136410
2025-11-17T23:03:26.108 [DEBUG] [Thread-62835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:03:26.127 [DEBUG] [Thread-62835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:03:26.127 [INFO] [Thread-62835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:03:26.134 [DEBUG] [Thread-62835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] client lang: <none>
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] server lang: <none>
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] kex follows: False
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:03:26.135 [DEBUG] [Thread-62835] [transport.py] [_log()] Compression: none
2025-11-17T23:03:26.136 [DEBUG] [Thread-62835] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:03:26.194 [DEBUG] [Thread-62835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:03:26.195 [DEBUG] [Thread-62835] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:03:26.195 [DEBUG] [Thread-62835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:03:26.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:03:26.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:03:26.251 [DEBUG] [Thread-62835] [transport.py] [_log()] userauth is OK
2025-11-17T23:03:26.251 [DEBUG] [Thread-62835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:03:26.251 [DEBUG] [Thread-62835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:03:26.251 [DEBUG] [Thread-62835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:03:26.251 [DEBUG] [Thread-62835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:03:26.270 [INFO] [Thread-62835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:03:26.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:03:26.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:03:27.107 [DEBUG] [Thread-62835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:03:27.107 [DEBUG] [Thread-62835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:03:27.155 [DEBUG] [Thread-62835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:03:27.155 [DEBUG] [Thread-62835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:03:27.164 [DEBUG] [Thread-62835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:03:27.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:03:27.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:03:27.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:03:27.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:03:27.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:03:27.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:03:27.198 [DEBUG] [Thread-62835] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:03:36.964 [DEBUG] [Thread-62837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:03:48.691 [DEBUG] [Thread-62838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:03:52.005 [DEBUG] [Thread-62839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:03:57.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:03:57.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:03:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:03:57.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 3, 39), 12.23, 43.64, 0.0, 21.6, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:03:57.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:03:39
2025-11-17T23:03:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:03:58.109 [DEBUG] [Thread-62840] [transport.py] [_log()] starting thread (client mode): 0xd0700250
2025-11-17T23:03:58.109 [DEBUG] [Thread-62840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:03:58.128 [DEBUG] [Thread-62840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:03:58.128 [INFO] [Thread-62840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] client lang: <none>
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] server lang: <none>
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] kex follows: False
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] Compression: none
2025-11-17T23:03:58.131 [DEBUG] [Thread-62840] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:03:58.147 [DEBUG] [Thread-62840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:03:58.148 [DEBUG] [Thread-62840] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:03:58.148 [DEBUG] [Thread-62840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:03:58.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:03:58.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:03:58.150 [DEBUG] [Thread-62840] [transport.py] [_log()] userauth is OK
2025-11-17T23:03:58.150 [DEBUG] [Thread-62840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:03:58.150 [DEBUG] [Thread-62840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:03:58.150 [DEBUG] [Thread-62840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:03:58.151 [DEBUG] [Thread-62840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:03:58.185 [INFO] [Thread-62840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:03:58.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:03:58.851 [DEBUG] [Thread-62840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:03:58.851 [DEBUG] [Thread-62840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:03:58.852 [DEBUG] [Thread-62840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:03:58.892 [DEBUG] [Thread-62840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:03:58.893 [DEBUG] [Thread-62840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:03:58.895 [DEBUG] [Thread-62840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:03:58.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:03:58.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:03:58.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:03:58.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:03:58.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:03:58.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:03:58.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:03:58.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:03:58.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:03:58.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.877130 -999.00  +14.70  20.25     48   +3.90 1 2 1 1 1     0    0 9.76 -39.05 ZnESW 18.9 20.2 162.0 24.4 15.4 -17.8 15.2 -17.6 15.0 -17.1 15.3 -17.3
2025-11-17T23:03:58.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:03:58.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:03:58.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.877130
2025-11-17T23:03:58.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:03:58.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:03:58.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:03:58.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:03:58.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:03:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:03:39', tmtdew=12.23, humidity=43.64, cloud=0.0, wind=21.6, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:03:39', seeing=2.14, atlas_timestamp='2025-11-17T21:03:04.032', atlas_cloud=2, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:00:00')
2025-11-17T23:03:58.918 [DEBUG] [Thread-62840] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:03:59.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:03:59.014 [DEBUG] [Thread-62843] [transport.py] [_log()] starting thread (client mode): 0xd3153eb0
2025-11-17T23:03:59.014 [DEBUG] [Thread-62843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:03:59.028 [DEBUG] [Thread-62843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:03:59.029 [INFO] [Thread-62843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] client lang: <none>
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] server lang: <none>
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] kex follows: False
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:03:59.036 [DEBUG] [Thread-62843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:03:59.037 [DEBUG] [Thread-62843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:03:59.037 [DEBUG] [Thread-62843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:03:59.037 [DEBUG] [Thread-62843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:03:59.037 [DEBUG] [Thread-62843] [transport.py] [_log()] Compression: none
2025-11-17T23:03:59.037 [DEBUG] [Thread-62843] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:03:59.099 [DEBUG] [Thread-62843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:03:59.100 [DEBUG] [Thread-62843] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:03:59.100 [DEBUG] [Thread-62843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:03:59.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:03:59.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:03:59.155 [DEBUG] [Thread-62843] [transport.py] [_log()] userauth is OK
2025-11-17T23:03:59.155 [DEBUG] [Thread-62843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:03:59.155 [DEBUG] [Thread-62843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:03:59.155 [DEBUG] [Thread-62843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:03:59.155 [DEBUG] [Thread-62843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:03:59.174 [INFO] [Thread-62843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:03:59.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:03:59.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:04:00.085 [DEBUG] [Thread-62843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:04:00.085 [DEBUG] [Thread-62843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:04:00.133 [DEBUG] [Thread-62843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:04:00.133 [DEBUG] [Thread-62843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:04:00.142 [DEBUG] [Thread-62843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:04:00.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:04:00.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:04:00.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:04:00.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:04:00.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:04:00.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:04:00.175 [DEBUG] [Thread-62843] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:04:07.033 [DEBUG] [Thread-62845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:04:09.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:04:09.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:04:22.073 [DEBUG] [Thread-62846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:04:30.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:04:30.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:04:30.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:04:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 4, 11), 12.2, 43.73, 0.0, 22.18, 14.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:04:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:04:11
2025-11-17T23:04:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:04:31.083 [DEBUG] [Thread-62847] [transport.py] [_log()] starting thread (client mode): 0xd0701d50
2025-11-17T23:04:31.083 [DEBUG] [Thread-62847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:04:31.104 [DEBUG] [Thread-62847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:04:31.104 [INFO] [Thread-62847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:04:31.107 [DEBUG] [Thread-62847] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:04:31.107 [DEBUG] [Thread-62847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:04:31.107 [DEBUG] [Thread-62847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:04:31.107 [DEBUG] [Thread-62847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:04:31.107 [DEBUG] [Thread-62847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] client lang: <none>
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] server lang: <none>
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] kex follows: False
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] Compression: none
2025-11-17T23:04:31.108 [DEBUG] [Thread-62847] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:04:31.125 [DEBUG] [Thread-62847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:04:31.125 [DEBUG] [Thread-62847] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:04:31.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:04:31.126 [DEBUG] [Thread-62847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:04:31.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:04:31.128 [DEBUG] [Thread-62847] [transport.py] [_log()] userauth is OK
2025-11-17T23:04:31.128 [DEBUG] [Thread-62847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:04:31.128 [DEBUG] [Thread-62847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:04:31.128 [DEBUG] [Thread-62847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:04:31.128 [DEBUG] [Thread-62847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:04:31.152 [INFO] [Thread-62847] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:04:31.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:04:31.783 [DEBUG] [Thread-62847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:04:31.784 [DEBUG] [Thread-62847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:04:31.784 [DEBUG] [Thread-62847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:04:31.824 [DEBUG] [Thread-62847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:04:31.824 [DEBUG] [Thread-62847] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:04:31.827 [DEBUG] [Thread-62847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:04:31.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:04:31.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:04:31.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:04:31.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:04:31.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:04:31.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:04:31.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:04:31.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:04:31.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:04:31.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.877824 -999.00  +14.60  15.28     48   +3.90 1 2 1 1 1     0    0 9.84 -38.29 zneSW 16.1 15.3 158.6 21.0 15.3 -17.9 15.2 -17.6 15.0 -17.1 15.3 -17.5
2025-11-17T23:04:31.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:04:31.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:04:31.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.877824
2025-11-17T23:04:31.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:04:31.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:04:31.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:04:31.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:04:31.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:04:31.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:04:11', tmtdew=12.2, humidity=43.73, cloud=0.0, wind=22.18, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:04:11', seeing=2.14, atlas_timestamp='2025-11-17T21:04:03.994', atlas_cloud=2, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:03:00')
2025-11-17T23:04:31.851 [DEBUG] [Thread-62847] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:04:31.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:04:31.948 [DEBUG] [Thread-62850] [transport.py] [_log()] starting thread (client mode): 0xd3160130
2025-11-17T23:04:31.948 [DEBUG] [Thread-62850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:04:31.963 [DEBUG] [Thread-62850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:04:31.964 [INFO] [Thread-62850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:04:31.972 [DEBUG] [Thread-62850] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:04:31.972 [DEBUG] [Thread-62850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:04:31.972 [DEBUG] [Thread-62850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:04:31.972 [DEBUG] [Thread-62850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] client lang: <none>
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] server lang: <none>
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] kex follows: False
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:04:31.973 [DEBUG] [Thread-62850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:04:31.974 [DEBUG] [Thread-62850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:04:31.974 [DEBUG] [Thread-62850] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:04:31.974 [DEBUG] [Thread-62850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:04:31.974 [DEBUG] [Thread-62850] [transport.py] [_log()] Compression: none
2025-11-17T23:04:31.974 [DEBUG] [Thread-62850] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:04:32.037 [DEBUG] [Thread-62850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:04:32.037 [DEBUG] [Thread-62850] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:04:32.038 [DEBUG] [Thread-62850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:04:32.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:04:32.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:04:32.095 [DEBUG] [Thread-62850] [transport.py] [_log()] userauth is OK
2025-11-17T23:04:32.095 [DEBUG] [Thread-62850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:04:32.095 [DEBUG] [Thread-62850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:04:32.095 [DEBUG] [Thread-62850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:04:32.096 [DEBUG] [Thread-62850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:04:32.116 [INFO] [Thread-62850] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:04:32.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:04:32.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:04:32.980 [DEBUG] [Thread-62850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:04:32.980 [DEBUG] [Thread-62850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:04:33.028 [DEBUG] [Thread-62850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:04:33.028 [DEBUG] [Thread-62850] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:04:33.038 [DEBUG] [Thread-62850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:04:33.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:04:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:04:33.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:04:33.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:04:33.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:04:33.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:04:33.072 [DEBUG] [Thread-62850] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:04:37.108 [DEBUG] [Thread-62852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:04:48.744 [DEBUG] [Thread-62853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:04:52.143 [DEBUG] [Thread-62854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:05:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:05:03.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:05:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:05:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 4, 43), 12.19, 43.61, 0.0, 23.89, 14.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:05:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:04:43
2025-11-17T23:05:03.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:05:04.002 [DEBUG] [Thread-62855] [transport.py] [_log()] starting thread (client mode): 0xd0703400
2025-11-17T23:05:04.002 [DEBUG] [Thread-62855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:05:04.023 [DEBUG] [Thread-62855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:05:04.024 [INFO] [Thread-62855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:05:04.027 [DEBUG] [Thread-62855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:05:04.027 [DEBUG] [Thread-62855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] client lang: <none>
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] server lang: <none>
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] kex follows: False
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] Compression: none
2025-11-17T23:05:04.028 [DEBUG] [Thread-62855] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:05:04.047 [DEBUG] [Thread-62855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:05:04.047 [DEBUG] [Thread-62855] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:05:04.048 [DEBUG] [Thread-62855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:05:04.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:05:04.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:05:04.050 [DEBUG] [Thread-62855] [transport.py] [_log()] userauth is OK
2025-11-17T23:05:04.050 [DEBUG] [Thread-62855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:05:04.050 [DEBUG] [Thread-62855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:05:04.050 [DEBUG] [Thread-62855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:05:04.050 [DEBUG] [Thread-62855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:05:04.084 [INFO] [Thread-62855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:05:04.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:05:07.174 [DEBUG] [Thread-62857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:05:09.705 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:05:09.706 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:05:10.938 [DEBUG] [Thread-62855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:05:10.938 [DEBUG] [Thread-62855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:05:10.938 [DEBUG] [Thread-62855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:05:10.980 [DEBUG] [Thread-62855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:05:10.980 [DEBUG] [Thread-62855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:05:10.982 [DEBUG] [Thread-62855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:05:10.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:05:10.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:05:10.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:05:10.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:05:11.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:05:11.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:05:11.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:05:11.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:05:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:05:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.878171 -999.00  +14.60  19.20     48   +4.00 1 2 1 1 1     0    0 9.98 -38.33 zneSW 18.2 19.2 165.6 25.3 15.3 -17.9 15.1 -17.7 15.0 -17.0 15.3 -17.4
2025-11-17T23:05:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:05:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:05:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.878171
2025-11-17T23:05:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:05:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:05:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:05:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:05:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:05:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:04:43', tmtdew=12.19, humidity=43.61, cloud=0.0, wind=23.89, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:04:43', seeing=2.14, atlas_timestamp='2025-11-17T21:04:33.974', atlas_cloud=2, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:03:00')
2025-11-17T23:05:11.009 [DEBUG] [Thread-62855] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:05:11.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:05:11.104 [DEBUG] [Thread-62859] [transport.py] [_log()] starting thread (client mode): 0xd0700880
2025-11-17T23:05:11.105 [DEBUG] [Thread-62859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:05:11.121 [DEBUG] [Thread-62859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:05:11.121 [INFO] [Thread-62859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:05:11.129 [DEBUG] [Thread-62859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:05:11.129 [DEBUG] [Thread-62859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] client lang: <none>
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] server lang: <none>
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] kex follows: False
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] Compression: none
2025-11-17T23:05:11.130 [DEBUG] [Thread-62859] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:05:11.188 [DEBUG] [Thread-62859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:05:11.188 [DEBUG] [Thread-62859] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:05:11.189 [DEBUG] [Thread-62859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:05:11.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:05:11.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:05:11.243 [DEBUG] [Thread-62859] [transport.py] [_log()] userauth is OK
2025-11-17T23:05:11.243 [DEBUG] [Thread-62859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:05:11.243 [DEBUG] [Thread-62859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:05:11.244 [DEBUG] [Thread-62859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:05:11.244 [DEBUG] [Thread-62859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:05:11.262 [INFO] [Thread-62859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:05:11.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:05:11.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:05:12.128 [DEBUG] [Thread-62859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:05:12.128 [DEBUG] [Thread-62859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:05:12.176 [DEBUG] [Thread-62859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:05:12.176 [DEBUG] [Thread-62859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:05:12.185 [DEBUG] [Thread-62859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:05:12.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:05:12.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:05:12.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:05:12.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:05:12.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:05:12.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:05:12.221 [DEBUG] [Thread-62859] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:05:22.203 [DEBUG] [Thread-62861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:05:37.243 [DEBUG] [Thread-62862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:05:42.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:05:42.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:05:42.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:05:42.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 5, 15), 12.18, 43.66, 0.0, 23.4, 14.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:05:42.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:05:15
2025-11-17T23:05:42.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:05:43.139 [DEBUG] [Thread-62863] [transport.py] [_log()] starting thread (client mode): 0xd3135780
2025-11-17T23:05:43.139 [DEBUG] [Thread-62863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:05:43.159 [DEBUG] [Thread-62863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:05:43.159 [INFO] [Thread-62863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] client lang: <none>
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] server lang: <none>
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] kex follows: False
2025-11-17T23:05:43.162 [DEBUG] [Thread-62863] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:05:43.163 [DEBUG] [Thread-62863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:05:43.163 [DEBUG] [Thread-62863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:05:43.163 [DEBUG] [Thread-62863] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:05:43.163 [DEBUG] [Thread-62863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:05:43.163 [DEBUG] [Thread-62863] [transport.py] [_log()] Compression: none
2025-11-17T23:05:43.163 [DEBUG] [Thread-62863] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:05:43.179 [DEBUG] [Thread-62863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:05:43.180 [DEBUG] [Thread-62863] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:05:43.180 [DEBUG] [Thread-62863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:05:43.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:05:43.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:05:43.182 [DEBUG] [Thread-62863] [transport.py] [_log()] userauth is OK
2025-11-17T23:05:43.182 [DEBUG] [Thread-62863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:05:43.182 [DEBUG] [Thread-62863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:05:43.182 [DEBUG] [Thread-62863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:05:43.182 [DEBUG] [Thread-62863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:05:43.200 [INFO] [Thread-62863] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:05:43.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:05:43.829 [DEBUG] [Thread-62863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:05:43.830 [DEBUG] [Thread-62863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:05:43.830 [DEBUG] [Thread-62863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:05:43.870 [DEBUG] [Thread-62863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:05:43.871 [DEBUG] [Thread-62863] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:05:43.874 [DEBUG] [Thread-62863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:05:43.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:05:43.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:05:43.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:05:43.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:05:43.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:05:43.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:05:43.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:05:43.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:05:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:05:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.878519 -999.00  +14.60  16.52     48   +3.90 1 2 1 1 1     0    0 9.78 -38.83 ZneSW 13.4 16.5 163.0 21.2 15.3 -17.9 15.1 -17.3 14.9 -16.9 15.3 -17.2
2025-11-17T23:05:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:05:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:05:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.878519
2025-11-17T23:05:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:05:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:05:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:05:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:05:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:05:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:05:15', tmtdew=12.18, humidity=43.66, cloud=0.0, wind=23.4, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:05:15', seeing=2.11, atlas_timestamp='2025-11-17T21:05:04.042', atlas_cloud=2, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:03:00')
2025-11-17T23:05:43.900 [DEBUG] [Thread-62863] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:05:43.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:05:43.996 [DEBUG] [Thread-62866] [transport.py] [_log()] starting thread (client mode): 0xd0703700
2025-11-17T23:05:43.996 [DEBUG] [Thread-62866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:05:44.014 [DEBUG] [Thread-62866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:05:44.014 [INFO] [Thread-62866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:05:44.021 [DEBUG] [Thread-62866] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:05:44.021 [DEBUG] [Thread-62866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:05:44.021 [DEBUG] [Thread-62866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] client lang: <none>
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] server lang: <none>
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] kex follows: False
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] Compression: none
2025-11-17T23:05:44.022 [DEBUG] [Thread-62866] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:05:44.083 [DEBUG] [Thread-62866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:05:44.084 [DEBUG] [Thread-62866] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:05:44.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:05:44.085 [DEBUG] [Thread-62866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:05:44.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:05:44.143 [DEBUG] [Thread-62866] [transport.py] [_log()] userauth is OK
2025-11-17T23:05:44.143 [DEBUG] [Thread-62866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:05:44.143 [DEBUG] [Thread-62866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:05:44.143 [DEBUG] [Thread-62866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:05:44.144 [DEBUG] [Thread-62866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:05:44.163 [INFO] [Thread-62866] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:05:44.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:05:44.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:05:45.044 [DEBUG] [Thread-62866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:05:45.044 [DEBUG] [Thread-62866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:05:45.091 [DEBUG] [Thread-62866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:05:45.091 [DEBUG] [Thread-62866] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:05:45.100 [DEBUG] [Thread-62866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:05:45.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:05:45.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:05:45.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:05:45.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:05:45.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:05:45.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:05:45.135 [DEBUG] [Thread-62866] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:05:48.801 [DEBUG] [Thread-62868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:05:52.275 [DEBUG] [Thread-62869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:06:07.312 [DEBUG] [Thread-62870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:06:09.913 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:06:09.914 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:06:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:06:15.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:06:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:06:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 5, 47), 12.25, 43.58, 0.0, 18.42, 14.6, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:06:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:05:47
2025-11-17T23:06:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:06:16.090 [DEBUG] [Thread-62871] [transport.py] [_log()] starting thread (client mode): 0xd31502b0
2025-11-17T23:06:16.090 [DEBUG] [Thread-62871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:06:16.110 [DEBUG] [Thread-62871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:06:16.110 [INFO] [Thread-62871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:06:16.113 [DEBUG] [Thread-62871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:06:16.113 [DEBUG] [Thread-62871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:06:16.113 [DEBUG] [Thread-62871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:06:16.113 [DEBUG] [Thread-62871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:06:16.113 [DEBUG] [Thread-62871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:06:16.113 [DEBUG] [Thread-62871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] client lang: <none>
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] server lang: <none>
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] kex follows: False
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:06:16.114 [DEBUG] [Thread-62871] [transport.py] [_log()] Compression: none
2025-11-17T23:06:16.115 [DEBUG] [Thread-62871] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:06:16.133 [DEBUG] [Thread-62871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:06:16.133 [DEBUG] [Thread-62871] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:06:16.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:06:16.134 [DEBUG] [Thread-62871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:06:16.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:06:16.136 [DEBUG] [Thread-62871] [transport.py] [_log()] userauth is OK
2025-11-17T23:06:16.137 [DEBUG] [Thread-62871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:06:16.137 [DEBUG] [Thread-62871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:06:16.137 [DEBUG] [Thread-62871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:06:16.137 [DEBUG] [Thread-62871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:06:16.172 [INFO] [Thread-62871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:06:16.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:06:16.796 [DEBUG] [Thread-62871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:06:16.796 [DEBUG] [Thread-62871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:06:16.797 [DEBUG] [Thread-62871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:06:16.837 [DEBUG] [Thread-62871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:06:16.837 [DEBUG] [Thread-62871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:06:16.841 [DEBUG] [Thread-62871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:06:16.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:06:16.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:06:16.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:06:16.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:06:16.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:06:16.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:06:16.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:06:16.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:06:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:06:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.878865 -999.00  +14.60  15.48     48   +4.00 1 2 1 1 1     0    0 9.97 -42.18 ZneS. 17.8 15.5 174.8 19.7 15.3 -17.8 15.2 -17.4 15.0 -16.6 15.3 -17.1
2025-11-17T23:06:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:06:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:06:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.878865
2025-11-17T23:06:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:06:16.868 [DEBUG] [Thread-62871] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:06:16.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:06:16.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:06:16.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:06:16.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:06:16.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:05:47', tmtdew=12.25, humidity=43.58, cloud=0.0, wind=18.42, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:05:47', seeing=2.11, atlas_timestamp='2025-11-17T21:05:33.936', atlas_cloud=2, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:03:00')
2025-11-17T23:06:16.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:06:16.963 [DEBUG] [Thread-62874] [transport.py] [_log()] starting thread (client mode): 0xd3162830
2025-11-17T23:06:16.963 [DEBUG] [Thread-62874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:06:16.978 [DEBUG] [Thread-62874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:06:16.978 [INFO] [Thread-62874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:06:16.985 [DEBUG] [Thread-62874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] client lang: <none>
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] server lang: <none>
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] kex follows: False
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:06:16.986 [DEBUG] [Thread-62874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:06:16.987 [DEBUG] [Thread-62874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:06:16.987 [DEBUG] [Thread-62874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:06:16.987 [DEBUG] [Thread-62874] [transport.py] [_log()] Compression: none
2025-11-17T23:06:16.987 [DEBUG] [Thread-62874] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:06:17.048 [DEBUG] [Thread-62874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:06:17.049 [DEBUG] [Thread-62874] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:06:17.049 [DEBUG] [Thread-62874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:06:17.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:06:17.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:06:17.103 [DEBUG] [Thread-62874] [transport.py] [_log()] userauth is OK
2025-11-17T23:06:17.104 [DEBUG] [Thread-62874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:06:17.104 [DEBUG] [Thread-62874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:06:17.104 [DEBUG] [Thread-62874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:06:17.104 [DEBUG] [Thread-62874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:06:17.123 [INFO] [Thread-62874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:06:17.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:06:17.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:06:17.957 [DEBUG] [Thread-62874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:06:17.957 [DEBUG] [Thread-62874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:06:18.004 [DEBUG] [Thread-62874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:06:18.004 [DEBUG] [Thread-62874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:06:18.013 [DEBUG] [Thread-62874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:06:18.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:06:18.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:06:18.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:06:18.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:06:18.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:06:18.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:06:18.047 [DEBUG] [Thread-62874] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:06:22.338 [DEBUG] [Thread-62876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:06:37.387 [DEBUG] [Thread-62877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:06:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:06:48.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:06:48.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:06:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 6, 19), 12.25, 43.56, 0.0, 18.76, 14.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:06:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:06:19
2025-11-17T23:06:48.854 [DEBUG] [Thread-62878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:06:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:06:49.030 [DEBUG] [Thread-62879] [transport.py] [_log()] starting thread (client mode): 0xd3135390
2025-11-17T23:06:49.031 [DEBUG] [Thread-62879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:06:49.050 [DEBUG] [Thread-62879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:06:49.050 [INFO] [Thread-62879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:06:49.053 [DEBUG] [Thread-62879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:06:49.053 [DEBUG] [Thread-62879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:06:49.053 [DEBUG] [Thread-62879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:06:49.053 [DEBUG] [Thread-62879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:06:49.053 [DEBUG] [Thread-62879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:06:49.053 [DEBUG] [Thread-62879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:06:49.053 [DEBUG] [Thread-62879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] client lang: <none>
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] server lang: <none>
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] kex follows: False
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] Compression: none
2025-11-17T23:06:49.054 [DEBUG] [Thread-62879] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:06:49.071 [DEBUG] [Thread-62879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:06:49.071 [DEBUG] [Thread-62879] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:06:49.072 [DEBUG] [Thread-62879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:06:49.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:06:49.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:06:49.074 [DEBUG] [Thread-62879] [transport.py] [_log()] userauth is OK
2025-11-17T23:06:49.074 [DEBUG] [Thread-62879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:06:49.074 [DEBUG] [Thread-62879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:06:49.074 [DEBUG] [Thread-62879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:06:49.074 [DEBUG] [Thread-62879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:06:49.109 [INFO] [Thread-62879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:06:49.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:06:49.748 [DEBUG] [Thread-62879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:06:49.748 [DEBUG] [Thread-62879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:06:49.748 [DEBUG] [Thread-62879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:06:49.789 [DEBUG] [Thread-62879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:06:49.790 [DEBUG] [Thread-62879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:06:49.792 [DEBUG] [Thread-62879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:06:49.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:06:49.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:06:49.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:06:49.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:06:49.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:06:49.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:06:49.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:06:49.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:06:49.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:06:49.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.879213 -999.00  +14.60  12.64     48   +4.00 1 2 1 1 1     0    0 9.86 -42.83 ZneS. 12.0 12.6 160.2 24.4 15.3 -17.5 15.1 -17.1 14.9 -16.6 15.2 -16.9
2025-11-17T23:06:49.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:06:49.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:06:49.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.879213
2025-11-17T23:06:49.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:06:49.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:06:49.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:06:49.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:06:49.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:06:49.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:06:19', tmtdew=12.25, humidity=43.56, cloud=0.0, wind=18.76, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:06:19', seeing=2.11, atlas_timestamp='2025-11-17T21:06:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[1.5347499999999998, 1.6282500000000004, 1.6782500000000002, 1.7684999999999995, nan, nan, 1.7039999999999997, 1.6287500000000001, 1.6414999999999988, 1.2810000000000006, 1.6657499999999992, 1.8019999999999996, 1.952, 2.3082499999999992, 1.6899999999999995, 1.6624999999999996, 1.1132499999999999, 1.7270000000000003, 1.5749999999999993, 0.6922499999999987, 1.701999999999999, 2.4582499999999987, 2.3302500000000004, 1.7307500000000005, 1.7729999999999988, 1.383, 0.6732500000000003, 0.5110000000000001, 1.4595000000000002, 2.2315000000000005, 1.846000000000001, 0.47600000000000087, 0.5547499999999994], zp_timestamp='2025-11-17T21:03:00')
2025-11-17T23:06:49.819 [DEBUG] [Thread-62879] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:06:49.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:06:49.915 [DEBUG] [Thread-62882] [transport.py] [_log()] starting thread (client mode): 0xd0755f00
2025-11-17T23:06:49.916 [DEBUG] [Thread-62882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:06:49.931 [DEBUG] [Thread-62882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:06:49.931 [INFO] [Thread-62882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:06:49.939 [DEBUG] [Thread-62882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:06:49.939 [DEBUG] [Thread-62882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:06:49.939 [DEBUG] [Thread-62882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:06:49.939 [DEBUG] [Thread-62882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] client lang: <none>
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] server lang: <none>
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] kex follows: False
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:06:49.940 [DEBUG] [Thread-62882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:06:49.941 [DEBUG] [Thread-62882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:06:49.941 [DEBUG] [Thread-62882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:06:49.941 [DEBUG] [Thread-62882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:06:49.941 [DEBUG] [Thread-62882] [transport.py] [_log()] Compression: none
2025-11-17T23:06:49.941 [DEBUG] [Thread-62882] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:06:50.000 [DEBUG] [Thread-62882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:06:50.000 [DEBUG] [Thread-62882] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:06:50.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:06:50.001 [DEBUG] [Thread-62882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:06:50.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:06:50.056 [DEBUG] [Thread-62882] [transport.py] [_log()] userauth is OK
2025-11-17T23:06:50.056 [DEBUG] [Thread-62882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:06:50.056 [DEBUG] [Thread-62882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:06:50.056 [DEBUG] [Thread-62882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:06:50.056 [DEBUG] [Thread-62882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:06:50.075 [INFO] [Thread-62882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:06:50.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:06:50.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:06:50.917 [DEBUG] [Thread-62882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:06:50.917 [DEBUG] [Thread-62882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:06:50.964 [DEBUG] [Thread-62882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:06:50.964 [DEBUG] [Thread-62882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:06:50.974 [DEBUG] [Thread-62882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:06:50.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:06:50.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:06:50.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:06:51.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:06:51.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:06:51.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:06:51.009 [DEBUG] [Thread-62882] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:06:52.412 [DEBUG] [Thread-62884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:07:07.441 [DEBUG] [Thread-62885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:07:10.119 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:07:10.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:07:21.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:07:21.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:07:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:07:21.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 6, 51), 12.17, 43.64, 0.0, 21.77, 14.53, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:07:21.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:06:51
2025-11-17T23:07:21.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:07:21.965 [DEBUG] [Thread-62886] [transport.py] [_log()] starting thread (client mode): 0xd0756dd0
2025-11-17T23:07:21.966 [DEBUG] [Thread-62886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:07:21.985 [DEBUG] [Thread-62886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:07:21.986 [INFO] [Thread-62886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] client lang: <none>
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] server lang: <none>
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] kex follows: False
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] Compression: none
2025-11-17T23:07:21.989 [DEBUG] [Thread-62886] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:07:22.005 [DEBUG] [Thread-62886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:07:22.005 [DEBUG] [Thread-62886] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:07:22.006 [DEBUG] [Thread-62886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:07:22.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:07:22.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:07:22.007 [DEBUG] [Thread-62886] [transport.py] [_log()] userauth is OK
2025-11-17T23:07:22.007 [DEBUG] [Thread-62886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:07:22.007 [DEBUG] [Thread-62886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:07:22.007 [DEBUG] [Thread-62886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:07:22.007 [DEBUG] [Thread-62886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:07:22.018 [INFO] [Thread-62886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:07:22.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:07:22.474 [DEBUG] [Thread-62888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:07:22.637 [DEBUG] [Thread-62886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:07:22.637 [DEBUG] [Thread-62886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:07:22.637 [DEBUG] [Thread-62886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:07:22.678 [DEBUG] [Thread-62886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:07:22.678 [DEBUG] [Thread-62886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:07:22.680 [DEBUG] [Thread-62886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:07:22.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:07:22.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:07:22.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:07:22.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:07:22.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:07:22.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:07:22.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:07:22.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:07:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:07:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.879560 -999.00  +14.60  16.45     48   +3.90 1 2 1 1 1     0    0 9.68 -42.59 ZNESw 18.0 16.4 170.0 19.0 15.3 -17.3 15.2 -17.0 14.9 -16.4 15.3 -16.6
2025-11-17T23:07:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:07:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:07:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.879560
2025-11-17T23:07:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:07:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:07:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:07:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:07:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:07:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:06:51', tmtdew=12.17, humidity=43.64, cloud=0.0, wind=21.77, temperature=14.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:06:51', seeing=2.11, atlas_timestamp='2025-11-17T21:06:33.984', atlas_cloud=2, atlas_rain=1, zp_data=[1.2097499999999997, 0.8722500000000002, 1.1792500000000006, 1.2334999999999994, 1.2389999999999999, nan, 1.3889999999999993, 1.3982500000000009, 1.5094999999999992, 1.1470000000000002, 1.01675, 0.7809999999999997, 0.9939999999999998, 1.45125, 1.3899999999999997, 1.593, 1.8642500000000002, 1.255, 0.8499999999999996, 1.0632499999999991, 1.472999999999999, nan, 1.4282500000000011, 1.8557500000000005, 1.940999999999999, 1.3659999999999997, 0.35875000000000057, 0.5790000000000006, 1.4005, nan, 0.5740000000000007, 1.849000000000001, 2.108749999999999], zp_timestamp='2025-11-17T21:06:00')
2025-11-17T23:07:22.698 [DEBUG] [Thread-62886] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:07:22.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:07:22.782 [DEBUG] [Thread-62890] [transport.py] [_log()] starting thread (client mode): 0xd317f940
2025-11-17T23:07:22.782 [DEBUG] [Thread-62890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:07:22.801 [DEBUG] [Thread-62890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:07:22.802 [INFO] [Thread-62890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] client lang: <none>
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] server lang: <none>
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] kex follows: False
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:07:22.809 [DEBUG] [Thread-62890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:07:22.810 [DEBUG] [Thread-62890] [transport.py] [_log()] Compression: none
2025-11-17T23:07:22.810 [DEBUG] [Thread-62890] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:07:22.866 [DEBUG] [Thread-62890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:07:22.866 [DEBUG] [Thread-62890] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:07:22.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:07:22.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:07:22.866 [DEBUG] [Thread-62890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:07:22.923 [DEBUG] [Thread-62890] [transport.py] [_log()] userauth is OK
2025-11-17T23:07:22.923 [DEBUG] [Thread-62890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:07:22.923 [DEBUG] [Thread-62890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:07:22.923 [DEBUG] [Thread-62890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:07:22.923 [DEBUG] [Thread-62890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:07:22.937 [INFO] [Thread-62890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:07:22.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:07:22.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:07:23.769 [DEBUG] [Thread-62890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:07:23.769 [DEBUG] [Thread-62890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:07:23.817 [DEBUG] [Thread-62890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:07:23.817 [DEBUG] [Thread-62890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:07:23.825 [DEBUG] [Thread-62890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:07:23.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:07:23.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:07:23.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:07:23.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:07:23.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:07:23.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:07:23.856 [DEBUG] [Thread-62890] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:07:37.503 [DEBUG] [Thread-62892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:07:48.925 [DEBUG] [Thread-62893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:07:52.551 [DEBUG] [Thread-62894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:07:53.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:07:53.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:07:53.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:07:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 7, 23), 12.16, 43.71, 0.0, 20.59, 14.58, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:07:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:07:23
2025-11-17T23:07:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:07:54.766 [DEBUG] [Thread-62895] [transport.py] [_log()] starting thread (client mode): 0xd3153940
2025-11-17T23:07:54.766 [DEBUG] [Thread-62895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:07:54.787 [DEBUG] [Thread-62895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:07:54.788 [INFO] [Thread-62895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:07:54.790 [DEBUG] [Thread-62895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] client lang: <none>
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] server lang: <none>
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] kex follows: False
2025-11-17T23:07:54.791 [DEBUG] [Thread-62895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:07:54.792 [DEBUG] [Thread-62895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:07:54.792 [DEBUG] [Thread-62895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:07:54.792 [DEBUG] [Thread-62895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:07:54.792 [DEBUG] [Thread-62895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:07:54.792 [DEBUG] [Thread-62895] [transport.py] [_log()] Compression: none
2025-11-17T23:07:54.792 [DEBUG] [Thread-62895] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:07:54.811 [DEBUG] [Thread-62895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:07:54.811 [DEBUG] [Thread-62895] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:07:54.812 [DEBUG] [Thread-62895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:07:54.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:07:54.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:07:54.814 [DEBUG] [Thread-62895] [transport.py] [_log()] userauth is OK
2025-11-17T23:07:54.814 [DEBUG] [Thread-62895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:07:54.815 [DEBUG] [Thread-62895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:07:54.815 [DEBUG] [Thread-62895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:07:54.815 [DEBUG] [Thread-62895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:07:54.851 [INFO] [Thread-62895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:07:54.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:07:55.509 [DEBUG] [Thread-62895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:07:55.509 [DEBUG] [Thread-62895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:07:55.509 [DEBUG] [Thread-62895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:07:55.551 [DEBUG] [Thread-62895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:07:55.551 [DEBUG] [Thread-62895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:07:55.554 [DEBUG] [Thread-62895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:07:55.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:07:55.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:07:55.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:07:55.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:07:55.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:07:55.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:07:55.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:07:55.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:07:55.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:07:55.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.880255 -999.00  +14.60  13.50     48   +4.00 1 1 1 1 1     0    0 9.48 -43.70 ZNESW 16.7 13.5 153.4 20.3 15.3 -16.9 15.1 -16.7 14.9 -16.4 15.3 -16.5
2025-11-17T23:07:55.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:07:55.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:07:55.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.880255
2025-11-17T23:07:55.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:07:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:07:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:07:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:07:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:07:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:07:23', tmtdew=12.16, humidity=43.71, cloud=0.0, wind=20.59, temperature=14.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:07:23', seeing=2.11, atlas_timestamp='2025-11-17T21:07:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[1.2097499999999997, 0.8722500000000002, 1.1792500000000006, 1.2334999999999994, 1.2389999999999999, nan, 1.3889999999999993, 1.3982500000000009, 1.5094999999999992, 1.1470000000000002, 1.01675, 0.7809999999999997, 0.9939999999999998, 1.45125, 1.3899999999999997, 1.593, 1.8642500000000002, 1.255, 0.8499999999999996, 1.0632499999999991, 1.472999999999999, nan, 1.4282500000000011, 1.8557500000000005, 1.940999999999999, 1.3659999999999997, 0.35875000000000057, 0.5790000000000006, 1.4005, nan, 0.5740000000000007, 1.849000000000001, 2.108749999999999], zp_timestamp='2025-11-17T21:06:00')
2025-11-17T23:07:55.580 [DEBUG] [Thread-62895] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:07:55.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:07:55.678 [DEBUG] [Thread-62898] [transport.py] [_log()] starting thread (client mode): 0xd3152b00
2025-11-17T23:07:55.679 [DEBUG] [Thread-62898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:07:55.693 [DEBUG] [Thread-62898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:07:55.693 [INFO] [Thread-62898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:07:55.701 [DEBUG] [Thread-62898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:07:55.701 [DEBUG] [Thread-62898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:07:55.701 [DEBUG] [Thread-62898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:07:55.701 [DEBUG] [Thread-62898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:07:55.701 [DEBUG] [Thread-62898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:07:55.701 [DEBUG] [Thread-62898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:07:55.701 [DEBUG] [Thread-62898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:07:55.701 [DEBUG] [Thread-62898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] client lang: <none>
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] server lang: <none>
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] kex follows: False
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:07:55.702 [DEBUG] [Thread-62898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:07:55.703 [DEBUG] [Thread-62898] [transport.py] [_log()] Compression: none
2025-11-17T23:07:55.703 [DEBUG] [Thread-62898] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:07:55.764 [DEBUG] [Thread-62898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:07:55.764 [DEBUG] [Thread-62898] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:07:55.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:07:55.765 [DEBUG] [Thread-62898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:07:55.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:07:55.820 [DEBUG] [Thread-62898] [transport.py] [_log()] userauth is OK
2025-11-17T23:07:55.820 [DEBUG] [Thread-62898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:07:55.820 [DEBUG] [Thread-62898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:07:55.820 [DEBUG] [Thread-62898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:07:55.820 [DEBUG] [Thread-62898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:07:55.839 [INFO] [Thread-62898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:07:55.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:07:55.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:07:56.682 [DEBUG] [Thread-62898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:07:56.682 [DEBUG] [Thread-62898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:07:56.731 [DEBUG] [Thread-62898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:07:56.731 [DEBUG] [Thread-62898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:07:56.739 [DEBUG] [Thread-62898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:07:56.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:07:56.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:07:56.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:07:56.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:07:56.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:07:56.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:07:56.770 [DEBUG] [Thread-62898] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:08:07.581 [DEBUG] [Thread-62900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:08:10.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:08:10.327 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:08:22.623 [DEBUG] [Thread-62901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:08:26.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:08:26.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:08:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:08:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 7, 55), 12.19, 43.76, 0.0, 17.06, 14.62, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:08:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:07:55
2025-11-17T23:08:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:08:27.700 [DEBUG] [Thread-62902] [transport.py] [_log()] starting thread (client mode): 0xd0703b80
2025-11-17T23:08:27.700 [DEBUG] [Thread-62902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:08:27.721 [DEBUG] [Thread-62902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:08:27.721 [INFO] [Thread-62902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:08:27.724 [DEBUG] [Thread-62902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:08:27.724 [DEBUG] [Thread-62902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:08:27.724 [DEBUG] [Thread-62902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] client lang: <none>
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] server lang: <none>
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] kex follows: False
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] Compression: none
2025-11-17T23:08:27.725 [DEBUG] [Thread-62902] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:08:27.743 [DEBUG] [Thread-62902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:08:27.743 [DEBUG] [Thread-62902] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:08:27.744 [DEBUG] [Thread-62902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:08:27.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:08:27.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:08:27.746 [DEBUG] [Thread-62902] [transport.py] [_log()] userauth is OK
2025-11-17T23:08:27.746 [DEBUG] [Thread-62902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:08:27.746 [DEBUG] [Thread-62902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:08:27.746 [DEBUG] [Thread-62902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:08:27.746 [DEBUG] [Thread-62902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:08:27.770 [INFO] [Thread-62902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:08:27.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:08:28.365 [DEBUG] [Thread-62902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:08:28.365 [DEBUG] [Thread-62902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:08:28.365 [DEBUG] [Thread-62902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:08:28.406 [DEBUG] [Thread-62902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:08:28.406 [DEBUG] [Thread-62902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:08:28.408 [DEBUG] [Thread-62902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:08:28.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:08:28.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:08:28.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:08:28.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:08:28.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:08:28.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:08:28.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.880602 -999.00  +14.60  17.64     48   +4.00 1 1 1 1 1     0    0 9.41 -41.76 ZNESW 12.8 17.6 159.0 20.3 15.3 -16.7 15.2 -16.7 14.9 -16.2 15.2 -16.3
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.880602
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:08:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:07:55', tmtdew=12.19, humidity=43.76, cloud=0.0, wind=17.06, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:07:56', seeing=2.11, atlas_timestamp='2025-11-17T21:08:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[1.2097499999999997, 0.8722500000000002, 1.1792500000000006, 1.2334999999999994, 1.2389999999999999, nan, 1.3889999999999993, 1.3982500000000009, 1.5094999999999992, 1.1470000000000002, 1.01675, 0.7809999999999997, 0.9939999999999998, 1.45125, 1.3899999999999997, 1.593, 1.8642500000000002, 1.255, 0.8499999999999996, 1.0632499999999991, 1.472999999999999, nan, 1.4282500000000011, 1.8557500000000005, 1.940999999999999, 1.3659999999999997, 0.35875000000000057, 0.5790000000000006, 1.4005, nan, 0.5740000000000007, 1.849000000000001, 2.108749999999999], zp_timestamp='2025-11-17T21:06:00')
2025-11-17T23:08:28.427 [DEBUG] [Thread-62902] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:08:28.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:08:28.512 [DEBUG] [Thread-62905] [transport.py] [_log()] starting thread (client mode): 0xd0756e30
2025-11-17T23:08:28.513 [DEBUG] [Thread-62905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:08:28.532 [DEBUG] [Thread-62905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:08:28.532 [INFO] [Thread-62905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:08:28.539 [DEBUG] [Thread-62905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] client lang: <none>
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] server lang: <none>
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] kex follows: False
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] Compression: none
2025-11-17T23:08:28.540 [DEBUG] [Thread-62905] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:08:28.596 [DEBUG] [Thread-62905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:08:28.596 [DEBUG] [Thread-62905] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:08:28.596 [DEBUG] [Thread-62905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:08:28.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:08:28.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:08:28.652 [DEBUG] [Thread-62905] [transport.py] [_log()] userauth is OK
2025-11-17T23:08:28.652 [DEBUG] [Thread-62905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:08:28.652 [DEBUG] [Thread-62905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:08:28.652 [DEBUG] [Thread-62905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:08:28.652 [DEBUG] [Thread-62905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:08:28.672 [INFO] [Thread-62905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:08:28.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:08:28.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:08:29.518 [DEBUG] [Thread-62905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:08:29.518 [DEBUG] [Thread-62905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:08:29.566 [DEBUG] [Thread-62905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:08:29.566 [DEBUG] [Thread-62905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:08:29.574 [DEBUG] [Thread-62905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:08:29.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:08:29.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:08:29.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:08:29.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:08:29.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:08:29.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:08:29.606 [DEBUG] [Thread-62905] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:08:37.651 [DEBUG] [Thread-62907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:08:48.995 [DEBUG] [Thread-62908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:08:52.678 [DEBUG] [Thread-62909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:08:59.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:08:59.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:08:59.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:09:00.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 8, 27), 12.2, 43.73, 0.0, 16.94, 14.63, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:09:00.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:08:27
2025-11-17T23:09:00.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:09:00.559 [DEBUG] [Thread-62910] [transport.py] [_log()] starting thread (client mode): 0xd317d360
2025-11-17T23:09:00.559 [DEBUG] [Thread-62910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:09:00.571 [DEBUG] [Thread-62910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:09:00.571 [INFO] [Thread-62910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:09:00.572 [DEBUG] [Thread-62910] [transport.py] [_log()] client lang: <none>
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] server lang: <none>
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] kex follows: False
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] Compression: none
2025-11-17T23:09:00.573 [DEBUG] [Thread-62910] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:09:00.579 [DEBUG] [Thread-62910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:09:00.579 [DEBUG] [Thread-62910] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:09:00.579 [DEBUG] [Thread-62910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:09:00.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:09:00.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:09:00.580 [DEBUG] [Thread-62910] [transport.py] [_log()] userauth is OK
2025-11-17T23:09:00.580 [DEBUG] [Thread-62910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:09:00.580 [DEBUG] [Thread-62910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:09:00.580 [DEBUG] [Thread-62910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:09:00.580 [DEBUG] [Thread-62910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:09:00.589 [INFO] [Thread-62910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:09:00.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:09:01.201 [DEBUG] [Thread-62910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:09:01.201 [DEBUG] [Thread-62910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:09:01.201 [DEBUG] [Thread-62910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:09:01.242 [DEBUG] [Thread-62910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:09:01.242 [DEBUG] [Thread-62910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:09:01.244 [DEBUG] [Thread-62910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:09:01.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:09:01.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:09:01.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:09:01.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:09:01.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:09:01.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:09:01.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.880949 -999.00  +14.60  13.03     48   +3.90 1 1 1 1 1     0    0 9.73 -40.96 ZNESW 10.5 13.0 161.3 19.0 15.3 -16.7 15.1 -16.8 14.9 -16.4 15.3 -16.4
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.880949
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:09:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:08:27', tmtdew=12.2, humidity=43.73, cloud=0.0, wind=16.94, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:08:28', seeing=2.01, atlas_timestamp='2025-11-17T21:08:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.2097499999999997, 0.8722500000000002, 1.1792500000000006, 1.2334999999999994, 1.2389999999999999, nan, 1.3889999999999993, 1.3982500000000009, 1.5094999999999992, 1.1470000000000002, 1.01675, 0.7809999999999997, 0.9939999999999998, 1.45125, 1.3899999999999997, 1.593, 1.8642500000000002, 1.255, 0.8499999999999996, 1.0632499999999991, 1.472999999999999, nan, 1.4282500000000011, 1.8557500000000005, 1.940999999999999, 1.3659999999999997, 0.35875000000000057, 0.5790000000000006, 1.4005, nan, 0.5740000000000007, 1.849000000000001, 2.108749999999999], zp_timestamp='2025-11-17T21:06:00')
2025-11-17T23:09:01.263 [DEBUG] [Thread-62910] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:09:01.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:09:01.348 [DEBUG] [Thread-62913] [transport.py] [_log()] starting thread (client mode): 0xd31ce740
2025-11-17T23:09:01.348 [DEBUG] [Thread-62913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:09:01.363 [DEBUG] [Thread-62913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:09:01.363 [INFO] [Thread-62913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] client lang: <none>
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] server lang: <none>
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] kex follows: False
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:09:01.370 [DEBUG] [Thread-62913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:09:01.371 [DEBUG] [Thread-62913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:09:01.371 [DEBUG] [Thread-62913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:09:01.371 [DEBUG] [Thread-62913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:09:01.371 [DEBUG] [Thread-62913] [transport.py] [_log()] Compression: none
2025-11-17T23:09:01.371 [DEBUG] [Thread-62913] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:09:01.430 [DEBUG] [Thread-62913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:09:01.430 [DEBUG] [Thread-62913] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:09:01.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:09:01.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:09:01.431 [DEBUG] [Thread-62913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:09:01.488 [DEBUG] [Thread-62913] [transport.py] [_log()] userauth is OK
2025-11-17T23:09:01.488 [DEBUG] [Thread-62913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:09:01.488 [DEBUG] [Thread-62913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:09:01.488 [DEBUG] [Thread-62913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:09:01.488 [DEBUG] [Thread-62913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:09:01.503 [INFO] [Thread-62913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:09:01.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:09:01.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:09:02.415 [DEBUG] [Thread-62913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:09:02.415 [DEBUG] [Thread-62913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:09:02.462 [DEBUG] [Thread-62913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:09:02.462 [DEBUG] [Thread-62913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:09:02.471 [DEBUG] [Thread-62913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:09:02.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:09:02.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:09:02.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:09:02.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:09:02.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:09:02.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:09:02.505 [DEBUG] [Thread-62913] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:09:07.705 [DEBUG] [Thread-62915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:09:10.534 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:09:10.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:09:22.750 [DEBUG] [Thread-62916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:09:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:09:32.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:09:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:09:33.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 8, 59), 12.2, 43.73, 0.0, 16.75, 14.55, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:09:33.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:08:59
2025-11-17T23:09:33.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:09:33.516 [DEBUG] [Thread-62917] [transport.py] [_log()] starting thread (client mode): 0xd0755ed0
2025-11-17T23:09:33.516 [DEBUG] [Thread-62917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:09:33.537 [DEBUG] [Thread-62917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:09:33.537 [INFO] [Thread-62917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] client lang: <none>
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] server lang: <none>
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] kex follows: False
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:09:33.540 [DEBUG] [Thread-62917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:09:33.541 [DEBUG] [Thread-62917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:09:33.541 [DEBUG] [Thread-62917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:09:33.541 [DEBUG] [Thread-62917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:09:33.541 [DEBUG] [Thread-62917] [transport.py] [_log()] Compression: none
2025-11-17T23:09:33.541 [DEBUG] [Thread-62917] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:09:33.555 [DEBUG] [Thread-62917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:09:33.555 [DEBUG] [Thread-62917] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:09:33.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:09:33.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:09:33.555 [DEBUG] [Thread-62917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:09:33.556 [DEBUG] [Thread-62917] [transport.py] [_log()] userauth is OK
2025-11-17T23:09:33.556 [DEBUG] [Thread-62917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:09:33.556 [DEBUG] [Thread-62917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:09:33.556 [DEBUG] [Thread-62917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:09:33.556 [DEBUG] [Thread-62917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:09:33.565 [INFO] [Thread-62917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:09:33.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:09:34.184 [DEBUG] [Thread-62917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:09:34.184 [DEBUG] [Thread-62917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:09:34.185 [DEBUG] [Thread-62917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:09:34.225 [DEBUG] [Thread-62917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:09:34.226 [DEBUG] [Thread-62917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:09:34.228 [DEBUG] [Thread-62917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:09:34.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:09:34.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:09:34.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:09:34.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:09:34.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:09:34.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:09:34.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:09:34.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:09:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:09:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.881296 -999.00  +14.60  12.48     49   +4.00 1 2 1 1 1     0    0 9.99 -40.69 zNESW 16.7 12.5 170.0 20.1 15.2 -16.8 15.1 -16.9 14.9 -16.5 15.2 -16.4
2025-11-17T23:09:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:09:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:09:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.881296
2025-11-17T23:09:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:09:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:09:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:09:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:09:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:09:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:08:59', tmtdew=12.2, humidity=43.73, cloud=0.0, wind=16.75, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:09:32', seeing=2.01, atlas_timestamp='2025-11-17T21:09:03.974', atlas_cloud=2, atlas_rain=1, zp_data=[1.2097499999999997, 0.8722500000000002, 1.1792500000000006, 1.2334999999999994, 1.2389999999999999, nan, 1.3889999999999993, 1.3982500000000009, 1.5094999999999992, 1.1470000000000002, 1.01675, 0.7809999999999997, 0.9939999999999998, 1.45125, 1.3899999999999997, 1.593, 1.8642500000000002, 1.255, 0.8499999999999996, 1.0632499999999991, 1.472999999999999, nan, 1.4282500000000011, 1.8557500000000005, 1.940999999999999, 1.3659999999999997, 0.35875000000000057, 0.5790000000000006, 1.4005, nan, 0.5740000000000007, 1.849000000000001, 2.108749999999999], zp_timestamp='2025-11-17T21:06:00')
2025-11-17T23:09:34.254 [DEBUG] [Thread-62917] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:09:34.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:09:34.353 [DEBUG] [Thread-62920] [transport.py] [_log()] starting thread (client mode): 0xd0757bb0
2025-11-17T23:09:34.353 [DEBUG] [Thread-62920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:09:34.368 [DEBUG] [Thread-62920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:09:34.368 [INFO] [Thread-62920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:09:34.375 [DEBUG] [Thread-62920] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:09:34.375 [DEBUG] [Thread-62920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:09:34.375 [DEBUG] [Thread-62920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] client lang: <none>
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] server lang: <none>
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] kex follows: False
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] Compression: none
2025-11-17T23:09:34.376 [DEBUG] [Thread-62920] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:09:34.432 [DEBUG] [Thread-62920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:09:34.432 [DEBUG] [Thread-62920] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:09:34.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:09:34.433 [DEBUG] [Thread-62920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:09:34.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:09:34.488 [DEBUG] [Thread-62920] [transport.py] [_log()] userauth is OK
2025-11-17T23:09:34.488 [DEBUG] [Thread-62920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:09:34.488 [DEBUG] [Thread-62920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:09:34.488 [DEBUG] [Thread-62920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:09:34.489 [DEBUG] [Thread-62920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:09:34.508 [INFO] [Thread-62920] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:09:34.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:09:34.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:09:35.354 [DEBUG] [Thread-62920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:09:35.354 [DEBUG] [Thread-62920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:09:35.401 [DEBUG] [Thread-62920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:09:35.401 [DEBUG] [Thread-62920] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:09:35.410 [DEBUG] [Thread-62920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:09:35.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:09:35.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:09:35.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:09:35.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:09:35.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:09:35.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:09:35.447 [DEBUG] [Thread-62920] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:09:37.775 [DEBUG] [Thread-62922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:09:49.079 [DEBUG] [Thread-62923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:09:52.817 [DEBUG] [Thread-62924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:10:05.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:10:05.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:10:05.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
2025-11-17T23:10:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 9, 31), 12.18, 43.78, 0.0, 16.22, 14.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:10:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:09:31
2025-11-17T23:10:06.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:10:06.404 [DEBUG] [Thread-62925] [transport.py] [_log()] starting thread (client mode): 0xd0755210
2025-11-17T23:10:06.404 [DEBUG] [Thread-62925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:10:06.423 [DEBUG] [Thread-62925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:10:06.423 [INFO] [Thread-62925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] client lang: <none>
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] server lang: <none>
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] kex follows: False
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] Compression: none
2025-11-17T23:10:06.427 [DEBUG] [Thread-62925] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:10:06.443 [DEBUG] [Thread-62925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:10:06.444 [DEBUG] [Thread-62925] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:10:06.444 [DEBUG] [Thread-62925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:10:06.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:10:06.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:10:06.489 [DEBUG] [Thread-62925] [transport.py] [_log()] userauth is OK
2025-11-17T23:10:06.489 [DEBUG] [Thread-62925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:10:06.489 [DEBUG] [Thread-62925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:10:06.489 [DEBUG] [Thread-62925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:10:06.489 [DEBUG] [Thread-62925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:10:06.509 [INFO] [Thread-62925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:10:06.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:10:07.844 [DEBUG] [Thread-62927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:10:08.564 [DEBUG] [Thread-62925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:10:08.564 [DEBUG] [Thread-62925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:10:08.565 [DEBUG] [Thread-62925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:10:08.605 [DEBUG] [Thread-62925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:10:08.605 [DEBUG] [Thread-62925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:10:08.608 [DEBUG] [Thread-62925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:10:08.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:10:08.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:10:08.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:10:08.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:10:08.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:10:08.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:10:08.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:10:08.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:10:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:10:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.881643 -999.00  +14.60  13.72     49   +4.00 1 2 1 1 1     0    0 9.74 -39.89 .NESW 12.2 13.7 165.4 19.0 15.2 -16.9 15.1 -17.0 14.9 -16.7 15.3 -16.5
2025-11-17T23:10:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:10:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:10:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.881643
2025-11-17T23:10:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:10:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:10:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:10:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:10:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:10:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:09:31', tmtdew=12.18, humidity=43.78, cloud=0.0, wind=16.22, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:10:04', seeing=2.01, atlas_timestamp='2025-11-17T21:09:33.955', atlas_cloud=2, atlas_rain=1, zp_data=[1.2097499999999997, 0.8722500000000002, 1.1792500000000006, 1.2334999999999994, 1.2389999999999999, nan, 1.3889999999999993, 1.3982500000000009, 1.5094999999999992, 1.1470000000000002, 1.01675, 0.7809999999999997, 0.9939999999999998, 1.45125, 1.3899999999999997, 1.593, 1.8642500000000002, 1.255, 0.8499999999999996, 1.0632499999999991, 1.472999999999999, nan, 1.4282500000000011, 1.8557500000000005, 1.940999999999999, 1.3659999999999997, 0.35875000000000057, 0.5790000000000006, 1.4005, nan, 0.5740000000000007, 1.849000000000001, 2.108749999999999], zp_timestamp='2025-11-17T21:06:00')
2025-11-17T23:10:08.776 [DEBUG] [Thread-62925] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:10:08.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:10:08.874 [DEBUG] [Thread-62929] [transport.py] [_log()] starting thread (client mode): 0xd0755240
2025-11-17T23:10:08.874 [DEBUG] [Thread-62929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:10:08.889 [DEBUG] [Thread-62929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:10:08.889 [INFO] [Thread-62929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] client lang: <none>
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] server lang: <none>
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] kex follows: False
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:10:08.898 [DEBUG] [Thread-62929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:10:08.899 [DEBUG] [Thread-62929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:10:08.899 [DEBUG] [Thread-62929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:10:08.899 [DEBUG] [Thread-62929] [transport.py] [_log()] Compression: none
2025-11-17T23:10:08.899 [DEBUG] [Thread-62929] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:10:08.957 [DEBUG] [Thread-62929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:10:08.958 [DEBUG] [Thread-62929] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:10:08.958 [DEBUG] [Thread-62929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:10:08.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:10:08.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:10:09.018 [DEBUG] [Thread-62929] [transport.py] [_log()] userauth is OK
2025-11-17T23:10:09.019 [DEBUG] [Thread-62929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:10:09.019 [DEBUG] [Thread-62929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:10:09.019 [DEBUG] [Thread-62929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:10:09.019 [DEBUG] [Thread-62929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:10:09.038 [INFO] [Thread-62929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:10:09.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:10:09.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:10:09.879 [DEBUG] [Thread-62929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:10:09.879 [DEBUG] [Thread-62929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:10:09.929 [DEBUG] [Thread-62929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:10:09.930 [DEBUG] [Thread-62929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:10:09.942 [DEBUG] [Thread-62929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:10:09.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:10:09.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:10:09.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:10:09.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:10:09.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:10:09.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:10:09.991 [DEBUG] [Thread-62929] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:10:10.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:10:10.743 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:10:22.874 [DEBUG] [Thread-62931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:10:37.922 [DEBUG] [Thread-62932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:10:40.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:10:40.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:10:40.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:10:40.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 10, 36), 12.13, 43.76, 0.0, 17.2, 14.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:10:40.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:10:36
2025-11-17T23:10:40.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:10:40.963 [DEBUG] [Thread-62933] [transport.py] [_log()] starting thread (client mode): 0xd0703b80
2025-11-17T23:10:40.963 [DEBUG] [Thread-62933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:10:40.984 [DEBUG] [Thread-62933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:10:40.984 [INFO] [Thread-62933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] client lang: <none>
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] server lang: <none>
2025-11-17T23:10:40.985 [DEBUG] [Thread-62933] [transport.py] [_log()] kex follows: False
2025-11-17T23:10:40.986 [DEBUG] [Thread-62933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:10:40.986 [DEBUG] [Thread-62933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:10:40.986 [DEBUG] [Thread-62933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:10:40.986 [DEBUG] [Thread-62933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:10:40.986 [DEBUG] [Thread-62933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:10:40.986 [DEBUG] [Thread-62933] [transport.py] [_log()] Compression: none
2025-11-17T23:10:40.986 [DEBUG] [Thread-62933] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:10:41.001 [DEBUG] [Thread-62933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:10:41.001 [DEBUG] [Thread-62933] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:10:41.001 [DEBUG] [Thread-62933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:10:41.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:10:41.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:10:41.002 [DEBUG] [Thread-62933] [transport.py] [_log()] userauth is OK
2025-11-17T23:10:41.002 [DEBUG] [Thread-62933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:10:41.002 [DEBUG] [Thread-62933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:10:41.002 [DEBUG] [Thread-62933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:10:41.002 [DEBUG] [Thread-62933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:10:41.011 [INFO] [Thread-62933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:10:41.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:10:41.630 [DEBUG] [Thread-62933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:10:41.630 [DEBUG] [Thread-62933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:10:41.630 [DEBUG] [Thread-62933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:10:41.670 [DEBUG] [Thread-62933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:10:41.670 [DEBUG] [Thread-62933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:10:41.674 [DEBUG] [Thread-62933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:10:41.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:10:41.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:10:41.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:10:41.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:10:41.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:10:41.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:10:41.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:10:41.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:10:41.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:10:41.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.881991 -999.00  +14.60  13.33     49   +4.00 1 2 1 1 1     0    0 9.75 -43.11 .NESW 14.1 13.3 157.8 17.3 -999.0 -999.0 15.1 -17.3 14.9 -16.9 15.2 -16.9
2025-11-17T23:10:41.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:10:41.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:10:41.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.881991
2025-11-17T23:10:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:10:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:10:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:10:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:10:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:10:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:10:36', tmtdew=12.13, humidity=43.76, cloud=0.0, wind=17.2, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:10:36', seeing=2.0, atlas_timestamp='2025-11-17T21:10:04.022', atlas_cloud=2, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:09:00')
2025-11-17T23:10:41.697 [DEBUG] [Thread-62933] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:10:41.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:10:41.797 [DEBUG] [Thread-62936] [transport.py] [_log()] starting thread (client mode): 0xd3135c60
2025-11-17T23:10:41.797 [DEBUG] [Thread-62936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:10:41.812 [DEBUG] [Thread-62936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:10:41.812 [INFO] [Thread-62936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:10:41.820 [DEBUG] [Thread-62936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] client lang: <none>
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] server lang: <none>
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] kex follows: False
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] Compression: none
2025-11-17T23:10:41.821 [DEBUG] [Thread-62936] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:10:41.880 [DEBUG] [Thread-62936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:10:41.880 [DEBUG] [Thread-62936] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:10:41.881 [DEBUG] [Thread-62936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:10:41.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:10:41.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:10:41.936 [DEBUG] [Thread-62936] [transport.py] [_log()] userauth is OK
2025-11-17T23:10:41.936 [DEBUG] [Thread-62936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:10:41.937 [DEBUG] [Thread-62936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:10:41.937 [DEBUG] [Thread-62936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:10:41.937 [DEBUG] [Thread-62936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:10:41.955 [INFO] [Thread-62936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:10:41.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:10:41.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:10:42.836 [DEBUG] [Thread-62936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:10:42.837 [DEBUG] [Thread-62936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:10:42.884 [DEBUG] [Thread-62936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:10:42.884 [DEBUG] [Thread-62936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:10:42.893 [DEBUG] [Thread-62936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:10:42.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:10:42.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:10:42.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:10:42.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:10:42.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:10:42.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:10:42.927 [DEBUG] [Thread-62936] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:10:49.155 [DEBUG] [Thread-62938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:10:52.948 [DEBUG] [Thread-62939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:11:08.000 [DEBUG] [Thread-62940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:11:10.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:11:10.951 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:11:12.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:11:12.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:11:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:11:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 11, 8), 12.12, 43.79, 0.0, 15.79, 14.45, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:11:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:11:08
2025-11-17T23:11:13.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:11:13.877 [DEBUG] [Thread-62941] [transport.py] [_log()] starting thread (client mode): 0xd3160a60
2025-11-17T23:11:13.877 [DEBUG] [Thread-62941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:11:13.896 [DEBUG] [Thread-62941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:11:13.897 [INFO] [Thread-62941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:11:13.900 [DEBUG] [Thread-62941] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:11:13.900 [DEBUG] [Thread-62941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:11:13.900 [DEBUG] [Thread-62941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:11:13.900 [DEBUG] [Thread-62941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:11:13.900 [DEBUG] [Thread-62941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] client lang: <none>
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] server lang: <none>
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] kex follows: False
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] Compression: none
2025-11-17T23:11:13.901 [DEBUG] [Thread-62941] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:11:13.916 [DEBUG] [Thread-62941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:11:13.917 [DEBUG] [Thread-62941] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:11:13.917 [DEBUG] [Thread-62941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:11:13.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:11:13.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:11:13.919 [DEBUG] [Thread-62941] [transport.py] [_log()] userauth is OK
2025-11-17T23:11:13.919 [DEBUG] [Thread-62941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:11:13.919 [DEBUG] [Thread-62941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:11:13.920 [DEBUG] [Thread-62941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:11:13.920 [DEBUG] [Thread-62941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:11:13.943 [INFO] [Thread-62941] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:11:13.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:11:14.592 [DEBUG] [Thread-62941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:11:14.592 [DEBUG] [Thread-62941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:11:14.592 [DEBUG] [Thread-62941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:11:14.633 [DEBUG] [Thread-62941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:11:14.633 [DEBUG] [Thread-62941] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:11:14.636 [DEBUG] [Thread-62941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:11:14.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:11:14.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:11:14.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:11:14.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:11:14.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:11:14.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:11:14.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:11:14.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:11:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:11:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.882685 -999.00  +14.50  12.91     48   +3.90 1 2 1 1 1     0    0 9.54 -42.88 .NESW 13.0 12.9 163.4 17.5 15.2 -17.4 15.1 -17.6 14.8 -17.3 15.2 -17.1
2025-11-17T23:11:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:11:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:11:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.882685
2025-11-17T23:11:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:11:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:11:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:11:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:11:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:11:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:11:08', tmtdew=12.12, humidity=43.79, cloud=0.0, wind=15.79, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:11:08', seeing=1.93, atlas_timestamp='2025-11-17T21:11:03.984', atlas_cloud=2, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:09:00')
2025-11-17T23:11:14.648 [DEBUG] [Thread-62941] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:11:14.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:11:14.734 [DEBUG] [Thread-62944] [transport.py] [_log()] starting thread (client mode): 0xd0703b80
2025-11-17T23:11:14.734 [DEBUG] [Thread-62944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:11:14.749 [DEBUG] [Thread-62944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:11:14.749 [INFO] [Thread-62944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:11:14.756 [DEBUG] [Thread-62944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:11:14.756 [DEBUG] [Thread-62944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:11:14.756 [DEBUG] [Thread-62944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] client lang: <none>
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] server lang: <none>
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] kex follows: False
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] Compression: none
2025-11-17T23:11:14.757 [DEBUG] [Thread-62944] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:11:14.816 [DEBUG] [Thread-62944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:11:14.816 [DEBUG] [Thread-62944] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:11:14.816 [DEBUG] [Thread-62944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:11:14.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:11:14.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:11:14.872 [DEBUG] [Thread-62944] [transport.py] [_log()] userauth is OK
2025-11-17T23:11:14.872 [DEBUG] [Thread-62944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:11:14.872 [DEBUG] [Thread-62944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:11:14.872 [DEBUG] [Thread-62944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:11:14.872 [DEBUG] [Thread-62944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:11:14.886 [INFO] [Thread-62944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:11:14.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:11:14.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:11:15.689 [DEBUG] [Thread-62944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:11:15.690 [DEBUG] [Thread-62944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:11:15.738 [DEBUG] [Thread-62944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:11:15.738 [DEBUG] [Thread-62944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:11:15.747 [DEBUG] [Thread-62944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:11:15.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:11:15.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:11:15.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:11:15.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:11:15.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:11:15.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:11:15.784 [DEBUG] [Thread-62944] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:11:23.028 [DEBUG] [Thread-62946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:11:38.068 [DEBUG] [Thread-62947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:11:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:11:45.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:11:45.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:11:46.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 11, 40), 12.11, 43.83, 0.0, 15.33, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:11:46.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:11:40
2025-11-17T23:11:46.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:11:46.716 [DEBUG] [Thread-62948] [transport.py] [_log()] starting thread (client mode): 0xd0756fb0
2025-11-17T23:11:46.716 [DEBUG] [Thread-62948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:11:46.737 [DEBUG] [Thread-62948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:11:46.737 [INFO] [Thread-62948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:11:46.738 [DEBUG] [Thread-62948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:11:46.738 [DEBUG] [Thread-62948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:11:46.738 [DEBUG] [Thread-62948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:11:46.738 [DEBUG] [Thread-62948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] client lang: <none>
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] server lang: <none>
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] kex follows: False
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] Compression: none
2025-11-17T23:11:46.739 [DEBUG] [Thread-62948] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:11:46.748 [DEBUG] [Thread-62948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:11:46.748 [DEBUG] [Thread-62948] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:11:46.748 [DEBUG] [Thread-62948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:11:46.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:11:46.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:11:46.750 [DEBUG] [Thread-62948] [transport.py] [_log()] userauth is OK
2025-11-17T23:11:46.750 [DEBUG] [Thread-62948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:11:46.750 [DEBUG] [Thread-62948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:11:46.750 [DEBUG] [Thread-62948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:11:46.751 [DEBUG] [Thread-62948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:11:46.769 [INFO] [Thread-62948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:11:46.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:11:47.371 [DEBUG] [Thread-62948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:11:47.371 [DEBUG] [Thread-62948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:11:47.371 [DEBUG] [Thread-62948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:11:47.412 [DEBUG] [Thread-62948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:11:47.412 [DEBUG] [Thread-62948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:11:47.415 [DEBUG] [Thread-62948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:11:47.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:11:47.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:11:47.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:11:47.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:11:47.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:11:47.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:11:47.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:11:47.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:11:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:11:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.883032 -999.00  +14.50  10.76     48   +3.90 1 1 1 1 1     0    0 9.60 -44.02 ZNESW 9.1 10.8 153.4 15.7 15.3 -17.5 15.1 -17.8 14.9 -17.7 15.2 -17.3
2025-11-17T23:11:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:11:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:11:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.883032
2025-11-17T23:11:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:11:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:11:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:11:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:11:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:11:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:11:40', tmtdew=12.11, humidity=43.83, cloud=0.0, wind=15.33, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:11:40', seeing=1.89, atlas_timestamp='2025-11-17T21:11:33.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:09:00')
2025-11-17T23:11:47.435 [DEBUG] [Thread-62948] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:11:47.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:11:47.530 [DEBUG] [Thread-62951] [transport.py] [_log()] starting thread (client mode): 0xd3160b80
2025-11-17T23:11:47.530 [DEBUG] [Thread-62951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:11:47.545 [DEBUG] [Thread-62951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:11:47.545 [INFO] [Thread-62951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] client lang: <none>
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] server lang: <none>
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] kex follows: False
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:11:47.553 [DEBUG] [Thread-62951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:11:47.554 [DEBUG] [Thread-62951] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:11:47.554 [DEBUG] [Thread-62951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:11:47.554 [DEBUG] [Thread-62951] [transport.py] [_log()] Compression: none
2025-11-17T23:11:47.554 [DEBUG] [Thread-62951] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:11:47.612 [DEBUG] [Thread-62951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:11:47.613 [DEBUG] [Thread-62951] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:11:47.613 [DEBUG] [Thread-62951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:11:47.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:11:47.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:11:47.668 [DEBUG] [Thread-62951] [transport.py] [_log()] userauth is OK
2025-11-17T23:11:47.669 [DEBUG] [Thread-62951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:11:47.669 [DEBUG] [Thread-62951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:11:47.669 [DEBUG] [Thread-62951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:11:47.669 [DEBUG] [Thread-62951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:11:47.688 [INFO] [Thread-62951] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:11:47.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:11:47.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:11:48.537 [DEBUG] [Thread-62951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:11:48.537 [DEBUG] [Thread-62951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:11:48.584 [DEBUG] [Thread-62951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:11:48.584 [DEBUG] [Thread-62951] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:11:48.593 [DEBUG] [Thread-62951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:11:48.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:11:48.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:11:48.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:11:48.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:11:48.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:11:48.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:11:48.628 [DEBUG] [Thread-62951] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:11:49.234 [DEBUG] [Thread-62953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:11:53.098 [DEBUG] [Thread-62954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:12:08.129 [DEBUG] [Thread-62955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:12:11.157 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:12:11.159 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:12:18.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:12:18.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:12:18.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:12:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 12, 12), 12.1, 43.86, 0.0, 16.41, 14.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:12:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:12:12
2025-11-17T23:12:19.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:12:19.580 [DEBUG] [Thread-62956] [transport.py] [_log()] starting thread (client mode): 0xd317ef20
2025-11-17T23:12:19.580 [DEBUG] [Thread-62956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:12:19.595 [DEBUG] [Thread-62956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:12:19.595 [INFO] [Thread-62956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:12:19.596 [DEBUG] [Thread-62956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] client lang: <none>
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] server lang: <none>
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] kex follows: False
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] Compression: none
2025-11-17T23:12:19.597 [DEBUG] [Thread-62956] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:12:19.610 [DEBUG] [Thread-62956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:12:19.611 [DEBUG] [Thread-62956] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:12:19.611 [DEBUG] [Thread-62956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:12:19.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:12:19.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:12:19.613 [DEBUG] [Thread-62956] [transport.py] [_log()] userauth is OK
2025-11-17T23:12:19.613 [DEBUG] [Thread-62956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:12:19.613 [DEBUG] [Thread-62956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:12:19.613 [DEBUG] [Thread-62956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:12:19.613 [DEBUG] [Thread-62956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:12:19.626 [INFO] [Thread-62956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:12:19.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:12:20.234 [DEBUG] [Thread-62956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:12:20.243 [DEBUG] [Thread-62956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:12:20.243 [DEBUG] [Thread-62956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:12:20.275 [DEBUG] [Thread-62956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:12:20.276 [DEBUG] [Thread-62956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:12:20.279 [DEBUG] [Thread-62956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:12:20.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:12:20.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:12:20.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:12:20.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:12:20.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:12:20.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:12:20.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:12:20.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:12:20.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:12:20.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.883380 -999.00  +14.50  13.32     48   +3.90 1 1 1 1 1     0    0 9.87 -42.80 ZNESW 12.9 13.3 152.4 16.7 15.2 -17.8 15.1 -17.9 14.9 -17.7 15.2 -17.3
2025-11-17T23:12:20.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:12:20.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:12:20.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.883380
2025-11-17T23:12:20.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:12:20.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:12:20.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:12:20.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:12:20.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:12:20.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:12:12', tmtdew=12.1, humidity=43.86, cloud=0.0, wind=16.41, temperature=14.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:12:12', seeing=2.03, atlas_timestamp='2025-11-17T21:12:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:09:00')
2025-11-17T23:12:20.306 [DEBUG] [Thread-62956] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:12:20.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:12:20.402 [DEBUG] [Thread-62959] [transport.py] [_log()] starting thread (client mode): 0xd31cd900
2025-11-17T23:12:20.402 [DEBUG] [Thread-62959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:12:20.416 [DEBUG] [Thread-62959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:12:20.417 [INFO] [Thread-62959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] client lang: <none>
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] server lang: <none>
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] kex follows: False
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:12:20.424 [DEBUG] [Thread-62959] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:12:20.425 [DEBUG] [Thread-62959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:12:20.425 [DEBUG] [Thread-62959] [transport.py] [_log()] Compression: none
2025-11-17T23:12:20.425 [DEBUG] [Thread-62959] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:12:20.480 [DEBUG] [Thread-62959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:12:20.480 [DEBUG] [Thread-62959] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:12:20.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:12:20.481 [DEBUG] [Thread-62959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:12:20.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:12:20.537 [DEBUG] [Thread-62959] [transport.py] [_log()] userauth is OK
2025-11-17T23:12:20.537 [DEBUG] [Thread-62959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:12:20.537 [DEBUG] [Thread-62959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:12:20.537 [DEBUG] [Thread-62959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:12:20.537 [DEBUG] [Thread-62959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:12:20.560 [INFO] [Thread-62959] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:12:20.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:12:20.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:12:21.418 [DEBUG] [Thread-62959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:12:21.419 [DEBUG] [Thread-62959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:12:21.466 [DEBUG] [Thread-62959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:12:21.466 [DEBUG] [Thread-62959] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:12:21.475 [DEBUG] [Thread-62959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:12:21.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:12:21.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:12:21.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:12:21.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:12:21.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:12:21.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:12:21.509 [DEBUG] [Thread-62959] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:12:23.160 [DEBUG] [Thread-62961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:12:38.205 [DEBUG] [Thread-62962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:12:49.312 [DEBUG] [Thread-62963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:12:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:12:51.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:12:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:12:52.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 12, 44), 12.01, 44.48, 0.0, 16.71, 14.43, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:12:52.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:12:44
2025-11-17T23:12:52.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:12:52.449 [DEBUG] [Thread-62964] [transport.py] [_log()] starting thread (client mode): 0xd317ceb0
2025-11-17T23:12:52.449 [DEBUG] [Thread-62964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:12:52.461 [DEBUG] [Thread-62964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:12:52.461 [INFO] [Thread-62964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:12:52.464 [DEBUG] [Thread-62964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:12:52.464 [DEBUG] [Thread-62964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] client lang: <none>
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] server lang: <none>
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] kex follows: False
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:12:52.465 [DEBUG] [Thread-62964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:12:52.466 [DEBUG] [Thread-62964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:12:52.466 [DEBUG] [Thread-62964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:12:52.466 [DEBUG] [Thread-62964] [transport.py] [_log()] Compression: none
2025-11-17T23:12:52.466 [DEBUG] [Thread-62964] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:12:52.485 [DEBUG] [Thread-62964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:12:52.485 [DEBUG] [Thread-62964] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:12:52.486 [DEBUG] [Thread-62964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:12:52.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:12:52.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:12:52.487 [DEBUG] [Thread-62964] [transport.py] [_log()] userauth is OK
2025-11-17T23:12:52.488 [DEBUG] [Thread-62964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:12:52.488 [DEBUG] [Thread-62964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:12:52.488 [DEBUG] [Thread-62964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:12:52.488 [DEBUG] [Thread-62964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:12:52.510 [INFO] [Thread-62964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:12:52.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:12:53.091 [DEBUG] [Thread-62964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:12:53.091 [DEBUG] [Thread-62964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:12:53.091 [DEBUG] [Thread-62964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:12:53.133 [DEBUG] [Thread-62964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:12:53.133 [DEBUG] [Thread-62964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:12:53.136 [DEBUG] [Thread-62964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:12:53.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:12:53.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:12:53.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:12:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:12:53.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:12:53.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:12:53.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:12:53.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:12:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:12:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.883380 -999.00  +14.50  13.32     48   +3.90 1 1 1 1 1     0    0 9.87 -42.80 ZNESW 12.9 13.3 152.4 16.7 15.2 -17.8 15.1 -17.9 14.9 -17.7 15.2 -17.3
2025-11-17T23:12:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:12:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:12:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.883380
2025-11-17T23:12:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:12:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:12:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:12:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:12:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:12:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:12:44', tmtdew=12.01, humidity=44.48, cloud=0.0, wind=16.71, temperature=14.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:12:44', seeing=2.03, atlas_timestamp='2025-11-17T21:12:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:09:00')
2025-11-17T23:12:53.162 [DEBUG] [Thread-62964] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:12:53.236 [DEBUG] [Thread-62967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:12:53.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:12:53.258 [DEBUG] [Thread-62968] [transport.py] [_log()] starting thread (client mode): 0xd07aa680
2025-11-17T23:12:53.258 [DEBUG] [Thread-62968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:12:53.273 [DEBUG] [Thread-62968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:12:53.273 [INFO] [Thread-62968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] client lang: <none>
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] server lang: <none>
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] kex follows: False
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:12:53.281 [DEBUG] [Thread-62968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:12:53.282 [DEBUG] [Thread-62968] [transport.py] [_log()] Compression: none
2025-11-17T23:12:53.282 [DEBUG] [Thread-62968] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:12:53.341 [DEBUG] [Thread-62968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:12:53.341 [DEBUG] [Thread-62968] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:12:53.342 [DEBUG] [Thread-62968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:12:53.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:12:53.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:12:53.396 [DEBUG] [Thread-62968] [transport.py] [_log()] userauth is OK
2025-11-17T23:12:53.396 [DEBUG] [Thread-62968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:12:53.397 [DEBUG] [Thread-62968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:12:53.397 [DEBUG] [Thread-62968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:12:53.397 [DEBUG] [Thread-62968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:12:53.419 [INFO] [Thread-62968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:12:53.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:12:53.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:12:54.285 [DEBUG] [Thread-62968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:12:54.285 [DEBUG] [Thread-62968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:12:54.333 [DEBUG] [Thread-62968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:12:54.333 [DEBUG] [Thread-62968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:12:54.342 [DEBUG] [Thread-62968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:12:54.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:12:54.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:12:54.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:12:54.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:12:54.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:12:54.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:12:54.377 [DEBUG] [Thread-62968] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:13:08.268 [DEBUG] [Thread-62970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:13:11.365 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:13:11.365 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:13:23.297 [DEBUG] [Thread-62971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:13:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:13:24.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:13:24.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:13:25.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 13, 16), 12.03, 44.43, 0.0, 16.45, 14.4, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:13:25.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:13:16
2025-11-17T23:13:25.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:13:25.298 [DEBUG] [Thread-62972] [transport.py] [_log()] starting thread (client mode): 0xd07a9060
2025-11-17T23:13:25.298 [DEBUG] [Thread-62972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:13:25.319 [DEBUG] [Thread-62972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:13:25.319 [INFO] [Thread-62972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:13:25.322 [DEBUG] [Thread-62972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:13:25.322 [DEBUG] [Thread-62972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:13:25.322 [DEBUG] [Thread-62972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] client lang: <none>
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] server lang: <none>
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] kex follows: False
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] Compression: none
2025-11-17T23:13:25.323 [DEBUG] [Thread-62972] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:13:25.339 [DEBUG] [Thread-62972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:13:25.340 [DEBUG] [Thread-62972] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:13:25.340 [DEBUG] [Thread-62972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:13:25.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:13:25.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:13:25.342 [DEBUG] [Thread-62972] [transport.py] [_log()] userauth is OK
2025-11-17T23:13:25.342 [DEBUG] [Thread-62972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:13:25.342 [DEBUG] [Thread-62972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:13:25.342 [DEBUG] [Thread-62972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:13:25.342 [DEBUG] [Thread-62972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:13:25.365 [INFO] [Thread-62972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:13:25.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:13:25.966 [DEBUG] [Thread-62972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:13:25.967 [DEBUG] [Thread-62972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:13:25.967 [DEBUG] [Thread-62972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:13:26.007 [DEBUG] [Thread-62972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:13:26.008 [DEBUG] [Thread-62972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:13:26.010 [DEBUG] [Thread-62972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:13:26.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:13:26.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:13:26.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:13:26.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:13:26.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:13:26.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:13:26.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:13:26.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:13:26.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:13:26.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.883727 -999.00  +14.50  11.57     49   +3.90 1 2 1 1 1     0    0 9.81 -40.77 ZNeSw 12.2 11.6 153.1 15.2 15.2 -17.8 15.1 -18.0 14.8 -17.8 15.2 -17.6
2025-11-17T23:13:26.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:13:26.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:13:26.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.883727
2025-11-17T23:13:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:13:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:13:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:13:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:13:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:13:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:13:16', tmtdew=12.03, humidity=44.43, cloud=0.0, wind=16.45, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:13:16', seeing=2.03, atlas_timestamp='2025-11-17T21:12:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:12:00')
2025-11-17T23:13:26.031 [DEBUG] [Thread-62972] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:13:26.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:13:26.127 [DEBUG] [Thread-62975] [transport.py] [_log()] starting thread (client mode): 0xd07a9540
2025-11-17T23:13:26.127 [DEBUG] [Thread-62975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:13:26.146 [DEBUG] [Thread-62975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:13:26.146 [INFO] [Thread-62975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:13:26.154 [DEBUG] [Thread-62975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:13:26.154 [DEBUG] [Thread-62975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:13:26.154 [DEBUG] [Thread-62975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:13:26.154 [DEBUG] [Thread-62975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] client lang: <none>
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] server lang: <none>
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] kex follows: False
2025-11-17T23:13:26.155 [DEBUG] [Thread-62975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:13:26.156 [DEBUG] [Thread-62975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:13:26.156 [DEBUG] [Thread-62975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:13:26.156 [DEBUG] [Thread-62975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:13:26.156 [DEBUG] [Thread-62975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:13:26.156 [DEBUG] [Thread-62975] [transport.py] [_log()] Compression: none
2025-11-17T23:13:26.156 [DEBUG] [Thread-62975] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:13:26.215 [DEBUG] [Thread-62975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:13:26.216 [DEBUG] [Thread-62975] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:13:26.216 [DEBUG] [Thread-62975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:13:26.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:13:26.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:13:26.272 [DEBUG] [Thread-62975] [transport.py] [_log()] userauth is OK
2025-11-17T23:13:26.273 [DEBUG] [Thread-62975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:13:26.273 [DEBUG] [Thread-62975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:13:26.273 [DEBUG] [Thread-62975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:13:26.273 [DEBUG] [Thread-62975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:13:26.292 [INFO] [Thread-62975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:13:26.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:13:26.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:13:27.170 [DEBUG] [Thread-62975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:13:27.170 [DEBUG] [Thread-62975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:13:27.217 [DEBUG] [Thread-62975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:13:27.217 [DEBUG] [Thread-62975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:13:27.226 [DEBUG] [Thread-62975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:13:27.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:13: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')
2025-11-17T23:13:27.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:13:27.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:13:27.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:13:27.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:13:27.259 [DEBUG] [Thread-62975] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:13:38.327 [DEBUG] [Thread-62977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:13:49.385 [DEBUG] [Thread-62978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:13:53.365 [DEBUG] [Thread-62979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:13:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:13:57.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:13:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:13:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 13, 48), 11.98, 44.43, 0.0, 17.26, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:13:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:13:48
2025-11-17T23:13:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:13:58.194 [DEBUG] [Thread-62980] [transport.py] [_log()] starting thread (client mode): 0xd07a9390
2025-11-17T23:13:58.194 [DEBUG] [Thread-62980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:13:58.214 [DEBUG] [Thread-62980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:13:58.214 [INFO] [Thread-62980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] client lang: <none>
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] server lang: <none>
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] kex follows: False
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] Compression: none
2025-11-17T23:13:58.218 [DEBUG] [Thread-62980] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:13:58.235 [DEBUG] [Thread-62980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:13:58.235 [DEBUG] [Thread-62980] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:13:58.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:13:58.236 [DEBUG] [Thread-62980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:13:58.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:13:58.237 [DEBUG] [Thread-62980] [transport.py] [_log()] userauth is OK
2025-11-17T23:13:58.238 [DEBUG] [Thread-62980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:13:58.238 [DEBUG] [Thread-62980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:13:58.238 [DEBUG] [Thread-62980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:13:58.238 [DEBUG] [Thread-62980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:13:58.257 [INFO] [Thread-62980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:13:58.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:13:58.896 [DEBUG] [Thread-62980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:13:58.896 [DEBUG] [Thread-62980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:13:58.897 [DEBUG] [Thread-62980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:13:58.937 [DEBUG] [Thread-62980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:13:58.937 [DEBUG] [Thread-62980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:13:58.940 [DEBUG] [Thread-62980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:13:58.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:13:58.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:13:58.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:13:58.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:13:58.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:13:58.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:13:58.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:13:58.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:13:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:13:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.884074 -999.00  +14.50  10.99     49   +3.90 1 2 1 1 1     0    0 9.28 -43.31 Z..Sw 12.2 11.0 165.2 15.0 15.2 -18.0 15.1 -18.2 14.9 -17.9 15.2 -17.7
2025-11-17T23:13:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:13:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:13:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.884074
2025-11-17T23:13:58.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:13:58.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:13:58.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:13:58.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:13:58.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:13:58.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:13:48', tmtdew=11.98, humidity=44.43, cloud=0.0, wind=17.26, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:13:48', seeing=2.03, atlas_timestamp='2025-11-17T21:13:03.994', atlas_cloud=2, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:12:00')
2025-11-17T23:13:58.965 [DEBUG] [Thread-62980] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:13:59.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:13:59.061 [DEBUG] [Thread-62983] [transport.py] [_log()] starting thread (client mode): 0xd07ab5b0
2025-11-17T23:13:59.061 [DEBUG] [Thread-62983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:13:59.077 [DEBUG] [Thread-62983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:13:59.077 [INFO] [Thread-62983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:13:59.084 [DEBUG] [Thread-62983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:13:59.084 [DEBUG] [Thread-62983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] client lang: <none>
2025-11-17T23:13:59.085 [DEBUG] [Thread-62983] [transport.py] [_log()] server lang: <none>
2025-11-17T23:13:59.086 [DEBUG] [Thread-62983] [transport.py] [_log()] kex follows: False
2025-11-17T23:13:59.086 [DEBUG] [Thread-62983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:13:59.086 [DEBUG] [Thread-62983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:13:59.086 [DEBUG] [Thread-62983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:13:59.086 [DEBUG] [Thread-62983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:13:59.086 [DEBUG] [Thread-62983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:13:59.086 [DEBUG] [Thread-62983] [transport.py] [_log()] Compression: none
2025-11-17T23:13:59.086 [DEBUG] [Thread-62983] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:13:59.140 [DEBUG] [Thread-62983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:13:59.141 [DEBUG] [Thread-62983] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:13:59.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:13:59.142 [DEBUG] [Thread-62983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:13:59.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:13:59.197 [DEBUG] [Thread-62983] [transport.py] [_log()] userauth is OK
2025-11-17T23:13:59.197 [DEBUG] [Thread-62983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:13:59.197 [DEBUG] [Thread-62983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:13:59.197 [DEBUG] [Thread-62983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:13:59.197 [DEBUG] [Thread-62983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:13:59.217 [INFO] [Thread-62983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:13:59.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:13:59.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:14:00.079 [DEBUG] [Thread-62983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:14:00.079 [DEBUG] [Thread-62983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:14:00.127 [DEBUG] [Thread-62983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:14:00.127 [DEBUG] [Thread-62983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:14:00.136 [DEBUG] [Thread-62983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:14:00.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:14:00.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:14:00.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:14:00.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:14:00.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:14:00.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:14:00.171 [DEBUG] [Thread-62983] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:14:08.391 [DEBUG] [Thread-62985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:14:11.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:14:11.574 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:14:23.436 [DEBUG] [Thread-62986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:14:30.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:14:30.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:14:30.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:14:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 14, 20), 11.98, 44.43, 0.0, 17.29, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:14:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:14:20
2025-11-17T23:14:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:14:31.144 [DEBUG] [Thread-62987] [transport.py] [_log()] starting thread (client mode): 0xd07ab850
2025-11-17T23:14:31.144 [DEBUG] [Thread-62987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:14:31.163 [DEBUG] [Thread-62987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:14:31.163 [INFO] [Thread-62987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] client lang: <none>
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] server lang: <none>
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] kex follows: False
2025-11-17T23:14:31.166 [DEBUG] [Thread-62987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:14:31.167 [DEBUG] [Thread-62987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:14:31.167 [DEBUG] [Thread-62987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:14:31.167 [DEBUG] [Thread-62987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:14:31.167 [DEBUG] [Thread-62987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:14:31.167 [DEBUG] [Thread-62987] [transport.py] [_log()] Compression: none
2025-11-17T23:14:31.167 [DEBUG] [Thread-62987] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:14:31.181 [DEBUG] [Thread-62987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:14:31.181 [DEBUG] [Thread-62987] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:14:31.181 [DEBUG] [Thread-62987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:14:31.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:14:31.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:14:31.183 [DEBUG] [Thread-62987] [transport.py] [_log()] userauth is OK
2025-11-17T23:14:31.183 [DEBUG] [Thread-62987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:14:31.183 [DEBUG] [Thread-62987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:14:31.183 [DEBUG] [Thread-62987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:14:31.183 [DEBUG] [Thread-62987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:14:31.201 [INFO] [Thread-62987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:14:31.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:14:31.840 [DEBUG] [Thread-62987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:14:31.840 [DEBUG] [Thread-62987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:14:31.840 [DEBUG] [Thread-62987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:14:31.881 [DEBUG] [Thread-62987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:14:31.881 [DEBUG] [Thread-62987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:14:31.883 [DEBUG] [Thread-62987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:14:31.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:14:31.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:14:31.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:14:31.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:14:31.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:14:31.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:14:31.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:14:31.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:14:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.884421 -999.00  +14.50  13.64     49   +3.90 1 2 1 1 1     0    0 9.30 -42.73 Z..Sw 11.1 13.6 156.8 18.2 15.2 -18.0 15.0 -18.4 14.9 -18.0 15.2 -17.8
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.884421
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:14:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:14:20', tmtdew=11.98, humidity=44.43, cloud=0.0, wind=17.29, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:14:20', seeing=2.03, atlas_timestamp='2025-11-17T21:13:33.974', atlas_cloud=2, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:12:00')
2025-11-17T23:14:31.901 [DEBUG] [Thread-62987] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:14:31.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:14:31.987 [DEBUG] [Thread-62990] [transport.py] [_log()] starting thread (client mode): 0xd31cf4f0
2025-11-17T23:14:31.987 [DEBUG] [Thread-62990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:14:32.002 [DEBUG] [Thread-62990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:14:32.002 [INFO] [Thread-62990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:14:32.009 [DEBUG] [Thread-62990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:14:32.009 [DEBUG] [Thread-62990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:14:32.009 [DEBUG] [Thread-62990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] client lang: <none>
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] server lang: <none>
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] kex follows: False
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] Compression: none
2025-11-17T23:14:32.010 [DEBUG] [Thread-62990] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:14:32.067 [DEBUG] [Thread-62990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:14:32.068 [DEBUG] [Thread-62990] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:14:32.068 [DEBUG] [Thread-62990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:14:32.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:14:32.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:14:32.124 [DEBUG] [Thread-62990] [transport.py] [_log()] userauth is OK
2025-11-17T23:14:32.124 [DEBUG] [Thread-62990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:14:32.124 [DEBUG] [Thread-62990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:14:32.125 [DEBUG] [Thread-62990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:14:32.125 [DEBUG] [Thread-62990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:14:32.139 [INFO] [Thread-62990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:14:32.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:14:32.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:14:32.979 [DEBUG] [Thread-62990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:14:32.979 [DEBUG] [Thread-62990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:14:33.028 [DEBUG] [Thread-62990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:14:33.028 [DEBUG] [Thread-62990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:14:33.036 [DEBUG] [Thread-62990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:14:33.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:14:33.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:14:33.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:14:33.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:14:33.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:14:33.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:14:33.072 [DEBUG] [Thread-62990] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:14:38.464 [DEBUG] [Thread-62992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:14:49.452 [DEBUG] [Thread-62993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:14:53.501 [DEBUG] [Thread-62994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:15:03.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:15:03.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:15:03.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:15:03.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 14, 52), 12.03, 44.43, 0.0, 17.93, 14.38, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:15:03.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:14:52
2025-11-17T23:15:03.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:15:04.012 [DEBUG] [Thread-62995] [transport.py] [_log()] starting thread (client mode): 0xd0710f40
2025-11-17T23:15:04.012 [DEBUG] [Thread-62995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:15:04.027 [DEBUG] [Thread-62995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:15:04.028 [INFO] [Thread-62995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:15:04.031 [DEBUG] [Thread-62995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:15:04.031 [DEBUG] [Thread-62995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:15:04.031 [DEBUG] [Thread-62995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:15:04.031 [DEBUG] [Thread-62995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:15:04.031 [DEBUG] [Thread-62995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:15:04.031 [DEBUG] [Thread-62995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:15:04.031 [DEBUG] [Thread-62995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] client lang: <none>
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] server lang: <none>
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] kex follows: False
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] Compression: none
2025-11-17T23:15:04.032 [DEBUG] [Thread-62995] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:15:04.048 [DEBUG] [Thread-62995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:15:04.049 [DEBUG] [Thread-62995] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:15:04.049 [DEBUG] [Thread-62995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:15:04.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:15:04.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:15:04.051 [DEBUG] [Thread-62995] [transport.py] [_log()] userauth is OK
2025-11-17T23:15:04.051 [DEBUG] [Thread-62995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:15:04.051 [DEBUG] [Thread-62995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:15:04.052 [DEBUG] [Thread-62995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:15:04.052 [DEBUG] [Thread-62995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:15:04.077 [INFO] [Thread-62995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:15:04.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:15:08.528 [DEBUG] [Thread-62997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:15:09.584 [DEBUG] [Thread-62995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:15:09.584 [DEBUG] [Thread-62995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:15:09.584 [DEBUG] [Thread-62995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:15:09.625 [DEBUG] [Thread-62995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:15:09.625 [DEBUG] [Thread-62995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:15:09.628 [DEBUG] [Thread-62995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:15:09.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:15:09.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:15:09.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:15:09.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:15:09.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:15:09.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:15:09.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:15:09.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.884768 -999.00  +14.50  15.39     49   +3.90 1 2 1 1 1     0    0 9.65 -46.36 ZNeSW 12.3 15.4 155.6 20.2 15.2 -18.1 15.0 -18.5 14.8 -18.0 15.2 -17.8
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.884768
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:15:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:14:52', tmtdew=12.03, humidity=44.43, cloud=0.0, wind=17.93, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:14:52', seeing=1.94, atlas_timestamp='2025-11-17T21:14:03.955', atlas_cloud=2, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:12:00')
2025-11-17T23:15:09.732 [DEBUG] [Thread-62995] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:15:09.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:15:09.816 [DEBUG] [Thread-62999] [transport.py] [_log()] starting thread (client mode): 0xd07104c0
2025-11-17T23:15:09.816 [DEBUG] [Thread-62999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:15:09.834 [DEBUG] [Thread-62999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:15:09.834 [INFO] [Thread-62999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] client lang: <none>
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] server lang: <none>
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] kex follows: False
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] Compression: none
2025-11-17T23:15:09.842 [DEBUG] [Thread-62999] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:15:09.899 [DEBUG] [Thread-62999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:15:09.900 [DEBUG] [Thread-62999] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:15:09.900 [DEBUG] [Thread-62999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:15:09.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:15:09.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:15:09.957 [DEBUG] [Thread-62999] [transport.py] [_log()] userauth is OK
2025-11-17T23:15:09.957 [DEBUG] [Thread-62999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:15:09.957 [DEBUG] [Thread-62999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:15:09.957 [DEBUG] [Thread-62999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:15:09.957 [DEBUG] [Thread-62999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:15:09.971 [INFO] [Thread-62999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:15:09.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:15:09.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:15:10.825 [DEBUG] [Thread-62999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:15:10.825 [DEBUG] [Thread-62999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:15:10.873 [DEBUG] [Thread-62999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:15:10.873 [DEBUG] [Thread-62999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:15:10.881 [DEBUG] [Thread-62999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:15:10.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:15:10.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:15:10.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:15:10.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:15:10.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:15:10.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:15:10.913 [DEBUG] [Thread-62999] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:15:11.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:15:11.782 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:15:23.555 [DEBUG] [Thread-63001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:15:38.598 [DEBUG] [Thread-63002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:15:40.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:15:40.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:15:40.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
2025-11-17T23:15:41.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 15, 24), 12.04, 44.38, 0.0, 18.72, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:15:41.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:15:24
2025-11-17T23:15:41.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:15:41.824 [DEBUG] [Thread-63003] [transport.py] [_log()] starting thread (client mode): 0xd0713e80
2025-11-17T23:15:41.824 [DEBUG] [Thread-63003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:15:41.845 [DEBUG] [Thread-63003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:15:41.845 [INFO] [Thread-63003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:15:41.848 [DEBUG] [Thread-63003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] client lang: <none>
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] server lang: <none>
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] kex follows: False
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] Compression: none
2025-11-17T23:15:41.849 [DEBUG] [Thread-63003] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:15:41.860 [DEBUG] [Thread-63003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:15:41.861 [DEBUG] [Thread-63003] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:15:41.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:15:41.862 [DEBUG] [Thread-63003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:15:41.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:15:41.863 [DEBUG] [Thread-63003] [transport.py] [_log()] userauth is OK
2025-11-17T23:15:41.864 [DEBUG] [Thread-63003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:15:41.864 [DEBUG] [Thread-63003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:15:41.864 [DEBUG] [Thread-63003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:15:41.864 [DEBUG] [Thread-63003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:15:41.889 [INFO] [Thread-63003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:15:41.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:15:42.470 [DEBUG] [Thread-63003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:15:42.470 [DEBUG] [Thread-63003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:15:42.470 [DEBUG] [Thread-63003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:15:42.511 [DEBUG] [Thread-63003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:15:42.511 [DEBUG] [Thread-63003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:15:42.514 [DEBUG] [Thread-63003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:15:42.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:15:42.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:15:42.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:15:42.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:15:42.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:15:42.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:15:42.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:15:42.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:15:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:15:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.885463 -999.00  +14.50   8.52     49   +3.90 1 2 1 1 1     0    0 9.68 -44.42 ZNeSW 13.0 8.5 147.5 14.2 15.2 -18.4 15.0 -18.9 14.8 -18.4 15.1 -18.1
2025-11-17T23:15:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:15:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:15:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.885463
2025-11-17T23:15:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:15:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:15:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:15:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:15:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:15:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:15:24', tmtdew=12.04, humidity=44.38, cloud=0.0, wind=18.72, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:15:24', seeing=1.71, atlas_timestamp='2025-11-17T21:15:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:12:00')
2025-11-17T23:15:42.540 [DEBUG] [Thread-63003] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:15:42.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:15:42.636 [DEBUG] [Thread-63006] [transport.py] [_log()] starting thread (client mode): 0xd07aaf80
2025-11-17T23:15:42.637 [DEBUG] [Thread-63006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:15:42.652 [DEBUG] [Thread-63006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:15:42.652 [INFO] [Thread-63006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:15:42.659 [DEBUG] [Thread-63006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:15:42.659 [DEBUG] [Thread-63006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:15:42.659 [DEBUG] [Thread-63006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:15:42.659 [DEBUG] [Thread-63006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:15:42.659 [DEBUG] [Thread-63006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:15:42.659 [DEBUG] [Thread-63006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:15:42.659 [DEBUG] [Thread-63006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:15:42.659 [DEBUG] [Thread-63006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] client lang: <none>
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] server lang: <none>
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] kex follows: False
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] Compression: none
2025-11-17T23:15:42.660 [DEBUG] [Thread-63006] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:15:42.716 [DEBUG] [Thread-63006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:15:42.717 [DEBUG] [Thread-63006] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:15:42.717 [DEBUG] [Thread-63006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:15:42.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:15:42.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:15:42.773 [DEBUG] [Thread-63006] [transport.py] [_log()] userauth is OK
2025-11-17T23:15:42.773 [DEBUG] [Thread-63006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:15:42.773 [DEBUG] [Thread-63006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:15:42.773 [DEBUG] [Thread-63006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:15:42.773 [DEBUG] [Thread-63006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:15:42.796 [INFO] [Thread-63006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:15:42.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:15:42.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:15:43.649 [DEBUG] [Thread-63006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:15:43.649 [DEBUG] [Thread-63006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:15:43.696 [DEBUG] [Thread-63006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:15:43.696 [DEBUG] [Thread-63006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:15:43.705 [DEBUG] [Thread-63006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:15:43.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:15:43.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:15:43.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:15:43.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:15:43.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:15:43.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:15:43.740 [DEBUG] [Thread-63006] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:15:49.514 [DEBUG] [Thread-63008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:15:53.630 [DEBUG] [Thread-63009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:16:08.681 [DEBUG] [Thread-63010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:16:11.987 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:16:11.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:16:13.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:16:13.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:16:13.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:16:14.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 15, 56), 12.03, 44.43, 0.0, 17.65, 14.35, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:16:14.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:15:56
2025-11-17T23:16:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:16:14.672 [DEBUG] [Thread-63011] [transport.py] [_log()] starting thread (client mode): 0xd0710490
2025-11-17T23:16:14.672 [DEBUG] [Thread-63011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:16:14.691 [DEBUG] [Thread-63011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:16:14.692 [INFO] [Thread-63011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:16:14.695 [DEBUG] [Thread-63011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] client lang: <none>
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] server lang: <none>
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] kex follows: False
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] Compression: none
2025-11-17T23:16:14.696 [DEBUG] [Thread-63011] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:16:14.716 [DEBUG] [Thread-63011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:16:14.717 [DEBUG] [Thread-63011] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:16:14.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:16:14.726 [DEBUG] [Thread-63011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:16:14.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:16:14.728 [DEBUG] [Thread-63011] [transport.py] [_log()] userauth is OK
2025-11-17T23:16:14.728 [DEBUG] [Thread-63011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:16:14.728 [DEBUG] [Thread-63011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:16:14.728 [DEBUG] [Thread-63011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:16:14.729 [DEBUG] [Thread-63011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:16:14.764 [INFO] [Thread-63011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:16:14.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:16:15.405 [DEBUG] [Thread-63011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:16:15.405 [DEBUG] [Thread-63011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:16:15.405 [DEBUG] [Thread-63011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:16:15.446 [DEBUG] [Thread-63011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:16:15.446 [DEBUG] [Thread-63011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:16:15.449 [DEBUG] [Thread-63011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:16:15.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:16:15.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:16:15.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:16:15.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:16:15.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:16:15.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:16:15.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:16:15.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:16:15.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:16:15.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.885810 -999.00  +14.40  12.84     49   +3.90 1 2 1 1 1     0    0 9.61 -43.96 znESW 12.3 12.8 158.7 16.4 15.2 -18.5 15.0 -18.9 14.8 -18.6 15.1 -18.4
2025-11-17T23:16:15.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:16:15.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:16:15.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.885810
2025-11-17T23:16:15.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:16:15.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:16:15.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:16:15.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:16:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:16:15.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:15:56', tmtdew=12.03, humidity=44.43, cloud=0.0, wind=17.65, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:15:56', seeing=1.99, atlas_timestamp='2025-11-17T21:15:33.984', atlas_cloud=2, atlas_rain=1, zp_data=[1.9602499999999994, 1.9532500000000006, 1.2587500000000018, 1.4364999999999997, 1.7640000000000002, nan, nan, nan, nan, 1.189, 0.8382499999999995, 0.8490000000000002, 1.1989999999999998, 1.2022499999999994, 1.5469999999999997, 2.538499999999999, 1.6022499999999997, 0.9005000000000001, 1.0459999999999994, 0.5477499999999988, 1.0279999999999987, 1.3267499999999988, 1.3752500000000012, 1.1287500000000001, 1.483999999999999, 0.8410000000000002, 0.5757500000000002, 0.45250000000000057, 1.2335000000000003, nan, 0.39800000000000146, 0.5060000000000011, 1.9387499999999989], zp_timestamp='2025-11-17T21:12:00')
2025-11-17T23:16:15.474 [DEBUG] [Thread-63011] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:16:15.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:16:15.570 [DEBUG] [Thread-63014] [transport.py] [_log()] starting thread (client mode): 0xd31369e0
2025-11-17T23:16:15.570 [DEBUG] [Thread-63014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:16:15.585 [DEBUG] [Thread-63014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:16:15.585 [INFO] [Thread-63014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:16:15.592 [DEBUG] [Thread-63014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] client lang: <none>
2025-11-17T23:16:15.593 [DEBUG] [Thread-63014] [transport.py] [_log()] server lang: <none>
2025-11-17T23:16:15.594 [DEBUG] [Thread-63014] [transport.py] [_log()] kex follows: False
2025-11-17T23:16:15.594 [DEBUG] [Thread-63014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:16:15.594 [DEBUG] [Thread-63014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:16:15.594 [DEBUG] [Thread-63014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:16:15.594 [DEBUG] [Thread-63014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:16:15.594 [DEBUG] [Thread-63014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:16:15.594 [DEBUG] [Thread-63014] [transport.py] [_log()] Compression: none
2025-11-17T23:16:15.594 [DEBUG] [Thread-63014] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:16:15.657 [DEBUG] [Thread-63014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:16:15.657 [DEBUG] [Thread-63014] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:16:15.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:16:15.659 [DEBUG] [Thread-63014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:16:15.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:16:15.718 [DEBUG] [Thread-63014] [transport.py] [_log()] userauth is OK
2025-11-17T23:16:15.719 [DEBUG] [Thread-63014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:16:15.719 [DEBUG] [Thread-63014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:16:15.719 [DEBUG] [Thread-63014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:16:15.719 [DEBUG] [Thread-63014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:16:15.737 [INFO] [Thread-63014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:16:15.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:16:15.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:16:16.651 [DEBUG] [Thread-63014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:16:16.651 [DEBUG] [Thread-63014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:16:16.698 [DEBUG] [Thread-63014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:16:16.699 [DEBUG] [Thread-63014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:16:16.707 [DEBUG] [Thread-63014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:16:16.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:16:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:16:16.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:16:16.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:16:16.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:16:16.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:16:16.742 [DEBUG] [Thread-63014] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:16:23.709 [DEBUG] [Thread-63016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:16:38.742 [DEBUG] [Thread-63017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:16:46.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:16:46.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:16:46.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:16:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 16, 28), 12.03, 44.41, 0.0, 17.12, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:16:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:16:28
2025-11-17T23:16:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:16:47.687 [DEBUG] [Thread-63018] [transport.py] [_log()] starting thread (client mode): 0xd31cc070
2025-11-17T23:16:47.687 [DEBUG] [Thread-63018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:16:47.706 [DEBUG] [Thread-63018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:16:47.706 [INFO] [Thread-63018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:16:47.707 [DEBUG] [Thread-63018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] client lang: <none>
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] server lang: <none>
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] kex follows: False
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] Compression: none
2025-11-17T23:16:47.708 [DEBUG] [Thread-63018] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:16:47.715 [DEBUG] [Thread-63018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:16:47.716 [DEBUG] [Thread-63018] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:16:47.716 [DEBUG] [Thread-63018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:16:47.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:16:47.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:16:47.718 [DEBUG] [Thread-63018] [transport.py] [_log()] userauth is OK
2025-11-17T23:16:47.718 [DEBUG] [Thread-63018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:16:47.718 [DEBUG] [Thread-63018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:16:47.718 [DEBUG] [Thread-63018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:16:47.718 [DEBUG] [Thread-63018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:16:47.734 [INFO] [Thread-63018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:16:47.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:16:48.472 [DEBUG] [Thread-63018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:16:48.472 [DEBUG] [Thread-63018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:16:48.473 [DEBUG] [Thread-63018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:16:48.513 [DEBUG] [Thread-63018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:16:48.514 [DEBUG] [Thread-63018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:16:48.516 [DEBUG] [Thread-63018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:16:48.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:16:48.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:16:48.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:16:48.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:16:48.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:16:48.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:16:48.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:16:48.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:16:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:16:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.886157 -999.00  +14.40  12.67     49   +3.90 1 2 1 1 1     0    0 9.66 -43.15 znESW 13.1 12.7 148.2 19.0 15.2 -18.8 15.0 -19.1 14.8 -18.8 15.1 -18.5
2025-11-17T23:16:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:16:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:16:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.886157
2025-11-17T23:16:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:16:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:16:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:16:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:16:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:16:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:16:28', tmtdew=12.03, humidity=44.41, cloud=0.0, wind=17.12, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:16:28', seeing=1.67, atlas_timestamp='2025-11-17T21:16:03.965', atlas_cloud=2, atlas_rain=1, zp_data=[1.1217499999999996, 0.8532500000000018, 1.1452500000000008, 1.270999999999999, 1.6595000000000004, 1.6712500000000006, 0.8674999999999997, 0.7352500000000006, 0.4875000000000007, 1.0100000000000007, 0.6872499999999997, 0.7110000000000003, 1.0175, 2.1042499999999995, 1.169999999999999, 1.7139999999999986, 1.07925, 1.1724999999999994, 0.44049999999999834, 0.43024999999999913, 0.883499999999998, 1.853749999999999, 1.3987500000000015, 2.40825, 1.9999999999999991, 0.9215, 0.34375, 0.4220000000000006, 1.1695000000000002, 2.3400000000000007, 0.7580000000000009, 0.41800000000000104, 1.840749999999999], zp_timestamp='2025-11-17T21:15:00')
2025-11-17T23:16:48.541 [DEBUG] [Thread-63018] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:16:48.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:16:48.638 [DEBUG] [Thread-63021] [transport.py] [_log()] starting thread (client mode): 0xd0712d70
2025-11-17T23:16:48.638 [DEBUG] [Thread-63021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:16:48.653 [DEBUG] [Thread-63021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:16:48.653 [INFO] [Thread-63021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:16:48.660 [DEBUG] [Thread-63021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] client lang: <none>
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] server lang: <none>
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] kex follows: False
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] Compression: none
2025-11-17T23:16:48.661 [DEBUG] [Thread-63021] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:16:48.717 [DEBUG] [Thread-63021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:16:48.717 [DEBUG] [Thread-63021] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:16:48.718 [DEBUG] [Thread-63021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:16:48.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:16:48.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:16:48.773 [DEBUG] [Thread-63021] [transport.py] [_log()] userauth is OK
2025-11-17T23:16:48.773 [DEBUG] [Thread-63021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:16:48.773 [DEBUG] [Thread-63021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:16:48.773 [DEBUG] [Thread-63021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:16:48.773 [DEBUG] [Thread-63021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:16:48.797 [INFO] [Thread-63021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:16:48.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:16:48.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:16:49.573 [DEBUG] [Thread-63023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:16:49.666 [DEBUG] [Thread-63021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:16:49.666 [DEBUG] [Thread-63021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:16:49.713 [DEBUG] [Thread-63021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:16:49.713 [DEBUG] [Thread-63021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:16:49.721 [DEBUG] [Thread-63021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:16:49.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:16:49.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:16:49.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:16:49.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:16:49.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:16:49.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:16:49.754 [DEBUG] [Thread-63021] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:16:53.771 [DEBUG] [Thread-63024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:17:08.821 [DEBUG] [Thread-63025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:17:12.195 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:17:12.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:17:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:17:19.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:17:19.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:17:20.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 16, 28), 11.98, 44.41, 0.0, 17.12, 14.32, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:17:20.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:16:28
2025-11-17T23:17:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:17:20.690 [DEBUG] [Thread-63026] [transport.py] [_log()] starting thread (client mode): 0xd0713880
2025-11-17T23:17:20.690 [DEBUG] [Thread-63026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:17:20.709 [DEBUG] [Thread-63026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:17:20.710 [INFO] [Thread-63026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:17:20.713 [DEBUG] [Thread-63026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:17:20.713 [DEBUG] [Thread-63026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:17:20.713 [DEBUG] [Thread-63026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:17:20.713 [DEBUG] [Thread-63026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:17:20.713 [DEBUG] [Thread-63026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:17:20.713 [DEBUG] [Thread-63026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:17:20.713 [DEBUG] [Thread-63026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:17:20.713 [DEBUG] [Thread-63026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] client lang: <none>
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] server lang: <none>
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] kex follows: False
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] Compression: none
2025-11-17T23:17:20.714 [DEBUG] [Thread-63026] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:17:20.731 [DEBUG] [Thread-63026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:17:20.731 [DEBUG] [Thread-63026] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:17:20.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:17:20.732 [DEBUG] [Thread-63026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:17:20.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:17:20.734 [DEBUG] [Thread-63026] [transport.py] [_log()] userauth is OK
2025-11-17T23:17:20.735 [DEBUG] [Thread-63026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:17:20.735 [DEBUG] [Thread-63026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:17:20.735 [DEBUG] [Thread-63026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:17:20.735 [DEBUG] [Thread-63026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:17:20.771 [INFO] [Thread-63026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:17:20.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:17:21.368 [DEBUG] [Thread-63026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:17:21.368 [DEBUG] [Thread-63026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:17:21.368 [DEBUG] [Thread-63026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:17:21.409 [DEBUG] [Thread-63026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:17:21.410 [DEBUG] [Thread-63026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:17:21.413 [DEBUG] [Thread-63026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:17:21.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:17:21.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:17:21.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:17:21.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:17:21.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:17:21.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:17:21.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:17:21.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:17:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:17:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.886504 -999.00  +14.40  15.70     49   +3.90 1 2 1 1 1     0    0 9.39 -42.08 .NESW 16.4 15.7 155.4 21.1 15.1 -18.8 15.0 -19.3 14.8 -19.1 15.1 -18.9
2025-11-17T23:17:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:17:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:17:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.886504
2025-11-17T23:17:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:17:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:17:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:17:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:17:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:17:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:16:28', tmtdew=11.98, humidity=44.41, cloud=0.0, wind=17.12, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:17:00', seeing=1.67, atlas_timestamp='2025-11-17T21:16:33.946', atlas_cloud=2, atlas_rain=1, zp_data=[1.1217499999999996, 0.8532500000000018, 1.1452500000000008, 1.270999999999999, 1.6595000000000004, 1.6712500000000006, 0.8674999999999997, 0.7352500000000006, 0.4875000000000007, 1.0100000000000007, 0.6872499999999997, 0.7110000000000003, 1.0175, 2.1042499999999995, 1.169999999999999, 1.7139999999999986, 1.07925, 1.1724999999999994, 0.44049999999999834, 0.43024999999999913, 0.883499999999998, 1.853749999999999, 1.3987500000000015, 2.40825, 1.9999999999999991, 0.9215, 0.34375, 0.4220000000000006, 1.1695000000000002, 2.3400000000000007, 0.7580000000000009, 0.41800000000000104, 1.840749999999999], zp_timestamp='2025-11-17T21:15:00')
2025-11-17T23:17:21.437 [DEBUG] [Thread-63026] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:17:21.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:17:23.852 [DEBUG] [Thread-63029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:17:38.895 [DEBUG] [Thread-63030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:17:49.629 [DEBUG] [Thread-63031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:17:53.926 [DEBUG] [Thread-63032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:18:08.955 [DEBUG] [Thread-63033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:18:12.403 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:18:12.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:18:23.981 [DEBUG] [Thread-63034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:18:39.011 [DEBUG] [Thread-63035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:18:49.686 [DEBUG] [Thread-63036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:18:54.045 [DEBUG] [Thread-63037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:19:09.073 [DEBUG] [Thread-63038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:19:12.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:19:12.609 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:19:24.100 [DEBUG] [Thread-63039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:19:33.051 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T23:19:39.133 [DEBUG] [Thread-63040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:19:49.765 [DEBUG] [Thread-63041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:19:54.156 [DEBUG] [Thread-63042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:20:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:20:03.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:20:03.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:20:03.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 19, 40), 11.95, 44.49, 0.0, 18.47, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:20:03.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:19:40
2025-11-17T23:20:03.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:20:04.004 [DEBUG] [Thread-63043] [transport.py] [_log()] starting thread (client mode): 0xd31cd210
2025-11-17T23:20:04.004 [DEBUG] [Thread-63043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:20:04.024 [DEBUG] [Thread-63043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:20:04.025 [INFO] [Thread-63043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] client lang: <none>
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] server lang: <none>
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] kex follows: False
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:20:04.028 [DEBUG] [Thread-63043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:20:04.029 [DEBUG] [Thread-63043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:20:04.029 [DEBUG] [Thread-63043] [transport.py] [_log()] Compression: none
2025-11-17T23:20:04.029 [DEBUG] [Thread-63043] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:20:04.046 [DEBUG] [Thread-63043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:20:04.047 [DEBUG] [Thread-63043] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:20:04.047 [DEBUG] [Thread-63043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:20:04.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:20:04.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:20:04.049 [DEBUG] [Thread-63043] [transport.py] [_log()] userauth is OK
2025-11-17T23:20:04.049 [DEBUG] [Thread-63043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:20:04.050 [DEBUG] [Thread-63043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:20:04.050 [DEBUG] [Thread-63043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:20:04.050 [DEBUG] [Thread-63043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:20:04.071 [INFO] [Thread-63043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:20:04.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:20:05.996 [DEBUG] [Thread-63043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:20:05.996 [DEBUG] [Thread-63043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:20:05.997 [DEBUG] [Thread-63043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:20:06.037 [DEBUG] [Thread-63043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:20:06.038 [DEBUG] [Thread-63043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:20:06.041 [DEBUG] [Thread-63043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:20:06.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:20:06.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:20:06.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:20:06.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:20:06.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:20:06.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:20:06.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:20:06.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:20:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:20:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.888588 -999.00  +14.30  13.46     49   +3.90 1 2 1 1 1     0    0 9.73 -33.99 Z..SW 12.2 13.5 150.4 18.1 15.1 -20.5 14.9 -20.5 14.8 -20.2 15.0 -20.2
2025-11-17T23:20:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:20:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:20:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.888588
2025-11-17T23:20:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:20:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:20:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:20:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:20:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:20:06.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:19:40', tmtdew=11.95, humidity=44.49, cloud=0.0, wind=18.47, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:19:40', seeing=2.01, atlas_timestamp='2025-11-17T21:19:34.003', atlas_cloud=2, atlas_rain=1, zp_data=[1.1217499999999996, 0.8532500000000018, 1.1452500000000008, 1.270999999999999, 1.6595000000000004, 1.6712500000000006, 0.8674999999999997, 0.7352500000000006, 0.4875000000000007, 1.0100000000000007, 0.6872499999999997, 0.7110000000000003, 1.0175, 2.1042499999999995, 1.169999999999999, 1.7139999999999986, 1.07925, 1.1724999999999994, 0.44049999999999834, 0.43024999999999913, 0.883499999999998, 1.853749999999999, 1.3987500000000015, 2.40825, 1.9999999999999991, 0.9215, 0.34375, 0.4220000000000006, 1.1695000000000002, 2.3400000000000007, 0.7580000000000009, 0.41800000000000104, 1.840749999999999], zp_timestamp='2025-11-17T21:18:00')
2025-11-17T23:20:06.085 [DEBUG] [Thread-63043] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:20:06.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:20:06.173 [DEBUG] [Thread-63046] [transport.py] [_log()] starting thread (client mode): 0xd07111e0
2025-11-17T23:20:06.173 [DEBUG] [Thread-63046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:20:06.188 [DEBUG] [Thread-63046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:20:06.188 [INFO] [Thread-63046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:20:06.195 [DEBUG] [Thread-63046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:20:06.196 [DEBUG] [Thread-63046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:20:06.196 [DEBUG] [Thread-63046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:20:06.196 [DEBUG] [Thread-63046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:20:06.196 [DEBUG] [Thread-63046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:20:06.196 [DEBUG] [Thread-63046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:20:06.196 [DEBUG] [Thread-63046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:20:06.196 [DEBUG] [Thread-63046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:20:06.197 [DEBUG] [Thread-63046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:20:06.197 [DEBUG] [Thread-63046] [transport.py] [_log()] client lang: <none>
2025-11-17T23:20:06.197 [DEBUG] [Thread-63046] [transport.py] [_log()] server lang: <none>
2025-11-17T23:20:06.197 [DEBUG] [Thread-63046] [transport.py] [_log()] kex follows: False
2025-11-17T23:20:06.197 [DEBUG] [Thread-63046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:20:06.197 [DEBUG] [Thread-63046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:20:06.197 [DEBUG] [Thread-63046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:20:06.197 [DEBUG] [Thread-63046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:20:06.198 [DEBUG] [Thread-63046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:20:06.198 [DEBUG] [Thread-63046] [transport.py] [_log()] Compression: none
2025-11-17T23:20:06.198 [DEBUG] [Thread-63046] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:20:06.254 [DEBUG] [Thread-63046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:20:06.255 [DEBUG] [Thread-63046] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:20:06.255 [DEBUG] [Thread-63046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:20:06.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:20:06.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:20:06.309 [DEBUG] [Thread-63046] [transport.py] [_log()] userauth is OK
2025-11-17T23:20:06.310 [DEBUG] [Thread-63046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:20:06.310 [DEBUG] [Thread-63046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:20:06.310 [DEBUG] [Thread-63046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:20:06.310 [DEBUG] [Thread-63046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:20:06.329 [INFO] [Thread-63046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:20:06.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:20:06.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:20:07.181 [DEBUG] [Thread-63046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:20:07.181 [DEBUG] [Thread-63046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:20:07.228 [DEBUG] [Thread-63046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:20:07.228 [DEBUG] [Thread-63046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:20:07.237 [DEBUG] [Thread-63046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:20:07.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:20:07.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:20:07.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:20:07.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:20:07.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:20:07.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:20:07.270 [DEBUG] [Thread-63046] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:20:09.188 [DEBUG] [Thread-63048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:20:12.815 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:20:12.816 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:20:24.228 [DEBUG] [Thread-63049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:20:37.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:20:37.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:20:37.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:20:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 20, 12), 11.9, 44.66, 0.0, 18.09, 14.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:20:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:20:12
2025-11-17T23:20:38.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:20:38.216 [DEBUG] [Thread-63050] [transport.py] [_log()] starting thread (client mode): 0xd317fb80
2025-11-17T23:20:38.216 [DEBUG] [Thread-63050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:20:38.236 [DEBUG] [Thread-63050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:20:38.236 [INFO] [Thread-63050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:20:38.239 [DEBUG] [Thread-63050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:20:38.239 [DEBUG] [Thread-63050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:20:38.239 [DEBUG] [Thread-63050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] client lang: <none>
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] server lang: <none>
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] kex follows: False
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] Compression: none
2025-11-17T23:20:38.240 [DEBUG] [Thread-63050] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:20:38.257 [DEBUG] [Thread-63050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:20:38.257 [DEBUG] [Thread-63050] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:20:38.258 [DEBUG] [Thread-63050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:20:38.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:20:38.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:20:38.260 [DEBUG] [Thread-63050] [transport.py] [_log()] userauth is OK
2025-11-17T23:20:38.260 [DEBUG] [Thread-63050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:20:38.260 [DEBUG] [Thread-63050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:20:38.260 [DEBUG] [Thread-63050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:20:38.260 [DEBUG] [Thread-63050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:20:38.284 [INFO] [Thread-63050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:20:38.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:20:38.928 [DEBUG] [Thread-63050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:20:38.928 [DEBUG] [Thread-63050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:20:38.928 [DEBUG] [Thread-63050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:20:38.969 [DEBUG] [Thread-63050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:20:38.970 [DEBUG] [Thread-63050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:20:38.972 [DEBUG] [Thread-63050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:20:38.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:20:38.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:20:38.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:20:38.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:20:38.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:20:38.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:20:38.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:20:38.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:20:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:20:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.888935 -999.00  +14.30  11.38     49   +3.90 1 2 1 1 1     0    0 9.66 -33.69 Zn.SW 14.2 11.4 156.7 16.3 15.1 -20.8 14.9 -20.6 14.7 -20.4 15.0 -20.3
2025-11-17T23:20:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:20:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:20:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.888935
2025-11-17T23:20:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:20:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:20:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:20:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:20:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:20:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:20:12', tmtdew=11.9, humidity=44.66, cloud=0.0, wind=18.09, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:20:12', seeing=2.12, atlas_timestamp='2025-11-17T21:20:03.984', atlas_cloud=2, atlas_rain=1, zp_data=[1.1217499999999996, 0.8532500000000018, 1.1452500000000008, 1.270999999999999, 1.6595000000000004, 1.6712500000000006, 0.8674999999999997, 0.7352500000000006, 0.4875000000000007, 1.0100000000000007, 0.6872499999999997, 0.7110000000000003, 1.0175, 2.1042499999999995, 1.169999999999999, 1.7139999999999986, 1.07925, 1.1724999999999994, 0.44049999999999834, 0.43024999999999913, 0.883499999999998, 1.853749999999999, 1.3987500000000015, 2.40825, 1.9999999999999991, 0.9215, 0.34375, 0.4220000000000006, 1.1695000000000002, 2.3400000000000007, 0.7580000000000009, 0.41800000000000104, 1.840749999999999], zp_timestamp='2025-11-17T21:18:00')
2025-11-17T23:20:38.997 [DEBUG] [Thread-63050] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:20:39.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:20:39.094 [DEBUG] [Thread-63053] [transport.py] [_log()] starting thread (client mode): 0xd07aa680
2025-11-17T23:20:39.094 [DEBUG] [Thread-63053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:20:39.110 [DEBUG] [Thread-63053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:20:39.110 [INFO] [Thread-63053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:20:39.117 [DEBUG] [Thread-63053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:20:39.117 [DEBUG] [Thread-63053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:20:39.117 [DEBUG] [Thread-63053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:20:39.117 [DEBUG] [Thread-63053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:20:39.117 [DEBUG] [Thread-63053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:20:39.117 [DEBUG] [Thread-63053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:20:39.117 [DEBUG] [Thread-63053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:20:39.117 [DEBUG] [Thread-63053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] client lang: <none>
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] server lang: <none>
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] kex follows: False
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] Compression: none
2025-11-17T23:20:39.118 [DEBUG] [Thread-63053] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:20:39.178 [DEBUG] [Thread-63053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:20:39.179 [DEBUG] [Thread-63053] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:20:39.179 [DEBUG] [Thread-63053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:20:39.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:20:39.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:20:39.237 [DEBUG] [Thread-63053] [transport.py] [_log()] userauth is OK
2025-11-17T23:20:39.237 [DEBUG] [Thread-63053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:20:39.237 [DEBUG] [Thread-63053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:20:39.238 [DEBUG] [Thread-63053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:20:39.238 [DEBUG] [Thread-63053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:20:39.256 [INFO] [Thread-63053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:20:39.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:20:39.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:20:39.262 [DEBUG] [Thread-63055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:20:40.076 [DEBUG] [Thread-63053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:20:40.077 [DEBUG] [Thread-63053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:20:40.124 [DEBUG] [Thread-63053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:20:40.125 [DEBUG] [Thread-63053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:20:40.133 [DEBUG] [Thread-63053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:20:40.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:20:40.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:20:40.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:20:40.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:20:40.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:20:40.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:20:40.167 [DEBUG] [Thread-63053] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:20:49.843 [DEBUG] [Thread-63056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:20:54.297 [DEBUG] [Thread-63057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:21:09.327 [DEBUG] [Thread-63058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:21:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:21:10.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:21:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:21:10.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 20, 44), 11.81, 44.77, 0.0, 16.75, 14.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:21:10.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:20:44
2025-11-17T23:21:10.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:21:11.127 [DEBUG] [Thread-63059] [transport.py] [_log()] starting thread (client mode): 0xd0711a50
2025-11-17T23:21:11.127 [DEBUG] [Thread-63059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:21:11.148 [DEBUG] [Thread-63059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:21:11.148 [INFO] [Thread-63059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] client lang: <none>
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] server lang: <none>
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] kex follows: False
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] Compression: none
2025-11-17T23:21:11.151 [DEBUG] [Thread-63059] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:21:11.169 [DEBUG] [Thread-63059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:21:11.169 [DEBUG] [Thread-63059] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:21:11.170 [DEBUG] [Thread-63059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:21:11.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:21:11.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:21:11.172 [DEBUG] [Thread-63059] [transport.py] [_log()] userauth is OK
2025-11-17T23:21:11.172 [DEBUG] [Thread-63059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:21:11.172 [DEBUG] [Thread-63059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:21:11.172 [DEBUG] [Thread-63059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:21:11.172 [DEBUG] [Thread-63059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:21:11.196 [INFO] [Thread-63059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:21:11.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:21:11.814 [DEBUG] [Thread-63059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:21:11.815 [DEBUG] [Thread-63059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:21:11.815 [DEBUG] [Thread-63059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:21:11.856 [DEBUG] [Thread-63059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:21:11.856 [DEBUG] [Thread-63059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:21:11.859 [DEBUG] [Thread-63059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:21:11.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:21:11.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:21:11.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:21:11.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:21:11.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:21:11.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:21:11.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:21:11.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:21:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:21:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.889282 -999.00  +14.30  12.80     49   +3.90 1 2 1 1 1     0    0 9.72 -30.62 Zn.SW 13.4 12.8 159.0 17.4 15.0 -21.0 14.8 -20.6 14.7 -20.2 15.0 -20.5
2025-11-17T23:21:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:21:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:21:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.889282
2025-11-17T23:21:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:21:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:21:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:21:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:21:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:21:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:20:44', tmtdew=11.81, humidity=44.77, cloud=0.0, wind=16.75, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:20:44', seeing=1.89, atlas_timestamp='2025-11-17T21:20:33.965', atlas_cloud=2, atlas_rain=1, zp_data=[1.1217499999999996, 0.8532500000000018, 1.1452500000000008, 1.270999999999999, 1.6595000000000004, 1.6712500000000006, 0.8674999999999997, 0.7352500000000006, 0.4875000000000007, 1.0100000000000007, 0.6872499999999997, 0.7110000000000003, 1.0175, 2.1042499999999995, 1.169999999999999, 1.7139999999999986, 1.07925, 1.1724999999999994, 0.44049999999999834, 0.43024999999999913, 0.883499999999998, 1.853749999999999, 1.3987500000000015, 2.40825, 1.9999999999999991, 0.9215, 0.34375, 0.4220000000000006, 1.1695000000000002, 2.3400000000000007, 0.7580000000000009, 0.41800000000000104, 1.840749999999999], zp_timestamp='2025-11-17T21:18:00')
2025-11-17T23:21:11.885 [DEBUG] [Thread-63059] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:21:11.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:21:11.979 [DEBUG] [Thread-63062] [transport.py] [_log()] starting thread (client mode): 0xd0712a10
2025-11-17T23:21:11.979 [DEBUG] [Thread-63062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:21:11.994 [DEBUG] [Thread-63062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:21:11.994 [INFO] [Thread-63062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:21:12.002 [DEBUG] [Thread-63062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:21:12.002 [DEBUG] [Thread-63062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:21:12.002 [DEBUG] [Thread-63062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:21:12.002 [DEBUG] [Thread-63062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:21:12.002 [DEBUG] [Thread-63062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] client lang: <none>
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] server lang: <none>
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] kex follows: False
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] Compression: none
2025-11-17T23:21:12.003 [DEBUG] [Thread-63062] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:21:12.061 [DEBUG] [Thread-63062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:21:12.062 [DEBUG] [Thread-63062] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:21:12.062 [DEBUG] [Thread-63062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:21:12.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:21:12.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:21:12.118 [DEBUG] [Thread-63062] [transport.py] [_log()] userauth is OK
2025-11-17T23:21:12.118 [DEBUG] [Thread-63062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:21:12.118 [DEBUG] [Thread-63062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:21:12.118 [DEBUG] [Thread-63062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:21:12.118 [DEBUG] [Thread-63062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:21:12.137 [INFO] [Thread-63062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:21:12.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:21:12.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:21:12.971 [DEBUG] [Thread-63062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:21:12.971 [DEBUG] [Thread-63062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:21:13.019 [DEBUG] [Thread-63062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:21:13.019 [DEBUG] [Thread-63062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:21:13.021 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:21:13.022 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:21:13.028 [DEBUG] [Thread-63062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:21:13.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:21:13.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:21:13.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:21:13.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:21:13.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:21:13.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:21:13.062 [DEBUG] [Thread-63062] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:21:24.355 [DEBUG] [Thread-63064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:21:39.395 [DEBUG] [Thread-63065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:21:43.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:21:43.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:21:43.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:21:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 21, 16), 11.81, 44.77, 0.0, 16.57, 14.19, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:21:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:21:16
2025-11-17T23:21:43.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:21:44.027 [DEBUG] [Thread-63066] [transport.py] [_log()] starting thread (client mode): 0xd317e350
2025-11-17T23:21:44.027 [DEBUG] [Thread-63066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:21:44.041 [DEBUG] [Thread-63066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:21:44.041 [INFO] [Thread-63066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] client lang: <none>
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] server lang: <none>
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] kex follows: False
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] Compression: none
2025-11-17T23:21:44.043 [DEBUG] [Thread-63066] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:21:44.056 [DEBUG] [Thread-63066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:21:44.056 [DEBUG] [Thread-63066] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:21:44.056 [DEBUG] [Thread-63066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:21:44.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:21:44.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:21:44.058 [DEBUG] [Thread-63066] [transport.py] [_log()] userauth is OK
2025-11-17T23:21:44.058 [DEBUG] [Thread-63066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:21:44.058 [DEBUG] [Thread-63066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:21:44.058 [DEBUG] [Thread-63066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:21:44.058 [DEBUG] [Thread-63066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:21:44.090 [INFO] [Thread-63066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:21:44.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:21:44.736 [DEBUG] [Thread-63066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:21:44.736 [DEBUG] [Thread-63066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:21:44.737 [DEBUG] [Thread-63066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:21:44.777 [DEBUG] [Thread-63066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:21:44.777 [DEBUG] [Thread-63066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:21:44.780 [DEBUG] [Thread-63066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:21:44.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:21:44.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:21:44.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:21:44.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:21:44.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:21:44.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:21:44.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:21:44.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:21:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:21:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.889977 -999.00  +14.30   9.12     49   +3.90 1 2 1 1 1     0    0 9.91 -25.83 ZNES. 12.0 9.1 152.2 16.0 15.0 -21.0 14.8 -20.5 14.7 -20.0 15.0 -20.4
2025-11-17T23:21:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:21:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:21:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.889977
2025-11-17T23:21:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:21:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:21:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:21:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:21:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:21:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:21:16', tmtdew=11.81, humidity=44.77, cloud=0.0, wind=16.57, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:21:16', seeing=2.07, atlas_timestamp='2025-11-17T21:21:34.013', atlas_cloud=2, atlas_rain=1, zp_data=[1.1217499999999996, 0.8532500000000018, 1.1452500000000008, 1.270999999999999, 1.6595000000000004, 1.6712500000000006, 0.8674999999999997, 0.7352500000000006, 0.4875000000000007, 1.0100000000000007, 0.6872499999999997, 0.7110000000000003, 1.0175, 2.1042499999999995, 1.169999999999999, 1.7139999999999986, 1.07925, 1.1724999999999994, 0.44049999999999834, 0.43024999999999913, 0.883499999999998, 1.853749999999999, 1.3987500000000015, 2.40825, 1.9999999999999991, 0.9215, 0.34375, 0.4220000000000006, 1.1695000000000002, 2.3400000000000007, 0.7580000000000009, 0.41800000000000104, 1.840749999999999], zp_timestamp='2025-11-17T21:18:00')
2025-11-17T23:21:44.804 [DEBUG] [Thread-63066] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:21:44.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:21:44.900 [DEBUG] [Thread-63069] [transport.py] [_log()] starting thread (client mode): 0xd317f280
2025-11-17T23:21:44.900 [DEBUG] [Thread-63069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:21:44.916 [DEBUG] [Thread-63069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:21:44.916 [INFO] [Thread-63069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:21:44.923 [DEBUG] [Thread-63069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:21:44.923 [DEBUG] [Thread-63069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:21:44.923 [DEBUG] [Thread-63069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:21:44.923 [DEBUG] [Thread-63069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:21:44.923 [DEBUG] [Thread-63069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:21:44.923 [DEBUG] [Thread-63069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] client lang: <none>
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] server lang: <none>
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] kex follows: False
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] Compression: none
2025-11-17T23:21:44.924 [DEBUG] [Thread-63069] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:21:44.981 [DEBUG] [Thread-63069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:21:44.981 [DEBUG] [Thread-63069] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:21:44.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:21:44.982 [DEBUG] [Thread-63069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:21:44.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:21:45.038 [DEBUG] [Thread-63069] [transport.py] [_log()] userauth is OK
2025-11-17T23:21:45.038 [DEBUG] [Thread-63069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:21:45.038 [DEBUG] [Thread-63069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:21:45.038 [DEBUG] [Thread-63069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:21:45.039 [DEBUG] [Thread-63069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:21:45.059 [INFO] [Thread-63069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:21:45.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:21:45.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:21:45.893 [DEBUG] [Thread-63069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:21:45.893 [DEBUG] [Thread-63069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:21:45.941 [DEBUG] [Thread-63069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:21:45.941 [DEBUG] [Thread-63069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:21:45.950 [DEBUG] [Thread-63069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:21:45.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:21:45.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:21:45.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:21:45.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:21:45.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:21:45.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:21:45.985 [DEBUG] [Thread-63069] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:21:49.912 [DEBUG] [Thread-63071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:21:54.422 [DEBUG] [Thread-63072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:22:09.461 [DEBUG] [Thread-63073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:22:13.229 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:22:13.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:22:16.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:22:16.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:22:16.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:22:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 21, 48), 11.86, 44.63, 0.0, 15.99, 14.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:22:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:21:48
2025-11-17T23:22:16.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:22:16.984 [DEBUG] [Thread-63074] [transport.py] [_log()] starting thread (client mode): 0xd0710a90
2025-11-17T23:22:16.984 [DEBUG] [Thread-63074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:22:17.004 [DEBUG] [Thread-63074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:22:17.004 [INFO] [Thread-63074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:22:17.007 [DEBUG] [Thread-63074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:22:17.007 [DEBUG] [Thread-63074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:22:17.007 [DEBUG] [Thread-63074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:22:17.007 [DEBUG] [Thread-63074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:22:17.007 [DEBUG] [Thread-63074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:22:17.007 [DEBUG] [Thread-63074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:22:17.007 [DEBUG] [Thread-63074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:22:17.007 [DEBUG] [Thread-63074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] client lang: <none>
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] server lang: <none>
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] kex follows: False
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] Compression: none
2025-11-17T23:22:17.008 [DEBUG] [Thread-63074] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:22:17.023 [DEBUG] [Thread-63074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:22:17.024 [DEBUG] [Thread-63074] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:22:17.024 [DEBUG] [Thread-63074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:22:17.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:22:17.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:22:17.025 [DEBUG] [Thread-63074] [transport.py] [_log()] userauth is OK
2025-11-17T23:22:17.025 [DEBUG] [Thread-63074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:22:17.025 [DEBUG] [Thread-63074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:22:17.025 [DEBUG] [Thread-63074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:22:17.025 [DEBUG] [Thread-63074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:22:17.043 [INFO] [Thread-63074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:22:17.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:22:17.646 [DEBUG] [Thread-63074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:22:17.646 [DEBUG] [Thread-63074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:22:17.647 [DEBUG] [Thread-63074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:22:17.688 [DEBUG] [Thread-63074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:22:17.688 [DEBUG] [Thread-63074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:22:17.691 [DEBUG] [Thread-63074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:22:17.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:22:17.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:22:17.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:22:17.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:22:17.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:22:17.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:22:17.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:22:17.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:22:17.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:22:17.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.890324 -999.00  +14.30   9.84     49   +3.90 1 2 1 1 1     0    0 9.97 -27.76 ZNES. 8.8 9.8 157.2 17.4 15.0 -21.2 14.8 -20.6 14.6 -20.0 15.0 -20.6
2025-11-17T23:22:17.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:22:17.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:22:17.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.890324
2025-11-17T23:22:17.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:22:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:22:17.719 [DEBUG] [Thread-63074] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:22:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:22:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:22:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:22:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:21:48', tmtdew=11.86, humidity=44.63, cloud=0.0, wind=15.99, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:21:48', seeing=2.07, atlas_timestamp='2025-11-17T21:22:03.994', atlas_cloud=2, atlas_rain=1, zp_data=[1.1217499999999996, 0.8532500000000018, 1.1452500000000008, 1.270999999999999, 1.6595000000000004, 1.6712500000000006, 0.8674999999999997, 0.7352500000000006, 0.4875000000000007, 1.0100000000000007, 0.6872499999999997, 0.7110000000000003, 1.0175, 2.1042499999999995, 1.169999999999999, 1.7139999999999986, 1.07925, 1.1724999999999994, 0.44049999999999834, 0.43024999999999913, 0.883499999999998, 1.853749999999999, 1.3987500000000015, 2.40825, 1.9999999999999991, 0.9215, 0.34375, 0.4220000000000006, 1.1695000000000002, 2.3400000000000007, 0.7580000000000009, 0.41800000000000104, 1.840749999999999], zp_timestamp='2025-11-17T21:18:00')
2025-11-17T23:22:17.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:22:17.809 [DEBUG] [Thread-63077] [transport.py] [_log()] starting thread (client mode): 0xd07aa6b0
2025-11-17T23:22:17.809 [DEBUG] [Thread-63077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:22:17.824 [DEBUG] [Thread-63077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:22:17.824 [INFO] [Thread-63077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:22:17.832 [DEBUG] [Thread-63077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:22:17.832 [DEBUG] [Thread-63077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:22:17.832 [DEBUG] [Thread-63077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:22:17.832 [DEBUG] [Thread-63077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] client lang: <none>
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] server lang: <none>
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] kex follows: False
2025-11-17T23:22:17.833 [DEBUG] [Thread-63077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:22:17.834 [DEBUG] [Thread-63077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:22:17.834 [DEBUG] [Thread-63077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:22:17.834 [DEBUG] [Thread-63077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:22:17.834 [DEBUG] [Thread-63077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:22:17.834 [DEBUG] [Thread-63077] [transport.py] [_log()] Compression: none
2025-11-17T23:22:17.834 [DEBUG] [Thread-63077] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:22:17.889 [DEBUG] [Thread-63077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:22:17.889 [DEBUG] [Thread-63077] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:22:17.890 [DEBUG] [Thread-63077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:22:17.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:22:17.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:22:17.946 [DEBUG] [Thread-63077] [transport.py] [_log()] userauth is OK
2025-11-17T23:22:17.946 [DEBUG] [Thread-63077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:22:17.946 [DEBUG] [Thread-63077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:22:17.946 [DEBUG] [Thread-63077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:22:17.946 [DEBUG] [Thread-63077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:22:17.965 [INFO] [Thread-63077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:22:17.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:22:17.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:22:18.802 [DEBUG] [Thread-63077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:22:18.802 [DEBUG] [Thread-63077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:22:18.849 [DEBUG] [Thread-63077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:22:18.849 [DEBUG] [Thread-63077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:22:18.858 [DEBUG] [Thread-63077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:22:18.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:22: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')
2025-11-17T23:22:18.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
2025-11-17T23:22:18.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:22:18.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:22:18.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:22:18.893 [DEBUG] [Thread-63077] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:22:24.489 [DEBUG] [Thread-63079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:22:39.539 [DEBUG] [Thread-63080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:22:48.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:22:48.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:22:48.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:22:49.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 22, 20), 11.86, 44.61, 0.0, 15.05, 14.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:22:49.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:22:20
2025-11-17T23:22:49.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:22:49.850 [DEBUG] [Thread-63081] [transport.py] [_log()] starting thread (client mode): 0xd31cd270
2025-11-17T23:22:49.850 [DEBUG] [Thread-63081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:22:49.863 [DEBUG] [Thread-63081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:22:49.863 [INFO] [Thread-63081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] client lang: <none>
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] server lang: <none>
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] kex follows: False
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:22:49.864 [DEBUG] [Thread-63081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:22:49.865 [DEBUG] [Thread-63081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:22:49.865 [DEBUG] [Thread-63081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:22:49.865 [DEBUG] [Thread-63081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:22:49.865 [DEBUG] [Thread-63081] [transport.py] [_log()] Compression: none
2025-11-17T23:22:49.865 [DEBUG] [Thread-63081] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:22:49.873 [DEBUG] [Thread-63081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:22:49.873 [DEBUG] [Thread-63081] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:22:49.873 [DEBUG] [Thread-63081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:22:49.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:22:49.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:22:49.874 [DEBUG] [Thread-63081] [transport.py] [_log()] userauth is OK
2025-11-17T23:22:49.875 [DEBUG] [Thread-63081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:22:49.875 [DEBUG] [Thread-63081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:22:49.875 [DEBUG] [Thread-63081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:22:49.875 [DEBUG] [Thread-63081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:22:49.895 [INFO] [Thread-63081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:22:49.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:22:49.996 [DEBUG] [Thread-63083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:22:50.465 [DEBUG] [Thread-63081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:22:50.465 [DEBUG] [Thread-63081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:22:50.465 [DEBUG] [Thread-63081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:22:50.506 [DEBUG] [Thread-63081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:22:50.506 [DEBUG] [Thread-63081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:22:50.508 [DEBUG] [Thread-63081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:22:50.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:22:50.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:22:50.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:22:50.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:22:50.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:22:50.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:22:50.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:22:50.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:22:50.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:22:50.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.890671 -999.00  +14.30  11.86     49   +3.90 1 2 1 1 1     0    0 9.63 -28.45 ZNES. 12.0 11.9 154.6 16.1 15.0 -21.2 14.8 -20.6 14.7 -19.9 14.9 -20.4
2025-11-17T23:22:50.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.890671
2025-11-17T23:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:22:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:22:20', tmtdew=11.86, humidity=44.61, cloud=0.0, wind=15.05, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:22:20', seeing=1.85, atlas_timestamp='2025-11-17T21:22:33.974', atlas_cloud=2, atlas_rain=1, zp_data=[0.29574999999999996, 0.2912499999999998, 0.19824999999999982, 0.21950000000000003, 0.33399999999999963, 0.3642500000000002, 0.6279999999999992, 1.3802500000000002, 1.2654999999999994, 0.3465000000000007, 0.25375000000000014, 0.26649999999999885, 0.49150000000000027, 0.48775000000000013, 0.5814999999999992, 1.8199999999999994, 1.6792499999999997, 0.33450000000000024, 0.32399999999999984, 0.6032499999999992, 1.322499999999998, 1.1537499999999987, 0.6492500000000012, 1.4522500000000003, 1.5919999999999987, 0.3305000000000007, 0.3827499999999997, 0.47550000000000026, 1.5780000000000003, nan, 0.8760000000000012, 0.892500000000001, 1.385749999999999], zp_timestamp='2025-11-17T21:21:00')
2025-11-17T23:22:50.525 [DEBUG] [Thread-63081] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:22:50.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:22:50.612 [DEBUG] [Thread-63085] [transport.py] [_log()] starting thread (client mode): 0xd07aa560
2025-11-17T23:22:50.612 [DEBUG] [Thread-63085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:22:50.628 [DEBUG] [Thread-63085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:22:50.628 [INFO] [Thread-63085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] client lang: <none>
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] server lang: <none>
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] kex follows: False
2025-11-17T23:22:50.635 [DEBUG] [Thread-63085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:22:50.636 [DEBUG] [Thread-63085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:22:50.636 [DEBUG] [Thread-63085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:22:50.636 [DEBUG] [Thread-63085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:22:50.636 [DEBUG] [Thread-63085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:22:50.636 [DEBUG] [Thread-63085] [transport.py] [_log()] Compression: none
2025-11-17T23:22:50.636 [DEBUG] [Thread-63085] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:22:50.692 [DEBUG] [Thread-63085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:22:50.692 [DEBUG] [Thread-63085] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:22:50.692 [DEBUG] [Thread-63085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:22:50.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:22:50.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:22:50.749 [DEBUG] [Thread-63085] [transport.py] [_log()] userauth is OK
2025-11-17T23:22:50.749 [DEBUG] [Thread-63085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:22:50.749 [DEBUG] [Thread-63085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:22:50.749 [DEBUG] [Thread-63085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:22:50.749 [DEBUG] [Thread-63085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:22:50.764 [INFO] [Thread-63085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:22:50.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:22:50.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:22:51.692 [DEBUG] [Thread-63085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:22:51.692 [DEBUG] [Thread-63085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:22:51.740 [DEBUG] [Thread-63085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:22:51.740 [DEBUG] [Thread-63085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:22:51.748 [DEBUG] [Thread-63085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:22:51.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:22:51.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:22:51.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:22:51.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:22:51.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:22:51.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:22:51.780 [DEBUG] [Thread-63085] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:22:54.566 [DEBUG] [Thread-63087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:23:09.598 [DEBUG] [Thread-63088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:23:13.435 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:23:13.436 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:23:21.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:23:21.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:23:21.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:23:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 22, 52), 11.82, 44.74, 0.0, 15.47, 14.2, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:23:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:22:52
2025-11-17T23:23:22.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:23:22.730 [DEBUG] [Thread-63089] [transport.py] [_log()] starting thread (client mode): 0xd3160dc0
2025-11-17T23:23:22.730 [DEBUG] [Thread-63089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:23:22.752 [DEBUG] [Thread-63089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:23:22.752 [INFO] [Thread-63089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:23:22.755 [DEBUG] [Thread-63089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] client lang: <none>
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] server lang: <none>
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] kex follows: False
2025-11-17T23:23:22.756 [DEBUG] [Thread-63089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:23:22.757 [DEBUG] [Thread-63089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:23:22.757 [DEBUG] [Thread-63089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:23:22.757 [DEBUG] [Thread-63089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:23:22.757 [DEBUG] [Thread-63089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:23:22.757 [DEBUG] [Thread-63089] [transport.py] [_log()] Compression: none
2025-11-17T23:23:22.757 [DEBUG] [Thread-63089] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:23:22.776 [DEBUG] [Thread-63089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:23:22.777 [DEBUG] [Thread-63089] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:23:22.777 [DEBUG] [Thread-63089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:23:22.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:23:22.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:23:22.779 [DEBUG] [Thread-63089] [transport.py] [_log()] userauth is OK
2025-11-17T23:23:22.779 [DEBUG] [Thread-63089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:23:22.779 [DEBUG] [Thread-63089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:23:22.779 [DEBUG] [Thread-63089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:23:22.780 [DEBUG] [Thread-63089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:23:22.802 [INFO] [Thread-63089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:23:22.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:23:23.429 [DEBUG] [Thread-63089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:23:23.429 [DEBUG] [Thread-63089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:23:23.430 [DEBUG] [Thread-63089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:23:23.471 [DEBUG] [Thread-63089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:23:23.471 [DEBUG] [Thread-63089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:23:23.474 [DEBUG] [Thread-63089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:23:23.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:23:23.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:23:23.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:23:23.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:23:23.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:23:23.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:23:23.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:23:23.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:23:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:23:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.890671 -999.00  +14.30  11.86     49   +3.90 1 2 1 1 1     0    0 9.63 -28.45 ZNES. 12.0 11.9 154.6 16.1 15.0 -21.2 14.8 -20.6 14.7 -19.9 14.9 -20.4
2025-11-17T23:23:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:23:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:23:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.890671
2025-11-17T23:23:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:23:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:23:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:23:23.498 [DEBUG] [Thread-63089] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:23:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:23:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:23:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:22:52', tmtdew=11.82, humidity=44.74, cloud=0.0, wind=15.47, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:22:52', seeing=2.02, atlas_timestamp='2025-11-17T21:22:33.974', atlas_cloud=2, atlas_rain=1, zp_data=[0.29574999999999996, 0.2912499999999998, 0.19824999999999982, 0.21950000000000003, 0.33399999999999963, 0.3642500000000002, 0.6279999999999992, 1.3802500000000002, 1.2654999999999994, 0.3465000000000007, 0.25375000000000014, 0.26649999999999885, 0.49150000000000027, 0.48775000000000013, 0.5814999999999992, 1.8199999999999994, 1.6792499999999997, 0.33450000000000024, 0.32399999999999984, 0.6032499999999992, 1.322499999999998, 1.1537499999999987, 0.6492500000000012, 1.4522500000000003, 1.5919999999999987, 0.3305000000000007, 0.3827499999999997, 0.47550000000000026, 1.5780000000000003, nan, 0.8760000000000012, 0.892500000000001, 1.385749999999999], zp_timestamp='2025-11-17T21:21:00')
2025-11-17T23:23:23.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:23:23.595 [DEBUG] [Thread-63092] [transport.py] [_log()] starting thread (client mode): 0xd0712d70
2025-11-17T23:23:23.595 [DEBUG] [Thread-63092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:23:23.609 [DEBUG] [Thread-63092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:23:23.609 [INFO] [Thread-63092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:23:23.617 [DEBUG] [Thread-63092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] client lang: <none>
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] server lang: <none>
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] kex follows: False
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] Compression: none
2025-11-17T23:23:23.618 [DEBUG] [Thread-63092] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:23:23.673 [DEBUG] [Thread-63092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:23:23.673 [DEBUG] [Thread-63092] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:23:23.674 [DEBUG] [Thread-63092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:23:23.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:23:23.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:23:23.729 [DEBUG] [Thread-63092] [transport.py] [_log()] userauth is OK
2025-11-17T23:23:23.730 [DEBUG] [Thread-63092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:23:23.730 [DEBUG] [Thread-63092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:23:23.730 [DEBUG] [Thread-63092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:23:23.730 [DEBUG] [Thread-63092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:23:23.749 [INFO] [Thread-63092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:23:23.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:23:23.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:23:24.593 [DEBUG] [Thread-63092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:23:24.593 [DEBUG] [Thread-63092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:23:24.630 [DEBUG] [Thread-63094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:23:24.644 [DEBUG] [Thread-63092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:23:24.644 [DEBUG] [Thread-63092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:23:24.656 [DEBUG] [Thread-63092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:23:24.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:23:24.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:23:24.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:23:24.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:23:24.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:23:24.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:23:24.699 [DEBUG] [Thread-63092] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:23:39.667 [DEBUG] [Thread-63095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:23:50.071 [DEBUG] [Thread-63096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:23:54.697 [DEBUG] [Thread-63097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:23:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:23:54.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:23:54.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:23:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 23, 24), 11.82, 44.71, 0.0, 16.16, 14.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:23:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:23:24
2025-11-17T23:23:55.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:23:55.658 [DEBUG] [Thread-63098] [transport.py] [_log()] starting thread (client mode): 0xd3162bc0
2025-11-17T23:23:55.659 [DEBUG] [Thread-63098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:23:55.674 [DEBUG] [Thread-63098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:23:55.675 [INFO] [Thread-63098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] client lang: <none>
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] server lang: <none>
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] kex follows: False
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:23:55.677 [DEBUG] [Thread-63098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:23:55.678 [DEBUG] [Thread-63098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:23:55.678 [DEBUG] [Thread-63098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:23:55.678 [DEBUG] [Thread-63098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:23:55.678 [DEBUG] [Thread-63098] [transport.py] [_log()] Compression: none
2025-11-17T23:23:55.678 [DEBUG] [Thread-63098] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:23:55.696 [DEBUG] [Thread-63098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:23:55.696 [DEBUG] [Thread-63098] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:23:55.697 [DEBUG] [Thread-63098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:23:55.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:23:55.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:23:55.699 [DEBUG] [Thread-63098] [transport.py] [_log()] userauth is OK
2025-11-17T23:23:55.699 [DEBUG] [Thread-63098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:23:55.699 [DEBUG] [Thread-63098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:23:55.699 [DEBUG] [Thread-63098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:23:55.699 [DEBUG] [Thread-63098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:23:55.717 [INFO] [Thread-63098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:23:55.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:23:56.332 [DEBUG] [Thread-63098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:23:56.332 [DEBUG] [Thread-63098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:23:56.332 [DEBUG] [Thread-63098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:23:56.373 [DEBUG] [Thread-63098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:23:56.374 [DEBUG] [Thread-63098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:23:56.376 [DEBUG] [Thread-63098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:23:56.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:23:56.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:23:56.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:23:56.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:23:56.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:23:56.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:23:56.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:23:56.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:23:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:23:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.891018 -999.00  +14.30  10.88     49   +3.90 1 2 1 1 1     0    0 9.90 -29.16 ZNES. 11.4 10.9 157.8 14.8 15.0 -21.2 14.8 -20.6 14.6 -19.9 14.9 -20.3
2025-11-17T23:23:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:23:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:23:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.891018
2025-11-17T23:23:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:23:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:23:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:23:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:23:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:23:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:23:24', tmtdew=11.82, humidity=44.71, cloud=0.0, wind=16.16, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:23:24', seeing=1.74, atlas_timestamp='2025-11-17T21:23:03.955', atlas_cloud=2, atlas_rain=1, zp_data=[0.29574999999999996, 0.2912499999999998, 0.19824999999999982, 0.21950000000000003, 0.33399999999999963, 0.3642500000000002, 0.6279999999999992, 1.3802500000000002, 1.2654999999999994, 0.3465000000000007, 0.25375000000000014, 0.26649999999999885, 0.49150000000000027, 0.48775000000000013, 0.5814999999999992, 1.8199999999999994, 1.6792499999999997, 0.33450000000000024, 0.32399999999999984, 0.6032499999999992, 1.322499999999998, 1.1537499999999987, 0.6492500000000012, 1.4522500000000003, 1.5919999999999987, 0.3305000000000007, 0.3827499999999997, 0.47550000000000026, 1.5780000000000003, nan, 0.8760000000000012, 0.892500000000001, 1.385749999999999], zp_timestamp='2025-11-17T21:21:00')
2025-11-17T23:23:56.402 [DEBUG] [Thread-63098] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:23:56.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:23:56.511 [DEBUG] [Thread-63101] [transport.py] [_log()] starting thread (client mode): 0xd31632e0
2025-11-17T23:23:56.511 [DEBUG] [Thread-63101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:23:56.526 [DEBUG] [Thread-63101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:23:56.527 [INFO] [Thread-63101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] client lang: <none>
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] server lang: <none>
2025-11-17T23:23:56.534 [DEBUG] [Thread-63101] [transport.py] [_log()] kex follows: False
2025-11-17T23:23:56.535 [DEBUG] [Thread-63101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:23:56.535 [DEBUG] [Thread-63101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:23:56.535 [DEBUG] [Thread-63101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:23:56.535 [DEBUG] [Thread-63101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:23:56.535 [DEBUG] [Thread-63101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:23:56.535 [DEBUG] [Thread-63101] [transport.py] [_log()] Compression: none
2025-11-17T23:23:56.535 [DEBUG] [Thread-63101] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:23:56.593 [DEBUG] [Thread-63101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:23:56.593 [DEBUG] [Thread-63101] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:23:56.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:23:56.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:23:56.595 [DEBUG] [Thread-63101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:23:56.649 [DEBUG] [Thread-63101] [transport.py] [_log()] userauth is OK
2025-11-17T23:23:56.649 [DEBUG] [Thread-63101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:23:56.650 [DEBUG] [Thread-63101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:23:56.650 [DEBUG] [Thread-63101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:23:56.650 [DEBUG] [Thread-63101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:23:56.673 [INFO] [Thread-63101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:23:56.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:23:56.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:23:57.503 [DEBUG] [Thread-63101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:23:57.503 [DEBUG] [Thread-63101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:23:57.551 [DEBUG] [Thread-63101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:23:57.551 [DEBUG] [Thread-63101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:23:57.559 [DEBUG] [Thread-63101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:23:57.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:23:57.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:23:57.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:23:57.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:23:57.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:23:57.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:23:57.592 [DEBUG] [Thread-63101] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:24:09.725 [DEBUG] [Thread-63103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:24:13.642 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:24:13.643 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:24:24.759 [DEBUG] [Thread-63104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:24:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:24:27.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:24:27.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:24:28.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 23, 56), 11.79, 44.82, 0.0, 15.62, 14.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:24:28.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:23:56
2025-11-17T23:24:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:24:28.532 [DEBUG] [Thread-63105] [transport.py] [_log()] starting thread (client mode): 0xd317e320
2025-11-17T23:24:28.532 [DEBUG] [Thread-63105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:24:28.552 [DEBUG] [Thread-63105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:24:28.552 [INFO] [Thread-63105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:24:28.553 [DEBUG] [Thread-63105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:24:28.553 [DEBUG] [Thread-63105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] client lang: <none>
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] server lang: <none>
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] kex follows: False
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] Compression: none
2025-11-17T23:24:28.554 [DEBUG] [Thread-63105] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:24:28.572 [DEBUG] [Thread-63105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:24:28.573 [DEBUG] [Thread-63105] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:24:28.573 [DEBUG] [Thread-63105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:24:28.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:24:28.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:24:28.575 [DEBUG] [Thread-63105] [transport.py] [_log()] userauth is OK
2025-11-17T23:24:28.575 [DEBUG] [Thread-63105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:24:28.576 [DEBUG] [Thread-63105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:24:28.576 [DEBUG] [Thread-63105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:24:28.576 [DEBUG] [Thread-63105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:24:28.598 [INFO] [Thread-63105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:24:28.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:24:29.232 [DEBUG] [Thread-63105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:24:29.232 [DEBUG] [Thread-63105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:24:29.232 [DEBUG] [Thread-63105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:24:29.273 [DEBUG] [Thread-63105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:24:29.273 [DEBUG] [Thread-63105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:24:29.275 [DEBUG] [Thread-63105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:24:29.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:24:29.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:24:29.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:24:29.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:24:29.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:24:29.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:24:29.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.891365 -999.00  +14.30  10.45     49   +3.90 1 2 1 1 1     0    0 9.89 -26.85 ZNES. 13.9 10.4 163.2 13.8 15.0 -21.2 14.8 -20.5 14.6 -19.9 14.9 -20.5
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.891365
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:24:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:23:56', tmtdew=11.79, humidity=44.82, cloud=0.0, wind=15.62, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:23:56', seeing=1.46, atlas_timestamp='2025-11-17T21:23:33.936', atlas_cloud=2, atlas_rain=1, zp_data=[0.29574999999999996, 0.2912499999999998, 0.19824999999999982, 0.21950000000000003, 0.33399999999999963, 0.3642500000000002, 0.6279999999999992, 1.3802500000000002, 1.2654999999999994, 0.3465000000000007, 0.25375000000000014, 0.26649999999999885, 0.49150000000000027, 0.48775000000000013, 0.5814999999999992, 1.8199999999999994, 1.6792499999999997, 0.33450000000000024, 0.32399999999999984, 0.6032499999999992, 1.322499999999998, 1.1537499999999987, 0.6492500000000012, 1.4522500000000003, 1.5919999999999987, 0.3305000000000007, 0.3827499999999997, 0.47550000000000026, 1.5780000000000003, nan, 0.8760000000000012, 0.892500000000001, 1.385749999999999], zp_timestamp='2025-11-17T21:21:00')
2025-11-17T23:24:29.288 [DEBUG] [Thread-63105] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:24:29.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:24:29.376 [DEBUG] [Thread-63108] [transport.py] [_log()] starting thread (client mode): 0xd07ab5e0
2025-11-17T23:24:29.376 [DEBUG] [Thread-63108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:24:29.391 [DEBUG] [Thread-63108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:24:29.392 [INFO] [Thread-63108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] client lang: <none>
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] server lang: <none>
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] kex follows: False
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:24:29.399 [DEBUG] [Thread-63108] [transport.py] [_log()] Compression: none
2025-11-17T23:24:29.400 [DEBUG] [Thread-63108] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:24:29.456 [DEBUG] [Thread-63108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:24:29.456 [DEBUG] [Thread-63108] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:24:29.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:24:29.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:24:29.457 [DEBUG] [Thread-63108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:24:29.516 [DEBUG] [Thread-63108] [transport.py] [_log()] userauth is OK
2025-11-17T23:24:29.516 [DEBUG] [Thread-63108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:24:29.516 [DEBUG] [Thread-63108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:24:29.516 [DEBUG] [Thread-63108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:24:29.516 [DEBUG] [Thread-63108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:24:29.533 [INFO] [Thread-63108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:24:29.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:24:29.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:24:30.386 [DEBUG] [Thread-63108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:24:30.386 [DEBUG] [Thread-63108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:24:30.434 [DEBUG] [Thread-63108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:24:30.434 [DEBUG] [Thread-63108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:24:30.442 [DEBUG] [Thread-63108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:24:30.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:24:30.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:24:30.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:24:30.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:24:30.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:24:30.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:24:30.474 [DEBUG] [Thread-63108] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:24:39.794 [DEBUG] [Thread-63110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:24:50.127 [DEBUG] [Thread-63111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:24:54.835 [DEBUG] [Thread-63112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:25:00.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:25:00.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:25:00.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:25:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 24, 28), 11.79, 44.81, 0.0, 16.0, 14.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:25:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:24:28
2025-11-17T23:25:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:25:01.486 [DEBUG] [Thread-63113] [transport.py] [_log()] starting thread (client mode): 0xd07a9720
2025-11-17T23:25:01.486 [DEBUG] [Thread-63113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:25:01.507 [DEBUG] [Thread-63113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:25:01.507 [INFO] [Thread-63113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:25:01.510 [DEBUG] [Thread-63113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:25:01.510 [DEBUG] [Thread-63113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:25:01.510 [DEBUG] [Thread-63113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] client lang: <none>
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] server lang: <none>
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] kex follows: False
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] Compression: none
2025-11-17T23:25:01.511 [DEBUG] [Thread-63113] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:25:01.527 [DEBUG] [Thread-63113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:25:01.527 [DEBUG] [Thread-63113] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:25:01.527 [DEBUG] [Thread-63113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:25:01.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:25:01.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:25:01.528 [DEBUG] [Thread-63113] [transport.py] [_log()] userauth is OK
2025-11-17T23:25:01.528 [DEBUG] [Thread-63113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:25:01.528 [DEBUG] [Thread-63113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:25:01.528 [DEBUG] [Thread-63113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:25:01.528 [DEBUG] [Thread-63113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:25:01.536 [INFO] [Thread-63113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:25:01.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:25:02.160 [DEBUG] [Thread-63113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:25:02.160 [DEBUG] [Thread-63113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:25:02.160 [DEBUG] [Thread-63113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:25:02.201 [DEBUG] [Thread-63113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:25:02.201 [DEBUG] [Thread-63113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:25:02.203 [DEBUG] [Thread-63113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:25:02.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:25:02.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:25:02.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:25:02.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:25:02.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:25:02.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:25:02.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.891713 -999.00  +14.20   8.65     49   +3.80 1 2 1 1 1     0    0 9.45 -26.24 ZNES. 11.5 8.7 165.4 13.2 14.9 -21.2 14.8 -20.5 14.6 -20.0 14.9 -20.4
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.891713
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:25:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:24:28', tmtdew=11.79, humidity=44.81, cloud=0.0, wind=16.0, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:24:28', seeing=1.46, atlas_timestamp='2025-11-17T21:24:04.003', atlas_cloud=2, atlas_rain=1, zp_data=[0.29574999999999996, 0.2912499999999998, 0.19824999999999982, 0.21950000000000003, 0.33399999999999963, 0.3642500000000002, 0.6279999999999992, 1.3802500000000002, 1.2654999999999994, 0.3465000000000007, 0.25375000000000014, 0.26649999999999885, 0.49150000000000027, 0.48775000000000013, 0.5814999999999992, 1.8199999999999994, 1.6792499999999997, 0.33450000000000024, 0.32399999999999984, 0.6032499999999992, 1.322499999999998, 1.1537499999999987, 0.6492500000000012, 1.4522500000000003, 1.5919999999999987, 0.3305000000000007, 0.3827499999999997, 0.47550000000000026, 1.5780000000000003, nan, 0.8760000000000012, 0.892500000000001, 1.385749999999999], zp_timestamp='2025-11-17T21:21:00')
2025-11-17T23:25:02.222 [DEBUG] [Thread-63113] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:25:02.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:25:02.307 [DEBUG] [Thread-63116] [transport.py] [_log()] starting thread (client mode): 0xd07abd30
2025-11-17T23:25:02.307 [DEBUG] [Thread-63116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:25:02.324 [DEBUG] [Thread-63116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:25:02.324 [INFO] [Thread-63116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] client lang: <none>
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] server lang: <none>
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] kex follows: False
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] Compression: none
2025-11-17T23:25:02.331 [DEBUG] [Thread-63116] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:25:02.388 [DEBUG] [Thread-63116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:25:02.388 [DEBUG] [Thread-63116] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:25:02.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:25:02.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:25:02.389 [DEBUG] [Thread-63116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:25:02.445 [DEBUG] [Thread-63116] [transport.py] [_log()] userauth is OK
2025-11-17T23:25:02.446 [DEBUG] [Thread-63116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:25:02.446 [DEBUG] [Thread-63116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:25:02.446 [DEBUG] [Thread-63116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:25:02.446 [DEBUG] [Thread-63116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:25:02.460 [INFO] [Thread-63116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:25:02.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:25:02.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:25:03.337 [DEBUG] [Thread-63116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:25:03.337 [DEBUG] [Thread-63116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:25:03.384 [DEBUG] [Thread-63116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:25:03.384 [DEBUG] [Thread-63116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:25:03.393 [DEBUG] [Thread-63116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:25:03.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:25:03.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:25:03.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:25:03.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:25:03.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:25:03.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:25:03.428 [DEBUG] [Thread-63116] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:25:09.865 [DEBUG] [Thread-63118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:25:13.848 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:25:13.850 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:25:24.906 [DEBUG] [Thread-63119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:25:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:25:33.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:25:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:25:34.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 25), 11.78, 44.86, 0.0, 16.6, 14.12, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:25:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:25:00
2025-11-17T23:25:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:25:34.442 [DEBUG] [Thread-63120] [transport.py] [_log()] starting thread (client mode): 0xd07117e0
2025-11-17T23:25:34.442 [DEBUG] [Thread-63120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:25:34.462 [DEBUG] [Thread-63120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:25:34.463 [INFO] [Thread-63120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:25:34.465 [DEBUG] [Thread-63120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:25:34.465 [DEBUG] [Thread-63120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:25:34.465 [DEBUG] [Thread-63120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:25:34.465 [DEBUG] [Thread-63120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:25:34.465 [DEBUG] [Thread-63120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] client lang: <none>
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] server lang: <none>
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] kex follows: False
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] Compression: none
2025-11-17T23:25:34.466 [DEBUG] [Thread-63120] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:25:34.479 [DEBUG] [Thread-63120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:25:34.479 [DEBUG] [Thread-63120] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:25:34.479 [DEBUG] [Thread-63120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:25:34.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:25:34.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:25:34.480 [DEBUG] [Thread-63120] [transport.py] [_log()] userauth is OK
2025-11-17T23:25:34.480 [DEBUG] [Thread-63120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:25:34.480 [DEBUG] [Thread-63120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:25:34.480 [DEBUG] [Thread-63120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:25:34.480 [DEBUG] [Thread-63120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:25:34.507 [INFO] [Thread-63120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:25:34.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:25:35.145 [DEBUG] [Thread-63120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:25:35.145 [DEBUG] [Thread-63120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:25:35.145 [DEBUG] [Thread-63120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:25:35.186 [DEBUG] [Thread-63120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:25:35.187 [DEBUG] [Thread-63120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:25:35.190 [DEBUG] [Thread-63120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:25:35.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:25:35.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:25:35.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:25:35.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:25:35.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:25:35.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:25:35.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:25:35.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:25:35.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:25:35.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.892060 -999.00  +14.20  13.05     49   +3.80 1 2 1 1 1     0    0 9.79 -27.98 ZNES. 12.6 13.1 154.0 14.8 14.9 -21.3 14.7 -20.5 14.6 -19.9 14.9 -20.4
2025-11-17T23:25:35.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:25:35.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:25:35.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.892060
2025-11-17T23:25:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:25:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:25:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:25:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:25:35.213 [DEBUG] [Thread-63120] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:25:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:25:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:25:00', tmtdew=11.78, humidity=44.86, cloud=0.0, wind=16.6, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:25:32', seeing=1.82, atlas_timestamp='2025-11-17T21:24:33.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:24:00')
2025-11-17T23:25:35.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:25:35.317 [DEBUG] [Thread-63123] [transport.py] [_log()] starting thread (client mode): 0xd0713cd0
2025-11-17T23:25:35.317 [DEBUG] [Thread-63123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:25:35.333 [DEBUG] [Thread-63123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:25:35.333 [INFO] [Thread-63123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:25:35.341 [DEBUG] [Thread-63123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] client lang: <none>
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] server lang: <none>
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] kex follows: False
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] Compression: none
2025-11-17T23:25:35.342 [DEBUG] [Thread-63123] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:25:35.399 [DEBUG] [Thread-63123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:25:35.400 [DEBUG] [Thread-63123] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:25:35.400 [DEBUG] [Thread-63123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:25:35.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:25:35.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:25:35.458 [DEBUG] [Thread-63123] [transport.py] [_log()] userauth is OK
2025-11-17T23:25:35.458 [DEBUG] [Thread-63123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:25:35.458 [DEBUG] [Thread-63123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:25:35.458 [DEBUG] [Thread-63123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:25:35.458 [DEBUG] [Thread-63123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:25:35.477 [INFO] [Thread-63123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:25:35.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:25:35.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:25:36.314 [DEBUG] [Thread-63123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:25:36.314 [DEBUG] [Thread-63123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:25:36.362 [DEBUG] [Thread-63123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:25:36.362 [DEBUG] [Thread-63123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:25:36.371 [DEBUG] [Thread-63123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:25:36.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:25:36.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:25:36.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:25:36.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:25:36.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:25:36.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:25:36.407 [DEBUG] [Thread-63123] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:25:39.934 [DEBUG] [Thread-63125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:25:50.184 [DEBUG] [Thread-63126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:25:54.977 [DEBUG] [Thread-63127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:26:06.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:26:06.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:26:06.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:26:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 25, 32), 11.7, 45.11, 0.0, 17.5, 14.07, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:26:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:25:32
2025-11-17T23:26:07.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:26:07.437 [DEBUG] [Thread-63128] [transport.py] [_log()] starting thread (client mode): 0xd07abd60
2025-11-17T23:26:07.437 [DEBUG] [Thread-63128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:26:07.460 [DEBUG] [Thread-63128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:26:07.460 [INFO] [Thread-63128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] client lang: <none>
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] server lang: <none>
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] kex follows: False
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] Compression: none
2025-11-17T23:26:07.464 [DEBUG] [Thread-63128] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:26:07.479 [DEBUG] [Thread-63128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:26:07.479 [DEBUG] [Thread-63128] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:26:07.479 [DEBUG] [Thread-63128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:26:07.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:26:07.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:26:07.480 [DEBUG] [Thread-63128] [transport.py] [_log()] userauth is OK
2025-11-17T23:26:07.480 [DEBUG] [Thread-63128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:26:07.480 [DEBUG] [Thread-63128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:26:07.480 [DEBUG] [Thread-63128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:26:07.480 [DEBUG] [Thread-63128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:26:07.496 [INFO] [Thread-63128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:26:07.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:26:08.945 [DEBUG] [Thread-63128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:26:08.945 [DEBUG] [Thread-63128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:26:08.945 [DEBUG] [Thread-63128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:26:08.986 [DEBUG] [Thread-63128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:26:08.986 [DEBUG] [Thread-63128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:26:08.988 [DEBUG] [Thread-63128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:26:09.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:26:09.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:26:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:26:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:26:09.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:26:09.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:26:09.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:26:09.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:26:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:26:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.892754 -999.00  +14.20  18.09     50   +4.00 1 2 1 1 1     0    0 9.95 -33.77 ZNESw 16.5 18.1 168.6 19.7 14.9 -21.2 14.8 -20.4 14.6 -20.0 14.9 -20.4
2025-11-17T23:26:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:26:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:26:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.892754
2025-11-17T23:26:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:26:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:26:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:26:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:26:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:26:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:25:32', tmtdew=11.7, humidity=45.11, cloud=0.0, wind=17.5, temperature=14.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:26:04', seeing=1.82, atlas_timestamp='2025-11-17T21:25:33.946', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:24:00')
2025-11-17T23:26:09.006 [DEBUG] [Thread-63128] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:26:09.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:26:09.092 [DEBUG] [Thread-63131] [transport.py] [_log()] starting thread (client mode): 0xd3150b50
2025-11-17T23:26:09.092 [DEBUG] [Thread-63131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:26:09.107 [DEBUG] [Thread-63131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:26:09.107 [INFO] [Thread-63131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:26:09.114 [DEBUG] [Thread-63131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:26:09.114 [DEBUG] [Thread-63131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:26:09.114 [DEBUG] [Thread-63131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:26:09.114 [DEBUG] [Thread-63131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:26:09.114 [DEBUG] [Thread-63131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:26:09.114 [DEBUG] [Thread-63131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:26:09.114 [DEBUG] [Thread-63131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] client lang: <none>
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] server lang: <none>
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] kex follows: False
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] Compression: none
2025-11-17T23:26:09.115 [DEBUG] [Thread-63131] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:26:09.172 [DEBUG] [Thread-63131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:26:09.172 [DEBUG] [Thread-63131] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:26:09.172 [DEBUG] [Thread-63131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:26:09.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:26:09.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:26:09.229 [DEBUG] [Thread-63131] [transport.py] [_log()] userauth is OK
2025-11-17T23:26:09.229 [DEBUG] [Thread-63131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:26:09.229 [DEBUG] [Thread-63131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:26:09.229 [DEBUG] [Thread-63131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:26:09.229 [DEBUG] [Thread-63131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:26:09.243 [INFO] [Thread-63131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:26:09.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:26:09.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:26:10.006 [DEBUG] [Thread-63133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:26:10.068 [DEBUG] [Thread-63131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:26:10.069 [DEBUG] [Thread-63131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:26:10.117 [DEBUG] [Thread-63131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:26:10.117 [DEBUG] [Thread-63131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:26:10.125 [DEBUG] [Thread-63131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:26:10.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:26:10.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:26:10.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:26:10.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:26:10.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:26:10.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:26:10.156 [DEBUG] [Thread-63131] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:26:14.054 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:26:14.055 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:26:25.037 [DEBUG] [Thread-63134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:26:40.067 [DEBUG] [Thread-63135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:26:40.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:26:40.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:26:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:26:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 26, 36), 11.61, 45.57, 0.0, 20.38, 14.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:26:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:26:36
2025-11-17T23:26:40.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:26:41.103 [DEBUG] [Thread-63136] [transport.py] [_log()] starting thread (client mode): 0xd3153cd0
2025-11-17T23:26:41.103 [DEBUG] [Thread-63136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:26:41.124 [DEBUG] [Thread-63136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:26:41.124 [INFO] [Thread-63136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:26:41.127 [DEBUG] [Thread-63136] [transport.py] [_log()] client lang: <none>
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] server lang: <none>
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] kex follows: False
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] Compression: none
2025-11-17T23:26:41.128 [DEBUG] [Thread-63136] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:26:41.146 [DEBUG] [Thread-63136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:26:41.147 [DEBUG] [Thread-63136] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:26:41.147 [DEBUG] [Thread-63136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:26:41.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:26:41.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:26:41.189 [DEBUG] [Thread-63136] [transport.py] [_log()] userauth is OK
2025-11-17T23:26:41.189 [DEBUG] [Thread-63136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:26:41.189 [DEBUG] [Thread-63136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:26:41.189 [DEBUG] [Thread-63136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:26:41.189 [DEBUG] [Thread-63136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:26:41.222 [INFO] [Thread-63136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:26:41.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:26:41.865 [DEBUG] [Thread-63136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:26:41.865 [DEBUG] [Thread-63136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:26:41.865 [DEBUG] [Thread-63136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:26:41.906 [DEBUG] [Thread-63136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:26:41.906 [DEBUG] [Thread-63136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:26:41.909 [DEBUG] [Thread-63136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:26:41.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:26:41.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:26:41.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:26:41.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:26:41.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:26:41.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:26:41.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:26:41.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:26:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:26:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.893101 -999.00  +14.20  16.01     50   +4.00 1 2 1 1 1     0    0 9.72 -33.83 ZNESw 13.1 16.0 166.0 19.9 14.9 -21.2 14.8 -20.6 14.6 -20.0 14.8 -20.5
2025-11-17T23:26:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:26:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:26:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.893101
2025-11-17T23:26:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:26:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:26:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:26:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:26:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:26:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:26:36', tmtdew=11.61, humidity=45.57, cloud=0.0, wind=20.38, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:26:36', seeing=1.82, atlas_timestamp='2025-11-17T21:26:03.926', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:24:00')
2025-11-17T23:26:41.935 [DEBUG] [Thread-63136] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:26:42.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:26:42.031 [DEBUG] [Thread-63139] [transport.py] [_log()] starting thread (client mode): 0xd3151150
2025-11-17T23:26:42.031 [DEBUG] [Thread-63139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:26:42.047 [DEBUG] [Thread-63139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:26:42.047 [INFO] [Thread-63139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:26:42.054 [DEBUG] [Thread-63139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:26:42.054 [DEBUG] [Thread-63139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:26:42.054 [DEBUG] [Thread-63139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:26:42.054 [DEBUG] [Thread-63139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:26:42.054 [DEBUG] [Thread-63139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] client lang: <none>
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] server lang: <none>
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] kex follows: False
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] Compression: none
2025-11-17T23:26:42.055 [DEBUG] [Thread-63139] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:26:42.113 [DEBUG] [Thread-63139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:26:42.114 [DEBUG] [Thread-63139] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:26:42.114 [DEBUG] [Thread-63139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:26:42.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:26:42.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:26:42.170 [DEBUG] [Thread-63139] [transport.py] [_log()] userauth is OK
2025-11-17T23:26:42.170 [DEBUG] [Thread-63139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:26:42.170 [DEBUG] [Thread-63139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:26:42.170 [DEBUG] [Thread-63139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:26:42.170 [DEBUG] [Thread-63139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:26:42.190 [INFO] [Thread-63139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:26:42.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:26:42.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:26:43.063 [DEBUG] [Thread-63139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:26:43.063 [DEBUG] [Thread-63139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:26:43.111 [DEBUG] [Thread-63139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:26:43.111 [DEBUG] [Thread-63139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:26:43.120 [DEBUG] [Thread-63139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:26:43.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:26:43.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:26:43.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:26:43.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:26:43.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:26:43.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:26:43.154 [DEBUG] [Thread-63139] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:26:50.260 [DEBUG] [Thread-63141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:26:55.096 [DEBUG] [Thread-63142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:27:10.143 [DEBUG] [Thread-63143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:27:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:27:13.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:27:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:27:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 27, 8), 11.57, 45.69, 0.0, 20.38, 14.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:27:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:27:08
2025-11-17T23:27:13.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:27:14.072 [DEBUG] [Thread-63144] [transport.py] [_log()] starting thread (client mode): 0xd0702e90
2025-11-17T23:27:14.072 [DEBUG] [Thread-63144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:27:14.095 [DEBUG] [Thread-63144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:27:14.095 [INFO] [Thread-63144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:27:14.099 [DEBUG] [Thread-63144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:27:14.099 [DEBUG] [Thread-63144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:27:14.099 [DEBUG] [Thread-63144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:27:14.099 [DEBUG] [Thread-63144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:27:14.099 [DEBUG] [Thread-63144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:27:14.099 [DEBUG] [Thread-63144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:27:14.099 [DEBUG] [Thread-63144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] client lang: <none>
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] server lang: <none>
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] kex follows: False
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:27:14.100 [DEBUG] [Thread-63144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:27:14.101 [DEBUG] [Thread-63144] [transport.py] [_log()] Compression: none
2025-11-17T23:27:14.101 [DEBUG] [Thread-63144] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:27:14.118 [DEBUG] [Thread-63144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:27:14.118 [DEBUG] [Thread-63144] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:27:14.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:27:14.119 [DEBUG] [Thread-63144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:27:14.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:27:14.121 [DEBUG] [Thread-63144] [transport.py] [_log()] userauth is OK
2025-11-17T23:27:14.122 [DEBUG] [Thread-63144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:27:14.122 [DEBUG] [Thread-63144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:27:14.122 [DEBUG] [Thread-63144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:27:14.122 [DEBUG] [Thread-63144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:27:14.148 [INFO] [Thread-63144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:27:14.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:27:14.259 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:27:14.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:27:14.774 [DEBUG] [Thread-63144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:27:14.774 [DEBUG] [Thread-63144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:27:14.774 [DEBUG] [Thread-63144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:27:14.814 [DEBUG] [Thread-63144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:27:14.814 [DEBUG] [Thread-63144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:27:14.817 [DEBUG] [Thread-63144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:27:14.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:27:14.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:27:14.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:27:14.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:27:14.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:27:14.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:27:14.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:27:14.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:27:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:27:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.893449 -999.00  +14.20  16.47     50   +4.00 1 2 1 1 1     0    0 9.57 -33.86 ZNESw 16.0 16.5 165.6 22.8 14.9 -21.2 14.7 -20.5 14.5 -20.1 14.9 -20.7
2025-11-17T23:27:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:27:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:27:14.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.893449
2025-11-17T23:27:14.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:27:14.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:27:14.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:27:14.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:27:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:27:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:27:08', tmtdew=11.57, humidity=45.69, cloud=0.0, wind=20.38, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:27:08', seeing=1.82, atlas_timestamp='2025-11-17T21:26:33.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:24:00')
2025-11-17T23:27:14.852 [DEBUG] [Thread-63144] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:27:14.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:27:14.949 [DEBUG] [Thread-63147] [transport.py] [_log()] starting thread (client mode): 0xd0701b10
2025-11-17T23:27:14.949 [DEBUG] [Thread-63147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:27:14.964 [DEBUG] [Thread-63147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:27:14.964 [INFO] [Thread-63147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] client lang: <none>
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] server lang: <none>
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] kex follows: False
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:27:14.972 [DEBUG] [Thread-63147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:27:14.973 [DEBUG] [Thread-63147] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:27:14.973 [DEBUG] [Thread-63147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:27:14.973 [DEBUG] [Thread-63147] [transport.py] [_log()] Compression: none
2025-11-17T23:27:14.973 [DEBUG] [Thread-63147] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:27:15.030 [DEBUG] [Thread-63147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:27:15.030 [DEBUG] [Thread-63147] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:27:15.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:27:15.031 [DEBUG] [Thread-63147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:27:15.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:27:15.086 [DEBUG] [Thread-63147] [transport.py] [_log()] userauth is OK
2025-11-17T23:27:15.086 [DEBUG] [Thread-63147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:27:15.086 [DEBUG] [Thread-63147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:27:15.086 [DEBUG] [Thread-63147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:27:15.086 [DEBUG] [Thread-63147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:27:15.105 [INFO] [Thread-63147] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:27:15.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:27:15.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:27:15.946 [DEBUG] [Thread-63147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:27:15.946 [DEBUG] [Thread-63147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:27:15.994 [DEBUG] [Thread-63147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:27:15.994 [DEBUG] [Thread-63147] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:27:16.003 [DEBUG] [Thread-63147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:27:16.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:27:16.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:27:16.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:27:16.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:27:16.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:27:16.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:27:16.037 [DEBUG] [Thread-63147] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:27:25.170 [DEBUG] [Thread-63149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:27:40.208 [DEBUG] [Thread-63150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:27:46.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:27:46.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:27:46.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:27:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 27, 40), 11.53, 45.67, 0.0, 17.91, 14.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:27:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:27:40
2025-11-17T23:27:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:27:46.968 [DEBUG] [Thread-63151] [transport.py] [_log()] starting thread (client mode): 0xd3150790
2025-11-17T23:27:46.969 [DEBUG] [Thread-63151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:27:46.988 [DEBUG] [Thread-63151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:27:46.988 [INFO] [Thread-63151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] client lang: <none>
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] server lang: <none>
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] kex follows: False
2025-11-17T23:27:46.992 [DEBUG] [Thread-63151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:27:46.993 [DEBUG] [Thread-63151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:27:46.993 [DEBUG] [Thread-63151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:27:46.993 [DEBUG] [Thread-63151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:27:46.993 [DEBUG] [Thread-63151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:27:46.993 [DEBUG] [Thread-63151] [transport.py] [_log()] Compression: none
2025-11-17T23:27:46.993 [DEBUG] [Thread-63151] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:27:47.003 [DEBUG] [Thread-63151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:27:47.003 [DEBUG] [Thread-63151] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:27:47.004 [DEBUG] [Thread-63151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:27:47.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:27:47.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:27:47.006 [DEBUG] [Thread-63151] [transport.py] [_log()] userauth is OK
2025-11-17T23:27:47.006 [DEBUG] [Thread-63151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:27:47.006 [DEBUG] [Thread-63151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:27:47.006 [DEBUG] [Thread-63151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:27:47.006 [DEBUG] [Thread-63151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:27:47.031 [INFO] [Thread-63151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:27:47.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:27:47.635 [DEBUG] [Thread-63151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:27:47.635 [DEBUG] [Thread-63151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:27:47.635 [DEBUG] [Thread-63151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:27:47.676 [DEBUG] [Thread-63151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:27:47.677 [DEBUG] [Thread-63151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:27:47.679 [DEBUG] [Thread-63151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:27:47.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:27:47.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:27:47.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:27:47.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:27:47.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:27:47.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:27:47.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:27:47.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:27:47.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:27:47.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.893796 -999.00  +14.20  12.79     50   +3.90 1 2 1 1 1     0    0 9.32 -33.98 ZNESw 14.1 12.8 158.8 19.3 14.8 -21.5 14.7 -20.6 14.6 -20.0 14.8 -20.6
2025-11-17T23:27:47.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:27:47.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:27:47.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.893796
2025-11-17T23:27:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:27:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:27:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:27:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:27:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:27:47.704 [DEBUG] [Thread-63151] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:27:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:27:40', tmtdew=11.53, humidity=45.67, cloud=0.0, wind=17.91, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:27:40', seeing=1.82, atlas_timestamp='2025-11-17T21:27:03.974', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:24:00')
2025-11-17T23:27:47.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:27:47.799 [DEBUG] [Thread-63154] [transport.py] [_log()] starting thread (client mode): 0xd3151b10
2025-11-17T23:27:47.799 [DEBUG] [Thread-63154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:27:47.814 [DEBUG] [Thread-63154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:27:47.814 [INFO] [Thread-63154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:27:47.821 [DEBUG] [Thread-63154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] client lang: <none>
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] server lang: <none>
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] kex follows: False
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:27:47.822 [DEBUG] [Thread-63154] [transport.py] [_log()] Compression: none
2025-11-17T23:27:47.823 [DEBUG] [Thread-63154] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:27:47.878 [DEBUG] [Thread-63154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:27:47.878 [DEBUG] [Thread-63154] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:27:47.879 [DEBUG] [Thread-63154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:27:47.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:27:47.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:27:47.934 [DEBUG] [Thread-63154] [transport.py] [_log()] userauth is OK
2025-11-17T23:27:47.934 [DEBUG] [Thread-63154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:27:47.934 [DEBUG] [Thread-63154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:27:47.934 [DEBUG] [Thread-63154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:27:47.934 [DEBUG] [Thread-63154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:27:47.953 [INFO] [Thread-63154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:27:47.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:27:47.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:27:48.793 [DEBUG] [Thread-63154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:27:48.793 [DEBUG] [Thread-63154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:27:48.841 [DEBUG] [Thread-63154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:27:48.841 [DEBUG] [Thread-63154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:27:48.850 [DEBUG] [Thread-63154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:27:48.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:27: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')
2025-11-17T23:27:48.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:27:48.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:27:48.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:27:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:27:48.885 [DEBUG] [Thread-63154] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:27:50.319 [DEBUG] [Thread-63156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:27:55.240 [DEBUG] [Thread-63157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:28:10.277 [DEBUG] [Thread-63158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:28:14.466 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:28:14.467 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:28:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:28:18.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:28:18.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
2025-11-17T23:28:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 28, 12), 11.52, 45.69, 0.0, 17.42, 14.09, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:28:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:28:12
2025-11-17T23:28:19.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:28:19.841 [DEBUG] [Thread-63159] [transport.py] [_log()] starting thread (client mode): 0xd3152140
2025-11-17T23:28:19.841 [DEBUG] [Thread-63159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:28:19.862 [DEBUG] [Thread-63159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:28:19.862 [INFO] [Thread-63159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:28:19.865 [DEBUG] [Thread-63159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:28:19.865 [DEBUG] [Thread-63159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:28:19.865 [DEBUG] [Thread-63159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:28:19.865 [DEBUG] [Thread-63159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:28:19.865 [DEBUG] [Thread-63159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:28:19.865 [DEBUG] [Thread-63159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] client lang: <none>
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] server lang: <none>
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] kex follows: False
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] Compression: none
2025-11-17T23:28:19.866 [DEBUG] [Thread-63159] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:28:19.885 [DEBUG] [Thread-63159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:28:19.886 [DEBUG] [Thread-63159] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:28:19.886 [DEBUG] [Thread-63159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:28:19.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:28:19.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:28:19.888 [DEBUG] [Thread-63159] [transport.py] [_log()] userauth is OK
2025-11-17T23:28:19.888 [DEBUG] [Thread-63159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:28:19.888 [DEBUG] [Thread-63159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:28:19.889 [DEBUG] [Thread-63159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:28:19.889 [DEBUG] [Thread-63159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:28:19.906 [INFO] [Thread-63159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:28:19.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:28:20.548 [DEBUG] [Thread-63159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:28:20.549 [DEBUG] [Thread-63159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:28:20.549 [DEBUG] [Thread-63159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:28:20.589 [DEBUG] [Thread-63159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:28:20.589 [DEBUG] [Thread-63159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:28:20.592 [DEBUG] [Thread-63159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:28:20.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:28:20.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:28:20.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:28:20.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:28:20.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:28:20.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:28:20.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:28:20.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:28:20.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:28:20.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.894490 -999.00  +14.20  18.98     50   +4.00 1 2 1 1 1     0    0 9.77 -30.96 ZNESw 18.3 19.0 158.9 21.6 14.8 -21.6 14.7 -20.7 14.5 -20.3 14.8 -20.8
2025-11-17T23:28:20.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:28:20.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:28:20.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.894490
2025-11-17T23:28:20.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:28:20.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:28:20.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:28:20.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:28:20.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:28:20.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:28:12', tmtdew=11.52, humidity=45.69, cloud=0.0, wind=17.42, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:28:12', seeing=1.82, atlas_timestamp='2025-11-17T21:28:03.936', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:24:00')
2025-11-17T23:28:20.613 [DEBUG] [Thread-63159] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:28:20.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:28:20.710 [DEBUG] [Thread-63162] [transport.py] [_log()] starting thread (client mode): 0xd07015a0
2025-11-17T23:28:20.710 [DEBUG] [Thread-63162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:28:20.725 [DEBUG] [Thread-63162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:28:20.725 [INFO] [Thread-63162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:28:20.732 [DEBUG] [Thread-63162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:28:20.732 [DEBUG] [Thread-63162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] client lang: <none>
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] server lang: <none>
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] kex follows: False
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:28:20.733 [DEBUG] [Thread-63162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:28:20.734 [DEBUG] [Thread-63162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:28:20.734 [DEBUG] [Thread-63162] [transport.py] [_log()] Compression: none
2025-11-17T23:28:20.734 [DEBUG] [Thread-63162] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:28:20.789 [DEBUG] [Thread-63162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:28:20.790 [DEBUG] [Thread-63162] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:28:20.790 [DEBUG] [Thread-63162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:28:20.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:28:20.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:28:20.846 [DEBUG] [Thread-63162] [transport.py] [_log()] userauth is OK
2025-11-17T23:28:20.846 [DEBUG] [Thread-63162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:28:20.846 [DEBUG] [Thread-63162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:28:20.846 [DEBUG] [Thread-63162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:28:20.846 [DEBUG] [Thread-63162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:28:20.866 [INFO] [Thread-63162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:28:20.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:28:20.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:28:21.736 [DEBUG] [Thread-63162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:28:21.737 [DEBUG] [Thread-63162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:28:21.784 [DEBUG] [Thread-63162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:28:21.784 [DEBUG] [Thread-63162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:28:21.793 [DEBUG] [Thread-63162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:28:21.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:28:21.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:28:21.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
2025-11-17T23:28:21.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:28:21.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:28:21.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:28:21.828 [DEBUG] [Thread-63162] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:28:25.305 [DEBUG] [Thread-63164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:28:40.334 [DEBUG] [Thread-63165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:28:50.399 [DEBUG] [Thread-63166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:28:51.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:28:51.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:28:51.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:28:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 28, 44), 11.47, 45.86, 0.0, 25.46, 14.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:28:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:28:44
2025-11-17T23:28:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:28:52.778 [DEBUG] [Thread-63167] [transport.py] [_log()] starting thread (client mode): 0xd3150e80
2025-11-17T23:28:52.778 [DEBUG] [Thread-63167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:28:52.797 [DEBUG] [Thread-63167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:28:52.797 [INFO] [Thread-63167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] client lang: <none>
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] server lang: <none>
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] kex follows: False
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:28:52.800 [DEBUG] [Thread-63167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:28:52.801 [DEBUG] [Thread-63167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:28:52.801 [DEBUG] [Thread-63167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:28:52.801 [DEBUG] [Thread-63167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:28:52.801 [DEBUG] [Thread-63167] [transport.py] [_log()] Compression: none
2025-11-17T23:28:52.801 [DEBUG] [Thread-63167] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:28:52.817 [DEBUG] [Thread-63167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:28:52.818 [DEBUG] [Thread-63167] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:28:52.818 [DEBUG] [Thread-63167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:28:52.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:28:52.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:28:52.820 [DEBUG] [Thread-63167] [transport.py] [_log()] userauth is OK
2025-11-17T23:28:52.820 [DEBUG] [Thread-63167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:28:52.821 [DEBUG] [Thread-63167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:28:52.821 [DEBUG] [Thread-63167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:28:52.821 [DEBUG] [Thread-63167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:28:52.844 [INFO] [Thread-63167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:28:52.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:28:53.423 [DEBUG] [Thread-63167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:28:53.423 [DEBUG] [Thread-63167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:28:53.423 [DEBUG] [Thread-63167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:28:53.465 [DEBUG] [Thread-63167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:28:53.465 [DEBUG] [Thread-63167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:28:53.468 [DEBUG] [Thread-63167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:28:53.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:28:53.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:28:53.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:28:53.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:28:53.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:28:53.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:28:53.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:28:53.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:28:53.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:28:53.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.894837 -999.00  +14.20  21.02     50   +4.10 1 2 1 1 1     0    0 9.45 -31.23 ZNEsw 21.5 21.0 158.0 26.0 14.8 -21.5 14.7 -20.7 14.5 -20.4 14.8 -20.9
2025-11-17T23:28:53.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:28:53.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:28:53.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.894837
2025-11-17T23:28:53.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:28:53.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:28:53.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:28:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:28:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:28:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:28:44', tmtdew=11.47, humidity=45.86, cloud=0.0, wind=25.46, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:28:44', seeing=1.82, atlas_timestamp='2025-11-17T21:28:33.917', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:27:00')
2025-11-17T23:28:53.493 [DEBUG] [Thread-63167] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:28:53.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:28:53.590 [DEBUG] [Thread-63170] [transport.py] [_log()] starting thread (client mode): 0xd3152500
2025-11-17T23:28:53.590 [DEBUG] [Thread-63170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:28:53.605 [DEBUG] [Thread-63170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:28:53.605 [INFO] [Thread-63170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:28:53.612 [DEBUG] [Thread-63170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:28:53.612 [DEBUG] [Thread-63170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] client lang: <none>
2025-11-17T23:28:53.613 [DEBUG] [Thread-63170] [transport.py] [_log()] server lang: <none>
2025-11-17T23:28:53.614 [DEBUG] [Thread-63170] [transport.py] [_log()] kex follows: False
2025-11-17T23:28:53.614 [DEBUG] [Thread-63170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:28:53.614 [DEBUG] [Thread-63170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:28:53.614 [DEBUG] [Thread-63170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:28:53.614 [DEBUG] [Thread-63170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:28:53.614 [DEBUG] [Thread-63170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:28:53.614 [DEBUG] [Thread-63170] [transport.py] [_log()] Compression: none
2025-11-17T23:28:53.614 [DEBUG] [Thread-63170] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:28:53.670 [DEBUG] [Thread-63170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:28:53.671 [DEBUG] [Thread-63170] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:28:53.671 [DEBUG] [Thread-63170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:28:53.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:28:53.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:28:53.726 [DEBUG] [Thread-63170] [transport.py] [_log()] userauth is OK
2025-11-17T23:28:53.726 [DEBUG] [Thread-63170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:28:53.726 [DEBUG] [Thread-63170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:28:53.726 [DEBUG] [Thread-63170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:28:53.727 [DEBUG] [Thread-63170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:28:53.747 [INFO] [Thread-63170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:28:53.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:28:53.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:28:54.565 [DEBUG] [Thread-63170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:28:54.566 [DEBUG] [Thread-63170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:28:54.614 [DEBUG] [Thread-63170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:28:54.614 [DEBUG] [Thread-63170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:28:54.622 [DEBUG] [Thread-63170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:28:54.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:28:54.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:28:54.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:28:54.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:28:54.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:28:54.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:28:54.657 [DEBUG] [Thread-63170] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:28:55.364 [DEBUG] [Thread-63172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:29:10.416 [DEBUG] [Thread-63173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:29:14.671 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:29:14.672 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:29:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:29:24.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:29:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:29:25.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 29, 16), 11.46, 45.91, 0.0, 23.77, 14.15, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:29:25.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:29:16
2025-11-17T23:29:25.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:29:25.442 [DEBUG] [Thread-63174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:29:25.562 [DEBUG] [Thread-63175] [transport.py] [_log()] starting thread (client mode): 0xd3152b00
2025-11-17T23:29:25.562 [DEBUG] [Thread-63175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:29:25.582 [DEBUG] [Thread-63175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:29:25.582 [INFO] [Thread-63175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:29:25.585 [DEBUG] [Thread-63175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] client lang: <none>
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] server lang: <none>
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] kex follows: False
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] Compression: none
2025-11-17T23:29:25.586 [DEBUG] [Thread-63175] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:29:25.603 [DEBUG] [Thread-63175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:29:25.603 [DEBUG] [Thread-63175] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:29:25.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:29:25.604 [DEBUG] [Thread-63175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:29:25.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:29:25.606 [DEBUG] [Thread-63175] [transport.py] [_log()] userauth is OK
2025-11-17T23:29:25.606 [DEBUG] [Thread-63175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:29:25.606 [DEBUG] [Thread-63175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:29:25.606 [DEBUG] [Thread-63175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:29:25.606 [DEBUG] [Thread-63175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:29:25.630 [INFO] [Thread-63175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:29:25.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:29:26.268 [DEBUG] [Thread-63175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:29:26.269 [DEBUG] [Thread-63175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:29:26.269 [DEBUG] [Thread-63175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:29:26.309 [DEBUG] [Thread-63175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:29:26.309 [DEBUG] [Thread-63175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:29:26.312 [DEBUG] [Thread-63175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:29:26.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:29:26.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:29:26.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:29:26.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:29:26.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:29:26.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:29:26.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:29:26.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:29:26.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:29:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.895185 -999.00  +14.30  24.05     50   +4.20 1 2 1 1 1     0    0 9.60 -33.24 ZNEsw 18.7 24.1 176.4 28.7 14.8 -21.7 14.8 -20.9 14.5 -20.5 14.8 -21.0
2025-11-17T23:29:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:29:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:29:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.895185
2025-11-17T23:29:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:29:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:29:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:29:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:29:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:29:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:29:16', tmtdew=11.46, humidity=45.91, cloud=0.0, wind=23.77, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:29:16', seeing=1.8, atlas_timestamp='2025-11-17T21:29:03.984', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:27:00')
2025-11-17T23:29:26.338 [DEBUG] [Thread-63175] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:29:26.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:29:26.434 [DEBUG] [Thread-63178] [transport.py] [_log()] starting thread (client mode): 0xd3163970
2025-11-17T23:29:26.434 [DEBUG] [Thread-63178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:29:26.449 [DEBUG] [Thread-63178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:29:26.449 [INFO] [Thread-63178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:29:26.456 [DEBUG] [Thread-63178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] client lang: <none>
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] server lang: <none>
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] kex follows: False
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] Compression: none
2025-11-17T23:29:26.457 [DEBUG] [Thread-63178] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:29:26.514 [DEBUG] [Thread-63178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:29:26.514 [DEBUG] [Thread-63178] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:29:26.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:29:26.515 [DEBUG] [Thread-63178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:29:26.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:29:26.574 [DEBUG] [Thread-63178] [transport.py] [_log()] userauth is OK
2025-11-17T23:29:26.574 [DEBUG] [Thread-63178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:29:26.574 [DEBUG] [Thread-63178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:29:26.574 [DEBUG] [Thread-63178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:29:26.574 [DEBUG] [Thread-63178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:29:26.593 [INFO] [Thread-63178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:29:26.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:29:26.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:29:27.451 [DEBUG] [Thread-63178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:29:27.451 [DEBUG] [Thread-63178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:29:27.498 [DEBUG] [Thread-63178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:29:27.498 [DEBUG] [Thread-63178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:29:27.507 [DEBUG] [Thread-63178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:29:27.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:29:27.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:29:27.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:29:27.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:29:27.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:29:27.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:29:27.541 [DEBUG] [Thread-63178] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:29:40.465 [DEBUG] [Thread-63180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:29:50.475 [DEBUG] [Thread-63181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:29:55.515 [DEBUG] [Thread-63182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:29:57.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:29:57.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:29:57.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:29:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 29, 48), 11.57, 45.72, 0.0, 22.69, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:29:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:29:48
2025-11-17T23:29:58.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:29:58.519 [DEBUG] [Thread-63183] [transport.py] [_log()] starting thread (client mode): 0xd3160850
2025-11-17T23:29:58.519 [DEBUG] [Thread-63183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:29:58.546 [DEBUG] [Thread-63183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:29:58.546 [INFO] [Thread-63183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] client lang: <none>
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] server lang: <none>
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] kex follows: False
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] Compression: none
2025-11-17T23:29:58.549 [DEBUG] [Thread-63183] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:29:58.566 [DEBUG] [Thread-63183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:29:58.566 [DEBUG] [Thread-63183] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:29:58.566 [DEBUG] [Thread-63183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:29:58.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:29:58.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:29:58.567 [DEBUG] [Thread-63183] [transport.py] [_log()] userauth is OK
2025-11-17T23:29:58.567 [DEBUG] [Thread-63183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:29:58.567 [DEBUG] [Thread-63183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:29:58.567 [DEBUG] [Thread-63183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:29:58.567 [DEBUG] [Thread-63183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:29:58.576 [INFO] [Thread-63183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:29:58.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:29:59.146 [DEBUG] [Thread-63183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:29:59.146 [DEBUG] [Thread-63183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:29:59.147 [DEBUG] [Thread-63183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:29:59.187 [DEBUG] [Thread-63183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:29:59.187 [DEBUG] [Thread-63183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:29:59.189 [DEBUG] [Thread-63183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:29:59.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:29:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:29:59.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:29:59.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:29:59.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:29:59.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:29:59.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.895532 -999.00  +14.30  20.20     50   +4.10 1 2 1 1 1     0    0 9.33 -32.74 ZNEsw 16.5 20.2 168.8 24.3 14.8 -21.8 14.7 -21.3 14.5 -20.7 14.8 -21.1
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.895532
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:29:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:29:48', tmtdew=11.57, humidity=45.72, cloud=0.0, wind=22.69, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:29:49', seeing=1.91, atlas_timestamp='2025-11-17T21:29:33.965', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:27:00')
2025-11-17T23:29:59.207 [DEBUG] [Thread-63183] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:29:59.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:29:59.297 [DEBUG] [Thread-63186] [transport.py] [_log()] starting thread (client mode): 0xd0701cf0
2025-11-17T23:29:59.297 [DEBUG] [Thread-63186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:29:59.312 [DEBUG] [Thread-63186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:29:59.312 [INFO] [Thread-63186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] client lang: <none>
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] server lang: <none>
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] kex follows: False
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:29:59.320 [DEBUG] [Thread-63186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:29:59.321 [DEBUG] [Thread-63186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:29:59.321 [DEBUG] [Thread-63186] [transport.py] [_log()] Compression: none
2025-11-17T23:29:59.321 [DEBUG] [Thread-63186] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:29:59.379 [DEBUG] [Thread-63186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:29:59.379 [DEBUG] [Thread-63186] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:29:59.380 [DEBUG] [Thread-63186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:29:59.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:29:59.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:29:59.438 [DEBUG] [Thread-63186] [transport.py] [_log()] userauth is OK
2025-11-17T23:29:59.438 [DEBUG] [Thread-63186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:29:59.438 [DEBUG] [Thread-63186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:29:59.438 [DEBUG] [Thread-63186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:29:59.438 [DEBUG] [Thread-63186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:29:59.452 [INFO] [Thread-63186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:29:59.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:29:59.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:30:00.268 [DEBUG] [Thread-63186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:30:00.268 [DEBUG] [Thread-63186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:30:00.316 [DEBUG] [Thread-63186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:30:00.316 [DEBUG] [Thread-63186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:30:00.324 [DEBUG] [Thread-63186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:30:00.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:30:00.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:30: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') -> 00000000
2025-11-17T23:30:00.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:30:00.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:30:00.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:30:00.355 [DEBUG] [Thread-63186] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:30:10.544 [DEBUG] [Thread-63188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:30:14.881 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:30:14.882 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:30:25.583 [DEBUG] [Thread-63189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:30:30.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:30:30.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:30:30.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:30:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 30, 20), 11.56, 45.74, 0.0, 20.91, 14.25, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:30:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:30:20
2025-11-17T23:30:31.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:30:31.293 [DEBUG] [Thread-63190] [transport.py] [_log()] starting thread (client mode): 0xd3161030
2025-11-17T23:30:31.293 [DEBUG] [Thread-63190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:30:31.318 [DEBUG] [Thread-63190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:30:31.319 [INFO] [Thread-63190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:30:31.320 [DEBUG] [Thread-63190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:30:31.320 [DEBUG] [Thread-63190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:30:31.320 [DEBUG] [Thread-63190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:30:31.320 [DEBUG] [Thread-63190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:30:31.320 [DEBUG] [Thread-63190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:30:31.320 [DEBUG] [Thread-63190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] client lang: <none>
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] server lang: <none>
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] kex follows: False
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:30:31.321 [DEBUG] [Thread-63190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:30:31.322 [DEBUG] [Thread-63190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:30:31.322 [DEBUG] [Thread-63190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:30:31.322 [DEBUG] [Thread-63190] [transport.py] [_log()] Compression: none
2025-11-17T23:30:31.322 [DEBUG] [Thread-63190] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:30:31.334 [DEBUG] [Thread-63190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:30:31.335 [DEBUG] [Thread-63190] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:30:31.335 [DEBUG] [Thread-63190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:30:31.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:30:31.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:30:31.337 [DEBUG] [Thread-63190] [transport.py] [_log()] userauth is OK
2025-11-17T23:30:31.337 [DEBUG] [Thread-63190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:30:31.338 [DEBUG] [Thread-63190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:30:31.338 [DEBUG] [Thread-63190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:30:31.338 [DEBUG] [Thread-63190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:30:31.355 [INFO] [Thread-63190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:30:31.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:30:31.936 [DEBUG] [Thread-63190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:30:31.936 [DEBUG] [Thread-63190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:30:31.937 [DEBUG] [Thread-63190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:30:31.977 [DEBUG] [Thread-63190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:30:31.977 [DEBUG] [Thread-63190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:30:31.980 [DEBUG] [Thread-63190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:30:31.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:30:31.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:30:31.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:30:31.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:30:31.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:30:31.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:30:31.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:30:31.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.895879 -999.00  +14.20  17.17     50   +4.10 1 2 1 1 1     0    0 9.37 -34.20 ZNEsw 14.5 17.2 178.8 22.6 14.8 -21.8 14.7 -21.2 14.5 -20.9 14.8 -21.5
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.895879
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:30:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:30:20', tmtdew=11.56, humidity=45.74, cloud=0.0, wind=20.91, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:30:21', seeing=1.66, atlas_timestamp='2025-11-17T21:30:03.946', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:27:00')
2025-11-17T23:30:31.999 [DEBUG] [Thread-63190] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:30:32.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:30:32.082 [DEBUG] [Thread-63193] [transport.py] [_log()] starting thread (client mode): 0xd3153eb0
2025-11-17T23:30:32.082 [DEBUG] [Thread-63193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:30:32.097 [DEBUG] [Thread-63193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:30:32.097 [INFO] [Thread-63193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:30:32.104 [DEBUG] [Thread-63193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:30:32.105 [DEBUG] [Thread-63193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:30:32.105 [DEBUG] [Thread-63193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:30:32.105 [DEBUG] [Thread-63193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:30:32.105 [DEBUG] [Thread-63193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:30:32.105 [DEBUG] [Thread-63193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:30:32.105 [DEBUG] [Thread-63193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:30:32.105 [DEBUG] [Thread-63193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:30:32.105 [DEBUG] [Thread-63193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] client lang: <none>
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] server lang: <none>
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] kex follows: False
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:30:32.106 [DEBUG] [Thread-63193] [transport.py] [_log()] Compression: none
2025-11-17T23:30:32.107 [DEBUG] [Thread-63193] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:30:32.162 [DEBUG] [Thread-63193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:30:32.162 [DEBUG] [Thread-63193] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:30:32.163 [DEBUG] [Thread-63193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:30:32.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:30:32.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:30:32.218 [DEBUG] [Thread-63193] [transport.py] [_log()] userauth is OK
2025-11-17T23:30:32.218 [DEBUG] [Thread-63193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:30:32.218 [DEBUG] [Thread-63193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:30:32.219 [DEBUG] [Thread-63193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:30:32.219 [DEBUG] [Thread-63193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:30:32.237 [INFO] [Thread-63193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:30:32.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:30:32.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:30:33.059 [DEBUG] [Thread-63193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:30:33.060 [DEBUG] [Thread-63193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:30:33.107 [DEBUG] [Thread-63193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:30:33.108 [DEBUG] [Thread-63193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:30:33.117 [DEBUG] [Thread-63193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:30:33.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:30:33.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:30:33.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:30:33.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:30:33.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:30:33.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:30:33.152 [DEBUG] [Thread-63193] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:30:40.611 [DEBUG] [Thread-63195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:30:50.547 [DEBUG] [Thread-63196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:30:55.653 [DEBUG] [Thread-63197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:31:03.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:31:03.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:31:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:31:03.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 30, 52), 11.57, 45.72, 0.0, 23.75, 14.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:31:03.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:30:52
2025-11-17T23:31:03.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:31:04.069 [DEBUG] [Thread-63198] [transport.py] [_log()] starting thread (client mode): 0xd31520e0
2025-11-17T23:31:04.070 [DEBUG] [Thread-63198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:31:04.091 [DEBUG] [Thread-63198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:31:04.091 [INFO] [Thread-63198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:31:04.094 [DEBUG] [Thread-63198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:31:04.094 [DEBUG] [Thread-63198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:31:04.094 [DEBUG] [Thread-63198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:31:04.094 [DEBUG] [Thread-63198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] client lang: <none>
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] server lang: <none>
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] kex follows: False
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:31:04.095 [DEBUG] [Thread-63198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:31:04.096 [DEBUG] [Thread-63198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:31:04.096 [DEBUG] [Thread-63198] [transport.py] [_log()] Compression: none
2025-11-17T23:31:04.096 [DEBUG] [Thread-63198] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:31:04.114 [DEBUG] [Thread-63198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:31:04.115 [DEBUG] [Thread-63198] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:31:04.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:31:04.116 [DEBUG] [Thread-63198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:31:04.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:31:04.118 [DEBUG] [Thread-63198] [transport.py] [_log()] userauth is OK
2025-11-17T23:31:04.118 [DEBUG] [Thread-63198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:31:04.118 [DEBUG] [Thread-63198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:31:04.119 [DEBUG] [Thread-63198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:31:04.119 [DEBUG] [Thread-63198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:31:04.143 [INFO] [Thread-63198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:31:04.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:31:04.770 [DEBUG] [Thread-63198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:31:04.770 [DEBUG] [Thread-63198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:31:04.771 [DEBUG] [Thread-63198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:31:04.812 [DEBUG] [Thread-63198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:31:04.812 [DEBUG] [Thread-63198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:31:04.815 [DEBUG] [Thread-63198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:31:04.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:31:04.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:31:04.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:31:04.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:31:04.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:31:04.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:31:04.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:31:04.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:31:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:31:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.895879 -999.00  +14.20  17.17     50   +4.10 1 2 1 1 1     0    0 9.37 -34.20 ZNEsw 14.5 17.2 178.8 22.6 14.8 -21.8 14.7 -21.2 14.5 -20.9 14.8 -21.5
2025-11-17T23:31:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:31:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:31:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.895879
2025-11-17T23:31:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:31:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:31:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:31:04.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:31:04.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:31:04.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:30:52', tmtdew=11.57, humidity=45.72, cloud=0.0, wind=23.75, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:30:53', seeing=1.98, atlas_timestamp='2025-11-17T21:30:03.946', atlas_cloud=2, atlas_rain=1, zp_data=[0.3017500000000002, 0.3012499999999996, 0.5027500000000007, 0.6294999999999993, 0.6615000000000002, 0.697750000000001, 0.472999999999999, 0.31125000000000114, 0.25150000000000006, 0.34500000000000064, 0.5732499999999998, 0.4819999999999993, 0.8109999999999999, 1.1177499999999991, 0.6019999999999994, 0.46499999999999986, 0.19125000000000014, 0.28749999999999964, 0.6519999999999992, 1.0002499999999985, 1.0324999999999989, 1.353749999999999, 0.45725000000000104, 0.5907499999999999, 0.3869999999999987, 0.3230000000000004, 0.4377500000000003, 0.5085000000000006, 1.1174999999999997, 1.7860000000000014, 0.4780000000000024, 0.5930000000000009, 1.7672499999999989], zp_timestamp='2025-11-17T21:27:00')
2025-11-17T23:31:04.841 [DEBUG] [Thread-63198] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:31:04.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:31:04.938 [DEBUG] [Thread-63201] [transport.py] [_log()] starting thread (client mode): 0xd3150520
2025-11-17T23:31:04.938 [DEBUG] [Thread-63201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:31:04.953 [DEBUG] [Thread-63201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:31:04.953 [INFO] [Thread-63201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:31:04.961 [DEBUG] [Thread-63201] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:31:04.962 [DEBUG] [Thread-63201] [transport.py] [_log()] client lang: <none>
2025-11-17T23:31:04.963 [DEBUG] [Thread-63201] [transport.py] [_log()] server lang: <none>
2025-11-17T23:31:04.963 [DEBUG] [Thread-63201] [transport.py] [_log()] kex follows: False
2025-11-17T23:31:04.963 [DEBUG] [Thread-63201] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:31:04.963 [DEBUG] [Thread-63201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:31:04.963 [DEBUG] [Thread-63201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:31:04.963 [DEBUG] [Thread-63201] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:31:04.963 [DEBUG] [Thread-63201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:31:04.964 [DEBUG] [Thread-63201] [transport.py] [_log()] Compression: none
2025-11-17T23:31:04.964 [DEBUG] [Thread-63201] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:31:05.019 [DEBUG] [Thread-63201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:31:05.020 [DEBUG] [Thread-63201] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:31:05.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:31:05.021 [DEBUG] [Thread-63201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:31:05.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:31:05.078 [DEBUG] [Thread-63201] [transport.py] [_log()] userauth is OK
2025-11-17T23:31:05.079 [DEBUG] [Thread-63201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:31:05.079 [DEBUG] [Thread-63201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:31:05.079 [DEBUG] [Thread-63201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:31:05.079 [DEBUG] [Thread-63201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:31:05.098 [INFO] [Thread-63201] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:31:05.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:31:05.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:31:05.923 [DEBUG] [Thread-63201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:31:05.923 [DEBUG] [Thread-63201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:31:05.971 [DEBUG] [Thread-63201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:31:05.971 [DEBUG] [Thread-63201] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:31:05.982 [DEBUG] [Thread-63201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:31:05.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:31:05.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:31:06.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:31:06.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:31:06.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:31:06.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:31:06.018 [DEBUG] [Thread-63201] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:31:10.684 [DEBUG] [Thread-63203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:31:15.088 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:31:15.089 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:31:25.730 [DEBUG] [Thread-63204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:31:36.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:31:36.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:31:36.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:31:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 31, 24), 11.55, 45.77, 0.0, 23.61, 14.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:31:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:31:24
2025-11-17T23:31:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:31:36.960 [DEBUG] [Thread-63205] [transport.py] [_log()] starting thread (client mode): 0xd3161030
2025-11-17T23:31:36.960 [DEBUG] [Thread-63205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:31:36.982 [DEBUG] [Thread-63205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:31:36.982 [INFO] [Thread-63205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:31:36.984 [DEBUG] [Thread-63205] [transport.py] [_log()] client lang: <none>
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] server lang: <none>
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] kex follows: False
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] Compression: none
2025-11-17T23:31:36.985 [DEBUG] [Thread-63205] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:31:37.002 [DEBUG] [Thread-63205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:31:37.003 [DEBUG] [Thread-63205] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:31:37.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:31:37.004 [DEBUG] [Thread-63205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:31:37.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:31:37.006 [DEBUG] [Thread-63205] [transport.py] [_log()] userauth is OK
2025-11-17T23:31:37.006 [DEBUG] [Thread-63205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:31:37.006 [DEBUG] [Thread-63205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:31:37.006 [DEBUG] [Thread-63205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:31:37.007 [DEBUG] [Thread-63205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:31:37.031 [INFO] [Thread-63205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:31:37.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:31:37.655 [DEBUG] [Thread-63205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:31:37.655 [DEBUG] [Thread-63205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:31:37.655 [DEBUG] [Thread-63205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:31:37.696 [DEBUG] [Thread-63205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:31:37.696 [DEBUG] [Thread-63205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:31:37.699 [DEBUG] [Thread-63205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:31:37.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:31:37.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:31:37.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:31:37.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:31:37.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:31:37.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:31:37.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:31:37.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:31:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:31:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.896226 -999.00  +14.20  19.11     50   +4.10 1 2 1 1 1     0    0 9.23 -32.19 ZNEsw 19.1 19.1 176.0 25.2 14.8 -22.0 14.7 -21.5 14.5 -21.0 14.8 -21.4
2025-11-17T23:31:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:31:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:31:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.896226
2025-11-17T23:31:37.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:31:37.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:31:37.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:31:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:31:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:31:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:31:24', tmtdew=11.55, humidity=45.77, cloud=0.0, wind=23.61, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:31:25', seeing=1.99, atlas_timestamp='2025-11-17T21:30:33.926', atlas_cloud=2, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:30:00')
2025-11-17T23:31:37.727 [DEBUG] [Thread-63205] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:31:37.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:31:37.824 [DEBUG] [Thread-63208] [transport.py] [_log()] starting thread (client mode): 0xd0755c60
2025-11-17T23:31:37.825 [DEBUG] [Thread-63208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:31:37.841 [DEBUG] [Thread-63208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:31:37.841 [INFO] [Thread-63208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:31:37.849 [DEBUG] [Thread-63208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:31:37.849 [DEBUG] [Thread-63208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:31:37.849 [DEBUG] [Thread-63208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:31:37.849 [DEBUG] [Thread-63208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:31:37.849 [DEBUG] [Thread-63208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:31:37.849 [DEBUG] [Thread-63208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] client lang: <none>
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] server lang: <none>
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] kex follows: False
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] Compression: none
2025-11-17T23:31:37.850 [DEBUG] [Thread-63208] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:31:37.906 [DEBUG] [Thread-63208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:31:37.906 [DEBUG] [Thread-63208] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:31:37.907 [DEBUG] [Thread-63208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:31:37.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:31:37.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:31:37.964 [DEBUG] [Thread-63208] [transport.py] [_log()] userauth is OK
2025-11-17T23:31:37.964 [DEBUG] [Thread-63208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:31:37.964 [DEBUG] [Thread-63208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:31:37.964 [DEBUG] [Thread-63208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:31:37.964 [DEBUG] [Thread-63208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:31:37.984 [INFO] [Thread-63208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:31:37.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:31:37.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:31:38.794 [DEBUG] [Thread-63208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:31:38.795 [DEBUG] [Thread-63208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:31:38.842 [DEBUG] [Thread-63208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:31:38.843 [DEBUG] [Thread-63208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:31:38.852 [DEBUG] [Thread-63208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:31:38.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:31:38.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:31:38.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:31:38.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:31:38.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:31:38.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:31:38.887 [DEBUG] [Thread-63208] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:31:40.756 [DEBUG] [Thread-63210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:31:50.622 [DEBUG] [Thread-63211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:31:55.804 [DEBUG] [Thread-63212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:32:08.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:32:08.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:32:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:32:09.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 31, 56), 11.56, 45.76, 0.0, 18.35, 14.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:32:09.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:31:56
2025-11-17T23:32:09.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:32:09.840 [DEBUG] [Thread-63213] [transport.py] [_log()] starting thread (client mode): 0xd0700c10
2025-11-17T23:32:09.840 [DEBUG] [Thread-63213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:32:09.860 [DEBUG] [Thread-63213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:32:09.860 [INFO] [Thread-63213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:32:09.863 [DEBUG] [Thread-63213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:32:09.863 [DEBUG] [Thread-63213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:32:09.863 [DEBUG] [Thread-63213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:32:09.863 [DEBUG] [Thread-63213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:32:09.863 [DEBUG] [Thread-63213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] client lang: <none>
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] server lang: <none>
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] kex follows: False
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] Compression: none
2025-11-17T23:32:09.864 [DEBUG] [Thread-63213] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:32:09.883 [DEBUG] [Thread-63213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:32:09.884 [DEBUG] [Thread-63213] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:32:09.884 [DEBUG] [Thread-63213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:32:09.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:32:09.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:32:09.886 [DEBUG] [Thread-63213] [transport.py] [_log()] userauth is OK
2025-11-17T23:32:09.886 [DEBUG] [Thread-63213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:32:09.886 [DEBUG] [Thread-63213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:32:09.886 [DEBUG] [Thread-63213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:32:09.886 [DEBUG] [Thread-63213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:32:09.910 [INFO] [Thread-63213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:32:09.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:32:10.586 [DEBUG] [Thread-63213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:32:10.586 [DEBUG] [Thread-63213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:32:10.586 [DEBUG] [Thread-63213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:32:10.626 [DEBUG] [Thread-63213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:32:10.626 [DEBUG] [Thread-63213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:32:10.629 [DEBUG] [Thread-63213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:32:10.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:32:10.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:32:10.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:32:10.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:32:10.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:32:10.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:32:10.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:32:10.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:32:10.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:32:10.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.896921 -999.00  +14.20  19.48     50   +4.10 1 1 1 1 1     0    0 9.59 -33.56 ZNESW 19.2 19.5 155.2 24.0 14.8 -22.1 14.7 -21.3 14.4 -20.8 14.8 -21.4
2025-11-17T23:32:10.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:32:10.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:32:10.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.896921
2025-11-17T23:32:10.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:32:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:32:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:32:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:32:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:32:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:31:56', tmtdew=11.56, humidity=45.76, cloud=0.0, wind=18.35, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:31:57', seeing=1.72, atlas_timestamp='2025-11-17T21:31:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:30:00')
2025-11-17T23:32:10.651 [DEBUG] [Thread-63213] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:32:10.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:32:10.749 [DEBUG] [Thread-63216] [transport.py] [_log()] starting thread (client mode): 0xd317da80
2025-11-17T23:32:10.749 [DEBUG] [Thread-63216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:32:10.763 [DEBUG] [Thread-63216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:32:10.764 [INFO] [Thread-63216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] client lang: <none>
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] server lang: <none>
2025-11-17T23:32:10.771 [DEBUG] [Thread-63216] [transport.py] [_log()] kex follows: False
2025-11-17T23:32:10.772 [DEBUG] [Thread-63216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:32:10.772 [DEBUG] [Thread-63216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:32:10.772 [DEBUG] [Thread-63216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:32:10.772 [DEBUG] [Thread-63216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:32:10.772 [DEBUG] [Thread-63216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:32:10.772 [DEBUG] [Thread-63216] [transport.py] [_log()] Compression: none
2025-11-17T23:32:10.772 [DEBUG] [Thread-63216] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:32:10.829 [DEBUG] [Thread-63218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:32:10.831 [DEBUG] [Thread-63216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:32:10.832 [DEBUG] [Thread-63216] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:32:10.832 [DEBUG] [Thread-63216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:32:10.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:32:10.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:32:10.890 [DEBUG] [Thread-63216] [transport.py] [_log()] userauth is OK
2025-11-17T23:32:10.890 [DEBUG] [Thread-63216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:32:10.891 [DEBUG] [Thread-63216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:32:10.891 [DEBUG] [Thread-63216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:32:10.891 [DEBUG] [Thread-63216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:32:10.912 [INFO] [Thread-63216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:32:10.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:32:10.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:32:11.733 [DEBUG] [Thread-63216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:32:11.733 [DEBUG] [Thread-63216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:32:11.780 [DEBUG] [Thread-63216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:32:11.780 [DEBUG] [Thread-63216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:32:11.789 [DEBUG] [Thread-63216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:32:11.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:32:11.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:32:11.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:32:11.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:32:11.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:32:11.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:32:11.824 [DEBUG] [Thread-63216] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:32:15.301 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:32:15.302 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:32:25.876 [DEBUG] [Thread-63219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:32:40.904 [DEBUG] [Thread-63220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:32:41.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:32:41.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:32:41.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:32:42.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 32, 28), 11.53, 45.86, 0.0, 19.99, 14.24, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:32:42.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:32:28
2025-11-17T23:32:42.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:32:42.769 [DEBUG] [Thread-63221] [transport.py] [_log()] starting thread (client mode): 0xd07011e0
2025-11-17T23:32:42.769 [DEBUG] [Thread-63221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:32:42.788 [DEBUG] [Thread-63221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:32:42.788 [INFO] [Thread-63221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:32:42.791 [DEBUG] [Thread-63221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:32:42.791 [DEBUG] [Thread-63221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:32:42.791 [DEBUG] [Thread-63221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:32:42.791 [DEBUG] [Thread-63221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:32:42.791 [DEBUG] [Thread-63221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] client lang: <none>
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] server lang: <none>
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] kex follows: False
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:32:42.792 [DEBUG] [Thread-63221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:32:42.793 [DEBUG] [Thread-63221] [transport.py] [_log()] Compression: none
2025-11-17T23:32:42.793 [DEBUG] [Thread-63221] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:32:42.813 [DEBUG] [Thread-63221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:32:42.813 [DEBUG] [Thread-63221] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:32:42.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:32:42.815 [DEBUG] [Thread-63221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:32:42.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:32:42.816 [DEBUG] [Thread-63221] [transport.py] [_log()] userauth is OK
2025-11-17T23:32:42.817 [DEBUG] [Thread-63221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:32:42.817 [DEBUG] [Thread-63221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:32:42.817 [DEBUG] [Thread-63221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:32:42.817 [DEBUG] [Thread-63221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:32:42.841 [INFO] [Thread-63221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:32:42.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:32:43.478 [DEBUG] [Thread-63221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:32:43.478 [DEBUG] [Thread-63221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:32:43.478 [DEBUG] [Thread-63221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:32:43.520 [DEBUG] [Thread-63221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:32:43.520 [DEBUG] [Thread-63221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:32:43.523 [DEBUG] [Thread-63221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:32:43.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:32:43.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:32:43.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:32:43.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:32:43.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:32:43.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:32:43.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:32:43.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:32:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:32:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.897268 -999.00  +14.20  16.08     50   +4.10 1 1 1 1 1     0    0 9.69 -31.91 ZNESW 16.1 16.1 158.4 21.6 14.8 -22.2 14.7 -21.4 14.4 -21.0 14.8 -21.5
2025-11-17T23:32:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:32:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:32:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.897268
2025-11-17T23:32:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:32:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:32:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:32:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:32:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:32:43.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:32:28', tmtdew=11.53, humidity=45.86, cloud=0.0, wind=19.99, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:32:29', seeing=1.72, atlas_timestamp='2025-11-17T21:32:03.955', atlas_cloud=1, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:30:00')
2025-11-17T23:32:43.548 [DEBUG] [Thread-63221] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:32:43.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:32:43.661 [DEBUG] [Thread-63224] [transport.py] [_log()] starting thread (client mode): 0xd31cc880
2025-11-17T23:32:43.661 [DEBUG] [Thread-63224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:32:43.676 [DEBUG] [Thread-63224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:32:43.677 [INFO] [Thread-63224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:32:43.689 [DEBUG] [Thread-63224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:32:43.689 [DEBUG] [Thread-63224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] client lang: <none>
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] server lang: <none>
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] kex follows: False
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:32:43.690 [DEBUG] [Thread-63224] [transport.py] [_log()] Compression: none
2025-11-17T23:32:43.691 [DEBUG] [Thread-63224] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:32:43.750 [DEBUG] [Thread-63224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:32:43.750 [DEBUG] [Thread-63224] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:32:43.751 [DEBUG] [Thread-63224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:32:43.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:32:43.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:32:43.806 [DEBUG] [Thread-63224] [transport.py] [_log()] userauth is OK
2025-11-17T23:32:43.806 [DEBUG] [Thread-63224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:32:43.806 [DEBUG] [Thread-63224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:32:43.807 [DEBUG] [Thread-63224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:32:43.807 [DEBUG] [Thread-63224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:32:43.826 [INFO] [Thread-63224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:32:43.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:32:43.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:32:44.669 [DEBUG] [Thread-63224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:32:44.669 [DEBUG] [Thread-63224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:32:44.717 [DEBUG] [Thread-63224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:32:44.717 [DEBUG] [Thread-63224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:32:44.726 [DEBUG] [Thread-63224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:32:44.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:32: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')
2025-11-17T23:32:44.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:32:44.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:32:44.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:32:44.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:32:44.761 [DEBUG] [Thread-63224] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:32:50.685 [DEBUG] [Thread-63226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:32:55.936 [DEBUG] [Thread-63227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:33:10.981 [DEBUG] [Thread-63228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:33:14.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:33:14.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:33:14.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:33:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 33, 1), 11.53, 45.86, 0.0, 20.34, 14.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:33:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:33:01
2025-11-17T23:33:15.505 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:33:15.506 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:33:15.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:33:15.712 [DEBUG] [Thread-63229] [transport.py] [_log()] starting thread (client mode): 0xd3161a80
2025-11-17T23:33:15.712 [DEBUG] [Thread-63229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:33:15.732 [DEBUG] [Thread-63229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:33:15.733 [INFO] [Thread-63229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:33:15.735 [DEBUG] [Thread-63229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] client lang: <none>
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] server lang: <none>
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] kex follows: False
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] Compression: none
2025-11-17T23:33:15.736 [DEBUG] [Thread-63229] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:33:15.753 [DEBUG] [Thread-63229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:33:15.754 [DEBUG] [Thread-63229] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:33:15.754 [DEBUG] [Thread-63229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:33:15.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:33:15.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:33:15.756 [DEBUG] [Thread-63229] [transport.py] [_log()] userauth is OK
2025-11-17T23:33:15.756 [DEBUG] [Thread-63229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:33:15.756 [DEBUG] [Thread-63229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:33:15.756 [DEBUG] [Thread-63229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:33:15.756 [DEBUG] [Thread-63229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:33:15.779 [INFO] [Thread-63229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:33:15.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:33:16.399 [DEBUG] [Thread-63229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:33:16.399 [DEBUG] [Thread-63229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:33:16.400 [DEBUG] [Thread-63229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:33:16.440 [DEBUG] [Thread-63229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:33:16.440 [DEBUG] [Thread-63229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:33:16.444 [DEBUG] [Thread-63229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:33:16.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:33:16.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:33:16.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:33:16.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:33:16.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:33:16.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:33:16.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:33:16.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:33:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:33:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.897615 -999.00  +14.20  16.14     50   +4.10 1 1 1 1 1     0    0 9.59 -29.96 ZNESW 16.0 16.1 167.4 20.1 14.8 -22.2 14.7 -21.5 14.4 -21.0 14.7 -21.4
2025-11-17T23:33:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:33:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:33:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.897615
2025-11-17T23:33:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:33:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:33:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:33:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:33:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:33:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:33:01', tmtdew=11.53, humidity=45.86, cloud=0.0, wind=20.34, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:33:01', seeing=1.94, atlas_timestamp='2025-11-17T21:32:33.936', atlas_cloud=1, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:30:00')
2025-11-17T23:33:16.468 [DEBUG] [Thread-63229] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:33:16.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:33:16.568 [DEBUG] [Thread-63232] [transport.py] [_log()] starting thread (client mode): 0xd3153d30
2025-11-17T23:33:16.568 [DEBUG] [Thread-63232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:33:16.583 [DEBUG] [Thread-63232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:33:16.583 [INFO] [Thread-63232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:33:16.590 [DEBUG] [Thread-63232] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:33:16.591 [DEBUG] [Thread-63232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:33:16.591 [DEBUG] [Thread-63232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:33:16.591 [DEBUG] [Thread-63232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:33:16.591 [DEBUG] [Thread-63232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:33:16.591 [DEBUG] [Thread-63232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:33:16.591 [DEBUG] [Thread-63232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:33:16.591 [DEBUG] [Thread-63232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:33:16.591 [DEBUG] [Thread-63232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:33:16.592 [DEBUG] [Thread-63232] [transport.py] [_log()] client lang: <none>
2025-11-17T23:33:16.592 [DEBUG] [Thread-63232] [transport.py] [_log()] server lang: <none>
2025-11-17T23:33:16.592 [DEBUG] [Thread-63232] [transport.py] [_log()] kex follows: False
2025-11-17T23:33:16.592 [DEBUG] [Thread-63232] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:33:16.592 [DEBUG] [Thread-63232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:33:16.592 [DEBUG] [Thread-63232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:33:16.592 [DEBUG] [Thread-63232] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:33:16.592 [DEBUG] [Thread-63232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:33:16.593 [DEBUG] [Thread-63232] [transport.py] [_log()] Compression: none
2025-11-17T23:33:16.593 [DEBUG] [Thread-63232] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:33:16.650 [DEBUG] [Thread-63232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:33:16.650 [DEBUG] [Thread-63232] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:33:16.651 [DEBUG] [Thread-63232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:33:16.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:33:16.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:33:16.706 [DEBUG] [Thread-63232] [transport.py] [_log()] userauth is OK
2025-11-17T23:33:16.707 [DEBUG] [Thread-63232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:33:16.707 [DEBUG] [Thread-63232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:33:16.707 [DEBUG] [Thread-63232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:33:16.707 [DEBUG] [Thread-63232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:33:16.726 [INFO] [Thread-63232] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:33:16.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:33:16.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:33:17.547 [DEBUG] [Thread-63232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:33:17.548 [DEBUG] [Thread-63232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:33:17.595 [DEBUG] [Thread-63232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:33:17.595 [DEBUG] [Thread-63232] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:33:17.604 [DEBUG] [Thread-63232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:33:17.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:33:17.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:33:17.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:33:17.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:33:17.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:33:17.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:33:17.640 [DEBUG] [Thread-63232] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:33:26.011 [DEBUG] [Thread-63234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:33:41.051 [DEBUG] [Thread-63235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:33:47.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:33:47.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:33:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:33:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 33, 33), 11.56, 45.74, 0.0, 18.69, 14.22, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:33:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:33:33
2025-11-17T23:33:48.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:33:48.612 [DEBUG] [Thread-63236] [transport.py] [_log()] starting thread (client mode): 0xd3150c10
2025-11-17T23:33:48.612 [DEBUG] [Thread-63236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:33:48.633 [DEBUG] [Thread-63236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:33:48.633 [INFO] [Thread-63236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:33:48.636 [DEBUG] [Thread-63236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:33:48.636 [DEBUG] [Thread-63236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] client lang: <none>
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] server lang: <none>
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] kex follows: False
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] Compression: none
2025-11-17T23:33:48.637 [DEBUG] [Thread-63236] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:33:48.652 [DEBUG] [Thread-63236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:33:48.652 [DEBUG] [Thread-63236] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:33:48.652 [DEBUG] [Thread-63236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:33:48.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:33:48.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:33:48.653 [DEBUG] [Thread-63236] [transport.py] [_log()] userauth is OK
2025-11-17T23:33:48.653 [DEBUG] [Thread-63236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:33:48.653 [DEBUG] [Thread-63236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:33:48.653 [DEBUG] [Thread-63236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:33:48.653 [DEBUG] [Thread-63236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:33:48.662 [INFO] [Thread-63236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:33:48.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:33:49.295 [DEBUG] [Thread-63236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:33:49.295 [DEBUG] [Thread-63236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:33:49.295 [DEBUG] [Thread-63236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:33:49.336 [DEBUG] [Thread-63236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:33:49.336 [DEBUG] [Thread-63236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:33:49.338 [DEBUG] [Thread-63236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:33:49.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:33:49.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:33:49.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:33:49.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:33:49.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:33:49.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:33:49.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.897962 -999.00  +14.20  15.70     50   +4.00 1 1 1 1 1     0    0 9.70 -28.55 ZNESW 16.9 15.7 179.4 17.8 14.8 -22.2 14.6 -21.6 14.4 -21.0 14.8 -21.7
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.897962
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:33:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:33:33', tmtdew=11.56, humidity=45.74, cloud=0.0, wind=18.69, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:33:33', seeing=2.09, atlas_timestamp='2025-11-17T21:33:03.917', atlas_cloud=1, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:30:00')
2025-11-17T23:33:49.354 [DEBUG] [Thread-63236] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:33:49.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:33:49.444 [DEBUG] [Thread-63239] [transport.py] [_log()] starting thread (client mode): 0xd317c2e0
2025-11-17T23:33:49.444 [DEBUG] [Thread-63239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:33:49.466 [DEBUG] [Thread-63239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:33:49.466 [INFO] [Thread-63239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:33:49.473 [DEBUG] [Thread-63239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:33:49.473 [DEBUG] [Thread-63239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:33:49.473 [DEBUG] [Thread-63239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:33:49.473 [DEBUG] [Thread-63239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:33:49.473 [DEBUG] [Thread-63239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:33:49.473 [DEBUG] [Thread-63239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] client lang: <none>
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] server lang: <none>
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] kex follows: False
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] Compression: none
2025-11-17T23:33:49.474 [DEBUG] [Thread-63239] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:33:49.529 [DEBUG] [Thread-63239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:33:49.529 [DEBUG] [Thread-63239] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:33:49.529 [DEBUG] [Thread-63239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:33:49.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:33:49.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:33:49.589 [DEBUG] [Thread-63239] [transport.py] [_log()] userauth is OK
2025-11-17T23:33:49.589 [DEBUG] [Thread-63239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:33:49.589 [DEBUG] [Thread-63239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:33:49.589 [DEBUG] [Thread-63239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:33:49.589 [DEBUG] [Thread-63239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:33:49.604 [INFO] [Thread-63239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:33:49.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:33:49.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:33:50.471 [DEBUG] [Thread-63239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:33:50.471 [DEBUG] [Thread-63239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:33:50.520 [DEBUG] [Thread-63239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:33:50.520 [DEBUG] [Thread-63239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:33:50.529 [DEBUG] [Thread-63239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:33:50.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:33:50.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:33:50.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:33:50.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:33:50.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:33:50.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:33:50.560 [DEBUG] [Thread-63239] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:33:50.737 [DEBUG] [Thread-63241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:33:56.079 [DEBUG] [Thread-63242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:11.124 [DEBUG] [Thread-63243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:15.709 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:15.711 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:20.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:34:20.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:34:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:34:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 34, 5), 11.55, 45.76, 0.0, 19.9, 14.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:34:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:34:05
2025-11-17T23:34:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:34:21.476 [DEBUG] [Thread-63244] [transport.py] [_log()] starting thread (client mode): 0xd31cdab0
2025-11-17T23:34:21.476 [DEBUG] [Thread-63244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:34:21.494 [DEBUG] [Thread-63244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:34:21.494 [INFO] [Thread-63244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] client lang: <none>
2025-11-17T23:34:21.498 [DEBUG] [Thread-63244] [transport.py] [_log()] server lang: <none>
2025-11-17T23:34:21.499 [DEBUG] [Thread-63244] [transport.py] [_log()] kex follows: False
2025-11-17T23:34:21.499 [DEBUG] [Thread-63244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:34:21.499 [DEBUG] [Thread-63244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:34:21.499 [DEBUG] [Thread-63244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:34:21.499 [DEBUG] [Thread-63244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:34:21.499 [DEBUG] [Thread-63244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:34:21.499 [DEBUG] [Thread-63244] [transport.py] [_log()] Compression: none
2025-11-17T23:34:21.499 [DEBUG] [Thread-63244] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:34:21.517 [DEBUG] [Thread-63244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:34:21.518 [DEBUG] [Thread-63244] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:34:21.518 [DEBUG] [Thread-63244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:34:21.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:34:21.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:34:21.520 [DEBUG] [Thread-63244] [transport.py] [_log()] userauth is OK
2025-11-17T23:34:21.520 [DEBUG] [Thread-63244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:34:21.520 [DEBUG] [Thread-63244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:34:21.521 [DEBUG] [Thread-63244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:34:21.521 [DEBUG] [Thread-63244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:34:21.556 [INFO] [Thread-63244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:34:21.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:34:22.212 [DEBUG] [Thread-63244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:34:22.212 [DEBUG] [Thread-63244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:34:22.212 [DEBUG] [Thread-63244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:34:22.252 [DEBUG] [Thread-63244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:34:22.252 [DEBUG] [Thread-63244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:34:22.255 [DEBUG] [Thread-63244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:34:22.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:34:22.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:34:22.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:34:22.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:34:22.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:34:22.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:34:22.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:34:22.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:34:22.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:34:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.898310 -999.00  +14.20  15.38     50   +4.10 1 1 1 1 1     0    0 9.61 -27.23 ZNESW 17.3 15.4 173.0 21.6 14.8 -22.3 14.6 -21.5 14.4 -20.9 14.7 -21.5
2025-11-17T23:34:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:34:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:34:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.898310
2025-11-17T23:34:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:34:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:34:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:34:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:34:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:34:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:34:05', tmtdew=11.55, humidity=45.76, cloud=0.0, wind=19.9, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:34:05', seeing=1.74, atlas_timestamp='2025-11-17T21:33:33.984', atlas_cloud=1, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:30:00')
2025-11-17T23:34:22.279 [DEBUG] [Thread-63244] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:34:22.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:34:22.376 [DEBUG] [Thread-63247] [transport.py] [_log()] starting thread (client mode): 0xd0710580
2025-11-17T23:34:22.376 [DEBUG] [Thread-63247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:34:22.391 [DEBUG] [Thread-63247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:34:22.391 [INFO] [Thread-63247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] client lang: <none>
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] server lang: <none>
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] kex follows: False
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:34:22.399 [DEBUG] [Thread-63247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:34:22.400 [DEBUG] [Thread-63247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:34:22.400 [DEBUG] [Thread-63247] [transport.py] [_log()] Compression: none
2025-11-17T23:34:22.400 [DEBUG] [Thread-63247] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:34:22.457 [DEBUG] [Thread-63247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:34:22.457 [DEBUG] [Thread-63247] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:34:22.457 [DEBUG] [Thread-63247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:34:22.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:34:22.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:34:22.514 [DEBUG] [Thread-63247] [transport.py] [_log()] userauth is OK
2025-11-17T23:34:22.514 [DEBUG] [Thread-63247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:34:22.514 [DEBUG] [Thread-63247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:34:22.514 [DEBUG] [Thread-63247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:34:22.514 [DEBUG] [Thread-63247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:34:22.533 [INFO] [Thread-63247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:34:22.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:34:22.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:34:23.352 [DEBUG] [Thread-63247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:34:23.352 [DEBUG] [Thread-63247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:34:23.399 [DEBUG] [Thread-63247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:34:23.399 [DEBUG] [Thread-63247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:34:23.408 [DEBUG] [Thread-63247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:34:23.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:34:23.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:34:23.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:34:23.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:34:23.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:34:23.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:34:23.442 [DEBUG] [Thread-63247] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:34:26.155 [DEBUG] [Thread-63249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:41.201 [DEBUG] [Thread-63250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:45.678 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:48.837 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:50.817 [DEBUG] [Thread-63251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:34:53.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:34:53.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:34:53.898 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 34, 37), 11.43, 45.84, 0.0, 19.34, 14.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:34:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:34:37
2025-11-17T23:34:54.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:34:54.371 [DEBUG] [Thread-63252] [transport.py] [_log()] starting thread (client mode): 0xd31cf970
2025-11-17T23:34:54.371 [DEBUG] [Thread-63252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:34:54.391 [DEBUG] [Thread-63252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:34:54.391 [INFO] [Thread-63252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:34:54.394 [DEBUG] [Thread-63252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] client lang: <none>
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] server lang: <none>
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] kex follows: False
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] Compression: none
2025-11-17T23:34:54.395 [DEBUG] [Thread-63252] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:34:54.414 [DEBUG] [Thread-63252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:34:54.414 [DEBUG] [Thread-63252] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:34:54.415 [DEBUG] [Thread-63252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:34:54.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:34:54.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:34:54.417 [DEBUG] [Thread-63252] [transport.py] [_log()] userauth is OK
2025-11-17T23:34:54.417 [DEBUG] [Thread-63252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:34:54.417 [DEBUG] [Thread-63252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:34:54.417 [DEBUG] [Thread-63252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:34:54.417 [DEBUG] [Thread-63252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:34:54.441 [INFO] [Thread-63252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:34:54.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:34:55.090 [DEBUG] [Thread-63252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:34:55.090 [DEBUG] [Thread-63252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:34:55.090 [DEBUG] [Thread-63252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:34:55.130 [DEBUG] [Thread-63252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:34:55.131 [DEBUG] [Thread-63252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:34:55.134 [DEBUG] [Thread-63252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:34:55.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:34:55.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:34:55.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:34:55.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:34:55.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:34:55.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:34:55.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:34:55.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:34:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:34:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.898657 -999.00  +14.20  15.58     50   +4.10 1 2 1 1 1     0    0 9.47 -27.46 ZNESw 14.8 15.6 176.2 19.9 14.7 -22.2 14.6 -21.5 14.4 -21.0 14.8 -21.6
2025-11-17T23:34:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:34:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:34:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.898657
2025-11-17T23:34:55.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:34:55.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:34:55.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:34:55.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:34:55.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:34:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:34:37', tmtdew=11.43, humidity=45.84, cloud=0.0, wind=19.34, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:34:37', seeing=1.63, atlas_timestamp='2025-11-17T21:34:03.965', atlas_cloud=2, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:33:00')
2025-11-17T23:34:55.160 [DEBUG] [Thread-63252] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:34:55.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:34:55.257 [DEBUG] [Thread-63255] [transport.py] [_log()] starting thread (client mode): 0xd3160580
2025-11-17T23:34:55.257 [DEBUG] [Thread-63255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:34:55.272 [DEBUG] [Thread-63255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:34:55.272 [INFO] [Thread-63255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:34:55.283 [DEBUG] [Thread-63255] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:34:55.283 [DEBUG] [Thread-63255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:34:55.283 [DEBUG] [Thread-63255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:34:55.283 [DEBUG] [Thread-63255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] client lang: <none>
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] server lang: <none>
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] kex follows: False
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:34:55.284 [DEBUG] [Thread-63255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:34:55.285 [DEBUG] [Thread-63255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:34:55.285 [DEBUG] [Thread-63255] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:34:55.285 [DEBUG] [Thread-63255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:34:55.285 [DEBUG] [Thread-63255] [transport.py] [_log()] Compression: none
2025-11-17T23:34:55.285 [DEBUG] [Thread-63255] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:34:55.338 [DEBUG] [Thread-63255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:34:55.339 [DEBUG] [Thread-63255] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:34:55.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:34:55.340 [DEBUG] [Thread-63255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:34:55.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:34:55.394 [DEBUG] [Thread-63255] [transport.py] [_log()] userauth is OK
2025-11-17T23:34:55.395 [DEBUG] [Thread-63255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:34:55.395 [DEBUG] [Thread-63255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:34:55.395 [DEBUG] [Thread-63255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:34:55.395 [DEBUG] [Thread-63255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:34:55.415 [INFO] [Thread-63255] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:34:55.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:34:55.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:34:56.231 [DEBUG] [Thread-63257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:34:56.277 [DEBUG] [Thread-63255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:34:56.277 [DEBUG] [Thread-63255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:34:56.325 [DEBUG] [Thread-63255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:34:56.325 [DEBUG] [Thread-63255] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:34:56.334 [DEBUG] [Thread-63255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:34:56.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:34:56.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:34:56.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:34:56.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:34:56.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:34:56.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:34:56.368 [DEBUG] [Thread-63255] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:35:00.342 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:11.270 [DEBUG] [Thread-63258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:15.925 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:15.927 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:18.701 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:23.139 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:26.300 [DEBUG] [Thread-63259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:26.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:35:26.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:35:26.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:35:27.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 35, 9), 11.36, 46.05, 0.0, 18.17, 14.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:35:27.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:35:09
2025-11-17T23:35:27.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:35:27.382 [DEBUG] [Thread-63260] [transport.py] [_log()] starting thread (client mode): 0xd0712230
2025-11-17T23:35:27.382 [DEBUG] [Thread-63260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:35:27.404 [DEBUG] [Thread-63260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:35:27.404 [INFO] [Thread-63260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] client lang: <none>
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] server lang: <none>
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] kex follows: False
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] Compression: none
2025-11-17T23:35:27.407 [DEBUG] [Thread-63260] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:35:27.424 [DEBUG] [Thread-63260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:35:27.424 [DEBUG] [Thread-63260] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:35:27.424 [DEBUG] [Thread-63260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:35:27.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:35:27.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:35:27.425 [DEBUG] [Thread-63260] [transport.py] [_log()] userauth is OK
2025-11-17T23:35:27.425 [DEBUG] [Thread-63260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:35:27.425 [DEBUG] [Thread-63260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:35:27.425 [DEBUG] [Thread-63260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:35:27.425 [DEBUG] [Thread-63260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:35:27.436 [INFO] [Thread-63260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:35:27.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:35:28.076 [DEBUG] [Thread-63260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:35:28.076 [DEBUG] [Thread-63260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:35:28.076 [DEBUG] [Thread-63260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:35:28.116 [DEBUG] [Thread-63260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:35:28.116 [DEBUG] [Thread-63260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:35:28.120 [DEBUG] [Thread-63260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:35:28.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:35:28.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:35:28.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:35:28.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:35:28.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:35:28.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:35:28.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:35:28.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:35:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:35:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.899351 -999.00  +14.10  11.53     50   +4.10 1 2 1 1 1     0    0 9.43 -29.09 ZNESw 11.9 11.5 164.5 18.4 14.7 -22.4 14.6 -21.5 14.4 -21.0 14.7 -21.7
2025-11-17T23:35:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:35:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:35:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.899351
2025-11-17T23:35:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:35:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:35:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:35:28.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:35:28.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:35:28.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:35:09', tmtdew=11.36, humidity=46.05, cloud=0.0, wind=18.17, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:35:09', seeing=1.71, atlas_timestamp='2025-11-17T21:35:03.926', atlas_cloud=2, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:33:00')
2025-11-17T23:35:28.141 [DEBUG] [Thread-63260] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:35:28.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:35:28.237 [DEBUG] [Thread-63263] [transport.py] [_log()] starting thread (client mode): 0xd31ce5c0
2025-11-17T23:35:28.237 [DEBUG] [Thread-63263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:35:28.251 [DEBUG] [Thread-63263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:35:28.252 [INFO] [Thread-63263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] client lang: <none>
2025-11-17T23:35:28.259 [DEBUG] [Thread-63263] [transport.py] [_log()] server lang: <none>
2025-11-17T23:35:28.260 [DEBUG] [Thread-63263] [transport.py] [_log()] kex follows: False
2025-11-17T23:35:28.260 [DEBUG] [Thread-63263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:35:28.260 [DEBUG] [Thread-63263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:35:28.260 [DEBUG] [Thread-63263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:35:28.260 [DEBUG] [Thread-63263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:35:28.260 [DEBUG] [Thread-63263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:35:28.260 [DEBUG] [Thread-63263] [transport.py] [_log()] Compression: none
2025-11-17T23:35:28.260 [DEBUG] [Thread-63263] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:35:28.318 [DEBUG] [Thread-63263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:35:28.319 [DEBUG] [Thread-63263] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:35:28.319 [DEBUG] [Thread-63263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:35:28.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:35:28.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:35:28.374 [DEBUG] [Thread-63263] [transport.py] [_log()] userauth is OK
2025-11-17T23:35:28.375 [DEBUG] [Thread-63263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:35:28.375 [DEBUG] [Thread-63263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:35:28.375 [DEBUG] [Thread-63263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:35:28.375 [DEBUG] [Thread-63263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:35:28.394 [INFO] [Thread-63263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:35:28.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:35:28.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:35:29.261 [DEBUG] [Thread-63263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:35:29.261 [DEBUG] [Thread-63263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:35:29.313 [DEBUG] [Thread-63263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:35:29.313 [DEBUG] [Thread-63263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:35:29.324 [DEBUG] [Thread-63263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:35:29.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:35:29.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:35:29.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:35:29.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:35:29.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:35:29.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:35:29.358 [DEBUG] [Thread-63263] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:35:41.326 [DEBUG] [Thread-63265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:42.517 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:46.935 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:50.896 [DEBUG] [Thread-63266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:53.871 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:56.355 [DEBUG] [Thread-63267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:59.337 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:35:59.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:35:59.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:35:59.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:36:00.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 35, 41), 11.36, 46.57, 0.0, 18.93, 14.14, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:36:00.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:35:41
2025-11-17T23:36:00.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:36:00.307 [DEBUG] [Thread-63268] [transport.py] [_log()] starting thread (client mode): 0xd3153640
2025-11-17T23:36:00.307 [DEBUG] [Thread-63268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:36:00.328 [DEBUG] [Thread-63268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:36:00.328 [INFO] [Thread-63268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:36:00.331 [DEBUG] [Thread-63268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] client lang: <none>
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] server lang: <none>
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] kex follows: False
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] Compression: none
2025-11-17T23:36:00.332 [DEBUG] [Thread-63268] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:36:00.349 [DEBUG] [Thread-63268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:36:00.349 [DEBUG] [Thread-63268] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:36:00.349 [DEBUG] [Thread-63268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:36:00.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:36:00.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:36:00.351 [DEBUG] [Thread-63268] [transport.py] [_log()] userauth is OK
2025-11-17T23:36:00.351 [DEBUG] [Thread-63268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:36:00.352 [DEBUG] [Thread-63268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:36:00.352 [DEBUG] [Thread-63268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:36:00.352 [DEBUG] [Thread-63268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:36:00.386 [INFO] [Thread-63268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:36:00.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:36:01.048 [DEBUG] [Thread-63268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:36:01.048 [DEBUG] [Thread-63268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:36:01.048 [DEBUG] [Thread-63268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:36:01.088 [DEBUG] [Thread-63268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:36:01.088 [DEBUG] [Thread-63268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:36:01.100 [DEBUG] [Thread-63268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:36:01.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:36:01.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:36:01.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:36:01.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:36:01.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:36:01.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:36:01.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:36:01.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:36:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:36:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.899698 -999.00  +14.10  14.41     50   +4.10 1 2 1 1 1     0    0 9.37 -28.43 ZNESw 10.6 14.4 153.8 17.0 14.7 -22.4 14.6 -21.7 14.4 -21.1 14.7 -21.6
2025-11-17T23:36:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:36:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:36:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.899698
2025-11-17T23:36:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:36:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:36:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:36:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:36:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:36:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:35:41', tmtdew=11.36, humidity=46.57, cloud=0.0, wind=18.93, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:35:41', seeing=1.81, atlas_timestamp='2025-11-17T21:35:33.907', atlas_cloud=2, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:33:00')
2025-11-17T23:36:01.123 [DEBUG] [Thread-63268] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:36:01.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:36:01.219 [DEBUG] [Thread-63271] [transport.py] [_log()] starting thread (client mode): 0xd0710b20
2025-11-17T23:36:01.219 [DEBUG] [Thread-63271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:36:01.235 [DEBUG] [Thread-63271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:36:01.235 [INFO] [Thread-63271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:36:01.242 [DEBUG] [Thread-63271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:36:01.242 [DEBUG] [Thread-63271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:36:01.243 [DEBUG] [Thread-63271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:36:01.243 [DEBUG] [Thread-63271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:36:01.243 [DEBUG] [Thread-63271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:36:01.243 [DEBUG] [Thread-63271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:36:01.243 [DEBUG] [Thread-63271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:36:01.243 [DEBUG] [Thread-63271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:36:01.243 [DEBUG] [Thread-63271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:36:01.243 [DEBUG] [Thread-63271] [transport.py] [_log()] client lang: <none>
2025-11-17T23:36:01.252 [DEBUG] [Thread-63271] [transport.py] [_log()] server lang: <none>
2025-11-17T23:36:01.252 [DEBUG] [Thread-63271] [transport.py] [_log()] kex follows: False
2025-11-17T23:36:01.252 [DEBUG] [Thread-63271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:36:01.252 [DEBUG] [Thread-63271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:36:01.252 [DEBUG] [Thread-63271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:36:01.252 [DEBUG] [Thread-63271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:36:01.253 [DEBUG] [Thread-63271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:36:01.253 [DEBUG] [Thread-63271] [transport.py] [_log()] Compression: none
2025-11-17T23:36:01.253 [DEBUG] [Thread-63271] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:36:01.302 [DEBUG] [Thread-63271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:36:01.303 [DEBUG] [Thread-63271] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:36:01.303 [DEBUG] [Thread-63271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:36:01.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:36:01.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:36:01.358 [DEBUG] [Thread-63271] [transport.py] [_log()] userauth is OK
2025-11-17T23:36:01.359 [DEBUG] [Thread-63271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:36:01.359 [DEBUG] [Thread-63271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:36:01.359 [DEBUG] [Thread-63271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:36:01.359 [DEBUG] [Thread-63271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:36:01.377 [INFO] [Thread-63271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:36:01.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:36:01.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:36:02.316 [DEBUG] [Thread-63271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:36:02.326 [DEBUG] [Thread-63271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:36:02.364 [DEBUG] [Thread-63271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:36:02.364 [DEBUG] [Thread-63271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:36:02.373 [DEBUG] [Thread-63271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:36:02.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:36:02.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:36:02.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:36:02.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:36:02.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:36:02.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:36:02.406 [DEBUG] [Thread-63271] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:36:11.388 [DEBUG] [Thread-63273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:36:16.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:36:16.131 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:36:26.428 [DEBUG] [Thread-63274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:36:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:36:32.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:36:32.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:36:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 36, 13), 11.37, 46.52, 0.0, 20.75, 14.1, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:36:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:36:13
2025-11-17T23:36:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:36:33.356 [DEBUG] [Thread-63275] [transport.py] [_log()] starting thread (client mode): 0xd3151150
2025-11-17T23:36:33.356 [DEBUG] [Thread-63275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:36:33.375 [DEBUG] [Thread-63275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:36:33.375 [INFO] [Thread-63275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:36:33.379 [DEBUG] [Thread-63275] [transport.py] [_log()] client lang: <none>
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] server lang: <none>
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] kex follows: False
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] Compression: none
2025-11-17T23:36:33.380 [DEBUG] [Thread-63275] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:36:33.396 [DEBUG] [Thread-63275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:36:33.397 [DEBUG] [Thread-63275] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:36:33.397 [DEBUG] [Thread-63275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:36:33.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:36:33.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:36:33.399 [DEBUG] [Thread-63275] [transport.py] [_log()] userauth is OK
2025-11-17T23:36:33.399 [DEBUG] [Thread-63275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:36:33.399 [DEBUG] [Thread-63275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:36:33.399 [DEBUG] [Thread-63275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:36:33.399 [DEBUG] [Thread-63275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:36:33.417 [INFO] [Thread-63275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:36:33.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:36:34.056 [DEBUG] [Thread-63275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:36:34.056 [DEBUG] [Thread-63275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:36:34.056 [DEBUG] [Thread-63275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:36:34.096 [DEBUG] [Thread-63275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:36:34.096 [DEBUG] [Thread-63275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:36:34.099 [DEBUG] [Thread-63275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:36:34.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:36:34.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:36:34.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:36:34.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:36:34.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:36:34.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:36:34.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:36:34.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:36:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:36:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.900046 -999.00  +14.00  13.21     51   +4.00 1 2 1 1 1     0    0 9.56 -29.82 ZNESw 17.7 13.2 144.4 17.0 14.7 -22.4 14.5 -21.6 14.4 -21.1 14.7 -21.8
2025-11-17T23:36:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:36:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:36:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.900046
2025-11-17T23:36:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:36:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:36:34.125 [DEBUG] [Thread-63275] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:36:34.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:36:34.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:36:34.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:36:34.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:36:13', tmtdew=11.37, humidity=46.52, cloud=0.0, wind=20.75, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:36:14', seeing=1.81, atlas_timestamp='2025-11-17T21:36:03.974', atlas_cloud=2, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:33:00')
2025-11-17T23:36:34.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:36:34.223 [DEBUG] [Thread-63278] [transport.py] [_log()] starting thread (client mode): 0xd3163640
2025-11-17T23:36:34.224 [DEBUG] [Thread-63278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:36:34.244 [DEBUG] [Thread-63278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:36:34.244 [INFO] [Thread-63278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:36:34.251 [DEBUG] [Thread-63278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] client lang: <none>
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] server lang: <none>
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] kex follows: False
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:36:34.252 [DEBUG] [Thread-63278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:36:34.253 [DEBUG] [Thread-63278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:36:34.253 [DEBUG] [Thread-63278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:36:34.253 [DEBUG] [Thread-63278] [transport.py] [_log()] Compression: none
2025-11-17T23:36:34.253 [DEBUG] [Thread-63278] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:36:34.310 [DEBUG] [Thread-63278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:36:34.310 [DEBUG] [Thread-63278] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:36:34.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:36:34.311 [DEBUG] [Thread-63278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:36:34.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:36:34.366 [DEBUG] [Thread-63278] [transport.py] [_log()] userauth is OK
2025-11-17T23:36:34.366 [DEBUG] [Thread-63278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:36:34.367 [DEBUG] [Thread-63278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:36:34.367 [DEBUG] [Thread-63278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:36:34.367 [DEBUG] [Thread-63278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:36:34.388 [INFO] [Thread-63278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:36:34.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:36:34.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:36:35.226 [DEBUG] [Thread-63278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:36:35.226 [DEBUG] [Thread-63278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:36:35.274 [DEBUG] [Thread-63278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:36:35.274 [DEBUG] [Thread-63278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:36:35.283 [DEBUG] [Thread-63278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:36:35.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:36: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')
2025-11-17T23:36:35.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:36:35.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:36:35.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:36:35.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:36:35.326 [DEBUG] [Thread-63278] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:36:41.454 [DEBUG] [Thread-63280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:36:50.974 [DEBUG] [Thread-63281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:36:56.493 [DEBUG] [Thread-63282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:37:05.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:37:05.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:37:06.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 36, 45), 11.3, 46.57, 0.0, 20.71, 14.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:37:06.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:36:45
2025-11-17T23:37:06.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:37:06.317 [DEBUG] [Thread-63283] [transport.py] [_log()] starting thread (client mode): 0xd0700520
2025-11-17T23:37:06.317 [DEBUG] [Thread-63283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:37:06.337 [DEBUG] [Thread-63283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:37:06.337 [INFO] [Thread-63283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] client lang: <none>
2025-11-17T23:37:06.340 [DEBUG] [Thread-63283] [transport.py] [_log()] server lang: <none>
2025-11-17T23:37:06.341 [DEBUG] [Thread-63283] [transport.py] [_log()] kex follows: False
2025-11-17T23:37:06.341 [DEBUG] [Thread-63283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:37:06.341 [DEBUG] [Thread-63283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:37:06.341 [DEBUG] [Thread-63283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:37:06.341 [DEBUG] [Thread-63283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:37:06.341 [DEBUG] [Thread-63283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:37:06.341 [DEBUG] [Thread-63283] [transport.py] [_log()] Compression: none
2025-11-17T23:37:06.341 [DEBUG] [Thread-63283] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:37:06.355 [DEBUG] [Thread-63283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:37:06.355 [DEBUG] [Thread-63283] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:37:06.355 [DEBUG] [Thread-63283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:37:06.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:37:06.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:37:06.356 [DEBUG] [Thread-63283] [transport.py] [_log()] userauth is OK
2025-11-17T23:37:06.356 [DEBUG] [Thread-63283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:37:06.356 [DEBUG] [Thread-63283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:37:06.356 [DEBUG] [Thread-63283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:37:06.356 [DEBUG] [Thread-63283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:37:06.366 [INFO] [Thread-63283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:37:06.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:37:06.990 [DEBUG] [Thread-63283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:37:06.990 [DEBUG] [Thread-63283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:37:06.990 [DEBUG] [Thread-63283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:37:07.031 [DEBUG] [Thread-63283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:37:07.031 [DEBUG] [Thread-63283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:37:07.033 [DEBUG] [Thread-63283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:37:07.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:37:07.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:37:07.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:37:07.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:37:07.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:37:07.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:37:07.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:37:07.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.900393 -999.00  +14.00  18.10     51   +4.00 1 2 1 1 1     0    0 9.55 -30.67 ZNESw 13.1 18.1 141.4 20.9 14.7 -22.5 14.5 -21.6 14.3 -21.1 14.7 -21.8
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.900393
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:37:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:36:45', tmtdew=11.3, humidity=46.57, cloud=0.0, wind=20.71, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:36:46', seeing=1.81, atlas_timestamp='2025-11-17T21:36:33.955', atlas_cloud=2, atlas_rain=1, zp_data=[0.2287499999999998, 0.2417499999999997, 0.3862500000000004, 0.5464999999999991, 0.3595000000000006, 0.46825000000000117, 0.43549999999999933, 0.4427500000000002, 0.2705000000000002, 0.3680000000000003, 0.5992499999999996, 0.4739999999999984, 0.4930000000000003, 0.7257499999999997, 0.613999999999999, 0.3644999999999996, 0.38074999999999903, 0.4764999999999997, 0.7889999999999997, 0.8502499999999991, 0.948999999999999, 0.8357499999999991, 0.9352500000000008, 0.4747500000000002, 0.3039999999999985, 0.5815000000000001, 0.5047500000000005, 0.5405000000000006, 0.694, 0.955000000000001, 0.753000000000001, 0.35050000000000114, 0.3257499999999993], zp_timestamp='2025-11-17T21:33:00')
2025-11-17T23:37:07.053 [DEBUG] [Thread-63283] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:37:07.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:37:07.137 [DEBUG] [Thread-63286] [transport.py] [_log()] starting thread (client mode): 0xd07aba90
2025-11-17T23:37:07.137 [DEBUG] [Thread-63286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:37:07.153 [DEBUG] [Thread-63286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:37:07.153 [INFO] [Thread-63286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:37:07.160 [DEBUG] [Thread-63286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] client lang: <none>
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] server lang: <none>
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] kex follows: False
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] Compression: none
2025-11-17T23:37:07.161 [DEBUG] [Thread-63286] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:37:07.218 [DEBUG] [Thread-63286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:37:07.219 [DEBUG] [Thread-63286] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:37:07.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:37:07.219 [DEBUG] [Thread-63286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:37:07.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:37:07.276 [DEBUG] [Thread-63286] [transport.py] [_log()] userauth is OK
2025-11-17T23:37:07.276 [DEBUG] [Thread-63286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:37:07.276 [DEBUG] [Thread-63286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:37:07.276 [DEBUG] [Thread-63286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:37:07.276 [DEBUG] [Thread-63286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:37:07.291 [INFO] [Thread-63286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:37:07.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:37:07.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:37:08.149 [DEBUG] [Thread-63286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:37:08.149 [DEBUG] [Thread-63286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:37:08.197 [DEBUG] [Thread-63286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:37:08.197 [DEBUG] [Thread-63286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:37:08.206 [DEBUG] [Thread-63286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:37:08.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:37:08.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:37:08.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:37:08.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:37:08.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:37:08.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:37:08.240 [DEBUG] [Thread-63286] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:37:11.526 [DEBUG] [Thread-63288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:16.333 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:16.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:21.046 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:25.163 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:26.571 [DEBUG] [Thread-63289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:37:38.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:37:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:37:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 37, 17), 11.25, 46.74, 0.0, 20.73, 14.04, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:37:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:37:17
2025-11-17T23:37:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:37:39.092 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:39.197 [DEBUG] [Thread-63290] [transport.py] [_log()] starting thread (client mode): 0xd07a9330
2025-11-17T23:37:39.197 [DEBUG] [Thread-63290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:37:39.218 [DEBUG] [Thread-63290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:37:39.218 [INFO] [Thread-63290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] client lang: <none>
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] server lang: <none>
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] kex follows: False
2025-11-17T23:37:39.219 [DEBUG] [Thread-63290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:37:39.220 [DEBUG] [Thread-63290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:37:39.220 [DEBUG] [Thread-63290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:37:39.220 [DEBUG] [Thread-63290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:37:39.220 [DEBUG] [Thread-63290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:37:39.220 [DEBUG] [Thread-63290] [transport.py] [_log()] Compression: none
2025-11-17T23:37:39.220 [DEBUG] [Thread-63290] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:37:39.230 [DEBUG] [Thread-63290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:37:39.230 [DEBUG] [Thread-63290] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:37:39.231 [DEBUG] [Thread-63290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:37:39.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:37:39.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:37:39.232 [DEBUG] [Thread-63290] [transport.py] [_log()] userauth is OK
2025-11-17T23:37:39.232 [DEBUG] [Thread-63290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:37:39.232 [DEBUG] [Thread-63290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:37:39.232 [DEBUG] [Thread-63290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:37:39.232 [DEBUG] [Thread-63290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:37:39.246 [INFO] [Thread-63290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:37:39.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:37:39.828 [DEBUG] [Thread-63290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:37:39.829 [DEBUG] [Thread-63290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:37:39.829 [DEBUG] [Thread-63290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:37:39.869 [DEBUG] [Thread-63290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:37:39.869 [DEBUG] [Thread-63290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:37:39.872 [DEBUG] [Thread-63290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:37:39.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:37:39.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:37:39.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:37:39.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:37:39.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:37:39.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:37:39.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:37:39.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:37:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:37:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.900740 -999.00  +14.00  15.54     51   +4.00 1 2 1 1 1     0    0 9.36 -27.57 ZNESw 16.0 15.5 141.8 17.8 14.6 -22.4 14.5 -21.6 14.3 -21.0 14.7 -21.6
2025-11-17T23:37:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:37:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:37:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.900740
2025-11-17T23:37:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:37:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:37:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:37:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:37:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:37:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:37:17', tmtdew=11.25, humidity=46.74, cloud=0.0, wind=20.73, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:37:18', seeing=1.7, atlas_timestamp='2025-11-17T21:37:03.936', atlas_cloud=2, atlas_rain=1, zp_data=[0.24075000000000024, 0.20074999999999932, 0.35025000000000084, 0.30249999999999844, 0.39750000000000085, 0.33924999999999983, 0.31700000000000017, 0.2532500000000013, 0.2004999999999999, 0.33200000000000074, 0.31625000000000014, 0.3785000000000007, 0.4789999999999992, 0.548750000000001, 0.36799999999999855, 0.2729999999999997, 0.2182499999999994, 0.39949999999999974, 0.4054999999999982, 0.5652499999999989, 1.1919999999999984, 0.6322499999999991, 0.580750000000001, 0.3877500000000005, 0.3044999999999991, 0.5075000000000003, 0.39175000000000004, 0.4485000000000001, 1.0350000000000001, 0.7860000000000014, 0.6315000000000008, 0.5520000000000014, 0.4212499999999988], zp_timestamp='2025-11-17T21:36:00')
2025-11-17T23:37:39.895 [DEBUG] [Thread-63290] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:37:39.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:37:39.991 [DEBUG] [Thread-63293] [transport.py] [_log()] starting thread (client mode): 0xd07ab850
2025-11-17T23:37:39.991 [DEBUG] [Thread-63293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:37:40.008 [DEBUG] [Thread-63293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:37:40.008 [INFO] [Thread-63293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] client lang: <none>
2025-11-17T23:37:40.016 [DEBUG] [Thread-63293] [transport.py] [_log()] server lang: <none>
2025-11-17T23:37:40.017 [DEBUG] [Thread-63293] [transport.py] [_log()] kex follows: False
2025-11-17T23:37:40.017 [DEBUG] [Thread-63293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:37:40.017 [DEBUG] [Thread-63293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:37:40.017 [DEBUG] [Thread-63293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:37:40.017 [DEBUG] [Thread-63293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:37:40.017 [DEBUG] [Thread-63293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:37:40.017 [DEBUG] [Thread-63293] [transport.py] [_log()] Compression: none
2025-11-17T23:37:40.017 [DEBUG] [Thread-63293] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:37:40.075 [DEBUG] [Thread-63293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:37:40.075 [DEBUG] [Thread-63293] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:37:40.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:37:40.076 [DEBUG] [Thread-63293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:37:40.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:37:40.131 [DEBUG] [Thread-63293] [transport.py] [_log()] userauth is OK
2025-11-17T23:37:40.131 [DEBUG] [Thread-63293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:37:40.131 [DEBUG] [Thread-63293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:37:40.131 [DEBUG] [Thread-63293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:37:40.131 [DEBUG] [Thread-63293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:37:40.150 [INFO] [Thread-63293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:37:40.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:37:40.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:37:40.963 [DEBUG] [Thread-63293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:37:40.963 [DEBUG] [Thread-63293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:37:41.011 [DEBUG] [Thread-63293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:37:41.011 [DEBUG] [Thread-63293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:37:41.020 [DEBUG] [Thread-63293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:37:41.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:37:41.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:37:41.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:37:41.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:37:41.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:37:41.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:37:41.053 [DEBUG] [Thread-63293] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:37:41.597 [DEBUG] [Thread-63295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:51.047 [DEBUG] [Thread-63296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:37:56.632 [DEBUG] [Thread-63297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:38:11.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:38:11.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:38:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:38:11.665 [DEBUG] [Thread-63298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:38:11.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 37, 49), 11.22, 46.82, 0.0, 20.68, 13.94, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:38:11.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:37:49
2025-11-17T23:38:11.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:38:12.003 [DEBUG] [Thread-63299] [transport.py] [_log()] starting thread (client mode): 0xd07abb80
2025-11-17T23:38:12.003 [DEBUG] [Thread-63299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:38:12.023 [DEBUG] [Thread-63299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:38:12.023 [INFO] [Thread-63299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:38:12.026 [DEBUG] [Thread-63299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:38:12.026 [DEBUG] [Thread-63299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:38:12.026 [DEBUG] [Thread-63299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:38:12.026 [DEBUG] [Thread-63299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:38:12.026 [DEBUG] [Thread-63299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:38:12.026 [DEBUG] [Thread-63299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:38:12.026 [DEBUG] [Thread-63299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:38:12.026 [DEBUG] [Thread-63299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] client lang: <none>
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] server lang: <none>
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] kex follows: False
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] Compression: none
2025-11-17T23:38:12.027 [DEBUG] [Thread-63299] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:38:12.045 [DEBUG] [Thread-63299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:38:12.045 [DEBUG] [Thread-63299] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:38:12.046 [DEBUG] [Thread-63299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:38:12.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:38:12.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:38:12.088 [DEBUG] [Thread-63299] [transport.py] [_log()] userauth is OK
2025-11-17T23:38:12.088 [DEBUG] [Thread-63299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:38:12.088 [DEBUG] [Thread-63299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:38:12.088 [DEBUG] [Thread-63299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:38:12.088 [DEBUG] [Thread-63299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:38:12.104 [INFO] [Thread-63299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:38:12.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:38:12.722 [DEBUG] [Thread-63299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:38:12.722 [DEBUG] [Thread-63299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:38:12.722 [DEBUG] [Thread-63299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:38:12.762 [DEBUG] [Thread-63299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:38:12.763 [DEBUG] [Thread-63299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:38:12.766 [DEBUG] [Thread-63299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:38:12.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:38:12.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:38:12.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:38:12.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:38:12.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:38:12.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:38:12.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:38:12.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:38:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:38:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.901434 -999.00  +14.00  15.17     51   +4.10 1 2 1 1 1     0    0 9.43 -30.57 ZNESw 14.3 15.2 144.8 18.4 14.6 -22.4 14.5 -21.7 14.3 -21.2 14.6 -21.8
2025-11-17T23:38:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:38:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:38:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.901434
2025-11-17T23:38:12.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:38:12.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:38:12.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:38:12.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:38:12.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:38:12.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:37:49', tmtdew=11.22, humidity=46.82, cloud=0.0, wind=20.68, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:37:50', seeing=1.64, atlas_timestamp='2025-11-17T21:38:03.898', atlas_cloud=2, atlas_rain=1, zp_data=[0.24075000000000024, 0.20074999999999932, 0.35025000000000084, 0.30249999999999844, 0.39750000000000085, 0.33924999999999983, 0.31700000000000017, 0.2532500000000013, 0.2004999999999999, 0.33200000000000074, 0.31625000000000014, 0.3785000000000007, 0.4789999999999992, 0.548750000000001, 0.36799999999999855, 0.2729999999999997, 0.2182499999999994, 0.39949999999999974, 0.4054999999999982, 0.5652499999999989, 1.1919999999999984, 0.6322499999999991, 0.580750000000001, 0.3877500000000005, 0.3044999999999991, 0.5075000000000003, 0.39175000000000004, 0.4485000000000001, 1.0350000000000001, 0.7860000000000014, 0.6315000000000008, 0.5520000000000014, 0.4212499999999988], zp_timestamp='2025-11-17T21:36:00')
2025-11-17T23:38:12.791 [DEBUG] [Thread-63299] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:38:12.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:38:12.888 [DEBUG] [Thread-63302] [transport.py] [_log()] starting thread (client mode): 0xd0713820
2025-11-17T23:38:12.888 [DEBUG] [Thread-63302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:38:12.904 [DEBUG] [Thread-63302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:38:12.904 [INFO] [Thread-63302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] client lang: <none>
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] server lang: <none>
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] kex follows: False
2025-11-17T23:38:12.912 [DEBUG] [Thread-63302] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:38:12.913 [DEBUG] [Thread-63302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:38:12.913 [DEBUG] [Thread-63302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:38:12.913 [DEBUG] [Thread-63302] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:38:12.913 [DEBUG] [Thread-63302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:38:12.913 [DEBUG] [Thread-63302] [transport.py] [_log()] Compression: none
2025-11-17T23:38:12.913 [DEBUG] [Thread-63302] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:38:12.970 [DEBUG] [Thread-63302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:38:12.971 [DEBUG] [Thread-63302] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:38:12.971 [DEBUG] [Thread-63302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:38:12.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:38:12.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:38:13.027 [DEBUG] [Thread-63302] [transport.py] [_log()] userauth is OK
2025-11-17T23:38:13.027 [DEBUG] [Thread-63302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:38:13.027 [DEBUG] [Thread-63302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:38:13.027 [DEBUG] [Thread-63302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:38:13.027 [DEBUG] [Thread-63302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:38:13.046 [INFO] [Thread-63302] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:38:13.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:38:13.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:38:13.920 [DEBUG] [Thread-63302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:38:13.920 [DEBUG] [Thread-63302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:38:13.967 [DEBUG] [Thread-63302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:38:13.967 [DEBUG] [Thread-63302] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:38:13.977 [DEBUG] [Thread-63302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:38:13.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:38:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:38:13.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:38:14.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:38:14.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:38:14.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:38:14.013 [DEBUG] [Thread-63302] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:38:16.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:38:16.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:38:26.690 [DEBUG] [Thread-63304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:38:41.736 [DEBUG] [Thread-63305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:38:44.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:38:44.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:38:44.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:38:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 38, 21), 11.25, 46.74, 0.0, 19.55, 14.02, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:38:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:38:21
2025-11-17T23:38:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:38:44.965 [DEBUG] [Thread-63306] [transport.py] [_log()] starting thread (client mode): 0xd07113c0
2025-11-17T23:38:44.965 [DEBUG] [Thread-63306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:38:44.985 [DEBUG] [Thread-63306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:38:44.985 [INFO] [Thread-63306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] client lang: <none>
2025-11-17T23:38:44.988 [DEBUG] [Thread-63306] [transport.py] [_log()] server lang: <none>
2025-11-17T23:38:44.989 [DEBUG] [Thread-63306] [transport.py] [_log()] kex follows: False
2025-11-17T23:38:44.989 [DEBUG] [Thread-63306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:38:44.989 [DEBUG] [Thread-63306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:38:44.989 [DEBUG] [Thread-63306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:38:44.989 [DEBUG] [Thread-63306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:38:44.989 [DEBUG] [Thread-63306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:38:44.989 [DEBUG] [Thread-63306] [transport.py] [_log()] Compression: none
2025-11-17T23:38:44.989 [DEBUG] [Thread-63306] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:38:45.005 [DEBUG] [Thread-63306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:38:45.005 [DEBUG] [Thread-63306] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:38:45.006 [DEBUG] [Thread-63306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:38:45.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:38:45.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:38:45.008 [DEBUG] [Thread-63306] [transport.py] [_log()] userauth is OK
2025-11-17T23:38:45.008 [DEBUG] [Thread-63306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:38:45.008 [DEBUG] [Thread-63306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:38:45.008 [DEBUG] [Thread-63306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:38:45.008 [DEBUG] [Thread-63306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:38:45.032 [INFO] [Thread-63306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:38:45.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:38:45.610 [DEBUG] [Thread-63306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:38:45.611 [DEBUG] [Thread-63306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:38:45.611 [DEBUG] [Thread-63306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:38:45.651 [DEBUG] [Thread-63306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:38:45.651 [DEBUG] [Thread-63306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:38:45.655 [DEBUG] [Thread-63306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:38:45.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:38:45.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:38:45.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:38:45.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:38:45.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:38:45.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:38:45.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:38:45.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:38:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:38:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.901782 -999.00  +14.00  13.05     51   +4.10 1 2 1 1 1     0    0 9.34 -30.66 ZNESw 12.5 13.1 157.0 15.9 14.6 -22.6 14.5 -21.8 14.3 -21.2 14.6 -21.8
2025-11-17T23:38:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:38:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:38:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.901782
2025-11-17T23:38:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:38:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:38:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:38:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:38:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:38:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:38:21', tmtdew=11.25, humidity=46.74, cloud=0.0, wind=19.55, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:38:22', seeing=1.82, atlas_timestamp='2025-11-17T21:38:33.965', atlas_cloud=2, atlas_rain=1, zp_data=[0.24075000000000024, 0.20074999999999932, 0.35025000000000084, 0.30249999999999844, 0.39750000000000085, 0.33924999999999983, 0.31700000000000017, 0.2532500000000013, 0.2004999999999999, 0.33200000000000074, 0.31625000000000014, 0.3785000000000007, 0.4789999999999992, 0.548750000000001, 0.36799999999999855, 0.2729999999999997, 0.2182499999999994, 0.39949999999999974, 0.4054999999999982, 0.5652499999999989, 1.1919999999999984, 0.6322499999999991, 0.580750000000001, 0.3877500000000005, 0.3044999999999991, 0.5075000000000003, 0.39175000000000004, 0.4485000000000001, 1.0350000000000001, 0.7860000000000014, 0.6315000000000008, 0.5520000000000014, 0.4212499999999988], zp_timestamp='2025-11-17T21:36:00')
2025-11-17T23:38:45.681 [DEBUG] [Thread-63306] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:38:45.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:38:45.781 [DEBUG] [Thread-63309] [transport.py] [_log()] starting thread (client mode): 0xd07aa3e0
2025-11-17T23:38:45.781 [DEBUG] [Thread-63309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:38:45.801 [DEBUG] [Thread-63309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:38:45.802 [INFO] [Thread-63309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] client lang: <none>
2025-11-17T23:38:45.809 [DEBUG] [Thread-63309] [transport.py] [_log()] server lang: <none>
2025-11-17T23:38:45.810 [DEBUG] [Thread-63309] [transport.py] [_log()] kex follows: False
2025-11-17T23:38:45.810 [DEBUG] [Thread-63309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:38:45.810 [DEBUG] [Thread-63309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:38:45.810 [DEBUG] [Thread-63309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:38:45.810 [DEBUG] [Thread-63309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:38:45.810 [DEBUG] [Thread-63309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:38:45.810 [DEBUG] [Thread-63309] [transport.py] [_log()] Compression: none
2025-11-17T23:38:45.810 [DEBUG] [Thread-63309] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:38:45.867 [DEBUG] [Thread-63309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:38:45.868 [DEBUG] [Thread-63309] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:38:45.868 [DEBUG] [Thread-63309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:38:45.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:38:45.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:38:45.922 [DEBUG] [Thread-63309] [transport.py] [_log()] userauth is OK
2025-11-17T23:38:45.923 [DEBUG] [Thread-63309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:38:45.923 [DEBUG] [Thread-63309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:38:45.923 [DEBUG] [Thread-63309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:38:45.923 [DEBUG] [Thread-63309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:38:45.942 [INFO] [Thread-63309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:38:45.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:38:45.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:38:46.809 [DEBUG] [Thread-63309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:38:46.809 [DEBUG] [Thread-63309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:38:46.856 [DEBUG] [Thread-63309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:38:46.856 [DEBUG] [Thread-63309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:38:46.865 [DEBUG] [Thread-63309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:38:46.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:38:46.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:38:46.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:38:46.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:38:46.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:38:46.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:38:46.900 [DEBUG] [Thread-63309] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:38:51.133 [DEBUG] [Thread-63311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:38:56.765 [DEBUG] [Thread-63312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:39:11.807 [DEBUG] [Thread-63313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:39:16.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:39:16.745 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:39:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:39:16.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:39:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:39:17.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 38, 54), 11.21, 46.69, 0.0, 19.37, 13.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:39:17.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:38:54
2025-11-17T23:39:17.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:39:17.843 [DEBUG] [Thread-63314] [transport.py] [_log()] starting thread (client mode): 0xd07abca0
2025-11-17T23:39:17.843 [DEBUG] [Thread-63314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:39:17.863 [DEBUG] [Thread-63314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:39:17.864 [INFO] [Thread-63314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] client lang: <none>
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] server lang: <none>
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] kex follows: False
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] Compression: none
2025-11-17T23:39:17.865 [DEBUG] [Thread-63314] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:39:17.874 [DEBUG] [Thread-63314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:39:17.874 [DEBUG] [Thread-63314] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:39:17.874 [DEBUG] [Thread-63314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:39:17.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:39:17.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:39:17.876 [DEBUG] [Thread-63314] [transport.py] [_log()] userauth is OK
2025-11-17T23:39:17.876 [DEBUG] [Thread-63314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:39:17.877 [DEBUG] [Thread-63314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:39:17.877 [DEBUG] [Thread-63314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:39:17.877 [DEBUG] [Thread-63314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:39:17.900 [INFO] [Thread-63314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:39:17.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:39:18.516 [DEBUG] [Thread-63314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:39:18.516 [DEBUG] [Thread-63314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:39:18.516 [DEBUG] [Thread-63314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:39:18.557 [DEBUG] [Thread-63314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:39:18.557 [DEBUG] [Thread-63314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:39:18.559 [DEBUG] [Thread-63314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:39:18.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:39:18.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:39:18.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:39:18.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:39:18.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:39:18.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:39:18.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:39:18.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:39:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:39:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.901782 -999.00  +14.00  13.05     51   +4.10 1 2 1 1 1     0    0 9.34 -30.66 ZNESw 12.5 13.1 157.0 15.9 14.6 -22.6 14.5 -21.8 14.3 -21.2 14.6 -21.8
2025-11-17T23:39:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:39:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:39:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.901782
2025-11-17T23:39:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:39:18.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:39:18.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:39:18.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:39:18.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:39:18.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:38:54', tmtdew=11.21, humidity=46.69, cloud=0.0, wind=19.37, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:38:54', seeing=1.54, atlas_timestamp='2025-11-17T21:38:33.965', atlas_cloud=2, atlas_rain=1, zp_data=[0.24075000000000024, 0.20074999999999932, 0.35025000000000084, 0.30249999999999844, 0.39750000000000085, 0.33924999999999983, 0.31700000000000017, 0.2532500000000013, 0.2004999999999999, 0.33200000000000074, 0.31625000000000014, 0.3785000000000007, 0.4789999999999992, 0.548750000000001, 0.36799999999999855, 0.2729999999999997, 0.2182499999999994, 0.39949999999999974, 0.4054999999999982, 0.5652499999999989, 1.1919999999999984, 0.6322499999999991, 0.580750000000001, 0.3877500000000005, 0.3044999999999991, 0.5075000000000003, 0.39175000000000004, 0.4485000000000001, 1.0350000000000001, 0.7860000000000014, 0.6315000000000008, 0.5520000000000014, 0.4212499999999988], zp_timestamp='2025-11-17T21:36:00')
2025-11-17T23:39:18.583 [DEBUG] [Thread-63314] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:39:18.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:39:18.681 [DEBUG] [Thread-63317] [transport.py] [_log()] starting thread (client mode): 0xd07ab790
2025-11-17T23:39:18.681 [DEBUG] [Thread-63317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:39:18.700 [DEBUG] [Thread-63317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:39:18.700 [INFO] [Thread-63317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:39:18.707 [DEBUG] [Thread-63317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] client lang: <none>
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] server lang: <none>
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] kex follows: False
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:39:18.708 [DEBUG] [Thread-63317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:39:18.709 [DEBUG] [Thread-63317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:39:18.709 [DEBUG] [Thread-63317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:39:18.709 [DEBUG] [Thread-63317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:39:18.709 [DEBUG] [Thread-63317] [transport.py] [_log()] Compression: none
2025-11-17T23:39:18.709 [DEBUG] [Thread-63317] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:39:18.767 [DEBUG] [Thread-63317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:39:18.768 [DEBUG] [Thread-63317] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:39:18.768 [DEBUG] [Thread-63317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:39:18.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:39:18.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:39:18.826 [DEBUG] [Thread-63317] [transport.py] [_log()] userauth is OK
2025-11-17T23:39:18.827 [DEBUG] [Thread-63317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:39:18.827 [DEBUG] [Thread-63317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:39:18.827 [DEBUG] [Thread-63317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:39:18.827 [DEBUG] [Thread-63317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:39:18.846 [INFO] [Thread-63317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:39:18.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:39:18.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:39:19.681 [DEBUG] [Thread-63317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:39:19.681 [DEBUG] [Thread-63317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:39:19.729 [DEBUG] [Thread-63317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:39:19.729 [DEBUG] [Thread-63317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:39:19.738 [DEBUG] [Thread-63317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:39:19.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:39:19.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:39:19.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:39:19.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:39:19.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:39:19.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:39:19.772 [DEBUG] [Thread-63317] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:39:26.835 [DEBUG] [Thread-63319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:39:41.862 [DEBUG] [Thread-63320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:39:49.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:39:49.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:39:49.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:39:50.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 39, 26), 11.24, 46.6, 0.0, 18.74, 13.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:39:50.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:39:26
2025-11-17T23:39:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:39:50.718 [DEBUG] [Thread-63321] [transport.py] [_log()] starting thread (client mode): 0xd07abc70
2025-11-17T23:39:50.718 [DEBUG] [Thread-63321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:39:50.738 [DEBUG] [Thread-63321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:39:50.739 [INFO] [Thread-63321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:39:50.742 [DEBUG] [Thread-63321] [transport.py] [_log()] client lang: <none>
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] server lang: <none>
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] kex follows: False
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] Compression: none
2025-11-17T23:39:50.743 [DEBUG] [Thread-63321] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:39:50.763 [DEBUG] [Thread-63321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:39:50.763 [DEBUG] [Thread-63321] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:39:50.764 [DEBUG] [Thread-63321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:39:50.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:39:50.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:39:50.766 [DEBUG] [Thread-63321] [transport.py] [_log()] userauth is OK
2025-11-17T23:39:50.766 [DEBUG] [Thread-63321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:39:50.766 [DEBUG] [Thread-63321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:39:50.766 [DEBUG] [Thread-63321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:39:50.766 [DEBUG] [Thread-63321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:39:50.785 [INFO] [Thread-63321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:39:50.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:39:51.192 [DEBUG] [Thread-63323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:39:51.409 [DEBUG] [Thread-63321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:39:51.410 [DEBUG] [Thread-63321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:39:51.410 [DEBUG] [Thread-63321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:39:51.450 [DEBUG] [Thread-63321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:39:51.451 [DEBUG] [Thread-63321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:39:51.453 [DEBUG] [Thread-63321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:39:51.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:39:51.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:39:51.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:39:51.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:39:51.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:39:51.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:39:51.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:39:51.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:39:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:39:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.902130 -999.00  +14.00  11.49     51   +4.10 1 2 1 1 1     0    0 9.40 -30.78 ZNESw 13.3 11.5 142.5 18.6 14.6 -22.6 14.5 -21.8 14.2 -21.4 14.6 -22.0
2025-11-17T23:39:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:39:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:39:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.902130
2025-11-17T23:39:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:39:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:39:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:39:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:39:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:39:51.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:39:26', tmtdew=11.24, humidity=46.6, cloud=0.0, wind=18.74, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:39:26', seeing=1.75, atlas_timestamp='2025-11-17T21:39:04.032', atlas_cloud=2, atlas_rain=1, zp_data=[0.24075000000000024, 0.20074999999999932, 0.35025000000000084, 0.30249999999999844, 0.39750000000000085, 0.33924999999999983, 0.31700000000000017, 0.2532500000000013, 0.2004999999999999, 0.33200000000000074, 0.31625000000000014, 0.3785000000000007, 0.4789999999999992, 0.548750000000001, 0.36799999999999855, 0.2729999999999997, 0.2182499999999994, 0.39949999999999974, 0.4054999999999982, 0.5652499999999989, 1.1919999999999984, 0.6322499999999991, 0.580750000000001, 0.3877500000000005, 0.3044999999999991, 0.5075000000000003, 0.39175000000000004, 0.4485000000000001, 1.0350000000000001, 0.7860000000000014, 0.6315000000000008, 0.5520000000000014, 0.4212499999999988], zp_timestamp='2025-11-17T21:36:00')
2025-11-17T23:39:51.478 [DEBUG] [Thread-63321] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:39:51.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:39:51.575 [DEBUG] [Thread-63325] [transport.py] [_log()] starting thread (client mode): 0xd31ce740
2025-11-17T23:39:51.575 [DEBUG] [Thread-63325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:39:51.590 [DEBUG] [Thread-63325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:39:51.590 [INFO] [Thread-63325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:39:51.597 [DEBUG] [Thread-63325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] client lang: <none>
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] server lang: <none>
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] kex follows: False
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:39:51.598 [DEBUG] [Thread-63325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:39:51.599 [DEBUG] [Thread-63325] [transport.py] [_log()] Compression: none
2025-11-17T23:39:51.599 [DEBUG] [Thread-63325] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:39:51.661 [DEBUG] [Thread-63325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:39:51.662 [DEBUG] [Thread-63325] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:39:51.662 [DEBUG] [Thread-63325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:39:51.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:39:51.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:39:51.719 [DEBUG] [Thread-63325] [transport.py] [_log()] userauth is OK
2025-11-17T23:39:51.719 [DEBUG] [Thread-63325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:39:51.719 [DEBUG] [Thread-63325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:39:51.719 [DEBUG] [Thread-63325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:39:51.719 [DEBUG] [Thread-63325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:39:51.740 [INFO] [Thread-63325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:39:51.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:39:51.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:39:52.598 [DEBUG] [Thread-63325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:39:52.599 [DEBUG] [Thread-63325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:39:52.646 [DEBUG] [Thread-63325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:39:52.646 [DEBUG] [Thread-63325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:39:52.655 [DEBUG] [Thread-63325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:39:52.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:39:52.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:39:52.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:39:52.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:39:52.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:39:52.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:39:52.690 [DEBUG] [Thread-63325] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:39:56.889 [DEBUG] [Thread-63327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:40:11.933 [DEBUG] [Thread-63328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:40:16.948 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:40:16.949 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:40:22.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:40:22.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:40:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:40:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 39, 58), 11.16, 46.7, 0.0, 20.1, 13.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:40:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:39:58
2025-11-17T23:40:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:40:23.639 [DEBUG] [Thread-63329] [transport.py] [_log()] starting thread (client mode): 0xd31cfee0
2025-11-17T23:40:23.639 [DEBUG] [Thread-63329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:40:23.654 [DEBUG] [Thread-63329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:40:23.655 [INFO] [Thread-63329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:40:23.658 [DEBUG] [Thread-63329] [transport.py] [_log()] client lang: <none>
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] server lang: <none>
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] kex follows: False
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] Compression: none
2025-11-17T23:40:23.659 [DEBUG] [Thread-63329] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:40:23.675 [DEBUG] [Thread-63329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:40:23.675 [DEBUG] [Thread-63329] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:40:23.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:40:23.676 [DEBUG] [Thread-63329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:40:23.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:40:23.678 [DEBUG] [Thread-63329] [transport.py] [_log()] userauth is OK
2025-11-17T23:40:23.678 [DEBUG] [Thread-63329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:40:23.678 [DEBUG] [Thread-63329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:40:23.678 [DEBUG] [Thread-63329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:40:23.678 [DEBUG] [Thread-63329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:40:23.697 [INFO] [Thread-63329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:40:23.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:40:24.519 [DEBUG] [Thread-63329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:40:24.519 [DEBUG] [Thread-63329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:40:24.519 [DEBUG] [Thread-63329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:40:24.560 [DEBUG] [Thread-63329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:40:24.560 [DEBUG] [Thread-63329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:40:24.563 [DEBUG] [Thread-63329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:40:24.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:40:24.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:40:24.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:40:24.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:40:24.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:40:24.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:40:24.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:40:24.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:40:24.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:40:24.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.902476 -999.00  +14.00  14.48     51   +4.10 1 2 1 1 1     0    0 9.16 -33.30 ZNESw 13.5 14.5 139.4 18.2 14.6 -22.6 14.4 -22.0 14.3 -21.4 -999.0 -999.0
2025-11-17T23:40:24.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:40:24.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:40:24.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.902476
2025-11-17T23:40:24.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:40:24.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:40:24.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:40:24.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:40:24.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:40:24.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:39:58', tmtdew=11.16, humidity=46.7, cloud=0.0, wind=20.1, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:39:58', seeing=2.02, atlas_timestamp='2025-11-17T21:39:33.926', atlas_cloud=2, atlas_rain=1, zp_data=[0.24075000000000024, 0.20074999999999932, 0.35025000000000084, 0.30249999999999844, 0.39750000000000085, 0.33924999999999983, 0.31700000000000017, 0.2532500000000013, 0.2004999999999999, 0.33200000000000074, 0.31625000000000014, 0.3785000000000007, 0.4789999999999992, 0.548750000000001, 0.36799999999999855, 0.2729999999999997, 0.2182499999999994, 0.39949999999999974, 0.4054999999999982, 0.5652499999999989, 1.1919999999999984, 0.6322499999999991, 0.580750000000001, 0.3877500000000005, 0.3044999999999991, 0.5075000000000003, 0.39175000000000004, 0.4485000000000001, 1.0350000000000001, 0.7860000000000014, 0.6315000000000008, 0.5520000000000014, 0.4212499999999988], zp_timestamp='2025-11-17T21:36:00')
2025-11-17T23:40:24.587 [DEBUG] [Thread-63329] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:40:24.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:40:24.687 [DEBUG] [Thread-63332] [transport.py] [_log()] starting thread (client mode): 0xd0712b90
2025-11-17T23:40:24.687 [DEBUG] [Thread-63332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:40:24.706 [DEBUG] [Thread-63332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:40:24.706 [INFO] [Thread-63332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:40:24.713 [DEBUG] [Thread-63332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:40:24.713 [DEBUG] [Thread-63332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] client lang: <none>
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] server lang: <none>
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] kex follows: False
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:40:24.714 [DEBUG] [Thread-63332] [transport.py] [_log()] Compression: none
2025-11-17T23:40:24.715 [DEBUG] [Thread-63332] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:40:24.771 [DEBUG] [Thread-63332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:40:24.771 [DEBUG] [Thread-63332] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:40:24.772 [DEBUG] [Thread-63332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:40:24.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:40:24.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:40:24.827 [DEBUG] [Thread-63332] [transport.py] [_log()] userauth is OK
2025-11-17T23:40:24.827 [DEBUG] [Thread-63332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:40:24.827 [DEBUG] [Thread-63332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:40:24.827 [DEBUG] [Thread-63332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:40:24.827 [DEBUG] [Thread-63332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:40:24.846 [INFO] [Thread-63332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:40:24.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:40:24.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:40:25.681 [DEBUG] [Thread-63332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:40:25.682 [DEBUG] [Thread-63332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:40:25.729 [DEBUG] [Thread-63332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:40:25.729 [DEBUG] [Thread-63332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:40:25.738 [DEBUG] [Thread-63332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:40:25.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:40:25.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:40:25.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:40:25.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:40:25.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:40:25.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:40:25.771 [DEBUG] [Thread-63332] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:40:26.961 [DEBUG] [Thread-63334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:40:41.999 [DEBUG] [Thread-63335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:40:51.249 [DEBUG] [Thread-63336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:40:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:40:55.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:40:55.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:40:56.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 40, 30), 11.1, 46.9, 0.0, 18.17, 13.84, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:40:56.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:40:30
2025-11-17T23:40:56.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:40:56.758 [DEBUG] [Thread-63337] [transport.py] [_log()] starting thread (client mode): 0xd0710fd0
2025-11-17T23:40:56.758 [DEBUG] [Thread-63337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:40:56.777 [DEBUG] [Thread-63337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:40:56.777 [INFO] [Thread-63337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] client lang: <none>
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] server lang: <none>
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] kex follows: False
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] Compression: none
2025-11-17T23:40:56.780 [DEBUG] [Thread-63337] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:40:56.796 [DEBUG] [Thread-63337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:40:56.796 [DEBUG] [Thread-63337] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:40:56.796 [DEBUG] [Thread-63337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:40:56.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:40:56.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:40:56.797 [DEBUG] [Thread-63337] [transport.py] [_log()] userauth is OK
2025-11-17T23:40:56.797 [DEBUG] [Thread-63337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:40:56.797 [DEBUG] [Thread-63337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:40:56.797 [DEBUG] [Thread-63337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:40:56.797 [DEBUG] [Thread-63337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:40:56.807 [INFO] [Thread-63337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:40:56.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:40:57.026 [DEBUG] [Thread-63339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:40:57.435 [DEBUG] [Thread-63337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:40:57.435 [DEBUG] [Thread-63337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:40:57.435 [DEBUG] [Thread-63337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:40:57.476 [DEBUG] [Thread-63337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:40:57.476 [DEBUG] [Thread-63337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:40:57.478 [DEBUG] [Thread-63337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:40:57.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:40:57.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:40:57.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:40:57.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:40:57.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:40:57.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:40:57.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.902824 -999.00  +13.90  14.70     51   +4.10 1 2 1 1 1     0    0 9.30 -36.30 ZNESw 12.6 14.7 148.8 19.3 14.6 -22.7 14.5 -21.8 -999.0 -999.0 14.5 -22.1
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.902824
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:40:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:40:30', tmtdew=11.1, humidity=46.9, cloud=0.0, wind=18.17, temperature=13.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:40:30', seeing=2.02, atlas_timestamp='2025-11-17T21:40:03.994', atlas_cloud=2, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:39:00')
2025-11-17T23:40:57.495 [DEBUG] [Thread-63337] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:40:57.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:40:57.580 [DEBUG] [Thread-63341] [transport.py] [_log()] starting thread (client mode): 0xd07ab970
2025-11-17T23:40:57.580 [DEBUG] [Thread-63341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:40:57.593 [DEBUG] [Thread-63341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:40:57.593 [INFO] [Thread-63341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] client lang: <none>
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] server lang: <none>
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] kex follows: False
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] Compression: none
2025-11-17T23:40:57.601 [DEBUG] [Thread-63341] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:40:57.656 [DEBUG] [Thread-63341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:40:57.657 [DEBUG] [Thread-63341] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:40:57.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:40:57.657 [DEBUG] [Thread-63341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:40:57.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:40:57.716 [DEBUG] [Thread-63341] [transport.py] [_log()] userauth is OK
2025-11-17T23:40:57.716 [DEBUG] [Thread-63341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:40:57.716 [DEBUG] [Thread-63341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:40:57.716 [DEBUG] [Thread-63341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:40:57.716 [DEBUG] [Thread-63341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:40:57.729 [INFO] [Thread-63341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:40:57.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:40:57.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:40:58.547 [DEBUG] [Thread-63341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:40:58.547 [DEBUG] [Thread-63341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:40:58.595 [DEBUG] [Thread-63341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:40:58.595 [DEBUG] [Thread-63341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:40:58.603 [DEBUG] [Thread-63341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:40:58.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:40:58.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:40:58.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:40:58.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:40:58.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:40:58.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:40:58.633 [DEBUG] [Thread-63341] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:41:12.054 [DEBUG] [Thread-63343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:41:17.153 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:41:17.154 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:41:27.097 [DEBUG] [Thread-63344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:41:28.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:41:28.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:41:28.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:41:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 41, 2), 11.1, 46.89, 0.0, 18.47, 13.77, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:41:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:41:02
2025-11-17T23:41:29.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:41:29.563 [DEBUG] [Thread-63345] [transport.py] [_log()] starting thread (client mode): 0xd0711d50
2025-11-17T23:41:29.564 [DEBUG] [Thread-63345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:41:29.584 [DEBUG] [Thread-63345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:41:29.584 [INFO] [Thread-63345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] client lang: <none>
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] server lang: <none>
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] kex follows: False
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:41:29.587 [DEBUG] [Thread-63345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:41:29.588 [DEBUG] [Thread-63345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:41:29.588 [DEBUG] [Thread-63345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:41:29.588 [DEBUG] [Thread-63345] [transport.py] [_log()] Compression: none
2025-11-17T23:41:29.588 [DEBUG] [Thread-63345] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:41:29.596 [DEBUG] [Thread-63345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:41:29.596 [DEBUG] [Thread-63345] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:41:29.597 [DEBUG] [Thread-63345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:41:29.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:41:29.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:41:29.599 [DEBUG] [Thread-63345] [transport.py] [_log()] userauth is OK
2025-11-17T23:41:29.599 [DEBUG] [Thread-63345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:41:29.599 [DEBUG] [Thread-63345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:41:29.599 [DEBUG] [Thread-63345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:41:29.599 [DEBUG] [Thread-63345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:41:29.617 [INFO] [Thread-63345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:41:29.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:41:30.412 [DEBUG] [Thread-63345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:41:30.412 [DEBUG] [Thread-63345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:41:30.413 [DEBUG] [Thread-63345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:41:30.453 [DEBUG] [Thread-63345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:41:30.453 [DEBUG] [Thread-63345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:41:30.456 [DEBUG] [Thread-63345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:41:30.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:41:30.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:41:30.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:41:30.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:41:30.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:41:30.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:41:30.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.903171 -999.00  +13.90  14.05     51   +4.10 1 1 1 1 1     0    0 9.17 -38.29 ZNESW 13.6 14.1 141.2 16.2 14.6 -22.7 14.4 -21.9 14.2 -21.4 14.5 -21.9
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.903171
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:41:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:41:02', tmtdew=11.1, humidity=46.89, cloud=0.0, wind=18.47, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:41:02', seeing=2.07, atlas_timestamp='2025-11-17T21:40:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:39:00')
2025-11-17T23:41:30.483 [DEBUG] [Thread-63345] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:41:30.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:41:30.567 [DEBUG] [Thread-63348] [transport.py] [_log()] starting thread (client mode): 0xd31ce6b0
2025-11-17T23:41:30.567 [DEBUG] [Thread-63348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:41:30.581 [DEBUG] [Thread-63348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:41:30.581 [INFO] [Thread-63348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] client lang: <none>
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] server lang: <none>
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] kex follows: False
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:41:30.589 [DEBUG] [Thread-63348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:41:30.590 [DEBUG] [Thread-63348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:41:30.590 [DEBUG] [Thread-63348] [transport.py] [_log()] Compression: none
2025-11-17T23:41:30.590 [DEBUG] [Thread-63348] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:41:30.647 [DEBUG] [Thread-63348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:41:30.647 [DEBUG] [Thread-63348] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:41:30.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:41:30.648 [DEBUG] [Thread-63348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:41:30.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:41:30.703 [DEBUG] [Thread-63348] [transport.py] [_log()] userauth is OK
2025-11-17T23:41:30.703 [DEBUG] [Thread-63348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:41:30.703 [DEBUG] [Thread-63348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:41:30.703 [DEBUG] [Thread-63348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:41:30.703 [DEBUG] [Thread-63348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:41:30.721 [INFO] [Thread-63348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:41:30.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:41:30.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:41:31.536 [DEBUG] [Thread-63348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:41:31.537 [DEBUG] [Thread-63348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:41:31.584 [DEBUG] [Thread-63348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:41:31.584 [DEBUG] [Thread-63348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:41:31.593 [DEBUG] [Thread-63348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:41:31.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:41:31.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:41:31.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:41:31.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:41:31.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:41:31.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:41:31.627 [DEBUG] [Thread-63348] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:41:42.125 [DEBUG] [Thread-63350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:41:51.306 [DEBUG] [Thread-63351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:41:57.167 [DEBUG] [Thread-63352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:42:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:42:01.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:42:01.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:42:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 41, 34), 11.13, 47.04, 0.0, 21.77, 14.17, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:42:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:41:34
2025-11-17T23:42:02.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:42:02.549 [DEBUG] [Thread-63353] [transport.py] [_log()] starting thread (client mode): 0xd31cffd0
2025-11-17T23:42:02.549 [DEBUG] [Thread-63353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:42:02.569 [DEBUG] [Thread-63353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:42:02.569 [INFO] [Thread-63353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:42:02.572 [DEBUG] [Thread-63353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:42:02.572 [DEBUG] [Thread-63353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] client lang: <none>
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] server lang: <none>
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] kex follows: False
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] Compression: none
2025-11-17T23:42:02.573 [DEBUG] [Thread-63353] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:42:02.589 [DEBUG] [Thread-63353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:42:02.590 [DEBUG] [Thread-63353] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:42:02.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:42:02.590 [DEBUG] [Thread-63353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:42:02.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:42:02.592 [DEBUG] [Thread-63353] [transport.py] [_log()] userauth is OK
2025-11-17T23:42:02.592 [DEBUG] [Thread-63353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:42:02.592 [DEBUG] [Thread-63353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:42:02.592 [DEBUG] [Thread-63353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:42:02.592 [DEBUG] [Thread-63353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:42:02.623 [INFO] [Thread-63353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:42:02.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:42:03.298 [DEBUG] [Thread-63353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:42:03.298 [DEBUG] [Thread-63353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:42:03.299 [DEBUG] [Thread-63353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:42:03.340 [DEBUG] [Thread-63353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:42:03.340 [DEBUG] [Thread-63353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:42:03.343 [DEBUG] [Thread-63353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:42:03.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:42:03.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:42:03.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:42:03.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:42:03.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:42:03.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:42:03.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:42:03.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:42:03.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:42:03.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.903865 -999.00  +13.80  15.67     51   +4.10 1 1 1 1 1     0    0 9.09 -43.00 ZNESW 14.1 15.7 142.8 20.4 14.5 -22.6 14.4 -21.8 14.2 -21.5 14.5 -21.9
2025-11-17T23:42:03.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:42:03.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:42:03.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.903865
2025-11-17T23:42:03.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:42:03.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:42:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:42:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:42:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:42:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:41:34', tmtdew=11.13, humidity=47.04, cloud=0.0, wind=21.77, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:41:34', seeing=1.54, atlas_timestamp='2025-11-17T21:41:33.936', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:39:00')
2025-11-17T23:42:03.371 [DEBUG] [Thread-63353] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:42:03.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:42:03.468 [DEBUG] [Thread-63356] [transport.py] [_log()] starting thread (client mode): 0xd0711d50
2025-11-17T23:42:03.468 [DEBUG] [Thread-63356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:42:03.483 [DEBUG] [Thread-63356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:42:03.483 [INFO] [Thread-63356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:42:03.490 [DEBUG] [Thread-63356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:42:03.490 [DEBUG] [Thread-63356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] client lang: <none>
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] server lang: <none>
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] kex follows: False
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] Compression: none
2025-11-17T23:42:03.491 [DEBUG] [Thread-63356] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:42:03.550 [DEBUG] [Thread-63356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:42:03.551 [DEBUG] [Thread-63356] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:42:03.551 [DEBUG] [Thread-63356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:42:03.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:42:03.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:42:03.607 [DEBUG] [Thread-63356] [transport.py] [_log()] userauth is OK
2025-11-17T23:42:03.607 [DEBUG] [Thread-63356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:42:03.607 [DEBUG] [Thread-63356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:42:03.607 [DEBUG] [Thread-63356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:42:03.607 [DEBUG] [Thread-63356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:42:03.627 [INFO] [Thread-63356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:42:03.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:42:03.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:42:04.470 [DEBUG] [Thread-63356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:42:04.470 [DEBUG] [Thread-63356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:42:04.517 [DEBUG] [Thread-63356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:42:04.517 [DEBUG] [Thread-63356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:42:04.527 [DEBUG] [Thread-63356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:42:04.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:42:04.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:42:04.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:42:04.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:42:04.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:42:04.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:42:04.561 [DEBUG] [Thread-63356] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:42:12.196 [DEBUG] [Thread-63358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:42:17.357 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:42:17.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:42:27.229 [DEBUG] [Thread-63359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:42:34.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:42:34.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:42:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:42:35.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 42, 6), 10.91, 47.52, 0.0, 17.31, 13.82, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:42:35.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:42:06
2025-11-17T23:42:35.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:42:35.479 [DEBUG] [Thread-63360] [transport.py] [_log()] starting thread (client mode): 0xd07111b0
2025-11-17T23:42:35.479 [DEBUG] [Thread-63360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:42:35.500 [DEBUG] [Thread-63360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:42:35.500 [INFO] [Thread-63360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:42:35.504 [DEBUG] [Thread-63360] [transport.py] [_log()] client lang: <none>
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] server lang: <none>
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] kex follows: False
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] Compression: none
2025-11-17T23:42:35.505 [DEBUG] [Thread-63360] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:42:35.522 [DEBUG] [Thread-63360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:42:35.523 [DEBUG] [Thread-63360] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:42:35.524 [DEBUG] [Thread-63360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:42:35.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:42:35.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:42:35.526 [DEBUG] [Thread-63360] [transport.py] [_log()] userauth is OK
2025-11-17T23:42:35.526 [DEBUG] [Thread-63360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:42:35.526 [DEBUG] [Thread-63360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:42:35.526 [DEBUG] [Thread-63360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:42:35.526 [DEBUG] [Thread-63360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:42:35.549 [INFO] [Thread-63360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:42:35.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:42:36.286 [DEBUG] [Thread-63360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:42:36.286 [DEBUG] [Thread-63360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:42:36.286 [DEBUG] [Thread-63360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:42:36.326 [DEBUG] [Thread-63360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:42:36.327 [DEBUG] [Thread-63360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:42:36.329 [DEBUG] [Thread-63360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:42:36.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:42:36.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:42:36.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:42:36.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:42:36.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:42:36.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:42:36.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:42:36.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:42:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:42:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.904212 -999.00  +13.80  15.75     52   +4.20 1 1 1 1 1     0    0 8.91 -45.42 ZNESW 11.3 15.8 139.4 24.9 14.5 -22.6 14.4 -21.7 14.2 -21.4 14.5 -22.0
2025-11-17T23:42:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:42:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:42:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.904212
2025-11-17T23:42:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:42:36.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:42:36.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:42:36.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:42:36.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:42:36.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:42:06', tmtdew=10.91, humidity=47.52, cloud=0.0, wind=17.31, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:42:06', seeing=2.2, atlas_timestamp='2025-11-17T21:42:03.917', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:39:00')
2025-11-17T23:42:36.354 [DEBUG] [Thread-63360] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:42:36.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:42:36.449 [DEBUG] [Thread-63363] [transport.py] [_log()] starting thread (client mode): 0xd0755120
2025-11-17T23:42:36.449 [DEBUG] [Thread-63363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:42:36.464 [DEBUG] [Thread-63363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:42:36.464 [INFO] [Thread-63363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] client lang: <none>
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] server lang: <none>
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] kex follows: False
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:42:36.472 [DEBUG] [Thread-63363] [transport.py] [_log()] Compression: none
2025-11-17T23:42:36.473 [DEBUG] [Thread-63363] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:42:36.530 [DEBUG] [Thread-63363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:42:36.531 [DEBUG] [Thread-63363] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:42:36.531 [DEBUG] [Thread-63363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:42:36.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:42:36.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:42:36.587 [DEBUG] [Thread-63363] [transport.py] [_log()] userauth is OK
2025-11-17T23:42:36.587 [DEBUG] [Thread-63363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:42:36.587 [DEBUG] [Thread-63363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:42:36.587 [DEBUG] [Thread-63363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:42:36.587 [DEBUG] [Thread-63363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:42:36.602 [INFO] [Thread-63363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:42:36.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:42:36.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:42:37.428 [DEBUG] [Thread-63363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:42:37.428 [DEBUG] [Thread-63363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:42:37.476 [DEBUG] [Thread-63363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:42:37.476 [DEBUG] [Thread-63363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:42:37.485 [DEBUG] [Thread-63363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:42:37.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:42:37.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:42:37.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:42:37.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:42:37.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:42:37.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:42:37.520 [DEBUG] [Thread-63363] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:42:42.258 [DEBUG] [Thread-63365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:42:51.359 [DEBUG] [Thread-63366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:42:57.305 [DEBUG] [Thread-63367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:43:07.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:43:07.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:43:07.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:43:08.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 42, 38), 10.95, 47.4, 0.0, 18.37, 13.89, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:43:08.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:42:38
2025-11-17T23:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:43:08.482 [DEBUG] [Thread-63368] [transport.py] [_log()] starting thread (client mode): 0xd31cea70
2025-11-17T23:43:08.483 [DEBUG] [Thread-63368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:43:08.502 [DEBUG] [Thread-63368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:43:08.502 [INFO] [Thread-63368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:43:08.505 [DEBUG] [Thread-63368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:43:08.505 [DEBUG] [Thread-63368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:43:08.505 [DEBUG] [Thread-63368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:43:08.505 [DEBUG] [Thread-63368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:43:08.505 [DEBUG] [Thread-63368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:43:08.505 [DEBUG] [Thread-63368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] client lang: <none>
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] server lang: <none>
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] kex follows: False
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:43:08.506 [DEBUG] [Thread-63368] [transport.py] [_log()] Compression: none
2025-11-17T23:43:08.507 [DEBUG] [Thread-63368] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:43:08.524 [DEBUG] [Thread-63368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:43:08.524 [DEBUG] [Thread-63368] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:43:08.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:43:08.525 [DEBUG] [Thread-63368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:43:08.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:43:08.527 [DEBUG] [Thread-63368] [transport.py] [_log()] userauth is OK
2025-11-17T23:43:08.528 [DEBUG] [Thread-63368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:43:08.528 [DEBUG] [Thread-63368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:43:08.528 [DEBUG] [Thread-63368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:43:08.528 [DEBUG] [Thread-63368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:43:08.550 [INFO] [Thread-63368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:43:08.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:43:09.143 [DEBUG] [Thread-63368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:43:09.144 [DEBUG] [Thread-63368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:43:09.144 [DEBUG] [Thread-63368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:43:09.185 [DEBUG] [Thread-63368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:43:09.185 [DEBUG] [Thread-63368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:43:09.188 [DEBUG] [Thread-63368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:43:09.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:43:09.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:43:09.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:43:09.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:43:09.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:43:09.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:43:09.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:43:09.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:43:09.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:43:09.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.904559 -999.00  +13.80  11.74     52   +4.20 1 1 1 1 1     0    0 8.78 -46.02 ZNESW 13.6 11.7 141.2 17.3 14.5 -22.6 14.3 -21.8 14.2 -21.5 14.5 -22.1
2025-11-17T23:43:09.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:43:09.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:43:09.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.904559
2025-11-17T23:43:09.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:43:09.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:43:09.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:43:09.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:43:09.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:43:09.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:42:38', tmtdew=10.95, humidity=47.4, cloud=0.0, wind=18.37, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:42:38', seeing=2.12, atlas_timestamp='2025-11-17T21:42:33.898', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:39:00')
2025-11-17T23:43:09.210 [DEBUG] [Thread-63368] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:43:09.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:43:09.305 [DEBUG] [Thread-63371] [transport.py] [_log()] starting thread (client mode): 0xd07ab400
2025-11-17T23:43:09.305 [DEBUG] [Thread-63371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:43:09.319 [DEBUG] [Thread-63371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:43:09.319 [INFO] [Thread-63371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:43:09.327 [DEBUG] [Thread-63371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:43:09.327 [DEBUG] [Thread-63371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:43:09.327 [DEBUG] [Thread-63371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:43:09.327 [DEBUG] [Thread-63371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:43:09.327 [DEBUG] [Thread-63371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:43:09.327 [DEBUG] [Thread-63371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] client lang: <none>
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] server lang: <none>
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] kex follows: False
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:43:09.328 [DEBUG] [Thread-63371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:43:09.329 [DEBUG] [Thread-63371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:43:09.329 [DEBUG] [Thread-63371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:43:09.329 [DEBUG] [Thread-63371] [transport.py] [_log()] Compression: none
2025-11-17T23:43:09.329 [DEBUG] [Thread-63371] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:43:09.387 [DEBUG] [Thread-63371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:43:09.387 [DEBUG] [Thread-63371] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:43:09.388 [DEBUG] [Thread-63371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:43:09.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:43:09.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:43:09.443 [DEBUG] [Thread-63371] [transport.py] [_log()] userauth is OK
2025-11-17T23:43:09.443 [DEBUG] [Thread-63371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:43:09.444 [DEBUG] [Thread-63371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:43:09.444 [DEBUG] [Thread-63371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:43:09.444 [DEBUG] [Thread-63371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:43:09.461 [INFO] [Thread-63371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:43:09.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:43:09.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:43:10.286 [DEBUG] [Thread-63371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:43:10.286 [DEBUG] [Thread-63371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:43:10.334 [DEBUG] [Thread-63371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:43:10.334 [DEBUG] [Thread-63371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:43:10.342 [DEBUG] [Thread-63371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:43:10.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:43:10.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:43:10.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:43:10.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:43:10.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:43:10.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:43:10.375 [DEBUG] [Thread-63371] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:43:12.338 [DEBUG] [Thread-63373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:43:17.562 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:43:17.563 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:43:27.383 [DEBUG] [Thread-63374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:43:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:43:40.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:43:40.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:43:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 43, 10), 10.9, 47.57, 0.0, 17.68, 13.87, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:43:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:43:10
2025-11-17T23:43:41.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:43:41.330 [DEBUG] [Thread-63375] [transport.py] [_log()] starting thread (client mode): 0xd31cd330
2025-11-17T23:43:41.330 [DEBUG] [Thread-63375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:43:41.344 [DEBUG] [Thread-63375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:43:41.344 [INFO] [Thread-63375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:43:41.347 [DEBUG] [Thread-63375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:43:41.347 [DEBUG] [Thread-63375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] client lang: <none>
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] server lang: <none>
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] kex follows: False
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] Compression: none
2025-11-17T23:43:41.348 [DEBUG] [Thread-63375] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:43:41.363 [DEBUG] [Thread-63375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:43:41.364 [DEBUG] [Thread-63375] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:43:41.364 [DEBUG] [Thread-63375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:43:41.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:43:41.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:43:41.366 [DEBUG] [Thread-63375] [transport.py] [_log()] userauth is OK
2025-11-17T23:43:41.366 [DEBUG] [Thread-63375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:43:41.367 [DEBUG] [Thread-63375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:43:41.367 [DEBUG] [Thread-63375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:43:41.367 [DEBUG] [Thread-63375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:43:41.390 [INFO] [Thread-63375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:43:41.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:43:42.146 [DEBUG] [Thread-63375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:43:42.146 [DEBUG] [Thread-63375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:43:42.147 [DEBUG] [Thread-63375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:43:42.187 [DEBUG] [Thread-63375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:43:42.187 [DEBUG] [Thread-63375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:43:42.190 [DEBUG] [Thread-63375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:43:42.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:43:42.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:43:42.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:43:42.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:43:42.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:43:42.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:43:42.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.904907 -999.00  +13.80  11.04     52   +4.20 1 1 1 1 1     0    0 8.65 -44.55 ZNESW 13.4 11.0 147.2 17.4 14.5 -22.6 14.4 -21.9 14.2 -21.4 14.5 -22.1
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.904907
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:43:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:43:10', tmtdew=10.9, humidity=47.57, cloud=0.0, wind=17.68, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:43:10', seeing=2.0, atlas_timestamp='2025-11-17T21:43:03.965', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:42:00')
2025-11-17T23:43:42.210 [DEBUG] [Thread-63375] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:43:42.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:43:42.303 [DEBUG] [Thread-63378] [transport.py] [_log()] starting thread (client mode): 0xd0713f40
2025-11-17T23:43:42.303 [DEBUG] [Thread-63378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:43:42.317 [DEBUG] [Thread-63378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:43:42.317 [INFO] [Thread-63378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] client lang: <none>
2025-11-17T23:43:42.324 [DEBUG] [Thread-63378] [transport.py] [_log()] server lang: <none>
2025-11-17T23:43:42.325 [DEBUG] [Thread-63378] [transport.py] [_log()] kex follows: False
2025-11-17T23:43:42.325 [DEBUG] [Thread-63378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:43:42.325 [DEBUG] [Thread-63378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:43:42.325 [DEBUG] [Thread-63378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:43:42.325 [DEBUG] [Thread-63378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:43:42.325 [DEBUG] [Thread-63378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:43:42.325 [DEBUG] [Thread-63378] [transport.py] [_log()] Compression: none
2025-11-17T23:43:42.325 [DEBUG] [Thread-63378] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:43:42.381 [DEBUG] [Thread-63378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:43:42.382 [DEBUG] [Thread-63378] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:43:42.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:43:42.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:43:42.382 [DEBUG] [Thread-63378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:43:42.412 [DEBUG] [Thread-63380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:43:42.438 [DEBUG] [Thread-63378] [transport.py] [_log()] userauth is OK
2025-11-17T23:43:42.438 [DEBUG] [Thread-63378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:43:42.439 [DEBUG] [Thread-63378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:43:42.439 [DEBUG] [Thread-63378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:43:42.439 [DEBUG] [Thread-63378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:43:42.456 [INFO] [Thread-63378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:43:42.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:43:42.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:43:43.266 [DEBUG] [Thread-63378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:43:43.266 [DEBUG] [Thread-63378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:43:43.314 [DEBUG] [Thread-63378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:43:43.314 [DEBUG] [Thread-63378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:43:43.322 [DEBUG] [Thread-63378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:43:43.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:43:43.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:43: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
2025-11-17T23:43:43.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:43:43.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:43:43.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:43:43.354 [DEBUG] [Thread-63378] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:43:51.435 [DEBUG] [Thread-63381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:43:57.443 [DEBUG] [Thread-63382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:44:12.476 [DEBUG] [Thread-63383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:44:13.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:44:13.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:44:13.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:44:14.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 43, 42), 10.93, 47.6, 0.0, 19.34, 13.79, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:44:14.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:43:42
2025-11-17T23:44:14.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:44:14.306 [DEBUG] [Thread-63384] [transport.py] [_log()] starting thread (client mode): 0xd317eb90
2025-11-17T23:44:14.306 [DEBUG] [Thread-63384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:44:14.326 [DEBUG] [Thread-63384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:44:14.326 [INFO] [Thread-63384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:44:14.330 [DEBUG] [Thread-63384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] client lang: <none>
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] server lang: <none>
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] kex follows: False
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] Compression: none
2025-11-17T23:44:14.331 [DEBUG] [Thread-63384] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:44:14.350 [DEBUG] [Thread-63384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:44:14.350 [DEBUG] [Thread-63384] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:44:14.351 [DEBUG] [Thread-63384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:44:14.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:44:14.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:44:14.353 [DEBUG] [Thread-63384] [transport.py] [_log()] userauth is OK
2025-11-17T23:44:14.353 [DEBUG] [Thread-63384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:44:14.353 [DEBUG] [Thread-63384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:44:14.353 [DEBUG] [Thread-63384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:44:14.353 [DEBUG] [Thread-63384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:44:14.376 [INFO] [Thread-63384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:44:14.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:44:15.014 [DEBUG] [Thread-63384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:44:15.015 [DEBUG] [Thread-63384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:44:15.015 [DEBUG] [Thread-63384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:44:15.055 [DEBUG] [Thread-63384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:44:15.055 [DEBUG] [Thread-63384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:44:15.057 [DEBUG] [Thread-63384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:44:15.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:44:15.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:44:15.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:44:15.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:44:15.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:44:15.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:44:15.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:44:15.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:44:15.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:44:15.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.905254 -999.00  +13.80  11.73     52   +4.20 1 1 1 1 1     0    0 8.76 -46.66 ZNESW 13.4 11.7 154.2 18.7 14.5 -22.5 14.3 -21.9 14.2 -21.4 14.4 -22.1
2025-11-17T23:44:15.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:44:15.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:44:15.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.905254
2025-11-17T23:44:15.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:44:15.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:44:15.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:44:15.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:44:15.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:44:15.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:43:42', tmtdew=10.93, humidity=47.6, cloud=0.0, wind=19.34, temperature=13.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:43:42', seeing=2.01, atlas_timestamp='2025-11-17T21:43:33.946', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:42:00')
2025-11-17T23:44:15.076 [DEBUG] [Thread-63384] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:44:15.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:44:15.162 [DEBUG] [Thread-63387] [transport.py] [_log()] starting thread (client mode): 0xd07562f0
2025-11-17T23:44:15.162 [DEBUG] [Thread-63387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:44:15.177 [DEBUG] [Thread-63387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:44:15.177 [INFO] [Thread-63387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] client lang: <none>
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] server lang: <none>
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] kex follows: False
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:44:15.188 [DEBUG] [Thread-63387] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:44:15.189 [DEBUG] [Thread-63387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:44:15.189 [DEBUG] [Thread-63387] [transport.py] [_log()] Compression: none
2025-11-17T23:44:15.189 [DEBUG] [Thread-63387] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:44:15.241 [DEBUG] [Thread-63387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:44:15.242 [DEBUG] [Thread-63387] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:44:15.242 [DEBUG] [Thread-63387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:44:15.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:44:15.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:44:15.299 [DEBUG] [Thread-63387] [transport.py] [_log()] userauth is OK
2025-11-17T23:44:15.299 [DEBUG] [Thread-63387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:44:15.299 [DEBUG] [Thread-63387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:44:15.299 [DEBUG] [Thread-63387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:44:15.299 [DEBUG] [Thread-63387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:44:15.317 [INFO] [Thread-63387] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:44:15.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:44:15.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:44:16.175 [DEBUG] [Thread-63387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:44:16.175 [DEBUG] [Thread-63387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:44:16.223 [DEBUG] [Thread-63387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:44:16.223 [DEBUG] [Thread-63387] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:44:16.231 [DEBUG] [Thread-63387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:44:16.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:44:16.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:44: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') -> 00000000
2025-11-17T23:44:16.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:44:16.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:44:16.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:44:16.264 [DEBUG] [Thread-63387] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:44:17.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:44:17.768 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:44:27.504 [DEBUG] [Thread-63389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:44:42.556 [DEBUG] [Thread-63390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:44:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:44:46.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:44:46.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:44:46.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 44, 14), 10.91, 47.67, 0.0, 19.18, 13.8, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:44:46.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:44:14
2025-11-17T23:44:47.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:44:47.249 [DEBUG] [Thread-63391] [transport.py] [_log()] starting thread (client mode): 0xd31ccf10
2025-11-17T23:44:47.249 [DEBUG] [Thread-63391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:44:47.268 [DEBUG] [Thread-63391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:44:47.268 [INFO] [Thread-63391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] client lang: <none>
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] server lang: <none>
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] kex follows: False
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] Compression: none
2025-11-17T23:44:47.272 [DEBUG] [Thread-63391] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:44:47.288 [DEBUG] [Thread-63391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:44:47.288 [DEBUG] [Thread-63391] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:44:47.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:44:47.289 [DEBUG] [Thread-63391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:44:47.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:44:47.289 [DEBUG] [Thread-63391] [transport.py] [_log()] userauth is OK
2025-11-17T23:44:47.289 [DEBUG] [Thread-63391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:44:47.289 [DEBUG] [Thread-63391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:44:47.289 [DEBUG] [Thread-63391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:44:47.290 [DEBUG] [Thread-63391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:44:47.301 [INFO] [Thread-63391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:44:47.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:44:47.948 [DEBUG] [Thread-63391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:44:47.948 [DEBUG] [Thread-63391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:44:47.948 [DEBUG] [Thread-63391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:44:47.989 [DEBUG] [Thread-63391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:44:47.989 [DEBUG] [Thread-63391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:44:47.991 [DEBUG] [Thread-63391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:44:48.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:44:48.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:44:48.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:44:48.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:44:48.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:44:48.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:44:48.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.905601 -999.00  +13.80  12.38     52   +4.20 1 1 1 1 1     0    0 8.95 -50.91 ZNESW 12.4 12.4 153.8 18.3 14.4 -22.7 14.3 -21.9 14.2 -21.5 14.4 -22.3
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.905601
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:44:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:44:14', tmtdew=10.91, humidity=47.67, cloud=0.0, wind=19.18, temperature=13.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:44:15', seeing=2.01, atlas_timestamp='2025-11-17T21:44:03.926', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:42:00')
2025-11-17T23:44:48.011 [DEBUG] [Thread-63391] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:44:48.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:44:48.100 [DEBUG] [Thread-63394] [transport.py] [_log()] starting thread (client mode): 0xd0757e80
2025-11-17T23:44:48.100 [DEBUG] [Thread-63394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:44:48.114 [DEBUG] [Thread-63394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:44:48.114 [INFO] [Thread-63394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:44:48.121 [DEBUG] [Thread-63394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:44:48.121 [DEBUG] [Thread-63394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:44:48.121 [DEBUG] [Thread-63394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:44:48.121 [DEBUG] [Thread-63394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:44:48.121 [DEBUG] [Thread-63394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] client lang: <none>
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] server lang: <none>
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] kex follows: False
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] Compression: none
2025-11-17T23:44:48.122 [DEBUG] [Thread-63394] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:44:48.178 [DEBUG] [Thread-63394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:44:48.178 [DEBUG] [Thread-63394] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:44:48.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:44:48.178 [DEBUG] [Thread-63394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:44:48.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:44:48.235 [DEBUG] [Thread-63394] [transport.py] [_log()] userauth is OK
2025-11-17T23:44:48.235 [DEBUG] [Thread-63394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:44:48.235 [DEBUG] [Thread-63394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:44:48.235 [DEBUG] [Thread-63394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:44:48.235 [DEBUG] [Thread-63394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:44:48.253 [INFO] [Thread-63394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:44:48.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:44:48.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:44:49.097 [DEBUG] [Thread-63394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:44:49.097 [DEBUG] [Thread-63394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:44:49.145 [DEBUG] [Thread-63394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:44:49.145 [DEBUG] [Thread-63394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:44:49.153 [DEBUG] [Thread-63394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:44:49.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:44:49.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:44:49.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:44:49.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:44:49.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:44:49.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:44:49.185 [DEBUG] [Thread-63394] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:44:51.508 [DEBUG] [Thread-63396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:44:57.585 [DEBUG] [Thread-63397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:45:12.628 [DEBUG] [Thread-63398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:45:17.970 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:45:17.971 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:45:19.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:45:19.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:45:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:45:19.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 44, 46), 10.85, 47.7, 0.0, 18.83, 13.7, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:45:19.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:44:46
2025-11-17T23:45:20.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:45:20.202 [DEBUG] [Thread-63399] [transport.py] [_log()] starting thread (client mode): 0xd317d330
2025-11-17T23:45:20.202 [DEBUG] [Thread-63399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:45:20.222 [DEBUG] [Thread-63399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:45:20.222 [INFO] [Thread-63399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:45:20.225 [DEBUG] [Thread-63399] [transport.py] [_log()] client lang: <none>
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] server lang: <none>
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] kex follows: False
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] Compression: none
2025-11-17T23:45:20.226 [DEBUG] [Thread-63399] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:45:20.241 [DEBUG] [Thread-63399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:45:20.241 [DEBUG] [Thread-63399] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:45:20.241 [DEBUG] [Thread-63399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:45:20.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:45:20.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:45:20.242 [DEBUG] [Thread-63399] [transport.py] [_log()] userauth is OK
2025-11-17T23:45:20.242 [DEBUG] [Thread-63399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:45:20.242 [DEBUG] [Thread-63399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:45:20.242 [DEBUG] [Thread-63399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:45:20.242 [DEBUG] [Thread-63399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:45:20.251 [INFO] [Thread-63399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:45:20.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:45:20.904 [DEBUG] [Thread-63399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:45:20.904 [DEBUG] [Thread-63399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:45:20.904 [DEBUG] [Thread-63399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:45:20.945 [DEBUG] [Thread-63399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:45:20.945 [DEBUG] [Thread-63399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:45:20.947 [DEBUG] [Thread-63399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:45:20.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:45:20.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:45:20.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:45:20.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:45:20.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:45:20.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:45:20.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:45:20.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.906295 -999.00  +13.80  12.12     52   +4.20 1 1 1 1 1     0    0 8.22 -51.90 ZNESW 13.3 12.1 162.6 21.7 14.4 -22.9 14.3 -22.0 14.2 -21.7 14.4 -22.3
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.906295
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:45:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:44:46', tmtdew=10.85, humidity=47.7, cloud=0.0, wind=18.83, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:45:19', seeing=1.84, atlas_timestamp='2025-11-17T21:45:03.888', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:42:00')
2025-11-17T23:45:20.967 [DEBUG] [Thread-63399] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:45:21.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:45:21.052 [DEBUG] [Thread-63402] [transport.py] [_log()] starting thread (client mode): 0xd07ab280
2025-11-17T23:45:21.052 [DEBUG] [Thread-63402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:45:21.069 [DEBUG] [Thread-63402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:45:21.069 [INFO] [Thread-63402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] client lang: <none>
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] server lang: <none>
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] kex follows: False
2025-11-17T23:45:21.077 [DEBUG] [Thread-63402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:45:21.078 [DEBUG] [Thread-63402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:45:21.078 [DEBUG] [Thread-63402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:45:21.078 [DEBUG] [Thread-63402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:45:21.078 [DEBUG] [Thread-63402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:45:21.078 [DEBUG] [Thread-63402] [transport.py] [_log()] Compression: none
2025-11-17T23:45:21.078 [DEBUG] [Thread-63402] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:45:21.135 [DEBUG] [Thread-63402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:45:21.135 [DEBUG] [Thread-63402] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:45:21.136 [DEBUG] [Thread-63402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:45:21.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:45:21.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:45:21.191 [DEBUG] [Thread-63402] [transport.py] [_log()] userauth is OK
2025-11-17T23:45:21.191 [DEBUG] [Thread-63402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:45:21.192 [DEBUG] [Thread-63402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:45:21.192 [DEBUG] [Thread-63402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:45:21.192 [DEBUG] [Thread-63402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:45:21.211 [INFO] [Thread-63402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:45:21.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:45:22.038 [DEBUG] [Thread-63402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:45:22.038 [DEBUG] [Thread-63402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:45:22.086 [DEBUG] [Thread-63402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:45:22.086 [DEBUG] [Thread-63402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:45:22.095 [DEBUG] [Thread-63402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:45:22.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:45:22.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:45:22.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:45:22.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:45:22.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:45:22.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:45:22.131 [DEBUG] [Thread-63402] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:45:27.661 [DEBUG] [Thread-63404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:45:42.694 [DEBUG] [Thread-63405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:45:51.579 [DEBUG] [Thread-63406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:45:52.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:45:52.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:45: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
2025-11-17T23:45:52.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 45, 18), 10.82, 47.78, 0.0, 17.86, 13.72, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:45:52.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:45:18
2025-11-17T23:45:52.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:45:53.134 [DEBUG] [Thread-63407] [transport.py] [_log()] starting thread (client mode): 0xd31ce470
2025-11-17T23:45:53.134 [DEBUG] [Thread-63407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:45:53.153 [DEBUG] [Thread-63407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:45:53.153 [INFO] [Thread-63407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:45:53.156 [DEBUG] [Thread-63407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:45:53.156 [DEBUG] [Thread-63407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:45:53.156 [DEBUG] [Thread-63407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:45:53.156 [DEBUG] [Thread-63407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:45:53.156 [DEBUG] [Thread-63407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] client lang: <none>
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] server lang: <none>
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] kex follows: False
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] Compression: none
2025-11-17T23:45:53.157 [DEBUG] [Thread-63407] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:45:53.174 [DEBUG] [Thread-63407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:45:53.175 [DEBUG] [Thread-63407] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:45:53.175 [DEBUG] [Thread-63407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:45:53.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:45:53.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:45:53.177 [DEBUG] [Thread-63407] [transport.py] [_log()] userauth is OK
2025-11-17T23:45:53.177 [DEBUG] [Thread-63407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:45:53.177 [DEBUG] [Thread-63407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:45:53.177 [DEBUG] [Thread-63407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:45:53.177 [DEBUG] [Thread-63407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:45:53.195 [INFO] [Thread-63407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:45:53.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:45:53.818 [DEBUG] [Thread-63407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:45:53.818 [DEBUG] [Thread-63407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:45:53.819 [DEBUG] [Thread-63407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:45:53.859 [DEBUG] [Thread-63407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:45:53.860 [DEBUG] [Thread-63407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:45:53.862 [DEBUG] [Thread-63407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:45:53.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:45:53.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:45:53.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:45:53.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:45:53.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:45:53.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:45:53.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:45:53.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:45:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:45:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.906643 -999.00  +13.80  13.15     52   +4.20 1 1 1 1 1     0    0 8.35 -50.79 ZNESW 10.8 13.2 156.2 21.5 14.4 -22.8 14.3 -22.0 14.1 -21.7 14.4 -22.3
2025-11-17T23:45:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:45:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:45:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.906643
2025-11-17T23:45:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:45:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:45:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:45:53.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:45:53.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:45:53.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:45:18', tmtdew=10.82, humidity=47.78, cloud=0.0, wind=17.86, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:45:51', seeing=1.84, atlas_timestamp='2025-11-17T21:45:33.955', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:42:00')
2025-11-17T23:45:53.887 [DEBUG] [Thread-63407] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:45:53.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:45:53.987 [DEBUG] [Thread-63410] [transport.py] [_log()] starting thread (client mode): 0xd3150e50
2025-11-17T23:45:53.987 [DEBUG] [Thread-63410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:45:54.002 [DEBUG] [Thread-63410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:45:54.002 [INFO] [Thread-63410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:45:54.009 [DEBUG] [Thread-63410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] client lang: <none>
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] server lang: <none>
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] kex follows: False
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:45:54.010 [DEBUG] [Thread-63410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:45:54.011 [DEBUG] [Thread-63410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:45:54.011 [DEBUG] [Thread-63410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:45:54.011 [DEBUG] [Thread-63410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:45:54.011 [DEBUG] [Thread-63410] [transport.py] [_log()] Compression: none
2025-11-17T23:45:54.011 [DEBUG] [Thread-63410] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:45:54.071 [DEBUG] [Thread-63410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:45:54.072 [DEBUG] [Thread-63410] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:45:54.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:45:54.072 [DEBUG] [Thread-63410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:45:54.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:45:54.127 [DEBUG] [Thread-63410] [transport.py] [_log()] userauth is OK
2025-11-17T23:45:54.127 [DEBUG] [Thread-63410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:45:54.127 [DEBUG] [Thread-63410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:45:54.127 [DEBUG] [Thread-63410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:45:54.128 [DEBUG] [Thread-63410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:45:54.147 [INFO] [Thread-63410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:45:54.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:45:54.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:45:54.982 [DEBUG] [Thread-63410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:45:54.982 [DEBUG] [Thread-63410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:45:55.030 [DEBUG] [Thread-63410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:45:55.030 [DEBUG] [Thread-63410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:45:55.038 [DEBUG] [Thread-63410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:45:55.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:45:55.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:45:55.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:45:55.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:45:55.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:45:55.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:45:55.071 [DEBUG] [Thread-63410] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:45:57.726 [DEBUG] [Thread-63412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:46:12.765 [DEBUG] [Thread-63413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:46:18.176 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:46:18.178 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:46:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:46:25.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:46:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:46:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 46, 23), 10.86, 47.8, 0.0, 19.75, 13.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:46:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:46:23
2025-11-17T23:46:25.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:46:26.044 [DEBUG] [Thread-63414] [transport.py] [_log()] starting thread (client mode): 0xd31526b0
2025-11-17T23:46:26.044 [DEBUG] [Thread-63414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:46:26.063 [DEBUG] [Thread-63414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:46:26.063 [INFO] [Thread-63414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] client lang: <none>
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] server lang: <none>
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] kex follows: False
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] Compression: none
2025-11-17T23:46:26.065 [DEBUG] [Thread-63414] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:46:26.075 [DEBUG] [Thread-63414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:46:26.076 [DEBUG] [Thread-63414] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:46:26.076 [DEBUG] [Thread-63414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:46:26.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:46:26.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:46:26.078 [DEBUG] [Thread-63414] [transport.py] [_log()] userauth is OK
2025-11-17T23:46:26.078 [DEBUG] [Thread-63414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:46:26.078 [DEBUG] [Thread-63414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:46:26.079 [DEBUG] [Thread-63414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:46:26.079 [DEBUG] [Thread-63414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:46:26.102 [INFO] [Thread-63414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:46:26.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:46:26.723 [DEBUG] [Thread-63414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:46:26.723 [DEBUG] [Thread-63414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:46:26.723 [DEBUG] [Thread-63414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:46:26.764 [DEBUG] [Thread-63414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:46:26.764 [DEBUG] [Thread-63414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:46:26.766 [DEBUG] [Thread-63414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:46:26.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:46:26.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:46:26.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:46:26.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:46:26.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:46:26.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:46:26.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:46:26.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:46:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:46:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.906990 -999.00  +13.80  16.60     52   +4.30 1 1 1 1 1     0    0 8.35 -48.64 ZNESW 17.0 16.6 140.0 20.3 14.4 -22.9 14.3 -21.9 14.1 -21.6 14.4 -22.5
2025-11-17T23:46:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:46:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:46:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.906990
2025-11-17T23:46:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:46:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:46:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:46:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:46:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:46:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:46:23', tmtdew=10.86, humidity=47.8, cloud=0.0, wind=19.75, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:46:23', seeing=1.56, atlas_timestamp='2025-11-17T21:46:03.936', atlas_cloud=1, atlas_rain=1, zp_data=[0.22974999999999923, 0.14425000000000132, 0.1932500000000008, 0.28200000000000003, 0.41549999999999976, 0.2897500000000015, 0.3550000000000004, 0.2887500000000003, 0.30599999999999916, 0.2480000000000011, 0.30025000000000013, 0.46199999999999974, 0.6464999999999996, 0.42525000000000013, 0.3384999999999998, 0.3539999999999992, 0.2752499999999998, 0.29850000000000065, 0.4059999999999988, 0.5952499999999992, 0.6949999999999985, 0.473749999999999, 0.4462500000000009, 0.3727499999999999, 0.28999999999999915, 0.2580000000000009, 0.370750000000001, 0.5305, 0.5600000000000005, 0.7005000000000017, 0.7040000000000006, 0.5035000000000007, 0.2647499999999994], zp_timestamp='2025-11-17T21:42:00')
2025-11-17T23:46:26.781 [DEBUG] [Thread-63414] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:46:26.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:46:26.864 [DEBUG] [Thread-63417] [transport.py] [_log()] starting thread (client mode): 0xd3152230
2025-11-17T23:46:26.864 [DEBUG] [Thread-63417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:46:26.880 [DEBUG] [Thread-63417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:46:26.880 [INFO] [Thread-63417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] client lang: <none>
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] server lang: <none>
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] kex follows: False
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] Compression: none
2025-11-17T23:46:26.888 [DEBUG] [Thread-63417] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:46:26.947 [DEBUG] [Thread-63417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:46:26.948 [DEBUG] [Thread-63417] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:46:26.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:46:26.949 [DEBUG] [Thread-63417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:46:26.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:46:27.003 [DEBUG] [Thread-63417] [transport.py] [_log()] userauth is OK
2025-11-17T23:46:27.003 [DEBUG] [Thread-63417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:46:27.003 [DEBUG] [Thread-63417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:46:27.004 [DEBUG] [Thread-63417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:46:27.004 [DEBUG] [Thread-63417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:46:27.023 [INFO] [Thread-63417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:46:27.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:46:27.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:46:27.797 [DEBUG] [Thread-63419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:46:27.913 [DEBUG] [Thread-63417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:46:27.913 [DEBUG] [Thread-63417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:46:27.961 [DEBUG] [Thread-63417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:46:27.962 [DEBUG] [Thread-63417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:46:27.971 [DEBUG] [Thread-63417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:46:27.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:46:27.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:46:27.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:46:27.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:46:27.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:46:27.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:46:28.006 [DEBUG] [Thread-63417] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:46:42.844 [DEBUG] [Thread-63420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:46:51.661 [DEBUG] [Thread-63421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:46:57.868 [DEBUG] [Thread-63422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:46:58.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:46:58.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:46:58.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
2025-11-17T23:46:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 46, 55), 10.78, 47.93, 0.0, 17.8, 13.69, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:46:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:46:55
2025-11-17T23:46:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:46:58.972 [DEBUG] [Thread-63423] [transport.py] [_log()] starting thread (client mode): 0xd317e5f0
2025-11-17T23:46:58.972 [DEBUG] [Thread-63423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:46:58.992 [DEBUG] [Thread-63423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:46:58.992 [INFO] [Thread-63423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:46:58.995 [DEBUG] [Thread-63423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:46:58.995 [DEBUG] [Thread-63423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] client lang: <none>
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] server lang: <none>
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] kex follows: False
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] Compression: none
2025-11-17T23:46:58.996 [DEBUG] [Thread-63423] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:46:59.011 [DEBUG] [Thread-63423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:46:59.012 [DEBUG] [Thread-63423] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:46:59.012 [DEBUG] [Thread-63423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:46:59.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:46:59.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:46:59.014 [DEBUG] [Thread-63423] [transport.py] [_log()] userauth is OK
2025-11-17T23:46:59.014 [DEBUG] [Thread-63423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:46:59.014 [DEBUG] [Thread-63423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:46:59.014 [DEBUG] [Thread-63423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:46:59.014 [DEBUG] [Thread-63423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:46:59.032 [INFO] [Thread-63423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:46:59.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:46:59.615 [DEBUG] [Thread-63423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:46:59.615 [DEBUG] [Thread-63423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:46:59.616 [DEBUG] [Thread-63423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:46:59.657 [DEBUG] [Thread-63423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:46:59.657 [DEBUG] [Thread-63423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:46:59.659 [DEBUG] [Thread-63423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:46:59.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:46:59.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:46:59.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:46:59.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:46:59.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:46:59.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:46:59.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:46:59.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:46:59.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:46:59.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.907337 -999.00  +13.80  13.42     52   +4.20 1 1 1 1 1     0    0 8.91 -47.18 ZNESW 12.7 13.4 132.8 21.6 14.4 -22.8 14.3 -22.0 14.1 -21.7 14.4 -22.6
2025-11-17T23:46:59.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:46:59.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:46:59.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.907337
2025-11-17T23:46:59.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:46:59.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:46:59.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:46:59.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:46:59.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:46:59.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:46:55', tmtdew=10.78, humidity=47.93, cloud=0.0, wind=17.8, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:46:55', seeing=1.59, atlas_timestamp='2025-11-17T21:46:33.917', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:45:00')
2025-11-17T23:46:59.678 [DEBUG] [Thread-63423] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:46:59.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:46:59.777 [DEBUG] [Thread-63426] [transport.py] [_log()] starting thread (client mode): 0xd07558d0
2025-11-17T23:46:59.777 [DEBUG] [Thread-63426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:46:59.792 [DEBUG] [Thread-63426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:46:59.792 [INFO] [Thread-63426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:46:59.799 [DEBUG] [Thread-63426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] client lang: <none>
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] server lang: <none>
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] kex follows: False
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:46:59.800 [DEBUG] [Thread-63426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:46:59.801 [DEBUG] [Thread-63426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:46:59.801 [DEBUG] [Thread-63426] [transport.py] [_log()] Compression: none
2025-11-17T23:46:59.801 [DEBUG] [Thread-63426] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:46:59.864 [DEBUG] [Thread-63426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:46:59.865 [DEBUG] [Thread-63426] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:46:59.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:46:59.866 [DEBUG] [Thread-63426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:46:59.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:46:59.927 [DEBUG] [Thread-63426] [transport.py] [_log()] userauth is OK
2025-11-17T23:46:59.928 [DEBUG] [Thread-63426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:46:59.928 [DEBUG] [Thread-63426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:46:59.928 [DEBUG] [Thread-63426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:46:59.928 [DEBUG] [Thread-63426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:46:59.947 [INFO] [Thread-63426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:46:59.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:46:59.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:47:00.787 [DEBUG] [Thread-63426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:47:00.787 [DEBUG] [Thread-63426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:47:00.835 [DEBUG] [Thread-63426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:47:00.836 [DEBUG] [Thread-63426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:47:00.844 [DEBUG] [Thread-63426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:47:00.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:47:00.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:47:00.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:47:00.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:47:00.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:47:00.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:47:00.880 [DEBUG] [Thread-63426] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:47:12.903 [DEBUG] [Thread-63428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:47:18.389 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:47:18.389 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:47:26.201 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:47:27.938 [DEBUG] [Thread-63429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:47:30.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:47:30.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:47:30.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:47:31.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 47, 27), 10.72, 48.12, 0.0, 18.26, 13.64, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:47:31.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:47:27
2025-11-17T23:47:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:47:31.823 [DEBUG] [Thread-63430] [transport.py] [_log()] starting thread (client mode): 0xd317e740
2025-11-17T23:47:31.823 [DEBUG] [Thread-63430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:47:31.842 [DEBUG] [Thread-63430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:47:31.842 [INFO] [Thread-63430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] client lang: <none>
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] server lang: <none>
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] kex follows: False
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] Compression: none
2025-11-17T23:47:31.846 [DEBUG] [Thread-63430] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:47:31.862 [DEBUG] [Thread-63430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:47:31.863 [DEBUG] [Thread-63430] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:47:31.863 [DEBUG] [Thread-63430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:47:31.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:47:31.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:47:31.865 [DEBUG] [Thread-63430] [transport.py] [_log()] userauth is OK
2025-11-17T23:47:31.865 [DEBUG] [Thread-63430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:47:31.865 [DEBUG] [Thread-63430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:47:31.866 [DEBUG] [Thread-63430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:47:31.866 [DEBUG] [Thread-63430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:47:31.898 [INFO] [Thread-63430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:47:31.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:47:32.550 [DEBUG] [Thread-63430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:47:32.551 [DEBUG] [Thread-63430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:47:32.551 [DEBUG] [Thread-63430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:47:32.591 [DEBUG] [Thread-63430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:47:32.592 [DEBUG] [Thread-63430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:47:32.595 [DEBUG] [Thread-63430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:47:32.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:47:32.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:47:32.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:47:32.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:47:32.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:47:32.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:47:32.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:47:32.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:47:32.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:47:32.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.907337 -999.00  +13.80  13.42     52   +4.20 1 1 1 1 1     0    0 8.91 -47.18 ZNESW 12.7 13.4 132.8 21.6 14.4 -22.8 14.3 -22.0 14.1 -21.7 14.4 -22.6
2025-11-17T23:47:32.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:47:32.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:47:32.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.907337
2025-11-17T23:47:32.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:47:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:47:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:47:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:47:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:47:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:47:27', tmtdew=10.72, humidity=48.12, cloud=0.0, wind=18.26, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:47:27', seeing=2.12, atlas_timestamp='2025-11-17T21:46:33.917', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:45:00')
2025-11-17T23:47:32.622 [DEBUG] [Thread-63430] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:47:32.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:47:32.717 [DEBUG] [Thread-63433] [transport.py] [_log()] starting thread (client mode): 0xd07a9390
2025-11-17T23:47:32.718 [DEBUG] [Thread-63433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:47:32.732 [DEBUG] [Thread-63433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:47:32.732 [INFO] [Thread-63433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] client lang: <none>
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] server lang: <none>
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] kex follows: False
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:47:32.740 [DEBUG] [Thread-63433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:47:32.741 [DEBUG] [Thread-63433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:47:32.741 [DEBUG] [Thread-63433] [transport.py] [_log()] Compression: none
2025-11-17T23:47:32.741 [DEBUG] [Thread-63433] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:47:32.799 [DEBUG] [Thread-63433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:47:32.800 [DEBUG] [Thread-63433] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:47:32.800 [DEBUG] [Thread-63433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:47:32.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:47:32.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:47:32.855 [DEBUG] [Thread-63433] [transport.py] [_log()] userauth is OK
2025-11-17T23:47:32.855 [DEBUG] [Thread-63433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:47:32.855 [DEBUG] [Thread-63433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:47:32.855 [DEBUG] [Thread-63433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:47:32.855 [DEBUG] [Thread-63433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:47:32.868 [INFO] [Thread-63433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:47:32.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:47:32.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:47:33.717 [DEBUG] [Thread-63433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:47:33.717 [DEBUG] [Thread-63433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:47:33.765 [DEBUG] [Thread-63433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:47:33.765 [DEBUG] [Thread-63433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:47:33.774 [DEBUG] [Thread-63433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:47:33.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:47:33.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:47:33.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:47:33.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:47:33.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:47:33.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:47:33.809 [DEBUG] [Thread-63433] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:47:42.966 [DEBUG] [Thread-63435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:47:51.732 [DEBUG] [Thread-63436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:47:58.006 [DEBUG] [Thread-63437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:48:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:48:03.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:48:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:48:04.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 47, 59), 10.6, 48.67, 0.0, 19.53, 13.61, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:48:04.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:47:59
2025-11-17T23:48:04.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:48:04.797 [DEBUG] [Thread-63438] [transport.py] [_log()] starting thread (client mode): 0xd0703100
2025-11-17T23:48:04.797 [DEBUG] [Thread-63438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:48:04.817 [DEBUG] [Thread-63438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:48:04.817 [INFO] [Thread-63438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:48:04.820 [DEBUG] [Thread-63438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:48:04.821 [DEBUG] [Thread-63438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:48:04.821 [DEBUG] [Thread-63438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:48:04.821 [DEBUG] [Thread-63438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:48:04.821 [DEBUG] [Thread-63438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] client lang: <none>
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] server lang: <none>
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] kex follows: False
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] Compression: none
2025-11-17T23:48:04.822 [DEBUG] [Thread-63438] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:48:04.839 [DEBUG] [Thread-63438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:48:04.840 [DEBUG] [Thread-63438] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:48:04.840 [DEBUG] [Thread-63438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:48:04.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:48:04.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:48:04.841 [DEBUG] [Thread-63438] [transport.py] [_log()] userauth is OK
2025-11-17T23:48:04.841 [DEBUG] [Thread-63438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:48:04.841 [DEBUG] [Thread-63438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:48:04.841 [DEBUG] [Thread-63438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:48:04.841 [DEBUG] [Thread-63438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:48:04.851 [INFO] [Thread-63438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:48:04.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:48:05.418 [DEBUG] [Thread-63438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:48:05.418 [DEBUG] [Thread-63438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:48:05.418 [DEBUG] [Thread-63438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:48:05.459 [DEBUG] [Thread-63438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:48:05.459 [DEBUG] [Thread-63438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:48:05.461 [DEBUG] [Thread-63438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:48:05.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:48:05.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:48:05.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:48:05.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:48:05.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:48:05.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:48:05.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:48:05.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:48:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:48:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.907684 -999.00  +13.70  16.64     52   +4.30 1 1 1 1 1     0    0 8.81 -48.78 ZNESW 22.9 16.6 139.2 22.4 14.3 -22.9 14.3 -22.0 14.1 -21.7 14.4 -22.5
2025-11-17T23:48:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:48:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:48:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.907684
2025-11-17T23:48:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:48:05.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:48:05.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:48:05.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:48:05.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:48:05.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:47:59', tmtdew=10.6, humidity=48.67, cloud=0.0, wind=19.53, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:47:59', seeing=1.46, atlas_timestamp='2025-11-17T21:47:03.898', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:45:00')
2025-11-17T23:48:05.479 [DEBUG] [Thread-63438] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:48:05.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:48:05.565 [DEBUG] [Thread-63441] [transport.py] [_log()] starting thread (client mode): 0xd3160280
2025-11-17T23:48:05.565 [DEBUG] [Thread-63441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:48:05.587 [DEBUG] [Thread-63441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:48:05.587 [INFO] [Thread-63441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:48:05.594 [DEBUG] [Thread-63441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] client lang: <none>
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] server lang: <none>
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] kex follows: False
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] Compression: none
2025-11-17T23:48:05.595 [DEBUG] [Thread-63441] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:48:05.650 [DEBUG] [Thread-63441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:48:05.650 [DEBUG] [Thread-63441] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:48:05.651 [DEBUG] [Thread-63441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:48:05.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:48:05.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:48:05.707 [DEBUG] [Thread-63441] [transport.py] [_log()] userauth is OK
2025-11-17T23:48:05.707 [DEBUG] [Thread-63441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:48:05.707 [DEBUG] [Thread-63441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:48:05.707 [DEBUG] [Thread-63441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:48:05.707 [DEBUG] [Thread-63441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:48:05.721 [INFO] [Thread-63441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:48:05.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:48:05.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:48:06.628 [DEBUG] [Thread-63441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:48:06.629 [DEBUG] [Thread-63441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:48:06.676 [DEBUG] [Thread-63441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:48:06.676 [DEBUG] [Thread-63441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:48:06.685 [DEBUG] [Thread-63441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:48:06.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:48:06.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:48:06.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:48:06.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:48:06.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:48:06.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:48:06.719 [DEBUG] [Thread-63441] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:48:13.033 [DEBUG] [Thread-63443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:48:18.591 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:48:18.592 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:48:28.075 [DEBUG] [Thread-63444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:48:36.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:48:36.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:48:36.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:48:37.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 48, 31), 10.58, 48.73, 0.0, 20.05, 13.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:48:37.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:48:31
2025-11-17T23:48:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:48:37.657 [DEBUG] [Thread-63445] [transport.py] [_log()] starting thread (client mode): 0xd3161c00
2025-11-17T23:48:37.657 [DEBUG] [Thread-63445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:48:37.673 [DEBUG] [Thread-63445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:48:37.673 [INFO] [Thread-63445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:48:37.677 [DEBUG] [Thread-63445] [transport.py] [_log()] client lang: <none>
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] server lang: <none>
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] kex follows: False
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] Compression: none
2025-11-17T23:48:37.678 [DEBUG] [Thread-63445] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:48:37.695 [DEBUG] [Thread-63445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:48:37.695 [DEBUG] [Thread-63445] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:48:37.695 [DEBUG] [Thread-63445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:48:37.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:48:37.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:48:37.696 [DEBUG] [Thread-63445] [transport.py] [_log()] userauth is OK
2025-11-17T23:48:37.696 [DEBUG] [Thread-63445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:48:37.696 [DEBUG] [Thread-63445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:48:37.696 [DEBUG] [Thread-63445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:48:37.696 [DEBUG] [Thread-63445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:48:37.707 [INFO] [Thread-63445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:48:37.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:48:38.327 [DEBUG] [Thread-63445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:48:38.327 [DEBUG] [Thread-63445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:48:38.328 [DEBUG] [Thread-63445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:48:38.368 [DEBUG] [Thread-63445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:48:38.369 [DEBUG] [Thread-63445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:48:38.372 [DEBUG] [Thread-63445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:48:38.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:48:38.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:48:38.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:48:38.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:48:38.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:48:38.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:48:38.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:48:38.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:48:38.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:48:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.908032 -999.00  +13.80  18.58     53   +4.40 1 1 1 1 1     0    0 8.73 -46.61 ZNESW 14.6 18.6 133.6 22.5 14.4 -22.8 14.3 -21.9 14.1 -21.6 14.3 -22.4
2025-11-17T23:48:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:48:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:48:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.908032
2025-11-17T23:48:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:48:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:48:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:48:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:48:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:48:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:48:31', tmtdew=10.58, humidity=48.73, cloud=0.0, wind=20.05, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:48:31', seeing=1.46, atlas_timestamp='2025-11-17T21:47:33.965', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:45:00')
2025-11-17T23:48:38.400 [DEBUG] [Thread-63445] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:48:38.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:48:38.507 [DEBUG] [Thread-63448] [transport.py] [_log()] starting thread (client mode): 0xd3163dc0
2025-11-17T23:48:38.507 [DEBUG] [Thread-63448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:48:38.522 [DEBUG] [Thread-63448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:48:38.522 [INFO] [Thread-63448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] client lang: <none>
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] server lang: <none>
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] kex follows: False
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:48:38.530 [DEBUG] [Thread-63448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:48:38.531 [DEBUG] [Thread-63448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:48:38.531 [DEBUG] [Thread-63448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:48:38.531 [DEBUG] [Thread-63448] [transport.py] [_log()] Compression: none
2025-11-17T23:48:38.531 [DEBUG] [Thread-63448] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:48:38.590 [DEBUG] [Thread-63448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:48:38.591 [DEBUG] [Thread-63448] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:48:38.591 [DEBUG] [Thread-63448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:48:38.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:48:38.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:48:38.647 [DEBUG] [Thread-63448] [transport.py] [_log()] userauth is OK
2025-11-17T23:48:38.647 [DEBUG] [Thread-63448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:48:38.647 [DEBUG] [Thread-63448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:48:38.648 [DEBUG] [Thread-63448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:48:38.648 [DEBUG] [Thread-63448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:48:38.666 [INFO] [Thread-63448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:48:38.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:48:38.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:48:39.495 [DEBUG] [Thread-63448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:48:39.495 [DEBUG] [Thread-63448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:48:39.547 [DEBUG] [Thread-63448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:48:39.547 [DEBUG] [Thread-63448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:48:39.555 [DEBUG] [Thread-63448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:48:39.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:48:39.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')
2025-11-17T23:48:39.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:48:39.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:48:39.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:48:39.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:48:39.587 [DEBUG] [Thread-63448] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:48:43.102 [DEBUG] [Thread-63450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:48:51.808 [DEBUG] [Thread-63451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:48:58.134 [DEBUG] [Thread-63452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:49:09.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:49:09.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:49:09.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:49:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 49, 3), 10.57, 48.76, 0.0, 20.49, 13.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:49:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:49:03
2025-11-17T23:49:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:49:10.549 [DEBUG] [Thread-63453] [transport.py] [_log()] starting thread (client mode): 0xd0700730
2025-11-17T23:49:10.549 [DEBUG] [Thread-63453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:49:10.568 [DEBUG] [Thread-63453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:49:10.568 [INFO] [Thread-63453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:49:10.569 [DEBUG] [Thread-63453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] client lang: <none>
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] server lang: <none>
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] kex follows: False
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] Compression: none
2025-11-17T23:49:10.570 [DEBUG] [Thread-63453] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:49:10.579 [DEBUG] [Thread-63453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:49:10.580 [DEBUG] [Thread-63453] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:49:10.580 [DEBUG] [Thread-63453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:49:10.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:49:10.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:49:10.582 [DEBUG] [Thread-63453] [transport.py] [_log()] userauth is OK
2025-11-17T23:49:10.582 [DEBUG] [Thread-63453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:49:10.582 [DEBUG] [Thread-63453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:49:10.582 [DEBUG] [Thread-63453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:49:10.582 [DEBUG] [Thread-63453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:49:10.600 [INFO] [Thread-63453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:49:10.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:49:11.254 [DEBUG] [Thread-63453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:49:11.254 [DEBUG] [Thread-63453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:49:11.255 [DEBUG] [Thread-63453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:49:11.295 [DEBUG] [Thread-63453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:49:11.295 [DEBUG] [Thread-63453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:49:11.299 [DEBUG] [Thread-63453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:49:11.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:49:11.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:49:11.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:49:11.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:49:11.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:49:11.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:49:11.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.908726 -999.00  +13.70  13.31     52   +4.30 1 1 1 1 1     0    0 8.63 -45.73 ZNESW 11.8 13.3 138.4 19.3 14.4 -23.1 14.2 -22.0 14.1 -21.7 14.3 -22.6
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.908726
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:49:03', tmtdew=10.57, humidity=48.76, cloud=0.0, wind=20.49, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:49:03', seeing=1.83, atlas_timestamp='2025-11-17T21:48:33.926', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:45:00')
2025-11-17T23:49:11.317 [DEBUG] [Thread-63453] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:49:11.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:49:11.401 [DEBUG] [Thread-63456] [transport.py] [_log()] starting thread (client mode): 0xd0703340
2025-11-17T23:49:11.401 [DEBUG] [Thread-63456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:49:11.420 [DEBUG] [Thread-63456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:49:11.421 [INFO] [Thread-63456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:49:11.428 [DEBUG] [Thread-63456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:49:11.428 [DEBUG] [Thread-63456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:49:11.428 [DEBUG] [Thread-63456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:49:11.428 [DEBUG] [Thread-63456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:49:11.428 [DEBUG] [Thread-63456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:49:11.428 [DEBUG] [Thread-63456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:49:11.428 [DEBUG] [Thread-63456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] client lang: <none>
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] server lang: <none>
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] kex follows: False
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] Compression: none
2025-11-17T23:49:11.429 [DEBUG] [Thread-63456] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:49:11.487 [DEBUG] [Thread-63456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:49:11.488 [DEBUG] [Thread-63456] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:49:11.488 [DEBUG] [Thread-63456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:49:11.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:49:11.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:49:11.543 [DEBUG] [Thread-63456] [transport.py] [_log()] userauth is OK
2025-11-17T23:49:11.543 [DEBUG] [Thread-63456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:49:11.544 [DEBUG] [Thread-63456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:49:11.544 [DEBUG] [Thread-63456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:49:11.544 [DEBUG] [Thread-63456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:49:11.563 [INFO] [Thread-63456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:49:11.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:49:11.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:49:12.394 [DEBUG] [Thread-63456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:49:12.395 [DEBUG] [Thread-63456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:49:12.442 [DEBUG] [Thread-63456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:49:12.442 [DEBUG] [Thread-63456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:49:12.451 [DEBUG] [Thread-63456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:49:12.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:49: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')
2025-11-17T23:49:12.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:49:12.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:49:12.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:49:12.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:49:12.485 [DEBUG] [Thread-63456] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:49:13.162 [DEBUG] [Thread-63458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:49:18.794 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:49:18.795 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:49:28.200 [DEBUG] [Thread-63459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:49:42.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:49:42.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:49:42.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:49:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 49, 35), 10.47, 48.93, 0.0, 20.49, 13.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:49:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:49:35
2025-11-17T23:49:43.227 [DEBUG] [Thread-63460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:49:43.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:49:43.433 [DEBUG] [Thread-63461] [transport.py] [_log()] starting thread (client mode): 0xd0700c10
2025-11-17T23:49:43.433 [DEBUG] [Thread-63461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:49:43.453 [DEBUG] [Thread-63461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:49:43.453 [INFO] [Thread-63461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] client lang: <none>
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] server lang: <none>
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] kex follows: False
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] Compression: none
2025-11-17T23:49:43.457 [DEBUG] [Thread-63461] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:49:43.476 [DEBUG] [Thread-63461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:49:43.477 [DEBUG] [Thread-63461] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:49:43.477 [DEBUG] [Thread-63461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:49:43.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:49:43.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:49:43.479 [DEBUG] [Thread-63461] [transport.py] [_log()] userauth is OK
2025-11-17T23:49:43.479 [DEBUG] [Thread-63461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:49:43.479 [DEBUG] [Thread-63461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:49:43.479 [DEBUG] [Thread-63461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:49:43.479 [DEBUG] [Thread-63461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:49:43.514 [INFO] [Thread-63461] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:49:43.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:49:44.170 [DEBUG] [Thread-63461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:49:44.170 [DEBUG] [Thread-63461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:49:44.170 [DEBUG] [Thread-63461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:49:44.211 [DEBUG] [Thread-63461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:49:44.212 [DEBUG] [Thread-63461] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:49:44.214 [DEBUG] [Thread-63461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:49:44.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:49:44.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:49:44.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:49:44.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:49:44.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:49:44.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:49:44.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:49:44.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:49:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:49:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.909073 -999.00  +13.70  14.94     53   +4.30 1 1 1 1 1     0    0 8.60 -47.53 ZNESW 14.3 14.9 145.6 20.4 14.3 -23.0 14.2 -21.8 14.1 -21.6 14.3 -22.6
2025-11-17T23:49:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:49:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:49:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.909073
2025-11-17T23:49:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:49:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:49:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:49:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:49:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:49:44.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:49:35', tmtdew=10.47, humidity=48.93, cloud=0.0, wind=20.49, temperature=13.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:49:35', seeing=2.26, atlas_timestamp='2025-11-17T21:49:03.907', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:47:00')
2025-11-17T23:49:44.241 [DEBUG] [Thread-63461] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:49:44.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:49:44.348 [DEBUG] [Thread-63464] [transport.py] [_log()] starting thread (client mode): 0xd31633d0
2025-11-17T23:49:44.348 [DEBUG] [Thread-63464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:49:44.363 [DEBUG] [Thread-63464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:49:44.363 [INFO] [Thread-63464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:49:44.370 [DEBUG] [Thread-63464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] client lang: <none>
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] server lang: <none>
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] kex follows: False
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] Compression: none
2025-11-17T23:49:44.371 [DEBUG] [Thread-63464] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:49:44.429 [DEBUG] [Thread-63464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:49:44.430 [DEBUG] [Thread-63464] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:49:44.430 [DEBUG] [Thread-63464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:49:44.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:49:44.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:49:44.492 [DEBUG] [Thread-63464] [transport.py] [_log()] userauth is OK
2025-11-17T23:49:44.492 [DEBUG] [Thread-63464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:49:44.492 [DEBUG] [Thread-63464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:49:44.492 [DEBUG] [Thread-63464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:49:44.492 [DEBUG] [Thread-63464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:49:44.511 [INFO] [Thread-63464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:49:44.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:49:44.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:49:45.358 [DEBUG] [Thread-63464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:49:45.358 [DEBUG] [Thread-63464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:49:45.407 [DEBUG] [Thread-63464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:49:45.407 [DEBUG] [Thread-63464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:49:45.416 [DEBUG] [Thread-63464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:49:45.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:49:45.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:49:45.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:49:45.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:49:45.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:49:45.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:49:45.451 [DEBUG] [Thread-63464] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:49:51.883 [DEBUG] [Thread-63466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:49:58.252 [DEBUG] [Thread-63467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:50:13.286 [DEBUG] [Thread-63468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:50:15.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:50:15.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:50:15.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:50:16.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 50, 7), 10.46, 48.98, 0.0, 18.69, 13.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:50:16.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:50:07
2025-11-17T23:50:16.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:50:16.398 [DEBUG] [Thread-63469] [transport.py] [_log()] starting thread (client mode): 0xd3163a60
2025-11-17T23:50:16.398 [DEBUG] [Thread-63469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:50:16.418 [DEBUG] [Thread-63469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:50:16.418 [INFO] [Thread-63469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] client lang: <none>
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] server lang: <none>
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] kex follows: False
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] Compression: none
2025-11-17T23:50:16.422 [DEBUG] [Thread-63469] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:50:16.442 [DEBUG] [Thread-63469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:50:16.442 [DEBUG] [Thread-63469] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:50:16.443 [DEBUG] [Thread-63469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:50:16.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:50:16.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:50:16.445 [DEBUG] [Thread-63469] [transport.py] [_log()] userauth is OK
2025-11-17T23:50:16.445 [DEBUG] [Thread-63469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:50:16.445 [DEBUG] [Thread-63469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:50:16.445 [DEBUG] [Thread-63469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:50:16.445 [DEBUG] [Thread-63469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:50:16.468 [INFO] [Thread-63469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:50:16.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:50:17.415 [DEBUG] [Thread-63469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:50:17.415 [DEBUG] [Thread-63469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:50:17.415 [DEBUG] [Thread-63469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:50:17.456 [DEBUG] [Thread-63469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:50:17.457 [DEBUG] [Thread-63469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:50:17.460 [DEBUG] [Thread-63469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:50:17.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:50:17.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:50:17.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:50:17.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:50:17.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:50:17.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:50:17.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:50:17.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:50:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:50:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.909420 -999.00  +13.70  12.63     53   +4.30 1 1 1 1 1     0    0 8.57 -47.41 ZNESW 11.1 12.6 151.4 17.2 14.3 -23.1 14.2 -22.0 14.0 -21.6 14.3 -22.5
2025-11-17T23:50:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:50:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:50:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.909420
2025-11-17T23:50:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:50:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:50:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:50:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:50:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:50:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:50:07', tmtdew=10.46, humidity=48.98, cloud=0.0, wind=18.69, temperature=13.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:50:07', seeing=1.91, atlas_timestamp='2025-11-17T21:49:33.888', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:47:00')
2025-11-17T23:50:17.487 [DEBUG] [Thread-63469] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:50:17.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:50:17.584 [DEBUG] [Thread-63472] [transport.py] [_log()] starting thread (client mode): 0xd0700bb0
2025-11-17T23:50:17.584 [DEBUG] [Thread-63472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:50:17.600 [DEBUG] [Thread-63472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:50:17.601 [INFO] [Thread-63472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] client lang: <none>
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] server lang: <none>
2025-11-17T23:50:17.608 [DEBUG] [Thread-63472] [transport.py] [_log()] kex follows: False
2025-11-17T23:50:17.609 [DEBUG] [Thread-63472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:50:17.609 [DEBUG] [Thread-63472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:50:17.609 [DEBUG] [Thread-63472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:50:17.609 [DEBUG] [Thread-63472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:50:17.609 [DEBUG] [Thread-63472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:50:17.609 [DEBUG] [Thread-63472] [transport.py] [_log()] Compression: none
2025-11-17T23:50:17.609 [DEBUG] [Thread-63472] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:50:17.667 [DEBUG] [Thread-63472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:50:17.668 [DEBUG] [Thread-63472] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:50:17.668 [DEBUG] [Thread-63472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:50:17.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:50:17.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:50:17.724 [DEBUG] [Thread-63472] [transport.py] [_log()] userauth is OK
2025-11-17T23:50:17.724 [DEBUG] [Thread-63472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:50:17.724 [DEBUG] [Thread-63472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:50:17.724 [DEBUG] [Thread-63472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:50:17.724 [DEBUG] [Thread-63472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:50:17.743 [INFO] [Thread-63472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:50:17.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:50:17.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:50:18.604 [DEBUG] [Thread-63472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:50:18.605 [DEBUG] [Thread-63472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:50:18.652 [DEBUG] [Thread-63472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:50:18.652 [DEBUG] [Thread-63472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:50:18.661 [DEBUG] [Thread-63472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:50:18.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:50:18.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:50:18.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:50:18.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:50:18.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:50:18.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:50:18.695 [DEBUG] [Thread-63472] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:50:18.997 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:50:18.999 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:50:28.316 [DEBUG] [Thread-63474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:50:43.355 [DEBUG] [Thread-63475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:50:48.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:50:48.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:50:48.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:50:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 50, 38), 10.52, 48.96, 0.0, 17.54, 13.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:50:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:50:38
2025-11-17T23:50:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:50:49.647 [DEBUG] [Thread-63476] [transport.py] [_log()] starting thread (client mode): 0xd0700880
2025-11-17T23:50:49.647 [DEBUG] [Thread-63476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:50:49.667 [DEBUG] [Thread-63476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:50:49.668 [INFO] [Thread-63476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:50:49.669 [DEBUG] [Thread-63476] [transport.py] [_log()] client lang: <none>
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] server lang: <none>
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] kex follows: False
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] Compression: none
2025-11-17T23:50:49.670 [DEBUG] [Thread-63476] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:50:49.679 [DEBUG] [Thread-63476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:50:49.680 [DEBUG] [Thread-63476] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:50:49.680 [DEBUG] [Thread-63476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:50:49.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:50:49.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:50:49.682 [DEBUG] [Thread-63476] [transport.py] [_log()] userauth is OK
2025-11-17T23:50:49.682 [DEBUG] [Thread-63476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:50:49.682 [DEBUG] [Thread-63476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:50:49.682 [DEBUG] [Thread-63476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:50:49.682 [DEBUG] [Thread-63476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:50:49.703 [INFO] [Thread-63476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:50:49.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:50:50.322 [DEBUG] [Thread-63476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:50:50.322 [DEBUG] [Thread-63476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:50:50.322 [DEBUG] [Thread-63476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:50:50.362 [DEBUG] [Thread-63476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:50:50.362 [DEBUG] [Thread-63476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:50:50.365 [DEBUG] [Thread-63476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:50:50.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:50:50.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:50:50.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:50:50.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:50:50.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:50:50.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:50:50.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:50:50.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:50:50.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:50:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.909767 -999.00  +13.70  14.05     52   +4.20 1 1 1 1 1     0    0 8.34 -50.41 ZNESW 14.9 14.1 138.6 17.7 14.3 -23.1 14.2 -21.9 14.0 -21.7 14.3 -22.6
2025-11-17T23:50:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:50:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:50:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.909767
2025-11-17T23:50:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:50:50.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:50:50.390 [DEBUG] [Thread-63476] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:50:50.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:50:50.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:50:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:50:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:50:38', tmtdew=10.52, humidity=48.96, cloud=0.0, wind=17.54, temperature=13.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:50:39', seeing=1.29, atlas_timestamp='2025-11-17T21:50:03.869', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:47:00')
2025-11-17T23:50:50.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:50:50.491 [DEBUG] [Thread-63479] [transport.py] [_log()] starting thread (client mode): 0xd0756680
2025-11-17T23:50:50.491 [DEBUG] [Thread-63479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:50:50.506 [DEBUG] [Thread-63479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:50:50.506 [INFO] [Thread-63479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:50:50.513 [DEBUG] [Thread-63479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:50:50.514 [DEBUG] [Thread-63479] [transport.py] [_log()] client lang: <none>
2025-11-17T23:50:50.515 [DEBUG] [Thread-63479] [transport.py] [_log()] server lang: <none>
2025-11-17T23:50:50.515 [DEBUG] [Thread-63479] [transport.py] [_log()] kex follows: False
2025-11-17T23:50:50.515 [DEBUG] [Thread-63479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:50:50.515 [DEBUG] [Thread-63479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:50:50.515 [DEBUG] [Thread-63479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:50:50.515 [DEBUG] [Thread-63479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:50:50.515 [DEBUG] [Thread-63479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:50:50.515 [DEBUG] [Thread-63479] [transport.py] [_log()] Compression: none
2025-11-17T23:50:50.516 [DEBUG] [Thread-63479] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:50:50.572 [DEBUG] [Thread-63479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:50:50.573 [DEBUG] [Thread-63479] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:50:50.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:50:50.574 [DEBUG] [Thread-63479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:50:50.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:50:50.628 [DEBUG] [Thread-63479] [transport.py] [_log()] userauth is OK
2025-11-17T23:50:50.628 [DEBUG] [Thread-63479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:50:50.628 [DEBUG] [Thread-63479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:50:50.628 [DEBUG] [Thread-63479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:50:50.629 [DEBUG] [Thread-63479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:50:50.651 [INFO] [Thread-63479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:50:50.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:50:50.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:50:51.482 [DEBUG] [Thread-63479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:50:51.482 [DEBUG] [Thread-63479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:50:51.530 [DEBUG] [Thread-63479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:50:51.530 [DEBUG] [Thread-63479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:50:51.539 [DEBUG] [Thread-63479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:50:51.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:50:51.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:50:51.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:50:51.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:50:51.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:50:51.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:50:51.574 [DEBUG] [Thread-63479] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:50:51.957 [DEBUG] [Thread-63481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:50:58.385 [DEBUG] [Thread-63482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:51:13.421 [DEBUG] [Thread-63483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:51:19.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:51:19.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:51:21.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:51:21.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:51:21.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:51:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 51, 11), 10.51, 49.0, 0.0, 19.85, 13.56, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:51:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:51:11
2025-11-17T23:51:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:51:22.511 [DEBUG] [Thread-63484] [transport.py] [_log()] starting thread (client mode): 0xd3162890
2025-11-17T23:51:22.511 [DEBUG] [Thread-63484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:51:22.530 [DEBUG] [Thread-63484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:51:22.531 [INFO] [Thread-63484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:51:22.534 [DEBUG] [Thread-63484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:51:22.534 [DEBUG] [Thread-63484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:51:22.534 [DEBUG] [Thread-63484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:51:22.534 [DEBUG] [Thread-63484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:51:22.534 [DEBUG] [Thread-63484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:51:22.534 [DEBUG] [Thread-63484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:51:22.534 [DEBUG] [Thread-63484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] client lang: <none>
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] server lang: <none>
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] kex follows: False
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] Compression: none
2025-11-17T23:51:22.535 [DEBUG] [Thread-63484] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:51:22.553 [DEBUG] [Thread-63484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:51:22.553 [DEBUG] [Thread-63484] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:51:22.554 [DEBUG] [Thread-63484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:51:22.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:51:22.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:51:22.556 [DEBUG] [Thread-63484] [transport.py] [_log()] userauth is OK
2025-11-17T23:51:22.556 [DEBUG] [Thread-63484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:51:22.556 [DEBUG] [Thread-63484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:51:22.556 [DEBUG] [Thread-63484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:51:22.556 [DEBUG] [Thread-63484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:51:22.578 [INFO] [Thread-63484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:51:22.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:51:23.230 [DEBUG] [Thread-63484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:51:23.230 [DEBUG] [Thread-63484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:51:23.230 [DEBUG] [Thread-63484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:51:23.271 [DEBUG] [Thread-63484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:51:23.271 [DEBUG] [Thread-63484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:51:23.274 [DEBUG] [Thread-63484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:51:23.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:51:23.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:51:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:51:23.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:51:23.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:51:23.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:51:23.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:51:23.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:51:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:51:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.910115 -999.00  +13.60  15.93     53   +4.30 1 1 1 1 1     0    0 8.36 -49.23 ZNESW 11.4 15.9 150.4 18.3 14.3 -23.1 14.2 -21.8 14.0 -21.6 14.2 -22.8
2025-11-17T23:51:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:51:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:51:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.910115
2025-11-17T23:51:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:51:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:51:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:51:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:51:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:51:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:51:11', tmtdew=10.51, humidity=49.0, cloud=0.0, wind=19.85, temperature=13.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:51:11', seeing=1.99, atlas_timestamp='2025-11-17T21:50:33.936', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:47:00')
2025-11-17T23:51:23.298 [DEBUG] [Thread-63484] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:51:23.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:51:23.390 [DEBUG] [Thread-63487] [transport.py] [_log()] starting thread (client mode): 0xd3160be0
2025-11-17T23:51:23.390 [DEBUG] [Thread-63487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:51:23.412 [DEBUG] [Thread-63487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:51:23.412 [INFO] [Thread-63487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:51:23.419 [DEBUG] [Thread-63487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] client lang: <none>
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] server lang: <none>
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] kex follows: False
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:51:23.420 [DEBUG] [Thread-63487] [transport.py] [_log()] Compression: none
2025-11-17T23:51:23.421 [DEBUG] [Thread-63487] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:51:23.479 [DEBUG] [Thread-63487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:51:23.480 [DEBUG] [Thread-63487] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:51:23.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:51:23.481 [DEBUG] [Thread-63487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:51:23.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:51:23.536 [DEBUG] [Thread-63487] [transport.py] [_log()] userauth is OK
2025-11-17T23:51:23.536 [DEBUG] [Thread-63487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:51:23.536 [DEBUG] [Thread-63487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:51:23.536 [DEBUG] [Thread-63487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:51:23.536 [DEBUG] [Thread-63487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:51:23.556 [INFO] [Thread-63487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:51:23.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:51:23.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:51:24.430 [DEBUG] [Thread-63487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:51:24.430 [DEBUG] [Thread-63487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:51:24.478 [DEBUG] [Thread-63487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:51:24.478 [DEBUG] [Thread-63487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:51:24.487 [DEBUG] [Thread-63487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:51:24.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:51:24.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:51:24.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:51:24.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:51:24.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:51:24.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:51:24.521 [DEBUG] [Thread-63487] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:51:28.447 [DEBUG] [Thread-63489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:51:43.486 [DEBUG] [Thread-63490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:51:52.016 [DEBUG] [Thread-63491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:51:54.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:51:54.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:51:54.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:51:55.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 51, 43), 10.43, 49.06, 0.0, 21.72, 13.47, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:51:55.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:51:43
2025-11-17T23:51:55.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:51:55.515 [DEBUG] [Thread-63492] [transport.py] [_log()] starting thread (client mode): 0xd3160190
2025-11-17T23:51:55.515 [DEBUG] [Thread-63492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:51:55.537 [DEBUG] [Thread-63492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:51:55.537 [INFO] [Thread-63492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] client lang: <none>
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] server lang: <none>
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] kex follows: False
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:51:55.540 [DEBUG] [Thread-63492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:51:55.541 [DEBUG] [Thread-63492] [transport.py] [_log()] Compression: none
2025-11-17T23:51:55.541 [DEBUG] [Thread-63492] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:51:55.558 [DEBUG] [Thread-63492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:51:55.559 [DEBUG] [Thread-63492] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:51:55.559 [DEBUG] [Thread-63492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:51:55.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:51:55.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:51:55.559 [DEBUG] [Thread-63492] [transport.py] [_log()] userauth is OK
2025-11-17T23:51:55.559 [DEBUG] [Thread-63492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:51:55.560 [DEBUG] [Thread-63492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:51:55.560 [DEBUG] [Thread-63492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:51:55.560 [DEBUG] [Thread-63492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:51:55.568 [INFO] [Thread-63492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:51:55.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:51:56.175 [DEBUG] [Thread-63492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:51:56.175 [DEBUG] [Thread-63492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:51:56.175 [DEBUG] [Thread-63492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:51:56.216 [DEBUG] [Thread-63492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:51:56.216 [DEBUG] [Thread-63492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:51:56.218 [DEBUG] [Thread-63492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:51:56.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:51:56.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:51:56.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:51:56.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:51:56.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:51:56.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:51:56.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.910462 -999.00  +13.60  11.87     53   +4.20 1 1 1 1 1     0    0 8.37 -47.34 ZNESW 11.5 11.9 144.8 16.1 14.3 -23.1 14.2 -21.8 14.0 -21.6 14.2 -22.8
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.910462
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:51:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:51:43', tmtdew=10.43, humidity=49.06, cloud=0.0, wind=21.72, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:51:43', seeing=2.59, atlas_timestamp='2025-11-17T21:51:03.917', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:47:00')
2025-11-17T23:51:56.236 [DEBUG] [Thread-63492] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:51:56.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:51:56.324 [DEBUG] [Thread-63495] [transport.py] [_log()] starting thread (client mode): 0xd3150bb0
2025-11-17T23:51:56.324 [DEBUG] [Thread-63495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:51:56.340 [DEBUG] [Thread-63495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:51:56.340 [INFO] [Thread-63495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] client lang: <none>
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] server lang: <none>
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] kex follows: False
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] Compression: none
2025-11-17T23:51:56.347 [DEBUG] [Thread-63495] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:51:56.402 [DEBUG] [Thread-63495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:51:56.402 [DEBUG] [Thread-63495] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:51:56.402 [DEBUG] [Thread-63495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:51:56.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:51:56.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:51:56.461 [DEBUG] [Thread-63495] [transport.py] [_log()] userauth is OK
2025-11-17T23:51:56.461 [DEBUG] [Thread-63495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:51:56.461 [DEBUG] [Thread-63495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:51:56.461 [DEBUG] [Thread-63495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:51:56.461 [DEBUG] [Thread-63495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:51:56.475 [INFO] [Thread-63495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:51:56.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:51:56.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:51:57.310 [DEBUG] [Thread-63495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:51:57.310 [DEBUG] [Thread-63495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:51:57.358 [DEBUG] [Thread-63495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:51:57.358 [DEBUG] [Thread-63495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:51:57.366 [DEBUG] [Thread-63495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:51:57.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:51:57.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')
2025-11-17T23:51:57.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:51:57.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:51:57.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:51:57.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:51:57.399 [DEBUG] [Thread-63495] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:51:58.514 [DEBUG] [Thread-63497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:52:13.552 [DEBUG] [Thread-63498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:52:19.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:52:19.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:52:27.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:52:27.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:52:27.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:52:28.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 52, 15), 10.43, 49.08, 0.0, 21.88, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:52:28.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:52:15
2025-11-17T23:52:28.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:52:28.336 [DEBUG] [Thread-63499] [transport.py] [_log()] starting thread (client mode): 0xd3163b80
2025-11-17T23:52:28.336 [DEBUG] [Thread-63499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:52:28.356 [DEBUG] [Thread-63499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:52:28.357 [INFO] [Thread-63499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] client lang: <none>
2025-11-17T23:52:28.358 [DEBUG] [Thread-63499] [transport.py] [_log()] server lang: <none>
2025-11-17T23:52:28.359 [DEBUG] [Thread-63499] [transport.py] [_log()] kex follows: False
2025-11-17T23:52:28.359 [DEBUG] [Thread-63499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:52:28.359 [DEBUG] [Thread-63499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:52:28.359 [DEBUG] [Thread-63499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:52:28.359 [DEBUG] [Thread-63499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:52:28.359 [DEBUG] [Thread-63499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:52:28.359 [DEBUG] [Thread-63499] [transport.py] [_log()] Compression: none
2025-11-17T23:52:28.359 [DEBUG] [Thread-63499] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:52:28.368 [DEBUG] [Thread-63499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:52:28.369 [DEBUG] [Thread-63499] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:52:28.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:52:28.370 [DEBUG] [Thread-63499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:52:28.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:52:28.372 [DEBUG] [Thread-63499] [transport.py] [_log()] userauth is OK
2025-11-17T23:52:28.373 [DEBUG] [Thread-63499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:52:28.373 [DEBUG] [Thread-63499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:52:28.373 [DEBUG] [Thread-63499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:52:28.373 [DEBUG] [Thread-63499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:52:28.389 [INFO] [Thread-63499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:52:28.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:52:28.580 [DEBUG] [Thread-63501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:52:29.018 [DEBUG] [Thread-63499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:52:29.018 [DEBUG] [Thread-63499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:52:29.018 [DEBUG] [Thread-63499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:52:29.060 [DEBUG] [Thread-63499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:52:29.060 [DEBUG] [Thread-63499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:52:29.063 [DEBUG] [Thread-63499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:52:29.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:52:29.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:52:29.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:52:29.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:52:29.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:52:29.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:52:29.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:52:29.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:52:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:52:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.911156 -999.00  +13.60  15.34     53   +4.30 1 1 1 1 1     0    0 8.07 -52.02 ZNESW 15.5 15.3 160.2 21.5 14.2 -22.9 14.2 -21.7 13.9 -21.6 14.2 -22.6
2025-11-17T23:52:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:52:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:52:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.911156
2025-11-17T23:52:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:52:29.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:52:29.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:52:29.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:52:29.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:52:29.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:52:15', tmtdew=10.43, humidity=49.08, cloud=0.0, wind=21.88, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:52:15', seeing=2.16, atlas_timestamp='2025-11-17T21:52:03.878', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.17175000000000118, 0.260250000000001, 0.27749999999999986, 0.2995000000000001, 0.2582500000000003, 0.32699999999999996, 0.24325000000000152, 0.20899999999999963, 0.24399999999999977, 0.28524999999999956, 0.2469999999999999, 0.2754999999999992, 0.2862500000000008, 0.40499999999999936, 0.2699999999999996, 0.2052499999999995, 0.24249999999999972, 0.3824999999999985, 0.5142499999999988, 0.43099999999999916, 0.32924999999999827, 0.5072500000000009, 0.2967500000000012, 0.23299999999999876, 0.21749999999999936, 0.3667499999999997, 0.48050000000000015, 0.46950000000000003, 0.44400000000000084, 0.4060000000000006, 0.4115000000000011, 0.20874999999999844], zp_timestamp='2025-11-17T21:47:00')
2025-11-17T23:52:29.086 [DEBUG] [Thread-63499] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:52:29.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:52:29.193 [DEBUG] [Thread-63503] [transport.py] [_log()] starting thread (client mode): 0xd31616f0
2025-11-17T23:52:29.194 [DEBUG] [Thread-63503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:52:29.208 [DEBUG] [Thread-63503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:52:29.208 [INFO] [Thread-63503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:52:29.215 [DEBUG] [Thread-63503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] client lang: <none>
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] server lang: <none>
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] kex follows: False
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] Compression: none
2025-11-17T23:52:29.216 [DEBUG] [Thread-63503] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:52:29.284 [DEBUG] [Thread-63503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:52:29.284 [DEBUG] [Thread-63503] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:52:29.285 [DEBUG] [Thread-63503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:52:29.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:52:29.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:52:29.344 [DEBUG] [Thread-63503] [transport.py] [_log()] userauth is OK
2025-11-17T23:52:29.344 [DEBUG] [Thread-63503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:52:29.344 [DEBUG] [Thread-63503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:52:29.344 [DEBUG] [Thread-63503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:52:29.344 [DEBUG] [Thread-63503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:52:29.365 [INFO] [Thread-63503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:52:29.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:52:29.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:52:30.212 [DEBUG] [Thread-63503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:52:30.213 [DEBUG] [Thread-63503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:52:30.260 [DEBUG] [Thread-63503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:52:30.261 [DEBUG] [Thread-63503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:52:30.269 [DEBUG] [Thread-63503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:52:30.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:52:30.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:52:30.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:52:30.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:52:30.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:52:30.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:52:30.304 [DEBUG] [Thread-63503] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:52:43.608 [DEBUG] [Thread-63505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:52:52.083 [DEBUG] [Thread-63506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:52:58.658 [DEBUG] [Thread-63507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:53:00.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:53:00.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:53:00.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:53:00.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 52, 47), 10.45, 49.0, 0.0, 19.67, 13.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:53:00.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:52:47
2025-11-17T23:53:01.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:53:01.271 [DEBUG] [Thread-63508] [transport.py] [_log()] starting thread (client mode): 0xd07016c0
2025-11-17T23:53:01.271 [DEBUG] [Thread-63508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:53:01.292 [DEBUG] [Thread-63508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:53:01.292 [INFO] [Thread-63508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:53:01.294 [DEBUG] [Thread-63508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:53:01.294 [DEBUG] [Thread-63508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:53:01.294 [DEBUG] [Thread-63508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] client lang: <none>
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] server lang: <none>
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] kex follows: False
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:53:01.295 [DEBUG] [Thread-63508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:53:01.296 [DEBUG] [Thread-63508] [transport.py] [_log()] Compression: none
2025-11-17T23:53:01.296 [DEBUG] [Thread-63508] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:53:01.309 [DEBUG] [Thread-63508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:53:01.310 [DEBUG] [Thread-63508] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:53:01.310 [DEBUG] [Thread-63508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:53:01.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:53:01.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:53:01.312 [DEBUG] [Thread-63508] [transport.py] [_log()] userauth is OK
2025-11-17T23:53:01.312 [DEBUG] [Thread-63508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:53:01.312 [DEBUG] [Thread-63508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:53:01.312 [DEBUG] [Thread-63508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:53:01.312 [DEBUG] [Thread-63508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:53:01.330 [INFO] [Thread-63508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:53:01.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:53:01.913 [DEBUG] [Thread-63508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:53:01.913 [DEBUG] [Thread-63508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:53:01.914 [DEBUG] [Thread-63508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:53:01.954 [DEBUG] [Thread-63508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:53:01.954 [DEBUG] [Thread-63508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:53:01.957 [DEBUG] [Thread-63508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:53:01.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:53:01.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:53:01.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:53:01.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:53:01.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:53:01.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:53:01.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:53:01.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:53:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:53:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.911504 -999.00  +13.60  15.44     53   +4.40 1 1 1 1 1     0    0 8.24 -48.26 ZNESW 14.8 15.4 150.4 23.1 14.2 -22.9 14.2 -21.4 13.9 -21.3 14.2 -22.3
2025-11-17T23:53:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:53:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:53:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.911504
2025-11-17T23:53:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:53:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:53:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:53:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:53:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:53:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:52:47', tmtdew=10.45, humidity=49.0, cloud=0.0, wind=19.67, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:52:47', seeing=2.16, atlas_timestamp='2025-11-17T21:52:33.946', atlas_cloud=1, atlas_rain=1, zp_data=[0.22574999999999967, 0.19624999999999915, 0.25624999999999964, 0.2644999999999982, 0.2475000000000005, 0.35575000000000045, 0.285499999999999, 0.2032500000000006, 0.2184999999999988, 0.2480000000000011, 0.32474999999999987, 0.23150000000000048, 0.3000000000000007, 0.3067499999999992, 0.20800000000000018, 0.1714999999999982, 0.17675000000000018, 0.2569999999999997, 0.3849999999999998, 0.7252499999999991, 0.5119999999999987, 0.3012499999999996, 0.16825000000000045, 0.22375000000000078, 0.17549999999999777, 0.24450000000000038, 0.4787499999999998, 0.6335000000000006, 0.5170000000000003, 0.29100000000000126, 0.19950000000000045, 0.3020000000000005, 0.25574999999999903], zp_timestamp='2025-11-17T21:51:00')
2025-11-17T23:53:01.982 [DEBUG] [Thread-63508] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:53:02.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:53:02.087 [DEBUG] [Thread-63511] [transport.py] [_log()] starting thread (client mode): 0xd07558d0
2025-11-17T23:53:02.087 [DEBUG] [Thread-63511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:53:02.102 [DEBUG] [Thread-63511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:53:02.102 [INFO] [Thread-63511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] client lang: <none>
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] server lang: <none>
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] kex follows: False
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:53:02.109 [DEBUG] [Thread-63511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:53:02.110 [DEBUG] [Thread-63511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:53:02.110 [DEBUG] [Thread-63511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:53:02.110 [DEBUG] [Thread-63511] [transport.py] [_log()] Compression: none
2025-11-17T23:53:02.110 [DEBUG] [Thread-63511] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:53:02.169 [DEBUG] [Thread-63511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:53:02.169 [DEBUG] [Thread-63511] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:53:02.169 [DEBUG] [Thread-63511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:53:02.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:53:02.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:53:02.231 [DEBUG] [Thread-63511] [transport.py] [_log()] userauth is OK
2025-11-17T23:53:02.232 [DEBUG] [Thread-63511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:53:02.232 [DEBUG] [Thread-63511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:53:02.232 [DEBUG] [Thread-63511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:53:02.232 [DEBUG] [Thread-63511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:53:02.250 [INFO] [Thread-63511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:53:02.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:53:02.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:53:03.156 [DEBUG] [Thread-63511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:53:03.156 [DEBUG] [Thread-63511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:53:03.204 [DEBUG] [Thread-63511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:53:03.204 [DEBUG] [Thread-63511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:53:03.213 [DEBUG] [Thread-63511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:53:03.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:53:03.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:53:03.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:53:03.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:53:03.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:53:03.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:53:03.253 [DEBUG] [Thread-63511] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:53:13.687 [DEBUG] [Thread-63513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:53:19.606 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:53:19.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:53:28.726 [DEBUG] [Thread-63514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:53:33.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:53:33.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:53:33.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:53:33.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 53, 19), 10.44, 49.06, 0.0, 18.95, 13.57, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:53:33.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:53:19
2025-11-17T23:53:34.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:53:34.196 [DEBUG] [Thread-63515] [transport.py] [_log()] starting thread (client mode): 0xd3150d30
2025-11-17T23:53:34.196 [DEBUG] [Thread-63515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:53:34.216 [DEBUG] [Thread-63515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:53:34.216 [INFO] [Thread-63515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:53:34.219 [DEBUG] [Thread-63515] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:53:34.219 [DEBUG] [Thread-63515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:53:34.219 [DEBUG] [Thread-63515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:53:34.219 [DEBUG] [Thread-63515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] client lang: <none>
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] server lang: <none>
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] kex follows: False
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:53:34.220 [DEBUG] [Thread-63515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:53:34.221 [DEBUG] [Thread-63515] [transport.py] [_log()] Compression: none
2025-11-17T23:53:34.221 [DEBUG] [Thread-63515] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:53:34.239 [DEBUG] [Thread-63515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:53:34.239 [DEBUG] [Thread-63515] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:53:34.240 [DEBUG] [Thread-63515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:53:34.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:53:34.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:53:34.242 [DEBUG] [Thread-63515] [transport.py] [_log()] userauth is OK
2025-11-17T23:53:34.243 [DEBUG] [Thread-63515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:53:34.243 [DEBUG] [Thread-63515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:53:34.243 [DEBUG] [Thread-63515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:53:34.243 [DEBUG] [Thread-63515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:53:34.263 [INFO] [Thread-63515] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:53:34.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:53:34.910 [DEBUG] [Thread-63515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:53:34.910 [DEBUG] [Thread-63515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:53:34.910 [DEBUG] [Thread-63515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:53:34.950 [DEBUG] [Thread-63515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:53:34.951 [DEBUG] [Thread-63515] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:53:34.953 [DEBUG] [Thread-63515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:53:34.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:53:34.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:53:34.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:53:34.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:53:34.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:53:34.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:53:34.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:53:34.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:53:34.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:53:34.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.911851 -999.00  +13.70  18.86     53   +4.40 1 1 1 1 1     0    0 8.28 -49.14 ZNESW 17.1 18.9 141.4 22.4 14.2 -22.9 14.1 -21.5 13.9 -21.3 14.2 -22.3
2025-11-17T23:53:34.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:53:34.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:53:34.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.911851
2025-11-17T23:53:34.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:53:34.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:53:34.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:53:34.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:53:34.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:53:34.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:53:19', tmtdew=10.44, humidity=49.06, cloud=0.0, wind=18.95, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:53:19', seeing=2.16, atlas_timestamp='2025-11-17T21:53:03.926', atlas_cloud=1, atlas_rain=1, zp_data=[0.22574999999999967, 0.19624999999999915, 0.25624999999999964, 0.2644999999999982, 0.2475000000000005, 0.35575000000000045, 0.285499999999999, 0.2032500000000006, 0.2184999999999988, 0.2480000000000011, 0.32474999999999987, 0.23150000000000048, 0.3000000000000007, 0.3067499999999992, 0.20800000000000018, 0.1714999999999982, 0.17675000000000018, 0.2569999999999997, 0.3849999999999998, 0.7252499999999991, 0.5119999999999987, 0.3012499999999996, 0.16825000000000045, 0.22375000000000078, 0.17549999999999777, 0.24450000000000038, 0.4787499999999998, 0.6335000000000006, 0.5170000000000003, 0.29100000000000126, 0.19950000000000045, 0.3020000000000005, 0.25574999999999903], zp_timestamp='2025-11-17T21:51:00')
2025-11-17T23:53:34.980 [DEBUG] [Thread-63515] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:53:35.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:53:35.078 [DEBUG] [Thread-63518] [transport.py] [_log()] starting thread (client mode): 0xd31611b0
2025-11-17T23:53:35.078 [DEBUG] [Thread-63518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:53:35.092 [DEBUG] [Thread-63518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:53:35.092 [INFO] [Thread-63518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] client lang: <none>
2025-11-17T23:53:35.100 [DEBUG] [Thread-63518] [transport.py] [_log()] server lang: <none>
2025-11-17T23:53:35.101 [DEBUG] [Thread-63518] [transport.py] [_log()] kex follows: False
2025-11-17T23:53:35.101 [DEBUG] [Thread-63518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:53:35.101 [DEBUG] [Thread-63518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:53:35.101 [DEBUG] [Thread-63518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:53:35.101 [DEBUG] [Thread-63518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:53:35.101 [DEBUG] [Thread-63518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:53:35.101 [DEBUG] [Thread-63518] [transport.py] [_log()] Compression: none
2025-11-17T23:53:35.101 [DEBUG] [Thread-63518] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:53:35.161 [DEBUG] [Thread-63518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:53:35.162 [DEBUG] [Thread-63518] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:53:35.162 [DEBUG] [Thread-63518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:53:35.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:53:35.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:53:35.219 [DEBUG] [Thread-63518] [transport.py] [_log()] userauth is OK
2025-11-17T23:53:35.220 [DEBUG] [Thread-63518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:53:35.220 [DEBUG] [Thread-63518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:53:35.220 [DEBUG] [Thread-63518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:53:35.220 [DEBUG] [Thread-63518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:53:35.237 [INFO] [Thread-63518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:53:35.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:53:35.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:53:36.097 [DEBUG] [Thread-63518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:53:36.098 [DEBUG] [Thread-63518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:53:36.145 [DEBUG] [Thread-63518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:53:36.145 [DEBUG] [Thread-63518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:53:36.154 [DEBUG] [Thread-63518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:53:36.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:53:36.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:53:36.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:53:36.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:53:36.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:53:36.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:53:36.187 [DEBUG] [Thread-63518] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:53:43.755 [DEBUG] [Thread-63520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:53:52.137 [DEBUG] [Thread-63521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:53:58.794 [DEBUG] [Thread-63522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:54:06.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:54:06.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:54:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:54:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 53, 51), 10.44, 49.4, 0.0, 18.53, 13.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:54:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:53:51
2025-11-17T23:54:06.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:54:07.126 [DEBUG] [Thread-63523] [transport.py] [_log()] starting thread (client mode): 0xd3162c50
2025-11-17T23:54:07.127 [DEBUG] [Thread-63523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:54:07.146 [DEBUG] [Thread-63523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:54:07.146 [INFO] [Thread-63523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:54:07.149 [DEBUG] [Thread-63523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:54:07.149 [DEBUG] [Thread-63523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:54:07.149 [DEBUG] [Thread-63523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:54:07.149 [DEBUG] [Thread-63523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:54:07.149 [DEBUG] [Thread-63523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] client lang: <none>
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] server lang: <none>
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] kex follows: False
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] Compression: none
2025-11-17T23:54:07.150 [DEBUG] [Thread-63523] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:54:07.168 [DEBUG] [Thread-63523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:54:07.168 [DEBUG] [Thread-63523] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:54:07.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:54:07.169 [DEBUG] [Thread-63523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:54:07.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:54:07.170 [DEBUG] [Thread-63523] [transport.py] [_log()] userauth is OK
2025-11-17T23:54:07.170 [DEBUG] [Thread-63523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:54:07.170 [DEBUG] [Thread-63523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:54:07.170 [DEBUG] [Thread-63523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:54:07.170 [DEBUG] [Thread-63523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:54:07.184 [INFO] [Thread-63523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:54:07.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:54:07.805 [DEBUG] [Thread-63523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:54:07.805 [DEBUG] [Thread-63523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:54:07.805 [DEBUG] [Thread-63523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:54:07.846 [DEBUG] [Thread-63523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:54:07.846 [DEBUG] [Thread-63523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:54:07.849 [DEBUG] [Thread-63523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:54:07.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:54:07.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:54:07.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:54:07.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:54:07.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:54:07.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:54:07.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:54:07.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:54:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:54:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.912198 -999.00  +13.60  12.46     53   +4.40 1 1 1 1 1     0    0 8.34 -52.30 ZNESW 12.1 12.5 154.0 20.0 14.2 -22.7 14.2 -21.5 13.9 -21.3 14.2 -22.3
2025-11-17T23:54:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:54:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:54:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.912198
2025-11-17T23:54:07.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:54:07.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:54:07.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:54:07.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:54:07.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:54:07.870 [DEBUG] [Thread-63523] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:54:07.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:53:51', tmtdew=10.44, humidity=49.4, cloud=0.0, wind=18.53, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:53:51', seeing=1.97, atlas_timestamp='2025-11-17T21:53:33.907', atlas_cloud=1, atlas_rain=1, zp_data=[0.22574999999999967, 0.19624999999999915, 0.25624999999999964, 0.2644999999999982, 0.2475000000000005, 0.35575000000000045, 0.285499999999999, 0.2032500000000006, 0.2184999999999988, 0.2480000000000011, 0.32474999999999987, 0.23150000000000048, 0.3000000000000007, 0.3067499999999992, 0.20800000000000018, 0.1714999999999982, 0.17675000000000018, 0.2569999999999997, 0.3849999999999998, 0.7252499999999991, 0.5119999999999987, 0.3012499999999996, 0.16825000000000045, 0.22375000000000078, 0.17549999999999777, 0.24450000000000038, 0.4787499999999998, 0.6335000000000006, 0.5170000000000003, 0.29100000000000126, 0.19950000000000045, 0.3020000000000005, 0.25574999999999903], zp_timestamp='2025-11-17T21:51:00')
2025-11-17T23:54:07.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:54:07.967 [DEBUG] [Thread-63526] [transport.py] [_log()] starting thread (client mode): 0xd317c9a0
2025-11-17T23:54:07.967 [DEBUG] [Thread-63526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:54:07.982 [DEBUG] [Thread-63526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:54:07.982 [INFO] [Thread-63526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:54:07.989 [DEBUG] [Thread-63526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:54:07.989 [DEBUG] [Thread-63526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:54:07.989 [DEBUG] [Thread-63526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] client lang: <none>
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] server lang: <none>
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] kex follows: False
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] Compression: none
2025-11-17T23:54:07.990 [DEBUG] [Thread-63526] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:54:08.048 [DEBUG] [Thread-63526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:54:08.048 [DEBUG] [Thread-63526] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:54:08.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:54:08.049 [DEBUG] [Thread-63526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:54:08.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:54:08.108 [DEBUG] [Thread-63526] [transport.py] [_log()] userauth is OK
2025-11-17T23:54:08.108 [DEBUG] [Thread-63526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:54:08.108 [DEBUG] [Thread-63526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:54:08.108 [DEBUG] [Thread-63526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:54:08.108 [DEBUG] [Thread-63526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:54:08.127 [INFO] [Thread-63526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:54:08.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:54:08.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:54:08.954 [DEBUG] [Thread-63526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:54:08.954 [DEBUG] [Thread-63526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:54:09.002 [DEBUG] [Thread-63526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:54:09.002 [DEBUG] [Thread-63526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:54:09.011 [DEBUG] [Thread-63526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:54:09.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:54:09.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:54:09.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
2025-11-17T23:54:09.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:54:09.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:54:09.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:54:09.045 [DEBUG] [Thread-63526] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:54:13.822 [DEBUG] [Thread-63528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:54:19.810 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:54:19.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:54:28.869 [DEBUG] [Thread-63529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:54:39.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:54:39.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:54:39.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:54:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 54, 23), 10.42, 49.45, 0.0, 18.0, 13.51, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:54:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:54:23
2025-11-17T23:54:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:54:40.016 [DEBUG] [Thread-63530] [transport.py] [_log()] starting thread (client mode): 0xd3160460
2025-11-17T23:54:40.016 [DEBUG] [Thread-63530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:54:40.036 [DEBUG] [Thread-63530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:54:40.036 [INFO] [Thread-63530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:54:40.037 [DEBUG] [Thread-63530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:54:40.037 [DEBUG] [Thread-63530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:54:40.037 [DEBUG] [Thread-63530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] client lang: <none>
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] server lang: <none>
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] kex follows: False
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:54:40.038 [DEBUG] [Thread-63530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:54:40.039 [DEBUG] [Thread-63530] [transport.py] [_log()] Compression: none
2025-11-17T23:54:40.039 [DEBUG] [Thread-63530] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:54:40.048 [DEBUG] [Thread-63530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:54:40.048 [DEBUG] [Thread-63530] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:54:40.049 [DEBUG] [Thread-63530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:54:40.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:54:40.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:54:40.050 [DEBUG] [Thread-63530] [transport.py] [_log()] userauth is OK
2025-11-17T23:54:40.051 [DEBUG] [Thread-63530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:54:40.051 [DEBUG] [Thread-63530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:54:40.051 [DEBUG] [Thread-63530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:54:40.051 [DEBUG] [Thread-63530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:54:40.087 [INFO] [Thread-63530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:54:40.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:54:40.689 [DEBUG] [Thread-63530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:54:40.689 [DEBUG] [Thread-63530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:54:40.689 [DEBUG] [Thread-63530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:54:40.730 [DEBUG] [Thread-63530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:54:40.730 [DEBUG] [Thread-63530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:54:40.733 [DEBUG] [Thread-63530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:54:40.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:54:40.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:54:40.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:54:40.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:54:40.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:54:40.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:54:40.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:54:40.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:54:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:54:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.912545 -999.00  +13.60  17.55     53   +4.40 1 2 1 1 1     0    0 8.12 -54.54 ZNEsW 20.6 17.6 142.0 23.0 14.2 -22.6 14.2 -21.5 13.9 -21.4 14.2 -22.2
2025-11-17T23:54:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:54:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:54:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.912545
2025-11-17T23:54:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:54:40.756 [DEBUG] [Thread-63530] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:54:40.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:54:40.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:54:40.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:54:40.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:54:40.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:54:23', tmtdew=10.42, humidity=49.45, cloud=0.0, wind=18.0, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:54:23', seeing=1.76, atlas_timestamp='2025-11-17T21:54:03.888', atlas_cloud=2, atlas_rain=1, zp_data=[0.22574999999999967, 0.19624999999999915, 0.25624999999999964, 0.2644999999999982, 0.2475000000000005, 0.35575000000000045, 0.285499999999999, 0.2032500000000006, 0.2184999999999988, 0.2480000000000011, 0.32474999999999987, 0.23150000000000048, 0.3000000000000007, 0.3067499999999992, 0.20800000000000018, 0.1714999999999982, 0.17675000000000018, 0.2569999999999997, 0.3849999999999998, 0.7252499999999991, 0.5119999999999987, 0.3012499999999996, 0.16825000000000045, 0.22375000000000078, 0.17549999999999777, 0.24450000000000038, 0.4787499999999998, 0.6335000000000006, 0.5170000000000003, 0.29100000000000126, 0.19950000000000045, 0.3020000000000005, 0.25574999999999903], zp_timestamp='2025-11-17T21:51:00')
2025-11-17T23:54:40.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:54:40.851 [DEBUG] [Thread-63533] [transport.py] [_log()] starting thread (client mode): 0xd31530a0
2025-11-17T23:54:40.851 [DEBUG] [Thread-63533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:54:40.866 [DEBUG] [Thread-63533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:54:40.866 [INFO] [Thread-63533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:54:40.873 [DEBUG] [Thread-63533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:54:40.873 [DEBUG] [Thread-63533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:54:40.873 [DEBUG] [Thread-63533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] client lang: <none>
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] server lang: <none>
2025-11-17T23:54:40.874 [DEBUG] [Thread-63533] [transport.py] [_log()] kex follows: False
2025-11-17T23:54:40.875 [DEBUG] [Thread-63533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:54:40.875 [DEBUG] [Thread-63533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:54:40.875 [DEBUG] [Thread-63533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:54:40.875 [DEBUG] [Thread-63533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:54:40.875 [DEBUG] [Thread-63533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:54:40.875 [DEBUG] [Thread-63533] [transport.py] [_log()] Compression: none
2025-11-17T23:54:40.875 [DEBUG] [Thread-63533] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:54:40.933 [DEBUG] [Thread-63533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:54:40.933 [DEBUG] [Thread-63533] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:54:40.934 [DEBUG] [Thread-63533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:54:40.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:54:40.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:54:40.992 [DEBUG] [Thread-63533] [transport.py] [_log()] userauth is OK
2025-11-17T23:54:40.992 [DEBUG] [Thread-63533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:54:40.992 [DEBUG] [Thread-63533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:54:40.992 [DEBUG] [Thread-63533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:54:40.992 [DEBUG] [Thread-63533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:54:41.011 [INFO] [Thread-63533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:54:41.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:54:41.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:54:41.827 [DEBUG] [Thread-63533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:54:41.828 [DEBUG] [Thread-63533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:54:41.875 [DEBUG] [Thread-63533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:54:41.875 [DEBUG] [Thread-63533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:54:41.884 [DEBUG] [Thread-63533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:54:41.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:54:41.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:54:41.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:54:41.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:54:41.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:54:41.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:54:41.920 [DEBUG] [Thread-63533] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:54:43.896 [DEBUG] [Thread-63535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:54:52.207 [DEBUG] [Thread-63536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:54:58.938 [DEBUG] [Thread-63537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:55:11.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:55:11.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:55:11.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:55:12.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 54, 55), 10.32, 49.46, 0.0, 21.1, 13.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:55:12.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:54:55
2025-11-17T23:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:55:12.876 [DEBUG] [Thread-63538] [transport.py] [_log()] starting thread (client mode): 0xd317d990
2025-11-17T23:55:12.876 [DEBUG] [Thread-63538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:55:12.891 [DEBUG] [Thread-63538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:55:12.891 [INFO] [Thread-63538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:55:12.894 [DEBUG] [Thread-63538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] client lang: <none>
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] server lang: <none>
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] kex follows: False
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:55:12.895 [DEBUG] [Thread-63538] [transport.py] [_log()] Compression: none
2025-11-17T23:55:12.896 [DEBUG] [Thread-63538] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:55:12.912 [DEBUG] [Thread-63538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:55:12.913 [DEBUG] [Thread-63538] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:55:12.913 [DEBUG] [Thread-63538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:55:12.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:55:12.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:55:12.915 [DEBUG] [Thread-63538] [transport.py] [_log()] userauth is OK
2025-11-17T23:55:12.916 [DEBUG] [Thread-63538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:55:12.916 [DEBUG] [Thread-63538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:55:12.916 [DEBUG] [Thread-63538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:55:12.916 [DEBUG] [Thread-63538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:55:12.935 [INFO] [Thread-63538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:55:12.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:55:13.618 [DEBUG] [Thread-63538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:55:13.618 [DEBUG] [Thread-63538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:55:13.619 [DEBUG] [Thread-63538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:55:13.660 [DEBUG] [Thread-63538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:55:13.660 [DEBUG] [Thread-63538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:55:13.663 [DEBUG] [Thread-63538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:55:13.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:55:13.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:55:13.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:55:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:55:13.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:55:13.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:55:13.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:55:13.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:55:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:55:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.912893 -999.00  +13.60  19.73     54   +4.50 1 2 1 1 1     0    0 7.97 -57.26 ZNEsW 14.1 19.7 142.4 23.4 14.2 -22.5 14.1 -21.4 13.9 -21.2 14.2 -22.2
2025-11-17T23:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.912893
2025-11-17T23:55:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:55:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:55:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:55:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:55:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:55:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:54:55', tmtdew=10.32, humidity=49.46, cloud=0.0, wind=21.1, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:54:55', seeing=1.68, atlas_timestamp='2025-11-17T21:54:33.955', atlas_cloud=2, atlas_rain=1, zp_data=[0.22574999999999967, 0.19624999999999915, 0.25624999999999964, 0.2644999999999982, 0.2475000000000005, 0.35575000000000045, 0.285499999999999, 0.2032500000000006, 0.2184999999999988, 0.2480000000000011, 0.32474999999999987, 0.23150000000000048, 0.3000000000000007, 0.3067499999999992, 0.20800000000000018, 0.1714999999999982, 0.17675000000000018, 0.2569999999999997, 0.3849999999999998, 0.7252499999999991, 0.5119999999999987, 0.3012499999999996, 0.16825000000000045, 0.22375000000000078, 0.17549999999999777, 0.24450000000000038, 0.4787499999999998, 0.6335000000000006, 0.5170000000000003, 0.29100000000000126, 0.19950000000000045, 0.3020000000000005, 0.25574999999999903], zp_timestamp='2025-11-17T21:51:00')
2025-11-17T23:55:13.688 [DEBUG] [Thread-63538] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:55:13.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:55:13.786 [DEBUG] [Thread-63541] [transport.py] [_log()] starting thread (client mode): 0xd0702860
2025-11-17T23:55:13.786 [DEBUG] [Thread-63541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:55:13.800 [DEBUG] [Thread-63541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:55:13.800 [INFO] [Thread-63541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] client lang: <none>
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] server lang: <none>
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] kex follows: False
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] Compression: none
2025-11-17T23:55:13.808 [DEBUG] [Thread-63541] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:55:13.868 [DEBUG] [Thread-63541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:55:13.868 [DEBUG] [Thread-63541] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:55:13.869 [DEBUG] [Thread-63541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:55:13.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:55:13.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:55:13.924 [DEBUG] [Thread-63541] [transport.py] [_log()] userauth is OK
2025-11-17T23:55:13.924 [DEBUG] [Thread-63541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:55:13.924 [DEBUG] [Thread-63541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:55:13.925 [DEBUG] [Thread-63541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:55:13.925 [DEBUG] [Thread-63541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:55:13.944 [INFO] [Thread-63541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:55:13.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:55:13.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:55:13.967 [DEBUG] [Thread-63543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:55:14.792 [DEBUG] [Thread-63541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:55:14.792 [DEBUG] [Thread-63541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:55:14.840 [DEBUG] [Thread-63541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:55:14.840 [DEBUG] [Thread-63541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:55:14.850 [DEBUG] [Thread-63541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:55:14.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:55:14.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:55:14.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:55:14.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:55:14.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:55:14.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:55:14.884 [DEBUG] [Thread-63541] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:55:20.014 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:55:20.016 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:55:29.007 [DEBUG] [Thread-63544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:55:44.035 [DEBUG] [Thread-63545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:55:44.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:55:44.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:55:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:55:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 55, 27), 10.34, 49.41, 0.0, 21.23, 13.54, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:55:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:55:27
2025-11-17T23:55:45.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:55:45.884 [DEBUG] [Thread-63546] [transport.py] [_log()] starting thread (client mode): 0xd07016c0
2025-11-17T23:55:45.885 [DEBUG] [Thread-63546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:55:45.900 [DEBUG] [Thread-63546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:55:45.900 [INFO] [Thread-63546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:55:45.902 [DEBUG] [Thread-63546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] client lang: <none>
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] server lang: <none>
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] kex follows: False
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] Compression: none
2025-11-17T23:55:45.903 [DEBUG] [Thread-63546] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:55:45.920 [DEBUG] [Thread-63546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:55:45.920 [DEBUG] [Thread-63546] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:55:45.920 [DEBUG] [Thread-63546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:55:45.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:55:45.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:55:45.921 [DEBUG] [Thread-63546] [transport.py] [_log()] userauth is OK
2025-11-17T23:55:45.921 [DEBUG] [Thread-63546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:55:45.921 [DEBUG] [Thread-63546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:55:45.921 [DEBUG] [Thread-63546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:55:45.921 [DEBUG] [Thread-63546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:55:45.930 [INFO] [Thread-63546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:55:45.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:55:46.541 [DEBUG] [Thread-63546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:55:46.541 [DEBUG] [Thread-63546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:55:46.541 [DEBUG] [Thread-63546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:55:46.582 [DEBUG] [Thread-63546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:55:46.582 [DEBUG] [Thread-63546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:55:46.584 [DEBUG] [Thread-63546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:55:46.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:55:46.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:55:46.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:55:46.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:55:46.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:55:46.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:55:46.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.912893 -999.00  +13.60  19.73     54   +4.50 1 2 1 1 1     0    0 7.97 -57.26 ZNEsW 14.1 19.7 142.4 23.4 14.2 -22.5 14.1 -21.4 13.9 -21.2 14.2 -22.2
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.912893
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:55:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:55:27', tmtdew=10.34, humidity=49.41, cloud=0.0, wind=21.23, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:55:27', seeing=1.63, atlas_timestamp='2025-11-17T21:54:33.955', atlas_cloud=2, atlas_rain=1, zp_data=[0.20425000000000004, 0.11925000000000097, 0.18725000000000058, 0.2704999999999984, 0.3465000000000007, 0.25975000000000037, 0.22199999999999953, 0.15725000000000122, 0.18099999999999916, 0.21700000000000053, 0.38424999999999976, 0.4220000000000006, 0.410499999999999, 0.3122499999999988, 0.10749999999999815, 0.12599999999999945, 0.1822499999999998, 0.2944999999999993, 0.6059999999999999, 0.5252499999999989, 0.49099999999999877, 0.33674999999999855, 0.07525000000000048, 0.08274999999999899, 0.17999999999999972, 0.26449999999999996, 0.8127500000000003, 0.4195000000000002, 0.40500000000000025, 0.21200000000000152, 0.07150000000000034, 0.09700000000000131, 0.13074999999999903], zp_timestamp='2025-11-17T21:54:00')
2025-11-17T23:55:46.600 [DEBUG] [Thread-63546] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:55:46.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:55:46.685 [DEBUG] [Thread-63549] [transport.py] [_log()] starting thread (client mode): 0xd317c970
2025-11-17T23:55:46.685 [DEBUG] [Thread-63549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:55:46.699 [DEBUG] [Thread-63549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:55:46.699 [INFO] [Thread-63549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] client lang: <none>
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] server lang: <none>
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] kex follows: False
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] Compression: none
2025-11-17T23:55:46.707 [DEBUG] [Thread-63549] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:55:46.763 [DEBUG] [Thread-63549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:55:46.763 [DEBUG] [Thread-63549] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:55:46.763 [DEBUG] [Thread-63549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:55:46.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:55:46.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:55:46.820 [DEBUG] [Thread-63549] [transport.py] [_log()] userauth is OK
2025-11-17T23:55:46.820 [DEBUG] [Thread-63549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:55:46.820 [DEBUG] [Thread-63549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:55:46.820 [DEBUG] [Thread-63549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:55:46.820 [DEBUG] [Thread-63549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:55:46.837 [INFO] [Thread-63549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:55:46.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:55:46.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:55:47.679 [DEBUG] [Thread-63549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:55:47.679 [DEBUG] [Thread-63549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:55:47.727 [DEBUG] [Thread-63549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:55:47.727 [DEBUG] [Thread-63549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:55:47.735 [DEBUG] [Thread-63549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:55:47.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:55:47.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:55:47.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:55:47.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:55:47.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:55:47.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:55:47.767 [DEBUG] [Thread-63549] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:55:52.269 [DEBUG] [Thread-63551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:55:59.060 [DEBUG] [Thread-63552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:56:14.101 [DEBUG] [Thread-63553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:56:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:56:17.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:56:17.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:56:18.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 55, 59), 10.32, 49.46, 0.0, 21.12, 13.52, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:56:18.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:55:59
2025-11-17T23:56:18.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:56:18.707 [DEBUG] [Thread-63554] [transport.py] [_log()] starting thread (client mode): 0xd317f0d0
2025-11-17T23:56:18.708 [DEBUG] [Thread-63554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:56:18.728 [DEBUG] [Thread-63554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:56:18.729 [INFO] [Thread-63554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] client lang: <none>
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] server lang: <none>
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] kex follows: False
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:56:18.732 [DEBUG] [Thread-63554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:56:18.733 [DEBUG] [Thread-63554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:56:18.733 [DEBUG] [Thread-63554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:56:18.733 [DEBUG] [Thread-63554] [transport.py] [_log()] Compression: none
2025-11-17T23:56:18.733 [DEBUG] [Thread-63554] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:56:18.750 [DEBUG] [Thread-63554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:56:18.750 [DEBUG] [Thread-63554] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:56:18.751 [DEBUG] [Thread-63554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:56:18.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:56:18.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:56:18.752 [DEBUG] [Thread-63554] [transport.py] [_log()] userauth is OK
2025-11-17T23:56:18.753 [DEBUG] [Thread-63554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:56:18.753 [DEBUG] [Thread-63554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:56:18.753 [DEBUG] [Thread-63554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:56:18.753 [DEBUG] [Thread-63554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:56:18.776 [INFO] [Thread-63554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:56:18.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:56:19.419 [DEBUG] [Thread-63554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:56:19.419 [DEBUG] [Thread-63554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:56:19.419 [DEBUG] [Thread-63554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:56:19.461 [DEBUG] [Thread-63554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:56:19.461 [DEBUG] [Thread-63554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:56:19.463 [DEBUG] [Thread-63554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:56:19.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:56:19.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:56:19.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:56:19.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:56:19.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:56:19.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:56:19.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:56:19.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:56:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:56:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.913587 -999.00  +13.60  19.13     54   +4.50 1 2 1 1 1     0    0 8.14 -58.31 ZNEsW 21.2 19.1 142.6 24.8 14.2 -22.5 14.1 -21.3 13.9 -21.1 14.2 -22.3
2025-11-17T23:56:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:56:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:56:19.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.913587
2025-11-17T23:56:19.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:56:19.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:56:19.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:56:19.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:56:19.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:56:19.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:55:59', tmtdew=10.32, humidity=49.46, cloud=0.0, wind=21.12, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:55:59', seeing=1.63, atlas_timestamp='2025-11-17T21:55:33.917', atlas_cloud=2, atlas_rain=1, zp_data=[0.20425000000000004, 0.11925000000000097, 0.18725000000000058, 0.2704999999999984, 0.3465000000000007, 0.25975000000000037, 0.22199999999999953, 0.15725000000000122, 0.18099999999999916, 0.21700000000000053, 0.38424999999999976, 0.4220000000000006, 0.410499999999999, 0.3122499999999988, 0.10749999999999815, 0.12599999999999945, 0.1822499999999998, 0.2944999999999993, 0.6059999999999999, 0.5252499999999989, 0.49099999999999877, 0.33674999999999855, 0.07525000000000048, 0.08274999999999899, 0.17999999999999972, 0.26449999999999996, 0.8127500000000003, 0.4195000000000002, 0.40500000000000025, 0.21200000000000152, 0.07150000000000034, 0.09700000000000131, 0.13074999999999903], zp_timestamp='2025-11-17T21:54:00')
2025-11-17T23:56:19.488 [DEBUG] [Thread-63554] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:56:19.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:56:19.597 [DEBUG] [Thread-63557] [transport.py] [_log()] starting thread (client mode): 0xd3161930
2025-11-17T23:56:19.598 [DEBUG] [Thread-63557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:56:19.613 [DEBUG] [Thread-63557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:56:19.613 [INFO] [Thread-63557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:56:19.620 [DEBUG] [Thread-63557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:56:19.620 [DEBUG] [Thread-63557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:56:19.620 [DEBUG] [Thread-63557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] client lang: <none>
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] server lang: <none>
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] kex follows: False
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] Compression: none
2025-11-17T23:56:19.621 [DEBUG] [Thread-63557] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:56:19.680 [DEBUG] [Thread-63557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:56:19.680 [DEBUG] [Thread-63557] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:56:19.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:56:19.681 [DEBUG] [Thread-63557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:56:19.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:56:19.736 [DEBUG] [Thread-63557] [transport.py] [_log()] userauth is OK
2025-11-17T23:56:19.736 [DEBUG] [Thread-63557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:56:19.736 [DEBUG] [Thread-63557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:56:19.736 [DEBUG] [Thread-63557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:56:19.736 [DEBUG] [Thread-63557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:56:19.755 [INFO] [Thread-63557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:56:19.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:56:19.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:56:20.220 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:56:20.221 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:56:20.584 [DEBUG] [Thread-63557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:56:20.584 [DEBUG] [Thread-63557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:56:20.631 [DEBUG] [Thread-63557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:56:20.632 [DEBUG] [Thread-63557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:56:20.640 [DEBUG] [Thread-63557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:56:20.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:56:20.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:56:20.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:56:20.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:56:20.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:56:20.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:56:20.675 [DEBUG] [Thread-63557] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:56:29.129 [DEBUG] [Thread-63559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:56:44.160 [DEBUG] [Thread-63560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:56:50.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:56:50.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:56:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:56:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 56, 31), 10.3, 49.53, 0.0, 25.27, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:56:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:56:31
2025-11-17T23:56:51.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:56:51.602 [DEBUG] [Thread-63561] [transport.py] [_log()] starting thread (client mode): 0xd07a9e70
2025-11-17T23:56:51.603 [DEBUG] [Thread-63561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:56:51.623 [DEBUG] [Thread-63561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:56:51.623 [INFO] [Thread-63561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:56:51.627 [DEBUG] [Thread-63561] [transport.py] [_log()] client lang: <none>
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] server lang: <none>
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] kex follows: False
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] Compression: none
2025-11-17T23:56:51.628 [DEBUG] [Thread-63561] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:56:51.651 [DEBUG] [Thread-63561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:56:51.651 [DEBUG] [Thread-63561] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:56:51.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:56:51.652 [DEBUG] [Thread-63561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:56:51.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:56:51.654 [DEBUG] [Thread-63561] [transport.py] [_log()] userauth is OK
2025-11-17T23:56:51.654 [DEBUG] [Thread-63561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:56:51.654 [DEBUG] [Thread-63561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:56:51.654 [DEBUG] [Thread-63561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:56:51.654 [DEBUG] [Thread-63561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:56:51.673 [INFO] [Thread-63561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:56:51.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:56:52.325 [DEBUG] [Thread-63563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:56:52.346 [DEBUG] [Thread-63561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:56:52.346 [DEBUG] [Thread-63561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:56:52.346 [DEBUG] [Thread-63561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:56:52.388 [DEBUG] [Thread-63561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:56:52.388 [DEBUG] [Thread-63561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:56:52.391 [DEBUG] [Thread-63561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:56:52.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:56:52.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:56:52.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:56:52.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:56:52.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:56:52.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:56:52.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:56:52.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:56:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:56:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.913934 -999.00  +13.60  17.39     54   +4.50 1 2 1 1 1     0    0 7.82 -60.86 ZNEsW 18.5 17.4 133.8 21.7 14.2 -22.5 14.1 -21.2 13.9 -21.2 14.2 -22.2
2025-11-17T23:56:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:56:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:56:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.913934
2025-11-17T23:56:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:56:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:56:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:56:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:56:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-17T23:56:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:56:31', tmtdew=10.3, humidity=49.53, cloud=0.0, wind=25.27, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:56:31', seeing=1.82, atlas_timestamp='2025-11-17T21:56:03.898', atlas_cloud=2, atlas_rain=1, zp_data=[0.20425000000000004, 0.11925000000000097, 0.18725000000000058, 0.2704999999999984, 0.3465000000000007, 0.25975000000000037, 0.22199999999999953, 0.15725000000000122, 0.18099999999999916, 0.21700000000000053, 0.38424999999999976, 0.4220000000000006, 0.410499999999999, 0.3122499999999988, 0.10749999999999815, 0.12599999999999945, 0.1822499999999998, 0.2944999999999993, 0.6059999999999999, 0.5252499999999989, 0.49099999999999877, 0.33674999999999855, 0.07525000000000048, 0.08274999999999899, 0.17999999999999972, 0.26449999999999996, 0.8127500000000003, 0.4195000000000002, 0.40500000000000025, 0.21200000000000152, 0.07150000000000034, 0.09700000000000131, 0.13074999999999903], zp_timestamp='2025-11-17T21:54:00')
2025-11-17T23:56:52.419 [DEBUG] [Thread-63561] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:56:52.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:56:59.188 [DEBUG] [Thread-63565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:57:14.230 [DEBUG] [Thread-63566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:57:20.423 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:57:20.424 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:57:27.018 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:57:29.259 [DEBUG] [Thread-63567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:57:44.291 [DEBUG] [Thread-63568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:57:52.383 [DEBUG] [Thread-63569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:57:59.321 [DEBUG] [Thread-63570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:58:14.351 [DEBUG] [Thread-63571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:58:20.627 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:58:20.628 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:58:29.379 [DEBUG] [Thread-63572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:58:44.412 [DEBUG] [Thread-63573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:58:52.440 [DEBUG] [Thread-63574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:58:59.442 [DEBUG] [Thread-63575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:59:04.635 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-17T23:59:14.465 [DEBUG] [Thread-63576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:59:20.830 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:59:20.832 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:59:29.496 [DEBUG] [Thread-63577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:59:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-17T23:59:34.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-17T23:59:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-17T23:59:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 59, 11), 10.36, 49.33, 0.0, 22.55, 13.44, 0, 0, 0, 2, 0, 0),)
2025-11-17T23:59:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:59:11
2025-11-17T23:59:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-17T23:59:35.608 [DEBUG] [Thread-63578] [transport.py] [_log()] starting thread (client mode): 0xd0703d00
2025-11-17T23:59:35.608 [DEBUG] [Thread-63578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:59:35.629 [DEBUG] [Thread-63578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-17T23:59:35.629 [INFO] [Thread-63578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-17T23:59:35.632 [DEBUG] [Thread-63578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:59:35.632 [DEBUG] [Thread-63578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] client lang: <none>
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] server lang: <none>
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] kex follows: False
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] Compression: none
2025-11-17T23:59:35.633 [DEBUG] [Thread-63578] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:59:35.652 [DEBUG] [Thread-63578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:59:35.653 [DEBUG] [Thread-63578] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:59:35.653 [DEBUG] [Thread-63578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-17T23:59:35.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-17T23:59:35.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:59:35.655 [DEBUG] [Thread-63578] [transport.py] [_log()] userauth is OK
2025-11-17T23:59:35.655 [DEBUG] [Thread-63578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:59:35.655 [DEBUG] [Thread-63578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:59:35.655 [DEBUG] [Thread-63578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-17T23:59:35.656 [DEBUG] [Thread-63578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:59:35.691 [INFO] [Thread-63578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:59:35.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:59:36.309 [DEBUG] [Thread-63578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:59:36.310 [DEBUG] [Thread-63578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:59:36.310 [DEBUG] [Thread-63578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-17T23:59:36.350 [DEBUG] [Thread-63578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:59:36.351 [DEBUG] [Thread-63578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:59:36.353 [DEBUG] [Thread-63578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:59:36.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:59:36.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-17T23:59:36.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-17T23:59:36.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-17T23:59:36.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:59:36.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-17T23:59:36.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:59:36.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:59:36.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-17T23:59:36.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.916017 -999.00  +13.50  15.96     54   +4.50 1 1 1 1 1     0    0 7.58 -65.59 ZNESW 18.9 16.0 145.2 19.6 14.1 -22.7 14.0 -21.3 13.8 -21.3 14.1 -22.5
2025-11-17T23:59:36.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-17T23:59:36.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-17T23:59:36.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.916017
2025-11-17T23:59:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-17T23:59:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-17T23:59:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-17T23:59:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-17T23:59:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-17T23:59:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:59:11', tmtdew=10.36, humidity=49.33, cloud=0.0, wind=22.55, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:59:11', seeing=1.9, atlas_timestamp='2025-11-17T21:59:03.869', atlas_cloud=1, atlas_rain=1, zp_data=[0.20425000000000004, 0.11925000000000097, 0.18725000000000058, 0.2704999999999984, 0.3465000000000007, 0.25975000000000037, 0.22199999999999953, 0.15725000000000122, 0.18099999999999916, 0.21700000000000053, 0.38424999999999976, 0.4220000000000006, 0.410499999999999, 0.3122499999999988, 0.10749999999999815, 0.12599999999999945, 0.1822499999999998, 0.2944999999999993, 0.6059999999999999, 0.5252499999999989, 0.49099999999999877, 0.33674999999999855, 0.07525000000000048, 0.08274999999999899, 0.17999999999999972, 0.26449999999999996, 0.8127500000000003, 0.4195000000000002, 0.40500000000000025, 0.21200000000000152, 0.07150000000000034, 0.09700000000000131, 0.13074999999999903], zp_timestamp='2025-11-17T21:56:00')
2025-11-17T23:59:36.378 [DEBUG] [Thread-63578] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:59:36.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-17T23:59:36.486 [DEBUG] [Thread-63581] [transport.py] [_log()] starting thread (client mode): 0xd0756fb0
2025-11-17T23:59:36.486 [DEBUG] [Thread-63581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-17T23:59:36.501 [DEBUG] [Thread-63581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-17T23:59:36.502 [INFO] [Thread-63581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-17T23:59:36.509 [DEBUG] [Thread-63581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-17T23:59:36.509 [DEBUG] [Thread-63581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] client lang: <none>
2025-11-17T23:59:36.510 [DEBUG] [Thread-63581] [transport.py] [_log()] server lang: <none>
2025-11-17T23:59:36.511 [DEBUG] [Thread-63581] [transport.py] [_log()] kex follows: False
2025-11-17T23:59:36.511 [DEBUG] [Thread-63581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-17T23:59:36.511 [DEBUG] [Thread-63581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-17T23:59:36.511 [DEBUG] [Thread-63581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-17T23:59:36.511 [DEBUG] [Thread-63581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-17T23:59:36.511 [DEBUG] [Thread-63581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-17T23:59:36.511 [DEBUG] [Thread-63581] [transport.py] [_log()] Compression: none
2025-11-17T23:59:36.511 [DEBUG] [Thread-63581] [transport.py] [_log()] === End of kex handshake ===
2025-11-17T23:59:36.569 [DEBUG] [Thread-63581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-17T23:59:36.570 [DEBUG] [Thread-63581] [transport.py] [_log()] Switch to new keys ...
2025-11-17T23:59:36.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-17T23:59:36.571 [DEBUG] [Thread-63581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-17T23:59:36.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-17T23:59:36.628 [DEBUG] [Thread-63581] [transport.py] [_log()] userauth is OK
2025-11-17T23:59:36.629 [DEBUG] [Thread-63581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-17T23:59:36.629 [DEBUG] [Thread-63581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-17T23:59:36.629 [DEBUG] [Thread-63581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-17T23:59:36.629 [DEBUG] [Thread-63581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-17T23:59:36.651 [INFO] [Thread-63581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-17T23:59:36.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-17T23:59:36.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-17T23:59:37.552 [DEBUG] [Thread-63581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-17T23:59:37.552 [DEBUG] [Thread-63581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-17T23:59:37.600 [DEBUG] [Thread-63581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-17T23:59:37.600 [DEBUG] [Thread-63581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-17T23:59:37.609 [DEBUG] [Thread-63581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-17T23:59:37.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-17T23:59:37.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-17T23:59:37.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-17T23:59:37.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-17T23:59:37.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-17T23:59:37.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-17T23:59:37.640 [DEBUG] [Thread-63581] [transport.py] [_log()] EOF in transport thread
2025-11-17T23:59:44.523 [DEBUG] [Thread-63583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:59:52.505 [DEBUG] [Thread-63584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-17T23:59:59.554 [DEBUG] [Thread-63585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:00:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:00:07.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:00:07.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:00:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 17, 23, 59, 43), 10.51, 48.98, 0.0, 23.66, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:00:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-17 23:59:43
2025-11-18T00:00:08.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:00:08.604 [DEBUG] [Thread-63586] [transport.py] [_log()] starting thread (client mode): 0xd317c880
2025-11-18T00:00:08.604 [DEBUG] [Thread-63586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:00:08.624 [DEBUG] [Thread-63586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:00:08.624 [INFO] [Thread-63586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] client lang: <none>
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] server lang: <none>
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] kex follows: False
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] Compression: none
2025-11-18T00:00:08.627 [DEBUG] [Thread-63586] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:00:08.642 [DEBUG] [Thread-63586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:00:08.642 [DEBUG] [Thread-63586] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:00:08.642 [DEBUG] [Thread-63586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:00:08.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:00:08.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:00:08.643 [DEBUG] [Thread-63586] [transport.py] [_log()] userauth is OK
2025-11-18T00:00:08.643 [DEBUG] [Thread-63586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:00:08.643 [DEBUG] [Thread-63586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:00:08.643 [DEBUG] [Thread-63586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:00:08.643 [DEBUG] [Thread-63586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:00:08.659 [INFO] [Thread-63586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:00:08.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:00:13.547 [DEBUG] [Thread-63586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:00:13.548 [DEBUG] [Thread-63586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:00:13.548 [DEBUG] [Thread-63586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:00:13.588 [DEBUG] [Thread-63586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:00:13.588 [DEBUG] [Thread-63586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:00:13.591 [DEBUG] [Thread-63586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:00:13.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:00:13.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:00:13.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:00:13.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:00:13.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:00:13.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:00:13.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:00:13.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:00:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:00:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.916365 -999.00  +13.50  18.79     54   +4.50 1 1 1 1 1     0    0 7.80 -64.13 ZNESW 16.3 18.8 144.8 22.2 14.1 -22.7 14.0 -21.5 13.8 -21.4 14.1 -22.5
2025-11-18T00:00:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:00:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:00:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.916365
2025-11-18T00:00:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:00:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:00:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:00:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:00:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:00:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-17T23:59:43', tmtdew=10.51, humidity=48.98, cloud=0.0, wind=23.66, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-17T23:59:43', seeing=1.9, atlas_timestamp='2025-11-17T21:59:33.936', atlas_cloud=1, atlas_rain=1, zp_data=[0.20425000000000004, 0.11925000000000097, 0.18725000000000058, 0.2704999999999984, 0.3465000000000007, 0.25975000000000037, 0.22199999999999953, 0.15725000000000122, 0.18099999999999916, 0.21700000000000053, 0.38424999999999976, 0.4220000000000006, 0.410499999999999, 0.3122499999999988, 0.10749999999999815, 0.12599999999999945, 0.1822499999999998, 0.2944999999999993, 0.6059999999999999, 0.5252499999999989, 0.49099999999999877, 0.33674999999999855, 0.07525000000000048, 0.08274999999999899, 0.17999999999999972, 0.26449999999999996, 0.8127500000000003, 0.4195000000000002, 0.40500000000000025, 0.21200000000000152, 0.07150000000000034, 0.09700000000000131, 0.13074999999999903], zp_timestamp='2025-11-17T21:56:00')
2025-11-18T00:00:13.698 [DEBUG] [Thread-63586] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:00:13.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:00:13.795 [DEBUG] [Thread-63589] [transport.py] [_log()] starting thread (client mode): 0xd317c970
2025-11-18T00:00:13.796 [DEBUG] [Thread-63589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:00:13.811 [DEBUG] [Thread-63589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:00:13.811 [INFO] [Thread-63589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:00:13.819 [DEBUG] [Thread-63589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:00:13.819 [DEBUG] [Thread-63589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:00:13.819 [DEBUG] [Thread-63589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:00:13.819 [DEBUG] [Thread-63589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:00:13.819 [DEBUG] [Thread-63589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] client lang: <none>
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] server lang: <none>
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] kex follows: False
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:00:13.820 [DEBUG] [Thread-63589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:00:13.821 [DEBUG] [Thread-63589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:00:13.821 [DEBUG] [Thread-63589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:00:13.821 [DEBUG] [Thread-63589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:00:13.821 [DEBUG] [Thread-63589] [transport.py] [_log()] Compression: none
2025-11-18T00:00:13.821 [DEBUG] [Thread-63589] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:00:13.881 [DEBUG] [Thread-63589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:00:13.882 [DEBUG] [Thread-63589] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:00:13.883 [DEBUG] [Thread-63589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:00:13.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:00:13.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:00:13.938 [DEBUG] [Thread-63589] [transport.py] [_log()] userauth is OK
2025-11-18T00:00:13.938 [DEBUG] [Thread-63589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:00:13.938 [DEBUG] [Thread-63589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:00:13.938 [DEBUG] [Thread-63589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:00:13.939 [DEBUG] [Thread-63589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:00:13.956 [INFO] [Thread-63589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:00:13.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:00:13.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:00:14.588 [DEBUG] [Thread-63591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:00:14.809 [DEBUG] [Thread-63589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:00:14.809 [DEBUG] [Thread-63589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:00:14.857 [DEBUG] [Thread-63589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:00:14.857 [DEBUG] [Thread-63589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:00:14.866 [DEBUG] [Thread-63589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:00:14.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:00:14.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:00:14.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:00:14.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:00:14.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:00:14.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:00:14.898 [DEBUG] [Thread-63589] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:00:21.035 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:00:21.035 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:00:29.626 [DEBUG] [Thread-63592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:00:44.658 [DEBUG] [Thread-63593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:00:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:00:44.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:00:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:00:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 0, 15), 10.56, 48.82, 0.0, 21.39, 13.47, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:00:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:00:15
2025-11-18T00:00:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:00:45.849 [DEBUG] [Thread-63594] [transport.py] [_log()] starting thread (client mode): 0xd07006d0
2025-11-18T00:00:45.849 [DEBUG] [Thread-63594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:00:45.868 [DEBUG] [Thread-63594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:00:45.868 [INFO] [Thread-63594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:00:45.871 [DEBUG] [Thread-63594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] client lang: <none>
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] server lang: <none>
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] kex follows: False
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] Compression: none
2025-11-18T00:00:45.872 [DEBUG] [Thread-63594] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:00:45.888 [DEBUG] [Thread-63594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:00:45.889 [DEBUG] [Thread-63594] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:00:45.889 [DEBUG] [Thread-63594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:00:45.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:00:45.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:00:45.892 [DEBUG] [Thread-63594] [transport.py] [_log()] userauth is OK
2025-11-18T00:00:45.892 [DEBUG] [Thread-63594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:00:45.892 [DEBUG] [Thread-63594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:00:45.892 [DEBUG] [Thread-63594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:00:45.892 [DEBUG] [Thread-63594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:00:45.909 [INFO] [Thread-63594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:00:45.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:00:46.538 [DEBUG] [Thread-63594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:00:46.538 [DEBUG] [Thread-63594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:00:46.538 [DEBUG] [Thread-63594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:00:46.578 [DEBUG] [Thread-63594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:00:46.579 [DEBUG] [Thread-63594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:00:46.581 [DEBUG] [Thread-63594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:00:46.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:00:46.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:00:46.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:00:46.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:00:46.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:00:46.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:00:46.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:00:46.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:00:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:00:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.916712 -999.00  +13.50  20.24     54   +4.40 1 2 1 1 1     0    0 7.64 -61.74 ZNEsW 22.2 20.2 146.6 29.2 14.1 -22.6 14.0 -21.4 13.8 -21.4 14.1 -22.4
2025-11-18T00:00:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:00:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:00:46.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.916712
2025-11-18T00:00:46.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:00:46.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:00:46.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:00:46.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:00:46.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:00:46.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:00:15', tmtdew=10.56, humidity=48.82, cloud=0.0, wind=21.39, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:00:15', seeing=1.6, atlas_timestamp='2025-11-17T22:00:03.917', atlas_cloud=2, atlas_rain=1, zp_data=[0.20425000000000004, 0.11925000000000097, 0.18725000000000058, 0.2704999999999984, 0.3465000000000007, 0.25975000000000037, 0.22199999999999953, 0.15725000000000122, 0.18099999999999916, 0.21700000000000053, 0.38424999999999976, 0.4220000000000006, 0.410499999999999, 0.3122499999999988, 0.10749999999999815, 0.12599999999999945, 0.1822499999999998, 0.2944999999999993, 0.6059999999999999, 0.5252499999999989, 0.49099999999999877, 0.33674999999999855, 0.07525000000000048, 0.08274999999999899, 0.17999999999999972, 0.26449999999999996, 0.8127500000000003, 0.4195000000000002, 0.40500000000000025, 0.21200000000000152, 0.07150000000000034, 0.09700000000000131, 0.13074999999999903], zp_timestamp='2025-11-17T21:56:00')
2025-11-18T00:00:46.608 [DEBUG] [Thread-63594] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:00:46.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:00:46.708 [DEBUG] [Thread-63597] [transport.py] [_log()] starting thread (client mode): 0xd31ce200
2025-11-18T00:00:46.708 [DEBUG] [Thread-63597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:00:46.727 [DEBUG] [Thread-63597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:00:46.727 [INFO] [Thread-63597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:00:46.735 [DEBUG] [Thread-63597] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:00:46.735 [DEBUG] [Thread-63597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:00:46.735 [DEBUG] [Thread-63597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] client lang: <none>
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] server lang: <none>
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] kex follows: False
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:00:46.736 [DEBUG] [Thread-63597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:00:46.737 [DEBUG] [Thread-63597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:00:46.737 [DEBUG] [Thread-63597] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:00:46.737 [DEBUG] [Thread-63597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:00:46.737 [DEBUG] [Thread-63597] [transport.py] [_log()] Compression: none
2025-11-18T00:00:46.737 [DEBUG] [Thread-63597] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:00:46.793 [DEBUG] [Thread-63597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:00:46.793 [DEBUG] [Thread-63597] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:00:46.794 [DEBUG] [Thread-63597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:00:46.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:00:46.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:00:46.852 [DEBUG] [Thread-63597] [transport.py] [_log()] userauth is OK
2025-11-18T00:00:46.853 [DEBUG] [Thread-63597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:00:46.853 [DEBUG] [Thread-63597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:00:46.853 [DEBUG] [Thread-63597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:00:46.853 [DEBUG] [Thread-63597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:00:46.872 [INFO] [Thread-63597] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:00:46.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:00:46.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:00:47.718 [DEBUG] [Thread-63597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:00:47.718 [DEBUG] [Thread-63597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:00:47.766 [DEBUG] [Thread-63597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:00:47.766 [DEBUG] [Thread-63597] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:00:47.774 [DEBUG] [Thread-63597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:00:47.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:00:47.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:00:47.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:00:47.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:00:47.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:00:47.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:00:47.806 [DEBUG] [Thread-63597] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:00:52.579 [DEBUG] [Thread-63599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:00:59.683 [DEBUG] [Thread-63600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:01:14.720 [DEBUG] [Thread-63601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:01:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:01:17.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:01:17.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:01:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 0, 47), 10.47, 48.97, 0.0, 25.13, 13.54, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:01:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:00:47
2025-11-18T00:01:18.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:01:18.768 [DEBUG] [Thread-63602] [transport.py] [_log()] starting thread (client mode): 0xd07abe20
2025-11-18T00:01:18.768 [DEBUG] [Thread-63602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:01:18.788 [DEBUG] [Thread-63602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:01:18.788 [INFO] [Thread-63602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:01:18.790 [DEBUG] [Thread-63602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:01:18.790 [DEBUG] [Thread-63602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:01:18.790 [DEBUG] [Thread-63602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:01:18.790 [DEBUG] [Thread-63602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:01:18.790 [DEBUG] [Thread-63602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:01:18.790 [DEBUG] [Thread-63602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] client lang: <none>
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] server lang: <none>
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] kex follows: False
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:01:18.791 [DEBUG] [Thread-63602] [transport.py] [_log()] Compression: none
2025-11-18T00:01:18.792 [DEBUG] [Thread-63602] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:01:18.811 [DEBUG] [Thread-63602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:01:18.812 [DEBUG] [Thread-63602] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:01:18.812 [DEBUG] [Thread-63602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:01:18.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:01:18.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:01:18.814 [DEBUG] [Thread-63602] [transport.py] [_log()] userauth is OK
2025-11-18T00:01:18.815 [DEBUG] [Thread-63602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:01:18.815 [DEBUG] [Thread-63602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:01:18.815 [DEBUG] [Thread-63602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:01:18.815 [DEBUG] [Thread-63602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:01:18.829 [INFO] [Thread-63602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:01:18.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:01:19.606 [DEBUG] [Thread-63602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:01:19.606 [DEBUG] [Thread-63602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:01:19.606 [DEBUG] [Thread-63602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:01:19.648 [DEBUG] [Thread-63602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:01:19.648 [DEBUG] [Thread-63602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:01:19.650 [DEBUG] [Thread-63602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:01:19.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:01:19.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:01:19.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:01:19.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:01:19.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:01:19.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:01:19.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.917059 -999.00  +13.50  17.27     54   +4.40 1 2 1 1 1     0    0 7.73 -58.33 ZNEsW 14.2 17.3 137.8 23.9 14.1 -22.7 14.0 -21.3 13.8 -21.4 14.1 -22.5
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.917059
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:01:19.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:00:47', tmtdew=10.47, humidity=48.97, cloud=0.0, wind=25.13, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:00:47', seeing=1.56, atlas_timestamp='2025-11-17T22:00:33.898', atlas_cloud=2, atlas_rain=1, zp_data=[0.20425000000000004, 0.11925000000000097, 0.18725000000000058, 0.2704999999999984, 0.3465000000000007, 0.25975000000000037, 0.22199999999999953, 0.15725000000000122, 0.18099999999999916, 0.21700000000000053, 0.38424999999999976, 0.4220000000000006, 0.410499999999999, 0.3122499999999988, 0.10749999999999815, 0.12599999999999945, 0.1822499999999998, 0.2944999999999993, 0.6059999999999999, 0.5252499999999989, 0.49099999999999877, 0.33674999999999855, 0.07525000000000048, 0.08274999999999899, 0.17999999999999972, 0.26449999999999996, 0.8127500000000003, 0.4195000000000002, 0.40500000000000025, 0.21200000000000152, 0.07150000000000034, 0.09700000000000131, 0.13074999999999903], zp_timestamp='2025-11-17T21:56:00')
2025-11-18T00:01:19.669 [DEBUG] [Thread-63602] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:01:19.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:01:19.753 [DEBUG] [Thread-63605] [transport.py] [_log()] starting thread (client mode): 0xd07132b0
2025-11-18T00:01:19.754 [DEBUG] [Thread-63605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:01:19.772 [DEBUG] [Thread-63605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:01:19.772 [INFO] [Thread-63605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] client lang: <none>
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] server lang: <none>
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] kex follows: False
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:01:19.779 [DEBUG] [Thread-63605] [transport.py] [_log()] Compression: none
2025-11-18T00:01:19.780 [DEBUG] [Thread-63605] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:01:19.835 [DEBUG] [Thread-63605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:01:19.835 [DEBUG] [Thread-63605] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:01:19.835 [DEBUG] [Thread-63605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:01:19.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:01:19.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:01:19.892 [DEBUG] [Thread-63605] [transport.py] [_log()] userauth is OK
2025-11-18T00:01:19.892 [DEBUG] [Thread-63605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:01:19.892 [DEBUG] [Thread-63605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:01:19.892 [DEBUG] [Thread-63605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:01:19.893 [DEBUG] [Thread-63605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:01:19.911 [INFO] [Thread-63605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:01:19.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:01:19.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:01:20.761 [DEBUG] [Thread-63605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:01:20.761 [DEBUG] [Thread-63605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:01:20.809 [DEBUG] [Thread-63605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:01:20.809 [DEBUG] [Thread-63605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:01:20.817 [DEBUG] [Thread-63605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:01:20.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:01:20.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:01:20.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:01:20.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:01:20.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:01:20.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:01:20.849 [DEBUG] [Thread-63605] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:01:21.238 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:01:21.239 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:01:29.746 [DEBUG] [Thread-63607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:01:44.782 [DEBUG] [Thread-63608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:01:50.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:01:50.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:01:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:01:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 1, 19), 10.45, 49.02, 0.0, 24.28, 13.52, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:01:51.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:01:19
2025-11-18T00:01:51.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:01:51.781 [DEBUG] [Thread-63609] [transport.py] [_log()] starting thread (client mode): 0xd31cec50
2025-11-18T00:01:51.781 [DEBUG] [Thread-63609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:01:51.793 [DEBUG] [Thread-63609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:01:51.793 [INFO] [Thread-63609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] client lang: <none>
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] server lang: <none>
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] kex follows: False
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:01:51.797 [DEBUG] [Thread-63609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:01:51.798 [DEBUG] [Thread-63609] [transport.py] [_log()] Compression: none
2025-11-18T00:01:51.798 [DEBUG] [Thread-63609] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:01:51.812 [DEBUG] [Thread-63609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:01:51.812 [DEBUG] [Thread-63609] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:01:51.812 [DEBUG] [Thread-63609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:01:51.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:01:51.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:01:51.813 [DEBUG] [Thread-63609] [transport.py] [_log()] userauth is OK
2025-11-18T00:01:51.813 [DEBUG] [Thread-63609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:01:51.813 [DEBUG] [Thread-63609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:01:51.813 [DEBUG] [Thread-63609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:01:51.813 [DEBUG] [Thread-63609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:01:51.823 [INFO] [Thread-63609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:01:51.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:01:52.457 [DEBUG] [Thread-63609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:01:52.458 [DEBUG] [Thread-63609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:01:52.458 [DEBUG] [Thread-63609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:01:52.499 [DEBUG] [Thread-63609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:01:52.499 [DEBUG] [Thread-63609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:01:52.501 [DEBUG] [Thread-63609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:01:52.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:01:52.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:01:52.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:01:52.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:01:52.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:01:52.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:01:52.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:01:52.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:01:52.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:01:52.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.917406 -999.00  +13.40  18.19     54   +4.50 1 2 1 1 1     0    0 7.68 -56.09 ZNEsW 16.4 18.2 142.4 25.7 14.1 -22.8 14.0 -21.4 13.8 -21.4 14.1 -22.5
2025-11-18T00:01:52.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:01:52.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:01:52.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.917406
2025-11-18T00:01:52.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:01:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:01:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:01:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:01:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:01:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:01:19', tmtdew=10.45, humidity=49.02, cloud=0.0, wind=24.28, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:01:19', seeing=1.56, atlas_timestamp='2025-11-17T22:01:03.878', atlas_cloud=2, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:00:00')
2025-11-18T00:01:52.521 [DEBUG] [Thread-63609] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:01:52.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:01:52.606 [DEBUG] [Thread-63612] [transport.py] [_log()] starting thread (client mode): 0xd31cf970
2025-11-18T00:01:52.606 [DEBUG] [Thread-63612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:01:52.621 [DEBUG] [Thread-63612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:01:52.621 [INFO] [Thread-63612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] client lang: <none>
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] server lang: <none>
2025-11-18T00:01:52.628 [DEBUG] [Thread-63612] [transport.py] [_log()] kex follows: False
2025-11-18T00:01:52.629 [DEBUG] [Thread-63612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:01:52.629 [DEBUG] [Thread-63612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:01:52.629 [DEBUG] [Thread-63612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:01:52.629 [DEBUG] [Thread-63612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:01:52.629 [DEBUG] [Thread-63612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:01:52.629 [DEBUG] [Thread-63612] [transport.py] [_log()] Compression: none
2025-11-18T00:01:52.629 [DEBUG] [Thread-63612] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:01:52.652 [DEBUG] [Thread-63614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:01:52.691 [DEBUG] [Thread-63612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:01:52.691 [DEBUG] [Thread-63612] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:01:52.691 [DEBUG] [Thread-63612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:01:52.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:01:52.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:01:52.752 [DEBUG] [Thread-63612] [transport.py] [_log()] userauth is OK
2025-11-18T00:01:52.752 [DEBUG] [Thread-63612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:01:52.752 [DEBUG] [Thread-63612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:01:52.752 [DEBUG] [Thread-63612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:01:52.752 [DEBUG] [Thread-63612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:01:52.766 [INFO] [Thread-63612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:01:52.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:01:52.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:01:53.614 [DEBUG] [Thread-63612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:01:53.614 [DEBUG] [Thread-63612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:01:53.662 [DEBUG] [Thread-63612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:01:53.662 [DEBUG] [Thread-63612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:01:53.671 [DEBUG] [Thread-63612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:01:53.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:01:53.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:01:53.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
2025-11-18T00:01:53.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:01:53.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:01:53.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:01:53.705 [DEBUG] [Thread-63612] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:01:59.807 [DEBUG] [Thread-63615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:02:14.835 [DEBUG] [Thread-63616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:02:21.442 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:02:21.443 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:02:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:02:23.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:02:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:02:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 1, 51), 10.35, 49.35, 0.0, 22.13, 13.44, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:02:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:01:51
2025-11-18T00:02:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:02:24.721 [DEBUG] [Thread-63617] [transport.py] [_log()] starting thread (client mode): 0xd31cd840
2025-11-18T00:02:24.721 [DEBUG] [Thread-63617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:02:24.743 [DEBUG] [Thread-63617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:02:24.743 [INFO] [Thread-63617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] client lang: <none>
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] server lang: <none>
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] kex follows: False
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] Compression: none
2025-11-18T00:02:24.745 [DEBUG] [Thread-63617] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:02:24.753 [DEBUG] [Thread-63617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:02:24.753 [DEBUG] [Thread-63617] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:02:24.753 [DEBUG] [Thread-63617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:02:24.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:02:24.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:02:24.754 [DEBUG] [Thread-63617] [transport.py] [_log()] userauth is OK
2025-11-18T00:02:24.754 [DEBUG] [Thread-63617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:02:24.754 [DEBUG] [Thread-63617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:02:24.754 [DEBUG] [Thread-63617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:02:24.754 [DEBUG] [Thread-63617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:02:24.769 [INFO] [Thread-63617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:02:24.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:02:25.423 [DEBUG] [Thread-63617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:02:25.423 [DEBUG] [Thread-63617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:02:25.423 [DEBUG] [Thread-63617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:02:25.464 [DEBUG] [Thread-63617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:02:25.464 [DEBUG] [Thread-63617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:02:25.466 [DEBUG] [Thread-63617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:02:25.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:02:25.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:02:25.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:02:25.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:02:25.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:02:25.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:02:25.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.918101 -999.00  +13.50  17.78     53   +4.30 1 1 1 1 1     0    0 7.80 -52.51 ZNESW 21.3 17.8 145.8 25.1 14.1 -22.8 14.0 -21.5 13.8 -21.5 14.1 -22.5
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.918101
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:02:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:01:51', tmtdew=10.35, humidity=49.35, cloud=0.0, wind=22.13, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:02:23', seeing=1.74, atlas_timestamp='2025-11-17T22:02:03.926', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:00:00')
2025-11-18T00:02:25.483 [DEBUG] [Thread-63617] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:02:25.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:02:25.568 [DEBUG] [Thread-63620] [transport.py] [_log()] starting thread (client mode): 0xd0713460
2025-11-18T00:02:25.569 [DEBUG] [Thread-63620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:02:25.584 [DEBUG] [Thread-63620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:02:25.584 [INFO] [Thread-63620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:02:25.592 [DEBUG] [Thread-63620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:02:25.593 [DEBUG] [Thread-63620] [transport.py] [_log()] client lang: <none>
2025-11-18T00:02:25.593 [DEBUG] [Thread-63620] [transport.py] [_log()] server lang: <none>
2025-11-18T00:02:25.593 [DEBUG] [Thread-63620] [transport.py] [_log()] kex follows: False
2025-11-18T00:02:25.593 [DEBUG] [Thread-63620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:02:25.593 [DEBUG] [Thread-63620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:02:25.593 [DEBUG] [Thread-63620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:02:25.593 [DEBUG] [Thread-63620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:02:25.593 [DEBUG] [Thread-63620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:02:25.594 [DEBUG] [Thread-63620] [transport.py] [_log()] Compression: none
2025-11-18T00:02:25.594 [DEBUG] [Thread-63620] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:02:25.649 [DEBUG] [Thread-63620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:02:25.650 [DEBUG] [Thread-63620] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:02:25.650 [DEBUG] [Thread-63620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:02:25.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:02:25.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:02:25.705 [DEBUG] [Thread-63620] [transport.py] [_log()] userauth is OK
2025-11-18T00:02:25.705 [DEBUG] [Thread-63620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:02:25.705 [DEBUG] [Thread-63620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:02:25.705 [DEBUG] [Thread-63620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:02:25.705 [DEBUG] [Thread-63620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:02:25.724 [INFO] [Thread-63620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:02:25.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:02:25.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:02:26.571 [DEBUG] [Thread-63620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:02:26.571 [DEBUG] [Thread-63620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:02:26.619 [DEBUG] [Thread-63620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:02:26.619 [DEBUG] [Thread-63620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:02:26.628 [DEBUG] [Thread-63620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:02:26.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:02:26.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:02:26.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:02:26.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:02:26.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:02:26.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:02:26.662 [DEBUG] [Thread-63620] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:02:29.863 [DEBUG] [Thread-63622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:02:44.916 [DEBUG] [Thread-63623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:02:52.719 [DEBUG] [Thread-63624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:02:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:02:56.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:02:56.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:02:57.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 2, 23), 10.28, 49.6, 0.0, 22.69, 13.44, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:02:57.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:02:23
2025-11-18T00:02:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:02:57.671 [DEBUG] [Thread-63625] [transport.py] [_log()] starting thread (client mode): 0xd0712890
2025-11-18T00:02:57.671 [DEBUG] [Thread-63625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:02:57.686 [DEBUG] [Thread-63625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:02:57.686 [INFO] [Thread-63625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:02:57.689 [DEBUG] [Thread-63625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:02:57.689 [DEBUG] [Thread-63625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:02:57.689 [DEBUG] [Thread-63625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:02:57.689 [DEBUG] [Thread-63625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:02:57.689 [DEBUG] [Thread-63625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] client lang: <none>
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] server lang: <none>
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] kex follows: False
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] Compression: none
2025-11-18T00:02:57.690 [DEBUG] [Thread-63625] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:02:57.707 [DEBUG] [Thread-63625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:02:57.707 [DEBUG] [Thread-63625] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:02:57.708 [DEBUG] [Thread-63625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:02:57.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:02:57.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:02:57.710 [DEBUG] [Thread-63625] [transport.py] [_log()] userauth is OK
2025-11-18T00:02:57.710 [DEBUG] [Thread-63625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:02:57.710 [DEBUG] [Thread-63625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:02:57.710 [DEBUG] [Thread-63625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:02:57.710 [DEBUG] [Thread-63625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:02:57.730 [INFO] [Thread-63625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:02:57.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:02:58.360 [DEBUG] [Thread-63625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:02:58.360 [DEBUG] [Thread-63625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:02:58.361 [DEBUG] [Thread-63625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:02:58.401 [DEBUG] [Thread-63625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:02:58.402 [DEBUG] [Thread-63625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:02:58.405 [DEBUG] [Thread-63625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:02:58.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:02:58.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:02:58.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:02:58.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:02:58.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:02:58.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:02:58.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:02:58.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:02:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:02:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.918448 -999.00  +13.50  18.42     53   +4.30 1 1 1 1 1     0    0 7.85 -53.20 ZNESW 16.1 18.4 163.8 25.8 14.1 -22.8 14.0 -21.3 13.8 -21.6 14.1 -22.6
2025-11-18T00:02:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:02:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:02:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.918448
2025-11-18T00:02:58.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:02:58.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:02:58.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:02:58.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:02:58.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:02:58.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:02:23', tmtdew=10.28, humidity=49.6, cloud=0.0, wind=22.69, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:02:55', seeing=1.57, atlas_timestamp='2025-11-17T22:02:33.907', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:00:00')
2025-11-18T00:02:58.430 [DEBUG] [Thread-63625] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:02:58.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:02:58.537 [DEBUG] [Thread-63628] [transport.py] [_log()] starting thread (client mode): 0xd0713580
2025-11-18T00:02:58.537 [DEBUG] [Thread-63628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:02:58.551 [DEBUG] [Thread-63628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:02:58.551 [INFO] [Thread-63628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:02:58.558 [DEBUG] [Thread-63628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:02:58.559 [DEBUG] [Thread-63628] [transport.py] [_log()] client lang: <none>
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] server lang: <none>
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] kex follows: False
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] Compression: none
2025-11-18T00:02:58.560 [DEBUG] [Thread-63628] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:02:58.616 [DEBUG] [Thread-63628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:02:58.617 [DEBUG] [Thread-63628] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:02:58.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:02:58.617 [DEBUG] [Thread-63628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:02:58.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:02:58.672 [DEBUG] [Thread-63628] [transport.py] [_log()] userauth is OK
2025-11-18T00:02:58.673 [DEBUG] [Thread-63628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:02:58.673 [DEBUG] [Thread-63628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:02:58.673 [DEBUG] [Thread-63628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:02:58.673 [DEBUG] [Thread-63628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:02:58.692 [INFO] [Thread-63628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:02:58.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:02:58.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:02:59.529 [DEBUG] [Thread-63628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:02:59.529 [DEBUG] [Thread-63628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:02:59.577 [DEBUG] [Thread-63628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:02:59.577 [DEBUG] [Thread-63628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:02:59.586 [DEBUG] [Thread-63628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:02:59.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:02:59.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:02:59.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:02:59.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:02:59.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:02:59.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:02:59.621 [DEBUG] [Thread-63628] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:02:59.943 [DEBUG] [Thread-63630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:03:14.983 [DEBUG] [Thread-63631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:03:21.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:03:21.647 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:03:29.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:03:29.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:03:29.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:03:30.012 [DEBUG] [Thread-63632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:03:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 3, 27), 10.37, 49.61, 0.0, 21.63, 13.39, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:03:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:03:27
2025-11-18T00:03:30.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:03:30.609 [DEBUG] [Thread-63633] [transport.py] [_log()] starting thread (client mode): 0xd0710970
2025-11-18T00:03:30.609 [DEBUG] [Thread-63633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:03:30.630 [DEBUG] [Thread-63633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:03:30.630 [INFO] [Thread-63633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:03:30.633 [DEBUG] [Thread-63633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:03:30.633 [DEBUG] [Thread-63633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:03:30.633 [DEBUG] [Thread-63633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:03:30.633 [DEBUG] [Thread-63633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:03:30.633 [DEBUG] [Thread-63633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:03:30.633 [DEBUG] [Thread-63633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:03:30.633 [DEBUG] [Thread-63633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:03:30.633 [DEBUG] [Thread-63633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] client lang: <none>
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] server lang: <none>
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] kex follows: False
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] Compression: none
2025-11-18T00:03:30.634 [DEBUG] [Thread-63633] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:03:30.649 [DEBUG] [Thread-63633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:03:30.649 [DEBUG] [Thread-63633] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:03:30.649 [DEBUG] [Thread-63633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:03:30.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:03:30.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:03:30.650 [DEBUG] [Thread-63633] [transport.py] [_log()] userauth is OK
2025-11-18T00:03:30.650 [DEBUG] [Thread-63633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:03:30.651 [DEBUG] [Thread-63633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:03:30.651 [DEBUG] [Thread-63633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:03:30.651 [DEBUG] [Thread-63633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:03:30.666 [INFO] [Thread-63633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:03:30.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:03:31.299 [DEBUG] [Thread-63633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:03:31.299 [DEBUG] [Thread-63633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:03:31.299 [DEBUG] [Thread-63633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:03:31.340 [DEBUG] [Thread-63633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:03:31.340 [DEBUG] [Thread-63633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:03:31.342 [DEBUG] [Thread-63633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:03:31.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:03:31.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:03:31.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:03:31.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:03:31.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:03:31.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:03:31.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:03:31.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:03:31.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.918795 -999.00  +13.60  18.62     53   +4.30 1 2 1 1 1     0    0 7.81 -53.81 ZNEsW 17.1 18.6 170.0 21.6 14.0 -23.0 14.0 -21.6 13.8 -21.7 14.1 -22.9
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.918795
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:03:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:03:27', tmtdew=10.37, humidity=49.61, cloud=0.0, wind=21.63, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:03:27', seeing=1.59, atlas_timestamp='2025-11-17T22:03:03.888', atlas_cloud=2, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:00:00')
2025-11-18T00:03:31.363 [DEBUG] [Thread-63633] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:03:31.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:03:31.453 [DEBUG] [Thread-63636] [transport.py] [_log()] starting thread (client mode): 0xd07ab9d0
2025-11-18T00:03:31.453 [DEBUG] [Thread-63636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:03:31.467 [DEBUG] [Thread-63636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:03:31.467 [INFO] [Thread-63636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:03:31.474 [DEBUG] [Thread-63636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:03:31.474 [DEBUG] [Thread-63636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:03:31.474 [DEBUG] [Thread-63636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] client lang: <none>
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] server lang: <none>
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] kex follows: False
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] Compression: none
2025-11-18T00:03:31.475 [DEBUG] [Thread-63636] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:03:31.532 [DEBUG] [Thread-63636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:03:31.532 [DEBUG] [Thread-63636] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:03:31.532 [DEBUG] [Thread-63636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:03:31.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:03:31.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:03:31.588 [DEBUG] [Thread-63636] [transport.py] [_log()] userauth is OK
2025-11-18T00:03:31.589 [DEBUG] [Thread-63636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:03:31.589 [DEBUG] [Thread-63636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:03:31.589 [DEBUG] [Thread-63636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:03:31.589 [DEBUG] [Thread-63636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:03:31.604 [INFO] [Thread-63636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:03:31.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:03:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:03:32.426 [DEBUG] [Thread-63636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:03:32.426 [DEBUG] [Thread-63636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:03:32.474 [DEBUG] [Thread-63636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:03:32.474 [DEBUG] [Thread-63636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:03:32.482 [DEBUG] [Thread-63636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:03:32.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:03:32.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:03:32.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:03:32.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:03:32.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:03:32.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:03:32.516 [DEBUG] [Thread-63636] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:03:45.039 [DEBUG] [Thread-63638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:03:52.791 [DEBUG] [Thread-63639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:04:00.085 [DEBUG] [Thread-63640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:04:02.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:04:02.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:04:02.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:04:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 3, 59), 10.41, 49.15, 0.0, 23.26, 13.51, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:04:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:03:59
2025-11-18T00:04:03.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:04:03.460 [DEBUG] [Thread-63641] [transport.py] [_log()] starting thread (client mode): 0xd31cd5d0
2025-11-18T00:04:03.460 [DEBUG] [Thread-63641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:04:03.482 [DEBUG] [Thread-63641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:04:03.482 [INFO] [Thread-63641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] client lang: <none>
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] server lang: <none>
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] kex follows: False
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] Compression: none
2025-11-18T00:04:03.485 [DEBUG] [Thread-63641] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:04:03.494 [DEBUG] [Thread-63641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:04:03.494 [DEBUG] [Thread-63641] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:04:03.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:04:03.495 [DEBUG] [Thread-63641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:04:03.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:04:03.496 [DEBUG] [Thread-63641] [transport.py] [_log()] userauth is OK
2025-11-18T00:04:03.497 [DEBUG] [Thread-63641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:04:03.497 [DEBUG] [Thread-63641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:04:03.497 [DEBUG] [Thread-63641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:04:03.497 [DEBUG] [Thread-63641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:04:03.514 [INFO] [Thread-63641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:04:03.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:04:04.145 [DEBUG] [Thread-63641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:04:04.146 [DEBUG] [Thread-63641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:04:04.146 [DEBUG] [Thread-63641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:04:04.186 [DEBUG] [Thread-63641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:04:04.187 [DEBUG] [Thread-63641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:04:04.190 [DEBUG] [Thread-63641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:04:04.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:04:04.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:04:04.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:04:04.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:04:04.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:04:04.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:04:04.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:04:04.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:04:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:04:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.919142 -999.00  +13.50  11.67     53   +4.30 1 2 1 1 1     0    0 8.13 -47.09 ZNEsW 13.1 11.7 147.6 21.3 14.1 -23.2 13.9 -21.7 13.8 -21.8 14.1 -23.0
2025-11-18T00:04:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:04:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:04:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.919142
2025-11-18T00:04:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:04:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:04:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:04:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:04:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:04:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:03:59', tmtdew=10.41, humidity=49.15, cloud=0.0, wind=23.26, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:03:59', seeing=1.59, atlas_timestamp='2025-11-17T22:03:33.869', atlas_cloud=2, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:00:00')
2025-11-18T00:04:04.215 [DEBUG] [Thread-63641] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:04:04.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:04:04.312 [DEBUG] [Thread-63644] [transport.py] [_log()] starting thread (client mode): 0xd31ce470
2025-11-18T00:04:04.312 [DEBUG] [Thread-63644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:04:04.326 [DEBUG] [Thread-63644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:04:04.326 [INFO] [Thread-63644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] client lang: <none>
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] server lang: <none>
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] kex follows: False
2025-11-18T00:04:04.334 [DEBUG] [Thread-63644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:04:04.335 [DEBUG] [Thread-63644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:04:04.335 [DEBUG] [Thread-63644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:04:04.335 [DEBUG] [Thread-63644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:04:04.335 [DEBUG] [Thread-63644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:04:04.335 [DEBUG] [Thread-63644] [transport.py] [_log()] Compression: none
2025-11-18T00:04:04.335 [DEBUG] [Thread-63644] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:04:04.401 [DEBUG] [Thread-63644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:04:04.401 [DEBUG] [Thread-63644] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:04:04.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:04:04.402 [DEBUG] [Thread-63644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:04:04.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:04:04.457 [DEBUG] [Thread-63644] [transport.py] [_log()] userauth is OK
2025-11-18T00:04:04.457 [DEBUG] [Thread-63644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:04:04.457 [DEBUG] [Thread-63644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:04:04.457 [DEBUG] [Thread-63644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:04:04.457 [DEBUG] [Thread-63644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:04:04.476 [INFO] [Thread-63644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:04:04.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:04:04.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:04:05.336 [DEBUG] [Thread-63644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:04:05.336 [DEBUG] [Thread-63644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:04:05.383 [DEBUG] [Thread-63644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:04:05.383 [DEBUG] [Thread-63644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:04:05.392 [DEBUG] [Thread-63644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:04:05.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:04:05.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:04:05.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:04:05.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:04:05.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:04:05.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:04:05.427 [DEBUG] [Thread-63644] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:04:15.111 [DEBUG] [Thread-63646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:04:21.850 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:04:21.851 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:04:30.161 [DEBUG] [Thread-63647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:04:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:04:35.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:04:35.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:04:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 4, 31), 10.51, 48.82, 0.0, 23.06, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:04:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:04:31
2025-11-18T00:04:36.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:04:36.356 [DEBUG] [Thread-63648] [transport.py] [_log()] starting thread (client mode): 0xd07103d0
2025-11-18T00:04:36.357 [DEBUG] [Thread-63648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:04:36.377 [DEBUG] [Thread-63648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:04:36.377 [INFO] [Thread-63648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] client lang: <none>
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] server lang: <none>
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] kex follows: False
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:04:36.380 [DEBUG] [Thread-63648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:04:36.381 [DEBUG] [Thread-63648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:04:36.381 [DEBUG] [Thread-63648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:04:36.381 [DEBUG] [Thread-63648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:04:36.381 [DEBUG] [Thread-63648] [transport.py] [_log()] Compression: none
2025-11-18T00:04:36.381 [DEBUG] [Thread-63648] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:04:36.398 [DEBUG] [Thread-63648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:04:36.398 [DEBUG] [Thread-63648] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:04:36.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:04:36.399 [DEBUG] [Thread-63648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:04:36.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:04:36.401 [DEBUG] [Thread-63648] [transport.py] [_log()] userauth is OK
2025-11-18T00:04:36.401 [DEBUG] [Thread-63648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:04:36.401 [DEBUG] [Thread-63648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:04:36.402 [DEBUG] [Thread-63648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:04:36.402 [DEBUG] [Thread-63648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:04:36.426 [INFO] [Thread-63648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:04:36.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:04:37.033 [DEBUG] [Thread-63648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:04:37.034 [DEBUG] [Thread-63648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:04:37.034 [DEBUG] [Thread-63648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:04:37.074 [DEBUG] [Thread-63648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:04:37.074 [DEBUG] [Thread-63648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:04:37.078 [DEBUG] [Thread-63648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:04:37.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:04:37.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:04:37.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:04:37.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:04:37.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:04:37.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:04:37.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:04:37.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:04:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:04:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.919490 -999.00  +13.50  15.75     54   +4.40 1 1 1 1 1     0    0 8.00 -46.50 ZNEsW 18.0 15.8 144.8 20.9 14.0 -23.3 17.7 -25.6 13.7 -21.9 14.0 -22.9
2025-11-18T00:04:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:04:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:04:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.919490
2025-11-18T00:04:37.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:04:37.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:04:37.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:04:37.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:04:37.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:04:37.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:04:31', tmtdew=10.51, humidity=48.82, cloud=0.0, wind=23.06, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:04:31', seeing=1.71, atlas_timestamp='2025-11-17T22:04:03.936', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:02:00')
2025-11-18T00:04:37.102 [DEBUG] [Thread-63648] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:04:37.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:04:37.188 [DEBUG] [Thread-63651] [transport.py] [_log()] starting thread (client mode): 0xd31ccca0
2025-11-18T00:04:37.188 [DEBUG] [Thread-63651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:04:37.202 [DEBUG] [Thread-63651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:04:37.202 [INFO] [Thread-63651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:04:37.210 [DEBUG] [Thread-63651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:04:37.210 [DEBUG] [Thread-63651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:04:37.210 [DEBUG] [Thread-63651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:04:37.210 [DEBUG] [Thread-63651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:04:37.210 [DEBUG] [Thread-63651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:04:37.210 [DEBUG] [Thread-63651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:04:37.210 [DEBUG] [Thread-63651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] client lang: <none>
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] server lang: <none>
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] kex follows: False
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:04:37.211 [DEBUG] [Thread-63651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:04:37.212 [DEBUG] [Thread-63651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:04:37.212 [DEBUG] [Thread-63651] [transport.py] [_log()] Compression: none
2025-11-18T00:04:37.212 [DEBUG] [Thread-63651] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:04:37.268 [DEBUG] [Thread-63651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:04:37.268 [DEBUG] [Thread-63651] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:04:37.269 [DEBUG] [Thread-63651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:04:37.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:04:37.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:04:37.325 [DEBUG] [Thread-63651] [transport.py] [_log()] userauth is OK
2025-11-18T00:04:37.325 [DEBUG] [Thread-63651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:04:37.325 [DEBUG] [Thread-63651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:04:37.325 [DEBUG] [Thread-63651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:04:37.325 [DEBUG] [Thread-63651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:04:37.348 [INFO] [Thread-63651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:04:37.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:04:37.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:04:38.138 [DEBUG] [Thread-63651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:04:38.138 [DEBUG] [Thread-63651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:04:38.188 [DEBUG] [Thread-63651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:04:38.188 [DEBUG] [Thread-63651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:04:38.197 [DEBUG] [Thread-63651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:04:38.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:04:38.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:04:38.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:04:38.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:04:38.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:04:38.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:04:38.236 [DEBUG] [Thread-63651] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:04:45.191 [DEBUG] [Thread-63653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:04:52.866 [DEBUG] [Thread-63654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:05:00.236 [DEBUG] [Thread-63655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:05:08.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:05:08.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:05:08.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:05:08.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 5, 3), 10.52, 48.78, 0.0, 22.51, 13.51, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:05:08.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:05:03
2025-11-18T00:05:09.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:05:09.175 [DEBUG] [Thread-63656] [transport.py] [_log()] starting thread (client mode): 0xd0712a10
2025-11-18T00:05:09.175 [DEBUG] [Thread-63656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:05:09.195 [DEBUG] [Thread-63656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:05:09.195 [INFO] [Thread-63656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] client lang: <none>
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] server lang: <none>
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] kex follows: False
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] Compression: none
2025-11-18T00:05:09.196 [DEBUG] [Thread-63656] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:05:09.204 [DEBUG] [Thread-63656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:05:09.204 [DEBUG] [Thread-63656] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:05:09.205 [DEBUG] [Thread-63656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:05:09.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:05:09.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:05:09.206 [DEBUG] [Thread-63656] [transport.py] [_log()] userauth is OK
2025-11-18T00:05:09.206 [DEBUG] [Thread-63656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:05:09.206 [DEBUG] [Thread-63656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:05:09.206 [DEBUG] [Thread-63656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:05:09.206 [DEBUG] [Thread-63656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:05:09.223 [INFO] [Thread-63656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:05:09.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:05:09.789 [DEBUG] [Thread-63656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:05:09.790 [DEBUG] [Thread-63656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:05:09.790 [DEBUG] [Thread-63656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:05:09.830 [DEBUG] [Thread-63656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:05:09.831 [DEBUG] [Thread-63656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:05:09.833 [DEBUG] [Thread-63656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:05:09.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:05:09.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:05:09.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:05:09.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:05:09.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:05:09.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:05:09.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:05:09.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:05:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:05:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.919837 -999.00  +13.50  15.39     53   +4.30 1 2 1 1 1     0    0 8.16 -43.01 ZNEsW 16.5 15.4 145.0 25.5 14.0 -23.4 13.9 -22.0 13.7 -22.0 14.0 -23.2
2025-11-18T00:05:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:05:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:05:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.919837
2025-11-18T00:05:09.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:05:09.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:05:09.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:05:09.858 [DEBUG] [Thread-63656] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:05:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:05:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:05:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:05:03', tmtdew=10.52, humidity=48.78, cloud=0.0, wind=22.51, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:05:03', seeing=1.64, atlas_timestamp='2025-11-17T22:04:33.917', atlas_cloud=2, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:02:00')
2025-11-18T00:05:09.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:05:09.950 [DEBUG] [Thread-63659] [transport.py] [_log()] starting thread (client mode): 0xd317fdc0
2025-11-18T00:05:09.951 [DEBUG] [Thread-63659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:05:09.965 [DEBUG] [Thread-63659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:05:09.965 [INFO] [Thread-63659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:05:09.973 [DEBUG] [Thread-63659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:05:09.973 [DEBUG] [Thread-63659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:05:09.973 [DEBUG] [Thread-63659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:05:09.973 [DEBUG] [Thread-63659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:05:09.973 [DEBUG] [Thread-63659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] client lang: <none>
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] server lang: <none>
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] kex follows: False
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] Compression: none
2025-11-18T00:05:09.974 [DEBUG] [Thread-63659] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:05:10.032 [DEBUG] [Thread-63659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:05:10.032 [DEBUG] [Thread-63659] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:05:10.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:05:10.033 [DEBUG] [Thread-63659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:05:10.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:05:10.089 [DEBUG] [Thread-63659] [transport.py] [_log()] userauth is OK
2025-11-18T00:05:10.089 [DEBUG] [Thread-63659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:05:10.089 [DEBUG] [Thread-63659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:05:10.089 [DEBUG] [Thread-63659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:05:10.089 [DEBUG] [Thread-63659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:05:10.108 [INFO] [Thread-63659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:05:10.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:05:10.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:05:10.920 [DEBUG] [Thread-63659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:05:10.921 [DEBUG] [Thread-63659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:05:10.968 [DEBUG] [Thread-63659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:05:10.968 [DEBUG] [Thread-63659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:05:10.978 [DEBUG] [Thread-63659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:05:10.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:05:10.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:05:10.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:05:11.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:05:11.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:05:11.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:05:11.013 [DEBUG] [Thread-63659] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:05:15.270 [DEBUG] [Thread-63661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:05:22.051 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:05:22.052 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:05:30.317 [DEBUG] [Thread-63662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:05:41.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:05:41.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:05:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:05:41.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 5, 35), 10.56, 48.8, 0.0, 26.38, 13.47, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:05:41.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:05:35
2025-11-18T00:05:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:05:41.936 [DEBUG] [Thread-63663] [transport.py] [_log()] starting thread (client mode): 0xd0710c10
2025-11-18T00:05:41.936 [DEBUG] [Thread-63663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:05:41.957 [DEBUG] [Thread-63663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:05:41.957 [INFO] [Thread-63663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] client lang: <none>
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] server lang: <none>
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] kex follows: False
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:05:41.960 [DEBUG] [Thread-63663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:05:41.961 [DEBUG] [Thread-63663] [transport.py] [_log()] Compression: none
2025-11-18T00:05:41.961 [DEBUG] [Thread-63663] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:05:41.977 [DEBUG] [Thread-63663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:05:41.978 [DEBUG] [Thread-63663] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:05:41.978 [DEBUG] [Thread-63663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:05:41.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:05:41.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:05:41.980 [DEBUG] [Thread-63663] [transport.py] [_log()] userauth is OK
2025-11-18T00:05:41.980 [DEBUG] [Thread-63663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:05:41.980 [DEBUG] [Thread-63663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:05:41.980 [DEBUG] [Thread-63663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:05:41.980 [DEBUG] [Thread-63663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:05:42.004 [INFO] [Thread-63663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:05:42.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:05:42.671 [DEBUG] [Thread-63663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:05:42.671 [DEBUG] [Thread-63663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:05:42.671 [DEBUG] [Thread-63663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:05:42.712 [DEBUG] [Thread-63663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:05:42.712 [DEBUG] [Thread-63663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:05:42.715 [DEBUG] [Thread-63663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:05:42.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:05:42.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:05:42.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:05:42.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:05:42.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:05:42.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:05:42.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:05:42.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:05:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:05:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.919837 -999.00  +13.50  15.39     53   +4.30 1 2 1 1 1     0    0 8.16 -43.01 ZNEsW 16.5 15.4 145.0 25.5 14.0 -23.4 13.9 -22.0 13.7 -22.0 14.0 -23.2
2025-11-18T00:05:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:05:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:05:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.919837
2025-11-18T00:05:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:05:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:05:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:05:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:05:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:05:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:05:35', tmtdew=10.56, humidity=48.8, cloud=0.0, wind=26.38, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:05:35', seeing=1.8, atlas_timestamp='2025-11-17T22:04:33.917', atlas_cloud=2, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:02:00')
2025-11-18T00:05:42.739 [DEBUG] [Thread-63663] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:05:42.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:05:42.835 [DEBUG] [Thread-63666] [transport.py] [_log()] starting thread (client mode): 0xd07125f0
2025-11-18T00:05:42.835 [DEBUG] [Thread-63666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:05:42.850 [DEBUG] [Thread-63666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:05:42.850 [INFO] [Thread-63666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:05:42.857 [DEBUG] [Thread-63666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] client lang: <none>
2025-11-18T00:05:42.858 [DEBUG] [Thread-63666] [transport.py] [_log()] server lang: <none>
2025-11-18T00:05:42.859 [DEBUG] [Thread-63666] [transport.py] [_log()] kex follows: False
2025-11-18T00:05:42.859 [DEBUG] [Thread-63666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:05:42.859 [DEBUG] [Thread-63666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:05:42.859 [DEBUG] [Thread-63666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:05:42.859 [DEBUG] [Thread-63666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:05:42.859 [DEBUG] [Thread-63666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:05:42.859 [DEBUG] [Thread-63666] [transport.py] [_log()] Compression: none
2025-11-18T00:05:42.859 [DEBUG] [Thread-63666] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:05:42.914 [DEBUG] [Thread-63666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:05:42.914 [DEBUG] [Thread-63666] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:05:42.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:05:42.914 [DEBUG] [Thread-63666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:05:42.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:05:42.972 [DEBUG] [Thread-63666] [transport.py] [_log()] userauth is OK
2025-11-18T00:05:42.972 [DEBUG] [Thread-63666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:05:42.972 [DEBUG] [Thread-63666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:05:42.972 [DEBUG] [Thread-63666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:05:42.972 [DEBUG] [Thread-63666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:05:42.990 [INFO] [Thread-63666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:05:42.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:05:42.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:05:43.831 [DEBUG] [Thread-63666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:05:43.831 [DEBUG] [Thread-63666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:05:43.879 [DEBUG] [Thread-63666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:05:43.879 [DEBUG] [Thread-63666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:05:43.888 [DEBUG] [Thread-63666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:05:43.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:05:43.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:05:43.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:05:43.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:05:43.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:05:43.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:05:43.923 [DEBUG] [Thread-63666] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:05:45.346 [DEBUG] [Thread-63668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:05:52.938 [DEBUG] [Thread-63669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:06:00.397 [DEBUG] [Thread-63670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:06:13.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:06:13.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:06:13.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:06:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 6, 7), 10.53, 48.9, 0.0, 26.38, 13.47, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:06:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:06:07
2025-11-18T00:06:14.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:06:14.866 [DEBUG] [Thread-63671] [transport.py] [_log()] starting thread (client mode): 0xd07570a0
2025-11-18T00:06:14.866 [DEBUG] [Thread-63671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:06:14.886 [DEBUG] [Thread-63671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:06:14.887 [INFO] [Thread-63671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:06:14.890 [DEBUG] [Thread-63671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:06:14.890 [DEBUG] [Thread-63671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:06:14.890 [DEBUG] [Thread-63671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:06:14.890 [DEBUG] [Thread-63671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:06:14.890 [DEBUG] [Thread-63671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:06:14.890 [DEBUG] [Thread-63671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:06:14.890 [DEBUG] [Thread-63671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:06:14.890 [DEBUG] [Thread-63671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] client lang: <none>
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] server lang: <none>
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] kex follows: False
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] Compression: none
2025-11-18T00:06:14.891 [DEBUG] [Thread-63671] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:06:14.903 [DEBUG] [Thread-63671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:06:14.904 [DEBUG] [Thread-63671] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:06:14.904 [DEBUG] [Thread-63671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:06:14.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:06:14.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:06:14.905 [DEBUG] [Thread-63671] [transport.py] [_log()] userauth is OK
2025-11-18T00:06:14.905 [DEBUG] [Thread-63671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:06:14.905 [DEBUG] [Thread-63671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:06:14.905 [DEBUG] [Thread-63671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:06:14.905 [DEBUG] [Thread-63671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:06:14.918 [INFO] [Thread-63671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:06:14.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:06:15.427 [DEBUG] [Thread-63673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:06:15.566 [DEBUG] [Thread-63671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:06:15.566 [DEBUG] [Thread-63671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:06:15.566 [DEBUG] [Thread-63671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:06:15.606 [DEBUG] [Thread-63671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:06:15.607 [DEBUG] [Thread-63671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:06:15.610 [DEBUG] [Thread-63671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:06:15.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:06:15.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:06:15.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:06:15.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:06:15.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:06:15.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:06:15.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:06:15.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:06:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:06:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.920531 -999.00  +13.50  19.13     53   +4.20 1 1 1 1 1     0    0 8.09 -41.38 ZNESW 16.6 19.1 153.6 27.1 14.0 -23.4 13.9 -22.2 13.7 -22.0 14.0 -23.0
2025-11-18T00:06:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:06:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:06:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.920531
2025-11-18T00:06:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:06:15.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:06:15.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:06:15.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:06:15.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:06:15.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:06:07', tmtdew=10.53, humidity=48.9, cloud=0.0, wind=26.38, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:06:08', seeing=1.73, atlas_timestamp='2025-11-17T22:05:33.878', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:02:00')
2025-11-18T00:06:15.634 [DEBUG] [Thread-63671] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:06:15.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:06:15.731 [DEBUG] [Thread-63675] [transport.py] [_log()] starting thread (client mode): 0xd0756920
2025-11-18T00:06:15.731 [DEBUG] [Thread-63675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:06:15.745 [DEBUG] [Thread-63675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:06:15.745 [INFO] [Thread-63675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] client lang: <none>
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] server lang: <none>
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] kex follows: False
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:06:15.753 [DEBUG] [Thread-63675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:06:15.754 [DEBUG] [Thread-63675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:06:15.754 [DEBUG] [Thread-63675] [transport.py] [_log()] Compression: none
2025-11-18T00:06:15.754 [DEBUG] [Thread-63675] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:06:15.810 [DEBUG] [Thread-63675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:06:15.811 [DEBUG] [Thread-63675] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:06:15.811 [DEBUG] [Thread-63675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:06:15.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:06:15.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:06:15.867 [DEBUG] [Thread-63675] [transport.py] [_log()] userauth is OK
2025-11-18T00:06:15.867 [DEBUG] [Thread-63675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:06:15.868 [DEBUG] [Thread-63675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:06:15.868 [DEBUG] [Thread-63675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:06:15.868 [DEBUG] [Thread-63675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:06:15.892 [INFO] [Thread-63675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:06:15.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:06:15.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:06:16.704 [DEBUG] [Thread-63675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:06:16.705 [DEBUG] [Thread-63675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:06:16.752 [DEBUG] [Thread-63675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:06:16.752 [DEBUG] [Thread-63675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:06:16.761 [DEBUG] [Thread-63675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:06:16.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:06:16.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:06:16.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:06:16.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:06:16.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:06:16.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:06:16.794 [DEBUG] [Thread-63675] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:06:22.255 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:06:22.256 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:06:30.461 [DEBUG] [Thread-63677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:06:45.501 [DEBUG] [Thread-63678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:06:46.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:06:46.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:06:46.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:06:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 6, 40), 10.62, 48.43, 0.0, 24.47, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:06:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:06:40
2025-11-18T00:06:47.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:06:47.746 [DEBUG] [Thread-63679] [transport.py] [_log()] starting thread (client mode): 0xd31cf8e0
2025-11-18T00:06:47.746 [DEBUG] [Thread-63679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:06:47.767 [DEBUG] [Thread-63679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:06:47.767 [INFO] [Thread-63679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:06:47.770 [DEBUG] [Thread-63679] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] client lang: <none>
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] server lang: <none>
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] kex follows: False
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] Compression: none
2025-11-18T00:06:47.771 [DEBUG] [Thread-63679] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:06:47.787 [DEBUG] [Thread-63679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:06:47.787 [DEBUG] [Thread-63679] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:06:47.788 [DEBUG] [Thread-63679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:06:47.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:06:47.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:06:47.788 [DEBUG] [Thread-63679] [transport.py] [_log()] userauth is OK
2025-11-18T00:06:47.788 [DEBUG] [Thread-63679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:06:47.788 [DEBUG] [Thread-63679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:06:47.788 [DEBUG] [Thread-63679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:06:47.788 [DEBUG] [Thread-63679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:06:47.797 [INFO] [Thread-63679] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:06:47.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:06:48.470 [DEBUG] [Thread-63679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:06:48.470 [DEBUG] [Thread-63679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:06:48.470 [DEBUG] [Thread-63679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:06:48.511 [DEBUG] [Thread-63679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:06:48.511 [DEBUG] [Thread-63679] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:06:48.513 [DEBUG] [Thread-63679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:06:48.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:06:48.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:06:48.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:06:48.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:06:48.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:06:48.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:06:48.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:06:48.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:06:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:06:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.920878 -999.00  +13.50  17.65     52   +4.10 1 1 1 1 1     0    0 8.05 -39.84 ZNESW 19.8 17.6 166.5 23.9 14.0 -23.7 13.9 -22.2 13.7 -22.1 14.0 -23.0
2025-11-18T00:06:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:06:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:06:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.920878
2025-11-18T00:06:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:06:48.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:06:48.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:06:48.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:06:48.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:06:48.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:06:40', tmtdew=10.62, humidity=48.43, cloud=0.0, wind=24.47, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:06:40', seeing=1.68, atlas_timestamp='2025-11-17T22:06:03.859', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:02:00')
2025-11-18T00:06:48.533 [DEBUG] [Thread-63679] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:06:48.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:06:48.622 [DEBUG] [Thread-63682] [transport.py] [_log()] starting thread (client mode): 0xd31ce290
2025-11-18T00:06:48.622 [DEBUG] [Thread-63682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:06:48.640 [DEBUG] [Thread-63682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:06:48.640 [INFO] [Thread-63682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] client lang: <none>
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] server lang: <none>
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] kex follows: False
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] Compression: none
2025-11-18T00:06:48.648 [DEBUG] [Thread-63682] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:06:48.705 [DEBUG] [Thread-63682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:06:48.705 [DEBUG] [Thread-63682] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:06:48.705 [DEBUG] [Thread-63682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:06:48.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:06:48.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:06:48.762 [DEBUG] [Thread-63682] [transport.py] [_log()] userauth is OK
2025-11-18T00:06:48.762 [DEBUG] [Thread-63682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:06:48.762 [DEBUG] [Thread-63682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:06:48.762 [DEBUG] [Thread-63682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:06:48.762 [DEBUG] [Thread-63682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:06:48.776 [INFO] [Thread-63682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:06:48.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:06:48.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:06:49.697 [DEBUG] [Thread-63682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:06:49.698 [DEBUG] [Thread-63682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:06:49.745 [DEBUG] [Thread-63682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:06:49.746 [DEBUG] [Thread-63682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:06:49.755 [DEBUG] [Thread-63682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:06:49.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:06:49.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:06:49.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:06:49.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:06:49.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:06:49.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:06:49.790 [DEBUG] [Thread-63682] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:06:53.007 [DEBUG] [Thread-63684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:00.531 [DEBUG] [Thread-63685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:15.575 [DEBUG] [Thread-63686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:07:19.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:07:19.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:07:20.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 7, 12), 10.63, 48.4, 0.0, 23.61, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:07:20.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:07:12
2025-11-18T00:07:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:07:20.732 [DEBUG] [Thread-63687] [transport.py] [_log()] starting thread (client mode): 0xd31cd060
2025-11-18T00:07:20.732 [DEBUG] [Thread-63687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:07:20.752 [DEBUG] [Thread-63687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:07:20.752 [INFO] [Thread-63687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] client lang: <none>
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] server lang: <none>
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] kex follows: False
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:07:20.754 [DEBUG] [Thread-63687] [transport.py] [_log()] Compression: none
2025-11-18T00:07:20.755 [DEBUG] [Thread-63687] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:07:20.761 [DEBUG] [Thread-63687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:07:20.762 [DEBUG] [Thread-63687] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:07:20.762 [DEBUG] [Thread-63687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:07:20.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:07:20.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:07:20.762 [DEBUG] [Thread-63687] [transport.py] [_log()] userauth is OK
2025-11-18T00:07:20.762 [DEBUG] [Thread-63687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:07:20.762 [DEBUG] [Thread-63687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:07:20.762 [DEBUG] [Thread-63687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:07:20.762 [DEBUG] [Thread-63687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:07:20.772 [INFO] [Thread-63687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:07:20.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:07:21.427 [DEBUG] [Thread-63687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:07:21.427 [DEBUG] [Thread-63687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:07:21.428 [DEBUG] [Thread-63687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:07:21.469 [DEBUG] [Thread-63687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:07:21.469 [DEBUG] [Thread-63687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:07:21.472 [DEBUG] [Thread-63687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:07:21.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:07:21.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:07:21.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:07:21.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:07:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:07:21.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:07:21.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:07:21.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.921226 -999.00  +13.50  19.57     52   +4.00 1 1 1 1 1     0    0 8.07 -38.77 ZNESW 15.8 19.6 172.6 24.7 14.0 -23.5 13.9 -22.2 13.7 -22.0 14.0 -23.1
2025-11-18T00:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.921226
2025-11-18T00:07:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:07:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:07:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:07:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:07:21.495 [DEBUG] [Thread-63687] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:07:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:07:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:07:12', tmtdew=10.63, humidity=48.4, cloud=0.0, wind=23.61, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:07:12', seeing=1.68, atlas_timestamp='2025-11-17T22:06:33.926', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.20225000000000115, 0.2822500000000012, 0.3194999999999979, 0.28550000000000075, 0.1852500000000017, 0.1980000000000004, 0.10625000000000107, 0.16249999999999964, 0.3260000000000005, 0.3772500000000001, 0.42900000000000027, 0.4134999999999991, 0.20224999999999937, 0.07649999999999935, 0.08999999999999986, 0.1792499999999997, 0.44849999999999923, 0.536999999999999, 0.5352499999999996, 0.270999999999999, 0.212749999999998, 0.056250000000000355, 0.013749999999999929, 0.18599999999999994, 0.4670000000000005, 0.7897499999999997, 0.7520000000000016, 0.2469999999999999, 0.13400000000000034, 0.10000000000000142, 0.02400000000000091, 0.057749999999998636], zp_timestamp='2025-11-17T22:02:00')
2025-11-18T00:07:21.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:07:21.593 [DEBUG] [Thread-63690] [transport.py] [_log()] starting thread (client mode): 0xd317f8b0
2025-11-18T00:07:21.593 [DEBUG] [Thread-63690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:07:21.607 [DEBUG] [Thread-63690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:07:21.607 [INFO] [Thread-63690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:07:21.615 [DEBUG] [Thread-63690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:07:21.615 [DEBUG] [Thread-63690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:07:21.615 [DEBUG] [Thread-63690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:07:21.615 [DEBUG] [Thread-63690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] client lang: <none>
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] server lang: <none>
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] kex follows: False
2025-11-18T00:07:21.616 [DEBUG] [Thread-63690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:07:21.617 [DEBUG] [Thread-63690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:07:21.617 [DEBUG] [Thread-63690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:07:21.617 [DEBUG] [Thread-63690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:07:21.617 [DEBUG] [Thread-63690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:07:21.617 [DEBUG] [Thread-63690] [transport.py] [_log()] Compression: none
2025-11-18T00:07:21.617 [DEBUG] [Thread-63690] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:07:21.675 [DEBUG] [Thread-63690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:07:21.676 [DEBUG] [Thread-63690] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:07:21.677 [DEBUG] [Thread-63690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:07:21.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:07:21.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:07:21.732 [DEBUG] [Thread-63690] [transport.py] [_log()] userauth is OK
2025-11-18T00:07:21.732 [DEBUG] [Thread-63690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:07:21.732 [DEBUG] [Thread-63690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:07:21.732 [DEBUG] [Thread-63690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:07:21.732 [DEBUG] [Thread-63690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:07:21.752 [INFO] [Thread-63690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:07:21.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:07:21.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:07:22.459 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:22.460 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:22.637 [DEBUG] [Thread-63690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:07:22.637 [DEBUG] [Thread-63690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:07:22.685 [DEBUG] [Thread-63690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:07:22.685 [DEBUG] [Thread-63690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:07:22.693 [DEBUG] [Thread-63690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:07:22.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:07:22.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:07:22.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:07:22.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:07:22.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:07:22.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:07:22.725 [DEBUG] [Thread-63690] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:07:27.675 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:30.609 [DEBUG] [Thread-63692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:35.790 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:39.927 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:45.649 [DEBUG] [Thread-63693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:07:52.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:07: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
2025-11-18T00:07:53.067 [DEBUG] [Thread-63694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:07:53.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 7, 44), 10.66, 48.3, 0.0, 23.03, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:07:53.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:07:44
2025-11-18T00:07:53.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:07:53.631 [DEBUG] [Thread-63695] [transport.py] [_log()] starting thread (client mode): 0xd07a98a0
2025-11-18T00:07:53.631 [DEBUG] [Thread-63695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:07:53.654 [DEBUG] [Thread-63695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:07:53.654 [INFO] [Thread-63695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:07:53.657 [DEBUG] [Thread-63695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] client lang: <none>
2025-11-18T00:07:53.658 [DEBUG] [Thread-63695] [transport.py] [_log()] server lang: <none>
2025-11-18T00:07:53.659 [DEBUG] [Thread-63695] [transport.py] [_log()] kex follows: False
2025-11-18T00:07:53.659 [DEBUG] [Thread-63695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:07:53.659 [DEBUG] [Thread-63695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:07:53.659 [DEBUG] [Thread-63695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:07:53.659 [DEBUG] [Thread-63695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:07:53.659 [DEBUG] [Thread-63695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:07:53.659 [DEBUG] [Thread-63695] [transport.py] [_log()] Compression: none
2025-11-18T00:07:53.660 [DEBUG] [Thread-63695] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:07:53.678 [DEBUG] [Thread-63695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:07:53.678 [DEBUG] [Thread-63695] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:07:53.679 [DEBUG] [Thread-63695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:07:53.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:07:53.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:07:53.681 [DEBUG] [Thread-63695] [transport.py] [_log()] userauth is OK
2025-11-18T00:07:53.681 [DEBUG] [Thread-63695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:07:53.681 [DEBUG] [Thread-63695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:07:53.681 [DEBUG] [Thread-63695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:07:53.681 [DEBUG] [Thread-63695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:07:53.704 [INFO] [Thread-63695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:07:53.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:07:54.356 [DEBUG] [Thread-63695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:07:54.357 [DEBUG] [Thread-63695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:07:54.357 [DEBUG] [Thread-63695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:07:54.397 [DEBUG] [Thread-63695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:07:54.398 [DEBUG] [Thread-63695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:07:54.400 [DEBUG] [Thread-63695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:07:54.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:07:54.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:07:54.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:07:54.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:07:54.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:07:54.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:07:54.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:07:54.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:07:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:07:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.921573 -999.00  +13.50  14.57     52   +4.00 1 1 1 1 1     0    0 8.46 -36.06 ZNESW 12.1 14.6 159.8 23.6 14.0 -23.6 13.9 -22.1 13.7 -22.0 14.0 -23.1
2025-11-18T00:07:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:07:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:07:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.921573
2025-11-18T00:07:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:07:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:07:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:07:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:07:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:07:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:07:44', tmtdew=10.66, humidity=48.3, cloud=0.0, wind=23.03, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:07:44', seeing=1.79, atlas_timestamp='2025-11-17T22:07:03.907', atlas_cloud=1, atlas_rain=1, zp_data=[0.1482499999999991, 0.18725000000000058, 0.11425000000000018, 0.08150000000000013, 0.13649999999999984, 0.16325000000000145, 0.14199999999999946, 0.1532499999999999, 0.19299999999999962, 0.29600000000000115, 0.21924999999999883, 0.2270000000000003, 0.21999999999999886, 0.09724999999999895, 0.0779999999999994, 0.09299999999999997, 0.15525000000000055, 0.4015000000000004, 0.5099999999999998, 0.3897499999999994, 0.20999999999999908, 0.09574999999999889, 0.0547500000000003, 0.012249999999999872, 0.09899999999999842, 0.45950000000000024, 1.1807499999999997, 0.9045000000000005, 0.19599999999999973, 0.0660000000000025, 0.053000000000000824, 0.0065000000000008384, 0.04574999999999996], zp_timestamp='2025-11-17T22:06:00')
2025-11-18T00:07:54.425 [DEBUG] [Thread-63695] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:07:54.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:07:54.521 [DEBUG] [Thread-63698] [transport.py] [_log()] starting thread (client mode): 0xd3161330
2025-11-18T00:07:54.521 [DEBUG] [Thread-63698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:07:54.536 [DEBUG] [Thread-63698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:07:54.536 [INFO] [Thread-63698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] client lang: <none>
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] server lang: <none>
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] kex follows: False
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:07:54.544 [DEBUG] [Thread-63698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:07:54.545 [DEBUG] [Thread-63698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:07:54.545 [DEBUG] [Thread-63698] [transport.py] [_log()] Compression: none
2025-11-18T00:07:54.545 [DEBUG] [Thread-63698] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:07:54.600 [DEBUG] [Thread-63698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:07:54.601 [DEBUG] [Thread-63698] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:07:54.601 [DEBUG] [Thread-63698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:07:54.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:07:54.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:07:54.658 [DEBUG] [Thread-63698] [transport.py] [_log()] userauth is OK
2025-11-18T00:07:54.658 [DEBUG] [Thread-63698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:07:54.658 [DEBUG] [Thread-63698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:07:54.658 [DEBUG] [Thread-63698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:07:54.658 [DEBUG] [Thread-63698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:07:54.676 [INFO] [Thread-63698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:07:54.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:07:54.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:07:55.482 [DEBUG] [Thread-63698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:07:55.483 [DEBUG] [Thread-63698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:07:55.531 [DEBUG] [Thread-63698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:07:55.532 [DEBUG] [Thread-63698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:07:55.541 [DEBUG] [Thread-63698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:07:55.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:07:55.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:07:55.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:07:55.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:07:55.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:07:55.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:07:55.575 [DEBUG] [Thread-63698] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:08:00.676 [DEBUG] [Thread-63700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:08:15.725 [DEBUG] [Thread-63701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:08:22.662 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:08:22.664 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:08:25.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:08:25.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:08:25.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:08:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 8, 16), 10.68, 48.25, 0.0, 21.99, 13.51, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:08:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:08:16
2025-11-18T00:08:26.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:08:26.507 [DEBUG] [Thread-63702] [transport.py] [_log()] starting thread (client mode): 0xd31cc790
2025-11-18T00:08:26.507 [DEBUG] [Thread-63702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:08:26.528 [DEBUG] [Thread-63702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:08:26.528 [INFO] [Thread-63702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:08:26.531 [DEBUG] [Thread-63702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] client lang: <none>
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] server lang: <none>
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] kex follows: False
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] Compression: none
2025-11-18T00:08:26.532 [DEBUG] [Thread-63702] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:08:26.550 [DEBUG] [Thread-63702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:08:26.550 [DEBUG] [Thread-63702] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:08:26.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:08:26.551 [DEBUG] [Thread-63702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:08:26.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:08:26.553 [DEBUG] [Thread-63702] [transport.py] [_log()] userauth is OK
2025-11-18T00:08:26.553 [DEBUG] [Thread-63702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:08:26.553 [DEBUG] [Thread-63702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:08:26.553 [DEBUG] [Thread-63702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:08:26.553 [DEBUG] [Thread-63702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:08:26.589 [INFO] [Thread-63702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:08:26.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:08:27.155 [DEBUG] [Thread-63702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:08:27.155 [DEBUG] [Thread-63702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:08:27.156 [DEBUG] [Thread-63702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:08:27.196 [DEBUG] [Thread-63702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:08:27.197 [DEBUG] [Thread-63702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:08:27.200 [DEBUG] [Thread-63702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:08:27.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:08:27.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:08:27.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:08:27.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:08:27.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:08:27.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:08:27.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:08:27.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:08:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:08:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.921920 -999.00  +13.50  15.71     53   +4.20 1 1 1 1 1     0    0 8.20 -35.25 ZNESW 15.1 15.7 152.8 21.9 14.0 -23.6 13.9 -22.2 13.7 -22.0 14.0 -23.1
2025-11-18T00:08:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:08:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:08:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.921920
2025-11-18T00:08:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:08:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:08:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:08:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:08:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:08:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:08:16', tmtdew=10.68, humidity=48.25, cloud=0.0, wind=21.99, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:08:16', seeing=1.79, atlas_timestamp='2025-11-17T22:07:33.888', atlas_cloud=1, atlas_rain=1, zp_data=[0.1482499999999991, 0.18725000000000058, 0.11425000000000018, 0.08150000000000013, 0.13649999999999984, 0.16325000000000145, 0.14199999999999946, 0.1532499999999999, 0.19299999999999962, 0.29600000000000115, 0.21924999999999883, 0.2270000000000003, 0.21999999999999886, 0.09724999999999895, 0.0779999999999994, 0.09299999999999997, 0.15525000000000055, 0.4015000000000004, 0.5099999999999998, 0.3897499999999994, 0.20999999999999908, 0.09574999999999889, 0.0547500000000003, 0.012249999999999872, 0.09899999999999842, 0.45950000000000024, 1.1807499999999997, 0.9045000000000005, 0.19599999999999973, 0.0660000000000025, 0.053000000000000824, 0.0065000000000008384, 0.04574999999999996], zp_timestamp='2025-11-17T22:06:00')
2025-11-18T00:08:27.227 [DEBUG] [Thread-63702] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:08:27.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:08:27.332 [DEBUG] [Thread-63705] [transport.py] [_log()] starting thread (client mode): 0xd0754280
2025-11-18T00:08:27.332 [DEBUG] [Thread-63705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:08:27.347 [DEBUG] [Thread-63705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:08:27.347 [INFO] [Thread-63705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:08:27.355 [DEBUG] [Thread-63705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:08:27.355 [DEBUG] [Thread-63705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:08:27.355 [DEBUG] [Thread-63705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:08:27.355 [DEBUG] [Thread-63705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:08:27.355 [DEBUG] [Thread-63705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:08:27.355 [DEBUG] [Thread-63705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:08:27.355 [DEBUG] [Thread-63705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] client lang: <none>
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] server lang: <none>
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] kex follows: False
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:08:27.356 [DEBUG] [Thread-63705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:08:27.357 [DEBUG] [Thread-63705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:08:27.357 [DEBUG] [Thread-63705] [transport.py] [_log()] Compression: none
2025-11-18T00:08:27.357 [DEBUG] [Thread-63705] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:08:27.414 [DEBUG] [Thread-63705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:08:27.415 [DEBUG] [Thread-63705] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:08:27.416 [DEBUG] [Thread-63705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:08:27.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:08:27.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:08:27.473 [DEBUG] [Thread-63705] [transport.py] [_log()] userauth is OK
2025-11-18T00:08:27.473 [DEBUG] [Thread-63705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:08:27.473 [DEBUG] [Thread-63705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:08:27.474 [DEBUG] [Thread-63705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:08:27.474 [DEBUG] [Thread-63705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:08:27.493 [INFO] [Thread-63705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:08:27.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:08:27.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:08:28.321 [DEBUG] [Thread-63705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:08:28.321 [DEBUG] [Thread-63705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:08:28.369 [DEBUG] [Thread-63705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:08:28.369 [DEBUG] [Thread-63705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:08:28.378 [DEBUG] [Thread-63705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:08:28.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:08:28.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:08:28.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:08:28.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:08:28.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:08:28.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:08:28.411 [DEBUG] [Thread-63705] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:08:30.754 [DEBUG] [Thread-63707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:08:45.790 [DEBUG] [Thread-63708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:08:53.124 [DEBUG] [Thread-63709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:08:58.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:08:58.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:08:58.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:08:59.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 8, 48), 10.65, 48.33, 0.0, 29.34, 13.42, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:08:59.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:08:48
2025-11-18T00:08:59.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:08:59.345 [DEBUG] [Thread-63710] [transport.py] [_log()] starting thread (client mode): 0xd07a9e40
2025-11-18T00:08:59.345 [DEBUG] [Thread-63710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:08:59.375 [DEBUG] [Thread-63710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:08:59.375 [INFO] [Thread-63710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:08:59.376 [DEBUG] [Thread-63710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] client lang: <none>
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] server lang: <none>
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] kex follows: False
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] Compression: none
2025-11-18T00:08:59.377 [DEBUG] [Thread-63710] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:08:59.388 [DEBUG] [Thread-63710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:08:59.388 [DEBUG] [Thread-63710] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:08:59.389 [DEBUG] [Thread-63710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:08:59.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:08:59.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:08:59.391 [DEBUG] [Thread-63710] [transport.py] [_log()] userauth is OK
2025-11-18T00:08:59.391 [DEBUG] [Thread-63710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:08:59.391 [DEBUG] [Thread-63710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:08:59.391 [DEBUG] [Thread-63710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:08:59.391 [DEBUG] [Thread-63710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:08:59.410 [INFO] [Thread-63710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:08:59.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:09:00.011 [DEBUG] [Thread-63710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:09:00.011 [DEBUG] [Thread-63710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:09:00.011 [DEBUG] [Thread-63710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:09:00.051 [DEBUG] [Thread-63710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:09:00.051 [DEBUG] [Thread-63710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:09:00.054 [DEBUG] [Thread-63710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:09:00.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:09:00.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:09:00.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:09:00.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:09:00.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:09:00.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:09:00.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:09:00.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:09:00.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:09:00.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.922267 -999.00  +13.50  13.02     53   +4.20 1 1 1 1 1     0    0 8.51 -31.87 ZNESW 13.2 13.0 148.8 19.3 13.9 -23.7 13.9 -22.2 13.7 -22.0 14.0 -23.3
2025-11-18T00:09:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:09:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:09:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.922267
2025-11-18T00:09:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:09:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:09:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:09:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:09:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:09:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:08:48', tmtdew=10.65, humidity=48.33, cloud=0.0, wind=29.34, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:08:48', seeing=2.08, atlas_timestamp='2025-11-17T22:08:03.869', atlas_cloud=1, atlas_rain=1, zp_data=[0.1482499999999991, 0.18725000000000058, 0.11425000000000018, 0.08150000000000013, 0.13649999999999984, 0.16325000000000145, 0.14199999999999946, 0.1532499999999999, 0.19299999999999962, 0.29600000000000115, 0.21924999999999883, 0.2270000000000003, 0.21999999999999886, 0.09724999999999895, 0.0779999999999994, 0.09299999999999997, 0.15525000000000055, 0.4015000000000004, 0.5099999999999998, 0.3897499999999994, 0.20999999999999908, 0.09574999999999889, 0.0547500000000003, 0.012249999999999872, 0.09899999999999842, 0.45950000000000024, 1.1807499999999997, 0.9045000000000005, 0.19599999999999973, 0.0660000000000025, 0.053000000000000824, 0.0065000000000008384, 0.04574999999999996], zp_timestamp='2025-11-17T22:06:00')
2025-11-18T00:09:00.079 [DEBUG] [Thread-63710] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:09:00.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:09:00.184 [DEBUG] [Thread-63713] [transport.py] [_log()] starting thread (client mode): 0xd31cd3f0
2025-11-18T00:09:00.184 [DEBUG] [Thread-63713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:09:00.202 [DEBUG] [Thread-63713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:09:00.202 [INFO] [Thread-63713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:09:00.210 [DEBUG] [Thread-63713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:09:00.210 [DEBUG] [Thread-63713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:09:00.210 [DEBUG] [Thread-63713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:09:00.210 [DEBUG] [Thread-63713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:09:00.210 [DEBUG] [Thread-63713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] client lang: <none>
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] server lang: <none>
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] kex follows: False
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:09:00.211 [DEBUG] [Thread-63713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:09:00.212 [DEBUG] [Thread-63713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:09:00.212 [DEBUG] [Thread-63713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:09:00.212 [DEBUG] [Thread-63713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:09:00.212 [DEBUG] [Thread-63713] [transport.py] [_log()] Compression: none
2025-11-18T00:09:00.212 [DEBUG] [Thread-63713] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:09:00.270 [DEBUG] [Thread-63713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:09:00.271 [DEBUG] [Thread-63713] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:09:00.272 [DEBUG] [Thread-63713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:09:00.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:09:00.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:09:00.329 [DEBUG] [Thread-63713] [transport.py] [_log()] userauth is OK
2025-11-18T00:09:00.330 [DEBUG] [Thread-63713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:09:00.330 [DEBUG] [Thread-63713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:09:00.330 [DEBUG] [Thread-63713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:09:00.330 [DEBUG] [Thread-63713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:09:00.350 [INFO] [Thread-63713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:09:00.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:09:00.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:09:00.819 [DEBUG] [Thread-63715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:09:01.203 [DEBUG] [Thread-63713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:09:01.203 [DEBUG] [Thread-63713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:09:01.251 [DEBUG] [Thread-63713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:09:01.251 [DEBUG] [Thread-63713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:09:01.260 [DEBUG] [Thread-63713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:09:01.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:09:01.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:09:01.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:09:01.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:09:01.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:09:01.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:09:01.291 [DEBUG] [Thread-63713] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:09:15.855 [DEBUG] [Thread-63716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:09:22.868 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:09:22.869 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:09:30.883 [DEBUG] [Thread-63717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:09:31.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:09:31.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:09:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:09:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 9, 20), 10.83, 47.7, 0.0, 28.48, 13.42, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:09:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:09:20
2025-11-18T00:09:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:09:32.238 [DEBUG] [Thread-63718] [transport.py] [_log()] starting thread (client mode): 0xd0713d90
2025-11-18T00:09:32.239 [DEBUG] [Thread-63718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:09:32.258 [DEBUG] [Thread-63718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:09:32.259 [INFO] [Thread-63718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:09:32.262 [DEBUG] [Thread-63718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:09:32.262 [DEBUG] [Thread-63718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:09:32.262 [DEBUG] [Thread-63718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] client lang: <none>
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] server lang: <none>
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] kex follows: False
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:09:32.263 [DEBUG] [Thread-63718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:09:32.264 [DEBUG] [Thread-63718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:09:32.264 [DEBUG] [Thread-63718] [transport.py] [_log()] Compression: none
2025-11-18T00:09:32.264 [DEBUG] [Thread-63718] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:09:32.281 [DEBUG] [Thread-63718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:09:32.282 [DEBUG] [Thread-63718] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:09:32.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:09:32.283 [DEBUG] [Thread-63718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:09:32.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:09:32.285 [DEBUG] [Thread-63718] [transport.py] [_log()] userauth is OK
2025-11-18T00:09:32.286 [DEBUG] [Thread-63718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:09:32.286 [DEBUG] [Thread-63718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:09:32.286 [DEBUG] [Thread-63718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:09:32.286 [DEBUG] [Thread-63718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:09:32.310 [INFO] [Thread-63718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:09:32.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:09:32.914 [DEBUG] [Thread-63718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:09:32.914 [DEBUG] [Thread-63718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:09:32.914 [DEBUG] [Thread-63718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:09:32.955 [DEBUG] [Thread-63718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:09:32.956 [DEBUG] [Thread-63718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:09:32.958 [DEBUG] [Thread-63718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:09:32.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:09:32.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:09:32.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:09:32.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:09:32.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:09:32.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:09:32.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:09:32.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:09:32.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:09:32.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.922962 -999.00  +13.50  20.32     52   +4.00 1 1 1 1 1     0    0 8.64 -25.49 ZNESW 22.6 20.3 155.4 34.1 13.9 -23.6 13.9 -22.1 13.7 -21.7 14.0 -23.1
2025-11-18T00:09:32.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:09:32.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:09:32.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.922962
2025-11-18T00:09:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:09:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:09:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:09:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:09:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:09:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:09:20', tmtdew=10.83, humidity=47.7, cloud=0.0, wind=28.48, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:09:20', seeing=1.82, atlas_timestamp='2025-11-17T22:09:03.917', atlas_cloud=1, atlas_rain=1, zp_data=[0.1482499999999991, 0.18725000000000058, 0.11425000000000018, 0.08150000000000013, 0.13649999999999984, 0.16325000000000145, 0.14199999999999946, 0.1532499999999999, 0.19299999999999962, 0.29600000000000115, 0.21924999999999883, 0.2270000000000003, 0.21999999999999886, 0.09724999999999895, 0.0779999999999994, 0.09299999999999997, 0.15525000000000055, 0.4015000000000004, 0.5099999999999998, 0.3897499999999994, 0.20999999999999908, 0.09574999999999889, 0.0547500000000003, 0.012249999999999872, 0.09899999999999842, 0.45950000000000024, 1.1807499999999997, 0.9045000000000005, 0.19599999999999973, 0.0660000000000025, 0.053000000000000824, 0.0065000000000008384, 0.04574999999999996], zp_timestamp='2025-11-17T22:06:00')
2025-11-18T00:09:32.981 [DEBUG] [Thread-63718] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:09:33.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:09:33.078 [DEBUG] [Thread-63721] [transport.py] [_log()] starting thread (client mode): 0xd31cfdf0
2025-11-18T00:09:33.079 [DEBUG] [Thread-63721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:09:33.097 [DEBUG] [Thread-63721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:09:33.097 [INFO] [Thread-63721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:09:33.104 [DEBUG] [Thread-63721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] client lang: <none>
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] server lang: <none>
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] kex follows: False
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:09:33.105 [DEBUG] [Thread-63721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:09:33.106 [DEBUG] [Thread-63721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:09:33.106 [DEBUG] [Thread-63721] [transport.py] [_log()] Compression: none
2025-11-18T00:09:33.106 [DEBUG] [Thread-63721] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:09:33.165 [DEBUG] [Thread-63721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:09:33.165 [DEBUG] [Thread-63721] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:09:33.166 [DEBUG] [Thread-63721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:09:33.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:09:33.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:09:33.221 [DEBUG] [Thread-63721] [transport.py] [_log()] userauth is OK
2025-11-18T00:09:33.221 [DEBUG] [Thread-63721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:09:33.221 [DEBUG] [Thread-63721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:09:33.221 [DEBUG] [Thread-63721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:09:33.221 [DEBUG] [Thread-63721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:09:33.240 [INFO] [Thread-63721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:09:33.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:09:33.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:09:34.056 [DEBUG] [Thread-63721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:09:34.056 [DEBUG] [Thread-63721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:09:34.104 [DEBUG] [Thread-63721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:09:34.104 [DEBUG] [Thread-63721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:09:34.114 [DEBUG] [Thread-63721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:09:34.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:09:34.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:09:34.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:09:34.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:09:34.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:09:34.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:09:34.149 [DEBUG] [Thread-63721] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:09:45.919 [DEBUG] [Thread-63723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:09:53.198 [DEBUG] [Thread-63724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:10:00.967 [DEBUG] [Thread-63725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:10:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:10:04.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:10:04.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
2025-11-18T00:10:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 9, 52), 10.84, 47.71, 0.0, 29.55, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:10:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:09:52
2025-11-18T00:10:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:10:05.088 [DEBUG] [Thread-63726] [transport.py] [_log()] starting thread (client mode): 0xd0702aa0
2025-11-18T00:10:05.089 [DEBUG] [Thread-63726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:10:05.109 [DEBUG] [Thread-63726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:10:05.109 [INFO] [Thread-63726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:10:05.112 [DEBUG] [Thread-63726] [transport.py] [_log()] client lang: <none>
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] server lang: <none>
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] kex follows: False
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] Compression: none
2025-11-18T00:10:05.113 [DEBUG] [Thread-63726] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:10:05.130 [DEBUG] [Thread-63726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:10:05.130 [DEBUG] [Thread-63726] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:10:05.131 [DEBUG] [Thread-63726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:10:05.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:10:05.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:10:05.133 [DEBUG] [Thread-63726] [transport.py] [_log()] userauth is OK
2025-11-18T00:10:05.133 [DEBUG] [Thread-63726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:10:05.133 [DEBUG] [Thread-63726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:10:05.133 [DEBUG] [Thread-63726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:10:05.133 [DEBUG] [Thread-63726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:10:05.157 [INFO] [Thread-63726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:10:05.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:10:07.078 [DEBUG] [Thread-63726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:10:07.079 [DEBUG] [Thread-63726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:10:07.079 [DEBUG] [Thread-63726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:10:07.119 [DEBUG] [Thread-63726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:10:07.119 [DEBUG] [Thread-63726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:10:07.122 [DEBUG] [Thread-63726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:10:07.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:10:07.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:10:07.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:10:07.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:10:07.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:10:07.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:10:07.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:10:07.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:10:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:10:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.923309 -999.00  +13.50  23.82     51   +3.70 1 1 1 1 1     0    0 8.76 -21.64 ZNESW 23.3 23.8 146.0 33.3 14.0 -23.4 13.8 -22.2 13.7 -21.8 14.0 -23.0
2025-11-18T00:10:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:10:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:10:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.923309
2025-11-18T00:10:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:10:07.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:10:07.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:10:07.144 [DEBUG] [Thread-63726] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:10:07.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:10:07.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:10:07.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:09:52', tmtdew=10.84, humidity=47.71, cloud=0.0, wind=29.55, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:09:52', seeing=2.3, atlas_timestamp='2025-11-17T22:09:33.898', atlas_cloud=1, atlas_rain=1, zp_data=[0.1482499999999991, 0.18725000000000058, 0.11425000000000018, 0.08150000000000013, 0.13649999999999984, 0.16325000000000145, 0.14199999999999946, 0.1532499999999999, 0.19299999999999962, 0.29600000000000115, 0.21924999999999883, 0.2270000000000003, 0.21999999999999886, 0.09724999999999895, 0.0779999999999994, 0.09299999999999997, 0.15525000000000055, 0.4015000000000004, 0.5099999999999998, 0.3897499999999994, 0.20999999999999908, 0.09574999999999889, 0.0547500000000003, 0.012249999999999872, 0.09899999999999842, 0.45950000000000024, 1.1807499999999997, 0.9045000000000005, 0.19599999999999973, 0.0660000000000025, 0.053000000000000824, 0.0065000000000008384, 0.04574999999999996], zp_timestamp='2025-11-17T22:06:00')
2025-11-18T00:10:07.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:10:07.248 [DEBUG] [Thread-63729] [transport.py] [_log()] starting thread (client mode): 0xd31639a0
2025-11-18T00:10:07.248 [DEBUG] [Thread-63729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:10:07.265 [DEBUG] [Thread-63729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:10:07.265 [INFO] [Thread-63729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:10:07.272 [DEBUG] [Thread-63729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:10:07.272 [DEBUG] [Thread-63729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] client lang: <none>
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] server lang: <none>
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] kex follows: False
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:10:07.273 [DEBUG] [Thread-63729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:10:07.274 [DEBUG] [Thread-63729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:10:07.274 [DEBUG] [Thread-63729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:10:07.274 [DEBUG] [Thread-63729] [transport.py] [_log()] Compression: none
2025-11-18T00:10:07.274 [DEBUG] [Thread-63729] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:10:07.332 [DEBUG] [Thread-63729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:10:07.332 [DEBUG] [Thread-63729] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:10:07.333 [DEBUG] [Thread-63729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:10:07.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:10:07.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:10:07.388 [DEBUG] [Thread-63729] [transport.py] [_log()] userauth is OK
2025-11-18T00:10:07.388 [DEBUG] [Thread-63729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:10:07.388 [DEBUG] [Thread-63729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:10:07.388 [DEBUG] [Thread-63729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:10:07.388 [DEBUG] [Thread-63729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:10:07.403 [INFO] [Thread-63729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:10:07.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:10:07.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:10:08.251 [DEBUG] [Thread-63729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:10:08.252 [DEBUG] [Thread-63729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:10:08.299 [DEBUG] [Thread-63729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:10:08.299 [DEBUG] [Thread-63729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:10:08.308 [DEBUG] [Thread-63729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:10:08.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:10:08.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:10:08.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:10:08.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:10:08.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:10:08.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:10:08.344 [DEBUG] [Thread-63729] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:10:15.997 [DEBUG] [Thread-63731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:10:23.072 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:10:23.074 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:10:31.045 [DEBUG] [Thread-63732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:10:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:10:38.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:10:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:10:39.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 10, 24), 10.94, 47.37, 0.0, 30.58, 13.46, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:10:39.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:10:24
2025-11-18T00:10:39.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:10:39.334 [DEBUG] [Thread-63733] [transport.py] [_log()] starting thread (client mode): 0xd31cd900
2025-11-18T00:10:39.335 [DEBUG] [Thread-63733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:10:39.355 [DEBUG] [Thread-63733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:10:39.355 [INFO] [Thread-63733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:10:39.358 [DEBUG] [Thread-63733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:10:39.358 [DEBUG] [Thread-63733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] client lang: <none>
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] server lang: <none>
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] kex follows: False
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] Compression: none
2025-11-18T00:10:39.359 [DEBUG] [Thread-63733] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:10:39.375 [DEBUG] [Thread-63733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:10:39.375 [DEBUG] [Thread-63733] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:10:39.375 [DEBUG] [Thread-63733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:10:39.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:10:39.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:10:39.376 [DEBUG] [Thread-63733] [transport.py] [_log()] userauth is OK
2025-11-18T00:10:39.377 [DEBUG] [Thread-63733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:10:39.377 [DEBUG] [Thread-63733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:10:39.377 [DEBUG] [Thread-63733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:10:39.377 [DEBUG] [Thread-63733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:10:39.396 [INFO] [Thread-63733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:10:39.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:10:40.023 [DEBUG] [Thread-63733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:10:40.023 [DEBUG] [Thread-63733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:10:40.023 [DEBUG] [Thread-63733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:10:40.064 [DEBUG] [Thread-63733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:10:40.064 [DEBUG] [Thread-63733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:10:40.066 [DEBUG] [Thread-63733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:10:40.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:10:40.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:10:40.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:10:40.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:10:40.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:10:40.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:10:40.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.923656 -999.00  +13.60  16.37     51   +3.70 1 1 1 1 1     0    0 8.79 -16.22 ZNESW 17.0 16.4 148.6 24.1 14.0 -23.7 13.8 -22.1 13.7 -21.9 14.0 -23.0
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.923656
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:10:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:10:24', tmtdew=10.94, humidity=47.37, cloud=0.0, wind=30.58, temperature=13.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:10:24', seeing=2.23, atlas_timestamp='2025-11-17T22:10:03.878', atlas_cloud=1, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:09:00')
2025-11-18T00:10:40.085 [DEBUG] [Thread-63733] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:10:40.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:10:40.172 [DEBUG] [Thread-63736] [transport.py] [_log()] starting thread (client mode): 0xd31cd0c0
2025-11-18T00:10:40.172 [DEBUG] [Thread-63736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:10:40.186 [DEBUG] [Thread-63736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:10:40.186 [INFO] [Thread-63736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:10:40.193 [DEBUG] [Thread-63736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:10:40.193 [DEBUG] [Thread-63736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:10:40.193 [DEBUG] [Thread-63736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:10:40.193 [DEBUG] [Thread-63736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:10:40.193 [DEBUG] [Thread-63736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:10:40.193 [DEBUG] [Thread-63736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:10:40.193 [DEBUG] [Thread-63736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] client lang: <none>
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] server lang: <none>
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] kex follows: False
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] Compression: none
2025-11-18T00:10:40.194 [DEBUG] [Thread-63736] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:10:40.250 [DEBUG] [Thread-63736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:10:40.250 [DEBUG] [Thread-63736] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:10:40.250 [DEBUG] [Thread-63736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:10:40.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:10:40.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:10:40.308 [DEBUG] [Thread-63736] [transport.py] [_log()] userauth is OK
2025-11-18T00:10:40.308 [DEBUG] [Thread-63736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:10:40.308 [DEBUG] [Thread-63736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:10:40.308 [DEBUG] [Thread-63736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:10:40.308 [DEBUG] [Thread-63736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:10:40.321 [INFO] [Thread-63736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:10:40.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:10:40.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:10:41.166 [DEBUG] [Thread-63736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:10:41.166 [DEBUG] [Thread-63736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:10:41.216 [DEBUG] [Thread-63736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:10:41.216 [DEBUG] [Thread-63736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:10:41.224 [DEBUG] [Thread-63736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:10:41.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:10:41.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:10:41.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:10:41.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:10:41.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:10:41.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:10:41.256 [DEBUG] [Thread-63736] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:10:46.078 [DEBUG] [Thread-63738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:10:53.280 [DEBUG] [Thread-63739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:11:01.122 [DEBUG] [Thread-63740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:11:11.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:11:11.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:11:11.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:11:11.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 10, 56), 11.25, 46.71, 0.0, 26.48, 13.59, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:11:11.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:10:56
2025-11-18T00:11:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:11:12.202 [DEBUG] [Thread-63741] [transport.py] [_log()] starting thread (client mode): 0xd07030a0
2025-11-18T00:11:12.202 [DEBUG] [Thread-63741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:11:12.221 [DEBUG] [Thread-63741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:11:12.222 [INFO] [Thread-63741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:11:12.224 [DEBUG] [Thread-63741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:11:12.224 [DEBUG] [Thread-63741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:11:12.224 [DEBUG] [Thread-63741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:11:12.224 [DEBUG] [Thread-63741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:11:12.224 [DEBUG] [Thread-63741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:11:12.224 [DEBUG] [Thread-63741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:11:12.224 [DEBUG] [Thread-63741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:11:12.224 [DEBUG] [Thread-63741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] client lang: <none>
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] server lang: <none>
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] kex follows: False
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] Compression: none
2025-11-18T00:11:12.225 [DEBUG] [Thread-63741] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:11:12.243 [DEBUG] [Thread-63741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:11:12.244 [DEBUG] [Thread-63741] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:11:12.244 [DEBUG] [Thread-63741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:11:12.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:11:12.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:11:12.246 [DEBUG] [Thread-63741] [transport.py] [_log()] userauth is OK
2025-11-18T00:11:12.247 [DEBUG] [Thread-63741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:11:12.247 [DEBUG] [Thread-63741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:11:12.247 [DEBUG] [Thread-63741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:11:12.247 [DEBUG] [Thread-63741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:11:12.270 [INFO] [Thread-63741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:11:12.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:11:12.922 [DEBUG] [Thread-63741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:11:12.922 [DEBUG] [Thread-63741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:11:12.923 [DEBUG] [Thread-63741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:11:12.964 [DEBUG] [Thread-63741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:11:12.964 [DEBUG] [Thread-63741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:11:12.967 [DEBUG] [Thread-63741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:11:12.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:11:12.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:11:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:11:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:11:12.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:11:12.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:11:12.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.924003 -999.00  +13.60  16.26     51   +3.80 1 1 1 1 1     0    0 8.95 -11.70 ZNESW 15.1 16.3 149.8 27.7 14.0 -23.6 13.9 -22.1 13.7 -21.9 14.0 -23.0
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.924003
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:11:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:10:56', tmtdew=11.25, humidity=46.71, cloud=0.0, wind=26.48, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:10:56', seeing=2.66, atlas_timestamp='2025-11-17T22:10:33.859', atlas_cloud=1, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:09:00')
2025-11-18T00:11:12.983 [DEBUG] [Thread-63741] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:11:13.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:11:13.068 [DEBUG] [Thread-63744] [transport.py] [_log()] starting thread (client mode): 0xd3161900
2025-11-18T00:11:13.068 [DEBUG] [Thread-63744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:11:13.084 [DEBUG] [Thread-63744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:11:13.084 [INFO] [Thread-63744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:11:13.091 [DEBUG] [Thread-63744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:11:13.091 [DEBUG] [Thread-63744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:11:13.091 [DEBUG] [Thread-63744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:11:13.091 [DEBUG] [Thread-63744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:11:13.091 [DEBUG] [Thread-63744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:11:13.091 [DEBUG] [Thread-63744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] client lang: <none>
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] server lang: <none>
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] kex follows: False
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] Compression: none
2025-11-18T00:11:13.092 [DEBUG] [Thread-63744] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:11:13.147 [DEBUG] [Thread-63744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:11:13.148 [DEBUG] [Thread-63744] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:11:13.148 [DEBUG] [Thread-63744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:11:13.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:11:13.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:11:13.204 [DEBUG] [Thread-63744] [transport.py] [_log()] userauth is OK
2025-11-18T00:11:13.204 [DEBUG] [Thread-63744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:11:13.204 [DEBUG] [Thread-63744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:11:13.204 [DEBUG] [Thread-63744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:11:13.204 [DEBUG] [Thread-63744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:11:13.223 [INFO] [Thread-63744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:11:13.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:11:13.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:11:14.049 [DEBUG] [Thread-63744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:11:14.050 [DEBUG] [Thread-63744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:11:14.097 [DEBUG] [Thread-63744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:11:14.097 [DEBUG] [Thread-63744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:11:14.106 [DEBUG] [Thread-63744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:11:14.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:11:14.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:11:14.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:11:14.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:11:14.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:11:14.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:11:14.138 [DEBUG] [Thread-63744] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:11:16.148 [DEBUG] [Thread-63746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:11:23.274 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:11:23.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:11:31.181 [DEBUG] [Thread-63747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:11:44.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:11:44.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:11:44.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:11:44.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 11, 28), 11.22, 46.81, 0.0, 23.52, 13.61, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:11:44.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:11:28
2025-11-18T00:11:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:11:45.069 [DEBUG] [Thread-63748] [transport.py] [_log()] starting thread (client mode): 0xd3160c40
2025-11-18T00:11:45.069 [DEBUG] [Thread-63748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:11:45.089 [DEBUG] [Thread-63748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:11:45.089 [INFO] [Thread-63748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:11:45.092 [DEBUG] [Thread-63748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:11:45.092 [DEBUG] [Thread-63748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:11:45.092 [DEBUG] [Thread-63748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:11:45.092 [DEBUG] [Thread-63748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:11:45.092 [DEBUG] [Thread-63748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] client lang: <none>
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] server lang: <none>
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] kex follows: False
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] Compression: none
2025-11-18T00:11:45.093 [DEBUG] [Thread-63748] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:11:45.116 [DEBUG] [Thread-63748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:11:45.117 [DEBUG] [Thread-63748] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:11:45.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:11:45.118 [DEBUG] [Thread-63748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:11:45.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:11:45.120 [DEBUG] [Thread-63748] [transport.py] [_log()] userauth is OK
2025-11-18T00:11:45.120 [DEBUG] [Thread-63748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:11:45.120 [DEBUG] [Thread-63748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:11:45.120 [DEBUG] [Thread-63748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:11:45.120 [DEBUG] [Thread-63748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:11:45.152 [INFO] [Thread-63748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:11:45.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:11:45.805 [DEBUG] [Thread-63748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:11:45.805 [DEBUG] [Thread-63748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:11:45.806 [DEBUG] [Thread-63748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:11:45.846 [DEBUG] [Thread-63748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:11:45.846 [DEBUG] [Thread-63748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:11:45.850 [DEBUG] [Thread-63748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:11:45.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:11:45.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:11:45.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:11:45.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:11:45.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:11:45.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:11:45.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:11:45.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:11:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:11:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.924350 -999.00  +13.60  22.42     51   +3.90 1 2 1 1 1     0    0 9.07 -8.43 ZNEsW 23.1 22.4 139.8 24.5 13.9 -23.7 13.9 -22.2 13.7 -21.9 13.9 -23.0
2025-11-18T00:11:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:11:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:11:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.924350
2025-11-18T00:11:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:11:45.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:11:45.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:11:45.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:11:45.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:11:45.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:11:28', tmtdew=11.22, humidity=46.81, cloud=0.0, wind=23.52, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:11:28', seeing=2.66, atlas_timestamp='2025-11-17T22:11:03.840', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:09:00')
2025-11-18T00:11:45.875 [DEBUG] [Thread-63748] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:11:45.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:11:45.975 [DEBUG] [Thread-63751] [transport.py] [_log()] starting thread (client mode): 0xd07a3550
2025-11-18T00:11:45.975 [DEBUG] [Thread-63751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:11:45.996 [DEBUG] [Thread-63751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:11:45.996 [INFO] [Thread-63751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] client lang: <none>
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] server lang: <none>
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] kex follows: False
2025-11-18T00:11:46.004 [DEBUG] [Thread-63751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:11:46.005 [DEBUG] [Thread-63751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:11:46.005 [DEBUG] [Thread-63751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:11:46.005 [DEBUG] [Thread-63751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:11:46.005 [DEBUG] [Thread-63751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:11:46.005 [DEBUG] [Thread-63751] [transport.py] [_log()] Compression: none
2025-11-18T00:11:46.005 [DEBUG] [Thread-63751] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:11:46.063 [DEBUG] [Thread-63751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:11:46.063 [DEBUG] [Thread-63751] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:11:46.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:11:46.065 [DEBUG] [Thread-63751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:11:46.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:11:46.119 [DEBUG] [Thread-63751] [transport.py] [_log()] userauth is OK
2025-11-18T00:11:46.120 [DEBUG] [Thread-63751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:11:46.120 [DEBUG] [Thread-63751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:11:46.120 [DEBUG] [Thread-63751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:11:46.120 [DEBUG] [Thread-63751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:11:46.140 [INFO] [Thread-63751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:11:46.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:11:46.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:11:46.211 [DEBUG] [Thread-63753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:11:47.049 [DEBUG] [Thread-63751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:11:47.049 [DEBUG] [Thread-63751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:11:47.097 [DEBUG] [Thread-63751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:11:47.097 [DEBUG] [Thread-63751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:11:47.106 [DEBUG] [Thread-63751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:11:47.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:11:47.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:11:47.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:11:47.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:11:47.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:11:47.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:11:47.141 [DEBUG] [Thread-63751] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:11:53.364 [DEBUG] [Thread-63754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:12:01.252 [DEBUG] [Thread-63755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:12:16.279 [DEBUG] [Thread-63756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:12:17.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:12:17.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:12:17.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:12:17.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 12), 11.16, 46.81, 0.0, 20.31, 13.57, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:12:17.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:12:00
2025-11-18T00:12:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:12:18.061 [DEBUG] [Thread-63757] [transport.py] [_log()] starting thread (client mode): 0xd317c9a0
2025-11-18T00:12:18.062 [DEBUG] [Thread-63757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:12:18.082 [DEBUG] [Thread-63757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:12:18.083 [INFO] [Thread-63757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] client lang: <none>
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] server lang: <none>
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] kex follows: False
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] Compression: none
2025-11-18T00:12:18.086 [DEBUG] [Thread-63757] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:12:18.103 [DEBUG] [Thread-63757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:12:18.103 [DEBUG] [Thread-63757] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:12:18.104 [DEBUG] [Thread-63757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:12:18.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:12:18.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:12:18.106 [DEBUG] [Thread-63757] [transport.py] [_log()] userauth is OK
2025-11-18T00:12:18.106 [DEBUG] [Thread-63757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:12:18.106 [DEBUG] [Thread-63757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:12:18.106 [DEBUG] [Thread-63757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:12:18.106 [DEBUG] [Thread-63757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:12:18.125 [INFO] [Thread-63757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:12:18.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:12:18.761 [DEBUG] [Thread-63757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:12:18.761 [DEBUG] [Thread-63757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:12:18.762 [DEBUG] [Thread-63757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:12:18.802 [DEBUG] [Thread-63757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:12:18.803 [DEBUG] [Thread-63757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:12:18.805 [DEBUG] [Thread-63757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:12:18.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:12:18.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:12:18.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:12:18.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:12:18.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:12:18.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:12:18.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:12:18.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:12:18.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:12:18.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.924698 -999.00  +13.60  17.78     52   +4.00 1 2 1 1 1     0    0 9.17 -5.86 ZNEsW 15.1 17.8 138.4 25.5 14.0 -23.6 13.9 -22.1 13.7 -21.8 14.0 -23.0
2025-11-18T00:12:18.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:12:18.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:12:18.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.924698
2025-11-18T00:12:18.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:12:18.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:12:18.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:12:18.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:12:18.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:12:18.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:12:00', tmtdew=11.16, humidity=46.81, cloud=0.0, wind=20.31, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:12:00', seeing=1.84, atlas_timestamp='2025-11-17T22:11:33.907', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:09:00')
2025-11-18T00:12:18.829 [DEBUG] [Thread-63757] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:12:18.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:12:18.926 [DEBUG] [Thread-63760] [transport.py] [_log()] starting thread (client mode): 0xd0703f10
2025-11-18T00:12:18.926 [DEBUG] [Thread-63760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:12:18.941 [DEBUG] [Thread-63760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:12:18.942 [INFO] [Thread-63760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] client lang: <none>
2025-11-18T00:12:18.949 [DEBUG] [Thread-63760] [transport.py] [_log()] server lang: <none>
2025-11-18T00:12:18.950 [DEBUG] [Thread-63760] [transport.py] [_log()] kex follows: False
2025-11-18T00:12:18.950 [DEBUG] [Thread-63760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:12:18.950 [DEBUG] [Thread-63760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:12:18.950 [DEBUG] [Thread-63760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:12:18.950 [DEBUG] [Thread-63760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:12:18.950 [DEBUG] [Thread-63760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:12:18.950 [DEBUG] [Thread-63760] [transport.py] [_log()] Compression: none
2025-11-18T00:12:18.950 [DEBUG] [Thread-63760] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:12:19.007 [DEBUG] [Thread-63760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:12:19.008 [DEBUG] [Thread-63760] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:12:19.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:12:19.008 [DEBUG] [Thread-63760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:12:19.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:12:19.063 [DEBUG] [Thread-63760] [transport.py] [_log()] userauth is OK
2025-11-18T00:12:19.063 [DEBUG] [Thread-63760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:12:19.064 [DEBUG] [Thread-63760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:12:19.064 [DEBUG] [Thread-63760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:12:19.064 [DEBUG] [Thread-63760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:12:19.090 [INFO] [Thread-63760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:12:19.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:12:19.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:12:20.012 [DEBUG] [Thread-63760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:12:20.012 [DEBUG] [Thread-63760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:12:20.060 [DEBUG] [Thread-63760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:12:20.060 [DEBUG] [Thread-63760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:12:20.069 [DEBUG] [Thread-63760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:12:20.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:12:20.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:12:20.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:12:20.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:12:20.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:12:20.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:12:20.104 [DEBUG] [Thread-63760] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:12:23.475 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:12:23.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:12:31.313 [DEBUG] [Thread-63762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:12:46.366 [DEBUG] [Thread-63763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:12:50.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:12:50.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:12:50.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:12:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 12, 32), 11.01, 47.3, 0.0, 20.98, 13.57, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:12:50.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:12:32
2025-11-18T00:12:50.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:12:51.013 [DEBUG] [Thread-63764] [transport.py] [_log()] starting thread (client mode): 0xd07a3be0
2025-11-18T00:12:51.013 [DEBUG] [Thread-63764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:12:51.034 [DEBUG] [Thread-63764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:12:51.034 [INFO] [Thread-63764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:12:51.035 [DEBUG] [Thread-63764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] client lang: <none>
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] server lang: <none>
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] kex follows: False
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] Compression: none
2025-11-18T00:12:51.036 [DEBUG] [Thread-63764] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:12:51.044 [DEBUG] [Thread-63764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:12:51.045 [DEBUG] [Thread-63764] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:12:51.045 [DEBUG] [Thread-63764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:12:51.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:12:51.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:12:51.047 [DEBUG] [Thread-63764] [transport.py] [_log()] userauth is OK
2025-11-18T00:12:51.047 [DEBUG] [Thread-63764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:12:51.047 [DEBUG] [Thread-63764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:12:51.047 [DEBUG] [Thread-63764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:12:51.047 [DEBUG] [Thread-63764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:12:51.065 [INFO] [Thread-63764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:12:51.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:12:51.722 [DEBUG] [Thread-63764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:12:51.722 [DEBUG] [Thread-63764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:12:51.722 [DEBUG] [Thread-63764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:12:51.763 [DEBUG] [Thread-63764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:12:51.763 [DEBUG] [Thread-63764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:12:51.765 [DEBUG] [Thread-63764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:12:51.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:12:51.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:12:51.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:12:51.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:12:51.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:12:51.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:12:51.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:12:51.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:12:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:12:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.925392 -999.00  +13.60  14.39     52   +4.00 1 2 1 1 1     0    0 9.35 -0.96 ZNEsW 17.2 14.4 143.8 21.4 13.9 -23.4 13.9 -22.2 13.7 -21.8 13.9 -23.1
2025-11-18T00:12:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:12:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:12:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.925392
2025-11-18T00:12:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:12:51.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:12:51.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:12:51.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:12:51.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:12:51.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:12:32', tmtdew=11.01, humidity=47.3, cloud=0.0, wind=20.98, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:12:32', seeing=1.81, atlas_timestamp='2025-11-17T22:12:33.869', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:09:00')
2025-11-18T00:12:51.789 [DEBUG] [Thread-63764] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:12:51.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:12:51.875 [DEBUG] [Thread-63767] [transport.py] [_log()] starting thread (client mode): 0xd07a39a0
2025-11-18T00:12:51.876 [DEBUG] [Thread-63767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:12:51.895 [DEBUG] [Thread-63767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:12:51.895 [INFO] [Thread-63767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:12:51.902 [DEBUG] [Thread-63767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] client lang: <none>
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] server lang: <none>
2025-11-18T00:12:51.903 [DEBUG] [Thread-63767] [transport.py] [_log()] kex follows: False
2025-11-18T00:12:51.904 [DEBUG] [Thread-63767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:12:51.904 [DEBUG] [Thread-63767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:12:51.904 [DEBUG] [Thread-63767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:12:51.904 [DEBUG] [Thread-63767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:12:51.904 [DEBUG] [Thread-63767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:12:51.904 [DEBUG] [Thread-63767] [transport.py] [_log()] Compression: none
2025-11-18T00:12:51.904 [DEBUG] [Thread-63767] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:12:51.963 [DEBUG] [Thread-63767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:12:51.963 [DEBUG] [Thread-63767] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:12:51.964 [DEBUG] [Thread-63767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:12:51.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:12:51.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:12:52.019 [DEBUG] [Thread-63767] [transport.py] [_log()] userauth is OK
2025-11-18T00:12:52.019 [DEBUG] [Thread-63767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:12:52.019 [DEBUG] [Thread-63767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:12:52.020 [DEBUG] [Thread-63767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:12:52.020 [DEBUG] [Thread-63767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:12:52.041 [INFO] [Thread-63767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:12:52.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:12:52.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:12:52.909 [DEBUG] [Thread-63767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:12:52.909 [DEBUG] [Thread-63767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:12:52.959 [DEBUG] [Thread-63767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:12:52.960 [DEBUG] [Thread-63767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:12:52.969 [DEBUG] [Thread-63767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:12:52.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:12:52.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:12:52.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:12:52.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:12:52.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:12:52.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:12:53.006 [DEBUG] [Thread-63767] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:12:53.439 [DEBUG] [Thread-63769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:13:01.396 [DEBUG] [Thread-63770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:13:16.434 [DEBUG] [Thread-63771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:13:23.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:13:23.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:13:23.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
2025-11-18T00:13:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 13, 4), 10.94, 47.52, 0.0, 21.77, 13.51, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:13:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:13:04
2025-11-18T00:13:23.677 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:13:23.678 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:13:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:13:23.943 [DEBUG] [Thread-63772] [transport.py] [_log()] starting thread (client mode): 0xd31516f0
2025-11-18T00:13:23.943 [DEBUG] [Thread-63772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:13:23.963 [DEBUG] [Thread-63772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:13:23.963 [INFO] [Thread-63772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:13:23.966 [DEBUG] [Thread-63772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:13:23.966 [DEBUG] [Thread-63772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:13:23.966 [DEBUG] [Thread-63772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:13:23.966 [DEBUG] [Thread-63772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:13:23.966 [DEBUG] [Thread-63772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:13:23.966 [DEBUG] [Thread-63772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:13:23.966 [DEBUG] [Thread-63772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] client lang: <none>
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] server lang: <none>
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] kex follows: False
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] Compression: none
2025-11-18T00:13:23.967 [DEBUG] [Thread-63772] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:13:23.984 [DEBUG] [Thread-63772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:13:23.985 [DEBUG] [Thread-63772] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:13:23.985 [DEBUG] [Thread-63772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:13:23.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:13:23.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:13:23.987 [DEBUG] [Thread-63772] [transport.py] [_log()] userauth is OK
2025-11-18T00:13:23.987 [DEBUG] [Thread-63772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:13:23.987 [DEBUG] [Thread-63772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:13:23.987 [DEBUG] [Thread-63772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:13:23.987 [DEBUG] [Thread-63772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:13:24.004 [INFO] [Thread-63772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:13:24.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:13:24.629 [DEBUG] [Thread-63772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:13:24.629 [DEBUG] [Thread-63772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:13:24.630 [DEBUG] [Thread-63772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:13:24.670 [DEBUG] [Thread-63772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:13:24.670 [DEBUG] [Thread-63772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:13:24.672 [DEBUG] [Thread-63772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:13:24.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:13:24.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:13:24.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:13:24.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:13:24.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:13:24.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:13:24.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:13:24.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:13:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:13:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.925739 -999.00  +13.50  19.30     52   +4.00 1 2 1 1 1     0    0 9.39 1.11 ZNEsW 19.4 19.3 143.2 22.0 13.9 -23.6 13.8 -22.1 13.7 -21.8 13.9 -22.8
2025-11-18T00:13:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:13:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:13:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.925739
2025-11-18T00:13:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:13:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:13:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:13:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:13:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:13:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:13:04', tmtdew=10.94, humidity=47.52, cloud=0.0, wind=21.77, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:13:04', seeing=1.71, atlas_timestamp='2025-11-17T22:13:03.850', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:09:00')
2025-11-18T00:13:24.695 [DEBUG] [Thread-63772] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:13:24.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:13:24.791 [DEBUG] [Thread-63775] [transport.py] [_log()] starting thread (client mode): 0xd0703550
2025-11-18T00:13:24.791 [DEBUG] [Thread-63775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:13:24.811 [DEBUG] [Thread-63775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:13:24.812 [INFO] [Thread-63775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] client lang: <none>
2025-11-18T00:13:24.819 [DEBUG] [Thread-63775] [transport.py] [_log()] server lang: <none>
2025-11-18T00:13:24.820 [DEBUG] [Thread-63775] [transport.py] [_log()] kex follows: False
2025-11-18T00:13:24.820 [DEBUG] [Thread-63775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:13:24.820 [DEBUG] [Thread-63775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:13:24.820 [DEBUG] [Thread-63775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:13:24.820 [DEBUG] [Thread-63775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:13:24.820 [DEBUG] [Thread-63775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:13:24.820 [DEBUG] [Thread-63775] [transport.py] [_log()] Compression: none
2025-11-18T00:13:24.820 [DEBUG] [Thread-63775] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:13:24.879 [DEBUG] [Thread-63775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:13:24.879 [DEBUG] [Thread-63775] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:13:24.879 [DEBUG] [Thread-63775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:13:24.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:13:24.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:13:24.935 [DEBUG] [Thread-63775] [transport.py] [_log()] userauth is OK
2025-11-18T00:13:24.935 [DEBUG] [Thread-63775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:13:24.935 [DEBUG] [Thread-63775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:13:24.935 [DEBUG] [Thread-63775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:13:24.935 [DEBUG] [Thread-63775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:13:24.954 [INFO] [Thread-63775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:13:24.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:13:24.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:13:25.849 [DEBUG] [Thread-63775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:13:25.849 [DEBUG] [Thread-63775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:13:25.897 [DEBUG] [Thread-63775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:13:25.897 [DEBUG] [Thread-63775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:13:25.905 [DEBUG] [Thread-63775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:13:25.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:13:25.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:13:25.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:13:25.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:13:25.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:13:25.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:13:25.939 [DEBUG] [Thread-63775] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:13:31.463 [DEBUG] [Thread-63777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:13:46.504 [DEBUG] [Thread-63778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:13:53.509 [DEBUG] [Thread-63779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:13:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:13:55.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:13:55.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:13:56.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 13, 36), 10.76, 48.14, 0.0, 18.07, 13.42, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:13:56.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:13:36
2025-11-18T00:13:56.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:13:56.877 [DEBUG] [Thread-63780] [transport.py] [_log()] starting thread (client mode): 0xd07a3cd0
2025-11-18T00:13:56.877 [DEBUG] [Thread-63780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:13:56.897 [DEBUG] [Thread-63780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:13:56.897 [INFO] [Thread-63780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:13:56.898 [DEBUG] [Thread-63780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:13:56.898 [DEBUG] [Thread-63780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] client lang: <none>
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] server lang: <none>
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] kex follows: False
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] Compression: none
2025-11-18T00:13:56.899 [DEBUG] [Thread-63780] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:13:56.907 [DEBUG] [Thread-63780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:13:56.907 [DEBUG] [Thread-63780] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:13:56.907 [DEBUG] [Thread-63780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:13:56.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:13:56.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:13:56.908 [DEBUG] [Thread-63780] [transport.py] [_log()] userauth is OK
2025-11-18T00:13:56.908 [DEBUG] [Thread-63780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:13:56.908 [DEBUG] [Thread-63780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:13:56.908 [DEBUG] [Thread-63780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:13:56.909 [DEBUG] [Thread-63780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:13:56.940 [INFO] [Thread-63780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:13:56.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:13:57.575 [DEBUG] [Thread-63780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:13:57.576 [DEBUG] [Thread-63780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:13:57.576 [DEBUG] [Thread-63780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:13:57.616 [DEBUG] [Thread-63780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:13:57.616 [DEBUG] [Thread-63780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:13:57.618 [DEBUG] [Thread-63780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:13:57.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:13:57.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:13:57.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:13:57.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:13:57.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:13:57.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:13:57.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:13:57.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.926087 -999.00  +13.50  18.65     52   +4.00 1 2 1 1 1     0    0 9.55 2.71 ZNEsW 17.3 18.6 133.4 21.7 13.9 -23.5 13.8 -21.9 13.6 -21.7 13.9 -22.9
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.926087
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:13:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:13:36', tmtdew=10.76, humidity=48.14, cloud=0.0, wind=18.07, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:13:36', seeing=1.76, atlas_timestamp='2025-11-17T22:13:33.917', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:11:00')
2025-11-18T00:13:57.641 [DEBUG] [Thread-63780] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:13:57.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:13:57.725 [DEBUG] [Thread-63783] [transport.py] [_log()] starting thread (client mode): 0xd07a3ca0
2025-11-18T00:13:57.725 [DEBUG] [Thread-63783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:13:57.739 [DEBUG] [Thread-63783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:13:57.739 [INFO] [Thread-63783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] client lang: <none>
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] server lang: <none>
2025-11-18T00:13:57.747 [DEBUG] [Thread-63783] [transport.py] [_log()] kex follows: False
2025-11-18T00:13:57.748 [DEBUG] [Thread-63783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:13:57.748 [DEBUG] [Thread-63783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:13:57.748 [DEBUG] [Thread-63783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:13:57.748 [DEBUG] [Thread-63783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:13:57.748 [DEBUG] [Thread-63783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:13:57.748 [DEBUG] [Thread-63783] [transport.py] [_log()] Compression: none
2025-11-18T00:13:57.748 [DEBUG] [Thread-63783] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:13:57.806 [DEBUG] [Thread-63783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:13:57.807 [DEBUG] [Thread-63783] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:13:57.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:13:57.808 [DEBUG] [Thread-63783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:13:57.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:13:57.865 [DEBUG] [Thread-63783] [transport.py] [_log()] userauth is OK
2025-11-18T00:13:57.865 [DEBUG] [Thread-63783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:13:57.865 [DEBUG] [Thread-63783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:13:57.865 [DEBUG] [Thread-63783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:13:57.865 [DEBUG] [Thread-63783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:13:57.884 [INFO] [Thread-63783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:13:57.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:13:57.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:13:58.703 [DEBUG] [Thread-63783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:13:58.703 [DEBUG] [Thread-63783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:13:58.751 [DEBUG] [Thread-63783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:13:58.751 [DEBUG] [Thread-63783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:13:58.760 [DEBUG] [Thread-63783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:13:58.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:13:58.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:13:58.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:13:58.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:13:58.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:13:58.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:13:58.795 [DEBUG] [Thread-63783] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:14:01.532 [DEBUG] [Thread-63785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:14:16.580 [DEBUG] [Thread-63786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:14:21.201 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:14:23.884 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:14:23.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:14:28.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:14:28.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:14:28.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:14:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 14, 8), 10.71, 48.29, 0.0, 18.51, 13.37, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:14:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:14:08
2025-11-18T00:14:29.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:14:29.754 [DEBUG] [Thread-63787] [transport.py] [_log()] starting thread (client mode): 0xd3150520
2025-11-18T00:14:29.754 [DEBUG] [Thread-63787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:14:29.765 [DEBUG] [Thread-63787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:14:29.765 [INFO] [Thread-63787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:14:29.766 [DEBUG] [Thread-63787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:14:29.766 [DEBUG] [Thread-63787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:14:29.766 [DEBUG] [Thread-63787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] client lang: <none>
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] server lang: <none>
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] kex follows: False
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] Compression: none
2025-11-18T00:14:29.767 [DEBUG] [Thread-63787] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:14:29.783 [DEBUG] [Thread-63787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:14:29.783 [DEBUG] [Thread-63787] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:14:29.783 [DEBUG] [Thread-63787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:14:29.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:14:29.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:14:29.784 [DEBUG] [Thread-63787] [transport.py] [_log()] userauth is OK
2025-11-18T00:14:29.784 [DEBUG] [Thread-63787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:14:29.784 [DEBUG] [Thread-63787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:14:29.784 [DEBUG] [Thread-63787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:14:29.784 [DEBUG] [Thread-63787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:14:29.797 [INFO] [Thread-63787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:14:29.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:14:30.381 [DEBUG] [Thread-63787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:14:30.381 [DEBUG] [Thread-63787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:14:30.381 [DEBUG] [Thread-63787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:14:30.422 [DEBUG] [Thread-63787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:14:30.422 [DEBUG] [Thread-63787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:14:30.424 [DEBUG] [Thread-63787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:14:30.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:14:30.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:14:30.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:14:30.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:14:30.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:14:30.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:14:30.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:14:30.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.926434 -999.00  +13.50  17.65     52   +4.10 1 2 1 1 1     0    0 9.46 4.34 ZNEsW 13.9 17.6 139.4 23.1 13.9 -23.5 13.8 -22.0 13.7 -21.8 13.9 -23.1
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.926434
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:14:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:14:08', tmtdew=10.71, humidity=48.29, cloud=0.0, wind=18.51, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:14:08', seeing=1.76, atlas_timestamp='2025-11-17T22:14:03.898', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:11:00')
2025-11-18T00:14:30.448 [DEBUG] [Thread-63787] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:14:30.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:14:30.536 [DEBUG] [Thread-63790] [transport.py] [_log()] starting thread (client mode): 0xd31607c0
2025-11-18T00:14:30.536 [DEBUG] [Thread-63790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:14:30.551 [DEBUG] [Thread-63790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:14:30.551 [INFO] [Thread-63790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] client lang: <none>
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] server lang: <none>
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] kex follows: False
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] Compression: none
2025-11-18T00:14:30.559 [DEBUG] [Thread-63790] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:14:30.618 [DEBUG] [Thread-63790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:14:30.618 [DEBUG] [Thread-63790] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:14:30.618 [DEBUG] [Thread-63790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:14:30.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:14:30.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:14:30.678 [DEBUG] [Thread-63790] [transport.py] [_log()] userauth is OK
2025-11-18T00:14:30.678 [DEBUG] [Thread-63790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:14:30.678 [DEBUG] [Thread-63790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:14:30.678 [DEBUG] [Thread-63790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:14:30.678 [DEBUG] [Thread-63790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:14:30.693 [INFO] [Thread-63790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:14:30.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:14:30.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:14:31.547 [DEBUG] [Thread-63790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:14:31.547 [DEBUG] [Thread-63790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:14:31.595 [DEBUG] [Thread-63790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:14:31.595 [DEBUG] [Thread-63790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:14:31.603 [DEBUG] [Thread-63790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:14:31.608 [DEBUG] [Thread-63792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:14:31.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:14:31.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:14:31.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:14:31.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:14:31.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:14:31.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:14:31.635 [DEBUG] [Thread-63790] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:14:46.644 [DEBUG] [Thread-63793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:14:53.597 [DEBUG] [Thread-63794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:15:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:15:01.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:15:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:15:01.673 [DEBUG] [Thread-63795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:15:02.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 14, 40), 10.65, 48.32, 0.0, 23.43, 13.32, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:15:02.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:14:40
2025-11-18T00:15:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:15:02.573 [DEBUG] [Thread-63796] [transport.py] [_log()] starting thread (client mode): 0xd3152500
2025-11-18T00:15:02.574 [DEBUG] [Thread-63796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:15:02.593 [DEBUG] [Thread-63796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:15:02.593 [INFO] [Thread-63796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:15:02.596 [DEBUG] [Thread-63796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:15:02.596 [DEBUG] [Thread-63796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:15:02.596 [DEBUG] [Thread-63796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:15:02.596 [DEBUG] [Thread-63796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:15:02.596 [DEBUG] [Thread-63796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] client lang: <none>
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] server lang: <none>
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] kex follows: False
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] Compression: none
2025-11-18T00:15:02.597 [DEBUG] [Thread-63796] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:15:02.614 [DEBUG] [Thread-63796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:15:02.615 [DEBUG] [Thread-63796] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:15:02.615 [DEBUG] [Thread-63796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:15:02.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:15:02.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:15:02.617 [DEBUG] [Thread-63796] [transport.py] [_log()] userauth is OK
2025-11-18T00:15:02.617 [DEBUG] [Thread-63796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:15:02.617 [DEBUG] [Thread-63796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:15:02.617 [DEBUG] [Thread-63796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:15:02.617 [DEBUG] [Thread-63796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:15:02.638 [INFO] [Thread-63796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:15:02.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:15:03.287 [DEBUG] [Thread-63796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:15:03.287 [DEBUG] [Thread-63796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:15:03.287 [DEBUG] [Thread-63796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:15:03.328 [DEBUG] [Thread-63796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:15:03.328 [DEBUG] [Thread-63796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:15:03.331 [DEBUG] [Thread-63796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:15:03.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:15:03.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:15:03.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:15:03.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:15:03.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:15:03.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:15:03.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:15:03.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:15:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:15:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.926781 -999.00  +13.50  14.18     52   +4.00 1 2 1 1 1     0    0 9.50 5.73 ZNEsW 15.9 14.2 150.0 22.7 13.9 -23.4 13.8 -21.9 13.7 -21.6 13.9 -22.9
2025-11-18T00:15:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:15:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:15:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.926781
2025-11-18T00:15:03.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:15:03.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:15:03.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:15:03.355 [DEBUG] [Thread-63796] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:15:03.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:15:03.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:15:03.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:14:40', tmtdew=10.65, humidity=48.32, cloud=0.0, wind=23.43, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:14:40', seeing=1.89, atlas_timestamp='2025-11-17T22:14:33.878', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:11:00')
2025-11-18T00:15:03.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:15:03.457 [DEBUG] [Thread-63799] [transport.py] [_log()] starting thread (client mode): 0xd3152380
2025-11-18T00:15:03.457 [DEBUG] [Thread-63799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:15:03.471 [DEBUG] [Thread-63799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:15:03.471 [INFO] [Thread-63799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:15:03.479 [DEBUG] [Thread-63799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:15:03.479 [DEBUG] [Thread-63799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:15:03.479 [DEBUG] [Thread-63799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:15:03.479 [DEBUG] [Thread-63799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:15:03.479 [DEBUG] [Thread-63799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:15:03.479 [DEBUG] [Thread-63799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:15:03.479 [DEBUG] [Thread-63799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:15:03.479 [DEBUG] [Thread-63799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] client lang: <none>
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] server lang: <none>
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] kex follows: False
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:15:03.480 [DEBUG] [Thread-63799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:15:03.481 [DEBUG] [Thread-63799] [transport.py] [_log()] Compression: none
2025-11-18T00:15:03.481 [DEBUG] [Thread-63799] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:15:03.538 [DEBUG] [Thread-63799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:15:03.539 [DEBUG] [Thread-63799] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:15:03.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:15:03.540 [DEBUG] [Thread-63799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:15:03.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:15:03.594 [DEBUG] [Thread-63799] [transport.py] [_log()] userauth is OK
2025-11-18T00:15:03.594 [DEBUG] [Thread-63799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:15:03.594 [DEBUG] [Thread-63799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:15:03.595 [DEBUG] [Thread-63799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:15:03.595 [DEBUG] [Thread-63799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:15:03.614 [INFO] [Thread-63799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:15:03.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:15:03.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:15:04.497 [DEBUG] [Thread-63799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:15:04.497 [DEBUG] [Thread-63799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:15:04.545 [DEBUG] [Thread-63799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:15:04.545 [DEBUG] [Thread-63799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:15:04.554 [DEBUG] [Thread-63799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:15:04.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:15:04.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')
2025-11-18T00:15:04.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:15:04.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:15:04.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:15:04.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:15:04.590 [DEBUG] [Thread-63799] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:15:16.700 [DEBUG] [Thread-63801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:15:24.089 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:15:24.090 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:15:31.750 [DEBUG] [Thread-63802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:15:34.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:15:34.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:15:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:15:35.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 15, 12), 10.74, 48.02, 0.0, 23.15, 13.27, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:15:35.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:15:12
2025-11-18T00:15:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:15:35.526 [DEBUG] [Thread-63803] [transport.py] [_log()] starting thread (client mode): 0xd07a28f0
2025-11-18T00:15:35.526 [DEBUG] [Thread-63803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:15:35.547 [DEBUG] [Thread-63803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:15:35.547 [INFO] [Thread-63803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:15:35.548 [DEBUG] [Thread-63803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] client lang: <none>
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] server lang: <none>
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] kex follows: False
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] Compression: none
2025-11-18T00:15:35.549 [DEBUG] [Thread-63803] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:15:35.556 [DEBUG] [Thread-63803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:15:35.556 [DEBUG] [Thread-63803] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:15:35.556 [DEBUG] [Thread-63803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:15:35.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:15:35.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:15:35.557 [DEBUG] [Thread-63803] [transport.py] [_log()] userauth is OK
2025-11-18T00:15:35.557 [DEBUG] [Thread-63803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:15:35.557 [DEBUG] [Thread-63803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:15:35.557 [DEBUG] [Thread-63803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:15:35.557 [DEBUG] [Thread-63803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:15:35.583 [INFO] [Thread-63803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:15:35.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:15:36.231 [DEBUG] [Thread-63803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:15:36.231 [DEBUG] [Thread-63803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:15:36.232 [DEBUG] [Thread-63803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:15:36.273 [DEBUG] [Thread-63803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:15:36.274 [DEBUG] [Thread-63803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:15:36.276 [DEBUG] [Thread-63803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:15:36.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:15:36.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:15:36.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:15:36.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:15:36.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:15:36.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:15:36.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:15:36.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:15:36.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:15:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.926781 -999.00  +13.50  14.18     52   +4.00 1 2 1 1 1     0    0 9.50 5.73 ZNEsW 15.9 14.2 150.0 22.7 13.9 -23.4 13.8 -21.9 13.7 -21.6 13.9 -22.9
2025-11-18T00:15:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:15:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:15:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.926781
2025-11-18T00:15:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:15:36.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:15:36.302 [DEBUG] [Thread-63803] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:15:36.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:15:36.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:15:36.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:15:36.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:15:12', tmtdew=10.74, humidity=48.02, cloud=0.0, wind=23.15, temperature=13.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:15:13', seeing=2.35, atlas_timestamp='2025-11-17T22:14:33.878', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:11:00')
2025-11-18T00:15:36.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:15:36.399 [DEBUG] [Thread-63806] [transport.py] [_log()] starting thread (client mode): 0xd07a3dc0
2025-11-18T00:15:36.399 [DEBUG] [Thread-63806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:15:36.413 [DEBUG] [Thread-63806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:15:36.414 [INFO] [Thread-63806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:15:36.421 [DEBUG] [Thread-63806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:15:36.421 [DEBUG] [Thread-63806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] client lang: <none>
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] server lang: <none>
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] kex follows: False
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:15:36.422 [DEBUG] [Thread-63806] [transport.py] [_log()] Compression: none
2025-11-18T00:15:36.423 [DEBUG] [Thread-63806] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:15:36.476 [DEBUG] [Thread-63806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:15:36.477 [DEBUG] [Thread-63806] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:15:36.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:15:36.477 [DEBUG] [Thread-63806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:15:36.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:15:36.534 [DEBUG] [Thread-63806] [transport.py] [_log()] userauth is OK
2025-11-18T00:15:36.534 [DEBUG] [Thread-63806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:15:36.534 [DEBUG] [Thread-63806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:15:36.535 [DEBUG] [Thread-63806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:15:36.535 [DEBUG] [Thread-63806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:15:36.554 [INFO] [Thread-63806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:15:36.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:15:36.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:15:37.387 [DEBUG] [Thread-63806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:15:37.388 [DEBUG] [Thread-63806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:15:37.435 [DEBUG] [Thread-63806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:15:37.436 [DEBUG] [Thread-63806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:15:37.444 [DEBUG] [Thread-63806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:15:37.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:15:37.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:15:37.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:15:37.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:15:37.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:15:37.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:15:37.478 [DEBUG] [Thread-63806] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:15:46.780 [DEBUG] [Thread-63808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:15:53.650 [DEBUG] [Thread-63809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:16:01.807 [DEBUG] [Thread-63810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:16:07.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:16:07.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:16:07.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:16:08.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 15, 44), 10.82, 48.09, 0.0, 21.76, 13.41, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:16:08.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:15:44
2025-11-18T00:16:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:16:08.393 [DEBUG] [Thread-63811] [transport.py] [_log()] starting thread (client mode): 0xd3160dc0
2025-11-18T00:16:08.393 [DEBUG] [Thread-63811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:16:08.412 [DEBUG] [Thread-63811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:16:08.413 [INFO] [Thread-63811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:16:08.416 [DEBUG] [Thread-63811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] client lang: <none>
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] server lang: <none>
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] kex follows: False
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] Compression: none
2025-11-18T00:16:08.417 [DEBUG] [Thread-63811] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:16:08.437 [DEBUG] [Thread-63811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:16:08.438 [DEBUG] [Thread-63811] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:16:08.438 [DEBUG] [Thread-63811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:16:08.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:16:08.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:16:08.440 [DEBUG] [Thread-63811] [transport.py] [_log()] userauth is OK
2025-11-18T00:16:08.440 [DEBUG] [Thread-63811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:16:08.440 [DEBUG] [Thread-63811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:16:08.440 [DEBUG] [Thread-63811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:16:08.440 [DEBUG] [Thread-63811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:16:08.464 [INFO] [Thread-63811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:16:08.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:16:09.083 [DEBUG] [Thread-63811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:16:09.084 [DEBUG] [Thread-63811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:16:09.084 [DEBUG] [Thread-63811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:16:09.125 [DEBUG] [Thread-63811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:16:09.125 [DEBUG] [Thread-63811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:16:09.128 [DEBUG] [Thread-63811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:16:09.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:16:09.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:16:09.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:16:09.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:16:09.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:16:09.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:16:09.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:16:09.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:16:09.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:16:09.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.927128 -999.00  +13.40  12.72     52   +4.00 1 2 1 1 1     0    0 9.32 7.18 ZNEsW 20.3 12.7 145.8 22.8 13.9 -23.3 13.8 -21.8 13.6 -21.7 13.9 -22.8
2025-11-18T00:16:09.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:16:09.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:16:09.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.927128
2025-11-18T00:16:09.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:16:09.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:16:09.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:16:09.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:16:09.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:16:09.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:15:44', tmtdew=10.82, humidity=48.09, cloud=0.0, wind=21.76, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:15:44', seeing=1.83, atlas_timestamp='2025-11-17T22:15:03.859', atlas_cloud=2, atlas_rain=1, zp_data=[0.07674999999999876, 0.09525000000000006, 0.10824999999999996, 0.10500000000000043, 0.11149999999999949, 0.1642500000000009, 0.04399999999999871, 0.05925000000000047, 0.08249999999999957, 0.1330000000000009, 0.21624999999999872, 0.14599999999999902, 0.19099999999999895, 0.10724999999999874, 0.027999999999998693, 0.0259999999999998, 0.07225000000000037, 0.21850000000000058, 0.5190000000000001, 0.4712499999999995, 0.31099999999999817, 0.11274999999999835, 0.05525000000000091, 0.029249999999999332, 0.03599999999999959, 0.3000000000000007, 1.03925, 0.8094999999999999, 0.5030000000000001, 0.14300000000000068, 0.12700000000000067, 0.040000000000000924, 0.06274999999999942], zp_timestamp='2025-11-17T22:11:00')
2025-11-18T00:16:09.152 [DEBUG] [Thread-63811] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:16:09.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:16:09.247 [DEBUG] [Thread-63814] [transport.py] [_log()] starting thread (client mode): 0xd0754700
2025-11-18T00:16:09.248 [DEBUG] [Thread-63814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:16:09.262 [DEBUG] [Thread-63814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:16:09.262 [INFO] [Thread-63814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:16:09.270 [DEBUG] [Thread-63814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:16:09.270 [DEBUG] [Thread-63814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:16:09.270 [DEBUG] [Thread-63814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:16:09.270 [DEBUG] [Thread-63814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:16:09.270 [DEBUG] [Thread-63814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] client lang: <none>
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] server lang: <none>
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] kex follows: False
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:16:09.271 [DEBUG] [Thread-63814] [transport.py] [_log()] Compression: none
2025-11-18T00:16:09.272 [DEBUG] [Thread-63814] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:16:09.334 [DEBUG] [Thread-63814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:16:09.334 [DEBUG] [Thread-63814] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:16:09.335 [DEBUG] [Thread-63814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:16:09.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:16:09.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:16:09.390 [DEBUG] [Thread-63814] [transport.py] [_log()] userauth is OK
2025-11-18T00:16:09.391 [DEBUG] [Thread-63814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:16:09.391 [DEBUG] [Thread-63814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:16:09.391 [DEBUG] [Thread-63814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:16:09.391 [DEBUG] [Thread-63814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:16:09.410 [INFO] [Thread-63814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:16:09.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:16:09.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:16:10.227 [DEBUG] [Thread-63814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:16:10.228 [DEBUG] [Thread-63814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:16:10.275 [DEBUG] [Thread-63814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:16:10.275 [DEBUG] [Thread-63814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:16:10.284 [DEBUG] [Thread-63814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:16:10.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:16:10.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:16:10.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:16:10.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:16:10.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:16:10.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:16:10.319 [DEBUG] [Thread-63814] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:16:16.838 [DEBUG] [Thread-63816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:16:24.295 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:16:24.296 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:16:31.880 [DEBUG] [Thread-63817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:16:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:16:40.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:16:40.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:16:40.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 16, 16), 10.86, 47.95, 0.0, 23.66, 13.37, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:16:40.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:16:16
2025-11-18T00:16:41.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:16:41.248 [DEBUG] [Thread-63818] [transport.py] [_log()] starting thread (client mode): 0xd0703a30
2025-11-18T00:16:41.249 [DEBUG] [Thread-63818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:16:41.268 [DEBUG] [Thread-63818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:16:41.269 [INFO] [Thread-63818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:16:41.272 [DEBUG] [Thread-63818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:16:41.272 [DEBUG] [Thread-63818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:16:41.272 [DEBUG] [Thread-63818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:16:41.272 [DEBUG] [Thread-63818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:16:41.272 [DEBUG] [Thread-63818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] client lang: <none>
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] server lang: <none>
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] kex follows: False
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:16:41.273 [DEBUG] [Thread-63818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:16:41.274 [DEBUG] [Thread-63818] [transport.py] [_log()] Compression: none
2025-11-18T00:16:41.274 [DEBUG] [Thread-63818] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:16:41.288 [DEBUG] [Thread-63818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:16:41.288 [DEBUG] [Thread-63818] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:16:41.289 [DEBUG] [Thread-63818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:16:41.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:16:41.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:16:41.291 [DEBUG] [Thread-63818] [transport.py] [_log()] userauth is OK
2025-11-18T00:16:41.291 [DEBUG] [Thread-63818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:16:41.291 [DEBUG] [Thread-63818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:16:41.291 [DEBUG] [Thread-63818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:16:41.291 [DEBUG] [Thread-63818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:16:41.317 [INFO] [Thread-63818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:16:41.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:16:41.951 [DEBUG] [Thread-63818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:16:41.951 [DEBUG] [Thread-63818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:16:41.951 [DEBUG] [Thread-63818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:16:41.992 [DEBUG] [Thread-63818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:16:41.992 [DEBUG] [Thread-63818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:16:41.995 [DEBUG] [Thread-63818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:16:42.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:16:42.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:16:42.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:16:42.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:16:42.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:16:42.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:16:42.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:16:42.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:16:42.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:16:42.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.927823 -999.00  +13.50  20.11     52   +3.90 1 2 1 1 1     0    0 9.62 12.46 ZNEsW 16.3 20.1 162.5 23.6 13.9 -23.1 13.8 -21.5 13.6 -21.5 13.9 -22.6
2025-11-18T00:16:42.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:16:42.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:16:42.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.927823
2025-11-18T00:16:42.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:16:42.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:16:42.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:16:42.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:16:42.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:16:42.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:16:16', tmtdew=10.86, humidity=47.95, cloud=0.0, wind=23.66, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:16:17', seeing=1.75, atlas_timestamp='2025-11-17T22:16:03.907', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:15:00')
2025-11-18T00:16:42.015 [DEBUG] [Thread-63818] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:16:42.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:16:42.111 [DEBUG] [Thread-63821] [transport.py] [_log()] starting thread (client mode): 0xd07a3940
2025-11-18T00:16:42.111 [DEBUG] [Thread-63821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:16:42.126 [DEBUG] [Thread-63821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:16:42.126 [INFO] [Thread-63821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] client lang: <none>
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] server lang: <none>
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] kex follows: False
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:16:42.134 [DEBUG] [Thread-63821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:16:42.135 [DEBUG] [Thread-63821] [transport.py] [_log()] Compression: none
2025-11-18T00:16:42.135 [DEBUG] [Thread-63821] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:16:42.194 [DEBUG] [Thread-63821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:16:42.194 [DEBUG] [Thread-63821] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:16:42.195 [DEBUG] [Thread-63821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:16:42.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:16:42.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:16:42.250 [DEBUG] [Thread-63821] [transport.py] [_log()] userauth is OK
2025-11-18T00:16:42.250 [DEBUG] [Thread-63821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:16:42.250 [DEBUG] [Thread-63821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:16:42.250 [DEBUG] [Thread-63821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:16:42.251 [DEBUG] [Thread-63821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:16:42.269 [INFO] [Thread-63821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:16:42.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:16:42.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:16:43.070 [DEBUG] [Thread-63821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:16:43.071 [DEBUG] [Thread-63821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:16:43.118 [DEBUG] [Thread-63821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:16:43.118 [DEBUG] [Thread-63821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:16:43.127 [DEBUG] [Thread-63821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:16:43.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:16:43.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:16:43.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:16:43.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:16:43.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:16:43.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:16:43.161 [DEBUG] [Thread-63821] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:16:46.910 [DEBUG] [Thread-63823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:16:53.724 [DEBUG] [Thread-63824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:17:01.953 [DEBUG] [Thread-63825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:17:13.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:17:13.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:17:13.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:17:13.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 16, 48), 10.97, 47.57, 0.0, 22.96, 13.41, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:17:13.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:16:48
2025-11-18T00:17:13.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:17:14.112 [DEBUG] [Thread-63826] [transport.py] [_log()] starting thread (client mode): 0xd31623b0
2025-11-18T00:17:14.112 [DEBUG] [Thread-63826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:17:14.131 [DEBUG] [Thread-63826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:17:14.132 [INFO] [Thread-63826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] client lang: <none>
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] server lang: <none>
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] kex follows: False
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] Compression: none
2025-11-18T00:17:14.135 [DEBUG] [Thread-63826] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:17:14.153 [DEBUG] [Thread-63826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:17:14.153 [DEBUG] [Thread-63826] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:17:14.154 [DEBUG] [Thread-63826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:17:14.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:17:14.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:17:14.156 [DEBUG] [Thread-63826] [transport.py] [_log()] userauth is OK
2025-11-18T00:17:14.156 [DEBUG] [Thread-63826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:17:14.156 [DEBUG] [Thread-63826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:17:14.156 [DEBUG] [Thread-63826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:17:14.156 [DEBUG] [Thread-63826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:17:14.192 [INFO] [Thread-63826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:17:14.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:17:14.853 [DEBUG] [Thread-63826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:17:14.853 [DEBUG] [Thread-63826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:17:14.853 [DEBUG] [Thread-63826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:17:14.893 [DEBUG] [Thread-63826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:17:14.894 [DEBUG] [Thread-63826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:17:14.896 [DEBUG] [Thread-63826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:17:14.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:17:14.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:17:14.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:17:14.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:17:14.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:17:14.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:17:14.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:17:14.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:17:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:17:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.928170 -999.00  +13.50  19.57     52   +3.90 1 2 1 1 1     0    0 9.86 14.74 ZNEsW 21.4 19.6 145.6 24.6 13.9 -23.2 13.8 -21.6 13.6 -21.4 13.9 -22.6
2025-11-18T00:17:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:17:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:17:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.928170
2025-11-18T00:17:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:17:14.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:17:14.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:17:14.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:17:14.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:17:14.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:16:48', tmtdew=10.97, humidity=47.57, cloud=0.0, wind=22.96, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:16:49', seeing=1.75, atlas_timestamp='2025-11-17T22:16:33.888', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:15:00')
2025-11-18T00:17:14.920 [DEBUG] [Thread-63826] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:17:15.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:17:15.017 [DEBUG] [Thread-63829] [transport.py] [_log()] starting thread (client mode): 0xd0711db0
2025-11-18T00:17:15.017 [DEBUG] [Thread-63829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:17:15.032 [DEBUG] [Thread-63829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:17:15.032 [INFO] [Thread-63829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:17:15.040 [DEBUG] [Thread-63829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:17:15.040 [DEBUG] [Thread-63829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:17:15.040 [DEBUG] [Thread-63829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:17:15.040 [DEBUG] [Thread-63829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:17:15.040 [DEBUG] [Thread-63829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:17:15.040 [DEBUG] [Thread-63829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:17:15.040 [DEBUG] [Thread-63829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:17:15.040 [DEBUG] [Thread-63829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:17:15.041 [DEBUG] [Thread-63829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:17:15.041 [DEBUG] [Thread-63829] [transport.py] [_log()] client lang: <none>
2025-11-18T00:17:15.041 [DEBUG] [Thread-63829] [transport.py] [_log()] server lang: <none>
2025-11-18T00:17:15.041 [DEBUG] [Thread-63829] [transport.py] [_log()] kex follows: False
2025-11-18T00:17:15.041 [DEBUG] [Thread-63829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:17:15.041 [DEBUG] [Thread-63829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:17:15.041 [DEBUG] [Thread-63829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:17:15.041 [DEBUG] [Thread-63829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:17:15.042 [DEBUG] [Thread-63829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:17:15.042 [DEBUG] [Thread-63829] [transport.py] [_log()] Compression: none
2025-11-18T00:17:15.042 [DEBUG] [Thread-63829] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:17:15.098 [DEBUG] [Thread-63829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:17:15.099 [DEBUG] [Thread-63829] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:17:15.100 [DEBUG] [Thread-63829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:17:15.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:17:15.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:17:15.158 [DEBUG] [Thread-63829] [transport.py] [_log()] userauth is OK
2025-11-18T00:17:15.158 [DEBUG] [Thread-63829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:17:15.158 [DEBUG] [Thread-63829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:17:15.158 [DEBUG] [Thread-63829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:17:15.159 [DEBUG] [Thread-63829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:17:15.178 [INFO] [Thread-63829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:17:15.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:17:15.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:17:16.030 [DEBUG] [Thread-63829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:17:16.030 [DEBUG] [Thread-63829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:17:16.078 [DEBUG] [Thread-63829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:17:16.078 [DEBUG] [Thread-63829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:17:16.086 [DEBUG] [Thread-63829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:17:16.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:17:16.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:17:16.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:17:16.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:17:16.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:17:16.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:17:16.118 [DEBUG] [Thread-63829] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:17:16.981 [DEBUG] [Thread-63831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:17:24.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:17:24.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:17:32.033 [DEBUG] [Thread-63832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:17:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:17:46.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:17:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:17:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 17, 20), 10.97, 47.57, 0.0, 23.38, 13.37, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:17:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:17:20
2025-11-18T00:17:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:17:47.060 [DEBUG] [Thread-63833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:17:47.113 [DEBUG] [Thread-63834] [transport.py] [_log()] starting thread (client mode): 0xd3163f40
2025-11-18T00:17:47.113 [DEBUG] [Thread-63834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:17:47.134 [DEBUG] [Thread-63834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:17:47.134 [INFO] [Thread-63834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:17:47.137 [DEBUG] [Thread-63834] [transport.py] [_log()] client lang: <none>
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] server lang: <none>
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] kex follows: False
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] Compression: none
2025-11-18T00:17:47.138 [DEBUG] [Thread-63834] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:17:47.145 [DEBUG] [Thread-63834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:17:47.145 [DEBUG] [Thread-63834] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:17:47.145 [DEBUG] [Thread-63834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:17:47.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:17:47.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:17:47.145 [DEBUG] [Thread-63834] [transport.py] [_log()] userauth is OK
2025-11-18T00:17:47.145 [DEBUG] [Thread-63834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:17:47.145 [DEBUG] [Thread-63834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:17:47.145 [DEBUG] [Thread-63834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:17:47.145 [DEBUG] [Thread-63834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:17:47.155 [INFO] [Thread-63834] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:17:47.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:17:47.780 [DEBUG] [Thread-63834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:17:47.780 [DEBUG] [Thread-63834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:17:47.780 [DEBUG] [Thread-63834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:17:47.821 [DEBUG] [Thread-63834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:17:47.821 [DEBUG] [Thread-63834] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:17:47.823 [DEBUG] [Thread-63834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:17:47.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:17:47.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:17:47.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:17:47.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:17:47.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:17:47.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:17:47.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:17:47.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:17:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:17:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.928517 -999.00  +13.40  19.48     51   +3.70 1 2 1 1 1     0    0 9.88 16.37 ZNEsW 18.1 19.5 140.8 24.9 13.9 -23.0 13.8 -21.5 13.6 -21.4 13.9 -22.5
2025-11-18T00:17:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:17:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:17:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.928517
2025-11-18T00:17:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:17:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:17:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:17:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:17:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:17:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:17:20', tmtdew=10.97, humidity=47.57, cloud=0.0, wind=23.38, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:17:21', seeing=1.98, atlas_timestamp='2025-11-17T22:17:03.869', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:15:00')
2025-11-18T00:17:47.841 [DEBUG] [Thread-63834] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:17:47.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:17:47.927 [DEBUG] [Thread-63837] [transport.py] [_log()] starting thread (client mode): 0xd31610f0
2025-11-18T00:17:47.927 [DEBUG] [Thread-63837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:17:47.942 [DEBUG] [Thread-63837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:17:47.942 [INFO] [Thread-63837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] client lang: <none>
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] server lang: <none>
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] kex follows: False
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] Compression: none
2025-11-18T00:17:47.949 [DEBUG] [Thread-63837] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:17:48.007 [DEBUG] [Thread-63837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:17:48.008 [DEBUG] [Thread-63837] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:17:48.008 [DEBUG] [Thread-63837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:17:48.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:17:48.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:17:48.069 [DEBUG] [Thread-63837] [transport.py] [_log()] userauth is OK
2025-11-18T00:17:48.069 [DEBUG] [Thread-63837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:17:48.069 [DEBUG] [Thread-63837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:17:48.069 [DEBUG] [Thread-63837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:17:48.069 [DEBUG] [Thread-63837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:17:48.083 [INFO] [Thread-63837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:17:48.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:17:48.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:17:48.888 [DEBUG] [Thread-63837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:17:48.888 [DEBUG] [Thread-63837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:17:48.937 [DEBUG] [Thread-63837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:17:48.937 [DEBUG] [Thread-63837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:17:48.946 [DEBUG] [Thread-63837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:17:48.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:17:48.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:17:48.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:17:48.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:17:48.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:17:48.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:17:48.981 [DEBUG] [Thread-63837] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:17:53.777 [DEBUG] [Thread-63839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:18:02.086 [DEBUG] [Thread-63840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:18:17.128 [DEBUG] [Thread-63841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:18:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:18:18.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:18:18.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:18:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 17, 52), 10.99, 47.49, 0.0, 21.77, 13.32, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:18:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:17:52
2025-11-18T00:18:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:18:19.922 [DEBUG] [Thread-63842] [transport.py] [_log()] starting thread (client mode): 0xd31612d0
2025-11-18T00:18:19.922 [DEBUG] [Thread-63842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:18:19.942 [DEBUG] [Thread-63842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:18:19.943 [INFO] [Thread-63842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:18:19.944 [DEBUG] [Thread-63842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] client lang: <none>
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] server lang: <none>
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] kex follows: False
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] Compression: none
2025-11-18T00:18:19.945 [DEBUG] [Thread-63842] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:18:19.963 [DEBUG] [Thread-63842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:18:19.964 [DEBUG] [Thread-63842] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:18:19.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:18:19.965 [DEBUG] [Thread-63842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:18:19.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:18:19.967 [DEBUG] [Thread-63842] [transport.py] [_log()] userauth is OK
2025-11-18T00:18:19.968 [DEBUG] [Thread-63842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:18:19.968 [DEBUG] [Thread-63842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:18:19.968 [DEBUG] [Thread-63842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:18:19.968 [DEBUG] [Thread-63842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:18:20.004 [INFO] [Thread-63842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:18:20.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:18:20.645 [DEBUG] [Thread-63842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:18:20.645 [DEBUG] [Thread-63842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:18:20.645 [DEBUG] [Thread-63842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:18:20.686 [DEBUG] [Thread-63842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:18:20.687 [DEBUG] [Thread-63842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:18:20.689 [DEBUG] [Thread-63842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:18:20.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:18:20.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:18:20.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:18:20.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:18:20.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:18:20.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:18:20.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:18:20.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:18:20.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:18:20.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.928864 -999.00  +13.50  19.39     51   +3.70 1 2 1 1 1     0    0 9.86 19.07 ZNEsW 18.4 19.4 139.6 24.9 13.9 -22.9 13.8 -21.5 13.6 -21.2 13.9 -22.3
2025-11-18T00:18:20.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:18:20.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:18:20.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.928864
2025-11-18T00:18:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:18:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:18:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:18:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:18:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:18:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:17:52', tmtdew=10.99, humidity=47.49, cloud=0.0, wind=21.77, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:17:53', seeing=2.13, atlas_timestamp='2025-11-17T22:17:33.850', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:15:00')
2025-11-18T00:18:20.716 [DEBUG] [Thread-63842] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:18:20.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:18:20.812 [DEBUG] [Thread-63845] [transport.py] [_log()] starting thread (client mode): 0xd0754af0
2025-11-18T00:18:20.812 [DEBUG] [Thread-63845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:18:20.827 [DEBUG] [Thread-63845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:18:20.827 [INFO] [Thread-63845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:18:20.835 [DEBUG] [Thread-63845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:18:20.835 [DEBUG] [Thread-63845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:18:20.835 [DEBUG] [Thread-63845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:18:20.835 [DEBUG] [Thread-63845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:18:20.835 [DEBUG] [Thread-63845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:18:20.835 [DEBUG] [Thread-63845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] client lang: <none>
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] server lang: <none>
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] kex follows: False
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:18:20.836 [DEBUG] [Thread-63845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:18:20.837 [DEBUG] [Thread-63845] [transport.py] [_log()] Compression: none
2025-11-18T00:18:20.837 [DEBUG] [Thread-63845] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:18:20.893 [DEBUG] [Thread-63845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:18:20.893 [DEBUG] [Thread-63845] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:18:20.894 [DEBUG] [Thread-63845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:18:20.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:18:20.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:18:20.953 [DEBUG] [Thread-63845] [transport.py] [_log()] userauth is OK
2025-11-18T00:18:20.953 [DEBUG] [Thread-63845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:18:20.953 [DEBUG] [Thread-63845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:18:20.953 [DEBUG] [Thread-63845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:18:20.953 [DEBUG] [Thread-63845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:18:20.976 [INFO] [Thread-63845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:18:20.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:18:20.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:18:21.813 [DEBUG] [Thread-63845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:18:21.813 [DEBUG] [Thread-63845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:18:21.861 [DEBUG] [Thread-63845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:18:21.861 [DEBUG] [Thread-63845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:18:21.869 [DEBUG] [Thread-63845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:18:21.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:18:21.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:18:21.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:18:21.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:18:21.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:18:21.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:18:21.900 [DEBUG] [Thread-63845] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:18:24.701 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:18:24.701 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:18:32.155 [DEBUG] [Thread-63847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:18:47.209 [DEBUG] [Thread-63848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:18:51.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:18:51.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:18:51.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:18:52.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 18, 24), 10.96, 47.6, 0.0, 22.34, 13.36, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:18:52.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:18:24
2025-11-18T00:18:52.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:18:52.815 [DEBUG] [Thread-63849] [transport.py] [_log()] starting thread (client mode): 0xd0754730
2025-11-18T00:18:52.815 [DEBUG] [Thread-63849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:18:52.835 [DEBUG] [Thread-63849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:18:52.836 [INFO] [Thread-63849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:18:52.839 [DEBUG] [Thread-63849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:18:52.839 [DEBUG] [Thread-63849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:18:52.839 [DEBUG] [Thread-63849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:18:52.839 [DEBUG] [Thread-63849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:18:52.839 [DEBUG] [Thread-63849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:18:52.839 [DEBUG] [Thread-63849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] client lang: <none>
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] server lang: <none>
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] kex follows: False
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:18:52.840 [DEBUG] [Thread-63849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:18:52.841 [DEBUG] [Thread-63849] [transport.py] [_log()] Compression: none
2025-11-18T00:18:52.841 [DEBUG] [Thread-63849] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:18:52.857 [DEBUG] [Thread-63849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:18:52.858 [DEBUG] [Thread-63849] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:18:52.858 [DEBUG] [Thread-63849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:18:52.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:18:52.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:18:52.861 [DEBUG] [Thread-63849] [transport.py] [_log()] userauth is OK
2025-11-18T00:18:52.861 [DEBUG] [Thread-63849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:18:52.861 [DEBUG] [Thread-63849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:18:52.861 [DEBUG] [Thread-63849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:18:52.861 [DEBUG] [Thread-63849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:18:52.885 [INFO] [Thread-63849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:18:52.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:18:53.520 [DEBUG] [Thread-63849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:18:53.520 [DEBUG] [Thread-63849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:18:53.521 [DEBUG] [Thread-63849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:18:53.561 [DEBUG] [Thread-63849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:18:53.562 [DEBUG] [Thread-63849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:18:53.564 [DEBUG] [Thread-63849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:18:53.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:18:53.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:18:53.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:18:53.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:18:53.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:18:53.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:18:53.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:18:53.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:18:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:18:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.929211 -999.00  +13.50  18.16     51   +3.70 1 2 1 1 1     0    0 9.98 21.48 ZNEsW 17.6 18.2 142.0 23.7 13.9 -22.8 13.8 -21.5 13.6 -21.3 13.9 -22.3
2025-11-18T00:18:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:18:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:18:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.929211
2025-11-18T00:18:53.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:18:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:18:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:18:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:18:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:18:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:18:24', tmtdew=10.96, humidity=47.6, cloud=0.0, wind=22.34, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:18:25', seeing=1.84, atlas_timestamp='2025-11-17T22:18:03.830', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:15:00')
2025-11-18T00:18:53.591 [DEBUG] [Thread-63849] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:18:53.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:18:53.689 [DEBUG] [Thread-63852] [transport.py] [_log()] starting thread (client mode): 0xd31cc910
2025-11-18T00:18:53.689 [DEBUG] [Thread-63852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:18:53.704 [DEBUG] [Thread-63852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:18:53.704 [INFO] [Thread-63852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:18:53.711 [DEBUG] [Thread-63852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:18:53.711 [DEBUG] [Thread-63852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] client lang: <none>
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] server lang: <none>
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] kex follows: False
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] Compression: none
2025-11-18T00:18:53.712 [DEBUG] [Thread-63852] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:18:53.769 [DEBUG] [Thread-63852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:18:53.769 [DEBUG] [Thread-63852] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:18:53.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:18:53.770 [DEBUG] [Thread-63852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:18:53.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:18:53.825 [DEBUG] [Thread-63852] [transport.py] [_log()] userauth is OK
2025-11-18T00:18:53.825 [DEBUG] [Thread-63852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:18:53.825 [DEBUG] [Thread-63852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:18:53.825 [DEBUG] [Thread-63852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:18:53.825 [DEBUG] [Thread-63852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:18:53.839 [INFO] [Thread-63852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:18:53.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:18:53.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:18:53.853 [DEBUG] [Thread-63854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:18:54.693 [DEBUG] [Thread-63852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:18:54.693 [DEBUG] [Thread-63852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:18:54.741 [DEBUG] [Thread-63852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:18:54.741 [DEBUG] [Thread-63852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:18:54.750 [DEBUG] [Thread-63852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:18:54.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:18:54.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:18:54.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:18:54.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:18:54.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:18:54.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:18:54.785 [DEBUG] [Thread-63852] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:19:02.238 [DEBUG] [Thread-63855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:19:17.271 [DEBUG] [Thread-63856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:19:24.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:19:24.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:19:24.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:19:24.903 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:19:24.903 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:19:25.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 18, 57), 11.01, 47.09, 0.0, 22.96, 13.31, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:19:25.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:18:57
2025-11-18T00:19:25.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:19:25.725 [DEBUG] [Thread-63857] [transport.py] [_log()] starting thread (client mode): 0xd0754af0
2025-11-18T00:19:25.726 [DEBUG] [Thread-63857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:19:25.740 [DEBUG] [Thread-63857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:19:25.740 [INFO] [Thread-63857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] client lang: <none>
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] server lang: <none>
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] kex follows: False
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] Compression: none
2025-11-18T00:19:25.743 [DEBUG] [Thread-63857] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:19:25.757 [DEBUG] [Thread-63857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:19:25.757 [DEBUG] [Thread-63857] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:19:25.757 [DEBUG] [Thread-63857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:19:25.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:19:25.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:19:25.758 [DEBUG] [Thread-63857] [transport.py] [_log()] userauth is OK
2025-11-18T00:19:25.758 [DEBUG] [Thread-63857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:19:25.758 [DEBUG] [Thread-63857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:19:25.758 [DEBUG] [Thread-63857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:19:25.758 [DEBUG] [Thread-63857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:19:25.773 [INFO] [Thread-63857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:19:25.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:19:26.403 [DEBUG] [Thread-63857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:19:26.403 [DEBUG] [Thread-63857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:19:26.404 [DEBUG] [Thread-63857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:19:26.445 [DEBUG] [Thread-63857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:19:26.446 [DEBUG] [Thread-63857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:19:26.448 [DEBUG] [Thread-63857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:19:26.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:19:26.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:19:26.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:19:26.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:19:26.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:19:26.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:19:26.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:19:26.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:19:26.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:19:26.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.929559 -999.00  +13.50  21.16     51   +3.70 1 2 1 1 1     0    0 10.08 24.63 ZNEsW 18.5 21.2 140.2 26.9 13.9 -22.8 13.8 -21.5 13.6 -21.2 13.9 -22.2
2025-11-18T00:19:26.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:19:26.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:19:26.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.929559
2025-11-18T00:19:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:19:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:19:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:19:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:19:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:19:26.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:18:57', tmtdew=11.01, humidity=47.09, cloud=0.0, wind=22.96, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:18:57', seeing=1.82, atlas_timestamp='2025-11-17T22:18:33.898', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:15:00')
2025-11-18T00:19:26.474 [DEBUG] [Thread-63857] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:19:26.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:19:26.569 [DEBUG] [Thread-63860] [transport.py] [_log()] starting thread (client mode): 0xd07565c0
2025-11-18T00:19:26.569 [DEBUG] [Thread-63860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:19:26.583 [DEBUG] [Thread-63860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:19:26.583 [INFO] [Thread-63860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:19:26.591 [DEBUG] [Thread-63860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:19:26.591 [DEBUG] [Thread-63860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:19:26.591 [DEBUG] [Thread-63860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:19:26.591 [DEBUG] [Thread-63860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:19:26.591 [DEBUG] [Thread-63860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:19:26.591 [DEBUG] [Thread-63860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] client lang: <none>
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] server lang: <none>
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] kex follows: False
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] Compression: none
2025-11-18T00:19:26.592 [DEBUG] [Thread-63860] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:19:26.650 [DEBUG] [Thread-63860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:19:26.650 [DEBUG] [Thread-63860] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:19:26.651 [DEBUG] [Thread-63860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:19:26.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:19:26.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:19:26.711 [DEBUG] [Thread-63860] [transport.py] [_log()] userauth is OK
2025-11-18T00:19:26.711 [DEBUG] [Thread-63860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:19:26.711 [DEBUG] [Thread-63860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:19:26.711 [DEBUG] [Thread-63860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:19:26.711 [DEBUG] [Thread-63860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:19:26.735 [INFO] [Thread-63860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:19:26.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:19:26.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:19:27.589 [DEBUG] [Thread-63860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:19:27.589 [DEBUG] [Thread-63860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:19:27.636 [DEBUG] [Thread-63860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:19:27.636 [DEBUG] [Thread-63860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:19:27.645 [DEBUG] [Thread-63860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:19:27.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:19:27.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:19:27.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:19:27.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:19:27.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:19:27.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:19:27.679 [DEBUG] [Thread-63860] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:19:32.301 [DEBUG] [Thread-63862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:19:47.343 [DEBUG] [Thread-63863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:19:53.936 [DEBUG] [Thread-63864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:19:57.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:19:57.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:19:57.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:19:58.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 19, 28), 11.05, 46.97, 0.0, 23.01, 13.39, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:19:58.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:19:28
2025-11-18T00:19:58.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:19:58.595 [DEBUG] [Thread-63865] [transport.py] [_log()] starting thread (client mode): 0xd3151840
2025-11-18T00:19:58.595 [DEBUG] [Thread-63865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:19:58.615 [DEBUG] [Thread-63865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:19:58.616 [INFO] [Thread-63865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] client lang: <none>
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] server lang: <none>
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] kex follows: False
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] Compression: none
2025-11-18T00:19:58.619 [DEBUG] [Thread-63865] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:19:58.636 [DEBUG] [Thread-63865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:19:58.637 [DEBUG] [Thread-63865] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:19:58.637 [DEBUG] [Thread-63865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:19:58.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:19:58.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:19:58.639 [DEBUG] [Thread-63865] [transport.py] [_log()] userauth is OK
2025-11-18T00:19:58.640 [DEBUG] [Thread-63865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:19:58.640 [DEBUG] [Thread-63865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:19:58.640 [DEBUG] [Thread-63865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:19:58.640 [DEBUG] [Thread-63865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:19:58.657 [INFO] [Thread-63865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:19:58.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:19:59.279 [DEBUG] [Thread-63865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:19:59.280 [DEBUG] [Thread-63865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:19:59.280 [DEBUG] [Thread-63865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:19:59.321 [DEBUG] [Thread-63865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:19:59.321 [DEBUG] [Thread-63865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:19:59.324 [DEBUG] [Thread-63865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:19:59.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:19:59.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:19:59.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:19:59.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:19:59.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:19:59.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:19:59.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:19:59.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:19:59.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:19:59.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.930253 -999.00  +13.50  14.11     51   +3.70 1 2 1 1 1     0    0 10.21 30.88 ZNEsW 13.6 14.1 153.0 20.7 13.9 -22.8 13.8 -21.4 13.6 -21.5 13.8 -22.3
2025-11-18T00:19:59.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:19:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:19:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.930253
2025-11-18T00:19:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:19:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:19:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:19:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:19:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:19:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:19:28', tmtdew=11.05, humidity=46.97, cloud=0.0, wind=23.01, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:19:29', seeing=1.91, atlas_timestamp='2025-11-17T22:19:33.859', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:18:00')
2025-11-18T00:19:59.348 [DEBUG] [Thread-63865] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:19:59.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:19:59.449 [DEBUG] [Thread-63868] [transport.py] [_log()] starting thread (client mode): 0xd317e500
2025-11-18T00:19:59.449 [DEBUG] [Thread-63868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:19:59.468 [DEBUG] [Thread-63868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:19:59.469 [INFO] [Thread-63868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:19:59.478 [DEBUG] [Thread-63868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:19:59.478 [DEBUG] [Thread-63868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:19:59.478 [DEBUG] [Thread-63868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:19:59.478 [DEBUG] [Thread-63868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] client lang: <none>
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] server lang: <none>
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] kex follows: False
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] Compression: none
2025-11-18T00:19:59.479 [DEBUG] [Thread-63868] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:19:59.537 [DEBUG] [Thread-63868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:19:59.537 [DEBUG] [Thread-63868] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:19:59.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:19:59.538 [DEBUG] [Thread-63868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:19:59.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:19:59.593 [DEBUG] [Thread-63868] [transport.py] [_log()] userauth is OK
2025-11-18T00:19:59.593 [DEBUG] [Thread-63868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:19:59.593 [DEBUG] [Thread-63868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:19:59.593 [DEBUG] [Thread-63868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:19:59.593 [DEBUG] [Thread-63868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:19:59.613 [INFO] [Thread-63868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:19:59.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:19:59.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:20:00.476 [DEBUG] [Thread-63868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:20:00.476 [DEBUG] [Thread-63868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:20:00.526 [DEBUG] [Thread-63868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:20:00.526 [DEBUG] [Thread-63868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:20:00.538 [DEBUG] [Thread-63868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:20:00.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:20:00.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:20:00.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:20:00.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:20:00.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:20:00.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:20:00.572 [DEBUG] [Thread-63868] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:20:02.374 [DEBUG] [Thread-63870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:20:17.402 [DEBUG] [Thread-63871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:20:25.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:20:25.108 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:20:30.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:20:30.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:20:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:20:31.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 20), 11.09, 46.82, 0.0, 24.63, 13.36, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:20:31.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:20:00
2025-11-18T00:20:31.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:20:31.514 [DEBUG] [Thread-63872] [transport.py] [_log()] starting thread (client mode): 0xd07a3fd0
2025-11-18T00:20:31.514 [DEBUG] [Thread-63872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:20:31.535 [DEBUG] [Thread-63872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:20:31.535 [INFO] [Thread-63872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:20:31.538 [DEBUG] [Thread-63872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] client lang: <none>
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] server lang: <none>
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] kex follows: False
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] Compression: none
2025-11-18T00:20:31.539 [DEBUG] [Thread-63872] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:20:31.553 [DEBUG] [Thread-63872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:20:31.553 [DEBUG] [Thread-63872] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:20:31.554 [DEBUG] [Thread-63872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:20:31.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:20:31.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:20:31.554 [DEBUG] [Thread-63872] [transport.py] [_log()] userauth is OK
2025-11-18T00:20:31.554 [DEBUG] [Thread-63872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:20:31.554 [DEBUG] [Thread-63872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:20:31.554 [DEBUG] [Thread-63872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:20:31.555 [DEBUG] [Thread-63872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:20:31.564 [INFO] [Thread-63872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:20:31.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:20:32.201 [DEBUG] [Thread-63872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:20:32.201 [DEBUG] [Thread-63872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:20:32.201 [DEBUG] [Thread-63872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:20:32.242 [DEBUG] [Thread-63872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:20:32.243 [DEBUG] [Thread-63872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:20:32.246 [DEBUG] [Thread-63872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:20:32.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:20:32.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:20:32.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:20:32.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:20:32.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:20:32.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:20:32.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:20:32.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:20:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:20:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.930600 -999.00  +13.50  15.53     51   +3.80 1 2 1 1 1     0    0 10.54 31.77 ZNEsW 15.4 15.5 145.0 21.5 13.9 -22.8 13.8 -21.5 13.6 -21.4 13.9 -22.4
2025-11-18T00:20:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:20:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:20:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.930600
2025-11-18T00:20:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:20:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:20:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:20:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:20:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:20:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:20:00', tmtdew=11.09, humidity=46.82, cloud=0.0, wind=24.63, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:20:01', seeing=1.91, atlas_timestamp='2025-11-17T22:20:03.840', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:18:00')
2025-11-18T00:20:32.272 [DEBUG] [Thread-63872] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:20:32.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:20:32.368 [DEBUG] [Thread-63875] [transport.py] [_log()] starting thread (client mode): 0xd0713850
2025-11-18T00:20:32.368 [DEBUG] [Thread-63875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:20:32.383 [DEBUG] [Thread-63875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:20:32.383 [INFO] [Thread-63875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:20:32.391 [DEBUG] [Thread-63875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:20:32.391 [DEBUG] [Thread-63875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:20:32.391 [DEBUG] [Thread-63875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:20:32.391 [DEBUG] [Thread-63875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:20:32.391 [DEBUG] [Thread-63875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:20:32.391 [DEBUG] [Thread-63875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:20:32.391 [DEBUG] [Thread-63875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:20:32.392 [DEBUG] [Thread-63875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:20:32.392 [DEBUG] [Thread-63875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:20:32.392 [DEBUG] [Thread-63875] [transport.py] [_log()] client lang: <none>
2025-11-18T00:20:32.392 [DEBUG] [Thread-63875] [transport.py] [_log()] server lang: <none>
2025-11-18T00:20:32.392 [DEBUG] [Thread-63875] [transport.py] [_log()] kex follows: False
2025-11-18T00:20:32.392 [DEBUG] [Thread-63875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:20:32.392 [DEBUG] [Thread-63875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:20:32.392 [DEBUG] [Thread-63875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:20:32.393 [DEBUG] [Thread-63875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:20:32.393 [DEBUG] [Thread-63875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:20:32.393 [DEBUG] [Thread-63875] [transport.py] [_log()] Compression: none
2025-11-18T00:20:32.393 [DEBUG] [Thread-63875] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:20:32.430 [DEBUG] [Thread-63877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:20:32.449 [DEBUG] [Thread-63875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:20:32.449 [DEBUG] [Thread-63875] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:20:32.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:20:32.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:20:32.451 [DEBUG] [Thread-63875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:20:32.505 [DEBUG] [Thread-63875] [transport.py] [_log()] userauth is OK
2025-11-18T00:20:32.505 [DEBUG] [Thread-63875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:20:32.505 [DEBUG] [Thread-63875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:20:32.505 [DEBUG] [Thread-63875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:20:32.505 [DEBUG] [Thread-63875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:20:32.523 [INFO] [Thread-63875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:20:32.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:20:32.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:20:33.332 [DEBUG] [Thread-63875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:20:33.332 [DEBUG] [Thread-63875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:20:33.380 [DEBUG] [Thread-63875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:20:33.380 [DEBUG] [Thread-63875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:20:33.388 [DEBUG] [Thread-63875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:20:33.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:20:33.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:20:33.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:20:33.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:20:33.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:20:33.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:20:33.425 [DEBUG] [Thread-63875] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:20:47.467 [DEBUG] [Thread-63878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:20:54.006 [DEBUG] [Thread-63879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:21:02.406 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:21:02.496 [DEBUG] [Thread-63880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:21:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:21:03.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:21:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:21:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 20, 33), 11.05, 46.95, 0.0, 24.3, 13.34, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:21:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:20:33
2025-11-18T00:21:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:21:04.371 [DEBUG] [Thread-63881] [transport.py] [_log()] starting thread (client mode): 0xd07030d0
2025-11-18T00:21:04.371 [DEBUG] [Thread-63881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:21:04.391 [DEBUG] [Thread-63881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:21:04.391 [INFO] [Thread-63881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:21:04.394 [DEBUG] [Thread-63881] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] client lang: <none>
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] server lang: <none>
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] kex follows: False
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] Compression: none
2025-11-18T00:21:04.395 [DEBUG] [Thread-63881] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:21:04.415 [DEBUG] [Thread-63881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:21:04.416 [DEBUG] [Thread-63881] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:21:04.416 [DEBUG] [Thread-63881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:21:04.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:21:04.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:21:04.457 [DEBUG] [Thread-63881] [transport.py] [_log()] userauth is OK
2025-11-18T00:21:04.457 [DEBUG] [Thread-63881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:21:04.457 [DEBUG] [Thread-63881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:21:04.457 [DEBUG] [Thread-63881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:21:04.457 [DEBUG] [Thread-63881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:21:04.493 [INFO] [Thread-63881] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:21:04.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:21:05.081 [DEBUG] [Thread-63881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:21:05.081 [DEBUG] [Thread-63881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:21:05.082 [DEBUG] [Thread-63881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:21:05.122 [DEBUG] [Thread-63881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:21:05.122 [DEBUG] [Thread-63881] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:21:05.124 [DEBUG] [Thread-63881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:21:05.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:21:05.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:21:05.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:21:05.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:21:05.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:21:05.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:21:05.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:21:05.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:21:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:21:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.930948 -999.00  +13.50  16.29     52   +3.90 1 2 1 1 1     0    0 10.41 34.87 ZNEsW 15.0 16.3 144.8 21.5 13.9 -22.8 13.8 -21.5 13.6 -21.5 13.9 -22.5
2025-11-18T00:21:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:21:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:21:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.930948
2025-11-18T00:21:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:21:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:21:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:21:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:21:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:21:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:20:33', tmtdew=11.05, humidity=46.95, cloud=0.0, wind=24.3, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:20:33', seeing=1.84, atlas_timestamp='2025-11-17T22:20:33.907', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:18:00')
2025-11-18T00:21:05.146 [DEBUG] [Thread-63881] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:21:05.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:21:05.243 [DEBUG] [Thread-63884] [transport.py] [_log()] starting thread (client mode): 0xd31cf610
2025-11-18T00:21:05.243 [DEBUG] [Thread-63884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:21:05.258 [DEBUG] [Thread-63884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:21:05.258 [INFO] [Thread-63884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:21:05.265 [DEBUG] [Thread-63884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:21:05.265 [DEBUG] [Thread-63884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:21:05.265 [DEBUG] [Thread-63884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] client lang: <none>
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] server lang: <none>
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] kex follows: False
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] Compression: none
2025-11-18T00:21:05.266 [DEBUG] [Thread-63884] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:21:05.324 [DEBUG] [Thread-63884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:21:05.324 [DEBUG] [Thread-63884] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:21:05.324 [DEBUG] [Thread-63884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:21:05.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:21:05.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:21:05.380 [DEBUG] [Thread-63884] [transport.py] [_log()] userauth is OK
2025-11-18T00:21:05.380 [DEBUG] [Thread-63884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:21:05.380 [DEBUG] [Thread-63884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:21:05.380 [DEBUG] [Thread-63884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:21:05.380 [DEBUG] [Thread-63884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:21:05.397 [INFO] [Thread-63884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:21:05.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:21:05.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:21:06.226 [DEBUG] [Thread-63884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:21:06.226 [DEBUG] [Thread-63884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:21:06.274 [DEBUG] [Thread-63884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:21:06.274 [DEBUG] [Thread-63884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:21:06.282 [DEBUG] [Thread-63884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:21:06.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:21: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')
2025-11-18T00:21:06.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:21:06.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:21:06.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:21:06.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:21:06.313 [DEBUG] [Thread-63884] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:21:17.525 [DEBUG] [Thread-63886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:21:25.310 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:21:25.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:21:32.565 [DEBUG] [Thread-63887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:21:36.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:21:36.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:21:36.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:21:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 21, 5), 11.11, 46.79, 0.0, 23.64, 13.38, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:21:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:21:05
2025-11-18T00:21:37.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:21:37.304 [DEBUG] [Thread-63888] [transport.py] [_log()] starting thread (client mode): 0xd317e980
2025-11-18T00:21:37.304 [DEBUG] [Thread-63888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:21:37.326 [DEBUG] [Thread-63888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:21:37.326 [INFO] [Thread-63888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] client lang: <none>
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] server lang: <none>
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] kex follows: False
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:21:37.329 [DEBUG] [Thread-63888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:21:37.330 [DEBUG] [Thread-63888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:21:37.330 [DEBUG] [Thread-63888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:21:37.330 [DEBUG] [Thread-63888] [transport.py] [_log()] Compression: none
2025-11-18T00:21:37.330 [DEBUG] [Thread-63888] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:21:37.345 [DEBUG] [Thread-63888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:21:37.345 [DEBUG] [Thread-63888] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:21:37.346 [DEBUG] [Thread-63888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:21:37.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:21:37.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:21:37.347 [DEBUG] [Thread-63888] [transport.py] [_log()] userauth is OK
2025-11-18T00:21:37.347 [DEBUG] [Thread-63888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:21:37.347 [DEBUG] [Thread-63888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:21:37.347 [DEBUG] [Thread-63888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:21:37.347 [DEBUG] [Thread-63888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:21:37.366 [INFO] [Thread-63888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:21:37.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:21:37.981 [DEBUG] [Thread-63888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:21:37.981 [DEBUG] [Thread-63888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:21:37.981 [DEBUG] [Thread-63888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:21:38.022 [DEBUG] [Thread-63888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:21:38.022 [DEBUG] [Thread-63888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:21:38.025 [DEBUG] [Thread-63888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:21:38.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:21:38.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:21:38.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:21:38.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:21:38.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:21:38.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:21:38.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:21:38.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:21:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:21:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.931295 -999.00  +13.40  13.36     52   +3.90 1 2 1 1 1     0    0 10.31 36.63 ZNEsW 16.0 13.4 148.6 20.4 13.9 -22.8 13.8 -21.6 13.7 -21.5 13.9 -22.6
2025-11-18T00:21:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:21:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:21:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.931295
2025-11-18T00:21:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:21:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:21:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:21:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:21:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:21:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:21:05', tmtdew=11.11, humidity=46.79, cloud=0.0, wind=23.64, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:21:05', seeing=1.74, atlas_timestamp='2025-11-17T22:21:03.888', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:18:00')
2025-11-18T00:21:38.044 [DEBUG] [Thread-63888] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:21:38.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:21:38.133 [DEBUG] [Thread-63891] [transport.py] [_log()] starting thread (client mode): 0xd07a9ea0
2025-11-18T00:21:38.133 [DEBUG] [Thread-63891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:21:38.148 [DEBUG] [Thread-63891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:21:38.148 [INFO] [Thread-63891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] client lang: <none>
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] server lang: <none>
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] kex follows: False
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] Compression: none
2025-11-18T00:21:38.156 [DEBUG] [Thread-63891] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:21:38.211 [DEBUG] [Thread-63891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:21:38.211 [DEBUG] [Thread-63891] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:21:38.212 [DEBUG] [Thread-63891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:21:38.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:21:38.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:21:38.268 [DEBUG] [Thread-63891] [transport.py] [_log()] userauth is OK
2025-11-18T00:21:38.268 [DEBUG] [Thread-63891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:21:38.269 [DEBUG] [Thread-63891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:21:38.269 [DEBUG] [Thread-63891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:21:38.269 [DEBUG] [Thread-63891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:21:38.288 [INFO] [Thread-63891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:21:38.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:21:38.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:21:39.121 [DEBUG] [Thread-63891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:21:39.122 [DEBUG] [Thread-63891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:21:39.170 [DEBUG] [Thread-63891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:21:39.170 [DEBUG] [Thread-63891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:21:39.178 [DEBUG] [Thread-63891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:21:39.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:21:39.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:21:39.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:21:39.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:21:39.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:21:39.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:21:39.209 [DEBUG] [Thread-63891] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:21:47.594 [DEBUG] [Thread-63893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:21:54.078 [DEBUG] [Thread-63894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:22:02.637 [DEBUG] [Thread-63895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:22:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:22:09.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:22:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:22:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 21, 37), 11.06, 47.27, 0.0, 21.28, 13.33, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:22:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:21:37
2025-11-18T00:22:10.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:22:10.240 [DEBUG] [Thread-63896] [transport.py] [_log()] starting thread (client mode): 0xd0700a90
2025-11-18T00:22:10.240 [DEBUG] [Thread-63896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:22:10.262 [DEBUG] [Thread-63896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:22:10.262 [INFO] [Thread-63896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:22:10.265 [DEBUG] [Thread-63896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] client lang: <none>
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] server lang: <none>
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] kex follows: False
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] Compression: none
2025-11-18T00:22:10.266 [DEBUG] [Thread-63896] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:22:10.282 [DEBUG] [Thread-63896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:22:10.282 [DEBUG] [Thread-63896] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:22:10.282 [DEBUG] [Thread-63896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:22:10.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:22:10.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:22:10.283 [DEBUG] [Thread-63896] [transport.py] [_log()] userauth is OK
2025-11-18T00:22:10.283 [DEBUG] [Thread-63896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:22:10.283 [DEBUG] [Thread-63896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:22:10.283 [DEBUG] [Thread-63896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:22:10.283 [DEBUG] [Thread-63896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:22:10.302 [INFO] [Thread-63896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:22:10.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:22:10.943 [DEBUG] [Thread-63896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:22:10.943 [DEBUG] [Thread-63896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:22:10.943 [DEBUG] [Thread-63896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:22:10.984 [DEBUG] [Thread-63896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:22:10.984 [DEBUG] [Thread-63896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:22:10.986 [DEBUG] [Thread-63896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:22:10.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:22:10.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:22:10.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:22:10.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:22:11.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:22:11.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:22:11.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.931642 -999.00  +13.40  14.26     52   +3.80 1 2 1 1 1     0    0 10.36 35.44 ZNEsW 12.3 14.3 155.8 18.7 13.9 -22.9 13.8 -21.6 13.6 -21.5 13.9 -22.7
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.931642
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:22:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:21:37', tmtdew=11.06, humidity=47.27, cloud=0.0, wind=21.28, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:21:37', seeing=1.74, atlas_timestamp='2025-11-17T22:21:33.869', atlas_cloud=2, atlas_rain=1, zp_data=[0.10224999999999973, 0.060750000000000526, 0.1772500000000008, 0.20949999999999847, 0.1615000000000002, 0.14525000000000077, 0.04800000000000004, 0.03125, 0.030999999999998806, 0.1120000000000001, 0.2442499999999992, 0.25849999999999973, 0.3669999999999991, 0.13874999999999993, -0.022500000000000853, 0.028999999999999915, 0.008749999999999147, 0.19599999999999973, 0.605999999999999, 0.558749999999999, 0.40199999999999925, 0.10174999999999912, 0.025249999999999773, -0.0182500000000001, 0.008999999999998565, 0.23150000000000048, 1.1217500000000005, 0.8224999999999998, 0.4975000000000005, 0.17400000000000126, 0.13700000000000045, 0.0, 0.011749999999999261], zp_timestamp='2025-11-17T22:18:00')
2025-11-18T00:22:11.004 [DEBUG] [Thread-63896] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:22:11.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:22:11.090 [DEBUG] [Thread-63899] [transport.py] [_log()] starting thread (client mode): 0xd31cd9c0
2025-11-18T00:22:11.090 [DEBUG] [Thread-63899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:22:11.105 [DEBUG] [Thread-63899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:22:11.105 [INFO] [Thread-63899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:22:11.113 [DEBUG] [Thread-63899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] client lang: <none>
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] server lang: <none>
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] kex follows: False
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] Compression: none
2025-11-18T00:22:11.114 [DEBUG] [Thread-63899] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:22:11.170 [DEBUG] [Thread-63899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:22:11.170 [DEBUG] [Thread-63899] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:22:11.171 [DEBUG] [Thread-63899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:22:11.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:22:11.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:22:11.228 [DEBUG] [Thread-63899] [transport.py] [_log()] userauth is OK
2025-11-18T00:22:11.229 [DEBUG] [Thread-63899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:22:11.229 [DEBUG] [Thread-63899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:22:11.229 [DEBUG] [Thread-63899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:22:11.229 [DEBUG] [Thread-63899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:22:11.251 [INFO] [Thread-63899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:22:11.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:22:11.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:22:12.096 [DEBUG] [Thread-63899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:22:12.096 [DEBUG] [Thread-63899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:22:12.144 [DEBUG] [Thread-63899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:22:12.145 [DEBUG] [Thread-63899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:22:12.154 [DEBUG] [Thread-63899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:22:12.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:22:12.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:22:12.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:22:12.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:22:12.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:22:12.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:22:12.188 [DEBUG] [Thread-63899] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:22:17.664 [DEBUG] [Thread-63901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:22:25.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:22:25.516 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:22:32.695 [DEBUG] [Thread-63902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:22:42.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:22:42.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:22:42.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:22:42.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 22, 9), 11.04, 47.35, 0.0, 22.41, 13.41, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:22:42.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:22:09
2025-11-18T00:22:43.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:22:43.206 [DEBUG] [Thread-63903] [transport.py] [_log()] starting thread (client mode): 0xd07aa440
2025-11-18T00:22:43.206 [DEBUG] [Thread-63903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:22:43.227 [DEBUG] [Thread-63903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:22:43.227 [INFO] [Thread-63903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:22:43.228 [DEBUG] [Thread-63903] [transport.py] [_log()] client lang: <none>
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] server lang: <none>
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] kex follows: False
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] Compression: none
2025-11-18T00:22:43.229 [DEBUG] [Thread-63903] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:22:43.244 [DEBUG] [Thread-63903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:22:43.244 [DEBUG] [Thread-63903] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:22:43.244 [DEBUG] [Thread-63903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:22:43.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:22:43.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:22:43.245 [DEBUG] [Thread-63903] [transport.py] [_log()] userauth is OK
2025-11-18T00:22:43.245 [DEBUG] [Thread-63903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:22:43.245 [DEBUG] [Thread-63903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:22:43.245 [DEBUG] [Thread-63903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:22:43.245 [DEBUG] [Thread-63903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:22:43.254 [INFO] [Thread-63903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:22:43.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:22:43.871 [DEBUG] [Thread-63903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:22:43.872 [DEBUG] [Thread-63903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:22:43.872 [DEBUG] [Thread-63903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:22:43.912 [DEBUG] [Thread-63903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:22:43.912 [DEBUG] [Thread-63903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:22:43.915 [DEBUG] [Thread-63903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:22:43.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:22:43.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:22:43.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:22:43.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:22:43.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:22:43.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:22:43.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:22:43.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:22:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:22:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.931989 -999.00  +13.40  15.25     52   +3.80 1 2 1 1 1     0    0 10.66 35.12 ZNEsW 14.7 15.2 149.6 22.2 13.9 -22.9 13.8 -21.7 13.6 -21.6 13.9 -22.6
2025-11-18T00:22:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:22:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:22:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.931989
2025-11-18T00:22:43.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:22:43.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:22:43.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:22:43.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:22:43.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:22:43.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:22:09', tmtdew=11.04, humidity=47.35, cloud=0.0, wind=22.41, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:22:41', seeing=1.73, atlas_timestamp='2025-11-17T22:22:03.850', atlas_cloud=2, atlas_rain=1, zp_data=[0.17074999999999996, 0.1592500000000001, 0.24125000000000085, 0.22949999999999982, 0.2524999999999995, 0.21825000000000117, 0.07199999999999918, 0.047750000000000625, 0.067499999999999, 0.21600000000000108, 0.42074999999999996, 0.3020000000000014, 0.3335000000000008, 0.18425000000000047, 0.022499999999999076, 0.0030000000000001137, 0.045249999999999346, 0.30599999999999916, 0.661999999999999, 0.39924999999999855, 0.2679999999999989, 0.12824999999999775, 0.0912500000000005, 0.05025000000000013, 0.023999999999999133, 0.3055000000000003, 0.9417499999999999, 0.44650000000000034, 0.25950000000000006, 0.10600000000000165, 0.30400000000000116, 0.038000000000000256, -0.013750000000001705], zp_timestamp='2025-11-17T22:21:00')
2025-11-18T00:22:43.940 [DEBUG] [Thread-63903] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:22:44.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:22:44.036 [DEBUG] [Thread-63906] [transport.py] [_log()] starting thread (client mode): 0xd31cfa00
2025-11-18T00:22:44.036 [DEBUG] [Thread-63906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:22:44.050 [DEBUG] [Thread-63906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:22:44.051 [INFO] [Thread-63906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:22:44.058 [DEBUG] [Thread-63906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:22:44.058 [DEBUG] [Thread-63906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:22:44.058 [DEBUG] [Thread-63906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] client lang: <none>
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] server lang: <none>
2025-11-18T00:22:44.059 [DEBUG] [Thread-63906] [transport.py] [_log()] kex follows: False
2025-11-18T00:22:44.060 [DEBUG] [Thread-63906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:22:44.060 [DEBUG] [Thread-63906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:22:44.060 [DEBUG] [Thread-63906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:22:44.060 [DEBUG] [Thread-63906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:22:44.060 [DEBUG] [Thread-63906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:22:44.060 [DEBUG] [Thread-63906] [transport.py] [_log()] Compression: none
2025-11-18T00:22:44.060 [DEBUG] [Thread-63906] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:22:44.116 [DEBUG] [Thread-63906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:22:44.116 [DEBUG] [Thread-63906] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:22:44.117 [DEBUG] [Thread-63906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:22:44.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:22:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:22:44.172 [DEBUG] [Thread-63906] [transport.py] [_log()] userauth is OK
2025-11-18T00:22:44.173 [DEBUG] [Thread-63906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:22:44.173 [DEBUG] [Thread-63906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:22:44.173 [DEBUG] [Thread-63906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:22:44.173 [DEBUG] [Thread-63906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:22:44.196 [INFO] [Thread-63906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:22:44.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:22:44.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:22:45.041 [DEBUG] [Thread-63906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:22:45.041 [DEBUG] [Thread-63906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:22:45.088 [DEBUG] [Thread-63906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:22:45.088 [DEBUG] [Thread-63906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:22:45.097 [DEBUG] [Thread-63906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:22:45.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:22:45.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:22:45.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:22:45.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:22:45.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:22:45.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:22:45.131 [DEBUG] [Thread-63906] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:22:47.725 [DEBUG] [Thread-63908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:22:54.131 [DEBUG] [Thread-63909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:23:02.773 [DEBUG] [Thread-63910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:23:15.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:23:15.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:23:15.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:23:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 22, 41), 11.02, 47.4, 0.0, 22.69, 13.38, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:23:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:22:41
2025-11-18T00:23:15.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:23:16.091 [DEBUG] [Thread-63911] [transport.py] [_log()] starting thread (client mode): 0xd3150790
2025-11-18T00:23:16.092 [DEBUG] [Thread-63911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:23:16.111 [DEBUG] [Thread-63911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:23:16.111 [INFO] [Thread-63911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] client lang: <none>
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] server lang: <none>
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] kex follows: False
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] Compression: none
2025-11-18T00:23:16.114 [DEBUG] [Thread-63911] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:23:16.129 [DEBUG] [Thread-63911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:23:16.129 [DEBUG] [Thread-63911] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:23:16.130 [DEBUG] [Thread-63911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:23:16.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:23:16.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:23:16.131 [DEBUG] [Thread-63911] [transport.py] [_log()] userauth is OK
2025-11-18T00:23:16.132 [DEBUG] [Thread-63911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:23:16.132 [DEBUG] [Thread-63911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:23:16.132 [DEBUG] [Thread-63911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:23:16.132 [DEBUG] [Thread-63911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:23:16.152 [INFO] [Thread-63911] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:23:16.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:23:16.775 [DEBUG] [Thread-63911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:23:16.775 [DEBUG] [Thread-63911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:23:16.775 [DEBUG] [Thread-63911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:23:16.816 [DEBUG] [Thread-63911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:23:16.817 [DEBUG] [Thread-63911] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:23:16.820 [DEBUG] [Thread-63911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:23:16.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:23:16.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:23:16.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:23:16.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:23:16.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:23:16.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:23:16.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:23:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:23:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:23:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.932683 -999.00  +13.40  16.90     52   +3.80 1 2 1 1 1     0    0 10.41 37.62 ZNEsW 14.7 16.9 141.4 20.3 13.9 -23.2 13.8 -21.9 13.6 -21.6 13.8 -22.7
2025-11-18T00:23:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:23:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:23:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.932683
2025-11-18T00:23:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:23:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:23:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:23:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:23:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:23:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:22:41', tmtdew=11.02, humidity=47.4, cloud=0.0, wind=22.69, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:23:13', seeing=1.92, atlas_timestamp='2025-11-17T22:23:03.811', atlas_cloud=2, atlas_rain=1, zp_data=[0.17074999999999996, 0.1592500000000001, 0.24125000000000085, 0.22949999999999982, 0.2524999999999995, 0.21825000000000117, 0.07199999999999918, 0.047750000000000625, 0.067499999999999, 0.21600000000000108, 0.42074999999999996, 0.3020000000000014, 0.3335000000000008, 0.18425000000000047, 0.022499999999999076, 0.0030000000000001137, 0.045249999999999346, 0.30599999999999916, 0.661999999999999, 0.39924999999999855, 0.2679999999999989, 0.12824999999999775, 0.0912500000000005, 0.05025000000000013, 0.023999999999999133, 0.3055000000000003, 0.9417499999999999, 0.44650000000000034, 0.25950000000000006, 0.10600000000000165, 0.30400000000000116, 0.038000000000000256, -0.013750000000001705], zp_timestamp='2025-11-17T22:21:00')
2025-11-18T00:23:16.845 [DEBUG] [Thread-63911] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:23:16.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:23:16.945 [DEBUG] [Thread-63914] [transport.py] [_log()] starting thread (client mode): 0xd317c7f0
2025-11-18T00:23:16.945 [DEBUG] [Thread-63914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:23:16.960 [DEBUG] [Thread-63914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:23:16.960 [INFO] [Thread-63914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:23:16.967 [DEBUG] [Thread-63914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] client lang: <none>
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] server lang: <none>
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] kex follows: False
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] Compression: none
2025-11-18T00:23:16.968 [DEBUG] [Thread-63914] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:23:17.024 [DEBUG] [Thread-63914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:23:17.024 [DEBUG] [Thread-63914] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:23:17.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:23:17.025 [DEBUG] [Thread-63914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:23:17.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:23:17.081 [DEBUG] [Thread-63914] [transport.py] [_log()] userauth is OK
2025-11-18T00:23:17.081 [DEBUG] [Thread-63914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:23:17.081 [DEBUG] [Thread-63914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:23:17.081 [DEBUG] [Thread-63914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:23:17.081 [DEBUG] [Thread-63914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:23:17.100 [INFO] [Thread-63914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:23:17.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:23:17.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:23:17.801 [DEBUG] [Thread-63916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:23:17.924 [DEBUG] [Thread-63914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:23:17.924 [DEBUG] [Thread-63914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:23:17.972 [DEBUG] [Thread-63914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:23:17.972 [DEBUG] [Thread-63914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:23:17.981 [DEBUG] [Thread-63914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:23:17.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:23:17.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:23:17.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:23:18.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:23:18.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:23:18.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:23:18.015 [DEBUG] [Thread-63914] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:23:25.719 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:23:25.720 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:23:32.844 [DEBUG] [Thread-63917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:23:47.871 [DEBUG] [Thread-63918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:23:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:23:48.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:23:48.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:23:48.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 23, 45), 10.94, 47.52, 0.0, 21.47, 13.37, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:23:48.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:23:45
2025-11-18T00:23:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:23:48.983 [DEBUG] [Thread-63919] [transport.py] [_log()] starting thread (client mode): 0xd07a9e70
2025-11-18T00:23:48.983 [DEBUG] [Thread-63919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:23:48.995 [DEBUG] [Thread-63919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:23:48.995 [INFO] [Thread-63919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] client lang: <none>
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] server lang: <none>
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] kex follows: False
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] Compression: none
2025-11-18T00:23:48.998 [DEBUG] [Thread-63919] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:23:49.014 [DEBUG] [Thread-63919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:23:49.014 [DEBUG] [Thread-63919] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:23:49.014 [DEBUG] [Thread-63919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:23:49.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:23:49.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:23:49.015 [DEBUG] [Thread-63919] [transport.py] [_log()] userauth is OK
2025-11-18T00:23:49.016 [DEBUG] [Thread-63919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:23:49.016 [DEBUG] [Thread-63919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:23:49.016 [DEBUG] [Thread-63919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:23:49.016 [DEBUG] [Thread-63919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:23:49.029 [INFO] [Thread-63919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:23:49.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:23:49.615 [DEBUG] [Thread-63919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:23:49.615 [DEBUG] [Thread-63919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:23:49.616 [DEBUG] [Thread-63919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:23:49.656 [DEBUG] [Thread-63919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:23:49.656 [DEBUG] [Thread-63919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:23:49.658 [DEBUG] [Thread-63919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:23:49.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:23:49.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:23:49.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:23:49.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:23:49.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:23:49.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:23:49.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:23:49.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:23:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:23:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.933031 -999.00  +13.40  14.31     52   +3.80 1 2 1 1 1     0    0 10.53 39.91 ZNEsW 14.2 14.3 157.0 19.8 13.9 -23.1 13.8 -21.8 13.6 -21.7 13.8 -22.7
2025-11-18T00:23:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:23:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:23:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.933031
2025-11-18T00:23:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:23:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:23:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:23:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:23:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:23:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:23:45', tmtdew=10.94, humidity=47.52, cloud=0.0, wind=21.47, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:23:45', seeing=1.64, atlas_timestamp='2025-11-17T22:23:33.878', atlas_cloud=2, atlas_rain=1, zp_data=[0.17074999999999996, 0.1592500000000001, 0.24125000000000085, 0.22949999999999982, 0.2524999999999995, 0.21825000000000117, 0.07199999999999918, 0.047750000000000625, 0.067499999999999, 0.21600000000000108, 0.42074999999999996, 0.3020000000000014, 0.3335000000000008, 0.18425000000000047, 0.022499999999999076, 0.0030000000000001137, 0.045249999999999346, 0.30599999999999916, 0.661999999999999, 0.39924999999999855, 0.2679999999999989, 0.12824999999999775, 0.0912500000000005, 0.05025000000000013, 0.023999999999999133, 0.3055000000000003, 0.9417499999999999, 0.44650000000000034, 0.25950000000000006, 0.10600000000000165, 0.30400000000000116, 0.038000000000000256, -0.013750000000001705], zp_timestamp='2025-11-17T22:21:00')
2025-11-18T00:23:49.675 [DEBUG] [Thread-63919] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:23:49.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:23:49.771 [DEBUG] [Thread-63922] [transport.py] [_log()] starting thread (client mode): 0xd07a8fd0
2025-11-18T00:23:49.771 [DEBUG] [Thread-63922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:23:49.789 [DEBUG] [Thread-63922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:23:49.790 [INFO] [Thread-63922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:23:49.797 [DEBUG] [Thread-63922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:23:49.797 [DEBUG] [Thread-63922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:23:49.797 [DEBUG] [Thread-63922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] client lang: <none>
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] server lang: <none>
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] kex follows: False
2025-11-18T00:23:49.798 [DEBUG] [Thread-63922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:23:49.799 [DEBUG] [Thread-63922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:23:49.799 [DEBUG] [Thread-63922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:23:49.799 [DEBUG] [Thread-63922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:23:49.799 [DEBUG] [Thread-63922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:23:49.799 [DEBUG] [Thread-63922] [transport.py] [_log()] Compression: none
2025-11-18T00:23:49.799 [DEBUG] [Thread-63922] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:23:49.857 [DEBUG] [Thread-63922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:23:49.857 [DEBUG] [Thread-63922] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:23:49.858 [DEBUG] [Thread-63922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:23:49.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:23:49.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:23:49.919 [DEBUG] [Thread-63922] [transport.py] [_log()] userauth is OK
2025-11-18T00:23:49.919 [DEBUG] [Thread-63922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:23:49.919 [DEBUG] [Thread-63922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:23:49.919 [DEBUG] [Thread-63922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:23:49.919 [DEBUG] [Thread-63922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:23:49.939 [INFO] [Thread-63922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:23:49.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:23:49.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:23:50.826 [DEBUG] [Thread-63922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:23:50.826 [DEBUG] [Thread-63922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:23:50.874 [DEBUG] [Thread-63922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:23:50.874 [DEBUG] [Thread-63922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:23:50.883 [DEBUG] [Thread-63922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:23:50.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:23:50.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:23:50.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:23:50.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:23:50.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:23:50.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:23:50.918 [DEBUG] [Thread-63922] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:23:54.188 [DEBUG] [Thread-63924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:24:02.899 [DEBUG] [Thread-63925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:24:17.938 [DEBUG] [Thread-63926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:24:20.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:24:20.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:24:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:24:21.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 24, 17), 10.94, 47.5, 0.0, 20.05, 13.31, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:24:21.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:24:17
2025-11-18T00:24:21.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:24:21.892 [DEBUG] [Thread-63927] [transport.py] [_log()] starting thread (client mode): 0xd07ab760
2025-11-18T00:24:21.892 [DEBUG] [Thread-63927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:24:21.911 [DEBUG] [Thread-63927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:24:21.912 [INFO] [Thread-63927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] client lang: <none>
2025-11-18T00:24:21.915 [DEBUG] [Thread-63927] [transport.py] [_log()] server lang: <none>
2025-11-18T00:24:21.916 [DEBUG] [Thread-63927] [transport.py] [_log()] kex follows: False
2025-11-18T00:24:21.916 [DEBUG] [Thread-63927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:24:21.916 [DEBUG] [Thread-63927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:24:21.916 [DEBUG] [Thread-63927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:24:21.916 [DEBUG] [Thread-63927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:24:21.916 [DEBUG] [Thread-63927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:24:21.916 [DEBUG] [Thread-63927] [transport.py] [_log()] Compression: none
2025-11-18T00:24:21.916 [DEBUG] [Thread-63927] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:24:21.929 [DEBUG] [Thread-63927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:24:21.930 [DEBUG] [Thread-63927] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:24:21.930 [DEBUG] [Thread-63927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:24:21.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:24:21.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:24:21.932 [DEBUG] [Thread-63927] [transport.py] [_log()] userauth is OK
2025-11-18T00:24:21.932 [DEBUG] [Thread-63927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:24:21.932 [DEBUG] [Thread-63927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:24:21.932 [DEBUG] [Thread-63927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:24:21.932 [DEBUG] [Thread-63927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:24:21.951 [INFO] [Thread-63927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:24:21.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:24:22.503 [DEBUG] [Thread-63927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:24:22.504 [DEBUG] [Thread-63927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:24:22.504 [DEBUG] [Thread-63927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:24:22.544 [DEBUG] [Thread-63927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:24:22.544 [DEBUG] [Thread-63927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:24:22.547 [DEBUG] [Thread-63927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:24:22.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:24:22.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:24:22.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:24:22.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:24:22.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:24:22.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:24:22.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:24:22.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:24:22.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:24:22.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.933378 -999.00  +13.40  17.91     52   +3.80 1 2 1 1 1     0    0 10.73 39.25 ZNEsW 17.0 17.9 141.2 22.1 13.9 -23.3 13.8 -21.9 13.6 -21.7 13.8 -22.8
2025-11-18T00:24:22.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:24:22.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:24:22.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.933378
2025-11-18T00:24:22.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:24:22.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:24:22.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:24:22.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:24:22.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:24:22.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:24:17', tmtdew=10.94, humidity=47.5, cloud=0.0, wind=20.05, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:24:17', seeing=1.88, atlas_timestamp='2025-11-17T22:24:03.859', atlas_cloud=2, atlas_rain=1, zp_data=[0.17074999999999996, 0.1592500000000001, 0.24125000000000085, 0.22949999999999982, 0.2524999999999995, 0.21825000000000117, 0.07199999999999918, 0.047750000000000625, 0.067499999999999, 0.21600000000000108, 0.42074999999999996, 0.3020000000000014, 0.3335000000000008, 0.18425000000000047, 0.022499999999999076, 0.0030000000000001137, 0.045249999999999346, 0.30599999999999916, 0.661999999999999, 0.39924999999999855, 0.2679999999999989, 0.12824999999999775, 0.0912500000000005, 0.05025000000000013, 0.023999999999999133, 0.3055000000000003, 0.9417499999999999, 0.44650000000000034, 0.25950000000000006, 0.10600000000000165, 0.30400000000000116, 0.038000000000000256, -0.013750000000001705], zp_timestamp='2025-11-17T22:21:00')
2025-11-18T00:24:22.573 [DEBUG] [Thread-63927] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:24:22.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:24:22.669 [DEBUG] [Thread-63930] [transport.py] [_log()] starting thread (client mode): 0xd317d960
2025-11-18T00:24:22.670 [DEBUG] [Thread-63930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:24:22.685 [DEBUG] [Thread-63930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:24:22.685 [INFO] [Thread-63930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:24:22.692 [DEBUG] [Thread-63930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] client lang: <none>
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] server lang: <none>
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] kex follows: False
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] Compression: none
2025-11-18T00:24:22.693 [DEBUG] [Thread-63930] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:24:22.752 [DEBUG] [Thread-63930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:24:22.752 [DEBUG] [Thread-63930] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:24:22.752 [DEBUG] [Thread-63930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:24:22.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:24:22.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:24:22.808 [DEBUG] [Thread-63930] [transport.py] [_log()] userauth is OK
2025-11-18T00:24:22.808 [DEBUG] [Thread-63930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:24:22.808 [DEBUG] [Thread-63930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:24:22.808 [DEBUG] [Thread-63930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:24:22.808 [DEBUG] [Thread-63930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:24:22.827 [INFO] [Thread-63930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:24:22.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:24:22.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:24:23.692 [DEBUG] [Thread-63930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:24:23.693 [DEBUG] [Thread-63930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:24:23.740 [DEBUG] [Thread-63930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:24:23.741 [DEBUG] [Thread-63930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:24:23.751 [DEBUG] [Thread-63930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:24:23.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:24:23.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:24:23.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:24:23.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:24:23.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:24:23.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:24:23.786 [DEBUG] [Thread-63930] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:24:25.923 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:24:25.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:24:32.965 [DEBUG] [Thread-63932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:24:48.006 [DEBUG] [Thread-63933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:24:53.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:24:53.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:24:53.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:24:54.241 [DEBUG] [Thread-63934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:24:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 24, 49), 10.88, 47.52, 0.0, 22.14, 13.19, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:24:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:24:49
2025-11-18T00:24:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:24:54.765 [DEBUG] [Thread-63935] [transport.py] [_log()] starting thread (client mode): 0xd317e4d0
2025-11-18T00:24:54.765 [DEBUG] [Thread-63935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:24:54.785 [DEBUG] [Thread-63935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:24:54.785 [INFO] [Thread-63935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:24:54.786 [DEBUG] [Thread-63935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:24:54.786 [DEBUG] [Thread-63935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:24:54.786 [DEBUG] [Thread-63935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:24:54.786 [DEBUG] [Thread-63935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:24:54.786 [DEBUG] [Thread-63935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] client lang: <none>
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] server lang: <none>
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] kex follows: False
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] Compression: none
2025-11-18T00:24:54.787 [DEBUG] [Thread-63935] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:24:54.794 [DEBUG] [Thread-63935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:24:54.794 [DEBUG] [Thread-63935] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:24:54.794 [DEBUG] [Thread-63935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:24:54.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:24:54.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:24:54.795 [DEBUG] [Thread-63935] [transport.py] [_log()] userauth is OK
2025-11-18T00:24:54.795 [DEBUG] [Thread-63935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:24:54.796 [DEBUG] [Thread-63935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:24:54.796 [DEBUG] [Thread-63935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:24:54.796 [DEBUG] [Thread-63935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:24:54.810 [INFO] [Thread-63935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:24:54.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:24:55.415 [DEBUG] [Thread-63935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:24:55.415 [DEBUG] [Thread-63935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:24:55.416 [DEBUG] [Thread-63935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:24:55.456 [DEBUG] [Thread-63935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:24:55.457 [DEBUG] [Thread-63935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:24:55.460 [DEBUG] [Thread-63935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:24:55.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:24:55.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:24:55.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:24:55.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:24:55.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:24:55.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:24:55.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:24:55.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:24:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:24:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.933378 -999.00  +13.40  17.91     52   +3.80 1 2 1 1 1     0    0 10.73 39.25 ZNEsW 17.0 17.9 141.2 22.1 13.9 -23.3 13.8 -21.9 13.6 -21.7 13.8 -22.8
2025-11-18T00:24:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:24:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:24:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.933378
2025-11-18T00:24:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:24:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:24:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:24:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:24:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:24:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:24:49', tmtdew=10.88, humidity=47.52, cloud=0.0, wind=22.14, temperature=13.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:24:49', seeing=1.79, atlas_timestamp='2025-11-17T22:24:03.859', atlas_cloud=2, atlas_rain=1, zp_data=[0.17074999999999996, 0.1592500000000001, 0.24125000000000085, 0.22949999999999982, 0.2524999999999995, 0.21825000000000117, 0.07199999999999918, 0.047750000000000625, 0.067499999999999, 0.21600000000000108, 0.42074999999999996, 0.3020000000000014, 0.3335000000000008, 0.18425000000000047, 0.022499999999999076, 0.0030000000000001137, 0.045249999999999346, 0.30599999999999916, 0.661999999999999, 0.39924999999999855, 0.2679999999999989, 0.12824999999999775, 0.0912500000000005, 0.05025000000000013, 0.023999999999999133, 0.3055000000000003, 0.9417499999999999, 0.44650000000000034, 0.25950000000000006, 0.10600000000000165, 0.30400000000000116, 0.038000000000000256, -0.013750000000001705], zp_timestamp='2025-11-17T22:21:00')
2025-11-18T00:24:55.483 [DEBUG] [Thread-63935] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:24:55.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:24:55.579 [DEBUG] [Thread-63938] [transport.py] [_log()] starting thread (client mode): 0xd317ed70
2025-11-18T00:24:55.579 [DEBUG] [Thread-63938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:24:55.594 [DEBUG] [Thread-63938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:24:55.594 [INFO] [Thread-63938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:24:55.602 [DEBUG] [Thread-63938] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:24:55.602 [DEBUG] [Thread-63938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:24:55.602 [DEBUG] [Thread-63938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:24:55.602 [DEBUG] [Thread-63938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:24:55.602 [DEBUG] [Thread-63938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:24:55.602 [DEBUG] [Thread-63938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:24:55.602 [DEBUG] [Thread-63938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] client lang: <none>
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] server lang: <none>
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] kex follows: False
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] Compression: none
2025-11-18T00:24:55.603 [DEBUG] [Thread-63938] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:24:55.660 [DEBUG] [Thread-63938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:24:55.661 [DEBUG] [Thread-63938] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:24:55.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:24:55.662 [DEBUG] [Thread-63938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:24:55.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:24:55.720 [DEBUG] [Thread-63938] [transport.py] [_log()] userauth is OK
2025-11-18T00:24:55.720 [DEBUG] [Thread-63938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:24:55.720 [DEBUG] [Thread-63938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:24:55.720 [DEBUG] [Thread-63938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:24:55.720 [DEBUG] [Thread-63938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:24:55.740 [INFO] [Thread-63938] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:24:55.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:24:55.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:24:56.557 [DEBUG] [Thread-63938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:24:56.557 [DEBUG] [Thread-63938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:24:56.608 [DEBUG] [Thread-63938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:24:56.608 [DEBUG] [Thread-63938] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:24:56.618 [DEBUG] [Thread-63938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:24:56.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:24:56.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:24:56.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:24:56.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:24:56.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:24:56.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:24:56.655 [DEBUG] [Thread-63938] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:25:03.034 [DEBUG] [Thread-63940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:25:18.076 [DEBUG] [Thread-63941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:25:26.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:25:26.128 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:25:26.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:25:26.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:25:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:25:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 25, 21), 10.84, 47.65, 0.0, 22.9, 13.23, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:25:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:25:21
2025-11-18T00:25:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:25:27.602 [DEBUG] [Thread-63942] [transport.py] [_log()] starting thread (client mode): 0xd07abd30
2025-11-18T00:25:27.603 [DEBUG] [Thread-63942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:25:27.621 [DEBUG] [Thread-63942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:25:27.621 [INFO] [Thread-63942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:25:27.624 [DEBUG] [Thread-63942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:25:27.624 [DEBUG] [Thread-63942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:25:27.624 [DEBUG] [Thread-63942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] client lang: <none>
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] server lang: <none>
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] kex follows: False
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] Compression: none
2025-11-18T00:25:27.625 [DEBUG] [Thread-63942] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:25:27.642 [DEBUG] [Thread-63942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:25:27.642 [DEBUG] [Thread-63942] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:25:27.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:25:27.644 [DEBUG] [Thread-63942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:25:27.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:25:27.646 [DEBUG] [Thread-63942] [transport.py] [_log()] userauth is OK
2025-11-18T00:25:27.646 [DEBUG] [Thread-63942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:25:27.646 [DEBUG] [Thread-63942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:25:27.646 [DEBUG] [Thread-63942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:25:27.646 [DEBUG] [Thread-63942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:25:27.671 [INFO] [Thread-63942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:25:27.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:25:28.323 [DEBUG] [Thread-63942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:25:28.323 [DEBUG] [Thread-63942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:25:28.323 [DEBUG] [Thread-63942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:25:28.364 [DEBUG] [Thread-63942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:25:28.364 [DEBUG] [Thread-63942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:25:28.367 [DEBUG] [Thread-63942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:25:28.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:25:28.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:25:28.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:25:28.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:25:28.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:25:28.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:25:28.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.933725 -999.00  +13.40  13.92     52   +3.70 1 1 1 1 1     0    0 10.48 40.45 ZNESW 15.5 13.9 151.7 21.0 13.8 -23.1 13.8 -21.8 13.6 -21.7 13.8 -22.9
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.933725
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:25:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:25:21', tmtdew=10.84, humidity=47.65, cloud=0.0, wind=22.9, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:25:21', seeing=1.79, atlas_timestamp='2025-11-17T22:24:33.840', atlas_cloud=1, atlas_rain=1, zp_data=[0.17074999999999996, 0.1592500000000001, 0.24125000000000085, 0.22949999999999982, 0.2524999999999995, 0.21825000000000117, 0.07199999999999918, 0.047750000000000625, 0.067499999999999, 0.21600000000000108, 0.42074999999999996, 0.3020000000000014, 0.3335000000000008, 0.18425000000000047, 0.022499999999999076, 0.0030000000000001137, 0.045249999999999346, 0.30599999999999916, 0.661999999999999, 0.39924999999999855, 0.2679999999999989, 0.12824999999999775, 0.0912500000000005, 0.05025000000000013, 0.023999999999999133, 0.3055000000000003, 0.9417499999999999, 0.44650000000000034, 0.25950000000000006, 0.10600000000000165, 0.30400000000000116, 0.038000000000000256, -0.013750000000001705], zp_timestamp='2025-11-17T22:21:00')
2025-11-18T00:25:28.387 [DEBUG] [Thread-63942] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:25:28.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:25:28.470 [DEBUG] [Thread-63945] [transport.py] [_log()] starting thread (client mode): 0xd07a96f0
2025-11-18T00:25:28.471 [DEBUG] [Thread-63945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:25:28.486 [DEBUG] [Thread-63945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:25:28.487 [INFO] [Thread-63945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] client lang: <none>
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] server lang: <none>
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] kex follows: False
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] Compression: none
2025-11-18T00:25:28.494 [DEBUG] [Thread-63945] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:25:28.551 [DEBUG] [Thread-63945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:25:28.551 [DEBUG] [Thread-63945] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:25:28.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:25:28.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:25:28.552 [DEBUG] [Thread-63945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:25:28.608 [DEBUG] [Thread-63945] [transport.py] [_log()] userauth is OK
2025-11-18T00:25:28.608 [DEBUG] [Thread-63945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:25:28.608 [DEBUG] [Thread-63945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:25:28.608 [DEBUG] [Thread-63945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:25:28.608 [DEBUG] [Thread-63945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:25:28.624 [INFO] [Thread-63945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:25:28.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:25:28.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:25:29.509 [DEBUG] [Thread-63945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:25:29.509 [DEBUG] [Thread-63945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:25:29.557 [DEBUG] [Thread-63945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:25:29.557 [DEBUG] [Thread-63945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:25:29.565 [DEBUG] [Thread-63945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:25:29.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:25:29.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:25:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:25:29.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:25:29.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:25:29.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:25:29.596 [DEBUG] [Thread-63945] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:25:33.101 [DEBUG] [Thread-63947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:25:48.133 [DEBUG] [Thread-63948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:25:54.295 [DEBUG] [Thread-63949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:25:59.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:25:59.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:25:59.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:26:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 25, 53), 11.07, 46.9, 0.0, 22.18, 13.29, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:26:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:25:53
2025-11-18T00:26:00.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:26:00.512 [DEBUG] [Thread-63950] [transport.py] [_log()] starting thread (client mode): 0xd317ef20
2025-11-18T00:26:00.512 [DEBUG] [Thread-63950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:26:00.532 [DEBUG] [Thread-63950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:26:00.532 [INFO] [Thread-63950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:26:00.535 [DEBUG] [Thread-63950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:26:00.535 [DEBUG] [Thread-63950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:26:00.535 [DEBUG] [Thread-63950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:26:00.535 [DEBUG] [Thread-63950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:26:00.535 [DEBUG] [Thread-63950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:26:00.535 [DEBUG] [Thread-63950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:26:00.535 [DEBUG] [Thread-63950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] client lang: <none>
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] server lang: <none>
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] kex follows: False
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] Compression: none
2025-11-18T00:26:00.536 [DEBUG] [Thread-63950] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:26:00.557 [DEBUG] [Thread-63950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:26:00.557 [DEBUG] [Thread-63950] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:26:00.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:26:00.558 [DEBUG] [Thread-63950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:26:00.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:26:00.561 [DEBUG] [Thread-63950] [transport.py] [_log()] userauth is OK
2025-11-18T00:26:00.561 [DEBUG] [Thread-63950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:26:00.561 [DEBUG] [Thread-63950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:26:00.561 [DEBUG] [Thread-63950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:26:00.561 [DEBUG] [Thread-63950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:26:00.587 [INFO] [Thread-63950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:26:00.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:26:01.217 [DEBUG] [Thread-63950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:26:01.217 [DEBUG] [Thread-63950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:26:01.218 [DEBUG] [Thread-63950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:26:01.259 [DEBUG] [Thread-63950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:26:01.259 [DEBUG] [Thread-63950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:26:01.262 [DEBUG] [Thread-63950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:26:01.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:26:01.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:26:01.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:26:01.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:26:01.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:26:01.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:26:01.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:26:01.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:26:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:26:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.934072 -999.00  +13.30  17.63     52   +3.70 1 1 1 1 1     0    0 10.42 44.38 ZNESW 19.5 17.6 143.2 22.9 13.9 -23.2 13.8 -21.9 13.6 -21.8 13.8 -22.8
2025-11-18T00:26:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:26:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:26:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.934072
2025-11-18T00:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:26:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:26:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:26:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:26:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:25:53', tmtdew=11.07, humidity=46.9, cloud=0.0, wind=22.18, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:25:53', seeing=1.87, atlas_timestamp='2025-11-17T22:25:03.821', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:25:00')
2025-11-18T00:26:01.287 [DEBUG] [Thread-63950] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:26:01.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:26:01.387 [DEBUG] [Thread-63953] [transport.py] [_log()] starting thread (client mode): 0xd317ca60
2025-11-18T00:26:01.387 [DEBUG] [Thread-63953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:26:01.402 [DEBUG] [Thread-63953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:26:01.402 [INFO] [Thread-63953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:26:01.409 [DEBUG] [Thread-63953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:26:01.409 [DEBUG] [Thread-63953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:26:01.409 [DEBUG] [Thread-63953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:26:01.409 [DEBUG] [Thread-63953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:26:01.409 [DEBUG] [Thread-63953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:26:01.409 [DEBUG] [Thread-63953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:26:01.409 [DEBUG] [Thread-63953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:26:01.409 [DEBUG] [Thread-63953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] client lang: <none>
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] server lang: <none>
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] kex follows: False
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] Compression: none
2025-11-18T00:26:01.410 [DEBUG] [Thread-63953] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:26:01.468 [DEBUG] [Thread-63953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:26:01.468 [DEBUG] [Thread-63953] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:26:01.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:26:01.469 [DEBUG] [Thread-63953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:26:01.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:26:01.524 [DEBUG] [Thread-63953] [transport.py] [_log()] userauth is OK
2025-11-18T00:26:01.524 [DEBUG] [Thread-63953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:26:01.524 [DEBUG] [Thread-63953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:26:01.524 [DEBUG] [Thread-63953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:26:01.524 [DEBUG] [Thread-63953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:26:01.544 [INFO] [Thread-63953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:26:01.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:26:01.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:26:02.393 [DEBUG] [Thread-63953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:26:02.393 [DEBUG] [Thread-63953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:26:02.441 [DEBUG] [Thread-63953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:26:02.441 [DEBUG] [Thread-63953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:26:02.450 [DEBUG] [Thread-63953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:26:02.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:26:02.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:26:02.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:26:02.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:26:02.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:26:02.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:26:02.499 [DEBUG] [Thread-63953] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:26:03.162 [DEBUG] [Thread-63955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:26:18.209 [DEBUG] [Thread-63956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:26:26.331 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:26:26.332 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:26:32.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:26:32.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:26:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:26:33.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 26, 25), 11.16, 46.61, 0.0, 22.04, 13.33, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:26:33.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:26:25
2025-11-18T00:26:33.239 [DEBUG] [Thread-63957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:26:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:26:33.440 [DEBUG] [Thread-63958] [transport.py] [_log()] starting thread (client mode): 0xd317e320
2025-11-18T00:26:33.440 [DEBUG] [Thread-63958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:26:33.455 [DEBUG] [Thread-63958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:26:33.455 [INFO] [Thread-63958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] client lang: <none>
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] server lang: <none>
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] kex follows: False
2025-11-18T00:26:33.458 [DEBUG] [Thread-63958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:26:33.459 [DEBUG] [Thread-63958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:26:33.459 [DEBUG] [Thread-63958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:26:33.459 [DEBUG] [Thread-63958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:26:33.459 [DEBUG] [Thread-63958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:26:33.459 [DEBUG] [Thread-63958] [transport.py] [_log()] Compression: none
2025-11-18T00:26:33.459 [DEBUG] [Thread-63958] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:26:33.475 [DEBUG] [Thread-63958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:26:33.475 [DEBUG] [Thread-63958] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:26:33.476 [DEBUG] [Thread-63958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:26:33.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:26:33.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:26:33.481 [DEBUG] [Thread-63958] [transport.py] [_log()] userauth is OK
2025-11-18T00:26:33.482 [DEBUG] [Thread-63958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:26:33.482 [DEBUG] [Thread-63958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:26:33.482 [DEBUG] [Thread-63958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:26:33.482 [DEBUG] [Thread-63958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:26:33.500 [INFO] [Thread-63958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:26:33.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:26:34.130 [DEBUG] [Thread-63958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:26:34.130 [DEBUG] [Thread-63958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:26:34.130 [DEBUG] [Thread-63958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:26:34.170 [DEBUG] [Thread-63958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:26:34.170 [DEBUG] [Thread-63958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:26:34.173 [DEBUG] [Thread-63958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:26:34.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:26:34.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:26:34.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:26:34.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:26:34.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:26:34.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:26:34.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:26:34.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:26:34.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:26:34.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.934420 -999.00  +13.30  15.11     51   +3.70 1 1 1 1 1     0    0 10.71 45.16 ZNESW 14.5 15.1 154.6 21.5 13.8 -23.2 13.7 -21.8 13.6 -21.5 13.8 -22.8
2025-11-18T00:26:34.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:26:34.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:26:34.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.934420
2025-11-18T00:26:34.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:26:34.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:26:34.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:26:34.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:26:34.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:26:34.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:26:25', tmtdew=11.16, humidity=46.61, cloud=0.0, wind=22.04, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:26:25', seeing=1.79, atlas_timestamp='2025-11-17T22:25:33.888', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:25:00')
2025-11-18T00:26:34.201 [DEBUG] [Thread-63958] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:26:34.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:26:34.299 [DEBUG] [Thread-63961] [transport.py] [_log()] starting thread (client mode): 0xd317eb30
2025-11-18T00:26:34.299 [DEBUG] [Thread-63961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:26:34.315 [DEBUG] [Thread-63961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:26:34.315 [INFO] [Thread-63961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:26:34.327 [DEBUG] [Thread-63961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] client lang: <none>
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] server lang: <none>
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] kex follows: False
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] Compression: none
2025-11-18T00:26:34.328 [DEBUG] [Thread-63961] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:26:34.380 [DEBUG] [Thread-63961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:26:34.380 [DEBUG] [Thread-63961] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:26:34.381 [DEBUG] [Thread-63961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:26:34.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:26:34.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:26:34.436 [DEBUG] [Thread-63961] [transport.py] [_log()] userauth is OK
2025-11-18T00:26:34.436 [DEBUG] [Thread-63961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:26:34.436 [DEBUG] [Thread-63961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:26:34.436 [DEBUG] [Thread-63961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:26:34.436 [DEBUG] [Thread-63961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:26:34.455 [INFO] [Thread-63961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:26:34.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:26:34.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:26:35.323 [DEBUG] [Thread-63961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:26:35.323 [DEBUG] [Thread-63961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:26:35.370 [DEBUG] [Thread-63961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:26:35.370 [DEBUG] [Thread-63961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:26:35.379 [DEBUG] [Thread-63961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:26:35.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:26:35.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:26:35.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:26:35.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:26:35.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:26:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:26:35.414 [DEBUG] [Thread-63961] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:26:48.264 [DEBUG] [Thread-63963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:26:54.357 [DEBUG] [Thread-63964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:03.295 [DEBUG] [Thread-63965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:05.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:27:05.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:27:05.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:27:06.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 26, 57), 11.26, 46.46, 0.0, 21.0, 13.39, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:27:06.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:26:57
2025-11-18T00:27:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:27:06.375 [DEBUG] [Thread-63966] [transport.py] [_log()] starting thread (client mode): 0xd317d5a0
2025-11-18T00:27:06.375 [DEBUG] [Thread-63966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:27:06.395 [DEBUG] [Thread-63966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:27:06.396 [INFO] [Thread-63966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:27:06.398 [DEBUG] [Thread-63966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] client lang: <none>
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] server lang: <none>
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] kex follows: False
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] Compression: none
2025-11-18T00:27:06.399 [DEBUG] [Thread-63966] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:27:06.416 [DEBUG] [Thread-63966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:27:06.416 [DEBUG] [Thread-63966] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:27:06.417 [DEBUG] [Thread-63966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:27:06.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:27:06.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:27:06.461 [DEBUG] [Thread-63966] [transport.py] [_log()] userauth is OK
2025-11-18T00:27:06.461 [DEBUG] [Thread-63966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:27:06.461 [DEBUG] [Thread-63966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:27:06.461 [DEBUG] [Thread-63966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:27:06.461 [DEBUG] [Thread-63966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:27:06.485 [INFO] [Thread-63966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:27:06.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:27:07.129 [DEBUG] [Thread-63966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:27:07.129 [DEBUG] [Thread-63966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:27:07.129 [DEBUG] [Thread-63966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:27:07.170 [DEBUG] [Thread-63966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:27:07.171 [DEBUG] [Thread-63966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:27:07.173 [DEBUG] [Thread-63966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:27:07.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:27:07.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:27:07.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:27:07.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:27:07.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:27:07.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:27:07.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:27:07.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:27:07.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:27:07.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.935114 -999.00  +13.40  12.43     51   +3.60 1 1 1 1 1     0    0 10.97 49.06 ZNESW 14.4 12.4 140.4 17.1 13.8 -23.2 13.7 -21.8 13.6 -21.5 13.8 -22.7
2025-11-18T00:27:07.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:27:07.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:27:07.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.935114
2025-11-18T00:27:07.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:27:07.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:27:07.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:27:07.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:27:07.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:27:07.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:26:57', tmtdew=11.26, humidity=46.46, cloud=0.0, wind=21.0, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:26:57', seeing=1.79, atlas_timestamp='2025-11-17T22:26:33.850', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:25:00')
2025-11-18T00:27:07.199 [DEBUG] [Thread-63966] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:27:07.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:27:07.294 [DEBUG] [Thread-63969] [transport.py] [_log()] starting thread (client mode): 0xd07a3b80
2025-11-18T00:27:07.294 [DEBUG] [Thread-63969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:27:07.312 [DEBUG] [Thread-63969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:27:07.313 [INFO] [Thread-63969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:27:07.320 [DEBUG] [Thread-63969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:27:07.320 [DEBUG] [Thread-63969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] client lang: <none>
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] server lang: <none>
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] kex follows: False
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] Compression: none
2025-11-18T00:27:07.321 [DEBUG] [Thread-63969] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:27:07.379 [DEBUG] [Thread-63969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:27:07.380 [DEBUG] [Thread-63969] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:27:07.380 [DEBUG] [Thread-63969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:27:07.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:27:07.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:27:07.436 [DEBUG] [Thread-63969] [transport.py] [_log()] userauth is OK
2025-11-18T00:27:07.436 [DEBUG] [Thread-63969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:27:07.436 [DEBUG] [Thread-63969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:27:07.436 [DEBUG] [Thread-63969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:27:07.436 [DEBUG] [Thread-63969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:27:07.455 [INFO] [Thread-63969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:27:07.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:27:07.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:27:08.303 [DEBUG] [Thread-63969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:27:08.303 [DEBUG] [Thread-63969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:27:08.350 [DEBUG] [Thread-63969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:27:08.350 [DEBUG] [Thread-63969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:27:08.358 [DEBUG] [Thread-63969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:27:08.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:27:08.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:27:08.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:27:08.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:27:08.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:27:08.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:27:08.390 [DEBUG] [Thread-63969] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:27:18.325 [DEBUG] [Thread-63971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:26.534 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:26.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:33.371 [DEBUG] [Thread-63972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:38.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:27:38.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:27:38.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:27:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 27, 29), 11.25, 46.49, 0.0, 22.66, 13.41, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:27:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:27:29
2025-11-18T00:27:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:27:39.350 [DEBUG] [Thread-63973] [transport.py] [_log()] starting thread (client mode): 0xd317cdc0
2025-11-18T00:27:39.350 [DEBUG] [Thread-63973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:27:39.370 [DEBUG] [Thread-63973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:27:39.370 [INFO] [Thread-63973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] client lang: <none>
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] server lang: <none>
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] kex follows: False
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] Compression: none
2025-11-18T00:27:39.372 [DEBUG] [Thread-63973] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:27:39.380 [DEBUG] [Thread-63973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:27:39.381 [DEBUG] [Thread-63973] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:27:39.381 [DEBUG] [Thread-63973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:27:39.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:27:39.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:27:39.389 [DEBUG] [Thread-63973] [transport.py] [_log()] userauth is OK
2025-11-18T00:27:39.389 [DEBUG] [Thread-63973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:27:39.389 [DEBUG] [Thread-63973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:27:39.389 [DEBUG] [Thread-63973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:27:39.389 [DEBUG] [Thread-63973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:27:39.407 [INFO] [Thread-63973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:27:39.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:27:40.043 [DEBUG] [Thread-63973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:27:40.043 [DEBUG] [Thread-63973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:27:40.044 [DEBUG] [Thread-63973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:27:40.084 [DEBUG] [Thread-63973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:27:40.084 [DEBUG] [Thread-63973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:27:40.086 [DEBUG] [Thread-63973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:27:40.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:27:40.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:27:40.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:27:40.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:27:40.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:27:40.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:27:40.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.935461 -999.00  +13.40  14.95     51   +3.60 1 1 1 1 1     0    0 10.99 45.89 ZNESW 19.4 14.9 147.4 23.4 13.8 -23.2 13.8 -21.7 13.5 -21.5 13.8 -22.6
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.935461
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:27:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:27:29', tmtdew=11.25, humidity=46.49, cloud=0.0, wind=22.66, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:27:29', seeing=1.79, atlas_timestamp='2025-11-17T22:27:03.830', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:25:00')
2025-11-18T00:27:40.104 [DEBUG] [Thread-63973] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:27:40.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:27:40.188 [DEBUG] [Thread-63976] [transport.py] [_log()] starting thread (client mode): 0xd0710310
2025-11-18T00:27:40.188 [DEBUG] [Thread-63976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:27:40.202 [DEBUG] [Thread-63976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:27:40.203 [INFO] [Thread-63976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:27:40.210 [DEBUG] [Thread-63976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:27:40.210 [DEBUG] [Thread-63976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:27:40.210 [DEBUG] [Thread-63976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:27:40.210 [DEBUG] [Thread-63976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:27:40.210 [DEBUG] [Thread-63976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:27:40.210 [DEBUG] [Thread-63976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:27:40.210 [DEBUG] [Thread-63976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] client lang: <none>
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] server lang: <none>
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] kex follows: False
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] Compression: none
2025-11-18T00:27:40.211 [DEBUG] [Thread-63976] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:27:40.267 [DEBUG] [Thread-63976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:27:40.267 [DEBUG] [Thread-63976] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:27:40.268 [DEBUG] [Thread-63976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:27:40.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:27:40.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:27:40.323 [DEBUG] [Thread-63976] [transport.py] [_log()] userauth is OK
2025-11-18T00:27:40.324 [DEBUG] [Thread-63976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:27:40.324 [DEBUG] [Thread-63976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:27:40.324 [DEBUG] [Thread-63976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:27:40.324 [DEBUG] [Thread-63976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:27:40.342 [INFO] [Thread-63976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:27:40.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:27:40.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:27:41.172 [DEBUG] [Thread-63976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:27:41.172 [DEBUG] [Thread-63976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:27:41.220 [DEBUG] [Thread-63976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:27:41.220 [DEBUG] [Thread-63976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:27:41.229 [DEBUG] [Thread-63976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:27:41.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:27:41.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:27: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') -> 00000000
2025-11-18T00:27:41.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:27:41.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:27:41.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:27:41.262 [DEBUG] [Thread-63976] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:27:43.570 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:48.400 [DEBUG] [Thread-63978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:53.330 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:54.440 [DEBUG] [Thread-63979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:27:57.390 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:28:03.433 [DEBUG] [Thread-63980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:28:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:28:11.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:28:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:28:11.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 28, 1), 11.29, 46.52, 0.0, 23.26, 13.39, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:28:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:28:01
2025-11-18T00:28:12.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:28:12.219 [DEBUG] [Thread-63981] [transport.py] [_log()] starting thread (client mode): 0xd07a3280
2025-11-18T00:28:12.219 [DEBUG] [Thread-63981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:28:12.234 [DEBUG] [Thread-63981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:28:12.234 [INFO] [Thread-63981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:28:12.237 [DEBUG] [Thread-63981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:28:12.237 [DEBUG] [Thread-63981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] client lang: <none>
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] server lang: <none>
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] kex follows: False
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] Compression: none
2025-11-18T00:28:12.238 [DEBUG] [Thread-63981] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:28:12.256 [DEBUG] [Thread-63981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:28:12.257 [DEBUG] [Thread-63981] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:28:12.257 [DEBUG] [Thread-63981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:28:12.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:28:12.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:28:12.259 [DEBUG] [Thread-63981] [transport.py] [_log()] userauth is OK
2025-11-18T00:28:12.260 [DEBUG] [Thread-63981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:28:12.260 [DEBUG] [Thread-63981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:28:12.260 [DEBUG] [Thread-63981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:28:12.260 [DEBUG] [Thread-63981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:28:12.285 [INFO] [Thread-63981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:28:12.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:28:12.913 [DEBUG] [Thread-63981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:28:12.913 [DEBUG] [Thread-63981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:28:12.913 [DEBUG] [Thread-63981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:28:12.954 [DEBUG] [Thread-63981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:28:12.955 [DEBUG] [Thread-63981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:28:12.957 [DEBUG] [Thread-63981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:28:12.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:28:12.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:28:12.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:28:12.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:28:12.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:28:12.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:28:12.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:28:12.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:28:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:28:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.935808 -999.00  +13.40  18.72     50   +3.40 1 1 1 1 1     0    0 11.20 47.90 ZNESW 17.0 18.7 151.0 24.3 13.9 -23.1 13.7 -21.7 13.5 -21.4 13.8 -22.4
2025-11-18T00:28:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:28:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:28:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.935808
2025-11-18T00:28:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:28:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:28:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:28:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:28:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:28:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:28:01', tmtdew=11.29, humidity=46.52, cloud=0.0, wind=23.26, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:28:01', seeing=1.79, atlas_timestamp='2025-11-17T22:27:33.811', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:25:00')
2025-11-18T00:28:12.981 [DEBUG] [Thread-63981] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:28:13.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:28:13.081 [DEBUG] [Thread-63984] [transport.py] [_log()] starting thread (client mode): 0xd3151ba0
2025-11-18T00:28:13.081 [DEBUG] [Thread-63984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:28:13.097 [DEBUG] [Thread-63984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:28:13.097 [INFO] [Thread-63984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:28:13.104 [DEBUG] [Thread-63984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:28:13.104 [DEBUG] [Thread-63984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:28:13.104 [DEBUG] [Thread-63984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:28:13.104 [DEBUG] [Thread-63984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:28:13.104 [DEBUG] [Thread-63984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] client lang: <none>
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] server lang: <none>
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] kex follows: False
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] Compression: none
2025-11-18T00:28:13.105 [DEBUG] [Thread-63984] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:28:13.163 [DEBUG] [Thread-63984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:28:13.163 [DEBUG] [Thread-63984] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:28:13.164 [DEBUG] [Thread-63984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:28:13.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:28:13.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:28:13.223 [DEBUG] [Thread-63984] [transport.py] [_log()] userauth is OK
2025-11-18T00:28:13.223 [DEBUG] [Thread-63984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:28:13.224 [DEBUG] [Thread-63984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:28:13.224 [DEBUG] [Thread-63984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:28:13.224 [DEBUG] [Thread-63984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:28:13.242 [INFO] [Thread-63984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:28:13.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:28:13.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:28:14.057 [DEBUG] [Thread-63984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:28:14.058 [DEBUG] [Thread-63984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:28:14.108 [DEBUG] [Thread-63984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:28:14.108 [DEBUG] [Thread-63984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:28:14.117 [DEBUG] [Thread-63984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:28:14.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:28:14.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:28:14.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:28:14.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:28:14.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:28:14.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:28:14.151 [DEBUG] [Thread-63984] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:28:18.460 [DEBUG] [Thread-63986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:28:26.737 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:28:26.738 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:28:33.500 [DEBUG] [Thread-63987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:28:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:28:44.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:28:44.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
2025-11-18T00:28:44.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 28, 33), 11.31, 46.46, 0.0, 22.39, 13.39, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:28:44.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:28:33
2025-11-18T00:28:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:28:45.145 [DEBUG] [Thread-63988] [transport.py] [_log()] starting thread (client mode): 0xd0710190
2025-11-18T00:28:45.145 [DEBUG] [Thread-63988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:28:45.166 [DEBUG] [Thread-63988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:28:45.167 [INFO] [Thread-63988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] client lang: <none>
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] server lang: <none>
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] kex follows: False
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] Compression: none
2025-11-18T00:28:45.169 [DEBUG] [Thread-63988] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:28:45.181 [DEBUG] [Thread-63988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:28:45.181 [DEBUG] [Thread-63988] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:28:45.181 [DEBUG] [Thread-63988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:28:45.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:28:45.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:28:45.182 [DEBUG] [Thread-63988] [transport.py] [_log()] userauth is OK
2025-11-18T00:28:45.182 [DEBUG] [Thread-63988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:28:45.182 [DEBUG] [Thread-63988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:28:45.182 [DEBUG] [Thread-63988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:28:45.182 [DEBUG] [Thread-63988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:28:45.197 [INFO] [Thread-63988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:28:45.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:28:45.940 [DEBUG] [Thread-63988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:28:45.941 [DEBUG] [Thread-63988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:28:45.941 [DEBUG] [Thread-63988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:28:45.982 [DEBUG] [Thread-63988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:28:45.982 [DEBUG] [Thread-63988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:28:45.984 [DEBUG] [Thread-63988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:28:45.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:28:45.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:28:45.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:28:45.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:28:46.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:28:46.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:28:46.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:28:46.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:28:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:28:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.936156 -999.00  +13.40  15.82     51   +3.50 1 1 1 1 1     0    0 10.78 48.87 ZNESW 13.0 15.8 159.4 19.5 13.8 -23.1 13.8 -21.7 13.5 -21.3 13.8 -22.4
2025-11-18T00:28:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:28:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:28:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.936156
2025-11-18T00:28:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:28:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:28:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:28:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:28:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:28:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:28:33', tmtdew=11.31, humidity=46.46, cloud=0.0, wind=22.39, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:28:33', seeing=2.41, atlas_timestamp='2025-11-17T22:28:03.878', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:27:00')
2025-11-18T00:28:46.002 [DEBUG] [Thread-63988] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:28:46.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:28:46.087 [DEBUG] [Thread-63991] [transport.py] [_log()] starting thread (client mode): 0xd0711d80
2025-11-18T00:28:46.087 [DEBUG] [Thread-63991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:28:46.101 [DEBUG] [Thread-63991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:28:46.101 [INFO] [Thread-63991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:28:46.108 [DEBUG] [Thread-63991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] client lang: <none>
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] server lang: <none>
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] kex follows: False
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] Compression: none
2025-11-18T00:28:46.109 [DEBUG] [Thread-63991] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:28:46.166 [DEBUG] [Thread-63991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:28:46.166 [DEBUG] [Thread-63991] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:28:46.166 [DEBUG] [Thread-63991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:28:46.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:28:46.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:28:46.223 [DEBUG] [Thread-63991] [transport.py] [_log()] userauth is OK
2025-11-18T00:28:46.223 [DEBUG] [Thread-63991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:28:46.223 [DEBUG] [Thread-63991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:28:46.223 [DEBUG] [Thread-63991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:28:46.223 [DEBUG] [Thread-63991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:28:46.241 [INFO] [Thread-63991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:28:46.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:28:46.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:28:47.101 [DEBUG] [Thread-63991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:28:47.101 [DEBUG] [Thread-63991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:28:47.149 [DEBUG] [Thread-63991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:28:47.149 [DEBUG] [Thread-63991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:28:47.157 [DEBUG] [Thread-63991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:28:47.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:28:47.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:28:47.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:28:47.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:28:47.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:28:47.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:28:47.191 [DEBUG] [Thread-63991] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:28:48.528 [DEBUG] [Thread-63993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:28:54.517 [DEBUG] [Thread-63994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:29:03.569 [DEBUG] [Thread-63995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:29:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:29:17.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:29:17.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:29:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 29, 5), 11.27, 46.57, 0.0, 23.19, 13.34, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:29:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:29:05
2025-11-18T00:29:17.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:29:18.133 [DEBUG] [Thread-63996] [transport.py] [_log()] starting thread (client mode): 0xd0711e40
2025-11-18T00:29:18.134 [DEBUG] [Thread-63996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:29:18.154 [DEBUG] [Thread-63996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:29:18.154 [INFO] [Thread-63996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:29:18.157 [DEBUG] [Thread-63996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] client lang: <none>
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] server lang: <none>
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] kex follows: False
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] Compression: none
2025-11-18T00:29:18.158 [DEBUG] [Thread-63996] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:29:18.175 [DEBUG] [Thread-63996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:29:18.176 [DEBUG] [Thread-63996] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:29:18.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:29:18.177 [DEBUG] [Thread-63996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:29:18.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:29:18.179 [DEBUG] [Thread-63996] [transport.py] [_log()] userauth is OK
2025-11-18T00:29:18.179 [DEBUG] [Thread-63996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:29:18.179 [DEBUG] [Thread-63996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:29:18.179 [DEBUG] [Thread-63996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:29:18.179 [DEBUG] [Thread-63996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:29:18.204 [INFO] [Thread-63996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:29:18.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:29:18.604 [DEBUG] [Thread-63998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:29:18.856 [DEBUG] [Thread-63996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:29:18.856 [DEBUG] [Thread-63996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:29:18.856 [DEBUG] [Thread-63996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:29:18.897 [DEBUG] [Thread-63996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:29:18.898 [DEBUG] [Thread-63996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:29:18.900 [DEBUG] [Thread-63996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:29:18.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:29:18.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:29:18.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:29:18.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:29:18.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:29:18.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:29:18.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:29:18.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:29:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:29:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.936503 -999.00  +13.40  12.59     51   +3.60 1 1 1 1 1     0    0 10.95 48.35 ZNESW 18.6 12.6 143.2 18.9 13.8 -23.1 13.8 -21.6 13.6 -21.4 13.8 -22.3
2025-11-18T00:29:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:29:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:29:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.936503
2025-11-18T00:29:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:29:18.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:29:18.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:29:18.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:29:18.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:29:18.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:29:05', tmtdew=11.27, humidity=46.57, cloud=0.0, wind=23.19, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:29:05', seeing=2.14, atlas_timestamp='2025-11-17T22:28:33.859', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:27:00')
2025-11-18T00:29:18.926 [DEBUG] [Thread-63996] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:29:19.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:29:19.030 [DEBUG] [Thread-64000] [transport.py] [_log()] starting thread (client mode): 0xd317ce20
2025-11-18T00:29:19.030 [DEBUG] [Thread-64000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:29:19.044 [DEBUG] [Thread-64000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:29:19.045 [INFO] [Thread-64000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] client lang: <none>
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] server lang: <none>
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] kex follows: False
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:29:19.052 [DEBUG] [Thread-64000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:29:19.053 [DEBUG] [Thread-64000] [transport.py] [_log()] Compression: none
2025-11-18T00:29:19.053 [DEBUG] [Thread-64000] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:29:19.115 [DEBUG] [Thread-64000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:29:19.115 [DEBUG] [Thread-64000] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:29:19.115 [DEBUG] [Thread-64000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:29:19.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:29:19.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:29:19.171 [DEBUG] [Thread-64000] [transport.py] [_log()] userauth is OK
2025-11-18T00:29:19.172 [DEBUG] [Thread-64000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:29:19.172 [DEBUG] [Thread-64000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:29:19.172 [DEBUG] [Thread-64000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:29:19.172 [DEBUG] [Thread-64000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:29:19.195 [INFO] [Thread-64000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:29:19.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:29:19.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:29:20.013 [DEBUG] [Thread-64000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:29:20.013 [DEBUG] [Thread-64000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:29:20.060 [DEBUG] [Thread-64000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:29:20.060 [DEBUG] [Thread-64000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:29:20.069 [DEBUG] [Thread-64000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:29:20.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:29:20.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:29:20.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:29:20.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:29:20.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:29:20.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:29:20.102 [DEBUG] [Thread-64000] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:29:26.943 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:29:26.944 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:29:33.633 [DEBUG] [Thread-64002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:29:48.675 [DEBUG] [Thread-64003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:29:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:29:50.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:29:50.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:29:50.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 29, 37), 11.12, 46.57, 0.0, 22.02, 13.28, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:29:50.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:29:37
2025-11-18T00:29:50.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:29:51.043 [DEBUG] [Thread-64004] [transport.py] [_log()] starting thread (client mode): 0xd3150d30
2025-11-18T00:29:51.044 [DEBUG] [Thread-64004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:29:51.064 [DEBUG] [Thread-64004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:29:51.064 [INFO] [Thread-64004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:29:51.067 [DEBUG] [Thread-64004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] client lang: <none>
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] server lang: <none>
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] kex follows: False
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] Compression: none
2025-11-18T00:29:51.068 [DEBUG] [Thread-64004] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:29:51.086 [DEBUG] [Thread-64004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:29:51.087 [DEBUG] [Thread-64004] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:29:51.087 [DEBUG] [Thread-64004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:29:51.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:29:51.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:29:51.089 [DEBUG] [Thread-64004] [transport.py] [_log()] userauth is OK
2025-11-18T00:29:51.089 [DEBUG] [Thread-64004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:29:51.089 [DEBUG] [Thread-64004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:29:51.089 [DEBUG] [Thread-64004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:29:51.090 [DEBUG] [Thread-64004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:29:51.105 [INFO] [Thread-64004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:29:51.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:29:51.869 [DEBUG] [Thread-64004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:29:51.870 [DEBUG] [Thread-64004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:29:51.870 [DEBUG] [Thread-64004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:29:51.910 [DEBUG] [Thread-64004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:29:51.910 [DEBUG] [Thread-64004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:29:51.913 [DEBUG] [Thread-64004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:29:51.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:29:51.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:29:51.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:29:51.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:29:51.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:29:51.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:29:51.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:29:51.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.936851 -999.00  +13.40  13.06     51   +3.60 1 1 1 1 1     0    0 11.20 46.32 ZNESW 13.8 13.1 147.8 21.9 13.8 -23.0 13.7 -21.5 13.5 -21.1 13.8 -22.1
2025-11-18T00:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.936851
2025-11-18T00:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:29:37', tmtdew=11.12, humidity=46.57, cloud=0.0, wind=22.02, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:29:37', seeing=2.06, atlas_timestamp='2025-11-17T22:29:03.926', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:27:00')
2025-11-18T00:29:51.936 [DEBUG] [Thread-64004] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:29:52.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:29:52.034 [DEBUG] [Thread-64007] [transport.py] [_log()] starting thread (client mode): 0xd0756680
2025-11-18T00:29:52.034 [DEBUG] [Thread-64007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:29:52.049 [DEBUG] [Thread-64007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:29:52.049 [INFO] [Thread-64007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:29:52.056 [DEBUG] [Thread-64007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:29:52.056 [DEBUG] [Thread-64007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] client lang: <none>
2025-11-18T00:29:52.057 [DEBUG] [Thread-64007] [transport.py] [_log()] server lang: <none>
2025-11-18T00:29:52.058 [DEBUG] [Thread-64007] [transport.py] [_log()] kex follows: False
2025-11-18T00:29:52.058 [DEBUG] [Thread-64007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:29:52.058 [DEBUG] [Thread-64007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:29:52.058 [DEBUG] [Thread-64007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:29:52.058 [DEBUG] [Thread-64007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:29:52.058 [DEBUG] [Thread-64007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:29:52.058 [DEBUG] [Thread-64007] [transport.py] [_log()] Compression: none
2025-11-18T00:29:52.058 [DEBUG] [Thread-64007] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:29:52.115 [DEBUG] [Thread-64007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:29:52.116 [DEBUG] [Thread-64007] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:29:52.116 [DEBUG] [Thread-64007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:29:52.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:29:52.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:29:52.175 [DEBUG] [Thread-64007] [transport.py] [_log()] userauth is OK
2025-11-18T00:29:52.176 [DEBUG] [Thread-64007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:29:52.176 [DEBUG] [Thread-64007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:29:52.176 [DEBUG] [Thread-64007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:29:52.176 [DEBUG] [Thread-64007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:29:52.197 [INFO] [Thread-64007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:29:52.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:29:52.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:29:53.125 [DEBUG] [Thread-64007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:29:53.125 [DEBUG] [Thread-64007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:29:53.172 [DEBUG] [Thread-64007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:29:53.172 [DEBUG] [Thread-64007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:29:53.182 [DEBUG] [Thread-64007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:29:53.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:29:53.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:29:53.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:29:53.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:29:53.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:29:53.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:29:53.219 [DEBUG] [Thread-64007] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:29:54.596 [DEBUG] [Thread-64009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:30:03.704 [DEBUG] [Thread-64010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:30:18.735 [DEBUG] [Thread-64011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:30:23.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:30:23.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:30:23.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:30:23.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 30, 9), 11.18, 46.37, 0.0, 20.91, 13.21, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:30:23.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:30:09
2025-11-18T00:30:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:30:24.160 [DEBUG] [Thread-64012] [transport.py] [_log()] starting thread (client mode): 0xd0711fc0
2025-11-18T00:30:24.161 [DEBUG] [Thread-64012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:30:24.180 [DEBUG] [Thread-64012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:30:24.180 [INFO] [Thread-64012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] client lang: <none>
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] server lang: <none>
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] kex follows: False
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] Compression: none
2025-11-18T00:30:24.182 [DEBUG] [Thread-64012] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:30:24.189 [DEBUG] [Thread-64012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:30:24.189 [DEBUG] [Thread-64012] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:30:24.189 [DEBUG] [Thread-64012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:30:24.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:30:24.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:30:24.190 [DEBUG] [Thread-64012] [transport.py] [_log()] userauth is OK
2025-11-18T00:30:24.190 [DEBUG] [Thread-64012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:30:24.190 [DEBUG] [Thread-64012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:30:24.190 [DEBUG] [Thread-64012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:30:24.190 [DEBUG] [Thread-64012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:30:24.200 [INFO] [Thread-64012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:30:24.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:30:24.809 [DEBUG] [Thread-64012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:30:24.809 [DEBUG] [Thread-64012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:30:24.809 [DEBUG] [Thread-64012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:30:24.851 [DEBUG] [Thread-64012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:30:24.851 [DEBUG] [Thread-64012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:30:24.854 [DEBUG] [Thread-64012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:30:24.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:30:24.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:30:24.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:30:24.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:30:24.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:30:24.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:30:24.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:30:24.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:30:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:30:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.937544 -999.00  +13.40  16.01     51   +3.50 1 1 1 1 1     0    0 11.07 43.97 ZNESW 14.3 16.0 144.2 21.4 13.9 -22.9 13.7 -21.3 13.5 -21.0 13.8 -22.2
2025-11-18T00:30:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:30:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:30:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.937544
2025-11-18T00:30:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:30:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:30:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:30:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:30:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:30:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:30:09', tmtdew=11.18, humidity=46.37, cloud=0.0, wind=20.91, temperature=13.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:30:09', seeing=1.85, atlas_timestamp='2025-11-17T22:30:03.802', atlas_cloud=1, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:27:00')
2025-11-18T00:30:24.878 [DEBUG] [Thread-64012] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:30:24.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:30:24.974 [DEBUG] [Thread-64015] [transport.py] [_log()] starting thread (client mode): 0xd31517b0
2025-11-18T00:30:24.975 [DEBUG] [Thread-64015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:30:24.989 [DEBUG] [Thread-64015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:30:24.990 [INFO] [Thread-64015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:30:24.997 [DEBUG] [Thread-64015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] client lang: <none>
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] server lang: <none>
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] kex follows: False
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] Compression: none
2025-11-18T00:30:24.998 [DEBUG] [Thread-64015] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:30:25.055 [DEBUG] [Thread-64015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:30:25.055 [DEBUG] [Thread-64015] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:30:25.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:30:25.056 [DEBUG] [Thread-64015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:30:25.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:30:25.115 [DEBUG] [Thread-64015] [transport.py] [_log()] userauth is OK
2025-11-18T00:30:25.115 [DEBUG] [Thread-64015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:30:25.115 [DEBUG] [Thread-64015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:30:25.116 [DEBUG] [Thread-64015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:30:25.116 [DEBUG] [Thread-64015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:30:25.135 [INFO] [Thread-64015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:30:25.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:30:25.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:30:25.985 [DEBUG] [Thread-64015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:30:25.985 [DEBUG] [Thread-64015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:30:26.033 [DEBUG] [Thread-64015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:30:26.034 [DEBUG] [Thread-64015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:30:26.042 [DEBUG] [Thread-64015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:30:26.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:30:26.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:30:26.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:30:26.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:30:26.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:30:26.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:30:26.077 [DEBUG] [Thread-64015] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:30:27.148 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:30:27.150 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:30:33.767 [DEBUG] [Thread-64017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:30:48.805 [DEBUG] [Thread-64018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:30:54.680 [DEBUG] [Thread-64019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:30:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:30:56.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:30:56.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:30:56.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 30, 41), 11.26, 46.42, 0.0, 20.52, 13.29, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:30:56.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:30:41
2025-11-18T00:30:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:30:57.019 [DEBUG] [Thread-64020] [transport.py] [_log()] starting thread (client mode): 0xd3151a20
2025-11-18T00:30:57.019 [DEBUG] [Thread-64020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:30:57.039 [DEBUG] [Thread-64020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:30:57.039 [INFO] [Thread-64020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:30:57.042 [DEBUG] [Thread-64020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] client lang: <none>
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] server lang: <none>
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] kex follows: False
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] Compression: none
2025-11-18T00:30:57.043 [DEBUG] [Thread-64020] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:30:57.060 [DEBUG] [Thread-64020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:30:57.061 [DEBUG] [Thread-64020] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:30:57.061 [DEBUG] [Thread-64020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:30:57.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:30:57.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:30:57.063 [DEBUG] [Thread-64020] [transport.py] [_log()] userauth is OK
2025-11-18T00:30:57.063 [DEBUG] [Thread-64020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:30:57.063 [DEBUG] [Thread-64020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:30:57.063 [DEBUG] [Thread-64020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:30:57.063 [DEBUG] [Thread-64020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:30:57.087 [INFO] [Thread-64020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:30:57.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:30:57.730 [DEBUG] [Thread-64020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:30:57.730 [DEBUG] [Thread-64020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:30:57.731 [DEBUG] [Thread-64020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:30:57.771 [DEBUG] [Thread-64020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:30:57.772 [DEBUG] [Thread-64020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:30:57.774 [DEBUG] [Thread-64020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:30:57.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:30:57.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:30:57.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:30:57.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:30:57.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:30:57.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:30:57.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:30:57.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:30:57.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:30:57.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.937892 -999.00  +13.40  20.58     50   +3.40 1 2 1 1 1     0    0 10.68 41.37 ZNEsW 21.0 20.6 160.6 25.1 13.8 -22.6 13.7 -21.2 13.5 -20.8 13.8 -22.0
2025-11-18T00:30:57.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:30:57.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:30:57.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.937892
2025-11-18T00:30:57.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:30:57.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:30:57.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:30:57.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:30:57.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:30:57.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:30:41', tmtdew=11.26, humidity=46.42, cloud=0.0, wind=20.52, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:30:41', seeing=1.85, atlas_timestamp='2025-11-17T22:30:33.869', atlas_cloud=2, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:27:00')
2025-11-18T00:30:57.799 [DEBUG] [Thread-64020] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:30:57.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:30:57.896 [DEBUG] [Thread-64023] [transport.py] [_log()] starting thread (client mode): 0xd31cc280
2025-11-18T00:30:57.896 [DEBUG] [Thread-64023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:30:57.915 [DEBUG] [Thread-64023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:30:57.916 [INFO] [Thread-64023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:30:57.923 [DEBUG] [Thread-64023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:30:57.923 [DEBUG] [Thread-64023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:30:57.923 [DEBUG] [Thread-64023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:30:57.923 [DEBUG] [Thread-64023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:30:57.923 [DEBUG] [Thread-64023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:30:57.923 [DEBUG] [Thread-64023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:30:57.923 [DEBUG] [Thread-64023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:30:57.923 [DEBUG] [Thread-64023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] client lang: <none>
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] server lang: <none>
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] kex follows: False
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] Compression: none
2025-11-18T00:30:57.924 [DEBUG] [Thread-64023] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:30:57.985 [DEBUG] [Thread-64023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:30:57.985 [DEBUG] [Thread-64023] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:30:57.985 [DEBUG] [Thread-64023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:30:57.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:30:57.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:30:58.043 [DEBUG] [Thread-64023] [transport.py] [_log()] userauth is OK
2025-11-18T00:30:58.043 [DEBUG] [Thread-64023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:30:58.043 [DEBUG] [Thread-64023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:30:58.043 [DEBUG] [Thread-64023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:30:58.043 [DEBUG] [Thread-64023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:30:58.062 [INFO] [Thread-64023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:30:58.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:30:58.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:30:58.898 [DEBUG] [Thread-64023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:30:58.899 [DEBUG] [Thread-64023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:30:58.946 [DEBUG] [Thread-64023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:30:58.946 [DEBUG] [Thread-64023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:30:58.955 [DEBUG] [Thread-64023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:30:58.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:30:58.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:30:58.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:30:58.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:30:58.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:30:58.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:30:58.989 [DEBUG] [Thread-64023] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:31:03.833 [DEBUG] [Thread-64025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:31:18.862 [DEBUG] [Thread-64026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:31:27.353 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:31:27.354 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:31:28.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:31:28.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:31:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:31:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 31, 13), 11.25, 46.47, 0.0, 19.55, 13.34, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:31:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:31:13
2025-11-18T00:31:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:31:29.918 [DEBUG] [Thread-64027] [transport.py] [_log()] starting thread (client mode): 0xd07aae60
2025-11-18T00:31:29.918 [DEBUG] [Thread-64027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:31:29.937 [DEBUG] [Thread-64027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:31:29.937 [INFO] [Thread-64027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] client lang: <none>
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] server lang: <none>
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] kex follows: False
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:31:29.941 [DEBUG] [Thread-64027] [transport.py] [_log()] Compression: none
2025-11-18T00:31:29.942 [DEBUG] [Thread-64027] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:31:29.958 [DEBUG] [Thread-64027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:31:29.959 [DEBUG] [Thread-64027] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:31:29.959 [DEBUG] [Thread-64027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:31:29.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:31:29.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:31:29.961 [DEBUG] [Thread-64027] [transport.py] [_log()] userauth is OK
2025-11-18T00:31:29.961 [DEBUG] [Thread-64027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:31:29.961 [DEBUG] [Thread-64027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:31:29.961 [DEBUG] [Thread-64027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:31:29.962 [DEBUG] [Thread-64027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:31:29.986 [INFO] [Thread-64027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:31:29.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:31:30.637 [DEBUG] [Thread-64027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:31:30.637 [DEBUG] [Thread-64027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:31:30.638 [DEBUG] [Thread-64027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:31:30.678 [DEBUG] [Thread-64027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:31:30.678 [DEBUG] [Thread-64027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:31:30.681 [DEBUG] [Thread-64027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:31:30.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:31:30.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:31:30.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:31:30.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:31:30.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:31:30.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:31:30.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:31:30.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:31:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:31:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.938239 -999.00  +13.40  19.30     50   +3.30 1 2 1 1 1     0    0 11.00 38.15 ZNEsW 22.1 19.3 164.2 21.6 13.8 -22.5 13.7 -21.1 13.6 -20.8 13.8 -21.9
2025-11-18T00:31:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:31:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:31:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.938239
2025-11-18T00:31:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:31:30.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:31:30.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:31:30.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:31:30.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:31:30.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:31:13', tmtdew=11.25, humidity=46.47, cloud=0.0, wind=19.55, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:31:13', seeing=1.69, atlas_timestamp='2025-11-17T22:31:03.850', atlas_cloud=2, atlas_rain=1, zp_data=[0.15174999999999983, 0.20974999999999966, 0.20725000000000016, 0.14250000000000007, 0.1280000000000001, 0.20825000000000138, 0.11500000000000021, 0.011750000000001037, 0.11149999999999949, 0.22600000000000087, 0.2657500000000006, 0.15249999999999986, 0.2519999999999989, 0.1222499999999993, 0.037499999999999645, 0.041499999999999204, 0.09975000000000023, 0.3354999999999997, 0.41799999999999926, 0.3562499999999993, 0.2079999999999984, 0.12124999999999808, 0.07675000000000054, 0.09774999999999956, 0.15399999999999814, 0.5804999999999998, 0.85175, 0.8544999999999998, 0.38149999999999995, 0.1615000000000002, 0.25150000000000006, 0.1305000000000014, 0.16075000000000017], zp_timestamp='2025-11-17T22:27:00')
2025-11-18T00:31:30.706 [DEBUG] [Thread-64027] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:31:30.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:31:30.802 [DEBUG] [Thread-64030] [transport.py] [_log()] starting thread (client mode): 0xd3153d30
2025-11-18T00:31:30.802 [DEBUG] [Thread-64030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:31:30.817 [DEBUG] [Thread-64030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:31:30.817 [INFO] [Thread-64030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] client lang: <none>
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] server lang: <none>
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] kex follows: False
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:31:30.825 [DEBUG] [Thread-64030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:31:30.826 [DEBUG] [Thread-64030] [transport.py] [_log()] Compression: none
2025-11-18T00:31:30.826 [DEBUG] [Thread-64030] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:31:30.887 [DEBUG] [Thread-64030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:31:30.887 [DEBUG] [Thread-64030] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:31:30.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:31:30.888 [DEBUG] [Thread-64030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:31:30.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:31:30.943 [DEBUG] [Thread-64030] [transport.py] [_log()] userauth is OK
2025-11-18T00:31:30.943 [DEBUG] [Thread-64030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:31:30.943 [DEBUG] [Thread-64030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:31:30.944 [DEBUG] [Thread-64030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:31:30.944 [DEBUG] [Thread-64030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:31:30.963 [INFO] [Thread-64030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:31:30.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:31:30.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:31:31.858 [DEBUG] [Thread-64030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:31:31.859 [DEBUG] [Thread-64030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:31:31.910 [DEBUG] [Thread-64030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:31:31.910 [DEBUG] [Thread-64030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:31:31.919 [DEBUG] [Thread-64030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:31:31.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:31:31.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:31:31.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:31:31.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:31:31.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:31:31.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:31:31.955 [DEBUG] [Thread-64030] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:31:33.891 [DEBUG] [Thread-64032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:31:48.938 [DEBUG] [Thread-64033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:31:54.767 [DEBUG] [Thread-64034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:32:01.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:32:01.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:32:01.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:32:02.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 31, 45), 11.22, 46.56, 0.0, 21.47, 13.31, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:32:02.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:31:45
2025-11-18T00:32:02.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:32:02.923 [DEBUG] [Thread-64035] [transport.py] [_log()] starting thread (client mode): 0xd3163a90
2025-11-18T00:32:02.923 [DEBUG] [Thread-64035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:32:02.944 [DEBUG] [Thread-64035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:32:02.944 [INFO] [Thread-64035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] client lang: <none>
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] server lang: <none>
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] kex follows: False
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] Compression: none
2025-11-18T00:32:02.946 [DEBUG] [Thread-64035] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:32:02.959 [DEBUG] [Thread-64035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:32:02.960 [DEBUG] [Thread-64035] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:32:02.960 [DEBUG] [Thread-64035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:32:02.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:32:02.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:32:02.962 [DEBUG] [Thread-64035] [transport.py] [_log()] userauth is OK
2025-11-18T00:32:02.962 [DEBUG] [Thread-64035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:32:02.962 [DEBUG] [Thread-64035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:32:02.962 [DEBUG] [Thread-64035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:32:02.962 [DEBUG] [Thread-64035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:32:02.978 [INFO] [Thread-64035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:32:02.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:32:03.638 [DEBUG] [Thread-64035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:32:03.638 [DEBUG] [Thread-64035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:32:03.638 [DEBUG] [Thread-64035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:32:03.679 [DEBUG] [Thread-64035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:32:03.680 [DEBUG] [Thread-64035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:32:03.683 [DEBUG] [Thread-64035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:32:03.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:32:03.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:32:03.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:32:03.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:32:03.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:32:03.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:32:03.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:32:03.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:32:03.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:32:03.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.938586 -999.00  +13.40  13.71     50   +3.40 1 2 1 1 1     0    0 10.87 38.81 ZNEsW 14.5 13.7 143.8 21.5 13.8 -22.5 13.7 -21.0 13.6 -21.1 13.8 -21.8
2025-11-18T00:32:03.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:32:03.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:32:03.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.938586
2025-11-18T00:32:03.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:32:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:32:03.709 [DEBUG] [Thread-64035] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:32:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:32:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:32:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:32:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:31:45', tmtdew=11.22, humidity=46.56, cloud=0.0, wind=21.47, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:31:45', seeing=1.83, atlas_timestamp='2025-11-17T22:31:33.830', atlas_cloud=2, atlas_rain=1, zp_data=[0.10275000000000034, 0.07225000000000037, 0.1462500000000002, 0.2729999999999997, 0.28800000000000026, 0.16825000000000045, 0.0600000000000005, 0.048250000000001236, 0.0649999999999995, 0.17300000000000004, 0.2942499999999999, 0.3200000000000003, 0.395999999999999, 0.17525000000000013, 0.023999999999999133, 0.017499999999998295, 0.05025000000000013, 0.21950000000000003, 0.5269999999999992, 0.6662499999999989, 0.3199999999999985, 0.25374999999999837, 0.09425000000000061, 0.028249999999999886, 0.0779999999999994, 0.34450000000000003, 1.2127499999999998, nan, 0.41300000000000026, 0.4820000000000011, 0.14500000000000135, 0.08099999999999952, 0.07724999999999937], zp_timestamp='2025-11-17T22:30:00')
2025-11-18T00:32:03.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:32:03.806 [DEBUG] [Thread-64038] [transport.py] [_log()] starting thread (client mode): 0xd07560b0
2025-11-18T00:32:03.806 [DEBUG] [Thread-64038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:32:03.821 [DEBUG] [Thread-64038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:32:03.821 [INFO] [Thread-64038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:32:03.829 [DEBUG] [Thread-64038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:32:03.829 [DEBUG] [Thread-64038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:32:03.829 [DEBUG] [Thread-64038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:32:03.829 [DEBUG] [Thread-64038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:32:03.829 [DEBUG] [Thread-64038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:32:03.829 [DEBUG] [Thread-64038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:32:03.829 [DEBUG] [Thread-64038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] client lang: <none>
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] server lang: <none>
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] kex follows: False
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:32:03.830 [DEBUG] [Thread-64038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:32:03.831 [DEBUG] [Thread-64038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:32:03.831 [DEBUG] [Thread-64038] [transport.py] [_log()] Compression: none
2025-11-18T00:32:03.831 [DEBUG] [Thread-64038] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:32:03.892 [DEBUG] [Thread-64038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:32:03.892 [DEBUG] [Thread-64038] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:32:03.893 [DEBUG] [Thread-64038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:32:03.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:32:03.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:32:03.951 [DEBUG] [Thread-64038] [transport.py] [_log()] userauth is OK
2025-11-18T00:32:03.951 [DEBUG] [Thread-64038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:32:03.952 [DEBUG] [Thread-64038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:32:03.952 [DEBUG] [Thread-64038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:32:03.952 [DEBUG] [Thread-64038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:32:03.966 [DEBUG] [Thread-64040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:32:03.972 [INFO] [Thread-64038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:32:03.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:32:03.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:32:04.804 [DEBUG] [Thread-64038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:32:04.804 [DEBUG] [Thread-64038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:32:04.853 [DEBUG] [Thread-64038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:32:04.853 [DEBUG] [Thread-64038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:32:04.862 [DEBUG] [Thread-64038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:32:04.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:32:04.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:32:04.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:32:04.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:32:04.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:32:04.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:32:04.900 [DEBUG] [Thread-64038] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:32:19.012 [DEBUG] [Thread-64041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:32:27.558 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:32:27.559 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:32:34.042 [DEBUG] [Thread-64042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:32:34.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:32:34.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:32:34.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:32:35.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 32, 17), 11.26, 46.42, 0.0, 19.37, 13.31, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:32:35.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:32:17
2025-11-18T00:32:35.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:32:35.904 [DEBUG] [Thread-64043] [transport.py] [_log()] starting thread (client mode): 0xd31ce680
2025-11-18T00:32:35.904 [DEBUG] [Thread-64043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:32:35.923 [DEBUG] [Thread-64043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:32:35.923 [INFO] [Thread-64043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] client lang: <none>
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] server lang: <none>
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] kex follows: False
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] Compression: none
2025-11-18T00:32:35.927 [DEBUG] [Thread-64043] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:32:35.944 [DEBUG] [Thread-64043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:32:35.944 [DEBUG] [Thread-64043] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:32:35.944 [DEBUG] [Thread-64043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:32:35.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:32:35.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:32:35.945 [DEBUG] [Thread-64043] [transport.py] [_log()] userauth is OK
2025-11-18T00:32:35.945 [DEBUG] [Thread-64043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:32:35.945 [DEBUG] [Thread-64043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:32:35.945 [DEBUG] [Thread-64043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:32:35.945 [DEBUG] [Thread-64043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:32:35.956 [INFO] [Thread-64043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:32:35.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:32:36.515 [DEBUG] [Thread-64043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:32:36.515 [DEBUG] [Thread-64043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:32:36.515 [DEBUG] [Thread-64043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:32:36.556 [DEBUG] [Thread-64043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:32:36.556 [DEBUG] [Thread-64043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:32:36.558 [DEBUG] [Thread-64043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:32:36.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:32:36.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:32:36.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:32:36.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:32:36.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:32:36.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:32:36.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.938933 -999.00  +13.40  17.42     51   +3.40 1 2 1 1 1     0    0 10.95 34.68 ZNEsW 14.2 17.4 153.6 21.6 13.8 -22.6 13.7 -21.0 13.5 -20.8 13.8 -21.7
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.938933
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:32:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:32:17', tmtdew=11.26, humidity=46.42, cloud=0.0, wind=19.37, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:32:17', seeing=1.57, atlas_timestamp='2025-11-17T22:32:03.811', atlas_cloud=2, atlas_rain=1, zp_data=[0.10275000000000034, 0.07225000000000037, 0.1462500000000002, 0.2729999999999997, 0.28800000000000026, 0.16825000000000045, 0.0600000000000005, 0.048250000000001236, 0.0649999999999995, 0.17300000000000004, 0.2942499999999999, 0.3200000000000003, 0.395999999999999, 0.17525000000000013, 0.023999999999999133, 0.017499999999998295, 0.05025000000000013, 0.21950000000000003, 0.5269999999999992, 0.6662499999999989, 0.3199999999999985, 0.25374999999999837, 0.09425000000000061, 0.028249999999999886, 0.0779999999999994, 0.34450000000000003, 1.2127499999999998, nan, 0.41300000000000026, 0.4820000000000011, 0.14500000000000135, 0.08099999999999952, 0.07724999999999937], zp_timestamp='2025-11-17T22:30:00')
2025-11-18T00:32:36.575 [DEBUG] [Thread-64043] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:32:36.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:32:36.661 [DEBUG] [Thread-64046] [transport.py] [_log()] starting thread (client mode): 0xd0700a90
2025-11-18T00:32:36.661 [DEBUG] [Thread-64046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:32:36.676 [DEBUG] [Thread-64046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:32:36.676 [INFO] [Thread-64046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] client lang: <none>
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] server lang: <none>
2025-11-18T00:32:36.683 [DEBUG] [Thread-64046] [transport.py] [_log()] kex follows: False
2025-11-18T00:32:36.684 [DEBUG] [Thread-64046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:32:36.684 [DEBUG] [Thread-64046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:32:36.684 [DEBUG] [Thread-64046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:32:36.684 [DEBUG] [Thread-64046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:32:36.684 [DEBUG] [Thread-64046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:32:36.684 [DEBUG] [Thread-64046] [transport.py] [_log()] Compression: none
2025-11-18T00:32:36.684 [DEBUG] [Thread-64046] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:32:36.741 [DEBUG] [Thread-64046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:32:36.742 [DEBUG] [Thread-64046] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:32:36.742 [DEBUG] [Thread-64046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:32:36.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:32:36.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:32:36.799 [DEBUG] [Thread-64046] [transport.py] [_log()] userauth is OK
2025-11-18T00:32:36.799 [DEBUG] [Thread-64046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:32:36.799 [DEBUG] [Thread-64046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:32:36.799 [DEBUG] [Thread-64046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:32:36.799 [DEBUG] [Thread-64046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:32:36.814 [INFO] [Thread-64046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:32:36.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:32:36.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:32:37.640 [DEBUG] [Thread-64046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:32:37.640 [DEBUG] [Thread-64046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:32:37.688 [DEBUG] [Thread-64046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:32:37.688 [DEBUG] [Thread-64046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:32:37.696 [DEBUG] [Thread-64046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:32:37.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:32:37.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:32:37.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:32:37.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:32:37.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:32:37.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:32:37.728 [DEBUG] [Thread-64046] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:32:49.070 [DEBUG] [Thread-64048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:32:54.822 [DEBUG] [Thread-64049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:33:04.111 [DEBUG] [Thread-64050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:33:07.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:33:07.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:33:07.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:33:08.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 32, 49), 11.61, 45.33, 0.0, 18.17, 13.26, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:33:08.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:32:49
2025-11-18T00:33:08.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:33:08.681 [DEBUG] [Thread-64051] [transport.py] [_log()] starting thread (client mode): 0xd317e860
2025-11-18T00:33:08.681 [DEBUG] [Thread-64051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:33:08.700 [DEBUG] [Thread-64051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:33:08.700 [INFO] [Thread-64051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:33:08.703 [DEBUG] [Thread-64051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:33:08.703 [DEBUG] [Thread-64051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:33:08.703 [DEBUG] [Thread-64051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] client lang: <none>
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] server lang: <none>
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] kex follows: False
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] Compression: none
2025-11-18T00:33:08.704 [DEBUG] [Thread-64051] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:33:08.720 [DEBUG] [Thread-64051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:33:08.721 [DEBUG] [Thread-64051] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:33:08.721 [DEBUG] [Thread-64051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:33:08.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:33:08.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:33:08.723 [DEBUG] [Thread-64051] [transport.py] [_log()] userauth is OK
2025-11-18T00:33:08.723 [DEBUG] [Thread-64051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:33:08.723 [DEBUG] [Thread-64051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:33:08.723 [DEBUG] [Thread-64051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:33:08.723 [DEBUG] [Thread-64051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:33:08.748 [INFO] [Thread-64051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:33:08.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:33:09.341 [DEBUG] [Thread-64051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:33:09.342 [DEBUG] [Thread-64051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:33:09.342 [DEBUG] [Thread-64051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:33:09.382 [DEBUG] [Thread-64051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:33:09.382 [DEBUG] [Thread-64051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:33:09.384 [DEBUG] [Thread-64051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:33:09.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:33:09.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:33:09.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:33:09.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:33:09.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:33:09.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:33:09.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:33:09.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:33:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:33:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.939281 -999.00  +13.40  12.32     50   +3.20 1 2 1 1 1     0    0 10.84 35.01 ZNEsW 16.0 12.3 147.8 18.4 13.8 -22.5 13.7 -21.0 13.5 -20.8 13.8 -21.9
2025-11-18T00:33:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:33:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:33:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.939281
2025-11-18T00:33:09.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:33:09.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:33:09.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:33:09.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:33:09.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:33:09.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:32:49', tmtdew=11.61, humidity=45.33, cloud=0.0, wind=18.17, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:32:49', seeing=1.57, atlas_timestamp='2025-11-17T22:32:33.878', atlas_cloud=2, atlas_rain=1, zp_data=[0.10275000000000034, 0.07225000000000037, 0.1462500000000002, 0.2729999999999997, 0.28800000000000026, 0.16825000000000045, 0.0600000000000005, 0.048250000000001236, 0.0649999999999995, 0.17300000000000004, 0.2942499999999999, 0.3200000000000003, 0.395999999999999, 0.17525000000000013, 0.023999999999999133, 0.017499999999998295, 0.05025000000000013, 0.21950000000000003, 0.5269999999999992, 0.6662499999999989, 0.3199999999999985, 0.25374999999999837, 0.09425000000000061, 0.028249999999999886, 0.0779999999999994, 0.34450000000000003, 1.2127499999999998, nan, 0.41300000000000026, 0.4820000000000011, 0.14500000000000135, 0.08099999999999952, 0.07724999999999937], zp_timestamp='2025-11-17T22:30:00')
2025-11-18T00:33:09.411 [DEBUG] [Thread-64051] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:33:09.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:33:09.508 [DEBUG] [Thread-64054] [transport.py] [_log()] starting thread (client mode): 0xd3162e00
2025-11-18T00:33:09.508 [DEBUG] [Thread-64054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:33:09.522 [DEBUG] [Thread-64054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:33:09.522 [INFO] [Thread-64054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] client lang: <none>
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] server lang: <none>
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] kex follows: False
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:33:09.530 [DEBUG] [Thread-64054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:33:09.531 [DEBUG] [Thread-64054] [transport.py] [_log()] Compression: none
2025-11-18T00:33:09.531 [DEBUG] [Thread-64054] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:33:09.590 [DEBUG] [Thread-64054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:33:09.591 [DEBUG] [Thread-64054] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:33:09.591 [DEBUG] [Thread-64054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:33:09.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:33:09.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:33:09.651 [DEBUG] [Thread-64054] [transport.py] [_log()] userauth is OK
2025-11-18T00:33:09.651 [DEBUG] [Thread-64054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:33:09.651 [DEBUG] [Thread-64054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:33:09.651 [DEBUG] [Thread-64054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:33:09.651 [DEBUG] [Thread-64054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:33:09.669 [INFO] [Thread-64054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:33:09.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:33:09.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:33:10.494 [DEBUG] [Thread-64054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:33:10.494 [DEBUG] [Thread-64054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:33:10.542 [DEBUG] [Thread-64054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:33:10.542 [DEBUG] [Thread-64054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:33:10.551 [DEBUG] [Thread-64054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:33:10.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:33:10.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:33:10.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:33:10.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:33:10.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:33:10.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:33:10.583 [DEBUG] [Thread-64054] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:33:19.138 [DEBUG] [Thread-64056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:33:27.761 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:33:27.762 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:33:34.180 [DEBUG] [Thread-64057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:33:40.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:33:40.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:33:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:33:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 33, 21), 11.63, 45.26, 0.0, 17.22, 13.29, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:33:41.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:33:21
2025-11-18T00:33:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:33:41.542 [DEBUG] [Thread-64058] [transport.py] [_log()] starting thread (client mode): 0xd3163280
2025-11-18T00:33:41.542 [DEBUG] [Thread-64058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:33:41.561 [DEBUG] [Thread-64058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:33:41.561 [INFO] [Thread-64058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] client lang: <none>
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] server lang: <none>
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] kex follows: False
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] Compression: none
2025-11-18T00:33:41.563 [DEBUG] [Thread-64058] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:33:41.577 [DEBUG] [Thread-64058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:33:41.577 [DEBUG] [Thread-64058] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:33:41.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:33:41.578 [DEBUG] [Thread-64058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:33:41.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:33:41.580 [DEBUG] [Thread-64058] [transport.py] [_log()] userauth is OK
2025-11-18T00:33:41.580 [DEBUG] [Thread-64058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:33:41.580 [DEBUG] [Thread-64058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:33:41.580 [DEBUG] [Thread-64058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:33:41.580 [DEBUG] [Thread-64058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:33:41.615 [INFO] [Thread-64058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:33:41.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:33:42.209 [DEBUG] [Thread-64058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:33:42.209 [DEBUG] [Thread-64058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:33:42.209 [DEBUG] [Thread-64058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:33:42.250 [DEBUG] [Thread-64058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:33:42.250 [DEBUG] [Thread-64058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:33:42.252 [DEBUG] [Thread-64058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:33:42.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:33:42.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:33:42.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:33:42.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:33:42.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:33:42.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:33:42.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:33:42.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:33:42.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:33:42.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.939975 -999.00  +13.30  15.79     50   +3.30 1 2 1 1 1     0    0 10.49 33.67 ZNEsW 17.0 15.8 168.1 24.0 13.8 -22.2 13.8 -20.9 13.5 -20.8 13.8 -21.8
2025-11-18T00:33:42.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:33:42.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:33:42.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.939975
2025-11-18T00:33:42.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:33:42.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:33:42.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:33:42.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:33:42.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:33:42.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:33:21', tmtdew=11.63, humidity=45.26, cloud=0.0, wind=17.22, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:33:21', seeing=1.53, atlas_timestamp='2025-11-17T22:33:33.840', atlas_cloud=2, atlas_rain=1, zp_data=[0.10275000000000034, 0.07225000000000037, 0.1462500000000002, 0.2729999999999997, 0.28800000000000026, 0.16825000000000045, 0.0600000000000005, 0.048250000000001236, 0.0649999999999995, 0.17300000000000004, 0.2942499999999999, 0.3200000000000003, 0.395999999999999, 0.17525000000000013, 0.023999999999999133, 0.017499999999998295, 0.05025000000000013, 0.21950000000000003, 0.5269999999999992, 0.6662499999999989, 0.3199999999999985, 0.25374999999999837, 0.09425000000000061, 0.028249999999999886, 0.0779999999999994, 0.34450000000000003, 1.2127499999999998, nan, 0.41300000000000026, 0.4820000000000011, 0.14500000000000135, 0.08099999999999952, 0.07724999999999937], zp_timestamp='2025-11-17T22:30:00')
2025-11-18T00:33:42.268 [DEBUG] [Thread-64058] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:33:42.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:33:49.209 [DEBUG] [Thread-64061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:33:54.875 [DEBUG] [Thread-64062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:33:58.600 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:34:04.247 [DEBUG] [Thread-64063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:34:19.277 [DEBUG] [Thread-64064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:34:27.965 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:34:27.966 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:34:34.304 [DEBUG] [Thread-64065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:34:49.333 [DEBUG] [Thread-64066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:34:54.932 [DEBUG] [Thread-64067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:35:04.363 [DEBUG] [Thread-64068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:35:19.395 [DEBUG] [Thread-64069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:35:28.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:35:28.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:35:34.424 [DEBUG] [Thread-64070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:35:49.457 [DEBUG] [Thread-64071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:35:54.990 [DEBUG] [Thread-64072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:35:56.475 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-18T00:36:04.484 [DEBUG] [Thread-64073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:36:19.515 [DEBUG] [Thread-64074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:36:26.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:36:26.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:36:26.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:36:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 36, 1), 11.81, 44.76, 0.0, 20.19, 13.28, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:36:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:36:01
2025-11-18T00:36:27.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:36:27.472 [DEBUG] [Thread-64075] [transport.py] [_log()] starting thread (client mode): 0xd0754850
2025-11-18T00:36:27.472 [DEBUG] [Thread-64075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:36:27.491 [DEBUG] [Thread-64075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:36:27.491 [INFO] [Thread-64075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] client lang: <none>
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] server lang: <none>
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] kex follows: False
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] Compression: none
2025-11-18T00:36:27.495 [DEBUG] [Thread-64075] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:36:27.511 [DEBUG] [Thread-64075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:36:27.511 [DEBUG] [Thread-64075] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:36:27.511 [DEBUG] [Thread-64075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:36:27.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:36:27.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:36:27.512 [DEBUG] [Thread-64075] [transport.py] [_log()] userauth is OK
2025-11-18T00:36:27.512 [DEBUG] [Thread-64075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:36:27.512 [DEBUG] [Thread-64075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:36:27.512 [DEBUG] [Thread-64075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:36:27.512 [DEBUG] [Thread-64075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:36:27.527 [INFO] [Thread-64075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:36:27.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:36:28.179 [DEBUG] [Thread-64075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:36:28.179 [DEBUG] [Thread-64075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:36:28.179 [DEBUG] [Thread-64075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:36:28.220 [DEBUG] [Thread-64075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:36:28.220 [DEBUG] [Thread-64075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:36:28.222 [DEBUG] [Thread-64075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:36:28.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:36:28.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:36:28.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:36:28.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:36:28.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:36:28.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:36:28.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:36:28.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:36:28.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:36:28.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.941364 -999.00  +13.40  17.36     49   +3.10 1 1 1 1 1     0    0 10.65 28.77 ZNESW 14.7 17.4 156.0 23.1 13.8 -22.0 13.7 -20.9 13.4 -20.9 13.8 -21.6
2025-11-18T00:36:28.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:36:28.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:36:28.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.941364
2025-11-18T00:36:28.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:36:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:36:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:36:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:36:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:36:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:36:01', tmtdew=11.81, humidity=44.76, cloud=0.0, wind=20.19, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:36:01', seeing=1.68, atlas_timestamp='2025-11-17T22:35:33.850', atlas_cloud=1, atlas_rain=1, zp_data=[0.10275000000000034, 0.07225000000000037, 0.1462500000000002, 0.2729999999999997, 0.28800000000000026, 0.16825000000000045, 0.0600000000000005, 0.048250000000001236, 0.0649999999999995, 0.17300000000000004, 0.2942499999999999, 0.3200000000000003, 0.395999999999999, 0.17525000000000013, 0.023999999999999133, 0.017499999999998295, 0.05025000000000013, 0.21950000000000003, 0.5269999999999992, 0.6662499999999989, 0.3199999999999985, 0.25374999999999837, 0.09425000000000061, 0.028249999999999886, 0.0779999999999994, 0.34450000000000003, 1.2127499999999998, nan, 0.41300000000000026, 0.4820000000000011, 0.14500000000000135, 0.08099999999999952, 0.07724999999999937], zp_timestamp='2025-11-17T22:33:00')
2025-11-18T00:36:28.243 [DEBUG] [Thread-64075] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:36:28.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:36:28.329 [DEBUG] [Thread-64078] [transport.py] [_log()] starting thread (client mode): 0xd3153a00
2025-11-18T00:36:28.329 [DEBUG] [Thread-64078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:36:28.345 [DEBUG] [Thread-64078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:36:28.345 [INFO] [Thread-64078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] client lang: <none>
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] server lang: <none>
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] kex follows: False
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:36:28.352 [DEBUG] [Thread-64078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:36:28.353 [DEBUG] [Thread-64078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:36:28.353 [DEBUG] [Thread-64078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:36:28.353 [DEBUG] [Thread-64078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:36:28.353 [DEBUG] [Thread-64078] [transport.py] [_log()] Compression: none
2025-11-18T00:36:28.353 [DEBUG] [Thread-64078] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:36:28.370 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:36:28.371 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:36:28.409 [DEBUG] [Thread-64078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:36:28.409 [DEBUG] [Thread-64078] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:36:28.410 [DEBUG] [Thread-64078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:36:28.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:36:28.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:36:28.466 [DEBUG] [Thread-64078] [transport.py] [_log()] userauth is OK
2025-11-18T00:36:28.466 [DEBUG] [Thread-64078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:36:28.466 [DEBUG] [Thread-64078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:36:28.466 [DEBUG] [Thread-64078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:36:28.466 [DEBUG] [Thread-64078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:36:28.485 [INFO] [Thread-64078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:36:28.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:36:28.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:36:29.316 [DEBUG] [Thread-64078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:36:29.316 [DEBUG] [Thread-64078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:36:29.364 [DEBUG] [Thread-64078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:36:29.364 [DEBUG] [Thread-64078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:36:29.372 [DEBUG] [Thread-64078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:36:29.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:36:29.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:36:29.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:36:29.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:36:29.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:36:29.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:36:29.403 [DEBUG] [Thread-64078] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:36:34.543 [DEBUG] [Thread-64080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:36:49.578 [DEBUG] [Thread-64081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:36:55.053 [DEBUG] [Thread-64082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:36:59.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:36:59.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:36:59.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:37:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 36, 33), 11.81, 44.79, 0.0, 22.51, 13.31, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:37:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:36:33
2025-11-18T00:37:00.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:37:00.360 [DEBUG] [Thread-64083] [transport.py] [_log()] starting thread (client mode): 0xd3151b70
2025-11-18T00:37:00.360 [DEBUG] [Thread-64083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:37:00.380 [DEBUG] [Thread-64083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:37:00.380 [INFO] [Thread-64083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:37:00.383 [DEBUG] [Thread-64083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:37:00.383 [DEBUG] [Thread-64083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:37:00.383 [DEBUG] [Thread-64083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] client lang: <none>
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] server lang: <none>
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] kex follows: False
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] Compression: none
2025-11-18T00:37:00.384 [DEBUG] [Thread-64083] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:37:00.400 [DEBUG] [Thread-64083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:37:00.400 [DEBUG] [Thread-64083] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:37:00.401 [DEBUG] [Thread-64083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:37:00.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:37:00.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:37:00.403 [DEBUG] [Thread-64083] [transport.py] [_log()] userauth is OK
2025-11-18T00:37:00.403 [DEBUG] [Thread-64083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:37:00.403 [DEBUG] [Thread-64083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:37:00.403 [DEBUG] [Thread-64083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:37:00.403 [DEBUG] [Thread-64083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:37:00.426 [INFO] [Thread-64083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:37:00.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:37:01.185 [DEBUG] [Thread-64083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:37:01.185 [DEBUG] [Thread-64083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:37:01.185 [DEBUG] [Thread-64083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:37:01.225 [DEBUG] [Thread-64083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:37:01.225 [DEBUG] [Thread-64083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:37:01.229 [DEBUG] [Thread-64083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:37:01.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:37:01.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:37:01.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:37:01.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:37:01.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:37:01.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:37:01.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:37:01.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:37:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:37:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.941711 -999.00  +13.30  16.09     49   +3.00 1 1 1 1 1     0    0 10.72 31.00 ZNESW 15.7 16.1 159.2 23.1 13.8 -22.1 13.7 -21.0 13.5 -21.0 13.8 -21.7
2025-11-18T00:37:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:37:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:37:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.941711
2025-11-18T00:37:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:37:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:37:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:37:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:37:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:37:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:36:33', tmtdew=11.81, humidity=44.79, cloud=0.0, wind=22.51, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:36:33', seeing=1.69, atlas_timestamp='2025-11-17T22:36:03.830', atlas_cloud=1, atlas_rain=1, zp_data=[0.10275000000000034, 0.07225000000000037, 0.1462500000000002, 0.2729999999999997, 0.28800000000000026, 0.16825000000000045, 0.0600000000000005, 0.048250000000001236, 0.0649999999999995, 0.17300000000000004, 0.2942499999999999, 0.3200000000000003, 0.395999999999999, 0.17525000000000013, 0.023999999999999133, 0.017499999999998295, 0.05025000000000013, 0.21950000000000003, 0.5269999999999992, 0.6662499999999989, 0.3199999999999985, 0.25374999999999837, 0.09425000000000061, 0.028249999999999886, 0.0779999999999994, 0.34450000000000003, 1.2127499999999998, nan, 0.41300000000000026, 0.4820000000000011, 0.14500000000000135, 0.08099999999999952, 0.07724999999999937], zp_timestamp='2025-11-17T22:33:00')
2025-11-18T00:37:01.250 [DEBUG] [Thread-64083] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:37:01.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:37:01.355 [DEBUG] [Thread-64086] [transport.py] [_log()] starting thread (client mode): 0xd0700ac0
2025-11-18T00:37:01.355 [DEBUG] [Thread-64086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:37:01.370 [DEBUG] [Thread-64086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:37:01.370 [INFO] [Thread-64086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:37:01.377 [DEBUG] [Thread-64086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:37:01.377 [DEBUG] [Thread-64086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] client lang: <none>
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] server lang: <none>
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] kex follows: False
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:37:01.378 [DEBUG] [Thread-64086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:37:01.379 [DEBUG] [Thread-64086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:37:01.379 [DEBUG] [Thread-64086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:37:01.379 [DEBUG] [Thread-64086] [transport.py] [_log()] Compression: none
2025-11-18T00:37:01.379 [DEBUG] [Thread-64086] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:37:01.434 [DEBUG] [Thread-64086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:37:01.434 [DEBUG] [Thread-64086] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:37:01.435 [DEBUG] [Thread-64086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:37:01.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:37:01.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:37:01.490 [DEBUG] [Thread-64086] [transport.py] [_log()] userauth is OK
2025-11-18T00:37:01.491 [DEBUG] [Thread-64086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:37:01.491 [DEBUG] [Thread-64086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:37:01.491 [DEBUG] [Thread-64086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:37:01.491 [DEBUG] [Thread-64086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:37:01.509 [INFO] [Thread-64086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:37:01.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:37:01.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:37:02.356 [DEBUG] [Thread-64086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:37:02.356 [DEBUG] [Thread-64086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:37:02.404 [DEBUG] [Thread-64086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:37:02.405 [DEBUG] [Thread-64086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:37:02.414 [DEBUG] [Thread-64086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:37:02.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:37:02.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:37:02.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:37:02.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:37:02.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:37:02.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:37:02.449 [DEBUG] [Thread-64086] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:37:04.608 [DEBUG] [Thread-64088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:37:19.645 [DEBUG] [Thread-64089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:37:28.574 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:37:28.576 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:37:32.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:37:32.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:37:32.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:37:33.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 37, 5), 11.86, 44.63, 0.0, 20.8, 13.36, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:37:33.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:37:05
2025-11-18T00:37:33.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:37:33.400 [DEBUG] [Thread-64090] [transport.py] [_log()] starting thread (client mode): 0xd3162da0
2025-11-18T00:37:33.400 [DEBUG] [Thread-64090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:37:33.422 [DEBUG] [Thread-64090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:37:33.422 [INFO] [Thread-64090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:37:33.426 [DEBUG] [Thread-64090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:37:33.426 [DEBUG] [Thread-64090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:37:33.426 [DEBUG] [Thread-64090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:37:33.426 [DEBUG] [Thread-64090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:37:33.426 [DEBUG] [Thread-64090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:37:33.426 [DEBUG] [Thread-64090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:37:33.426 [DEBUG] [Thread-64090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] client lang: <none>
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] server lang: <none>
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] kex follows: False
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:37:33.427 [DEBUG] [Thread-64090] [transport.py] [_log()] Compression: none
2025-11-18T00:37:33.428 [DEBUG] [Thread-64090] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:37:33.446 [DEBUG] [Thread-64090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:37:33.446 [DEBUG] [Thread-64090] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:37:33.447 [DEBUG] [Thread-64090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:37:33.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:37:33.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:37:33.449 [DEBUG] [Thread-64090] [transport.py] [_log()] userauth is OK
2025-11-18T00:37:33.449 [DEBUG] [Thread-64090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:37:33.449 [DEBUG] [Thread-64090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:37:33.449 [DEBUG] [Thread-64090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:37:33.449 [DEBUG] [Thread-64090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:37:33.473 [INFO] [Thread-64090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:37:33.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:37:34.129 [DEBUG] [Thread-64090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:37:34.129 [DEBUG] [Thread-64090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:37:34.129 [DEBUG] [Thread-64090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:37:34.170 [DEBUG] [Thread-64090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:37:34.170 [DEBUG] [Thread-64090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:37:34.173 [DEBUG] [Thread-64090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:37:34.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:37:34.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:37:34.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:37:34.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:37:34.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:37:34.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:37:34.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:37:34.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:37:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:37:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.942405 -999.00  +13.40  16.11     48   +2.70 1 1 1 1 1     0    0 10.83 34.13 ZNESW 15.4 16.1 138.4 24.6 13.8 -22.1 13.7 -21.0 13.5 -20.9 13.8 -21.9
2025-11-18T00:37:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:37:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:37:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.942405
2025-11-18T00:37:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:37:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:37:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:37:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:37:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:37:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:37:05', tmtdew=11.86, humidity=44.63, cloud=0.0, wind=20.8, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:37:05', seeing=1.69, atlas_timestamp='2025-11-17T22:37:03.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.10275000000000034, 0.07225000000000037, 0.1462500000000002, 0.2729999999999997, 0.28800000000000026, 0.16825000000000045, 0.0600000000000005, 0.048250000000001236, 0.0649999999999995, 0.17300000000000004, 0.2942499999999999, 0.3200000000000003, 0.395999999999999, 0.17525000000000013, 0.023999999999999133, 0.017499999999998295, 0.05025000000000013, 0.21950000000000003, 0.5269999999999992, 0.6662499999999989, 0.3199999999999985, 0.25374999999999837, 0.09425000000000061, 0.028249999999999886, 0.0779999999999994, 0.34450000000000003, 1.2127499999999998, nan, 0.41300000000000026, 0.4820000000000011, 0.14500000000000135, 0.08099999999999952, 0.07724999999999937], zp_timestamp='2025-11-17T22:33:00')
2025-11-18T00:37:34.197 [DEBUG] [Thread-64090] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:37:34.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:37:34.291 [DEBUG] [Thread-64093] [transport.py] [_log()] starting thread (client mode): 0xd31615d0
2025-11-18T00:37:34.291 [DEBUG] [Thread-64093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:37:34.308 [DEBUG] [Thread-64093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:37:34.309 [INFO] [Thread-64093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:37:34.316 [DEBUG] [Thread-64093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] client lang: <none>
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] server lang: <none>
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] kex follows: False
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] Compression: none
2025-11-18T00:37:34.317 [DEBUG] [Thread-64093] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:37:34.375 [DEBUG] [Thread-64093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:37:34.375 [DEBUG] [Thread-64093] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:37:34.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:37:34.376 [DEBUG] [Thread-64093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:37:34.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:37:34.430 [DEBUG] [Thread-64093] [transport.py] [_log()] userauth is OK
2025-11-18T00:37:34.431 [DEBUG] [Thread-64093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:37:34.431 [DEBUG] [Thread-64093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:37:34.431 [DEBUG] [Thread-64093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:37:34.431 [DEBUG] [Thread-64093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:37:34.450 [INFO] [Thread-64093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:37:34.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:37:34.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:37:34.676 [DEBUG] [Thread-64095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:37:35.304 [DEBUG] [Thread-64093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:37:35.304 [DEBUG] [Thread-64093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:37:35.354 [DEBUG] [Thread-64093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:37:35.354 [DEBUG] [Thread-64093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:37:35.363 [DEBUG] [Thread-64093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:37:35.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:37:35.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:37:35.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:37:35.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:37:35.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:37:35.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:37:35.399 [DEBUG] [Thread-64093] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:37:49.721 [DEBUG] [Thread-64096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:37:55.128 [DEBUG] [Thread-64097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:38:04.749 [DEBUG] [Thread-64098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:38:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:38:05.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:38:05.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:38:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 37, 37), 11.9, 44.15, 0.0, 23.78, 13.31, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:38:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:37:37
2025-11-18T00:38:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:38:06.363 [DEBUG] [Thread-64099] [transport.py] [_log()] starting thread (client mode): 0xd07554b0
2025-11-18T00:38:06.363 [DEBUG] [Thread-64099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:38:06.385 [DEBUG] [Thread-64099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:38:06.386 [INFO] [Thread-64099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:38:06.389 [DEBUG] [Thread-64099] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:38:06.389 [DEBUG] [Thread-64099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:38:06.389 [DEBUG] [Thread-64099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:38:06.389 [DEBUG] [Thread-64099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:38:06.389 [DEBUG] [Thread-64099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] client lang: <none>
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] server lang: <none>
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] kex follows: False
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] Compression: none
2025-11-18T00:38:06.390 [DEBUG] [Thread-64099] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:38:06.407 [DEBUG] [Thread-64099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:38:06.407 [DEBUG] [Thread-64099] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:38:06.408 [DEBUG] [Thread-64099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:38:06.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:38:06.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:38:06.410 [DEBUG] [Thread-64099] [transport.py] [_log()] userauth is OK
2025-11-18T00:38:06.410 [DEBUG] [Thread-64099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:38:06.410 [DEBUG] [Thread-64099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:38:06.410 [DEBUG] [Thread-64099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:38:06.410 [DEBUG] [Thread-64099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:38:06.434 [INFO] [Thread-64099] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:38:06.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:38:07.222 [DEBUG] [Thread-64099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:38:07.222 [DEBUG] [Thread-64099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:38:07.222 [DEBUG] [Thread-64099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:38:07.263 [DEBUG] [Thread-64099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:38:07.263 [DEBUG] [Thread-64099] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:38:07.266 [DEBUG] [Thread-64099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:38:07.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:38:07.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:38:07.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:38:07.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:38:07.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:38:07.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:38:07.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:38:07.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:38:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:38:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.942753 -999.00  +13.40  17.71     49   +3.00 1 1 1 1 1     0    0 10.84 36.35 ZNESW 13.8 17.7 157.0 20.7 13.8 -22.3 13.7 -21.1 13.5 -21.0 13.8 -22.0
2025-11-18T00:38:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:38:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:38:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.942753
2025-11-18T00:38:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:38:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:38:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:38:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:38:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:38:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:37:37', tmtdew=11.9, humidity=44.15, cloud=0.0, wind=23.78, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:37:37', seeing=1.68, atlas_timestamp='2025-11-17T22:37:33.859', atlas_cloud=1, atlas_rain=1, zp_data=[0.17224999999999824, 0.24875000000000114, 0.17825000000000024, 0.2594999999999992, 0.22949999999999982, 0.27725000000000044, 0.25399999999999956, 0.16825000000000045, 0.18349999999999866, 0.3365000000000009, 0.36824999999999974, 0.30100000000000016, 0.39750000000000085, 0.21774999999999878, 0.2530000000000001, 0.18900000000000006, 0.2312499999999993, 0.4294999999999991, 0.7619999999999996, 0.5252499999999989, 0.28999999999999915, 0.2527499999999989, 0.47075000000000067, 0.3017500000000002, 0.17149999999999999, 0.4195000000000002, 1.5332500000000007, 1.2435, 0.5325000000000006, 0.28300000000000125, 0.5020000000000007, 0.11700000000000088, 0.09674999999999834], zp_timestamp='2025-11-17T22:35:00')
2025-11-18T00:38:07.288 [DEBUG] [Thread-64099] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:38:07.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:38:07.376 [DEBUG] [Thread-64102] [transport.py] [_log()] starting thread (client mode): 0xd07562f0
2025-11-18T00:38:07.376 [DEBUG] [Thread-64102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:38:07.391 [DEBUG] [Thread-64102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:38:07.391 [INFO] [Thread-64102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:38:07.399 [DEBUG] [Thread-64102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:38:07.399 [DEBUG] [Thread-64102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:38:07.399 [DEBUG] [Thread-64102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:38:07.399 [DEBUG] [Thread-64102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:38:07.399 [DEBUG] [Thread-64102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:38:07.399 [DEBUG] [Thread-64102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] client lang: <none>
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] server lang: <none>
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] kex follows: False
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:38:07.400 [DEBUG] [Thread-64102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:38:07.401 [DEBUG] [Thread-64102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:38:07.401 [DEBUG] [Thread-64102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:38:07.401 [DEBUG] [Thread-64102] [transport.py] [_log()] Compression: none
2025-11-18T00:38:07.401 [DEBUG] [Thread-64102] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:38:07.458 [DEBUG] [Thread-64102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:38:07.458 [DEBUG] [Thread-64102] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:38:07.459 [DEBUG] [Thread-64102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:38:07.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:38:07.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:38:07.514 [DEBUG] [Thread-64102] [transport.py] [_log()] userauth is OK
2025-11-18T00:38:07.515 [DEBUG] [Thread-64102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:38:07.515 [DEBUG] [Thread-64102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:38:07.515 [DEBUG] [Thread-64102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:38:07.515 [DEBUG] [Thread-64102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:38:07.534 [INFO] [Thread-64102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:38:07.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:38:07.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:38:08.379 [DEBUG] [Thread-64102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:38:08.380 [DEBUG] [Thread-64102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:38:08.427 [DEBUG] [Thread-64102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:38:08.427 [DEBUG] [Thread-64102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:38:08.436 [DEBUG] [Thread-64102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:38:08.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:38:08.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:38:08.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:38:08.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:38:08.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:38:08.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:38:08.470 [DEBUG] [Thread-64102] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:38:19.777 [DEBUG] [Thread-64104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:38:28.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:38:28.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:38:34.813 [DEBUG] [Thread-64105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:38:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:38:38.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:38:38.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:38:39.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 38, 9), 12.13, 43.43, 0.0, 24.58, 13.33, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:38:39.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:38:09
2025-11-18T00:38:39.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:38:39.422 [DEBUG] [Thread-64106] [transport.py] [_log()] starting thread (client mode): 0xd3160820
2025-11-18T00:38:39.422 [DEBUG] [Thread-64106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:38:39.442 [DEBUG] [Thread-64106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:38:39.442 [INFO] [Thread-64106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] client lang: <none>
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] server lang: <none>
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] kex follows: False
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] Compression: none
2025-11-18T00:38:39.445 [DEBUG] [Thread-64106] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:38:39.462 [DEBUG] [Thread-64106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:38:39.463 [DEBUG] [Thread-64106] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:38:39.463 [DEBUG] [Thread-64106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:38:39.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:38:39.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:38:39.465 [DEBUG] [Thread-64106] [transport.py] [_log()] userauth is OK
2025-11-18T00:38:39.465 [DEBUG] [Thread-64106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:38:39.465 [DEBUG] [Thread-64106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:38:39.465 [DEBUG] [Thread-64106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:38:39.466 [DEBUG] [Thread-64106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:38:39.486 [INFO] [Thread-64106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:38:39.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:38:40.093 [DEBUG] [Thread-64106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:38:40.093 [DEBUG] [Thread-64106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:38:40.094 [DEBUG] [Thread-64106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:38:40.134 [DEBUG] [Thread-64106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:38:40.135 [DEBUG] [Thread-64106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:38:40.137 [DEBUG] [Thread-64106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:38:40.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:38:40.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:38:40.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:38:40.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:38:40.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:38:40.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:38:40.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:38:40.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:38:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:38:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.943100 -999.00  +13.30  14.37     49   +3.00 1 1 1 1 1     0    0 11.04 36.02 ZNESW 16.1 14.4 162.0 20.4 13.8 -22.2 13.7 -21.1 13.5 -21.0 13.8 -21.9
2025-11-18T00:38:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:38:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:38:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.943100
2025-11-18T00:38:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:38:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:38:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:38:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:38:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:38:40.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:38:09', tmtdew=12.13, humidity=43.43, cloud=0.0, wind=24.58, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:38:09', seeing=1.63, atlas_timestamp='2025-11-17T22:38:03.840', atlas_cloud=1, atlas_rain=1, zp_data=[0.17224999999999824, 0.24875000000000114, 0.17825000000000024, 0.2594999999999992, 0.22949999999999982, 0.27725000000000044, 0.25399999999999956, 0.16825000000000045, 0.18349999999999866, 0.3365000000000009, 0.36824999999999974, 0.30100000000000016, 0.39750000000000085, 0.21774999999999878, 0.2530000000000001, 0.18900000000000006, 0.2312499999999993, 0.4294999999999991, 0.7619999999999996, 0.5252499999999989, 0.28999999999999915, 0.2527499999999989, 0.47075000000000067, 0.3017500000000002, 0.17149999999999999, 0.4195000000000002, 1.5332500000000007, 1.2435, 0.5325000000000006, 0.28300000000000125, 0.5020000000000007, 0.11700000000000088, 0.09674999999999834], zp_timestamp='2025-11-17T22:35:00')
2025-11-18T00:38:40.163 [DEBUG] [Thread-64106] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:38:40.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:38:40.259 [DEBUG] [Thread-64109] [transport.py] [_log()] starting thread (client mode): 0xd31623b0
2025-11-18T00:38:40.259 [DEBUG] [Thread-64109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:38:40.274 [DEBUG] [Thread-64109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:38:40.274 [INFO] [Thread-64109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:38:40.282 [DEBUG] [Thread-64109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:38:40.282 [DEBUG] [Thread-64109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:38:40.282 [DEBUG] [Thread-64109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:38:40.282 [DEBUG] [Thread-64109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:38:40.282 [DEBUG] [Thread-64109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:38:40.282 [DEBUG] [Thread-64109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] client lang: <none>
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] server lang: <none>
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] kex follows: False
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:38:40.283 [DEBUG] [Thread-64109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:38:40.284 [DEBUG] [Thread-64109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:38:40.284 [DEBUG] [Thread-64109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:38:40.284 [DEBUG] [Thread-64109] [transport.py] [_log()] Compression: none
2025-11-18T00:38:40.284 [DEBUG] [Thread-64109] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:38:40.338 [DEBUG] [Thread-64109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:38:40.339 [DEBUG] [Thread-64109] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:38:40.339 [DEBUG] [Thread-64109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:38:40.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:38:40.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:38:40.394 [DEBUG] [Thread-64109] [transport.py] [_log()] userauth is OK
2025-11-18T00:38:40.395 [DEBUG] [Thread-64109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:38:40.395 [DEBUG] [Thread-64109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:38:40.395 [DEBUG] [Thread-64109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:38:40.395 [DEBUG] [Thread-64109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:38:40.414 [INFO] [Thread-64109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:38:40.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:38:40.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:38:41.258 [DEBUG] [Thread-64109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:38:41.258 [DEBUG] [Thread-64109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:38:41.306 [DEBUG] [Thread-64109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:38:41.307 [DEBUG] [Thread-64109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:38:41.316 [DEBUG] [Thread-64109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:38:41.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:38:41.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:38:41.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:38:41.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:38:41.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:38:41.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:38:41.351 [DEBUG] [Thread-64109] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:38:49.846 [DEBUG] [Thread-64111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:38:55.202 [DEBUG] [Thread-64112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:39:04.883 [DEBUG] [Thread-64113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:39:11.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:39:11.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:39:11.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
2025-11-18T00:39:12.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 38, 41), 12.28, 43.33, 0.0, 25.66, 13.46, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:39:12.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:38:41
2025-11-18T00:39:12.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:39:12.311 [DEBUG] [Thread-64114] [transport.py] [_log()] starting thread (client mode): 0xd0701b10
2025-11-18T00:39:12.311 [DEBUG] [Thread-64114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:39:12.331 [DEBUG] [Thread-64114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:39:12.332 [INFO] [Thread-64114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:39:12.335 [DEBUG] [Thread-64114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:39:12.335 [DEBUG] [Thread-64114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:39:12.335 [DEBUG] [Thread-64114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:39:12.335 [DEBUG] [Thread-64114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:39:12.335 [DEBUG] [Thread-64114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:39:12.335 [DEBUG] [Thread-64114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] client lang: <none>
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] server lang: <none>
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] kex follows: False
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] Compression: none
2025-11-18T00:39:12.336 [DEBUG] [Thread-64114] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:39:12.353 [DEBUG] [Thread-64114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:39:12.353 [DEBUG] [Thread-64114] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:39:12.354 [DEBUG] [Thread-64114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:39:12.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:39:12.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:39:12.355 [DEBUG] [Thread-64114] [transport.py] [_log()] userauth is OK
2025-11-18T00:39:12.356 [DEBUG] [Thread-64114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:39:12.356 [DEBUG] [Thread-64114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:39:12.356 [DEBUG] [Thread-64114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:39:12.356 [DEBUG] [Thread-64114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:39:12.378 [INFO] [Thread-64114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:39:12.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:39:13.231 [DEBUG] [Thread-64114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:39:13.231 [DEBUG] [Thread-64114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:39:13.231 [DEBUG] [Thread-64114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:39:13.271 [DEBUG] [Thread-64114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:39:13.271 [DEBUG] [Thread-64114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:39:13.274 [DEBUG] [Thread-64114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:39:13.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:39:13.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:39:13.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:39:13.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:39:13.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:39:13.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:39:13.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:39:13.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:39:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:39:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.943447 -999.00  +13.30  16.85     49   +2.90 1 1 1 1 1     0    0 10.87 35.76 ZNESW 13.5 16.9 155.0 21.7 13.8 -22.2 13.7 -21.1 13.5 -20.8 13.8 -21.7
2025-11-18T00:39:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:39:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:39:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.943447
2025-11-18T00:39:13.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:39:13.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:39:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:39:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:39:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:39:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:38:41', tmtdew=12.28, humidity=43.33, cloud=0.0, wind=25.66, temperature=13.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:38:41', seeing=1.73, atlas_timestamp='2025-11-17T22:38:33.821', atlas_cloud=1, atlas_rain=1, zp_data=[0.17224999999999824, 0.24875000000000114, 0.17825000000000024, 0.2594999999999992, 0.22949999999999982, 0.27725000000000044, 0.25399999999999956, 0.16825000000000045, 0.18349999999999866, 0.3365000000000009, 0.36824999999999974, 0.30100000000000016, 0.39750000000000085, 0.21774999999999878, 0.2530000000000001, 0.18900000000000006, 0.2312499999999993, 0.4294999999999991, 0.7619999999999996, 0.5252499999999989, 0.28999999999999915, 0.2527499999999989, 0.47075000000000067, 0.3017500000000002, 0.17149999999999999, 0.4195000000000002, 1.5332500000000007, 1.2435, 0.5325000000000006, 0.28300000000000125, 0.5020000000000007, 0.11700000000000088, 0.09674999999999834], zp_timestamp='2025-11-17T22:35:00')
2025-11-18T00:39:13.305 [DEBUG] [Thread-64114] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:39:13.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:39:13.404 [DEBUG] [Thread-64117] [transport.py] [_log()] starting thread (client mode): 0xd3162920
2025-11-18T00:39:13.405 [DEBUG] [Thread-64117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:39:13.419 [DEBUG] [Thread-64117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:39:13.419 [INFO] [Thread-64117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:39:13.426 [DEBUG] [Thread-64117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:39:13.426 [DEBUG] [Thread-64117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] client lang: <none>
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] server lang: <none>
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] kex follows: False
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] Compression: none
2025-11-18T00:39:13.427 [DEBUG] [Thread-64117] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:39:13.487 [DEBUG] [Thread-64117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:39:13.487 [DEBUG] [Thread-64117] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:39:13.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:39:13.488 [DEBUG] [Thread-64117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:39:13.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:39:13.543 [DEBUG] [Thread-64117] [transport.py] [_log()] userauth is OK
2025-11-18T00:39:13.543 [DEBUG] [Thread-64117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:39:13.543 [DEBUG] [Thread-64117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:39:13.543 [DEBUG] [Thread-64117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:39:13.543 [DEBUG] [Thread-64117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:39:13.562 [INFO] [Thread-64117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:39:13.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:39:13.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:39:14.450 [DEBUG] [Thread-64117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:39:14.450 [DEBUG] [Thread-64117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:39:14.498 [DEBUG] [Thread-64117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:39:14.498 [DEBUG] [Thread-64117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:39:14.506 [DEBUG] [Thread-64117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:39:14.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:39: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')
2025-11-18T00:39:14.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:39:14.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:39:14.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:39:14.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:39:14.538 [DEBUG] [Thread-64117] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:39:19.912 [DEBUG] [Thread-64119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:39:28.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:39:28.985 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:39:34.952 [DEBUG] [Thread-64120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:39:44.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:39:44.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:39:44.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:39:45.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 39, 13), 12.3, 43.23, 0.0, 25.48, 13.41, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:39:45.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:39:13
2025-11-18T00:39:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:39:45.533 [DEBUG] [Thread-64121] [transport.py] [_log()] starting thread (client mode): 0xd0757370
2025-11-18T00:39:45.533 [DEBUG] [Thread-64121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:39:45.553 [DEBUG] [Thread-64121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:39:45.553 [INFO] [Thread-64121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] client lang: <none>
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] server lang: <none>
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] kex follows: False
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] Compression: none
2025-11-18T00:39:45.556 [DEBUG] [Thread-64121] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:39:45.564 [DEBUG] [Thread-64121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:39:45.564 [DEBUG] [Thread-64121] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:39:45.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:39:45.564 [DEBUG] [Thread-64121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:39:45.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:39:45.565 [DEBUG] [Thread-64121] [transport.py] [_log()] userauth is OK
2025-11-18T00:39:45.565 [DEBUG] [Thread-64121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:39:45.565 [DEBUG] [Thread-64121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:39:45.565 [DEBUG] [Thread-64121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:39:45.565 [DEBUG] [Thread-64121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:39:45.574 [INFO] [Thread-64121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:39:45.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:39:46.194 [DEBUG] [Thread-64121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:39:46.195 [DEBUG] [Thread-64121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:39:46.195 [DEBUG] [Thread-64121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:39:46.236 [DEBUG] [Thread-64121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:39:46.236 [DEBUG] [Thread-64121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:39:46.238 [DEBUG] [Thread-64121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:39:46.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:39:46.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:39:46.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:39:46.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:39:46.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:39:46.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:39:46.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.943794 -999.00  +13.40  22.15     48   +2.70 1 1 1 1 1     0    0 10.95 36.71 ZNESW 22.8 22.1 168.0 25.6 13.8 -22.1 13.7 -20.9 13.5 -20.9 13.8 -22.1
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.943794
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:39:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:39:13', tmtdew=12.3, humidity=43.23, cloud=0.0, wind=25.48, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:39:13', seeing=1.76, atlas_timestamp='2025-11-17T22:39:03.802', atlas_cloud=1, atlas_rain=1, zp_data=[0.17224999999999824, 0.24875000000000114, 0.17825000000000024, 0.2594999999999992, 0.22949999999999982, 0.27725000000000044, 0.25399999999999956, 0.16825000000000045, 0.18349999999999866, 0.3365000000000009, 0.36824999999999974, 0.30100000000000016, 0.39750000000000085, 0.21774999999999878, 0.2530000000000001, 0.18900000000000006, 0.2312499999999993, 0.4294999999999991, 0.7619999999999996, 0.5252499999999989, 0.28999999999999915, 0.2527499999999989, 0.47075000000000067, 0.3017500000000002, 0.17149999999999999, 0.4195000000000002, 1.5332500000000007, 1.2435, 0.5325000000000006, 0.28300000000000125, 0.5020000000000007, 0.11700000000000088, 0.09674999999999834], zp_timestamp='2025-11-17T22:35:00')
2025-11-18T00:39:46.257 [DEBUG] [Thread-64121] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:39:46.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:39:46.343 [DEBUG] [Thread-64124] [transport.py] [_log()] starting thread (client mode): 0xd07a3e80
2025-11-18T00:39:46.343 [DEBUG] [Thread-64124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:39:46.358 [DEBUG] [Thread-64124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:39:46.358 [INFO] [Thread-64124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:39:46.365 [DEBUG] [Thread-64124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:39:46.365 [DEBUG] [Thread-64124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:39:46.365 [DEBUG] [Thread-64124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] client lang: <none>
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] server lang: <none>
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] kex follows: False
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] Compression: none
2025-11-18T00:39:46.366 [DEBUG] [Thread-64124] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:39:46.422 [DEBUG] [Thread-64124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:39:46.422 [DEBUG] [Thread-64124] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:39:46.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:39:46.422 [DEBUG] [Thread-64124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:39:46.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:39:46.478 [DEBUG] [Thread-64124] [transport.py] [_log()] userauth is OK
2025-11-18T00:39:46.479 [DEBUG] [Thread-64124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:39:46.479 [DEBUG] [Thread-64124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:39:46.479 [DEBUG] [Thread-64124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:39:46.479 [DEBUG] [Thread-64124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:39:46.492 [INFO] [Thread-64124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:39:46.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:39:46.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:39:47.314 [DEBUG] [Thread-64124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:39:47.314 [DEBUG] [Thread-64124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:39:47.363 [DEBUG] [Thread-64124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:39:47.363 [DEBUG] [Thread-64124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:39:47.371 [DEBUG] [Thread-64124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:39:47.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:39:47.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:39:47.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:39:47.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:39:47.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:39:47.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:39:47.402 [DEBUG] [Thread-64124] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:39:49.992 [DEBUG] [Thread-64126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:39:55.271 [DEBUG] [Thread-64127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:39:59.689 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:40:05.033 [DEBUG] [Thread-64128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:40:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:40:17.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:40:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:40:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 39, 45), 12.39, 42.8, 0.0, 22.87, 13.49, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:40:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:39:45
2025-11-18T00:40:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:40:18.378 [DEBUG] [Thread-64129] [transport.py] [_log()] starting thread (client mode): 0xd3152230
2025-11-18T00:40:18.378 [DEBUG] [Thread-64129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:40:18.399 [DEBUG] [Thread-64129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:40:18.399 [INFO] [Thread-64129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] client lang: <none>
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] server lang: <none>
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] kex follows: False
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] Compression: none
2025-11-18T00:40:18.402 [DEBUG] [Thread-64129] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:40:18.418 [DEBUG] [Thread-64129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:40:18.418 [DEBUG] [Thread-64129] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:40:18.418 [DEBUG] [Thread-64129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:40:18.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:40:18.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:40:18.419 [DEBUG] [Thread-64129] [transport.py] [_log()] userauth is OK
2025-11-18T00:40:18.419 [DEBUG] [Thread-64129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:40:18.419 [DEBUG] [Thread-64129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:40:18.419 [DEBUG] [Thread-64129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:40:18.419 [DEBUG] [Thread-64129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:40:18.434 [INFO] [Thread-64129] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:40:18.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:40:19.470 [DEBUG] [Thread-64129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:40:19.470 [DEBUG] [Thread-64129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:40:19.470 [DEBUG] [Thread-64129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:40:19.511 [DEBUG] [Thread-64129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:40:19.511 [DEBUG] [Thread-64129] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:40:19.513 [DEBUG] [Thread-64129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:40:19.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:40:19.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:40:19.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:40:19.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:40:19.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:40:19.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:40:19.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:40:19.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:40:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:40:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.944141 -999.00  +13.40  17.83     49   +2.90 1 1 1 1 1     0    0 11.10 37.15 ZNESW 17.9 17.8 168.0 25.5 13.8 -22.1 13.7 -21.0 13.5 -21.0 13.8 -22.1
2025-11-18T00:40:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:40:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:40:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.944141
2025-11-18T00:40:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:40:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:40:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:40:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:40:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:40:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:39:45', tmtdew=12.39, humidity=42.8, cloud=0.0, wind=22.87, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:39:45', seeing=1.6, atlas_timestamp='2025-11-17T22:39:33.782', atlas_cloud=1, atlas_rain=1, zp_data=[0.17224999999999824, 0.24875000000000114, 0.17825000000000024, 0.2594999999999992, 0.22949999999999982, 0.27725000000000044, 0.25399999999999956, 0.16825000000000045, 0.18349999999999866, 0.3365000000000009, 0.36824999999999974, 0.30100000000000016, 0.39750000000000085, 0.21774999999999878, 0.2530000000000001, 0.18900000000000006, 0.2312499999999993, 0.4294999999999991, 0.7619999999999996, 0.5252499999999989, 0.28999999999999915, 0.2527499999999989, 0.47075000000000067, 0.3017500000000002, 0.17149999999999999, 0.4195000000000002, 1.5332500000000007, 1.2435, 0.5325000000000006, 0.28300000000000125, 0.5020000000000007, 0.11700000000000088, 0.09674999999999834], zp_timestamp='2025-11-17T22:35:00')
2025-11-18T00:40:19.547 [DEBUG] [Thread-64129] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:40:19.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:40:19.639 [DEBUG] [Thread-64132] [transport.py] [_log()] starting thread (client mode): 0xd07008e0
2025-11-18T00:40:19.639 [DEBUG] [Thread-64132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:40:19.656 [DEBUG] [Thread-64132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:40:19.656 [INFO] [Thread-64132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:40:19.663 [DEBUG] [Thread-64132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] client lang: <none>
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] server lang: <none>
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] kex follows: False
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] Compression: none
2025-11-18T00:40:19.664 [DEBUG] [Thread-64132] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:40:19.726 [DEBUG] [Thread-64132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:40:19.726 [DEBUG] [Thread-64132] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:40:19.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:40:19.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:40:19.726 [DEBUG] [Thread-64132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:40:19.783 [DEBUG] [Thread-64132] [transport.py] [_log()] userauth is OK
2025-11-18T00:40:19.784 [DEBUG] [Thread-64132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:40:19.784 [DEBUG] [Thread-64132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:40:19.784 [DEBUG] [Thread-64132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:40:19.784 [DEBUG] [Thread-64132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:40:19.804 [INFO] [Thread-64132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:40:19.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:40:19.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:40:20.063 [DEBUG] [Thread-64134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:40:20.616 [DEBUG] [Thread-64132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:40:20.617 [DEBUG] [Thread-64132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:40:20.664 [DEBUG] [Thread-64132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:40:20.664 [DEBUG] [Thread-64132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:40:20.672 [DEBUG] [Thread-64132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:40:20.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:40:20.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:40:20.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:40:20.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:40:20.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:40:20.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:40:20.703 [DEBUG] [Thread-64132] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:40:29.187 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:40:29.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:40:35.112 [DEBUG] [Thread-64135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:40:50.139 [DEBUG] [Thread-64136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:40:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:40:50.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:40:50.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:40:51.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 40, 17), 12.39, 42.78, 0.0, 26.4, 13.44, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:40:51.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:40:17
2025-11-18T00:40:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:40:51.742 [DEBUG] [Thread-64137] [transport.py] [_log()] starting thread (client mode): 0xd0700f10
2025-11-18T00:40:51.742 [DEBUG] [Thread-64137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:40:51.761 [DEBUG] [Thread-64137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:40:51.762 [INFO] [Thread-64137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] client lang: <none>
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] server lang: <none>
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] kex follows: False
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] Compression: none
2025-11-18T00:40:51.765 [DEBUG] [Thread-64137] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:40:51.781 [DEBUG] [Thread-64137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:40:51.781 [DEBUG] [Thread-64137] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:40:51.781 [DEBUG] [Thread-64137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:40:51.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:40:51.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:40:51.782 [DEBUG] [Thread-64137] [transport.py] [_log()] userauth is OK
2025-11-18T00:40:51.782 [DEBUG] [Thread-64137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:40:51.782 [DEBUG] [Thread-64137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:40:51.782 [DEBUG] [Thread-64137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:40:51.782 [DEBUG] [Thread-64137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:40:51.792 [INFO] [Thread-64137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:40:51.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:40:52.431 [DEBUG] [Thread-64137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:40:52.432 [DEBUG] [Thread-64137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:40:52.432 [DEBUG] [Thread-64137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:40:52.472 [DEBUG] [Thread-64137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:40:52.472 [DEBUG] [Thread-64137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:40:52.475 [DEBUG] [Thread-64137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:40:52.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:40:52.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:40:52.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:40:52.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:40:52.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:40:52.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:40:52.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:40:52.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:40:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:40:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.944836 -999.00  +13.40  16.80     48   +2.70 1 1 1 1 1     0    0 11.27 42.33 ZNESW 14.7 16.8 150.6 24.7 13.8 -22.2 13.7 -21.0 13.4 -20.8 13.8 -21.9
2025-11-18T00:40:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:40:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:40:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.944836
2025-11-18T00:40:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:40:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:40:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:40:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:40:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:40:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:40:17', tmtdew=12.39, humidity=42.78, cloud=0.0, wind=26.4, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:40:49', seeing=1.44, atlas_timestamp='2025-11-17T22:40:33.830', atlas_cloud=1, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:39:00')
2025-11-18T00:40:52.499 [DEBUG] [Thread-64137] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:40:52.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:40:52.596 [DEBUG] [Thread-64140] [transport.py] [_log()] starting thread (client mode): 0xd3162740
2025-11-18T00:40:52.596 [DEBUG] [Thread-64140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:40:52.610 [DEBUG] [Thread-64140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:40:52.611 [INFO] [Thread-64140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] client lang: <none>
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] server lang: <none>
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] kex follows: False
2025-11-18T00:40:52.618 [DEBUG] [Thread-64140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:40:52.619 [DEBUG] [Thread-64140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:40:52.619 [DEBUG] [Thread-64140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:40:52.619 [DEBUG] [Thread-64140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:40:52.619 [DEBUG] [Thread-64140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:40:52.619 [DEBUG] [Thread-64140] [transport.py] [_log()] Compression: none
2025-11-18T00:40:52.619 [DEBUG] [Thread-64140] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:40:52.675 [DEBUG] [Thread-64140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:40:52.675 [DEBUG] [Thread-64140] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:40:52.676 [DEBUG] [Thread-64140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:40:52.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:40:52.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:40:52.731 [DEBUG] [Thread-64140] [transport.py] [_log()] userauth is OK
2025-11-18T00:40:52.731 [DEBUG] [Thread-64140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:40:52.731 [DEBUG] [Thread-64140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:40:52.731 [DEBUG] [Thread-64140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:40:52.731 [DEBUG] [Thread-64140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:40:52.751 [INFO] [Thread-64140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:40:52.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:40:52.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:40:53.579 [DEBUG] [Thread-64140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:40:53.579 [DEBUG] [Thread-64140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:40:53.627 [DEBUG] [Thread-64140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:40:53.627 [DEBUG] [Thread-64140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:40:53.636 [DEBUG] [Thread-64140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:40:53.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:40:53.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:40: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') -> 00000000
2025-11-18T00:40:53.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:40:53.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:40:53.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:40:53.669 [DEBUG] [Thread-64140] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:40:55.334 [DEBUG] [Thread-64142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:41:05.162 [DEBUG] [Thread-64143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:41:20.192 [DEBUG] [Thread-64144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:41:23.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:41:23.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:41:23.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:41:24.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 40, 49), 12.38, 42.82, 0.0, 21.77, 13.48, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:41:24.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:40:49
2025-11-18T00:41:24.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:41:24.633 [DEBUG] [Thread-64145] [transport.py] [_log()] starting thread (client mode): 0xd3150e80
2025-11-18T00:41:24.633 [DEBUG] [Thread-64145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:41:24.653 [DEBUG] [Thread-64145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:41:24.653 [INFO] [Thread-64145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] client lang: <none>
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] server lang: <none>
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] kex follows: False
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] Compression: none
2025-11-18T00:41:24.657 [DEBUG] [Thread-64145] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:41:24.675 [DEBUG] [Thread-64145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:41:24.675 [DEBUG] [Thread-64145] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:41:24.676 [DEBUG] [Thread-64145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:41:24.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:41:24.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:41:24.677 [DEBUG] [Thread-64145] [transport.py] [_log()] userauth is OK
2025-11-18T00:41:24.678 [DEBUG] [Thread-64145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:41:24.678 [DEBUG] [Thread-64145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:41:24.678 [DEBUG] [Thread-64145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:41:24.678 [DEBUG] [Thread-64145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:41:24.696 [INFO] [Thread-64145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:41:24.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:41:25.296 [DEBUG] [Thread-64145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:41:25.296 [DEBUG] [Thread-64145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:41:25.296 [DEBUG] [Thread-64145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:41:25.337 [DEBUG] [Thread-64145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:41:25.338 [DEBUG] [Thread-64145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:41:25.340 [DEBUG] [Thread-64145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:41:25.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:41:25.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:41:25.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:41:25.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:41:25.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:41:25.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:41:25.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:41:25.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:41:25.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:41:25.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.945183 -999.00  +13.40  12.18     48   +2.90 1 1 1 1 1     0    0 11.23 42.71 ZNESW 12.3 12.2 151.0 19.0 13.8 -22.5 13.8 -21.1 13.5 -21.1 13.8 -22.0
2025-11-18T00:41:25.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:41:25.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:41:25.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.945183
2025-11-18T00:41:25.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:41:25.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:41:25.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:41:25.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:41:25.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:41:25.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:40:49', tmtdew=12.38, humidity=42.82, cloud=0.0, wind=21.77, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:41:21', seeing=1.44, atlas_timestamp='2025-11-17T22:41:03.811', atlas_cloud=1, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:39:00')
2025-11-18T00:41:25.363 [DEBUG] [Thread-64145] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:41:25.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:41:25.459 [DEBUG] [Thread-64148] [transport.py] [_log()] starting thread (client mode): 0xd3151d80
2025-11-18T00:41:25.459 [DEBUG] [Thread-64148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:41:25.474 [DEBUG] [Thread-64148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:41:25.474 [INFO] [Thread-64148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:41:25.481 [DEBUG] [Thread-64148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:41:25.481 [DEBUG] [Thread-64148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:41:25.481 [DEBUG] [Thread-64148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] client lang: <none>
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] server lang: <none>
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] kex follows: False
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] Compression: none
2025-11-18T00:41:25.482 [DEBUG] [Thread-64148] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:41:25.538 [DEBUG] [Thread-64148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:41:25.538 [DEBUG] [Thread-64148] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:41:25.538 [DEBUG] [Thread-64148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:41:25.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:41:25.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:41:25.596 [DEBUG] [Thread-64148] [transport.py] [_log()] userauth is OK
2025-11-18T00:41:25.596 [DEBUG] [Thread-64148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:41:25.596 [DEBUG] [Thread-64148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:41:25.596 [DEBUG] [Thread-64148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:41:25.596 [DEBUG] [Thread-64148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:41:25.615 [INFO] [Thread-64148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:41:25.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:41:25.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:41:26.445 [DEBUG] [Thread-64148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:41:26.445 [DEBUG] [Thread-64148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:41:26.495 [DEBUG] [Thread-64148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:41:26.495 [DEBUG] [Thread-64148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:41:26.504 [DEBUG] [Thread-64148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:41:26.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:41:26.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:41:26.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:41:26.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:41:26.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:41:26.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:41:26.545 [DEBUG] [Thread-64148] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:41:29.391 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:41:29.392 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:41:35.223 [DEBUG] [Thread-64150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:41:50.258 [DEBUG] [Thread-64151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:41:55.413 [DEBUG] [Thread-64152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:41:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:41:56.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:41:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:41:57.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 41, 53), 12.27, 43.37, 0.0, 21.1, 13.46, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:41:57.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:41:53
2025-11-18T00:41:57.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:41:57.504 [DEBUG] [Thread-64153] [transport.py] [_log()] starting thread (client mode): 0xd0702b60
2025-11-18T00:41:57.504 [DEBUG] [Thread-64153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:41:57.525 [DEBUG] [Thread-64153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:41:57.525 [INFO] [Thread-64153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] client lang: <none>
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] server lang: <none>
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] kex follows: False
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] Compression: none
2025-11-18T00:41:57.529 [DEBUG] [Thread-64153] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:41:57.546 [DEBUG] [Thread-64153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:41:57.546 [DEBUG] [Thread-64153] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:41:57.547 [DEBUG] [Thread-64153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:41:57.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:41:57.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:41:57.549 [DEBUG] [Thread-64153] [transport.py] [_log()] userauth is OK
2025-11-18T00:41:57.549 [DEBUG] [Thread-64153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:41:57.549 [DEBUG] [Thread-64153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:41:57.549 [DEBUG] [Thread-64153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:41:57.549 [DEBUG] [Thread-64153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:41:57.570 [INFO] [Thread-64153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:41:57.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:41:58.212 [DEBUG] [Thread-64153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:41:58.213 [DEBUG] [Thread-64153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:41:58.213 [DEBUG] [Thread-64153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:41:58.253 [DEBUG] [Thread-64153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:41:58.253 [DEBUG] [Thread-64153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:41:58.256 [DEBUG] [Thread-64153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:41:58.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:41:58.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:41:58.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:41:58.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:41:58.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:41:58.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:41:58.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:41:58.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:41:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:41:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.945530 -999.00  +13.40  14.16     49   +2.90 1 1 1 1 1     0    0 11.46 44.26 ZNESW 16.1 14.2 163.0 18.6 13.8 -22.4 13.7 -21.1 13.5 -20.9 13.8 -22.2
2025-11-18T00:41:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:41:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:41:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.945530
2025-11-18T00:41:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:41:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:41:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:41:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:41:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:41:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:41:53', tmtdew=12.27, humidity=43.37, cloud=0.0, wind=21.1, temperature=13.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:41:53', seeing=1.51, atlas_timestamp='2025-11-17T22:41:33.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:39:00')
2025-11-18T00:41:58.278 [DEBUG] [Thread-64153] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:41:58.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:41:58.378 [DEBUG] [Thread-64156] [transport.py] [_log()] starting thread (client mode): 0xd07a3fd0
2025-11-18T00:41:58.378 [DEBUG] [Thread-64156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:41:58.393 [DEBUG] [Thread-64156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:41:58.394 [INFO] [Thread-64156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:41:58.401 [DEBUG] [Thread-64156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:41:58.401 [DEBUG] [Thread-64156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:41:58.401 [DEBUG] [Thread-64156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] client lang: <none>
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] server lang: <none>
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] kex follows: False
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:41:58.402 [DEBUG] [Thread-64156] [transport.py] [_log()] Compression: none
2025-11-18T00:41:58.403 [DEBUG] [Thread-64156] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:41:58.460 [DEBUG] [Thread-64156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:41:58.460 [DEBUG] [Thread-64156] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:41:58.461 [DEBUG] [Thread-64156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:41:58.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:41:58.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:41:58.516 [DEBUG] [Thread-64156] [transport.py] [_log()] userauth is OK
2025-11-18T00:41:58.516 [DEBUG] [Thread-64156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:41:58.517 [DEBUG] [Thread-64156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:41:58.517 [DEBUG] [Thread-64156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:41:58.517 [DEBUG] [Thread-64156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:41:58.536 [INFO] [Thread-64156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:41:58.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:41:58.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:41:59.390 [DEBUG] [Thread-64156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:41:59.390 [DEBUG] [Thread-64156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:41:59.438 [DEBUG] [Thread-64156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:41:59.438 [DEBUG] [Thread-64156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:41:59.447 [DEBUG] [Thread-64156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:41:59.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:41:59.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:41:59.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:41:59.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:41:59.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:41:59.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:41:59.482 [DEBUG] [Thread-64156] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:42:05.286 [DEBUG] [Thread-64158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:42:20.334 [DEBUG] [Thread-64159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:42:29.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:42:29.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:42:29.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:42:29.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:42:29.596 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:42:30.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 42, 25), 12.27, 43.35, 0.0, 23.41, 13.43, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:42:30.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:42:25
2025-11-18T00:42:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:42:30.438 [DEBUG] [Thread-64160] [transport.py] [_log()] starting thread (client mode): 0xd317d690
2025-11-18T00:42:30.438 [DEBUG] [Thread-64160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:42:30.458 [DEBUG] [Thread-64160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:42:30.458 [INFO] [Thread-64160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:42:30.461 [DEBUG] [Thread-64160] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:42:30.461 [DEBUG] [Thread-64160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] client lang: <none>
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] server lang: <none>
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] kex follows: False
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:42:30.462 [DEBUG] [Thread-64160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:42:30.463 [DEBUG] [Thread-64160] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:42:30.463 [DEBUG] [Thread-64160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:42:30.463 [DEBUG] [Thread-64160] [transport.py] [_log()] Compression: none
2025-11-18T00:42:30.463 [DEBUG] [Thread-64160] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:42:30.480 [DEBUG] [Thread-64160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:42:30.481 [DEBUG] [Thread-64160] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:42:30.482 [DEBUG] [Thread-64160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:42:30.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:42:30.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:42:30.484 [DEBUG] [Thread-64160] [transport.py] [_log()] userauth is OK
2025-11-18T00:42:30.484 [DEBUG] [Thread-64160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:42:30.484 [DEBUG] [Thread-64160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:42:30.484 [DEBUG] [Thread-64160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:42:30.485 [DEBUG] [Thread-64160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:42:30.511 [INFO] [Thread-64160] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:42:30.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:42:31.149 [DEBUG] [Thread-64160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:42:31.149 [DEBUG] [Thread-64160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:42:31.150 [DEBUG] [Thread-64160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:42:31.190 [DEBUG] [Thread-64160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:42:31.190 [DEBUG] [Thread-64160] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:42:31.193 [DEBUG] [Thread-64160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:42:31.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:42:31.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:42:31.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:42:31.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:42:31.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:42:31.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:42:31.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:42:31.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:42:31.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:42:31.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.945878 -999.00  +13.30  16.72     49   +2.90 1 1 1 1 1     0    0 11.44 45.36 ZNESW 12.8 16.7 172.6 18.8 13.8 -22.4 13.7 -21.1 13.5 -20.9 13.8 -22.2
2025-11-18T00:42:31.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:42:31.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:42:31.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.945878
2025-11-18T00:42:31.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:42:31.218 [DEBUG] [Thread-64160] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:42:31.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:42:31.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:42:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:42:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:42:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:42:25', tmtdew=12.27, humidity=43.35, cloud=0.0, wind=23.41, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:42:25', seeing=1.55, atlas_timestamp='2025-11-17T22:42:03.859', atlas_cloud=1, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:39:00')
2025-11-18T00:42:31.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:42:31.315 [DEBUG] [Thread-64163] [transport.py] [_log()] starting thread (client mode): 0xd07a8d90
2025-11-18T00:42:31.315 [DEBUG] [Thread-64163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:42:31.330 [DEBUG] [Thread-64163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:42:31.330 [INFO] [Thread-64163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:42:31.337 [DEBUG] [Thread-64163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] client lang: <none>
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] server lang: <none>
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] kex follows: False
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:42:31.338 [DEBUG] [Thread-64163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:42:31.339 [DEBUG] [Thread-64163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:42:31.339 [DEBUG] [Thread-64163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:42:31.339 [DEBUG] [Thread-64163] [transport.py] [_log()] Compression: none
2025-11-18T00:42:31.339 [DEBUG] [Thread-64163] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:42:31.395 [DEBUG] [Thread-64163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:42:31.396 [DEBUG] [Thread-64163] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:42:31.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:42:31.396 [DEBUG] [Thread-64163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:42:31.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:42:31.453 [DEBUG] [Thread-64163] [transport.py] [_log()] userauth is OK
2025-11-18T00:42:31.453 [DEBUG] [Thread-64163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:42:31.453 [DEBUG] [Thread-64163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:42:31.453 [DEBUG] [Thread-64163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:42:31.453 [DEBUG] [Thread-64163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:42:31.471 [INFO] [Thread-64163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:42:31.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:42:31.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:42:32.370 [DEBUG] [Thread-64163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:42:32.370 [DEBUG] [Thread-64163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:42:32.418 [DEBUG] [Thread-64163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:42:32.418 [DEBUG] [Thread-64163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:42:32.427 [DEBUG] [Thread-64163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:42:32.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:42:32.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:42:32.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:42:32.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:42:32.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:42:32.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:42:32.460 [DEBUG] [Thread-64163] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:42:35.358 [DEBUG] [Thread-64165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:42:50.397 [DEBUG] [Thread-64166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:42:55.466 [DEBUG] [Thread-64167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:43:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:43:02.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:43:02.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:43:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 42, 57), 12.31, 43.38, 0.0, 25.62, 13.44, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:43:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:42:57
2025-11-18T00:43:03.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:43:03.416 [DEBUG] [Thread-64168] [transport.py] [_log()] starting thread (client mode): 0xd07ab1c0
2025-11-18T00:43:03.417 [DEBUG] [Thread-64168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:43:03.437 [DEBUG] [Thread-64168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:43:03.437 [INFO] [Thread-64168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:43:03.440 [DEBUG] [Thread-64168] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:43:03.440 [DEBUG] [Thread-64168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:43:03.440 [DEBUG] [Thread-64168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:43:03.440 [DEBUG] [Thread-64168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:43:03.440 [DEBUG] [Thread-64168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:43:03.440 [DEBUG] [Thread-64168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:43:03.440 [DEBUG] [Thread-64168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] client lang: <none>
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] server lang: <none>
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] kex follows: False
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] Compression: none
2025-11-18T00:43:03.441 [DEBUG] [Thread-64168] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:43:03.459 [DEBUG] [Thread-64168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:43:03.460 [DEBUG] [Thread-64168] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:43:03.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:43:03.461 [DEBUG] [Thread-64168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:43:03.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:43:03.462 [DEBUG] [Thread-64168] [transport.py] [_log()] userauth is OK
2025-11-18T00:43:03.463 [DEBUG] [Thread-64168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:43:03.463 [DEBUG] [Thread-64168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:43:03.463 [DEBUG] [Thread-64168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:43:03.463 [DEBUG] [Thread-64168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:43:03.474 [INFO] [Thread-64168] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:43:03.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:43:04.115 [DEBUG] [Thread-64168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:43:04.116 [DEBUG] [Thread-64168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:43:04.116 [DEBUG] [Thread-64168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:43:04.156 [DEBUG] [Thread-64168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:43:04.156 [DEBUG] [Thread-64168] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:43:04.159 [DEBUG] [Thread-64168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:43:04.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:43:04.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:43:04.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:43:04.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:43:04.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:43:04.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:43:04.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:43:04.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:43:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:43:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.946225 -999.00  +13.30  11.94     48   +2.70 1 2 1 1 1     0    0 11.68 45.83 ZNEsW 16.1 11.9 162.2 23.2 13.8 -22.4 13.7 -21.0 13.5 -21.0 13.8 -22.0
2025-11-18T00:43:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:43:04.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:43:04.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.946225
2025-11-18T00:43:04.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:43:04.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:43:04.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:43:04.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:43:04.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:43:04.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:42:57', tmtdew=12.31, humidity=43.38, cloud=0.0, wind=25.62, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:42:57', seeing=1.55, atlas_timestamp='2025-11-17T22:42:33.840', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:39:00')
2025-11-18T00:43:04.186 [DEBUG] [Thread-64168] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:43:04.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:43:04.294 [DEBUG] [Thread-64171] [transport.py] [_log()] starting thread (client mode): 0xd3152350
2025-11-18T00:43:04.294 [DEBUG] [Thread-64171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:43:04.309 [DEBUG] [Thread-64171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:43:04.310 [INFO] [Thread-64171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:43:04.317 [DEBUG] [Thread-64171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:43:04.317 [DEBUG] [Thread-64171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:43:04.317 [DEBUG] [Thread-64171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:43:04.318 [DEBUG] [Thread-64171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:43:04.318 [DEBUG] [Thread-64171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:43:04.318 [DEBUG] [Thread-64171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:43:04.318 [DEBUG] [Thread-64171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:43:04.318 [DEBUG] [Thread-64171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:43:04.318 [DEBUG] [Thread-64171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:43:04.318 [DEBUG] [Thread-64171] [transport.py] [_log()] client lang: <none>
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] server lang: <none>
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] kex follows: False
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] Compression: none
2025-11-18T00:43:04.319 [DEBUG] [Thread-64171] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:43:04.380 [DEBUG] [Thread-64171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:43:04.381 [DEBUG] [Thread-64171] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:43:04.382 [DEBUG] [Thread-64171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:43:04.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:43:04.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:43:04.440 [DEBUG] [Thread-64171] [transport.py] [_log()] userauth is OK
2025-11-18T00:43:04.441 [DEBUG] [Thread-64171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:43:04.441 [DEBUG] [Thread-64171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:43:04.441 [DEBUG] [Thread-64171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:43:04.441 [DEBUG] [Thread-64171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:43:04.460 [INFO] [Thread-64171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:43:04.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:43:04.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:43:05.314 [DEBUG] [Thread-64171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:43:05.314 [DEBUG] [Thread-64171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:43:05.362 [DEBUG] [Thread-64171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:43:05.362 [DEBUG] [Thread-64171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:43:05.372 [DEBUG] [Thread-64171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:43:05.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:43:05.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:43:05.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:43:05.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:43:05.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:43:05.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:43:05.406 [DEBUG] [Thread-64171] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:43:05.425 [DEBUG] [Thread-64173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:43:20.467 [DEBUG] [Thread-64174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:43:29.796 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:43:29.797 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:43:35.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:43:35.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:43:35.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:43:35.494 [DEBUG] [Thread-64175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:43:36.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 43, 29), 12.34, 43.28, 0.0, 25.44, 13.39, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:43:36.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:43:29
2025-11-18T00:43:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:43:36.400 [DEBUG] [Thread-64176] [transport.py] [_log()] starting thread (client mode): 0xd3152110
2025-11-18T00:43:36.400 [DEBUG] [Thread-64176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:43:36.420 [DEBUG] [Thread-64176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:43:36.420 [INFO] [Thread-64176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] client lang: <none>
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] server lang: <none>
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] kex follows: False
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] Compression: none
2025-11-18T00:43:36.423 [DEBUG] [Thread-64176] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:43:36.431 [DEBUG] [Thread-64176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:43:36.431 [DEBUG] [Thread-64176] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:43:36.431 [DEBUG] [Thread-64176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:43:36.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:43:36.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:43:36.432 [DEBUG] [Thread-64176] [transport.py] [_log()] userauth is OK
2025-11-18T00:43:36.432 [DEBUG] [Thread-64176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:43:36.432 [DEBUG] [Thread-64176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:43:36.432 [DEBUG] [Thread-64176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:43:36.432 [DEBUG] [Thread-64176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:43:36.442 [INFO] [Thread-64176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:43:36.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:43:37.015 [DEBUG] [Thread-64176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:43:37.015 [DEBUG] [Thread-64176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:43:37.016 [DEBUG] [Thread-64176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:43:37.056 [DEBUG] [Thread-64176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:43:37.056 [DEBUG] [Thread-64176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:43:37.060 [DEBUG] [Thread-64176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:43:37.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:43:37.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:43:37.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:43:37.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:43:37.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:43:37.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:43:37.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.946631 -999.00  +13.30  10.34     48   +2.70 1 2 1 1 1     0    0 11.16 43.53 ZNEsW 20.1 10.3 163.8 17.4 13.8 -22.4 13.7 -21.1 13.4 -20.8 13.8 -22.2
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.946631
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:43:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:43:29', tmtdew=12.34, humidity=43.28, cloud=0.0, wind=25.44, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:43:29', seeing=1.52, atlas_timestamp='2025-11-17T22:43:08.918', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:39:00')
2025-11-18T00:43:37.090 [DEBUG] [Thread-64176] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:43:37.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:43:37.176 [DEBUG] [Thread-64179] [transport.py] [_log()] starting thread (client mode): 0xd3150310
2025-11-18T00:43:37.176 [DEBUG] [Thread-64179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:43:37.190 [DEBUG] [Thread-64179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:43:37.191 [INFO] [Thread-64179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] client lang: <none>
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] server lang: <none>
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] kex follows: False
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] Compression: none
2025-11-18T00:43:37.198 [DEBUG] [Thread-64179] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:43:37.255 [DEBUG] [Thread-64179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:43:37.255 [DEBUG] [Thread-64179] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:43:37.255 [DEBUG] [Thread-64179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:43:37.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:43:37.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:43:37.312 [DEBUG] [Thread-64179] [transport.py] [_log()] userauth is OK
2025-11-18T00:43:37.312 [DEBUG] [Thread-64179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:43:37.312 [DEBUG] [Thread-64179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:43:37.312 [DEBUG] [Thread-64179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:43:37.312 [DEBUG] [Thread-64179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:43:37.326 [INFO] [Thread-64179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:43:37.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:43:37.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:43:38.184 [DEBUG] [Thread-64179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:43:38.184 [DEBUG] [Thread-64179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:43:38.232 [DEBUG] [Thread-64179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:43:38.232 [DEBUG] [Thread-64179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:43:38.240 [DEBUG] [Thread-64179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:43:38.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:43:38.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:43:38.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:43:38.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:43:38.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:43:38.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:43:38.271 [DEBUG] [Thread-64179] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:43:50.520 [DEBUG] [Thread-64181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:43:55.527 [DEBUG] [Thread-64182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:44:05.570 [DEBUG] [Thread-64183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:44:08.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:44:08.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:44:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:44:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 44, 1), 12.33, 43.17, 0.0, 20.64, 13.43, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:44:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:44:01
2025-11-18T00:44:09.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:44:09.222 [DEBUG] [Thread-64184] [transport.py] [_log()] starting thread (client mode): 0xd317dea0
2025-11-18T00:44:09.222 [DEBUG] [Thread-64184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:44:09.244 [DEBUG] [Thread-64184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:44:09.244 [INFO] [Thread-64184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:44:09.247 [DEBUG] [Thread-64184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:44:09.247 [DEBUG] [Thread-64184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:44:09.247 [DEBUG] [Thread-64184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] client lang: <none>
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] server lang: <none>
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] kex follows: False
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:44:09.248 [DEBUG] [Thread-64184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:44:09.249 [DEBUG] [Thread-64184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:44:09.249 [DEBUG] [Thread-64184] [transport.py] [_log()] Compression: none
2025-11-18T00:44:09.249 [DEBUG] [Thread-64184] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:44:09.269 [DEBUG] [Thread-64184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:44:09.269 [DEBUG] [Thread-64184] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:44:09.270 [DEBUG] [Thread-64184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:44:09.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:44:09.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:44:09.272 [DEBUG] [Thread-64184] [transport.py] [_log()] userauth is OK
2025-11-18T00:44:09.272 [DEBUG] [Thread-64184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:44:09.272 [DEBUG] [Thread-64184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:44:09.272 [DEBUG] [Thread-64184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:44:09.272 [DEBUG] [Thread-64184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:44:09.289 [INFO] [Thread-64184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:44:09.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:44:09.915 [DEBUG] [Thread-64184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:44:09.915 [DEBUG] [Thread-64184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:44:09.915 [DEBUG] [Thread-64184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:44:09.956 [DEBUG] [Thread-64184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:44:09.956 [DEBUG] [Thread-64184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:44:09.959 [DEBUG] [Thread-64184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:44:09.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:44:09.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:44:09.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:44:09.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:44:09.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:44:09.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:44:09.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:44:09.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:44:09.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:44:09.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.946631 -999.00  +13.30  10.34     48   +2.70 1 2 1 1 1     0    0 11.16 43.53 ZNEsW 20.1 10.3 163.8 17.4 13.8 -22.4 13.7 -21.1 13.4 -20.8 13.8 -22.2
2025-11-18T00:44:09.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:44:09.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:44:09.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.946631
2025-11-18T00:44:09.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:44:09.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:44:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:44:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:44:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:44:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:44:01', tmtdew=12.33, humidity=43.17, cloud=0.0, wind=20.64, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:44:01', seeing=1.39, atlas_timestamp='2025-11-17T22:43:08.918', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:43:00')
2025-11-18T00:44:09.984 [DEBUG] [Thread-64184] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:44:10.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:44:10.081 [DEBUG] [Thread-64187] [transport.py] [_log()] starting thread (client mode): 0xd07007f0
2025-11-18T00:44:10.082 [DEBUG] [Thread-64187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:44:10.096 [DEBUG] [Thread-64187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:44:10.096 [INFO] [Thread-64187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:44:10.104 [DEBUG] [Thread-64187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] client lang: <none>
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] server lang: <none>
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] kex follows: False
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] Compression: none
2025-11-18T00:44:10.105 [DEBUG] [Thread-64187] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:44:10.160 [DEBUG] [Thread-64187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:44:10.161 [DEBUG] [Thread-64187] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:44:10.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:44:10.162 [DEBUG] [Thread-64187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:44:10.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:44:10.216 [DEBUG] [Thread-64187] [transport.py] [_log()] userauth is OK
2025-11-18T00:44:10.217 [DEBUG] [Thread-64187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:44:10.217 [DEBUG] [Thread-64187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:44:10.217 [DEBUG] [Thread-64187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:44:10.217 [DEBUG] [Thread-64187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:44:10.231 [INFO] [Thread-64187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:44:10.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:44:10.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:44:11.096 [DEBUG] [Thread-64187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:44:11.096 [DEBUG] [Thread-64187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:44:11.144 [DEBUG] [Thread-64187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:44:11.144 [DEBUG] [Thread-64187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:44:11.153 [DEBUG] [Thread-64187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:44:11.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:44:11.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:44:11.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:44:11.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:44:11.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:44:11.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:44:11.190 [DEBUG] [Thread-64187] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:44:20.600 [DEBUG] [Thread-64189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:44:30.000 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:44:30.002 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:44:35.633 [DEBUG] [Thread-64190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:44:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:44:41.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:44: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
2025-11-18T00:44:41.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 44, 33), 12.56, 42.33, 0.0, 22.69, 13.68, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:44:41.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:44:33
2025-11-18T00:44:41.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:44:42.130 [DEBUG] [Thread-64191] [transport.py] [_log()] starting thread (client mode): 0xd07a8ee0
2025-11-18T00:44:42.130 [DEBUG] [Thread-64191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:44:42.151 [DEBUG] [Thread-64191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:44:42.151 [INFO] [Thread-64191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] client lang: <none>
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] server lang: <none>
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] kex follows: False
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] Compression: none
2025-11-18T00:44:42.153 [DEBUG] [Thread-64191] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:44:42.165 [DEBUG] [Thread-64191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:44:42.166 [DEBUG] [Thread-64191] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:44:42.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:44:42.167 [DEBUG] [Thread-64191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:44:42.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:44:42.169 [DEBUG] [Thread-64191] [transport.py] [_log()] userauth is OK
2025-11-18T00:44:42.169 [DEBUG] [Thread-64191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:44:42.169 [DEBUG] [Thread-64191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:44:42.169 [DEBUG] [Thread-64191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:44:42.169 [DEBUG] [Thread-64191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:44:42.194 [INFO] [Thread-64191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:44:42.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:44:42.845 [DEBUG] [Thread-64191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:44:42.845 [DEBUG] [Thread-64191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:44:42.845 [DEBUG] [Thread-64191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:44:42.886 [DEBUG] [Thread-64191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:44:42.886 [DEBUG] [Thread-64191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:44:42.889 [DEBUG] [Thread-64191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:44:42.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:44:42.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:44:42.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:44:42.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:44:42.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:44:42.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:44:42.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:44:42.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:44:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:44:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.947266 -999.00  +13.40  13.23     48   +2.80 1 2 1 1 1     0    0 11.58 47.45 ZNEsW 18.1 13.2 161.6 15.1 13.8 -22.5 13.7 -21.1 13.4 -20.8 13.7 -22.1
2025-11-18T00:44:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:44:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:44:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.947266
2025-11-18T00:44:42.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:44:42.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:44:42.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:44:42.912 [DEBUG] [Thread-64191] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:44:42.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:44:42.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:44:42.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:44:33', tmtdew=12.56, humidity=42.33, cloud=0.0, wind=22.69, temperature=13.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:44:34', seeing=1.47, atlas_timestamp='2025-11-17T22:44:03.782', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:43:00')
2025-11-18T00:44:42.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:44:43.010 [DEBUG] [Thread-64194] [transport.py] [_log()] starting thread (client mode): 0xd3162680
2025-11-18T00:44:43.010 [DEBUG] [Thread-64194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:44:43.025 [DEBUG] [Thread-64194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:44:43.026 [INFO] [Thread-64194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:44:43.033 [DEBUG] [Thread-64194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:44:43.033 [DEBUG] [Thread-64194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] client lang: <none>
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] server lang: <none>
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] kex follows: False
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:44:43.034 [DEBUG] [Thread-64194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:44:43.035 [DEBUG] [Thread-64194] [transport.py] [_log()] Compression: none
2025-11-18T00:44:43.035 [DEBUG] [Thread-64194] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:44:43.093 [DEBUG] [Thread-64194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:44:43.093 [DEBUG] [Thread-64194] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:44:43.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:44:43.094 [DEBUG] [Thread-64194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:44:43.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:44:43.149 [DEBUG] [Thread-64194] [transport.py] [_log()] userauth is OK
2025-11-18T00:44:43.149 [DEBUG] [Thread-64194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:44:43.149 [DEBUG] [Thread-64194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:44:43.149 [DEBUG] [Thread-64194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:44:43.149 [DEBUG] [Thread-64194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:44:43.168 [INFO] [Thread-64194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:44:43.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:44:43.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:44:44.002 [DEBUG] [Thread-64194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:44:44.002 [DEBUG] [Thread-64194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:44:44.049 [DEBUG] [Thread-64194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:44:44.049 [DEBUG] [Thread-64194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:44:44.058 [DEBUG] [Thread-64194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:44:44.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:44:44.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:44:44.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:44:44.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:44:44.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:44:44.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:44:44.091 [DEBUG] [Thread-64194] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:44:50.664 [DEBUG] [Thread-64196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:44:55.607 [DEBUG] [Thread-64197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:45:05.711 [DEBUG] [Thread-64198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:45:14.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:45:14.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:45:14.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:45:14.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 45, 5), 12.24, 43.28, 0.0, 20.91, 13.38, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:45:14.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:45:05
2025-11-18T00:45:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:45:15.032 [DEBUG] [Thread-64199] [transport.py] [_log()] starting thread (client mode): 0xd0756aa0
2025-11-18T00:45:15.033 [DEBUG] [Thread-64199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:45:15.054 [DEBUG] [Thread-64199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:45:15.054 [INFO] [Thread-64199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:45:15.057 [DEBUG] [Thread-64199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:45:15.057 [DEBUG] [Thread-64199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:45:15.057 [DEBUG] [Thread-64199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:45:15.057 [DEBUG] [Thread-64199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:45:15.057 [DEBUG] [Thread-64199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:45:15.057 [DEBUG] [Thread-64199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] client lang: <none>
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] server lang: <none>
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] kex follows: False
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] Compression: none
2025-11-18T00:45:15.058 [DEBUG] [Thread-64199] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:45:15.076 [DEBUG] [Thread-64199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:45:15.077 [DEBUG] [Thread-64199] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:45:15.077 [DEBUG] [Thread-64199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:45:15.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:45:15.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:45:15.078 [DEBUG] [Thread-64199] [transport.py] [_log()] userauth is OK
2025-11-18T00:45:15.078 [DEBUG] [Thread-64199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:45:15.078 [DEBUG] [Thread-64199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:45:15.078 [DEBUG] [Thread-64199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:45:15.078 [DEBUG] [Thread-64199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:45:15.092 [INFO] [Thread-64199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:45:15.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:45:20.739 [DEBUG] [Thread-64201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:45:21.155 [DEBUG] [Thread-64199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:45:21.155 [DEBUG] [Thread-64199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:45:21.155 [DEBUG] [Thread-64199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:45:21.196 [DEBUG] [Thread-64199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:45:21.196 [DEBUG] [Thread-64199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:45:21.199 [DEBUG] [Thread-64199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:45:21.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:45:21.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:45:21.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:45:21.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:45:21.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:45:21.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:45:21.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:45:21.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:45:21.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:45:21.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.947614 -999.00  +13.30  14.13     48   +2.80 1 2 1 1 1     0    0 11.32 45.12 ZNEsW 14.4 14.1 158.2 22.1 13.8 -22.5 13.7 -20.9 13.5 -20.8 13.8 -22.1
2025-11-18T00:45:21.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:45:21.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:45:21.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.947614
2025-11-18T00:45:21.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:45:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:45:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:45:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:45:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:45:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:45:05', tmtdew=12.24, humidity=43.28, cloud=0.0, wind=20.91, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:45:06', seeing=1.47, atlas_timestamp='2025-11-17T22:44:33.850', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:43:00')
2025-11-18T00:45:21.311 [DEBUG] [Thread-64199] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:45:21.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:45:21.408 [DEBUG] [Thread-64203] [transport.py] [_log()] starting thread (client mode): 0xd31ce710
2025-11-18T00:45:21.408 [DEBUG] [Thread-64203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:45:21.423 [DEBUG] [Thread-64203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:45:21.423 [INFO] [Thread-64203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:45:21.431 [DEBUG] [Thread-64203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:45:21.431 [DEBUG] [Thread-64203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:45:21.431 [DEBUG] [Thread-64203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:45:21.431 [DEBUG] [Thread-64203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:45:21.431 [DEBUG] [Thread-64203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] client lang: <none>
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] server lang: <none>
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] kex follows: False
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] Compression: none
2025-11-18T00:45:21.432 [DEBUG] [Thread-64203] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:45:21.493 [DEBUG] [Thread-64203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:45:21.494 [DEBUG] [Thread-64203] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:45:21.494 [DEBUG] [Thread-64203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:45:21.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:45:21.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:45:21.549 [DEBUG] [Thread-64203] [transport.py] [_log()] userauth is OK
2025-11-18T00:45:21.549 [DEBUG] [Thread-64203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:45:21.549 [DEBUG] [Thread-64203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:45:21.549 [DEBUG] [Thread-64203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:45:21.549 [DEBUG] [Thread-64203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:45:21.568 [INFO] [Thread-64203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:45:21.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:45:21.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:45:22.400 [DEBUG] [Thread-64203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:45:22.400 [DEBUG] [Thread-64203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:45:22.448 [DEBUG] [Thread-64203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:45:22.448 [DEBUG] [Thread-64203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:45:22.457 [DEBUG] [Thread-64203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:45:22.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:45:22.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:45:22.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:45:22.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:45:22.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:45:22.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:45:22.492 [DEBUG] [Thread-64203] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:45:30.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:45:30.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:45:35.766 [DEBUG] [Thread-64205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:45:50.797 [DEBUG] [Thread-64206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:45:52.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:45:52.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:45:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:45:53.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 45, 37), 12.14, 43.42, 0.0, 18.37, 13.34, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:45:53.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:45:37
2025-11-18T00:45:53.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:45:53.419 [DEBUG] [Thread-64207] [transport.py] [_log()] starting thread (client mode): 0xd31ce560
2025-11-18T00:45:53.420 [DEBUG] [Thread-64207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:45:53.440 [DEBUG] [Thread-64207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:45:53.440 [INFO] [Thread-64207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:45:53.443 [DEBUG] [Thread-64207] [transport.py] [_log()] client lang: <none>
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] server lang: <none>
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] kex follows: False
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] Compression: none
2025-11-18T00:45:53.444 [DEBUG] [Thread-64207] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:45:53.460 [DEBUG] [Thread-64207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:45:53.461 [DEBUG] [Thread-64207] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:45:53.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:45:53.462 [DEBUG] [Thread-64207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:45:53.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:45:53.464 [DEBUG] [Thread-64207] [transport.py] [_log()] userauth is OK
2025-11-18T00:45:53.464 [DEBUG] [Thread-64207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:45:53.464 [DEBUG] [Thread-64207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:45:53.464 [DEBUG] [Thread-64207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:45:53.464 [DEBUG] [Thread-64207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:45:53.498 [INFO] [Thread-64207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:45:53.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:45:54.152 [DEBUG] [Thread-64207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:45:54.152 [DEBUG] [Thread-64207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:45:54.152 [DEBUG] [Thread-64207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:45:54.193 [DEBUG] [Thread-64207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:45:54.194 [DEBUG] [Thread-64207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:45:54.197 [DEBUG] [Thread-64207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:45:54.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:45:54.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:45:54.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:45:54.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:45:54.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:45:54.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:45:54.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:45:54.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:45:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:45:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.947960 -999.00  +13.30  19.63     49   +2.90 1 2 1 1 1     0    0 11.51 49.04 ZNEsW 18.8 19.6 159.2 22.4 13.8 -22.5 13.7 -21.0 13.4 -20.8 13.8 -22.1
2025-11-18T00:45:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:45:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:45:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.947960
2025-11-18T00:45:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:45:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:45:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:45:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:45:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:45:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:45:37', tmtdew=12.14, humidity=43.42, cloud=0.0, wind=18.37, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:45:38', seeing=1.47, atlas_timestamp='2025-11-17T22:45:03.744', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:43:00')
2025-11-18T00:45:54.223 [DEBUG] [Thread-64207] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:45:54.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:45:54.319 [DEBUG] [Thread-64210] [transport.py] [_log()] starting thread (client mode): 0xd317cc40
2025-11-18T00:45:54.319 [DEBUG] [Thread-64210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:45:54.335 [DEBUG] [Thread-64210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:45:54.335 [INFO] [Thread-64210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] client lang: <none>
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] server lang: <none>
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] kex follows: False
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:45:54.343 [DEBUG] [Thread-64210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:45:54.344 [DEBUG] [Thread-64210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:45:54.344 [DEBUG] [Thread-64210] [transport.py] [_log()] Compression: none
2025-11-18T00:45:54.344 [DEBUG] [Thread-64210] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:45:54.400 [DEBUG] [Thread-64210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:45:54.401 [DEBUG] [Thread-64210] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:45:54.401 [DEBUG] [Thread-64210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:45:54.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:45:54.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:45:54.457 [DEBUG] [Thread-64210] [transport.py] [_log()] userauth is OK
2025-11-18T00:45:54.457 [DEBUG] [Thread-64210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:45:54.457 [DEBUG] [Thread-64210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:45:54.457 [DEBUG] [Thread-64210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:45:54.457 [DEBUG] [Thread-64210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:45:54.477 [INFO] [Thread-64210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:45:54.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:45:54.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:45:55.388 [DEBUG] [Thread-64210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:45:55.388 [DEBUG] [Thread-64210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:45:55.435 [DEBUG] [Thread-64210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:45:55.435 [DEBUG] [Thread-64210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:45:55.446 [DEBUG] [Thread-64210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:45:55.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:45:55.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:45:55.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:45:55.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:45:55.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:45:55.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:45:55.479 [DEBUG] [Thread-64210] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:45:55.691 [DEBUG] [Thread-64212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:00.788 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:05.824 [DEBUG] [Thread-64213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:09.370 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:13.443 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:20.853 [DEBUG] [Thread-64214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:25.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:46:25.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:46:25.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:46:26.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 46, 9), 12.12, 43.48, 0.0, 20.43, 13.29, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:46:26.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:46:09
2025-11-18T00:46:26.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:46:26.421 [DEBUG] [Thread-64215] [transport.py] [_log()] starting thread (client mode): 0xd0702b60
2025-11-18T00:46:26.421 [DEBUG] [Thread-64215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:46:26.443 [DEBUG] [Thread-64215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:46:26.444 [INFO] [Thread-64215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] client lang: <none>
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] server lang: <none>
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] kex follows: False
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] Compression: none
2025-11-18T00:46:26.448 [DEBUG] [Thread-64215] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:46:26.465 [DEBUG] [Thread-64215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:46:26.466 [DEBUG] [Thread-64215] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:46:26.466 [DEBUG] [Thread-64215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:46:26.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:46:26.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:46:26.468 [DEBUG] [Thread-64215] [transport.py] [_log()] userauth is OK
2025-11-18T00:46:26.469 [DEBUG] [Thread-64215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:46:26.469 [DEBUG] [Thread-64215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:46:26.469 [DEBUG] [Thread-64215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:46:26.469 [DEBUG] [Thread-64215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:46:26.493 [INFO] [Thread-64215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:46:26.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:46:27.276 [DEBUG] [Thread-64215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:46:27.276 [DEBUG] [Thread-64215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:46:27.276 [DEBUG] [Thread-64215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:46:27.317 [DEBUG] [Thread-64215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:46:27.318 [DEBUG] [Thread-64215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:46:27.320 [DEBUG] [Thread-64215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:46:27.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:46:27.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:46:27.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:46:27.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:46:27.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:46:27.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:46:27.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:46:27.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:46:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:46:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.948308 -999.00  +13.30  15.30     48   +2.70 1 2 1 1 1     0    0 11.61 49.95 ZNEsW 14.6 15.3 153.2 21.1 13.8 -22.3 13.7 -20.9 13.4 -20.7 13.8 -22.0
2025-11-18T00:46:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:46:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:46:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.948308
2025-11-18T00:46:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:46:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:46:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:46:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:46:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:46:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:46:09', tmtdew=12.12, humidity=43.48, cloud=0.0, wind=20.43, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:46:10', seeing=1.5, atlas_timestamp='2025-11-17T22:45:33.811', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.30625000000000036, 0.26224999999999987, 0.2814999999999994, 0.3454999999999995, 0.28275000000000006, 0.1584999999999983, 0.1667500000000004, 0.20199999999999818, 0.339500000000001, 0.3232499999999998, 0.39949999999999974, 0.5504999999999995, 0.17474999999999952, 0.1769999999999996, 0.20199999999999818, 0.2322500000000005, 0.3804999999999996, 0.5269999999999992, 0.4402499999999989, 0.39899999999999913, 0.17224999999999824, 0.37975000000000136, 0.4427500000000002, 0.27449999999999797, 0.5380000000000003, 1.7377500000000001, 1.3965000000000005, 0.617, 0.1590000000000007, 0.5010000000000012, 0.495000000000001, 0.37824999999999953], zp_timestamp='2025-11-17T22:43:00')
2025-11-18T00:46:27.339 [DEBUG] [Thread-64215] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:46:27.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:46:27.441 [DEBUG] [Thread-64218] [transport.py] [_log()] starting thread (client mode): 0xd07562f0
2025-11-18T00:46:27.441 [DEBUG] [Thread-64218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:46:27.457 [DEBUG] [Thread-64218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:46:27.458 [INFO] [Thread-64218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] client lang: <none>
2025-11-18T00:46:27.468 [DEBUG] [Thread-64218] [transport.py] [_log()] server lang: <none>
2025-11-18T00:46:27.469 [DEBUG] [Thread-64218] [transport.py] [_log()] kex follows: False
2025-11-18T00:46:27.469 [DEBUG] [Thread-64218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:46:27.469 [DEBUG] [Thread-64218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:46:27.469 [DEBUG] [Thread-64218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:46:27.469 [DEBUG] [Thread-64218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:46:27.469 [DEBUG] [Thread-64218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:46:27.469 [DEBUG] [Thread-64218] [transport.py] [_log()] Compression: none
2025-11-18T00:46:27.469 [DEBUG] [Thread-64218] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:46:27.529 [DEBUG] [Thread-64218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:46:27.530 [DEBUG] [Thread-64218] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:46:27.530 [DEBUG] [Thread-64218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:46:27.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:46:27.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:46:27.593 [DEBUG] [Thread-64218] [transport.py] [_log()] userauth is OK
2025-11-18T00:46:27.593 [DEBUG] [Thread-64218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:46:27.593 [DEBUG] [Thread-64218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:46:27.593 [DEBUG] [Thread-64218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:46:27.593 [DEBUG] [Thread-64218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:46:27.612 [INFO] [Thread-64218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:46:27.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:46:27.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:46:28.484 [DEBUG] [Thread-64218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:46:28.484 [DEBUG] [Thread-64218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:46:28.532 [DEBUG] [Thread-64218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:46:28.532 [DEBUG] [Thread-64218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:46:28.541 [DEBUG] [Thread-64218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:46:28.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:46:28.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:46:28.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:46:28.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:46:28.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:46:28.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:46:28.574 [DEBUG] [Thread-64218] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:46:30.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:30.409 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:35.880 [DEBUG] [Thread-64220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:50.913 [DEBUG] [Thread-64221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:55.767 [DEBUG] [Thread-64222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:46:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:46:58.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:46:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:46:59.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 46, 42), 12.15, 43.38, 0.0, 20.75, 13.26, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:46:59.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:46:42
2025-11-18T00:46:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:46:59.522 [DEBUG] [Thread-64223] [transport.py] [_log()] starting thread (client mode): 0xd0710ac0
2025-11-18T00:46:59.522 [DEBUG] [Thread-64223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:46:59.543 [DEBUG] [Thread-64223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:46:59.543 [INFO] [Thread-64223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:46:59.546 [DEBUG] [Thread-64223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:46:59.546 [DEBUG] [Thread-64223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:46:59.546 [DEBUG] [Thread-64223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] client lang: <none>
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] server lang: <none>
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] kex follows: False
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:46:59.547 [DEBUG] [Thread-64223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:46:59.548 [DEBUG] [Thread-64223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:46:59.548 [DEBUG] [Thread-64223] [transport.py] [_log()] Compression: none
2025-11-18T00:46:59.548 [DEBUG] [Thread-64223] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:46:59.566 [DEBUG] [Thread-64223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:46:59.567 [DEBUG] [Thread-64223] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:46:59.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:46:59.569 [DEBUG] [Thread-64223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:46:59.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:46:59.571 [DEBUG] [Thread-64223] [transport.py] [_log()] userauth is OK
2025-11-18T00:46:59.571 [DEBUG] [Thread-64223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:46:59.571 [DEBUG] [Thread-64223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:46:59.571 [DEBUG] [Thread-64223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:46:59.571 [DEBUG] [Thread-64223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:46:59.595 [INFO] [Thread-64223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:46:59.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:47:00.178 [DEBUG] [Thread-64223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:47:00.179 [DEBUG] [Thread-64223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:47:00.179 [DEBUG] [Thread-64223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:47:00.219 [DEBUG] [Thread-64223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:47:00.219 [DEBUG] [Thread-64223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:47:00.222 [DEBUG] [Thread-64223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:47:00.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:47:00.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:47:00.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:47:00.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:47:00.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:47:00.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:47:00.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:47:00.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:47:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:47:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.948655 -999.00  +13.40  23.92     48   +2.70 1 2 1 1 1     0    0 11.88 53.78 ZNEsW 19.5 23.9 166.6 26.9 13.8 -22.5 13.7 -20.9 13.4 -20.6 13.8 -22.1
2025-11-18T00:47:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:47:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:47:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.948655
2025-11-18T00:47:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:47:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:47:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:47:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:47:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:47:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:46:42', tmtdew=12.15, humidity=43.38, cloud=0.0, wind=20.75, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:46:42', seeing=1.26, atlas_timestamp='2025-11-17T22:46:03.792', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:45:00')
2025-11-18T00:47:00.246 [DEBUG] [Thread-64223] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:47:00.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:47:00.343 [DEBUG] [Thread-64226] [transport.py] [_log()] starting thread (client mode): 0xd07aaf80
2025-11-18T00:47:00.344 [DEBUG] [Thread-64226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:47:00.358 [DEBUG] [Thread-64226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:47:00.358 [INFO] [Thread-64226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:47:00.366 [DEBUG] [Thread-64226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:47:00.366 [DEBUG] [Thread-64226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:47:00.366 [DEBUG] [Thread-64226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:47:00.366 [DEBUG] [Thread-64226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:47:00.366 [DEBUG] [Thread-64226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:47:00.366 [DEBUG] [Thread-64226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] client lang: <none>
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] server lang: <none>
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] kex follows: False
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] Compression: none
2025-11-18T00:47:00.367 [DEBUG] [Thread-64226] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:47:00.425 [DEBUG] [Thread-64226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:47:00.425 [DEBUG] [Thread-64226] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:47:00.426 [DEBUG] [Thread-64226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:47:00.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:47:00.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:47:00.481 [DEBUG] [Thread-64226] [transport.py] [_log()] userauth is OK
2025-11-18T00:47:00.482 [DEBUG] [Thread-64226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:47:00.482 [DEBUG] [Thread-64226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:47:00.482 [DEBUG] [Thread-64226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:47:00.482 [DEBUG] [Thread-64226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:47:00.500 [INFO] [Thread-64226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:47:00.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:47:00.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:47:01.346 [DEBUG] [Thread-64226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:47:01.346 [DEBUG] [Thread-64226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:47:01.393 [DEBUG] [Thread-64226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:47:01.393 [DEBUG] [Thread-64226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:47:01.401 [DEBUG] [Thread-64226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:47:01.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:47: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')
2025-11-18T00:47:01.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:47:01.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:47:01.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:47:01.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:47:01.432 [DEBUG] [Thread-64226] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:47:05.939 [DEBUG] [Thread-64228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:47:20.981 [DEBUG] [Thread-64229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:47:30.614 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:47:30.615 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:47:31.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:47:31.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:47:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:47:32.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 47, 14), 12.14, 43.4, 0.0, 20.87, 13.24, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:47:14
2025-11-18T00:47:32.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:47:32.346 [DEBUG] [Thread-64230] [transport.py] [_log()] starting thread (client mode): 0xd07a8fd0
2025-11-18T00:47:32.346 [DEBUG] [Thread-64230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:47:32.366 [DEBUG] [Thread-64230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:47:32.367 [INFO] [Thread-64230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:47:32.369 [DEBUG] [Thread-64230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] client lang: <none>
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] server lang: <none>
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] kex follows: False
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] Compression: none
2025-11-18T00:47:32.370 [DEBUG] [Thread-64230] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:47:32.387 [DEBUG] [Thread-64230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:47:32.387 [DEBUG] [Thread-64230] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:47:32.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:47:32.388 [DEBUG] [Thread-64230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:47:32.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:47:32.390 [DEBUG] [Thread-64230] [transport.py] [_log()] userauth is OK
2025-11-18T00:47:32.390 [DEBUG] [Thread-64230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:47:32.390 [DEBUG] [Thread-64230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:47:32.390 [DEBUG] [Thread-64230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:47:32.391 [DEBUG] [Thread-64230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:47:32.409 [INFO] [Thread-64230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:47:32.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:47:33.141 [DEBUG] [Thread-64230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:47:33.141 [DEBUG] [Thread-64230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:47:33.141 [DEBUG] [Thread-64230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:47:33.181 [DEBUG] [Thread-64230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:47:33.181 [DEBUG] [Thread-64230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:47:33.184 [DEBUG] [Thread-64230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:47:33.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:47:33.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:47:33.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:47:33.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:47:33.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:47:33.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:47:33.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:47:33.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:47:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:47:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.949002 -999.00  +13.40  12.32     48   +2.70 1 2 1 1 1     0    0 11.98 54.46 ZNEsW 10.6 12.3 158.4 24.3 13.8 -22.3 13.7 -20.9 13.4 -20.8 13.8 -22.0
2025-11-18T00:47:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:47:33.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:47:33.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.949002
2025-11-18T00:47:33.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:47:33.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:47:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:47:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:47:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:47:33.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:47:14', tmtdew=12.14, humidity=43.4, cloud=0.0, wind=20.87, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:47:14', seeing=1.46, atlas_timestamp='2025-11-17T22:46:33.773', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:45:00')
2025-11-18T00:47:33.208 [DEBUG] [Thread-64230] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:47:33.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:47:33.303 [DEBUG] [Thread-64233] [transport.py] [_log()] starting thread (client mode): 0xd31cf3d0
2025-11-18T00:47:33.303 [DEBUG] [Thread-64233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:47:33.320 [DEBUG] [Thread-64233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:47:33.320 [INFO] [Thread-64233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:47:33.327 [DEBUG] [Thread-64233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:47:33.328 [DEBUG] [Thread-64233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:47:33.328 [DEBUG] [Thread-64233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:47:33.328 [DEBUG] [Thread-64233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:47:33.328 [DEBUG] [Thread-64233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:47:33.328 [DEBUG] [Thread-64233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:47:33.328 [DEBUG] [Thread-64233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:47:33.328 [DEBUG] [Thread-64233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:47:33.328 [DEBUG] [Thread-64233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:47:33.329 [DEBUG] [Thread-64233] [transport.py] [_log()] client lang: <none>
2025-11-18T00:47:33.329 [DEBUG] [Thread-64233] [transport.py] [_log()] server lang: <none>
2025-11-18T00:47:33.329 [DEBUG] [Thread-64233] [transport.py] [_log()] kex follows: False
2025-11-18T00:47:33.329 [DEBUG] [Thread-64233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:47:33.329 [DEBUG] [Thread-64233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:47:33.329 [DEBUG] [Thread-64233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:47:33.329 [DEBUG] [Thread-64233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:47:33.329 [DEBUG] [Thread-64233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:47:33.330 [DEBUG] [Thread-64233] [transport.py] [_log()] Compression: none
2025-11-18T00:47:33.330 [DEBUG] [Thread-64233] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:47:33.385 [DEBUG] [Thread-64233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:47:33.386 [DEBUG] [Thread-64233] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:47:33.386 [DEBUG] [Thread-64233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:47:33.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:47:33.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:47:33.441 [DEBUG] [Thread-64233] [transport.py] [_log()] userauth is OK
2025-11-18T00:47:33.441 [DEBUG] [Thread-64233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:47:33.441 [DEBUG] [Thread-64233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:47:33.442 [DEBUG] [Thread-64233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:47:33.442 [DEBUG] [Thread-64233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:47:33.461 [INFO] [Thread-64233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:47:33.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:47:33.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:47:34.341 [DEBUG] [Thread-64233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:47:34.341 [DEBUG] [Thread-64233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:47:34.389 [DEBUG] [Thread-64233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:47:34.389 [DEBUG] [Thread-64233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:47:34.398 [DEBUG] [Thread-64233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:47:34.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:47:34.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:47:34.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:47:34.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:47:34.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:47:34.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:47:34.433 [DEBUG] [Thread-64233] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:47:36.009 [DEBUG] [Thread-64235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:47:51.050 [DEBUG] [Thread-64236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:47:55.856 [DEBUG] [Thread-64237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:48:04.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:48:04.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:48:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:48:05.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 47, 46), 12.26, 43.37, 0.0, 22.27, 13.31, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:48:05.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:47:46
2025-11-18T00:48:05.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:48:05.450 [DEBUG] [Thread-64238] [transport.py] [_log()] starting thread (client mode): 0xd07562f0
2025-11-18T00:48:05.450 [DEBUG] [Thread-64238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:48:05.471 [DEBUG] [Thread-64238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:48:05.471 [INFO] [Thread-64238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] client lang: <none>
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] server lang: <none>
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] kex follows: False
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] Compression: none
2025-11-18T00:48:05.475 [DEBUG] [Thread-64238] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:48:05.492 [DEBUG] [Thread-64238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:48:05.492 [DEBUG] [Thread-64238] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:48:05.492 [DEBUG] [Thread-64238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:48:05.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:48:05.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:48:05.493 [DEBUG] [Thread-64238] [transport.py] [_log()] userauth is OK
2025-11-18T00:48:05.493 [DEBUG] [Thread-64238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:48:05.493 [DEBUG] [Thread-64238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:48:05.493 [DEBUG] [Thread-64238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:48:05.493 [DEBUG] [Thread-64238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:48:05.503 [INFO] [Thread-64238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:48:05.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:48:06.078 [DEBUG] [Thread-64240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:48:06.148 [DEBUG] [Thread-64238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:48:06.148 [DEBUG] [Thread-64238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:48:06.148 [DEBUG] [Thread-64238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:48:06.189 [DEBUG] [Thread-64238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:48:06.189 [DEBUG] [Thread-64238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:48:06.191 [DEBUG] [Thread-64238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:48:06.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:48:06.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:48:06.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:48:06.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:48:06.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:48:06.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:48:06.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:48:06.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:48:06.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:48:06.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.949697 -999.00  +13.40  12.27     48   +2.70 1 2 1 1 1     0    0 11.76 55.62 ZNEsW 14.6 12.3 162.3 21.3 13.8 -22.6 13.7 -20.9 13.5 -20.9 13.7 -22.2
2025-11-18T00:48:06.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:48:06.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:48:06.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.949697
2025-11-18T00:48:06.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:48:06.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:48:06.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:48:06.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:48:06.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:48:06.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:47:46', tmtdew=12.26, humidity=43.37, cloud=0.0, wind=22.27, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:47:46', seeing=1.53, atlas_timestamp='2025-11-17T22:47:33.821', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:45:00')
2025-11-18T00:48:06.211 [DEBUG] [Thread-64238] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:48:06.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:48:06.296 [DEBUG] [Thread-64242] [transport.py] [_log()] starting thread (client mode): 0xd07011e0
2025-11-18T00:48:06.297 [DEBUG] [Thread-64242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:48:06.311 [DEBUG] [Thread-64242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:48:06.311 [INFO] [Thread-64242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] client lang: <none>
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] server lang: <none>
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] kex follows: False
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:48:06.319 [DEBUG] [Thread-64242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:48:06.320 [DEBUG] [Thread-64242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:48:06.320 [DEBUG] [Thread-64242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:48:06.320 [DEBUG] [Thread-64242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:48:06.320 [DEBUG] [Thread-64242] [transport.py] [_log()] Compression: none
2025-11-18T00:48:06.320 [DEBUG] [Thread-64242] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:48:06.376 [DEBUG] [Thread-64242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:48:06.376 [DEBUG] [Thread-64242] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:48:06.376 [DEBUG] [Thread-64242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:48:06.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:48:06.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:48:06.433 [DEBUG] [Thread-64242] [transport.py] [_log()] userauth is OK
2025-11-18T00:48:06.433 [DEBUG] [Thread-64242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:48:06.433 [DEBUG] [Thread-64242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:48:06.433 [DEBUG] [Thread-64242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:48:06.433 [DEBUG] [Thread-64242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:48:06.447 [INFO] [Thread-64242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:48:06.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:48:06.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:48:07.324 [DEBUG] [Thread-64242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:48:07.325 [DEBUG] [Thread-64242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:48:07.373 [DEBUG] [Thread-64242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:48:07.373 [DEBUG] [Thread-64242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:48:07.381 [DEBUG] [Thread-64242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:48:07.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:48:07.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:48:07.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:48:07.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:48:07.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:48:07.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:48:07.413 [DEBUG] [Thread-64242] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:48:21.108 [DEBUG] [Thread-64244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:48:30.821 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:48:30.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:48:36.150 [DEBUG] [Thread-64245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:48:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:48:37.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:48:37.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:48:38.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 48, 18), 12.26, 43.35, 0.0, 22.55, 13.33, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:48:38.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:48:18
2025-11-18T00:48:38.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:48:38.361 [DEBUG] [Thread-64246] [transport.py] [_log()] starting thread (client mode): 0xd07d9f00
2025-11-18T00:48:38.361 [DEBUG] [Thread-64246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:48:38.380 [DEBUG] [Thread-64246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:48:38.380 [INFO] [Thread-64246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:48:38.383 [DEBUG] [Thread-64246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:48:38.383 [DEBUG] [Thread-64246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:48:38.383 [DEBUG] [Thread-64246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:48:38.383 [DEBUG] [Thread-64246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:48:38.383 [DEBUG] [Thread-64246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:48:38.383 [DEBUG] [Thread-64246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] client lang: <none>
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] server lang: <none>
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] kex follows: False
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] Compression: none
2025-11-18T00:48:38.384 [DEBUG] [Thread-64246] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:48:38.402 [DEBUG] [Thread-64246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:48:38.403 [DEBUG] [Thread-64246] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:48:38.403 [DEBUG] [Thread-64246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:48:38.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:48:38.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:48:38.405 [DEBUG] [Thread-64246] [transport.py] [_log()] userauth is OK
2025-11-18T00:48:38.405 [DEBUG] [Thread-64246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:48:38.406 [DEBUG] [Thread-64246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:48:38.406 [DEBUG] [Thread-64246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:48:38.406 [DEBUG] [Thread-64246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:48:38.429 [INFO] [Thread-64246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:48:38.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:48:39.174 [DEBUG] [Thread-64246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:48:39.174 [DEBUG] [Thread-64246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:48:39.174 [DEBUG] [Thread-64246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:48:39.216 [DEBUG] [Thread-64246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:48:39.216 [DEBUG] [Thread-64246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:48:39.219 [DEBUG] [Thread-64246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:48:39.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:48:39.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:48:39.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:48:39.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:48:39.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:48:39.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:48:39.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:48:39.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:48:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:48:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.950044 -999.00  +13.30  15.29     48   +2.80 1 2 1 1 1     0    0 11.75 57.47 ZNEsW 17.0 15.3 159.8 20.0 13.8 -22.5 13.6 -21.0 13.5 -21.2 13.7 -22.2
2025-11-18T00:48:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:48:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:48:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.950044
2025-11-18T00:48:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:48:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:48:39.240 [DEBUG] [Thread-64246] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:48:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:48:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:48:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:48:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:48:18', tmtdew=12.26, humidity=43.35, cloud=0.0, wind=22.55, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:48:18', seeing=1.37, atlas_timestamp='2025-11-17T22:48:03.802', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:45:00')
2025-11-18T00:48:39.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:48:39.342 [DEBUG] [Thread-64249] [transport.py] [_log()] starting thread (client mode): 0xd07dbdf0
2025-11-18T00:48:39.342 [DEBUG] [Thread-64249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:48:39.358 [DEBUG] [Thread-64249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:48:39.358 [INFO] [Thread-64249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:48:39.365 [DEBUG] [Thread-64249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:48:39.365 [DEBUG] [Thread-64249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] client lang: <none>
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] server lang: <none>
2025-11-18T00:48:39.366 [DEBUG] [Thread-64249] [transport.py] [_log()] kex follows: False
2025-11-18T00:48:39.367 [DEBUG] [Thread-64249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:48:39.367 [DEBUG] [Thread-64249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:48:39.367 [DEBUG] [Thread-64249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:48:39.367 [DEBUG] [Thread-64249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:48:39.367 [DEBUG] [Thread-64249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:48:39.367 [DEBUG] [Thread-64249] [transport.py] [_log()] Compression: none
2025-11-18T00:48:39.367 [DEBUG] [Thread-64249] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:48:39.424 [DEBUG] [Thread-64249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:48:39.424 [DEBUG] [Thread-64249] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:48:39.424 [DEBUG] [Thread-64249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:48:39.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:48:39.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:48:39.482 [DEBUG] [Thread-64249] [transport.py] [_log()] userauth is OK
2025-11-18T00:48:39.482 [DEBUG] [Thread-64249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:48:39.482 [DEBUG] [Thread-64249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:48:39.482 [DEBUG] [Thread-64249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:48:39.482 [DEBUG] [Thread-64249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:48:39.502 [INFO] [Thread-64249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:48:39.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:48:39.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:48:40.338 [DEBUG] [Thread-64249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:48:40.338 [DEBUG] [Thread-64249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:48:40.389 [DEBUG] [Thread-64249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:48:40.390 [DEBUG] [Thread-64249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:48:40.402 [DEBUG] [Thread-64249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:48:40.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:48:40.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:48:40.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:48:40.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:48:40.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:48:40.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:48:40.437 [DEBUG] [Thread-64249] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:48:51.176 [DEBUG] [Thread-64251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:48:55.928 [DEBUG] [Thread-64252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:49:06.209 [DEBUG] [Thread-64253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:49:10.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:49:10.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:49:10.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:49:11.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 48, 50), 12.24, 43.27, 0.0, 22.2, 13.36, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:49:11.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:48:50
2025-11-18T00:49:11.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:49:11.385 [DEBUG] [Thread-64254] [transport.py] [_log()] starting thread (client mode): 0xd07da110
2025-11-18T00:49:11.385 [DEBUG] [Thread-64254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:49:11.404 [DEBUG] [Thread-64254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:49:11.404 [INFO] [Thread-64254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:49:11.407 [DEBUG] [Thread-64254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] client lang: <none>
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] server lang: <none>
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] kex follows: False
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] Compression: none
2025-11-18T00:49:11.408 [DEBUG] [Thread-64254] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:49:11.426 [DEBUG] [Thread-64254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:49:11.426 [DEBUG] [Thread-64254] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:49:11.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:49:11.427 [DEBUG] [Thread-64254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:49:11.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:49:11.428 [DEBUG] [Thread-64254] [transport.py] [_log()] userauth is OK
2025-11-18T00:49:11.429 [DEBUG] [Thread-64254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:49:11.429 [DEBUG] [Thread-64254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:49:11.429 [DEBUG] [Thread-64254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:49:11.429 [DEBUG] [Thread-64254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:49:11.456 [INFO] [Thread-64254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:49:11.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:49:12.074 [DEBUG] [Thread-64254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:49:12.074 [DEBUG] [Thread-64254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:49:12.075 [DEBUG] [Thread-64254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:49:12.115 [DEBUG] [Thread-64254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:49:12.115 [DEBUG] [Thread-64254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:49:12.118 [DEBUG] [Thread-64254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:49:12.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:49:12.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:49:12.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:49:12.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:49:12.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:49:12.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:49:12.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:49:12.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:49:12.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:49:12.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.950391 -999.00  +13.30  13.47     48   +2.80 1 2 1 1 1     0    0 11.86 56.20 ZNEsW 16.6 13.5 163.6 18.2 13.8 -22.5 13.7 -21.1 13.4 -21.2 13.8 -22.4
2025-11-18T00:49:12.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:49:12.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:49:12.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.950391
2025-11-18T00:49:12.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:49:12.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:49:12.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:49:12.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:49:12.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:49:12.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:48:50', tmtdew=12.24, humidity=43.27, cloud=0.0, wind=22.2, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:48:50', seeing=1.34, atlas_timestamp='2025-11-17T22:48:33.782', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:45:00')
2025-11-18T00:49:12.140 [DEBUG] [Thread-64254] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:49:12.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:49:12.236 [DEBUG] [Thread-64257] [transport.py] [_log()] starting thread (client mode): 0xd31cf0a0
2025-11-18T00:49:12.236 [DEBUG] [Thread-64257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:49:12.251 [DEBUG] [Thread-64257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:49:12.251 [INFO] [Thread-64257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:49:12.258 [DEBUG] [Thread-64257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:49:12.258 [DEBUG] [Thread-64257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:49:12.258 [DEBUG] [Thread-64257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] client lang: <none>
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] server lang: <none>
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] kex follows: False
2025-11-18T00:49:12.259 [DEBUG] [Thread-64257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:49:12.260 [DEBUG] [Thread-64257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:49:12.260 [DEBUG] [Thread-64257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:49:12.260 [DEBUG] [Thread-64257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:49:12.260 [DEBUG] [Thread-64257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:49:12.260 [DEBUG] [Thread-64257] [transport.py] [_log()] Compression: none
2025-11-18T00:49:12.260 [DEBUG] [Thread-64257] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:49:12.318 [DEBUG] [Thread-64257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:49:12.318 [DEBUG] [Thread-64257] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:49:12.319 [DEBUG] [Thread-64257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:49:12.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:49:12.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:49:12.374 [DEBUG] [Thread-64257] [transport.py] [_log()] userauth is OK
2025-11-18T00:49:12.374 [DEBUG] [Thread-64257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:49:12.374 [DEBUG] [Thread-64257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:49:12.374 [DEBUG] [Thread-64257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:49:12.374 [DEBUG] [Thread-64257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:49:12.396 [INFO] [Thread-64257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:49:12.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:49:12.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:49:13.205 [DEBUG] [Thread-64257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:49:13.205 [DEBUG] [Thread-64257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:49:13.253 [DEBUG] [Thread-64257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:49:13.253 [DEBUG] [Thread-64257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:49:13.262 [DEBUG] [Thread-64257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:49:13.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:49: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')
2025-11-18T00:49:13.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:49:13.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:49:13.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:49:13.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:49:13.295 [DEBUG] [Thread-64257] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:49:21.238 [DEBUG] [Thread-64259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:49:31.023 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:49:31.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:49:36.272 [DEBUG] [Thread-64260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:49:43.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:49:43.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:49:43.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:49:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 49, 22), 12.27, 43.2, 0.0, 20.57, 13.41, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:49:43.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:49:22
2025-11-18T00:49:44.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:49:44.246 [DEBUG] [Thread-64261] [transport.py] [_log()] starting thread (client mode): 0xd31ccbb0
2025-11-18T00:49:44.246 [DEBUG] [Thread-64261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:49:44.261 [DEBUG] [Thread-64261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:49:44.261 [INFO] [Thread-64261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] client lang: <none>
2025-11-18T00:49:44.264 [DEBUG] [Thread-64261] [transport.py] [_log()] server lang: <none>
2025-11-18T00:49:44.265 [DEBUG] [Thread-64261] [transport.py] [_log()] kex follows: False
2025-11-18T00:49:44.265 [DEBUG] [Thread-64261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:49:44.265 [DEBUG] [Thread-64261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:49:44.265 [DEBUG] [Thread-64261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:49:44.265 [DEBUG] [Thread-64261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:49:44.265 [DEBUG] [Thread-64261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:49:44.265 [DEBUG] [Thread-64261] [transport.py] [_log()] Compression: none
2025-11-18T00:49:44.265 [DEBUG] [Thread-64261] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:49:44.280 [DEBUG] [Thread-64261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:49:44.281 [DEBUG] [Thread-64261] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:49:44.282 [DEBUG] [Thread-64261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:49:44.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:49:44.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:49:44.283 [DEBUG] [Thread-64261] [transport.py] [_log()] userauth is OK
2025-11-18T00:49:44.283 [DEBUG] [Thread-64261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:49:44.283 [DEBUG] [Thread-64261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:49:44.284 [DEBUG] [Thread-64261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:49:44.284 [DEBUG] [Thread-64261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:49:44.300 [INFO] [Thread-64261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:49:44.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:49:45.083 [DEBUG] [Thread-64261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:49:45.083 [DEBUG] [Thread-64261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:49:45.083 [DEBUG] [Thread-64261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:49:45.123 [DEBUG] [Thread-64261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:49:45.123 [DEBUG] [Thread-64261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:49:45.126 [DEBUG] [Thread-64261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:49:45.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:49:45.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:49:45.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:49:45.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:49:45.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:49:45.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:49:45.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:49:45.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:49:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:49:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.950738 -999.00  +13.30  18.76     48   +2.70 1 2 1 1 1     0    0 12.00 55.25 ZNEsW 18.8 18.8 164.0 24.8 13.8 -22.7 13.7 -21.1 13.4 -21.1 13.8 -22.3
2025-11-18T00:49:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:49:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:49:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.950738
2025-11-18T00:49:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:49:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:49:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:49:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:49:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:49:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:49:22', tmtdew=12.27, humidity=43.2, cloud=0.0, wind=20.57, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:49:22', seeing=1.51, atlas_timestamp='2025-11-17T22:49:03.763', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:45:00')
2025-11-18T00:49:45.150 [DEBUG] [Thread-64261] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:49:45.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:49:45.246 [DEBUG] [Thread-64264] [transport.py] [_log()] starting thread (client mode): 0xd07d9bd0
2025-11-18T00:49:45.246 [DEBUG] [Thread-64264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:49:45.263 [DEBUG] [Thread-64264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:49:45.263 [INFO] [Thread-64264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:49:45.270 [DEBUG] [Thread-64264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:49:45.270 [DEBUG] [Thread-64264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:49:45.270 [DEBUG] [Thread-64264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:49:45.270 [DEBUG] [Thread-64264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] client lang: <none>
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] server lang: <none>
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] kex follows: False
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] Compression: none
2025-11-18T00:49:45.271 [DEBUG] [Thread-64264] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:49:45.329 [DEBUG] [Thread-64264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:49:45.330 [DEBUG] [Thread-64264] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:49:45.330 [DEBUG] [Thread-64264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:49:45.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:49:45.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:49:45.386 [DEBUG] [Thread-64264] [transport.py] [_log()] userauth is OK
2025-11-18T00:49:45.386 [DEBUG] [Thread-64264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:49:45.386 [DEBUG] [Thread-64264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:49:45.386 [DEBUG] [Thread-64264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:49:45.386 [DEBUG] [Thread-64264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:49:45.405 [INFO] [Thread-64264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:49:45.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:49:45.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:49:46.238 [DEBUG] [Thread-64264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:49:46.238 [DEBUG] [Thread-64264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:49:46.286 [DEBUG] [Thread-64264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:49:46.286 [DEBUG] [Thread-64264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:49:46.295 [DEBUG] [Thread-64264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:49:46.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:49:46.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:49:46.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:49:46.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:49:46.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:49:46.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:49:46.329 [DEBUG] [Thread-64264] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:49:51.301 [DEBUG] [Thread-64266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:49:56.001 [DEBUG] [Thread-64267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:50:06.340 [DEBUG] [Thread-64268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:50:16.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:50:16.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:50:16.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:50:16.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 49, 54), 12.36, 43.2, 0.0, 19.25, 13.36, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:50:16.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:49:54
2025-11-18T00:50:17.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:50:17.250 [DEBUG] [Thread-64269] [transport.py] [_log()] starting thread (client mode): 0xd0702080
2025-11-18T00:50:17.250 [DEBUG] [Thread-64269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:50:17.270 [DEBUG] [Thread-64269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:50:17.270 [INFO] [Thread-64269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] client lang: <none>
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] server lang: <none>
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] kex follows: False
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] Compression: none
2025-11-18T00:50:17.274 [DEBUG] [Thread-64269] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:50:17.290 [DEBUG] [Thread-64269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:50:17.290 [DEBUG] [Thread-64269] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:50:17.291 [DEBUG] [Thread-64269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:50:17.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:50:17.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:50:17.292 [DEBUG] [Thread-64269] [transport.py] [_log()] userauth is OK
2025-11-18T00:50:17.292 [DEBUG] [Thread-64269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:50:17.293 [DEBUG] [Thread-64269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:50:17.293 [DEBUG] [Thread-64269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:50:17.293 [DEBUG] [Thread-64269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:50:17.314 [INFO] [Thread-64269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:50:17.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:50:17.955 [DEBUG] [Thread-64269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:50:17.956 [DEBUG] [Thread-64269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:50:17.956 [DEBUG] [Thread-64269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:50:17.996 [DEBUG] [Thread-64269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:50:17.997 [DEBUG] [Thread-64269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:50:18.000 [DEBUG] [Thread-64269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:50:18.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:50:18.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:50:18.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:50:18.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:50:18.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:50:18.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:50:18.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:50:18.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:50:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:50:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.951086 -999.00  +13.30  16.39     48   +2.60 1 2 1 1 1     0    0 11.65 54.04 ZNEsW 19.8 16.4 165.4 23.7 13.8 -22.7 13.7 -21.1 13.4 -21.3 13.8 -22.3
2025-11-18T00:50:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:50:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:50:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.951086
2025-11-18T00:50:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:50:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:50:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:50:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:50:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:50:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:49:54', tmtdew=12.36, humidity=43.2, cloud=0.0, wind=19.25, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:49:54', seeing=1.51, atlas_timestamp='2025-11-17T22:49:33.830', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:47:00')
2025-11-18T00:50:18.025 [DEBUG] [Thread-64269] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:50:18.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:50:18.121 [DEBUG] [Thread-64272] [transport.py] [_log()] starting thread (client mode): 0xd07dbeb0
2025-11-18T00:50:18.121 [DEBUG] [Thread-64272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:50:18.136 [DEBUG] [Thread-64272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:50:18.137 [INFO] [Thread-64272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:50:18.144 [DEBUG] [Thread-64272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:50:18.144 [DEBUG] [Thread-64272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:50:18.144 [DEBUG] [Thread-64272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:50:18.144 [DEBUG] [Thread-64272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:50:18.144 [DEBUG] [Thread-64272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:50:18.144 [DEBUG] [Thread-64272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] client lang: <none>
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] server lang: <none>
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] kex follows: False
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] Compression: none
2025-11-18T00:50:18.145 [DEBUG] [Thread-64272] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:50:18.201 [DEBUG] [Thread-64272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:50:18.202 [DEBUG] [Thread-64272] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:50:18.202 [DEBUG] [Thread-64272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:50:18.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:50:18.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:50:18.258 [DEBUG] [Thread-64272] [transport.py] [_log()] userauth is OK
2025-11-18T00:50:18.258 [DEBUG] [Thread-64272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:50:18.258 [DEBUG] [Thread-64272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:50:18.258 [DEBUG] [Thread-64272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:50:18.258 [DEBUG] [Thread-64272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:50:18.277 [INFO] [Thread-64272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:50:18.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:50:18.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:50:19.098 [DEBUG] [Thread-64272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:50:19.098 [DEBUG] [Thread-64272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:50:19.145 [DEBUG] [Thread-64272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:50:19.145 [DEBUG] [Thread-64272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:50:19.154 [DEBUG] [Thread-64272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:50:19.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:50:19.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:50:19.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:50:19.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:50:19.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:50:19.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:50:19.191 [DEBUG] [Thread-64272] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:50:21.367 [DEBUG] [Thread-64274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:50:31.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:50:31.232 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:50:36.407 [DEBUG] [Thread-64275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:50:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:50:49.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:50:49.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:50:49.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 50, 26), 12.28, 43.47, 0.0, 21.0, 13.34, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:50:49.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:50:26
2025-11-18T00:50:49.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:50:50.123 [DEBUG] [Thread-64276] [transport.py] [_log()] starting thread (client mode): 0xd07db9d0
2025-11-18T00:50:50.123 [DEBUG] [Thread-64276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:50:50.143 [DEBUG] [Thread-64276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:50:50.143 [INFO] [Thread-64276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] client lang: <none>
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] server lang: <none>
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] kex follows: False
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] Compression: none
2025-11-18T00:50:50.147 [DEBUG] [Thread-64276] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:50:50.163 [DEBUG] [Thread-64276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:50:50.163 [DEBUG] [Thread-64276] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:50:50.164 [DEBUG] [Thread-64276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:50:50.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:50:50.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:50:50.166 [DEBUG] [Thread-64276] [transport.py] [_log()] userauth is OK
2025-11-18T00:50:50.166 [DEBUG] [Thread-64276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:50:50.166 [DEBUG] [Thread-64276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:50:50.166 [DEBUG] [Thread-64276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:50:50.166 [DEBUG] [Thread-64276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:50:50.190 [INFO] [Thread-64276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:50:50.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:50:50.808 [DEBUG] [Thread-64276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:50:50.808 [DEBUG] [Thread-64276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:50:50.808 [DEBUG] [Thread-64276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:50:50.849 [DEBUG] [Thread-64276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:50:50.850 [DEBUG] [Thread-64276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:50:50.853 [DEBUG] [Thread-64276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:50:50.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:50:50.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:50:50.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:50:50.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:50:50.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:50:50.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:50:50.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:50:50.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:50:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:50:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.951780 -999.00  +13.30  13.53     47   +2.50 1 2 1 1 1     0    0 11.86 53.27 ZNEsW 15.7 13.5 172.2 22.1 13.8 -22.7 13.6 -21.3 13.4 -21.5 13.8 -22.6
2025-11-18T00:50:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:50:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:50:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.951780
2025-11-18T00:50:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:50:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:50:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:50:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:50:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:50:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:50:26', tmtdew=12.28, humidity=43.47, cloud=0.0, wind=21.0, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:50:26', seeing=1.68, atlas_timestamp='2025-11-17T22:50:33.792', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:47:00')
2025-11-18T00:50:50.878 [DEBUG] [Thread-64276] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:50:50.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:50:50.974 [DEBUG] [Thread-64279] [transport.py] [_log()] starting thread (client mode): 0xd0712fb0
2025-11-18T00:50:50.975 [DEBUG] [Thread-64279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:50:50.989 [DEBUG] [Thread-64279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:50:50.990 [INFO] [Thread-64279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:50:50.997 [DEBUG] [Thread-64279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] client lang: <none>
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] server lang: <none>
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] kex follows: False
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] Compression: none
2025-11-18T00:50:50.998 [DEBUG] [Thread-64279] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:50:51.054 [DEBUG] [Thread-64279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:50:51.054 [DEBUG] [Thread-64279] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:50:51.055 [DEBUG] [Thread-64279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:50:51.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:50:51.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:50:51.110 [DEBUG] [Thread-64279] [transport.py] [_log()] userauth is OK
2025-11-18T00:50:51.110 [DEBUG] [Thread-64279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:50:51.111 [DEBUG] [Thread-64279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:50:51.111 [DEBUG] [Thread-64279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:50:51.111 [DEBUG] [Thread-64279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:50:51.129 [INFO] [Thread-64279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:50:51.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:50:51.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:50:51.434 [DEBUG] [Thread-64281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:50:51.968 [DEBUG] [Thread-64279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:50:51.969 [DEBUG] [Thread-64279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:50:52.016 [DEBUG] [Thread-64279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:50:52.016 [DEBUG] [Thread-64279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:50:52.025 [DEBUG] [Thread-64279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:50:52.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:50:52.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:50:52.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:50:52.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:50:52.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:50:52.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:50:52.060 [DEBUG] [Thread-64279] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:50:56.085 [DEBUG] [Thread-64282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:51:06.472 [DEBUG] [Thread-64283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:51:21.500 [DEBUG] [Thread-64284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:51:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:51:22.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:51:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:51:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 50, 58), 12.33, 42.95, 0.0, 20.57, 13.29, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:51:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:50:58
2025-11-18T00:51:22.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:51:23.066 [DEBUG] [Thread-64285] [transport.py] [_log()] starting thread (client mode): 0xd31cd510
2025-11-18T00:51:23.066 [DEBUG] [Thread-64285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:51:23.086 [DEBUG] [Thread-64285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:51:23.086 [INFO] [Thread-64285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:51:23.089 [DEBUG] [Thread-64285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:51:23.089 [DEBUG] [Thread-64285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:51:23.089 [DEBUG] [Thread-64285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:51:23.089 [DEBUG] [Thread-64285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:51:23.089 [DEBUG] [Thread-64285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:51:23.089 [DEBUG] [Thread-64285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:51:23.089 [DEBUG] [Thread-64285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] client lang: <none>
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] server lang: <none>
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] kex follows: False
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] Compression: none
2025-11-18T00:51:23.090 [DEBUG] [Thread-64285] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:51:23.102 [DEBUG] [Thread-64285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:51:23.103 [DEBUG] [Thread-64285] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:51:23.103 [DEBUG] [Thread-64285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:51:23.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:51:23.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:51:23.104 [DEBUG] [Thread-64285] [transport.py] [_log()] userauth is OK
2025-11-18T00:51:23.104 [DEBUG] [Thread-64285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:51:23.104 [DEBUG] [Thread-64285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:51:23.104 [DEBUG] [Thread-64285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:51:23.104 [DEBUG] [Thread-64285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:51:23.120 [INFO] [Thread-64285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:51:23.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:51:23.748 [DEBUG] [Thread-64285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:51:23.748 [DEBUG] [Thread-64285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:51:23.748 [DEBUG] [Thread-64285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:51:23.790 [DEBUG] [Thread-64285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:51:23.790 [DEBUG] [Thread-64285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:51:23.793 [DEBUG] [Thread-64285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:51:23.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:51:23.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:51:23.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:51:23.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:51:23.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:51:23.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:51:23.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:51:23.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:51:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:51:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.952127 -999.00  +13.30  18.09     47   +2.40 1 2 1 1 1     0    0 12.11 55.06 ZNEsW 16.9 18.1 156.7 24.7 13.8 -23.1 13.7 -21.5 13.4 -21.7 13.7 -22.7
2025-11-18T00:51:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:51:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:51:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.952127
2025-11-18T00:51:23.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:51:23.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:51:23.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:51:23.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:51:23.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:51:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:50:58', tmtdew=12.33, humidity=42.95, cloud=0.0, wind=20.57, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:50:58', seeing=1.68, atlas_timestamp='2025-11-17T22:51:03.773', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:47:00')
2025-11-18T00:51:23.818 [DEBUG] [Thread-64285] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:51:23.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:51:23.915 [DEBUG] [Thread-64288] [transport.py] [_log()] starting thread (client mode): 0xd31cdf30
2025-11-18T00:51:23.915 [DEBUG] [Thread-64288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:51:23.930 [DEBUG] [Thread-64288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:51:23.931 [INFO] [Thread-64288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:51:23.940 [DEBUG] [Thread-64288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:51:23.940 [DEBUG] [Thread-64288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] client lang: <none>
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] server lang: <none>
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] kex follows: False
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:51:23.941 [DEBUG] [Thread-64288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:51:23.942 [DEBUG] [Thread-64288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:51:23.942 [DEBUG] [Thread-64288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:51:23.942 [DEBUG] [Thread-64288] [transport.py] [_log()] Compression: none
2025-11-18T00:51:23.942 [DEBUG] [Thread-64288] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:51:23.997 [DEBUG] [Thread-64288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:51:23.998 [DEBUG] [Thread-64288] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:51:23.998 [DEBUG] [Thread-64288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:51:23.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:51:23.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:51:24.055 [DEBUG] [Thread-64288] [transport.py] [_log()] userauth is OK
2025-11-18T00:51:24.055 [DEBUG] [Thread-64288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:51:24.055 [DEBUG] [Thread-64288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:51:24.055 [DEBUG] [Thread-64288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:51:24.055 [DEBUG] [Thread-64288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:51:24.074 [INFO] [Thread-64288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:51:24.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:51:24.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:51:24.914 [DEBUG] [Thread-64288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:51:24.915 [DEBUG] [Thread-64288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:51:24.962 [DEBUG] [Thread-64288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:51:24.962 [DEBUG] [Thread-64288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:51:24.971 [DEBUG] [Thread-64288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:51:24.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:51:24.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:51:24.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:51:24.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:51:24.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:51:24.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:51:25.008 [DEBUG] [Thread-64288] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:51:31.431 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:51:31.431 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:51:36.526 [DEBUG] [Thread-64290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:51:51.567 [DEBUG] [Thread-64291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:51:55.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:51:55.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:51:55.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:51:55.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 51, 30), 8.22, 61.97, 0.0, 21.74, 8.73, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:51:55.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:51:30
2025-11-18T00:51:55.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:51:55.949 [DEBUG] [Thread-64292] [transport.py] [_log()] starting thread (client mode): 0xd31cc7f0
2025-11-18T00:51:55.949 [DEBUG] [Thread-64292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:51:55.970 [DEBUG] [Thread-64292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:51:55.970 [INFO] [Thread-64292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] client lang: <none>
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] server lang: <none>
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] kex follows: False
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] Compression: none
2025-11-18T00:51:55.973 [DEBUG] [Thread-64292] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:51:55.991 [DEBUG] [Thread-64292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:51:55.992 [DEBUG] [Thread-64292] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:51:55.992 [DEBUG] [Thread-64292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:51:55.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:51:55.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:51:55.994 [DEBUG] [Thread-64292] [transport.py] [_log()] userauth is OK
2025-11-18T00:51:55.994 [DEBUG] [Thread-64292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:51:55.994 [DEBUG] [Thread-64292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:51:55.994 [DEBUG] [Thread-64292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:51:55.994 [DEBUG] [Thread-64292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:51:56.012 [INFO] [Thread-64292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:51:56.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:51:56.143 [DEBUG] [Thread-64294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:51:56.662 [DEBUG] [Thread-64292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:51:56.662 [DEBUG] [Thread-64292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:51:56.662 [DEBUG] [Thread-64292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:51:56.703 [DEBUG] [Thread-64292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:51:56.703 [DEBUG] [Thread-64292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:51:56.706 [DEBUG] [Thread-64292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:51:56.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:51:56.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:51:56.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:51:56.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:51:56.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:51:56.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:51:56.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.952474 -999.00  +13.30  18.12     48   +2.60 1 2 1 1 1     0    0 12.16 58.62 ZNEsW 20.0 18.1 165.6 25.2 13.8 -22.9 13.7 -21.6 13.4 -21.7 13.7 -22.6
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.952474
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:51:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:51:30', tmtdew=8.22, humidity=61.97, cloud=0.0, wind=21.74, temperature=8.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:51:30', seeing=1.68, atlas_timestamp='2025-11-17T22:51:33.754', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:47:00')
2025-11-18T00:51:56.723 [DEBUG] [Thread-64292] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:51:56.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:51:56.814 [DEBUG] [Thread-64296] [transport.py] [_log()] starting thread (client mode): 0xd07abc40
2025-11-18T00:51:56.814 [DEBUG] [Thread-64296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:51:56.829 [DEBUG] [Thread-64296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:51:56.829 [INFO] [Thread-64296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] client lang: <none>
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] server lang: <none>
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] kex follows: False
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:51:56.836 [DEBUG] [Thread-64296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:51:56.837 [DEBUG] [Thread-64296] [transport.py] [_log()] Compression: none
2025-11-18T00:51:56.837 [DEBUG] [Thread-64296] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:51:56.896 [DEBUG] [Thread-64296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:51:56.897 [DEBUG] [Thread-64296] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:51:56.897 [DEBUG] [Thread-64296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:51:56.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:51:56.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:51:56.954 [DEBUG] [Thread-64296] [transport.py] [_log()] userauth is OK
2025-11-18T00:51:56.954 [DEBUG] [Thread-64296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:51:56.954 [DEBUG] [Thread-64296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:51:56.954 [DEBUG] [Thread-64296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:51:56.954 [DEBUG] [Thread-64296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:51:56.972 [INFO] [Thread-64296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:51:56.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:51:56.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:51:57.775 [DEBUG] [Thread-64296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:51:57.775 [DEBUG] [Thread-64296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:51:57.823 [DEBUG] [Thread-64296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:51:57.823 [DEBUG] [Thread-64296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:51:57.831 [DEBUG] [Thread-64296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:51:57.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:51:57.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:51:57.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:51:57.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:51:57.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:51:57.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:51:57.863 [DEBUG] [Thread-64296] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:52:06.599 [DEBUG] [Thread-64298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:52:14.520 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:52:21.641 [DEBUG] [Thread-64299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:52:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:52:27.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:52:27.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:52:28.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 52, 2), 8.31, 61.69, 0.0, 22.3, 8.72, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:52:28.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:52:02
2025-11-18T00:52:28.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:52:28.800 [DEBUG] [Thread-64300] [transport.py] [_log()] starting thread (client mode): 0xd07d9e70
2025-11-18T00:52:28.800 [DEBUG] [Thread-64300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:52:28.815 [DEBUG] [Thread-64300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:52:28.815 [INFO] [Thread-64300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] client lang: <none>
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] server lang: <none>
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] kex follows: False
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:52:28.819 [DEBUG] [Thread-64300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:52:28.820 [DEBUG] [Thread-64300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:52:28.820 [DEBUG] [Thread-64300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:52:28.820 [DEBUG] [Thread-64300] [transport.py] [_log()] Compression: none
2025-11-18T00:52:28.820 [DEBUG] [Thread-64300] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:52:28.837 [DEBUG] [Thread-64300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:52:28.838 [DEBUG] [Thread-64300] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:52:28.838 [DEBUG] [Thread-64300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:52:28.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:52:28.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:52:28.840 [DEBUG] [Thread-64300] [transport.py] [_log()] userauth is OK
2025-11-18T00:52:28.840 [DEBUG] [Thread-64300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:52:28.840 [DEBUG] [Thread-64300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:52:28.840 [DEBUG] [Thread-64300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:52:28.840 [DEBUG] [Thread-64300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:52:28.864 [INFO] [Thread-64300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:52:28.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:52:29.426 [DEBUG] [Thread-64300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:52:29.426 [DEBUG] [Thread-64300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:52:29.426 [DEBUG] [Thread-64300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:52:29.468 [DEBUG] [Thread-64300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:52:29.468 [DEBUG] [Thread-64300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:52:29.471 [DEBUG] [Thread-64300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:52:29.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:52:29.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:52:29.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:52:29.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:52:29.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:52:29.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:52:29.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:52:29.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:52:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:52:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.952822 -999.00  +13.30  15.29     48   +2.50 1 2 1 1 1     0    0 11.97 60.05 ZNEsW 13.6 15.3 150.2 20.8 13.7 -23.2 13.7 -21.8 13.4 -21.8 13.7 -22.7
2025-11-18T00:52:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:52:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:52:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.952822
2025-11-18T00:52:29.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:52:29.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:52:29.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:52:29.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:52:29.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:52:29.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:52:02', tmtdew=8.31, humidity=61.69, cloud=0.0, wind=22.3, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:52:02', seeing=1.63, atlas_timestamp='2025-11-17T22:52:03.821', atlas_cloud=2, atlas_rain=1, zp_data=[0.16274999999999906, 0.22625000000000028, 0.33725000000000094, 0.5015000000000001, 0.37099999999999866, 0.18225000000000158, 0.04899999999999949, -0.0022500000000000853, 0.05649999999999977, 0.32099999999999973, 0.37424999999999997, 0.30299999999999905, 0.3819999999999997, 0.11324999999999896, 0.008999999999998565, -0.0070000000000014495, 0.09574999999999889, 0.4704999999999995, 0.5669999999999993, 0.5432499999999987, 0.395999999999999, 0.15274999999999928, 0.04625000000000057, -0.00024999999999941735, 0.08499999999999908, 0.5564999999999998, 1.4577500000000008, 1.021, 0.5750000000000002, 0.13500000000000156, 0.0810000000000013, 0.22600000000000087, 0.2912499999999998], zp_timestamp='2025-11-17T22:47:00')
2025-11-18T00:52:29.494 [DEBUG] [Thread-64300] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:52:29.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:52:29.593 [DEBUG] [Thread-64303] [transport.py] [_log()] starting thread (client mode): 0xd07db370
2025-11-18T00:52:29.593 [DEBUG] [Thread-64303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:52:29.610 [DEBUG] [Thread-64303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:52:29.610 [INFO] [Thread-64303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] client lang: <none>
2025-11-18T00:52:29.617 [DEBUG] [Thread-64303] [transport.py] [_log()] server lang: <none>
2025-11-18T00:52:29.618 [DEBUG] [Thread-64303] [transport.py] [_log()] kex follows: False
2025-11-18T00:52:29.618 [DEBUG] [Thread-64303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:52:29.618 [DEBUG] [Thread-64303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:52:29.618 [DEBUG] [Thread-64303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:52:29.618 [DEBUG] [Thread-64303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:52:29.618 [DEBUG] [Thread-64303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:52:29.618 [DEBUG] [Thread-64303] [transport.py] [_log()] Compression: none
2025-11-18T00:52:29.618 [DEBUG] [Thread-64303] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:52:29.683 [DEBUG] [Thread-64303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:52:29.683 [DEBUG] [Thread-64303] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:52:29.683 [DEBUG] [Thread-64303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:52:29.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:52:29.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:52:29.743 [DEBUG] [Thread-64303] [transport.py] [_log()] userauth is OK
2025-11-18T00:52:29.743 [DEBUG] [Thread-64303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:52:29.743 [DEBUG] [Thread-64303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:52:29.743 [DEBUG] [Thread-64303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:52:29.743 [DEBUG] [Thread-64303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:52:29.764 [INFO] [Thread-64303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:52:29.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:52:29.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:52:30.601 [DEBUG] [Thread-64303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:52:30.602 [DEBUG] [Thread-64303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:52:30.649 [DEBUG] [Thread-64303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:52:30.649 [DEBUG] [Thread-64303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:52:30.658 [DEBUG] [Thread-64303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:52:30.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:52:30.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:52:30.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:52:30.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:52:30.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:52:30.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:52:30.694 [DEBUG] [Thread-64303] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:52:31.635 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:52:31.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:52:36.672 [DEBUG] [Thread-64305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:52:51.701 [DEBUG] [Thread-64306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:52:56.200 [DEBUG] [Thread-64307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:53:00.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:53:00.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:53: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
2025-11-18T00:53:01.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 52, 34), 8.22, 61.99, 0.0, 18.79, 8.68, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:53:01.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:52:34
2025-11-18T00:53:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:53:01.626 [DEBUG] [Thread-64308] [transport.py] [_log()] starting thread (client mode): 0xd31ce710
2025-11-18T00:53:01.626 [DEBUG] [Thread-64308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:53:01.636 [DEBUG] [Thread-64308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:53:01.636 [INFO] [Thread-64308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] client lang: <none>
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] server lang: <none>
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] kex follows: False
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] Compression: none
2025-11-18T00:53:01.639 [DEBUG] [Thread-64308] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:53:01.649 [DEBUG] [Thread-64308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:53:01.649 [DEBUG] [Thread-64308] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:53:01.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:53:01.650 [DEBUG] [Thread-64308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:53:01.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:53:01.651 [DEBUG] [Thread-64308] [transport.py] [_log()] userauth is OK
2025-11-18T00:53:01.651 [DEBUG] [Thread-64308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:53:01.651 [DEBUG] [Thread-64308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:53:01.651 [DEBUG] [Thread-64308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:53:01.651 [DEBUG] [Thread-64308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:53:01.662 [INFO] [Thread-64308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:53:01.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:53:02.247 [DEBUG] [Thread-64308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:53:02.247 [DEBUG] [Thread-64308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:53:02.247 [DEBUG] [Thread-64308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:53:02.288 [DEBUG] [Thread-64308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:53:02.288 [DEBUG] [Thread-64308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:53:02.291 [DEBUG] [Thread-64308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:53:02.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:53:02.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:53:02.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:53:02.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:53:02.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:53:02.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:53:02.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:53:02.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:53:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:53:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.953169 -999.00  +13.30  18.53     47   +2.40 1 2 1 1 1     0    0 12.01 55.47 ZNEsW 16.0 18.5 156.6 22.3 13.7 -23.1 13.6 -21.8 13.4 -21.8 13.7 -22.6
2025-11-18T00:53:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:53:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:53:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.953169
2025-11-18T00:53:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:53:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:53:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:53:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:53:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:53:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:52:34', tmtdew=8.22, humidity=61.99, cloud=0.0, wind=18.79, temperature=8.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:52:34', seeing=1.43, atlas_timestamp='2025-11-17T22:52:33.802', atlas_cloud=2, atlas_rain=1, zp_data=[0.1977499999999992, 0.2447499999999998, 0.29725, 0.3885000000000005, 0.3774999999999995, 0.21325000000000038, 0.1404999999999994, 0.047250000000000014, 0.11949999999999861, 0.30349999999999966, 0.4652499999999993, 0.39200000000000124, 0.35549999999999926, 0.13724999999999987, 0.07349999999999923, 0.0259999999999998, 0.1302500000000002, 0.47300000000000075, 0.7249999999999996, 0.44374999999999787, 0.27449999999999974, 0.07574999999999932, 0.048250000000001236, -0.005250000000000199, 0.07099999999999973, 0.6325000000000003, 1.1972500000000004, 0.6234999999999999, 0.22449999999999992, 0.07450000000000045, 0.10100000000000087, 0.014500000000001734, 0.06074999999999875], zp_timestamp='2025-11-17T22:52:00')
2025-11-18T00:53:02.310 [DEBUG] [Thread-64308] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:53:02.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:53:02.408 [DEBUG] [Thread-64311] [transport.py] [_log()] starting thread (client mode): 0xd0711420
2025-11-18T00:53:02.408 [DEBUG] [Thread-64311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:53:02.423 [DEBUG] [Thread-64311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:53:02.423 [INFO] [Thread-64311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:53:02.431 [DEBUG] [Thread-64311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:53:02.431 [DEBUG] [Thread-64311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:53:02.431 [DEBUG] [Thread-64311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:53:02.431 [DEBUG] [Thread-64311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] client lang: <none>
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] server lang: <none>
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] kex follows: False
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] Compression: none
2025-11-18T00:53:02.432 [DEBUG] [Thread-64311] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:53:02.490 [DEBUG] [Thread-64311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:53:02.490 [DEBUG] [Thread-64311] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:53:02.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:53:02.491 [DEBUG] [Thread-64311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:53:02.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:53:02.546 [DEBUG] [Thread-64311] [transport.py] [_log()] userauth is OK
2025-11-18T00:53:02.546 [DEBUG] [Thread-64311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:53:02.546 [DEBUG] [Thread-64311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:53:02.546 [DEBUG] [Thread-64311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:53:02.546 [DEBUG] [Thread-64311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:53:02.566 [INFO] [Thread-64311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:53:02.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:53:02.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:53:03.370 [DEBUG] [Thread-64311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:53:03.371 [DEBUG] [Thread-64311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:53:03.418 [DEBUG] [Thread-64311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:53:03.418 [DEBUG] [Thread-64311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:53:03.427 [DEBUG] [Thread-64311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:53:03.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:53:03.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:53:03.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:53:03.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:53:03.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:53:03.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:53:03.460 [DEBUG] [Thread-64311] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:53:06.729 [DEBUG] [Thread-64313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:53:21.770 [DEBUG] [Thread-64314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:53:31.839 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:53:31.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:53:33.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:53:33.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:53:33.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:53:34.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 53, 6), 8.3, 61.77, 0.0, 17.36, 8.7, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:53:34.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:53:06
2025-11-18T00:53:34.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:53:34.410 [DEBUG] [Thread-64315] [transport.py] [_log()] starting thread (client mode): 0xd0712b90
2025-11-18T00:53:34.411 [DEBUG] [Thread-64315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:53:34.431 [DEBUG] [Thread-64315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:53:34.431 [INFO] [Thread-64315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] client lang: <none>
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] server lang: <none>
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] kex follows: False
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] Compression: none
2025-11-18T00:53:34.433 [DEBUG] [Thread-64315] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:53:34.441 [DEBUG] [Thread-64315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:53:34.442 [DEBUG] [Thread-64315] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:53:34.442 [DEBUG] [Thread-64315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:53:34.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:53:34.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:53:34.444 [DEBUG] [Thread-64315] [transport.py] [_log()] userauth is OK
2025-11-18T00:53:34.444 [DEBUG] [Thread-64315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:53:34.444 [DEBUG] [Thread-64315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:53:34.444 [DEBUG] [Thread-64315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:53:34.444 [DEBUG] [Thread-64315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:53:34.468 [INFO] [Thread-64315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:53:34.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:53:35.050 [DEBUG] [Thread-64315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:53:35.050 [DEBUG] [Thread-64315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:53:35.050 [DEBUG] [Thread-64315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:53:35.091 [DEBUG] [Thread-64315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:53:35.091 [DEBUG] [Thread-64315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:53:35.098 [DEBUG] [Thread-64315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:53:35.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:53:35.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:53:35.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:53:35.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:53:35.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:53:35.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:53:35.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:53:35.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:53:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:53:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.953169 -999.00  +13.30  18.53     47   +2.40 1 2 1 1 1     0    0 12.01 55.47 ZNEsW 16.0 18.5 156.6 22.3 13.7 -23.1 13.6 -21.8 13.4 -21.8 13.7 -22.6
2025-11-18T00:53:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:53:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:53:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.953169
2025-11-18T00:53:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:53:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:53:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:53:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:53:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:53:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:53:06', tmtdew=8.3, humidity=61.77, cloud=0.0, wind=17.36, temperature=8.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:53:06', seeing=1.43, atlas_timestamp='2025-11-17T22:52:33.802', atlas_cloud=2, atlas_rain=1, zp_data=[0.1977499999999992, 0.2447499999999998, 0.29725, 0.3885000000000005, 0.3774999999999995, 0.21325000000000038, 0.1404999999999994, 0.047250000000000014, 0.11949999999999861, 0.30349999999999966, 0.4652499999999993, 0.39200000000000124, 0.35549999999999926, 0.13724999999999987, 0.07349999999999923, 0.0259999999999998, 0.1302500000000002, 0.47300000000000075, 0.7249999999999996, 0.44374999999999787, 0.27449999999999974, 0.07574999999999932, 0.048250000000001236, -0.005250000000000199, 0.07099999999999973, 0.6325000000000003, 1.1972500000000004, 0.6234999999999999, 0.22449999999999992, 0.07450000000000045, 0.10100000000000087, 0.014500000000001734, 0.06074999999999875], zp_timestamp='2025-11-17T22:52:00')
2025-11-18T00:53:35.121 [DEBUG] [Thread-64315] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:53:35.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:53:35.217 [DEBUG] [Thread-64318] [transport.py] [_log()] starting thread (client mode): 0xd317fb80
2025-11-18T00:53:35.217 [DEBUG] [Thread-64318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:53:35.231 [DEBUG] [Thread-64318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:53:35.232 [INFO] [Thread-64318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:53:35.239 [DEBUG] [Thread-64318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] client lang: <none>
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] server lang: <none>
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] kex follows: False
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:53:35.240 [DEBUG] [Thread-64318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:53:35.241 [DEBUG] [Thread-64318] [transport.py] [_log()] Compression: none
2025-11-18T00:53:35.241 [DEBUG] [Thread-64318] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:53:35.297 [DEBUG] [Thread-64318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:53:35.298 [DEBUG] [Thread-64318] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:53:35.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:53:35.299 [DEBUG] [Thread-64318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:53:35.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:53:35.354 [DEBUG] [Thread-64318] [transport.py] [_log()] userauth is OK
2025-11-18T00:53:35.354 [DEBUG] [Thread-64318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:53:35.354 [DEBUG] [Thread-64318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:53:35.354 [DEBUG] [Thread-64318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:53:35.354 [DEBUG] [Thread-64318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:53:35.373 [INFO] [Thread-64318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:53:35.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:53:35.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:53:36.241 [DEBUG] [Thread-64318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:53:36.241 [DEBUG] [Thread-64318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:53:36.289 [DEBUG] [Thread-64318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:53:36.289 [DEBUG] [Thread-64318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:53:36.298 [DEBUG] [Thread-64318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:53:36.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:53:36.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:53:36.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:53:36.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:53:36.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:53:36.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:53:36.332 [DEBUG] [Thread-64318] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:53:36.799 [DEBUG] [Thread-64320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:53:51.838 [DEBUG] [Thread-64321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:53:56.255 [DEBUG] [Thread-64322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:54:06.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:54:06.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:54:06.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:54:06.870 [DEBUG] [Thread-64323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:54:07.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 53, 38), 8.43, 61.41, 0.0, 20.93, 8.68, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:54:07.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:53:38
2025-11-18T00:54:07.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:54:07.282 [DEBUG] [Thread-64324] [transport.py] [_log()] starting thread (client mode): 0xd0701c90
2025-11-18T00:54:07.282 [DEBUG] [Thread-64324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:54:07.302 [DEBUG] [Thread-64324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:54:07.302 [INFO] [Thread-64324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:54:07.305 [DEBUG] [Thread-64324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:54:07.305 [DEBUG] [Thread-64324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:54:07.305 [DEBUG] [Thread-64324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:54:07.305 [DEBUG] [Thread-64324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:54:07.305 [DEBUG] [Thread-64324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:54:07.305 [DEBUG] [Thread-64324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:54:07.305 [DEBUG] [Thread-64324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:54:07.305 [DEBUG] [Thread-64324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] client lang: <none>
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] server lang: <none>
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] kex follows: False
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] Compression: none
2025-11-18T00:54:07.306 [DEBUG] [Thread-64324] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:54:07.324 [DEBUG] [Thread-64324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:54:07.325 [DEBUG] [Thread-64324] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:54:07.325 [DEBUG] [Thread-64324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:54:07.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:54:07.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:54:07.327 [DEBUG] [Thread-64324] [transport.py] [_log()] userauth is OK
2025-11-18T00:54:07.327 [DEBUG] [Thread-64324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:54:07.327 [DEBUG] [Thread-64324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:54:07.327 [DEBUG] [Thread-64324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:54:07.327 [DEBUG] [Thread-64324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:54:07.351 [INFO] [Thread-64324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:54:07.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:54:07.974 [DEBUG] [Thread-64324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:54:07.974 [DEBUG] [Thread-64324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:54:07.974 [DEBUG] [Thread-64324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:54:08.015 [DEBUG] [Thread-64324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:54:08.015 [DEBUG] [Thread-64324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:54:08.018 [DEBUG] [Thread-64324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:54:08.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:54:08.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:54:08.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:54:08.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:54:08.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:54:08.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:54:08.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:54:08.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:54:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:54:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.953517 -999.00  +13.30  18.27     47   +2.50 1 2 1 1 1     0    0 12.16 57.83 ZNEsW 18.2 18.3 155.8 21.4 13.7 -23.3 13.6 -22.0 13.4 -21.8 13.7 -22.8
2025-11-18T00:54:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:54:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:54:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.953517
2025-11-18T00:54:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:54:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:54:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:54:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:54:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T00:54:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:53:38', tmtdew=8.43, humidity=61.41, cloud=0.0, wind=20.93, temperature=8.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:53:38', seeing=1.48, atlas_timestamp='2025-11-17T22:53:03.869', atlas_cloud=2, atlas_rain=1, zp_data=[0.1977499999999992, 0.2447499999999998, 0.29725, 0.3885000000000005, 0.3774999999999995, 0.21325000000000038, 0.1404999999999994, 0.047250000000000014, 0.11949999999999861, 0.30349999999999966, 0.4652499999999993, 0.39200000000000124, 0.35549999999999926, 0.13724999999999987, 0.07349999999999923, 0.0259999999999998, 0.1302500000000002, 0.47300000000000075, 0.7249999999999996, 0.44374999999999787, 0.27449999999999974, 0.07574999999999932, 0.048250000000001236, -0.005250000000000199, 0.07099999999999973, 0.6325000000000003, 1.1972500000000004, 0.6234999999999999, 0.22449999999999992, 0.07450000000000045, 0.10100000000000087, 0.014500000000001734, 0.06074999999999875], zp_timestamp='2025-11-17T22:52:00')
2025-11-18T00:54:08.041 [DEBUG] [Thread-64324] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:54:08.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:54:08.149 [DEBUG] [Thread-64327] [transport.py] [_log()] starting thread (client mode): 0xd0711180
2025-11-18T00:54:08.149 [DEBUG] [Thread-64327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:54:08.169 [DEBUG] [Thread-64327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:54:08.169 [INFO] [Thread-64327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:54:08.176 [DEBUG] [Thread-64327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:54:08.176 [DEBUG] [Thread-64327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:54:08.176 [DEBUG] [Thread-64327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] client lang: <none>
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] server lang: <none>
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] kex follows: False
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:54:08.177 [DEBUG] [Thread-64327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:54:08.178 [DEBUG] [Thread-64327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:54:08.178 [DEBUG] [Thread-64327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:54:08.178 [DEBUG] [Thread-64327] [transport.py] [_log()] Compression: none
2025-11-18T00:54:08.178 [DEBUG] [Thread-64327] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:54:08.234 [DEBUG] [Thread-64327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:54:08.234 [DEBUG] [Thread-64327] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:54:08.235 [DEBUG] [Thread-64327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:54:08.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:54:08.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:54:08.293 [DEBUG] [Thread-64327] [transport.py] [_log()] userauth is OK
2025-11-18T00:54:08.294 [DEBUG] [Thread-64327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:54:08.294 [DEBUG] [Thread-64327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:54:08.294 [DEBUG] [Thread-64327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:54:08.294 [DEBUG] [Thread-64327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:54:08.314 [INFO] [Thread-64327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:54:08.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:54:08.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:54:09.145 [DEBUG] [Thread-64327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:54:09.145 [DEBUG] [Thread-64327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:54:09.193 [DEBUG] [Thread-64327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:54:09.193 [DEBUG] [Thread-64327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:54:09.202 [DEBUG] [Thread-64327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:54:09.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:54:09.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:54:09.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:54:09.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:54:09.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:54:09.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:54:09.243 [DEBUG] [Thread-64327] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:54:21.897 [DEBUG] [Thread-64329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:54:32.043 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:54:32.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:54:36.936 [DEBUG] [Thread-64330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:54:39.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:54:39.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:54:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:54:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 54, 10), 8.44, 61.41, 0.0, 19.55, 8.72, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:54:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:54:10
2025-11-18T00:54:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:54:40.162 [DEBUG] [Thread-64331] [transport.py] [_log()] starting thread (client mode): 0xd07a3880
2025-11-18T00:54:40.162 [DEBUG] [Thread-64331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:54:40.182 [DEBUG] [Thread-64331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:54:40.182 [INFO] [Thread-64331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:54:40.185 [DEBUG] [Thread-64331] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:54:40.185 [DEBUG] [Thread-64331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:54:40.185 [DEBUG] [Thread-64331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:54:40.185 [DEBUG] [Thread-64331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:54:40.185 [DEBUG] [Thread-64331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] client lang: <none>
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] server lang: <none>
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] kex follows: False
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] Compression: none
2025-11-18T00:54:40.186 [DEBUG] [Thread-64331] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:54:40.204 [DEBUG] [Thread-64331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:54:40.205 [DEBUG] [Thread-64331] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:54:40.205 [DEBUG] [Thread-64331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:54:40.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:54:40.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:54:40.207 [DEBUG] [Thread-64331] [transport.py] [_log()] userauth is OK
2025-11-18T00:54:40.207 [DEBUG] [Thread-64331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:54:40.208 [DEBUG] [Thread-64331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:54:40.208 [DEBUG] [Thread-64331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:54:40.208 [DEBUG] [Thread-64331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:54:40.244 [INFO] [Thread-64331] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:54:40.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:54:40.858 [DEBUG] [Thread-64331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:54:40.858 [DEBUG] [Thread-64331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:54:40.859 [DEBUG] [Thread-64331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:54:40.900 [DEBUG] [Thread-64331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:54:40.900 [DEBUG] [Thread-64331] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:54:40.903 [DEBUG] [Thread-64331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:54:40.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:54:40.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:54:40.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:54:40.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:54:40.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:54:40.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:54:40.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:54:40.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:54:40.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:54:40.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.954211 -999.00  +13.20  14.76     47   +2.40 1 1 1 1 1     0    0 12.19 58.73 ZNESW 12.1 14.8 153.6 17.0 13.7 -23.4 13.6 -22.1 13.3 -21.9 13.6 -22.9
2025-11-18T00:54:40.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:54:40.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:54:40.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.954211
2025-11-18T00:54:40.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:54:40.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:54:40.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:54:40.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:54:40.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:54:40.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:54:10', tmtdew=8.44, humidity=61.41, cloud=0.0, wind=19.55, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:54:10', seeing=1.53, atlas_timestamp='2025-11-17T22:54:03.830', atlas_cloud=1, atlas_rain=1, zp_data=[0.1977499999999992, 0.2447499999999998, 0.29725, 0.3885000000000005, 0.3774999999999995, 0.21325000000000038, 0.1404999999999994, 0.047250000000000014, 0.11949999999999861, 0.30349999999999966, 0.4652499999999993, 0.39200000000000124, 0.35549999999999926, 0.13724999999999987, 0.07349999999999923, 0.0259999999999998, 0.1302500000000002, 0.47300000000000075, 0.7249999999999996, 0.44374999999999787, 0.27449999999999974, 0.07574999999999932, 0.048250000000001236, -0.005250000000000199, 0.07099999999999973, 0.6325000000000003, 1.1972500000000004, 0.6234999999999999, 0.22449999999999992, 0.07450000000000045, 0.10100000000000087, 0.014500000000001734, 0.06074999999999875], zp_timestamp='2025-11-17T22:52:00')
2025-11-18T00:54:40.930 [DEBUG] [Thread-64331] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:54:41.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:54:41.024 [DEBUG] [Thread-64334] [transport.py] [_log()] starting thread (client mode): 0xd07a3cd0
2025-11-18T00:54:41.024 [DEBUG] [Thread-64334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:54:41.039 [DEBUG] [Thread-64334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:54:41.039 [INFO] [Thread-64334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] client lang: <none>
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] server lang: <none>
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] kex follows: False
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:54:41.047 [DEBUG] [Thread-64334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:54:41.048 [DEBUG] [Thread-64334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:54:41.048 [DEBUG] [Thread-64334] [transport.py] [_log()] Compression: none
2025-11-18T00:54:41.048 [DEBUG] [Thread-64334] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:54:41.105 [DEBUG] [Thread-64334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:54:41.106 [DEBUG] [Thread-64334] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:54:41.106 [DEBUG] [Thread-64334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:54:41.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:54:41.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:54:41.162 [DEBUG] [Thread-64334] [transport.py] [_log()] userauth is OK
2025-11-18T00:54:41.162 [DEBUG] [Thread-64334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:54:41.162 [DEBUG] [Thread-64334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:54:41.162 [DEBUG] [Thread-64334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:54:41.162 [DEBUG] [Thread-64334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:54:41.182 [INFO] [Thread-64334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:54:41.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:54:41.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:54:42.019 [DEBUG] [Thread-64334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:54:42.019 [DEBUG] [Thread-64334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:54:42.067 [DEBUG] [Thread-64334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:54:42.067 [DEBUG] [Thread-64334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:54:42.076 [DEBUG] [Thread-64334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:54:42.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:54:42.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:54:42.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:54:42.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:54:42.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:54:42.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:54:42.111 [DEBUG] [Thread-64334] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:54:51.964 [DEBUG] [Thread-64336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:54:56.342 [DEBUG] [Thread-64337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:55:07.003 [DEBUG] [Thread-64338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:55:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:55:12.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:55:12.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:55:12.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 54, 42), 8.4, 61.4, 0.0, 18.72, 8.65, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:55:12.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:54:42
2025-11-18T00:55:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:55:13.120 [DEBUG] [Thread-64339] [transport.py] [_log()] starting thread (client mode): 0xd07d9150
2025-11-18T00:55:13.120 [DEBUG] [Thread-64339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:55:13.138 [DEBUG] [Thread-64339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:55:13.138 [INFO] [Thread-64339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] client lang: <none>
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] server lang: <none>
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] kex follows: False
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] Compression: none
2025-11-18T00:55:13.142 [DEBUG] [Thread-64339] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:55:13.156 [DEBUG] [Thread-64339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:55:13.156 [DEBUG] [Thread-64339] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:55:13.156 [DEBUG] [Thread-64339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:55:13.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:55:13.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:55:13.157 [DEBUG] [Thread-64339] [transport.py] [_log()] userauth is OK
2025-11-18T00:55:13.157 [DEBUG] [Thread-64339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:55:13.157 [DEBUG] [Thread-64339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:55:13.157 [DEBUG] [Thread-64339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:55:13.157 [DEBUG] [Thread-64339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:55:13.176 [INFO] [Thread-64339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:55:13.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:55:13.928 [DEBUG] [Thread-64339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:55:13.928 [DEBUG] [Thread-64339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:55:13.929 [DEBUG] [Thread-64339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:55:13.969 [DEBUG] [Thread-64339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:55:13.969 [DEBUG] [Thread-64339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:55:13.971 [DEBUG] [Thread-64339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:55:13.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:55:13.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:55:13.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:55:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:55:13.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:55:13.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:55:13.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:55:13.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:55:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:55:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.954558 -999.00  +13.20  12.76     47   +2.30 1 1 1 1 1     0    0 12.21 65.62 ZNESW 17.2 12.8 152.6 20.6 13.7 -23.3 13.6 -22.1 13.4 -21.8 13.7 -22.9
2025-11-18T00:55:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:55:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:55:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.954558
2025-11-18T00:55:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:55:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:55:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:55:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:55:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:55:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:54:42', tmtdew=8.4, humidity=61.4, cloud=0.0, wind=18.72, temperature=8.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:54:42', seeing=1.67, atlas_timestamp='2025-11-17T22:54:33.811', atlas_cloud=1, atlas_rain=1, zp_data=[0.1977499999999992, 0.2447499999999998, 0.29725, 0.3885000000000005, 0.3774999999999995, 0.21325000000000038, 0.1404999999999994, 0.047250000000000014, 0.11949999999999861, 0.30349999999999966, 0.4652499999999993, 0.39200000000000124, 0.35549999999999926, 0.13724999999999987, 0.07349999999999923, 0.0259999999999998, 0.1302500000000002, 0.47300000000000075, 0.7249999999999996, 0.44374999999999787, 0.27449999999999974, 0.07574999999999932, 0.048250000000001236, -0.005250000000000199, 0.07099999999999973, 0.6325000000000003, 1.1972500000000004, 0.6234999999999999, 0.22449999999999992, 0.07450000000000045, 0.10100000000000087, 0.014500000000001734, 0.06074999999999875], zp_timestamp='2025-11-17T22:52:00')
2025-11-18T00:55:13.990 [DEBUG] [Thread-64339] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:55:14.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:55:14.088 [DEBUG] [Thread-64342] [transport.py] [_log()] starting thread (client mode): 0xd07a9450
2025-11-18T00:55:14.088 [DEBUG] [Thread-64342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:55:14.103 [DEBUG] [Thread-64342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:55:14.103 [INFO] [Thread-64342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] client lang: <none>
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] server lang: <none>
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] kex follows: False
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] Compression: none
2025-11-18T00:55:14.110 [DEBUG] [Thread-64342] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:55:14.168 [DEBUG] [Thread-64342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:55:14.169 [DEBUG] [Thread-64342] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:55:14.169 [DEBUG] [Thread-64342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:55:14.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:55:14.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:55:14.225 [DEBUG] [Thread-64342] [transport.py] [_log()] userauth is OK
2025-11-18T00:55:14.226 [DEBUG] [Thread-64342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:55:14.226 [DEBUG] [Thread-64342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:55:14.226 [DEBUG] [Thread-64342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:55:14.226 [DEBUG] [Thread-64342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:55:14.243 [INFO] [Thread-64342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:55:14.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:55:14.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:55:15.069 [DEBUG] [Thread-64342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:55:15.069 [DEBUG] [Thread-64342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:55:15.117 [DEBUG] [Thread-64342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:55:15.117 [DEBUG] [Thread-64342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:55:15.125 [DEBUG] [Thread-64342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:55:15.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:55:15.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:55:15.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:55:15.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:55:15.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:55:15.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:55:15.156 [DEBUG] [Thread-64342] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:55:22.030 [DEBUG] [Thread-64344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:55:32.247 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:55:32.248 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:55:37.080 [DEBUG] [Thread-64345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:55:45.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:55:45.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:55: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
2025-11-18T00:55:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 55, 14), 8.38, 61.46, 0.0, 17.72, 8.65, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:55:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:55:14
2025-11-18T00:55:45.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:55:46.088 [DEBUG] [Thread-64346] [transport.py] [_log()] starting thread (client mode): 0xd07016f0
2025-11-18T00:55:46.088 [DEBUG] [Thread-64346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:55:46.108 [DEBUG] [Thread-64346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:55:46.108 [INFO] [Thread-64346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] client lang: <none>
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] server lang: <none>
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] kex follows: False
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] Compression: none
2025-11-18T00:55:46.110 [DEBUG] [Thread-64346] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:55:46.117 [DEBUG] [Thread-64346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:55:46.117 [DEBUG] [Thread-64346] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:55:46.117 [DEBUG] [Thread-64346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:55:46.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:55:46.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:55:46.118 [DEBUG] [Thread-64346] [transport.py] [_log()] userauth is OK
2025-11-18T00:55:46.118 [DEBUG] [Thread-64346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:55:46.118 [DEBUG] [Thread-64346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:55:46.118 [DEBUG] [Thread-64346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:55:46.118 [DEBUG] [Thread-64346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:55:46.127 [INFO] [Thread-64346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:55:46.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:55:46.779 [DEBUG] [Thread-64346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:55:46.779 [DEBUG] [Thread-64346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:55:46.779 [DEBUG] [Thread-64346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:55:46.820 [DEBUG] [Thread-64346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:55:46.820 [DEBUG] [Thread-64346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:55:46.823 [DEBUG] [Thread-64346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:55:46.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:55:46.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:55:46.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:55:46.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:55:46.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:55:46.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:55:46.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:55:46.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.954905 -999.00  +13.20  14.15     47   +2.40 1 1 1 1 1     0    0 12.46 63.22 ZNESW 15.4 14.2 166.2 20.9 13.7 -23.4 13.6 -22.1 13.3 -21.8 13.7 -23.0
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.954905
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:55:46.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:55:14', tmtdew=8.38, humidity=61.46, cloud=0.0, wind=17.72, temperature=8.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:55:14', seeing=1.6, atlas_timestamp='2025-11-17T22:55:03.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.1977499999999992, 0.2447499999999998, 0.29725, 0.3885000000000005, 0.3774999999999995, 0.21325000000000038, 0.1404999999999994, 0.047250000000000014, 0.11949999999999861, 0.30349999999999966, 0.4652499999999993, 0.39200000000000124, 0.35549999999999926, 0.13724999999999987, 0.07349999999999923, 0.0259999999999998, 0.1302500000000002, 0.47300000000000075, 0.7249999999999996, 0.44374999999999787, 0.27449999999999974, 0.07574999999999932, 0.048250000000001236, -0.005250000000000199, 0.07099999999999973, 0.6325000000000003, 1.1972500000000004, 0.6234999999999999, 0.22449999999999992, 0.07450000000000045, 0.10100000000000087, 0.014500000000001734, 0.06074999999999875], zp_timestamp='2025-11-17T22:52:00')
2025-11-18T00:55:46.844 [DEBUG] [Thread-64346] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:55:46.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:55:46.944 [DEBUG] [Thread-64349] [transport.py] [_log()] starting thread (client mode): 0xd317ce20
2025-11-18T00:55:46.944 [DEBUG] [Thread-64349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:55:46.963 [DEBUG] [Thread-64349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:55:46.963 [INFO] [Thread-64349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] client lang: <none>
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] server lang: <none>
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] kex follows: False
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] Compression: none
2025-11-18T00:55:46.971 [DEBUG] [Thread-64349] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:55:47.028 [DEBUG] [Thread-64349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:55:47.029 [DEBUG] [Thread-64349] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:55:47.029 [DEBUG] [Thread-64349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:55:47.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:55:47.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:55:47.086 [DEBUG] [Thread-64349] [transport.py] [_log()] userauth is OK
2025-11-18T00:55:47.086 [DEBUG] [Thread-64349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:55:47.086 [DEBUG] [Thread-64349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:55:47.086 [DEBUG] [Thread-64349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:55:47.086 [DEBUG] [Thread-64349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:55:47.099 [INFO] [Thread-64349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:55:47.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:55:47.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:55:47.946 [DEBUG] [Thread-64349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:55:47.946 [DEBUG] [Thread-64349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:55:47.994 [DEBUG] [Thread-64349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:55:47.994 [DEBUG] [Thread-64349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:55:48.003 [DEBUG] [Thread-64349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:55:48.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:55:48.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:55:48.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:55:48.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:55:48.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:55:48.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:55:48.034 [DEBUG] [Thread-64349] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:55:52.109 [DEBUG] [Thread-64351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:55:56.418 [DEBUG] [Thread-64352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:56:07.149 [DEBUG] [Thread-64353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:56:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:56:18.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:56: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
2025-11-18T00:56:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 55, 46), 8.47, 61.08, 0.0, 18.07, 8.65, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:56:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:55:46
2025-11-18T00:56:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:56:19.022 [DEBUG] [Thread-64354] [transport.py] [_log()] starting thread (client mode): 0xd07006d0
2025-11-18T00:56:19.022 [DEBUG] [Thread-64354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:56:19.041 [DEBUG] [Thread-64354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:56:19.041 [INFO] [Thread-64354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] client lang: <none>
2025-11-18T00:56:19.044 [DEBUG] [Thread-64354] [transport.py] [_log()] server lang: <none>
2025-11-18T00:56:19.045 [DEBUG] [Thread-64354] [transport.py] [_log()] kex follows: False
2025-11-18T00:56:19.045 [DEBUG] [Thread-64354] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:56:19.045 [DEBUG] [Thread-64354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:56:19.045 [DEBUG] [Thread-64354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:56:19.045 [DEBUG] [Thread-64354] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:56:19.045 [DEBUG] [Thread-64354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:56:19.045 [DEBUG] [Thread-64354] [transport.py] [_log()] Compression: none
2025-11-18T00:56:19.045 [DEBUG] [Thread-64354] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:56:19.059 [DEBUG] [Thread-64354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:56:19.060 [DEBUG] [Thread-64354] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:56:19.060 [DEBUG] [Thread-64354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:56:19.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:56:19.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:56:19.060 [DEBUG] [Thread-64354] [transport.py] [_log()] userauth is OK
2025-11-18T00:56:19.060 [DEBUG] [Thread-64354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:56:19.060 [DEBUG] [Thread-64354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:56:19.060 [DEBUG] [Thread-64354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:56:19.061 [DEBUG] [Thread-64354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:56:19.075 [INFO] [Thread-64354] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:56:19.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:56:19.707 [DEBUG] [Thread-64354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:56:19.707 [DEBUG] [Thread-64354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:56:19.708 [DEBUG] [Thread-64354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:56:19.748 [DEBUG] [Thread-64354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:56:19.748 [DEBUG] [Thread-64354] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:56:19.750 [DEBUG] [Thread-64354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:56:19.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:56:19.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:56:19.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:56:19.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:56:19.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:56:19.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:56:19.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:56:19.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:56:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:56:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.955252 -999.00  +13.20  14.08     47   +2.30 1 1 1 1 1     0    0 12.53 59.45 ZNESW 14.2 14.1 169.4 18.8 13.7 -23.3 13.6 -22.2 13.3 -21.7 13.6 -23.0
2025-11-18T00:56:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:56:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:56:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.955252
2025-11-18T00:56:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:56:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:56:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:56:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:56:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:56:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:55:46', tmtdew=8.47, humidity=61.08, cloud=0.0, wind=18.07, temperature=8.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:55:46', seeing=1.59, atlas_timestamp='2025-11-17T22:55:33.773', atlas_cloud=1, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:54:00')
2025-11-18T00:56:19.767 [DEBUG] [Thread-64354] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:56:19.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:56:19.853 [DEBUG] [Thread-64357] [transport.py] [_log()] starting thread (client mode): 0xd3163e50
2025-11-18T00:56:19.853 [DEBUG] [Thread-64357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:56:19.873 [DEBUG] [Thread-64357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:56:19.873 [INFO] [Thread-64357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] client lang: <none>
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] server lang: <none>
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] kex follows: False
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] Compression: none
2025-11-18T00:56:19.881 [DEBUG] [Thread-64357] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:56:19.937 [DEBUG] [Thread-64357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:56:19.937 [DEBUG] [Thread-64357] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:56:19.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:56:19.937 [DEBUG] [Thread-64357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:56:19.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:56:19.994 [DEBUG] [Thread-64357] [transport.py] [_log()] userauth is OK
2025-11-18T00:56:19.994 [DEBUG] [Thread-64357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:56:19.994 [DEBUG] [Thread-64357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:56:19.994 [DEBUG] [Thread-64357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:56:19.994 [DEBUG] [Thread-64357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:56:20.008 [INFO] [Thread-64357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:56:20.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:56:20.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:56:20.852 [DEBUG] [Thread-64357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:56:20.852 [DEBUG] [Thread-64357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:56:20.900 [DEBUG] [Thread-64357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:56:20.900 [DEBUG] [Thread-64357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:56:20.909 [DEBUG] [Thread-64357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:56:20.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:56: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')
2025-11-18T00:56:20.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:56:20.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:56:20.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:56:20.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:56:20.944 [DEBUG] [Thread-64357] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:56:22.184 [DEBUG] [Thread-64359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:56:32.452 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:56:32.453 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:56:37.228 [DEBUG] [Thread-64360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:56:50.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:56:50.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:56:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:56:51.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 56, 18), 8.48, 61.05, 0.0, 19.99, 8.63, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:56:51.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:56:18
2025-11-18T00:56:51.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:56:51.923 [DEBUG] [Thread-64361] [transport.py] [_log()] starting thread (client mode): 0xd07ab220
2025-11-18T00:56:51.923 [DEBUG] [Thread-64361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:56:51.944 [DEBUG] [Thread-64361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:56:51.944 [INFO] [Thread-64361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] client lang: <none>
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] server lang: <none>
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] kex follows: False
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:56:51.947 [DEBUG] [Thread-64361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:56:51.948 [DEBUG] [Thread-64361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:56:51.948 [DEBUG] [Thread-64361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:56:51.948 [DEBUG] [Thread-64361] [transport.py] [_log()] Compression: none
2025-11-18T00:56:51.948 [DEBUG] [Thread-64361] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:56:51.961 [DEBUG] [Thread-64361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:56:51.961 [DEBUG] [Thread-64361] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:56:51.961 [DEBUG] [Thread-64361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:56:51.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:56:51.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:56:51.962 [DEBUG] [Thread-64361] [transport.py] [_log()] userauth is OK
2025-11-18T00:56:51.962 [DEBUG] [Thread-64361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:56:51.962 [DEBUG] [Thread-64361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:56:51.962 [DEBUG] [Thread-64361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:56:51.962 [DEBUG] [Thread-64361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:56:51.977 [INFO] [Thread-64361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:56:51.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:56:52.256 [DEBUG] [Thread-64363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:56:52.574 [DEBUG] [Thread-64361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:56:52.575 [DEBUG] [Thread-64361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:56:52.575 [DEBUG] [Thread-64361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:56:52.615 [DEBUG] [Thread-64361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:56:52.616 [DEBUG] [Thread-64361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:56:52.618 [DEBUG] [Thread-64361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:56:52.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:56:52.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:56:52.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:56:52.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:56:52.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:56:52.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:56:52.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:56:52.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:56:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:56:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.955599 -999.00  +13.20  15.97     47   +2.20 1 1 1 1 1     0    0 12.45 62.90 ZNESW 13.6 16.0 158.0 19.7 13.7 -23.3 13.6 -22.1 13.4 -21.8 13.6 -22.9
2025-11-18T00:56:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:56:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:56:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.955599
2025-11-18T00:56:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:56:52.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:56:52.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:56:52.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:56:52.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:56:52.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:56:18', tmtdew=8.48, humidity=61.05, cloud=0.0, wind=19.99, temperature=8.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:56:50', seeing=1.64, atlas_timestamp='2025-11-17T22:56:03.754', atlas_cloud=1, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:54:00')
2025-11-18T00:56:52.643 [DEBUG] [Thread-64361] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:56:52.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:56:52.753 [DEBUG] [Thread-64365] [transport.py] [_log()] starting thread (client mode): 0xd317c0d0
2025-11-18T00:56:52.753 [DEBUG] [Thread-64365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:56:52.769 [DEBUG] [Thread-64365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:56:52.769 [INFO] [Thread-64365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:56:52.776 [DEBUG] [Thread-64365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] client lang: <none>
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] server lang: <none>
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] kex follows: False
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:56:52.777 [DEBUG] [Thread-64365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:56:52.778 [DEBUG] [Thread-64365] [transport.py] [_log()] Compression: none
2025-11-18T00:56:52.778 [DEBUG] [Thread-64365] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:56:52.834 [DEBUG] [Thread-64365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:56:52.834 [DEBUG] [Thread-64365] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:56:52.835 [DEBUG] [Thread-64365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:56:52.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:56:52.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:56:52.890 [DEBUG] [Thread-64365] [transport.py] [_log()] userauth is OK
2025-11-18T00:56:52.890 [DEBUG] [Thread-64365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:56:52.891 [DEBUG] [Thread-64365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:56:52.891 [DEBUG] [Thread-64365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:56:52.891 [DEBUG] [Thread-64365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:56:52.910 [INFO] [Thread-64365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:56:52.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:56:52.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:56:53.817 [DEBUG] [Thread-64365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:56:53.817 [DEBUG] [Thread-64365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:56:53.864 [DEBUG] [Thread-64365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:56:53.864 [DEBUG] [Thread-64365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:56:53.873 [DEBUG] [Thread-64365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:56:53.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:56:53.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:56:53.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:56:53.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:56:53.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:56:53.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:56:53.908 [DEBUG] [Thread-64365] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:56:56.490 [DEBUG] [Thread-64367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:57:07.283 [DEBUG] [Thread-64368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:57:22.313 [DEBUG] [Thread-64369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:57:23.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:57:23.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:57:23.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:57:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 56, 50), 8.57, 60.96, 0.0, 19.39, 8.66, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:57:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:56:50
2025-11-18T00:57:24.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:57:24.876 [DEBUG] [Thread-64370] [transport.py] [_log()] starting thread (client mode): 0xd0754730
2025-11-18T00:57:24.876 [DEBUG] [Thread-64370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:57:24.895 [DEBUG] [Thread-64370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:57:24.895 [INFO] [Thread-64370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:57:24.896 [DEBUG] [Thread-64370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] client lang: <none>
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] server lang: <none>
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] kex follows: False
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] Compression: none
2025-11-18T00:57:24.897 [DEBUG] [Thread-64370] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:57:24.907 [DEBUG] [Thread-64370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:57:24.907 [DEBUG] [Thread-64370] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:57:24.908 [DEBUG] [Thread-64370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:57:24.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:57:24.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:57:24.909 [DEBUG] [Thread-64370] [transport.py] [_log()] userauth is OK
2025-11-18T00:57:24.910 [DEBUG] [Thread-64370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:57:24.910 [DEBUG] [Thread-64370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:57:24.910 [DEBUG] [Thread-64370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:57:24.910 [DEBUG] [Thread-64370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:57:24.929 [INFO] [Thread-64370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:57:24.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:57:25.573 [DEBUG] [Thread-64370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:57:25.573 [DEBUG] [Thread-64370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:57:25.573 [DEBUG] [Thread-64370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:57:25.613 [DEBUG] [Thread-64370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:57:25.614 [DEBUG] [Thread-64370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:57:25.616 [DEBUG] [Thread-64370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:57:25.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:57:25.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:57:25.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:57:25.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:57:25.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:57:25.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:57:25.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:57:25.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:57:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:57:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.955947 -999.00  +13.10  12.69     47   +2.20 1 1 1 1 1     0    0 12.29 56.35 ZNESW 10.9 12.7 157.6 20.2 13.7 -23.4 13.5 -22.0 13.3 -21.6 13.6 -22.9
2025-11-18T00:57:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:57:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:57:25.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.955947
2025-11-18T00:57:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:57:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:57:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:57:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:57:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:57:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:56:50', tmtdew=8.57, humidity=60.96, cloud=0.0, wind=19.39, temperature=8.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:57:22', seeing=1.64, atlas_timestamp='2025-11-17T22:56:33.821', atlas_cloud=1, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:54:00')
2025-11-18T00:57:25.641 [DEBUG] [Thread-64370] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:57:25.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:57:25.737 [DEBUG] [Thread-64373] [transport.py] [_log()] starting thread (client mode): 0xd0756140
2025-11-18T00:57:25.737 [DEBUG] [Thread-64373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:57:25.755 [DEBUG] [Thread-64373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:57:25.756 [INFO] [Thread-64373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:57:25.763 [DEBUG] [Thread-64373] [transport.py] [_log()] client lang: <none>
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] server lang: <none>
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] kex follows: False
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] Compression: none
2025-11-18T00:57:25.764 [DEBUG] [Thread-64373] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:57:25.822 [DEBUG] [Thread-64373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:57:25.822 [DEBUG] [Thread-64373] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:57:25.823 [DEBUG] [Thread-64373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:57:25.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:57:25.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:57:25.880 [DEBUG] [Thread-64373] [transport.py] [_log()] userauth is OK
2025-11-18T00:57:25.880 [DEBUG] [Thread-64373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:57:25.880 [DEBUG] [Thread-64373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:57:25.880 [DEBUG] [Thread-64373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:57:25.880 [DEBUG] [Thread-64373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:57:25.895 [INFO] [Thread-64373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:57:25.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:57:25.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:57:26.771 [DEBUG] [Thread-64373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:57:26.772 [DEBUG] [Thread-64373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:57:26.819 [DEBUG] [Thread-64373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:57:26.819 [DEBUG] [Thread-64373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:57:26.828 [DEBUG] [Thread-64373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:57:26.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:57:26.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:57:26.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:57:26.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:57:26.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:57:26.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:57:26.863 [DEBUG] [Thread-64373] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:57:32.654 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:57:32.655 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:57:37.346 [DEBUG] [Thread-64375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:57:52.391 [DEBUG] [Thread-64376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:57:56.561 [DEBUG] [Thread-64377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:57:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:57:56.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:57:56.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:57:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 57, 54), 8.61, 60.66, 0.0, 20.36, 8.62, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:57:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:57:54
2025-11-18T00:57:57.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:57:57.818 [DEBUG] [Thread-64378] [transport.py] [_log()] starting thread (client mode): 0xd07a3310
2025-11-18T00:57:57.818 [DEBUG] [Thread-64378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:57:57.837 [DEBUG] [Thread-64378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:57:57.838 [INFO] [Thread-64378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:57:57.841 [DEBUG] [Thread-64378] [transport.py] [_log()] client lang: <none>
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] server lang: <none>
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] kex follows: False
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] Compression: none
2025-11-18T00:57:57.842 [DEBUG] [Thread-64378] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:57:57.861 [DEBUG] [Thread-64378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:57:57.862 [DEBUG] [Thread-64378] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:57:57.862 [DEBUG] [Thread-64378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:57:57.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:57:57.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:57:57.864 [DEBUG] [Thread-64378] [transport.py] [_log()] userauth is OK
2025-11-18T00:57:57.864 [DEBUG] [Thread-64378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:57:57.864 [DEBUG] [Thread-64378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:57:57.864 [DEBUG] [Thread-64378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:57:57.864 [DEBUG] [Thread-64378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:57:57.888 [INFO] [Thread-64378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:57:57.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:57:58.668 [DEBUG] [Thread-64378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:57:58.668 [DEBUG] [Thread-64378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:57:58.669 [DEBUG] [Thread-64378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:57:58.709 [DEBUG] [Thread-64378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:57:58.709 [DEBUG] [Thread-64378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:57:58.713 [DEBUG] [Thread-64378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:57:58.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:57:58.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:57:58.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:57:58.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:57:58.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:57:58.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:57:58.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:57:58.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:57:58.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:57:58.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.956641 -999.00  +13.20  17.14     47   +2.10 1 1 1 1 1     0    0 12.13 59.01 ZNESW 19.1 17.1 157.0 21.3 13.6 -23.2 13.5 -22.0 13.2 -21.5 13.6 -22.8
2025-11-18T00:57:58.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:57:58.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:57:58.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.956641
2025-11-18T00:57:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:57:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:57:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:57:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:57:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:57:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:57:54', tmtdew=8.61, humidity=60.66, cloud=0.0, wind=20.36, temperature=8.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:57:54', seeing=1.64, atlas_timestamp='2025-11-17T22:57:33.782', atlas_cloud=1, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:54:00')
2025-11-18T00:57:58.730 [DEBUG] [Thread-64378] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:57:58.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:57:58.828 [DEBUG] [Thread-64381] [transport.py] [_log()] starting thread (client mode): 0xd0710fd0
2025-11-18T00:57:58.828 [DEBUG] [Thread-64381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:57:58.851 [DEBUG] [Thread-64381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:57:58.852 [INFO] [Thread-64381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:57:58.861 [DEBUG] [Thread-64381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] client lang: <none>
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] server lang: <none>
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] kex follows: False
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:57:58.862 [DEBUG] [Thread-64381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:57:58.863 [DEBUG] [Thread-64381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:57:58.863 [DEBUG] [Thread-64381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:57:58.863 [DEBUG] [Thread-64381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:57:58.863 [DEBUG] [Thread-64381] [transport.py] [_log()] Compression: none
2025-11-18T00:57:58.863 [DEBUG] [Thread-64381] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:57:58.922 [DEBUG] [Thread-64381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:57:58.922 [DEBUG] [Thread-64381] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:57:58.922 [DEBUG] [Thread-64381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:57:58.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:57:58.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:57:58.978 [DEBUG] [Thread-64381] [transport.py] [_log()] userauth is OK
2025-11-18T00:57:58.978 [DEBUG] [Thread-64381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:57:58.979 [DEBUG] [Thread-64381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:57:58.979 [DEBUG] [Thread-64381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:57:58.979 [DEBUG] [Thread-64381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:57:58.998 [INFO] [Thread-64381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:57:58.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:57:58.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:57:59.828 [DEBUG] [Thread-64381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:57:59.829 [DEBUG] [Thread-64381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:57:59.876 [DEBUG] [Thread-64381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:57:59.876 [DEBUG] [Thread-64381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:57:59.885 [DEBUG] [Thread-64381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:57:59.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:57:59.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:57:59.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:57:59.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:57:59.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:57:59.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:57:59.920 [DEBUG] [Thread-64381] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:58:07.418 [DEBUG] [Thread-64383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:58:15.624 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:58:22.461 [DEBUG] [Thread-64384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:58:29.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:58:29.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:58:29.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:58:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 58, 26), 8.56, 60.8, 0.0, 20.59, 8.61, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:58:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:58:26
2025-11-18T00:58:30.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:58:30.879 [DEBUG] [Thread-64385] [transport.py] [_log()] starting thread (client mode): 0xd31626e0
2025-11-18T00:58:30.879 [DEBUG] [Thread-64385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:58:30.899 [DEBUG] [Thread-64385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:58:30.899 [INFO] [Thread-64385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:58:30.902 [DEBUG] [Thread-64385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:58:30.902 [DEBUG] [Thread-64385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:58:30.902 [DEBUG] [Thread-64385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:58:30.902 [DEBUG] [Thread-64385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:58:30.902 [DEBUG] [Thread-64385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:58:30.902 [DEBUG] [Thread-64385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:58:30.902 [DEBUG] [Thread-64385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] client lang: <none>
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] server lang: <none>
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] kex follows: False
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] Compression: none
2025-11-18T00:58:30.903 [DEBUG] [Thread-64385] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:58:30.920 [DEBUG] [Thread-64385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:58:30.921 [DEBUG] [Thread-64385] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:58:30.921 [DEBUG] [Thread-64385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:58:30.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:58:30.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:58:30.924 [DEBUG] [Thread-64385] [transport.py] [_log()] userauth is OK
2025-11-18T00:58:30.924 [DEBUG] [Thread-64385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:58:30.924 [DEBUG] [Thread-64385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:58:30.924 [DEBUG] [Thread-64385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:58:30.924 [DEBUG] [Thread-64385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:58:30.950 [INFO] [Thread-64385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:58:30.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:58:31.589 [DEBUG] [Thread-64385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:58:31.590 [DEBUG] [Thread-64385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:58:31.590 [DEBUG] [Thread-64385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:58:31.630 [DEBUG] [Thread-64385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:58:31.631 [DEBUG] [Thread-64385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:58:31.633 [DEBUG] [Thread-64385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:58:31.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:58:31.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:58:31.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:58:31.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:58:31.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:58:31.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:58:31.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:58:31.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:58:31.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:58:31.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.956988 -999.00  +13.20  13.50     46   +2.00 1 1 1 1 1     0    0 12.21 59.75 ZNESW 15.7 13.5 162.6 22.9 13.6 -23.1 13.5 -21.9 13.3 -21.5 13.6 -22.5
2025-11-18T00:58:31.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:58:31.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:58:31.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.956988
2025-11-18T00:58:31.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:58:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:58:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:58:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:58:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:58:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:58:26', tmtdew=8.56, humidity=60.8, cloud=0.0, wind=20.59, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:58:26', seeing=1.54, atlas_timestamp='2025-11-17T22:58:03.763', atlas_cloud=1, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:54:00')
2025-11-18T00:58:31.660 [DEBUG] [Thread-64385] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:58:31.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:58:31.759 [DEBUG] [Thread-64388] [transport.py] [_log()] starting thread (client mode): 0xd3160250
2025-11-18T00:58:31.759 [DEBUG] [Thread-64388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:58:31.773 [DEBUG] [Thread-64388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:58:31.774 [INFO] [Thread-64388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:58:31.781 [DEBUG] [Thread-64388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] client lang: <none>
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] server lang: <none>
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] kex follows: False
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:58:31.782 [DEBUG] [Thread-64388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:58:31.783 [DEBUG] [Thread-64388] [transport.py] [_log()] Compression: none
2025-11-18T00:58:31.783 [DEBUG] [Thread-64388] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:58:31.838 [DEBUG] [Thread-64388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:58:31.838 [DEBUG] [Thread-64388] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:58:31.839 [DEBUG] [Thread-64388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:58:31.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:58:31.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:58:31.894 [DEBUG] [Thread-64388] [transport.py] [_log()] userauth is OK
2025-11-18T00:58:31.894 [DEBUG] [Thread-64388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:58:31.894 [DEBUG] [Thread-64388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:58:31.894 [DEBUG] [Thread-64388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:58:31.894 [DEBUG] [Thread-64388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:58:31.913 [INFO] [Thread-64388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:58:31.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:58:31.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:58:32.746 [DEBUG] [Thread-64388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:58:32.746 [DEBUG] [Thread-64388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:58:32.794 [DEBUG] [Thread-64388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:58:32.794 [DEBUG] [Thread-64388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:58:32.803 [DEBUG] [Thread-64388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:58:32.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:58:32.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:58:32.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:58:32.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:58:32.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:58:32.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:58:32.839 [DEBUG] [Thread-64388] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:58:32.857 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:58:32.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:58:37.488 [DEBUG] [Thread-64390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:58:52.538 [DEBUG] [Thread-64391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:58:56.649 [DEBUG] [Thread-64392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:59:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:59:02.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:59: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
2025-11-18T00:59:03.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 58, 58), 8.59, 60.79, 0.0, 20.57, 8.61, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:59:03.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:58:58
2025-11-18T00:59:03.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:59:03.881 [DEBUG] [Thread-64393] [transport.py] [_log()] starting thread (client mode): 0xd07a32b0
2025-11-18T00:59:03.881 [DEBUG] [Thread-64393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:59:03.901 [DEBUG] [Thread-64393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:59:03.901 [INFO] [Thread-64393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] client lang: <none>
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] server lang: <none>
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] kex follows: False
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:59:03.912 [DEBUG] [Thread-64393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:59:03.913 [DEBUG] [Thread-64393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:59:03.913 [DEBUG] [Thread-64393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:59:03.913 [DEBUG] [Thread-64393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:59:03.913 [DEBUG] [Thread-64393] [transport.py] [_log()] Compression: none
2025-11-18T00:59:03.913 [DEBUG] [Thread-64393] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:59:03.922 [DEBUG] [Thread-64393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:59:03.922 [DEBUG] [Thread-64393] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:59:03.922 [DEBUG] [Thread-64393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:59:03.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:59:03.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:59:03.923 [DEBUG] [Thread-64393] [transport.py] [_log()] userauth is OK
2025-11-18T00:59:03.923 [DEBUG] [Thread-64393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:59:03.923 [DEBUG] [Thread-64393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:59:03.923 [DEBUG] [Thread-64393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:59:03.923 [DEBUG] [Thread-64393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:59:03.933 [INFO] [Thread-64393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:59:03.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:59:04.677 [DEBUG] [Thread-64393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:59:04.678 [DEBUG] [Thread-64393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:59:04.678 [DEBUG] [Thread-64393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:59:04.719 [DEBUG] [Thread-64393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:59:04.719 [DEBUG] [Thread-64393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:59:04.721 [DEBUG] [Thread-64393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:59:04.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:59:04.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:59:04.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:59:04.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:59:04.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:59:04.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:59:04.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:59:04.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.957335 -999.00  +13.10   9.30     47   +2.20 1 1 1 1 1     0    0 12.24 56.18 ZNESW 16.0 9.3 147.4 16.7 13.6 -23.4 13.5 -21.9 13.2 -21.5 13.6 -22.8
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.957335
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:59:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:58:58', tmtdew=8.59, humidity=60.79, cloud=0.0, wind=20.57, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:58:58', seeing=1.52, atlas_timestamp='2025-11-17T22:58:33.744', atlas_cloud=1, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:56:00')
2025-11-18T00:59:04.739 [DEBUG] [Thread-64393] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:59:04.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:59:04.834 [DEBUG] [Thread-64396] [transport.py] [_log()] starting thread (client mode): 0xd3152770
2025-11-18T00:59:04.834 [DEBUG] [Thread-64396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:59:04.850 [DEBUG] [Thread-64396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:59:04.850 [INFO] [Thread-64396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] client lang: <none>
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] server lang: <none>
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] kex follows: False
2025-11-18T00:59:04.857 [DEBUG] [Thread-64396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:59:04.858 [DEBUG] [Thread-64396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:59:04.858 [DEBUG] [Thread-64396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:59:04.858 [DEBUG] [Thread-64396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:59:04.858 [DEBUG] [Thread-64396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:59:04.858 [DEBUG] [Thread-64396] [transport.py] [_log()] Compression: none
2025-11-18T00:59:04.858 [DEBUG] [Thread-64396] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:59:04.914 [DEBUG] [Thread-64396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:59:04.915 [DEBUG] [Thread-64396] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:59:04.915 [DEBUG] [Thread-64396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:59:04.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:59:04.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:59:04.970 [DEBUG] [Thread-64396] [transport.py] [_log()] userauth is OK
2025-11-18T00:59:04.970 [DEBUG] [Thread-64396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:59:04.970 [DEBUG] [Thread-64396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:59:04.970 [DEBUG] [Thread-64396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:59:04.970 [DEBUG] [Thread-64396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:59:04.988 [INFO] [Thread-64396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:59:04.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:59:04.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:59:05.869 [DEBUG] [Thread-64396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:59:05.869 [DEBUG] [Thread-64396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:59:05.918 [DEBUG] [Thread-64396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:59:05.918 [DEBUG] [Thread-64396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:59:05.926 [DEBUG] [Thread-64396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:59:05.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:59:05.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:59:05.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:59:05.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:59:05.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:59:05.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:59:05.958 [DEBUG] [Thread-64396] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:59:07.564 [DEBUG] [Thread-64398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:59:22.597 [DEBUG] [Thread-64399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:59:33.064 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:59:33.065 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:59:35.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T00:59:35.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T00:59:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T00:59:36.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 0, 59, 30), 8.6, 60.76, 0.0, 19.09, 8.61, 0, 0, 0, 2, 0, 0),)
2025-11-18T00:59:36.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 00:59:30
2025-11-18T00:59:36.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T00:59:36.910 [DEBUG] [Thread-64400] [transport.py] [_log()] starting thread (client mode): 0xd31521d0
2025-11-18T00:59:36.910 [DEBUG] [Thread-64400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:59:36.931 [DEBUG] [Thread-64400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T00:59:36.931 [INFO] [Thread-64400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T00:59:36.935 [DEBUG] [Thread-64400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:59:36.935 [DEBUG] [Thread-64400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T00:59:36.935 [DEBUG] [Thread-64400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:59:36.935 [DEBUG] [Thread-64400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:59:36.935 [DEBUG] [Thread-64400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:59:36.935 [DEBUG] [Thread-64400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] client lang: <none>
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] server lang: <none>
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] kex follows: False
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] Compression: none
2025-11-18T00:59:36.936 [DEBUG] [Thread-64400] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:59:36.955 [DEBUG] [Thread-64400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:59:36.955 [DEBUG] [Thread-64400] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:59:36.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T00:59:36.957 [DEBUG] [Thread-64400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T00:59:36.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:59:36.959 [DEBUG] [Thread-64400] [transport.py] [_log()] userauth is OK
2025-11-18T00:59:36.959 [DEBUG] [Thread-64400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:59:36.959 [DEBUG] [Thread-64400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:59:36.959 [DEBUG] [Thread-64400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T00:59:36.959 [DEBUG] [Thread-64400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:59:36.983 [INFO] [Thread-64400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:59:36.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:59:37.624 [DEBUG] [Thread-64402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:59:37.661 [DEBUG] [Thread-64400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:59:37.661 [DEBUG] [Thread-64400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:59:37.662 [DEBUG] [Thread-64400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T00:59:37.702 [DEBUG] [Thread-64400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:59:37.703 [DEBUG] [Thread-64400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:59:37.706 [DEBUG] [Thread-64400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:59:37.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:59:37.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T00:59:37.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T00:59:37.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T00:59:37.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:59:37.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T00:59:37.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:59:37.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:59:37.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T00:59:37.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.957683 -999.00  +13.10  16.21     46   +1.90 1 1 1 1 1     0    0 12.31 55.15 ZNESW 13.5 16.2 170.0 18.6 13.6 -23.2 13.4 -21.8 13.3 -21.3 13.6 -22.5
2025-11-18T00:59:37.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T00:59:37.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T00:59:37.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.957683
2025-11-18T00:59:37.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T00:59:37.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T00:59:37.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T00:59:37.730 [DEBUG] [Thread-64400] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:59:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T00:59:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T00:59:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T00:59:30', tmtdew=8.6, humidity=60.76, cloud=0.0, wind=19.09, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T00:59:30', seeing=1.5, atlas_timestamp='2025-11-17T22:59:03.811', atlas_cloud=1, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:56:00')
2025-11-18T00:59:37.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T00:59:37.825 [DEBUG] [Thread-64404] [transport.py] [_log()] starting thread (client mode): 0xd0756b00
2025-11-18T00:59:37.826 [DEBUG] [Thread-64404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T00:59:37.840 [DEBUG] [Thread-64404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T00:59:37.840 [INFO] [Thread-64404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] client lang: <none>
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] server lang: <none>
2025-11-18T00:59:37.848 [DEBUG] [Thread-64404] [transport.py] [_log()] kex follows: False
2025-11-18T00:59:37.849 [DEBUG] [Thread-64404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T00:59:37.849 [DEBUG] [Thread-64404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T00:59:37.849 [DEBUG] [Thread-64404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T00:59:37.849 [DEBUG] [Thread-64404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T00:59:37.849 [DEBUG] [Thread-64404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T00:59:37.849 [DEBUG] [Thread-64404] [transport.py] [_log()] Compression: none
2025-11-18T00:59:37.849 [DEBUG] [Thread-64404] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T00:59:37.906 [DEBUG] [Thread-64404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T00:59:37.906 [DEBUG] [Thread-64404] [transport.py] [_log()] Switch to new keys ...
2025-11-18T00:59:37.906 [DEBUG] [Thread-64404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T00:59:37.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T00:59:37.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T00:59:37.962 [DEBUG] [Thread-64404] [transport.py] [_log()] userauth is OK
2025-11-18T00:59:37.963 [DEBUG] [Thread-64404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T00:59:37.963 [DEBUG] [Thread-64404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T00:59:37.963 [DEBUG] [Thread-64404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T00:59:37.963 [DEBUG] [Thread-64404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T00:59:37.982 [INFO] [Thread-64404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T00:59:37.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T00:59:37.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T00:59:38.825 [DEBUG] [Thread-64404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T00:59:38.825 [DEBUG] [Thread-64404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T00:59:38.876 [DEBUG] [Thread-64404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T00:59:38.876 [DEBUG] [Thread-64404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T00:59:38.886 [DEBUG] [Thread-64404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T00:59:38.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T00:59:38.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T00:59:38.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T00:59:38.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T00:59:38.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T00:59:38.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T00:59:38.927 [DEBUG] [Thread-64404] [transport.py] [_log()] EOF in transport thread
2025-11-18T00:59:52.653 [DEBUG] [Thread-64406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T00:59:56.700 [DEBUG] [Thread-64407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:00:07.691 [DEBUG] [Thread-64408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:00:08.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:00:08.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:00:08.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:00:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 0, 2), 8.62, 60.72, 0.0, 19.57, 8.6, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:00:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:00:02
2025-11-18T01:00:09.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:00:09.864 [DEBUG] [Thread-64409] [transport.py] [_log()] starting thread (client mode): 0xd3161060
2025-11-18T01:00:09.864 [DEBUG] [Thread-64409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:00:09.890 [DEBUG] [Thread-64409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:00:09.890 [INFO] [Thread-64409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:00:09.891 [DEBUG] [Thread-64409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:00:09.891 [DEBUG] [Thread-64409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] client lang: <none>
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] server lang: <none>
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] kex follows: False
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] Compression: none
2025-11-18T01:00:09.892 [DEBUG] [Thread-64409] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:00:09.901 [DEBUG] [Thread-64409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:00:09.902 [DEBUG] [Thread-64409] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:00:09.902 [DEBUG] [Thread-64409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:00:09.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:00:09.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:00:09.904 [DEBUG] [Thread-64409] [transport.py] [_log()] userauth is OK
2025-11-18T01:00:09.905 [DEBUG] [Thread-64409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:00:09.905 [DEBUG] [Thread-64409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:00:09.905 [DEBUG] [Thread-64409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:00:09.905 [DEBUG] [Thread-64409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:00:09.919 [INFO] [Thread-64409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:00:09.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:00:13.313 [DEBUG] [Thread-64409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:00:13.313 [DEBUG] [Thread-64409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:00:13.313 [DEBUG] [Thread-64409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:00:13.353 [DEBUG] [Thread-64409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:00:13.353 [DEBUG] [Thread-64409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:00:13.356 [DEBUG] [Thread-64409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:00:13.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:00:13.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:00:13.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:00:13.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:00:13.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:00:13.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:00:13.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:00:13.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:00:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:00:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.958030 -999.00  +13.00  12.32     46   +1.80 1 2 1 1 1     0    0 12.26 51.25 ZNEsW 14.2 12.3 158.6 17.9 13.6 -23.1 13.5 -21.8 13.3 -21.2 13.6 -22.6
2025-11-18T01:00:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:00:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:00:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.958030
2025-11-18T01:00:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:00:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:00:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:00:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:00:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:00:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:00:02', tmtdew=8.62, humidity=60.72, cloud=0.0, wind=19.57, temperature=8.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:00:02', seeing=1.44, atlas_timestamp='2025-11-17T22:59:33.792', atlas_cloud=2, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:56:00')
2025-11-18T01:00:13.464 [DEBUG] [Thread-64409] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:00:13.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:00:13.562 [DEBUG] [Thread-64412] [transport.py] [_log()] starting thread (client mode): 0xd0756920
2025-11-18T01:00:13.562 [DEBUG] [Thread-64412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:00:13.580 [DEBUG] [Thread-64412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:00:13.580 [INFO] [Thread-64412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:00:13.591 [DEBUG] [Thread-64412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] client lang: <none>
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] server lang: <none>
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] kex follows: False
2025-11-18T01:00:13.592 [DEBUG] [Thread-64412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:00:13.593 [DEBUG] [Thread-64412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:00:13.593 [DEBUG] [Thread-64412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:00:13.593 [DEBUG] [Thread-64412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:00:13.593 [DEBUG] [Thread-64412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:00:13.593 [DEBUG] [Thread-64412] [transport.py] [_log()] Compression: none
2025-11-18T01:00:13.593 [DEBUG] [Thread-64412] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:00:13.646 [DEBUG] [Thread-64412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:00:13.646 [DEBUG] [Thread-64412] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:00:13.647 [DEBUG] [Thread-64412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:00:13.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:00:13.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:00:13.703 [DEBUG] [Thread-64412] [transport.py] [_log()] userauth is OK
2025-11-18T01:00:13.703 [DEBUG] [Thread-64412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:00:13.703 [DEBUG] [Thread-64412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:00:13.703 [DEBUG] [Thread-64412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:00:13.703 [DEBUG] [Thread-64412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:00:13.724 [INFO] [Thread-64412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:00:13.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:00:13.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:00:14.614 [DEBUG] [Thread-64412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:00:14.614 [DEBUG] [Thread-64412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:00:14.662 [DEBUG] [Thread-64412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:00:14.662 [DEBUG] [Thread-64412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:00:14.673 [DEBUG] [Thread-64412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:00:14.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:00:14.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:00:14.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:00:14.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:00:14.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:00:14.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:00:14.713 [DEBUG] [Thread-64412] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:00:22.719 [DEBUG] [Thread-64414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:00:33.267 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:00:33.268 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:00:37.749 [DEBUG] [Thread-64415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:00:44.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:00:44.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:00:44.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:00:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 0, 34), 8.77, 60.34, 0.0, 20.41, 8.57, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:00:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:00:34
2025-11-18T01:00:45.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:00:45.667 [DEBUG] [Thread-64416] [transport.py] [_log()] starting thread (client mode): 0xd3150280
2025-11-18T01:00:45.668 [DEBUG] [Thread-64416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:00:45.688 [DEBUG] [Thread-64416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:00:45.689 [INFO] [Thread-64416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:00:45.691 [DEBUG] [Thread-64416] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] client lang: <none>
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] server lang: <none>
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] kex follows: False
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] Compression: none
2025-11-18T01:00:45.692 [DEBUG] [Thread-64416] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:00:45.709 [DEBUG] [Thread-64416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:00:45.710 [DEBUG] [Thread-64416] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:00:45.710 [DEBUG] [Thread-64416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:00:45.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:00:45.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:00:45.712 [DEBUG] [Thread-64416] [transport.py] [_log()] userauth is OK
2025-11-18T01:00:45.712 [DEBUG] [Thread-64416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:00:45.713 [DEBUG] [Thread-64416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:00:45.713 [DEBUG] [Thread-64416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:00:45.713 [DEBUG] [Thread-64416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:00:45.748 [INFO] [Thread-64416] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:00:45.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:00:46.371 [DEBUG] [Thread-64416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:00:46.371 [DEBUG] [Thread-64416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:00:46.372 [DEBUG] [Thread-64416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:00:46.413 [DEBUG] [Thread-64416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:00:46.413 [DEBUG] [Thread-64416] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:00:46.416 [DEBUG] [Thread-64416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:00:46.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:00:46.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:00:46.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:00:46.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:00:46.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:00:46.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:00:46.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:00:46.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:00:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:00:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.958377 -999.00  +13.00  15.92     46   +1.70 1 2 1 1 1     0    0 12.25 51.81 ZNEsW 17.4 15.9 163.2 19.8 13.6 -23.0 13.4 -21.5 13.2 -21.0 13.5 -22.6
2025-11-18T01:00:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:00:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:00:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.958377
2025-11-18T01:00:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:00:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:00:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:00:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:00:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:00:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:00:34', tmtdew=8.77, humidity=60.34, cloud=0.0, wind=20.41, temperature=8.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:00:34', seeing=1.41, atlas_timestamp='2025-11-17T23:00:03.773', atlas_cloud=2, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:56:00')
2025-11-18T01:00:46.441 [DEBUG] [Thread-64416] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:00:46.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:00:46.539 [DEBUG] [Thread-64419] [transport.py] [_log()] starting thread (client mode): 0xd3152350
2025-11-18T01:00:46.539 [DEBUG] [Thread-64419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:00:46.554 [DEBUG] [Thread-64419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:00:46.555 [INFO] [Thread-64419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] client lang: <none>
2025-11-18T01:00:46.562 [DEBUG] [Thread-64419] [transport.py] [_log()] server lang: <none>
2025-11-18T01:00:46.563 [DEBUG] [Thread-64419] [transport.py] [_log()] kex follows: False
2025-11-18T01:00:46.563 [DEBUG] [Thread-64419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:00:46.563 [DEBUG] [Thread-64419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:00:46.563 [DEBUG] [Thread-64419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:00:46.563 [DEBUG] [Thread-64419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:00:46.563 [DEBUG] [Thread-64419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:00:46.563 [DEBUG] [Thread-64419] [transport.py] [_log()] Compression: none
2025-11-18T01:00:46.563 [DEBUG] [Thread-64419] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:00:46.623 [DEBUG] [Thread-64419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:00:46.623 [DEBUG] [Thread-64419] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:00:46.624 [DEBUG] [Thread-64419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:00:46.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:00:46.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:00:46.678 [DEBUG] [Thread-64419] [transport.py] [_log()] userauth is OK
2025-11-18T01:00:46.679 [DEBUG] [Thread-64419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:00:46.679 [DEBUG] [Thread-64419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:00:46.679 [DEBUG] [Thread-64419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:00:46.679 [DEBUG] [Thread-64419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:00:46.700 [INFO] [Thread-64419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:00:46.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:00:46.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:00:47.524 [DEBUG] [Thread-64419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:00:47.524 [DEBUG] [Thread-64419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:00:47.571 [DEBUG] [Thread-64419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:00:47.571 [DEBUG] [Thread-64419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:00:47.580 [DEBUG] [Thread-64419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:00:47.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:00:47.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:00:47.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:00:47.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:00:47.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:00:47.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:00:47.615 [DEBUG] [Thread-64419] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:00:52.779 [DEBUG] [Thread-64421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:00:56.756 [DEBUG] [Thread-64422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:01:07.819 [DEBUG] [Thread-64423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:01:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:01:17.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:01:17.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:01:18.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 1, 6), 8.89, 59.98, 0.0, 21.72, 8.6, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:01:18.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:01:06
2025-11-18T01:01:18.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:01:18.567 [DEBUG] [Thread-64424] [transport.py] [_log()] starting thread (client mode): 0xd31613c0
2025-11-18T01:01:18.567 [DEBUG] [Thread-64424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:01:18.586 [DEBUG] [Thread-64424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:01:18.587 [INFO] [Thread-64424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] client lang: <none>
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] server lang: <none>
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] kex follows: False
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] Compression: none
2025-11-18T01:01:18.590 [DEBUG] [Thread-64424] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:01:18.607 [DEBUG] [Thread-64424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:01:18.608 [DEBUG] [Thread-64424] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:01:18.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:01:18.609 [DEBUG] [Thread-64424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:01:18.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:01:18.611 [DEBUG] [Thread-64424] [transport.py] [_log()] userauth is OK
2025-11-18T01:01:18.611 [DEBUG] [Thread-64424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:01:18.611 [DEBUG] [Thread-64424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:01:18.612 [DEBUG] [Thread-64424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:01:18.612 [DEBUG] [Thread-64424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:01:18.629 [INFO] [Thread-64424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:01:18.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:01:19.243 [DEBUG] [Thread-64424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:01:19.243 [DEBUG] [Thread-64424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:01:19.244 [DEBUG] [Thread-64424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:01:19.284 [DEBUG] [Thread-64424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:01:19.285 [DEBUG] [Thread-64424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:01:19.287 [DEBUG] [Thread-64424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:01:19.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:01:19.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:01:19.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:01:19.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:01:19.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:01:19.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:01:19.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:01:19.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:01:19.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:01:19.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.959072 -999.00  +13.00  17.97     46   +1.70 1 2 1 1 1     0    0 12.40 48.39 ZNEsW 17.9 18.0 163.8 21.7 13.6 -22.8 13.4 -21.3 13.2 -20.8 13.5 -22.2
2025-11-18T01:01:19.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:01:19.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:01:19.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.959072
2025-11-18T01:01:19.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:01:19.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:01:19.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:01:19.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:01:19.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:01:19.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:01:06', tmtdew=8.89, humidity=59.98, cloud=0.0, wind=21.72, temperature=8.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:01:06', seeing=1.41, atlas_timestamp='2025-11-17T23:01:03.821', atlas_cloud=2, atlas_rain=1, zp_data=[0.05075000000000074, 0.15474999999999994, 0.10025000000000084, 0.09249999999999936, 0.13599999999999923, 0.18374999999999986, -0.0065000000000008384, 0.03775000000000084, 0.11350000000000016, 0.20500000000000007, 0.13424999999999976, 0.09999999999999964, 0.20350000000000001, 0.10975000000000001, 0.022999999999999687, -0.013999999999999346, 0.10125000000000028, 0.36299999999999955, 0.2729999999999997, 0.1947499999999991, 0.17449999999999832, 0.11874999999999858, 0.012250000000001648, 0.017250000000000654, 0.11099999999999888, 0.6575000000000015, 0.6507500000000004, 0.7060000000000004, 0.35800000000000054, 0.1570000000000018, 0.10800000000000054, 0.023500000000002075, 0.08874999999999922], zp_timestamp='2025-11-17T22:56:00')
2025-11-18T01:01:19.312 [DEBUG] [Thread-64424] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:01:19.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:01:19.410 [DEBUG] [Thread-64427] [transport.py] [_log()] starting thread (client mode): 0xd3161b70
2025-11-18T01:01:19.411 [DEBUG] [Thread-64427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:01:19.425 [DEBUG] [Thread-64427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:01:19.426 [INFO] [Thread-64427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:01:19.433 [DEBUG] [Thread-64427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:01:19.433 [DEBUG] [Thread-64427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:01:19.433 [DEBUG] [Thread-64427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] client lang: <none>
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] server lang: <none>
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] kex follows: False
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] Compression: none
2025-11-18T01:01:19.434 [DEBUG] [Thread-64427] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:01:19.491 [DEBUG] [Thread-64427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:01:19.491 [DEBUG] [Thread-64427] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:01:19.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:01:19.492 [DEBUG] [Thread-64427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:01:19.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:01:19.547 [DEBUG] [Thread-64427] [transport.py] [_log()] userauth is OK
2025-11-18T01:01:19.547 [DEBUG] [Thread-64427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:01:19.547 [DEBUG] [Thread-64427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:01:19.548 [DEBUG] [Thread-64427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:01:19.548 [DEBUG] [Thread-64427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:01:19.566 [INFO] [Thread-64427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:01:19.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:01:19.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:01:20.399 [DEBUG] [Thread-64427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:01:20.399 [DEBUG] [Thread-64427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:01:20.447 [DEBUG] [Thread-64427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:01:20.447 [DEBUG] [Thread-64427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:01:20.455 [DEBUG] [Thread-64427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:01:20.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:01:20.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:01:20.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:01:20.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:01:20.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:01:20.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:01:20.489 [DEBUG] [Thread-64427] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:01:22.846 [DEBUG] [Thread-64429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:01:33.471 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:01:33.473 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:01:37.884 [DEBUG] [Thread-64430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:01:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:01:50.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:01:50.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:01:51.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 1, 38), 8.95, 59.59, 0.0, 22.87, 8.6, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:01:51.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:01:38
2025-11-18T01:01:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:01:51.456 [DEBUG] [Thread-64431] [transport.py] [_log()] starting thread (client mode): 0xd0757b20
2025-11-18T01:01:51.456 [DEBUG] [Thread-64431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:01:51.468 [DEBUG] [Thread-64431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:01:51.468 [INFO] [Thread-64431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] client lang: <none>
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] server lang: <none>
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] kex follows: False
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:01:51.471 [DEBUG] [Thread-64431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:01:51.472 [DEBUG] [Thread-64431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:01:51.472 [DEBUG] [Thread-64431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:01:51.472 [DEBUG] [Thread-64431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:01:51.472 [DEBUG] [Thread-64431] [transport.py] [_log()] Compression: none
2025-11-18T01:01:51.472 [DEBUG] [Thread-64431] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:01:51.488 [DEBUG] [Thread-64431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:01:51.489 [DEBUG] [Thread-64431] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:01:51.489 [DEBUG] [Thread-64431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:01:51.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:01:51.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:01:51.491 [DEBUG] [Thread-64431] [transport.py] [_log()] userauth is OK
2025-11-18T01:01:51.491 [DEBUG] [Thread-64431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:01:51.491 [DEBUG] [Thread-64431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:01:51.491 [DEBUG] [Thread-64431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:01:51.491 [DEBUG] [Thread-64431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:01:51.509 [INFO] [Thread-64431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:01:51.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:01:52.148 [DEBUG] [Thread-64431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:01:52.148 [DEBUG] [Thread-64431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:01:52.149 [DEBUG] [Thread-64431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:01:52.189 [DEBUG] [Thread-64431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:01:52.190 [DEBUG] [Thread-64431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:01:52.193 [DEBUG] [Thread-64431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:01:52.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:01:52.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:01:52.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:01:52.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:01:52.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:01:52.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:01:52.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:01:52.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:01:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:01:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.959419 -999.00  +13.10  12.90     46   +1.70 1 2 1 1 1     0    0 12.20 49.11 ZNEsW 13.0 12.9 149.0 20.6 13.6 -22.7 13.4 -21.1 13.2 -20.8 13.5 -22.1
2025-11-18T01:01:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:01:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:01:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.959419
2025-11-18T01:01:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:01:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:01:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:01:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:01:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:01:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:01:38', tmtdew=8.95, humidity=59.59, cloud=0.0, wind=22.87, temperature=8.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:01:38', seeing=1.41, atlas_timestamp='2025-11-17T23:01:33.802', atlas_cloud=2, atlas_rain=1, zp_data=[0.08874999999999922, 0.06825000000000081, 0.1827500000000004, 0.14449999999999896, 0.14250000000000007, 0.21274999999999977, 0.04399999999999871, 0.01624999999999943, 0.058999999999999275, 0.14199999999999946, 0.2522500000000001, 0.26099999999999923, 0.18649999999999878, 0.19824999999999982, 0.04899999999999949, 0.033500000000000085, 0.1332500000000003, 0.18050000000000033, 0.4419999999999984, 0.6632499999999997, 0.3829999999999991, 0.08074999999999832, 0.015750000000000597, 0.01774999999999949, 0.09799999999999898, 0.2104999999999997, 0.5587499999999999, 0.9104999999999999, 0.9390000000000001, 0.136000000000001, 0.08800000000000097, -0.01699999999999946, 0.02474999999999916], zp_timestamp='2025-11-17T23:01:00')
2025-11-18T01:01:52.220 [DEBUG] [Thread-64431] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:01:52.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:01:52.917 [DEBUG] [Thread-64434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:01:56.821 [DEBUG] [Thread-64435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:02:07.950 [DEBUG] [Thread-64436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:02:22.975 [DEBUG] [Thread-64437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:02:33.676 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:02:33.677 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:02:38.006 [DEBUG] [Thread-64438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:02:53.037 [DEBUG] [Thread-64439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:02:56.872 [DEBUG] [Thread-64440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:03:08.071 [DEBUG] [Thread-64441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:03:23.104 [DEBUG] [Thread-64442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:03:33.879 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:03:33.881 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:03:38.136 [DEBUG] [Thread-64443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:03:53.165 [DEBUG] [Thread-64444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:03:56.931 [DEBUG] [Thread-64445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:04.027 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-18T01:04:08.200 [DEBUG] [Thread-64446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:16.910 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:23.226 [DEBUG] [Thread-64447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:24.784 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:28.870 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:04:34.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:04:34.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:04:34.085 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:34.086 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:34.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 4, 18), 8.91, 59.78, 0.0, 20.26, 8.61, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:04:34.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:04:18
2025-11-18T01:04:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:04:35.000 [DEBUG] [Thread-64448] [transport.py] [_log()] starting thread (client mode): 0xd07a3d90
2025-11-18T01:04:35.000 [DEBUG] [Thread-64448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:04:35.020 [DEBUG] [Thread-64448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:04:35.021 [INFO] [Thread-64448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:04:35.023 [DEBUG] [Thread-64448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:04:35.023 [DEBUG] [Thread-64448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:04:35.023 [DEBUG] [Thread-64448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:04:35.023 [DEBUG] [Thread-64448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:04:35.023 [DEBUG] [Thread-64448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] client lang: <none>
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] server lang: <none>
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] kex follows: False
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] Compression: none
2025-11-18T01:04:35.024 [DEBUG] [Thread-64448] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:04:35.043 [DEBUG] [Thread-64448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:04:35.043 [DEBUG] [Thread-64448] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:04:35.044 [DEBUG] [Thread-64448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:04:35.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:04:35.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:04:35.046 [DEBUG] [Thread-64448] [transport.py] [_log()] userauth is OK
2025-11-18T01:04:35.046 [DEBUG] [Thread-64448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:04:35.046 [DEBUG] [Thread-64448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:04:35.046 [DEBUG] [Thread-64448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:04:35.046 [DEBUG] [Thread-64448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:04:35.070 [INFO] [Thread-64448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:04:35.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:04:35.717 [DEBUG] [Thread-64448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:04:35.717 [DEBUG] [Thread-64448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:04:35.717 [DEBUG] [Thread-64448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:04:35.758 [DEBUG] [Thread-64448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:04:35.758 [DEBUG] [Thread-64448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:04:35.761 [DEBUG] [Thread-64448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:04:35.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:04:35.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:04:35.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:04:35.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:04:35.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:04:35.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:04:35.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:04:35.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.960808 -999.00  +13.00  13.23     45   +1.50 1 2 1 1 1     0    0 12.52 49.42 ZNE.w 18.4 13.2 164.7 19.1 13.6 -22.0 13.4 -20.7 13.2 -20.0 13.5 -21.5
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.960808
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:04:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:04:18', tmtdew=8.91, humidity=59.78, cloud=0.0, wind=20.26, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:04:18', seeing=1.46, atlas_timestamp='2025-11-17T23:03:33.811', atlas_cloud=2, atlas_rain=1, zp_data=[0.08874999999999922, 0.06825000000000081, 0.1827500000000004, 0.14449999999999896, 0.14250000000000007, 0.21274999999999977, 0.04399999999999871, 0.01624999999999943, 0.058999999999999275, 0.14199999999999946, 0.2522500000000001, 0.26099999999999923, 0.18649999999999878, 0.19824999999999982, 0.04899999999999949, 0.033500000000000085, 0.1332500000000003, 0.18050000000000033, 0.4419999999999984, 0.6632499999999997, 0.3829999999999991, 0.08074999999999832, 0.015750000000000597, 0.01774999999999949, 0.09799999999999898, 0.2104999999999997, 0.5587499999999999, 0.9104999999999999, 0.9390000000000001, 0.136000000000001, 0.08800000000000097, -0.01699999999999946, 0.02474999999999916], zp_timestamp='2025-11-17T23:01:00')
2025-11-18T01:04:35.782 [DEBUG] [Thread-64448] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:04:35.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:04:35.867 [DEBUG] [Thread-64451] [transport.py] [_log()] starting thread (client mode): 0xd0756f80
2025-11-18T01:04:35.867 [DEBUG] [Thread-64451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:04:35.884 [DEBUG] [Thread-64451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:04:35.884 [INFO] [Thread-64451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:04:35.893 [DEBUG] [Thread-64451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:04:35.893 [DEBUG] [Thread-64451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:04:35.893 [DEBUG] [Thread-64451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] client lang: <none>
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] server lang: <none>
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] kex follows: False
2025-11-18T01:04:35.894 [DEBUG] [Thread-64451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:04:35.895 [DEBUG] [Thread-64451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:04:35.895 [DEBUG] [Thread-64451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:04:35.895 [DEBUG] [Thread-64451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:04:35.895 [DEBUG] [Thread-64451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:04:35.895 [DEBUG] [Thread-64451] [transport.py] [_log()] Compression: none
2025-11-18T01:04:35.895 [DEBUG] [Thread-64451] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:04:35.955 [DEBUG] [Thread-64451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:04:35.956 [DEBUG] [Thread-64451] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:04:35.956 [DEBUG] [Thread-64451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:04:35.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:04:35.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:04:36.011 [DEBUG] [Thread-64451] [transport.py] [_log()] userauth is OK
2025-11-18T01:04:36.011 [DEBUG] [Thread-64451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:04:36.011 [DEBUG] [Thread-64451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:04:36.011 [DEBUG] [Thread-64451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:04:36.011 [DEBUG] [Thread-64451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:04:36.030 [INFO] [Thread-64451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:04:36.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:04:36.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:04:36.926 [DEBUG] [Thread-64451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:04:36.926 [DEBUG] [Thread-64451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:04:36.974 [DEBUG] [Thread-64451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:04:36.974 [DEBUG] [Thread-64451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:04:36.983 [DEBUG] [Thread-64451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:04:36.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:04:36.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:04:37.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:04:37.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:04:37.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:04:37.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:04:37.019 [DEBUG] [Thread-64451] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:04:38.259 [DEBUG] [Thread-64453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:53.306 [DEBUG] [Thread-64454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:04:57.007 [DEBUG] [Thread-64455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:05:07.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:05:07.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:05:07.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:05:07.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 4, 50), 8.9, 59.81, 0.0, 19.43, 8.59, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:05:07.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:04:50
2025-11-18T01:05:07.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:05:07.971 [DEBUG] [Thread-64456] [transport.py] [_log()] starting thread (client mode): 0xd0701150
2025-11-18T01:05:07.971 [DEBUG] [Thread-64456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:05:07.992 [DEBUG] [Thread-64456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:05:07.992 [INFO] [Thread-64456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:05:07.995 [DEBUG] [Thread-64456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:05:07.995 [DEBUG] [Thread-64456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:05:07.995 [DEBUG] [Thread-64456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:05:07.995 [DEBUG] [Thread-64456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:05:07.995 [DEBUG] [Thread-64456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:05:07.995 [DEBUG] [Thread-64456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:05:07.995 [DEBUG] [Thread-64456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] client lang: <none>
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] server lang: <none>
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] kex follows: False
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] Compression: none
2025-11-18T01:05:07.996 [DEBUG] [Thread-64456] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:05:08.013 [DEBUG] [Thread-64456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:05:08.013 [DEBUG] [Thread-64456] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:05:08.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:05:08.014 [DEBUG] [Thread-64456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:05:08.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:05:08.057 [DEBUG] [Thread-64456] [transport.py] [_log()] userauth is OK
2025-11-18T01:05:08.057 [DEBUG] [Thread-64456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:05:08.057 [DEBUG] [Thread-64456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:05:08.057 [DEBUG] [Thread-64456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:05:08.057 [DEBUG] [Thread-64456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:05:08.077 [INFO] [Thread-64456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:05:08.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:05:08.332 [DEBUG] [Thread-64458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:05:09.564 [DEBUG] [Thread-64456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:05:09.564 [DEBUG] [Thread-64456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:05:09.564 [DEBUG] [Thread-64456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:05:09.604 [DEBUG] [Thread-64456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:05:09.605 [DEBUG] [Thread-64456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:05:09.607 [DEBUG] [Thread-64456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:05:09.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:05:09.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:05:09.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:05:09.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:05:09.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:05:09.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:05:09.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:05:09.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:05:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:05:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.961502 -999.00  +13.10  16.11     45   +1.50 1 2 1 1 1     0    0 12.61 57.47 ZNEsw 14.4 16.1 155.8 22.2 13.6 -21.8 13.4 -20.4 13.2 -20.0 13.5 -21.2
2025-11-18T01:05:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:05:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:05:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.961502
2025-11-18T01:05:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:05:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:05:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:05:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:05:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:05:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:04:50', tmtdew=8.9, humidity=59.81, cloud=0.0, wind=19.43, temperature=8.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:04:50', seeing=1.46, atlas_timestamp='2025-11-17T23:04:33.773', atlas_cloud=2, atlas_rain=1, zp_data=[0.08874999999999922, 0.06825000000000081, 0.1827500000000004, 0.14449999999999896, 0.14250000000000007, 0.21274999999999977, 0.04399999999999871, 0.01624999999999943, 0.058999999999999275, 0.14199999999999946, 0.2522500000000001, 0.26099999999999923, 0.18649999999999878, 0.19824999999999982, 0.04899999999999949, 0.033500000000000085, 0.1332500000000003, 0.18050000000000033, 0.4419999999999984, 0.6632499999999997, 0.3829999999999991, 0.08074999999999832, 0.015750000000000597, 0.01774999999999949, 0.09799999999999898, 0.2104999999999997, 0.5587499999999999, 0.9104999999999999, 0.9390000000000001, 0.136000000000001, 0.08800000000000097, -0.01699999999999946, 0.02474999999999916], zp_timestamp='2025-11-17T23:03:00')
2025-11-18T01:05:09.647 [DEBUG] [Thread-64456] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:05:09.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:05:09.746 [DEBUG] [Thread-64460] [transport.py] [_log()] starting thread (client mode): 0xd3153430
2025-11-18T01:05:09.746 [DEBUG] [Thread-64460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:05:09.761 [DEBUG] [Thread-64460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:05:09.761 [INFO] [Thread-64460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:05:09.769 [DEBUG] [Thread-64460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] client lang: <none>
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] server lang: <none>
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] kex follows: False
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] Compression: none
2025-11-18T01:05:09.770 [DEBUG] [Thread-64460] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:05:09.826 [DEBUG] [Thread-64460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:05:09.826 [DEBUG] [Thread-64460] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:05:09.827 [DEBUG] [Thread-64460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:05:09.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:05:09.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:05:09.883 [DEBUG] [Thread-64460] [transport.py] [_log()] userauth is OK
2025-11-18T01:05:09.883 [DEBUG] [Thread-64460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:05:09.883 [DEBUG] [Thread-64460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:05:09.883 [DEBUG] [Thread-64460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:05:09.883 [DEBUG] [Thread-64460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:05:09.902 [INFO] [Thread-64460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:05:09.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:05:09.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:05:10.741 [DEBUG] [Thread-64460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:05:10.742 [DEBUG] [Thread-64460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:05:10.789 [DEBUG] [Thread-64460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:05:10.789 [DEBUG] [Thread-64460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:05:10.798 [DEBUG] [Thread-64460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:05:10.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:05: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')
2025-11-18T01:05:10.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:05:10.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:05:10.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:05:10.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:05:10.833 [DEBUG] [Thread-64460] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:05:23.361 [DEBUG] [Thread-64462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:05:34.288 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:05:34.289 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:05:38.392 [DEBUG] [Thread-64463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:05:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:05:40.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:05:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:05:41.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 5, 22), 8.9, 59.82, 0.0, 17.84, 8.59, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:05:41.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:05:22
2025-11-18T01:05:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:05:41.791 [DEBUG] [Thread-64464] [transport.py] [_log()] starting thread (client mode): 0xd31512a0
2025-11-18T01:05:41.792 [DEBUG] [Thread-64464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:05:41.812 [DEBUG] [Thread-64464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:05:41.812 [INFO] [Thread-64464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:05:41.815 [DEBUG] [Thread-64464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:05:41.815 [DEBUG] [Thread-64464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] client lang: <none>
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] server lang: <none>
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] kex follows: False
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:05:41.816 [DEBUG] [Thread-64464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:05:41.817 [DEBUG] [Thread-64464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:05:41.817 [DEBUG] [Thread-64464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:05:41.817 [DEBUG] [Thread-64464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:05:41.817 [DEBUG] [Thread-64464] [transport.py] [_log()] Compression: none
2025-11-18T01:05:41.817 [DEBUG] [Thread-64464] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:05:41.839 [DEBUG] [Thread-64464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:05:41.840 [DEBUG] [Thread-64464] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:05:41.841 [DEBUG] [Thread-64464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:05:41.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:05:41.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:05:41.843 [DEBUG] [Thread-64464] [transport.py] [_log()] userauth is OK
2025-11-18T01:05:41.844 [DEBUG] [Thread-64464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:05:41.844 [DEBUG] [Thread-64464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:05:41.844 [DEBUG] [Thread-64464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:05:41.844 [DEBUG] [Thread-64464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:05:41.882 [INFO] [Thread-64464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:05:41.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:05:42.533 [DEBUG] [Thread-64464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:05:42.533 [DEBUG] [Thread-64464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:05:42.534 [DEBUG] [Thread-64464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:05:42.574 [DEBUG] [Thread-64464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:05:42.574 [DEBUG] [Thread-64464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:05:42.577 [DEBUG] [Thread-64464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:05:42.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:05:42.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:05:42.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:05:42.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:05:42.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:05:42.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:05:42.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:05:42.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:05:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:05:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.961849 -999.00  +13.10  18.94     45   +1.50 1 2 1 1 1     0    0 12.54 55.95 ZNEsw 14.1 18.9 152.8 23.6 13.6 -21.6 13.4 -20.2 13.2 -20.0 13.5 -20.9
2025-11-18T01:05:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:05:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:05:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.961849
2025-11-18T01:05:42.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:05:42.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:05:42.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:05:42.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:05:42.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:05:42.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:05:22', tmtdew=8.9, humidity=59.82, cloud=0.0, wind=17.84, temperature=8.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:05:22', seeing=1.46, atlas_timestamp='2025-11-17T23:05:03.754', atlas_cloud=2, atlas_rain=1, zp_data=[0.08874999999999922, 0.06825000000000081, 0.1827500000000004, 0.14449999999999896, 0.14250000000000007, 0.21274999999999977, 0.04399999999999871, 0.01624999999999943, 0.058999999999999275, 0.14199999999999946, 0.2522500000000001, 0.26099999999999923, 0.18649999999999878, 0.19824999999999982, 0.04899999999999949, 0.033500000000000085, 0.1332500000000003, 0.18050000000000033, 0.4419999999999984, 0.6632499999999997, 0.3829999999999991, 0.08074999999999832, 0.015750000000000597, 0.01774999999999949, 0.09799999999999898, 0.2104999999999997, 0.5587499999999999, 0.9104999999999999, 0.9390000000000001, 0.136000000000001, 0.08800000000000097, -0.01699999999999946, 0.02474999999999916], zp_timestamp='2025-11-17T23:03:00')
2025-11-18T01:05:42.602 [DEBUG] [Thread-64464] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:05:42.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:05:42.698 [DEBUG] [Thread-64467] [transport.py] [_log()] starting thread (client mode): 0xd3163ee0
2025-11-18T01:05:42.698 [DEBUG] [Thread-64467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:05:42.712 [DEBUG] [Thread-64467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:05:42.713 [INFO] [Thread-64467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:05:42.720 [DEBUG] [Thread-64467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:05:42.720 [DEBUG] [Thread-64467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:05:42.720 [DEBUG] [Thread-64467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] client lang: <none>
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] server lang: <none>
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] kex follows: False
2025-11-18T01:05:42.721 [DEBUG] [Thread-64467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:05:42.722 [DEBUG] [Thread-64467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:05:42.722 [DEBUG] [Thread-64467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:05:42.722 [DEBUG] [Thread-64467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:05:42.722 [DEBUG] [Thread-64467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:05:42.722 [DEBUG] [Thread-64467] [transport.py] [_log()] Compression: none
2025-11-18T01:05:42.722 [DEBUG] [Thread-64467] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:05:42.779 [DEBUG] [Thread-64467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:05:42.779 [DEBUG] [Thread-64467] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:05:42.780 [DEBUG] [Thread-64467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:05:42.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:05:42.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:05:42.840 [DEBUG] [Thread-64467] [transport.py] [_log()] userauth is OK
2025-11-18T01:05:42.841 [DEBUG] [Thread-64467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:05:42.841 [DEBUG] [Thread-64467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:05:42.841 [DEBUG] [Thread-64467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:05:42.841 [DEBUG] [Thread-64467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:05:42.862 [INFO] [Thread-64467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:05:42.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:05:42.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:05:43.691 [DEBUG] [Thread-64467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:05:43.691 [DEBUG] [Thread-64467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:05:43.739 [DEBUG] [Thread-64467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:05:43.739 [DEBUG] [Thread-64467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:05:43.748 [DEBUG] [Thread-64467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:05:43.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:05:43.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:05:43.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:05:43.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:05:43.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:05:43.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:05:43.783 [DEBUG] [Thread-64467] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:05:53.424 [DEBUG] [Thread-64469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:05:57.082 [DEBUG] [Thread-64470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:06:08.474 [DEBUG] [Thread-64471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:06:13.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:06:13.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:06:13.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:06:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 5, 54), 8.8, 60.24, 0.0, 21.67, 8.5, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:06:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:05:54
2025-11-18T01:06:14.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:06:14.782 [DEBUG] [Thread-64472] [transport.py] [_log()] starting thread (client mode): 0xd3152b30
2025-11-18T01:06:14.782 [DEBUG] [Thread-64472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:06:14.802 [DEBUG] [Thread-64472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:06:14.802 [INFO] [Thread-64472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] client lang: <none>
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] server lang: <none>
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] kex follows: False
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:06:14.805 [DEBUG] [Thread-64472] [transport.py] [_log()] Compression: none
2025-11-18T01:06:14.806 [DEBUG] [Thread-64472] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:06:14.822 [DEBUG] [Thread-64472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:06:14.822 [DEBUG] [Thread-64472] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:06:14.823 [DEBUG] [Thread-64472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:06:14.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:06:14.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:06:14.823 [DEBUG] [Thread-64472] [transport.py] [_log()] userauth is OK
2025-11-18T01:06:14.823 [DEBUG] [Thread-64472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:06:14.823 [DEBUG] [Thread-64472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:06:14.824 [DEBUG] [Thread-64472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:06:14.824 [DEBUG] [Thread-64472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:06:14.834 [INFO] [Thread-64472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:06:14.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:06:15.571 [DEBUG] [Thread-64472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:06:15.571 [DEBUG] [Thread-64472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:06:15.572 [DEBUG] [Thread-64472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:06:15.612 [DEBUG] [Thread-64472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:06:15.612 [DEBUG] [Thread-64472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:06:15.615 [DEBUG] [Thread-64472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:06:15.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:06:15.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:06:15.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:06:15.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:06:15.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:06:15.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:06:15.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:06:15.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:06:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:06:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.962196 -999.00  +13.10  14.88     45   +1.50 1 2 1 1 1     0    0 12.62 56.04 ZNEsw 17.8 14.9 145.0 25.0 13.6 -21.3 13.4 -20.2 13.2 -19.8 13.5 -20.9
2025-11-18T01:06:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:06:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:06:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.962196
2025-11-18T01:06:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:06:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:06:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:06:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:06:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:06:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:05:54', tmtdew=8.8, humidity=60.24, cloud=0.0, wind=21.67, temperature=8.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:05:54', seeing=1.46, atlas_timestamp='2025-11-17T23:05:33.734', atlas_cloud=2, atlas_rain=1, zp_data=[0.08874999999999922, 0.06825000000000081, 0.1827500000000004, 0.14449999999999896, 0.14250000000000007, 0.21274999999999977, 0.04399999999999871, 0.01624999999999943, 0.058999999999999275, 0.14199999999999946, 0.2522500000000001, 0.26099999999999923, 0.18649999999999878, 0.19824999999999982, 0.04899999999999949, 0.033500000000000085, 0.1332500000000003, 0.18050000000000033, 0.4419999999999984, 0.6632499999999997, 0.3829999999999991, 0.08074999999999832, 0.015750000000000597, 0.01774999999999949, 0.09799999999999898, 0.2104999999999997, 0.5587499999999999, 0.9104999999999999, 0.9390000000000001, 0.136000000000001, 0.08800000000000097, -0.01699999999999946, 0.02474999999999916], zp_timestamp='2025-11-17T23:03:00')
2025-11-18T01:06:15.631 [DEBUG] [Thread-64472] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:06:15.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:06:15.716 [DEBUG] [Thread-64475] [transport.py] [_log()] starting thread (client mode): 0xd0755510
2025-11-18T01:06:15.716 [DEBUG] [Thread-64475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:06:15.732 [DEBUG] [Thread-64475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:06:15.732 [INFO] [Thread-64475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] client lang: <none>
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] server lang: <none>
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] kex follows: False
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:06:15.739 [DEBUG] [Thread-64475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:06:15.740 [DEBUG] [Thread-64475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:06:15.740 [DEBUG] [Thread-64475] [transport.py] [_log()] Compression: none
2025-11-18T01:06:15.740 [DEBUG] [Thread-64475] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:06:15.799 [DEBUG] [Thread-64475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:06:15.799 [DEBUG] [Thread-64475] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:06:15.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:06:15.800 [DEBUG] [Thread-64475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:06:15.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:06:15.855 [DEBUG] [Thread-64475] [transport.py] [_log()] userauth is OK
2025-11-18T01:06:15.855 [DEBUG] [Thread-64475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:06:15.855 [DEBUG] [Thread-64475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:06:15.855 [DEBUG] [Thread-64475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:06:15.855 [DEBUG] [Thread-64475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:06:15.874 [INFO] [Thread-64475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:06:15.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:06:15.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:06:16.759 [DEBUG] [Thread-64475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:06:16.759 [DEBUG] [Thread-64475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:06:16.807 [DEBUG] [Thread-64475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:06:16.807 [DEBUG] [Thread-64475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:06:16.816 [DEBUG] [Thread-64475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:06:16.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:06:16.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:06:16.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:06:16.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:06:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:06:16.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:06:16.851 [DEBUG] [Thread-64475] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:06:23.501 [DEBUG] [Thread-64477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:06:34.493 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:06:34.494 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:06:38.550 [DEBUG] [Thread-64478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:06:46.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:06:46.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:06:46.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:06:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 6, 26), 13.2, 40.36, 0.0, 23.52, 12.98, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:06:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:06:26
2025-11-18T01:06:47.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:06:47.810 [DEBUG] [Thread-64479] [transport.py] [_log()] starting thread (client mode): 0xd07a3e20
2025-11-18T01:06:47.810 [DEBUG] [Thread-64479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:06:47.830 [DEBUG] [Thread-64479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:06:47.830 [INFO] [Thread-64479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:06:47.833 [DEBUG] [Thread-64479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:06:47.833 [DEBUG] [Thread-64479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:06:47.833 [DEBUG] [Thread-64479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:06:47.833 [DEBUG] [Thread-64479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:06:47.833 [DEBUG] [Thread-64479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:06:47.833 [DEBUG] [Thread-64479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:06:47.833 [DEBUG] [Thread-64479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] client lang: <none>
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] server lang: <none>
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] kex follows: False
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] Compression: none
2025-11-18T01:06:47.834 [DEBUG] [Thread-64479] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:06:47.853 [DEBUG] [Thread-64479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:06:47.854 [DEBUG] [Thread-64479] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:06:47.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:06:47.855 [DEBUG] [Thread-64479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:06:47.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:06:47.856 [DEBUG] [Thread-64479] [transport.py] [_log()] userauth is OK
2025-11-18T01:06:47.856 [DEBUG] [Thread-64479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:06:47.856 [DEBUG] [Thread-64479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:06:47.857 [DEBUG] [Thread-64479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:06:47.857 [DEBUG] [Thread-64479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:06:47.878 [INFO] [Thread-64479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:06:47.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:06:48.496 [DEBUG] [Thread-64479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:06:48.496 [DEBUG] [Thread-64479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:06:48.496 [DEBUG] [Thread-64479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:06:48.537 [DEBUG] [Thread-64479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:06:48.537 [DEBUG] [Thread-64479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:06:48.540 [DEBUG] [Thread-64479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:06:48.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:06:48.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:06:48.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:06:48.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:06:48.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:06:48.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:06:48.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:06:48.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:06:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:06:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.962544 -999.00  +13.10  14.28     45   +1.50 1 2 1 1 1     0    0 12.65 56.23 ZNEsw 13.4 14.3 166.6 22.9 13.6 -21.4 13.4 -20.1 13.2 -20.0 13.5 -20.8
2025-11-18T01:06:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:06:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:06:48.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.962544
2025-11-18T01:06:48.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:06:48.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:06:48.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:06:48.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:06:48.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:06:48.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:06:26', tmtdew=13.2, humidity=40.36, cloud=0.0, wind=23.52, temperature=12.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:06:26', seeing=1.46, atlas_timestamp='2025-11-17T23:06:03.802', atlas_cloud=2, atlas_rain=1, zp_data=[0.08874999999999922, 0.06825000000000081, 0.1827500000000004, 0.14449999999999896, 0.14250000000000007, 0.21274999999999977, 0.04399999999999871, 0.01624999999999943, 0.058999999999999275, 0.14199999999999946, 0.2522500000000001, 0.26099999999999923, 0.18649999999999878, 0.19824999999999982, 0.04899999999999949, 0.033500000000000085, 0.1332500000000003, 0.18050000000000033, 0.4419999999999984, 0.6632499999999997, 0.3829999999999991, 0.08074999999999832, 0.015750000000000597, 0.01774999999999949, 0.09799999999999898, 0.2104999999999997, 0.5587499999999999, 0.9104999999999999, 0.9390000000000001, 0.136000000000001, 0.08800000000000097, -0.01699999999999946, 0.02474999999999916], zp_timestamp='2025-11-17T23:03:00')
2025-11-18T01:06:48.565 [DEBUG] [Thread-64479] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:06:48.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:06:48.662 [DEBUG] [Thread-64482] [transport.py] [_log()] starting thread (client mode): 0xd07a2920
2025-11-18T01:06:48.662 [DEBUG] [Thread-64482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:06:48.678 [DEBUG] [Thread-64482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:06:48.678 [INFO] [Thread-64482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] client lang: <none>
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] server lang: <none>
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] kex follows: False
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:06:48.685 [DEBUG] [Thread-64482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:06:48.686 [DEBUG] [Thread-64482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:06:48.686 [DEBUG] [Thread-64482] [transport.py] [_log()] Compression: none
2025-11-18T01:06:48.686 [DEBUG] [Thread-64482] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:06:48.741 [DEBUG] [Thread-64482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:06:48.741 [DEBUG] [Thread-64482] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:06:48.741 [DEBUG] [Thread-64482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:06:48.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:06:48.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:06:48.798 [DEBUG] [Thread-64482] [transport.py] [_log()] userauth is OK
2025-11-18T01:06:48.798 [DEBUG] [Thread-64482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:06:48.798 [DEBUG] [Thread-64482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:06:48.798 [DEBUG] [Thread-64482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:06:48.798 [DEBUG] [Thread-64482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:06:48.812 [INFO] [Thread-64482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:06:48.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:06:48.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:06:49.674 [DEBUG] [Thread-64482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:06:49.674 [DEBUG] [Thread-64482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:06:49.722 [DEBUG] [Thread-64482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:06:49.722 [DEBUG] [Thread-64482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:06:49.730 [DEBUG] [Thread-64482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:06:49.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:06:49.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:06:49.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:06:49.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:06:49.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:06:49.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:06:49.761 [DEBUG] [Thread-64482] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:06:53.578 [DEBUG] [Thread-64484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:06:57.159 [DEBUG] [Thread-64485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:07:08.612 [DEBUG] [Thread-64486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:07:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:07:19.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:07:19.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:07:20.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 6, 58), 13.27, 39.79, 0.0, 20.31, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:07:20.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:06:58
2025-11-18T01:07:20.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:07:20.694 [DEBUG] [Thread-64487] [transport.py] [_log()] starting thread (client mode): 0xd317dff0
2025-11-18T01:07:20.694 [DEBUG] [Thread-64487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:07:20.714 [DEBUG] [Thread-64487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:07:20.714 [INFO] [Thread-64487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:07:20.717 [DEBUG] [Thread-64487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] client lang: <none>
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] server lang: <none>
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] kex follows: False
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] Compression: none
2025-11-18T01:07:20.718 [DEBUG] [Thread-64487] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:07:20.735 [DEBUG] [Thread-64487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:07:20.735 [DEBUG] [Thread-64487] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:07:20.736 [DEBUG] [Thread-64487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:07:20.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:07:20.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:07:20.738 [DEBUG] [Thread-64487] [transport.py] [_log()] userauth is OK
2025-11-18T01:07:20.738 [DEBUG] [Thread-64487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:07:20.738 [DEBUG] [Thread-64487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:07:20.738 [DEBUG] [Thread-64487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:07:20.738 [DEBUG] [Thread-64487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:07:20.753 [INFO] [Thread-64487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:07:20.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:07:21.459 [DEBUG] [Thread-64487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:07:21.460 [DEBUG] [Thread-64487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:07:21.460 [DEBUG] [Thread-64487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:07:21.500 [DEBUG] [Thread-64487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:07:21.501 [DEBUG] [Thread-64487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:07:21.503 [DEBUG] [Thread-64487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:07:21.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:07:21.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:07:21.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:07:21.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:07:21.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:07:21.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:07:21.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:07:21.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:07:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:07:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.962891 -999.00  +13.10  14.77     45   +1.50 1 1 1 1 1     0    0 12.91 57.00 ZNESW 11.3 14.8 159.0 19.5 13.5 -21.2 -999.0 -999.0 13.2 -20.0 13.5 -20.8
2025-11-18T01:07:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:07:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:07:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.962891
2025-11-18T01:07:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:07:21.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:07:21.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:07:21.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:07:21.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:07:21.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:06:58', tmtdew=13.27, humidity=39.79, cloud=0.0, wind=20.31, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:06:58', seeing=1.46, atlas_timestamp='2025-11-17T23:06:33.782', atlas_cloud=1, atlas_rain=1, zp_data=[0.08874999999999922, 0.06825000000000081, 0.1827500000000004, 0.14449999999999896, 0.14250000000000007, 0.21274999999999977, 0.04399999999999871, 0.01624999999999943, 0.058999999999999275, 0.14199999999999946, 0.2522500000000001, 0.26099999999999923, 0.18649999999999878, 0.19824999999999982, 0.04899999999999949, 0.033500000000000085, 0.1332500000000003, 0.18050000000000033, 0.4419999999999984, 0.6632499999999997, 0.3829999999999991, 0.08074999999999832, 0.015750000000000597, 0.01774999999999949, 0.09799999999999898, 0.2104999999999997, 0.5587499999999999, 0.9104999999999999, 0.9390000000000001, 0.136000000000001, 0.08800000000000097, -0.01699999999999946, 0.02474999999999916], zp_timestamp='2025-11-17T23:03:00')
2025-11-18T01:07:21.526 [DEBUG] [Thread-64487] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:07:21.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:07:21.624 [DEBUG] [Thread-64490] [transport.py] [_log()] starting thread (client mode): 0xd3151600
2025-11-18T01:07:21.625 [DEBUG] [Thread-64490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:07:21.644 [DEBUG] [Thread-64490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:07:21.644 [INFO] [Thread-64490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:07:21.652 [DEBUG] [Thread-64490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] client lang: <none>
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] server lang: <none>
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] kex follows: False
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:07:21.653 [DEBUG] [Thread-64490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:07:21.654 [DEBUG] [Thread-64490] [transport.py] [_log()] Compression: none
2025-11-18T01:07:21.654 [DEBUG] [Thread-64490] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:07:21.710 [DEBUG] [Thread-64490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:07:21.710 [DEBUG] [Thread-64490] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:07:21.711 [DEBUG] [Thread-64490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:07:21.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:07:21.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:07:21.767 [DEBUG] [Thread-64490] [transport.py] [_log()] userauth is OK
2025-11-18T01:07:21.767 [DEBUG] [Thread-64490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:07:21.767 [DEBUG] [Thread-64490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:07:21.767 [DEBUG] [Thread-64490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:07:21.767 [DEBUG] [Thread-64490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:07:21.787 [INFO] [Thread-64490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:07:21.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:07:21.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:07:22.613 [DEBUG] [Thread-64490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:07:22.614 [DEBUG] [Thread-64490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:07:22.662 [DEBUG] [Thread-64490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:07:22.662 [DEBUG] [Thread-64490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:07:22.671 [DEBUG] [Thread-64490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:07:22.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:07: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')
2025-11-18T01:07: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
2025-11-18T01:07:22.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:07:22.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:07:22.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:07:22.704 [DEBUG] [Thread-64490] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:07:23.643 [DEBUG] [Thread-64492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:07:34.696 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:07:34.697 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:07:38.682 [DEBUG] [Thread-64493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:07:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:07:52.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:07:52.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
2025-11-18T01:07:53.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 7, 30), 13.28, 39.78, 0.0, 20.08, 13.05, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:07:53.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:07:30
2025-11-18T01:07:53.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:07:53.641 [DEBUG] [Thread-64494] [transport.py] [_log()] starting thread (client mode): 0xd07a3b50
2025-11-18T01:07:53.641 [DEBUG] [Thread-64494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:07:53.661 [DEBUG] [Thread-64494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:07:53.661 [INFO] [Thread-64494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:07:53.664 [DEBUG] [Thread-64494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:07:53.664 [DEBUG] [Thread-64494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:07:53.664 [DEBUG] [Thread-64494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:07:53.664 [DEBUG] [Thread-64494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:07:53.664 [DEBUG] [Thread-64494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] client lang: <none>
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] server lang: <none>
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] kex follows: False
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] Compression: none
2025-11-18T01:07:53.665 [DEBUG] [Thread-64494] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:07:53.682 [DEBUG] [Thread-64494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:07:53.682 [DEBUG] [Thread-64494] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:07:53.683 [DEBUG] [Thread-64494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:07:53.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:07:53.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:07:53.685 [DEBUG] [Thread-64494] [transport.py] [_log()] userauth is OK
2025-11-18T01:07:53.685 [DEBUG] [Thread-64494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:07:53.685 [DEBUG] [Thread-64494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:07:53.685 [DEBUG] [Thread-64494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:07:53.685 [DEBUG] [Thread-64494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:07:53.708 [INFO] [Thread-64494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:07:53.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:07:53.711 [DEBUG] [Thread-64496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:07:54.361 [DEBUG] [Thread-64494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:07:54.361 [DEBUG] [Thread-64494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:07:54.362 [DEBUG] [Thread-64494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:07:54.402 [DEBUG] [Thread-64494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:07:54.403 [DEBUG] [Thread-64494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:07:54.405 [DEBUG] [Thread-64494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:07:54.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:07:54.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:07:54.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:07:54.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:07:54.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:07:54.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:07:54.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:07:54.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:07:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:07:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.963238 -999.00  +13.10  17.13     45   +1.50 1 1 1 1 1     0    0 12.59 58.55 ZNESW 15.6 17.1 159.6 22.5 13.6 -21.1 13.4 -20.0 13.2 -20.0 13.6 -20.9
2025-11-18T01:07:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:07:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:07:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.963238
2025-11-18T01:07:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:07:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:07:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:07:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:07:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:07:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:07:30', tmtdew=13.28, humidity=39.78, cloud=0.0, wind=20.08, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:06:58', seeing=1.46, atlas_timestamp='2025-11-17T23:07:03.763', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.12025000000000041, 0.44925000000000104, 0.40449999999999875, 0.35050000000000026, 0.36325000000000074, 0.0009999999999994458, -0.003750000000000142, 0.03200000000000003, 0.20050000000000168, 0.7172499999999999, 0.48300000000000054, 0.5039999999999996, 0.3172499999999996, 0.02149999999999963, -0.0365000000000002, 0.12025000000000041, 0.2735000000000003, 0.7135000000000007, 0.552249999999999, 0.4939999999999989, 0.21974999999999945, -0.0012499999999988631, 0.014749999999999375, 0.09849999999999959, 0.41849999999999987, 0.5137499999999999, 0.5675000000000008, 0.45199999999999996, 0.2730000000000006, 0.0810000000000013, -0.011999999999998678, 0.06124999999999936], zp_timestamp='2025-11-17T23:07:00')
2025-11-18T01:07:54.431 [DEBUG] [Thread-64494] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:07:54.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:07:54.528 [DEBUG] [Thread-64498] [transport.py] [_log()] starting thread (client mode): 0xd31ccfd0
2025-11-18T01:07:54.528 [DEBUG] [Thread-64498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:07:54.544 [DEBUG] [Thread-64498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:07:54.544 [INFO] [Thread-64498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:07:54.552 [DEBUG] [Thread-64498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:07:54.552 [DEBUG] [Thread-64498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:07:54.552 [DEBUG] [Thread-64498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:07:54.552 [DEBUG] [Thread-64498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:07:54.552 [DEBUG] [Thread-64498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:07:54.552 [DEBUG] [Thread-64498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:07:54.552 [DEBUG] [Thread-64498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] client lang: <none>
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] server lang: <none>
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] kex follows: False
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:07:54.553 [DEBUG] [Thread-64498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:07:54.554 [DEBUG] [Thread-64498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:07:54.554 [DEBUG] [Thread-64498] [transport.py] [_log()] Compression: none
2025-11-18T01:07:54.554 [DEBUG] [Thread-64498] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:07:54.610 [DEBUG] [Thread-64498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:07:54.611 [DEBUG] [Thread-64498] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:07:54.612 [DEBUG] [Thread-64498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:07:54.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:07:54.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:07:54.666 [DEBUG] [Thread-64498] [transport.py] [_log()] userauth is OK
2025-11-18T01:07:54.667 [DEBUG] [Thread-64498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:07:54.667 [DEBUG] [Thread-64498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:07:54.667 [DEBUG] [Thread-64498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:07:54.667 [DEBUG] [Thread-64498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:07:54.688 [INFO] [Thread-64498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:07:54.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:07:54.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:07:55.530 [DEBUG] [Thread-64498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:07:55.531 [DEBUG] [Thread-64498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:07:55.579 [DEBUG] [Thread-64498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:07:55.579 [DEBUG] [Thread-64498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:07:55.588 [DEBUG] [Thread-64498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:07:55.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:07:55.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:07:55.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:07:55.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:07:55.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:07:55.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:07:55.622 [DEBUG] [Thread-64498] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:07:57.237 [DEBUG] [Thread-64500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:08:08.738 [DEBUG] [Thread-64501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:08:23.777 [DEBUG] [Thread-64502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:08:25.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:08:25.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:08:25.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:08:26.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 8, 2), 13.24, 39.89, 0.0, 21.4, 13.05, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:08:26.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:08:02
2025-11-18T01:08:26.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:08:26.571 [DEBUG] [Thread-64503] [transport.py] [_log()] starting thread (client mode): 0xd07ab850
2025-11-18T01:08:26.572 [DEBUG] [Thread-64503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:08:26.592 [DEBUG] [Thread-64503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:08:26.593 [INFO] [Thread-64503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:08:26.596 [DEBUG] [Thread-64503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:08:26.596 [DEBUG] [Thread-64503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:08:26.596 [DEBUG] [Thread-64503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:08:26.596 [DEBUG] [Thread-64503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:08:26.596 [DEBUG] [Thread-64503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:08:26.596 [DEBUG] [Thread-64503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] client lang: <none>
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] server lang: <none>
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] kex follows: False
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] Compression: none
2025-11-18T01:08:26.597 [DEBUG] [Thread-64503] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:08:26.609 [DEBUG] [Thread-64503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:08:26.610 [DEBUG] [Thread-64503] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:08:26.611 [DEBUG] [Thread-64503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:08:26.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:08:26.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:08:26.612 [DEBUG] [Thread-64503] [transport.py] [_log()] userauth is OK
2025-11-18T01:08:26.613 [DEBUG] [Thread-64503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:08:26.613 [DEBUG] [Thread-64503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:08:26.613 [DEBUG] [Thread-64503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:08:26.613 [DEBUG] [Thread-64503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:08:26.630 [INFO] [Thread-64503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:08:26.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:08:27.354 [DEBUG] [Thread-64503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:08:27.355 [DEBUG] [Thread-64503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:08:27.355 [DEBUG] [Thread-64503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:08:27.395 [DEBUG] [Thread-64503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:08:27.395 [DEBUG] [Thread-64503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:08:27.398 [DEBUG] [Thread-64503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:08:27.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:08:27.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:08:27.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:08:27.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:08:27.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:08:27.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:08:27.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:08:27.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:08:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:08:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.963932 -999.00  +13.10  15.10     45   +1.60 1 1 1 1 1     0    0 12.72 59.76 ZNESW 14.7 15.1 160.4 22.6 13.6 -21.1 13.4 -20.2 13.2 -20.1 13.5 -20.7
2025-11-18T01:08:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:08:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:08:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.963932
2025-11-18T01:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:08:02', tmtdew=13.24, humidity=39.89, cloud=0.0, wind=21.4, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:08:02', seeing=1.5, atlas_timestamp='2025-11-17T23:08:03.725', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.12025000000000041, 0.44925000000000104, 0.40449999999999875, 0.35050000000000026, 0.36325000000000074, 0.0009999999999994458, -0.003750000000000142, 0.03200000000000003, 0.20050000000000168, 0.7172499999999999, 0.48300000000000054, 0.5039999999999996, 0.3172499999999996, 0.02149999999999963, -0.0365000000000002, 0.12025000000000041, 0.2735000000000003, 0.7135000000000007, 0.552249999999999, 0.4939999999999989, 0.21974999999999945, -0.0012499999999988631, 0.014749999999999375, 0.09849999999999959, 0.41849999999999987, 0.5137499999999999, 0.5675000000000008, 0.45199999999999996, 0.2730000000000006, 0.0810000000000013, -0.011999999999998678, 0.06124999999999936], zp_timestamp='2025-11-17T23:07:00')
2025-11-18T01:08:27.423 [DEBUG] [Thread-64503] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:08:27.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:08:27.522 [DEBUG] [Thread-64506] [transport.py] [_log()] starting thread (client mode): 0xd07a9750
2025-11-18T01:08:27.522 [DEBUG] [Thread-64506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:08:27.538 [DEBUG] [Thread-64506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:08:27.538 [INFO] [Thread-64506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:08:27.547 [DEBUG] [Thread-64506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:08:27.547 [DEBUG] [Thread-64506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] client lang: <none>
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] server lang: <none>
2025-11-18T01:08:27.548 [DEBUG] [Thread-64506] [transport.py] [_log()] kex follows: False
2025-11-18T01:08:27.549 [DEBUG] [Thread-64506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:08:27.549 [DEBUG] [Thread-64506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:08:27.549 [DEBUG] [Thread-64506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:08:27.549 [DEBUG] [Thread-64506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:08:27.549 [DEBUG] [Thread-64506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:08:27.549 [DEBUG] [Thread-64506] [transport.py] [_log()] Compression: none
2025-11-18T01:08:27.549 [DEBUG] [Thread-64506] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:08:27.612 [DEBUG] [Thread-64506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:08:27.612 [DEBUG] [Thread-64506] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:08:27.613 [DEBUG] [Thread-64506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:08:27.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:08:27.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:08:27.671 [DEBUG] [Thread-64506] [transport.py] [_log()] userauth is OK
2025-11-18T01:08:27.671 [DEBUG] [Thread-64506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:08:27.671 [DEBUG] [Thread-64506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:08:27.671 [DEBUG] [Thread-64506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:08:27.671 [DEBUG] [Thread-64506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:08:27.691 [INFO] [Thread-64506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:08:27.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:08:27.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:08:28.569 [DEBUG] [Thread-64506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:08:28.569 [DEBUG] [Thread-64506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:08:28.617 [DEBUG] [Thread-64506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:08:28.617 [DEBUG] [Thread-64506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:08:28.626 [DEBUG] [Thread-64506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:08:28.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:08:28.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:08:28.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:08:28.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:08:28.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:08:28.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:08:28.661 [DEBUG] [Thread-64506] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:08:34.903 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:08:34.904 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:08:38.808 [DEBUG] [Thread-64508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:08:53.847 [DEBUG] [Thread-64509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:08:57.299 [DEBUG] [Thread-64510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:08:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:08:58.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:08:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:08:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 8, 34), 13.21, 40.46, 0.0, 15.84, 13.01, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:08:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:08:34
2025-11-18T01:08:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:08:59.604 [DEBUG] [Thread-64511] [transport.py] [_log()] starting thread (client mode): 0xd07aba90
2025-11-18T01:08:59.604 [DEBUG] [Thread-64511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:08:59.625 [DEBUG] [Thread-64511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:08:59.625 [INFO] [Thread-64511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:08:59.628 [DEBUG] [Thread-64511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:08:59.628 [DEBUG] [Thread-64511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:08:59.628 [DEBUG] [Thread-64511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:08:59.628 [DEBUG] [Thread-64511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:08:59.628 [DEBUG] [Thread-64511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:08:59.628 [DEBUG] [Thread-64511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:08:59.628 [DEBUG] [Thread-64511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:08:59.628 [DEBUG] [Thread-64511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] client lang: <none>
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] server lang: <none>
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] kex follows: False
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] Compression: none
2025-11-18T01:08:59.629 [DEBUG] [Thread-64511] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:08:59.651 [DEBUG] [Thread-64511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:08:59.652 [DEBUG] [Thread-64511] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:08:59.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:08:59.653 [DEBUG] [Thread-64511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:08:59.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:08:59.655 [DEBUG] [Thread-64511] [transport.py] [_log()] userauth is OK
2025-11-18T01:08:59.655 [DEBUG] [Thread-64511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:08:59.655 [DEBUG] [Thread-64511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:08:59.655 [DEBUG] [Thread-64511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:08:59.655 [DEBUG] [Thread-64511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:08:59.679 [INFO] [Thread-64511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:08:59.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:09:00.345 [DEBUG] [Thread-64511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:09:00.345 [DEBUG] [Thread-64511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:09:00.345 [DEBUG] [Thread-64511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:09:00.386 [DEBUG] [Thread-64511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:09:00.386 [DEBUG] [Thread-64511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:09:00.389 [DEBUG] [Thread-64511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:09:00.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:09:00.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:09:00.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:09:00.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:09:00.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:09:00.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:09:00.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:09:00.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:09:00.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:09:00.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.964280 -999.00  +13.10  14.43     45   +1.60 1 1 1 1 1     0    0 12.68 58.84 ZNESW 12.1 14.4 157.0 17.7 13.6 -21.1 13.4 -20.3 13.2 -20.2 13.5 -21.0
2025-11-18T01:09:00.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:09:00.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:09:00.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.964280
2025-11-18T01:09:00.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:09:00.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:09:00.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:09:00.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:09:00.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:09:00.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:08:34', tmtdew=13.21, humidity=40.46, cloud=0.0, wind=15.84, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:08:34', seeing=1.65, atlas_timestamp='2025-11-17T23:08:33.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.12025000000000041, 0.44925000000000104, 0.40449999999999875, 0.35050000000000026, 0.36325000000000074, 0.0009999999999994458, -0.003750000000000142, 0.03200000000000003, 0.20050000000000168, 0.7172499999999999, 0.48300000000000054, 0.5039999999999996, 0.3172499999999996, 0.02149999999999963, -0.0365000000000002, 0.12025000000000041, 0.2735000000000003, 0.7135000000000007, 0.552249999999999, 0.4939999999999989, 0.21974999999999945, -0.0012499999999988631, 0.014749999999999375, 0.09849999999999959, 0.41849999999999987, 0.5137499999999999, 0.5675000000000008, 0.45199999999999996, 0.2730000000000006, 0.0810000000000013, -0.011999999999998678, 0.06124999999999936], zp_timestamp='2025-11-17T23:07:00')
2025-11-18T01:09:00.414 [DEBUG] [Thread-64511] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:09:00.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:09:00.511 [DEBUG] [Thread-64514] [transport.py] [_log()] starting thread (client mode): 0xd3160130
2025-11-18T01:09:00.511 [DEBUG] [Thread-64514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:09:00.526 [DEBUG] [Thread-64514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:09:00.526 [INFO] [Thread-64514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] client lang: <none>
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] server lang: <none>
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] kex follows: False
2025-11-18T01:09:00.534 [DEBUG] [Thread-64514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:09:00.535 [DEBUG] [Thread-64514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:09:00.535 [DEBUG] [Thread-64514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:09:00.535 [DEBUG] [Thread-64514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:09:00.535 [DEBUG] [Thread-64514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:09:00.535 [DEBUG] [Thread-64514] [transport.py] [_log()] Compression: none
2025-11-18T01:09:00.535 [DEBUG] [Thread-64514] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:09:00.590 [DEBUG] [Thread-64514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:09:00.591 [DEBUG] [Thread-64514] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:09:00.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:09:00.592 [DEBUG] [Thread-64514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:09:00.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:09:00.650 [DEBUG] [Thread-64514] [transport.py] [_log()] userauth is OK
2025-11-18T01:09:00.651 [DEBUG] [Thread-64514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:09:00.651 [DEBUG] [Thread-64514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:09:00.651 [DEBUG] [Thread-64514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:09:00.651 [DEBUG] [Thread-64514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:09:00.670 [INFO] [Thread-64514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:09:00.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:09:00.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:09:01.513 [DEBUG] [Thread-64514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:09:01.513 [DEBUG] [Thread-64514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:09:01.561 [DEBUG] [Thread-64514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:09:01.561 [DEBUG] [Thread-64514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:09:01.570 [DEBUG] [Thread-64514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:09:01.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:09:01.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:09: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
2025-11-18T01:09:01.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:09:01.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:09:01.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:09:01.606 [DEBUG] [Thread-64514] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:09:08.875 [DEBUG] [Thread-64516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:09:23.913 [DEBUG] [Thread-64517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:09:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:09:31.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:09:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:09:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 9, 6), 13.23, 40.43, 0.0, 15.35, 13.06, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:09:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:09:06
2025-11-18T01:09:32.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:09:32.555 [DEBUG] [Thread-64518] [transport.py] [_log()] starting thread (client mode): 0xd07a9840
2025-11-18T01:09:32.555 [DEBUG] [Thread-64518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:09:32.576 [DEBUG] [Thread-64518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:09:32.576 [INFO] [Thread-64518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:09:32.579 [DEBUG] [Thread-64518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:09:32.579 [DEBUG] [Thread-64518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:09:32.579 [DEBUG] [Thread-64518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:09:32.579 [DEBUG] [Thread-64518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:09:32.579 [DEBUG] [Thread-64518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:09:32.579 [DEBUG] [Thread-64518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:09:32.579 [DEBUG] [Thread-64518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:09:32.579 [DEBUG] [Thread-64518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] client lang: <none>
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] server lang: <none>
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] kex follows: False
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] Compression: none
2025-11-18T01:09:32.580 [DEBUG] [Thread-64518] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:09:32.597 [DEBUG] [Thread-64518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:09:32.597 [DEBUG] [Thread-64518] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:09:32.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:09:32.598 [DEBUG] [Thread-64518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:09:32.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:09:32.641 [DEBUG] [Thread-64518] [transport.py] [_log()] userauth is OK
2025-11-18T01:09:32.641 [DEBUG] [Thread-64518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:09:32.641 [DEBUG] [Thread-64518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:09:32.641 [DEBUG] [Thread-64518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:09:32.641 [DEBUG] [Thread-64518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:09:32.673 [INFO] [Thread-64518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:09:32.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:09:33.287 [DEBUG] [Thread-64518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:09:33.288 [DEBUG] [Thread-64518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:09:33.288 [DEBUG] [Thread-64518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:09:33.329 [DEBUG] [Thread-64518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:09:33.329 [DEBUG] [Thread-64518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:09:33.332 [DEBUG] [Thread-64518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:09:33.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:09:33.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:09:33.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:09:33.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:09:33.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:09:33.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:09:33.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:09:33.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:09:33.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:09:33.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.964627 -999.00  +13.10  16.08     45   +1.60 1 1 1 1 1     0    0 12.91 64.78 ZNESW 15.6 16.1 159.2 23.1 13.6 -21.1 13.4 -20.2 13.2 -20.3 13.5 -21.0
2025-11-18T01:09:33.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:09:33.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:09:33.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.964627
2025-11-18T01:09:33.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:09:33.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:09:33.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:09:33.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:09:33.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:09:33.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:09:06', tmtdew=13.23, humidity=40.43, cloud=0.0, wind=15.35, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:09:06', seeing=1.36, atlas_timestamp='2025-11-17T23:09:03.773', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.12025000000000041, 0.44925000000000104, 0.40449999999999875, 0.35050000000000026, 0.36325000000000074, 0.0009999999999994458, -0.003750000000000142, 0.03200000000000003, 0.20050000000000168, 0.7172499999999999, 0.48300000000000054, 0.5039999999999996, 0.3172499999999996, 0.02149999999999963, -0.0365000000000002, 0.12025000000000041, 0.2735000000000003, 0.7135000000000007, 0.552249999999999, 0.4939999999999989, 0.21974999999999945, -0.0012499999999988631, 0.014749999999999375, 0.09849999999999959, 0.41849999999999987, 0.5137499999999999, 0.5675000000000008, 0.45199999999999996, 0.2730000000000006, 0.0810000000000013, -0.011999999999998678, 0.06124999999999936], zp_timestamp='2025-11-17T23:07:00')
2025-11-18T01:09:33.356 [DEBUG] [Thread-64518] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:09:33.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:09:33.458 [DEBUG] [Thread-64521] [transport.py] [_log()] starting thread (client mode): 0xd07abbb0
2025-11-18T01:09:33.458 [DEBUG] [Thread-64521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:09:33.479 [DEBUG] [Thread-64521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:09:33.479 [INFO] [Thread-64521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:09:33.486 [DEBUG] [Thread-64521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] client lang: <none>
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] server lang: <none>
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] kex follows: False
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:09:33.487 [DEBUG] [Thread-64521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:09:33.488 [DEBUG] [Thread-64521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:09:33.488 [DEBUG] [Thread-64521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:09:33.488 [DEBUG] [Thread-64521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:09:33.488 [DEBUG] [Thread-64521] [transport.py] [_log()] Compression: none
2025-11-18T01:09:33.488 [DEBUG] [Thread-64521] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:09:33.547 [DEBUG] [Thread-64521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:09:33.547 [DEBUG] [Thread-64521] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:09:33.548 [DEBUG] [Thread-64521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:09:33.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:09:33.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:09:33.608 [DEBUG] [Thread-64521] [transport.py] [_log()] userauth is OK
2025-11-18T01:09:33.608 [DEBUG] [Thread-64521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:09:33.608 [DEBUG] [Thread-64521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:09:33.608 [DEBUG] [Thread-64521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:09:33.608 [DEBUG] [Thread-64521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:09:33.629 [INFO] [Thread-64521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:09:33.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:09:33.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:09:34.464 [DEBUG] [Thread-64521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:09:34.465 [DEBUG] [Thread-64521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:09:34.512 [DEBUG] [Thread-64521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:09:34.512 [DEBUG] [Thread-64521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:09:34.525 [DEBUG] [Thread-64521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:09:34.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:09:34.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:09: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') -> 00000000
2025-11-18T01:09:34.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:09:34.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:09:34.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:09:34.565 [DEBUG] [Thread-64521] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:09:35.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:09:35.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:09:38.936 [DEBUG] [Thread-64523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:09:53.968 [DEBUG] [Thread-64524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:09:57.374 [DEBUG] [Thread-64525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:10:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:10:04.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:10:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:10:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 9, 38), 13.22, 40.44, 0.0, 20.8, 13.11, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:10:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:09:38
2025-11-18T01:10:05.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:10:05.560 [DEBUG] [Thread-64526] [transport.py] [_log()] starting thread (client mode): 0xd07a9900
2025-11-18T01:10:05.561 [DEBUG] [Thread-64526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:10:05.581 [DEBUG] [Thread-64526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:10:05.581 [INFO] [Thread-64526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] client lang: <none>
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] server lang: <none>
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] kex follows: False
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] Compression: none
2025-11-18T01:10:05.585 [DEBUG] [Thread-64526] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:10:05.603 [DEBUG] [Thread-64526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:10:05.603 [DEBUG] [Thread-64526] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:10:05.603 [DEBUG] [Thread-64526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:10:05.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:10:05.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:10:05.604 [DEBUG] [Thread-64526] [transport.py] [_log()] userauth is OK
2025-11-18T01:10:05.604 [DEBUG] [Thread-64526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:10:05.604 [DEBUG] [Thread-64526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:10:05.604 [DEBUG] [Thread-64526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:10:05.604 [DEBUG] [Thread-64526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:10:05.614 [INFO] [Thread-64526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:10:05.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:10:08.268 [DEBUG] [Thread-64526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:10:08.268 [DEBUG] [Thread-64526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:10:08.268 [DEBUG] [Thread-64526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:10:08.308 [DEBUG] [Thread-64526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:10:08.308 [DEBUG] [Thread-64526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:10:08.311 [DEBUG] [Thread-64526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:10:08.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:10:08.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:10:08.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:10:08.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:10:08.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:10:08.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:10:08.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:10:08.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:10:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:10:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.964974 -999.00  +13.10  17.02     45   +1.50 1 1 1 1 1     0    0 13.32 64.61 ZNESW 15.8 17.0 169.4 24.5 13.6 -21.1 13.4 -20.4 13.2 -20.3 13.5 -20.8
2025-11-18T01:10:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:10:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:10:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.964974
2025-11-18T01:10:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:10:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:10:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:10:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:10:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:10:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:09:38', tmtdew=13.22, humidity=40.44, cloud=0.0, wind=20.8, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:09:38', seeing=1.62, atlas_timestamp='2025-11-17T23:09:33.754', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.12025000000000041, 0.44925000000000104, 0.40449999999999875, 0.35050000000000026, 0.36325000000000074, 0.0009999999999994458, -0.003750000000000142, 0.03200000000000003, 0.20050000000000168, 0.7172499999999999, 0.48300000000000054, 0.5039999999999996, 0.3172499999999996, 0.02149999999999963, -0.0365000000000002, 0.12025000000000041, 0.2735000000000003, 0.7135000000000007, 0.552249999999999, 0.4939999999999989, 0.21974999999999945, -0.0012499999999988631, 0.014749999999999375, 0.09849999999999959, 0.41849999999999987, 0.5137499999999999, 0.5675000000000008, 0.45199999999999996, 0.2730000000000006, 0.0810000000000013, -0.011999999999998678, 0.06124999999999936], zp_timestamp='2025-11-17T23:07:00')
2025-11-18T01:10:08.355 [DEBUG] [Thread-64526] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:10:08.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:10:08.454 [DEBUG] [Thread-64529] [transport.py] [_log()] starting thread (client mode): 0xd31cf070
2025-11-18T01:10:08.454 [DEBUG] [Thread-64529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:10:08.470 [DEBUG] [Thread-64529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:10:08.470 [INFO] [Thread-64529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:10:08.480 [DEBUG] [Thread-64529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:10:08.480 [DEBUG] [Thread-64529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:10:08.480 [DEBUG] [Thread-64529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:10:08.480 [DEBUG] [Thread-64529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:10:08.480 [DEBUG] [Thread-64529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:10:08.480 [DEBUG] [Thread-64529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:10:08.480 [DEBUG] [Thread-64529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:10:08.480 [DEBUG] [Thread-64529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] client lang: <none>
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] server lang: <none>
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] kex follows: False
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] Compression: none
2025-11-18T01:10:08.481 [DEBUG] [Thread-64529] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:10:08.539 [DEBUG] [Thread-64529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:10:08.539 [DEBUG] [Thread-64529] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:10:08.539 [DEBUG] [Thread-64529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:10:08.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:10:08.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:10:08.598 [DEBUG] [Thread-64529] [transport.py] [_log()] userauth is OK
2025-11-18T01:10:08.598 [DEBUG] [Thread-64529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:10:08.598 [DEBUG] [Thread-64529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:10:08.598 [DEBUG] [Thread-64529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:10:08.598 [DEBUG] [Thread-64529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:10:08.621 [INFO] [Thread-64529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:10:08.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:10:08.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:10:08.996 [DEBUG] [Thread-64531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:10:09.462 [DEBUG] [Thread-64529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:10:09.462 [DEBUG] [Thread-64529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:10:09.509 [DEBUG] [Thread-64529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:10:09.509 [DEBUG] [Thread-64529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:10:09.519 [DEBUG] [Thread-64529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:10:09.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:10:09.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:10:09.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:10:09.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:10:09.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:10:09.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:10:09.554 [DEBUG] [Thread-64529] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:10:24.041 [DEBUG] [Thread-64532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:10:30.055 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:10:35.310 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:10:35.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:10:39.070 [DEBUG] [Thread-64533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:10:39.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:10:39.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:10:39.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:10:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 10, 10), 13.2, 40.49, 0.0, 20.26, 13.08, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:10:40.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:10:10
2025-11-18T01:10:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:10:40.510 [DEBUG] [Thread-64534] [transport.py] [_log()] starting thread (client mode): 0xd0757760
2025-11-18T01:10:40.510 [DEBUG] [Thread-64534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:10:40.521 [DEBUG] [Thread-64534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:10:40.521 [INFO] [Thread-64534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:10:40.524 [DEBUG] [Thread-64534] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:10:40.524 [DEBUG] [Thread-64534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:10:40.524 [DEBUG] [Thread-64534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:10:40.524 [DEBUG] [Thread-64534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:10:40.524 [DEBUG] [Thread-64534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:10:40.524 [DEBUG] [Thread-64534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:10:40.524 [DEBUG] [Thread-64534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:10:40.524 [DEBUG] [Thread-64534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] client lang: <none>
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] server lang: <none>
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] kex follows: False
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] Compression: none
2025-11-18T01:10:40.525 [DEBUG] [Thread-64534] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:10:40.540 [DEBUG] [Thread-64534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:10:40.540 [DEBUG] [Thread-64534] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:10:40.541 [DEBUG] [Thread-64534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:10:40.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:10:40.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:10:40.542 [DEBUG] [Thread-64534] [transport.py] [_log()] userauth is OK
2025-11-18T01:10:40.542 [DEBUG] [Thread-64534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:10:40.542 [DEBUG] [Thread-64534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:10:40.542 [DEBUG] [Thread-64534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:10:40.542 [DEBUG] [Thread-64534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:10:40.560 [INFO] [Thread-64534] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:10:40.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:10:41.171 [DEBUG] [Thread-64534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:10:41.171 [DEBUG] [Thread-64534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:10:41.171 [DEBUG] [Thread-64534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:10:41.212 [DEBUG] [Thread-64534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:10:41.212 [DEBUG] [Thread-64534] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:10:41.214 [DEBUG] [Thread-64534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:10:41.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:10:41.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:10:41.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:10:41.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:10:41.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:10:41.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:10:41.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:10:41.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.965321 -999.00  +13.10  15.51     45   +1.60 1 1 1 1 1     0    0 12.98 67.57 ZNESW 16.3 15.5 153.2 24.2 13.6 -21.2 13.4 -20.5 13.2 -20.4 13.5 -20.9
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.965321
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:10:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:10:10', tmtdew=13.2, humidity=40.49, cloud=0.0, wind=20.26, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:10:10', seeing=1.62, atlas_timestamp='2025-11-17T23:10:03.734', atlas_cloud=1, atlas_rain=1, zp_data=[0.14374999999999893, 0.12025000000000041, 0.44925000000000104, 0.40449999999999875, 0.35050000000000026, 0.36325000000000074, 0.0009999999999994458, -0.003750000000000142, 0.03200000000000003, 0.20050000000000168, 0.7172499999999999, 0.48300000000000054, 0.5039999999999996, 0.3172499999999996, 0.02149999999999963, -0.0365000000000002, 0.12025000000000041, 0.2735000000000003, 0.7135000000000007, 0.552249999999999, 0.4939999999999989, 0.21974999999999945, -0.0012499999999988631, 0.014749999999999375, 0.09849999999999959, 0.41849999999999987, 0.5137499999999999, 0.5675000000000008, 0.45199999999999996, 0.2730000000000006, 0.0810000000000013, -0.011999999999998678, 0.06124999999999936], zp_timestamp='2025-11-17T23:07:00')
2025-11-18T01:10:41.233 [DEBUG] [Thread-64534] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:10:41.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:10:41.324 [DEBUG] [Thread-64537] [transport.py] [_log()] starting thread (client mode): 0xd07a9750
2025-11-18T01:10:41.324 [DEBUG] [Thread-64537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:10:41.338 [DEBUG] [Thread-64537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:10:41.338 [INFO] [Thread-64537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:10:41.345 [DEBUG] [Thread-64537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:10:41.345 [DEBUG] [Thread-64537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:10:41.345 [DEBUG] [Thread-64537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:10:41.345 [DEBUG] [Thread-64537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:10:41.345 [DEBUG] [Thread-64537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] client lang: <none>
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] server lang: <none>
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] kex follows: False
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] Compression: none
2025-11-18T01:10:41.346 [DEBUG] [Thread-64537] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:10:41.402 [DEBUG] [Thread-64537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:10:41.402 [DEBUG] [Thread-64537] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:10:41.402 [DEBUG] [Thread-64537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:10:41.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:10:41.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:10:41.458 [DEBUG] [Thread-64537] [transport.py] [_log()] userauth is OK
2025-11-18T01:10:41.458 [DEBUG] [Thread-64537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:10:41.458 [DEBUG] [Thread-64537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:10:41.458 [DEBUG] [Thread-64537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:10:41.458 [DEBUG] [Thread-64537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:10:41.472 [INFO] [Thread-64537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:10:41.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:10:41.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:10:42.336 [DEBUG] [Thread-64537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:10:42.337 [DEBUG] [Thread-64537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:10:42.384 [DEBUG] [Thread-64537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:10:42.384 [DEBUG] [Thread-64537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:10:42.392 [DEBUG] [Thread-64537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:10:42.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:10:42.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:10:42.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:10:42.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:10:42.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:10:42.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:10:42.424 [DEBUG] [Thread-64537] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:10:54.098 [DEBUG] [Thread-64539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:10:57.431 [DEBUG] [Thread-64540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:11:09.149 [DEBUG] [Thread-64541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:11:12.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:11:12.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:11:12.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:11:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 10, 42), 13.21, 40.09, 0.0, 18.23, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:11:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:10:42
2025-11-18T01:11:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:11:13.376 [DEBUG] [Thread-64542] [transport.py] [_log()] starting thread (client mode): 0xd317c190
2025-11-18T01:11:13.376 [DEBUG] [Thread-64542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:11:13.396 [DEBUG] [Thread-64542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:11:13.396 [INFO] [Thread-64542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:11:13.399 [DEBUG] [Thread-64542] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] client lang: <none>
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] server lang: <none>
2025-11-18T01:11:13.400 [DEBUG] [Thread-64542] [transport.py] [_log()] kex follows: False
2025-11-18T01:11:13.401 [DEBUG] [Thread-64542] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:11:13.401 [DEBUG] [Thread-64542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:11:13.401 [DEBUG] [Thread-64542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:11:13.401 [DEBUG] [Thread-64542] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:11:13.401 [DEBUG] [Thread-64542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:11:13.401 [DEBUG] [Thread-64542] [transport.py] [_log()] Compression: none
2025-11-18T01:11:13.401 [DEBUG] [Thread-64542] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:11:13.421 [DEBUG] [Thread-64542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:11:13.422 [DEBUG] [Thread-64542] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:11:13.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:11:13.423 [DEBUG] [Thread-64542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:11:13.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:11:13.425 [DEBUG] [Thread-64542] [transport.py] [_log()] userauth is OK
2025-11-18T01:11:13.425 [DEBUG] [Thread-64542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:11:13.425 [DEBUG] [Thread-64542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:11:13.425 [DEBUG] [Thread-64542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:11:13.425 [DEBUG] [Thread-64542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:11:13.450 [INFO] [Thread-64542] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:11:13.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:11:14.098 [DEBUG] [Thread-64542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:11:14.098 [DEBUG] [Thread-64542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:11:14.098 [DEBUG] [Thread-64542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:11:14.138 [DEBUG] [Thread-64542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:11:14.139 [DEBUG] [Thread-64542] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:11:14.141 [DEBUG] [Thread-64542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:11:14.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:11:14.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:11:14.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:11:14.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:11:14.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:11:14.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:11:14.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:11:14.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:11:14.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:11:14.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.965669 -999.00  +13.10  14.84     45   +1.60 1 1 1 1 1     0    0 13.30 69.85 ZNESW 12.5 14.8 159.6 18.6 13.6 -21.3 13.4 -20.6 13.2 -20.5 13.5 -21.2
2025-11-18T01:11:14.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:11:14.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:11:14.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.965669
2025-11-18T01:11:14.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:11:14.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:11:14.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:11:14.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:11:14.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:11:14.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:10:42', tmtdew=13.21, humidity=40.09, cloud=0.0, wind=18.23, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:10:42', seeing=1.59, atlas_timestamp='2025-11-17T23:10:33.802', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:09:00')
2025-11-18T01:11:14.167 [DEBUG] [Thread-64542] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:11:14.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:11:14.268 [DEBUG] [Thread-64545] [transport.py] [_log()] starting thread (client mode): 0xd0757700
2025-11-18T01:11:14.268 [DEBUG] [Thread-64545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:11:14.290 [DEBUG] [Thread-64545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:11:14.290 [INFO] [Thread-64545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] client lang: <none>
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] server lang: <none>
2025-11-18T01:11:14.299 [DEBUG] [Thread-64545] [transport.py] [_log()] kex follows: False
2025-11-18T01:11:14.300 [DEBUG] [Thread-64545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:11:14.300 [DEBUG] [Thread-64545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:11:14.300 [DEBUG] [Thread-64545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:11:14.300 [DEBUG] [Thread-64545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:11:14.300 [DEBUG] [Thread-64545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:11:14.300 [DEBUG] [Thread-64545] [transport.py] [_log()] Compression: none
2025-11-18T01:11:14.300 [DEBUG] [Thread-64545] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:11:14.359 [DEBUG] [Thread-64545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:11:14.359 [DEBUG] [Thread-64545] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:11:14.360 [DEBUG] [Thread-64545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:11:14.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:11:14.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:11:14.415 [DEBUG] [Thread-64545] [transport.py] [_log()] userauth is OK
2025-11-18T01:11:14.415 [DEBUG] [Thread-64545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:11:14.415 [DEBUG] [Thread-64545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:11:14.415 [DEBUG] [Thread-64545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:11:14.415 [DEBUG] [Thread-64545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:11:14.435 [INFO] [Thread-64545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:11:14.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:11:14.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:11:15.287 [DEBUG] [Thread-64545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:11:15.288 [DEBUG] [Thread-64545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:11:15.336 [DEBUG] [Thread-64545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:11:15.336 [DEBUG] [Thread-64545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:11:15.344 [DEBUG] [Thread-64545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:11:15.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:11:15.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:11:15.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:11:15.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:11:15.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:11:15.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:11:15.379 [DEBUG] [Thread-64545] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:11:24.177 [DEBUG] [Thread-64547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:11:35.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:11:35.515 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:11:39.218 [DEBUG] [Thread-64548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:11:45.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:11:45.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:11: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
2025-11-18T01:11:46.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 11, 14), 13.19, 40.17, 0.0, 18.58, 13.08, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:11:46.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:11:14
2025-11-18T01:11:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:11:46.329 [DEBUG] [Thread-64549] [transport.py] [_log()] starting thread (client mode): 0xd07d8970
2025-11-18T01:11:46.329 [DEBUG] [Thread-64549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:11:46.357 [DEBUG] [Thread-64549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:11:46.357 [INFO] [Thread-64549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:11:46.358 [DEBUG] [Thread-64549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:11:46.358 [DEBUG] [Thread-64549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] client lang: <none>
2025-11-18T01:11:46.359 [DEBUG] [Thread-64549] [transport.py] [_log()] server lang: <none>
2025-11-18T01:11:46.360 [DEBUG] [Thread-64549] [transport.py] [_log()] kex follows: False
2025-11-18T01:11:46.360 [DEBUG] [Thread-64549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:11:46.360 [DEBUG] [Thread-64549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:11:46.360 [DEBUG] [Thread-64549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:11:46.360 [DEBUG] [Thread-64549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:11:46.360 [DEBUG] [Thread-64549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:11:46.360 [DEBUG] [Thread-64549] [transport.py] [_log()] Compression: none
2025-11-18T01:11:46.360 [DEBUG] [Thread-64549] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:11:46.372 [DEBUG] [Thread-64549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:11:46.373 [DEBUG] [Thread-64549] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:11:46.373 [DEBUG] [Thread-64549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:11:46.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:11:46.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:11:46.375 [DEBUG] [Thread-64549] [transport.py] [_log()] userauth is OK
2025-11-18T01:11:46.375 [DEBUG] [Thread-64549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:11:46.375 [DEBUG] [Thread-64549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:11:46.376 [DEBUG] [Thread-64549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:11:46.376 [DEBUG] [Thread-64549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:11:46.399 [INFO] [Thread-64549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:11:46.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:11:46.969 [DEBUG] [Thread-64549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:11:46.969 [DEBUG] [Thread-64549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:11:46.969 [DEBUG] [Thread-64549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:11:47.010 [DEBUG] [Thread-64549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:11:47.010 [DEBUG] [Thread-64549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:11:47.013 [DEBUG] [Thread-64549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:11:47.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:11:47.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:11:47.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:11:47.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:11:47.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:11:47.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:11:47.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.966363 -999.00  +13.10  17.56     45   +1.60 1 1 1 1 1     0    0 13.25 71.68 ZNESW 16.4 17.6 162.8 20.6 13.6 -21.6 13.4 -20.9 13.2 -20.9 13.5 -21.5
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.966363
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:11:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:11:14', tmtdew=13.19, humidity=40.17, cloud=0.0, wind=18.58, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:11:14', seeing=1.41, atlas_timestamp='2025-11-17T23:11:33.763', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:09:00')
2025-11-18T01:11:47.026 [DEBUG] [Thread-64549] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:11:47.111 [DEBUG] [Thread-64552] [transport.py] [_log()] starting thread (client mode): 0xd07130a0
2025-11-18T01:11:47.111 [DEBUG] [Thread-64552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:11:47.126 [DEBUG] [Thread-64552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:11:47.126 [INFO] [Thread-64552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] client lang: <none>
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] server lang: <none>
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] kex follows: False
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] Compression: none
2025-11-18T01:11:47.134 [DEBUG] [Thread-64552] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:11:47.190 [DEBUG] [Thread-64552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:11:47.190 [DEBUG] [Thread-64552] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:11:47.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:11:47.190 [DEBUG] [Thread-64552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:11:47.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:11:47.246 [DEBUG] [Thread-64552] [transport.py] [_log()] userauth is OK
2025-11-18T01:11:47.246 [DEBUG] [Thread-64552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:11:47.246 [DEBUG] [Thread-64552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:11:47.246 [DEBUG] [Thread-64552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:11:47.246 [DEBUG] [Thread-64552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:11:47.261 [INFO] [Thread-64552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:11:47.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:11:47.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:11:48.082 [DEBUG] [Thread-64552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:11:48.082 [DEBUG] [Thread-64552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:11:48.130 [DEBUG] [Thread-64552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:11:48.130 [DEBUG] [Thread-64552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:11:48.138 [DEBUG] [Thread-64552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:11:48.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:11:48.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:11:48.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:11:48.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:11:48.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:11:48.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:11:48.169 [DEBUG] [Thread-64552] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:11:54.249 [DEBUG] [Thread-64554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:11:57.488 [DEBUG] [Thread-64555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:12:09.291 [DEBUG] [Thread-64556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:12:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:12:18.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:12:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:12:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 11, 46), 13.07, 40.72, 0.0, 18.55, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:12:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:11:46
2025-11-18T01:12:18.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:12:19.128 [DEBUG] [Thread-64557] [transport.py] [_log()] starting thread (client mode): 0xd07d9ba0
2025-11-18T01:12:19.128 [DEBUG] [Thread-64557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:12:19.152 [DEBUG] [Thread-64557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:12:19.152 [INFO] [Thread-64557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] client lang: <none>
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] server lang: <none>
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] kex follows: False
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:12:19.155 [DEBUG] [Thread-64557] [transport.py] [_log()] Compression: none
2025-11-18T01:12:19.156 [DEBUG] [Thread-64557] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:12:19.170 [DEBUG] [Thread-64557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:12:19.170 [DEBUG] [Thread-64557] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:12:19.170 [DEBUG] [Thread-64557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:12:19.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:12:19.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:12:19.171 [DEBUG] [Thread-64557] [transport.py] [_log()] userauth is OK
2025-11-18T01:12:19.171 [DEBUG] [Thread-64557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:12:19.171 [DEBUG] [Thread-64557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:12:19.171 [DEBUG] [Thread-64557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:12:19.171 [DEBUG] [Thread-64557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:12:19.184 [INFO] [Thread-64557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:12:19.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:12:19.782 [DEBUG] [Thread-64557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:12:19.782 [DEBUG] [Thread-64557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:12:19.782 [DEBUG] [Thread-64557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:12:19.823 [DEBUG] [Thread-64557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:12:19.823 [DEBUG] [Thread-64557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:12:19.825 [DEBUG] [Thread-64557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:12:19.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:12:19.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:12:19.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:12:19.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:12:19.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:12:19.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:12:19.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:12:19.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:12:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:12:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.966710 -999.00  +13.10  12.22     45   +1.60 1 1 1 1 1     0    0 13.24 69.93 ZNESW 10.3 12.2 158.8 21.7 13.5 -21.7 13.4 -21.0 13.2 -20.9 13.5 -21.4
2025-11-18T01:12:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:12:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:12:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.966710
2025-11-18T01:12:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:12:19.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:12:19.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:12:19.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:12:19.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:12:19.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:11:46', tmtdew=13.07, humidity=40.72, cloud=0.0, wind=18.55, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:11:46', seeing=1.41, atlas_timestamp='2025-11-17T23:12:03.744', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:09:00')
2025-11-18T01:12:19.844 [DEBUG] [Thread-64557] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:12:19.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:12:19.931 [DEBUG] [Thread-64560] [transport.py] [_log()] starting thread (client mode): 0xd31cdf60
2025-11-18T01:12:19.931 [DEBUG] [Thread-64560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:12:19.951 [DEBUG] [Thread-64560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:12:19.951 [INFO] [Thread-64560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:12:19.958 [DEBUG] [Thread-64560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] client lang: <none>
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] server lang: <none>
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] kex follows: False
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] Compression: none
2025-11-18T01:12:19.959 [DEBUG] [Thread-64560] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:12:20.013 [DEBUG] [Thread-64560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:12:20.013 [DEBUG] [Thread-64560] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:12:20.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:12:20.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:12:20.014 [DEBUG] [Thread-64560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:12:20.070 [DEBUG] [Thread-64560] [transport.py] [_log()] userauth is OK
2025-11-18T01:12:20.070 [DEBUG] [Thread-64560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:12:20.070 [DEBUG] [Thread-64560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:12:20.070 [DEBUG] [Thread-64560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:12:20.071 [DEBUG] [Thread-64560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:12:20.085 [INFO] [Thread-64560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:12:20.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:12:20.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:12:20.954 [DEBUG] [Thread-64560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:12:20.954 [DEBUG] [Thread-64560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:12:21.003 [DEBUG] [Thread-64560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:12:21.003 [DEBUG] [Thread-64560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:12:21.015 [DEBUG] [Thread-64560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:12:21.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:12:21.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:12:21.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:12:21.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:12:21.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:12:21.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:12:21.056 [DEBUG] [Thread-64560] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:12:24.319 [DEBUG] [Thread-64562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:12:35.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:12:35.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:12:39.365 [DEBUG] [Thread-64563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:12:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:12:51.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:12:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:12:51.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 12, 18), 13.06, 40.77, 0.0, 18.03, 13.06, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:12:51.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:12:18
2025-11-18T01:12:51.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:12:52.070 [DEBUG] [Thread-64564] [transport.py] [_log()] starting thread (client mode): 0xd07121a0
2025-11-18T01:12:52.070 [DEBUG] [Thread-64564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:12:52.082 [DEBUG] [Thread-64564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:12:52.083 [INFO] [Thread-64564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] client lang: <none>
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] server lang: <none>
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] kex follows: False
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:12:52.084 [DEBUG] [Thread-64564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:12:52.085 [DEBUG] [Thread-64564] [transport.py] [_log()] Compression: none
2025-11-18T01:12:52.085 [DEBUG] [Thread-64564] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:12:52.098 [DEBUG] [Thread-64564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:12:52.098 [DEBUG] [Thread-64564] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:12:52.098 [DEBUG] [Thread-64564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:12:52.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:12:52.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:12:52.099 [DEBUG] [Thread-64564] [transport.py] [_log()] userauth is OK
2025-11-18T01:12:52.099 [DEBUG] [Thread-64564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:12:52.099 [DEBUG] [Thread-64564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:12:52.099 [DEBUG] [Thread-64564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:12:52.099 [DEBUG] [Thread-64564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:12:52.109 [INFO] [Thread-64564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:12:52.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:12:52.678 [DEBUG] [Thread-64564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:12:52.678 [DEBUG] [Thread-64564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:12:52.679 [DEBUG] [Thread-64564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:12:52.719 [DEBUG] [Thread-64564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:12:52.719 [DEBUG] [Thread-64564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:12:52.721 [DEBUG] [Thread-64564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:12:52.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:12:52.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:12:52.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:12:52.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:12:52.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:12:52.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:12:52.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:12:52.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:12:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:12:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.967057 -999.00  +13.10  11.18     45   +1.60 1 1 1 1 1     0    0 13.51 71.97 ZNESW 11.0 11.2 163.8 14.8 13.6 -21.8 13.4 -21.1 13.2 -21.1 13.5 -21.5
2025-11-18T01:12:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:12:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:12:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.967057
2025-11-18T01:12:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:12:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:12:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:12:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:12:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:12:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:12:18', tmtdew=13.06, humidity=40.77, cloud=0.0, wind=18.03, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:12:50', seeing=1.56, atlas_timestamp='2025-11-17T23:12:33.725', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:09:00')
2025-11-18T01:12:52.740 [DEBUG] [Thread-64564] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:12:52.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:12:52.827 [DEBUG] [Thread-64567] [transport.py] [_log()] starting thread (client mode): 0xd0710160
2025-11-18T01:12:52.827 [DEBUG] [Thread-64567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:12:52.848 [DEBUG] [Thread-64567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:12:52.849 [INFO] [Thread-64567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] client lang: <none>
2025-11-18T01:12:52.863 [DEBUG] [Thread-64567] [transport.py] [_log()] server lang: <none>
2025-11-18T01:12:52.864 [DEBUG] [Thread-64567] [transport.py] [_log()] kex follows: False
2025-11-18T01:12:52.864 [DEBUG] [Thread-64567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:12:52.864 [DEBUG] [Thread-64567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:12:52.864 [DEBUG] [Thread-64567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:12:52.864 [DEBUG] [Thread-64567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:12:52.864 [DEBUG] [Thread-64567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:12:52.864 [DEBUG] [Thread-64567] [transport.py] [_log()] Compression: none
2025-11-18T01:12:52.864 [DEBUG] [Thread-64567] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:12:52.917 [DEBUG] [Thread-64567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:12:52.917 [DEBUG] [Thread-64567] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:12:52.918 [DEBUG] [Thread-64567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:12:52.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:12:52.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:12:52.976 [DEBUG] [Thread-64567] [transport.py] [_log()] userauth is OK
2025-11-18T01:12:52.976 [DEBUG] [Thread-64567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:12:52.976 [DEBUG] [Thread-64567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:12:52.976 [DEBUG] [Thread-64567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:12:52.976 [DEBUG] [Thread-64567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:12:52.997 [INFO] [Thread-64567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:12:52.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:12:52.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:12:53.803 [DEBUG] [Thread-64567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:12:53.803 [DEBUG] [Thread-64567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:12:53.851 [DEBUG] [Thread-64567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:12:53.852 [DEBUG] [Thread-64567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:12:53.860 [DEBUG] [Thread-64567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:12:53.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:12:53.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:12:53.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:12:53.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:12:53.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:12:53.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:12:53.895 [DEBUG] [Thread-64567] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:12:54.391 [DEBUG] [Thread-64569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:12:57.562 [DEBUG] [Thread-64570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:13:09.431 [DEBUG] [Thread-64571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:13:23.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:13:23.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:13:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:13:24.458 [DEBUG] [Thread-64572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:13:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 12, 50), 13.09, 40.67, 0.0, 20.12, 13.06, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:13:24.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:12:50
2025-11-18T01:13:24.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:13:24.882 [DEBUG] [Thread-64573] [transport.py] [_log()] starting thread (client mode): 0xd0712890
2025-11-18T01:13:24.882 [DEBUG] [Thread-64573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:13:24.905 [DEBUG] [Thread-64573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:13:24.905 [INFO] [Thread-64573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] client lang: <none>
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] server lang: <none>
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] kex follows: False
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] Compression: none
2025-11-18T01:13:24.909 [DEBUG] [Thread-64573] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:13:24.925 [DEBUG] [Thread-64573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:13:24.926 [DEBUG] [Thread-64573] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:13:24.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:13:24.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:13:24.926 [DEBUG] [Thread-64573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:13:24.926 [DEBUG] [Thread-64573] [transport.py] [_log()] userauth is OK
2025-11-18T01:13:24.927 [DEBUG] [Thread-64573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:13:24.927 [DEBUG] [Thread-64573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:13:24.927 [DEBUG] [Thread-64573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:13:24.927 [DEBUG] [Thread-64573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:13:24.945 [INFO] [Thread-64573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:13:24.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:13:25.532 [DEBUG] [Thread-64573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:13:25.532 [DEBUG] [Thread-64573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:13:25.533 [DEBUG] [Thread-64573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:13:25.573 [DEBUG] [Thread-64573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:13:25.574 [DEBUG] [Thread-64573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:13:25.577 [DEBUG] [Thread-64573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:13:25.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:13:25.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:13:25.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:13:25.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:13:25.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:13:25.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:13:25.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:13:25.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:13:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:13:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.967057 -999.00  +13.10  11.18     45   +1.60 1 1 1 1 1     0    0 13.51 71.97 ZNESW 11.0 11.2 163.8 14.8 13.6 -21.8 13.4 -21.1 13.2 -21.1 13.5 -21.5
2025-11-18T01:13:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:13:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:13:25.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.967057
2025-11-18T01:13:25.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:13:25.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:13:25.593 [DEBUG] [Thread-64573] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:13:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:13:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:13:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:13:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:12:50', tmtdew=13.09, humidity=40.67, cloud=0.0, wind=20.12, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:13:22', seeing=1.6, atlas_timestamp='2025-11-17T23:12:33.725', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:09:00')
2025-11-18T01:13:25.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:13:25.686 [DEBUG] [Thread-64576] [transport.py] [_log()] starting thread (client mode): 0xd31cca90
2025-11-18T01:13:25.686 [DEBUG] [Thread-64576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:13:25.701 [DEBUG] [Thread-64576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:13:25.701 [INFO] [Thread-64576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:13:25.709 [DEBUG] [Thread-64576] [transport.py] [_log()] client lang: <none>
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] server lang: <none>
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] kex follows: False
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] Compression: none
2025-11-18T01:13:25.710 [DEBUG] [Thread-64576] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:13:25.765 [DEBUG] [Thread-64576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:13:25.766 [DEBUG] [Thread-64576] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:13:25.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:13:25.767 [DEBUG] [Thread-64576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:13:25.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:13:25.822 [DEBUG] [Thread-64576] [transport.py] [_log()] userauth is OK
2025-11-18T01:13:25.822 [DEBUG] [Thread-64576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:13:25.822 [DEBUG] [Thread-64576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:13:25.822 [DEBUG] [Thread-64576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:13:25.822 [DEBUG] [Thread-64576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:13:25.837 [INFO] [Thread-64576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:13:25.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:13:25.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:13:26.708 [DEBUG] [Thread-64576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:13:26.709 [DEBUG] [Thread-64576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:13:26.756 [DEBUG] [Thread-64576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:13:26.756 [DEBUG] [Thread-64576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:13:26.765 [DEBUG] [Thread-64576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:13:26.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:13:26.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:13:26.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:13:26.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:13:26.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:13:26.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:13:26.799 [DEBUG] [Thread-64576] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:13:35.920 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:13:35.921 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:13:39.485 [DEBUG] [Thread-64578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:13:54.529 [DEBUG] [Thread-64579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:13:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:13:56.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:13:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:13:57.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 13, 22), 12.99, 40.97, 0.0, 21.31, 13.01, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:13:57.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:13:22
2025-11-18T01:13:57.640 [DEBUG] [Thread-64580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:13:57.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:13:57.806 [DEBUG] [Thread-64581] [transport.py] [_log()] starting thread (client mode): 0xd31cffd0
2025-11-18T01:13:57.806 [DEBUG] [Thread-64581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:13:57.826 [DEBUG] [Thread-64581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:13:57.826 [INFO] [Thread-64581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] client lang: <none>
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] server lang: <none>
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] kex follows: False
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] Compression: none
2025-11-18T01:13:57.830 [DEBUG] [Thread-64581] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:13:57.847 [DEBUG] [Thread-64581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:13:57.847 [DEBUG] [Thread-64581] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:13:57.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:13:57.848 [DEBUG] [Thread-64581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:13:57.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:13:57.848 [DEBUG] [Thread-64581] [transport.py] [_log()] userauth is OK
2025-11-18T01:13:57.849 [DEBUG] [Thread-64581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:13:57.849 [DEBUG] [Thread-64581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:13:57.849 [DEBUG] [Thread-64581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:13:57.849 [DEBUG] [Thread-64581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:13:57.858 [INFO] [Thread-64581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:13:57.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:13:58.660 [DEBUG] [Thread-64581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:13:58.660 [DEBUG] [Thread-64581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:13:58.660 [DEBUG] [Thread-64581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:13:58.701 [DEBUG] [Thread-64581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:13:58.701 [DEBUG] [Thread-64581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:13:58.704 [DEBUG] [Thread-64581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:13:58.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:13:58.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:13:58.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:13:58.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:13:58.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:13:58.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:13:58.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:13:58.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.967405 -999.00  +13.00  11.74     45   +1.60 1 1 1 1 1     0    0 13.38 76.38 ZNESW 9.4 11.7 159.2 15.4 13.5 -22.0 13.4 -21.2 13.2 -21.2 13.5 -21.6
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.967405
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:13:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:13:22', tmtdew=12.99, humidity=40.97, cloud=0.0, wind=21.31, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:13:55', seeing=1.73, atlas_timestamp='2025-11-17T23:13:03.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:11:00')
2025-11-18T01:13:58.721 [DEBUG] [Thread-64581] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:13:58.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:13:58.807 [DEBUG] [Thread-64584] [transport.py] [_log()] starting thread (client mode): 0xd07d9300
2025-11-18T01:13:58.807 [DEBUG] [Thread-64584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:13:58.822 [DEBUG] [Thread-64584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:13:58.822 [INFO] [Thread-64584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] client lang: <none>
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] server lang: <none>
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] kex follows: False
2025-11-18T01:13:58.829 [DEBUG] [Thread-64584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:13:58.830 [DEBUG] [Thread-64584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:13:58.830 [DEBUG] [Thread-64584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:13:58.830 [DEBUG] [Thread-64584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:13:58.830 [DEBUG] [Thread-64584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:13:58.830 [DEBUG] [Thread-64584] [transport.py] [_log()] Compression: none
2025-11-18T01:13:58.830 [DEBUG] [Thread-64584] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:13:58.885 [DEBUG] [Thread-64584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:13:58.885 [DEBUG] [Thread-64584] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:13:58.885 [DEBUG] [Thread-64584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:13:58.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:13:58.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:13:58.943 [DEBUG] [Thread-64584] [transport.py] [_log()] userauth is OK
2025-11-18T01:13:58.943 [DEBUG] [Thread-64584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:13:58.943 [DEBUG] [Thread-64584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:13:58.943 [DEBUG] [Thread-64584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:13:58.943 [DEBUG] [Thread-64584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:13:58.957 [INFO] [Thread-64584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:13:58.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:13:58.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:13:59.795 [DEBUG] [Thread-64584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:13:59.795 [DEBUG] [Thread-64584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:13:59.843 [DEBUG] [Thread-64584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:13:59.843 [DEBUG] [Thread-64584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:13:59.851 [DEBUG] [Thread-64584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:13:59.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:13:59.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:13:59.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:13:59.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:13:59.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:13:59.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:13:59.883 [DEBUG] [Thread-64584] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:14:09.556 [DEBUG] [Thread-64586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:14:24.605 [DEBUG] [Thread-64587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:14:29.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:14:29.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:14:29.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:14:30.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 14, 27), 12.85, 41.27, 0.0, 19.44, 13.06, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:14:30.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:14:27
2025-11-18T01:14:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:14:30.796 [DEBUG] [Thread-64588] [transport.py] [_log()] starting thread (client mode): 0xd0710b20
2025-11-18T01:14:30.796 [DEBUG] [Thread-64588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:14:30.816 [DEBUG] [Thread-64588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:14:30.816 [INFO] [Thread-64588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:14:30.819 [DEBUG] [Thread-64588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] client lang: <none>
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] server lang: <none>
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] kex follows: False
2025-11-18T01:14:30.820 [DEBUG] [Thread-64588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:14:30.821 [DEBUG] [Thread-64588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:14:30.821 [DEBUG] [Thread-64588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:14:30.821 [DEBUG] [Thread-64588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:14:30.821 [DEBUG] [Thread-64588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:14:30.821 [DEBUG] [Thread-64588] [transport.py] [_log()] Compression: none
2025-11-18T01:14:30.821 [DEBUG] [Thread-64588] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:14:30.839 [DEBUG] [Thread-64588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:14:30.839 [DEBUG] [Thread-64588] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:14:30.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:14:30.841 [DEBUG] [Thread-64588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:14:30.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:14:30.843 [DEBUG] [Thread-64588] [transport.py] [_log()] userauth is OK
2025-11-18T01:14:30.843 [DEBUG] [Thread-64588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:14:30.843 [DEBUG] [Thread-64588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:14:30.843 [DEBUG] [Thread-64588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:14:30.843 [DEBUG] [Thread-64588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:14:30.864 [INFO] [Thread-64588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:14:30.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:14:31.536 [DEBUG] [Thread-64588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:14:31.536 [DEBUG] [Thread-64588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:14:31.536 [DEBUG] [Thread-64588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:14:31.576 [DEBUG] [Thread-64588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:14:31.577 [DEBUG] [Thread-64588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:14:31.579 [DEBUG] [Thread-64588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:14:31.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:14:31.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:14:31.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:14:31.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:14:31.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:14:31.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:14:31.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:14:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:14:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:14:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.967752 -999.00  +13.00  11.40     46   +1.60 1 1 1 1 1     0    0 13.11 67.38 ZNESW 12.4 11.4 174.2 15.5 13.5 -22.0 13.4 -21.4 13.2 -21.2 13.5 -21.7
2025-11-18T01:14:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:14:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:14:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.967752
2025-11-18T01:14:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:14:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:14:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:14:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:14:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:14:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:14:27', tmtdew=12.85, humidity=41.27, cloud=0.0, wind=19.44, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:14:27', seeing=1.68, atlas_timestamp='2025-11-17T23:13:33.773', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:11:00')
2025-11-18T01:14:31.607 [DEBUG] [Thread-64588] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:14:31.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:14:31.703 [DEBUG] [Thread-64591] [transport.py] [_log()] starting thread (client mode): 0xd07a3b20
2025-11-18T01:14:31.703 [DEBUG] [Thread-64591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:14:31.719 [DEBUG] [Thread-64591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:14:31.719 [INFO] [Thread-64591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:14:31.727 [DEBUG] [Thread-64591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:14:31.727 [DEBUG] [Thread-64591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] client lang: <none>
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] server lang: <none>
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] kex follows: False
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] Compression: none
2025-11-18T01:14:31.728 [DEBUG] [Thread-64591] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:14:31.787 [DEBUG] [Thread-64591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:14:31.787 [DEBUG] [Thread-64591] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:14:31.788 [DEBUG] [Thread-64591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:14:31.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:14:31.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:14:31.843 [DEBUG] [Thread-64591] [transport.py] [_log()] userauth is OK
2025-11-18T01:14:31.843 [DEBUG] [Thread-64591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:14:31.843 [DEBUG] [Thread-64591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:14:31.843 [DEBUG] [Thread-64591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:14:31.843 [DEBUG] [Thread-64591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:14:31.857 [INFO] [Thread-64591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:14:31.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:14:31.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:14:32.697 [DEBUG] [Thread-64591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:14:32.698 [DEBUG] [Thread-64591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:14:32.745 [DEBUG] [Thread-64591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:14:32.745 [DEBUG] [Thread-64591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:14:32.754 [DEBUG] [Thread-64591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:14:32.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:14:32.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:14:32.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:14:32.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:14:32.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:14:32.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:14:32.789 [DEBUG] [Thread-64591] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:14:36.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:14:36.126 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:14:39.635 [DEBUG] [Thread-64593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:14:54.677 [DEBUG] [Thread-64594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:14:57.729 [DEBUG] [Thread-64595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:15:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:15:02.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:15:02.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:15:03.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 14, 59), 12.72, 41.7, 0.0, 21.91, 13.04, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:15:03.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:14:59
2025-11-18T01:15:03.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:15:03.766 [DEBUG] [Thread-64596] [transport.py] [_log()] starting thread (client mode): 0xd0712740
2025-11-18T01:15:03.766 [DEBUG] [Thread-64596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:15:03.787 [DEBUG] [Thread-64596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:15:03.788 [INFO] [Thread-64596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:15:03.791 [DEBUG] [Thread-64596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:15:03.791 [DEBUG] [Thread-64596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:15:03.791 [DEBUG] [Thread-64596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:15:03.791 [DEBUG] [Thread-64596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:15:03.791 [DEBUG] [Thread-64596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:15:03.791 [DEBUG] [Thread-64596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:15:03.791 [DEBUG] [Thread-64596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:15:03.791 [DEBUG] [Thread-64596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] client lang: <none>
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] server lang: <none>
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] kex follows: False
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] Compression: none
2025-11-18T01:15:03.792 [DEBUG] [Thread-64596] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:15:03.809 [DEBUG] [Thread-64596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:15:03.809 [DEBUG] [Thread-64596] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:15:03.810 [DEBUG] [Thread-64596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:15:03.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:15:03.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:15:03.812 [DEBUG] [Thread-64596] [transport.py] [_log()] userauth is OK
2025-11-18T01:15:03.812 [DEBUG] [Thread-64596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:15:03.812 [DEBUG] [Thread-64596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:15:03.812 [DEBUG] [Thread-64596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:15:03.812 [DEBUG] [Thread-64596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:15:03.837 [INFO] [Thread-64596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:15:03.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:15:07.213 [DEBUG] [Thread-64596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:15:07.213 [DEBUG] [Thread-64596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:15:07.213 [DEBUG] [Thread-64596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:15:07.253 [DEBUG] [Thread-64596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:15:07.254 [DEBUG] [Thread-64596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:15:07.257 [DEBUG] [Thread-64596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:15:07.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:15:07.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:15:07.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:15:07.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:15:07.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:15:07.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:15:07.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:15:07.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:15:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:15:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.968099 -999.00  +13.00  13.51     46   +1.70 1 1 1 1 1     0    0 13.03 63.05 ZNESW 13.6 13.5 169.8 16.8 13.5 -21.9 13.4 -21.4 13.2 -21.3 13.4 -21.8
2025-11-18T01:15:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:15:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:15:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.968099
2025-11-18T01:15:07.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:15:07.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:15:07.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:15:07.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:15:07.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:15:07.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:14:59', tmtdew=12.72, humidity=41.7, cloud=0.0, wind=21.91, temperature=13.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:14:59', seeing=1.68, atlas_timestamp='2025-11-17T23:14:03.754', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:11:00')
2025-11-18T01:15:07.290 [DEBUG] [Thread-64596] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:15:07.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:15:07.387 [DEBUG] [Thread-64599] [transport.py] [_log()] starting thread (client mode): 0xd0710dc0
2025-11-18T01:15:07.387 [DEBUG] [Thread-64599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:15:07.401 [DEBUG] [Thread-64599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:15:07.402 [INFO] [Thread-64599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:15:07.409 [DEBUG] [Thread-64599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] client lang: <none>
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] server lang: <none>
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] kex follows: False
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] Compression: none
2025-11-18T01:15:07.410 [DEBUG] [Thread-64599] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:15:07.466 [DEBUG] [Thread-64599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:15:07.467 [DEBUG] [Thread-64599] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:15:07.467 [DEBUG] [Thread-64599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:15:07.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:15:07.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:15:07.523 [DEBUG] [Thread-64599] [transport.py] [_log()] userauth is OK
2025-11-18T01:15:07.523 [DEBUG] [Thread-64599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:15:07.523 [DEBUG] [Thread-64599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:15:07.523 [DEBUG] [Thread-64599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:15:07.523 [DEBUG] [Thread-64599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:15:07.546 [INFO] [Thread-64599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:15:07.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:15:07.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:15:08.401 [DEBUG] [Thread-64599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:15:08.401 [DEBUG] [Thread-64599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:15:08.449 [DEBUG] [Thread-64599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:15:08.449 [DEBUG] [Thread-64599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:15:08.458 [DEBUG] [Thread-64599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:15:08.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:15:08.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:15: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
2025-11-18T01:15:08.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:15:08.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:15:08.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:15:08.492 [DEBUG] [Thread-64599] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:15:09.711 [DEBUG] [Thread-64601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:15:24.760 [DEBUG] [Thread-64602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:15:36.328 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:15:36.330 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:15:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:15:38.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:15:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:15:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 15, 31), 12.76, 41.59, 0.0, 22.18, 13.04, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:15:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:15:31
2025-11-18T01:15:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:15:39.426 [DEBUG] [Thread-64603] [transport.py] [_log()] starting thread (client mode): 0xd07d99f0
2025-11-18T01:15:39.426 [DEBUG] [Thread-64603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:15:39.445 [DEBUG] [Thread-64603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:15:39.446 [INFO] [Thread-64603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:15:39.449 [DEBUG] [Thread-64603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:15:39.449 [DEBUG] [Thread-64603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] client lang: <none>
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] server lang: <none>
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] kex follows: False
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] Compression: none
2025-11-18T01:15:39.450 [DEBUG] [Thread-64603] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:15:39.466 [DEBUG] [Thread-64603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:15:39.467 [DEBUG] [Thread-64603] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:15:39.467 [DEBUG] [Thread-64603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:15:39.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:15:39.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:15:39.469 [DEBUG] [Thread-64603] [transport.py] [_log()] userauth is OK
2025-11-18T01:15:39.469 [DEBUG] [Thread-64603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:15:39.470 [DEBUG] [Thread-64603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:15:39.470 [DEBUG] [Thread-64603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:15:39.470 [DEBUG] [Thread-64603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:15:39.494 [INFO] [Thread-64603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:15:39.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:15:39.790 [DEBUG] [Thread-64605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:15:40.154 [DEBUG] [Thread-64603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:15:40.154 [DEBUG] [Thread-64603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:15:40.154 [DEBUG] [Thread-64603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:15:40.194 [DEBUG] [Thread-64603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:15:40.195 [DEBUG] [Thread-64603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:15:40.198 [DEBUG] [Thread-64603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:15:40.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:15:40.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:15:40.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:15:40.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:15:40.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:15:40.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:15:40.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:15:40.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:15:40.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:15:40.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.968793 -999.00  +12.90  14.77     46   +1.70 1 1 1 1 1     0    0 13.32 63.84 ZNESW 13.7 14.8 167.2 19.0 13.5 -22.1 13.3 -21.5 13.2 -21.3 13.4 -21.8
2025-11-18T01:15:40.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:15:40.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:15:40.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.968793
2025-11-18T01:15:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:15:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:15:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:15:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:15:40.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:15:40.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:15:31', tmtdew=12.76, humidity=41.59, cloud=0.0, wind=22.18, temperature=13.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:15:31', seeing=1.57, atlas_timestamp='2025-11-17T23:15:03.715', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:11:00')
2025-11-18T01:15:40.224 [DEBUG] [Thread-64603] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:15:40.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:15:40.320 [DEBUG] [Thread-64607] [transport.py] [_log()] starting thread (client mode): 0xd07db1f0
2025-11-18T01:15:40.320 [DEBUG] [Thread-64607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:15:40.335 [DEBUG] [Thread-64607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:15:40.335 [INFO] [Thread-64607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:15:40.342 [DEBUG] [Thread-64607] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:15:40.343 [DEBUG] [Thread-64607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:15:40.343 [DEBUG] [Thread-64607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:15:40.343 [DEBUG] [Thread-64607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:15:40.343 [DEBUG] [Thread-64607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:15:40.343 [DEBUG] [Thread-64607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:15:40.343 [DEBUG] [Thread-64607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:15:40.343 [DEBUG] [Thread-64607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:15:40.343 [DEBUG] [Thread-64607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] client lang: <none>
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] server lang: <none>
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] kex follows: False
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:15:40.344 [DEBUG] [Thread-64607] [transport.py] [_log()] Compression: none
2025-11-18T01:15:40.345 [DEBUG] [Thread-64607] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:15:40.407 [DEBUG] [Thread-64607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:15:40.408 [DEBUG] [Thread-64607] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:15:40.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:15:40.409 [DEBUG] [Thread-64607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:15:40.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:15:40.462 [DEBUG] [Thread-64607] [transport.py] [_log()] userauth is OK
2025-11-18T01:15:40.463 [DEBUG] [Thread-64607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:15:40.463 [DEBUG] [Thread-64607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:15:40.463 [DEBUG] [Thread-64607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:15:40.463 [DEBUG] [Thread-64607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:15:40.482 [INFO] [Thread-64607] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:15:40.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:15:40.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:15:41.335 [DEBUG] [Thread-64607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:15:41.335 [DEBUG] [Thread-64607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:15:41.383 [DEBUG] [Thread-64607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:15:41.383 [DEBUG] [Thread-64607] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:15:41.392 [DEBUG] [Thread-64607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:15:41.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:15:41.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:15:41.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:15:41.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:15:41.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:15:41.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:15:41.427 [DEBUG] [Thread-64607] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:15:54.816 [DEBUG] [Thread-64609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:15:57.802 [DEBUG] [Thread-64610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:16:09.852 [DEBUG] [Thread-64611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:16:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:16:11.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:16:11.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:16:12.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 16, 3), 12.76, 41.57, 0.0, 24.44, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:16:12.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:16:03
2025-11-18T01:16:12.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:16:12.364 [DEBUG] [Thread-64612] [transport.py] [_log()] starting thread (client mode): 0xd07a3610
2025-11-18T01:16:12.364 [DEBUG] [Thread-64612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:16:12.383 [DEBUG] [Thread-64612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:16:12.384 [INFO] [Thread-64612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] client lang: <none>
2025-11-18T01:16:12.387 [DEBUG] [Thread-64612] [transport.py] [_log()] server lang: <none>
2025-11-18T01:16:12.388 [DEBUG] [Thread-64612] [transport.py] [_log()] kex follows: False
2025-11-18T01:16:12.388 [DEBUG] [Thread-64612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:16:12.388 [DEBUG] [Thread-64612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:16:12.388 [DEBUG] [Thread-64612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:16:12.388 [DEBUG] [Thread-64612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:16:12.388 [DEBUG] [Thread-64612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:16:12.388 [DEBUG] [Thread-64612] [transport.py] [_log()] Compression: none
2025-11-18T01:16:12.388 [DEBUG] [Thread-64612] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:16:12.405 [DEBUG] [Thread-64612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:16:12.405 [DEBUG] [Thread-64612] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:16:12.406 [DEBUG] [Thread-64612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:16:12.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:16:12.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:16:12.408 [DEBUG] [Thread-64612] [transport.py] [_log()] userauth is OK
2025-11-18T01:16:12.408 [DEBUG] [Thread-64612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:16:12.408 [DEBUG] [Thread-64612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:16:12.408 [DEBUG] [Thread-64612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:16:12.408 [DEBUG] [Thread-64612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:16:12.432 [INFO] [Thread-64612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:16:12.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:16:13.250 [DEBUG] [Thread-64612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:16:13.251 [DEBUG] [Thread-64612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:16:13.251 [DEBUG] [Thread-64612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:16:13.291 [DEBUG] [Thread-64612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:16:13.291 [DEBUG] [Thread-64612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:16:13.298 [DEBUG] [Thread-64612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:16:13.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:16:13.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:16:13.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:16:13.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:16:13.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:16:13.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:16:13.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:16:13.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:16:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:16:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.969141 -999.00  +12.90  15.95     46   +1.80 1 1 1 1 1     0    0 12.94 54.62 ZNESW 15.2 15.9 154.4 20.6 13.4 -22.1 13.3 -21.3 13.1 -21.2 13.4 -21.6
2025-11-18T01:16:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:16:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:16:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.969141
2025-11-18T01:16:13.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:16:13.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:16:13.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:16:13.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:16:13.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:16:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:16:03', tmtdew=12.76, humidity=41.57, cloud=0.0, wind=24.44, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:16:03', seeing=1.63, atlas_timestamp='2025-11-17T23:15:33.782', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:11:00')
2025-11-18T01:16:13.316 [DEBUG] [Thread-64612] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:16:13.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:16:13.413 [DEBUG] [Thread-64615] [transport.py] [_log()] starting thread (client mode): 0xd07abd30
2025-11-18T01:16:13.413 [DEBUG] [Thread-64615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:16:13.428 [DEBUG] [Thread-64615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:16:13.428 [INFO] [Thread-64615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:16:13.435 [DEBUG] [Thread-64615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] client lang: <none>
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] server lang: <none>
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] kex follows: False
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] Compression: none
2025-11-18T01:16:13.436 [DEBUG] [Thread-64615] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:16:13.495 [DEBUG] [Thread-64615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:16:13.495 [DEBUG] [Thread-64615] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:16:13.496 [DEBUG] [Thread-64615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:16:13.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:16:13.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:16:13.551 [DEBUG] [Thread-64615] [transport.py] [_log()] userauth is OK
2025-11-18T01:16:13.551 [DEBUG] [Thread-64615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:16:13.551 [DEBUG] [Thread-64615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:16:13.551 [DEBUG] [Thread-64615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:16:13.551 [DEBUG] [Thread-64615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:16:13.570 [INFO] [Thread-64615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:16:13.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:16:13.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:16:14.431 [DEBUG] [Thread-64615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:16:14.431 [DEBUG] [Thread-64615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:16:14.479 [DEBUG] [Thread-64615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:16:14.479 [DEBUG] [Thread-64615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:16:14.488 [DEBUG] [Thread-64615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:16:14.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:16:14.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:16: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') -> 00000000
2025-11-18T01:16:14.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:16:14.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:16:14.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:16:14.522 [DEBUG] [Thread-64615] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:16:24.878 [DEBUG] [Thread-64617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:16:31.080 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:16:36.530 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:16:36.531 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:16:39.922 [DEBUG] [Thread-64618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:16:44.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:16:44.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:16:44.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:16:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 16, 35), 12.66, 41.7, 0.0, 18.83, 12.94, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:16:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:16:35
2025-11-18T01:16:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:16:45.463 [DEBUG] [Thread-64619] [transport.py] [_log()] starting thread (client mode): 0xd07db1f0
2025-11-18T01:16:45.464 [DEBUG] [Thread-64619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:16:45.483 [DEBUG] [Thread-64619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:16:45.483 [INFO] [Thread-64619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:16:45.487 [DEBUG] [Thread-64619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] client lang: <none>
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] server lang: <none>
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] kex follows: False
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] Compression: none
2025-11-18T01:16:45.488 [DEBUG] [Thread-64619] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:16:45.504 [DEBUG] [Thread-64619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:16:45.505 [DEBUG] [Thread-64619] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:16:45.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:16:45.505 [DEBUG] [Thread-64619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:16:45.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:16:45.507 [DEBUG] [Thread-64619] [transport.py] [_log()] userauth is OK
2025-11-18T01:16:45.508 [DEBUG] [Thread-64619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:16:45.508 [DEBUG] [Thread-64619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:16:45.508 [DEBUG] [Thread-64619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:16:45.508 [DEBUG] [Thread-64619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:16:45.526 [INFO] [Thread-64619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:16:45.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:16:46.112 [DEBUG] [Thread-64619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:16:46.113 [DEBUG] [Thread-64619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:16:46.113 [DEBUG] [Thread-64619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:16:46.153 [DEBUG] [Thread-64619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:16:46.153 [DEBUG] [Thread-64619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:16:46.156 [DEBUG] [Thread-64619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:16:46.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:16:46.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:16:46.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:16:46.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:16:46.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:16:46.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:16:46.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:16:46.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:16:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:16:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.969488 -999.00  +13.00  13.95     47   +2.00 1 1 1 1 1     0    0 12.72 52.84 ZNESW 16.6 13.9 160.2 24.4 13.5 -22.0 13.3 -21.3 13.1 -21.1 13.4 -21.5
2025-11-18T01:16:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:16:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:16:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.969488
2025-11-18T01:16:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:16:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:16:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:16:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:16:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:16:46.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:16:35', tmtdew=12.66, humidity=41.7, cloud=0.0, wind=18.83, temperature=12.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:16:35', seeing=1.63, atlas_timestamp='2025-11-17T23:16:03.763', atlas_cloud=1, atlas_rain=1, zp_data=[0.38175000000000026, 0.42325000000000124, 0.23925000000000018, 0.2524999999999995, 0.30549999999999855, 0.4767500000000009, 0.38949999999999996, 0.33225000000000193, 0.4064999999999994, 0.4275000000000002, 0.2632499999999993, 0.17549999999999955, 0.26500000000000057, 0.4317499999999992, 0.40199999999999925, 0.41699999999999804, 0.45725000000000016, 0.5149999999999988, 0.34149999999999814, 0.23574999999999946, 0.1949999999999985, 0.3882499999999993, 0.28825000000000145, 0.16774999999999984, 0.46749999999999936, 0.7595000000000001, 0.5147500000000003, 0.5810000000000004, 0.3070000000000004, 0.5390000000000024, 0.17300000000000182, -0.04400000000000048, 0.05474999999999852], zp_timestamp='2025-11-17T23:11:00')
2025-11-18T01:16:46.181 [DEBUG] [Thread-64619] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:16:46.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:16:46.277 [DEBUG] [Thread-64622] [transport.py] [_log()] starting thread (client mode): 0xd07d8fa0
2025-11-18T01:16:46.277 [DEBUG] [Thread-64622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:16:46.291 [DEBUG] [Thread-64622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:16:46.292 [INFO] [Thread-64622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] client lang: <none>
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] server lang: <none>
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] kex follows: False
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:16:46.299 [DEBUG] [Thread-64622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:16:46.300 [DEBUG] [Thread-64622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:16:46.300 [DEBUG] [Thread-64622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:16:46.300 [DEBUG] [Thread-64622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:16:46.300 [DEBUG] [Thread-64622] [transport.py] [_log()] Compression: none
2025-11-18T01:16:46.300 [DEBUG] [Thread-64622] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:16:46.359 [DEBUG] [Thread-64622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:16:46.359 [DEBUG] [Thread-64622] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:16:46.360 [DEBUG] [Thread-64622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:16:46.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:16:46.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:16:46.415 [DEBUG] [Thread-64622] [transport.py] [_log()] userauth is OK
2025-11-18T01:16:46.415 [DEBUG] [Thread-64622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:16:46.415 [DEBUG] [Thread-64622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:16:46.415 [DEBUG] [Thread-64622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:16:46.415 [DEBUG] [Thread-64622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:16:46.435 [INFO] [Thread-64622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:16:46.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:16:46.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:16:47.309 [DEBUG] [Thread-64622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:16:47.309 [DEBUG] [Thread-64622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:16:47.356 [DEBUG] [Thread-64622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:16:47.356 [DEBUG] [Thread-64622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:16:47.365 [DEBUG] [Thread-64622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:16:47.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:16: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')
2025-11-18T01:16:47.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:16:47.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:16:47.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:16:47.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:16:47.399 [DEBUG] [Thread-64622] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:16:54.953 [DEBUG] [Thread-64624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:16:57.860 [DEBUG] [Thread-64625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:17:09.994 [DEBUG] [Thread-64626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:17:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:17:17.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:17:17.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:17:18.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 17, 7), 12.6, 41.89, 0.0, 21.1, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:17:18.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:17:07
2025-11-18T01:17:18.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:17:18.336 [DEBUG] [Thread-64627] [transport.py] [_log()] starting thread (client mode): 0xd07a3760
2025-11-18T01:17:18.336 [DEBUG] [Thread-64627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:17:18.356 [DEBUG] [Thread-64627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:17:18.356 [INFO] [Thread-64627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:17:18.359 [DEBUG] [Thread-64627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:17:18.359 [DEBUG] [Thread-64627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:17:18.359 [DEBUG] [Thread-64627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:17:18.359 [DEBUG] [Thread-64627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:17:18.359 [DEBUG] [Thread-64627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:17:18.359 [DEBUG] [Thread-64627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:17:18.359 [DEBUG] [Thread-64627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] client lang: <none>
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] server lang: <none>
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] kex follows: False
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] Compression: none
2025-11-18T01:17:18.360 [DEBUG] [Thread-64627] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:17:18.380 [DEBUG] [Thread-64627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:17:18.381 [DEBUG] [Thread-64627] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:17:18.381 [DEBUG] [Thread-64627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:17:18.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:17:18.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:17:18.383 [DEBUG] [Thread-64627] [transport.py] [_log()] userauth is OK
2025-11-18T01:17:18.384 [DEBUG] [Thread-64627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:17:18.384 [DEBUG] [Thread-64627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:17:18.384 [DEBUG] [Thread-64627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:17:18.384 [DEBUG] [Thread-64627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:17:18.404 [INFO] [Thread-64627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:17:18.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:17:19.244 [DEBUG] [Thread-64627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:17:19.245 [DEBUG] [Thread-64627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:17:19.245 [DEBUG] [Thread-64627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:17:19.285 [DEBUG] [Thread-64627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:17:19.285 [DEBUG] [Thread-64627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:17:19.288 [DEBUG] [Thread-64627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:17:19.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:17:19.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:17:19.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:17:19.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:17:19.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:17:19.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:17:19.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:17:19.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:17:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:17:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.969835 -999.00  +13.00  17.37     47   +1.90 1 1 1 1 1     0    0 12.63 47.45 ZNESW 17.6 17.4 166.2 20.8 13.4 -22.1 13.4 -21.4 13.1 -21.2 13.4 -21.7
2025-11-18T01:17:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:17:19.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:17:19.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.969835
2025-11-18T01:17:19.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:17:19.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:17:19.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:17:19.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:17:19.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:17:19.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:17:07', tmtdew=12.6, humidity=41.89, cloud=0.0, wind=21.1, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:17:07', seeing=1.77, atlas_timestamp='2025-11-17T23:16:33.744', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:15:00')
2025-11-18T01:17:19.310 [DEBUG] [Thread-64627] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:17:19.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:17:19.409 [DEBUG] [Thread-64630] [transport.py] [_log()] starting thread (client mode): 0xd317f580
2025-11-18T01:17:19.409 [DEBUG] [Thread-64630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:17:19.425 [DEBUG] [Thread-64630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:17:19.425 [INFO] [Thread-64630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:17:19.433 [DEBUG] [Thread-64630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:17:19.434 [DEBUG] [Thread-64630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:17:19.434 [DEBUG] [Thread-64630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:17:19.434 [DEBUG] [Thread-64630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:17:19.434 [DEBUG] [Thread-64630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:17:19.434 [DEBUG] [Thread-64630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:17:19.434 [DEBUG] [Thread-64630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:17:19.434 [DEBUG] [Thread-64630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] client lang: <none>
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] server lang: <none>
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] kex follows: False
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:17:19.435 [DEBUG] [Thread-64630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:17:19.436 [DEBUG] [Thread-64630] [transport.py] [_log()] Compression: none
2025-11-18T01:17:19.436 [DEBUG] [Thread-64630] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:17:19.491 [DEBUG] [Thread-64630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:17:19.492 [DEBUG] [Thread-64630] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:17:19.493 [DEBUG] [Thread-64630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:17:19.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:17:19.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:17:19.547 [DEBUG] [Thread-64630] [transport.py] [_log()] userauth is OK
2025-11-18T01:17:19.547 [DEBUG] [Thread-64630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:17:19.548 [DEBUG] [Thread-64630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:17:19.548 [DEBUG] [Thread-64630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:17:19.548 [DEBUG] [Thread-64630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:17:19.567 [INFO] [Thread-64630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:17:19.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:17:19.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:17:20.384 [DEBUG] [Thread-64630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:17:20.384 [DEBUG] [Thread-64630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:17:20.431 [DEBUG] [Thread-64630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:17:20.431 [DEBUG] [Thread-64630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:17:20.440 [DEBUG] [Thread-64630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:17:20.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:17:20.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:17:20.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
2025-11-18T01:17:20.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:17:20.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:17:20.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:17:20.476 [DEBUG] [Thread-64630] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:17:25.023 [DEBUG] [Thread-64632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:17:36.734 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:17:36.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:17:40.064 [DEBUG] [Thread-64633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:17:50.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:17:50.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:17:50.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:17:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 17, 39), 12.54, 42.09, 0.0, 20.29, 12.98, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:17:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:17:39
2025-11-18T01:17:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:17:51.438 [DEBUG] [Thread-64634] [transport.py] [_log()] starting thread (client mode): 0xd0711390
2025-11-18T01:17:51.438 [DEBUG] [Thread-64634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:17:51.459 [DEBUG] [Thread-64634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:17:51.459 [INFO] [Thread-64634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] client lang: <none>
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] server lang: <none>
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] kex follows: False
2025-11-18T01:17:51.462 [DEBUG] [Thread-64634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:17:51.463 [DEBUG] [Thread-64634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:17:51.463 [DEBUG] [Thread-64634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:17:51.463 [DEBUG] [Thread-64634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:17:51.463 [DEBUG] [Thread-64634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:17:51.463 [DEBUG] [Thread-64634] [transport.py] [_log()] Compression: none
2025-11-18T01:17:51.463 [DEBUG] [Thread-64634] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:17:51.477 [DEBUG] [Thread-64634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:17:51.477 [DEBUG] [Thread-64634] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:17:51.477 [DEBUG] [Thread-64634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:17:51.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:17:51.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:17:51.479 [DEBUG] [Thread-64634] [transport.py] [_log()] userauth is OK
2025-11-18T01:17:51.479 [DEBUG] [Thread-64634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:17:51.479 [DEBUG] [Thread-64634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:17:51.479 [DEBUG] [Thread-64634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:17:51.479 [DEBUG] [Thread-64634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:17:51.492 [INFO] [Thread-64634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:17:51.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:17:52.102 [DEBUG] [Thread-64634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:17:52.103 [DEBUG] [Thread-64634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:17:52.103 [DEBUG] [Thread-64634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:17:52.143 [DEBUG] [Thread-64634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:17:52.143 [DEBUG] [Thread-64634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:17:52.146 [DEBUG] [Thread-64634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:17:52.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:17:52.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:17:52.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:17:52.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:17:52.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:17:52.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:17:52.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:17:52.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:17:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:17:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.970182 -999.00  +13.00  13.60     46   +1.90 1 1 1 1 1     0    0 12.45 42.28 ZNESW 14.1 13.6 151.6 19.1 13.5 -22.1 13.3 -21.4 13.1 -21.2 13.4 -21.8
2025-11-18T01:17:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:17:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:17:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.970182
2025-11-18T01:17:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:17:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:17:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:17:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:17:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:17:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:17:39', tmtdew=12.54, humidity=42.09, cloud=0.0, wind=20.29, temperature=12.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:17:39', seeing=1.75, atlas_timestamp='2025-11-17T23:17:03.725', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:15:00')
2025-11-18T01:17:52.170 [DEBUG] [Thread-64634] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:17:52.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:17:52.265 [DEBUG] [Thread-64637] [transport.py] [_log()] starting thread (client mode): 0xd07103d0
2025-11-18T01:17:52.265 [DEBUG] [Thread-64637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:17:52.280 [DEBUG] [Thread-64637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:17:52.280 [INFO] [Thread-64637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:17:52.287 [DEBUG] [Thread-64637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] client lang: <none>
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] server lang: <none>
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] kex follows: False
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:17:52.288 [DEBUG] [Thread-64637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:17:52.289 [DEBUG] [Thread-64637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:17:52.289 [DEBUG] [Thread-64637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:17:52.289 [DEBUG] [Thread-64637] [transport.py] [_log()] Compression: none
2025-11-18T01:17:52.289 [DEBUG] [Thread-64637] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:17:52.346 [DEBUG] [Thread-64637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:17:52.347 [DEBUG] [Thread-64637] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:17:52.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:17:52.347 [DEBUG] [Thread-64637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:17:52.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:17:52.403 [DEBUG] [Thread-64637] [transport.py] [_log()] userauth is OK
2025-11-18T01:17:52.404 [DEBUG] [Thread-64637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:17:52.404 [DEBUG] [Thread-64637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:17:52.404 [DEBUG] [Thread-64637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:17:52.404 [DEBUG] [Thread-64637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:17:52.423 [INFO] [Thread-64637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:17:52.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:17:52.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:17:53.270 [DEBUG] [Thread-64637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:17:53.270 [DEBUG] [Thread-64637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:17:53.317 [DEBUG] [Thread-64637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:17:53.317 [DEBUG] [Thread-64637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:17:53.327 [DEBUG] [Thread-64637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:17:53.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:17:53.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:17:53.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:17:53.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:17:53.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:17:53.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:17:53.362 [DEBUG] [Thread-64637] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:17:55.090 [DEBUG] [Thread-64639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:17:57.917 [DEBUG] [Thread-64640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:18:10.136 [DEBUG] [Thread-64641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:18:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:18:23.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:18:23.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:18:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 18, 11), 12.57, 42.0, 0.0, 20.1, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:18:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:18:11
2025-11-18T01:18:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:18:24.263 [DEBUG] [Thread-64642] [transport.py] [_log()] starting thread (client mode): 0xd0711390
2025-11-18T01:18:24.263 [DEBUG] [Thread-64642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:18:24.284 [DEBUG] [Thread-64642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:18:24.284 [INFO] [Thread-64642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:18:24.286 [DEBUG] [Thread-64642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] client lang: <none>
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] server lang: <none>
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] kex follows: False
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] Compression: none
2025-11-18T01:18:24.287 [DEBUG] [Thread-64642] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:18:24.299 [DEBUG] [Thread-64642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:18:24.299 [DEBUG] [Thread-64642] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:18:24.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:18:24.300 [DEBUG] [Thread-64642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:18:24.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:18:24.302 [DEBUG] [Thread-64642] [transport.py] [_log()] userauth is OK
2025-11-18T01:18:24.302 [DEBUG] [Thread-64642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:18:24.302 [DEBUG] [Thread-64642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:18:24.302 [DEBUG] [Thread-64642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:18:24.302 [DEBUG] [Thread-64642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:18:24.326 [INFO] [Thread-64642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:18:24.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:18:25.166 [DEBUG] [Thread-64644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:18:25.173 [DEBUG] [Thread-64642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:18:25.173 [DEBUG] [Thread-64642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:18:25.173 [DEBUG] [Thread-64642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:18:25.214 [DEBUG] [Thread-64642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:18:25.214 [DEBUG] [Thread-64642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:18:25.216 [DEBUG] [Thread-64642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:18:25.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:18:25.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:18:25.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:18:25.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:18:25.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:18:25.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:18:25.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.970529 -999.00  +13.00   9.55     46   +1.90 1 1 1 1 1     0    0 12.46 38.92 ZNESW 10.2 9.6 169.5 20.3 13.5 -22.3 13.3 -21.4 13.1 -21.2 13.4 -22.0
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.970529
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:18:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:18:11', tmtdew=12.57, humidity=42.0, cloud=0.0, wind=20.1, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:18:11', seeing=1.74, atlas_timestamp='2025-11-17T23:17:33.706', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:15:00')
2025-11-18T01:18:25.236 [DEBUG] [Thread-64642] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:18:25.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:18:25.320 [DEBUG] [Thread-64646] [transport.py] [_log()] starting thread (client mode): 0xd07a9b40
2025-11-18T01:18:25.321 [DEBUG] [Thread-64646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:18:25.335 [DEBUG] [Thread-64646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:18:25.336 [INFO] [Thread-64646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] client lang: <none>
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] server lang: <none>
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] kex follows: False
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] Compression: none
2025-11-18T01:18:25.343 [DEBUG] [Thread-64646] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:18:25.401 [DEBUG] [Thread-64646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:18:25.402 [DEBUG] [Thread-64646] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:18:25.402 [DEBUG] [Thread-64646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:18:25.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:18:25.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:18:25.462 [DEBUG] [Thread-64646] [transport.py] [_log()] userauth is OK
2025-11-18T01:18:25.462 [DEBUG] [Thread-64646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:18:25.462 [DEBUG] [Thread-64646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:18:25.462 [DEBUG] [Thread-64646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:18:25.462 [DEBUG] [Thread-64646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:18:25.477 [INFO] [Thread-64646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:18:25.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:18:25.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:18:26.327 [DEBUG] [Thread-64646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:18:26.327 [DEBUG] [Thread-64646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:18:26.376 [DEBUG] [Thread-64646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:18:26.376 [DEBUG] [Thread-64646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:18:26.384 [DEBUG] [Thread-64646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:18:26.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:18:26.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:18:26.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:18:26.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:18:26.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:18:26.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:18:26.415 [DEBUG] [Thread-64646] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:18:36.938 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:18:36.939 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:18:40.191 [DEBUG] [Thread-64648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:18:55.241 [DEBUG] [Thread-64649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:18:56.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:18:56.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:18:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:18:57.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 18, 43), 12.52, 42.17, 0.0, 20.08, 13.13, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:18:57.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:18:43
2025-11-18T01:18:57.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:18:57.346 [DEBUG] [Thread-64650] [transport.py] [_log()] starting thread (client mode): 0xd317ce50
2025-11-18T01:18:57.346 [DEBUG] [Thread-64650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:18:57.367 [DEBUG] [Thread-64650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:18:57.367 [INFO] [Thread-64650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] client lang: <none>
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] server lang: <none>
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] kex follows: False
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:18:57.370 [DEBUG] [Thread-64650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:18:57.371 [DEBUG] [Thread-64650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:18:57.371 [DEBUG] [Thread-64650] [transport.py] [_log()] Compression: none
2025-11-18T01:18:57.371 [DEBUG] [Thread-64650] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:18:57.390 [DEBUG] [Thread-64650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:18:57.390 [DEBUG] [Thread-64650] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:18:57.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:18:57.391 [DEBUG] [Thread-64650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:18:57.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:18:57.393 [DEBUG] [Thread-64650] [transport.py] [_log()] userauth is OK
2025-11-18T01:18:57.393 [DEBUG] [Thread-64650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:18:57.393 [DEBUG] [Thread-64650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:18:57.393 [DEBUG] [Thread-64650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:18:57.393 [DEBUG] [Thread-64650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:18:57.417 [INFO] [Thread-64650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:18:57.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:18:57.973 [DEBUG] [Thread-64652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:18:58.061 [DEBUG] [Thread-64650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:18:58.061 [DEBUG] [Thread-64650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:18:58.061 [DEBUG] [Thread-64650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:18:58.102 [DEBUG] [Thread-64650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:18:58.103 [DEBUG] [Thread-64650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:18:58.106 [DEBUG] [Thread-64650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:18:58.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:18:58.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:18:58.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:18:58.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:18:58.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:18:58.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:18:58.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:18:58.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:18:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:18:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.971224 -999.00  +12.90  12.39     46   +1.80 1 1 1 1 1     0    0 12.01 30.82 ZNESW 12.3 12.4 165.5 17.5 13.4 -22.2 13.3 -21.3 13.1 -21.3 13.4 -21.9
2025-11-18T01:18:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:18:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:18:58.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.971224
2025-11-18T01:18:58.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:18:58.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:18:58.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:18:58.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:18:58.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:18:58.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:18:43', tmtdew=12.52, humidity=42.17, cloud=0.0, wind=20.08, temperature=13.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:18:43', seeing=1.52, atlas_timestamp='2025-11-17T23:18:33.754', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:15:00')
2025-11-18T01:18:58.132 [DEBUG] [Thread-64650] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:18:58.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:18:58.229 [DEBUG] [Thread-64654] [transport.py] [_log()] starting thread (client mode): 0xd0701c90
2025-11-18T01:18:58.229 [DEBUG] [Thread-64654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:18:58.244 [DEBUG] [Thread-64654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:18:58.244 [INFO] [Thread-64654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:18:58.252 [DEBUG] [Thread-64654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:18:58.252 [DEBUG] [Thread-64654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:18:58.252 [DEBUG] [Thread-64654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:18:58.252 [DEBUG] [Thread-64654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:18:58.252 [DEBUG] [Thread-64654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] client lang: <none>
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] server lang: <none>
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] kex follows: False
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:18:58.253 [DEBUG] [Thread-64654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:18:58.254 [DEBUG] [Thread-64654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:18:58.254 [DEBUG] [Thread-64654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:18:58.254 [DEBUG] [Thread-64654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:18:58.254 [DEBUG] [Thread-64654] [transport.py] [_log()] Compression: none
2025-11-18T01:18:58.254 [DEBUG] [Thread-64654] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:18:58.311 [DEBUG] [Thread-64654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:18:58.311 [DEBUG] [Thread-64654] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:18:58.312 [DEBUG] [Thread-64654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:18:58.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:18:58.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:18:58.367 [DEBUG] [Thread-64654] [transport.py] [_log()] userauth is OK
2025-11-18T01:18:58.367 [DEBUG] [Thread-64654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:18:58.367 [DEBUG] [Thread-64654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:18:58.367 [DEBUG] [Thread-64654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:18:58.367 [DEBUG] [Thread-64654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:18:58.386 [INFO] [Thread-64654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:18:58.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:18:58.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:18:59.263 [DEBUG] [Thread-64654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:18:59.263 [DEBUG] [Thread-64654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:18:59.310 [DEBUG] [Thread-64654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:18:59.310 [DEBUG] [Thread-64654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:18:59.319 [DEBUG] [Thread-64654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:18:59.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:18:59.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:18:59.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:18:59.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:18:59.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:18:59.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:18:59.354 [DEBUG] [Thread-64654] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:19:10.270 [DEBUG] [Thread-64656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:19:25.315 [DEBUG] [Thread-64657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:19:29.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:19:29.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:19:29.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:19:30.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 19, 15), 12.54, 42.1, 0.0, 20.91, 13.1, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:19:30.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:19:15
2025-11-18T01:19:30.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:19:30.285 [DEBUG] [Thread-64658] [transport.py] [_log()] starting thread (client mode): 0xd0711390
2025-11-18T01:19:30.285 [DEBUG] [Thread-64658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:19:30.305 [DEBUG] [Thread-64658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:19:30.305 [INFO] [Thread-64658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:19:30.308 [DEBUG] [Thread-64658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:19:30.308 [DEBUG] [Thread-64658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:19:30.308 [DEBUG] [Thread-64658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:19:30.308 [DEBUG] [Thread-64658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] client lang: <none>
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] server lang: <none>
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] kex follows: False
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] Compression: none
2025-11-18T01:19:30.309 [DEBUG] [Thread-64658] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:19:30.317 [DEBUG] [Thread-64658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:19:30.318 [DEBUG] [Thread-64658] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:19:30.318 [DEBUG] [Thread-64658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:19:30.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:19:30.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:19:30.320 [DEBUG] [Thread-64658] [transport.py] [_log()] userauth is OK
2025-11-18T01:19:30.320 [DEBUG] [Thread-64658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:19:30.320 [DEBUG] [Thread-64658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:19:30.320 [DEBUG] [Thread-64658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:19:30.320 [DEBUG] [Thread-64658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:19:30.344 [INFO] [Thread-64658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:19:30.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:19:31.141 [DEBUG] [Thread-64658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:19:31.142 [DEBUG] [Thread-64658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:19:31.142 [DEBUG] [Thread-64658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:19:31.182 [DEBUG] [Thread-64658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:19:31.182 [DEBUG] [Thread-64658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:19:31.185 [DEBUG] [Thread-64658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:19:31.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:19:31.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:19:31.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:19:31.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:19:31.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:19:31.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:19:31.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:19:31.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:19:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:19:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.971571 -999.00  +12.90  13.57     47   +1.90 1 1 1 1 1     0    0 12.32 27.75 ZNESW 13.2 13.6 169.6 17.6 13.4 -22.2 13.3 -21.3 13.1 -21.2 13.4 -21.8
2025-11-18T01:19:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:19:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:19:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.971571
2025-11-18T01:19:31.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:19:31.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:19:31.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:19:31.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:19:31.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:19:31.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:19:15', tmtdew=12.54, humidity=42.1, cloud=0.0, wind=20.91, temperature=13.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:19:15', seeing=1.52, atlas_timestamp='2025-11-17T23:19:03.734', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:15:00')
2025-11-18T01:19:31.210 [DEBUG] [Thread-64658] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:19:31.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:19:31.306 [DEBUG] [Thread-64661] [transport.py] [_log()] starting thread (client mode): 0xd31cf4f0
2025-11-18T01:19:31.306 [DEBUG] [Thread-64661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:19:31.324 [DEBUG] [Thread-64661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:19:31.324 [INFO] [Thread-64661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:19:31.331 [DEBUG] [Thread-64661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:19:31.332 [DEBUG] [Thread-64661] [transport.py] [_log()] client lang: <none>
2025-11-18T01:19:31.333 [DEBUG] [Thread-64661] [transport.py] [_log()] server lang: <none>
2025-11-18T01:19:31.333 [DEBUG] [Thread-64661] [transport.py] [_log()] kex follows: False
2025-11-18T01:19:31.333 [DEBUG] [Thread-64661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:19:31.333 [DEBUG] [Thread-64661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:19:31.333 [DEBUG] [Thread-64661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:19:31.333 [DEBUG] [Thread-64661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:19:31.333 [DEBUG] [Thread-64661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:19:31.333 [DEBUG] [Thread-64661] [transport.py] [_log()] Compression: none
2025-11-18T01:19:31.334 [DEBUG] [Thread-64661] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:19:31.392 [DEBUG] [Thread-64661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:19:31.392 [DEBUG] [Thread-64661] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:19:31.393 [DEBUG] [Thread-64661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:19:31.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:19:31.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:19:31.447 [DEBUG] [Thread-64661] [transport.py] [_log()] userauth is OK
2025-11-18T01:19:31.447 [DEBUG] [Thread-64661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:19:31.447 [DEBUG] [Thread-64661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:19:31.448 [DEBUG] [Thread-64661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:19:31.448 [DEBUG] [Thread-64661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:19:31.467 [INFO] [Thread-64661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:19:31.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:19:31.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:19:32.323 [DEBUG] [Thread-64661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:19:32.324 [DEBUG] [Thread-64661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:19:32.371 [DEBUG] [Thread-64661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:19:32.372 [DEBUG] [Thread-64661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:19:32.381 [DEBUG] [Thread-64661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:19:32.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:19:32.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:19:32.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:19:32.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:19:32.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:19:32.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:19:32.411 [DEBUG] [Thread-64661] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:19:37.141 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:19:37.142 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:19:40.347 [DEBUG] [Thread-64663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:19:55.381 [DEBUG] [Thread-64664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:19:58.036 [DEBUG] [Thread-64665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:20:02.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:20:02.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:20:02.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:20:03.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 19, 47), 12.54, 42.09, 0.0, 19.8, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:20:03.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:19:47
2025-11-18T01:20:03.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:20:03.360 [DEBUG] [Thread-64666] [transport.py] [_log()] starting thread (client mode): 0xd07a9570
2025-11-18T01:20:03.361 [DEBUG] [Thread-64666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:20:03.380 [DEBUG] [Thread-64666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:20:03.381 [INFO] [Thread-64666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] client lang: <none>
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] server lang: <none>
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] kex follows: False
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] Compression: none
2025-11-18T01:20:03.384 [DEBUG] [Thread-64666] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:20:03.393 [DEBUG] [Thread-64666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:20:03.393 [DEBUG] [Thread-64666] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:20:03.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:20:03.394 [DEBUG] [Thread-64666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:20:03.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:20:03.395 [DEBUG] [Thread-64666] [transport.py] [_log()] userauth is OK
2025-11-18T01:20:03.395 [DEBUG] [Thread-64666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:20:03.396 [DEBUG] [Thread-64666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:20:03.396 [DEBUG] [Thread-64666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:20:03.396 [DEBUG] [Thread-64666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:20:03.411 [INFO] [Thread-64666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:20:03.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:20:04.516 [DEBUG] [Thread-64666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:20:04.516 [DEBUG] [Thread-64666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:20:04.516 [DEBUG] [Thread-64666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:20:04.557 [DEBUG] [Thread-64666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:20:04.557 [DEBUG] [Thread-64666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:20:04.560 [DEBUG] [Thread-64666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:20:04.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:20:04.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:20:04.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:20:04.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:20:04.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:20:04.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:20:04.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:20:04.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:20:04.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:20:04.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.971918 -999.00  +12.90  11.30     47   +1.90 1 1 1 1 1     0    0 11.94 24.59 ZNESW 12.5 11.3 153.2 16.4 13.4 -22.2 13.3 -21.3 13.1 -21.1 13.4 -21.8
2025-11-18T01:20:04.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:20:04.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:20:04.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.971918
2025-11-18T01:20:04.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:20:04.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:20:04.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:20:04.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:20:04.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:20:04.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:19:47', tmtdew=12.54, humidity=42.09, cloud=0.0, wind=19.8, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:19:48', seeing=1.79, atlas_timestamp='2025-11-17T23:19:33.715', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:19:00')
2025-11-18T01:20:04.611 [DEBUG] [Thread-64666] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:20:04.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:20:04.708 [DEBUG] [Thread-64669] [transport.py] [_log()] starting thread (client mode): 0xd07aba60
2025-11-18T01:20:04.708 [DEBUG] [Thread-64669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:20:04.727 [DEBUG] [Thread-64669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:20:04.727 [INFO] [Thread-64669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:20:04.734 [DEBUG] [Thread-64669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] client lang: <none>
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] server lang: <none>
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] kex follows: False
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] Compression: none
2025-11-18T01:20:04.735 [DEBUG] [Thread-64669] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:20:04.790 [DEBUG] [Thread-64669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:20:04.791 [DEBUG] [Thread-64669] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:20:04.791 [DEBUG] [Thread-64669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:20:04.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:20:04.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:20:04.847 [DEBUG] [Thread-64669] [transport.py] [_log()] userauth is OK
2025-11-18T01:20:04.847 [DEBUG] [Thread-64669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:20:04.847 [DEBUG] [Thread-64669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:20:04.847 [DEBUG] [Thread-64669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:20:04.848 [DEBUG] [Thread-64669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:20:04.867 [INFO] [Thread-64669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:20:04.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:20:04.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:20:05.701 [DEBUG] [Thread-64669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:20:05.701 [DEBUG] [Thread-64669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:20:05.748 [DEBUG] [Thread-64669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:20:05.749 [DEBUG] [Thread-64669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:20:05.757 [DEBUG] [Thread-64669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:20:05.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:20:05.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:20:05.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:20:05.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:20:05.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:20:05.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:20:05.793 [DEBUG] [Thread-64669] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:20:10.413 [DEBUG] [Thread-64671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:20:25.450 [DEBUG] [Thread-64672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:20:35.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:20:35.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:20:35.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:20:36.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 20, 20), 12.53, 42.14, 0.0, 19.36, 13.06, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:20:36.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:20:20
2025-11-18T01:20:36.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:20:36.676 [DEBUG] [Thread-64673] [transport.py] [_log()] starting thread (client mode): 0xd0711360
2025-11-18T01:20:36.676 [DEBUG] [Thread-64673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:20:36.696 [DEBUG] [Thread-64673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:20:36.696 [INFO] [Thread-64673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:20:36.699 [DEBUG] [Thread-64673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] client lang: <none>
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] server lang: <none>
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] kex follows: False
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] Compression: none
2025-11-18T01:20:36.700 [DEBUG] [Thread-64673] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:20:36.722 [DEBUG] [Thread-64673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:20:36.722 [DEBUG] [Thread-64673] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:20:36.723 [DEBUG] [Thread-64673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:20:36.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:20:36.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:20:36.725 [DEBUG] [Thread-64673] [transport.py] [_log()] userauth is OK
2025-11-18T01:20:36.725 [DEBUG] [Thread-64673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:20:36.725 [DEBUG] [Thread-64673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:20:36.725 [DEBUG] [Thread-64673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:20:36.725 [DEBUG] [Thread-64673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:20:36.760 [INFO] [Thread-64673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:20:36.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:20:37.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:20:37.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:20:37.381 [DEBUG] [Thread-64673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:20:37.382 [DEBUG] [Thread-64673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:20:37.382 [DEBUG] [Thread-64673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:20:37.422 [DEBUG] [Thread-64673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:20:37.422 [DEBUG] [Thread-64673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:20:37.425 [DEBUG] [Thread-64673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:20:37.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:20:37.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:20:37.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:20:37.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:20:37.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:20:37.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:20:37.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:20:37.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:20:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:20:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.972265 -999.00  +12.90  13.35     47   +1.80 1 1 1 1 1     0    0 11.97 21.27 ZNESW 17.1 13.3 161.6 16.2 13.4 -22.2 13.3 -21.2 13.1 -20.9 13.4 -21.8
2025-11-18T01:20:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:20:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:20:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.972265
2025-11-18T01:20:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:20:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:20:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:20:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:20:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:20:37.446 [DEBUG] [Thread-64673] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:20:37.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:20:20', tmtdew=12.53, humidity=42.14, cloud=0.0, wind=19.36, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:20:20', seeing=1.73, atlas_timestamp='2025-11-17T23:20:03.696', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:19:00')
2025-11-18T01:20:37.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:20:37.544 [DEBUG] [Thread-64676] [transport.py] [_log()] starting thread (client mode): 0xd317e9b0
2025-11-18T01:20:37.545 [DEBUG] [Thread-64676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:20:37.565 [DEBUG] [Thread-64676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:20:37.565 [INFO] [Thread-64676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:20:37.572 [DEBUG] [Thread-64676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:20:37.572 [DEBUG] [Thread-64676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:20:37.572 [DEBUG] [Thread-64676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:20:37.572 [DEBUG] [Thread-64676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:20:37.572 [DEBUG] [Thread-64676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:20:37.572 [DEBUG] [Thread-64676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] client lang: <none>
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] server lang: <none>
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] kex follows: False
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] Compression: none
2025-11-18T01:20:37.573 [DEBUG] [Thread-64676] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:20:37.630 [DEBUG] [Thread-64676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:20:37.631 [DEBUG] [Thread-64676] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:20:37.631 [DEBUG] [Thread-64676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:20:37.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:20:37.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:20:37.687 [DEBUG] [Thread-64676] [transport.py] [_log()] userauth is OK
2025-11-18T01:20:37.687 [DEBUG] [Thread-64676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:20:37.687 [DEBUG] [Thread-64676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:20:37.687 [DEBUG] [Thread-64676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:20:37.687 [DEBUG] [Thread-64676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:20:37.711 [INFO] [Thread-64676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:20:37.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:20:37.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:20:38.656 [DEBUG] [Thread-64676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:20:38.656 [DEBUG] [Thread-64676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:20:38.706 [DEBUG] [Thread-64676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:20:38.706 [DEBUG] [Thread-64676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:20:38.714 [DEBUG] [Thread-64676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:20:38.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:20:38.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:20: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
2025-11-18T01:20:38.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:20:38.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:20:38.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:20:38.759 [DEBUG] [Thread-64676] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:20:40.476 [DEBUG] [Thread-64678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:20:55.514 [DEBUG] [Thread-64679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:20:58.093 [DEBUG] [Thread-64680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:21:08.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:21:08.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:21:08.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:21:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 20, 52), 12.64, 41.92, 0.0, 19.21, 13.01, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:21:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:20:52
2025-11-18T01:21:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:21:09.681 [DEBUG] [Thread-64681] [transport.py] [_log()] starting thread (client mode): 0xd31cc880
2025-11-18T01:21:09.682 [DEBUG] [Thread-64681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:21:09.702 [DEBUG] [Thread-64681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:21:09.702 [INFO] [Thread-64681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:21:09.705 [DEBUG] [Thread-64681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:21:09.705 [DEBUG] [Thread-64681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:21:09.705 [DEBUG] [Thread-64681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] client lang: <none>
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] server lang: <none>
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] kex follows: False
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:21:09.706 [DEBUG] [Thread-64681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:21:09.707 [DEBUG] [Thread-64681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:21:09.707 [DEBUG] [Thread-64681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:21:09.707 [DEBUG] [Thread-64681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:21:09.707 [DEBUG] [Thread-64681] [transport.py] [_log()] Compression: none
2025-11-18T01:21:09.707 [DEBUG] [Thread-64681] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:21:09.724 [DEBUG] [Thread-64681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:21:09.725 [DEBUG] [Thread-64681] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:21:09.725 [DEBUG] [Thread-64681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:21:09.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:21:09.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:21:09.727 [DEBUG] [Thread-64681] [transport.py] [_log()] userauth is OK
2025-11-18T01:21:09.728 [DEBUG] [Thread-64681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:21:09.728 [DEBUG] [Thread-64681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:21:09.728 [DEBUG] [Thread-64681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:21:09.728 [DEBUG] [Thread-64681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:21:09.746 [INFO] [Thread-64681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:21:09.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:21:10.380 [DEBUG] [Thread-64681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:21:10.380 [DEBUG] [Thread-64681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:21:10.381 [DEBUG] [Thread-64681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:21:10.421 [DEBUG] [Thread-64681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:21:10.422 [DEBUG] [Thread-64681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:21:10.424 [DEBUG] [Thread-64681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:21:10.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:21:10.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:21:10.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:21:10.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:21:10.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:21:10.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:21:10.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:21:10.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:21:10.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:21:10.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.972613 -999.00  +12.90  14.41     46   +1.80 1 1 1 1 1     0    0 11.78 16.43 ZNESW 15.7 14.4 169.0 20.3 13.4 -22.2 13.3 -21.2 13.1 -20.9 13.4 -21.9
2025-11-18T01:21:10.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:21:10.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:21:10.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.972613
2025-11-18T01:21:10.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:21:10.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:21:10.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:21:10.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:21:10.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:21:10.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:20:52', tmtdew=12.64, humidity=41.92, cloud=0.0, wind=19.21, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:20:52', seeing=1.63, atlas_timestamp='2025-11-17T23:20:33.763', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:19:00')
2025-11-18T01:21:10.448 [DEBUG] [Thread-64681] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:21:10.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:21:10.543 [DEBUG] [Thread-64684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:21:10.544 [DEBUG] [Thread-64685] [transport.py] [_log()] starting thread (client mode): 0xd317fb80
2025-11-18T01:21:10.544 [DEBUG] [Thread-64685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:21:10.560 [DEBUG] [Thread-64685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:21:10.560 [INFO] [Thread-64685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:21:10.567 [DEBUG] [Thread-64685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:21:10.567 [DEBUG] [Thread-64685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:21:10.567 [DEBUG] [Thread-64685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] client lang: <none>
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] server lang: <none>
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] kex follows: False
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:21:10.568 [DEBUG] [Thread-64685] [transport.py] [_log()] Compression: none
2025-11-18T01:21:10.569 [DEBUG] [Thread-64685] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:21:10.627 [DEBUG] [Thread-64685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:21:10.628 [DEBUG] [Thread-64685] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:21:10.628 [DEBUG] [Thread-64685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:21:10.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:21:10.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:21:10.684 [DEBUG] [Thread-64685] [transport.py] [_log()] userauth is OK
2025-11-18T01:21:10.684 [DEBUG] [Thread-64685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:21:10.684 [DEBUG] [Thread-64685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:21:10.684 [DEBUG] [Thread-64685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:21:10.684 [DEBUG] [Thread-64685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:21:10.703 [INFO] [Thread-64685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:21:10.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:21:10.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:21:11.580 [DEBUG] [Thread-64685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:21:11.581 [DEBUG] [Thread-64685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:21:11.628 [DEBUG] [Thread-64685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:21:11.628 [DEBUG] [Thread-64685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:21:11.637 [DEBUG] [Thread-64685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:21:11.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:21:11.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:21:11.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:21:11.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:21:11.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:21:11.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:21:11.670 [DEBUG] [Thread-64685] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:21:25.576 [DEBUG] [Thread-64687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:21:37.547 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:21:37.548 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:21:40.601 [DEBUG] [Thread-64688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:21:41.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:21:41.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:21:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:21:42.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 21, 24), 12.67, 41.84, 0.0, 17.68, 12.98, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:21:42.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:21:24
2025-11-18T01:21:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:21:42.626 [DEBUG] [Thread-64689] [transport.py] [_log()] starting thread (client mode): 0xd07aba60
2025-11-18T01:21:42.626 [DEBUG] [Thread-64689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:21:42.646 [DEBUG] [Thread-64689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:21:42.646 [INFO] [Thread-64689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:21:42.650 [DEBUG] [Thread-64689] [transport.py] [_log()] client lang: <none>
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] server lang: <none>
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] kex follows: False
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] Compression: none
2025-11-18T01:21:42.651 [DEBUG] [Thread-64689] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:21:42.658 [DEBUG] [Thread-64689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:21:42.658 [DEBUG] [Thread-64689] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:21:42.658 [DEBUG] [Thread-64689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:21:42.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:21:42.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:21:42.659 [DEBUG] [Thread-64689] [transport.py] [_log()] userauth is OK
2025-11-18T01:21:42.659 [DEBUG] [Thread-64689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:21:42.660 [DEBUG] [Thread-64689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:21:42.660 [DEBUG] [Thread-64689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:21:42.660 [DEBUG] [Thread-64689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:21:42.669 [INFO] [Thread-64689] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:21:42.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:21:43.294 [DEBUG] [Thread-64689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:21:43.294 [DEBUG] [Thread-64689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:21:43.294 [DEBUG] [Thread-64689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:21:43.335 [DEBUG] [Thread-64689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:21:43.335 [DEBUG] [Thread-64689] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:21:43.337 [DEBUG] [Thread-64689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:21:43.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:21:43.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:21:43.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:21:43.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:21:43.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:21:43.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:21:43.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:21:43.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:21:43.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:21:43.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.972960 -999.00  +12.90  12.62     47   +1.90 1 1 1 1 1     0    0 11.70 13.07 ZNESW 13.9 12.6 164.6 20.0 13.4 -22.1 13.3 -21.0 13.1 -20.8 13.3 -21.6
2025-11-18T01:21:43.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:21:43.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:21:43.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.972960
2025-11-18T01:21:43.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:21:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:21:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:21:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:21:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:21:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:21:24', tmtdew=12.67, humidity=41.84, cloud=0.0, wind=17.68, temperature=12.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:21:24', seeing=1.63, atlas_timestamp='2025-11-17T23:21:03.744', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:19:00')
2025-11-18T01:21:43.354 [DEBUG] [Thread-64689] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:21:43.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:21:43.440 [DEBUG] [Thread-64692] [transport.py] [_log()] starting thread (client mode): 0xd07abd90
2025-11-18T01:21:43.440 [DEBUG] [Thread-64692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:21:43.455 [DEBUG] [Thread-64692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:21:43.455 [INFO] [Thread-64692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:21:43.462 [DEBUG] [Thread-64692] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:21:43.462 [DEBUG] [Thread-64692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:21:43.462 [DEBUG] [Thread-64692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:21:43.462 [DEBUG] [Thread-64692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:21:43.462 [DEBUG] [Thread-64692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] client lang: <none>
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] server lang: <none>
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] kex follows: False
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] Compression: none
2025-11-18T01:21:43.463 [DEBUG] [Thread-64692] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:21:43.519 [DEBUG] [Thread-64692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:21:43.519 [DEBUG] [Thread-64692] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:21:43.520 [DEBUG] [Thread-64692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:21:43.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:21:43.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:21:43.575 [DEBUG] [Thread-64692] [transport.py] [_log()] userauth is OK
2025-11-18T01:21:43.576 [DEBUG] [Thread-64692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:21:43.576 [DEBUG] [Thread-64692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:21:43.576 [DEBUG] [Thread-64692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:21:43.576 [DEBUG] [Thread-64692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:21:43.596 [INFO] [Thread-64692] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:21:43.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:21:43.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:21:44.567 [DEBUG] [Thread-64692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:21:44.567 [DEBUG] [Thread-64692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:21:44.615 [DEBUG] [Thread-64692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:21:44.615 [DEBUG] [Thread-64692] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:21:44.624 [DEBUG] [Thread-64692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:21:44.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:21:44.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:21:44.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:21:44.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:21:44.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:21:44.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:21:44.658 [DEBUG] [Thread-64692] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:21:55.628 [DEBUG] [Thread-64694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:21:58.170 [DEBUG] [Thread-64695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:22:10.669 [DEBUG] [Thread-64696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:22:14.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:22:14.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:22:14.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:22:15.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 21, 56), 12.64, 41.79, 0.0, 15.3, 12.95, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:22:15.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:21:56
2025-11-18T01:22:15.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:22:15.584 [DEBUG] [Thread-64697] [transport.py] [_log()] starting thread (client mode): 0xd31cfb20
2025-11-18T01:22:15.584 [DEBUG] [Thread-64697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:22:15.603 [DEBUG] [Thread-64697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:22:15.604 [INFO] [Thread-64697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] client lang: <none>
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] server lang: <none>
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] kex follows: False
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] Compression: none
2025-11-18T01:22:15.607 [DEBUG] [Thread-64697] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:22:15.625 [DEBUG] [Thread-64697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:22:15.626 [DEBUG] [Thread-64697] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:22:15.626 [DEBUG] [Thread-64697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:22:15.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:22:15.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:22:15.628 [DEBUG] [Thread-64697] [transport.py] [_log()] userauth is OK
2025-11-18T01:22:15.628 [DEBUG] [Thread-64697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:22:15.628 [DEBUG] [Thread-64697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:22:15.628 [DEBUG] [Thread-64697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:22:15.628 [DEBUG] [Thread-64697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:22:15.652 [INFO] [Thread-64697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:22:15.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:22:16.291 [DEBUG] [Thread-64697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:22:16.291 [DEBUG] [Thread-64697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:22:16.291 [DEBUG] [Thread-64697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:22:16.332 [DEBUG] [Thread-64697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:22:16.332 [DEBUG] [Thread-64697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:22:16.334 [DEBUG] [Thread-64697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:22:16.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:22:16.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:22:16.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:22:16.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:22:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:22:16.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:22:16.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.973655 -999.00  +12.90  12.90     47   +1.90 1 1 1 1 1     0    0 11.34 6.00 ZNESW 12.2 12.9 149.2 20.8 13.4 -22.1 13.3 -21.0 13.1 -20.9 13.4 -22.0
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.973655
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:22:16.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:21:56', tmtdew=12.64, humidity=41.79, cloud=0.0, wind=15.3, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:21:56', seeing=1.58, atlas_timestamp='2025-11-17T23:22:03.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:19:00')
2025-11-18T01:22:16.352 [DEBUG] [Thread-64697] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:22:16.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:22:16.440 [DEBUG] [Thread-64700] [transport.py] [_log()] starting thread (client mode): 0xd07011e0
2025-11-18T01:22:16.440 [DEBUG] [Thread-64700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:22:16.457 [DEBUG] [Thread-64700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:22:16.457 [INFO] [Thread-64700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:22:16.464 [DEBUG] [Thread-64700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] client lang: <none>
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] server lang: <none>
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] kex follows: False
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] Compression: none
2025-11-18T01:22:16.465 [DEBUG] [Thread-64700] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:22:16.525 [DEBUG] [Thread-64700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:22:16.525 [DEBUG] [Thread-64700] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:22:16.525 [DEBUG] [Thread-64700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:22:16.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:22:16.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:22:16.583 [DEBUG] [Thread-64700] [transport.py] [_log()] userauth is OK
2025-11-18T01:22:16.583 [DEBUG] [Thread-64700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:22:16.583 [DEBUG] [Thread-64700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:22:16.583 [DEBUG] [Thread-64700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:22:16.583 [DEBUG] [Thread-64700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:22:16.602 [INFO] [Thread-64700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:22:16.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:22:16.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:22:17.527 [DEBUG] [Thread-64700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:22:17.536 [DEBUG] [Thread-64700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:22:17.575 [DEBUG] [Thread-64700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:22:17.575 [DEBUG] [Thread-64700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:22:17.583 [DEBUG] [Thread-64700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:22:17.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:22:17.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:22:17.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:22:17.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:22:17.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:22:17.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:22:17.615 [DEBUG] [Thread-64700] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:22:25.697 [DEBUG] [Thread-64702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:22:32.106 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:22:37.752 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:22:37.753 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:22:40.739 [DEBUG] [Thread-64703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:22:47.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:22:47.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:22:47.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:22:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 22, 28), 12.64, 41.75, 0.0, 15.9, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:22:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:22:28
2025-11-18T01:22:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:22:48.551 [DEBUG] [Thread-64704] [transport.py] [_log()] starting thread (client mode): 0xd0702770
2025-11-18T01:22:48.551 [DEBUG] [Thread-64704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:22:48.569 [DEBUG] [Thread-64704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:22:48.570 [INFO] [Thread-64704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:22:48.573 [DEBUG] [Thread-64704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:22:48.573 [DEBUG] [Thread-64704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:22:48.573 [DEBUG] [Thread-64704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:22:48.573 [DEBUG] [Thread-64704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:22:48.573 [DEBUG] [Thread-64704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:22:48.573 [DEBUG] [Thread-64704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:22:48.573 [DEBUG] [Thread-64704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:22:48.573 [DEBUG] [Thread-64704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] client lang: <none>
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] server lang: <none>
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] kex follows: False
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] Compression: none
2025-11-18T01:22:48.574 [DEBUG] [Thread-64704] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:22:48.589 [DEBUG] [Thread-64704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:22:48.590 [DEBUG] [Thread-64704] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:22:48.590 [DEBUG] [Thread-64704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:22:48.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:22:48.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:22:48.592 [DEBUG] [Thread-64704] [transport.py] [_log()] userauth is OK
2025-11-18T01:22:48.592 [DEBUG] [Thread-64704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:22:48.592 [DEBUG] [Thread-64704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:22:48.592 [DEBUG] [Thread-64704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:22:48.593 [DEBUG] [Thread-64704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:22:48.624 [INFO] [Thread-64704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:22:48.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:22:49.236 [DEBUG] [Thread-64704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:22:49.236 [DEBUG] [Thread-64704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:22:49.237 [DEBUG] [Thread-64704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:22:49.278 [DEBUG] [Thread-64704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:22:49.278 [DEBUG] [Thread-64704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:22:49.280 [DEBUG] [Thread-64704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:22:49.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:22:49.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:22:49.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:22:49.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:22:49.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:22:49.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:22:49.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:22:49.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:22:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:22:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.974002 -999.00  +12.90  15.07     46   +1.90 1 1 1 1 1     0    0 11.50 3.47 ZNESW 12.6 15.1 165.6 19.8 13.4 -22.1 13.3 -21.1 13.0 -20.8 13.4 -21.9
2025-11-18T01:22:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:22:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:22:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.974002
2025-11-18T01:22:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:22:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:22:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:22:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:22:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:22:49.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:22:28', tmtdew=12.64, humidity=41.75, cloud=0.0, wind=15.9, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:22:28', seeing=1.58, atlas_timestamp='2025-11-17T23:22:33.773', atlas_cloud=1, atlas_rain=1, zp_data=[0.12725000000000009, 0.1772500000000008, 0.17125000000000057, 0.14300000000000068, 0.10749999999999993, 0.2552500000000002, 0.1980000000000004, 0.1692499999999999, 0.20449999999999946, 0.19500000000000028, 0.21924999999999883, 0.14449999999999896, 0.238999999999999, 0.2342499999999994, 0.22999999999999865, 0.30299999999999905, 0.2997499999999995, 0.23150000000000048, 0.3179999999999996, 0.22924999999999862, 0.27149999999999963, 0.26924999999999955, 0.5782500000000006, 0.7707500000000005, 0.5064999999999991, 0.4605000000000006, 0.5787500000000003, 0.7265000000000006, 0.5410000000000004, 0.36100000000000065, 0.5140000000000011, 0.22350000000000136, 0.4367499999999991], zp_timestamp='2025-11-17T23:19:00')
2025-11-18T01:22:49.308 [DEBUG] [Thread-64704] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:22:49.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:22:49.402 [DEBUG] [Thread-64707] [transport.py] [_log()] starting thread (client mode): 0xd31cf8b0
2025-11-18T01:22:49.402 [DEBUG] [Thread-64707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:22:49.418 [DEBUG] [Thread-64707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:22:49.418 [INFO] [Thread-64707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:22:49.425 [DEBUG] [Thread-64707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] client lang: <none>
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] server lang: <none>
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] kex follows: False
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] Compression: none
2025-11-18T01:22:49.426 [DEBUG] [Thread-64707] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:22:49.482 [DEBUG] [Thread-64707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:22:49.483 [DEBUG] [Thread-64707] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:22:49.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:22:49.484 [DEBUG] [Thread-64707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:22:49.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:22:49.539 [DEBUG] [Thread-64707] [transport.py] [_log()] userauth is OK
2025-11-18T01:22:49.540 [DEBUG] [Thread-64707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:22:49.540 [DEBUG] [Thread-64707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:22:49.540 [DEBUG] [Thread-64707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:22:49.540 [DEBUG] [Thread-64707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:22:49.559 [INFO] [Thread-64707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:22:49.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:22:49.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:22:50.465 [DEBUG] [Thread-64707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:22:50.465 [DEBUG] [Thread-64707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:22:50.513 [DEBUG] [Thread-64707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:22:50.513 [DEBUG] [Thread-64707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:22:50.522 [DEBUG] [Thread-64707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:22:50.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:22:50.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:22:50.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:22:50.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:22:50.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:22:50.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:22:50.555 [DEBUG] [Thread-64707] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:22:55.766 [DEBUG] [Thread-64709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:22:58.240 [DEBUG] [Thread-64710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:23:10.796 [DEBUG] [Thread-64711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:23:20.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:23:20.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:23:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:23:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 22, 28), 12.64, 41.75, 0.0, 15.9, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:23:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:22:28
2025-11-18T01:23:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:23:21.485 [DEBUG] [Thread-64712] [transport.py] [_log()] starting thread (client mode): 0xd317c0d0
2025-11-18T01:23:21.485 [DEBUG] [Thread-64712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:23:21.504 [DEBUG] [Thread-64712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:23:21.505 [INFO] [Thread-64712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:23:21.507 [DEBUG] [Thread-64712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:23:21.507 [DEBUG] [Thread-64712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:23:21.507 [DEBUG] [Thread-64712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] client lang: <none>
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] server lang: <none>
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] kex follows: False
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] Compression: none
2025-11-18T01:23:21.508 [DEBUG] [Thread-64712] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:23:21.525 [DEBUG] [Thread-64712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:23:21.525 [DEBUG] [Thread-64712] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:23:21.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:23:21.526 [DEBUG] [Thread-64712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:23:21.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:23:21.528 [DEBUG] [Thread-64712] [transport.py] [_log()] userauth is OK
2025-11-18T01:23:21.528 [DEBUG] [Thread-64712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:23:21.529 [DEBUG] [Thread-64712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:23:21.529 [DEBUG] [Thread-64712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:23:21.529 [DEBUG] [Thread-64712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:23:21.546 [INFO] [Thread-64712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:23:21.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:23:22.230 [DEBUG] [Thread-64712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:23:22.230 [DEBUG] [Thread-64712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:23:22.231 [DEBUG] [Thread-64712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:23:22.272 [DEBUG] [Thread-64712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:23:22.272 [DEBUG] [Thread-64712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:23:22.275 [DEBUG] [Thread-64712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:23:22.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:23:22.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:23:22.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:23:22.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:23:22.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:23:22.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:23:22.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:23:22.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:23:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:23:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.974349 -999.00  +12.90  11.26     47   +1.80 1 1 1 1 1     0    0 11.18 0.57 ZNESW 11.8 11.3 168.4 16.6 13.4 -22.1 13.3 -21.0 13.1 -20.8 13.4 -21.9
2025-11-18T01:23:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:23:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:23:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.974349
2025-11-18T01:23:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:23:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:23:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:23:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:23:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:23:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:22:28', tmtdew=12.64, humidity=41.75, cloud=0.0, wind=15.9, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:23:00', seeing=1.76, atlas_timestamp='2025-11-17T23:23:03.754', atlas_cloud=1, atlas_rain=1, zp_data=[0.14974999999999916, 0.1772500000000008, 0.11625000000000085, 0.18049999999999855, 0.20950000000000024, 0.15625, 0.07699999999999996, 0.04875000000000185, 0.15149999999999864, 0.19100000000000072, 0.2552500000000002, 0.22000000000000064, 0.3049999999999997, 0.15174999999999805, 0.051000000000000156, 0.09699999999999953, 0.12274999999999991, 0.1875, 0.4245000000000001, 0.3822499999999991, 0.29299999999999926, 0.1842499999999987, 0.21025000000000027, 0.35724999999999874, 0.22699999999999854, 0.3265000000000011, 0.6592500000000001, 0.7365000000000004, 0.47000000000000064, 0.23000000000000043, 0.604000000000001, 0.572000000000001, 0.5462499999999988], zp_timestamp='2025-11-17T23:21:00')
2025-11-18T01:23:22.298 [DEBUG] [Thread-64712] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:23:22.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:23:22.395 [DEBUG] [Thread-64715] [transport.py] [_log()] starting thread (client mode): 0xd3162b60
2025-11-18T01:23:22.395 [DEBUG] [Thread-64715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:23:22.410 [DEBUG] [Thread-64715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:23:22.410 [INFO] [Thread-64715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:23:22.417 [DEBUG] [Thread-64715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] client lang: <none>
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] server lang: <none>
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] kex follows: False
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] Compression: none
2025-11-18T01:23:22.418 [DEBUG] [Thread-64715] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:23:22.481 [DEBUG] [Thread-64715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:23:22.481 [DEBUG] [Thread-64715] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:23:22.481 [DEBUG] [Thread-64715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:23:22.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:23:22.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:23:22.544 [DEBUG] [Thread-64715] [transport.py] [_log()] userauth is OK
2025-11-18T01:23:22.544 [DEBUG] [Thread-64715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:23:22.544 [DEBUG] [Thread-64715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:23:22.544 [DEBUG] [Thread-64715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:23:22.544 [DEBUG] [Thread-64715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:23:22.567 [INFO] [Thread-64715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:23:22.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:23:22.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:23:23.438 [DEBUG] [Thread-64715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:23:23.438 [DEBUG] [Thread-64715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:23:23.485 [DEBUG] [Thread-64715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:23:23.485 [DEBUG] [Thread-64715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:23:23.494 [DEBUG] [Thread-64715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:23:23.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:23:23.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:23:23.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:23:23.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:23:23.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:23:23.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:23:23.529 [DEBUG] [Thread-64715] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:23:25.824 [DEBUG] [Thread-64717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:23:37.966 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:23:37.967 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:23:40.872 [DEBUG] [Thread-64718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:23:53.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:23:53.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:23:53.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:23:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 23, 32), 12.52, 42.47, 0.0, 18.83, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:23:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:23:32
2025-11-18T01:23:54.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:23:54.439 [DEBUG] [Thread-64719] [transport.py] [_log()] starting thread (client mode): 0xd3163e80
2025-11-18T01:23:54.439 [DEBUG] [Thread-64719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:23:54.459 [DEBUG] [Thread-64719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:23:54.460 [INFO] [Thread-64719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:23:54.462 [DEBUG] [Thread-64719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] client lang: <none>
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] server lang: <none>
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] kex follows: False
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] Compression: none
2025-11-18T01:23:54.463 [DEBUG] [Thread-64719] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:23:54.475 [DEBUG] [Thread-64719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:23:54.476 [DEBUG] [Thread-64719] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:23:54.476 [DEBUG] [Thread-64719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:23:54.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:23:54.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:23:54.478 [DEBUG] [Thread-64719] [transport.py] [_log()] userauth is OK
2025-11-18T01:23:54.478 [DEBUG] [Thread-64719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:23:54.478 [DEBUG] [Thread-64719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:23:54.478 [DEBUG] [Thread-64719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:23:54.478 [DEBUG] [Thread-64719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:23:54.502 [INFO] [Thread-64719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:23:54.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:23:55.086 [DEBUG] [Thread-64719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:23:55.086 [DEBUG] [Thread-64719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:23:55.087 [DEBUG] [Thread-64719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:23:55.127 [DEBUG] [Thread-64719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:23:55.128 [DEBUG] [Thread-64719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:23:55.130 [DEBUG] [Thread-64719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:23:55.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:23:55.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:23:55.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:23:55.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:23:55.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:23:55.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:23:55.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:23:55.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:23:55.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:23:55.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.974696 -999.00  +12.90  17.11     48   +2.20 1 1 1 1 1     0    0 11.27 -3.92 ZNESW 16.1 17.1 160.6 22.1 13.4 -22.0 13.3 -20.9 13.1 -20.7 13.4 -21.8
2025-11-18T01:23:55.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:23:55.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:23:55.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.974696
2025-11-18T01:23:55.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:23:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:23:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:23:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:23:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:23:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:23:32', tmtdew=12.52, humidity=42.47, cloud=0.0, wind=18.83, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:23:32', seeing=1.96, atlas_timestamp='2025-11-17T23:23:33.734', atlas_cloud=1, atlas_rain=1, zp_data=[0.14974999999999916, 0.1772500000000008, 0.11625000000000085, 0.18049999999999855, 0.20950000000000024, 0.15625, 0.07699999999999996, 0.04875000000000185, 0.15149999999999864, 0.19100000000000072, 0.2552500000000002, 0.22000000000000064, 0.3049999999999997, 0.15174999999999805, 0.051000000000000156, 0.09699999999999953, 0.12274999999999991, 0.1875, 0.4245000000000001, 0.3822499999999991, 0.29299999999999926, 0.1842499999999987, 0.21025000000000027, 0.35724999999999874, 0.22699999999999854, 0.3265000000000011, 0.6592500000000001, 0.7365000000000004, 0.47000000000000064, 0.23000000000000043, 0.604000000000001, 0.572000000000001, 0.5462499999999988], zp_timestamp='2025-11-17T23:21:00')
2025-11-18T01:23:55.154 [DEBUG] [Thread-64719] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:23:55.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:23:55.250 [DEBUG] [Thread-64722] [transport.py] [_log()] starting thread (client mode): 0xd3163a60
2025-11-18T01:23:55.250 [DEBUG] [Thread-64722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:23:55.265 [DEBUG] [Thread-64722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:23:55.265 [INFO] [Thread-64722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:23:55.273 [DEBUG] [Thread-64722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:23:55.273 [DEBUG] [Thread-64722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:23:55.273 [DEBUG] [Thread-64722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:23:55.273 [DEBUG] [Thread-64722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:23:55.273 [DEBUG] [Thread-64722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:23:55.273 [DEBUG] [Thread-64722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:23:55.273 [DEBUG] [Thread-64722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] client lang: <none>
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] server lang: <none>
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] kex follows: False
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:23:55.274 [DEBUG] [Thread-64722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:23:55.275 [DEBUG] [Thread-64722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:23:55.275 [DEBUG] [Thread-64722] [transport.py] [_log()] Compression: none
2025-11-18T01:23:55.275 [DEBUG] [Thread-64722] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:23:55.332 [DEBUG] [Thread-64722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:23:55.332 [DEBUG] [Thread-64722] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:23:55.333 [DEBUG] [Thread-64722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:23:55.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:23:55.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:23:55.391 [DEBUG] [Thread-64722] [transport.py] [_log()] userauth is OK
2025-11-18T01:23:55.391 [DEBUG] [Thread-64722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:23:55.392 [DEBUG] [Thread-64722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:23:55.392 [DEBUG] [Thread-64722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:23:55.392 [DEBUG] [Thread-64722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:23:55.411 [INFO] [Thread-64722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:23:55.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:23:55.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:23:55.903 [DEBUG] [Thread-64724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:23:56.240 [DEBUG] [Thread-64722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:23:56.241 [DEBUG] [Thread-64722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:23:56.288 [DEBUG] [Thread-64722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:23:56.288 [DEBUG] [Thread-64722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:23:56.297 [DEBUG] [Thread-64722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:23:56.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:23:56.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:23:56.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:23:56.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:23:56.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:23:56.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:23:56.332 [DEBUG] [Thread-64722] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:23:58.318 [DEBUG] [Thread-64725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:24:10.945 [DEBUG] [Thread-64726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:24:25.973 [DEBUG] [Thread-64727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:24:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:24:26.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:24:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:24:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 24, 4), 12.57, 42.32, 0.0, 18.58, 12.86, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:24:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:24:04
2025-11-18T01:24:27.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:24:27.251 [DEBUG] [Thread-64728] [transport.py] [_log()] starting thread (client mode): 0xd3163070
2025-11-18T01:24:27.251 [DEBUG] [Thread-64728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:24:27.272 [DEBUG] [Thread-64728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:24:27.272 [INFO] [Thread-64728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:24:27.275 [DEBUG] [Thread-64728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] client lang: <none>
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] server lang: <none>
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] kex follows: False
2025-11-18T01:24:27.276 [DEBUG] [Thread-64728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:24:27.277 [DEBUG] [Thread-64728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:24:27.277 [DEBUG] [Thread-64728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:24:27.277 [DEBUG] [Thread-64728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:24:27.277 [DEBUG] [Thread-64728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:24:27.277 [DEBUG] [Thread-64728] [transport.py] [_log()] Compression: none
2025-11-18T01:24:27.277 [DEBUG] [Thread-64728] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:24:27.296 [DEBUG] [Thread-64728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:24:27.297 [DEBUG] [Thread-64728] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:24:27.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:24:27.298 [DEBUG] [Thread-64728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:24:27.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:24:27.300 [DEBUG] [Thread-64728] [transport.py] [_log()] userauth is OK
2025-11-18T01:24:27.301 [DEBUG] [Thread-64728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:24:27.301 [DEBUG] [Thread-64728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:24:27.301 [DEBUG] [Thread-64728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:24:27.301 [DEBUG] [Thread-64728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:24:27.334 [INFO] [Thread-64728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:24:27.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:24:27.985 [DEBUG] [Thread-64728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:24:27.985 [DEBUG] [Thread-64728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:24:27.985 [DEBUG] [Thread-64728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:24:28.026 [DEBUG] [Thread-64728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:24:28.026 [DEBUG] [Thread-64728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:24:28.029 [DEBUG] [Thread-64728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:24:28.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:24:28.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:24:28.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:24:28.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:24:28.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:24:28.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:24:28.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:24:28.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:24:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:24:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.974696 -999.00  +12.90  17.11     48   +2.20 1 1 1 1 1     0    0 11.27 -3.92 ZNESW 16.1 17.1 160.6 22.1 13.4 -22.0 13.3 -20.9 13.1 -20.7 13.4 -21.8
2025-11-18T01:24:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:24:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:24:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.974696
2025-11-18T01:24:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:24:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:24:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:24:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:24:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:24:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:24:04', tmtdew=12.57, humidity=42.32, cloud=0.0, wind=18.58, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:24:04', seeing=1.55, atlas_timestamp='2025-11-17T23:23:33.734', atlas_cloud=1, atlas_rain=1, zp_data=[0.14974999999999916, 0.1772500000000008, 0.11625000000000085, 0.18049999999999855, 0.20950000000000024, 0.15625, 0.07699999999999996, 0.04875000000000185, 0.15149999999999864, 0.19100000000000072, 0.2552500000000002, 0.22000000000000064, 0.3049999999999997, 0.15174999999999805, 0.051000000000000156, 0.09699999999999953, 0.12274999999999991, 0.1875, 0.4245000000000001, 0.3822499999999991, 0.29299999999999926, 0.1842499999999987, 0.21025000000000027, 0.35724999999999874, 0.22699999999999854, 0.3265000000000011, 0.6592500000000001, 0.7365000000000004, 0.47000000000000064, 0.23000000000000043, 0.604000000000001, 0.572000000000001, 0.5462499999999988], zp_timestamp='2025-11-17T23:21:00')
2025-11-18T01:24:28.055 [DEBUG] [Thread-64728] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:24:28.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:24:28.151 [DEBUG] [Thread-64731] [transport.py] [_log()] starting thread (client mode): 0xd3153490
2025-11-18T01:24:28.151 [DEBUG] [Thread-64731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:24:28.166 [DEBUG] [Thread-64731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:24:28.166 [INFO] [Thread-64731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:24:28.174 [DEBUG] [Thread-64731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:24:28.174 [DEBUG] [Thread-64731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:24:28.174 [DEBUG] [Thread-64731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:24:28.174 [DEBUG] [Thread-64731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:24:28.174 [DEBUG] [Thread-64731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] client lang: <none>
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] server lang: <none>
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] kex follows: False
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] Compression: none
2025-11-18T01:24:28.175 [DEBUG] [Thread-64731] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:24:28.230 [DEBUG] [Thread-64731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:24:28.231 [DEBUG] [Thread-64731] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:24:28.231 [DEBUG] [Thread-64731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:24:28.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:24:28.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:24:28.287 [DEBUG] [Thread-64731] [transport.py] [_log()] userauth is OK
2025-11-18T01:24:28.287 [DEBUG] [Thread-64731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:24:28.287 [DEBUG] [Thread-64731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:24:28.287 [DEBUG] [Thread-64731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:24:28.288 [DEBUG] [Thread-64731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:24:28.307 [INFO] [Thread-64731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:24:28.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:24:28.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:24:29.209 [DEBUG] [Thread-64731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:24:29.209 [DEBUG] [Thread-64731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:24:29.257 [DEBUG] [Thread-64731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:24:29.257 [DEBUG] [Thread-64731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:24:29.266 [DEBUG] [Thread-64731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:24:29.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:24:29.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:24:29.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:24:29.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:24:29.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:24:29.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:24:29.308 [DEBUG] [Thread-64731] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:24:38.169 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:24:38.170 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:24:41.008 [DEBUG] [Thread-64733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:24:56.046 [DEBUG] [Thread-64734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:24:58.390 [DEBUG] [Thread-64735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:24:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:24:59.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:24:59.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:24:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 24, 36), 12.49, 42.39, 0.0, 17.08, 12.86, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:24:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:24:36
2025-11-18T01:25:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:25:00.233 [DEBUG] [Thread-64736] [transport.py] [_log()] starting thread (client mode): 0xd3160700
2025-11-18T01:25:00.233 [DEBUG] [Thread-64736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:25:00.254 [DEBUG] [Thread-64736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:25:00.254 [INFO] [Thread-64736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:25:00.257 [DEBUG] [Thread-64736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:25:00.257 [DEBUG] [Thread-64736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:25:00.257 [DEBUG] [Thread-64736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] client lang: <none>
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] server lang: <none>
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] kex follows: False
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] Compression: none
2025-11-18T01:25:00.258 [DEBUG] [Thread-64736] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:25:00.274 [DEBUG] [Thread-64736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:25:00.275 [DEBUG] [Thread-64736] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:25:00.275 [DEBUG] [Thread-64736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:25:00.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:25:00.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:25:00.277 [DEBUG] [Thread-64736] [transport.py] [_log()] userauth is OK
2025-11-18T01:25:00.277 [DEBUG] [Thread-64736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:25:00.278 [DEBUG] [Thread-64736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:25:00.278 [DEBUG] [Thread-64736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:25:00.278 [DEBUG] [Thread-64736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:25:00.298 [INFO] [Thread-64736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:25:00.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:25:00.890 [DEBUG] [Thread-64736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:25:00.890 [DEBUG] [Thread-64736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:25:00.891 [DEBUG] [Thread-64736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:25:00.931 [DEBUG] [Thread-64736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:25:00.932 [DEBUG] [Thread-64736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:25:00.935 [DEBUG] [Thread-64736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:25:00.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:25:00.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:25:00.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:25:00.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:25:00.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:25:00.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:25:00.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:25:00.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:25:00.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:25:00.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.975043 -999.00  +12.90  13.87     47   +2.10 1 1 1 1 1     0    0 10.82 -9.39 ZNESW 12.4 13.9 171.6 17.9 13.4 -22.1 13.3 -20.9 13.1 -20.6 13.4 -21.6
2025-11-18T01:25:00.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:25:00.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:25:00.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.975043
2025-11-18T01:25:00.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:25:00.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:25:00.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:25:00.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:25:00.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:25:00.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:24:36', tmtdew=12.49, humidity=42.39, cloud=0.0, wind=17.08, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:24:36', seeing=1.44, atlas_timestamp='2025-11-17T23:24:03.715', atlas_cloud=1, atlas_rain=1, zp_data=[0.14974999999999916, 0.1772500000000008, 0.11625000000000085, 0.18049999999999855, 0.20950000000000024, 0.15625, 0.07699999999999996, 0.04875000000000185, 0.15149999999999864, 0.19100000000000072, 0.2552500000000002, 0.22000000000000064, 0.3049999999999997, 0.15174999999999805, 0.051000000000000156, 0.09699999999999953, 0.12274999999999991, 0.1875, 0.4245000000000001, 0.3822499999999991, 0.29299999999999926, 0.1842499999999987, 0.21025000000000027, 0.35724999999999874, 0.22699999999999854, 0.3265000000000011, 0.6592500000000001, 0.7365000000000004, 0.47000000000000064, 0.23000000000000043, 0.604000000000001, 0.572000000000001, 0.5462499999999988], zp_timestamp='2025-11-17T23:21:00')
2025-11-18T01:25:00.963 [DEBUG] [Thread-64736] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:25:01.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:25:01.068 [DEBUG] [Thread-64739] [transport.py] [_log()] starting thread (client mode): 0xd31610c0
2025-11-18T01:25:01.069 [DEBUG] [Thread-64739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:25:01.083 [DEBUG] [Thread-64739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:25:01.083 [INFO] [Thread-64739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:25:01.091 [DEBUG] [Thread-64739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] client lang: <none>
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] server lang: <none>
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] kex follows: False
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] Compression: none
2025-11-18T01:25:01.092 [DEBUG] [Thread-64739] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:25:01.148 [DEBUG] [Thread-64739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:25:01.148 [DEBUG] [Thread-64739] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:25:01.149 [DEBUG] [Thread-64739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:25:01.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:25:01.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:25:01.207 [DEBUG] [Thread-64739] [transport.py] [_log()] userauth is OK
2025-11-18T01:25:01.207 [DEBUG] [Thread-64739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:25:01.207 [DEBUG] [Thread-64739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:25:01.207 [DEBUG] [Thread-64739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:25:01.208 [DEBUG] [Thread-64739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:25:01.227 [INFO] [Thread-64739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:25:01.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:25:01.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:25:02.125 [DEBUG] [Thread-64739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:25:02.125 [DEBUG] [Thread-64739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:25:02.173 [DEBUG] [Thread-64739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:25:02.173 [DEBUG] [Thread-64739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:25:02.181 [DEBUG] [Thread-64739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:25:02.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:25:02.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:25:02.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:25:02.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:25:02.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:25:02.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:25:02.214 [DEBUG] [Thread-64739] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:25:11.076 [DEBUG] [Thread-64741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:25:26.117 [DEBUG] [Thread-64742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:25:32.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:25:32.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:25:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:25:32.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 25, 8), 12.46, 42.47, 0.0, 19.59, 12.81, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:25:32.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:25:08
2025-11-18T01:25:33.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:25:33.182 [DEBUG] [Thread-64743] [transport.py] [_log()] starting thread (client mode): 0xd07a1ab0
2025-11-18T01:25:33.182 [DEBUG] [Thread-64743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:25:33.202 [DEBUG] [Thread-64743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:25:33.202 [INFO] [Thread-64743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] client lang: <none>
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] server lang: <none>
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] kex follows: False
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:25:33.205 [DEBUG] [Thread-64743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:25:33.206 [DEBUG] [Thread-64743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:25:33.206 [DEBUG] [Thread-64743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:25:33.206 [DEBUG] [Thread-64743] [transport.py] [_log()] Compression: none
2025-11-18T01:25:33.206 [DEBUG] [Thread-64743] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:25:33.222 [DEBUG] [Thread-64743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:25:33.222 [DEBUG] [Thread-64743] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:25:33.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:25:33.222 [DEBUG] [Thread-64743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:25:33.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:25:33.223 [DEBUG] [Thread-64743] [transport.py] [_log()] userauth is OK
2025-11-18T01:25:33.223 [DEBUG] [Thread-64743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:25:33.223 [DEBUG] [Thread-64743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:25:33.223 [DEBUG] [Thread-64743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:25:33.223 [DEBUG] [Thread-64743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:25:33.232 [INFO] [Thread-64743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:25:33.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:25:34.937 [DEBUG] [Thread-64743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:25:34.937 [DEBUG] [Thread-64743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:25:34.937 [DEBUG] [Thread-64743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:25:34.979 [DEBUG] [Thread-64743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:25:34.979 [DEBUG] [Thread-64743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:25:34.982 [DEBUG] [Thread-64743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:25:34.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:25:34.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:25:34.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:25:34.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:25:35.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:25:35.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:25:35.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:25:35.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:25:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:25:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.975390 -999.00  +12.90  20.77     48   +2.20 1 1 1 1 1     0    0 10.85 -14.66 ZNESW 14.7 20.8 169.6 24.2 13.4 -22.1 13.3 -20.8 13.1 -20.7 13.4 -21.8
2025-11-18T01:25:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:25:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:25:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.975390
2025-11-18T01:25:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:25:35.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:25:35.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:25:35.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:25:35.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:25:35.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:25:08', tmtdew=12.46, humidity=42.47, cloud=0.0, wind=19.59, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:25:08', seeing=1.73, atlas_timestamp='2025-11-17T23:24:33.696', atlas_cloud=1, atlas_rain=1, zp_data=[0.14974999999999916, 0.1772500000000008, 0.11625000000000085, 0.18049999999999855, 0.20950000000000024, 0.15625, 0.07699999999999996, 0.04875000000000185, 0.15149999999999864, 0.19100000000000072, 0.2552500000000002, 0.22000000000000064, 0.3049999999999997, 0.15174999999999805, 0.051000000000000156, 0.09699999999999953, 0.12274999999999991, 0.1875, 0.4245000000000001, 0.3822499999999991, 0.29299999999999926, 0.1842499999999987, 0.21025000000000027, 0.35724999999999874, 0.22699999999999854, 0.3265000000000011, 0.6592500000000001, 0.7365000000000004, 0.47000000000000064, 0.23000000000000043, 0.604000000000001, 0.572000000000001, 0.5462499999999988], zp_timestamp='2025-11-17T23:21:00')
2025-11-18T01:25:35.003 [DEBUG] [Thread-64743] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:25:35.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:25:35.096 [DEBUG] [Thread-64746] [transport.py] [_log()] starting thread (client mode): 0xd07a3610
2025-11-18T01:25:35.097 [DEBUG] [Thread-64746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:25:35.112 [DEBUG] [Thread-64746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:25:35.112 [INFO] [Thread-64746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] client lang: <none>
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] server lang: <none>
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] kex follows: False
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] Compression: none
2025-11-18T01:25:35.123 [DEBUG] [Thread-64746] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:25:35.179 [DEBUG] [Thread-64746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:25:35.179 [DEBUG] [Thread-64746] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:25:35.179 [DEBUG] [Thread-64746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:25:35.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:25:35.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:25:35.235 [DEBUG] [Thread-64746] [transport.py] [_log()] userauth is OK
2025-11-18T01:25:35.235 [DEBUG] [Thread-64746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:25:35.235 [DEBUG] [Thread-64746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:25:35.235 [DEBUG] [Thread-64746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:25:35.235 [DEBUG] [Thread-64746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:25:35.249 [INFO] [Thread-64746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:25:35.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:25:35.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:25:36.083 [DEBUG] [Thread-64746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:25:36.084 [DEBUG] [Thread-64746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:25:36.131 [DEBUG] [Thread-64746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:25:36.131 [DEBUG] [Thread-64746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:25:36.140 [DEBUG] [Thread-64746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:25:36.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:25:36.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:25:36.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:25:36.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:25:36.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:25:36.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:25:36.173 [DEBUG] [Thread-64746] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:25:38.373 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:25:38.375 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:25:41.146 [DEBUG] [Thread-64748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:25:56.178 [DEBUG] [Thread-64749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:25:58.469 [DEBUG] [Thread-64750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:26:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:26:06.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:26:06.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:26:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 25, 40), 12.45, 42.5, 0.0, 21.14, 12.8, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:26:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:25:40
2025-11-18T01:26:06.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:26:07.126 [DEBUG] [Thread-64751] [transport.py] [_log()] starting thread (client mode): 0xd0754ac0
2025-11-18T01:26:07.126 [DEBUG] [Thread-64751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:26:07.145 [DEBUG] [Thread-64751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:26:07.145 [INFO] [Thread-64751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:26:07.148 [DEBUG] [Thread-64751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] client lang: <none>
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] server lang: <none>
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] kex follows: False
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] Compression: none
2025-11-18T01:26:07.149 [DEBUG] [Thread-64751] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:26:07.164 [DEBUG] [Thread-64751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:26:07.165 [DEBUG] [Thread-64751] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:26:07.165 [DEBUG] [Thread-64751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:26:07.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:26:07.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:26:07.167 [DEBUG] [Thread-64751] [transport.py] [_log()] userauth is OK
2025-11-18T01:26:07.167 [DEBUG] [Thread-64751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:26:07.167 [DEBUG] [Thread-64751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:26:07.167 [DEBUG] [Thread-64751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:26:07.168 [DEBUG] [Thread-64751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:26:07.191 [INFO] [Thread-64751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:26:07.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:26:07.828 [DEBUG] [Thread-64751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:26:07.828 [DEBUG] [Thread-64751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:26:07.828 [DEBUG] [Thread-64751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:26:07.869 [DEBUG] [Thread-64751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:26:07.870 [DEBUG] [Thread-64751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:26:07.872 [DEBUG] [Thread-64751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:26:07.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:26:07.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:26:07.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:26:07.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:26:07.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:26:07.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:26:07.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:26:07.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:26:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:26:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.976084 -999.00  +12.90  12.19     48   +2.30 1 2 1 1 1     0    0 10.50 -26.87 ZNEsW 15.4 12.2 148.8 22.3 13.4 -21.9 13.3 -20.7 13.1 -20.7 13.4 -21.6
2025-11-18T01:26:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:26:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:26:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.976084
2025-11-18T01:26:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:26:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:26:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:26:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:26:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:26:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:25:40', tmtdew=12.45, humidity=42.5, cloud=0.0, wind=21.14, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:25:40', seeing=1.73, atlas_timestamp='2025-11-17T23:25:33.658', atlas_cloud=2, atlas_rain=1, zp_data=[0.15274999999999928, 0.12124999999999986, 0.16525000000000034, 0.17299999999999827, 0.19849999999999923, 0.2117500000000021, 0.19399999999999906, 0.08125000000000071, 0.2104999999999997, 0.20700000000000074, 0.3142499999999995, 0.29499999999999993, 0.32399999999999984, 0.15075000000000038, 0.10749999999999815, 0.11299999999999955, 0.19024999999999892, 0.3169999999999984, 0.4844999999999988, 0.4372499999999988, 0.42299999999999827, 0.14974999999999916, 0.21075000000000088, 0.19674999999999976, 0.20399999999999885, 0.43350000000000044, 0.7777500000000002, 1.0969999999999995, 0.6050000000000004, 0.22600000000000087, 0.559000000000001, 0.8175000000000008, 0.5002499999999994], zp_timestamp='2025-11-17T23:25:00')
2025-11-18T01:26:07.891 [DEBUG] [Thread-64751] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:26:07.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:26:07.985 [DEBUG] [Thread-64754] [transport.py] [_log()] starting thread (client mode): 0xd3161750
2025-11-18T01:26:07.985 [DEBUG] [Thread-64754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:26:08.000 [DEBUG] [Thread-64754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:26:08.000 [INFO] [Thread-64754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] client lang: <none>
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] server lang: <none>
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] kex follows: False
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] Compression: none
2025-11-18T01:26:08.008 [DEBUG] [Thread-64754] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:26:08.071 [DEBUG] [Thread-64754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:26:08.071 [DEBUG] [Thread-64754] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:26:08.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:26:08.073 [DEBUG] [Thread-64754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:26:08.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:26:08.129 [DEBUG] [Thread-64754] [transport.py] [_log()] userauth is OK
2025-11-18T01:26:08.129 [DEBUG] [Thread-64754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:26:08.129 [DEBUG] [Thread-64754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:26:08.130 [DEBUG] [Thread-64754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:26:08.130 [DEBUG] [Thread-64754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:26:08.150 [INFO] [Thread-64754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:26:08.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:26:08.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:26:08.994 [DEBUG] [Thread-64754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:26:08.994 [DEBUG] [Thread-64754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:26:09.042 [DEBUG] [Thread-64754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:26:09.042 [DEBUG] [Thread-64754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:26:09.050 [DEBUG] [Thread-64754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:26:09.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:26:09.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:26:09.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:26:09.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:26:09.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:26:09.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:26:09.082 [DEBUG] [Thread-64754] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:26:11.208 [DEBUG] [Thread-64756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:26:26.246 [DEBUG] [Thread-64757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:26:38.585 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:26:38.586 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:26:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:26:39.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:26:39.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:26:39.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 26, 12), 12.34, 42.85, 0.0, 20.87, 12.81, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:26:39.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:26:12
2025-11-18T01:26:39.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:26:40.025 [DEBUG] [Thread-64758] [transport.py] [_log()] starting thread (client mode): 0xd3152e30
2025-11-18T01:26:40.025 [DEBUG] [Thread-64758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:26:40.046 [DEBUG] [Thread-64758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:26:40.046 [INFO] [Thread-64758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:26:40.049 [DEBUG] [Thread-64758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:26:40.049 [DEBUG] [Thread-64758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:26:40.049 [DEBUG] [Thread-64758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:26:40.049 [DEBUG] [Thread-64758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:26:40.049 [DEBUG] [Thread-64758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:26:40.049 [DEBUG] [Thread-64758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] client lang: <none>
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] server lang: <none>
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] kex follows: False
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:26:40.050 [DEBUG] [Thread-64758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:26:40.051 [DEBUG] [Thread-64758] [transport.py] [_log()] Compression: none
2025-11-18T01:26:40.051 [DEBUG] [Thread-64758] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:26:40.069 [DEBUG] [Thread-64758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:26:40.070 [DEBUG] [Thread-64758] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:26:40.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:26:40.070 [DEBUG] [Thread-64758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:26:40.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:26:40.073 [DEBUG] [Thread-64758] [transport.py] [_log()] userauth is OK
2025-11-18T01:26:40.073 [DEBUG] [Thread-64758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:26:40.074 [DEBUG] [Thread-64758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:26:40.074 [DEBUG] [Thread-64758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:26:40.074 [DEBUG] [Thread-64758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:26:40.109 [INFO] [Thread-64758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:26:40.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:26:40.908 [DEBUG] [Thread-64758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:26:40.908 [DEBUG] [Thread-64758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:26:40.908 [DEBUG] [Thread-64758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:26:40.949 [DEBUG] [Thread-64758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:26:40.949 [DEBUG] [Thread-64758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:26:40.951 [DEBUG] [Thread-64758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:26:40.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:26:40.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:26:40.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:26:40.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:26:40.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:26:40.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:26:40.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:26:40.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:26:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:26:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.976432 -999.00  +12.90  15.90     49   +2.50 1 2 1 1 1     0    0 10.11 -29.26 ZNEsW 14.4 15.9 165.6 23.1 13.4 -21.9 13.3 -20.7 13.1 -20.4 13.3 -21.5
2025-11-18T01:26:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:26:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:26:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.976432
2025-11-18T01:26:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:26:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:26:40.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:26:40.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:26:40.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:26:40.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:26:12', tmtdew=12.34, humidity=42.85, cloud=0.0, wind=20.87, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:26:12', seeing=1.64, atlas_timestamp='2025-11-17T23:26:03.725', atlas_cloud=2, atlas_rain=1, zp_data=[0.15274999999999928, 0.12124999999999986, 0.16525000000000034, 0.17299999999999827, 0.19849999999999923, 0.2117500000000021, 0.19399999999999906, 0.08125000000000071, 0.2104999999999997, 0.20700000000000074, 0.3142499999999995, 0.29499999999999993, 0.32399999999999984, 0.15075000000000038, 0.10749999999999815, 0.11299999999999955, 0.19024999999999892, 0.3169999999999984, 0.4844999999999988, 0.4372499999999988, 0.42299999999999827, 0.14974999999999916, 0.21075000000000088, 0.19674999999999976, 0.20399999999999885, 0.43350000000000044, 0.7777500000000002, 1.0969999999999995, 0.6050000000000004, 0.22600000000000087, 0.559000000000001, 0.8175000000000008, 0.5002499999999994], zp_timestamp='2025-11-17T23:25:00')
2025-11-18T01:26:40.978 [DEBUG] [Thread-64758] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:26:41.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:26:41.074 [DEBUG] [Thread-64761] [transport.py] [_log()] starting thread (client mode): 0xd3161c00
2025-11-18T01:26:41.074 [DEBUG] [Thread-64761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:26:41.089 [DEBUG] [Thread-64761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:26:41.089 [INFO] [Thread-64761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:26:41.097 [DEBUG] [Thread-64761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:26:41.097 [DEBUG] [Thread-64761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:26:41.098 [DEBUG] [Thread-64761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:26:41.098 [DEBUG] [Thread-64761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:26:41.098 [DEBUG] [Thread-64761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:26:41.098 [DEBUG] [Thread-64761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:26:41.098 [DEBUG] [Thread-64761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:26:41.098 [DEBUG] [Thread-64761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:26:41.098 [DEBUG] [Thread-64761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:26:41.098 [DEBUG] [Thread-64761] [transport.py] [_log()] client lang: <none>
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] server lang: <none>
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] kex follows: False
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] Compression: none
2025-11-18T01:26:41.099 [DEBUG] [Thread-64761] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:26:41.155 [DEBUG] [Thread-64761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:26:41.155 [DEBUG] [Thread-64761] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:26:41.156 [DEBUG] [Thread-64761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:26:41.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:26:41.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:26:41.211 [DEBUG] [Thread-64761] [transport.py] [_log()] userauth is OK
2025-11-18T01:26:41.211 [DEBUG] [Thread-64761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:26:41.211 [DEBUG] [Thread-64761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:26:41.211 [DEBUG] [Thread-64761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:26:41.211 [DEBUG] [Thread-64761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:26:41.225 [INFO] [Thread-64761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:26:41.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:26:41.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:26:41.275 [DEBUG] [Thread-64763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:26:42.080 [DEBUG] [Thread-64761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:26:42.080 [DEBUG] [Thread-64761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:26:42.130 [DEBUG] [Thread-64761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:26:42.130 [DEBUG] [Thread-64761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:26:42.139 [DEBUG] [Thread-64761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:26:42.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:26:42.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:26:42.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:26:42.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:26:42.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:26:42.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:26:42.176 [DEBUG] [Thread-64761] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:26:56.315 [DEBUG] [Thread-64764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:26:58.545 [DEBUG] [Thread-64765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:27:11.345 [DEBUG] [Thread-64766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:27:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:27:12.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:27:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:27:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 26, 44), 12.1, 43.63, 0.0, 19.06, 12.9, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:27:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:26:44
2025-11-18T01:27:12.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:27:13.092 [DEBUG] [Thread-64767] [transport.py] [_log()] starting thread (client mode): 0xd3153f10
2025-11-18T01:27:13.092 [DEBUG] [Thread-64767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:27:13.112 [DEBUG] [Thread-64767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:27:13.112 [INFO] [Thread-64767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:27:13.115 [DEBUG] [Thread-64767] [transport.py] [_log()] client lang: <none>
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] server lang: <none>
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] kex follows: False
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] Compression: none
2025-11-18T01:27:13.116 [DEBUG] [Thread-64767] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:27:13.133 [DEBUG] [Thread-64767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:27:13.134 [DEBUG] [Thread-64767] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:27:13.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:27:13.135 [DEBUG] [Thread-64767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:27:13.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:27:13.136 [DEBUG] [Thread-64767] [transport.py] [_log()] userauth is OK
2025-11-18T01:27:13.136 [DEBUG] [Thread-64767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:27:13.136 [DEBUG] [Thread-64767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:27:13.136 [DEBUG] [Thread-64767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:27:13.136 [DEBUG] [Thread-64767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:27:13.157 [INFO] [Thread-64767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:27:13.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:27:13.799 [DEBUG] [Thread-64767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:27:13.800 [DEBUG] [Thread-64767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:27:13.800 [DEBUG] [Thread-64767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:27:13.840 [DEBUG] [Thread-64767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:27:13.841 [DEBUG] [Thread-64767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:27:13.843 [DEBUG] [Thread-64767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:27:13.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:27:13.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:27:13.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:27:13.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:27:13.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:27:13.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:27:13.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:27:13.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:27:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:27:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.976779 -999.00  +12.90  15.29     48   +2.30 1 2 1 1 1     0    0 10.26 -31.28 ZNEsW 17.3 15.3 164.2 21.9 13.4 -21.8 13.3 -20.7 13.1 -20.5 13.4 -21.4
2025-11-18T01:27:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:27:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:27:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.976779
2025-11-18T01:27:13.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:27:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:27:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:27:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:27:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:27:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:26:44', tmtdew=12.1, humidity=43.63, cloud=0.0, wind=19.06, temperature=12.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:26:44', seeing=1.64, atlas_timestamp='2025-11-17T23:26:33.706', atlas_cloud=2, atlas_rain=1, zp_data=[0.15274999999999928, 0.12124999999999986, 0.16525000000000034, 0.17299999999999827, 0.19849999999999923, 0.2117500000000021, 0.19399999999999906, 0.08125000000000071, 0.2104999999999997, 0.20700000000000074, 0.3142499999999995, 0.29499999999999993, 0.32399999999999984, 0.15075000000000038, 0.10749999999999815, 0.11299999999999955, 0.19024999999999892, 0.3169999999999984, 0.4844999999999988, 0.4372499999999988, 0.42299999999999827, 0.14974999999999916, 0.21075000000000088, 0.19674999999999976, 0.20399999999999885, 0.43350000000000044, 0.7777500000000002, 1.0969999999999995, 0.6050000000000004, 0.22600000000000087, 0.559000000000001, 0.8175000000000008, 0.5002499999999994], zp_timestamp='2025-11-17T23:25:00')
2025-11-18T01:27:13.868 [DEBUG] [Thread-64767] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:27:13.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:27:13.963 [DEBUG] [Thread-64770] [transport.py] [_log()] starting thread (client mode): 0xd317fc10
2025-11-18T01:27:13.963 [DEBUG] [Thread-64770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:27:13.980 [DEBUG] [Thread-64770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:27:13.981 [INFO] [Thread-64770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] client lang: <none>
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] server lang: <none>
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] kex follows: False
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:27:13.988 [DEBUG] [Thread-64770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:27:13.989 [DEBUG] [Thread-64770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:27:13.989 [DEBUG] [Thread-64770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:27:13.989 [DEBUG] [Thread-64770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:27:13.989 [DEBUG] [Thread-64770] [transport.py] [_log()] Compression: none
2025-11-18T01:27:13.989 [DEBUG] [Thread-64770] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:27:14.046 [DEBUG] [Thread-64770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:27:14.046 [DEBUG] [Thread-64770] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:27:14.046 [DEBUG] [Thread-64770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:27:14.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:27:14.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:27:14.103 [DEBUG] [Thread-64770] [transport.py] [_log()] userauth is OK
2025-11-18T01:27:14.104 [DEBUG] [Thread-64770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:27:14.104 [DEBUG] [Thread-64770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:27:14.104 [DEBUG] [Thread-64770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:27:14.104 [DEBUG] [Thread-64770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:27:14.123 [INFO] [Thread-64770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:27:14.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:27:14.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:27:15.008 [DEBUG] [Thread-64770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:27:15.008 [DEBUG] [Thread-64770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:27:15.058 [DEBUG] [Thread-64770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:27:15.058 [DEBUG] [Thread-64770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:27:15.073 [DEBUG] [Thread-64770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:27:15.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:27:15.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:27:15.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:27:15.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:27:15.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:27:15.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:27:15.119 [DEBUG] [Thread-64770] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:27:26.373 [DEBUG] [Thread-64772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:27:38.788 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:27:38.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:27:41.414 [DEBUG] [Thread-64773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:27:45.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:27:45.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:27:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:27:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 27, 16), 12.08, 43.7, 0.0, 18.21, 12.9, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:27:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:27:16
2025-11-18T01:27:45.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:27:46.059 [DEBUG] [Thread-64774] [transport.py] [_log()] starting thread (client mode): 0xd31513f0
2025-11-18T01:27:46.059 [DEBUG] [Thread-64774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:27:46.080 [DEBUG] [Thread-64774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:27:46.080 [INFO] [Thread-64774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:27:46.081 [DEBUG] [Thread-64774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:27:46.081 [DEBUG] [Thread-64774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] client lang: <none>
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] server lang: <none>
2025-11-18T01:27:46.082 [DEBUG] [Thread-64774] [transport.py] [_log()] kex follows: False
2025-11-18T01:27:46.083 [DEBUG] [Thread-64774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:27:46.083 [DEBUG] [Thread-64774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:27:46.083 [DEBUG] [Thread-64774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:27:46.083 [DEBUG] [Thread-64774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:27:46.083 [DEBUG] [Thread-64774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:27:46.083 [DEBUG] [Thread-64774] [transport.py] [_log()] Compression: none
2025-11-18T01:27:46.083 [DEBUG] [Thread-64774] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:27:46.093 [DEBUG] [Thread-64774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:27:46.094 [DEBUG] [Thread-64774] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:27:46.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:27:46.095 [DEBUG] [Thread-64774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:27:46.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:27:46.097 [DEBUG] [Thread-64774] [transport.py] [_log()] userauth is OK
2025-11-18T01:27:46.098 [DEBUG] [Thread-64774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:27:46.098 [DEBUG] [Thread-64774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:27:46.098 [DEBUG] [Thread-64774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:27:46.098 [DEBUG] [Thread-64774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:27:46.119 [INFO] [Thread-64774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:27:46.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:27:46.861 [DEBUG] [Thread-64774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:27:46.862 [DEBUG] [Thread-64774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:27:46.862 [DEBUG] [Thread-64774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:27:46.902 [DEBUG] [Thread-64774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:27:46.903 [DEBUG] [Thread-64774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:27:46.905 [DEBUG] [Thread-64774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:27:46.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:27:46.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:27:46.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:27:46.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:27:46.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:27:46.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:27:46.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:27:46.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:27:46.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:27:46.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.977126 -999.00  +12.90  10.80     48   +2.30 1 2 1 1 1     0    0 10.16 -35.14 ZNEsW 12.0 10.8 164.8 17.6 13.4 -21.9 13.3 -20.5 13.1 -20.3 13.4 -21.4
2025-11-18T01:27:46.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:27:46.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:27:46.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.977126
2025-11-18T01:27:46.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:27:46.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:27:46.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:27:46.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:27:46.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:27:46.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:27:16', tmtdew=12.08, humidity=43.7, cloud=0.0, wind=18.21, temperature=12.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:27:16', seeing=1.56, atlas_timestamp='2025-11-17T23:27:03.686', atlas_cloud=2, atlas_rain=1, zp_data=[0.15274999999999928, 0.12124999999999986, 0.16525000000000034, 0.17299999999999827, 0.19849999999999923, 0.2117500000000021, 0.19399999999999906, 0.08125000000000071, 0.2104999999999997, 0.20700000000000074, 0.3142499999999995, 0.29499999999999993, 0.32399999999999984, 0.15075000000000038, 0.10749999999999815, 0.11299999999999955, 0.19024999999999892, 0.3169999999999984, 0.4844999999999988, 0.4372499999999988, 0.42299999999999827, 0.14974999999999916, 0.21075000000000088, 0.19674999999999976, 0.20399999999999885, 0.43350000000000044, 0.7777500000000002, 1.0969999999999995, 0.6050000000000004, 0.22600000000000087, 0.559000000000001, 0.8175000000000008, 0.5002499999999994], zp_timestamp='2025-11-17T23:25:00')
2025-11-18T01:27:46.941 [DEBUG] [Thread-64774] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:27:47.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:27:47.038 [DEBUG] [Thread-64777] [transport.py] [_log()] starting thread (client mode): 0xd3151ba0
2025-11-18T01:27:47.038 [DEBUG] [Thread-64777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:27:47.052 [DEBUG] [Thread-64777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:27:47.052 [INFO] [Thread-64777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] client lang: <none>
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] server lang: <none>
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] kex follows: False
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:27:47.060 [DEBUG] [Thread-64777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:27:47.061 [DEBUG] [Thread-64777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:27:47.061 [DEBUG] [Thread-64777] [transport.py] [_log()] Compression: none
2025-11-18T01:27:47.061 [DEBUG] [Thread-64777] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:27:47.119 [DEBUG] [Thread-64777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:27:47.119 [DEBUG] [Thread-64777] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:27:47.120 [DEBUG] [Thread-64777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:27:47.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:27:47.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:27:47.175 [DEBUG] [Thread-64777] [transport.py] [_log()] userauth is OK
2025-11-18T01:27:47.176 [DEBUG] [Thread-64777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:27:47.176 [DEBUG] [Thread-64777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:27:47.176 [DEBUG] [Thread-64777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:27:47.176 [DEBUG] [Thread-64777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:27:47.195 [INFO] [Thread-64777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:27:47.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:27:47.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:27:48.056 [DEBUG] [Thread-64777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:27:48.056 [DEBUG] [Thread-64777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:27:48.104 [DEBUG] [Thread-64777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:27:48.104 [DEBUG] [Thread-64777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:27:48.113 [DEBUG] [Thread-64777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:27:48.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:27: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')
2025-11-18T01:27:48.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:27:48.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:27:48.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:27:48.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:27:48.148 [DEBUG] [Thread-64777] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:27:56.440 [DEBUG] [Thread-64779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:27:58.602 [DEBUG] [Thread-64780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:28:11.491 [DEBUG] [Thread-64781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:28:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:28:18.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:28:18.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:28:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 27, 48), 12.03, 44.03, 0.0, 22.99, 12.88, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:28:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:27:48
2025-11-18T01:28:18.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:28:19.086 [DEBUG] [Thread-64782] [transport.py] [_log()] starting thread (client mode): 0xd3151b40
2025-11-18T01:28:19.086 [DEBUG] [Thread-64782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:28:19.110 [DEBUG] [Thread-64782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:28:19.110 [INFO] [Thread-64782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:28:19.114 [DEBUG] [Thread-64782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:28:19.114 [DEBUG] [Thread-64782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:28:19.114 [DEBUG] [Thread-64782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] client lang: <none>
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] server lang: <none>
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] kex follows: False
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] Compression: none
2025-11-18T01:28:19.115 [DEBUG] [Thread-64782] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:28:19.133 [DEBUG] [Thread-64782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:28:19.134 [DEBUG] [Thread-64782] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:28:19.134 [DEBUG] [Thread-64782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:28:19.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:28:19.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:28:19.136 [DEBUG] [Thread-64782] [transport.py] [_log()] userauth is OK
2025-11-18T01:28:19.136 [DEBUG] [Thread-64782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:28:19.136 [DEBUG] [Thread-64782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:28:19.136 [DEBUG] [Thread-64782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:28:19.137 [DEBUG] [Thread-64782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:28:19.172 [INFO] [Thread-64782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:28:19.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:28:19.792 [DEBUG] [Thread-64782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:28:19.792 [DEBUG] [Thread-64782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:28:19.792 [DEBUG] [Thread-64782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:28:19.832 [DEBUG] [Thread-64782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:28:19.833 [DEBUG] [Thread-64782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:28:19.836 [DEBUG] [Thread-64782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:28:19.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:28:19.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:28:19.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:28:19.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:28:19.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:28:19.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:28:19.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:28:19.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:28:19.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:28:19.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.977474 -999.00  +12.90  12.87     48   +2.20 1 2 1 1 1     0    0 9.92 -34.06 ZNEsW 16.5 12.9 159.6 17.8 13.4 -21.8 13.3 -20.7 13.1 -20.3 13.3 -21.3
2025-11-18T01:28:19.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:28:19.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:28:19.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.977474
2025-11-18T01:28:19.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:28:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:28:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:28:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:28:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:28:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:27:48', tmtdew=12.03, humidity=44.03, cloud=0.0, wind=22.99, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:27:50', seeing=1.82, atlas_timestamp='2025-11-17T23:27:33.754', atlas_cloud=2, atlas_rain=1, zp_data=[0.15274999999999928, 0.12124999999999986, 0.16525000000000034, 0.17299999999999827, 0.19849999999999923, 0.2117500000000021, 0.19399999999999906, 0.08125000000000071, 0.2104999999999997, 0.20700000000000074, 0.3142499999999995, 0.29499999999999993, 0.32399999999999984, 0.15075000000000038, 0.10749999999999815, 0.11299999999999955, 0.19024999999999892, 0.3169999999999984, 0.4844999999999988, 0.4372499999999988, 0.42299999999999827, 0.14974999999999916, 0.21075000000000088, 0.19674999999999976, 0.20399999999999885, 0.43350000000000044, 0.7777500000000002, 1.0969999999999995, 0.6050000000000004, 0.22600000000000087, 0.559000000000001, 0.8175000000000008, 0.5002499999999994], zp_timestamp='2025-11-17T23:25:00')
2025-11-18T01:28:19.864 [DEBUG] [Thread-64782] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:28:19.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:28:19.961 [DEBUG] [Thread-64785] [transport.py] [_log()] starting thread (client mode): 0xd3160190
2025-11-18T01:28:19.962 [DEBUG] [Thread-64785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:28:19.980 [DEBUG] [Thread-64785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:28:19.981 [INFO] [Thread-64785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:28:19.988 [DEBUG] [Thread-64785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:28:19.988 [DEBUG] [Thread-64785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:28:19.988 [DEBUG] [Thread-64785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:28:19.988 [DEBUG] [Thread-64785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:28:19.988 [DEBUG] [Thread-64785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:28:19.988 [DEBUG] [Thread-64785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:28:19.988 [DEBUG] [Thread-64785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] client lang: <none>
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] server lang: <none>
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] kex follows: False
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] Compression: none
2025-11-18T01:28:19.989 [DEBUG] [Thread-64785] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:28:20.047 [DEBUG] [Thread-64785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:28:20.047 [DEBUG] [Thread-64785] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:28:20.048 [DEBUG] [Thread-64785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:28:20.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:28:20.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:28:20.106 [DEBUG] [Thread-64785] [transport.py] [_log()] userauth is OK
2025-11-18T01:28:20.107 [DEBUG] [Thread-64785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:28:20.107 [DEBUG] [Thread-64785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:28:20.107 [DEBUG] [Thread-64785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:28:20.107 [DEBUG] [Thread-64785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:28:20.126 [INFO] [Thread-64785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:28:20.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:28:20.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:28:20.955 [DEBUG] [Thread-64785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:28:20.955 [DEBUG] [Thread-64785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:28:21.003 [DEBUG] [Thread-64785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:28:21.003 [DEBUG] [Thread-64785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:28:21.012 [DEBUG] [Thread-64785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:28:21.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:28:21.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:28:21.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:28:21.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:28:21.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:28:21.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:28:21.046 [DEBUG] [Thread-64785] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:28:26.528 [DEBUG] [Thread-64787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:28:38.992 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:28:38.994 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:28:41.579 [DEBUG] [Thread-64788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:28:51.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:28:51.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:28:51.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:28:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 28, 22), 12.05, 43.98, 0.0, 22.85, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:28:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:28:22
2025-11-18T01:28:51.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:28:51.992 [DEBUG] [Thread-64789] [transport.py] [_log()] starting thread (client mode): 0xd0755c60
2025-11-18T01:28:51.992 [DEBUG] [Thread-64789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:28:52.013 [DEBUG] [Thread-64789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:28:52.014 [INFO] [Thread-64789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] client lang: <none>
2025-11-18T01:28:52.017 [DEBUG] [Thread-64789] [transport.py] [_log()] server lang: <none>
2025-11-18T01:28:52.018 [DEBUG] [Thread-64789] [transport.py] [_log()] kex follows: False
2025-11-18T01:28:52.018 [DEBUG] [Thread-64789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:28:52.018 [DEBUG] [Thread-64789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:28:52.018 [DEBUG] [Thread-64789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:28:52.018 [DEBUG] [Thread-64789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:28:52.018 [DEBUG] [Thread-64789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:28:52.018 [DEBUG] [Thread-64789] [transport.py] [_log()] Compression: none
2025-11-18T01:28:52.018 [DEBUG] [Thread-64789] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:28:52.037 [DEBUG] [Thread-64789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:28:52.037 [DEBUG] [Thread-64789] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:28:52.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:28:52.038 [DEBUG] [Thread-64789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:28:52.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:28:52.040 [DEBUG] [Thread-64789] [transport.py] [_log()] userauth is OK
2025-11-18T01:28:52.041 [DEBUG] [Thread-64789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:28:52.041 [DEBUG] [Thread-64789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:28:52.041 [DEBUG] [Thread-64789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:28:52.041 [DEBUG] [Thread-64789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:28:52.065 [INFO] [Thread-64789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:28:52.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:28:52.852 [DEBUG] [Thread-64789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:28:52.852 [DEBUG] [Thread-64789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:28:52.852 [DEBUG] [Thread-64789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:28:52.893 [DEBUG] [Thread-64789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:28:52.893 [DEBUG] [Thread-64789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:28:52.896 [DEBUG] [Thread-64789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:28:52.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:28:52.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:28:52.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:28:52.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:28:52.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:28:52.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:28:52.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:28:52.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:28:52.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:28:52.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.977821 -999.00  +12.90  18.02     49   +2.40 1 2 1 1 1     0    0 9.90 -37.98 ZNEsW 16.1 18.0 180.4 22.4 13.4 -21.5 13.3 -20.3 13.1 -20.2 13.3 -21.2
2025-11-18T01:28:52.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:28:52.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:28:52.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.977821
2025-11-18T01:28:52.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:28:52.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:28:52.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:28:52.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:28:52.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:28:52.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:28:22', tmtdew=12.05, humidity=43.98, cloud=0.0, wind=22.85, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:28:22', seeing=1.7, atlas_timestamp='2025-11-17T23:28:03.734', atlas_cloud=2, atlas_rain=1, zp_data=[0.15274999999999928, 0.12124999999999986, 0.16525000000000034, 0.17299999999999827, 0.19849999999999923, 0.2117500000000021, 0.19399999999999906, 0.08125000000000071, 0.2104999999999997, 0.20700000000000074, 0.3142499999999995, 0.29499999999999993, 0.32399999999999984, 0.15075000000000038, 0.10749999999999815, 0.11299999999999955, 0.19024999999999892, 0.3169999999999984, 0.4844999999999988, 0.4372499999999988, 0.42299999999999827, 0.14974999999999916, 0.21075000000000088, 0.19674999999999976, 0.20399999999999885, 0.43350000000000044, 0.7777500000000002, 1.0969999999999995, 0.6050000000000004, 0.22600000000000087, 0.559000000000001, 0.8175000000000008, 0.5002499999999994], zp_timestamp='2025-11-17T23:25:00')
2025-11-18T01:28:52.920 [DEBUG] [Thread-64789] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:28:53.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:28:56.607 [DEBUG] [Thread-64792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:28:58.665 [DEBUG] [Thread-64793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:29:11.647 [DEBUG] [Thread-64794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:29:26.673 [DEBUG] [Thread-64795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:29:39.195 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:29:39.196 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:29:41.700 [DEBUG] [Thread-64796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:29:56.731 [DEBUG] [Thread-64797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:29:58.720 [DEBUG] [Thread-64798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:30:11.755 [DEBUG] [Thread-64799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:30:26.785 [DEBUG] [Thread-64800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:30:39.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:30:39.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:30:41.812 [DEBUG] [Thread-64801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:30:56.838 [DEBUG] [Thread-64802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:30:58.795 [DEBUG] [Thread-64803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:31:06.043 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-18T01:31:11.870 [DEBUG] [Thread-64804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:31:26.899 [DEBUG] [Thread-64805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:31:36.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:31:36.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:31:36.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:31:36.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 31, 2), 11.71, 44.54, 0.0, 22.34, 12.83, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:31:36.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:31:02
2025-11-18T01:31:36.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:31:37.030 [DEBUG] [Thread-64806] [transport.py] [_log()] starting thread (client mode): 0xd07d9ed0
2025-11-18T01:31:37.030 [DEBUG] [Thread-64806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:31:37.051 [DEBUG] [Thread-64806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:31:37.051 [INFO] [Thread-64806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:31:37.055 [DEBUG] [Thread-64806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:31:37.055 [DEBUG] [Thread-64806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] client lang: <none>
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] server lang: <none>
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] kex follows: False
2025-11-18T01:31:37.056 [DEBUG] [Thread-64806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:31:37.057 [DEBUG] [Thread-64806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:31:37.057 [DEBUG] [Thread-64806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:31:37.057 [DEBUG] [Thread-64806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:31:37.057 [DEBUG] [Thread-64806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:31:37.057 [DEBUG] [Thread-64806] [transport.py] [_log()] Compression: none
2025-11-18T01:31:37.057 [DEBUG] [Thread-64806] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:31:37.076 [DEBUG] [Thread-64806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:31:37.077 [DEBUG] [Thread-64806] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:31:37.077 [DEBUG] [Thread-64806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:31:37.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:31:37.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:31:37.079 [DEBUG] [Thread-64806] [transport.py] [_log()] userauth is OK
2025-11-18T01:31:37.079 [DEBUG] [Thread-64806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:31:37.079 [DEBUG] [Thread-64806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:31:37.079 [DEBUG] [Thread-64806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:31:37.079 [DEBUG] [Thread-64806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:31:37.097 [INFO] [Thread-64806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:31:37.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:31:37.700 [DEBUG] [Thread-64806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:31:37.700 [DEBUG] [Thread-64806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:31:37.700 [DEBUG] [Thread-64806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:31:37.741 [DEBUG] [Thread-64806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:31:37.742 [DEBUG] [Thread-64806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:31:37.744 [DEBUG] [Thread-64806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:31:37.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:31:37.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:31:37.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:31:37.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:31:37.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:31:37.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:31:37.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:31:37.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:31:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:31:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.979904 -999.00  +12.90  16.13     49   +2.50 1 2 1 1 1     0    0 9.37 -56.43 ZNEsW 14.0 16.1 170.0 19.9 13.3 -21.2 13.2 -19.9 13.0 -19.9 13.3 -20.7
2025-11-18T01:31:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:31:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:31:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.979904
2025-11-18T01:31:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:31:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:31:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:31:37.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:31:37.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:31:37.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:31:02', tmtdew=11.71, humidity=44.54, cloud=0.0, wind=22.34, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:31:34', seeing=1.55, atlas_timestamp='2025-11-17T23:31:03.706', atlas_cloud=2, atlas_rain=1, zp_data=[0.15274999999999928, 0.12124999999999986, 0.16525000000000034, 0.17299999999999827, 0.19849999999999923, 0.2117500000000021, 0.19399999999999906, 0.08125000000000071, 0.2104999999999997, 0.20700000000000074, 0.3142499999999995, 0.29499999999999993, 0.32399999999999984, 0.15075000000000038, 0.10749999999999815, 0.11299999999999955, 0.19024999999999892, 0.3169999999999984, 0.4844999999999988, 0.4372499999999988, 0.42299999999999827, 0.14974999999999916, 0.21075000000000088, 0.19674999999999976, 0.20399999999999885, 0.43350000000000044, 0.7777500000000002, 1.0969999999999995, 0.6050000000000004, 0.22600000000000087, 0.559000000000001, 0.8175000000000008, 0.5002499999999994], zp_timestamp='2025-11-17T23:27:00')
2025-11-18T01:31:37.770 [DEBUG] [Thread-64806] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:31:37.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:31:37.866 [DEBUG] [Thread-64809] [transport.py] [_log()] starting thread (client mode): 0xd07a3820
2025-11-18T01:31:37.866 [DEBUG] [Thread-64809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:31:37.882 [DEBUG] [Thread-64809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:31:37.882 [INFO] [Thread-64809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:31:37.889 [DEBUG] [Thread-64809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] client lang: <none>
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] server lang: <none>
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] kex follows: False
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:31:37.890 [DEBUG] [Thread-64809] [transport.py] [_log()] Compression: none
2025-11-18T01:31:37.891 [DEBUG] [Thread-64809] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:31:37.947 [DEBUG] [Thread-64809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:31:37.947 [DEBUG] [Thread-64809] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:31:37.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:31:37.948 [DEBUG] [Thread-64809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:31:37.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:31:38.003 [DEBUG] [Thread-64809] [transport.py] [_log()] userauth is OK
2025-11-18T01:31:38.003 [DEBUG] [Thread-64809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:31:38.003 [DEBUG] [Thread-64809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:31:38.004 [DEBUG] [Thread-64809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:31:38.004 [DEBUG] [Thread-64809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:31:38.023 [INFO] [Thread-64809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:31:38.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:31:38.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:31:38.908 [DEBUG] [Thread-64809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:31:38.909 [DEBUG] [Thread-64809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:31:38.956 [DEBUG] [Thread-64809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:31:38.956 [DEBUG] [Thread-64809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:31:38.966 [DEBUG] [Thread-64809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:31:38.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:31:38.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:31:38.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:31:38.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:31:38.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:31:38.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:31:39.001 [DEBUG] [Thread-64809] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:31:39.610 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:31:39.610 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:31:41.929 [DEBUG] [Thread-64811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:31:56.968 [DEBUG] [Thread-64812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:31:58.874 [DEBUG] [Thread-64813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:32:09.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:32:09.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:32:09.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:32:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 32, 6), 11.57, 45.36, 0.0, 19.07, 12.9, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:32:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:32:06
2025-11-18T01:32:09.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:32:09.971 [DEBUG] [Thread-64814] [transport.py] [_log()] starting thread (client mode): 0xd317cbb0
2025-11-18T01:32:09.972 [DEBUG] [Thread-64814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:32:09.991 [DEBUG] [Thread-64814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:32:09.992 [INFO] [Thread-64814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:32:09.993 [DEBUG] [Thread-64814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:32:09.993 [DEBUG] [Thread-64814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:32:09.993 [DEBUG] [Thread-64814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:32:09.993 [DEBUG] [Thread-64814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:32:09.993 [DEBUG] [Thread-64814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:32:09.993 [DEBUG] [Thread-64814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] client lang: <none>
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] server lang: <none>
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] kex follows: False
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] Compression: none
2025-11-18T01:32:09.994 [DEBUG] [Thread-64814] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:32:10.008 [DEBUG] [Thread-64814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:32:10.008 [DEBUG] [Thread-64814] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:32:10.009 [DEBUG] [Thread-64814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:32:10.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:32:10.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:32:10.011 [DEBUG] [Thread-64814] [transport.py] [_log()] userauth is OK
2025-11-18T01:32:10.011 [DEBUG] [Thread-64814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:32:10.011 [DEBUG] [Thread-64814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:32:10.011 [DEBUG] [Thread-64814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:32:10.011 [DEBUG] [Thread-64814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:32:10.028 [INFO] [Thread-64814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:32:10.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:32:10.679 [DEBUG] [Thread-64814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:32:10.680 [DEBUG] [Thread-64814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:32:10.680 [DEBUG] [Thread-64814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:32:10.720 [DEBUG] [Thread-64814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:32:10.721 [DEBUG] [Thread-64814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:32:10.724 [DEBUG] [Thread-64814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:32:10.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:32:10.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:32:10.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:32:10.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:32:10.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:32:10.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:32:10.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:32:10.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:32:10.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:32:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.980251 -999.00  +12.90  16.14     49   +2.70 1 2 1 1 1     0    0 9.30 -60.03 ZNEsW 14.2 16.1 174.6 23.4 13.3 -21.1 13.3 -20.0 13.1 -19.9 13.3 -20.7
2025-11-18T01:32:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:32:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:32:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.980251
2025-11-18T01:32:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:32:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:32:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:32:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:32:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:32:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:32:06', tmtdew=11.57, humidity=45.36, cloud=0.0, wind=19.07, temperature=12.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:32:06', seeing=1.71, atlas_timestamp='2025-11-17T23:31:33.686', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:29:00')
2025-11-18T01:32:10.747 [DEBUG] [Thread-64814] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:32:10.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:32:10.845 [DEBUG] [Thread-64817] [transport.py] [_log()] starting thread (client mode): 0xd0701e10
2025-11-18T01:32:10.845 [DEBUG] [Thread-64817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:32:10.860 [DEBUG] [Thread-64817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:32:10.861 [INFO] [Thread-64817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:32:10.868 [DEBUG] [Thread-64817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] client lang: <none>
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] server lang: <none>
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] kex follows: False
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:32:10.869 [DEBUG] [Thread-64817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:32:10.870 [DEBUG] [Thread-64817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:32:10.870 [DEBUG] [Thread-64817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:32:10.870 [DEBUG] [Thread-64817] [transport.py] [_log()] Compression: none
2025-11-18T01:32:10.870 [DEBUG] [Thread-64817] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:32:10.936 [DEBUG] [Thread-64817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:32:10.936 [DEBUG] [Thread-64817] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:32:10.937 [DEBUG] [Thread-64817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:32:10.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:32:10.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:32:10.992 [DEBUG] [Thread-64817] [transport.py] [_log()] userauth is OK
2025-11-18T01:32:10.992 [DEBUG] [Thread-64817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:32:10.992 [DEBUG] [Thread-64817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:32:10.992 [DEBUG] [Thread-64817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:32:10.993 [DEBUG] [Thread-64817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:32:11.011 [INFO] [Thread-64817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:32:11.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:32:11.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:32:11.872 [DEBUG] [Thread-64817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:32:11.872 [DEBUG] [Thread-64817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:32:11.920 [DEBUG] [Thread-64817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:32:11.920 [DEBUG] [Thread-64817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:32:11.929 [DEBUG] [Thread-64817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:32:11.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:32:11.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:32:11.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:32:11.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:32:11.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:32:11.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:32:11.970 [DEBUG] [Thread-64817] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:32:11.997 [DEBUG] [Thread-64819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:32:27.047 [DEBUG] [Thread-64820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:32:39.813 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:32:39.814 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:32:41.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:32:41.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:32:41.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:32:42.073 [DEBUG] [Thread-64821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:32:42.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 32, 38), 11.52, 45.71, 0.0, 22.89, 12.96, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:32:42.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:32:38
2025-11-18T01:32:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:32:42.928 [DEBUG] [Thread-64822] [transport.py] [_log()] starting thread (client mode): 0xd0700e50
2025-11-18T01:32:42.929 [DEBUG] [Thread-64822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:32:42.948 [DEBUG] [Thread-64822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:32:42.948 [INFO] [Thread-64822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] client lang: <none>
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] server lang: <none>
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] kex follows: False
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] Compression: none
2025-11-18T01:32:42.950 [DEBUG] [Thread-64822] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:32:42.958 [DEBUG] [Thread-64822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:32:42.958 [DEBUG] [Thread-64822] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:32:42.959 [DEBUG] [Thread-64822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:32:42.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:32:42.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:32:42.960 [DEBUG] [Thread-64822] [transport.py] [_log()] userauth is OK
2025-11-18T01:32:42.960 [DEBUG] [Thread-64822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:32:42.960 [DEBUG] [Thread-64822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:32:42.960 [DEBUG] [Thread-64822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:32:42.960 [DEBUG] [Thread-64822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:32:42.977 [INFO] [Thread-64822] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:32:42.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:32:43.605 [DEBUG] [Thread-64822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:32:43.605 [DEBUG] [Thread-64822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:32:43.605 [DEBUG] [Thread-64822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:32:43.646 [DEBUG] [Thread-64822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:32:43.646 [DEBUG] [Thread-64822] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:32:43.649 [DEBUG] [Thread-64822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:32:43.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:32:43.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:32:43.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:32:43.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:32:43.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:32:43.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:32:43.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:32:43.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:32:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:32:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.980946 -999.00  +12.90  17.29     50   +2.70 1 2 1 1 1     0    0 9.34 -61.18 ZNEsW 16.0 17.3 164.0 21.7 13.4 -21.1 13.3 -20.0 13.0 -19.9 13.3 -20.9
2025-11-18T01:32:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:32:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:32:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.980946
2025-11-18T01:32:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:32:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:32:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:32:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:32:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:32:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:32:38', tmtdew=11.52, humidity=45.71, cloud=0.0, wind=22.89, temperature=12.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:32:38', seeing=1.71, atlas_timestamp='2025-11-17T23:32:33.734', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:29:00')
2025-11-18T01:32:43.672 [DEBUG] [Thread-64822] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:32:43.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:32:43.772 [DEBUG] [Thread-64825] [transport.py] [_log()] starting thread (client mode): 0xd07008e0
2025-11-18T01:32:43.772 [DEBUG] [Thread-64825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:32:43.788 [DEBUG] [Thread-64825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:32:43.788 [INFO] [Thread-64825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:32:43.796 [DEBUG] [Thread-64825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:32:43.796 [DEBUG] [Thread-64825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:32:43.796 [DEBUG] [Thread-64825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:32:43.796 [DEBUG] [Thread-64825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:32:43.796 [DEBUG] [Thread-64825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] client lang: <none>
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] server lang: <none>
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] kex follows: False
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:32:43.797 [DEBUG] [Thread-64825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:32:43.798 [DEBUG] [Thread-64825] [transport.py] [_log()] Compression: none
2025-11-18T01:32:43.798 [DEBUG] [Thread-64825] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:32:43.859 [DEBUG] [Thread-64825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:32:43.859 [DEBUG] [Thread-64825] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:32:43.860 [DEBUG] [Thread-64825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:32:43.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:32:43.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:32:43.915 [DEBUG] [Thread-64825] [transport.py] [_log()] userauth is OK
2025-11-18T01:32:43.916 [DEBUG] [Thread-64825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:32:43.916 [DEBUG] [Thread-64825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:32:43.916 [DEBUG] [Thread-64825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:32:43.916 [DEBUG] [Thread-64825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:32:43.935 [INFO] [Thread-64825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:32:43.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:32:43.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:32:44.798 [DEBUG] [Thread-64825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:32:44.799 [DEBUG] [Thread-64825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:32:44.846 [DEBUG] [Thread-64825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:32:44.846 [DEBUG] [Thread-64825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:32:44.856 [DEBUG] [Thread-64825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:32:44.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:32:44.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:32: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') -> 00000000
2025-11-18T01:32:44.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:32:44.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:32:44.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:32:44.891 [DEBUG] [Thread-64825] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:32:57.101 [DEBUG] [Thread-64827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:32:58.941 [DEBUG] [Thread-64828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:12.140 [DEBUG] [Thread-64829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:33:14.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:33:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:33:15.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 33, 10), 11.6, 45.43, 0.0, 23.47, 12.9, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:33:15.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:33:10
2025-11-18T01:33:15.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:33:15.873 [DEBUG] [Thread-64830] [transport.py] [_log()] starting thread (client mode): 0xd07da380
2025-11-18T01:33:15.873 [DEBUG] [Thread-64830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:33:15.893 [DEBUG] [Thread-64830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:33:15.893 [INFO] [Thread-64830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] client lang: <none>
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] server lang: <none>
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] kex follows: False
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] Compression: none
2025-11-18T01:33:15.894 [DEBUG] [Thread-64830] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:33:15.912 [DEBUG] [Thread-64830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:33:15.912 [DEBUG] [Thread-64830] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:33:15.912 [DEBUG] [Thread-64830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:33:15.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:33:15.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:33:15.913 [DEBUG] [Thread-64830] [transport.py] [_log()] userauth is OK
2025-11-18T01:33:15.913 [DEBUG] [Thread-64830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:33:15.913 [DEBUG] [Thread-64830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:33:15.913 [DEBUG] [Thread-64830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:33:15.913 [DEBUG] [Thread-64830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:33:15.923 [INFO] [Thread-64830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:33:15.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:33:16.548 [DEBUG] [Thread-64830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:33:16.548 [DEBUG] [Thread-64830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:33:16.548 [DEBUG] [Thread-64830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:33:16.589 [DEBUG] [Thread-64830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:33:16.589 [DEBUG] [Thread-64830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:33:16.590 [DEBUG] [Thread-64830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:33:16.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:33:16.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:33:16.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:33:16.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:33:16.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:33:16.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:33:16.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.981293 -999.00  +12.90  15.43     49   +2.60 1 2 1 1 1     0    0 8.96 -62.54 ZNEsW 14.1 15.4 159.6 19.9 13.4 -21.1 13.2 -20.0 13.0 -19.9 13.3 -20.8
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.981293
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:33:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:33:10', tmtdew=11.6, humidity=45.43, cloud=0.0, wind=23.47, temperature=12.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:33:10', seeing=1.47, atlas_timestamp='2025-11-17T23:33:03.715', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:29:00')
2025-11-18T01:33:16.607 [DEBUG] [Thread-64830] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:33:16.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:33:16.693 [DEBUG] [Thread-64833] [transport.py] [_log()] starting thread (client mode): 0xd317ec80
2025-11-18T01:33:16.693 [DEBUG] [Thread-64833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:33:16.711 [DEBUG] [Thread-64833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:33:16.711 [INFO] [Thread-64833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] client lang: <none>
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] server lang: <none>
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] kex follows: False
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] Compression: none
2025-11-18T01:33:16.719 [DEBUG] [Thread-64833] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:33:16.774 [DEBUG] [Thread-64833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:33:16.775 [DEBUG] [Thread-64833] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:33:16.775 [DEBUG] [Thread-64833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:33:16.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:33:16.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:33:16.833 [DEBUG] [Thread-64833] [transport.py] [_log()] userauth is OK
2025-11-18T01:33:16.833 [DEBUG] [Thread-64833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:33:16.833 [DEBUG] [Thread-64833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:33:16.833 [DEBUG] [Thread-64833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:33:16.833 [DEBUG] [Thread-64833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:33:16.851 [INFO] [Thread-64833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:33:16.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:33:16.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:33:17.759 [DEBUG] [Thread-64833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:33:17.759 [DEBUG] [Thread-64833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:33:17.807 [DEBUG] [Thread-64833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:33:17.807 [DEBUG] [Thread-64833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:33:17.816 [DEBUG] [Thread-64833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:33:17.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:33:17.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:33:17.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
2025-11-18T01:33:17.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:33:17.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:33:17.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:33:17.849 [DEBUG] [Thread-64833] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:33:19.063 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:22.222 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:27.163 [DEBUG] [Thread-64835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:27.280 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:32.677 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:40.016 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:40.017 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:42.204 [DEBUG] [Thread-64836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:47.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:33:47.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:33: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
2025-11-18T01:33:48.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 33, 42), 11.66, 44.91, 0.0, 17.96, 12.88, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:33:48.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:33:42
2025-11-18T01:33:48.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:33:48.800 [DEBUG] [Thread-64837] [transport.py] [_log()] starting thread (client mode): 0xd07007f0
2025-11-18T01:33:48.801 [DEBUG] [Thread-64837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:33:48.820 [DEBUG] [Thread-64837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:33:48.820 [INFO] [Thread-64837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:33:48.823 [DEBUG] [Thread-64837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:33:48.823 [DEBUG] [Thread-64837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] client lang: <none>
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] server lang: <none>
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] kex follows: False
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:33:48.824 [DEBUG] [Thread-64837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:33:48.825 [DEBUG] [Thread-64837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:33:48.825 [DEBUG] [Thread-64837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:33:48.825 [DEBUG] [Thread-64837] [transport.py] [_log()] Compression: none
2025-11-18T01:33:48.825 [DEBUG] [Thread-64837] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:33:48.843 [DEBUG] [Thread-64837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:33:48.844 [DEBUG] [Thread-64837] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:33:48.844 [DEBUG] [Thread-64837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:33:48.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:33:48.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:33:48.846 [DEBUG] [Thread-64837] [transport.py] [_log()] userauth is OK
2025-11-18T01:33:48.847 [DEBUG] [Thread-64837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:33:48.847 [DEBUG] [Thread-64837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:33:48.847 [DEBUG] [Thread-64837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:33:48.847 [DEBUG] [Thread-64837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:33:48.882 [INFO] [Thread-64837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:33:48.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:33:49.503 [DEBUG] [Thread-64837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:33:49.503 [DEBUG] [Thread-64837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:33:49.503 [DEBUG] [Thread-64837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:33:49.544 [DEBUG] [Thread-64837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:33:49.544 [DEBUG] [Thread-64837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:33:49.548 [DEBUG] [Thread-64837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:33:49.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:33:49.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:33:49.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:33:49.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:33:49.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:33:49.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:33:49.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:33:49.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:33:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:33:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.981293 -999.00  +12.90  15.43     49   +2.60 1 2 1 1 1     0    0 8.96 -62.54 ZNEsW 14.1 15.4 159.6 19.9 13.4 -21.1 13.2 -20.0 13.0 -19.9 13.3 -20.8
2025-11-18T01:33:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:33:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:33:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.981293
2025-11-18T01:33:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:33:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:33:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:33:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:33:49.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:33:49.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:33:42', tmtdew=11.66, humidity=44.91, cloud=0.0, wind=17.96, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:33:42', seeing=1.76, atlas_timestamp='2025-11-17T23:33:03.715', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:29:00')
2025-11-18T01:33:49.571 [DEBUG] [Thread-64837] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:33:49.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:33:49.665 [DEBUG] [Thread-64840] [transport.py] [_log()] starting thread (client mode): 0xd0755540
2025-11-18T01:33:49.665 [DEBUG] [Thread-64840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:33:49.685 [DEBUG] [Thread-64840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:33:49.686 [INFO] [Thread-64840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] client lang: <none>
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] server lang: <none>
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] kex follows: False
2025-11-18T01:33:49.693 [DEBUG] [Thread-64840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:33:49.694 [DEBUG] [Thread-64840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:33:49.694 [DEBUG] [Thread-64840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:33:49.694 [DEBUG] [Thread-64840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:33:49.694 [DEBUG] [Thread-64840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:33:49.694 [DEBUG] [Thread-64840] [transport.py] [_log()] Compression: none
2025-11-18T01:33:49.694 [DEBUG] [Thread-64840] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:33:49.751 [DEBUG] [Thread-64840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:33:49.752 [DEBUG] [Thread-64840] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:33:49.752 [DEBUG] [Thread-64840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:33:49.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:33:49.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:33:49.807 [DEBUG] [Thread-64840] [transport.py] [_log()] userauth is OK
2025-11-18T01:33:49.808 [DEBUG] [Thread-64840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:33:49.808 [DEBUG] [Thread-64840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:33:49.808 [DEBUG] [Thread-64840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:33:49.808 [DEBUG] [Thread-64840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:33:49.827 [INFO] [Thread-64840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:33:49.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:33:49.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:33:50.704 [DEBUG] [Thread-64840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:33:50.704 [DEBUG] [Thread-64840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:33:50.752 [DEBUG] [Thread-64840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:33:50.752 [DEBUG] [Thread-64840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:33:50.761 [DEBUG] [Thread-64840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:33:50.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:33:50.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:33:50.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:33:50.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:33:50.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:33:50.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:33:50.795 [DEBUG] [Thread-64840] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:33:52.056 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:56.452 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:57.229 [DEBUG] [Thread-64842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:33:59.001 [DEBUG] [Thread-64843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:12.261 [DEBUG] [Thread-64844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:15.821 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:20.240 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:20.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:34:20.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:34:20.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:34:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 34, 14), 11.7, 44.78, 0.0, 17.96, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:34:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:34:14
2025-11-18T01:34:21.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:34:21.749 [DEBUG] [Thread-64845] [transport.py] [_log()] starting thread (client mode): 0xd3162110
2025-11-18T01:34:21.749 [DEBUG] [Thread-64845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:34:21.770 [DEBUG] [Thread-64845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:34:21.770 [INFO] [Thread-64845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:34:21.773 [DEBUG] [Thread-64845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] client lang: <none>
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] server lang: <none>
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] kex follows: False
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] Compression: none
2025-11-18T01:34:21.774 [DEBUG] [Thread-64845] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:34:21.792 [DEBUG] [Thread-64845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:34:21.793 [DEBUG] [Thread-64845] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:34:21.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:34:21.793 [DEBUG] [Thread-64845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:34:21.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:34:21.796 [DEBUG] [Thread-64845] [transport.py] [_log()] userauth is OK
2025-11-18T01:34:21.796 [DEBUG] [Thread-64845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:34:21.796 [DEBUG] [Thread-64845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:34:21.796 [DEBUG] [Thread-64845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:34:21.796 [DEBUG] [Thread-64845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:34:21.818 [INFO] [Thread-64845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:34:21.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:34:22.446 [DEBUG] [Thread-64845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:34:22.446 [DEBUG] [Thread-64845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:34:22.446 [DEBUG] [Thread-64845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:34:22.487 [DEBUG] [Thread-64845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:34:22.488 [DEBUG] [Thread-64845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:34:22.490 [DEBUG] [Thread-64845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:34:22.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:34:22.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:34:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:34:22.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:34:22.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:34:22.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:34:22.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:34:22.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.981640 -999.00  +12.90  18.12     50   +2.70 1 2 1 1 1     0    0 8.68 -73.35 ZNEsW 17.1 18.1 161.8 21.8 13.4 -21.0 13.3 -20.0 13.0 -20.0 13.3 -20.9
2025-11-18T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.981640
2025-11-18T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:34:14', tmtdew=11.7, humidity=44.78, cloud=0.0, wind=17.96, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:34:14', seeing=1.99, atlas_timestamp='2025-11-17T23:33:33.696', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:29:00')
2025-11-18T01:34:22.515 [DEBUG] [Thread-64845] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:34:22.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:34:22.613 [DEBUG] [Thread-64848] [transport.py] [_log()] starting thread (client mode): 0xd317f340
2025-11-18T01:34:22.613 [DEBUG] [Thread-64848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:34:22.633 [DEBUG] [Thread-64848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:34:22.633 [INFO] [Thread-64848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:34:22.641 [DEBUG] [Thread-64848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:34:22.641 [DEBUG] [Thread-64848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] client lang: <none>
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] server lang: <none>
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] kex follows: False
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:34:22.642 [DEBUG] [Thread-64848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:34:22.643 [DEBUG] [Thread-64848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:34:22.643 [DEBUG] [Thread-64848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:34:22.643 [DEBUG] [Thread-64848] [transport.py] [_log()] Compression: none
2025-11-18T01:34:22.643 [DEBUG] [Thread-64848] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:34:22.703 [DEBUG] [Thread-64848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:34:22.704 [DEBUG] [Thread-64848] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:34:22.713 [DEBUG] [Thread-64848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:34:22.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:34:22.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:34:22.760 [DEBUG] [Thread-64848] [transport.py] [_log()] userauth is OK
2025-11-18T01:34:22.760 [DEBUG] [Thread-64848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:34:22.760 [DEBUG] [Thread-64848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:34:22.760 [DEBUG] [Thread-64848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:34:22.760 [DEBUG] [Thread-64848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:34:22.779 [INFO] [Thread-64848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:34:22.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:34:22.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:34:23.695 [DEBUG] [Thread-64848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:34:23.695 [DEBUG] [Thread-64848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:34:23.744 [DEBUG] [Thread-64848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:34:23.744 [DEBUG] [Thread-64848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:34:23.752 [DEBUG] [Thread-64848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:34:23.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:34:23.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:34:23.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:34:23.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:34:23.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:34:23.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:34:23.783 [DEBUG] [Thread-64848] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:34:27.154 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:27.290 [DEBUG] [Thread-64850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:31.554 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:40.219 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:40.221 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:42.328 [DEBUG] [Thread-64851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:53.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:34:53.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:34:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:34:54.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 34, 46), 11.69, 44.96, 0.0, 19.6, 12.95, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:34:54.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:34:46
2025-11-18T01:34:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:34:54.747 [DEBUG] [Thread-64852] [transport.py] [_log()] starting thread (client mode): 0xd07008e0
2025-11-18T01:34:54.748 [DEBUG] [Thread-64852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:34:54.768 [DEBUG] [Thread-64852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:34:54.768 [INFO] [Thread-64852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:34:54.771 [DEBUG] [Thread-64852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] client lang: <none>
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] server lang: <none>
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] kex follows: False
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] Compression: none
2025-11-18T01:34:54.772 [DEBUG] [Thread-64852] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:34:54.790 [DEBUG] [Thread-64852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:34:54.790 [DEBUG] [Thread-64852] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:34:54.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:34:54.792 [DEBUG] [Thread-64852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:34:54.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:34:54.793 [DEBUG] [Thread-64852] [transport.py] [_log()] userauth is OK
2025-11-18T01:34:54.793 [DEBUG] [Thread-64852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:34:54.794 [DEBUG] [Thread-64852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:34:54.794 [DEBUG] [Thread-64852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:34:54.794 [DEBUG] [Thread-64852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:34:54.818 [INFO] [Thread-64852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:34:54.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:34:55.432 [DEBUG] [Thread-64852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:34:55.433 [DEBUG] [Thread-64852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:34:55.433 [DEBUG] [Thread-64852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:34:55.473 [DEBUG] [Thread-64852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:34:55.473 [DEBUG] [Thread-64852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:34:55.476 [DEBUG] [Thread-64852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:34:55.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:34:55.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:34:55.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:34:55.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:34:55.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:34:55.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:34:55.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:34:55.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:34:55.507 [DEBUG] [Thread-64852] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:34:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:34:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.981987 -999.00  +12.90  13.38     50   +2.70 1 2 1 1 1     0    0 8.59 -78.65 ZNEsW 11.5 13.4 177.2 17.9 13.4 -21.1 13.3 -20.0 13.1 -20.0 13.3 -20.9
2025-11-18T01:34:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:34:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:34:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.981987
2025-11-18T01:34:55.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:34:55.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:34:55.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:34:55.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:34:55.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:34:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:34:46', tmtdew=11.69, humidity=44.96, cloud=0.0, wind=19.6, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:34:46', seeing=1.64, atlas_timestamp='2025-11-17T23:34:03.677', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:29:00')
2025-11-18T01:34:55.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:34:55.614 [DEBUG] [Thread-64855] [transport.py] [_log()] starting thread (client mode): 0xd0755840
2025-11-18T01:34:55.614 [DEBUG] [Thread-64855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:34:55.633 [DEBUG] [Thread-64855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:34:55.633 [INFO] [Thread-64855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:34:55.643 [DEBUG] [Thread-64855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] client lang: <none>
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] server lang: <none>
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] kex follows: False
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:34:55.644 [DEBUG] [Thread-64855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:34:55.645 [DEBUG] [Thread-64855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:34:55.645 [DEBUG] [Thread-64855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:34:55.645 [DEBUG] [Thread-64855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:34:55.645 [DEBUG] [Thread-64855] [transport.py] [_log()] Compression: none
2025-11-18T01:34:55.645 [DEBUG] [Thread-64855] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:34:55.706 [DEBUG] [Thread-64855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:34:55.706 [DEBUG] [Thread-64855] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:34:55.707 [DEBUG] [Thread-64855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:34:55.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:34:55.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:34:55.774 [DEBUG] [Thread-64855] [transport.py] [_log()] userauth is OK
2025-11-18T01:34:55.774 [DEBUG] [Thread-64855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:34:55.774 [DEBUG] [Thread-64855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:34:55.775 [DEBUG] [Thread-64855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:34:55.775 [DEBUG] [Thread-64855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:34:55.799 [INFO] [Thread-64855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:34:55.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:34:55.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:34:56.642 [DEBUG] [Thread-64855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:34:56.642 [DEBUG] [Thread-64855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:34:56.693 [DEBUG] [Thread-64855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:34:56.693 [DEBUG] [Thread-64855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:34:56.705 [DEBUG] [Thread-64855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:34:56.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:34:56.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:34:56.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:34:56.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:34:56.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:34:56.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:34:56.750 [DEBUG] [Thread-64855] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:34:57.359 [DEBUG] [Thread-64857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:34:59.078 [DEBUG] [Thread-64858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:12.410 [DEBUG] [Thread-64859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:35:26.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:35:26.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:35:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 35, 18), 11.69, 44.95, 0.0, 20.54, 12.9, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:35:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:35:18
2025-11-18T01:35:27.434 [DEBUG] [Thread-64860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:27.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:35:27.676 [DEBUG] [Thread-64861] [transport.py] [_log()] starting thread (client mode): 0xd0755690
2025-11-18T01:35:27.676 [DEBUG] [Thread-64861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:35:27.707 [DEBUG] [Thread-64861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:35:27.707 [INFO] [Thread-64861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] client lang: <none>
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] server lang: <none>
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] kex follows: False
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:35:27.708 [DEBUG] [Thread-64861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:35:27.709 [DEBUG] [Thread-64861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:35:27.709 [DEBUG] [Thread-64861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:35:27.709 [DEBUG] [Thread-64861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:35:27.709 [DEBUG] [Thread-64861] [transport.py] [_log()] Compression: none
2025-11-18T01:35:27.709 [DEBUG] [Thread-64861] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:35:27.718 [DEBUG] [Thread-64861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:35:27.718 [DEBUG] [Thread-64861] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:35:27.719 [DEBUG] [Thread-64861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:35:27.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:35:27.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:35:27.720 [DEBUG] [Thread-64861] [transport.py] [_log()] userauth is OK
2025-11-18T01:35:27.721 [DEBUG] [Thread-64861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:35:27.721 [DEBUG] [Thread-64861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:35:27.721 [DEBUG] [Thread-64861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:35:27.721 [DEBUG] [Thread-64861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:35:27.738 [INFO] [Thread-64861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:35:27.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:35:28.384 [DEBUG] [Thread-64861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:35:28.384 [DEBUG] [Thread-64861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:35:28.385 [DEBUG] [Thread-64861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:35:28.425 [DEBUG] [Thread-64861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:35:28.426 [DEBUG] [Thread-64861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:35:28.429 [DEBUG] [Thread-64861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:35:28.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:35:28.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:35:28.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:35:28.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:35:28.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:35:28.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:35:28.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:35:28.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:35:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:35:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.982335 -999.00  +12.90  16.97     49   +2.70 1 2 1 1 1     0    0 8.34 -86.77 ZNEsW 16.2 17.0 165.8 22.4 13.4 -21.2 13.2 -20.0 13.0 -20.0 13.3 -21.1
2025-11-18T01:35:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:35:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:35:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.982335
2025-11-18T01:35:28.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:35:28.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:35:28.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:35:28.452 [DEBUG] [Thread-64861] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:35:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:35:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:35:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:35:18', tmtdew=11.69, humidity=44.95, cloud=0.0, wind=20.54, temperature=12.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:35:18', seeing=1.64, atlas_timestamp='2025-11-17T23:34:33.744', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:33:00')
2025-11-18T01:35:28.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:35:28.546 [DEBUG] [Thread-64864] [transport.py] [_log()] starting thread (client mode): 0xd0756800
2025-11-18T01:35:28.546 [DEBUG] [Thread-64864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:35:28.562 [DEBUG] [Thread-64864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:35:28.562 [INFO] [Thread-64864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:35:28.570 [DEBUG] [Thread-64864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:35:28.570 [DEBUG] [Thread-64864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:35:28.570 [DEBUG] [Thread-64864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:35:28.570 [DEBUG] [Thread-64864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] client lang: <none>
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] server lang: <none>
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] kex follows: False
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:35:28.571 [DEBUG] [Thread-64864] [transport.py] [_log()] Compression: none
2025-11-18T01:35:28.572 [DEBUG] [Thread-64864] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:35:28.632 [DEBUG] [Thread-64864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:35:28.632 [DEBUG] [Thread-64864] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:35:28.632 [DEBUG] [Thread-64864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:35:28.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:35:28.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:35:28.687 [DEBUG] [Thread-64864] [transport.py] [_log()] userauth is OK
2025-11-18T01:35:28.687 [DEBUG] [Thread-64864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:35:28.687 [DEBUG] [Thread-64864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:35:28.687 [DEBUG] [Thread-64864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:35:28.687 [DEBUG] [Thread-64864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:35:28.701 [INFO] [Thread-64864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:35:28.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:35:28.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:35:29.613 [DEBUG] [Thread-64864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:35:29.613 [DEBUG] [Thread-64864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:35:29.661 [DEBUG] [Thread-64864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:35:29.661 [DEBUG] [Thread-64864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:35:29.670 [DEBUG] [Thread-64864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:35:29.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:35:29.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:35:29.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
2025-11-18T01:35:29.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:35:29.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:35:29.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:35:29.717 [DEBUG] [Thread-64864] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:35:31.083 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:34.149 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:40.423 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:40.425 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:42.462 [DEBUG] [Thread-64866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:57.502 [DEBUG] [Thread-64867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:59.147 [DEBUG] [Thread-64868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:35:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:35:59.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:35:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:36:00.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 35, 50), 11.6, 44.74, 0.0, 20.47, 12.81, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:36:00.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:35:50
2025-11-18T01:36:00.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:36:00.657 [DEBUG] [Thread-64869] [transport.py] [_log()] starting thread (client mode): 0xd0712b90
2025-11-18T01:36:00.657 [DEBUG] [Thread-64869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:36:00.677 [DEBUG] [Thread-64869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:36:00.677 [INFO] [Thread-64869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:36:00.680 [DEBUG] [Thread-64869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:36:00.680 [DEBUG] [Thread-64869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] client lang: <none>
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] server lang: <none>
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] kex follows: False
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:36:00.681 [DEBUG] [Thread-64869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:36:00.682 [DEBUG] [Thread-64869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:36:00.682 [DEBUG] [Thread-64869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:36:00.682 [DEBUG] [Thread-64869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:36:00.682 [DEBUG] [Thread-64869] [transport.py] [_log()] Compression: none
2025-11-18T01:36:00.682 [DEBUG] [Thread-64869] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:36:00.699 [DEBUG] [Thread-64869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:36:00.699 [DEBUG] [Thread-64869] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:36:00.700 [DEBUG] [Thread-64869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:36:00.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:36:00.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:36:00.702 [DEBUG] [Thread-64869] [transport.py] [_log()] userauth is OK
2025-11-18T01:36:00.702 [DEBUG] [Thread-64869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:36:00.702 [DEBUG] [Thread-64869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:36:00.702 [DEBUG] [Thread-64869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:36:00.702 [DEBUG] [Thread-64869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:36:00.725 [INFO] [Thread-64869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:36:00.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:36:01.367 [DEBUG] [Thread-64869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:36:01.367 [DEBUG] [Thread-64869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:36:01.367 [DEBUG] [Thread-64869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:36:01.408 [DEBUG] [Thread-64869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:36:01.408 [DEBUG] [Thread-64869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:36:01.411 [DEBUG] [Thread-64869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:36:01.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:36:01.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:36:01.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:36:01.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:36:01.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:36:01.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:36:01.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:36:01.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:36:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:36:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.982682 -999.00  +12.90  11.63     50   +2.80 1 2 1 1 1     0    0 8.07 -96.54 ZNEsW 12.8 11.6 168.0 21.6 13.4 -21.2 13.3 -20.1 13.0 -20.0 13.3 -20.9
2025-11-18T01:36:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:36:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:36:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.982682
2025-11-18T01:36:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:36:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:36:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:36:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:36:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:36:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:35:50', tmtdew=11.6, humidity=44.74, cloud=0.0, wind=20.47, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:35:51', seeing=1.61, atlas_timestamp='2025-11-17T23:35:03.725', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:33:00')
2025-11-18T01:36:01.436 [DEBUG] [Thread-64869] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:36:01.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:36:01.532 [DEBUG] [Thread-64872] [transport.py] [_log()] starting thread (client mode): 0xd07a95a0
2025-11-18T01:36:01.533 [DEBUG] [Thread-64872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:36:01.548 [DEBUG] [Thread-64872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:36:01.548 [INFO] [Thread-64872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:36:01.556 [DEBUG] [Thread-64872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:36:01.556 [DEBUG] [Thread-64872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:36:01.556 [DEBUG] [Thread-64872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:36:01.556 [DEBUG] [Thread-64872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:36:01.556 [DEBUG] [Thread-64872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:36:01.556 [DEBUG] [Thread-64872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:36:01.557 [DEBUG] [Thread-64872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:36:01.557 [DEBUG] [Thread-64872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:36:01.557 [DEBUG] [Thread-64872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:36:01.557 [DEBUG] [Thread-64872] [transport.py] [_log()] client lang: <none>
2025-11-18T01:36:01.557 [DEBUG] [Thread-64872] [transport.py] [_log()] server lang: <none>
2025-11-18T01:36:01.557 [DEBUG] [Thread-64872] [transport.py] [_log()] kex follows: False
2025-11-18T01:36:01.557 [DEBUG] [Thread-64872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:36:01.557 [DEBUG] [Thread-64872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:36:01.558 [DEBUG] [Thread-64872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:36:01.558 [DEBUG] [Thread-64872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:36:01.558 [DEBUG] [Thread-64872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:36:01.558 [DEBUG] [Thread-64872] [transport.py] [_log()] Compression: none
2025-11-18T01:36:01.558 [DEBUG] [Thread-64872] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:36:01.620 [DEBUG] [Thread-64872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:36:01.621 [DEBUG] [Thread-64872] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:36:01.622 [DEBUG] [Thread-64872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:36:01.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:36:01.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:36:01.679 [DEBUG] [Thread-64872] [transport.py] [_log()] userauth is OK
2025-11-18T01:36:01.680 [DEBUG] [Thread-64872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:36:01.680 [DEBUG] [Thread-64872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:36:01.680 [DEBUG] [Thread-64872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:36:01.680 [DEBUG] [Thread-64872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:36:01.700 [INFO] [Thread-64872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:36:01.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:36:01.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:36:02.559 [DEBUG] [Thread-64872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:36:02.560 [DEBUG] [Thread-64872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:36:02.611 [DEBUG] [Thread-64872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:36:02.611 [DEBUG] [Thread-64872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:36:02.622 [DEBUG] [Thread-64872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:36:02.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:36:02.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:36:02.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:36:02.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:36:02.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:36:02.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:36:02.674 [DEBUG] [Thread-64872] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:36:12.533 [DEBUG] [Thread-64874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:36:27.580 [DEBUG] [Thread-64875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:36:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:36:32.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:36:32.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:36:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 36, 23), 11.51, 45.04, 0.0, 18.51, 12.81, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:36:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:36:23
2025-11-18T01:36:33.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:36:33.630 [DEBUG] [Thread-64876] [transport.py] [_log()] starting thread (client mode): 0xd31cd900
2025-11-18T01:36:33.630 [DEBUG] [Thread-64876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:36:33.648 [DEBUG] [Thread-64876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:36:33.648 [INFO] [Thread-64876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:36:33.651 [DEBUG] [Thread-64876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:36:33.651 [DEBUG] [Thread-64876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:36:33.651 [DEBUG] [Thread-64876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:36:33.651 [DEBUG] [Thread-64876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:36:33.651 [DEBUG] [Thread-64876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:36:33.651 [DEBUG] [Thread-64876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:36:33.651 [DEBUG] [Thread-64876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:36:33.651 [DEBUG] [Thread-64876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] client lang: <none>
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] server lang: <none>
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] kex follows: False
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] Compression: none
2025-11-18T01:36:33.652 [DEBUG] [Thread-64876] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:36:33.670 [DEBUG] [Thread-64876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:36:33.670 [DEBUG] [Thread-64876] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:36:33.671 [DEBUG] [Thread-64876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:36:33.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:36:33.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:36:33.672 [DEBUG] [Thread-64876] [transport.py] [_log()] userauth is OK
2025-11-18T01:36:33.673 [DEBUG] [Thread-64876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:36:33.673 [DEBUG] [Thread-64876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:36:33.673 [DEBUG] [Thread-64876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:36:33.673 [DEBUG] [Thread-64876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:36:33.697 [INFO] [Thread-64876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:36:33.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:36:34.355 [DEBUG] [Thread-64876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:36:34.355 [DEBUG] [Thread-64876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:36:34.355 [DEBUG] [Thread-64876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:36:34.396 [DEBUG] [Thread-64876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:36:34.397 [DEBUG] [Thread-64876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:36:34.400 [DEBUG] [Thread-64876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:36:34.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:36:34.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:36:34.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:36:34.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:36:34.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:36:34.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:36:34.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:36:34.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:36:34.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:36:34.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.983376 -999.00  +12.80  10.63     49   +2.50 1 2 1 1 1     0    0 7.53 -105.04 ZNEsW 9.8 10.6 163.8 17.1 13.4 -21.3 13.2 -20.0 13.0 -20.0 13.3 -20.9
2025-11-18T01:36:34.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:36:34.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:36:34.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.983376
2025-11-18T01:36:34.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:36:34.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:36:34.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:36:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:36:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:36:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:36:23', tmtdew=11.51, humidity=45.04, cloud=0.0, wind=18.51, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:36:23', seeing=1.51, atlas_timestamp='2025-11-17T23:36:03.686', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:33:00')
2025-11-18T01:36:34.426 [DEBUG] [Thread-64876] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:36:34.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:36:34.520 [DEBUG] [Thread-64879] [transport.py] [_log()] starting thread (client mode): 0xd07ab310
2025-11-18T01:36:34.520 [DEBUG] [Thread-64879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:36:34.535 [DEBUG] [Thread-64879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:36:34.535 [INFO] [Thread-64879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:36:34.542 [DEBUG] [Thread-64879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:36:34.542 [DEBUG] [Thread-64879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:36:34.542 [DEBUG] [Thread-64879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] client lang: <none>
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] server lang: <none>
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] kex follows: False
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] Compression: none
2025-11-18T01:36:34.543 [DEBUG] [Thread-64879] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:36:34.599 [DEBUG] [Thread-64879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:36:34.600 [DEBUG] [Thread-64879] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:36:34.600 [DEBUG] [Thread-64879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:36:34.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:36:34.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:36:34.655 [DEBUG] [Thread-64879] [transport.py] [_log()] userauth is OK
2025-11-18T01:36:34.655 [DEBUG] [Thread-64879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:36:34.655 [DEBUG] [Thread-64879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:36:34.656 [DEBUG] [Thread-64879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:36:34.656 [DEBUG] [Thread-64879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:36:34.675 [INFO] [Thread-64879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:36:34.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:36:34.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:36:35.495 [DEBUG] [Thread-64879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:36:35.495 [DEBUG] [Thread-64879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:36:35.542 [DEBUG] [Thread-64879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:36:35.542 [DEBUG] [Thread-64879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:36:35.551 [DEBUG] [Thread-64879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:36:35.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:36:35.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:36:35.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:36:35.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:36:35.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:36:35.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:36:35.584 [DEBUG] [Thread-64879] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:36:40.627 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:36:40.628 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:36:42.605 [DEBUG] [Thread-64881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:36:57.652 [DEBUG] [Thread-64882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:36:59.221 [DEBUG] [Thread-64883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:37:05.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:37:05.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:37:05.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:37:06.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 36, 55), 11.47, 45.34, 0.0, 20.27, 12.88, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:37:06.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:36:55
2025-11-18T01:37:06.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:37:06.591 [DEBUG] [Thread-64884] [transport.py] [_log()] starting thread (client mode): 0xd0712ce0
2025-11-18T01:37:06.591 [DEBUG] [Thread-64884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:37:06.611 [DEBUG] [Thread-64884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:37:06.611 [INFO] [Thread-64884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] client lang: <none>
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] server lang: <none>
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] kex follows: False
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:37:06.620 [DEBUG] [Thread-64884] [transport.py] [_log()] Compression: none
2025-11-18T01:37:06.621 [DEBUG] [Thread-64884] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:37:06.638 [DEBUG] [Thread-64884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:37:06.638 [DEBUG] [Thread-64884] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:37:06.638 [DEBUG] [Thread-64884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:37:06.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:37:06.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:37:06.639 [DEBUG] [Thread-64884] [transport.py] [_log()] userauth is OK
2025-11-18T01:37:06.639 [DEBUG] [Thread-64884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:37:06.639 [DEBUG] [Thread-64884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:37:06.639 [DEBUG] [Thread-64884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:37:06.639 [DEBUG] [Thread-64884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:37:06.672 [INFO] [Thread-64884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:37:06.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:37:07.315 [DEBUG] [Thread-64884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:37:07.315 [DEBUG] [Thread-64884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:37:07.315 [DEBUG] [Thread-64884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:37:07.356 [DEBUG] [Thread-64884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:37:07.356 [DEBUG] [Thread-64884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:37:07.359 [DEBUG] [Thread-64884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:37:07.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:37:07.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:37:07.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:37:07.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:37:07.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:37:07.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:37:07.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:37:07.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:37:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:37:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.983723 -999.00  +12.80  11.34     49   +2.40 1 2 1 1 1     0    0 7.53 -111.98 ZNEsW 12.8 11.3 163.2 20.3 13.4 -21.3 13.2 -20.1 13.0 -20.3 13.3 -21.2
2025-11-18T01:37:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:37:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:37:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.983723
2025-11-18T01:37:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:37:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:37:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:37:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:37:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:37:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:36:55', tmtdew=11.47, humidity=45.34, cloud=0.0, wind=20.27, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:36:55', seeing=1.49, atlas_timestamp='2025-11-17T23:36:33.667', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:33:00')
2025-11-18T01:37:07.377 [DEBUG] [Thread-64884] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:37:07.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:37:07.464 [DEBUG] [Thread-64887] [transport.py] [_log()] starting thread (client mode): 0xd07027a0
2025-11-18T01:37:07.464 [DEBUG] [Thread-64887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:37:07.479 [DEBUG] [Thread-64887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:37:07.479 [INFO] [Thread-64887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] client lang: <none>
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] server lang: <none>
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] kex follows: False
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] Compression: none
2025-11-18T01:37:07.487 [DEBUG] [Thread-64887] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:37:07.546 [DEBUG] [Thread-64887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:37:07.546 [DEBUG] [Thread-64887] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:37:07.547 [DEBUG] [Thread-64887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:37:07.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:37:07.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:37:07.603 [DEBUG] [Thread-64887] [transport.py] [_log()] userauth is OK
2025-11-18T01:37:07.603 [DEBUG] [Thread-64887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:37:07.603 [DEBUG] [Thread-64887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:37:07.603 [DEBUG] [Thread-64887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:37:07.603 [DEBUG] [Thread-64887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:37:07.617 [INFO] [Thread-64887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:37:07.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:37:07.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:37:08.481 [DEBUG] [Thread-64887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:37:08.481 [DEBUG] [Thread-64887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:37:08.529 [DEBUG] [Thread-64887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:37:08.529 [DEBUG] [Thread-64887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:37:08.537 [DEBUG] [Thread-64887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:37:08.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:37:08.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:37:08.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:37:08.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:37:08.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:37:08.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:37:08.569 [DEBUG] [Thread-64887] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:37:12.677 [DEBUG] [Thread-64889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:37:27.723 [DEBUG] [Thread-64890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:37:38.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:37:38.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:37:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:37:39.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 37, 27), 11.55, 45.08, 0.0, 18.37, 12.81, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:37:39.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:37:27
2025-11-18T01:37:39.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:37:39.541 [DEBUG] [Thread-64891] [transport.py] [_log()] starting thread (client mode): 0xd07ade70
2025-11-18T01:37:39.542 [DEBUG] [Thread-64891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:37:39.561 [DEBUG] [Thread-64891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:37:39.562 [INFO] [Thread-64891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:37:39.565 [DEBUG] [Thread-64891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] client lang: <none>
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] server lang: <none>
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] kex follows: False
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] Compression: none
2025-11-18T01:37:39.566 [DEBUG] [Thread-64891] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:37:39.574 [DEBUG] [Thread-64891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:37:39.575 [DEBUG] [Thread-64891] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:37:39.575 [DEBUG] [Thread-64891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:37:39.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:37:39.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:37:39.577 [DEBUG] [Thread-64891] [transport.py] [_log()] userauth is OK
2025-11-18T01:37:39.577 [DEBUG] [Thread-64891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:37:39.577 [DEBUG] [Thread-64891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:37:39.577 [DEBUG] [Thread-64891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:37:39.577 [DEBUG] [Thread-64891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:37:39.596 [INFO] [Thread-64891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:37:39.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:37:40.188 [DEBUG] [Thread-64891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:37:40.188 [DEBUG] [Thread-64891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:37:40.189 [DEBUG] [Thread-64891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:37:40.229 [DEBUG] [Thread-64891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:37:40.229 [DEBUG] [Thread-64891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:37:40.232 [DEBUG] [Thread-64891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:37:40.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:37:40.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:37:40.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:37:40.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:37:40.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:37:40.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:37:40.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:37:40.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.984129 -999.00  +12.80  11.20     49   +2.60 1 2 1 1 1     0    0 8.00 -97.53 ZNEsW 11.3 11.2 154.6 16.4 13.3 -21.3 13.2 -20.1 13.0 -20.2 13.3 -21.2
2025-11-18T01:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.984129
2025-11-18T01:37:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:37:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:37:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:37:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:37:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:37:40.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:37:27', tmtdew=11.55, humidity=45.08, cloud=0.0, wind=18.37, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:37:27', seeing=1.46, atlas_timestamp='2025-11-17T23:37:08.746', atlas_cloud=2, atlas_rain=1, zp_data=[0.18074999999999974, 0.21225000000000094, 0.2882499999999997, 0.21449999999999925, 0.21000000000000085, 0.28125, 0.23550000000000004, 0.2167500000000011, 0.17299999999999827, 0.29650000000000176, 0.4122500000000002, 0.3149999999999995, 0.29800000000000004, 0.4002499999999998, 0.20500000000000007, 0.11500000000000021, 0.19374999999999964, 0.3955000000000002, 0.5809999999999995, 0.6337499999999991, 0.4299999999999997, 0.37824999999999775, 0.1122500000000013, 0.0857499999999991, 0.1399999999999988, 0.4504999999999999, 0.9047499999999999, 1.3515000000000006, 0.5645000000000016, 0.46300000000000097, 0.03500000000000014, 0.2065000000000019, 0.27974999999999994], zp_timestamp='2025-11-17T23:33:00')
2025-11-18T01:37:40.256 [DEBUG] [Thread-64891] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:37:40.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:37:40.352 [DEBUG] [Thread-64894] [transport.py] [_log()] starting thread (client mode): 0xd07ad150
2025-11-18T01:37:40.352 [DEBUG] [Thread-64894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:37:40.366 [DEBUG] [Thread-64894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:37:40.366 [INFO] [Thread-64894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:37:40.374 [DEBUG] [Thread-64894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:37:40.374 [DEBUG] [Thread-64894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:37:40.374 [DEBUG] [Thread-64894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:37:40.374 [DEBUG] [Thread-64894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:37:40.374 [DEBUG] [Thread-64894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] client lang: <none>
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] server lang: <none>
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] kex follows: False
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:37:40.375 [DEBUG] [Thread-64894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:37:40.376 [DEBUG] [Thread-64894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:37:40.376 [DEBUG] [Thread-64894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:37:40.376 [DEBUG] [Thread-64894] [transport.py] [_log()] Compression: none
2025-11-18T01:37:40.376 [DEBUG] [Thread-64894] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:37:40.431 [DEBUG] [Thread-64894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:37:40.432 [DEBUG] [Thread-64894] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:37:40.432 [DEBUG] [Thread-64894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:37:40.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:37:40.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:37:40.491 [DEBUG] [Thread-64894] [transport.py] [_log()] userauth is OK
2025-11-18T01:37:40.492 [DEBUG] [Thread-64894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:37:40.492 [DEBUG] [Thread-64894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:37:40.492 [DEBUG] [Thread-64894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:37:40.492 [DEBUG] [Thread-64894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:37:40.514 [INFO] [Thread-64894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:37:40.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:37:40.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:37:40.831 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:37:40.832 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:37:41.366 [DEBUG] [Thread-64894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:37:41.366 [DEBUG] [Thread-64894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:37:41.415 [DEBUG] [Thread-64894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:37:41.415 [DEBUG] [Thread-64894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:37:41.423 [DEBUG] [Thread-64894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:37:41.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:37:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:37:41.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:37:41.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:37:41.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:37:41.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:37:41.457 [DEBUG] [Thread-64894] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:37:42.749 [DEBUG] [Thread-64896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:37:57.778 [DEBUG] [Thread-64897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:37:59.272 [DEBUG] [Thread-64898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:38:11.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:38:11.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:38:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:38:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 37, 59), 11.55, 45.43, 0.0, 22.13, 12.85, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:38:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:37:59
2025-11-18T01:38:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:38:12.406 [DEBUG] [Thread-64899] [transport.py] [_log()] starting thread (client mode): 0xd0703bb0
2025-11-18T01:38:12.406 [DEBUG] [Thread-64899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:38:12.427 [DEBUG] [Thread-64899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:38:12.427 [INFO] [Thread-64899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:38:12.430 [DEBUG] [Thread-64899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:38:12.430 [DEBUG] [Thread-64899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:38:12.430 [DEBUG] [Thread-64899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:38:12.430 [DEBUG] [Thread-64899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:38:12.430 [DEBUG] [Thread-64899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] client lang: <none>
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] server lang: <none>
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] kex follows: False
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:38:12.431 [DEBUG] [Thread-64899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:38:12.432 [DEBUG] [Thread-64899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:38:12.432 [DEBUG] [Thread-64899] [transport.py] [_log()] Compression: none
2025-11-18T01:38:12.432 [DEBUG] [Thread-64899] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:38:12.450 [DEBUG] [Thread-64899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:38:12.450 [DEBUG] [Thread-64899] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:38:12.451 [DEBUG] [Thread-64899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:38:12.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:38:12.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:38:12.453 [DEBUG] [Thread-64899] [transport.py] [_log()] userauth is OK
2025-11-18T01:38:12.453 [DEBUG] [Thread-64899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:38:12.453 [DEBUG] [Thread-64899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:38:12.453 [DEBUG] [Thread-64899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:38:12.453 [DEBUG] [Thread-64899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:38:12.477 [INFO] [Thread-64899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:38:12.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:38:12.806 [DEBUG] [Thread-64901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:38:13.137 [DEBUG] [Thread-64899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:38:13.137 [DEBUG] [Thread-64899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:38:13.137 [DEBUG] [Thread-64899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:38:13.178 [DEBUG] [Thread-64899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:38:13.179 [DEBUG] [Thread-64899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:38:13.181 [DEBUG] [Thread-64899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:38:13.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:38:13.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:38:13.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:38:13.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:38:13.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:38:13.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:38:13.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:38:13.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:38:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:38:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.984418 -999.00  +12.80  21.35     50   +2.80 1 2 1 1 1     0    0 7.90 -96.11 ZNEsW 20.4 21.4 157.8 26.3 13.3 -21.3 13.2 -20.0 13.0 -20.2 13.3 -21.2
2025-11-18T01:38:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:38:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:38:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.984418
2025-11-18T01:38:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:38:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:38:13.205 [DEBUG] [Thread-64899] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:38:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:38:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:38:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:38:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:37:59', tmtdew=11.55, humidity=45.43, cloud=0.0, wind=22.13, temperature=12.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:37:59', seeing=1.46, atlas_timestamp='2025-11-17T23:37:33.715', atlas_cloud=2, atlas_rain=1, zp_data=[0.1557499999999994, 0.16775000000000162, 0.23625000000000007, 0.1404999999999994, 0.21250000000000036, 0.30625000000000036, 0.23099999999999987, 0.2272500000000015, 0.23449999999999882, 0.2809999999999988, 0.4392499999999995, 0.37700000000000067, 0.3390000000000004, 0.29224999999999923, 0.2699999999999996, 0.26349999999999874, 0.2832499999999989, 0.4939999999999998, 0.8579999999999997, 0.709249999999999, 0.4269999999999996, 0.2622499999999981, 0.3912500000000012, 0.3882500000000011, 0.44899999999999984, 0.8205, 0.9997499999999997, 1.0865, 0.4350000000000005, 0.4150000000000009, 0.2680000000000007, 0.2560000000000002, 0.3827500000000006], zp_timestamp='2025-11-17T23:35:00')
2025-11-18T01:38:13.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:38:13.303 [DEBUG] [Thread-64903] [transport.py] [_log()] starting thread (client mode): 0xd31cce50
2025-11-18T01:38:13.303 [DEBUG] [Thread-64903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:38:13.318 [DEBUG] [Thread-64903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:38:13.318 [INFO] [Thread-64903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:38:13.326 [DEBUG] [Thread-64903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:38:13.326 [DEBUG] [Thread-64903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:38:13.326 [DEBUG] [Thread-64903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:38:13.326 [DEBUG] [Thread-64903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:38:13.326 [DEBUG] [Thread-64903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:38:13.326 [DEBUG] [Thread-64903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] client lang: <none>
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] server lang: <none>
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] kex follows: False
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] Compression: none
2025-11-18T01:38:13.327 [DEBUG] [Thread-64903] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:38:13.387 [DEBUG] [Thread-64903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:38:13.387 [DEBUG] [Thread-64903] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:38:13.388 [DEBUG] [Thread-64903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:38:13.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:38:13.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:38:13.443 [DEBUG] [Thread-64903] [transport.py] [_log()] userauth is OK
2025-11-18T01:38:13.443 [DEBUG] [Thread-64903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:38:13.444 [DEBUG] [Thread-64903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:38:13.444 [DEBUG] [Thread-64903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:38:13.444 [DEBUG] [Thread-64903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:38:13.462 [INFO] [Thread-64903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:38:13.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:38:13.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:38:14.321 [DEBUG] [Thread-64903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:38:14.321 [DEBUG] [Thread-64903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:38:14.368 [DEBUG] [Thread-64903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:38:14.369 [DEBUG] [Thread-64903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:38:14.378 [DEBUG] [Thread-64903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:38:14.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:38:14.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:38:14.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:38:14.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:38:14.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:38:14.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:38:14.412 [DEBUG] [Thread-64903] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:38:27.833 [DEBUG] [Thread-64905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:38:41.035 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:38:41.037 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:38:42.870 [DEBUG] [Thread-64906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:38:44.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:38:44.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:38:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:38:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 38, 31), 11.51, 45.53, 0.0, 21.91, 12.81, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:38:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:38:31
2025-11-18T01:38:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:38:45.363 [DEBUG] [Thread-64907] [transport.py] [_log()] starting thread (client mode): 0xd07ad960
2025-11-18T01:38:45.363 [DEBUG] [Thread-64907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:38:45.382 [DEBUG] [Thread-64907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:38:45.383 [INFO] [Thread-64907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:38:45.384 [DEBUG] [Thread-64907] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] client lang: <none>
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] server lang: <none>
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] kex follows: False
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:38:45.385 [DEBUG] [Thread-64907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:38:45.386 [DEBUG] [Thread-64907] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:38:45.386 [DEBUG] [Thread-64907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:38:45.386 [DEBUG] [Thread-64907] [transport.py] [_log()] Compression: none
2025-11-18T01:38:45.386 [DEBUG] [Thread-64907] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:38:45.400 [DEBUG] [Thread-64907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:38:45.400 [DEBUG] [Thread-64907] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:38:45.401 [DEBUG] [Thread-64907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:38:45.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:38:45.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:38:45.402 [DEBUG] [Thread-64907] [transport.py] [_log()] userauth is OK
2025-11-18T01:38:45.403 [DEBUG] [Thread-64907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:38:45.403 [DEBUG] [Thread-64907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:38:45.403 [DEBUG] [Thread-64907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:38:45.403 [DEBUG] [Thread-64907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:38:45.420 [INFO] [Thread-64907] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:38:45.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:38:46.178 [DEBUG] [Thread-64907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:38:46.178 [DEBUG] [Thread-64907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:38:46.178 [DEBUG] [Thread-64907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:38:46.219 [DEBUG] [Thread-64907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:38:46.219 [DEBUG] [Thread-64907] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:38:46.222 [DEBUG] [Thread-64907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:38:46.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:38:46.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:38:46.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:38:46.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:38:46.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:38:46.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:38:46.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:38:46.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:38:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:38:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.984765 -999.00  +12.80  17.99     50   +2.70 1 2 1 1 1     0    0 7.98 -94.48 ZNEsW 14.8 18.0 154.6 23.2 13.3 -21.4 13.2 -20.2 13.0 -20.2 13.3 -21.3
2025-11-18T01:38:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:38:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:38:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.984765
2025-11-18T01:38:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:38:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:38:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:38:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:38:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:38:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:38:31', tmtdew=11.51, humidity=45.53, cloud=0.0, wind=21.91, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:38:31', seeing=1.37, atlas_timestamp='2025-11-17T23:38:03.696', atlas_cloud=2, atlas_rain=1, zp_data=[0.1557499999999994, 0.16775000000000162, 0.23625000000000007, 0.1404999999999994, 0.21250000000000036, 0.30625000000000036, 0.23099999999999987, 0.2272500000000015, 0.23449999999999882, 0.2809999999999988, 0.4392499999999995, 0.37700000000000067, 0.3390000000000004, 0.29224999999999923, 0.2699999999999996, 0.26349999999999874, 0.2832499999999989, 0.4939999999999998, 0.8579999999999997, 0.709249999999999, 0.4269999999999996, 0.2622499999999981, 0.3912500000000012, 0.3882500000000011, 0.44899999999999984, 0.8205, 0.9997499999999997, 1.0865, 0.4350000000000005, 0.4150000000000009, 0.2680000000000007, 0.2560000000000002, 0.3827500000000006], zp_timestamp='2025-11-17T23:35:00')
2025-11-18T01:38:46.242 [DEBUG] [Thread-64907] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:38:46.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:38:46.338 [DEBUG] [Thread-64910] [transport.py] [_log()] starting thread (client mode): 0xd0701b10
2025-11-18T01:38:46.338 [DEBUG] [Thread-64910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:38:46.353 [DEBUG] [Thread-64910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:38:46.353 [INFO] [Thread-64910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:38:46.360 [DEBUG] [Thread-64910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] client lang: <none>
2025-11-18T01:38:46.361 [DEBUG] [Thread-64910] [transport.py] [_log()] server lang: <none>
2025-11-18T01:38:46.362 [DEBUG] [Thread-64910] [transport.py] [_log()] kex follows: False
2025-11-18T01:38:46.362 [DEBUG] [Thread-64910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:38:46.362 [DEBUG] [Thread-64910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:38:46.362 [DEBUG] [Thread-64910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:38:46.362 [DEBUG] [Thread-64910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:38:46.362 [DEBUG] [Thread-64910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:38:46.362 [DEBUG] [Thread-64910] [transport.py] [_log()] Compression: none
2025-11-18T01:38:46.362 [DEBUG] [Thread-64910] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:38:46.420 [DEBUG] [Thread-64910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:38:46.420 [DEBUG] [Thread-64910] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:38:46.421 [DEBUG] [Thread-64910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:38:46.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:38:46.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:38:46.475 [DEBUG] [Thread-64910] [transport.py] [_log()] userauth is OK
2025-11-18T01:38:46.476 [DEBUG] [Thread-64910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:38:46.476 [DEBUG] [Thread-64910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:38:46.476 [DEBUG] [Thread-64910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:38:46.476 [DEBUG] [Thread-64910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:38:46.495 [INFO] [Thread-64910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:38:46.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:38:46.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:38:47.373 [DEBUG] [Thread-64910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:38:47.373 [DEBUG] [Thread-64910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:38:47.426 [DEBUG] [Thread-64910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:38:47.426 [DEBUG] [Thread-64910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:38:47.435 [DEBUG] [Thread-64910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:38:47.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:38:47.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:38:47.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:38:47.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:38:47.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:38:47.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:38:47.468 [DEBUG] [Thread-64910] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:38:57.902 [DEBUG] [Thread-64912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:38:58.195 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:38:59.353 [DEBUG] [Thread-64913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:03.420 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:06.494 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:12.897 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:12.944 [DEBUG] [Thread-64914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:17.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:39:17.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:39:17.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:39:18.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 39, 3), 11.44, 45.78, 0.0, 21.47, 12.83, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:39:18.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:39:03
2025-11-18T01:39:18.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:39:18.416 [DEBUG] [Thread-64915] [transport.py] [_log()] starting thread (client mode): 0xd0701990
2025-11-18T01:39:18.417 [DEBUG] [Thread-64915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:39:18.438 [DEBUG] [Thread-64915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:39:18.438 [INFO] [Thread-64915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] client lang: <none>
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] server lang: <none>
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] kex follows: False
2025-11-18T01:39:18.441 [DEBUG] [Thread-64915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:39:18.442 [DEBUG] [Thread-64915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:39:18.442 [DEBUG] [Thread-64915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:39:18.442 [DEBUG] [Thread-64915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:39:18.442 [DEBUG] [Thread-64915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:39:18.442 [DEBUG] [Thread-64915] [transport.py] [_log()] Compression: none
2025-11-18T01:39:18.442 [DEBUG] [Thread-64915] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:39:18.462 [DEBUG] [Thread-64915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:39:18.462 [DEBUG] [Thread-64915] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:39:18.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:39:18.463 [DEBUG] [Thread-64915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:39:18.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:39:18.465 [DEBUG] [Thread-64915] [transport.py] [_log()] userauth is OK
2025-11-18T01:39:18.465 [DEBUG] [Thread-64915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:39:18.465 [DEBUG] [Thread-64915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:39:18.465 [DEBUG] [Thread-64915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:39:18.465 [DEBUG] [Thread-64915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:39:18.488 [INFO] [Thread-64915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:39:18.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:39:19.102 [DEBUG] [Thread-64915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:39:19.103 [DEBUG] [Thread-64915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:39:19.103 [DEBUG] [Thread-64915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:39:19.143 [DEBUG] [Thread-64915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:39:19.144 [DEBUG] [Thread-64915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:39:19.146 [DEBUG] [Thread-64915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:39:19.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:39:19.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:39:19.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:39:19.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:39:19.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:39:19.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:39:19.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:39:19.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:39:19.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:39:19.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.985112 -999.00  +12.80  11.85     49   +2.60 1 2 1 1 1     0    0 7.79 -89.59 ZNEsW 16.8 11.8 166.4 17.2 13.3 -21.3 13.2 -20.3 13.0 -20.4 13.3 -21.3
2025-11-18T01:39:19.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:39:19.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:39:19.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.985112
2025-11-18T01:39:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:39:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:39:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:39:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:39:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:39:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:39:03', tmtdew=11.44, humidity=45.78, cloud=0.0, wind=21.47, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:39:03', seeing=1.22, atlas_timestamp='2025-11-17T23:38:33.677', atlas_cloud=2, atlas_rain=1, zp_data=[0.1557499999999994, 0.16775000000000162, 0.23625000000000007, 0.1404999999999994, 0.21250000000000036, 0.30625000000000036, 0.23099999999999987, 0.2272500000000015, 0.23449999999999882, 0.2809999999999988, 0.4392499999999995, 0.37700000000000067, 0.3390000000000004, 0.29224999999999923, 0.2699999999999996, 0.26349999999999874, 0.2832499999999989, 0.4939999999999998, 0.8579999999999997, 0.709249999999999, 0.4269999999999996, 0.2622499999999981, 0.3912500000000012, 0.3882500000000011, 0.44899999999999984, 0.8205, 0.9997499999999997, 1.0865, 0.4350000000000005, 0.4150000000000009, 0.2680000000000007, 0.2560000000000002, 0.3827500000000006], zp_timestamp='2025-11-17T23:35:00')
2025-11-18T01:39:19.172 [DEBUG] [Thread-64915] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:39:19.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:39:19.268 [DEBUG] [Thread-64918] [transport.py] [_log()] starting thread (client mode): 0xd07af3d0
2025-11-18T01:39:19.268 [DEBUG] [Thread-64918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:39:19.283 [DEBUG] [Thread-64918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:39:19.283 [INFO] [Thread-64918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:39:19.291 [DEBUG] [Thread-64918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:39:19.291 [DEBUG] [Thread-64918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:39:19.291 [DEBUG] [Thread-64918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] client lang: <none>
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] server lang: <none>
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] kex follows: False
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:39:19.292 [DEBUG] [Thread-64918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:39:19.293 [DEBUG] [Thread-64918] [transport.py] [_log()] Compression: none
2025-11-18T01:39:19.293 [DEBUG] [Thread-64918] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:39:19.352 [DEBUG] [Thread-64918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:39:19.352 [DEBUG] [Thread-64918] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:39:19.352 [DEBUG] [Thread-64918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:39:19.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:39:19.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:39:19.408 [DEBUG] [Thread-64918] [transport.py] [_log()] userauth is OK
2025-11-18T01:39:19.408 [DEBUG] [Thread-64918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:39:19.408 [DEBUG] [Thread-64918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:39:19.408 [DEBUG] [Thread-64918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:39:19.417 [DEBUG] [Thread-64918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:39:19.438 [INFO] [Thread-64918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:39:19.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:39:19.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:39:20.363 [DEBUG] [Thread-64918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:39:20.363 [DEBUG] [Thread-64918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:39:20.411 [DEBUG] [Thread-64918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:39:20.411 [DEBUG] [Thread-64918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:39:20.420 [DEBUG] [Thread-64918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:39:20.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:39:20.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:39:20.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:39:20.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:39:20.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:39:20.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:39:20.455 [DEBUG] [Thread-64918] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:39:27.971 [DEBUG] [Thread-64920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:41.239 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:41.240 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:43.010 [DEBUG] [Thread-64921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:50.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:39:50.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:39:50.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:39:51.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 39, 35), 11.51, 45.54, 0.0, 22.0, 12.85, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:39:51.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:39:35
2025-11-18T01:39:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:39:51.404 [DEBUG] [Thread-64922] [transport.py] [_log()] starting thread (client mode): 0xd07abf70
2025-11-18T01:39:51.404 [DEBUG] [Thread-64922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:39:51.424 [DEBUG] [Thread-64922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:39:51.424 [INFO] [Thread-64922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:39:51.427 [DEBUG] [Thread-64922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:39:51.427 [DEBUG] [Thread-64922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:39:51.427 [DEBUG] [Thread-64922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:39:51.427 [DEBUG] [Thread-64922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] client lang: <none>
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] server lang: <none>
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] kex follows: False
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:39:51.428 [DEBUG] [Thread-64922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:39:51.429 [DEBUG] [Thread-64922] [transport.py] [_log()] Compression: none
2025-11-18T01:39:51.429 [DEBUG] [Thread-64922] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:39:51.448 [DEBUG] [Thread-64922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:39:51.448 [DEBUG] [Thread-64922] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:39:51.449 [DEBUG] [Thread-64922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:39:51.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:39:51.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:39:51.452 [DEBUG] [Thread-64922] [transport.py] [_log()] userauth is OK
2025-11-18T01:39:51.452 [DEBUG] [Thread-64922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:39:51.452 [DEBUG] [Thread-64922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:39:51.452 [DEBUG] [Thread-64922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:39:51.453 [DEBUG] [Thread-64922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:39:51.480 [INFO] [Thread-64922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:39:51.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:39:52.095 [DEBUG] [Thread-64922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:39:52.095 [DEBUG] [Thread-64922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:39:52.095 [DEBUG] [Thread-64922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:39:52.136 [DEBUG] [Thread-64922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:39:52.137 [DEBUG] [Thread-64922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:39:52.139 [DEBUG] [Thread-64922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:39:52.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:39:52.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:39:52.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:39:52.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:39:52.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:39:52.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:39:52.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:39:52.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:39:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:39:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.985807 -999.00  +12.70  16.32     49   +2.40 1 2 1 1 1     0    0 7.96 -85.31 ZNEsW 14.9 16.3 165.4 17.9 13.3 -21.9 13.2 -20.6 13.0 -20.8 13.3 -21.7
2025-11-18T01:39:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:39:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:39:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.985807
2025-11-18T01:39:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:39:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:39:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:39:52.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:39:52.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:39:52.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:39:35', tmtdew=11.51, humidity=45.54, cloud=0.0, wind=22.0, temperature=12.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:39:35', seeing=1.22, atlas_timestamp='2025-11-17T23:39:33.725', atlas_cloud=2, atlas_rain=1, zp_data=[0.1557499999999994, 0.16775000000000162, 0.23625000000000007, 0.1404999999999994, 0.21250000000000036, 0.30625000000000036, 0.23099999999999987, 0.2272500000000015, 0.23449999999999882, 0.2809999999999988, 0.4392499999999995, 0.37700000000000067, 0.3390000000000004, 0.29224999999999923, 0.2699999999999996, 0.26349999999999874, 0.2832499999999989, 0.4939999999999998, 0.8579999999999997, 0.709249999999999, 0.4269999999999996, 0.2622499999999981, 0.3912500000000012, 0.3882500000000011, 0.44899999999999984, 0.8205, 0.9997499999999997, 1.0865, 0.4350000000000005, 0.4150000000000009, 0.2680000000000007, 0.2560000000000002, 0.3827500000000006], zp_timestamp='2025-11-17T23:35:00')
2025-11-18T01:39:52.161 [DEBUG] [Thread-64922] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:39:52.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:39:52.257 [DEBUG] [Thread-64925] [transport.py] [_log()] starting thread (client mode): 0xd07100a0
2025-11-18T01:39:52.258 [DEBUG] [Thread-64925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:39:52.277 [DEBUG] [Thread-64925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:39:52.277 [INFO] [Thread-64925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:39:52.284 [DEBUG] [Thread-64925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:39:52.284 [DEBUG] [Thread-64925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:39:52.284 [DEBUG] [Thread-64925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:39:52.284 [DEBUG] [Thread-64925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:39:52.284 [DEBUG] [Thread-64925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:39:52.284 [DEBUG] [Thread-64925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:39:52.284 [DEBUG] [Thread-64925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:39:52.284 [DEBUG] [Thread-64925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] client lang: <none>
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] server lang: <none>
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] kex follows: False
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] Compression: none
2025-11-18T01:39:52.285 [DEBUG] [Thread-64925] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:39:52.343 [DEBUG] [Thread-64925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:39:52.343 [DEBUG] [Thread-64925] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:39:52.344 [DEBUG] [Thread-64925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:39:52.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:39:52.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:39:52.400 [DEBUG] [Thread-64925] [transport.py] [_log()] userauth is OK
2025-11-18T01:39:52.400 [DEBUG] [Thread-64925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:39:52.400 [DEBUG] [Thread-64925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:39:52.400 [DEBUG] [Thread-64925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:39:52.400 [DEBUG] [Thread-64925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:39:52.423 [INFO] [Thread-64925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:39:52.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:39:52.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:39:53.288 [DEBUG] [Thread-64925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:39:53.288 [DEBUG] [Thread-64925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:39:53.336 [DEBUG] [Thread-64925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:39:53.336 [DEBUG] [Thread-64925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:39:53.345 [DEBUG] [Thread-64925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:39:53.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:39:53.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:39:53.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:39:53.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:39:53.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:39:53.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:39:53.379 [DEBUG] [Thread-64925] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:39:58.040 [DEBUG] [Thread-64927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:39:59.429 [DEBUG] [Thread-64928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:13.080 [DEBUG] [Thread-64929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:15.576 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:18.773 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:23.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:40:23.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:40: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
2025-11-18T01:40:23.846 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:24.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 40, 7), 11.5, 45.59, 0.0, 19.25, 12.88, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:40:24.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:40:07
2025-11-18T01:40:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:40:24.375 [DEBUG] [Thread-64930] [transport.py] [_log()] starting thread (client mode): 0xd0710790
2025-11-18T01:40:24.375 [DEBUG] [Thread-64930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:40:24.395 [DEBUG] [Thread-64930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:40:24.395 [INFO] [Thread-64930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] client lang: <none>
2025-11-18T01:40:24.398 [DEBUG] [Thread-64930] [transport.py] [_log()] server lang: <none>
2025-11-18T01:40:24.399 [DEBUG] [Thread-64930] [transport.py] [_log()] kex follows: False
2025-11-18T01:40:24.399 [DEBUG] [Thread-64930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:40:24.399 [DEBUG] [Thread-64930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:40:24.399 [DEBUG] [Thread-64930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:40:24.399 [DEBUG] [Thread-64930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:40:24.399 [DEBUG] [Thread-64930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:40:24.399 [DEBUG] [Thread-64930] [transport.py] [_log()] Compression: none
2025-11-18T01:40:24.399 [DEBUG] [Thread-64930] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:40:24.406 [DEBUG] [Thread-64930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:40:24.406 [DEBUG] [Thread-64930] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:40:24.406 [DEBUG] [Thread-64930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:40:24.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:40:24.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:40:24.407 [DEBUG] [Thread-64930] [transport.py] [_log()] userauth is OK
2025-11-18T01:40:24.407 [DEBUG] [Thread-64930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:40:24.407 [DEBUG] [Thread-64930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:40:24.407 [DEBUG] [Thread-64930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:40:24.407 [DEBUG] [Thread-64930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:40:24.435 [INFO] [Thread-64930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:40:24.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:40:25.090 [DEBUG] [Thread-64930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:40:25.090 [DEBUG] [Thread-64930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:40:25.090 [DEBUG] [Thread-64930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:40:25.131 [DEBUG] [Thread-64930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:40:25.131 [DEBUG] [Thread-64930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:40:25.134 [DEBUG] [Thread-64930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:40:25.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:40:25.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:40:25.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:40:25.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:40:25.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:40:25.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:40:25.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:40:25.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:40:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:40:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.986154 -999.00  +12.70  13.46     49   +2.40 1 2 1 1 1     0    0 8.00 -81.91 ZNEsW 16.6 13.5 168.7 17.8 13.3 -21.9 13.2 -20.8 12.9 -20.7 13.2 -21.9
2025-11-18T01:40:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:40:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:40:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.986154
2025-11-18T01:40:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:40:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:40:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:40:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:40:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:40:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:40:07', tmtdew=11.5, humidity=45.59, cloud=0.0, wind=19.25, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:40:07', seeing=1.2, atlas_timestamp='2025-11-17T23:40:03.706', atlas_cloud=2, atlas_rain=1, zp_data=[0.1557499999999994, 0.16775000000000162, 0.23625000000000007, 0.1404999999999994, 0.21250000000000036, 0.30625000000000036, 0.23099999999999987, 0.2272500000000015, 0.23449999999999882, 0.2809999999999988, 0.4392499999999995, 0.37700000000000067, 0.3390000000000004, 0.29224999999999923, 0.2699999999999996, 0.26349999999999874, 0.2832499999999989, 0.4939999999999998, 0.8579999999999997, 0.709249999999999, 0.4269999999999996, 0.2622499999999981, 0.3912500000000012, 0.3882500000000011, 0.44899999999999984, 0.8205, 0.9997499999999997, 1.0865, 0.4350000000000005, 0.4150000000000009, 0.2680000000000007, 0.2560000000000002, 0.3827500000000006], zp_timestamp='2025-11-17T23:35:00')
2025-11-18T01:40:25.170 [DEBUG] [Thread-64930] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:40:25.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:40:25.259 [DEBUG] [Thread-64933] [transport.py] [_log()] starting thread (client mode): 0xd07a8610
2025-11-18T01:40:25.259 [DEBUG] [Thread-64933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:40:25.274 [DEBUG] [Thread-64933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:40:25.274 [INFO] [Thread-64933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:40:25.282 [DEBUG] [Thread-64933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:40:25.282 [DEBUG] [Thread-64933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:40:25.282 [DEBUG] [Thread-64933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:40:25.282 [DEBUG] [Thread-64933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:40:25.282 [DEBUG] [Thread-64933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:40:25.282 [DEBUG] [Thread-64933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:40:25.282 [DEBUG] [Thread-64933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:40:25.282 [DEBUG] [Thread-64933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] client lang: <none>
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] server lang: <none>
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] kex follows: False
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:40:25.283 [DEBUG] [Thread-64933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:40:25.284 [DEBUG] [Thread-64933] [transport.py] [_log()] Compression: none
2025-11-18T01:40:25.284 [DEBUG] [Thread-64933] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:40:25.339 [DEBUG] [Thread-64933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:40:25.340 [DEBUG] [Thread-64933] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:40:25.340 [DEBUG] [Thread-64933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:40:25.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:40:25.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:40:25.401 [DEBUG] [Thread-64933] [transport.py] [_log()] userauth is OK
2025-11-18T01:40:25.401 [DEBUG] [Thread-64933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:40:25.401 [DEBUG] [Thread-64933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:40:25.401 [DEBUG] [Thread-64933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:40:25.401 [DEBUG] [Thread-64933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:40:25.423 [INFO] [Thread-64933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:40:25.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:40:25.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:40:26.269 [DEBUG] [Thread-64933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:40:26.269 [DEBUG] [Thread-64933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:40:26.317 [DEBUG] [Thread-64933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:40:26.318 [DEBUG] [Thread-64933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:40:26.330 [DEBUG] [Thread-64933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:40:26.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:40:26.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:40:26.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:40:26.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:40:26.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:40:26.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:40:26.367 [DEBUG] [Thread-64933] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:40:28.108 [DEBUG] [Thread-64935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:29.290 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:41.441 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:41.442 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:43.149 [DEBUG] [Thread-64936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:48.634 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:52.999 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:56.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:40:56.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:40:56.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
2025-11-18T01:40:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 40, 39), 11.45, 45.89, 0.0, 23.11, 12.83, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:40:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:40:39
2025-11-18T01:40:57.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:40:57.307 [DEBUG] [Thread-64937] [transport.py] [_log()] starting thread (client mode): 0xd07ab1c0
2025-11-18T01:40:57.307 [DEBUG] [Thread-64937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:40:57.327 [DEBUG] [Thread-64937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:40:57.328 [INFO] [Thread-64937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:40:57.331 [DEBUG] [Thread-64937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:40:57.331 [DEBUG] [Thread-64937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:40:57.331 [DEBUG] [Thread-64937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:40:57.331 [DEBUG] [Thread-64937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:40:57.331 [DEBUG] [Thread-64937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] client lang: <none>
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] server lang: <none>
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] kex follows: False
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] Compression: none
2025-11-18T01:40:57.332 [DEBUG] [Thread-64937] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:40:57.349 [DEBUG] [Thread-64937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:40:57.349 [DEBUG] [Thread-64937] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:40:57.350 [DEBUG] [Thread-64937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:40:57.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:40:57.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:40:57.352 [DEBUG] [Thread-64937] [transport.py] [_log()] userauth is OK
2025-11-18T01:40:57.353 [DEBUG] [Thread-64937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:40:57.353 [DEBUG] [Thread-64937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:40:57.353 [DEBUG] [Thread-64937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:40:57.353 [DEBUG] [Thread-64937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:40:57.377 [INFO] [Thread-64937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:40:57.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:40:58.005 [DEBUG] [Thread-64937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:40:58.005 [DEBUG] [Thread-64937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:40:58.005 [DEBUG] [Thread-64937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:40:58.046 [DEBUG] [Thread-64937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:40:58.046 [DEBUG] [Thread-64937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:40:58.049 [DEBUG] [Thread-64937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:40:58.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:40:58.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:40:58.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:40:58.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:40:58.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:40:58.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:40:58.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:40:58.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:40:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:40:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.986501 -999.00  +12.70  17.30     50   +2.70 1 2 1 1 1     0    0 8.14 -77.66 ZNEsW 15.4 17.3 176.7 23.3 13.3 -21.8 13.2 -20.7 12.9 -20.8 13.3 -21.8
2025-11-18T01:40:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:40:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:40:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.986501
2025-11-18T01:40:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:40:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:40:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:40:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:40:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:40:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:40:39', tmtdew=11.45, humidity=45.89, cloud=0.0, wind=23.11, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:40:39', seeing=1.2, atlas_timestamp='2025-11-17T23:40:33.686', atlas_cloud=2, atlas_rain=1, zp_data=[0.1557499999999994, 0.16775000000000162, 0.23625000000000007, 0.1404999999999994, 0.21250000000000036, 0.30625000000000036, 0.23099999999999987, 0.2272500000000015, 0.23449999999999882, 0.2809999999999988, 0.4392499999999995, 0.37700000000000067, 0.3390000000000004, 0.29224999999999923, 0.2699999999999996, 0.26349999999999874, 0.2832499999999989, 0.4939999999999998, 0.8579999999999997, 0.709249999999999, 0.4269999999999996, 0.2622499999999981, 0.3912500000000012, 0.3882500000000011, 0.44899999999999984, 0.8205, 0.9997499999999997, 1.0865, 0.4350000000000005, 0.4150000000000009, 0.2680000000000007, 0.2560000000000002, 0.3827500000000006], zp_timestamp='2025-11-17T23:35:00')
2025-11-18T01:40:58.067 [DEBUG] [Thread-64937] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:40:58.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:40:58.157 [DEBUG] [Thread-64940] [transport.py] [_log()] starting thread (client mode): 0xd07af580
2025-11-18T01:40:58.158 [DEBUG] [Thread-64940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:40:58.172 [DEBUG] [Thread-64940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:40:58.172 [INFO] [Thread-64940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:40:58.179 [DEBUG] [Thread-64942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:40:58.179 [DEBUG] [Thread-64940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:40:58.179 [DEBUG] [Thread-64940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:40:58.179 [DEBUG] [Thread-64940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:40:58.179 [DEBUG] [Thread-64940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] client lang: <none>
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] server lang: <none>
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] kex follows: False
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] Compression: none
2025-11-18T01:40:58.180 [DEBUG] [Thread-64940] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:40:58.242 [DEBUG] [Thread-64940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:40:58.242 [DEBUG] [Thread-64940] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:40:58.242 [DEBUG] [Thread-64940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:40:58.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:40:58.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:40:58.299 [DEBUG] [Thread-64940] [transport.py] [_log()] userauth is OK
2025-11-18T01:40:58.299 [DEBUG] [Thread-64940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:40:58.299 [DEBUG] [Thread-64940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:40:58.299 [DEBUG] [Thread-64940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:40:58.299 [DEBUG] [Thread-64940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:40:58.314 [INFO] [Thread-64940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:40:58.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:40:58.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:40:59.126 [DEBUG] [Thread-64940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:40:59.126 [DEBUG] [Thread-64940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:40:59.174 [DEBUG] [Thread-64940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:40:59.174 [DEBUG] [Thread-64940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:40:59.182 [DEBUG] [Thread-64940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:40:59.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:40:59.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:40:59.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:40:59.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:40:59.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:40:59.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:40:59.213 [DEBUG] [Thread-64940] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:40:59.482 [DEBUG] [Thread-64943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:12.420 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:13.208 [DEBUG] [Thread-64944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:16.841 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:23.790 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:28.157 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:28.235 [DEBUG] [Thread-64945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:29.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:41:29.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:41:29.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:41:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 41, 11), 11.51, 45.69, 0.0, 21.07, 12.86, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:41:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:41:11
2025-11-18T01:41:30.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:41:30.175 [DEBUG] [Thread-64946] [transport.py] [_log()] starting thread (client mode): 0xd07a8610
2025-11-18T01:41:30.175 [DEBUG] [Thread-64946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:41:30.195 [DEBUG] [Thread-64946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:41:30.195 [INFO] [Thread-64946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:41:30.198 [DEBUG] [Thread-64946] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] client lang: <none>
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] server lang: <none>
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] kex follows: False
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] Compression: none
2025-11-18T01:41:30.199 [DEBUG] [Thread-64946] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:41:30.224 [DEBUG] [Thread-64946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:41:30.225 [DEBUG] [Thread-64946] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:41:30.225 [DEBUG] [Thread-64946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:41:30.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:41:30.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:41:30.269 [DEBUG] [Thread-64946] [transport.py] [_log()] userauth is OK
2025-11-18T01:41:30.269 [DEBUG] [Thread-64946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:41:30.269 [DEBUG] [Thread-64946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:41:30.269 [DEBUG] [Thread-64946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:41:30.269 [DEBUG] [Thread-64946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:41:30.292 [INFO] [Thread-64946] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:41:30.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:41:30.940 [DEBUG] [Thread-64946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:41:30.941 [DEBUG] [Thread-64946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:41:30.941 [DEBUG] [Thread-64946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:41:30.982 [DEBUG] [Thread-64946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:41:30.982 [DEBUG] [Thread-64946] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:41:30.985 [DEBUG] [Thread-64946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:41:30.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:41:30.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:41:30.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:41:30.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:41:31.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:41:31.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:41:31.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:41:31.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:41:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:41:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.986848 -999.00  +12.70  17.25     51   +2.90 1 2 1 1 1     0    0 8.61 -71.68 ZNEsW 17.5 17.2 176.0 23.1 13.3 -21.9 13.2 -20.9 12.9 -20.7 13.3 -21.7
2025-11-18T01:41:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:41:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:41:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.986848
2025-11-18T01:41:31.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:41:31.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:41:31.007 [DEBUG] [Thread-64946] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:41:31.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:41:31.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:41:31.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:41:31.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:41:11', tmtdew=11.51, humidity=45.69, cloud=0.0, wind=21.07, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:41:11', seeing=1.33, atlas_timestamp='2025-11-17T23:41:03.667', atlas_cloud=2, atlas_rain=1, zp_data=[0.16075000000000017, 0.29725, 0.2892500000000009, 0.1819999999999986, 0.14550000000000018, 0.17125000000000057, 0.2594999999999992, 0.1697500000000005, 0.24849999999999994, 0.3949999999999996, 0.5002499999999994, 0.32399999999999984, 0.21999999999999886, 0.19624999999999915, 0.15949999999999953, 0.11099999999999888, 0.2992500000000007, 0.45449999999999946, 0.7639999999999993, 0.520249999999999, 0.254999999999999, 0.19174999999999898, 0.31675000000000075, 0.31874999999999964, 0.34149999999999814, 0.7155000000000005, 0.9232499999999995, 0.7555000000000005, 0.4369999999999994, 0.21800000000000175, 0.37100000000000133, 0.3575000000000008, 0.5192499999999995], zp_timestamp='2025-11-17T23:40:00')
2025-11-18T01:41:31.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:41:31.101 [DEBUG] [Thread-64949] [transport.py] [_log()] starting thread (client mode): 0xd31cef50
2025-11-18T01:41:31.101 [DEBUG] [Thread-64949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:41:31.118 [DEBUG] [Thread-64949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:41:31.119 [INFO] [Thread-64949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:41:31.126 [DEBUG] [Thread-64949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:41:31.126 [DEBUG] [Thread-64949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] client lang: <none>
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] server lang: <none>
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] kex follows: False
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:41:31.127 [DEBUG] [Thread-64949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:41:31.128 [DEBUG] [Thread-64949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:41:31.128 [DEBUG] [Thread-64949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:41:31.128 [DEBUG] [Thread-64949] [transport.py] [_log()] Compression: none
2025-11-18T01:41:31.128 [DEBUG] [Thread-64949] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:41:31.187 [DEBUG] [Thread-64949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:41:31.188 [DEBUG] [Thread-64949] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:41:31.189 [DEBUG] [Thread-64949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:41:31.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:41:31.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:41:31.243 [DEBUG] [Thread-64949] [transport.py] [_log()] userauth is OK
2025-11-18T01:41:31.244 [DEBUG] [Thread-64949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:41:31.244 [DEBUG] [Thread-64949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:41:31.244 [DEBUG] [Thread-64949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:41:31.244 [DEBUG] [Thread-64949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:41:31.263 [INFO] [Thread-64949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:41:31.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:41:31.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:41:32.166 [DEBUG] [Thread-64949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:41:32.166 [DEBUG] [Thread-64949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:41:32.214 [DEBUG] [Thread-64949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:41:32.214 [DEBUG] [Thread-64949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:41:32.223 [DEBUG] [Thread-64949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:41:32.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:41:32.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:41:32.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:41:32.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:41:32.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:41:32.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:41:32.267 [DEBUG] [Thread-64949] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:41:41.645 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:41.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:43.268 [DEBUG] [Thread-64951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:58.308 [DEBUG] [Thread-64952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:41:59.559 [DEBUG] [Thread-64953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:42:02.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:42:02.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:42:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 41, 43), 11.38, 45.79, 0.0, 20.82, 12.8, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:42:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:41:43
2025-11-18T01:42:03.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:42:03.209 [DEBUG] [Thread-64954] [transport.py] [_log()] starting thread (client mode): 0xd0710970
2025-11-18T01:42:03.209 [DEBUG] [Thread-64954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:42:03.229 [DEBUG] [Thread-64954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:42:03.230 [INFO] [Thread-64954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:42:03.233 [DEBUG] [Thread-64954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:42:03.233 [DEBUG] [Thread-64954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:42:03.233 [DEBUG] [Thread-64954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:42:03.233 [DEBUG] [Thread-64954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:42:03.233 [DEBUG] [Thread-64954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:42:03.233 [DEBUG] [Thread-64954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:42:03.233 [DEBUG] [Thread-64954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:42:03.233 [DEBUG] [Thread-64954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] client lang: <none>
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] server lang: <none>
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] kex follows: False
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] Compression: none
2025-11-18T01:42:03.234 [DEBUG] [Thread-64954] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:42:03.251 [DEBUG] [Thread-64954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:42:03.251 [DEBUG] [Thread-64954] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:42:03.252 [DEBUG] [Thread-64954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:42:03.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:42:03.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:42:03.253 [DEBUG] [Thread-64954] [transport.py] [_log()] userauth is OK
2025-11-18T01:42:03.254 [DEBUG] [Thread-64954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:42:03.254 [DEBUG] [Thread-64954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:42:03.254 [DEBUG] [Thread-64954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:42:03.254 [DEBUG] [Thread-64954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:42:03.289 [INFO] [Thread-64954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:42:03.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:42:03.864 [DEBUG] [Thread-64954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:42:03.864 [DEBUG] [Thread-64954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:42:03.865 [DEBUG] [Thread-64954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:42:03.905 [DEBUG] [Thread-64954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:42:03.906 [DEBUG] [Thread-64954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:42:03.908 [DEBUG] [Thread-64954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:42:03.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:42:03.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:42:03.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:42:03.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:42:03.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:42:03.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:42:03.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:42:03.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:42:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:42:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.987196 -999.00  +12.80  15.72     51   +2.90 1 2 1 1 1     0    0 8.40 -70.14 ZNEsW 16.4 15.7 171.6 23.4 13.3 -21.9 13.2 -20.8 12.9 -20.7 13.3 -21.9
2025-11-18T01:42:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:42:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:42:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.987196
2025-11-18T01:42:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:42:03.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:42:03.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:42:03.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:42:03.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:42:03.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:41:43', tmtdew=11.38, humidity=45.79, cloud=0.0, wind=20.82, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:41:43', seeing=1.24, atlas_timestamp='2025-11-17T23:41:33.734', atlas_cloud=2, atlas_rain=1, zp_data=[0.16075000000000017, 0.29725, 0.2892500000000009, 0.1819999999999986, 0.14550000000000018, 0.17125000000000057, 0.2594999999999992, 0.1697500000000005, 0.24849999999999994, 0.3949999999999996, 0.5002499999999994, 0.32399999999999984, 0.21999999999999886, 0.19624999999999915, 0.15949999999999953, 0.11099999999999888, 0.2992500000000007, 0.45449999999999946, 0.7639999999999993, 0.520249999999999, 0.254999999999999, 0.19174999999999898, 0.31675000000000075, 0.31874999999999964, 0.34149999999999814, 0.7155000000000005, 0.9232499999999995, 0.7555000000000005, 0.4369999999999994, 0.21800000000000175, 0.37100000000000133, 0.3575000000000008, 0.5192499999999995], zp_timestamp='2025-11-17T23:40:00')
2025-11-18T01:42:03.933 [DEBUG] [Thread-64954] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:42:04.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:42:04.033 [DEBUG] [Thread-64957] [transport.py] [_log()] starting thread (client mode): 0xd07ab190
2025-11-18T01:42:04.033 [DEBUG] [Thread-64957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:42:04.047 [DEBUG] [Thread-64957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:42:04.047 [INFO] [Thread-64957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] client lang: <none>
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] server lang: <none>
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] kex follows: False
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] Compression: none
2025-11-18T01:42:04.055 [DEBUG] [Thread-64957] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:42:04.114 [DEBUG] [Thread-64957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:42:04.115 [DEBUG] [Thread-64957] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:42:04.115 [DEBUG] [Thread-64957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:42:04.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:42:04.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:42:04.172 [DEBUG] [Thread-64957] [transport.py] [_log()] userauth is OK
2025-11-18T01:42:04.172 [DEBUG] [Thread-64957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:42:04.172 [DEBUG] [Thread-64957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:42:04.172 [DEBUG] [Thread-64957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:42:04.172 [DEBUG] [Thread-64957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:42:04.192 [INFO] [Thread-64957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:42:04.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:42:04.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:42:05.025 [DEBUG] [Thread-64957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:42:05.025 [DEBUG] [Thread-64957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:42:05.073 [DEBUG] [Thread-64957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:42:05.073 [DEBUG] [Thread-64957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:42:05.082 [DEBUG] [Thread-64957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:42:05.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:42:05.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:42: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
2025-11-18T01:42:05.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:42:05.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:42:05.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:42:05.117 [DEBUG] [Thread-64957] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:42:13.338 [DEBUG] [Thread-64959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:26.273 [DEBUG] [Thread-59867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:27.707 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:28.376 [DEBUG] [Thread-64960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:30.754 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:35.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:42:35.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:42:35.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:42:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 42, 15), 11.3, 46.04, 0.0, 21.56, 12.78, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:42:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:42:15
2025-11-18T01:42:35.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:42:36.055 [DEBUG] [Thread-64961] [transport.py] [_log()] starting thread (client mode): 0xd0700ac0
2025-11-18T01:42:36.055 [DEBUG] [Thread-64961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:42:36.079 [DEBUG] [Thread-64961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:42:36.079 [INFO] [Thread-64961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:42:36.080 [DEBUG] [Thread-64961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:42:36.080 [DEBUG] [Thread-64961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:42:36.080 [DEBUG] [Thread-64961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] client lang: <none>
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] server lang: <none>
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] kex follows: False
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] Compression: none
2025-11-18T01:42:36.081 [DEBUG] [Thread-64961] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:42:36.089 [DEBUG] [Thread-64961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:42:36.090 [DEBUG] [Thread-64961] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:42:36.090 [DEBUG] [Thread-64961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:42:36.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:42:36.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:42:36.092 [DEBUG] [Thread-64961] [transport.py] [_log()] userauth is OK
2025-11-18T01:42:36.092 [DEBUG] [Thread-64961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:42:36.093 [DEBUG] [Thread-64961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:42:36.093 [DEBUG] [Thread-64961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:42:36.093 [DEBUG] [Thread-64961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:42:36.110 [INFO] [Thread-64961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:42:36.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:42:36.711 [DEBUG] [Thread-64961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:42:36.711 [DEBUG] [Thread-64961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:42:36.712 [DEBUG] [Thread-64961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:42:36.752 [DEBUG] [Thread-64961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:42:36.752 [DEBUG] [Thread-64961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:42:36.755 [DEBUG] [Thread-64961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:42:36.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:42:36.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:42:36.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:42:36.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:42:36.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:42:36.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:42:36.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:42:36.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:42:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:42:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.987543 -999.00  +12.80  13.30     51   +2.90 1 2 1 1 1     0    0 8.74 -65.37 ZNEsW 14.3 13.3 165.8 19.1 13.3 -22.1 13.2 -20.9 12.9 -20.8 13.3 -21.9
2025-11-18T01:42:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:42:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:42:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.987543
2025-11-18T01:42:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:42:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:42:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:42:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:42:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:42:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:42:15', tmtdew=11.3, humidity=46.04, cloud=0.0, wind=21.56, temperature=12.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:42:15', seeing=1.24, atlas_timestamp='2025-11-17T23:42:03.715', atlas_cloud=2, atlas_rain=1, zp_data=[0.16075000000000017, 0.29725, 0.2892500000000009, 0.1819999999999986, 0.14550000000000018, 0.17125000000000057, 0.2594999999999992, 0.1697500000000005, 0.24849999999999994, 0.3949999999999996, 0.5002499999999994, 0.32399999999999984, 0.21999999999999886, 0.19624999999999915, 0.15949999999999953, 0.11099999999999888, 0.2992500000000007, 0.45449999999999946, 0.7639999999999993, 0.520249999999999, 0.254999999999999, 0.19174999999999898, 0.31675000000000075, 0.31874999999999964, 0.34149999999999814, 0.7155000000000005, 0.9232499999999995, 0.7555000000000005, 0.4369999999999994, 0.21800000000000175, 0.37100000000000133, 0.3575000000000008, 0.5192499999999995], zp_timestamp='2025-11-17T23:40:00')
2025-11-18T01:42:36.781 [DEBUG] [Thread-64961] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:42:36.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:42:36.878 [DEBUG] [Thread-64964] [transport.py] [_log()] starting thread (client mode): 0xd3162e60
2025-11-18T01:42:36.878 [DEBUG] [Thread-64964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:42:36.893 [DEBUG] [Thread-64964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:42:36.893 [INFO] [Thread-64964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] client lang: <none>
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] server lang: <none>
2025-11-18T01:42:36.901 [DEBUG] [Thread-64964] [transport.py] [_log()] kex follows: False
2025-11-18T01:42:36.902 [DEBUG] [Thread-64964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:42:36.902 [DEBUG] [Thread-64964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:42:36.902 [DEBUG] [Thread-64964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:42:36.902 [DEBUG] [Thread-64964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:42:36.902 [DEBUG] [Thread-64964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:42:36.902 [DEBUG] [Thread-64964] [transport.py] [_log()] Compression: none
2025-11-18T01:42:36.902 [DEBUG] [Thread-64964] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:42:36.963 [DEBUG] [Thread-64964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:42:36.964 [DEBUG] [Thread-64964] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:42:36.964 [DEBUG] [Thread-64964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:42:36.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:42:36.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:42:37.019 [DEBUG] [Thread-64964] [transport.py] [_log()] userauth is OK
2025-11-18T01:42:37.020 [DEBUG] [Thread-64964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:42:37.020 [DEBUG] [Thread-64964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:42:37.020 [DEBUG] [Thread-64964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:42:37.020 [DEBUG] [Thread-64964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:42:37.039 [INFO] [Thread-64964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:42:37.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:42:37.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:42:37.878 [DEBUG] [Thread-64964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:42:37.878 [DEBUG] [Thread-64964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:42:37.926 [DEBUG] [Thread-64964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:42:37.926 [DEBUG] [Thread-64964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:42:37.935 [DEBUG] [Thread-64964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:42:37.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:42:37.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:42:37.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:42:37.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:42:37.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:42:37.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:42:37.980 [DEBUG] [Thread-64964] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:42:41.850 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:41.851 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:43.410 [DEBUG] [Thread-64966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:58.453 [DEBUG] [Thread-64967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:42:59.612 [DEBUG] [Thread-64968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:43:07.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:43:07.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:43:08.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:43:08.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 42, 47), 11.35, 46.08, 0.0, 19.83, 12.8, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:43:08.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:42:47
2025-11-18T01:43:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:43:08.923 [DEBUG] [Thread-64969] [transport.py] [_log()] starting thread (client mode): 0xd31cf100
2025-11-18T01:43:08.923 [DEBUG] [Thread-64969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:43:08.942 [DEBUG] [Thread-64969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:43:08.943 [INFO] [Thread-64969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] client lang: <none>
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] server lang: <none>
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] kex follows: False
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] Compression: none
2025-11-18T01:43:08.944 [DEBUG] [Thread-64969] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:43:08.963 [DEBUG] [Thread-64969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:43:08.963 [DEBUG] [Thread-64969] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:43:08.963 [DEBUG] [Thread-64969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:43:08.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:43:08.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:43:08.965 [DEBUG] [Thread-64969] [transport.py] [_log()] userauth is OK
2025-11-18T01:43:08.965 [DEBUG] [Thread-64969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:43:08.966 [DEBUG] [Thread-64969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:43:08.966 [DEBUG] [Thread-64969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:43:08.966 [DEBUG] [Thread-64969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:43:08.989 [INFO] [Thread-64969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:43:08.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:43:09.603 [DEBUG] [Thread-64969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:43:09.603 [DEBUG] [Thread-64969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:43:09.604 [DEBUG] [Thread-64969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:43:09.645 [DEBUG] [Thread-64969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:43:09.645 [DEBUG] [Thread-64969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:43:09.648 [DEBUG] [Thread-64969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:43:09.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:43:09.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:43:09.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:43:09.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:43:09.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:43:09.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:43:09.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:43:09.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:43:09.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:43:09.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.987543 -999.00  +12.80  13.30     51   +2.90 1 2 1 1 1     0    0 8.74 -65.37 ZNEsW 14.3 13.3 165.8 19.1 13.3 -22.1 13.2 -20.9 12.9 -20.8 13.3 -21.9
2025-11-18T01:43:09.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:43:09.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:43:09.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.987543
2025-11-18T01:43:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:43:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:43:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:43:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:43:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:43:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:42:47', tmtdew=11.35, humidity=46.08, cloud=0.0, wind=19.83, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:42:48', seeing=1.13, atlas_timestamp='2025-11-17T23:42:03.715', atlas_cloud=2, atlas_rain=1, zp_data=[0.16075000000000017, 0.29725, 0.2892500000000009, 0.1819999999999986, 0.14550000000000018, 0.17125000000000057, 0.2594999999999992, 0.1697500000000005, 0.24849999999999994, 0.3949999999999996, 0.5002499999999994, 0.32399999999999984, 0.21999999999999886, 0.19624999999999915, 0.15949999999999953, 0.11099999999999888, 0.2992500000000007, 0.45449999999999946, 0.7639999999999993, 0.520249999999999, 0.254999999999999, 0.19174999999999898, 0.31675000000000075, 0.31874999999999964, 0.34149999999999814, 0.7155000000000005, 0.9232499999999995, 0.7555000000000005, 0.4369999999999994, 0.21800000000000175, 0.37100000000000133, 0.3575000000000008, 0.5192499999999995], zp_timestamp='2025-11-17T23:40:00')
2025-11-18T01:43:09.675 [DEBUG] [Thread-64969] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:43:09.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:43:09.773 [DEBUG] [Thread-64972] [transport.py] [_log()] starting thread (client mode): 0xd31cf220
2025-11-18T01:43:09.773 [DEBUG] [Thread-64972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:43:09.791 [DEBUG] [Thread-64972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:43:09.792 [INFO] [Thread-64972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:43:09.802 [DEBUG] [Thread-64972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:43:09.802 [DEBUG] [Thread-64972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] client lang: <none>
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] server lang: <none>
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] kex follows: False
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:43:09.803 [DEBUG] [Thread-64972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:43:09.804 [DEBUG] [Thread-64972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:43:09.804 [DEBUG] [Thread-64972] [transport.py] [_log()] Compression: none
2025-11-18T01:43:09.804 [DEBUG] [Thread-64972] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:43:09.872 [DEBUG] [Thread-64972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:43:09.872 [DEBUG] [Thread-64972] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:43:09.881 [DEBUG] [Thread-64972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:43:09.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:43:09.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:43:09.935 [DEBUG] [Thread-64972] [transport.py] [_log()] userauth is OK
2025-11-18T01:43:09.936 [DEBUG] [Thread-64972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:43:09.936 [DEBUG] [Thread-64972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:43:09.936 [DEBUG] [Thread-64972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:43:09.936 [DEBUG] [Thread-64972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:43:09.960 [INFO] [Thread-64972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:43:09.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:43:09.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:43:10.819 [DEBUG] [Thread-64972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:43:10.819 [DEBUG] [Thread-64972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:43:10.868 [DEBUG] [Thread-64972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:43:10.868 [DEBUG] [Thread-64972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:43:10.880 [DEBUG] [Thread-64972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:43:10.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:43:10.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:43:10.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:43:10.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:43:10.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:43:10.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:43:10.920 [DEBUG] [Thread-64972] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:43:13.482 [DEBUG] [Thread-64974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:43:28.524 [DEBUG] [Thread-64975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:43:40.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:43:40.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:43:40.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:43:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 43, 19), 11.36, 46.03, 0.0, 20.57, 12.75, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:43:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:43:19
2025-11-18T01:43:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:43:41.874 [DEBUG] [Thread-64976] [transport.py] [_log()] starting thread (client mode): 0xd07ae650
2025-11-18T01:43:41.874 [DEBUG] [Thread-64976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:43:41.895 [DEBUG] [Thread-64976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:43:41.895 [INFO] [Thread-64976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] client lang: <none>
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] server lang: <none>
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] kex follows: False
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:43:41.898 [DEBUG] [Thread-64976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:43:41.899 [DEBUG] [Thread-64976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:43:41.899 [DEBUG] [Thread-64976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:43:41.899 [DEBUG] [Thread-64976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:43:41.899 [DEBUG] [Thread-64976] [transport.py] [_log()] Compression: none
2025-11-18T01:43:41.899 [DEBUG] [Thread-64976] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:43:41.916 [DEBUG] [Thread-64976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:43:41.916 [DEBUG] [Thread-64976] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:43:41.917 [DEBUG] [Thread-64976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:43:41.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:43:41.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:43:41.919 [DEBUG] [Thread-64976] [transport.py] [_log()] userauth is OK
2025-11-18T01:43:41.919 [DEBUG] [Thread-64976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:43:41.919 [DEBUG] [Thread-64976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:43:41.919 [DEBUG] [Thread-64976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:43:41.919 [DEBUG] [Thread-64976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:43:41.944 [INFO] [Thread-64976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:43:41.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:43:42.053 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:43:42.055 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:43:42.572 [DEBUG] [Thread-64976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:43:42.572 [DEBUG] [Thread-64976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:43:42.573 [DEBUG] [Thread-64976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:43:42.613 [DEBUG] [Thread-64976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:43:42.613 [DEBUG] [Thread-64976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:43:42.616 [DEBUG] [Thread-64976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:43:42.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:43:42.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:43:42.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:43:42.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:43:42.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:43:42.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:43:42.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:43:42.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:43:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:43:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.988237 -999.00  +12.70  15.76     50   +2.70 1 2 1 1 1     0    0 8.58 -61.53 ZNEsW 13.6 15.8 168.4 20.3 13.2 -22.2 13.2 -20.9 12.9 -20.7 13.2 -22.1
2025-11-18T01:43:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:43:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:43:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.988237
2025-11-18T01:43:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:43:42.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:43:42.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:43:42.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:43:42.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:43:42.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:43:19', tmtdew=11.36, humidity=46.03, cloud=0.0, wind=20.57, temperature=12.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:43:20', seeing=1.13, atlas_timestamp='2025-11-17T23:43:03.677', atlas_cloud=2, atlas_rain=1, zp_data=[0.16075000000000017, 0.29725, 0.2892500000000009, 0.1819999999999986, 0.14550000000000018, 0.17125000000000057, 0.2594999999999992, 0.1697500000000005, 0.24849999999999994, 0.3949999999999996, 0.5002499999999994, 0.32399999999999984, 0.21999999999999886, 0.19624999999999915, 0.15949999999999953, 0.11099999999999888, 0.2992500000000007, 0.45449999999999946, 0.7639999999999993, 0.520249999999999, 0.254999999999999, 0.19174999999999898, 0.31675000000000075, 0.31874999999999964, 0.34149999999999814, 0.7155000000000005, 0.9232499999999995, 0.7555000000000005, 0.4369999999999994, 0.21800000000000175, 0.37100000000000133, 0.3575000000000008, 0.5192499999999995], zp_timestamp='2025-11-17T23:40:00')
2025-11-18T01:43:42.639 [DEBUG] [Thread-64976] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:43:42.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:43:42.736 [DEBUG] [Thread-64979] [transport.py] [_log()] starting thread (client mode): 0xd0757940
2025-11-18T01:43:42.736 [DEBUG] [Thread-64979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:43:42.752 [DEBUG] [Thread-64979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:43:42.752 [INFO] [Thread-64979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:43:42.759 [DEBUG] [Thread-64979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:43:42.759 [DEBUG] [Thread-64979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] client lang: <none>
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] server lang: <none>
2025-11-18T01:43:42.760 [DEBUG] [Thread-64979] [transport.py] [_log()] kex follows: False
2025-11-18T01:43:42.761 [DEBUG] [Thread-64979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:43:42.761 [DEBUG] [Thread-64979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:43:42.761 [DEBUG] [Thread-64979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:43:42.761 [DEBUG] [Thread-64979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:43:42.761 [DEBUG] [Thread-64979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:43:42.761 [DEBUG] [Thread-64979] [transport.py] [_log()] Compression: none
2025-11-18T01:43:42.761 [DEBUG] [Thread-64979] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:43:42.820 [DEBUG] [Thread-64979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:43:42.820 [DEBUG] [Thread-64979] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:43:42.821 [DEBUG] [Thread-64979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:43:42.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:43:42.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:43:42.876 [DEBUG] [Thread-64979] [transport.py] [_log()] userauth is OK
2025-11-18T01:43:42.876 [DEBUG] [Thread-64979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:43:42.876 [DEBUG] [Thread-64979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:43:42.876 [DEBUG] [Thread-64979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:43:42.876 [DEBUG] [Thread-64979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:43:42.895 [INFO] [Thread-64979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:43:42.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:43:42.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:43:43.551 [DEBUG] [Thread-64981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:43:43.730 [DEBUG] [Thread-64979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:43:43.730 [DEBUG] [Thread-64979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:43:43.778 [DEBUG] [Thread-64979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:43:43.778 [DEBUG] [Thread-64979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:43:43.787 [DEBUG] [Thread-64979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:43:43.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:43:43.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')
2025-11-18T01:43:43.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:43:43.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:43:43.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:43:43.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:43:43.821 [DEBUG] [Thread-64979] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:43:58.589 [DEBUG] [Thread-64982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:43:59.698 [DEBUG] [Thread-64983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:44:13.618 [DEBUG] [Thread-64984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:44:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:44:13.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:44:13.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:44:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 43, 51), 11.2, 46.37, 0.0, 16.87, 12.66, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:44:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:43:51
2025-11-18T01:44:14.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:44:14.795 [DEBUG] [Thread-64985] [transport.py] [_log()] starting thread (client mode): 0xd07a8e80
2025-11-18T01:44:14.795 [DEBUG] [Thread-64985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:44:14.815 [DEBUG] [Thread-64985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:44:14.815 [INFO] [Thread-64985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:44:14.818 [DEBUG] [Thread-64985] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:44:14.818 [DEBUG] [Thread-64985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:44:14.818 [DEBUG] [Thread-64985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:44:14.818 [DEBUG] [Thread-64985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] client lang: <none>
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] server lang: <none>
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] kex follows: False
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] Compression: none
2025-11-18T01:44:14.819 [DEBUG] [Thread-64985] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:44:14.834 [DEBUG] [Thread-64985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:44:14.835 [DEBUG] [Thread-64985] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:44:14.835 [DEBUG] [Thread-64985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:44:14.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:44:14.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:44:14.836 [DEBUG] [Thread-64985] [transport.py] [_log()] userauth is OK
2025-11-18T01:44:14.836 [DEBUG] [Thread-64985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:44:14.836 [DEBUG] [Thread-64985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:44:14.836 [DEBUG] [Thread-64985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:44:14.836 [DEBUG] [Thread-64985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:44:14.855 [INFO] [Thread-64985] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:44:14.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:44:15.518 [DEBUG] [Thread-64985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:44:15.518 [DEBUG] [Thread-64985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:44:15.518 [DEBUG] [Thread-64985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:44:15.559 [DEBUG] [Thread-64985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:44:15.559 [DEBUG] [Thread-64985] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:44:15.561 [DEBUG] [Thread-64985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:44:15.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:44:15.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:44:15.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:44:15.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:44:15.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:44:15.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:44:15.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.988584 -999.00  +12.70  16.44     50   +2.70 1 2 1 1 1     0    0 8.85 -56.42 ZNEsW 14.5 16.4 168.6 18.0 13.3 -22.2 13.1 -20.9 12.9 -20.6 13.2 -22.0
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.988584
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:44:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:43:51', tmtdew=11.2, humidity=46.37, cloud=0.0, wind=16.87, temperature=12.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:43:53', seeing=1.33, atlas_timestamp='2025-11-17T23:43:33.658', atlas_cloud=2, atlas_rain=1, zp_data=[0.16075000000000017, 0.29725, 0.2892500000000009, 0.1819999999999986, 0.14550000000000018, 0.17125000000000057, 0.2594999999999992, 0.1697500000000005, 0.24849999999999994, 0.3949999999999996, 0.5002499999999994, 0.32399999999999984, 0.21999999999999886, 0.19624999999999915, 0.15949999999999953, 0.11099999999999888, 0.2992500000000007, 0.45449999999999946, 0.7639999999999993, 0.520249999999999, 0.254999999999999, 0.19174999999999898, 0.31675000000000075, 0.31874999999999964, 0.34149999999999814, 0.7155000000000005, 0.9232499999999995, 0.7555000000000005, 0.4369999999999994, 0.21800000000000175, 0.37100000000000133, 0.3575000000000008, 0.5192499999999995], zp_timestamp='2025-11-17T23:43:00')
2025-11-18T01:44:15.580 [DEBUG] [Thread-64985] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:44:15.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:44:15.666 [DEBUG] [Thread-64988] [transport.py] [_log()] starting thread (client mode): 0xd07a9d80
2025-11-18T01:44:15.667 [DEBUG] [Thread-64988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:44:15.687 [DEBUG] [Thread-64988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:44:15.687 [INFO] [Thread-64988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] client lang: <none>
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] server lang: <none>
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] kex follows: False
2025-11-18T01:44:15.694 [DEBUG] [Thread-64988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:44:15.695 [DEBUG] [Thread-64988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:44:15.695 [DEBUG] [Thread-64988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:44:15.695 [DEBUG] [Thread-64988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:44:15.695 [DEBUG] [Thread-64988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:44:15.695 [DEBUG] [Thread-64988] [transport.py] [_log()] Compression: none
2025-11-18T01:44:15.695 [DEBUG] [Thread-64988] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:44:15.750 [DEBUG] [Thread-64988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:44:15.750 [DEBUG] [Thread-64988] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:44:15.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:44:15.751 [DEBUG] [Thread-64988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:44:15.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:44:15.811 [DEBUG] [Thread-64988] [transport.py] [_log()] userauth is OK
2025-11-18T01:44:15.811 [DEBUG] [Thread-64988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:44:15.812 [DEBUG] [Thread-64988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:44:15.812 [DEBUG] [Thread-64988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:44:15.812 [DEBUG] [Thread-64988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:44:15.826 [INFO] [Thread-64988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:44:15.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:44:15.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:44:16.702 [DEBUG] [Thread-64988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:44:16.702 [DEBUG] [Thread-64988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:44:16.750 [DEBUG] [Thread-64988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:44:16.750 [DEBUG] [Thread-64988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:44:16.759 [DEBUG] [Thread-64988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:44:16.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:44:16.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:44: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') -> 00000000
2025-11-18T01:44:16.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:44:16.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:44:16.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:44:16.793 [DEBUG] [Thread-64988] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:44:28.644 [DEBUG] [Thread-64990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:44:42.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:44:42.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:44:43.686 [DEBUG] [Thread-64991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:44:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:44:46.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:44:46.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:44:47.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 44, 24), 11.17, 46.49, 0.0, 15.0, 12.7, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:44:47.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:44:24
2025-11-18T01:44:47.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:44:47.742 [DEBUG] [Thread-64992] [transport.py] [_log()] starting thread (client mode): 0xd07125c0
2025-11-18T01:44:47.743 [DEBUG] [Thread-64992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:44:47.762 [DEBUG] [Thread-64992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:44:47.763 [INFO] [Thread-64992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] client lang: <none>
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] server lang: <none>
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] kex follows: False
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] Compression: none
2025-11-18T01:44:47.766 [DEBUG] [Thread-64992] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:44:47.783 [DEBUG] [Thread-64992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:44:47.783 [DEBUG] [Thread-64992] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:44:47.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:44:47.784 [DEBUG] [Thread-64992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:44:47.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:44:47.786 [DEBUG] [Thread-64992] [transport.py] [_log()] userauth is OK
2025-11-18T01:44:47.786 [DEBUG] [Thread-64992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:44:47.786 [DEBUG] [Thread-64992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:44:47.786 [DEBUG] [Thread-64992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:44:47.787 [DEBUG] [Thread-64992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:44:47.822 [INFO] [Thread-64992] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:44:47.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:44:48.465 [DEBUG] [Thread-64992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:44:48.465 [DEBUG] [Thread-64992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:44:48.465 [DEBUG] [Thread-64992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:44:48.505 [DEBUG] [Thread-64992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:44:48.505 [DEBUG] [Thread-64992] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:44:48.508 [DEBUG] [Thread-64992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:44:48.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:44:48.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:44:48.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:44:48.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:44:48.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:44:48.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:44:48.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:44:48.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:44:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:44:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.988932 -999.00  +12.70  12.73     50   +2.80 1 2 1 1 1     0    0 8.78 -56.70 ZNEsW 14.1 12.7 179.2 18.8 13.2 -22.1 13.1 -20.9 12.9 -20.8 13.2 -21.8
2025-11-18T01:44:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:44:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:44:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.988932
2025-11-18T01:44:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:44:48.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:44:48.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:44:48.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:44:48.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:44:48.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:44:24', tmtdew=11.17, humidity=46.49, cloud=0.0, wind=15.0, temperature=12.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:44:24', seeing=1.41, atlas_timestamp='2025-11-17T23:44:03.725', atlas_cloud=2, atlas_rain=1, zp_data=[0.16075000000000017, 0.29725, 0.2892500000000009, 0.1819999999999986, 0.14550000000000018, 0.17125000000000057, 0.2594999999999992, 0.1697500000000005, 0.24849999999999994, 0.3949999999999996, 0.5002499999999994, 0.32399999999999984, 0.21999999999999886, 0.19624999999999915, 0.15949999999999953, 0.11099999999999888, 0.2992500000000007, 0.45449999999999946, 0.7639999999999993, 0.520249999999999, 0.254999999999999, 0.19174999999999898, 0.31675000000000075, 0.31874999999999964, 0.34149999999999814, 0.7155000000000005, 0.9232499999999995, 0.7555000000000005, 0.4369999999999994, 0.21800000000000175, 0.37100000000000133, 0.3575000000000008, 0.5192499999999995], zp_timestamp='2025-11-17T23:43:00')
2025-11-18T01:44:48.530 [DEBUG] [Thread-64992] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:44:48.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:44:58.715 [DEBUG] [Thread-64995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:44:59.782 [DEBUG] [Thread-64996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:45:13.746 [DEBUG] [Thread-64997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:45:28.775 [DEBUG] [Thread-64998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:45:42.462 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:45:42.464 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:45:43.801 [DEBUG] [Thread-64999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:45:54.569 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:45:58.833 [DEBUG] [Thread-65000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:45:59.859 [DEBUG] [Thread-65001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:00.038 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:03.104 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:09.537 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:13.860 [DEBUG] [Thread-65002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:28.889 [DEBUG] [Thread-65003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:42.667 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:42.669 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:43.924 [DEBUG] [Thread-65004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:58.952 [DEBUG] [Thread-65005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:46:59.920 [DEBUG] [Thread-65006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:00.411 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-18T01:47:10.089 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:13.286 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:13.982 [DEBUG] [Thread-65007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:18.353 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:23.767 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:29.014 [DEBUG] [Thread-65008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:30.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:47:30.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:47:30.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:47:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 47, 4), 11.16, 46.52, 0.0, 20.33, 12.7, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:47:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:47:04
2025-11-18T01:47:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:47:31.371 [DEBUG] [Thread-65009] [transport.py] [_log()] starting thread (client mode): 0xd3160d30
2025-11-18T01:47:31.371 [DEBUG] [Thread-65009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:47:31.389 [DEBUG] [Thread-65009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:47:31.389 [INFO] [Thread-65009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:47:31.392 [DEBUG] [Thread-65009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] client lang: <none>
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] server lang: <none>
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] kex follows: False
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:47:31.393 [DEBUG] [Thread-65009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:47:31.394 [DEBUG] [Thread-65009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:47:31.394 [DEBUG] [Thread-65009] [transport.py] [_log()] Compression: none
2025-11-18T01:47:31.394 [DEBUG] [Thread-65009] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:47:31.411 [DEBUG] [Thread-65009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:47:31.411 [DEBUG] [Thread-65009] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:47:31.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:47:31.412 [DEBUG] [Thread-65009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:47:31.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:47:31.414 [DEBUG] [Thread-65009] [transport.py] [_log()] userauth is OK
2025-11-18T01:47:31.414 [DEBUG] [Thread-65009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:47:31.414 [DEBUG] [Thread-65009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:47:31.414 [DEBUG] [Thread-65009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:47:31.415 [DEBUG] [Thread-65009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:47:31.438 [INFO] [Thread-65009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:47:31.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:47:32.076 [DEBUG] [Thread-65009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:47:32.076 [DEBUG] [Thread-65009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:47:32.076 [DEBUG] [Thread-65009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:47:32.117 [DEBUG] [Thread-65009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:47:32.117 [DEBUG] [Thread-65009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:47:32.120 [DEBUG] [Thread-65009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:47:32.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:47:32.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:47:32.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:47:32.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:47:32.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:47:32.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:47:32.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:47:32.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:47:32.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:47:32.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.991015 -999.00  +12.60  12.26     50   +2.70 1 2 1 1 1     0    0 8.56 -58.96 ZNEsW 14.3 12.3 169.8 17.1 13.2 -22.4 13.1 -20.9 12.9 -20.9 13.1 -22.3
2025-11-18T01:47:32.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:47:32.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:47:32.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.991015
2025-11-18T01:47:32.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:47:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:47:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:47:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:47:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:47:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:47:04', tmtdew=11.16, humidity=46.52, cloud=0.0, wind=20.33, temperature=12.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:47:05', seeing=1.41, atlas_timestamp='2025-11-17T23:47:03.696', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:46:00')
2025-11-18T01:47:32.146 [DEBUG] [Thread-65009] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:47:32.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:47:32.244 [DEBUG] [Thread-65012] [transport.py] [_log()] starting thread (client mode): 0xd07addb0
2025-11-18T01:47:32.244 [DEBUG] [Thread-65012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:47:32.264 [DEBUG] [Thread-65012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:47:32.264 [INFO] [Thread-65012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:47:32.276 [DEBUG] [Thread-65012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] client lang: <none>
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] server lang: <none>
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] kex follows: False
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] Compression: none
2025-11-18T01:47:32.277 [DEBUG] [Thread-65012] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:47:32.331 [DEBUG] [Thread-65012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:47:32.332 [DEBUG] [Thread-65012] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:47:32.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:47:32.333 [DEBUG] [Thread-65012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:47:32.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:47:32.387 [DEBUG] [Thread-65012] [transport.py] [_log()] userauth is OK
2025-11-18T01:47:32.387 [DEBUG] [Thread-65012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:47:32.387 [DEBUG] [Thread-65012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:47:32.388 [DEBUG] [Thread-65012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:47:32.388 [DEBUG] [Thread-65012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:47:32.407 [INFO] [Thread-65012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:47:32.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:47:32.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:47:33.249 [DEBUG] [Thread-65012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:47:33.249 [DEBUG] [Thread-65012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:47:33.297 [DEBUG] [Thread-65012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:47:33.297 [DEBUG] [Thread-65012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:47:33.306 [DEBUG] [Thread-65012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:47:33.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:47:33.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:47:33.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:47:33.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:47:33.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:47:33.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:47:33.341 [DEBUG] [Thread-65012] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:47:42.870 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:42.871 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:43.168 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:44.040 [DEBUG] [Thread-65014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:47.555 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:59.089 [DEBUG] [Thread-65015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:47:59.997 [DEBUG] [Thread-65016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:03.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:48:03.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:48:03.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:48:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 47, 36), 11.07, 46.66, 0.0, 21.09, 12.65, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:48:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:47:36
2025-11-18T01:48:04.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:48:04.331 [DEBUG] [Thread-65017] [transport.py] [_log()] starting thread (client mode): 0xd07ae740
2025-11-18T01:48:04.331 [DEBUG] [Thread-65017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:48:04.351 [DEBUG] [Thread-65017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:48:04.351 [INFO] [Thread-65017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] client lang: <none>
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] server lang: <none>
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] kex follows: False
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:48:04.354 [DEBUG] [Thread-65017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:48:04.355 [DEBUG] [Thread-65017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:48:04.355 [DEBUG] [Thread-65017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:48:04.355 [DEBUG] [Thread-65017] [transport.py] [_log()] Compression: none
2025-11-18T01:48:04.355 [DEBUG] [Thread-65017] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:48:04.370 [DEBUG] [Thread-65017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:48:04.370 [DEBUG] [Thread-65017] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:48:04.370 [DEBUG] [Thread-65017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:48:04.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:48:04.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:48:04.371 [DEBUG] [Thread-65017] [transport.py] [_log()] userauth is OK
2025-11-18T01:48:04.371 [DEBUG] [Thread-65017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:48:04.371 [DEBUG] [Thread-65017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:48:04.371 [DEBUG] [Thread-65017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:48:04.371 [DEBUG] [Thread-65017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:48:04.386 [INFO] [Thread-65017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:48:04.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:48:05.004 [DEBUG] [Thread-65017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:48:05.004 [DEBUG] [Thread-65017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:48:05.004 [DEBUG] [Thread-65017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:48:05.045 [DEBUG] [Thread-65017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:48:05.045 [DEBUG] [Thread-65017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:48:05.047 [DEBUG] [Thread-65017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:48:05.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:48:05.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:48:05.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:48:05.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:48:05.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:48:05.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:48:05.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:48:05.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.991362 -999.00  +12.60  10.33     51   +2.80 1 2 1 1 1     0    0 8.68 -59.91 ZNEsW 10.3 10.3 174.2 17.8 13.2 -22.6 13.1 -20.9 12.8 -20.9 13.1 -22.3
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.991362
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:48:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:47:36', tmtdew=11.07, humidity=46.66, cloud=0.0, wind=21.09, temperature=12.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:47:37', seeing=1.17, atlas_timestamp='2025-11-17T23:47:33.677', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:46:00')
2025-11-18T01:48:05.069 [DEBUG] [Thread-65017] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:48:05.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:48:05.157 [DEBUG] [Thread-65020] [transport.py] [_log()] starting thread (client mode): 0xd3160a60
2025-11-18T01:48:05.157 [DEBUG] [Thread-65020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:48:05.172 [DEBUG] [Thread-65020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:48:05.172 [INFO] [Thread-65020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] client lang: <none>
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] server lang: <none>
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] kex follows: False
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] Compression: none
2025-11-18T01:48:05.180 [DEBUG] [Thread-65020] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:48:05.238 [DEBUG] [Thread-65020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:48:05.238 [DEBUG] [Thread-65020] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:48:05.238 [DEBUG] [Thread-65020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:48:05.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:48:05.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:48:05.299 [DEBUG] [Thread-65020] [transport.py] [_log()] userauth is OK
2025-11-18T01:48:05.299 [DEBUG] [Thread-65020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:48:05.299 [DEBUG] [Thread-65020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:48:05.299 [DEBUG] [Thread-65020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:48:05.299 [DEBUG] [Thread-65020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:48:05.314 [INFO] [Thread-65020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:48:05.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:48:05.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:48:06.241 [DEBUG] [Thread-65020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:48:06.241 [DEBUG] [Thread-65020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:48:06.292 [DEBUG] [Thread-65020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:48:06.292 [DEBUG] [Thread-65020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:48:06.303 [DEBUG] [Thread-65020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:48:06.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:48: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')
2025-11-18T01:48: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
2025-11-18T01:48:06.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:48:06.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:48:06.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:48:06.335 [DEBUG] [Thread-65020] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:48:06.958 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:11.379 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:14.120 [DEBUG] [Thread-65022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:18.305 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:22.662 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:29.163 [DEBUG] [Thread-65023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:36.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:48:36.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:48:36.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:48:37.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 48, 8), 11.09, 46.62, 0.0, 21.84, 12.73, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:48:37.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:48:08
2025-11-18T01:48:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:48:37.283 [DEBUG] [Thread-65024] [transport.py] [_log()] starting thread (client mode): 0xd317f970
2025-11-18T01:48:37.283 [DEBUG] [Thread-65024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:48:37.302 [DEBUG] [Thread-65024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:48:37.303 [INFO] [Thread-65024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] client lang: <none>
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] server lang: <none>
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] kex follows: False
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] Compression: none
2025-11-18T01:48:37.306 [DEBUG] [Thread-65024] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:48:37.323 [DEBUG] [Thread-65024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:48:37.324 [DEBUG] [Thread-65024] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:48:37.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:48:37.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:48:37.325 [DEBUG] [Thread-65024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:48:37.326 [DEBUG] [Thread-65024] [transport.py] [_log()] userauth is OK
2025-11-18T01:48:37.326 [DEBUG] [Thread-65024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:48:37.326 [DEBUG] [Thread-65024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:48:37.326 [DEBUG] [Thread-65024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:48:37.326 [DEBUG] [Thread-65024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:48:37.350 [INFO] [Thread-65024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:48:37.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:48:37.970 [DEBUG] [Thread-65024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:48:37.970 [DEBUG] [Thread-65024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:48:37.971 [DEBUG] [Thread-65024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:48:38.011 [DEBUG] [Thread-65024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:48:38.011 [DEBUG] [Thread-65024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:48:38.014 [DEBUG] [Thread-65024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:48:38.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:48:38.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:48:38.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:48:38.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:48:38.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:48:38.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:48:38.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:48:38.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:48:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:48:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.991709 -999.00  +12.60  11.36     50   +2.70 1 2 1 1 1     0    0 8.63 -55.42 ZNEsW 11.0 11.4 172.2 14.2 13.2 -22.4 13.1 -21.1 12.8 -20.9 13.1 -22.3
2025-11-18T01:48:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:48:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:48:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.991709
2025-11-18T01:48:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:48:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:48:38.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:48:38.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:48:38.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:48:38.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:48:08', tmtdew=11.09, humidity=46.62, cloud=0.0, wind=21.84, temperature=12.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:48:09', seeing=1.17, atlas_timestamp='2025-11-17T23:48:03.658', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:46:00')
2025-11-18T01:48:38.032 [DEBUG] [Thread-65024] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:48:38.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:48:38.115 [DEBUG] [Thread-65027] [transport.py] [_log()] starting thread (client mode): 0xd0755180
2025-11-18T01:48:38.116 [DEBUG] [Thread-65027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:48:38.131 [DEBUG] [Thread-65027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:48:38.132 [INFO] [Thread-65027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:48:38.139 [DEBUG] [Thread-65027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:48:38.139 [DEBUG] [Thread-65027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:48:38.139 [DEBUG] [Thread-65027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:48:38.139 [DEBUG] [Thread-65027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:48:38.139 [DEBUG] [Thread-65027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:48:38.139 [DEBUG] [Thread-65027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:48:38.139 [DEBUG] [Thread-65027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] client lang: <none>
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] server lang: <none>
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] kex follows: False
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] Compression: none
2025-11-18T01:48:38.140 [DEBUG] [Thread-65027] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:48:38.203 [DEBUG] [Thread-65027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:48:38.203 [DEBUG] [Thread-65027] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:48:38.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:48:38.204 [DEBUG] [Thread-65027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:48:38.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:48:38.259 [DEBUG] [Thread-65027] [transport.py] [_log()] userauth is OK
2025-11-18T01:48:38.259 [DEBUG] [Thread-65027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:48:38.259 [DEBUG] [Thread-65027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:48:38.260 [DEBUG] [Thread-65027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:48:38.260 [DEBUG] [Thread-65027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:48:38.279 [INFO] [Thread-65027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:48:38.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:48:38.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:48:39.121 [DEBUG] [Thread-65027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:48:39.121 [DEBUG] [Thread-65027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:48:39.168 [DEBUG] [Thread-65027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:48:39.168 [DEBUG] [Thread-65027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:48:39.177 [DEBUG] [Thread-65027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:48:39.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:48:39.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:48:39.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:48:39.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:48:39.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:48:39.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:48:39.212 [DEBUG] [Thread-65027] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:48:43.074 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:43.075 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:44.191 [DEBUG] [Thread-65029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:48:59.228 [DEBUG] [Thread-65030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:00.079 [DEBUG] [Thread-65031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:09.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:49:09.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:49:09.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:49:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 48, 40), 11.23, 46.29, 0.0, 23.2, 12.68, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:49:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:48:40
2025-11-18T01:49:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:49:10.146 [DEBUG] [Thread-65032] [transport.py] [_log()] starting thread (client mode): 0xd07adcc0
2025-11-18T01:49:10.146 [DEBUG] [Thread-65032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:49:10.167 [DEBUG] [Thread-65032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:49:10.167 [INFO] [Thread-65032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:49:10.170 [DEBUG] [Thread-65032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:49:10.170 [DEBUG] [Thread-65032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:49:10.170 [DEBUG] [Thread-65032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:49:10.170 [DEBUG] [Thread-65032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] client lang: <none>
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] server lang: <none>
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] kex follows: False
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:49:10.171 [DEBUG] [Thread-65032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:49:10.172 [DEBUG] [Thread-65032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:49:10.172 [DEBUG] [Thread-65032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:49:10.172 [DEBUG] [Thread-65032] [transport.py] [_log()] Compression: none
2025-11-18T01:49:10.172 [DEBUG] [Thread-65032] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:49:10.189 [DEBUG] [Thread-65032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:49:10.189 [DEBUG] [Thread-65032] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:49:10.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:49:10.190 [DEBUG] [Thread-65032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:49:10.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:49:10.192 [DEBUG] [Thread-65032] [transport.py] [_log()] userauth is OK
2025-11-18T01:49:10.192 [DEBUG] [Thread-65032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:49:10.192 [DEBUG] [Thread-65032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:49:10.192 [DEBUG] [Thread-65032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:49:10.192 [DEBUG] [Thread-65032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:49:10.210 [INFO] [Thread-65032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:49:10.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:49:10.859 [DEBUG] [Thread-65032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:49:10.859 [DEBUG] [Thread-65032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:49:10.859 [DEBUG] [Thread-65032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:49:10.901 [DEBUG] [Thread-65032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:49:10.901 [DEBUG] [Thread-65032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:49:10.904 [DEBUG] [Thread-65032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:49:10.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:49:10.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:49:10.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:49:10.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:49:10.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:49:10.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:49:10.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:49:10.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:49:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:49:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.992056 -999.00  +12.60  16.29     51   +2.80 1 2 1 1 1     0    0 8.68 -54.14 ZNEsW 15.1 16.3 185.8 20.7 13.2 -22.5 13.1 -21.1 12.8 -20.9 13.2 -22.1
2025-11-18T01:49:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:49:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:49:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.992056
2025-11-18T01:49:10.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:49:10.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:49:10.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:49:10.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:49:10.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:49:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:48:40', tmtdew=11.23, humidity=46.29, cloud=0.0, wind=23.2, temperature=12.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:48:41', seeing=1.46, atlas_timestamp='2025-11-17T23:48:33.638', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:46:00')
2025-11-18T01:49:10.928 [DEBUG] [Thread-65032] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:49:11.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:49:11.026 [DEBUG] [Thread-65035] [transport.py] [_log()] starting thread (client mode): 0xd07565c0
2025-11-18T01:49:11.026 [DEBUG] [Thread-65035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:49:11.041 [DEBUG] [Thread-65035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:49:11.041 [INFO] [Thread-65035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] client lang: <none>
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] server lang: <none>
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] kex follows: False
2025-11-18T01:49:11.052 [DEBUG] [Thread-65035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:49:11.053 [DEBUG] [Thread-65035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:49:11.053 [DEBUG] [Thread-65035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:49:11.053 [DEBUG] [Thread-65035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:49:11.053 [DEBUG] [Thread-65035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:49:11.053 [DEBUG] [Thread-65035] [transport.py] [_log()] Compression: none
2025-11-18T01:49:11.053 [DEBUG] [Thread-65035] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:49:11.110 [DEBUG] [Thread-65035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:49:11.110 [DEBUG] [Thread-65035] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:49:11.111 [DEBUG] [Thread-65035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:49:11.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:49:11.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:49:11.167 [DEBUG] [Thread-65035] [transport.py] [_log()] userauth is OK
2025-11-18T01:49:11.167 [DEBUG] [Thread-65035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:49:11.167 [DEBUG] [Thread-65035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:49:11.167 [DEBUG] [Thread-65035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:49:11.167 [DEBUG] [Thread-65035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:49:11.187 [INFO] [Thread-65035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:49:11.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:49:11.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:49:12.048 [DEBUG] [Thread-65035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:49:12.048 [DEBUG] [Thread-65035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:49:12.096 [DEBUG] [Thread-65035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:49:12.096 [DEBUG] [Thread-65035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:49:12.105 [DEBUG] [Thread-65035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:49:12.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:49:12.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:49:12.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:49:12.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:49:12.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:49:12.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:49:12.140 [DEBUG] [Thread-65035] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:49:14.254 [DEBUG] [Thread-65037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:22.258 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:25.302 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:29.294 [DEBUG] [Thread-65038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:49:42.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:49:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:49:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 49, 12), 11.29, 46.11, 0.0, 21.07, 12.7, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:49:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:49:12
2025-11-18T01:49:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:49:43.086 [DEBUG] [Thread-65039] [transport.py] [_log()] starting thread (client mode): 0xd0756ce0
2025-11-18T01:49:43.086 [DEBUG] [Thread-65039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:49:43.107 [DEBUG] [Thread-65039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:49:43.107 [INFO] [Thread-65039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] client lang: <none>
2025-11-18T01:49:43.110 [DEBUG] [Thread-65039] [transport.py] [_log()] server lang: <none>
2025-11-18T01:49:43.111 [DEBUG] [Thread-65039] [transport.py] [_log()] kex follows: False
2025-11-18T01:49:43.111 [DEBUG] [Thread-65039] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:49:43.111 [DEBUG] [Thread-65039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:49:43.111 [DEBUG] [Thread-65039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:49:43.111 [DEBUG] [Thread-65039] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:49:43.111 [DEBUG] [Thread-65039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:49:43.111 [DEBUG] [Thread-65039] [transport.py] [_log()] Compression: none
2025-11-18T01:49:43.111 [DEBUG] [Thread-65039] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:49:43.127 [DEBUG] [Thread-65039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:49:43.128 [DEBUG] [Thread-65039] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:49:43.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:49:43.128 [DEBUG] [Thread-65039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:49:43.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:49:43.131 [DEBUG] [Thread-65039] [transport.py] [_log()] userauth is OK
2025-11-18T01:49:43.131 [DEBUG] [Thread-65039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:49:43.131 [DEBUG] [Thread-65039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:49:43.131 [DEBUG] [Thread-65039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:49:43.131 [DEBUG] [Thread-65039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:49:43.152 [INFO] [Thread-65039] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:49:43.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:49:43.278 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:43.279 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:43.757 [DEBUG] [Thread-65039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:49:43.757 [DEBUG] [Thread-65039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:49:43.758 [DEBUG] [Thread-65039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:49:43.798 [DEBUG] [Thread-65039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:49:43.799 [DEBUG] [Thread-65039] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:49:43.802 [DEBUG] [Thread-65039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:49:43.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:49:43.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:49:43.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:49:43.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:49:43.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:49:43.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:49:43.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:49:43.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:49:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:49:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.992404 -999.00  +12.60  14.42     51   +2.70 1 2 1 1 1     0    0 8.68 -53.72 ZNEsW 15.6 14.4 167.4 18.9 13.2 -22.5 13.1 -20.9 12.8 -20.9 13.1 -22.2
2025-11-18T01:49:43.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:49:43.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:49:43.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.992404
2025-11-18T01:49:43.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:49:43.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:49:43.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:49:43.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:49:43.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:49:43.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:49:12', tmtdew=11.29, humidity=46.11, cloud=0.0, wind=21.07, temperature=12.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:49:13', seeing=1.52, atlas_timestamp='2025-11-17T23:49:03.706', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:46:00')
2025-11-18T01:49:43.828 [DEBUG] [Thread-65039] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:49:43.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:49:43.915 [DEBUG] [Thread-65042] [transport.py] [_log()] starting thread (client mode): 0xd31509d0
2025-11-18T01:49:43.915 [DEBUG] [Thread-65042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:49:43.932 [DEBUG] [Thread-65042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:49:43.933 [INFO] [Thread-65042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:49:43.940 [DEBUG] [Thread-65042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] client lang: <none>
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] server lang: <none>
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] kex follows: False
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] Compression: none
2025-11-18T01:49:43.941 [DEBUG] [Thread-65042] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:49:43.998 [DEBUG] [Thread-65042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:49:43.999 [DEBUG] [Thread-65042] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:49:43.999 [DEBUG] [Thread-65042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:49:43.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:49:44.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:49:44.055 [DEBUG] [Thread-65042] [transport.py] [_log()] userauth is OK
2025-11-18T01:49:44.055 [DEBUG] [Thread-65042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:49:44.055 [DEBUG] [Thread-65042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:49:44.055 [DEBUG] [Thread-65042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:49:44.055 [DEBUG] [Thread-65042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:49:44.074 [INFO] [Thread-65042] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:49:44.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:49:44.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:49:44.323 [DEBUG] [Thread-65044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:49:45.008 [DEBUG] [Thread-65042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:49:45.008 [DEBUG] [Thread-65042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:49:45.056 [DEBUG] [Thread-65042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:49:45.056 [DEBUG] [Thread-65042] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:49:45.064 [DEBUG] [Thread-65042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:49:45.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:49:45.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:49:45.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:49:45.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:49:45.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:49:45.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:49:45.095 [DEBUG] [Thread-65042] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:49:59.369 [DEBUG] [Thread-65045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:50:00.132 [DEBUG] [Thread-65046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:50:14.400 [DEBUG] [Thread-65047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:50:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:50:15.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:50:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:50:15.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 49, 44), 11.51, 45.51, 0.0, 18.37, 12.65, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:50:15.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:49:44
2025-11-18T01:50:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:50:16.035 [DEBUG] [Thread-65048] [transport.py] [_log()] starting thread (client mode): 0xd3160df0
2025-11-18T01:50:16.036 [DEBUG] [Thread-65048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:50:16.049 [DEBUG] [Thread-65048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:50:16.049 [INFO] [Thread-65048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] client lang: <none>
2025-11-18T01:50:16.051 [DEBUG] [Thread-65048] [transport.py] [_log()] server lang: <none>
2025-11-18T01:50:16.052 [DEBUG] [Thread-65048] [transport.py] [_log()] kex follows: False
2025-11-18T01:50:16.052 [DEBUG] [Thread-65048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:50:16.052 [DEBUG] [Thread-65048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:50:16.052 [DEBUG] [Thread-65048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:50:16.052 [DEBUG] [Thread-65048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:50:16.052 [DEBUG] [Thread-65048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:50:16.052 [DEBUG] [Thread-65048] [transport.py] [_log()] Compression: none
2025-11-18T01:50:16.052 [DEBUG] [Thread-65048] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:50:16.069 [DEBUG] [Thread-65048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:50:16.069 [DEBUG] [Thread-65048] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:50:16.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:50:16.070 [DEBUG] [Thread-65048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:50:16.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:50:16.073 [DEBUG] [Thread-65048] [transport.py] [_log()] userauth is OK
2025-11-18T01:50:16.073 [DEBUG] [Thread-65048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:50:16.073 [DEBUG] [Thread-65048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:50:16.073 [DEBUG] [Thread-65048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:50:16.073 [DEBUG] [Thread-65048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:50:16.088 [INFO] [Thread-65048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:50:16.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:50:16.696 [DEBUG] [Thread-65048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:50:16.696 [DEBUG] [Thread-65048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:50:16.697 [DEBUG] [Thread-65048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:50:16.737 [DEBUG] [Thread-65048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:50:16.737 [DEBUG] [Thread-65048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:50:16.741 [DEBUG] [Thread-65048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:50:16.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:50:16.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:50:16.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:50:16.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:50:16.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:50:16.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:50:16.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:50:16.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:50:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:50:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.992751 -999.00  +12.60  14.13     50   +2.60 1 2 1 1 1     0    0 8.39 -55.01 ZNEsW 13.4 14.1 161.1 18.5 13.2 -22.6 13.1 -21.1 12.8 -21.0 13.2 -22.2
2025-11-18T01:50:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:50:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:50:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.992751
2025-11-18T01:50:16.769 [DEBUG] [Thread-65048] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:50:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:50:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:50:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:50:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:50:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:50:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:49:44', tmtdew=11.51, humidity=45.51, cloud=0.0, wind=18.37, temperature=12.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:49:45', seeing=1.39, atlas_timestamp='2025-11-17T23:49:33.686', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:48:00')
2025-11-18T01:50:16.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:50:16.867 [DEBUG] [Thread-65051] [transport.py] [_log()] starting thread (client mode): 0xd07dae90
2025-11-18T01:50:16.867 [DEBUG] [Thread-65051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:50:16.882 [DEBUG] [Thread-65051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:50:16.882 [INFO] [Thread-65051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:50:16.890 [DEBUG] [Thread-65051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:50:16.890 [DEBUG] [Thread-65051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:50:16.890 [DEBUG] [Thread-65051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:50:16.890 [DEBUG] [Thread-65051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:50:16.890 [DEBUG] [Thread-65051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:50:16.890 [DEBUG] [Thread-65051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:50:16.890 [DEBUG] [Thread-65051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:50:16.890 [DEBUG] [Thread-65051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:50:16.899 [DEBUG] [Thread-65051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:50:16.900 [DEBUG] [Thread-65051] [transport.py] [_log()] client lang: <none>
2025-11-18T01:50:16.900 [DEBUG] [Thread-65051] [transport.py] [_log()] server lang: <none>
2025-11-18T01:50:16.900 [DEBUG] [Thread-65051] [transport.py] [_log()] kex follows: False
2025-11-18T01:50:16.900 [DEBUG] [Thread-65051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:50:16.900 [DEBUG] [Thread-65051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:50:16.900 [DEBUG] [Thread-65051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:50:16.900 [DEBUG] [Thread-65051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:50:16.900 [DEBUG] [Thread-65051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:50:16.901 [DEBUG] [Thread-65051] [transport.py] [_log()] Compression: none
2025-11-18T01:50:16.901 [DEBUG] [Thread-65051] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:50:16.950 [DEBUG] [Thread-65051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:50:16.951 [DEBUG] [Thread-65051] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:50:16.952 [DEBUG] [Thread-65051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:50:16.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:50:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:50:17.006 [DEBUG] [Thread-65051] [transport.py] [_log()] userauth is OK
2025-11-18T01:50:17.007 [DEBUG] [Thread-65051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:50:17.007 [DEBUG] [Thread-65051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:50:17.007 [DEBUG] [Thread-65051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:50:17.007 [DEBUG] [Thread-65051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:50:17.033 [INFO] [Thread-65051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:50:17.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:50:17.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:50:17.877 [DEBUG] [Thread-65051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:50:17.877 [DEBUG] [Thread-65051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:50:17.925 [DEBUG] [Thread-65051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:50:17.925 [DEBUG] [Thread-65051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:50:17.934 [DEBUG] [Thread-65051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:50:17.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:50:17.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:50:17.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:50:17.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:50:17.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:50:17.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:50:17.966 [DEBUG] [Thread-65051] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:50:29.431 [DEBUG] [Thread-65053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:50:43.481 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:50:43.482 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:50:44.477 [DEBUG] [Thread-65054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:50:47.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:50:47.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:50:47.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:50:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 50, 16), 11.5, 45.58, 0.0, 18.86, 12.71, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:50:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:50:16
2025-11-18T01:50:48.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:50:48.900 [DEBUG] [Thread-65055] [transport.py] [_log()] starting thread (client mode): 0xd07da380
2025-11-18T01:50:48.900 [DEBUG] [Thread-65055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:50:48.921 [DEBUG] [Thread-65055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:50:48.921 [INFO] [Thread-65055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:50:48.924 [DEBUG] [Thread-65055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:50:48.924 [DEBUG] [Thread-65055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:50:48.924 [DEBUG] [Thread-65055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:50:48.924 [DEBUG] [Thread-65055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:50:48.924 [DEBUG] [Thread-65055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:50:48.924 [DEBUG] [Thread-65055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:50:48.924 [DEBUG] [Thread-65055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] client lang: <none>
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] server lang: <none>
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] kex follows: False
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:50:48.925 [DEBUG] [Thread-65055] [transport.py] [_log()] Compression: none
2025-11-18T01:50:48.926 [DEBUG] [Thread-65055] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:50:48.944 [DEBUG] [Thread-65055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:50:48.945 [DEBUG] [Thread-65055] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:50:48.945 [DEBUG] [Thread-65055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:50:48.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:50:48.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:50:48.947 [DEBUG] [Thread-65055] [transport.py] [_log()] userauth is OK
2025-11-18T01:50:48.947 [DEBUG] [Thread-65055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:50:48.947 [DEBUG] [Thread-65055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:50:48.947 [DEBUG] [Thread-65055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:50:48.947 [DEBUG] [Thread-65055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:50:48.971 [INFO] [Thread-65055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:50:48.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:50:49.589 [DEBUG] [Thread-65055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:50:49.589 [DEBUG] [Thread-65055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:50:49.590 [DEBUG] [Thread-65055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:50:49.630 [DEBUG] [Thread-65055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:50:49.630 [DEBUG] [Thread-65055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:50:49.633 [DEBUG] [Thread-65055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:50:49.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:50:49.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:50:49.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:50:49.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:50:49.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:50:49.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:50:49.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.993445 -999.00  +12.60  16.26     51   +2.70 1 2 1 1 1     0    0 8.64 -54.12 ZNEsW 13.6 16.3 178.8 20.1 13.2 -22.4 13.1 -21.1 12.8 -21.0 13.1 -22.1
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.993445
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:50:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:50:16', tmtdew=11.5, humidity=45.58, cloud=0.0, wind=18.86, temperature=12.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:50:17', seeing=1.39, atlas_timestamp='2025-11-17T23:50:33.648', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:48:00')
2025-11-18T01:50:49.650 [DEBUG] [Thread-65055] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:50:49.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:50:49.736 [DEBUG] [Thread-65058] [transport.py] [_log()] starting thread (client mode): 0xd31529b0
2025-11-18T01:50:49.736 [DEBUG] [Thread-65058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:50:49.753 [DEBUG] [Thread-65058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:50:49.753 [INFO] [Thread-65058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] client lang: <none>
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] server lang: <none>
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] kex follows: False
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:50:49.760 [DEBUG] [Thread-65058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:50:49.761 [DEBUG] [Thread-65058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:50:49.761 [DEBUG] [Thread-65058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:50:49.761 [DEBUG] [Thread-65058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:50:49.761 [DEBUG] [Thread-65058] [transport.py] [_log()] Compression: none
2025-11-18T01:50:49.761 [DEBUG] [Thread-65058] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:50:49.817 [DEBUG] [Thread-65058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:50:49.817 [DEBUG] [Thread-65058] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:50:49.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:50:49.818 [DEBUG] [Thread-65058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:50:49.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:50:49.878 [DEBUG] [Thread-65058] [transport.py] [_log()] userauth is OK
2025-11-18T01:50:49.878 [DEBUG] [Thread-65058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:50:49.878 [DEBUG] [Thread-65058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:50:49.878 [DEBUG] [Thread-65058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:50:49.878 [DEBUG] [Thread-65058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:50:49.896 [INFO] [Thread-65058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:50:49.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:50:49.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:50:50.747 [DEBUG] [Thread-65058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:50:50.747 [DEBUG] [Thread-65058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:50:50.795 [DEBUG] [Thread-65058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:50:50.795 [DEBUG] [Thread-65058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:50:50.803 [DEBUG] [Thread-65058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:50:50.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:50:50.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:50:50.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:50:50.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:50:50.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:50:50.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:50:50.835 [DEBUG] [Thread-65058] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:50:59.511 [DEBUG] [Thread-65060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:51:00.206 [DEBUG] [Thread-65061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:51:14.551 [DEBUG] [Thread-65062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:51:20.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:51:20.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:51:20.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:51:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 50, 48), 11.31, 46.03, 0.0, 21.1, 12.8, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:51:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:50:48
2025-11-18T01:51:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:51:21.862 [DEBUG] [Thread-65063] [transport.py] [_log()] starting thread (client mode): 0xd3150af0
2025-11-18T01:51:21.862 [DEBUG] [Thread-65063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:51:21.882 [DEBUG] [Thread-65063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:51:21.882 [INFO] [Thread-65063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] client lang: <none>
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] server lang: <none>
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] kex follows: False
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] Compression: none
2025-11-18T01:51:21.885 [DEBUG] [Thread-65063] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:51:21.902 [DEBUG] [Thread-65063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:51:21.902 [DEBUG] [Thread-65063] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:51:21.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:51:21.902 [DEBUG] [Thread-65063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:51:21.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:51:21.903 [DEBUG] [Thread-65063] [transport.py] [_log()] userauth is OK
2025-11-18T01:51:21.903 [DEBUG] [Thread-65063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:51:21.903 [DEBUG] [Thread-65063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:51:21.903 [DEBUG] [Thread-65063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:51:21.903 [DEBUG] [Thread-65063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:51:21.918 [INFO] [Thread-65063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:51:21.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:51:22.540 [DEBUG] [Thread-65063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:51:22.540 [DEBUG] [Thread-65063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:51:22.541 [DEBUG] [Thread-65063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:51:22.581 [DEBUG] [Thread-65063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:51:22.581 [DEBUG] [Thread-65063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:51:22.583 [DEBUG] [Thread-65063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:51:22.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:51:22.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:51:22.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:51:22.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:51:22.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:51:22.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:51:22.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:51:22.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.993445 -999.00  +12.60  16.26     51   +2.70 1 2 1 1 1     0    0 8.64 -54.12 ZNEsW 13.6 16.3 178.8 20.1 13.2 -22.4 13.1 -21.1 12.8 -21.0 13.1 -22.1
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.993445
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:51:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:50:48', tmtdew=11.31, humidity=46.03, cloud=0.0, wind=21.1, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:50:49', seeing=1.75, atlas_timestamp='2025-11-17T23:50:33.648', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:48:00')
2025-11-18T01:51:22.603 [DEBUG] [Thread-65063] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:51:22.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:51:22.691 [DEBUG] [Thread-65066] [transport.py] [_log()] starting thread (client mode): 0xd317fc40
2025-11-18T01:51:22.691 [DEBUG] [Thread-65066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:51:22.706 [DEBUG] [Thread-65066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:51:22.706 [INFO] [Thread-65066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:51:22.713 [DEBUG] [Thread-65066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:51:22.713 [DEBUG] [Thread-65066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:51:22.713 [DEBUG] [Thread-65066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:51:22.713 [DEBUG] [Thread-65066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] client lang: <none>
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] server lang: <none>
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] kex follows: False
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] Compression: none
2025-11-18T01:51:22.714 [DEBUG] [Thread-65066] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:51:22.778 [DEBUG] [Thread-65066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:51:22.778 [DEBUG] [Thread-65066] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:51:22.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:51:22.779 [DEBUG] [Thread-65066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:51:22.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:51:22.834 [DEBUG] [Thread-65066] [transport.py] [_log()] userauth is OK
2025-11-18T01:51:22.834 [DEBUG] [Thread-65066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:51:22.834 [DEBUG] [Thread-65066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:51:22.834 [DEBUG] [Thread-65066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:51:22.834 [DEBUG] [Thread-65066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:51:22.851 [INFO] [Thread-65066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:51:22.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:51:22.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:51:23.690 [DEBUG] [Thread-65066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:51:23.690 [DEBUG] [Thread-65066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:51:23.738 [DEBUG] [Thread-65066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:51:23.738 [DEBUG] [Thread-65066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:51:23.747 [DEBUG] [Thread-65066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:51:23.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:51:23.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:51:23.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:51:23.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:51:23.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:51:23.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:51:23.781 [DEBUG] [Thread-65066] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:51:29.579 [DEBUG] [Thread-65068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:51:43.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:51:43.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:51:44.620 [DEBUG] [Thread-65069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:51:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:51:53.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:51:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:51:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 51, 20), 11.35, 45.9, 0.0, 22.04, 12.75, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:51:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:51:20
2025-11-18T01:51:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:51:54.767 [DEBUG] [Thread-65070] [transport.py] [_log()] starting thread (client mode): 0xd317d720
2025-11-18T01:51:54.767 [DEBUG] [Thread-65070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:51:54.787 [DEBUG] [Thread-65070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:51:54.787 [INFO] [Thread-65070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] client lang: <none>
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] server lang: <none>
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] kex follows: False
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] Compression: none
2025-11-18T01:51:54.790 [DEBUG] [Thread-65070] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:51:54.806 [DEBUG] [Thread-65070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:51:54.806 [DEBUG] [Thread-65070] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:51:54.806 [DEBUG] [Thread-65070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:51:54.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:51:54.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:51:54.807 [DEBUG] [Thread-65070] [transport.py] [_log()] userauth is OK
2025-11-18T01:51:54.807 [DEBUG] [Thread-65070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:51:54.807 [DEBUG] [Thread-65070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:51:54.807 [DEBUG] [Thread-65070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:51:54.807 [DEBUG] [Thread-65070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:51:54.816 [INFO] [Thread-65070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:51:54.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:51:55.435 [DEBUG] [Thread-65070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:51:55.436 [DEBUG] [Thread-65070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:51:55.436 [DEBUG] [Thread-65070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:51:55.476 [DEBUG] [Thread-65070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:51:55.477 [DEBUG] [Thread-65070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:51:55.479 [DEBUG] [Thread-65070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:51:55.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:51:55.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:51:55.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:51:55.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:51:55.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:51:55.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:51:55.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:51:55.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:51:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:51:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.993792 -999.00  +12.60  18.26     51   +2.90 1 2 1 1 1     0    0 8.53 -54.98 ZNEsW 13.7 18.3 180.2 23.6 13.2 -22.4 13.1 -21.0 12.8 -20.9 13.1 -22.0
2025-11-18T01:51:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:51:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:51:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.993792
2025-11-18T01:51:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:51:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:51:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:51:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:51:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:51:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:51:20', tmtdew=11.35, humidity=45.9, cloud=0.0, wind=22.04, temperature=12.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:51:53', seeing=1.62, atlas_timestamp='2025-11-17T23:51:03.629', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:48:00')
2025-11-18T01:51:55.506 [DEBUG] [Thread-65070] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:51:55.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:51:55.606 [DEBUG] [Thread-65073] [transport.py] [_log()] starting thread (client mode): 0xd07a36a0
2025-11-18T01:51:55.606 [DEBUG] [Thread-65073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:51:55.622 [DEBUG] [Thread-65073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:51:55.622 [INFO] [Thread-65073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:51:55.630 [DEBUG] [Thread-65073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:51:55.630 [DEBUG] [Thread-65073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:51:55.630 [DEBUG] [Thread-65073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:51:55.630 [DEBUG] [Thread-65073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:51:55.630 [DEBUG] [Thread-65073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] client lang: <none>
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] server lang: <none>
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] kex follows: False
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] Compression: none
2025-11-18T01:51:55.631 [DEBUG] [Thread-65073] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:51:55.685 [DEBUG] [Thread-65073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:51:55.686 [DEBUG] [Thread-65073] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:51:55.686 [DEBUG] [Thread-65073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:51:55.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:51:55.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:51:55.742 [DEBUG] [Thread-65073] [transport.py] [_log()] userauth is OK
2025-11-18T01:51:55.742 [DEBUG] [Thread-65073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:51:55.743 [DEBUG] [Thread-65073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:51:55.743 [DEBUG] [Thread-65073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:51:55.743 [DEBUG] [Thread-65073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:51:55.766 [INFO] [Thread-65073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:51:55.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:51:55.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:51:56.609 [DEBUG] [Thread-65073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:51:56.609 [DEBUG] [Thread-65073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:51:56.657 [DEBUG] [Thread-65073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:51:56.657 [DEBUG] [Thread-65073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:51:56.665 [DEBUG] [Thread-65073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:51:56.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:51:56.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:51:56.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:51:56.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:51:56.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:51:56.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:51:56.696 [DEBUG] [Thread-65073] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:51:59.647 [DEBUG] [Thread-65075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:00.267 [DEBUG] [Thread-65076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:14.679 [DEBUG] [Thread-65077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:52:26.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:52:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:52:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 51, 53), 11.62, 44.83, 0.0, 19.3, 12.71, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:52:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:51:53
2025-11-18T01:52:27.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:52:27.661 [DEBUG] [Thread-65078] [transport.py] [_log()] starting thread (client mode): 0xd317e200
2025-11-18T01:52:27.661 [DEBUG] [Thread-65078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:52:27.681 [DEBUG] [Thread-65078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:52:27.681 [INFO] [Thread-65078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:52:27.684 [DEBUG] [Thread-65078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:52:27.684 [DEBUG] [Thread-65078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:52:27.684 [DEBUG] [Thread-65078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] client lang: <none>
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] server lang: <none>
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] kex follows: False
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] Compression: none
2025-11-18T01:52:27.685 [DEBUG] [Thread-65078] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:52:27.703 [DEBUG] [Thread-65078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:52:27.704 [DEBUG] [Thread-65078] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:52:27.704 [DEBUG] [Thread-65078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:52:27.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:52:27.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:52:27.706 [DEBUG] [Thread-65078] [transport.py] [_log()] userauth is OK
2025-11-18T01:52:27.706 [DEBUG] [Thread-65078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:52:27.706 [DEBUG] [Thread-65078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:52:27.707 [DEBUG] [Thread-65078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:52:27.707 [DEBUG] [Thread-65078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:52:27.731 [INFO] [Thread-65078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:52:27.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:52:28.357 [DEBUG] [Thread-65078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:52:28.357 [DEBUG] [Thread-65078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:52:28.358 [DEBUG] [Thread-65078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:52:28.397 [DEBUG] [Thread-65078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:52:28.398 [DEBUG] [Thread-65078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:52:28.401 [DEBUG] [Thread-65078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:52:28.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:52:28.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:52:28.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:52:28.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:52:28.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:52:28.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:52:28.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:52:28.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:52:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:52:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.994140 -999.00  +12.70  14.04     50   +2.70 1 2 1 1 1     0    0 8.72 -50.90 ZNEsW 14.4 14.0 170.2 21.9 13.2 -22.4 13.1 -21.2 12.8 -21.1 13.1 -22.0
2025-11-18T01:52:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:52:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:52:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.994140
2025-11-18T01:52:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:52:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:52:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:52:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:52:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:52:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:51:53', tmtdew=11.62, humidity=44.83, cloud=0.0, wind=19.3, temperature=12.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:52:25', seeing=1.62, atlas_timestamp='2025-11-17T23:51:33.696', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:48:00')
2025-11-18T01:52:28.428 [DEBUG] [Thread-65078] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:52:28.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:52:28.527 [DEBUG] [Thread-65081] [transport.py] [_log()] starting thread (client mode): 0xd07565c0
2025-11-18T01:52:28.527 [DEBUG] [Thread-65081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:52:28.542 [DEBUG] [Thread-65081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:52:28.542 [INFO] [Thread-65081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:52:28.549 [DEBUG] [Thread-65081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:52:28.549 [DEBUG] [Thread-65081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] client lang: <none>
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] server lang: <none>
2025-11-18T01:52:28.550 [DEBUG] [Thread-65081] [transport.py] [_log()] kex follows: False
2025-11-18T01:52:28.551 [DEBUG] [Thread-65081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:52:28.551 [DEBUG] [Thread-65081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:52:28.551 [DEBUG] [Thread-65081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:52:28.551 [DEBUG] [Thread-65081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:52:28.551 [DEBUG] [Thread-65081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:52:28.551 [DEBUG] [Thread-65081] [transport.py] [_log()] Compression: none
2025-11-18T01:52:28.551 [DEBUG] [Thread-65081] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:52:28.605 [DEBUG] [Thread-65081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:52:28.606 [DEBUG] [Thread-65081] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:52:28.606 [DEBUG] [Thread-65081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:52:28.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:52:28.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:52:28.661 [DEBUG] [Thread-65081] [transport.py] [_log()] userauth is OK
2025-11-18T01:52:28.662 [DEBUG] [Thread-65081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:52:28.662 [DEBUG] [Thread-65081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:52:28.662 [DEBUG] [Thread-65081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:52:28.662 [DEBUG] [Thread-65081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:52:28.681 [INFO] [Thread-65081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:52:28.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:52:28.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:52:29.532 [DEBUG] [Thread-65081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:52:29.532 [DEBUG] [Thread-65081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:52:29.580 [DEBUG] [Thread-65081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:52:29.580 [DEBUG] [Thread-65081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:52:29.588 [DEBUG] [Thread-65081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:52:29.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:52:29.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:52:29.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:52:29.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:52:29.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:52:29.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:52:29.622 [DEBUG] [Thread-65081] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:52:29.710 [DEBUG] [Thread-65083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:43.889 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:43.890 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:44.747 [DEBUG] [Thread-65084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:49.161 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:54.555 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:57.619 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:52:59.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:52:59.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:52:59.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:52:59.775 [DEBUG] [Thread-65085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:53:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 52, 57), 11.65, 44.75, 0.0, 19.55, 12.63, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:53:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:52:57
2025-11-18T01:53:00.319 [DEBUG] [Thread-65086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:53:00.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:53:00.586 [DEBUG] [Thread-65087] [transport.py] [_log()] starting thread (client mode): 0xd317ee30
2025-11-18T01:53:00.586 [DEBUG] [Thread-65087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:53:00.606 [DEBUG] [Thread-65087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:53:00.606 [INFO] [Thread-65087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] client lang: <none>
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] server lang: <none>
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] kex follows: False
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:53:00.609 [DEBUG] [Thread-65087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:53:00.610 [DEBUG] [Thread-65087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:53:00.610 [DEBUG] [Thread-65087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:53:00.610 [DEBUG] [Thread-65087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:53:00.610 [DEBUG] [Thread-65087] [transport.py] [_log()] Compression: none
2025-11-18T01:53:00.610 [DEBUG] [Thread-65087] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:53:00.626 [DEBUG] [Thread-65087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:53:00.627 [DEBUG] [Thread-65087] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:53:00.627 [DEBUG] [Thread-65087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:53:00.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:53:00.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:53:00.630 [DEBUG] [Thread-65087] [transport.py] [_log()] userauth is OK
2025-11-18T01:53:00.630 [DEBUG] [Thread-65087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:53:00.630 [DEBUG] [Thread-65087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:53:00.630 [DEBUG] [Thread-65087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:53:00.630 [DEBUG] [Thread-65087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:53:00.648 [INFO] [Thread-65087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:53:00.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:53:01.280 [DEBUG] [Thread-65087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:53:01.280 [DEBUG] [Thread-65087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:53:01.280 [DEBUG] [Thread-65087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:53:01.321 [DEBUG] [Thread-65087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:53:01.321 [DEBUG] [Thread-65087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:53:01.324 [DEBUG] [Thread-65087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:53:01.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:53:01.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:53:01.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:53:01.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:53:01.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:53:01.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:53:01.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:53:01.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.994487 -999.00  +12.70  16.93     50   +2.60 1 2 1 1 1     0    0 8.64 -49.89 ZNEsW 14.6 16.9 180.6 21.9 13.2 -22.5 13.1 -21.1 12.8 -21.0 13.1 -22.2
2025-11-18T01:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.994487
2025-11-18T01:53:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:53:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:53:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:53:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:53:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:53:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:52:57', tmtdew=11.65, humidity=44.75, cloud=0.0, wind=19.55, temperature=12.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:52:57', seeing=1.63, atlas_timestamp='2025-11-17T23:52:03.677', atlas_cloud=2, atlas_rain=1, zp_data=[0.07225000000000037, 0.08825000000000038, 0.18075000000000152, 0.2575000000000003, 0.11550000000000082, 0.13425000000000153, 0.05400000000000027, 0.07324999999999982, 0.10249999999999915, 0.17100000000000115, 0.39624999999999844, 0.4775000000000009, 0.2829999999999995, 0.11024999999999885, 0.04649999999999821, 0.02499999999999858, 0.12524999999999942, 0.3514999999999997, 0.536999999999999, 0.5872499999999992, 0.45199999999999907, 0.06874999999999787, 0.11125000000000007, 0.1957500000000003, 0.17300000000000004, 0.7055000000000016, 0.7687499999999998, 1.0250000000000004, 0.5060000000000002, 0.13900000000000112, 0.29600000000000115, 0.402000000000001, 0.4297499999999994], zp_timestamp='2025-11-17T23:48:00')
2025-11-18T01:53:01.349 [DEBUG] [Thread-65087] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:53:01.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:53:01.451 [DEBUG] [Thread-65090] [transport.py] [_log()] starting thread (client mode): 0xd317cb80
2025-11-18T01:53:01.451 [DEBUG] [Thread-65090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:53:01.468 [DEBUG] [Thread-65090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:53:01.469 [INFO] [Thread-65090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:53:01.476 [DEBUG] [Thread-65090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] client lang: <none>
2025-11-18T01:53:01.477 [DEBUG] [Thread-65090] [transport.py] [_log()] server lang: <none>
2025-11-18T01:53:01.478 [DEBUG] [Thread-65090] [transport.py] [_log()] kex follows: False
2025-11-18T01:53:01.478 [DEBUG] [Thread-65090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:53:01.478 [DEBUG] [Thread-65090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:53:01.478 [DEBUG] [Thread-65090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:53:01.478 [DEBUG] [Thread-65090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:53:01.478 [DEBUG] [Thread-65090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:53:01.478 [DEBUG] [Thread-65090] [transport.py] [_log()] Compression: none
2025-11-18T01:53:01.478 [DEBUG] [Thread-65090] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:53:01.534 [DEBUG] [Thread-65090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:53:01.534 [DEBUG] [Thread-65090] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:53:01.535 [DEBUG] [Thread-65090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:53:01.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:53:01.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:53:01.594 [DEBUG] [Thread-65090] [transport.py] [_log()] userauth is OK
2025-11-18T01:53:01.594 [DEBUG] [Thread-65090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:53:01.594 [DEBUG] [Thread-65090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:53:01.594 [DEBUG] [Thread-65090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:53:01.594 [DEBUG] [Thread-65090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:53:01.616 [INFO] [Thread-65090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:53:01.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:53:01.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:53:02.528 [DEBUG] [Thread-65090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:53:02.528 [DEBUG] [Thread-65090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:53:02.575 [DEBUG] [Thread-65090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:53:02.576 [DEBUG] [Thread-65090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:53:02.584 [DEBUG] [Thread-65090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:53:02.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:53:02.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:53:02.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:53:02.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:53:02.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:53:02.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:53:02.619 [DEBUG] [Thread-65090] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:53:04.004 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:53:14.800 [DEBUG] [Thread-65092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:53:29.839 [DEBUG] [Thread-65093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:53:32.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:53:32.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:53:32.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:53:33.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 53, 29), 11.65, 44.73, 0.0, 20.4, 12.61, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:53:33.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:53:29
2025-11-18T01:53:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:53:33.585 [DEBUG] [Thread-65094] [transport.py] [_log()] starting thread (client mode): 0xd317ef50
2025-11-18T01:53:33.585 [DEBUG] [Thread-65094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:53:33.605 [DEBUG] [Thread-65094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:53:33.605 [INFO] [Thread-65094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:53:33.608 [DEBUG] [Thread-65094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:53:33.608 [DEBUG] [Thread-65094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] client lang: <none>
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] server lang: <none>
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] kex follows: False
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] Compression: none
2025-11-18T01:53:33.609 [DEBUG] [Thread-65094] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:53:33.629 [DEBUG] [Thread-65094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:53:33.630 [DEBUG] [Thread-65094] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:53:33.631 [DEBUG] [Thread-65094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:53:33.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:53:33.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:53:33.633 [DEBUG] [Thread-65094] [transport.py] [_log()] userauth is OK
2025-11-18T01:53:33.633 [DEBUG] [Thread-65094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:53:33.634 [DEBUG] [Thread-65094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:53:33.634 [DEBUG] [Thread-65094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:53:33.634 [DEBUG] [Thread-65094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:53:33.667 [INFO] [Thread-65094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:53:33.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:53:34.297 [DEBUG] [Thread-65094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:53:34.297 [DEBUG] [Thread-65094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:53:34.298 [DEBUG] [Thread-65094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:53:34.338 [DEBUG] [Thread-65094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:53:34.339 [DEBUG] [Thread-65094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:53:34.341 [DEBUG] [Thread-65094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:53:34.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:53:34.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:53:34.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:53:34.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:53:34.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:53:34.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:53:34.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:53:34.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:53:34.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:53:34.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.994834 -999.00  +12.70  11.03     49   +2.30 1 2 1 1 1     0    0 8.63 -46.24 ZNEsW 11.5 11.0 166.2 19.5 13.2 -22.6 13.0 -21.4 12.8 -21.1 13.1 -22.3
2025-11-18T01:53:34.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:53:34.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:53:34.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.994834
2025-11-18T01:53:34.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:53:34.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:53:34.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:53:34.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:53:34.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:53:34.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:53:29', tmtdew=11.65, humidity=44.73, cloud=0.0, wind=20.4, temperature=12.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:53:29', seeing=1.51, atlas_timestamp='2025-11-17T23:52:33.658', atlas_cloud=2, atlas_rain=1, zp_data=[0.03474999999999895, 0.11775000000000091, 0.22375000000000078, 0.14849999999999852, 0.0835000000000008, 0.08025000000000126, 0.006999999999999673, -0.03125, 0.05649999999999977, 0.33800000000000097, 0.4612499999999997, 0.3360000000000003, 0.25900000000000034, 0.08825000000000038, 0.009999999999999787, -0.031000000000000583, 0.06325000000000003, 0.5340000000000007, 0.6434999999999995, 0.4312499999999986, 0.3829999999999991, 0.08674999999999855, 0.0017500000000012506, 0.021250000000000213, 0.13299999999999912, 0.6589999999999998, 0.7927499999999998, 0.5990000000000002, 0.35800000000000054, 0.0884999999999998, 0.17900000000000027, 0.30150000000000077, 0.29224999999999923], zp_timestamp='2025-11-17T23:51:00')
2025-11-18T01:53:34.366 [DEBUG] [Thread-65094] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:53:34.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:53:34.463 [DEBUG] [Thread-65097] [transport.py] [_log()] starting thread (client mode): 0xd317d3c0
2025-11-18T01:53:34.463 [DEBUG] [Thread-65097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:53:34.478 [DEBUG] [Thread-65097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:53:34.478 [INFO] [Thread-65097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] client lang: <none>
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] server lang: <none>
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] kex follows: False
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:53:34.486 [DEBUG] [Thread-65097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:53:34.487 [DEBUG] [Thread-65097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:53:34.487 [DEBUG] [Thread-65097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:53:34.487 [DEBUG] [Thread-65097] [transport.py] [_log()] Compression: none
2025-11-18T01:53:34.487 [DEBUG] [Thread-65097] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:53:34.546 [DEBUG] [Thread-65097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:53:34.546 [DEBUG] [Thread-65097] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:53:34.547 [DEBUG] [Thread-65097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:53:34.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:53:34.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:53:34.603 [DEBUG] [Thread-65097] [transport.py] [_log()] userauth is OK
2025-11-18T01:53:34.603 [DEBUG] [Thread-65097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:53:34.603 [DEBUG] [Thread-65097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:53:34.603 [DEBUG] [Thread-65097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:53:34.603 [DEBUG] [Thread-65097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:53:34.627 [INFO] [Thread-65097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:53:34.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:53:34.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:53:35.475 [DEBUG] [Thread-65097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:53:35.476 [DEBUG] [Thread-65097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:53:35.523 [DEBUG] [Thread-65097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:53:35.523 [DEBUG] [Thread-65097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:53:35.532 [DEBUG] [Thread-65097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:53:35.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:53:35.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:53:35.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:53:35.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:53:35.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:53:35.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:53:35.570 [DEBUG] [Thread-65097] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:53:44.093 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:53:44.094 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:53:44.870 [DEBUG] [Thread-65099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:53:59.920 [DEBUG] [Thread-65100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:54:00.375 [DEBUG] [Thread-65101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:54:05.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:54:05.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:54:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:54:06.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 54, 1), 11.72, 44.65, 0.0, 20.64, 12.56, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:54:06.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:54:01
2025-11-18T01:54:06.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:54:06.489 [DEBUG] [Thread-65102] [transport.py] [_log()] starting thread (client mode): 0xd31513f0
2025-11-18T01:54:06.489 [DEBUG] [Thread-65102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:54:06.504 [DEBUG] [Thread-65102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:54:06.504 [INFO] [Thread-65102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:54:06.507 [DEBUG] [Thread-65102] [transport.py] [_log()] client lang: <none>
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] server lang: <none>
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] kex follows: False
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] Compression: none
2025-11-18T01:54:06.508 [DEBUG] [Thread-65102] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:54:06.524 [DEBUG] [Thread-65102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:54:06.524 [DEBUG] [Thread-65102] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:54:06.525 [DEBUG] [Thread-65102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:54:06.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:54:06.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:54:06.527 [DEBUG] [Thread-65102] [transport.py] [_log()] userauth is OK
2025-11-18T01:54:06.527 [DEBUG] [Thread-65102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:54:06.527 [DEBUG] [Thread-65102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:54:06.527 [DEBUG] [Thread-65102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:54:06.527 [DEBUG] [Thread-65102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:54:06.545 [INFO] [Thread-65102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:54:06.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:54:07.155 [DEBUG] [Thread-65102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:54:07.155 [DEBUG] [Thread-65102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:54:07.156 [DEBUG] [Thread-65102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:54:07.196 [DEBUG] [Thread-65102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:54:07.197 [DEBUG] [Thread-65102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:54:07.200 [DEBUG] [Thread-65102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:54:07.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:54:07.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:54:07.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:54:07.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:54:07.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:54:07.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:54:07.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:54:07.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:54:07.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:54:07.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.995529 -999.00  +12.60  11.76     49   +2.20 1 2 1 1 1     0    0 8.85 -36.98 ZNEsW 12.8 11.8 170.6 13.6 13.2 -22.7 13.0 -21.2 12.8 -21.4 13.1 -22.3
2025-11-18T01:54:07.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:54:07.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:54:07.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.995529
2025-11-18T01:54:07.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:54:07.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:54:07.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:54:07.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:54:07.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:54:07.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:54:01', tmtdew=11.72, humidity=44.65, cloud=0.0, wind=20.64, temperature=12.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:54:01', seeing=1.47, atlas_timestamp='2025-11-17T23:53:33.706', atlas_cloud=2, atlas_rain=1, zp_data=[0.03474999999999895, 0.11775000000000091, 0.22375000000000078, 0.14849999999999852, 0.0835000000000008, 0.08025000000000126, 0.006999999999999673, -0.03125, 0.05649999999999977, 0.33800000000000097, 0.4612499999999997, 0.3360000000000003, 0.25900000000000034, 0.08825000000000038, 0.009999999999999787, -0.031000000000000583, 0.06325000000000003, 0.5340000000000007, 0.6434999999999995, 0.4312499999999986, 0.3829999999999991, 0.08674999999999855, 0.0017500000000012506, 0.021250000000000213, 0.13299999999999912, 0.6589999999999998, 0.7927499999999998, 0.5990000000000002, 0.35800000000000054, 0.0884999999999998, 0.17900000000000027, 0.30150000000000077, 0.29224999999999923], zp_timestamp='2025-11-17T23:51:00')
2025-11-18T01:54:07.228 [DEBUG] [Thread-65102] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:54:07.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:54:07.324 [DEBUG] [Thread-65105] [transport.py] [_log()] starting thread (client mode): 0xd0755390
2025-11-18T01:54:07.324 [DEBUG] [Thread-65105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:54:07.339 [DEBUG] [Thread-65105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:54:07.339 [INFO] [Thread-65105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] client lang: <none>
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] server lang: <none>
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] kex follows: False
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:54:07.347 [DEBUG] [Thread-65105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:54:07.348 [DEBUG] [Thread-65105] [transport.py] [_log()] Compression: none
2025-11-18T01:54:07.348 [DEBUG] [Thread-65105] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:54:07.406 [DEBUG] [Thread-65105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:54:07.406 [DEBUG] [Thread-65105] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:54:07.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:54:07.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:54:07.408 [DEBUG] [Thread-65105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:54:07.462 [DEBUG] [Thread-65105] [transport.py] [_log()] userauth is OK
2025-11-18T01:54:07.462 [DEBUG] [Thread-65105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:54:07.462 [DEBUG] [Thread-65105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:54:07.462 [DEBUG] [Thread-65105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:54:07.462 [DEBUG] [Thread-65105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:54:07.485 [INFO] [Thread-65105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:54:07.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:54:07.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:54:08.318 [DEBUG] [Thread-65105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:54:08.318 [DEBUG] [Thread-65105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:54:08.370 [DEBUG] [Thread-65105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:54:08.370 [DEBUG] [Thread-65105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:54:08.379 [DEBUG] [Thread-65105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:54:08.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:54:08.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:54:08.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:54:08.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:54:08.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:54:08.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:54:08.415 [DEBUG] [Thread-65105] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:54:14.947 [DEBUG] [Thread-65107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:54:29.988 [DEBUG] [Thread-65108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:54:38.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:54:38.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:54:38.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:54:39.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 54, 33), 11.68, 44.76, 0.0, 19.34, 12.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:54:39.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:54:33
2025-11-18T01:54:39.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:54:39.368 [DEBUG] [Thread-65109] [transport.py] [_log()] starting thread (client mode): 0xd0754d30
2025-11-18T01:54:39.368 [DEBUG] [Thread-65109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:54:39.387 [DEBUG] [Thread-65109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:54:39.387 [INFO] [Thread-65109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] client lang: <none>
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] server lang: <none>
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] kex follows: False
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] Compression: none
2025-11-18T01:54:39.390 [DEBUG] [Thread-65109] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:54:39.407 [DEBUG] [Thread-65109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:54:39.407 [DEBUG] [Thread-65109] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:54:39.408 [DEBUG] [Thread-65109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:54:39.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:54:39.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:54:39.410 [DEBUG] [Thread-65109] [transport.py] [_log()] userauth is OK
2025-11-18T01:54:39.410 [DEBUG] [Thread-65109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:54:39.410 [DEBUG] [Thread-65109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:54:39.410 [DEBUG] [Thread-65109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:54:39.410 [DEBUG] [Thread-65109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:54:39.428 [INFO] [Thread-65109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:54:39.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:54:40.042 [DEBUG] [Thread-65109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:54:40.042 [DEBUG] [Thread-65109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:54:40.043 [DEBUG] [Thread-65109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:54:40.083 [DEBUG] [Thread-65109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:54:40.083 [DEBUG] [Thread-65109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:54:40.086 [DEBUG] [Thread-65109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:54:40.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:54:40.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:54:40.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:54:40.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:54:40.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:54:40.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:54:40.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:54:40.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:54:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:54:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.995876 -999.00  +12.60  13.85     50   +2.50 1 2 1 1 1     0    0 9.13 -33.43 ZNEsW 13.7 13.8 173.2 21.4 13.1 -22.4 13.0 -21.6 12.8 -21.3 13.1 -22.2
2025-11-18T01:54:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:54:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:54:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.995876
2025-11-18T01:54:40.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:54:40.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:54:40.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:54:40.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:54:40.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:54:40.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:54:33', tmtdew=11.68, humidity=44.76, cloud=0.0, wind=19.34, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:54:33', seeing=1.44, atlas_timestamp='2025-11-17T23:54:03.686', atlas_cloud=2, atlas_rain=1, zp_data=[0.03474999999999895, 0.11775000000000091, 0.22375000000000078, 0.14849999999999852, 0.0835000000000008, 0.08025000000000126, 0.006999999999999673, -0.03125, 0.05649999999999977, 0.33800000000000097, 0.4612499999999997, 0.3360000000000003, 0.25900000000000034, 0.08825000000000038, 0.009999999999999787, -0.031000000000000583, 0.06325000000000003, 0.5340000000000007, 0.6434999999999995, 0.4312499999999986, 0.3829999999999991, 0.08674999999999855, 0.0017500000000012506, 0.021250000000000213, 0.13299999999999912, 0.6589999999999998, 0.7927499999999998, 0.5990000000000002, 0.35800000000000054, 0.0884999999999998, 0.17900000000000027, 0.30150000000000077, 0.29224999999999923], zp_timestamp='2025-11-17T23:51:00')
2025-11-18T01:54:40.110 [DEBUG] [Thread-65109] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:54:40.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:54:40.206 [DEBUG] [Thread-65112] [transport.py] [_log()] starting thread (client mode): 0xd31510f0
2025-11-18T01:54:40.206 [DEBUG] [Thread-65112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:54:40.221 [DEBUG] [Thread-65112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:54:40.221 [INFO] [Thread-65112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] client lang: <none>
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] server lang: <none>
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] kex follows: False
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] Compression: none
2025-11-18T01:54:40.229 [DEBUG] [Thread-65112] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:54:40.284 [DEBUG] [Thread-65112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:54:40.284 [DEBUG] [Thread-65112] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:54:40.284 [DEBUG] [Thread-65112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:54:40.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:54:40.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:54:40.345 [DEBUG] [Thread-65112] [transport.py] [_log()] userauth is OK
2025-11-18T01:54:40.346 [DEBUG] [Thread-65112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:54:40.346 [DEBUG] [Thread-65112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:54:40.346 [DEBUG] [Thread-65112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:54:40.346 [DEBUG] [Thread-65112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:54:40.368 [INFO] [Thread-65112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:54:40.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:54:40.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:54:41.218 [DEBUG] [Thread-65112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:54:41.219 [DEBUG] [Thread-65112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:54:41.266 [DEBUG] [Thread-65112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:54:41.266 [DEBUG] [Thread-65112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:54:41.276 [DEBUG] [Thread-65112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:54:41.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:54:41.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:54:41.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:54:41.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:54:41.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:54:41.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:54:41.310 [DEBUG] [Thread-65112] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:54:44.297 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:54:44.299 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:54:45.024 [DEBUG] [Thread-65114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:55:00.069 [DEBUG] [Thread-65115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:55:00.445 [DEBUG] [Thread-65116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:55:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:55:11.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:55:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:55:12.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 55, 5), 11.52, 45.28, 0.0, 20.73, 12.53, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:55:12.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:55:05
2025-11-18T01:55:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:55:12.296 [DEBUG] [Thread-65117] [transport.py] [_log()] starting thread (client mode): 0xd31521d0
2025-11-18T01:55:12.296 [DEBUG] [Thread-65117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:55:12.317 [DEBUG] [Thread-65117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:55:12.317 [INFO] [Thread-65117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] client lang: <none>
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] server lang: <none>
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] kex follows: False
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:55:12.320 [DEBUG] [Thread-65117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:55:12.321 [DEBUG] [Thread-65117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:55:12.321 [DEBUG] [Thread-65117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:55:12.321 [DEBUG] [Thread-65117] [transport.py] [_log()] Compression: none
2025-11-18T01:55:12.321 [DEBUG] [Thread-65117] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:55:12.336 [DEBUG] [Thread-65117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:55:12.336 [DEBUG] [Thread-65117] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:55:12.336 [DEBUG] [Thread-65117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:55:12.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:55:12.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:55:12.337 [DEBUG] [Thread-65117] [transport.py] [_log()] userauth is OK
2025-11-18T01:55:12.337 [DEBUG] [Thread-65117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:55:12.337 [DEBUG] [Thread-65117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:55:12.337 [DEBUG] [Thread-65117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:55:12.337 [DEBUG] [Thread-65117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:55:12.353 [INFO] [Thread-65117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:55:12.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:55:13.255 [DEBUG] [Thread-65117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:55:13.255 [DEBUG] [Thread-65117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:55:13.255 [DEBUG] [Thread-65117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:55:13.296 [DEBUG] [Thread-65117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:55:13.296 [DEBUG] [Thread-65117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:55:13.298 [DEBUG] [Thread-65117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:55:13.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:55:13.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:55:13.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:55:13.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:55:13.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:55:13.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:55:13.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:55:13.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.996223 -999.00  +12.60  15.13     50   +2.50 1 2 1 1 1     0    0 9.21 -30.74 ZNEsW 15.1 15.1 170.6 22.9 13.1 -22.5 13.0 -21.6 12.8 -21.5 13.1 -22.3
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.996223
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T01:55:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:55:05', tmtdew=11.52, humidity=45.28, cloud=0.0, wind=20.73, temperature=12.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:55:05', seeing=1.44, atlas_timestamp='2025-11-17T23:54:33.667', atlas_cloud=2, atlas_rain=1, zp_data=[0.03474999999999895, 0.11775000000000091, 0.22375000000000078, 0.14849999999999852, 0.0835000000000008, 0.08025000000000126, 0.006999999999999673, -0.03125, 0.05649999999999977, 0.33800000000000097, 0.4612499999999997, 0.3360000000000003, 0.25900000000000034, 0.08825000000000038, 0.009999999999999787, -0.031000000000000583, 0.06325000000000003, 0.5340000000000007, 0.6434999999999995, 0.4312499999999986, 0.3829999999999991, 0.08674999999999855, 0.0017500000000012506, 0.021250000000000213, 0.13299999999999912, 0.6589999999999998, 0.7927499999999998, 0.5990000000000002, 0.35800000000000054, 0.0884999999999998, 0.17900000000000027, 0.30150000000000077, 0.29224999999999923], zp_timestamp='2025-11-17T23:51:00')
2025-11-18T01:55:13.316 [DEBUG] [Thread-65117] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:55:13.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:55:13.404 [DEBUG] [Thread-65120] [transport.py] [_log()] starting thread (client mode): 0xd317d3c0
2025-11-18T01:55:13.404 [DEBUG] [Thread-65120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:55:13.419 [DEBUG] [Thread-65120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:55:13.419 [INFO] [Thread-65120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] client lang: <none>
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] server lang: <none>
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] kex follows: False
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] Compression: none
2025-11-18T01:55:13.427 [DEBUG] [Thread-65120] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:55:13.484 [DEBUG] [Thread-65120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:55:13.484 [DEBUG] [Thread-65120] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:55:13.484 [DEBUG] [Thread-65120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:55:13.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:55:13.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:55:13.541 [DEBUG] [Thread-65120] [transport.py] [_log()] userauth is OK
2025-11-18T01:55:13.541 [DEBUG] [Thread-65120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:55:13.541 [DEBUG] [Thread-65120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:55:13.541 [DEBUG] [Thread-65120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:55:13.541 [DEBUG] [Thread-65120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:55:13.559 [INFO] [Thread-65120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:55:13.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:55:13.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:55:14.407 [DEBUG] [Thread-65120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:55:14.408 [DEBUG] [Thread-65120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:55:14.456 [DEBUG] [Thread-65120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:55:14.456 [DEBUG] [Thread-65120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:55:14.464 [DEBUG] [Thread-65120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:55:14.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:55:14.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:55:14.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:55:14.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:55:14.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:55:14.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:55:14.496 [DEBUG] [Thread-65120] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:55:15.097 [DEBUG] [Thread-65122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:55:30.129 [DEBUG] [Thread-65123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:55:44.503 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:55:44.504 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:55:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:55:44.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:55:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:55:45.160 [DEBUG] [Thread-65124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:55:45.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 55, 37), 11.5, 45.38, 0.0, 18.21, 12.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:55:45.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:55:37
2025-11-18T01:55:45.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:55:45.435 [DEBUG] [Thread-65125] [transport.py] [_log()] starting thread (client mode): 0xd3150d30
2025-11-18T01:55:45.436 [DEBUG] [Thread-65125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:55:45.457 [DEBUG] [Thread-65125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:55:45.457 [INFO] [Thread-65125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:55:45.461 [DEBUG] [Thread-65125] [transport.py] [_log()] client lang: <none>
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] server lang: <none>
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] kex follows: False
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] Compression: none
2025-11-18T01:55:45.462 [DEBUG] [Thread-65125] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:55:45.481 [DEBUG] [Thread-65125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:55:45.482 [DEBUG] [Thread-65125] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:55:45.482 [DEBUG] [Thread-65125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:55:45.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:55:45.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:55:45.484 [DEBUG] [Thread-65125] [transport.py] [_log()] userauth is OK
2025-11-18T01:55:45.484 [DEBUG] [Thread-65125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:55:45.484 [DEBUG] [Thread-65125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:55:45.484 [DEBUG] [Thread-65125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:55:45.485 [DEBUG] [Thread-65125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:55:45.508 [INFO] [Thread-65125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:55:45.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:55:47.198 [DEBUG] [Thread-65125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:55:47.198 [DEBUG] [Thread-65125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:55:47.199 [DEBUG] [Thread-65125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:55:47.239 [DEBUG] [Thread-65125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:55:47.240 [DEBUG] [Thread-65125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:55:47.243 [DEBUG] [Thread-65125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:55:47.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:55:47.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:55:47.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:55:47.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:55:47.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:55:47.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:55:47.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:55:47.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:55:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:55:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.996570 -999.00  +12.60  15.93     49   +2.40 1 1 1 1 1     0    0 9.10 -29.08 ZNESW 16.0 15.9 172.8 20.2 13.1 -22.5 13.0 -21.5 12.8 -21.4 13.1 -22.3
2025-11-18T01:55:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:55:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:55:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.996570
2025-11-18T01:55:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:55:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:55:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:55:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:55:47.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:55:47.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:55:37', tmtdew=11.5, humidity=45.38, cloud=0.0, wind=18.21, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:55:37', seeing=1.6, atlas_timestamp='2025-11-17T23:55:03.648', atlas_cloud=1, atlas_rain=1, zp_data=[0.03474999999999895, 0.11775000000000091, 0.22375000000000078, 0.14849999999999852, 0.0835000000000008, 0.08025000000000126, 0.006999999999999673, -0.03125, 0.05649999999999977, 0.33800000000000097, 0.4612499999999997, 0.3360000000000003, 0.25900000000000034, 0.08825000000000038, 0.009999999999999787, -0.031000000000000583, 0.06325000000000003, 0.5340000000000007, 0.6434999999999995, 0.4312499999999986, 0.3829999999999991, 0.08674999999999855, 0.0017500000000012506, 0.021250000000000213, 0.13299999999999912, 0.6589999999999998, 0.7927499999999998, 0.5990000000000002, 0.35800000000000054, 0.0884999999999998, 0.17900000000000027, 0.30150000000000077, 0.29224999999999923], zp_timestamp='2025-11-17T23:51:00')
2025-11-18T01:55:47.267 [DEBUG] [Thread-65125] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:55:47.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:55:47.365 [DEBUG] [Thread-65128] [transport.py] [_log()] starting thread (client mode): 0xd317c160
2025-11-18T01:55:47.365 [DEBUG] [Thread-65128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:55:47.379 [DEBUG] [Thread-65128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:55:47.379 [INFO] [Thread-65128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] client lang: <none>
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] server lang: <none>
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] kex follows: False
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:55:47.387 [DEBUG] [Thread-65128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:55:47.388 [DEBUG] [Thread-65128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:55:47.388 [DEBUG] [Thread-65128] [transport.py] [_log()] Compression: none
2025-11-18T01:55:47.388 [DEBUG] [Thread-65128] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:55:47.446 [DEBUG] [Thread-65128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:55:47.446 [DEBUG] [Thread-65128] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:55:47.447 [DEBUG] [Thread-65128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:55:47.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:55:47.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:55:47.501 [DEBUG] [Thread-65128] [transport.py] [_log()] userauth is OK
2025-11-18T01:55:47.501 [DEBUG] [Thread-65128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:55:47.502 [DEBUG] [Thread-65128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:55:47.502 [DEBUG] [Thread-65128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:55:47.502 [DEBUG] [Thread-65128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:55:47.524 [INFO] [Thread-65128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:55:47.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:55:47.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:55:48.431 [DEBUG] [Thread-65128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:55:48.431 [DEBUG] [Thread-65128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:55:48.479 [DEBUG] [Thread-65128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:55:48.480 [DEBUG] [Thread-65128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:55:48.488 [DEBUG] [Thread-65128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:55:48.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:55:48.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:55: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') -> 00000000
2025-11-18T01:55:48.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:55:48.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:55:48.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:55:48.522 [DEBUG] [Thread-65128] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:56:00.185 [DEBUG] [Thread-65130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:56:00.505 [DEBUG] [Thread-65131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:56:15.225 [DEBUG] [Thread-65132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:56:18.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:56:18.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:56:18.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:56:19.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 56, 9), 11.59, 45.1, 0.0, 18.26, 12.56, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:56:19.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:56:09
2025-11-18T01:56:19.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:56:19.465 [DEBUG] [Thread-65133] [transport.py] [_log()] starting thread (client mode): 0xd07db4c0
2025-11-18T01:56:19.465 [DEBUG] [Thread-65133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:56:19.487 [DEBUG] [Thread-65133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:56:19.487 [INFO] [Thread-65133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:56:19.490 [DEBUG] [Thread-65133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:56:19.491 [DEBUG] [Thread-65133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:56:19.491 [DEBUG] [Thread-65133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:56:19.491 [DEBUG] [Thread-65133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:56:19.491 [DEBUG] [Thread-65133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:56:19.491 [DEBUG] [Thread-65133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:56:19.491 [DEBUG] [Thread-65133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:56:19.491 [DEBUG] [Thread-65133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:56:19.491 [DEBUG] [Thread-65133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:56:19.492 [DEBUG] [Thread-65133] [transport.py] [_log()] client lang: <none>
2025-11-18T01:56:19.492 [DEBUG] [Thread-65133] [transport.py] [_log()] server lang: <none>
2025-11-18T01:56:19.492 [DEBUG] [Thread-65133] [transport.py] [_log()] kex follows: False
2025-11-18T01:56:19.492 [DEBUG] [Thread-65133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:56:19.492 [DEBUG] [Thread-65133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:56:19.492 [DEBUG] [Thread-65133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:56:19.492 [DEBUG] [Thread-65133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:56:19.492 [DEBUG] [Thread-65133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:56:19.493 [DEBUG] [Thread-65133] [transport.py] [_log()] Compression: none
2025-11-18T01:56:19.493 [DEBUG] [Thread-65133] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:56:19.509 [DEBUG] [Thread-65133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:56:19.509 [DEBUG] [Thread-65133] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:56:19.510 [DEBUG] [Thread-65133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:56:19.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:56:19.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:56:19.512 [DEBUG] [Thread-65133] [transport.py] [_log()] userauth is OK
2025-11-18T01:56:19.512 [DEBUG] [Thread-65133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:56:19.512 [DEBUG] [Thread-65133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:56:19.512 [DEBUG] [Thread-65133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:56:19.512 [DEBUG] [Thread-65133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:56:19.548 [INFO] [Thread-65133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:56:19.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:56:20.140 [DEBUG] [Thread-65133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:56:20.141 [DEBUG] [Thread-65133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:56:20.141 [DEBUG] [Thread-65133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:56:20.182 [DEBUG] [Thread-65133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:56:20.182 [DEBUG] [Thread-65133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:56:20.185 [DEBUG] [Thread-65133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:56:20.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:56:20.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:56:20.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:56:20.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:56:20.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:56:20.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:56:20.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:56:20.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:56:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:56:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.996917 -999.00  +12.60  13.33     49   +2.30 1 1 1 1 1     0    0 9.46 -27.72 ZNESW 12.7 13.3 171.6 18.9 13.2 -22.7 13.0 -21.6 12.8 -21.5 13.1 -22.3
2025-11-18T01:56:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:56:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:56:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.996917
2025-11-18T01:56:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:56:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:56:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:56:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:56:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:56:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:56:09', tmtdew=11.59, humidity=45.1, cloud=0.0, wind=18.26, temperature=12.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:56:09', seeing=1.87, atlas_timestamp='2025-11-17T23:55:33.629', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:54:00')
2025-11-18T01:56:20.209 [DEBUG] [Thread-65133] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:56:20.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:56:20.305 [DEBUG] [Thread-65136] [transport.py] [_log()] starting thread (client mode): 0xd07a3700
2025-11-18T01:56:20.305 [DEBUG] [Thread-65136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:56:20.319 [DEBUG] [Thread-65136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:56:20.319 [INFO] [Thread-65136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:56:20.326 [DEBUG] [Thread-65136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] client lang: <none>
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] server lang: <none>
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] kex follows: False
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] Compression: none
2025-11-18T01:56:20.327 [DEBUG] [Thread-65136] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:56:20.385 [DEBUG] [Thread-65136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:56:20.385 [DEBUG] [Thread-65136] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:56:20.386 [DEBUG] [Thread-65136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:56:20.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:56:20.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:56:20.441 [DEBUG] [Thread-65136] [transport.py] [_log()] userauth is OK
2025-11-18T01:56:20.442 [DEBUG] [Thread-65136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:56:20.442 [DEBUG] [Thread-65136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:56:20.442 [DEBUG] [Thread-65136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:56:20.442 [DEBUG] [Thread-65136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:56:20.460 [INFO] [Thread-65136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:56:20.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:56:20.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:56:21.329 [DEBUG] [Thread-65136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:56:21.329 [DEBUG] [Thread-65136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:56:21.376 [DEBUG] [Thread-65136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:56:21.377 [DEBUG] [Thread-65136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:56:21.386 [DEBUG] [Thread-65136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:56:21.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:56:21.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:56:21.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:56:21.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:56:21.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:56:21.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:56:21.421 [DEBUG] [Thread-65136] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:56:30.252 [DEBUG] [Thread-65138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:56:44.706 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:56:44.708 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:56:45.290 [DEBUG] [Thread-65139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:56:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:56:51.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:56:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:56:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 56, 41), 11.58, 44.78, 0.0, 15.56, 12.56, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:56:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:56:41
2025-11-18T01:56:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:56:52.363 [DEBUG] [Thread-65140] [transport.py] [_log()] starting thread (client mode): 0xd07d9510
2025-11-18T01:56:52.363 [DEBUG] [Thread-65140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:56:52.383 [DEBUG] [Thread-65140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:56:52.383 [INFO] [Thread-65140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:56:52.386 [DEBUG] [Thread-65140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:56:52.386 [DEBUG] [Thread-65140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:56:52.386 [DEBUG] [Thread-65140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:56:52.386 [DEBUG] [Thread-65140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:56:52.386 [DEBUG] [Thread-65140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] client lang: <none>
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] server lang: <none>
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] kex follows: False
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:56:52.387 [DEBUG] [Thread-65140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:56:52.388 [DEBUG] [Thread-65140] [transport.py] [_log()] Compression: none
2025-11-18T01:56:52.388 [DEBUG] [Thread-65140] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:56:52.405 [DEBUG] [Thread-65140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:56:52.405 [DEBUG] [Thread-65140] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:56:52.405 [DEBUG] [Thread-65140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:56:52.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:56:52.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:56:52.406 [DEBUG] [Thread-65140] [transport.py] [_log()] userauth is OK
2025-11-18T01:56:52.406 [DEBUG] [Thread-65140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:56:52.406 [DEBUG] [Thread-65140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:56:52.406 [DEBUG] [Thread-65140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:56:52.406 [DEBUG] [Thread-65140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:56:52.416 [INFO] [Thread-65140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:56:52.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:56:52.977 [DEBUG] [Thread-65140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:56:52.977 [DEBUG] [Thread-65140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:56:52.978 [DEBUG] [Thread-65140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:56:53.018 [DEBUG] [Thread-65140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:56:53.019 [DEBUG] [Thread-65140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:56:53.021 [DEBUG] [Thread-65140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:56:53.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:56:53.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:56:53.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:56:53.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:56:53.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:56:53.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:56:53.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:56:53.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:56:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:56:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.997265 -999.00  +12.60  12.18     49   +2.40 1 1 1 1 1     0    0 9.21 -24.18 ZNESW 12.3 12.2 162.2 16.9 13.2 -22.6 13.0 -21.6 12.8 -21.5 13.1 -22.3
2025-11-18T01:56:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:56:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:56:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.997265
2025-11-18T01:56:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:56:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:56:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:56:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:56:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:56:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:56:41', tmtdew=11.58, humidity=44.78, cloud=0.0, wind=15.56, temperature=12.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:56:41', seeing=1.56, atlas_timestamp='2025-11-17T23:56:03.696', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:54:00')
2025-11-18T01:56:53.047 [DEBUG] [Thread-65140] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:56:53.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:56:53.152 [DEBUG] [Thread-65143] [transport.py] [_log()] starting thread (client mode): 0xd3150d30
2025-11-18T01:56:53.152 [DEBUG] [Thread-65143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:56:53.170 [DEBUG] [Thread-65143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:56:53.170 [INFO] [Thread-65143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] client lang: <none>
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] server lang: <none>
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] kex follows: False
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:56:53.179 [DEBUG] [Thread-65143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:56:53.180 [DEBUG] [Thread-65143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:56:53.180 [DEBUG] [Thread-65143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:56:53.180 [DEBUG] [Thread-65143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:56:53.180 [DEBUG] [Thread-65143] [transport.py] [_log()] Compression: none
2025-11-18T01:56:53.180 [DEBUG] [Thread-65143] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:56:53.237 [DEBUG] [Thread-65143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:56:53.238 [DEBUG] [Thread-65143] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:56:53.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:56:53.239 [DEBUG] [Thread-65143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:56:53.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:56:53.293 [DEBUG] [Thread-65143] [transport.py] [_log()] userauth is OK
2025-11-18T01:56:53.293 [DEBUG] [Thread-65143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:56:53.293 [DEBUG] [Thread-65143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:56:53.294 [DEBUG] [Thread-65143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:56:53.294 [DEBUG] [Thread-65143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:56:53.313 [INFO] [Thread-65143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:56:53.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:56:53.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:56:54.141 [DEBUG] [Thread-65143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:56:54.141 [DEBUG] [Thread-65143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:56:54.192 [DEBUG] [Thread-65143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:56:54.193 [DEBUG] [Thread-65143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:56:54.204 [DEBUG] [Thread-65143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:56:54.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:56:54.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:56:54.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:56:54.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:56:54.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:56:54.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:56:54.249 [DEBUG] [Thread-65143] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:57:00.320 [DEBUG] [Thread-65145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:57:00.574 [DEBUG] [Thread-65146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:57:15.359 [DEBUG] [Thread-65147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:57:24.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:57:24.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:57:24.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:57:24.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 57, 13), 11.55, 44.86, 0.0, 19.04, 12.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:57:24.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:57:13
2025-11-18T01:57:25.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:57:25.188 [DEBUG] [Thread-65148] [transport.py] [_log()] starting thread (client mode): 0xd07a3a90
2025-11-18T01:57:25.188 [DEBUG] [Thread-65148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:57:25.208 [DEBUG] [Thread-65148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:57:25.208 [INFO] [Thread-65148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:57:25.211 [DEBUG] [Thread-65148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] client lang: <none>
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] server lang: <none>
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] kex follows: False
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] Compression: none
2025-11-18T01:57:25.212 [DEBUG] [Thread-65148] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:57:25.231 [DEBUG] [Thread-65148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:57:25.231 [DEBUG] [Thread-65148] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:57:25.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:57:25.232 [DEBUG] [Thread-65148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:57:25.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:57:25.233 [DEBUG] [Thread-65148] [transport.py] [_log()] userauth is OK
2025-11-18T01:57:25.234 [DEBUG] [Thread-65148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:57:25.234 [DEBUG] [Thread-65148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:57:25.234 [DEBUG] [Thread-65148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:57:25.234 [DEBUG] [Thread-65148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:57:25.256 [INFO] [Thread-65148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:57:25.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:57:25.878 [DEBUG] [Thread-65148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:57:25.878 [DEBUG] [Thread-65148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:57:25.878 [DEBUG] [Thread-65148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:57:25.919 [DEBUG] [Thread-65148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:57:25.919 [DEBUG] [Thread-65148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:57:25.922 [DEBUG] [Thread-65148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:57:25.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:57:25.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:57:25.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:57:25.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:57:25.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:57:25.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:57:25.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:57:25.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:57:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:57:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.997959 -999.00  +12.50  11.48     49   +2.20 1 1 1 1 1     0    0 9.50 -20.44 ZNESW 11.0 11.5 166.6 12.8 13.1 -22.6 13.0 -21.7 12.8 -21.4 13.0 -22.3
2025-11-18T01:57:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:57:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:57:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.997959
2025-11-18T01:57:25.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:57:25.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:57:25.946 [DEBUG] [Thread-65148] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:57:25.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:57:25.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:57:25.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:57:25.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:57:13', tmtdew=11.55, humidity=44.86, cloud=0.0, wind=19.04, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:57:13', seeing=1.58, atlas_timestamp='2025-11-17T23:57:03.658', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:54:00')
2025-11-18T01:57:26.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:57:26.034 [DEBUG] [Thread-65151] [transport.py] [_log()] starting thread (client mode): 0xd0756080
2025-11-18T01:57:26.034 [DEBUG] [Thread-65151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:57:26.049 [DEBUG] [Thread-65151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:57:26.049 [INFO] [Thread-65151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:57:26.057 [DEBUG] [Thread-65151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:57:26.058 [DEBUG] [Thread-65151] [transport.py] [_log()] client lang: <none>
2025-11-18T01:57:26.058 [DEBUG] [Thread-65151] [transport.py] [_log()] server lang: <none>
2025-11-18T01:57:26.058 [DEBUG] [Thread-65151] [transport.py] [_log()] kex follows: False
2025-11-18T01:57:26.058 [DEBUG] [Thread-65151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:57:26.058 [DEBUG] [Thread-65151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:57:26.058 [DEBUG] [Thread-65151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:57:26.058 [DEBUG] [Thread-65151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:57:26.058 [DEBUG] [Thread-65151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:57:26.059 [DEBUG] [Thread-65151] [transport.py] [_log()] Compression: none
2025-11-18T01:57:26.059 [DEBUG] [Thread-65151] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:57:26.114 [DEBUG] [Thread-65151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:57:26.114 [DEBUG] [Thread-65151] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:57:26.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:57:26.115 [DEBUG] [Thread-65151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:57:26.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:57:26.169 [DEBUG] [Thread-65151] [transport.py] [_log()] userauth is OK
2025-11-18T01:57:26.170 [DEBUG] [Thread-65151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:57:26.170 [DEBUG] [Thread-65151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:57:26.170 [DEBUG] [Thread-65151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:57:26.170 [DEBUG] [Thread-65151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:57:26.192 [INFO] [Thread-65151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:57:26.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:57:26.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:57:27.013 [DEBUG] [Thread-65151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:57:27.013 [DEBUG] [Thread-65151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:57:27.061 [DEBUG] [Thread-65151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:57:27.061 [DEBUG] [Thread-65151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:57:27.071 [DEBUG] [Thread-65151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:57:27.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:57:27.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:57:27.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:57:27.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:57:27.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:57:27.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:57:27.106 [DEBUG] [Thread-65151] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:57:30.385 [DEBUG] [Thread-65153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:57:44.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:57:44.911 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:57:45.425 [DEBUG] [Thread-65154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:57:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:57:57.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:57:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:57:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 57, 45), 11.33, 45.74, 0.0, 16.73, 12.46, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:57:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:57:45
2025-11-18T01:57:57.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:57:58.050 [DEBUG] [Thread-65155] [transport.py] [_log()] starting thread (client mode): 0xd07aee90
2025-11-18T01:57:58.051 [DEBUG] [Thread-65155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:57:58.071 [DEBUG] [Thread-65155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:57:58.071 [INFO] [Thread-65155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:57:58.074 [DEBUG] [Thread-65155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] client lang: <none>
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] server lang: <none>
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] kex follows: False
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] Compression: none
2025-11-18T01:57:58.075 [DEBUG] [Thread-65155] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:57:58.092 [DEBUG] [Thread-65155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:57:58.092 [DEBUG] [Thread-65155] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:57:58.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:57:58.093 [DEBUG] [Thread-65155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:57:58.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:57:58.094 [DEBUG] [Thread-65155] [transport.py] [_log()] userauth is OK
2025-11-18T01:57:58.095 [DEBUG] [Thread-65155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:57:58.095 [DEBUG] [Thread-65155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:57:58.095 [DEBUG] [Thread-65155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:57:58.095 [DEBUG] [Thread-65155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:57:58.109 [INFO] [Thread-65155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:57:58.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:57:58.768 [DEBUG] [Thread-65155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:57:58.768 [DEBUG] [Thread-65155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:57:58.769 [DEBUG] [Thread-65155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:57:58.809 [DEBUG] [Thread-65155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:57:58.809 [DEBUG] [Thread-65155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:57:58.812 [DEBUG] [Thread-65155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:57:58.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:57:58.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:57:58.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:57:58.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:57:58.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:57:58.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:57:58.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:57:58.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:57:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:57:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.998306 -999.00  +12.50  13.89     50   +2.40 1 1 1 1 1     0    0 9.73 -15.82 ZNESW 10.0 13.9 161.4 18.5 13.1 -22.6 12.9 -21.6 12.8 -21.4 13.1 -22.2
2025-11-18T01:57:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:57:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:57:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.998306
2025-11-18T01:57:58.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:57:58.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:57:58.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:57:58.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:57:58.833 [DEBUG] [Thread-65155] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:57:58.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:57:58.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:57:45', tmtdew=11.33, humidity=45.74, cloud=0.0, wind=16.73, temperature=12.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:57:45', seeing=1.58, atlas_timestamp='2025-11-17T23:57:33.638', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:54:00')
2025-11-18T01:57:58.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:57:58.927 [DEBUG] [Thread-65158] [transport.py] [_log()] starting thread (client mode): 0xd317c190
2025-11-18T01:57:58.927 [DEBUG] [Thread-65158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:57:58.942 [DEBUG] [Thread-65158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:57:58.942 [INFO] [Thread-65158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] client lang: <none>
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] server lang: <none>
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] kex follows: False
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:57:58.950 [DEBUG] [Thread-65158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:57:58.951 [DEBUG] [Thread-65158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:57:58.951 [DEBUG] [Thread-65158] [transport.py] [_log()] Compression: none
2025-11-18T01:57:58.951 [DEBUG] [Thread-65158] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:57:59.009 [DEBUG] [Thread-65158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:57:59.009 [DEBUG] [Thread-65158] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:57:59.010 [DEBUG] [Thread-65158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:57:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:57:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:57:59.065 [DEBUG] [Thread-65158] [transport.py] [_log()] userauth is OK
2025-11-18T01:57:59.065 [DEBUG] [Thread-65158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:57:59.066 [DEBUG] [Thread-65158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:57:59.066 [DEBUG] [Thread-65158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:57:59.066 [DEBUG] [Thread-65158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:57:59.085 [INFO] [Thread-65158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:57:59.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:57:59.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:57:59.945 [DEBUG] [Thread-65158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:57:59.945 [DEBUG] [Thread-65158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:57:59.992 [DEBUG] [Thread-65158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:57:59.993 [DEBUG] [Thread-65158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:58:00.001 [DEBUG] [Thread-65158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:58:00.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:58:00.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:58:00.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:58:00.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:58:00.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:58:00.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:58:00.035 [DEBUG] [Thread-65158] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:58:00.453 [DEBUG] [Thread-65160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:58:00.633 [DEBUG] [Thread-65161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:58:15.493 [DEBUG] [Thread-65162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:58:30.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:58:30.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:58:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:58:30.522 [DEBUG] [Thread-65163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:58:30.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 58, 17), 11.4, 45.54, 0.0, 14.86, 12.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:58:30.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:58:17
2025-11-18T01:58:30.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:58:30.981 [DEBUG] [Thread-65164] [transport.py] [_log()] starting thread (client mode): 0xd3160bb0
2025-11-18T01:58:30.982 [DEBUG] [Thread-65164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:58:31.003 [DEBUG] [Thread-65164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:58:31.003 [INFO] [Thread-65164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] client lang: <none>
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] server lang: <none>
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] kex follows: False
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:58:31.007 [DEBUG] [Thread-65164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:58:31.008 [DEBUG] [Thread-65164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:58:31.008 [DEBUG] [Thread-65164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:58:31.008 [DEBUG] [Thread-65164] [transport.py] [_log()] Compression: none
2025-11-18T01:58:31.008 [DEBUG] [Thread-65164] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:58:31.024 [DEBUG] [Thread-65164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:58:31.024 [DEBUG] [Thread-65164] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:58:31.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:58:31.025 [DEBUG] [Thread-65164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:58:31.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:58:31.027 [DEBUG] [Thread-65164] [transport.py] [_log()] userauth is OK
2025-11-18T01:58:31.027 [DEBUG] [Thread-65164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:58:31.027 [DEBUG] [Thread-65164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:58:31.027 [DEBUG] [Thread-65164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:58:31.027 [DEBUG] [Thread-65164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:58:31.051 [INFO] [Thread-65164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:58:31.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:58:31.727 [DEBUG] [Thread-65164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:58:31.727 [DEBUG] [Thread-65164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:58:31.728 [DEBUG] [Thread-65164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:58:31.769 [DEBUG] [Thread-65164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:58:31.769 [DEBUG] [Thread-65164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:58:31.772 [DEBUG] [Thread-65164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:58:31.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:58:31.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:58:31.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:58:31.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:58:31.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:58:31.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:58:31.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:58:31.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:58:31.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:58:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.998654 -999.00  +12.50  14.80     50   +2.60 1 1 1 1 1     0    0 9.67 -14.75 ZNESW 14.8 14.8 168.4 18.0 13.0 -22.5 12.9 -21.6 12.7 -21.1 13.0 -22.0
2025-11-18T01:58:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:58:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:58:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.998654
2025-11-18T01:58:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:58:31.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:58:31.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:58:31.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:58:31.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:58:31.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:58:17', tmtdew=11.4, humidity=45.54, cloud=0.0, wind=14.86, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:58:17', seeing=1.68, atlas_timestamp='2025-11-17T23:58:03.706', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:54:00')
2025-11-18T01:58:31.797 [DEBUG] [Thread-65164] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:58:31.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:58:31.893 [DEBUG] [Thread-65167] [transport.py] [_log()] starting thread (client mode): 0xd31529b0
2025-11-18T01:58:31.893 [DEBUG] [Thread-65167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:58:31.913 [DEBUG] [Thread-65167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:58:31.914 [INFO] [Thread-65167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:58:31.921 [DEBUG] [Thread-65167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:58:31.921 [DEBUG] [Thread-65167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:58:31.921 [DEBUG] [Thread-65167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:58:31.921 [DEBUG] [Thread-65167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:58:31.921 [DEBUG] [Thread-65167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:58:31.921 [DEBUG] [Thread-65167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] client lang: <none>
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] server lang: <none>
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] kex follows: False
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] Compression: none
2025-11-18T01:58:31.922 [DEBUG] [Thread-65167] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:58:31.980 [DEBUG] [Thread-65167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:58:31.981 [DEBUG] [Thread-65167] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:58:31.981 [DEBUG] [Thread-65167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:58:31.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:58:31.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:58:32.037 [DEBUG] [Thread-65167] [transport.py] [_log()] userauth is OK
2025-11-18T01:58:32.037 [DEBUG] [Thread-65167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:58:32.037 [DEBUG] [Thread-65167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:58:32.038 [DEBUG] [Thread-65167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:58:32.038 [DEBUG] [Thread-65167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:58:32.057 [INFO] [Thread-65167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:58:32.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:58:32.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:58:32.892 [DEBUG] [Thread-65167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:58:32.892 [DEBUG] [Thread-65167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:58:32.940 [DEBUG] [Thread-65167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:58:32.940 [DEBUG] [Thread-65167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:58:32.949 [DEBUG] [Thread-65167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:58:32.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:58:32.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:58:32.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:58:32.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:58:32.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:58:32.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:58:32.984 [DEBUG] [Thread-65167] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:58:45.115 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:58:45.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:58:45.550 [DEBUG] [Thread-65169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:59:00.596 [DEBUG] [Thread-65170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:59:00.711 [DEBUG] [Thread-65171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:59:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:59:03.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:59:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T01:59:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 58, 49), 11.42, 45.48, 0.0, 15.65, 12.53, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:59:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:58:49
2025-11-18T01:59:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:59:03.985 [DEBUG] [Thread-65172] [transport.py] [_log()] starting thread (client mode): 0xd07af1c0
2025-11-18T01:59:03.985 [DEBUG] [Thread-65172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:59:04.004 [DEBUG] [Thread-65172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:59:04.004 [INFO] [Thread-65172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:59:04.007 [DEBUG] [Thread-65172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:59:04.007 [DEBUG] [Thread-65172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:59:04.007 [DEBUG] [Thread-65172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:59:04.007 [DEBUG] [Thread-65172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:59:04.007 [DEBUG] [Thread-65172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:59:04.007 [DEBUG] [Thread-65172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] client lang: <none>
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] server lang: <none>
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] kex follows: False
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] Compression: none
2025-11-18T01:59:04.008 [DEBUG] [Thread-65172] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:59:04.022 [DEBUG] [Thread-65172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:59:04.023 [DEBUG] [Thread-65172] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:59:04.023 [DEBUG] [Thread-65172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:59:04.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:59:04.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:59:04.024 [DEBUG] [Thread-65172] [transport.py] [_log()] userauth is OK
2025-11-18T01:59:04.024 [DEBUG] [Thread-65172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:59:04.024 [DEBUG] [Thread-65172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:59:04.024 [DEBUG] [Thread-65172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:59:04.024 [DEBUG] [Thread-65172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:59:04.034 [INFO] [Thread-65172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:59:04.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:59:04.619 [DEBUG] [Thread-65172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:59:04.619 [DEBUG] [Thread-65172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:59:04.619 [DEBUG] [Thread-65172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:59:04.660 [DEBUG] [Thread-65172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:59:04.660 [DEBUG] [Thread-65172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:59:04.664 [DEBUG] [Thread-65172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:59:04.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:59:04.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:59:04.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:59:04.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:59:04.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:59:04.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:59:04.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:59:04.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:59:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:59:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.999001 -999.00  +12.50  11.54     50   +2.50 1 1 1 1 1     0    0 9.69 -14.81 ZNESW 11.1 11.5 161.4 16.9 13.1 -22.5 12.9 -21.6 12.7 -21.1 13.0 -22.1
2025-11-18T01:59:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:59:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:59:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.999001
2025-11-18T01:59:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:59:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:59:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:59:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:59:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:59:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:58:49', tmtdew=11.42, humidity=45.48, cloud=0.0, wind=15.65, temperature=12.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:58:49', seeing=1.73, atlas_timestamp='2025-11-17T23:58:33.686', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:54:00')
2025-11-18T01:59:04.681 [DEBUG] [Thread-65172] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:59:04.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:59:04.767 [DEBUG] [Thread-65175] [transport.py] [_log()] starting thread (client mode): 0xd31cd330
2025-11-18T01:59:04.767 [DEBUG] [Thread-65175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:59:04.784 [DEBUG] [Thread-65175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:59:04.784 [INFO] [Thread-65175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:59:04.791 [DEBUG] [Thread-65175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] client lang: <none>
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] server lang: <none>
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] kex follows: False
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] Compression: none
2025-11-18T01:59:04.792 [DEBUG] [Thread-65175] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:59:04.848 [DEBUG] [Thread-65175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:59:04.848 [DEBUG] [Thread-65175] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:59:04.848 [DEBUG] [Thread-65175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:59:04.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:59:04.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:59:04.905 [DEBUG] [Thread-65175] [transport.py] [_log()] userauth is OK
2025-11-18T01:59:04.905 [DEBUG] [Thread-65175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:59:04.905 [DEBUG] [Thread-65175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:59:04.905 [DEBUG] [Thread-65175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:59:04.905 [DEBUG] [Thread-65175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:59:04.919 [INFO] [Thread-65175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:59:04.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:59:04.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:59:05.769 [DEBUG] [Thread-65175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:59:05.769 [DEBUG] [Thread-65175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:59:05.820 [DEBUG] [Thread-65175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:59:05.820 [DEBUG] [Thread-65175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:59:05.829 [DEBUG] [Thread-65175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:59:05.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:59:05.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:59: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') -> 00000000
2025-11-18T01:59:05.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:59:05.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:59:05.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:59:05.860 [DEBUG] [Thread-65175] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:59:15.625 [DEBUG] [Thread-65177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:59:30.670 [DEBUG] [Thread-65178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:59:35.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T01:59:35.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T01:59: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
2025-11-18T01:59:36.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 59, 21), 11.29, 45.89, 0.0, 17.68, 12.51, 0, 0, 0, 2, 0, 0),)
2025-11-18T01:59:36.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:59:21
2025-11-18T01:59:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T01:59:36.794 [DEBUG] [Thread-65179] [transport.py] [_log()] starting thread (client mode): 0xd07d90c0
2025-11-18T01:59:36.794 [DEBUG] [Thread-65179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:59:36.806 [DEBUG] [Thread-65179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T01:59:36.806 [INFO] [Thread-65179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] client lang: <none>
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] server lang: <none>
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] kex follows: False
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] Compression: none
2025-11-18T01:59:36.807 [DEBUG] [Thread-65179] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:59:36.815 [DEBUG] [Thread-65179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:59:36.815 [DEBUG] [Thread-65179] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:59:36.815 [DEBUG] [Thread-65179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T01:59:36.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T01:59:36.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:59:36.816 [DEBUG] [Thread-65179] [transport.py] [_log()] userauth is OK
2025-11-18T01:59:36.817 [DEBUG] [Thread-65179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:59:36.817 [DEBUG] [Thread-65179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:59:36.817 [DEBUG] [Thread-65179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T01:59:36.817 [DEBUG] [Thread-65179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:59:36.835 [INFO] [Thread-65179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:59:36.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:59:37.464 [DEBUG] [Thread-65179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:59:37.465 [DEBUG] [Thread-65179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:59:37.465 [DEBUG] [Thread-65179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T01:59:37.506 [DEBUG] [Thread-65179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:59:37.506 [DEBUG] [Thread-65179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:59:37.509 [DEBUG] [Thread-65179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:59:37.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:59:37.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T01:59:37.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T01:59:37.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T01:59:37.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:59:37.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T01:59:37.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:59:37.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:59:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T01:59:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.999348 -999.00  +12.50   9.74     50   +2.40 1 1 1 1 1     0    0 9.67 -12.56 ZNESW 11.1 9.7 162.4 14.3 13.0 -22.4 12.9 -21.5 12.7 -21.3 12.9 -22.1
2025-11-18T01:59:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T01:59:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T01:59:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.999348
2025-11-18T01:59:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T01:59:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T01:59:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T01:59:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T01:59:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T01:59:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:59:21', tmtdew=11.29, humidity=45.89, cloud=0.0, wind=17.68, temperature=12.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:59:21', seeing=1.73, atlas_timestamp='2025-11-17T23:59:03.667', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:58:00')
2025-11-18T01:59:37.536 [DEBUG] [Thread-65179] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:59:37.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T01:59:37.633 [DEBUG] [Thread-65182] [transport.py] [_log()] starting thread (client mode): 0xd07a34c0
2025-11-18T01:59:37.633 [DEBUG] [Thread-65182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T01:59:37.649 [DEBUG] [Thread-65182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T01:59:37.649 [INFO] [Thread-65182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T01:59:37.657 [DEBUG] [Thread-65182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T01:59:37.657 [DEBUG] [Thread-65182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T01:59:37.657 [DEBUG] [Thread-65182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T01:59:37.657 [DEBUG] [Thread-65182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:59:37.657 [DEBUG] [Thread-65182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T01:59:37.657 [DEBUG] [Thread-65182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:59:37.657 [DEBUG] [Thread-65182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T01:59:37.658 [DEBUG] [Thread-65182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T01:59:37.658 [DEBUG] [Thread-65182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T01:59:37.658 [DEBUG] [Thread-65182] [transport.py] [_log()] client lang: <none>
2025-11-18T01:59:37.658 [DEBUG] [Thread-65182] [transport.py] [_log()] server lang: <none>
2025-11-18T01:59:37.658 [DEBUG] [Thread-65182] [transport.py] [_log()] kex follows: False
2025-11-18T01:59:37.658 [DEBUG] [Thread-65182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T01:59:37.658 [DEBUG] [Thread-65182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T01:59:37.658 [DEBUG] [Thread-65182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T01:59:37.659 [DEBUG] [Thread-65182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T01:59:37.659 [DEBUG] [Thread-65182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T01:59:37.659 [DEBUG] [Thread-65182] [transport.py] [_log()] Compression: none
2025-11-18T01:59:37.659 [DEBUG] [Thread-65182] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T01:59:37.712 [DEBUG] [Thread-65182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T01:59:37.713 [DEBUG] [Thread-65182] [transport.py] [_log()] Switch to new keys ...
2025-11-18T01:59:37.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T01:59:37.714 [DEBUG] [Thread-65182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T01:59:37.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T01:59:37.769 [DEBUG] [Thread-65182] [transport.py] [_log()] userauth is OK
2025-11-18T01:59:37.769 [DEBUG] [Thread-65182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T01:59:37.769 [DEBUG] [Thread-65182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T01:59:37.769 [DEBUG] [Thread-65182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T01:59:37.769 [DEBUG] [Thread-65182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T01:59:37.792 [INFO] [Thread-65182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T01:59:37.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T01:59:37.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T01:59:38.649 [DEBUG] [Thread-65182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T01:59:38.650 [DEBUG] [Thread-65182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T01:59:38.697 [DEBUG] [Thread-65182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T01:59:38.697 [DEBUG] [Thread-65182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T01:59:38.706 [DEBUG] [Thread-65182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T01:59:38.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T01:59:38.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T01:59:38.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T01:59:38.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T01:59:38.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T01:59:38.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T01:59:38.741 [DEBUG] [Thread-65182] [transport.py] [_log()] EOF in transport thread
2025-11-18T01:59:45.319 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:59:45.320 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T01:59:45.697 [DEBUG] [Thread-65184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:00:00.731 [DEBUG] [Thread-65185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:00:00.802 [DEBUG] [Thread-65186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:00:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:00:08.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:00:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:00:09.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 1, 59, 53), 10.99, 46.92, 0.0, 19.62, 12.5, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:00:09.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 01:59:53
2025-11-18T02:00:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:00:09.692 [DEBUG] [Thread-65187] [transport.py] [_log()] starting thread (client mode): 0xd07ae2c0
2025-11-18T02:00:09.693 [DEBUG] [Thread-65187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:00:09.712 [DEBUG] [Thread-65187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:00:09.712 [INFO] [Thread-65187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] client lang: <none>
2025-11-18T02:00:09.716 [DEBUG] [Thread-65187] [transport.py] [_log()] server lang: <none>
2025-11-18T02:00:09.717 [DEBUG] [Thread-65187] [transport.py] [_log()] kex follows: False
2025-11-18T02:00:09.717 [DEBUG] [Thread-65187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:00:09.717 [DEBUG] [Thread-65187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:00:09.717 [DEBUG] [Thread-65187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:00:09.717 [DEBUG] [Thread-65187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:00:09.717 [DEBUG] [Thread-65187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:00:09.717 [DEBUG] [Thread-65187] [transport.py] [_log()] Compression: none
2025-11-18T02:00:09.717 [DEBUG] [Thread-65187] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:00:09.725 [DEBUG] [Thread-65187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:00:09.726 [DEBUG] [Thread-65187] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:00:09.726 [DEBUG] [Thread-65187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:00:09.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:00:09.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:00:09.728 [DEBUG] [Thread-65187] [transport.py] [_log()] userauth is OK
2025-11-18T02:00:09.728 [DEBUG] [Thread-65187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:00:09.729 [DEBUG] [Thread-65187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:00:09.729 [DEBUG] [Thread-65187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:00:09.729 [DEBUG] [Thread-65187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:00:09.743 [INFO] [Thread-65187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:00:09.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:00:14.353 [DEBUG] [Thread-65187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:00:14.354 [DEBUG] [Thread-65187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:00:14.354 [DEBUG] [Thread-65187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:00:14.394 [DEBUG] [Thread-65187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:00:14.395 [DEBUG] [Thread-65187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:00:14.398 [DEBUG] [Thread-65187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:00:14.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:00:14.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:00:14.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:00:14.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:00:14.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:00:14.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:00:14.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:00:14.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:00:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:00:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.999348 -999.00  +12.50   9.74     50   +2.40 1 1 1 1 1     0    0 9.67 -12.56 ZNESW 11.1 9.7 162.4 14.3 13.0 -22.4 12.9 -21.5 12.7 -21.3 12.9 -22.1
2025-11-18T02:00:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:00:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:00:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.999348
2025-11-18T02:00:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:00:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:00:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:00:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:00:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:00:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T01:59:53', tmtdew=10.99, humidity=46.92, cloud=0.0, wind=19.62, temperature=12.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T01:59:53', seeing=1.51, atlas_timestamp='2025-11-17T23:59:03.667', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:58:00')
2025-11-18T02:00:14.481 [DEBUG] [Thread-65187] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:00:14.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:00:14.577 [DEBUG] [Thread-65190] [transport.py] [_log()] starting thread (client mode): 0xd07ae020
2025-11-18T02:00:14.578 [DEBUG] [Thread-65190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:00:14.593 [DEBUG] [Thread-65190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:00:14.593 [INFO] [Thread-65190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] client lang: <none>
2025-11-18T02:00:14.601 [DEBUG] [Thread-65190] [transport.py] [_log()] server lang: <none>
2025-11-18T02:00:14.602 [DEBUG] [Thread-65190] [transport.py] [_log()] kex follows: False
2025-11-18T02:00:14.602 [DEBUG] [Thread-65190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:00:14.602 [DEBUG] [Thread-65190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:00:14.602 [DEBUG] [Thread-65190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:00:14.602 [DEBUG] [Thread-65190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:00:14.602 [DEBUG] [Thread-65190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:00:14.602 [DEBUG] [Thread-65190] [transport.py] [_log()] Compression: none
2025-11-18T02:00:14.602 [DEBUG] [Thread-65190] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:00:14.664 [DEBUG] [Thread-65190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:00:14.664 [DEBUG] [Thread-65190] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:00:14.665 [DEBUG] [Thread-65190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:00:14.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:00:14.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:00:14.721 [DEBUG] [Thread-65190] [transport.py] [_log()] userauth is OK
2025-11-18T02:00:14.721 [DEBUG] [Thread-65190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:00:14.721 [DEBUG] [Thread-65190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:00:14.721 [DEBUG] [Thread-65190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:00:14.721 [DEBUG] [Thread-65190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:00:14.743 [INFO] [Thread-65190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:00:14.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:00:14.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:00:15.583 [DEBUG] [Thread-65190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:00:15.584 [DEBUG] [Thread-65190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:00:15.631 [DEBUG] [Thread-65190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:00:15.631 [DEBUG] [Thread-65190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:00:15.640 [DEBUG] [Thread-65190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:00:15.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:00:15.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:00:15.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:00:15.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:00:15.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:00:15.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:00:15.675 [DEBUG] [Thread-65190] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:00:15.760 [DEBUG] [Thread-65192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:00:30.813 [DEBUG] [Thread-65193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:00:45.520 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:00:45.522 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:00:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:00:45.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:00:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:00:45.844 [DEBUG] [Thread-65194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:00:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 0, 25), 11.03, 46.77, 0.0, 19.2, 12.5, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:00:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:00:25
2025-11-18T02:00:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:00:46.617 [DEBUG] [Thread-65195] [transport.py] [_log()] starting thread (client mode): 0xd07a32e0
2025-11-18T02:00:46.617 [DEBUG] [Thread-65195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:00:46.637 [DEBUG] [Thread-65195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:00:46.637 [INFO] [Thread-65195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] client lang: <none>
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] server lang: <none>
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] kex follows: False
2025-11-18T02:00:46.640 [DEBUG] [Thread-65195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:00:46.641 [DEBUG] [Thread-65195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:00:46.641 [DEBUG] [Thread-65195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:00:46.641 [DEBUG] [Thread-65195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:00:46.641 [DEBUG] [Thread-65195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:00:46.641 [DEBUG] [Thread-65195] [transport.py] [_log()] Compression: none
2025-11-18T02:00:46.641 [DEBUG] [Thread-65195] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:00:46.658 [DEBUG] [Thread-65195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:00:46.658 [DEBUG] [Thread-65195] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:00:46.658 [DEBUG] [Thread-65195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:00:46.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:00:46.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:00:46.660 [DEBUG] [Thread-65195] [transport.py] [_log()] userauth is OK
2025-11-18T02:00:46.661 [DEBUG] [Thread-65195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:00:46.661 [DEBUG] [Thread-65195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:00:46.661 [DEBUG] [Thread-65195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:00:46.661 [DEBUG] [Thread-65195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:00:46.684 [INFO] [Thread-65195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:00:46.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:00:47.323 [DEBUG] [Thread-65195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:00:47.323 [DEBUG] [Thread-65195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:00:47.323 [DEBUG] [Thread-65195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:00:47.363 [DEBUG] [Thread-65195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:00:47.363 [DEBUG] [Thread-65195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:00:47.367 [DEBUG] [Thread-65195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:00:47.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:00:47.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:00:47.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:00:47.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:00:47.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:00:47.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:00:47.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:00:47.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:00:47.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:00:47.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60996.999695 -999.00  +12.50  11.92     50   +2.40 1 1 1 1 1     0    0 9.58 -11.89 ZNESW 10.7 11.9 165.8 15.6 13.1 -22.5 12.9 -21.5 12.7 -21.3 12.9 -22.2
2025-11-18T02:00:47.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:00:47.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:00:47.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60996.999695
2025-11-18T02:00:47.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:00:47.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:00:47.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:00:47.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:00:47.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:00:47.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:00:25', tmtdew=11.03, humidity=46.77, cloud=0.0, wind=19.2, temperature=12.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:00:25', seeing=1.39, atlas_timestamp='2025-11-17T23:59:33.648', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:58:00')
2025-11-18T02:00:47.393 [DEBUG] [Thread-65195] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:00:47.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:00:47.490 [DEBUG] [Thread-65198] [transport.py] [_log()] starting thread (client mode): 0xd3150b50
2025-11-18T02:00:47.490 [DEBUG] [Thread-65198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:00:47.505 [DEBUG] [Thread-65198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:00:47.505 [INFO] [Thread-65198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] client lang: <none>
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] server lang: <none>
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] kex follows: False
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:00:47.513 [DEBUG] [Thread-65198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:00:47.514 [DEBUG] [Thread-65198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:00:47.514 [DEBUG] [Thread-65198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:00:47.514 [DEBUG] [Thread-65198] [transport.py] [_log()] Compression: none
2025-11-18T02:00:47.514 [DEBUG] [Thread-65198] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:00:47.573 [DEBUG] [Thread-65198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:00:47.573 [DEBUG] [Thread-65198] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:00:47.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:00:47.574 [DEBUG] [Thread-65198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:00:47.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:00:47.629 [DEBUG] [Thread-65198] [transport.py] [_log()] userauth is OK
2025-11-18T02:00:47.629 [DEBUG] [Thread-65198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:00:47.629 [DEBUG] [Thread-65198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:00:47.629 [DEBUG] [Thread-65198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:00:47.630 [DEBUG] [Thread-65198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:00:47.649 [INFO] [Thread-65198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:00:47.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:00:47.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:00:48.515 [DEBUG] [Thread-65198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:00:48.515 [DEBUG] [Thread-65198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:00:48.562 [DEBUG] [Thread-65198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:00:48.563 [DEBUG] [Thread-65198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:00:48.571 [DEBUG] [Thread-65198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:00:48.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:00:48.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:00:48.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:00:48.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:00:48.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:00:48.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:00:48.606 [DEBUG] [Thread-65198] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:01:00.871 [DEBUG] [Thread-65200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:01:00.874 [DEBUG] [Thread-65201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:01:15.903 [DEBUG] [Thread-65202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:01:18.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:01:18.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:01:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:01:19.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 0, 57), 10.95, 47.06, 0.0, 19.25, 12.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:01:19.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:00:57
2025-11-18T02:01:19.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:01:19.545 [DEBUG] [Thread-65203] [transport.py] [_log()] starting thread (client mode): 0xd317c190
2025-11-18T02:01:19.546 [DEBUG] [Thread-65203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:01:19.565 [DEBUG] [Thread-65203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:01:19.565 [INFO] [Thread-65203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:01:19.567 [DEBUG] [Thread-65203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:01:19.567 [DEBUG] [Thread-65203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:01:19.567 [DEBUG] [Thread-65203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:01:19.567 [DEBUG] [Thread-65203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:01:19.567 [DEBUG] [Thread-65203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:01:19.567 [DEBUG] [Thread-65203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:01:19.567 [DEBUG] [Thread-65203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] client lang: <none>
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] server lang: <none>
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] kex follows: False
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] Compression: none
2025-11-18T02:01:19.568 [DEBUG] [Thread-65203] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:01:19.582 [DEBUG] [Thread-65203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:01:19.583 [DEBUG] [Thread-65203] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:01:19.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:01:19.584 [DEBUG] [Thread-65203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:01:19.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:01:19.586 [DEBUG] [Thread-65203] [transport.py] [_log()] userauth is OK
2025-11-18T02:01:19.586 [DEBUG] [Thread-65203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:01:19.587 [DEBUG] [Thread-65203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:01:19.587 [DEBUG] [Thread-65203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:01:19.587 [DEBUG] [Thread-65203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:01:19.612 [INFO] [Thread-65203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:01:19.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:01:20.405 [DEBUG] [Thread-65203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:01:20.405 [DEBUG] [Thread-65203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:01:20.405 [DEBUG] [Thread-65203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:01:20.446 [DEBUG] [Thread-65203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:01:20.447 [DEBUG] [Thread-65203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:01:20.450 [DEBUG] [Thread-65203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:01:20.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:01:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:01:20.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:01:20.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:01:20.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:01:20.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:01:20.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:01:20.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:01:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:01:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.000390 -999.00  +12.50  10.32     50   +2.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.8 10.3 165.2 14.7 13.0 -22.2 12.9 -21.7 12.7 -21.4 13.0 -22.1
2025-11-18T02:01:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:01:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:01:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.000390
2025-11-18T02:01:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:01:20.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:01:20.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:01:20.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:01:20.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:01:20.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:00:57', tmtdew=10.95, humidity=47.06, cloud=0.0, wind=19.25, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:00:57', seeing=1.39, atlas_timestamp='2025-11-18T00:00:33.696', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:58:00')
2025-11-18T02:01:20.474 [DEBUG] [Thread-65203] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:01:20.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:01:20.570 [DEBUG] [Thread-65206] [transport.py] [_log()] starting thread (client mode): 0xd07adff0
2025-11-18T02:01:20.570 [DEBUG] [Thread-65206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:01:20.585 [DEBUG] [Thread-65206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:01:20.585 [INFO] [Thread-65206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] client lang: <none>
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] server lang: <none>
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] kex follows: False
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:01:20.593 [DEBUG] [Thread-65206] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:01:20.594 [DEBUG] [Thread-65206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:01:20.594 [DEBUG] [Thread-65206] [transport.py] [_log()] Compression: none
2025-11-18T02:01:20.594 [DEBUG] [Thread-65206] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:01:20.656 [DEBUG] [Thread-65206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:01:20.657 [DEBUG] [Thread-65206] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:01:20.657 [DEBUG] [Thread-65206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:01:20.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:01:20.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:01:20.717 [DEBUG] [Thread-65206] [transport.py] [_log()] userauth is OK
2025-11-18T02:01:20.717 [DEBUG] [Thread-65206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:01:20.717 [DEBUG] [Thread-65206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:01:20.717 [DEBUG] [Thread-65206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:01:20.717 [DEBUG] [Thread-65206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:01:20.737 [INFO] [Thread-65206] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:01:20.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:01:20.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:01:21.611 [DEBUG] [Thread-65206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:01:21.611 [DEBUG] [Thread-65206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:01:21.658 [DEBUG] [Thread-65206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:01:21.658 [DEBUG] [Thread-65206] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:01:21.667 [DEBUG] [Thread-65206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:01:21.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:01:21.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:01:21.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:01:21.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:01:21.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:01:21.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:01:21.701 [DEBUG] [Thread-65206] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:01:30.935 [DEBUG] [Thread-65208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:01:45.723 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:01:45.725 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:01:45.975 [DEBUG] [Thread-65209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:01:51.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:01:51.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:01:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:01:52.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 1, 29), 10.95, 47.04, 0.0, 17.13, 12.53, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:01:52.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:01:29
2025-11-18T02:01:52.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:01:52.652 [DEBUG] [Thread-65210] [transport.py] [_log()] starting thread (client mode): 0xd07aea70
2025-11-18T02:01:52.652 [DEBUG] [Thread-65210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:01:52.674 [DEBUG] [Thread-65210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:01:52.674 [INFO] [Thread-65210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:01:52.677 [DEBUG] [Thread-65210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:01:52.677 [DEBUG] [Thread-65210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:01:52.677 [DEBUG] [Thread-65210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] client lang: <none>
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] server lang: <none>
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] kex follows: False
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] Compression: none
2025-11-18T02:01:52.678 [DEBUG] [Thread-65210] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:01:52.698 [DEBUG] [Thread-65210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:01:52.698 [DEBUG] [Thread-65210] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:01:52.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:01:52.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:01:52.700 [DEBUG] [Thread-65210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:01:52.701 [DEBUG] [Thread-65210] [transport.py] [_log()] userauth is OK
2025-11-18T02:01:52.701 [DEBUG] [Thread-65210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:01:52.701 [DEBUG] [Thread-65210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:01:52.701 [DEBUG] [Thread-65210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:01:52.701 [DEBUG] [Thread-65210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:01:52.733 [INFO] [Thread-65210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:01:52.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:01:53.380 [DEBUG] [Thread-65210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:01:53.381 [DEBUG] [Thread-65210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:01:53.381 [DEBUG] [Thread-65210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:01:53.421 [DEBUG] [Thread-65210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:01:53.422 [DEBUG] [Thread-65210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:01:53.425 [DEBUG] [Thread-65210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:01:53.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:01:53.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:01:53.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:01:53.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:01:53.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:01:53.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:01:53.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:01:53.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:01:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:01:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.000736 -999.00  +12.40  16.17     52   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.6 16.2 185.6 20.5 13.0 -22.5 12.9 -21.5 12.7 -21.2 13.0 -21.9
2025-11-18T02:01:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:01:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:01:53.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.000736
2025-11-18T02:01:53.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:01:53.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:01:53.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:01:53.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:01:53.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:01:53.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:01:29', tmtdew=10.95, humidity=47.04, cloud=0.0, wind=17.13, temperature=12.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:01:29', seeing=1.53, atlas_timestamp='2025-11-18T00:01:03.590', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.09725000000000072, 0.20025000000000048, 0.19299999999999784, 0.10599999999999987, 0.09224999999999994, 0.013499999999998735, 0.0032500000000013074, 0.09450000000000003, 0.2010000000000005, 0.2552500000000002, 0.0990000000000002, 0.18599999999999994, 0.08825000000000038, 0.006999999999999673, 0.009999999999999787, 0.0832499999999996, 0.3785000000000007, 0.33699999999999797, 0.11424999999999841, 0.16000000000000014, 0.15224999999999866, 0.04425000000000168, 0.051750000000000185, 0.1374999999999993, 0.5850000000000009, 0.4667500000000002, 0.5370000000000008, 0.34699999999999953, 0.1645000000000003, 0.1540000000000017, 0.40300000000000047, 0.2872500000000002], zp_timestamp='2025-11-17T23:58:00')
2025-11-18T02:01:53.451 [DEBUG] [Thread-65210] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:01:53.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:01:53.550 [DEBUG] [Thread-65213] [transport.py] [_log()] starting thread (client mode): 0xd07a2530
2025-11-18T02:01:53.550 [DEBUG] [Thread-65213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:01:53.566 [DEBUG] [Thread-65213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:01:53.567 [INFO] [Thread-65213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:01:53.577 [DEBUG] [Thread-65213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:01:53.577 [DEBUG] [Thread-65213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:01:53.577 [DEBUG] [Thread-65213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] client lang: <none>
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] server lang: <none>
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] kex follows: False
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:01:53.578 [DEBUG] [Thread-65213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:01:53.579 [DEBUG] [Thread-65213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:01:53.579 [DEBUG] [Thread-65213] [transport.py] [_log()] Compression: none
2025-11-18T02:01:53.579 [DEBUG] [Thread-65213] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:01:53.632 [DEBUG] [Thread-65213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:01:53.633 [DEBUG] [Thread-65213] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:01:53.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:01:53.634 [DEBUG] [Thread-65213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:01:53.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:01:53.691 [DEBUG] [Thread-65213] [transport.py] [_log()] userauth is OK
2025-11-18T02:01:53.691 [DEBUG] [Thread-65213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:01:53.691 [DEBUG] [Thread-65213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:01:53.691 [DEBUG] [Thread-65213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:01:53.691 [DEBUG] [Thread-65213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:01:53.711 [INFO] [Thread-65213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:01:53.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:01:53.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:01:54.544 [DEBUG] [Thread-65213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:01:54.545 [DEBUG] [Thread-65213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:01:54.593 [DEBUG] [Thread-65213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:01:54.593 [DEBUG] [Thread-65213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:01:54.602 [DEBUG] [Thread-65213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:01:54.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:01:54.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:01: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') -> 00000000
2025-11-18T02:01:54.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:01:54.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:01:54.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:01:54.638 [DEBUG] [Thread-65213] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:02:00.961 [DEBUG] [Thread-65215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:02:01.005 [DEBUG] [Thread-65216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:02:16.057 [DEBUG] [Thread-65217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:02:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:02:24.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:02:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:02:25.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 2, 1), 10.9, 47.19, 0.0, 19.69, 12.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:02:25.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:02:01
2025-11-18T02:02:25.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:02:25.547 [DEBUG] [Thread-65218] [transport.py] [_log()] starting thread (client mode): 0xd31ce590
2025-11-18T02:02:25.547 [DEBUG] [Thread-65218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:02:25.567 [DEBUG] [Thread-65218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:02:25.567 [INFO] [Thread-65218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:02:25.570 [DEBUG] [Thread-65218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:02:25.570 [DEBUG] [Thread-65218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:02:25.570 [DEBUG] [Thread-65218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] client lang: <none>
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] server lang: <none>
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] kex follows: False
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] Compression: none
2025-11-18T02:02:25.571 [DEBUG] [Thread-65218] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:02:25.587 [DEBUG] [Thread-65218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:02:25.587 [DEBUG] [Thread-65218] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:02:25.587 [DEBUG] [Thread-65218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:02:25.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:02:25.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:02:25.588 [DEBUG] [Thread-65218] [transport.py] [_log()] userauth is OK
2025-11-18T02:02:25.588 [DEBUG] [Thread-65218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:02:25.588 [DEBUG] [Thread-65218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:02:25.588 [DEBUG] [Thread-65218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:02:25.588 [DEBUG] [Thread-65218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:02:25.596 [INFO] [Thread-65218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:02:25.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:02:26.359 [DEBUG] [Thread-65218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:02:26.359 [DEBUG] [Thread-65218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:02:26.359 [DEBUG] [Thread-65218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:02:26.399 [DEBUG] [Thread-65218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:02:26.400 [DEBUG] [Thread-65218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:02:26.403 [DEBUG] [Thread-65218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:02:26.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:02:26.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:02:26.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:02:26.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:02:26.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:02:26.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:02:26.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:02:26.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:02:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:02:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.001084 -999.00  +12.50  11.91     52   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.1 11.9 166.3 19.6 13.0 -22.3 12.9 -21.4 12.7 -21.1 13.0 -22.0
2025-11-18T02:02:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:02:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:02:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.001084
2025-11-18T02:02:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:02:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:02:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:02:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:02:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:02:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:02:01', tmtdew=10.9, humidity=47.19, cloud=0.0, wind=19.69, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:02:01', seeing=1.8, atlas_timestamp='2025-11-18T00:01:33.658', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:01:00')
2025-11-18T02:02:26.429 [DEBUG] [Thread-65218] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:02:26.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:02:26.525 [DEBUG] [Thread-65221] [transport.py] [_log()] starting thread (client mode): 0xd31cf4f0
2025-11-18T02:02:26.525 [DEBUG] [Thread-65221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:02:26.539 [DEBUG] [Thread-65221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:02:26.540 [INFO] [Thread-65221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:02:26.547 [DEBUG] [Thread-65221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:02:26.547 [DEBUG] [Thread-65221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] client lang: <none>
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] server lang: <none>
2025-11-18T02:02:26.548 [DEBUG] [Thread-65221] [transport.py] [_log()] kex follows: False
2025-11-18T02:02:26.549 [DEBUG] [Thread-65221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:02:26.549 [DEBUG] [Thread-65221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:02:26.549 [DEBUG] [Thread-65221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:02:26.549 [DEBUG] [Thread-65221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:02:26.549 [DEBUG] [Thread-65221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:02:26.549 [DEBUG] [Thread-65221] [transport.py] [_log()] Compression: none
2025-11-18T02:02:26.549 [DEBUG] [Thread-65221] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:02:26.604 [DEBUG] [Thread-65221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:02:26.605 [DEBUG] [Thread-65221] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:02:26.606 [DEBUG] [Thread-65221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:02:26.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:02:26.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:02:26.661 [DEBUG] [Thread-65221] [transport.py] [_log()] userauth is OK
2025-11-18T02:02:26.661 [DEBUG] [Thread-65221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:02:26.661 [DEBUG] [Thread-65221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:02:26.661 [DEBUG] [Thread-65221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:02:26.661 [DEBUG] [Thread-65221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:02:26.680 [INFO] [Thread-65221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:02:26.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:02:26.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:02:27.512 [DEBUG] [Thread-65221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:02:27.512 [DEBUG] [Thread-65221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:02:27.560 [DEBUG] [Thread-65221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:02:27.560 [DEBUG] [Thread-65221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:02:27.570 [DEBUG] [Thread-65221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:02:27.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:02:27.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:02:27.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:02:27.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:02:27.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:02:27.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:02:27.604 [DEBUG] [Thread-65221] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:02:31.090 [DEBUG] [Thread-65223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:02:45.930 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:02:45.931 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:02:46.144 [DEBUG] [Thread-65224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:02:57.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:02:57.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:02:57.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:02:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 2, 33), 10.74, 47.71, 0.0, 19.82, 12.51, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:02:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:02:33
2025-11-18T02:02:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:02:58.593 [DEBUG] [Thread-65225] [transport.py] [_log()] starting thread (client mode): 0xd0703040
2025-11-18T02:02:58.593 [DEBUG] [Thread-65225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:02:58.612 [DEBUG] [Thread-65225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:02:58.612 [INFO] [Thread-65225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:02:58.615 [DEBUG] [Thread-65225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:02:58.615 [DEBUG] [Thread-65225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:02:58.615 [DEBUG] [Thread-65225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:02:58.615 [DEBUG] [Thread-65225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:02:58.615 [DEBUG] [Thread-65225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:02:58.615 [DEBUG] [Thread-65225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:02:58.615 [DEBUG] [Thread-65225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:02:58.615 [DEBUG] [Thread-65225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] client lang: <none>
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] server lang: <none>
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] kex follows: False
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] Compression: none
2025-11-18T02:02:58.616 [DEBUG] [Thread-65225] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:02:58.630 [DEBUG] [Thread-65225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:02:58.631 [DEBUG] [Thread-65225] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:02:58.631 [DEBUG] [Thread-65225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:02:58.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:02:58.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:02:58.632 [DEBUG] [Thread-65225] [transport.py] [_log()] userauth is OK
2025-11-18T02:02:58.632 [DEBUG] [Thread-65225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:02:58.632 [DEBUG] [Thread-65225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:02:58.632 [DEBUG] [Thread-65225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:02:58.632 [DEBUG] [Thread-65225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:02:58.650 [INFO] [Thread-65225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:02:58.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:02:59.272 [DEBUG] [Thread-65225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:02:59.272 [DEBUG] [Thread-65225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:02:59.272 [DEBUG] [Thread-65225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:02:59.313 [DEBUG] [Thread-65225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:02:59.313 [DEBUG] [Thread-65225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:02:59.315 [DEBUG] [Thread-65225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:02:59.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:02:59.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:02:59.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:02:59.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:02:59.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:02:59.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:02:59.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.001431 -999.00  +12.50  13.59     52   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.4 13.6 155.9 16.7 13.0 -22.3 12.9 -21.5 12.7 -21.4 12.9 -22.1
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.001431
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:02:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:02:33', tmtdew=10.74, humidity=47.71, cloud=0.0, wind=19.82, temperature=12.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:02:33', seeing=1.65, atlas_timestamp='2025-11-18T00:02:03.638', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:01:00')
2025-11-18T02:02:59.333 [DEBUG] [Thread-65225] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:02:59.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:02:59.418 [DEBUG] [Thread-65228] [transport.py] [_log()] starting thread (client mode): 0xd31cf220
2025-11-18T02:02:59.418 [DEBUG] [Thread-65228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:02:59.434 [DEBUG] [Thread-65228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:02:59.434 [INFO] [Thread-65228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] client lang: <none>
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] server lang: <none>
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] kex follows: False
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] Compression: none
2025-11-18T02:02:59.442 [DEBUG] [Thread-65228] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:02:59.504 [DEBUG] [Thread-65228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:02:59.504 [DEBUG] [Thread-65228] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:02:59.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:02:59.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:02:59.505 [DEBUG] [Thread-65228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:02:59.560 [DEBUG] [Thread-65228] [transport.py] [_log()] userauth is OK
2025-11-18T02:02:59.560 [DEBUG] [Thread-65228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:02:59.560 [DEBUG] [Thread-65228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:02:59.560 [DEBUG] [Thread-65228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:02:59.560 [DEBUG] [Thread-65228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:02:59.577 [INFO] [Thread-65228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:02:59.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:02:59.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:03:00.430 [DEBUG] [Thread-65228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:03:00.430 [DEBUG] [Thread-65228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:03:00.478 [DEBUG] [Thread-65228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:03:00.478 [DEBUG] [Thread-65228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:03:00.488 [DEBUG] [Thread-65228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:03:00.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:03: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')
2025-11-18T02:03:00.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:03:00.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:03:00.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:03:00.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:03:00.522 [DEBUG] [Thread-65228] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:03:01.035 [DEBUG] [Thread-65230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:03:01.173 [DEBUG] [Thread-65231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:03:16.214 [DEBUG] [Thread-65232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:03:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:03:30.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:03:30.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:03:31.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 3, 5), 10.69, 47.89, 0.0, 19.11, 12.53, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:03:31.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:03:05
2025-11-18T02:03:31.244 [DEBUG] [Thread-65233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:03:31.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:03:31.434 [DEBUG] [Thread-65234] [transport.py] [_log()] starting thread (client mode): 0xd31cfbe0
2025-11-18T02:03:31.434 [DEBUG] [Thread-65234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:03:31.454 [DEBUG] [Thread-65234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:03:31.455 [INFO] [Thread-65234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:03:31.458 [DEBUG] [Thread-65234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:03:31.458 [DEBUG] [Thread-65234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] client lang: <none>
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] server lang: <none>
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] kex follows: False
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:03:31.459 [DEBUG] [Thread-65234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:03:31.460 [DEBUG] [Thread-65234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:03:31.460 [DEBUG] [Thread-65234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:03:31.460 [DEBUG] [Thread-65234] [transport.py] [_log()] Compression: none
2025-11-18T02:03:31.460 [DEBUG] [Thread-65234] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:03:31.478 [DEBUG] [Thread-65234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:03:31.478 [DEBUG] [Thread-65234] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:03:31.479 [DEBUG] [Thread-65234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:03:31.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:03:31.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:03:31.481 [DEBUG] [Thread-65234] [transport.py] [_log()] userauth is OK
2025-11-18T02:03:31.481 [DEBUG] [Thread-65234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:03:31.481 [DEBUG] [Thread-65234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:03:31.481 [DEBUG] [Thread-65234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:03:31.481 [DEBUG] [Thread-65234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:03:31.504 [INFO] [Thread-65234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:03:31.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:03:32.260 [DEBUG] [Thread-65234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:03:32.260 [DEBUG] [Thread-65234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:03:32.260 [DEBUG] [Thread-65234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:03:32.300 [DEBUG] [Thread-65234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:03:32.300 [DEBUG] [Thread-65234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:03:32.303 [DEBUG] [Thread-65234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:03:32.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:03:32.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:03:32.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:03:32.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:03:32.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:03:32.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:03:32.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:03:32.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:03:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:03:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.002126 -999.00  +12.50  15.70     52   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.2 15.7 166.0 19.6 13.0 -22.4 12.9 -21.7 12.6 -21.4 12.9 -22.1
2025-11-18T02:03:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:03:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:03:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.002126
2025-11-18T02:03:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:03:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:03:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:03:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:03:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:03:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:03:05', tmtdew=10.69, humidity=47.89, cloud=0.0, wind=19.11, temperature=12.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:03:05', seeing=1.51, atlas_timestamp='2025-11-18T00:03:03.686', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:01:00')
2025-11-18T02:03:32.327 [DEBUG] [Thread-65234] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:03:32.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:03:32.434 [DEBUG] [Thread-65237] [transport.py] [_log()] starting thread (client mode): 0xd07aeef0
2025-11-18T02:03:32.434 [DEBUG] [Thread-65237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:03:32.449 [DEBUG] [Thread-65237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:03:32.449 [INFO] [Thread-65237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:03:32.456 [DEBUG] [Thread-65237] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:03:32.456 [DEBUG] [Thread-65237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] client lang: <none>
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] server lang: <none>
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] kex follows: False
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] Compression: none
2025-11-18T02:03:32.457 [DEBUG] [Thread-65237] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:03:32.520 [DEBUG] [Thread-65237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:03:32.521 [DEBUG] [Thread-65237] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:03:32.521 [DEBUG] [Thread-65237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:03:32.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:03:32.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:03:32.578 [DEBUG] [Thread-65237] [transport.py] [_log()] userauth is OK
2025-11-18T02:03:32.578 [DEBUG] [Thread-65237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:03:32.578 [DEBUG] [Thread-65237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:03:32.578 [DEBUG] [Thread-65237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:03:32.579 [DEBUG] [Thread-65237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:03:32.597 [INFO] [Thread-65237] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:03:32.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:03:32.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:03:33.452 [DEBUG] [Thread-65237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:03:33.452 [DEBUG] [Thread-65237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:03:33.500 [DEBUG] [Thread-65237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:03:33.500 [DEBUG] [Thread-65237] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:03:33.508 [DEBUG] [Thread-65237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:03:33.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:03:33.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:03:33.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:03:33.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:03:33.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:03:33.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:03:33.539 [DEBUG] [Thread-65237] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:03:46.135 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:03:46.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:03:46.273 [DEBUG] [Thread-65239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:04:01.096 [DEBUG] [Thread-65240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:04:01.325 [DEBUG] [Thread-65241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:04:03.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:04:03.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:04:03.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:04:04.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 3, 37), 10.81, 47.5, 0.0, 19.11, 12.45, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:04:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:03:37
2025-11-18T02:04:04.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:04:04.481 [DEBUG] [Thread-65242] [transport.py] [_log()] starting thread (client mode): 0xd3153070
2025-11-18T02:04:04.482 [DEBUG] [Thread-65242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:04:04.501 [DEBUG] [Thread-65242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:04:04.501 [INFO] [Thread-65242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] client lang: <none>
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] server lang: <none>
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] kex follows: False
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] Compression: none
2025-11-18T02:04:04.505 [DEBUG] [Thread-65242] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:04:04.523 [DEBUG] [Thread-65242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:04:04.523 [DEBUG] [Thread-65242] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:04:04.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:04:04.524 [DEBUG] [Thread-65242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:04:04.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:04:04.527 [DEBUG] [Thread-65242] [transport.py] [_log()] userauth is OK
2025-11-18T02:04:04.527 [DEBUG] [Thread-65242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:04:04.527 [DEBUG] [Thread-65242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:04:04.527 [DEBUG] [Thread-65242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:04:04.527 [DEBUG] [Thread-65242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:04:04.552 [INFO] [Thread-65242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:04:04.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:04:05.210 [DEBUG] [Thread-65242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:04:05.211 [DEBUG] [Thread-65242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:04:05.211 [DEBUG] [Thread-65242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:04:05.251 [DEBUG] [Thread-65242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:04:05.252 [DEBUG] [Thread-65242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:04:05.254 [DEBUG] [Thread-65242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:04:05.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:04:05.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:04:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:04:05.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:04:05.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:04:05.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:04:05.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:04:05.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:04:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:04:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.002473 -999.00  +12.50  12.51     52   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.3 12.5 161.2 17.0 13.0 -22.4 12.8 -21.6 12.6 -21.4 12.9 -22.2
2025-11-18T02:04:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:04:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:04:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.002473
2025-11-18T02:04:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:04:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:04:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:04:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:04:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:04:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:03:37', tmtdew=10.81, humidity=47.5, cloud=0.0, wind=19.11, temperature=12.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:03:37', seeing=1.51, atlas_timestamp='2025-11-18T00:03:33.667', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:01:00')
2025-11-18T02:04:05.277 [DEBUG] [Thread-65242] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:04:05.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:04:05.378 [DEBUG] [Thread-65245] [transport.py] [_log()] starting thread (client mode): 0xd3150b50
2025-11-18T02:04:05.378 [DEBUG] [Thread-65245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:04:05.398 [DEBUG] [Thread-65245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:04:05.399 [INFO] [Thread-65245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:04:05.408 [DEBUG] [Thread-65245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:04:05.408 [DEBUG] [Thread-65245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:04:05.408 [DEBUG] [Thread-65245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:04:05.408 [DEBUG] [Thread-65245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:04:05.408 [DEBUG] [Thread-65245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:04:05.408 [DEBUG] [Thread-65245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:04:05.408 [DEBUG] [Thread-65245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:04:05.408 [DEBUG] [Thread-65245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] client lang: <none>
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] server lang: <none>
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] kex follows: False
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] Compression: none
2025-11-18T02:04:05.409 [DEBUG] [Thread-65245] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:04:05.468 [DEBUG] [Thread-65245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:04:05.469 [DEBUG] [Thread-65245] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:04:05.469 [DEBUG] [Thread-65245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:04:05.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:04:05.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:04:05.531 [DEBUG] [Thread-65245] [transport.py] [_log()] userauth is OK
2025-11-18T02:04:05.531 [DEBUG] [Thread-65245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:04:05.531 [DEBUG] [Thread-65245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:04:05.531 [DEBUG] [Thread-65245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:04:05.531 [DEBUG] [Thread-65245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:04:05.555 [INFO] [Thread-65245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:04:05.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:04:05.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:04:06.409 [DEBUG] [Thread-65245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:04:06.409 [DEBUG] [Thread-65245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:04:06.457 [DEBUG] [Thread-65245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:04:06.457 [DEBUG] [Thread-65245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:04:06.467 [DEBUG] [Thread-65245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:04:06.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:04:06.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:04:06.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:04:06.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:04:06.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:04:06.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:04:06.501 [DEBUG] [Thread-65245] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:04:16.351 [DEBUG] [Thread-65247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:04:31.380 [DEBUG] [Thread-65248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:04:36.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:04:36.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:04:36.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:04:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 4, 9), 10.77, 47.62, 0.0, 19.8, 12.45, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:04:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:04:09
2025-11-18T02:04:37.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:04:37.445 [DEBUG] [Thread-65249] [transport.py] [_log()] starting thread (client mode): 0xd3151ba0
2025-11-18T02:04:37.445 [DEBUG] [Thread-65249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:04:37.461 [DEBUG] [Thread-65249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:04:37.461 [INFO] [Thread-65249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:04:37.464 [DEBUG] [Thread-65249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:04:37.464 [DEBUG] [Thread-65249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:04:37.464 [DEBUG] [Thread-65249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:04:37.464 [DEBUG] [Thread-65249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:04:37.464 [DEBUG] [Thread-65249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:04:37.464 [DEBUG] [Thread-65249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] client lang: <none>
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] server lang: <none>
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] kex follows: False
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] Compression: none
2025-11-18T02:04:37.465 [DEBUG] [Thread-65249] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:04:37.482 [DEBUG] [Thread-65249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:04:37.482 [DEBUG] [Thread-65249] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:04:37.483 [DEBUG] [Thread-65249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:04:37.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:04:37.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:04:37.485 [DEBUG] [Thread-65249] [transport.py] [_log()] userauth is OK
2025-11-18T02:04:37.485 [DEBUG] [Thread-65249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:04:37.485 [DEBUG] [Thread-65249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:04:37.485 [DEBUG] [Thread-65249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:04:37.485 [DEBUG] [Thread-65249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:04:37.500 [INFO] [Thread-65249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:04:37.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:04:38.260 [DEBUG] [Thread-65249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:04:38.261 [DEBUG] [Thread-65249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:04:38.261 [DEBUG] [Thread-65249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:04:38.301 [DEBUG] [Thread-65249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:04:38.302 [DEBUG] [Thread-65249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:04:38.305 [DEBUG] [Thread-65249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:04:38.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:04:38.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:04:38.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:04:38.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:04:38.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:04:38.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:04:38.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:04:38.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:04:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:04:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.002820 -999.00  +12.50  10.00     51   +2.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.9 10.0 169.8 17.4 13.0 -22.5 12.8 -21.6 12.6 -21.5 12.9 -22.3
2025-11-18T02:04:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:04:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:04:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.002820
2025-11-18T02:04:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:04:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:04:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:04:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:04:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:04:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:04:09', tmtdew=10.77, humidity=47.62, cloud=0.0, wind=19.8, temperature=12.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:04:09', seeing=1.79, atlas_timestamp='2025-11-18T00:04:03.648', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:01:00')
2025-11-18T02:04:38.328 [DEBUG] [Thread-65249] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:04:38.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:04:38.425 [DEBUG] [Thread-65252] [transport.py] [_log()] starting thread (client mode): 0xd31cf4c0
2025-11-18T02:04:38.425 [DEBUG] [Thread-65252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:04:38.441 [DEBUG] [Thread-65252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:04:38.441 [INFO] [Thread-65252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:04:38.449 [DEBUG] [Thread-65252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] client lang: <none>
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] server lang: <none>
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] kex follows: False
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:04:38.450 [DEBUG] [Thread-65252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:04:38.451 [DEBUG] [Thread-65252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:04:38.451 [DEBUG] [Thread-65252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:04:38.451 [DEBUG] [Thread-65252] [transport.py] [_log()] Compression: none
2025-11-18T02:04:38.451 [DEBUG] [Thread-65252] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:04:38.508 [DEBUG] [Thread-65252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:04:38.509 [DEBUG] [Thread-65252] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:04:38.509 [DEBUG] [Thread-65252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:04:38.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:04:38.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:04:38.570 [DEBUG] [Thread-65252] [transport.py] [_log()] userauth is OK
2025-11-18T02:04:38.570 [DEBUG] [Thread-65252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:04:38.570 [DEBUG] [Thread-65252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:04:38.571 [DEBUG] [Thread-65252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:04:38.571 [DEBUG] [Thread-65252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:04:38.594 [INFO] [Thread-65252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:04:38.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:04:38.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:04:39.427 [DEBUG] [Thread-65252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:04:39.428 [DEBUG] [Thread-65252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:04:39.476 [DEBUG] [Thread-65252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:04:39.476 [DEBUG] [Thread-65252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:04:39.485 [DEBUG] [Thread-65252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:04:39.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:04: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')
2025-11-18T02:04: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
2025-11-18T02:04:39.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:04:39.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:04:39.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:04:39.522 [DEBUG] [Thread-65252] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:04:46.341 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:04:46.343 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:04:46.413 [DEBUG] [Thread-65254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:05:01.160 [DEBUG] [Thread-65255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:05:01.455 [DEBUG] [Thread-65256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:05:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:05:09.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:05:09.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:05:10.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 4, 41), 10.66, 48.34, 0.0, 17.68, 12.46, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:05:10.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:04:41
2025-11-18T02:05:10.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:05:10.472 [DEBUG] [Thread-65257] [transport.py] [_log()] starting thread (client mode): 0xd0703190
2025-11-18T02:05:10.472 [DEBUG] [Thread-65257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:05:10.492 [DEBUG] [Thread-65257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:05:10.492 [INFO] [Thread-65257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:05:10.495 [DEBUG] [Thread-65257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:05:10.495 [DEBUG] [Thread-65257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:05:10.495 [DEBUG] [Thread-65257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:05:10.495 [DEBUG] [Thread-65257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] client lang: <none>
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] server lang: <none>
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] kex follows: False
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] Compression: none
2025-11-18T02:05:10.496 [DEBUG] [Thread-65257] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:05:10.512 [DEBUG] [Thread-65257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:05:10.512 [DEBUG] [Thread-65257] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:05:10.513 [DEBUG] [Thread-65257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:05:10.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:05:10.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:05:10.514 [DEBUG] [Thread-65257] [transport.py] [_log()] userauth is OK
2025-11-18T02:05:10.514 [DEBUG] [Thread-65257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:05:10.515 [DEBUG] [Thread-65257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:05:10.515 [DEBUG] [Thread-65257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:05:10.515 [DEBUG] [Thread-65257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:05:10.539 [INFO] [Thread-65257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:05:10.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:05:13.210 [DEBUG] [Thread-65257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:05:13.210 [DEBUG] [Thread-65257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:05:13.210 [DEBUG] [Thread-65257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:05:13.251 [DEBUG] [Thread-65257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:05:13.251 [DEBUG] [Thread-65257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:05:13.254 [DEBUG] [Thread-65257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:05:13.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:05:13.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:05:13.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:05:13.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:05:13.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:05:13.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:05:13.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:05:13.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:05:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:05:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.003167 -999.00  +12.40  15.26     52   +2.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.0 15.3 169.0 18.9 13.0 -22.7 12.8 -21.7 12.6 -21.6 12.9 -22.5
2025-11-18T02:05:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:05:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:05:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.003167
2025-11-18T02:05:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:05:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:05:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:05:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:05:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:05:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:04:41', tmtdew=10.66, humidity=48.34, cloud=0.0, wind=17.68, temperature=12.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:04:41', seeing=1.45, atlas_timestamp='2025-11-18T00:04:33.629', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:03:00')
2025-11-18T02:05:13.412 [DEBUG] [Thread-65257] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:05:13.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:05:13.512 [DEBUG] [Thread-65260] [transport.py] [_log()] starting thread (client mode): 0xd07aee90
2025-11-18T02:05:13.512 [DEBUG] [Thread-65260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:05:13.531 [DEBUG] [Thread-65260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:05:13.531 [INFO] [Thread-65260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:05:13.539 [DEBUG] [Thread-65260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:05:13.539 [DEBUG] [Thread-65260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:05:13.539 [DEBUG] [Thread-65260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:05:13.539 [DEBUG] [Thread-65260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:05:13.539 [DEBUG] [Thread-65260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:05:13.539 [DEBUG] [Thread-65260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:05:13.539 [DEBUG] [Thread-65260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] client lang: <none>
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] server lang: <none>
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] kex follows: False
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] Compression: none
2025-11-18T02:05:13.540 [DEBUG] [Thread-65260] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:05:13.602 [DEBUG] [Thread-65260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:05:13.602 [DEBUG] [Thread-65260] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:05:13.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:05:13.603 [DEBUG] [Thread-65260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:05:13.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:05:13.660 [DEBUG] [Thread-65260] [transport.py] [_log()] userauth is OK
2025-11-18T02:05:13.661 [DEBUG] [Thread-65260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:05:13.661 [DEBUG] [Thread-65260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:05:13.661 [DEBUG] [Thread-65260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:05:13.661 [DEBUG] [Thread-65260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:05:13.683 [INFO] [Thread-65260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:05:13.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:05:13.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:05:14.504 [DEBUG] [Thread-65260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:05:14.504 [DEBUG] [Thread-65260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:05:14.553 [DEBUG] [Thread-65260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:05:14.553 [DEBUG] [Thread-65260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:05:14.561 [DEBUG] [Thread-65260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:05:14.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:05: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')
2025-11-18T02:05:14.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:05:14.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:05:14.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:05:14.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:05:14.593 [DEBUG] [Thread-65260] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:05:16.487 [DEBUG] [Thread-65262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:05:31.528 [DEBUG] [Thread-65263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:05:44.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:05:44.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:05:44.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:05:45.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 5, 13), 10.6, 48.55, 0.0, 17.79, 12.5, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:05:45.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:05:13
2025-11-18T02:05:45.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:05:45.518 [DEBUG] [Thread-65264] [transport.py] [_log()] starting thread (client mode): 0xd31ce680
2025-11-18T02:05:45.518 [DEBUG] [Thread-65264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:05:45.538 [DEBUG] [Thread-65264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:05:45.538 [INFO] [Thread-65264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:05:45.541 [DEBUG] [Thread-65264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:05:45.541 [DEBUG] [Thread-65264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:05:45.541 [DEBUG] [Thread-65264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:05:45.541 [DEBUG] [Thread-65264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:05:45.541 [DEBUG] [Thread-65264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:05:45.541 [DEBUG] [Thread-65264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:05:45.541 [DEBUG] [Thread-65264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:05:45.541 [DEBUG] [Thread-65264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] client lang: <none>
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] server lang: <none>
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] kex follows: False
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] Compression: none
2025-11-18T02:05:45.542 [DEBUG] [Thread-65264] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:05:45.560 [DEBUG] [Thread-65264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:05:45.561 [DEBUG] [Thread-65264] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:05:45.561 [DEBUG] [Thread-65264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:05:45.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:05:45.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:05:45.564 [DEBUG] [Thread-65264] [transport.py] [_log()] userauth is OK
2025-11-18T02:05:45.565 [DEBUG] [Thread-65264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:05:45.565 [DEBUG] [Thread-65264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:05:45.565 [DEBUG] [Thread-65264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:05:45.565 [DEBUG] [Thread-65264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:05:45.600 [INFO] [Thread-65264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:05:45.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:05:46.301 [DEBUG] [Thread-65264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:05:46.301 [DEBUG] [Thread-65264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:05:46.301 [DEBUG] [Thread-65264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:05:46.342 [DEBUG] [Thread-65264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:05:46.342 [DEBUG] [Thread-65264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:05:46.345 [DEBUG] [Thread-65264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:05:46.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:05:46.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:05:46.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:05:46.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:05:46.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:05:46.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:05:46.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:05:46.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.003514 -999.00  +12.40  12.91     52   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.2 12.9 158.4 15.1 13.0 -22.8 12.8 -21.7 12.6 -21.6 12.9 -22.4
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.003514
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:05:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:05:13', tmtdew=10.6, humidity=48.55, cloud=0.0, wind=17.79, temperature=12.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:05:13', seeing=1.45, atlas_timestamp='2025-11-18T00:05:03.610', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:03:00')
2025-11-18T02:05:46.363 [DEBUG] [Thread-65264] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:05:46.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:05:46.447 [DEBUG] [Thread-65267] [transport.py] [_log()] starting thread (client mode): 0xd07ae1a0
2025-11-18T02:05:46.447 [DEBUG] [Thread-65267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:05:46.462 [DEBUG] [Thread-65267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:05:46.462 [INFO] [Thread-65267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] client lang: <none>
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] server lang: <none>
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] kex follows: False
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] Compression: none
2025-11-18T02:05:46.470 [DEBUG] [Thread-65267] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:05:46.527 [DEBUG] [Thread-65267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:05:46.527 [DEBUG] [Thread-65267] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:05:46.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:05:46.528 [DEBUG] [Thread-65267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:05:46.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:05:46.545 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:05:46.546 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:05:46.556 [DEBUG] [Thread-65269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:05:46.584 [DEBUG] [Thread-65267] [transport.py] [_log()] userauth is OK
2025-11-18T02:05:46.584 [DEBUG] [Thread-65267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:05:46.584 [DEBUG] [Thread-65267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:05:46.584 [DEBUG] [Thread-65267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:05:46.584 [DEBUG] [Thread-65267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:05:46.600 [INFO] [Thread-65267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:05:46.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:05:46.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:05:47.472 [DEBUG] [Thread-65267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:05:47.472 [DEBUG] [Thread-65267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:05:47.520 [DEBUG] [Thread-65267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:05:47.520 [DEBUG] [Thread-65267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:05:47.528 [DEBUG] [Thread-65267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:05:47.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:05:47.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:05:47.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:05:47.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:05:47.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:05:47.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:05:47.560 [DEBUG] [Thread-65267] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:06:01.218 [DEBUG] [Thread-65270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:06:01.589 [DEBUG] [Thread-65271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:06:16.621 [DEBUG] [Thread-65272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:06:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:06:17.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:06:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:06:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 5, 45), 10.49, 48.57, 0.0, 18.03, 12.38, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:06:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:05:45
2025-11-18T02:06:18.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:06:18.546 [DEBUG] [Thread-65273] [transport.py] [_log()] starting thread (client mode): 0xd07115a0
2025-11-18T02:06:18.546 [DEBUG] [Thread-65273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:06:18.569 [DEBUG] [Thread-65273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:06:18.569 [INFO] [Thread-65273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:06:18.572 [DEBUG] [Thread-65273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:06:18.572 [DEBUG] [Thread-65273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:06:18.572 [DEBUG] [Thread-65273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:06:18.572 [DEBUG] [Thread-65273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:06:18.572 [DEBUG] [Thread-65273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:06:18.572 [DEBUG] [Thread-65273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:06:18.572 [DEBUG] [Thread-65273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:06:18.572 [DEBUG] [Thread-65273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] client lang: <none>
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] server lang: <none>
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] kex follows: False
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] Compression: none
2025-11-18T02:06:18.573 [DEBUG] [Thread-65273] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:06:18.590 [DEBUG] [Thread-65273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:06:18.590 [DEBUG] [Thread-65273] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:06:18.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:06:18.591 [DEBUG] [Thread-65273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:06:18.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:06:18.591 [DEBUG] [Thread-65273] [transport.py] [_log()] userauth is OK
2025-11-18T02:06:18.591 [DEBUG] [Thread-65273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:06:18.591 [DEBUG] [Thread-65273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:06:18.591 [DEBUG] [Thread-65273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:06:18.592 [DEBUG] [Thread-65273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:06:18.605 [INFO] [Thread-65273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:06:18.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:06:19.210 [DEBUG] [Thread-65273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:06:19.210 [DEBUG] [Thread-65273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:06:19.210 [DEBUG] [Thread-65273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:06:19.251 [DEBUG] [Thread-65273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:06:19.251 [DEBUG] [Thread-65273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:06:19.254 [DEBUG] [Thread-65273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:06:19.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:06:19.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:06:19.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:06:19.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:06:19.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:06:19.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:06:19.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.003920 -999.00  +12.40  10.71     52   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.0 10.7 158.6 16.4 12.9 -22.7 12.8 -21.7 12.6 -21.6 12.9 -22.4
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.003920
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:06:19.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:05:45', tmtdew=10.49, humidity=48.57, cloud=0.0, wind=18.03, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:05:45', seeing=1.56, atlas_timestamp='2025-11-18T00:05:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:03:00')
2025-11-18T02:06:19.273 [DEBUG] [Thread-65273] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:06:19.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:06:19.359 [DEBUG] [Thread-65276] [transport.py] [_log()] starting thread (client mode): 0xd0755e70
2025-11-18T02:06:19.359 [DEBUG] [Thread-65276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:06:19.378 [DEBUG] [Thread-65276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:06:19.378 [INFO] [Thread-65276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:06:19.389 [DEBUG] [Thread-65276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:06:19.389 [DEBUG] [Thread-65276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:06:19.389 [DEBUG] [Thread-65276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] client lang: <none>
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] server lang: <none>
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] kex follows: False
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] Compression: none
2025-11-18T02:06:19.390 [DEBUG] [Thread-65276] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:06:19.450 [DEBUG] [Thread-65276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:06:19.451 [DEBUG] [Thread-65276] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:06:19.451 [DEBUG] [Thread-65276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:06:19.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:06:19.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:06:19.515 [DEBUG] [Thread-65276] [transport.py] [_log()] userauth is OK
2025-11-18T02:06:19.515 [DEBUG] [Thread-65276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:06:19.515 [DEBUG] [Thread-65276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:06:19.515 [DEBUG] [Thread-65276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:06:19.515 [DEBUG] [Thread-65276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:06:19.531 [INFO] [Thread-65276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:06:19.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:06:19.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:06:20.370 [DEBUG] [Thread-65276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:06:20.370 [DEBUG] [Thread-65276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:06:20.418 [DEBUG] [Thread-65276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:06:20.419 [DEBUG] [Thread-65276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:06:20.428 [DEBUG] [Thread-65276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:06:20.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:06:20.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:06:20.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:06:20.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:06:20.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:06:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:06:20.474 [DEBUG] [Thread-65276] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:06:31.646 [DEBUG] [Thread-65278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:06:46.688 [DEBUG] [Thread-65279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:06:46.748 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:06:46.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:06:50.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:06:50.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:06:50.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:06:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 6, 17), 10.46, 48.68, 0.0, 18.32, 12.4, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:06:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:06:17
2025-11-18T02:06:51.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:06:51.473 [DEBUG] [Thread-65280] [transport.py] [_log()] starting thread (client mode): 0xd07af610
2025-11-18T02:06:51.473 [DEBUG] [Thread-65280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:06:51.493 [DEBUG] [Thread-65280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:06:51.493 [INFO] [Thread-65280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] client lang: <none>
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] server lang: <none>
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] kex follows: False
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] Compression: none
2025-11-18T02:06:51.497 [DEBUG] [Thread-65280] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:06:51.514 [DEBUG] [Thread-65280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:06:51.514 [DEBUG] [Thread-65280] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:06:51.514 [DEBUG] [Thread-65280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:06:51.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:06:51.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:06:51.515 [DEBUG] [Thread-65280] [transport.py] [_log()] userauth is OK
2025-11-18T02:06:51.515 [DEBUG] [Thread-65280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:06:51.515 [DEBUG] [Thread-65280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:06:51.515 [DEBUG] [Thread-65280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:06:51.515 [DEBUG] [Thread-65280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:06:51.532 [INFO] [Thread-65280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:06:51.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:06:52.187 [DEBUG] [Thread-65280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:06:52.187 [DEBUG] [Thread-65280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:06:52.187 [DEBUG] [Thread-65280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:06:52.228 [DEBUG] [Thread-65280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:06:52.228 [DEBUG] [Thread-65280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:06:52.231 [DEBUG] [Thread-65280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:06:52.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:06:52.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:06:52.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:06:52.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:06:52.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:06:52.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:06:52.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:06:52.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:06:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:06:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.004556 -999.00  +12.40  11.76     53   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.5 11.8 155.4 16.0 12.9 -22.7 12.8 -21.7 12.6 -21.6 12.9 -22.5
2025-11-18T02:06:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:06:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:06:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.004556
2025-11-18T02:06:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:06:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:06:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:06:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:06:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:06:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:06:17', tmtdew=10.46, humidity=48.68, cloud=0.0, wind=18.32, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:06:49', seeing=1.47, atlas_timestamp='2025-11-18T00:06:33.638', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:03:00')
2025-11-18T02:06:52.250 [DEBUG] [Thread-65280] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:06:52.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:06:52.335 [DEBUG] [Thread-65283] [transport.py] [_log()] starting thread (client mode): 0xd0711360
2025-11-18T02:06:52.335 [DEBUG] [Thread-65283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:06:52.350 [DEBUG] [Thread-65283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:06:52.350 [INFO] [Thread-65283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] client lang: <none>
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] server lang: <none>
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] kex follows: False
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] Compression: none
2025-11-18T02:06:52.358 [DEBUG] [Thread-65283] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:06:52.415 [DEBUG] [Thread-65283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:06:52.415 [DEBUG] [Thread-65283] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:06:52.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:06:52.415 [DEBUG] [Thread-65283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:06:52.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:06:52.472 [DEBUG] [Thread-65283] [transport.py] [_log()] userauth is OK
2025-11-18T02:06:52.472 [DEBUG] [Thread-65283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:06:52.472 [DEBUG] [Thread-65283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:06:52.472 [DEBUG] [Thread-65283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:06:52.472 [DEBUG] [Thread-65283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:06:52.486 [INFO] [Thread-65283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:06:52.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:06:52.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:06:53.334 [DEBUG] [Thread-65283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:06:53.334 [DEBUG] [Thread-65283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:06:53.382 [DEBUG] [Thread-65283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:06:53.383 [DEBUG] [Thread-65283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:06:53.392 [DEBUG] [Thread-65283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:06:53.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:06: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')
2025-11-18T02:06: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
2025-11-18T02:06:53.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:06:53.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:06:53.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:06:53.426 [DEBUG] [Thread-65283] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:07:01.279 [DEBUG] [Thread-65285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:07:01.715 [DEBUG] [Thread-65286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:07:16.756 [DEBUG] [Thread-65287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:07:23.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:07:23.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:07:23.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:07:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 6, 49), 10.3, 49.42, 0.0, 19.3, 12.45, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:07:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:06:49
2025-11-18T02:07:24.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:07:24.397 [DEBUG] [Thread-65288] [transport.py] [_log()] starting thread (client mode): 0xd07aebc0
2025-11-18T02:07:24.397 [DEBUG] [Thread-65288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:07:24.418 [DEBUG] [Thread-65288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:07:24.418 [INFO] [Thread-65288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:07:24.420 [DEBUG] [Thread-65288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:07:24.420 [DEBUG] [Thread-65288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:07:24.420 [DEBUG] [Thread-65288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:07:24.420 [DEBUG] [Thread-65288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:07:24.420 [DEBUG] [Thread-65288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:07:24.420 [DEBUG] [Thread-65288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:07:24.420 [DEBUG] [Thread-65288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:07:24.420 [DEBUG] [Thread-65288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] client lang: <none>
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] server lang: <none>
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] kex follows: False
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] Compression: none
2025-11-18T02:07:24.421 [DEBUG] [Thread-65288] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:07:24.439 [DEBUG] [Thread-65288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:07:24.439 [DEBUG] [Thread-65288] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:07:24.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:07:24.440 [DEBUG] [Thread-65288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:07:24.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:07:24.442 [DEBUG] [Thread-65288] [transport.py] [_log()] userauth is OK
2025-11-18T02:07:24.442 [DEBUG] [Thread-65288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:07:24.442 [DEBUG] [Thread-65288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:07:24.442 [DEBUG] [Thread-65288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:07:24.442 [DEBUG] [Thread-65288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:07:24.458 [INFO] [Thread-65288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:07:24.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:07:25.057 [DEBUG] [Thread-65288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:07:25.057 [DEBUG] [Thread-65288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:07:25.057 [DEBUG] [Thread-65288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:07:25.098 [DEBUG] [Thread-65288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:07:25.098 [DEBUG] [Thread-65288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:07:25.100 [DEBUG] [Thread-65288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:07:25.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:07:25.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:07:25.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:07:25.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:07:25.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:07:25.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:07:25.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:07:25.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.004903 -999.00  +12.40  10.17     53   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.7 10.2 167.6 13.3 12.9 -22.8 12.8 -21.7 12.5 -21.7 12.9 -22.4
2025-11-18T02:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.004903
2025-11-18T02:07:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:07:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:07:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:07:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:07:25.121 [DEBUG] [Thread-65288] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:07:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:07:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:06:49', tmtdew=10.3, humidity=49.42, cloud=0.0, wind=19.3, temperature=12.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:07:22', seeing=1.49, atlas_timestamp='2025-11-18T00:07:03.619', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:03:00')
2025-11-18T02:07:25.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:07:25.217 [DEBUG] [Thread-65291] [transport.py] [_log()] starting thread (client mode): 0xd31537f0
2025-11-18T02:07:25.217 [DEBUG] [Thread-65291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:07:25.232 [DEBUG] [Thread-65291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:07:25.232 [INFO] [Thread-65291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:07:25.240 [DEBUG] [Thread-65291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:07:25.240 [DEBUG] [Thread-65291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:07:25.240 [DEBUG] [Thread-65291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:07:25.240 [DEBUG] [Thread-65291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:07:25.240 [DEBUG] [Thread-65291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:07:25.240 [DEBUG] [Thread-65291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:07:25.240 [DEBUG] [Thread-65291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] client lang: <none>
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] server lang: <none>
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] kex follows: False
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:07:25.241 [DEBUG] [Thread-65291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:07:25.242 [DEBUG] [Thread-65291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:07:25.242 [DEBUG] [Thread-65291] [transport.py] [_log()] Compression: none
2025-11-18T02:07:25.242 [DEBUG] [Thread-65291] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:07:25.296 [DEBUG] [Thread-65291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:07:25.297 [DEBUG] [Thread-65291] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:07:25.298 [DEBUG] [Thread-65291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:07:25.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:07:25.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:07:25.352 [DEBUG] [Thread-65291] [transport.py] [_log()] userauth is OK
2025-11-18T02:07:25.352 [DEBUG] [Thread-65291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:07:25.352 [DEBUG] [Thread-65291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:07:25.352 [DEBUG] [Thread-65291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:07:25.352 [DEBUG] [Thread-65291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:07:25.366 [INFO] [Thread-65291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:07:25.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:07:25.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:07:26.191 [DEBUG] [Thread-65291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:07:26.191 [DEBUG] [Thread-65291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:07:26.239 [DEBUG] [Thread-65291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:07:26.239 [DEBUG] [Thread-65291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:07:26.247 [DEBUG] [Thread-65291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:07:26.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:07:26.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:07:26.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:07:26.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:07:26.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:07:26.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:07:26.279 [DEBUG] [Thread-65291] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:07:31.782 [DEBUG] [Thread-65293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:07:46.828 [DEBUG] [Thread-65294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:07:46.949 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:07:46.951 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:07:56.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:07:56.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:07:56.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:07:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 7, 53), 10.37, 49.35, 0.0, 17.4, 12.48, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:07:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:07:53
2025-11-18T02:07:57.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:07:57.227 [DEBUG] [Thread-65295] [transport.py] [_log()] starting thread (client mode): 0xd07af7c0
2025-11-18T02:07:57.228 [DEBUG] [Thread-65295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:07:57.249 [DEBUG] [Thread-65295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:07:57.249 [INFO] [Thread-65295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] client lang: <none>
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] server lang: <none>
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] kex follows: False
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:07:57.252 [DEBUG] [Thread-65295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:07:57.253 [DEBUG] [Thread-65295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:07:57.253 [DEBUG] [Thread-65295] [transport.py] [_log()] Compression: none
2025-11-18T02:07:57.253 [DEBUG] [Thread-65295] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:07:57.269 [DEBUG] [Thread-65295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:07:57.270 [DEBUG] [Thread-65295] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:07:57.270 [DEBUG] [Thread-65295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:07:57.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:07:57.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:07:57.272 [DEBUG] [Thread-65295] [transport.py] [_log()] userauth is OK
2025-11-18T02:07:57.273 [DEBUG] [Thread-65295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:07:57.273 [DEBUG] [Thread-65295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:07:57.273 [DEBUG] [Thread-65295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:07:57.273 [DEBUG] [Thread-65295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:07:57.297 [INFO] [Thread-65295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:07:57.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:07:57.939 [DEBUG] [Thread-65295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:07:57.940 [DEBUG] [Thread-65295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:07:57.940 [DEBUG] [Thread-65295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:07:57.980 [DEBUG] [Thread-65295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:07:57.981 [DEBUG] [Thread-65295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:07:57.984 [DEBUG] [Thread-65295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:07:57.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:07:57.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:07:57.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:07:58.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:07:58.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:07:58.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:07:58.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:07:58.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:07:58.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:07:58.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.005251 -999.00  +12.30  13.05     53   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.5 13.1 161.6 16.5 12.9 -22.8 12.8 -21.7 12.6 -21.5 12.9 -22.4
2025-11-18T02:07:58.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:07:58.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:07:58.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.005251
2025-11-18T02:07:58.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:07:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:07:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:07:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:07:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:07:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:07:53', tmtdew=10.37, humidity=49.35, cloud=0.0, wind=17.4, temperature=12.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:07:54', seeing=1.4, atlas_timestamp='2025-11-18T00:07:33.686', atlas_cloud=1, atlas_rain=1, zp_data=[0.07324999999999982, 0.056250000000000355, 0.09025000000000105, 0.05149999999999899, 0.11650000000000027, 0.1877500000000012, 0.1039999999999992, 0.056250000000000355, 0.0934999999999988, 0.11299999999999955, 0.12124999999999986, 0.12349999999999994, 0.18499999999999872, 0.16225000000000023, 0.12399999999999878, 0.05349999999999966, 0.10524999999999984, 0.15850000000000009, 0.18399999999999928, 0.1952499999999997, 0.16699999999999804, 0.21374999999999744, 0.1332500000000003, 0.3487500000000008, 0.16049999999999898, 0.32150000000000034, 0.4247500000000004, 0.7370000000000001, 0.274, 0.20200000000000173, 0.22800000000000153, 0.3760000000000012, 0.4867499999999989], zp_timestamp='2025-11-18T00:03:00')
2025-11-18T02:07:58.010 [DEBUG] [Thread-65295] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:07:58.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:07:58.107 [DEBUG] [Thread-65298] [transport.py] [_log()] starting thread (client mode): 0xd07a3d60
2025-11-18T02:07:58.107 [DEBUG] [Thread-65298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:07:58.122 [DEBUG] [Thread-65298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:07:58.122 [INFO] [Thread-65298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] client lang: <none>
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] server lang: <none>
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] kex follows: False
2025-11-18T02:07:58.130 [DEBUG] [Thread-65298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:07:58.131 [DEBUG] [Thread-65298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:07:58.131 [DEBUG] [Thread-65298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:07:58.131 [DEBUG] [Thread-65298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:07:58.131 [DEBUG] [Thread-65298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:07:58.131 [DEBUG] [Thread-65298] [transport.py] [_log()] Compression: none
2025-11-18T02:07:58.131 [DEBUG] [Thread-65298] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:07:58.188 [DEBUG] [Thread-65298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:07:58.188 [DEBUG] [Thread-65298] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:07:58.188 [DEBUG] [Thread-65298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:07:58.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:07:58.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:07:58.244 [DEBUG] [Thread-65298] [transport.py] [_log()] userauth is OK
2025-11-18T02:07:58.244 [DEBUG] [Thread-65298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:07:58.244 [DEBUG] [Thread-65298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:07:58.245 [DEBUG] [Thread-65298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:07:58.245 [DEBUG] [Thread-65298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:07:58.267 [INFO] [Thread-65298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:07:58.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:07:58.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:07:59.085 [DEBUG] [Thread-65298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:07:59.085 [DEBUG] [Thread-65298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:07:59.133 [DEBUG] [Thread-65298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:07:59.134 [DEBUG] [Thread-65298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:07:59.143 [DEBUG] [Thread-65298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:07:59.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:07:59.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:07:59.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:07:59.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:07:59.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:07:59.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:07:59.178 [DEBUG] [Thread-65298] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:08:01.358 [DEBUG] [Thread-65300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:08:01.856 [DEBUG] [Thread-65301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:08:16.894 [DEBUG] [Thread-65302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:08:29.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:08:29.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:08:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:08:29.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 8, 25), 10.33, 49.47, 0.0, 16.36, 12.46, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:08:29.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:08:25
2025-11-18T02:08:29.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:08:30.120 [DEBUG] [Thread-65303] [transport.py] [_log()] starting thread (client mode): 0xd0754850
2025-11-18T02:08:30.120 [DEBUG] [Thread-65303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:08:30.142 [DEBUG] [Thread-65303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:08:30.142 [INFO] [Thread-65303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:08:30.146 [DEBUG] [Thread-65303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:08:30.146 [DEBUG] [Thread-65303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:08:30.146 [DEBUG] [Thread-65303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:08:30.146 [DEBUG] [Thread-65303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:08:30.146 [DEBUG] [Thread-65303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:08:30.146 [DEBUG] [Thread-65303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:08:30.146 [DEBUG] [Thread-65303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:08:30.146 [DEBUG] [Thread-65303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] client lang: <none>
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] server lang: <none>
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] kex follows: False
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] Compression: none
2025-11-18T02:08:30.147 [DEBUG] [Thread-65303] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:08:30.165 [DEBUG] [Thread-65303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:08:30.166 [DEBUG] [Thread-65303] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:08:30.166 [DEBUG] [Thread-65303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:08:30.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:08:30.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:08:30.168 [DEBUG] [Thread-65303] [transport.py] [_log()] userauth is OK
2025-11-18T02:08:30.169 [DEBUG] [Thread-65303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:08:30.169 [DEBUG] [Thread-65303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:08:30.169 [DEBUG] [Thread-65303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:08:30.169 [DEBUG] [Thread-65303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:08:30.191 [INFO] [Thread-65303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:08:30.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:08:30.812 [DEBUG] [Thread-65303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:08:30.813 [DEBUG] [Thread-65303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:08:30.813 [DEBUG] [Thread-65303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:08:30.853 [DEBUG] [Thread-65303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:08:30.854 [DEBUG] [Thread-65303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:08:30.856 [DEBUG] [Thread-65303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:08:30.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:08:30.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:08:30.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:08:30.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:08:30.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:08:30.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:08:30.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:08:30.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:08:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:08:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.005598 -999.00  +12.40  12.10     53   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 9.4 12.1 160.6 19.3 12.9 -22.6 12.8 -21.7 12.6 -21.6 12.8 -22.4
2025-11-18T02:08:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:08:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:08:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.005598
2025-11-18T02:08:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:08:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:08:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:08:30.882 [DEBUG] [Thread-65303] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:08:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:08:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:08:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:08:25', tmtdew=10.33, humidity=49.47, cloud=0.0, wind=16.36, temperature=12.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:08:26', seeing=1.4, atlas_timestamp='2025-11-18T00:08:03.667', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.01624999999999943, 0.10325000000000095, 0.036999999999999034, 0.01950000000000074, 0.11925000000000097, 0.08499999999999908, 0.06825000000000081, 0.08949999999999925, 0.029500000000000526, 0.14424999999999955, 0.10200000000000031, 0.14499999999999957, 0.12824999999999953, 0.10699999999999932, 0.07899999999999885, 0.10824999999999996, 0.13149999999999906, 0.2889999999999997, 0.15424999999999933, 0.12299999999999933, 0.10824999999999818, 0.06475000000000009, 0.2587500000000009, 0.238999999999999, 0.19350000000000023, 0.5367499999999996, 0.6115000000000004, 0.3050000000000006, 0.06300000000000061, 0.1440000000000019, 0.5200000000000005, 0.48574999999999946], zp_timestamp='2025-11-18T00:07:00')
2025-11-18T02:08:30.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:08:30.977 [DEBUG] [Thread-65306] [transport.py] [_log()] starting thread (client mode): 0xd0711120
2025-11-18T02:08:30.978 [DEBUG] [Thread-65306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:08:30.992 [DEBUG] [Thread-65306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:08:30.992 [INFO] [Thread-65306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] client lang: <none>
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] server lang: <none>
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] kex follows: False
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:08:31.000 [DEBUG] [Thread-65306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:08:31.001 [DEBUG] [Thread-65306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:08:31.001 [DEBUG] [Thread-65306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:08:31.001 [DEBUG] [Thread-65306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:08:31.001 [DEBUG] [Thread-65306] [transport.py] [_log()] Compression: none
2025-11-18T02:08:31.001 [DEBUG] [Thread-65306] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:08:31.064 [DEBUG] [Thread-65306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:08:31.064 [DEBUG] [Thread-65306] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:08:31.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:08:31.065 [DEBUG] [Thread-65306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:08:31.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:08:31.120 [DEBUG] [Thread-65306] [transport.py] [_log()] userauth is OK
2025-11-18T02:08:31.121 [DEBUG] [Thread-65306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:08:31.121 [DEBUG] [Thread-65306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:08:31.121 [DEBUG] [Thread-65306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:08:31.121 [DEBUG] [Thread-65306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:08:31.140 [INFO] [Thread-65306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:08:31.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:08:31.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:08:31.924 [DEBUG] [Thread-65308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:08:32.012 [DEBUG] [Thread-65306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:08:32.012 [DEBUG] [Thread-65306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:08:32.060 [DEBUG] [Thread-65306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:08:32.060 [DEBUG] [Thread-65306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:08:32.069 [DEBUG] [Thread-65306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:08:32.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:08:32.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:08:32.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:08:32.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:08:32.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:08:32.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:08:32.103 [DEBUG] [Thread-65306] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:08:46.970 [DEBUG] [Thread-65309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:08:47.154 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:08:47.155 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:01.418 [DEBUG] [Thread-65310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:01.997 [DEBUG] [Thread-65311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:02.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:09:02.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:09:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:09:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 8, 57), 10.26, 49.38, 0.0, 17.94, 12.38, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:09:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:08:57
2025-11-18T02:09:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:09:03.075 [DEBUG] [Thread-65312] [transport.py] [_log()] starting thread (client mode): 0xd0700f70
2025-11-18T02:09:03.075 [DEBUG] [Thread-65312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:09:03.094 [DEBUG] [Thread-65312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:09:03.094 [INFO] [Thread-65312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] client lang: <none>
2025-11-18T02:09:03.098 [DEBUG] [Thread-65312] [transport.py] [_log()] server lang: <none>
2025-11-18T02:09:03.099 [DEBUG] [Thread-65312] [transport.py] [_log()] kex follows: False
2025-11-18T02:09:03.099 [DEBUG] [Thread-65312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:09:03.099 [DEBUG] [Thread-65312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:09:03.099 [DEBUG] [Thread-65312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:09:03.099 [DEBUG] [Thread-65312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:09:03.099 [DEBUG] [Thread-65312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:09:03.099 [DEBUG] [Thread-65312] [transport.py] [_log()] Compression: none
2025-11-18T02:09:03.099 [DEBUG] [Thread-65312] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:09:03.117 [DEBUG] [Thread-65312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:09:03.117 [DEBUG] [Thread-65312] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:09:03.118 [DEBUG] [Thread-65312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:09:03.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:09:03.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:09:03.120 [DEBUG] [Thread-65312] [transport.py] [_log()] userauth is OK
2025-11-18T02:09:03.120 [DEBUG] [Thread-65312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:09:03.121 [DEBUG] [Thread-65312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:09:03.121 [DEBUG] [Thread-65312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:09:03.121 [DEBUG] [Thread-65312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:09:03.144 [INFO] [Thread-65312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:09:03.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:09:03.778 [DEBUG] [Thread-65312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:09:03.778 [DEBUG] [Thread-65312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:09:03.778 [DEBUG] [Thread-65312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:09:03.819 [DEBUG] [Thread-65312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:09:03.819 [DEBUG] [Thread-65312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:09:03.822 [DEBUG] [Thread-65312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:09:03.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:09:03.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:09:03.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:09:03.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:09:03.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:09:03.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:09:03.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:09:03.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:09:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:09:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.005945 -999.00  +12.40  12.03     54   +3.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.4 12.0 164.8 19.2 12.9 -22.7 12.8 -21.6 12.6 -21.4 12.8 -22.4
2025-11-18T02:09:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:09:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:09:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.005945
2025-11-18T02:09:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:09:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:09:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:09:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:09:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:09:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:08:57', tmtdew=10.26, humidity=49.38, cloud=0.0, wind=17.94, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:08:58', seeing=1.45, atlas_timestamp='2025-11-18T00:08:33.648', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.01624999999999943, 0.10325000000000095, 0.036999999999999034, 0.01950000000000074, 0.11925000000000097, 0.08499999999999908, 0.06825000000000081, 0.08949999999999925, 0.029500000000000526, 0.14424999999999955, 0.10200000000000031, 0.14499999999999957, 0.12824999999999953, 0.10699999999999932, 0.07899999999999885, 0.10824999999999996, 0.13149999999999906, 0.2889999999999997, 0.15424999999999933, 0.12299999999999933, 0.10824999999999818, 0.06475000000000009, 0.2587500000000009, 0.238999999999999, 0.19350000000000023, 0.5367499999999996, 0.6115000000000004, 0.3050000000000006, 0.06300000000000061, 0.1440000000000019, 0.5200000000000005, 0.48574999999999946], zp_timestamp='2025-11-18T00:07:00')
2025-11-18T02:09:03.846 [DEBUG] [Thread-65312] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:09:03.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:09:03.943 [DEBUG] [Thread-65315] [transport.py] [_log()] starting thread (client mode): 0xd31529b0
2025-11-18T02:09:03.943 [DEBUG] [Thread-65315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:09:03.958 [DEBUG] [Thread-65315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:09:03.959 [INFO] [Thread-65315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] client lang: <none>
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] server lang: <none>
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] kex follows: False
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:09:03.966 [DEBUG] [Thread-65315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:09:03.967 [DEBUG] [Thread-65315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:09:03.967 [DEBUG] [Thread-65315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:09:03.967 [DEBUG] [Thread-65315] [transport.py] [_log()] Compression: none
2025-11-18T02:09:03.967 [DEBUG] [Thread-65315] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:09:04.025 [DEBUG] [Thread-65315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:09:04.025 [DEBUG] [Thread-65315] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:09:04.026 [DEBUG] [Thread-65315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:09:04.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:09:04.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:09:04.080 [DEBUG] [Thread-65315] [transport.py] [_log()] userauth is OK
2025-11-18T02:09:04.081 [DEBUG] [Thread-65315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:09:04.081 [DEBUG] [Thread-65315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:09:04.081 [DEBUG] [Thread-65315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:09:04.081 [DEBUG] [Thread-65315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:09:04.100 [INFO] [Thread-65315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:09:04.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:09:04.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:09:04.797 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:04.934 [DEBUG] [Thread-65315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:09:04.934 [DEBUG] [Thread-65315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:09:04.981 [DEBUG] [Thread-65315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:09:04.981 [DEBUG] [Thread-65315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:09:04.990 [DEBUG] [Thread-65315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:09:04.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:09:04.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:09: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') -> 00000000
2025-11-18T02:09:05.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:09:05.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:09:05.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:09:05.025 [DEBUG] [Thread-65315] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:09:07.955 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:12.998 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:17.028 [DEBUG] [Thread-65317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:18.374 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:32.072 [DEBUG] [Thread-65318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:35.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:09:35.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:09:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:09:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 9, 30), 10.24, 49.43, 0.0, 17.63, 12.36, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:09:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:09:30
2025-11-18T02:09:35.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:09:35.965 [DEBUG] [Thread-65319] [transport.py] [_log()] starting thread (client mode): 0xd07db250
2025-11-18T02:09:35.965 [DEBUG] [Thread-65319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:09:35.975 [DEBUG] [Thread-65319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:09:35.975 [INFO] [Thread-65319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] client lang: <none>
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] server lang: <none>
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] kex follows: False
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] Compression: none
2025-11-18T02:09:35.977 [DEBUG] [Thread-65319] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:09:35.985 [DEBUG] [Thread-65319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:09:35.986 [DEBUG] [Thread-65319] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:09:35.986 [DEBUG] [Thread-65319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:09:35.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:09:35.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:09:35.987 [DEBUG] [Thread-65319] [transport.py] [_log()] userauth is OK
2025-11-18T02:09:35.988 [DEBUG] [Thread-65319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:09:35.988 [DEBUG] [Thread-65319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:09:35.988 [DEBUG] [Thread-65319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:09:35.988 [DEBUG] [Thread-65319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:09:36.009 [INFO] [Thread-65319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:09:36.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:09:36.625 [DEBUG] [Thread-65319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:09:36.625 [DEBUG] [Thread-65319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:09:36.626 [DEBUG] [Thread-65319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:09:36.665 [DEBUG] [Thread-65319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:09:36.665 [DEBUG] [Thread-65319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:09:36.667 [DEBUG] [Thread-65319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:09:36.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:09:36.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:09:36.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:09:36.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:09:36.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:09:36.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:09:36.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:09:36.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:09:36.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:09:36.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.006292 -999.00  +12.40  13.65     53   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.1 13.7 161.2 19.5 12.9 -22.6 12.8 -21.7 12.6 -21.4 12.9 -22.4
2025-11-18T02:09:36.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:09:36.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:09:36.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.006292
2025-11-18T02:09:36.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:09:36.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:09:36.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:09:36.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:09:36.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:09:36.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:09:30', tmtdew=10.24, humidity=49.43, cloud=0.0, wind=17.63, temperature=12.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:09:30', seeing=1.27, atlas_timestamp='2025-11-18T00:09:03.629', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.01624999999999943, 0.10325000000000095, 0.036999999999999034, 0.01950000000000074, 0.11925000000000097, 0.08499999999999908, 0.06825000000000081, 0.08949999999999925, 0.029500000000000526, 0.14424999999999955, 0.10200000000000031, 0.14499999999999957, 0.12824999999999953, 0.10699999999999932, 0.07899999999999885, 0.10824999999999996, 0.13149999999999906, 0.2889999999999997, 0.15424999999999933, 0.12299999999999933, 0.10824999999999818, 0.06475000000000009, 0.2587500000000009, 0.238999999999999, 0.19350000000000023, 0.5367499999999996, 0.6115000000000004, 0.3050000000000006, 0.06300000000000061, 0.1440000000000019, 0.5200000000000005, 0.48574999999999946], zp_timestamp='2025-11-18T00:07:00')
2025-11-18T02:09:36.694 [DEBUG] [Thread-65319] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:09:36.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:09:36.789 [DEBUG] [Thread-65322] [transport.py] [_log()] starting thread (client mode): 0xd07da050
2025-11-18T02:09:36.789 [DEBUG] [Thread-65322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:09:36.804 [DEBUG] [Thread-65322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:09:36.804 [INFO] [Thread-65322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] client lang: <none>
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] server lang: <none>
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] kex follows: False
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:09:36.812 [DEBUG] [Thread-65322] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:09:36.813 [DEBUG] [Thread-65322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:09:36.813 [DEBUG] [Thread-65322] [transport.py] [_log()] Compression: none
2025-11-18T02:09:36.813 [DEBUG] [Thread-65322] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:09:36.868 [DEBUG] [Thread-65322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:09:36.868 [DEBUG] [Thread-65322] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:09:36.869 [DEBUG] [Thread-65322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:09:36.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:09:36.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:09:36.928 [DEBUG] [Thread-65322] [transport.py] [_log()] userauth is OK
2025-11-18T02:09:36.928 [DEBUG] [Thread-65322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:09:36.928 [DEBUG] [Thread-65322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:09:36.929 [DEBUG] [Thread-65322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:09:36.929 [DEBUG] [Thread-65322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:09:36.948 [INFO] [Thread-65322] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:09:36.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:09:36.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:09:37.760 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:37.787 [DEBUG] [Thread-65322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:09:37.788 [DEBUG] [Thread-65322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:09:37.835 [DEBUG] [Thread-65322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:09:37.835 [DEBUG] [Thread-65322] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:09:37.844 [DEBUG] [Thread-65322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:09:37.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:09:37.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:09:37.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:09:37.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:09:37.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:09:37.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:09:37.879 [DEBUG] [Thread-65322] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:09:42.148 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:47.101 [DEBUG] [Thread-65324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:47.362 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:47.363 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:51.521 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:09:55.952 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:01.496 [DEBUG] [Thread-65325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:02.033 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:02.130 [DEBUG] [Thread-65326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:06.415 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:07.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:10:07.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:10:07.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:10:08.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 10, 2), 10.22, 49.52, 0.0, 17.2, 12.36, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:10:08.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:10:02
2025-11-18T02:10:08.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:10:08.811 [DEBUG] [Thread-65327] [transport.py] [_log()] starting thread (client mode): 0xd07ae5c0
2025-11-18T02:10:08.811 [DEBUG] [Thread-65327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:10:08.831 [DEBUG] [Thread-65327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:10:08.831 [INFO] [Thread-65327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:10:08.834 [DEBUG] [Thread-65327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:10:08.834 [DEBUG] [Thread-65327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:10:08.834 [DEBUG] [Thread-65327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:10:08.834 [DEBUG] [Thread-65327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] client lang: <none>
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] server lang: <none>
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] kex follows: False
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:10:08.835 [DEBUG] [Thread-65327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:10:08.836 [DEBUG] [Thread-65327] [transport.py] [_log()] Compression: none
2025-11-18T02:10:08.836 [DEBUG] [Thread-65327] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:10:08.853 [DEBUG] [Thread-65327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:10:08.853 [DEBUG] [Thread-65327] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:10:08.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:10:08.854 [DEBUG] [Thread-65327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:10:08.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:10:08.856 [DEBUG] [Thread-65327] [transport.py] [_log()] userauth is OK
2025-11-18T02:10:08.856 [DEBUG] [Thread-65327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:10:08.856 [DEBUG] [Thread-65327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:10:08.856 [DEBUG] [Thread-65327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:10:08.856 [DEBUG] [Thread-65327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:10:08.880 [INFO] [Thread-65327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:10:08.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:10:12.028 [DEBUG] [Thread-65327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:10:12.029 [DEBUG] [Thread-65327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:10:12.029 [DEBUG] [Thread-65327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:10:12.069 [DEBUG] [Thread-65327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:10:12.069 [DEBUG] [Thread-65327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:10:12.072 [DEBUG] [Thread-65327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:10:12.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:10:12.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:10:12.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:10:12.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:10:12.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:10:12.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:10:12.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:10:12.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:10:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:10:12.141 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-11-18T02:10:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:10:02', tmtdew=10.22, humidity=49.52, cloud=0.0, wind=17.2, temperature=12.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:10:02', seeing=1.38, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.0417500000000004, 0.01624999999999943, 0.10325000000000095, 0.036999999999999034, 0.01950000000000074, 0.11925000000000097, 0.08499999999999908, 0.06825000000000081, 0.08949999999999925, 0.029500000000000526, 0.14424999999999955, 0.10200000000000031, 0.14499999999999957, 0.12824999999999953, 0.10699999999999932, 0.07899999999999885, 0.10824999999999996, 0.13149999999999906, 0.2889999999999997, 0.15424999999999933, 0.12299999999999933, 0.10824999999999818, 0.06475000000000009, 0.2587500000000009, 0.238999999999999, 0.19350000000000023, 0.5367499999999996, 0.6115000000000004, 0.3050000000000006, 0.06300000000000061, 0.1440000000000019, 0.5200000000000005, 0.48574999999999946], zp_timestamp='2025-11-18T00:07:00')
2025-11-18T02:10:12.142 [DEBUG] [Thread-65327] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:10:12.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:10:12.231 [DEBUG] [Thread-65330] [transport.py] [_log()] starting thread (client mode): 0xd0713a00
2025-11-18T02:10:12.231 [DEBUG] [Thread-65330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:10:12.246 [DEBUG] [Thread-65330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:10:12.247 [INFO] [Thread-65330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] client lang: <none>
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] server lang: <none>
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] kex follows: False
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:10:12.254 [DEBUG] [Thread-65330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:10:12.255 [DEBUG] [Thread-65330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:10:12.255 [DEBUG] [Thread-65330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:10:12.255 [DEBUG] [Thread-65330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:10:12.255 [DEBUG] [Thread-65330] [transport.py] [_log()] Compression: none
2025-11-18T02:10:12.255 [DEBUG] [Thread-65330] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:10:12.313 [DEBUG] [Thread-65330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:10:12.314 [DEBUG] [Thread-65330] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:10:12.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:10:12.315 [DEBUG] [Thread-65330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:10:12.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:10:12.372 [DEBUG] [Thread-65330] [transport.py] [_log()] userauth is OK
2025-11-18T02:10:12.372 [DEBUG] [Thread-65330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:10:12.372 [DEBUG] [Thread-65330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:10:12.373 [DEBUG] [Thread-65330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:10:12.373 [DEBUG] [Thread-65330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:10:12.392 [INFO] [Thread-65330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:10:12.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:10:12.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:10:13.242 [DEBUG] [Thread-65330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:10:13.242 [DEBUG] [Thread-65330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:10:13.290 [DEBUG] [Thread-65330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:10:13.290 [DEBUG] [Thread-65330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:10:13.299 [DEBUG] [Thread-65330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:10:13.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:10:13.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:10:13.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:10:13.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:10:13.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:10:13.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:10:13.334 [DEBUG] [Thread-65330] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:10:17.157 [DEBUG] [Thread-65332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:32.199 [DEBUG] [Thread-65333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:10:43.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:10:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:10:44.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 10, 34), 10.05, 50.36, 0.0, 20.82, 12.8, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:10:44.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:10:34
2025-11-18T02:10:44.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:10:44.317 [DEBUG] [Thread-65334] [transport.py] [_log()] starting thread (client mode): 0xd07abf70
2025-11-18T02:10:44.317 [DEBUG] [Thread-65334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:10:44.338 [DEBUG] [Thread-65334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:10:44.338 [INFO] [Thread-65334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] client lang: <none>
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] server lang: <none>
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] kex follows: False
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:10:44.341 [DEBUG] [Thread-65334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:10:44.342 [DEBUG] [Thread-65334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:10:44.342 [DEBUG] [Thread-65334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:10:44.342 [DEBUG] [Thread-65334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:10:44.342 [DEBUG] [Thread-65334] [transport.py] [_log()] Compression: none
2025-11-18T02:10:44.342 [DEBUG] [Thread-65334] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:10:44.349 [DEBUG] [Thread-65334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:10:44.349 [DEBUG] [Thread-65334] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:10:44.349 [DEBUG] [Thread-65334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:10:44.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:10:44.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:10:44.350 [DEBUG] [Thread-65334] [transport.py] [_log()] userauth is OK
2025-11-18T02:10:44.350 [DEBUG] [Thread-65334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:10:44.350 [DEBUG] [Thread-65334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:10:44.350 [DEBUG] [Thread-65334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:10:44.350 [DEBUG] [Thread-65334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:10:44.362 [INFO] [Thread-65334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:10:44.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:10:44.983 [DEBUG] [Thread-65334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:10:44.983 [DEBUG] [Thread-65334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:10:44.983 [DEBUG] [Thread-65334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:10:45.024 [DEBUG] [Thread-65334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:10:45.024 [DEBUG] [Thread-65334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:10:45.026 [DEBUG] [Thread-65334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:10:45.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:10:45.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:10:45.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:10:45.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:10:45.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:10:45.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:10:45.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.006639 -999.00  +12.40  11.01     53   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.1 11.0 156.2 15.4 12.9 -22.6 12.7 -21.7 12.5 -21.5 12.8 -22.3
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.006639
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:10:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:10:34', tmtdew=10.05, humidity=50.36, cloud=0.0, wind=20.82, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:10:34', seeing=1.32, atlas_timestamp='2025-11-18T00:09:33.610', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.01624999999999943, 0.10325000000000095, 0.036999999999999034, 0.01950000000000074, 0.11925000000000097, 0.08499999999999908, 0.06825000000000081, 0.08949999999999925, 0.029500000000000526, 0.14424999999999955, 0.10200000000000031, 0.14499999999999957, 0.12824999999999953, 0.10699999999999932, 0.07899999999999885, 0.10824999999999996, 0.13149999999999906, 0.2889999999999997, 0.15424999999999933, 0.12299999999999933, 0.10824999999999818, 0.06475000000000009, 0.2587500000000009, 0.238999999999999, 0.19350000000000023, 0.5367499999999996, 0.6115000000000004, 0.3050000000000006, 0.06300000000000061, 0.1440000000000019, 0.5200000000000005, 0.48574999999999946], zp_timestamp='2025-11-18T00:07:00')
2025-11-18T02:10:45.045 [DEBUG] [Thread-65334] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:10:45.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:10:45.129 [DEBUG] [Thread-65337] [transport.py] [_log()] starting thread (client mode): 0xd0757700
2025-11-18T02:10:45.129 [DEBUG] [Thread-65337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:10:45.144 [DEBUG] [Thread-65337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:10:45.144 [INFO] [Thread-65337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] client lang: <none>
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] server lang: <none>
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] kex follows: False
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] Compression: none
2025-11-18T02:10:45.152 [DEBUG] [Thread-65337] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:10:45.207 [DEBUG] [Thread-65337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:10:45.207 [DEBUG] [Thread-65337] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:10:45.207 [DEBUG] [Thread-65337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:10:45.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:10:45.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:10:45.269 [DEBUG] [Thread-65337] [transport.py] [_log()] userauth is OK
2025-11-18T02:10:45.269 [DEBUG] [Thread-65337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:10:45.269 [DEBUG] [Thread-65337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:10:45.269 [DEBUG] [Thread-65337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:10:45.269 [DEBUG] [Thread-65337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:10:45.283 [INFO] [Thread-65337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:10:45.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:10:45.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:10:46.132 [DEBUG] [Thread-65337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:10:46.132 [DEBUG] [Thread-65337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:10:46.180 [DEBUG] [Thread-65337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:10:46.180 [DEBUG] [Thread-65337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:10:46.188 [DEBUG] [Thread-65337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:10:46.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:10:46.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:10:46.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:10:46.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:10:46.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:10:46.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:10:46.219 [DEBUG] [Thread-65337] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:10:47.235 [DEBUG] [Thread-65339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:47.568 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:10:47.570 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:01.572 [DEBUG] [Thread-65340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:02.282 [DEBUG] [Thread-65341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:09.745 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:12.836 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:11:16.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:11:16.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:11:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 11, 6), 10.14, 49.93, 0.0, 16.34, 12.43, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:11:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:11:06
2025-11-18T02:11:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:11:17.161 [DEBUG] [Thread-65342] [transport.py] [_log()] starting thread (client mode): 0xd07db010
2025-11-18T02:11:17.161 [DEBUG] [Thread-65342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:11:17.181 [DEBUG] [Thread-65342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:11:17.181 [INFO] [Thread-65342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:11:17.183 [DEBUG] [Thread-65342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:11:17.183 [DEBUG] [Thread-65342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:11:17.183 [DEBUG] [Thread-65342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:11:17.183 [DEBUG] [Thread-65342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:11:17.183 [DEBUG] [Thread-65342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:11:17.183 [DEBUG] [Thread-65342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] client lang: <none>
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] server lang: <none>
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] kex follows: False
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] Compression: none
2025-11-18T02:11:17.184 [DEBUG] [Thread-65342] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:11:17.196 [DEBUG] [Thread-65342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:11:17.196 [DEBUG] [Thread-65342] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:11:17.197 [DEBUG] [Thread-65342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:11:17.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:11:17.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:11:17.199 [DEBUG] [Thread-65342] [transport.py] [_log()] userauth is OK
2025-11-18T02:11:17.199 [DEBUG] [Thread-65342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:11:17.199 [DEBUG] [Thread-65342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:11:17.199 [DEBUG] [Thread-65342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:11:17.199 [DEBUG] [Thread-65342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:11:17.218 [INFO] [Thread-65342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:11:17.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:11:17.308 [DEBUG] [Thread-65344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:17.985 [DEBUG] [Thread-65342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:11:17.985 [DEBUG] [Thread-65342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:11:17.985 [DEBUG] [Thread-65342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:11:18.026 [DEBUG] [Thread-65342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:11:18.027 [DEBUG] [Thread-65342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:11:18.029 [DEBUG] [Thread-65342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:11:18.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:11:18.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:11:18.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:11:18.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:11:18.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:11:18.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:11:18.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:11:18.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:11:18.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:11:18.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.007334 -999.00  +12.50  12.87     54   +3.40 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.0 12.9 159.6 16.5 12.9 -22.7 12.8 -21.6 12.5 -21.6 12.9 -22.4
2025-11-18T02:11:18.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:11:18.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:11:18.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.007334
2025-11-18T02:11:18.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:11:18.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:11:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:11:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:11:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:11:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:11:06', tmtdew=10.14, humidity=49.93, cloud=0.0, wind=16.34, temperature=12.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:11:06', seeing=1.32, atlas_timestamp='2025-11-18T00:10:33.658', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:10:00')
2025-11-18T02:11:18.053 [DEBUG] [Thread-65342] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:11:18.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:11:18.148 [DEBUG] [Thread-65346] [transport.py] [_log()] starting thread (client mode): 0xd317c490
2025-11-18T02:11:18.148 [DEBUG] [Thread-65346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:11:18.163 [DEBUG] [Thread-65346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:11:18.164 [INFO] [Thread-65346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] client lang: <none>
2025-11-18T02:11:18.171 [DEBUG] [Thread-65346] [transport.py] [_log()] server lang: <none>
2025-11-18T02:11:18.172 [DEBUG] [Thread-65346] [transport.py] [_log()] kex follows: False
2025-11-18T02:11:18.172 [DEBUG] [Thread-65346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:11:18.172 [DEBUG] [Thread-65346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:11:18.172 [DEBUG] [Thread-65346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:11:18.172 [DEBUG] [Thread-65346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:11:18.172 [DEBUG] [Thread-65346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:11:18.172 [DEBUG] [Thread-65346] [transport.py] [_log()] Compression: none
2025-11-18T02:11:18.172 [DEBUG] [Thread-65346] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:11:18.228 [DEBUG] [Thread-65346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:11:18.228 [DEBUG] [Thread-65346] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:11:18.229 [DEBUG] [Thread-65346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:11:18.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:11:18.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:11:18.284 [DEBUG] [Thread-65346] [transport.py] [_log()] userauth is OK
2025-11-18T02:11:18.284 [DEBUG] [Thread-65346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:11:18.284 [DEBUG] [Thread-65346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:11:18.284 [DEBUG] [Thread-65346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:11:18.284 [DEBUG] [Thread-65346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:11:18.304 [INFO] [Thread-65346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:11:18.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:11:18.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:11:19.185 [DEBUG] [Thread-65346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:11:19.185 [DEBUG] [Thread-65346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:11:19.233 [DEBUG] [Thread-65346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:11:19.233 [DEBUG] [Thread-65346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:11:19.241 [DEBUG] [Thread-65346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:11:19.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:11:19.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:11:19.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:11:19.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:11:19.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:11:19.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:11:19.273 [DEBUG] [Thread-65346] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:11:32.336 [DEBUG] [Thread-65348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:47.389 [DEBUG] [Thread-65349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:47.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:47.774 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:11:49.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:11:49.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:11:49.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:11:49.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 11, 38), 10.23, 49.82, 0.0, 13.8, 12.41, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:11:49.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:11:38
2025-11-18T02:11:50.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:11:50.230 [DEBUG] [Thread-65350] [transport.py] [_log()] starting thread (client mode): 0xd317d9c0
2025-11-18T02:11:50.230 [DEBUG] [Thread-65350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:11:50.251 [DEBUG] [Thread-65350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:11:50.251 [INFO] [Thread-65350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:11:50.254 [DEBUG] [Thread-65350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:11:50.254 [DEBUG] [Thread-65350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:11:50.254 [DEBUG] [Thread-65350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] client lang: <none>
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] server lang: <none>
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] kex follows: False
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] Compression: none
2025-11-18T02:11:50.255 [DEBUG] [Thread-65350] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:11:50.273 [DEBUG] [Thread-65350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:11:50.274 [DEBUG] [Thread-65350] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:11:50.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:11:50.274 [DEBUG] [Thread-65350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:11:50.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:11:50.276 [DEBUG] [Thread-65350] [transport.py] [_log()] userauth is OK
2025-11-18T02:11:50.276 [DEBUG] [Thread-65350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:11:50.277 [DEBUG] [Thread-65350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:11:50.277 [DEBUG] [Thread-65350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:11:50.277 [DEBUG] [Thread-65350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:11:50.311 [INFO] [Thread-65350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:11:50.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:11:50.943 [DEBUG] [Thread-65350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:11:50.943 [DEBUG] [Thread-65350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:11:50.943 [DEBUG] [Thread-65350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:11:50.984 [DEBUG] [Thread-65350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:11:50.985 [DEBUG] [Thread-65350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:11:50.987 [DEBUG] [Thread-65350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:11:50.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:11:50.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:11:51.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:11:51.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:11:51.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:11:51.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:11:51.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:11:51.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:11:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:11:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.007681 -999.00  +12.50  13.51     54   +3.40 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.5 13.5 162.5 18.4 12.9 -22.7 12.8 -21.7 12.6 -21.5 12.8 -22.4
2025-11-18T02:11:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:11:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:11:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.007681
2025-11-18T02:11:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:11:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:11:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:11:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:11:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:11:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:11:38', tmtdew=10.23, humidity=49.82, cloud=0.0, wind=13.8, temperature=12.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:11:38', seeing=1.16, atlas_timestamp='2025-11-18T00:11:03.638', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:10:00')
2025-11-18T02:11:51.010 [DEBUG] [Thread-65350] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:11:51.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:11:51.108 [DEBUG] [Thread-65353] [transport.py] [_log()] starting thread (client mode): 0xd07125c0
2025-11-18T02:11:51.108 [DEBUG] [Thread-65353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:11:51.123 [DEBUG] [Thread-65353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:11:51.124 [INFO] [Thread-65353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:11:51.131 [DEBUG] [Thread-65353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:11:51.131 [DEBUG] [Thread-65353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] client lang: <none>
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] server lang: <none>
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] kex follows: False
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:11:51.132 [DEBUG] [Thread-65353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:11:51.133 [DEBUG] [Thread-65353] [transport.py] [_log()] Compression: none
2025-11-18T02:11:51.133 [DEBUG] [Thread-65353] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:11:51.188 [DEBUG] [Thread-65353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:11:51.189 [DEBUG] [Thread-65353] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:11:51.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:11:51.189 [DEBUG] [Thread-65353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:11:51.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:11:51.248 [DEBUG] [Thread-65353] [transport.py] [_log()] userauth is OK
2025-11-18T02:11:51.248 [DEBUG] [Thread-65353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:11:51.248 [DEBUG] [Thread-65353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:11:51.248 [DEBUG] [Thread-65353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:11:51.248 [DEBUG] [Thread-65353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:11:51.262 [INFO] [Thread-65353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:11:51.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:11:51.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:11:52.128 [DEBUG] [Thread-65353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:11:52.128 [DEBUG] [Thread-65353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:11:52.175 [DEBUG] [Thread-65353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:11:52.175 [DEBUG] [Thread-65353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:11:52.184 [DEBUG] [Thread-65353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:11:52.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:11:52.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:11:52.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:11:52.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:11:52.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:11:52.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:11:52.219 [DEBUG] [Thread-65353] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:12:01.645 [DEBUG] [Thread-65355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:12:02.423 [DEBUG] [Thread-65356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:12:17.464 [DEBUG] [Thread-65357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:12:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:12:22.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:12:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:12:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 12, 10), 10.25, 49.7, 0.0, 15.33, 12.37, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:12:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:12:10
2025-11-18T02:12:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:12:23.166 [DEBUG] [Thread-65358] [transport.py] [_log()] starting thread (client mode): 0xd317c8b0
2025-11-18T02:12:23.167 [DEBUG] [Thread-65358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:12:23.197 [DEBUG] [Thread-65358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:12:23.198 [INFO] [Thread-65358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:12:23.199 [DEBUG] [Thread-65358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:12:23.199 [DEBUG] [Thread-65358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] client lang: <none>
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] server lang: <none>
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] kex follows: False
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] Compression: none
2025-11-18T02:12:23.200 [DEBUG] [Thread-65358] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:12:23.217 [DEBUG] [Thread-65358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:12:23.218 [DEBUG] [Thread-65358] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:12:23.218 [DEBUG] [Thread-65358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:12:23.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:12:23.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:12:23.220 [DEBUG] [Thread-65358] [transport.py] [_log()] userauth is OK
2025-11-18T02:12:23.220 [DEBUG] [Thread-65358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:12:23.220 [DEBUG] [Thread-65358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:12:23.220 [DEBUG] [Thread-65358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:12:23.221 [DEBUG] [Thread-65358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:12:23.240 [INFO] [Thread-65358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:12:23.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:12:24.003 [DEBUG] [Thread-65358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:12:24.003 [DEBUG] [Thread-65358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:12:24.003 [DEBUG] [Thread-65358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:12:24.044 [DEBUG] [Thread-65358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:12:24.044 [DEBUG] [Thread-65358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:12:24.047 [DEBUG] [Thread-65358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:12:24.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:12:24.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:12:24.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:12:24.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:12:24.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:12:24.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:12:24.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:12:24.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:12:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:12:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.008028 -999.00  +12.50  13.75     54   +3.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.0 13.8 162.0 18.6 12.9 -22.6 12.8 -21.6 12.6 -21.5 12.8 -22.4
2025-11-18T02:12:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:12:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:12:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.008028
2025-11-18T02:12:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:12:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:12:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:12:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:12:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:12:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:12:10', tmtdew=10.25, humidity=49.7, cloud=0.0, wind=15.33, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:12:10', seeing=1.16, atlas_timestamp='2025-11-18T00:11:33.619', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:10:00')
2025-11-18T02:12:24.072 [DEBUG] [Thread-65358] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:12:24.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:12:24.168 [DEBUG] [Thread-65361] [transport.py] [_log()] starting thread (client mode): 0xd0754af0
2025-11-18T02:12:24.169 [DEBUG] [Thread-65361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:12:24.183 [DEBUG] [Thread-65361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:12:24.183 [INFO] [Thread-65361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:12:24.191 [DEBUG] [Thread-65361] [transport.py] [_log()] client lang: <none>
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] server lang: <none>
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] kex follows: False
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] Compression: none
2025-11-18T02:12:24.192 [DEBUG] [Thread-65361] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:12:24.248 [DEBUG] [Thread-65361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:12:24.249 [DEBUG] [Thread-65361] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:12:24.249 [DEBUG] [Thread-65361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:12:24.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:12:24.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:12:24.304 [DEBUG] [Thread-65361] [transport.py] [_log()] userauth is OK
2025-11-18T02:12:24.305 [DEBUG] [Thread-65361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:12:24.305 [DEBUG] [Thread-65361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:12:24.305 [DEBUG] [Thread-65361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:12:24.305 [DEBUG] [Thread-65361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:12:24.323 [INFO] [Thread-65361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:12:24.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:12:24.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:12:25.171 [DEBUG] [Thread-65361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:12:25.171 [DEBUG] [Thread-65361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:12:25.219 [DEBUG] [Thread-65361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:12:25.219 [DEBUG] [Thread-65361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:12:25.228 [DEBUG] [Thread-65361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:12:25.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:12: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')
2025-11-18T02:12: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
2025-11-18T02:12:25.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:12:25.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:12:25.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:12:25.262 [DEBUG] [Thread-65361] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:12:32.493 [DEBUG] [Thread-65363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:12:47.543 [DEBUG] [Thread-65364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:12:47.977 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:12:47.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:12:55.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:12:55.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:12:55.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:12:55.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 12, 42), 10.09, 49.93, 0.0, 18.67, 12.33, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:12:55.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:12:42
2025-11-18T02:12:56.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:12:56.206 [DEBUG] [Thread-65365] [transport.py] [_log()] starting thread (client mode): 0xd07a3af0
2025-11-18T02:12:56.206 [DEBUG] [Thread-65365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:12:56.227 [DEBUG] [Thread-65365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:12:56.227 [INFO] [Thread-65365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:12:56.230 [DEBUG] [Thread-65365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:12:56.230 [DEBUG] [Thread-65365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:12:56.230 [DEBUG] [Thread-65365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:12:56.230 [DEBUG] [Thread-65365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:12:56.230 [DEBUG] [Thread-65365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:12:56.230 [DEBUG] [Thread-65365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:12:56.230 [DEBUG] [Thread-65365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] client lang: <none>
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] server lang: <none>
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] kex follows: False
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:12:56.231 [DEBUG] [Thread-65365] [transport.py] [_log()] Compression: none
2025-11-18T02:12:56.232 [DEBUG] [Thread-65365] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:12:56.245 [DEBUG] [Thread-65365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:12:56.245 [DEBUG] [Thread-65365] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:12:56.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:12:56.247 [DEBUG] [Thread-65365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:12:56.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:12:56.248 [DEBUG] [Thread-65365] [transport.py] [_log()] userauth is OK
2025-11-18T02:12:56.249 [DEBUG] [Thread-65365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:12:56.249 [DEBUG] [Thread-65365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:12:56.249 [DEBUG] [Thread-65365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:12:56.249 [DEBUG] [Thread-65365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:12:56.269 [INFO] [Thread-65365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:12:56.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:12:56.900 [DEBUG] [Thread-65365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:12:56.900 [DEBUG] [Thread-65365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:12:56.901 [DEBUG] [Thread-65365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:12:56.941 [DEBUG] [Thread-65365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:12:56.941 [DEBUG] [Thread-65365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:12:56.944 [DEBUG] [Thread-65365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:12:56.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:12:56.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:12:56.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:12:56.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:12:56.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:12:56.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:12:56.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:12:56.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:12:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:12:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.008375 -999.00  +12.50  11.07     54   +3.40 1 2 1 1 1     0    0 -999.00 0.00 ZNEsW 9.6 11.1 163.2 15.7 12.9 -22.9 12.7 -21.6 12.5 -21.8 12.8 -22.8
2025-11-18T02:12:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:12:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:12:56.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.008375
2025-11-18T02:12:56.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:12:56.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:12:56.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:12:56.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:12:56.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T02:12:56.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:12:42', tmtdew=10.09, humidity=49.93, cloud=0.0, wind=18.67, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:12:42', seeing=1.26, atlas_timestamp='2025-11-18T00:12:03.600', atlas_cloud=2, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:10:00')
2025-11-18T02:12:56.968 [DEBUG] [Thread-65365] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:12:57.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:12:57.063 [DEBUG] [Thread-65368] [transport.py] [_log()] starting thread (client mode): 0xd317e950
2025-11-18T02:12:57.063 [DEBUG] [Thread-65368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:12:57.078 [DEBUG] [Thread-65368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:12:57.079 [INFO] [Thread-65368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:12:57.086 [DEBUG] [Thread-65368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:12:57.086 [DEBUG] [Thread-65368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] client lang: <none>
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] server lang: <none>
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] kex follows: False
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] Compression: none
2025-11-18T02:12:57.087 [DEBUG] [Thread-65368] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:12:57.144 [DEBUG] [Thread-65368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:12:57.145 [DEBUG] [Thread-65368] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:12:57.145 [DEBUG] [Thread-65368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:12:57.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:12:57.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:12:57.200 [DEBUG] [Thread-65368] [transport.py] [_log()] userauth is OK
2025-11-18T02:12:57.200 [DEBUG] [Thread-65368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:12:57.200 [DEBUG] [Thread-65368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:12:57.200 [DEBUG] [Thread-65368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:12:57.200 [DEBUG] [Thread-65368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:12:57.219 [INFO] [Thread-65368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:12:57.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:12:57.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:12:58.059 [DEBUG] [Thread-65368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:12:58.059 [DEBUG] [Thread-65368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:12:58.106 [DEBUG] [Thread-65368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:12:58.107 [DEBUG] [Thread-65368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:12:58.116 [DEBUG] [Thread-65368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:12:58.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:12:58.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:12:58.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:12:58.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:12:58.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:12:58.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:12:58.151 [DEBUG] [Thread-65368] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:13:01.716 [DEBUG] [Thread-65370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:13:02.570 [DEBUG] [Thread-65371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:13:17.603 [DEBUG] [Thread-65372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:13:28.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:13:28.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:13:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:13:28.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 13, 14), 10.06, 50.05, 0.0, 19.64, 12.4, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:13:28.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:13:14
2025-11-18T02:13:28.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:13:29.081 [DEBUG] [Thread-65373] [transport.py] [_log()] starting thread (client mode): 0xd317e410
2025-11-18T02:13:29.081 [DEBUG] [Thread-65373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:13:29.096 [DEBUG] [Thread-65373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:13:29.097 [INFO] [Thread-65373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:13:29.099 [DEBUG] [Thread-65373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:13:29.099 [DEBUG] [Thread-65373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:13:29.099 [DEBUG] [Thread-65373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:13:29.099 [DEBUG] [Thread-65373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:13:29.099 [DEBUG] [Thread-65373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] client lang: <none>
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] server lang: <none>
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] kex follows: False
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] Compression: none
2025-11-18T02:13:29.100 [DEBUG] [Thread-65373] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:13:29.119 [DEBUG] [Thread-65373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:13:29.119 [DEBUG] [Thread-65373] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:13:29.120 [DEBUG] [Thread-65373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:13:29.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:13:29.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:13:29.121 [DEBUG] [Thread-65373] [transport.py] [_log()] userauth is OK
2025-11-18T02:13:29.122 [DEBUG] [Thread-65373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:13:29.122 [DEBUG] [Thread-65373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:13:29.122 [DEBUG] [Thread-65373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:13:29.122 [DEBUG] [Thread-65373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:13:29.145 [INFO] [Thread-65373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:13:29.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:13:29.954 [DEBUG] [Thread-65373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:13:29.954 [DEBUG] [Thread-65373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:13:29.954 [DEBUG] [Thread-65373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:13:29.995 [DEBUG] [Thread-65373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:13:29.995 [DEBUG] [Thread-65373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:13:29.998 [DEBUG] [Thread-65373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:13:30.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:13:30.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:13:30.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:13:30.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:13:30.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:13:30.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:13:30.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:13:30.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:13:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:13:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.008723 -999.00  +12.40  14.42     53   +3.30 1 2 1 1 1     0    0 -999.00 0.00 ZNEsW 13.2 14.4 162.4 15.9 12.9 -22.9 12.8 -21.9 12.5 -21.7 12.8 -22.6
2025-11-18T02:13:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:13:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:13:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.008723
2025-11-18T02:13:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:13:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:13:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:13:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:13:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T02:13:30.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:13:14', tmtdew=10.06, humidity=50.05, cloud=0.0, wind=19.64, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:13:14', seeing=1.22, atlas_timestamp='2025-11-18T00:12:33.667', atlas_cloud=2, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:10:00')
2025-11-18T02:13:30.024 [DEBUG] [Thread-65373] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:13:30.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:13:30.120 [DEBUG] [Thread-65376] [transport.py] [_log()] starting thread (client mode): 0xd07a9c30
2025-11-18T02:13:30.120 [DEBUG] [Thread-65376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:13:30.136 [DEBUG] [Thread-65376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:13:30.136 [INFO] [Thread-65376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:13:30.144 [DEBUG] [Thread-65376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:13:30.144 [DEBUG] [Thread-65376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:13:30.144 [DEBUG] [Thread-65376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] client lang: <none>
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] server lang: <none>
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] kex follows: False
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] Compression: none
2025-11-18T02:13:30.145 [DEBUG] [Thread-65376] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:13:30.203 [DEBUG] [Thread-65376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:13:30.203 [DEBUG] [Thread-65376] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:13:30.204 [DEBUG] [Thread-65376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:13:30.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:13:30.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:13:30.260 [DEBUG] [Thread-65376] [transport.py] [_log()] userauth is OK
2025-11-18T02:13:30.260 [DEBUG] [Thread-65376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:13:30.260 [DEBUG] [Thread-65376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:13:30.260 [DEBUG] [Thread-65376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:13:30.261 [DEBUG] [Thread-65376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:13:30.281 [INFO] [Thread-65376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:13:30.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:13:30.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:13:31.144 [DEBUG] [Thread-65376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:13:31.144 [DEBUG] [Thread-65376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:13:31.192 [DEBUG] [Thread-65376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:13:31.192 [DEBUG] [Thread-65376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:13:31.201 [DEBUG] [Thread-65376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:13:31.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:13:31.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:13:31.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:13:31.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:13:31.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:13:31.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:13:31.236 [DEBUG] [Thread-65376] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:13:32.629 [DEBUG] [Thread-65378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:13:47.670 [DEBUG] [Thread-65379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:13:48.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:13:48.181 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:14:01.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:14:01.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:14:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:14:01.786 [DEBUG] [Thread-65380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:14:01.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 13, 46), 10.19, 49.93, 0.0, 17.27, 12.37, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:14:01.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:13:46
2025-11-18T02:14:02.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:14:02.191 [DEBUG] [Thread-65381] [transport.py] [_log()] starting thread (client mode): 0xd07a3bb0
2025-11-18T02:14:02.191 [DEBUG] [Thread-65381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:14:02.212 [DEBUG] [Thread-65381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:14:02.212 [INFO] [Thread-65381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] client lang: <none>
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] server lang: <none>
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] kex follows: False
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:14:02.215 [DEBUG] [Thread-65381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:14:02.216 [DEBUG] [Thread-65381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:14:02.216 [DEBUG] [Thread-65381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:14:02.216 [DEBUG] [Thread-65381] [transport.py] [_log()] Compression: none
2025-11-18T02:14:02.216 [DEBUG] [Thread-65381] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:14:02.231 [DEBUG] [Thread-65381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:14:02.231 [DEBUG] [Thread-65381] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:14:02.231 [DEBUG] [Thread-65381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:14:02.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:14:02.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:14:02.232 [DEBUG] [Thread-65381] [transport.py] [_log()] userauth is OK
2025-11-18T02:14:02.232 [DEBUG] [Thread-65381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:14:02.232 [DEBUG] [Thread-65381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:14:02.232 [DEBUG] [Thread-65381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:14:02.232 [DEBUG] [Thread-65381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:14:02.241 [INFO] [Thread-65381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:14:02.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:14:02.695 [DEBUG] [Thread-65383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:14:02.865 [DEBUG] [Thread-65381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:14:02.865 [DEBUG] [Thread-65381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:14:02.866 [DEBUG] [Thread-65381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:14:02.906 [DEBUG] [Thread-65381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:14:02.907 [DEBUG] [Thread-65381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:14:02.910 [DEBUG] [Thread-65381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:14:02.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:14:02.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:14:02.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:14:02.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:14:02.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:14:02.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:14:02.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:14:02.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:14:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:14:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.009417 -999.00  +12.40  12.54     53   +3.30 1 2 1 1 1     0    0 -999.00 0.00 ZNEsW 10.5 12.5 159.2 17.4 12.9 -23.0 12.8 -21.9 12.5 -21.7 12.8 -22.6
2025-11-18T02:14:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:14:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:14:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.009417
2025-11-18T02:14:02.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:14:02.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:14:02.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:14:02.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:14:02.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T02:14:02.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:13:46', tmtdew=10.19, humidity=49.93, cloud=0.0, wind=17.27, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:13:46', seeing=1.22, atlas_timestamp='2025-11-18T00:13:33.629', atlas_cloud=2, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:10:00')
2025-11-18T02:14:02.934 [DEBUG] [Thread-65381] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:14:03.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:14:03.034 [DEBUG] [Thread-65385] [transport.py] [_log()] starting thread (client mode): 0xd07a3c40
2025-11-18T02:14:03.034 [DEBUG] [Thread-65385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:14:03.050 [DEBUG] [Thread-65385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:14:03.050 [INFO] [Thread-65385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] client lang: <none>
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] server lang: <none>
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] kex follows: False
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] Compression: none
2025-11-18T02:14:03.057 [DEBUG] [Thread-65385] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:14:03.117 [DEBUG] [Thread-65385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:14:03.117 [DEBUG] [Thread-65385] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:14:03.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:14:03.118 [DEBUG] [Thread-65385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:14:03.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:14:03.176 [DEBUG] [Thread-65385] [transport.py] [_log()] userauth is OK
2025-11-18T02:14:03.176 [DEBUG] [Thread-65385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:14:03.176 [DEBUG] [Thread-65385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:14:03.177 [DEBUG] [Thread-65385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:14:03.177 [DEBUG] [Thread-65385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:14:03.195 [INFO] [Thread-65385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:14:03.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:14:03.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:14:04.028 [DEBUG] [Thread-65385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:14:04.028 [DEBUG] [Thread-65385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:14:04.075 [DEBUG] [Thread-65385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:14:04.076 [DEBUG] [Thread-65385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:14:04.085 [DEBUG] [Thread-65385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:14:04.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:14:04.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:14:04.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:14:04.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:14:04.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:14:04.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:14:04.121 [DEBUG] [Thread-65385] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:14:17.724 [DEBUG] [Thread-65387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:14:32.772 [DEBUG] [Thread-65388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:14:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:14:34.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:14:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:14:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 14, 18), 10.16, 50.05, 0.0, 18.17, 12.37, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:14:34.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:14:18
2025-11-18T02:14:34.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:14:35.135 [DEBUG] [Thread-65389] [transport.py] [_log()] starting thread (client mode): 0xd07da200
2025-11-18T02:14:35.135 [DEBUG] [Thread-65389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:14:35.150 [DEBUG] [Thread-65389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:14:35.150 [INFO] [Thread-65389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] client lang: <none>
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] server lang: <none>
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] kex follows: False
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:14:35.153 [DEBUG] [Thread-65389] [transport.py] [_log()] Compression: none
2025-11-18T02:14:35.154 [DEBUG] [Thread-65389] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:14:35.169 [DEBUG] [Thread-65389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:14:35.169 [DEBUG] [Thread-65389] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:14:35.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:14:35.170 [DEBUG] [Thread-65389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:14:35.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:14:35.170 [DEBUG] [Thread-65389] [transport.py] [_log()] userauth is OK
2025-11-18T02:14:35.170 [DEBUG] [Thread-65389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:14:35.170 [DEBUG] [Thread-65389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:14:35.171 [DEBUG] [Thread-65389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:14:35.171 [DEBUG] [Thread-65389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:14:35.180 [INFO] [Thread-65389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:14:35.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:14:35.980 [DEBUG] [Thread-65389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:14:35.980 [DEBUG] [Thread-65389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:14:35.980 [DEBUG] [Thread-65389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:14:36.021 [DEBUG] [Thread-65389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:14:36.021 [DEBUG] [Thread-65389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:14:36.023 [DEBUG] [Thread-65389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:14:36.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:14:36.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:14:36.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:14:36.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:14:36.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:14:36.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:14:36.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.009764 -999.00  +12.40  11.94     54   +3.40 1 2 1 1 1     0    0 -999.00 0.00 ZNEsW 15.4 11.9 167.4 18.3 12.9 -23.1 12.8 -21.9 12.5 -21.8 12.8 -22.5
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.009764
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T02:14:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:14:18', tmtdew=10.16, humidity=50.05, cloud=0.0, wind=18.17, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:14:18', seeing=1.29, atlas_timestamp='2025-11-18T00:14:03.610', atlas_cloud=2, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:13:00')
2025-11-18T02:14:36.042 [DEBUG] [Thread-65389] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:14:36.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:14:36.131 [DEBUG] [Thread-65392] [transport.py] [_log()] starting thread (client mode): 0xd07d9240
2025-11-18T02:14:36.131 [DEBUG] [Thread-65392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:14:36.150 [DEBUG] [Thread-65392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:14:36.150 [INFO] [Thread-65392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] client lang: <none>
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] server lang: <none>
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] kex follows: False
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] Compression: none
2025-11-18T02:14:36.158 [DEBUG] [Thread-65392] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:14:36.217 [DEBUG] [Thread-65392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:14:36.217 [DEBUG] [Thread-65392] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:14:36.217 [DEBUG] [Thread-65392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:14:36.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:14:36.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:14:36.271 [DEBUG] [Thread-65392] [transport.py] [_log()] userauth is OK
2025-11-18T02:14:36.272 [DEBUG] [Thread-65392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:14:36.272 [DEBUG] [Thread-65392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:14:36.272 [DEBUG] [Thread-65392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:14:36.272 [DEBUG] [Thread-65392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:14:36.285 [INFO] [Thread-65392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:14:36.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:14:36.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:14:37.203 [DEBUG] [Thread-65392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:14:37.203 [DEBUG] [Thread-65392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:14:37.251 [DEBUG] [Thread-65392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:14:37.251 [DEBUG] [Thread-65392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:14:37.260 [DEBUG] [Thread-65392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:14:37.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:14:37.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:14: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
2025-11-18T02:14:37.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:14:37.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:14:37.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:14:37.291 [DEBUG] [Thread-65392] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:14:47.797 [DEBUG] [Thread-65394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:14:48.386 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:14:48.388 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:15:01.886 [DEBUG] [Thread-65395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:15:02.847 [DEBUG] [Thread-65396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:15:07.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:15:07.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:15:07.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:15:07.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 14, 50), 10.05, 50.08, 0.0, 19.23, 12.43, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:15:07.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:14:50
2025-11-18T02:15:08.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:15:08.253 [DEBUG] [Thread-65397] [transport.py] [_log()] starting thread (client mode): 0xd07a2530
2025-11-18T02:15:08.253 [DEBUG] [Thread-65397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:15:08.269 [DEBUG] [Thread-65397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:15:08.269 [INFO] [Thread-65397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:15:08.272 [DEBUG] [Thread-65397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:15:08.272 [DEBUG] [Thread-65397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:15:08.272 [DEBUG] [Thread-65397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:15:08.272 [DEBUG] [Thread-65397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:15:08.272 [DEBUG] [Thread-65397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:15:08.272 [DEBUG] [Thread-65397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] client lang: <none>
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] server lang: <none>
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] kex follows: False
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] Compression: none
2025-11-18T02:15:08.273 [DEBUG] [Thread-65397] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:15:08.289 [DEBUG] [Thread-65397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:15:08.289 [DEBUG] [Thread-65397] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:15:08.290 [DEBUG] [Thread-65397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:15:08.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:15:08.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:15:08.291 [DEBUG] [Thread-65397] [transport.py] [_log()] userauth is OK
2025-11-18T02:15:08.292 [DEBUG] [Thread-65397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:15:08.292 [DEBUG] [Thread-65397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:15:08.292 [DEBUG] [Thread-65397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:15:08.292 [DEBUG] [Thread-65397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:15:08.309 [INFO] [Thread-65397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:15:08.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:15:09.651 [DEBUG] [Thread-65397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:15:09.651 [DEBUG] [Thread-65397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:15:09.651 [DEBUG] [Thread-65397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:15:09.692 [DEBUG] [Thread-65397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:15:09.692 [DEBUG] [Thread-65397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:15:09.695 [DEBUG] [Thread-65397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:15:09.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:15:09.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:15:09.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:15:09.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:15:09.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:15:09.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:15:09.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:15:09.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:15:09.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:15:09.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.010112 -999.00  +12.40  14.18     54   +3.50 1 2 1 1 1     0    0 -999.00 0.00 ZNEsW 13.7 14.2 168.2 18.7 12.9 -23.0 12.8 -21.9 12.5 -21.5 12.8 -22.7
2025-11-18T02:15:09.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:15:09.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:15:09.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.010112
2025-11-18T02:15:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:15:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:15:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:15:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:15:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T02:15:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:14:50', tmtdew=10.05, humidity=50.08, cloud=0.0, wind=19.23, temperature=12.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:14:50', seeing=1.32, atlas_timestamp='2025-11-18T00:14:33.677', atlas_cloud=2, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:13:00')
2025-11-18T02:15:09.754 [DEBUG] [Thread-65397] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:15:09.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:15:09.863 [DEBUG] [Thread-65400] [transport.py] [_log()] starting thread (client mode): 0xd317c8b0
2025-11-18T02:15:09.863 [DEBUG] [Thread-65400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:15:09.882 [DEBUG] [Thread-65400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:15:09.883 [INFO] [Thread-65400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] client lang: <none>
2025-11-18T02:15:09.890 [DEBUG] [Thread-65400] [transport.py] [_log()] server lang: <none>
2025-11-18T02:15:09.891 [DEBUG] [Thread-65400] [transport.py] [_log()] kex follows: False
2025-11-18T02:15:09.891 [DEBUG] [Thread-65400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:15:09.891 [DEBUG] [Thread-65400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:15:09.891 [DEBUG] [Thread-65400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:15:09.891 [DEBUG] [Thread-65400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:15:09.891 [DEBUG] [Thread-65400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:15:09.891 [DEBUG] [Thread-65400] [transport.py] [_log()] Compression: none
2025-11-18T02:15:09.891 [DEBUG] [Thread-65400] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:15:09.948 [DEBUG] [Thread-65400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:15:09.949 [DEBUG] [Thread-65400] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:15:09.949 [DEBUG] [Thread-65400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:15:09.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:15:09.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:15:10.004 [DEBUG] [Thread-65400] [transport.py] [_log()] userauth is OK
2025-11-18T02:15:10.004 [DEBUG] [Thread-65400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:15:10.004 [DEBUG] [Thread-65400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:15:10.004 [DEBUG] [Thread-65400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:15:10.004 [DEBUG] [Thread-65400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:15:10.029 [INFO] [Thread-65400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:15:10.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:15:10.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:15:10.887 [DEBUG] [Thread-65400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:15:10.888 [DEBUG] [Thread-65400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:15:10.935 [DEBUG] [Thread-65400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:15:10.935 [DEBUG] [Thread-65400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:15:10.944 [DEBUG] [Thread-65400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:15:10.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:15:10.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:15:10.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:15:10.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:15:10.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:15:10.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:15:10.979 [DEBUG] [Thread-65400] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:15:17.871 [DEBUG] [Thread-65402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:15:32.912 [DEBUG] [Thread-65403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:15:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:15:41.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:15:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:15:41.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 15, 22), 10.07, 50.02, 0.0, 19.16, 12.4, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:15:41.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:15:22
2025-11-18T02:15:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:15:41.950 [DEBUG] [Thread-65404] [transport.py] [_log()] starting thread (client mode): 0xd317ecb0
2025-11-18T02:15:41.950 [DEBUG] [Thread-65404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:15:41.965 [DEBUG] [Thread-65404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:15:41.965 [INFO] [Thread-65404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] client lang: <none>
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] server lang: <none>
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] kex follows: False
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:15:41.966 [DEBUG] [Thread-65404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:15:41.967 [DEBUG] [Thread-65404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:15:41.967 [DEBUG] [Thread-65404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:15:41.967 [DEBUG] [Thread-65404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:15:41.967 [DEBUG] [Thread-65404] [transport.py] [_log()] Compression: none
2025-11-18T02:15:41.967 [DEBUG] [Thread-65404] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:15:41.974 [DEBUG] [Thread-65404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:15:41.974 [DEBUG] [Thread-65404] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:15:41.974 [DEBUG] [Thread-65404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:15:41.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:15:41.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:15:41.975 [DEBUG] [Thread-65404] [transport.py] [_log()] userauth is OK
2025-11-18T02:15:41.976 [DEBUG] [Thread-65404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:15:41.976 [DEBUG] [Thread-65404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:15:41.976 [DEBUG] [Thread-65404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:15:41.976 [DEBUG] [Thread-65404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:15:41.995 [INFO] [Thread-65404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:15:41.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:15:43.537 [DEBUG] [Thread-65404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:15:43.538 [DEBUG] [Thread-65404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:15:43.538 [DEBUG] [Thread-65404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:15:43.578 [DEBUG] [Thread-65404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:15:43.579 [DEBUG] [Thread-65404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:15:43.581 [DEBUG] [Thread-65404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:15:43.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:15:43.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:15:43.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:15:43.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:15:43.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:15:43.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:15:43.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:15:43.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:15:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:15:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.010458 -999.00  +12.40  14.96     54   +3.50 1 2 1 1 1     0    0 -999.00 0.00 ZNEsW 11.6 15.0 168.4 17.8 12.9 -23.1 12.7 -22.1 12.5 -21.9 12.8 -22.8
2025-11-18T02:15:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:15:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:15:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.010458
2025-11-18T02:15:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:15:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:15:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:15:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:15:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T02:15:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:15:22', tmtdew=10.07, humidity=50.02, cloud=0.0, wind=19.16, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:15:22', seeing=1.26, atlas_timestamp='2025-11-18T00:15:03.571', atlas_cloud=2, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:13:00')
2025-11-18T02:15:43.608 [DEBUG] [Thread-65404] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:15:43.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:15:43.704 [DEBUG] [Thread-65407] [transport.py] [_log()] starting thread (client mode): 0xd07ab190
2025-11-18T02:15:43.704 [DEBUG] [Thread-65407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:15:43.721 [DEBUG] [Thread-65407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:15:43.726 [INFO] [Thread-65407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] client lang: <none>
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] server lang: <none>
2025-11-18T02:15:43.729 [DEBUG] [Thread-65407] [transport.py] [_log()] kex follows: False
2025-11-18T02:15:43.730 [DEBUG] [Thread-65407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:15:43.730 [DEBUG] [Thread-65407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:15:43.730 [DEBUG] [Thread-65407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:15:43.730 [DEBUG] [Thread-65407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:15:43.730 [DEBUG] [Thread-65407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:15:43.730 [DEBUG] [Thread-65407] [transport.py] [_log()] Compression: none
2025-11-18T02:15:43.730 [DEBUG] [Thread-65407] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:15:43.796 [DEBUG] [Thread-65407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:15:43.796 [DEBUG] [Thread-65407] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:15:43.797 [DEBUG] [Thread-65407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:15:43.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:15:43.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:15:43.852 [DEBUG] [Thread-65407] [transport.py] [_log()] userauth is OK
2025-11-18T02:15:43.852 [DEBUG] [Thread-65407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:15:43.852 [DEBUG] [Thread-65407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:15:43.852 [DEBUG] [Thread-65407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:15:43.852 [DEBUG] [Thread-65407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:15:43.871 [INFO] [Thread-65407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:15:43.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:15:43.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:15:44.809 [DEBUG] [Thread-65407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:15:44.810 [DEBUG] [Thread-65407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:15:44.859 [DEBUG] [Thread-65407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:15:44.859 [DEBUG] [Thread-65407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:15:44.867 [DEBUG] [Thread-65407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:15:44.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:15: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')
2025-11-18T02:15:44.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:15:44.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:15:44.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:15:44.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:15:44.901 [DEBUG] [Thread-65407] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:15:47.941 [DEBUG] [Thread-65409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:15:48.589 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:15:48.590 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:16:01.963 [DEBUG] [Thread-65410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:16:02.979 [DEBUG] [Thread-65411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:16:14.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:16:14.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:16: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
2025-11-18T02:16:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 15, 54), 10.11, 50.03, 0.0, 17.79, 12.42, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:16:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:15:54
2025-11-18T02:16:15.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:16:15.859 [DEBUG] [Thread-65412] [transport.py] [_log()] starting thread (client mode): 0xd07a93f0
2025-11-18T02:16:15.859 [DEBUG] [Thread-65412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:16:15.882 [DEBUG] [Thread-65412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:16:15.882 [INFO] [Thread-65412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:16:15.886 [DEBUG] [Thread-65412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:16:15.886 [DEBUG] [Thread-65412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:16:15.886 [DEBUG] [Thread-65412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:16:15.886 [DEBUG] [Thread-65412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:16:15.886 [DEBUG] [Thread-65412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:16:15.886 [DEBUG] [Thread-65412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] client lang: <none>
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] server lang: <none>
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] kex follows: False
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] Compression: none
2025-11-18T02:16:15.887 [DEBUG] [Thread-65412] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:16:15.903 [DEBUG] [Thread-65412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:16:15.904 [DEBUG] [Thread-65412] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:16:15.904 [DEBUG] [Thread-65412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:16:15.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:16:15.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:16:15.906 [DEBUG] [Thread-65412] [transport.py] [_log()] userauth is OK
2025-11-18T02:16:15.907 [DEBUG] [Thread-65412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:16:15.907 [DEBUG] [Thread-65412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:16:15.907 [DEBUG] [Thread-65412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:16:15.907 [DEBUG] [Thread-65412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:16:15.943 [INFO] [Thread-65412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:16:15.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:16:16.615 [DEBUG] [Thread-65412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:16:16.615 [DEBUG] [Thread-65412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:16:16.615 [DEBUG] [Thread-65412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:16:16.655 [DEBUG] [Thread-65412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:16:16.656 [DEBUG] [Thread-65412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:16:16.659 [DEBUG] [Thread-65412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:16:16.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:16:16.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:16:16.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:16:16.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:16:16.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:16:16.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:16:16.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:16:16.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:16:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:16:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.010806 -999.00  +12.40  17.81     55   +3.60 1 2 1 1 1     0    0 -999.00 0.00 ZNEsW 14.5 17.8 165.8 20.3 12.9 -23.2 12.7 -22.1 12.5 -21.7 12.8 -22.7
2025-11-18T02:16:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:16:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:16:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.010806
2025-11-18T02:16:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:16:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:16:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:16:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:16:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T02:16:16.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:15:54', tmtdew=10.11, humidity=50.03, cloud=0.0, wind=17.79, temperature=12.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:15:54', seeing=1.26, atlas_timestamp='2025-11-18T00:15:33.638', atlas_cloud=2, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:13:00')
2025-11-18T02:16:16.686 [DEBUG] [Thread-65412] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:16:16.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:16:16.783 [DEBUG] [Thread-65415] [transport.py] [_log()] starting thread (client mode): 0xd31513f0
2025-11-18T02:16:16.783 [DEBUG] [Thread-65415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:16:16.803 [DEBUG] [Thread-65415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:16:16.803 [INFO] [Thread-65415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] client lang: <none>
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] server lang: <none>
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] kex follows: False
2025-11-18T02:16:16.811 [DEBUG] [Thread-65415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:16:16.812 [DEBUG] [Thread-65415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:16:16.812 [DEBUG] [Thread-65415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:16:16.812 [DEBUG] [Thread-65415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:16:16.812 [DEBUG] [Thread-65415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:16:16.812 [DEBUG] [Thread-65415] [transport.py] [_log()] Compression: none
2025-11-18T02:16:16.812 [DEBUG] [Thread-65415] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:16:16.868 [DEBUG] [Thread-65415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:16:16.868 [DEBUG] [Thread-65415] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:16:16.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:16:16.870 [DEBUG] [Thread-65415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:16:16.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:16:16.924 [DEBUG] [Thread-65415] [transport.py] [_log()] userauth is OK
2025-11-18T02:16:16.924 [DEBUG] [Thread-65415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:16:16.924 [DEBUG] [Thread-65415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:16:16.924 [DEBUG] [Thread-65415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:16:16.924 [DEBUG] [Thread-65415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:16:16.945 [INFO] [Thread-65415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:16:16.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:16:16.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:16:17.807 [DEBUG] [Thread-65415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:16:17.807 [DEBUG] [Thread-65415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:16:17.855 [DEBUG] [Thread-65415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:16:17.855 [DEBUG] [Thread-65415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:16:17.864 [DEBUG] [Thread-65415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:16:17.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:16:17.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:16: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
2025-11-18T02:16:17.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:16:17.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:16:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:16:17.899 [DEBUG] [Thread-65415] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:16:18.011 [DEBUG] [Thread-65417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:16:33.059 [DEBUG] [Thread-65418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:16:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:16:47.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:16:47.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:16:48.087 [DEBUG] [Thread-65419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:16:48.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 16, 26), 10.12, 50.03, 0.0, 16.06, 12.5, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:16:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:16:26
2025-11-18T02:16:48.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:16:48.793 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:16:48.793 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:16:48.815 [DEBUG] [Thread-65420] [transport.py] [_log()] starting thread (client mode): 0xd07a2530
2025-11-18T02:16:48.815 [DEBUG] [Thread-65420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:16:48.834 [DEBUG] [Thread-65420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:16:48.834 [INFO] [Thread-65420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:16:48.837 [DEBUG] [Thread-65420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] client lang: <none>
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] server lang: <none>
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] kex follows: False
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] Compression: none
2025-11-18T02:16:48.838 [DEBUG] [Thread-65420] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:16:48.854 [DEBUG] [Thread-65420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:16:48.855 [DEBUG] [Thread-65420] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:16:48.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:16:48.856 [DEBUG] [Thread-65420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:16:48.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:16:48.857 [DEBUG] [Thread-65420] [transport.py] [_log()] userauth is OK
2025-11-18T02:16:48.858 [DEBUG] [Thread-65420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:16:48.858 [DEBUG] [Thread-65420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:16:48.858 [DEBUG] [Thread-65420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:16:48.858 [DEBUG] [Thread-65420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:16:48.880 [INFO] [Thread-65420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:16:48.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:16:49.521 [DEBUG] [Thread-65420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:16:49.521 [DEBUG] [Thread-65420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:16:49.522 [DEBUG] [Thread-65420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:16:49.562 [DEBUG] [Thread-65420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:16:49.562 [DEBUG] [Thread-65420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:16:49.565 [DEBUG] [Thread-65420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:16:49.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:16:49.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:16:49.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:16:49.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:16:49.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:16:49.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:16:49.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:16:49.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:16:49.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:16:49.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.011153 -999.00  +12.40  16.70     54   +3.60 1 2 1 1 1     0    0 -999.00 0.00 ZNEsW 14.9 16.7 171.8 21.4 12.9 -23.1 12.7 -22.0 12.5 -21.8 12.8 -22.6
2025-11-18T02:16:49.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:16:49.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:16:49.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.011153
2025-11-18T02:16:49.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:16:49.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:16:49.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:16:49.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:16:49.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-18T02:16:49.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:16:26', tmtdew=10.12, humidity=50.03, cloud=0.0, wind=16.06, temperature=12.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:16:26', seeing=1.48, atlas_timestamp='2025-11-18T00:16:03.619', atlas_cloud=2, atlas_rain=1, zp_data=[0.02874999999999872, 0.025249999999999773, 0.09224999999999994, 0.10249999999999915, 0.00849999999999973, 0.056250000000000355, 0.0019999999999988916, 0.013250000000001094, 0.042500000000000426, 0.048500000000000654, 0.1532499999999999, 0.14499999999999957, 0.11799999999999855, 0.09124999999999872, 0.013999999999999346, 0.03249999999999886, 0.08125000000000071, 0.17600000000000016, 0.1664999999999992, 0.19624999999999915, 0.13949999999999818, 0.11324999999999896, 0.01925000000000132, 0.1067499999999999, 0.3294999999999977, 0.3175000000000008, 0.4632500000000004, 0.5665000000000004, 0.34699999999999953, 0.057500000000000995, 0.11200000000000188, 0.3730000000000011, 0.7337499999999988], zp_timestamp='2025-11-18T00:13:00')
2025-11-18T02:16:49.589 [DEBUG] [Thread-65420] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:16:49.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:16:49.683 [DEBUG] [Thread-65423] [transport.py] [_log()] starting thread (client mode): 0xd3162c50
2025-11-18T02:16:49.683 [DEBUG] [Thread-65423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:16:49.698 [DEBUG] [Thread-65423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:16:49.699 [INFO] [Thread-65423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:16:49.706 [DEBUG] [Thread-65423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:16:49.706 [DEBUG] [Thread-65423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:16:49.706 [DEBUG] [Thread-65423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] client lang: <none>
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] server lang: <none>
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] kex follows: False
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] Compression: none
2025-11-18T02:16:49.707 [DEBUG] [Thread-65423] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:16:49.763 [DEBUG] [Thread-65423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:16:49.764 [DEBUG] [Thread-65423] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:16:49.764 [DEBUG] [Thread-65423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:16:49.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:16:49.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:16:49.820 [DEBUG] [Thread-65423] [transport.py] [_log()] userauth is OK
2025-11-18T02:16:49.820 [DEBUG] [Thread-65423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:16:49.820 [DEBUG] [Thread-65423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:16:49.821 [DEBUG] [Thread-65423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:16:49.821 [DEBUG] [Thread-65423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:16:49.842 [INFO] [Thread-65423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:16:49.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:16:49.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:16:50.694 [DEBUG] [Thread-65423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:16:50.694 [DEBUG] [Thread-65423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:16:50.742 [DEBUG] [Thread-65423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:16:50.743 [DEBUG] [Thread-65423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:16:50.752 [DEBUG] [Thread-65423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:16:50.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:16:50.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:16:50.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:16:50.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:16:50.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:16:50.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:16:50.786 [DEBUG] [Thread-65423] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:17:02.040 [DEBUG] [Thread-65425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:17:03.112 [DEBUG] [Thread-65426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:17:18.151 [DEBUG] [Thread-65427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:17:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:17:20.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:17:20.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:17:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 16, 58), 10.14, 49.92, 0.0, 16.22, 12.45, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:17:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:16:58
2025-11-18T02:17:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:17:21.736 [DEBUG] [Thread-65428] [transport.py] [_log()] starting thread (client mode): 0xd31625f0
2025-11-18T02:17:21.736 [DEBUG] [Thread-65428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:17:21.751 [DEBUG] [Thread-65428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:17:21.751 [INFO] [Thread-65428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:17:21.754 [DEBUG] [Thread-65428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] client lang: <none>
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] server lang: <none>
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] kex follows: False
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] Compression: none
2025-11-18T02:17:21.755 [DEBUG] [Thread-65428] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:17:21.771 [DEBUG] [Thread-65428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:17:21.771 [DEBUG] [Thread-65428] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:17:21.771 [DEBUG] [Thread-65428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:17:21.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:17:21.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:17:21.812 [DEBUG] [Thread-65428] [transport.py] [_log()] userauth is OK
2025-11-18T02:17:21.813 [DEBUG] [Thread-65428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:17:21.813 [DEBUG] [Thread-65428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:17:21.813 [DEBUG] [Thread-65428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:17:21.813 [DEBUG] [Thread-65428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:17:21.822 [INFO] [Thread-65428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:17:21.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:17:22.470 [DEBUG] [Thread-65428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:17:22.470 [DEBUG] [Thread-65428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:17:22.470 [DEBUG] [Thread-65428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:17:22.510 [DEBUG] [Thread-65428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:17:22.511 [DEBUG] [Thread-65428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:17:22.514 [DEBUG] [Thread-65428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:17:22.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:17:22.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:17:22.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:17:22.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:17:22.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:17:22.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:17:22.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:17:22.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:17:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:17:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.011848 -999.00  +12.40  16.09     54   +3.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.6 16.1 171.0 20.2 12.9 -23.2 12.7 -22.1 12.5 -21.8 12.8 -22.8
2025-11-18T02:17:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:17:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:17:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.011848
2025-11-18T02:17:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:17:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:17:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:17:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:17:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:17:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:16:58', tmtdew=10.14, humidity=49.92, cloud=0.0, wind=16.22, temperature=12.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:16:58', seeing=1.32, atlas_timestamp='2025-11-18T00:17:03.667', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:15:00')
2025-11-18T02:17:22.534 [DEBUG] [Thread-65428] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:17:22.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:17:22.626 [DEBUG] [Thread-65431] [transport.py] [_log()] starting thread (client mode): 0xd317ecb0
2025-11-18T02:17:22.626 [DEBUG] [Thread-65431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:17:22.642 [DEBUG] [Thread-65431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:17:22.643 [INFO] [Thread-65431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:17:22.650 [DEBUG] [Thread-65431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:17:22.650 [DEBUG] [Thread-65431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] client lang: <none>
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] server lang: <none>
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] kex follows: False
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:17:22.651 [DEBUG] [Thread-65431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:17:22.652 [DEBUG] [Thread-65431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:17:22.652 [DEBUG] [Thread-65431] [transport.py] [_log()] Compression: none
2025-11-18T02:17:22.652 [DEBUG] [Thread-65431] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:17:22.711 [DEBUG] [Thread-65431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:17:22.712 [DEBUG] [Thread-65431] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:17:22.712 [DEBUG] [Thread-65431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:17:22.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:17:22.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:17:22.768 [DEBUG] [Thread-65431] [transport.py] [_log()] userauth is OK
2025-11-18T02:17:22.768 [DEBUG] [Thread-65431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:17:22.768 [DEBUG] [Thread-65431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:17:22.768 [DEBUG] [Thread-65431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:17:22.768 [DEBUG] [Thread-65431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:17:22.787 [INFO] [Thread-65431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:17:22.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:17:22.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:17:23.652 [DEBUG] [Thread-65431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:17:23.652 [DEBUG] [Thread-65431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:17:23.700 [DEBUG] [Thread-65431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:17:23.700 [DEBUG] [Thread-65431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:17:23.709 [DEBUG] [Thread-65431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:17:23.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:17:23.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:17:23.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:17:23.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:17:23.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:17:23.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:17:23.744 [DEBUG] [Thread-65431] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:17:33.180 [DEBUG] [Thread-65433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:17:48.218 [DEBUG] [Thread-65434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:17:48.995 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:17:48.996 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:17:53.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:17:53.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:17:53.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:17:54.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 17, 30), 10.07, 50.18, 0.0, 16.96, 12.42, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:17:54.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:17:30
2025-11-18T02:17:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:17:54.719 [DEBUG] [Thread-65435] [transport.py] [_log()] starting thread (client mode): 0xd07d8820
2025-11-18T02:17:54.719 [DEBUG] [Thread-65435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:17:54.739 [DEBUG] [Thread-65435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:17:54.739 [INFO] [Thread-65435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:17:54.742 [DEBUG] [Thread-65435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:17:54.743 [DEBUG] [Thread-65435] [transport.py] [_log()] client lang: <none>
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] server lang: <none>
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] kex follows: False
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] Compression: none
2025-11-18T02:17:54.744 [DEBUG] [Thread-65435] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:17:54.762 [DEBUG] [Thread-65435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:17:54.763 [DEBUG] [Thread-65435] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:17:54.764 [DEBUG] [Thread-65435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:17:54.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:17:54.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:17:54.766 [DEBUG] [Thread-65435] [transport.py] [_log()] userauth is OK
2025-11-18T02:17:54.766 [DEBUG] [Thread-65435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:17:54.766 [DEBUG] [Thread-65435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:17:54.766 [DEBUG] [Thread-65435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:17:54.766 [DEBUG] [Thread-65435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:17:54.783 [INFO] [Thread-65435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:17:54.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:17:55.417 [DEBUG] [Thread-65435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:17:55.417 [DEBUG] [Thread-65435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:17:55.417 [DEBUG] [Thread-65435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:17:55.457 [DEBUG] [Thread-65435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:17:55.457 [DEBUG] [Thread-65435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:17:55.460 [DEBUG] [Thread-65435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:17:55.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:17:55.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:17:55.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:17:55.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:17:55.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:17:55.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:17:55.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:17:55.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:17:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:17:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.012195 -999.00  +12.40  11.80     54   +3.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.1 11.8 162.8 15.5 12.9 -23.1 12.7 -22.1 12.5 -21.9 12.8 -22.7
2025-11-18T02:17:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:17:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:17:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.012195
2025-11-18T02:17:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:17:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:17:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:17:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:17:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:17:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:17:30', tmtdew=10.07, humidity=50.18, cloud=0.0, wind=16.96, temperature=12.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:17:30', seeing=1.29, atlas_timestamp='2025-11-18T00:17:33.648', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:15:00')
2025-11-18T02:17:55.482 [DEBUG] [Thread-65435] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:17:55.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:17:55.581 [DEBUG] [Thread-65438] [transport.py] [_log()] starting thread (client mode): 0xd07aa440
2025-11-18T02:17:55.581 [DEBUG] [Thread-65438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:17:55.596 [DEBUG] [Thread-65438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:17:55.596 [INFO] [Thread-65438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:17:55.604 [DEBUG] [Thread-65438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:17:55.604 [DEBUG] [Thread-65438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:17:55.604 [DEBUG] [Thread-65438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:17:55.604 [DEBUG] [Thread-65438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:17:55.604 [DEBUG] [Thread-65438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:17:55.604 [DEBUG] [Thread-65438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:17:55.604 [DEBUG] [Thread-65438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:17:55.604 [DEBUG] [Thread-65438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] client lang: <none>
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] server lang: <none>
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] kex follows: False
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:17:55.605 [DEBUG] [Thread-65438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:17:55.606 [DEBUG] [Thread-65438] [transport.py] [_log()] Compression: none
2025-11-18T02:17:55.606 [DEBUG] [Thread-65438] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:17:55.664 [DEBUG] [Thread-65438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:17:55.664 [DEBUG] [Thread-65438] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:17:55.665 [DEBUG] [Thread-65438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:17:55.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:17:55.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:17:55.724 [DEBUG] [Thread-65438] [transport.py] [_log()] userauth is OK
2025-11-18T02:17:55.724 [DEBUG] [Thread-65438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:17:55.724 [DEBUG] [Thread-65438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:17:55.724 [DEBUG] [Thread-65438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:17:55.724 [DEBUG] [Thread-65438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:17:55.744 [INFO] [Thread-65438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:17:55.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:17:55.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:17:56.567 [DEBUG] [Thread-65438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:17:56.567 [DEBUG] [Thread-65438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:17:56.615 [DEBUG] [Thread-65438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:17:56.615 [DEBUG] [Thread-65438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:17:56.624 [DEBUG] [Thread-65438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:17:56.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:17:56.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:17:56.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:17:56.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:17:56.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:17:56.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:17:56.659 [DEBUG] [Thread-65438] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:18:02.098 [DEBUG] [Thread-65440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:18:03.244 [DEBUG] [Thread-65441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:18:18.275 [DEBUG] [Thread-65442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:18:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:18:26.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:18:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:18:27.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 18, 2), 10.07, 50.18, 0.0, 17.66, 12.48, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:18:27.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:18:02
2025-11-18T02:18:27.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:18:27.665 [DEBUG] [Thread-65443] [transport.py] [_log()] starting thread (client mode): 0xd07560e0
2025-11-18T02:18:27.665 [DEBUG] [Thread-65443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:18:27.685 [DEBUG] [Thread-65443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:18:27.685 [INFO] [Thread-65443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] client lang: <none>
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] server lang: <none>
2025-11-18T02:18:27.688 [DEBUG] [Thread-65443] [transport.py] [_log()] kex follows: False
2025-11-18T02:18:27.689 [DEBUG] [Thread-65443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:18:27.689 [DEBUG] [Thread-65443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:18:27.689 [DEBUG] [Thread-65443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:18:27.689 [DEBUG] [Thread-65443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:18:27.689 [DEBUG] [Thread-65443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:18:27.689 [DEBUG] [Thread-65443] [transport.py] [_log()] Compression: none
2025-11-18T02:18:27.689 [DEBUG] [Thread-65443] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:18:27.704 [DEBUG] [Thread-65443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:18:27.704 [DEBUG] [Thread-65443] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:18:27.705 [DEBUG] [Thread-65443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:18:27.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:18:27.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:18:27.705 [DEBUG] [Thread-65443] [transport.py] [_log()] userauth is OK
2025-11-18T02:18:27.705 [DEBUG] [Thread-65443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:18:27.706 [DEBUG] [Thread-65443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:18:27.706 [DEBUG] [Thread-65443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:18:27.706 [DEBUG] [Thread-65443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:18:27.720 [INFO] [Thread-65443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:18:27.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:18:28.319 [DEBUG] [Thread-65443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:18:28.319 [DEBUG] [Thread-65443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:18:28.320 [DEBUG] [Thread-65443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:18:28.360 [DEBUG] [Thread-65443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:18:28.360 [DEBUG] [Thread-65443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:18:28.363 [DEBUG] [Thread-65443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:18:28.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:18:28.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:18:28.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:18:28.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:18:28.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:18:28.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:18:28.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:18:28.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:18:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:18:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.012542 -999.00  +12.40  13.10     54   +3.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.8 13.1 174.4 16.6 12.8 -23.2 12.7 -22.2 12.5 -21.9 12.8 -22.8
2025-11-18T02:18:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:18:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:18:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.012542
2025-11-18T02:18:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:18:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:18:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:18:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:18:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:18:28.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:18:02', tmtdew=10.07, humidity=50.18, cloud=0.0, wind=17.66, temperature=12.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:18:02', seeing=1.33, atlas_timestamp='2025-11-18T00:18:03.629', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:15:00')
2025-11-18T02:18:28.382 [DEBUG] [Thread-65443] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:18:28.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:18:28.470 [DEBUG] [Thread-65446] [transport.py] [_log()] starting thread (client mode): 0xd07d85b0
2025-11-18T02:18:28.470 [DEBUG] [Thread-65446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:18:28.485 [DEBUG] [Thread-65446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:18:28.485 [INFO] [Thread-65446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:18:28.492 [DEBUG] [Thread-65446] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:18:28.492 [DEBUG] [Thread-65446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] client lang: <none>
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] server lang: <none>
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] kex follows: False
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] Compression: none
2025-11-18T02:18:28.493 [DEBUG] [Thread-65446] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:18:28.554 [DEBUG] [Thread-65446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:18:28.555 [DEBUG] [Thread-65446] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:18:28.555 [DEBUG] [Thread-65446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:18:28.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:18:28.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:18:28.612 [DEBUG] [Thread-65446] [transport.py] [_log()] userauth is OK
2025-11-18T02:18:28.612 [DEBUG] [Thread-65446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:18:28.612 [DEBUG] [Thread-65446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:18:28.612 [DEBUG] [Thread-65446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:18:28.612 [DEBUG] [Thread-65446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:18:28.626 [INFO] [Thread-65446] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:18:28.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:18:28.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:18:29.477 [DEBUG] [Thread-65446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:18:29.477 [DEBUG] [Thread-65446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:18:29.525 [DEBUG] [Thread-65446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:18:29.525 [DEBUG] [Thread-65446] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:18:29.533 [DEBUG] [Thread-65446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:18:29.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:18:29.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:18:29.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:18:29.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:18:29.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:18:29.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:18:29.565 [DEBUG] [Thread-65446] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:18:33.308 [DEBUG] [Thread-65448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:18:48.352 [DEBUG] [Thread-65449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:18:49.200 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:18:49.201 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:18:59.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:18:59.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:18: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
2025-11-18T02:19:00.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 18, 34), 10.1, 50.13, 0.0, 20.22, 12.63, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:19:00.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:18:34
2025-11-18T02:19:00.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:19:00.520 [DEBUG] [Thread-65450] [transport.py] [_log()] starting thread (client mode): 0xd0754160
2025-11-18T02:19:00.520 [DEBUG] [Thread-65450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:19:00.536 [DEBUG] [Thread-65450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:19:00.536 [INFO] [Thread-65450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] client lang: <none>
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] server lang: <none>
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] kex follows: False
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:19:00.538 [DEBUG] [Thread-65450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:19:00.539 [DEBUG] [Thread-65450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:19:00.539 [DEBUG] [Thread-65450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:19:00.539 [DEBUG] [Thread-65450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:19:00.539 [DEBUG] [Thread-65450] [transport.py] [_log()] Compression: none
2025-11-18T02:19:00.539 [DEBUG] [Thread-65450] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:19:00.549 [DEBUG] [Thread-65450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:19:00.550 [DEBUG] [Thread-65450] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:19:00.550 [DEBUG] [Thread-65450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:19:00.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:19:00.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:19:00.551 [DEBUG] [Thread-65450] [transport.py] [_log()] userauth is OK
2025-11-18T02:19:00.552 [DEBUG] [Thread-65450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:19:00.552 [DEBUG] [Thread-65450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:19:00.552 [DEBUG] [Thread-65450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:19:00.552 [DEBUG] [Thread-65450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:19:00.565 [INFO] [Thread-65450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:19:00.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:19:01.165 [DEBUG] [Thread-65450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:19:01.165 [DEBUG] [Thread-65450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:19:01.165 [DEBUG] [Thread-65450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:19:01.205 [DEBUG] [Thread-65450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:19:01.205 [DEBUG] [Thread-65450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:19:01.208 [DEBUG] [Thread-65450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:19:01.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:19:01.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:19:01.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:19:01.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:19:01.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:19:01.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:19:01.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:19:01.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:19:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:19:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.012889 -999.00  +12.40  12.76     54   +3.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.2 12.8 166.6 16.2 12.8 -23.1 12.7 -22.3 12.4 -21.8 12.7 -22.7
2025-11-18T02:19:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:19:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:19:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.012889
2025-11-18T02:19:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:19:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:19:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:19:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:19:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:19:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:18:34', tmtdew=10.1, humidity=50.13, cloud=0.0, wind=20.22, temperature=12.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:18:34', seeing=1.33, atlas_timestamp='2025-11-18T00:18:33.610', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:15:00')
2025-11-18T02:19:01.229 [DEBUG] [Thread-65450] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:19:01.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:19:01.324 [DEBUG] [Thread-65453] [transport.py] [_log()] starting thread (client mode): 0xd3153490
2025-11-18T02:19:01.324 [DEBUG] [Thread-65453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:19:01.342 [DEBUG] [Thread-65453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:19:01.342 [INFO] [Thread-65453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:19:01.349 [DEBUG] [Thread-65453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:19:01.349 [DEBUG] [Thread-65453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:19:01.349 [DEBUG] [Thread-65453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] client lang: <none>
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] server lang: <none>
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] kex follows: False
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] Compression: none
2025-11-18T02:19:01.350 [DEBUG] [Thread-65453] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:19:01.412 [DEBUG] [Thread-65453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:19:01.413 [DEBUG] [Thread-65453] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:19:01.413 [DEBUG] [Thread-65453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:19:01.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:19:01.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:19:01.468 [DEBUG] [Thread-65453] [transport.py] [_log()] userauth is OK
2025-11-18T02:19:01.468 [DEBUG] [Thread-65453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:19:01.468 [DEBUG] [Thread-65453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:19:01.468 [DEBUG] [Thread-65453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:19:01.468 [DEBUG] [Thread-65453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:19:01.487 [INFO] [Thread-65453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:19:01.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:19:01.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:19:02.174 [DEBUG] [Thread-65455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:19:02.368 [DEBUG] [Thread-65453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:19:02.368 [DEBUG] [Thread-65453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:19:02.416 [DEBUG] [Thread-65453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:19:02.417 [DEBUG] [Thread-65453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:19:02.425 [DEBUG] [Thread-65453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:19:02.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:19:02.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:19: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
2025-11-18T02:19:02.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:19:02.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:19:02.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:19:02.459 [DEBUG] [Thread-65453] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:19:03.380 [DEBUG] [Thread-65456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:19:18.414 [DEBUG] [Thread-65457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:19:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:19:32.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:19:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:19:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 19, 6), 9.97, 50.68, 0.0, 16.29, 12.38, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:19:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:19:06
2025-11-18T02:19:33.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:19:33.385 [DEBUG] [Thread-65458] [transport.py] [_log()] starting thread (client mode): 0xd0711060
2025-11-18T02:19:33.386 [DEBUG] [Thread-65458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:19:33.406 [DEBUG] [Thread-65458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:19:33.406 [INFO] [Thread-65458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:19:33.409 [DEBUG] [Thread-65458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:19:33.409 [DEBUG] [Thread-65458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:19:33.409 [DEBUG] [Thread-65458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:19:33.409 [DEBUG] [Thread-65458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:19:33.409 [DEBUG] [Thread-65458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:19:33.409 [DEBUG] [Thread-65458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] client lang: <none>
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] server lang: <none>
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] kex follows: False
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] Compression: none
2025-11-18T02:19:33.410 [DEBUG] [Thread-65458] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:19:33.424 [DEBUG] [Thread-65458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:19:33.425 [DEBUG] [Thread-65458] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:19:33.425 [DEBUG] [Thread-65458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:19:33.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:19:33.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:19:33.427 [DEBUG] [Thread-65458] [transport.py] [_log()] userauth is OK
2025-11-18T02:19:33.427 [DEBUG] [Thread-65458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:19:33.427 [DEBUG] [Thread-65458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:19:33.427 [DEBUG] [Thread-65458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:19:33.428 [DEBUG] [Thread-65458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:19:33.447 [INFO] [Thread-65458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:19:33.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:19:33.449 [DEBUG] [Thread-65460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:19:34.043 [DEBUG] [Thread-65458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:19:34.043 [DEBUG] [Thread-65458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:19:34.043 [DEBUG] [Thread-65458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:19:34.083 [DEBUG] [Thread-65458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:19:34.084 [DEBUG] [Thread-65458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:19:34.087 [DEBUG] [Thread-65458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:19:34.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:19:34.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:19:34.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:19:34.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:19:34.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:19:34.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:19:34.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:19:34.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:19:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:19:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.013236 -999.00  +12.40   9.50     55   +3.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.1 9.5 165.6 16.7 12.8 -23.1 12.7 -22.1 12.5 -21.7 12.8 -22.7
2025-11-18T02:19:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:19:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:19:34.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.013236
2025-11-18T02:19:34.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:19:34.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:19:34.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:19:34.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:19:34.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:19:34.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:19:06', tmtdew=9.97, humidity=50.68, cloud=0.0, wind=16.29, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:19:06', seeing=1.21, atlas_timestamp='2025-11-18T00:19:03.590', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:15:00')
2025-11-18T02:19:34.112 [DEBUG] [Thread-65458] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:19:34.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:19:34.209 [DEBUG] [Thread-65462] [transport.py] [_log()] starting thread (client mode): 0xd0711c60
2025-11-18T02:19:34.209 [DEBUG] [Thread-65462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:19:34.225 [DEBUG] [Thread-65462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:19:34.225 [INFO] [Thread-65462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] client lang: <none>
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] server lang: <none>
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] kex follows: False
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] Compression: none
2025-11-18T02:19:34.233 [DEBUG] [Thread-65462] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:19:34.291 [DEBUG] [Thread-65462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:19:34.291 [DEBUG] [Thread-65462] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:19:34.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:19:34.292 [DEBUG] [Thread-65462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:19:34.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:19:34.349 [DEBUG] [Thread-65462] [transport.py] [_log()] userauth is OK
2025-11-18T02:19:34.350 [DEBUG] [Thread-65462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:19:34.350 [DEBUG] [Thread-65462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:19:34.350 [DEBUG] [Thread-65462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:19:34.350 [DEBUG] [Thread-65462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:19:34.368 [INFO] [Thread-65462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:19:34.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:19:34.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:19:35.205 [DEBUG] [Thread-65462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:19:35.205 [DEBUG] [Thread-65462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:19:35.253 [DEBUG] [Thread-65462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:19:35.253 [DEBUG] [Thread-65462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:19:35.262 [DEBUG] [Thread-65462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:19:35.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:19:35.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:19:35.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:19:35.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:19:35.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:19:35.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:19:35.297 [DEBUG] [Thread-65462] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:19:48.476 [DEBUG] [Thread-65464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:19:49.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:19:49.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:20:02.232 [DEBUG] [Thread-65465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:20:03.518 [DEBUG] [Thread-65466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:20:05.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:20:05.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:20:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:20:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 19, 38), 9.96, 50.7, 0.0, 15.95, 12.33, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:20:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:19:38
2025-11-18T02:20:06.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:20:06.275 [DEBUG] [Thread-65467] [transport.py] [_log()] starting thread (client mode): 0xd07af880
2025-11-18T02:20:06.275 [DEBUG] [Thread-65467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:20:06.296 [DEBUG] [Thread-65467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:20:06.296 [INFO] [Thread-65467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:20:06.299 [DEBUG] [Thread-65467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] client lang: <none>
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] server lang: <none>
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] kex follows: False
2025-11-18T02:20:06.300 [DEBUG] [Thread-65467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:20:06.301 [DEBUG] [Thread-65467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:20:06.301 [DEBUG] [Thread-65467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:20:06.301 [DEBUG] [Thread-65467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:20:06.301 [DEBUG] [Thread-65467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:20:06.301 [DEBUG] [Thread-65467] [transport.py] [_log()] Compression: none
2025-11-18T02:20:06.301 [DEBUG] [Thread-65467] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:20:06.316 [DEBUG] [Thread-65467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:20:06.316 [DEBUG] [Thread-65467] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:20:06.316 [DEBUG] [Thread-65467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:20:06.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:20:06.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:20:06.317 [DEBUG] [Thread-65467] [transport.py] [_log()] userauth is OK
2025-11-18T02:20:06.317 [DEBUG] [Thread-65467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:20:06.317 [DEBUG] [Thread-65467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:20:06.317 [DEBUG] [Thread-65467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:20:06.317 [DEBUG] [Thread-65467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:20:06.326 [INFO] [Thread-65467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:20:06.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:20:08.914 [DEBUG] [Thread-65467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:20:08.914 [DEBUG] [Thread-65467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:20:08.914 [DEBUG] [Thread-65467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:20:08.954 [DEBUG] [Thread-65467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:20:08.954 [DEBUG] [Thread-65467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:20:08.957 [DEBUG] [Thread-65467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:20:08.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:20:08.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:20:08.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:20:08.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:20:08.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:20:08.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:20:08.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:20:08.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:20:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:20:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.013584 -999.00  +12.40  13.67     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.1 13.7 157.4 16.1 12.8 -23.2 12.7 -22.3 12.5 -21.9 12.8 -22.8
2025-11-18T02:20:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:20:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:20:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.013584
2025-11-18T02:20:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:20:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:20:08.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:20:08.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:20:08.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:20:08.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:19:38', tmtdew=9.96, humidity=50.7, cloud=0.0, wind=15.95, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:19:38', seeing=1.08, atlas_timestamp='2025-11-18T00:19:33.658', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:15:00')
2025-11-18T02:20:08.990 [DEBUG] [Thread-65467] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:20:09.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:20:09.088 [DEBUG] [Thread-65470] [transport.py] [_log()] starting thread (client mode): 0xd0711120
2025-11-18T02:20:09.088 [DEBUG] [Thread-65470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:20:09.103 [DEBUG] [Thread-65470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:20:09.103 [INFO] [Thread-65470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:20:09.117 [DEBUG] [Thread-65470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:20:09.117 [DEBUG] [Thread-65470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] client lang: <none>
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] server lang: <none>
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] kex follows: False
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] Compression: none
2025-11-18T02:20:09.118 [DEBUG] [Thread-65470] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:20:09.171 [DEBUG] [Thread-65470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:20:09.172 [DEBUG] [Thread-65470] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:20:09.172 [DEBUG] [Thread-65470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:20:09.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:20:09.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:20:09.228 [DEBUG] [Thread-65470] [transport.py] [_log()] userauth is OK
2025-11-18T02:20:09.228 [DEBUG] [Thread-65470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:20:09.228 [DEBUG] [Thread-65470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:20:09.229 [DEBUG] [Thread-65470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:20:09.229 [DEBUG] [Thread-65470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:20:09.249 [INFO] [Thread-65470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:20:09.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:20:09.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:20:10.129 [DEBUG] [Thread-65470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:20:10.129 [DEBUG] [Thread-65470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:20:10.177 [DEBUG] [Thread-65470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:20:10.177 [DEBUG] [Thread-65470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:20:10.187 [DEBUG] [Thread-65470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:20:10.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:20:10.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:20:10.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:20:10.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:20:10.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:20:10.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:20:10.222 [DEBUG] [Thread-65470] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:20:18.550 [DEBUG] [Thread-65472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:20:33.590 [DEBUG] [Thread-65473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:20:40.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:20:40.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:20:40.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:20:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 20, 10), 9.95, 50.75, 0.0, 15.88, 12.33, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:20:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:20:10
2025-11-18T02:20:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:20:41.195 [DEBUG] [Thread-65474] [transport.py] [_log()] starting thread (client mode): 0xd07af1f0
2025-11-18T02:20:41.195 [DEBUG] [Thread-65474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:20:41.216 [DEBUG] [Thread-65474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:20:41.216 [INFO] [Thread-65474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] client lang: <none>
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] server lang: <none>
2025-11-18T02:20:41.220 [DEBUG] [Thread-65474] [transport.py] [_log()] kex follows: False
2025-11-18T02:20:41.221 [DEBUG] [Thread-65474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:20:41.221 [DEBUG] [Thread-65474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:20:41.221 [DEBUG] [Thread-65474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:20:41.221 [DEBUG] [Thread-65474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:20:41.221 [DEBUG] [Thread-65474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:20:41.221 [DEBUG] [Thread-65474] [transport.py] [_log()] Compression: none
2025-11-18T02:20:41.221 [DEBUG] [Thread-65474] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:20:41.236 [DEBUG] [Thread-65474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:20:41.237 [DEBUG] [Thread-65474] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:20:41.237 [DEBUG] [Thread-65474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:20:41.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:20:41.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:20:41.239 [DEBUG] [Thread-65474] [transport.py] [_log()] userauth is OK
2025-11-18T02:20:41.239 [DEBUG] [Thread-65474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:20:41.239 [DEBUG] [Thread-65474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:20:41.239 [DEBUG] [Thread-65474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:20:41.239 [DEBUG] [Thread-65474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:20:41.263 [INFO] [Thread-65474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:20:41.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:20:41.902 [DEBUG] [Thread-65474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:20:41.902 [DEBUG] [Thread-65474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:20:41.902 [DEBUG] [Thread-65474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:20:41.944 [DEBUG] [Thread-65474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:20:41.944 [DEBUG] [Thread-65474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:20:41.946 [DEBUG] [Thread-65474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:20:41.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:20:41.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:20:41.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:20:41.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:20:41.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:20:41.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:20:41.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:20:41.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:20:41.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:20:41.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.013584 -999.00  +12.40  13.67     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.1 13.7 157.4 16.1 12.8 -23.2 12.7 -22.3 12.5 -21.9 12.8 -22.8
2025-11-18T02:20:41.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:20:41.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:20:41.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.013584
2025-11-18T02:20:41.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:20:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:20:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:20:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:20:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:20:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:20:10', tmtdew=9.95, humidity=50.75, cloud=0.0, wind=15.88, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:20:10', seeing=1.11, atlas_timestamp='2025-11-18T00:19:33.658', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:19:00')
2025-11-18T02:20:41.971 [DEBUG] [Thread-65474] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:20:42.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:20:42.079 [DEBUG] [Thread-65477] [transport.py] [_log()] starting thread (client mode): 0xd07a82b0
2025-11-18T02:20:42.079 [DEBUG] [Thread-65477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:20:42.093 [DEBUG] [Thread-65477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:20:42.093 [INFO] [Thread-65477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] client lang: <none>
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] server lang: <none>
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] kex follows: False
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:20:42.101 [DEBUG] [Thread-65477] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:20:42.102 [DEBUG] [Thread-65477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:20:42.102 [DEBUG] [Thread-65477] [transport.py] [_log()] Compression: none
2025-11-18T02:20:42.102 [DEBUG] [Thread-65477] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:20:42.160 [DEBUG] [Thread-65477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:20:42.160 [DEBUG] [Thread-65477] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:20:42.160 [DEBUG] [Thread-65477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:20:42.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:20:42.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:20:42.216 [DEBUG] [Thread-65477] [transport.py] [_log()] userauth is OK
2025-11-18T02:20:42.216 [DEBUG] [Thread-65477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:20:42.216 [DEBUG] [Thread-65477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:20:42.216 [DEBUG] [Thread-65477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:20:42.216 [DEBUG] [Thread-65477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:20:42.235 [INFO] [Thread-65477] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:20:42.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:20:42.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:20:43.102 [DEBUG] [Thread-65477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:20:43.103 [DEBUG] [Thread-65477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:20:43.150 [DEBUG] [Thread-65477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:20:43.150 [DEBUG] [Thread-65477] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:20:43.158 [DEBUG] [Thread-65477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:20:43.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:20:43.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:20:43.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:20:43.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:20:43.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:20:43.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:20:43.189 [DEBUG] [Thread-65477] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:20:48.621 [DEBUG] [Thread-65479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:20:49.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:20:49.609 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:02.302 [DEBUG] [Thread-65480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:03.663 [DEBUG] [Thread-65481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:21:13.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:21:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:21:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 20, 42), 9.83, 50.8, 0.0, 17.33, 12.35, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:21:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:20:42
2025-11-18T02:21:13.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:21:14.137 [DEBUG] [Thread-65482] [transport.py] [_log()] starting thread (client mode): 0xd3161900
2025-11-18T02:21:14.137 [DEBUG] [Thread-65482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:21:14.159 [DEBUG] [Thread-65482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:21:14.160 [INFO] [Thread-65482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:21:14.163 [DEBUG] [Thread-65482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] client lang: <none>
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] server lang: <none>
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] kex follows: False
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] Compression: none
2025-11-18T02:21:14.164 [DEBUG] [Thread-65482] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:21:14.181 [DEBUG] [Thread-65482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:21:14.181 [DEBUG] [Thread-65482] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:21:14.181 [DEBUG] [Thread-65482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:21:14.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:21:14.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:21:14.182 [DEBUG] [Thread-65482] [transport.py] [_log()] userauth is OK
2025-11-18T02:21:14.182 [DEBUG] [Thread-65482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:21:14.182 [DEBUG] [Thread-65482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:21:14.182 [DEBUG] [Thread-65482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:21:14.182 [DEBUG] [Thread-65482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:21:14.206 [INFO] [Thread-65482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:21:14.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:21:15.006 [DEBUG] [Thread-65482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:21:15.007 [DEBUG] [Thread-65482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:21:15.007 [DEBUG] [Thread-65482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:21:15.047 [DEBUG] [Thread-65482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:21:15.047 [DEBUG] [Thread-65482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:21:15.049 [DEBUG] [Thread-65482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:21:15.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:21:15.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:21:15.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:21:15.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:21:15.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:21:15.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:21:15.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.014335 -999.00  +12.40  14.78     55   +3.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.8 14.8 159.8 17.8 12.8 -23.0 12.7 -22.1 12.4 -21.9 12.7 -22.7
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.014335
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:21:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:20:42', tmtdew=9.83, humidity=50.8, cloud=0.0, wind=17.33, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:20:42', seeing=1.11, atlas_timestamp='2025-11-18T00:20:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:19:00')
2025-11-18T02:21:15.066 [DEBUG] [Thread-65482] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:21:15.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:21:15.152 [DEBUG] [Thread-65485] [transport.py] [_log()] starting thread (client mode): 0xd3161390
2025-11-18T02:21:15.152 [DEBUG] [Thread-65485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:21:15.167 [DEBUG] [Thread-65485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:21:15.167 [INFO] [Thread-65485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:21:15.175 [DEBUG] [Thread-65485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:21:15.175 [DEBUG] [Thread-65485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:21:15.175 [DEBUG] [Thread-65485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:21:15.175 [DEBUG] [Thread-65485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:21:15.175 [DEBUG] [Thread-65485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:21:15.175 [DEBUG] [Thread-65485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:21:15.175 [DEBUG] [Thread-65485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] client lang: <none>
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] server lang: <none>
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] kex follows: False
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] Compression: none
2025-11-18T02:21:15.176 [DEBUG] [Thread-65485] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:21:15.233 [DEBUG] [Thread-65485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:21:15.233 [DEBUG] [Thread-65485] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:21:15.233 [DEBUG] [Thread-65485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:21:15.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:21:15.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:21:15.291 [DEBUG] [Thread-65485] [transport.py] [_log()] userauth is OK
2025-11-18T02:21:15.291 [DEBUG] [Thread-65485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:21:15.291 [DEBUG] [Thread-65485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:21:15.291 [DEBUG] [Thread-65485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:21:15.291 [DEBUG] [Thread-65485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:21:15.307 [INFO] [Thread-65485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:21:15.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:21:15.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:21:16.161 [DEBUG] [Thread-65485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:21:16.161 [DEBUG] [Thread-65485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:21:16.209 [DEBUG] [Thread-65485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:21:16.209 [DEBUG] [Thread-65485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:21:16.219 [DEBUG] [Thread-65485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:21:16.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:21:16.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:21:16.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:21:16.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:21:16.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:21:16.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:21:16.254 [DEBUG] [Thread-65485] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:21:18.690 [DEBUG] [Thread-65487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:33.731 [DEBUG] [Thread-65488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:37.404 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:45.559 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:46.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:21:46.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:21:46.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:21:47.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 21, 14), 9.82, 50.85, 0.0, 17.06, 12.38, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:21:47.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:21:14
2025-11-18T02:21:47.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:21:47.296 [DEBUG] [Thread-65489] [transport.py] [_log()] starting thread (client mode): 0xd31cfa60
2025-11-18T02:21:47.296 [DEBUG] [Thread-65489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:21:47.314 [DEBUG] [Thread-65489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:21:47.314 [INFO] [Thread-65489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:21:47.317 [DEBUG] [Thread-65489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:21:47.317 [DEBUG] [Thread-65489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:21:47.317 [DEBUG] [Thread-65489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:21:47.317 [DEBUG] [Thread-65489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:21:47.317 [DEBUG] [Thread-65489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:21:47.317 [DEBUG] [Thread-65489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] client lang: <none>
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] server lang: <none>
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] kex follows: False
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] Compression: none
2025-11-18T02:21:47.318 [DEBUG] [Thread-65489] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:21:47.325 [DEBUG] [Thread-65489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:21:47.325 [DEBUG] [Thread-65489] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:21:47.325 [DEBUG] [Thread-65489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:21:47.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:21:47.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:21:47.326 [DEBUG] [Thread-65489] [transport.py] [_log()] userauth is OK
2025-11-18T02:21:47.326 [DEBUG] [Thread-65489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:21:47.326 [DEBUG] [Thread-65489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:21:47.326 [DEBUG] [Thread-65489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:21:47.326 [DEBUG] [Thread-65489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:21:47.341 [INFO] [Thread-65489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:21:47.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:21:47.964 [DEBUG] [Thread-65489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:21:47.965 [DEBUG] [Thread-65489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:21:47.965 [DEBUG] [Thread-65489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:21:48.005 [DEBUG] [Thread-65489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:21:48.005 [DEBUG] [Thread-65489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:21:48.008 [DEBUG] [Thread-65489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:21:48.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:21:48.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:21:48.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:21:48.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:21:48.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:21:48.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:21:48.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:21:48.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:21:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:21:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.014625 -999.00  +12.40  12.81     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.3 12.8 164.6 15.4 12.8 -23.1 12.7 -22.2 12.4 -21.9 12.7 -22.7
2025-11-18T02:21:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:21:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:21:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.014625
2025-11-18T02:21:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:21:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:21:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:21:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:21:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:21:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:21:14', tmtdew=9.82, humidity=50.85, cloud=0.0, wind=17.06, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:21:14', seeing=1.06, atlas_timestamp='2025-11-18T00:21:03.600', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:19:00')
2025-11-18T02:21:48.028 [DEBUG] [Thread-65489] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:21:48.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:21:48.113 [DEBUG] [Thread-65492] [transport.py] [_log()] starting thread (client mode): 0xd07aab90
2025-11-18T02:21:48.113 [DEBUG] [Thread-65492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:21:48.127 [DEBUG] [Thread-65492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:21:48.127 [INFO] [Thread-65492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] client lang: <none>
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] server lang: <none>
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] kex follows: False
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] Compression: none
2025-11-18T02:21:48.135 [DEBUG] [Thread-65492] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:21:48.191 [DEBUG] [Thread-65492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:21:48.191 [DEBUG] [Thread-65492] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:21:48.191 [DEBUG] [Thread-65492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:21:48.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:21:48.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:21:48.247 [DEBUG] [Thread-65492] [transport.py] [_log()] userauth is OK
2025-11-18T02:21:48.247 [DEBUG] [Thread-65492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:21:48.248 [DEBUG] [Thread-65492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:21:48.248 [DEBUG] [Thread-65492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:21:48.248 [DEBUG] [Thread-65492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:21:48.262 [INFO] [Thread-65492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:21:48.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:21:48.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:21:48.760 [DEBUG] [Thread-65494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:49.093 [DEBUG] [Thread-65492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:21:49.094 [DEBUG] [Thread-65492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:21:49.141 [DEBUG] [Thread-65492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:21:49.141 [DEBUG] [Thread-65492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:21:49.150 [DEBUG] [Thread-65492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:21:49.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:21:49.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:21:49.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:21:49.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:21:49.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:21:49.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:21:49.185 [DEBUG] [Thread-65492] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:21:49.678 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:49.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:21:49.812 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:22:02.354 [DEBUG] [Thread-65495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:22:03.800 [DEBUG] [Thread-65496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:22:18.828 [DEBUG] [Thread-65497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:22:19.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:22:19.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:22:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:22:19.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 21, 46), 9.73, 51.18, 0.0, 17.1, 12.3, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:22:19.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:21:46
2025-11-18T02:22:20.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:22:20.227 [DEBUG] [Thread-65498] [transport.py] [_log()] starting thread (client mode): 0xd07ab490
2025-11-18T02:22:20.227 [DEBUG] [Thread-65498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:22:20.244 [DEBUG] [Thread-65498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:22:20.244 [INFO] [Thread-65498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] client lang: <none>
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] server lang: <none>
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] kex follows: False
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] Compression: none
2025-11-18T02:22:20.247 [DEBUG] [Thread-65498] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:22:20.262 [DEBUG] [Thread-65498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:22:20.262 [DEBUG] [Thread-65498] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:22:20.262 [DEBUG] [Thread-65498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:22:20.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:22:20.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:22:20.304 [DEBUG] [Thread-65498] [transport.py] [_log()] userauth is OK
2025-11-18T02:22:20.304 [DEBUG] [Thread-65498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:22:20.304 [DEBUG] [Thread-65498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:22:20.304 [DEBUG] [Thread-65498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:22:20.304 [DEBUG] [Thread-65498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:22:20.331 [INFO] [Thread-65498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:22:20.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:22:21.113 [DEBUG] [Thread-65498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:22:21.113 [DEBUG] [Thread-65498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:22:21.113 [DEBUG] [Thread-65498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:22:21.154 [DEBUG] [Thread-65498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:22:21.154 [DEBUG] [Thread-65498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:22:21.157 [DEBUG] [Thread-65498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:22:21.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:22:21.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:22:21.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:22:21.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:22:21.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:22:21.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:22:21.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.014972 -999.00  +12.40  10.77     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 9.0 10.8 160.0 14.9 12.8 -23.2 12.7 -22.2 12.4 -21.9 12.7 -22.7
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.014972
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:22:21.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:21:46', tmtdew=9.73, humidity=51.18, cloud=0.0, wind=17.1, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:22:18', seeing=1.62, atlas_timestamp='2025-11-18T00:21:33.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:19:00')
2025-11-18T02:22:21.172 [DEBUG] [Thread-65498] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:22:21.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:22:21.258 [DEBUG] [Thread-65501] [transport.py] [_log()] starting thread (client mode): 0xd31ccbb0
2025-11-18T02:22:21.258 [DEBUG] [Thread-65501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:22:21.273 [DEBUG] [Thread-65501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:22:21.274 [INFO] [Thread-65501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] client lang: <none>
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] server lang: <none>
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] kex follows: False
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:22:21.281 [DEBUG] [Thread-65501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:22:21.282 [DEBUG] [Thread-65501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:22:21.282 [DEBUG] [Thread-65501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:22:21.282 [DEBUG] [Thread-65501] [transport.py] [_log()] Compression: none
2025-11-18T02:22:21.282 [DEBUG] [Thread-65501] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:22:21.339 [DEBUG] [Thread-65501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:22:21.339 [DEBUG] [Thread-65501] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:22:21.339 [DEBUG] [Thread-65501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:22:21.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:22:21.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:22:21.403 [DEBUG] [Thread-65501] [transport.py] [_log()] userauth is OK
2025-11-18T02:22:21.403 [DEBUG] [Thread-65501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:22:21.403 [DEBUG] [Thread-65501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:22:21.403 [DEBUG] [Thread-65501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:22:21.403 [DEBUG] [Thread-65501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:22:21.423 [INFO] [Thread-65501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:22:21.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:22:21.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:22:22.259 [DEBUG] [Thread-65501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:22:22.259 [DEBUG] [Thread-65501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:22:22.307 [DEBUG] [Thread-65501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:22:22.307 [DEBUG] [Thread-65501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:22:22.315 [DEBUG] [Thread-65501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:22:22.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:22:22.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:22: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') -> 00000000
2025-11-18T02:22:22.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:22:22.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:22:22.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:22:22.347 [DEBUG] [Thread-65501] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:22:33.855 [DEBUG] [Thread-65503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:22:48.896 [DEBUG] [Thread-65504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:22:50.016 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:22:50.017 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:22:52.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:22:52.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:22:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:22:53.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 22, 18), 9.68, 51.36, 0.0, 17.34, 12.37, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:22:53.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:22:18
2025-11-18T02:22:53.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:22:53.305 [DEBUG] [Thread-65505] [transport.py] [_log()] starting thread (client mode): 0xd31cd900
2025-11-18T02:22:53.305 [DEBUG] [Thread-65505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:22:53.326 [DEBUG] [Thread-65505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:22:53.326 [INFO] [Thread-65505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:22:53.329 [DEBUG] [Thread-65505] [transport.py] [_log()] client lang: <none>
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] server lang: <none>
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] kex follows: False
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] Compression: none
2025-11-18T02:22:53.330 [DEBUG] [Thread-65505] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:22:53.345 [DEBUG] [Thread-65505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:22:53.346 [DEBUG] [Thread-65505] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:22:53.346 [DEBUG] [Thread-65505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:22:53.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:22:53.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:22:53.347 [DEBUG] [Thread-65505] [transport.py] [_log()] userauth is OK
2025-11-18T02:22:53.347 [DEBUG] [Thread-65505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:22:53.347 [DEBUG] [Thread-65505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:22:53.347 [DEBUG] [Thread-65505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:22:53.347 [DEBUG] [Thread-65505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:22:53.362 [INFO] [Thread-65505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:22:53.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:22:53.996 [DEBUG] [Thread-65505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:22:53.997 [DEBUG] [Thread-65505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:22:53.997 [DEBUG] [Thread-65505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:22:54.037 [DEBUG] [Thread-65505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:22:54.038 [DEBUG] [Thread-65505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:22:54.041 [DEBUG] [Thread-65505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:22:54.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:22:54.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:22:54.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:22:54.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:22:54.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:22:54.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:22:54.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:22:54.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:22:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:22:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.015320 -999.00  +12.40  10.67     55   +3.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 9.5 10.7 168.0 14.7 12.8 -23.1 12.6 -22.1 12.4 -21.9 12.7 -22.6
2025-11-18T02:22:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:22:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:22:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.015320
2025-11-18T02:22:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:22:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:22:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:22:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:22:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:22:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:22:18', tmtdew=9.68, humidity=51.36, cloud=0.0, wind=17.34, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:22:50', seeing=1.26, atlas_timestamp='2025-11-18T00:22:03.648', atlas_cloud=1, atlas_rain=1, zp_data=[0.06274999999999942, 0.006249999999999645, 0.10125000000000028, 0.10249999999999915, 0.013500000000000512, 0.07325000000000159, -0.016000000000000014, 0.01925000000000132, 0.07849999999999824, 0.11500000000000021, 0.2647499999999994, 0.10850000000000115, 0.1460000000000008, 0.07124999999999915, 0.019999999999999574, -0.017500000000001847, 0.05075000000000074, 0.2370000000000001, 0.2914999999999992, 0.1897499999999983, 0.1659999999999986, 0.05874999999999986, 0.045750000000001734, 0.05075000000000074, 0.1739999999999995, 0.32450000000000045, 0.4972499999999993, 0.3174999999999999, 0.274, 0.12900000000000134, 0.11600000000000144, 0.2920000000000007, 0.47974999999999923], zp_timestamp='2025-11-18T00:19:00')
2025-11-18T02:22:54.067 [DEBUG] [Thread-65505] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:22:54.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:22:54.163 [DEBUG] [Thread-65508] [transport.py] [_log()] starting thread (client mode): 0xd31ccfd0
2025-11-18T02:22:54.163 [DEBUG] [Thread-65508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:22:54.178 [DEBUG] [Thread-65508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:22:54.178 [INFO] [Thread-65508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:22:54.186 [DEBUG] [Thread-65508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:22:54.186 [DEBUG] [Thread-65508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:22:54.186 [DEBUG] [Thread-65508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] client lang: <none>
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] server lang: <none>
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] kex follows: False
2025-11-18T02:22:54.187 [DEBUG] [Thread-65508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:22:54.188 [DEBUG] [Thread-65508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:22:54.188 [DEBUG] [Thread-65508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:22:54.188 [DEBUG] [Thread-65508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:22:54.188 [DEBUG] [Thread-65508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:22:54.188 [DEBUG] [Thread-65508] [transport.py] [_log()] Compression: none
2025-11-18T02:22:54.188 [DEBUG] [Thread-65508] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:22:54.244 [DEBUG] [Thread-65508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:22:54.244 [DEBUG] [Thread-65508] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:22:54.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:22:54.245 [DEBUG] [Thread-65508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:22:54.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:22:54.300 [DEBUG] [Thread-65508] [transport.py] [_log()] userauth is OK
2025-11-18T02:22:54.300 [DEBUG] [Thread-65508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:22:54.300 [DEBUG] [Thread-65508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:22:54.300 [DEBUG] [Thread-65508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:22:54.300 [DEBUG] [Thread-65508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:22:54.319 [INFO] [Thread-65508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:22:54.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:22:54.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:22:55.152 [DEBUG] [Thread-65508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:22:55.153 [DEBUG] [Thread-65508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:22:55.200 [DEBUG] [Thread-65508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:22:55.200 [DEBUG] [Thread-65508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:22:55.209 [DEBUG] [Thread-65508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:22:55.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:22:55.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:22:55.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:22:55.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:22:55.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:22:55.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:22:55.244 [DEBUG] [Thread-65508] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:23:02.426 [DEBUG] [Thread-65510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:03.923 [DEBUG] [Thread-65511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:12.533 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:18.971 [DEBUG] [Thread-65512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:21.465 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:23:25.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:23:25.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:23:25.567 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 23, 22), 9.74, 51.15, 0.0, 15.86, 12.38, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:23:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:23:22
2025-11-18T02:23:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:23:26.187 [DEBUG] [Thread-65513] [transport.py] [_log()] starting thread (client mode): 0xd07d9840
2025-11-18T02:23:26.187 [DEBUG] [Thread-65513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:23:26.207 [DEBUG] [Thread-65513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:23:26.207 [INFO] [Thread-65513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:23:26.210 [DEBUG] [Thread-65513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:23:26.210 [DEBUG] [Thread-65513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:23:26.210 [DEBUG] [Thread-65513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:23:26.210 [DEBUG] [Thread-65513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:23:26.210 [DEBUG] [Thread-65513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:23:26.210 [DEBUG] [Thread-65513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:23:26.210 [DEBUG] [Thread-65513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:23:26.210 [DEBUG] [Thread-65513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] client lang: <none>
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] server lang: <none>
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] kex follows: False
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] Compression: none
2025-11-18T02:23:26.211 [DEBUG] [Thread-65513] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:23:26.227 [DEBUG] [Thread-65513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:23:26.227 [DEBUG] [Thread-65513] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:23:26.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:23:26.228 [DEBUG] [Thread-65513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:23:26.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:23:26.269 [DEBUG] [Thread-65513] [transport.py] [_log()] userauth is OK
2025-11-18T02:23:26.269 [DEBUG] [Thread-65513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:23:26.269 [DEBUG] [Thread-65513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:23:26.269 [DEBUG] [Thread-65513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:23:26.269 [DEBUG] [Thread-65513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:23:26.308 [INFO] [Thread-65513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:23:26.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:23:26.954 [DEBUG] [Thread-65513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:23:26.954 [DEBUG] [Thread-65513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:23:26.954 [DEBUG] [Thread-65513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:23:26.995 [DEBUG] [Thread-65513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:23:26.995 [DEBUG] [Thread-65513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:23:26.998 [DEBUG] [Thread-65513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:23:27.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:23:27.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:23:27.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:23:27.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:23:27.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:23:27.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:23:27.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:23:27.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:23:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:23:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.015667 -999.00  +12.30  10.34     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.1 10.3 159.0 13.1 12.8 -23.1 12.6 -22.2 12.4 -21.8 12.7 -22.8
2025-11-18T02:23:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:23:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:23:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.015667
2025-11-18T02:23:27.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:23:27.030 [DEBUG] [Thread-65513] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:23:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:23:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:23:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:23:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:23:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:23:22', tmtdew=9.74, humidity=51.15, cloud=0.0, wind=15.86, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:23:22', seeing=1.53, atlas_timestamp='2025-11-18T00:22:33.629', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.0677500000000002, 0.09025000000000105, 0.09199999999999875, 0.09750000000000014, 0.15625, 0.011999999999998678, 0.035250000000001336, 0.08349999999999902, 0.07099999999999973, 0.04824999999999946, 0.10749999999999993, 0.1999999999999993, 0.11824999999999974, -0.0010000000000012221, -0.008000000000000895, 0.05975000000000108, 0.1485000000000003, 0.17799999999999905, 0.15174999999999983, 0.11199999999999832, 0.09174999999999933, 0.06825000000000081, 0.06174999999999997, 0.08349999999999902, 0.3025000000000002, 0.2777499999999993, 0.19100000000000072, 0.12049999999999983, 0.09500000000000242, 0.09700000000000131, 0.10500000000000043, 0.35274999999999945], zp_timestamp='2025-11-18T00:22:00')
2025-11-18T02:23:27.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:23:27.128 [DEBUG] [Thread-65516] [transport.py] [_log()] starting thread (client mode): 0xd07aab90
2025-11-18T02:23:27.129 [DEBUG] [Thread-65516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:23:27.144 [DEBUG] [Thread-65516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:23:27.144 [INFO] [Thread-65516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:23:27.151 [DEBUG] [Thread-65516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] client lang: <none>
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] server lang: <none>
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] kex follows: False
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] Compression: none
2025-11-18T02:23:27.152 [DEBUG] [Thread-65516] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:23:27.213 [DEBUG] [Thread-65516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:23:27.214 [DEBUG] [Thread-65516] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:23:27.214 [DEBUG] [Thread-65516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:23:27.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:23:27.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:23:27.273 [DEBUG] [Thread-65516] [transport.py] [_log()] userauth is OK
2025-11-18T02:23:27.273 [DEBUG] [Thread-65516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:23:27.273 [DEBUG] [Thread-65516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:23:27.273 [DEBUG] [Thread-65516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:23:27.273 [DEBUG] [Thread-65516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:23:27.292 [INFO] [Thread-65516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:23:27.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:23:27.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:23:28.197 [DEBUG] [Thread-65516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:23:28.197 [DEBUG] [Thread-65516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:23:28.245 [DEBUG] [Thread-65516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:23:28.245 [DEBUG] [Thread-65516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:23:28.255 [DEBUG] [Thread-65516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:23:28.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:23:28.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:23:28.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:23:28.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:23:28.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:23:28.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:23:28.290 [DEBUG] [Thread-65516] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:23:34.000 [DEBUG] [Thread-65518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:49.046 [DEBUG] [Thread-65519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:50.217 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:50.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:23:58.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:23:58.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:23:58.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:23:58.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 23, 54), 9.77, 51.06, 0.0, 14.8, 12.4, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:23:58.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:23:54
2025-11-18T02:23:59.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:23:59.225 [DEBUG] [Thread-65520] [transport.py] [_log()] starting thread (client mode): 0xd07958a0
2025-11-18T02:23:59.225 [DEBUG] [Thread-65520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:23:59.246 [DEBUG] [Thread-65520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:23:59.246 [INFO] [Thread-65520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:23:59.249 [DEBUG] [Thread-65520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:23:59.249 [DEBUG] [Thread-65520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:23:59.249 [DEBUG] [Thread-65520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:23:59.249 [DEBUG] [Thread-65520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:23:59.249 [DEBUG] [Thread-65520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:23:59.249 [DEBUG] [Thread-65520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] client lang: <none>
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] server lang: <none>
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] kex follows: False
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] Compression: none
2025-11-18T02:23:59.250 [DEBUG] [Thread-65520] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:23:59.268 [DEBUG] [Thread-65520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:23:59.268 [DEBUG] [Thread-65520] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:23:59.269 [DEBUG] [Thread-65520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:23:59.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:23:59.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:23:59.270 [DEBUG] [Thread-65520] [transport.py] [_log()] userauth is OK
2025-11-18T02:23:59.270 [DEBUG] [Thread-65520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:23:59.271 [DEBUG] [Thread-65520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:23:59.271 [DEBUG] [Thread-65520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:23:59.271 [DEBUG] [Thread-65520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:23:59.294 [INFO] [Thread-65520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:23:59.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:23:59.950 [DEBUG] [Thread-65520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:23:59.951 [DEBUG] [Thread-65520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:23:59.951 [DEBUG] [Thread-65520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:23:59.991 [DEBUG] [Thread-65520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:23:59.992 [DEBUG] [Thread-65520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:23:59.994 [DEBUG] [Thread-65520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:24:00.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:24:00.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:24:00.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:24:00.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:24:00.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:24:00.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:24:00.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:24:00.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:24:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:24:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.016014 -999.00  +12.30   9.17     55   +3.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.3 9.2 166.4 12.1 12.8 -23.1 12.7 -22.2 12.4 -21.8 12.7 -22.7
2025-11-18T02:24:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:24:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:24:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.016014
2025-11-18T02:24:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:24:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:24:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:24:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:24:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:24:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:23:54', tmtdew=9.77, humidity=51.06, cloud=0.0, wind=14.8, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:23:54', seeing=1.15, atlas_timestamp='2025-11-18T00:23:03.610', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.0677500000000002, 0.09025000000000105, 0.09199999999999875, 0.09750000000000014, 0.15625, 0.011999999999998678, 0.035250000000001336, 0.08349999999999902, 0.07099999999999973, 0.04824999999999946, 0.10749999999999993, 0.1999999999999993, 0.11824999999999974, -0.0010000000000012221, -0.008000000000000895, 0.05975000000000108, 0.1485000000000003, 0.17799999999999905, 0.15174999999999983, 0.11199999999999832, 0.09174999999999933, 0.06825000000000081, 0.06174999999999997, 0.08349999999999902, 0.3025000000000002, 0.2777499999999993, 0.19100000000000072, 0.12049999999999983, 0.09500000000000242, 0.09700000000000131, 0.10500000000000043, 0.35274999999999945], zp_timestamp='2025-11-18T00:22:00')
2025-11-18T02:24:00.019 [DEBUG] [Thread-65520] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:24:00.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:24:00.115 [DEBUG] [Thread-65523] [transport.py] [_log()] starting thread (client mode): 0xd0797910
2025-11-18T02:24:00.116 [DEBUG] [Thread-65523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:24:00.130 [DEBUG] [Thread-65523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:24:00.131 [INFO] [Thread-65523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:24:00.138 [DEBUG] [Thread-65523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:24:00.138 [DEBUG] [Thread-65523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] client lang: <none>
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] server lang: <none>
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] kex follows: False
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:24:00.139 [DEBUG] [Thread-65523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:24:00.140 [DEBUG] [Thread-65523] [transport.py] [_log()] Compression: none
2025-11-18T02:24:00.140 [DEBUG] [Thread-65523] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:24:00.196 [DEBUG] [Thread-65523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:24:00.197 [DEBUG] [Thread-65523] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:24:00.197 [DEBUG] [Thread-65523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:24:00.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:24:00.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:24:00.256 [DEBUG] [Thread-65523] [transport.py] [_log()] userauth is OK
2025-11-18T02:24:00.257 [DEBUG] [Thread-65523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:24:00.257 [DEBUG] [Thread-65523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:24:00.257 [DEBUG] [Thread-65523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:24:00.257 [DEBUG] [Thread-65523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:24:00.280 [INFO] [Thread-65523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:24:00.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:24:00.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:24:01.167 [DEBUG] [Thread-65523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:24:01.167 [DEBUG] [Thread-65523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:24:01.215 [DEBUG] [Thread-65523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:24:01.215 [DEBUG] [Thread-65523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:24:01.224 [DEBUG] [Thread-65523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:24:01.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:24:01.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:24:01.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:24:01.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:24:01.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:24:01.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:24:01.257 [DEBUG] [Thread-65523] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:24:02.498 [DEBUG] [Thread-65525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:24:04.078 [DEBUG] [Thread-65526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:24:19.117 [DEBUG] [Thread-65527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:24:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:24:31.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:24:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:24:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 24, 26), 9.75, 51.11, 0.0, 16.16, 12.32, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:24:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:24:26
2025-11-18T02:24:32.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:24:32.202 [DEBUG] [Thread-65528] [transport.py] [_log()] starting thread (client mode): 0xd0797010
2025-11-18T02:24:32.202 [DEBUG] [Thread-65528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:24:32.225 [DEBUG] [Thread-65528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:24:32.225 [INFO] [Thread-65528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:24:32.228 [DEBUG] [Thread-65528] [transport.py] [_log()] client lang: <none>
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] server lang: <none>
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] kex follows: False
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] Compression: none
2025-11-18T02:24:32.229 [DEBUG] [Thread-65528] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:24:32.248 [DEBUG] [Thread-65528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:24:32.249 [DEBUG] [Thread-65528] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:24:32.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:24:32.250 [DEBUG] [Thread-65528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:24:32.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:24:32.252 [DEBUG] [Thread-65528] [transport.py] [_log()] userauth is OK
2025-11-18T02:24:32.252 [DEBUG] [Thread-65528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:24:32.252 [DEBUG] [Thread-65528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:24:32.252 [DEBUG] [Thread-65528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:24:32.252 [DEBUG] [Thread-65528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:24:32.272 [INFO] [Thread-65528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:24:32.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:24:32.928 [DEBUG] [Thread-65528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:24:32.928 [DEBUG] [Thread-65528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:24:32.929 [DEBUG] [Thread-65528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:24:32.969 [DEBUG] [Thread-65528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:24:32.969 [DEBUG] [Thread-65528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:24:32.972 [DEBUG] [Thread-65528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:24:32.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:24:32.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:24:32.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:24:32.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:24:32.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:24:32.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:24:32.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:24:32.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:24:32.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:24:32.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.016708 -999.00  +12.30  10.73     55   +3.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.0 10.7 174.2 13.8 12.7 -23.0 12.6 -22.1 12.4 -21.8 12.7 -22.5
2025-11-18T02:24:32.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:24:32.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:24:32.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.016708
2025-11-18T02:24:32.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:24:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:24:32.997 [DEBUG] [Thread-65528] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:24:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:24:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:24:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:24:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:24:26', tmtdew=9.75, humidity=51.11, cloud=0.0, wind=16.16, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:24:26', seeing=1.15, atlas_timestamp='2025-11-18T00:24:03.571', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.0677500000000002, 0.09025000000000105, 0.09199999999999875, 0.09750000000000014, 0.15625, 0.011999999999998678, 0.035250000000001336, 0.08349999999999902, 0.07099999999999973, 0.04824999999999946, 0.10749999999999993, 0.1999999999999993, 0.11824999999999974, -0.0010000000000012221, -0.008000000000000895, 0.05975000000000108, 0.1485000000000003, 0.17799999999999905, 0.15174999999999983, 0.11199999999999832, 0.09174999999999933, 0.06825000000000081, 0.06174999999999997, 0.08349999999999902, 0.3025000000000002, 0.2777499999999993, 0.19100000000000072, 0.12049999999999983, 0.09500000000000242, 0.09700000000000131, 0.10500000000000043, 0.35274999999999945], zp_timestamp='2025-11-18T00:22:00')
2025-11-18T02:24:33.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:24:33.096 [DEBUG] [Thread-65531] [transport.py] [_log()] starting thread (client mode): 0xd31cf520
2025-11-18T02:24:33.097 [DEBUG] [Thread-65531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:24:33.114 [DEBUG] [Thread-65531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:24:33.114 [INFO] [Thread-65531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:24:33.123 [DEBUG] [Thread-65531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:24:33.123 [DEBUG] [Thread-65531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:24:33.123 [DEBUG] [Thread-65531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:24:33.123 [DEBUG] [Thread-65531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:24:33.123 [DEBUG] [Thread-65531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:24:33.123 [DEBUG] [Thread-65531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] client lang: <none>
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] server lang: <none>
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] kex follows: False
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:24:33.124 [DEBUG] [Thread-65531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:24:33.125 [DEBUG] [Thread-65531] [transport.py] [_log()] Compression: none
2025-11-18T02:24:33.125 [DEBUG] [Thread-65531] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:24:33.178 [DEBUG] [Thread-65531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:24:33.178 [DEBUG] [Thread-65531] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:24:33.178 [DEBUG] [Thread-65531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:24:33.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:24:33.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:24:33.236 [DEBUG] [Thread-65531] [transport.py] [_log()] userauth is OK
2025-11-18T02:24:33.237 [DEBUG] [Thread-65531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:24:33.237 [DEBUG] [Thread-65531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:24:33.237 [DEBUG] [Thread-65531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:24:33.237 [DEBUG] [Thread-65531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:24:33.260 [INFO] [Thread-65531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:24:33.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:24:33.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:24:34.082 [DEBUG] [Thread-65531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:24:34.082 [DEBUG] [Thread-65531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:24:34.129 [DEBUG] [Thread-65531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:24:34.130 [DEBUG] [Thread-65531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:24:34.138 [DEBUG] [Thread-65531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:24:34.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:24: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')
2025-11-18T02:24:34.148 [DEBUG] [Thread-65533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:24:34.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:24:34.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:24:34.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:24:34.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:24:34.175 [DEBUG] [Thread-65531] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:24:48.464 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:24:49.189 [DEBUG] [Thread-65534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:24:50.453 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:24:50.454 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:24:57.305 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:25:01.412 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:25:02.551 [DEBUG] [Thread-65535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:25:04.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:25:04.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:25:04.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:25:04.218 [DEBUG] [Thread-65536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:25:04.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 24, 58), 9.69, 51.65, 0.0, 14.35, 12.27, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:25:04.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:24:58
2025-11-18T02:25:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:25:05.118 [DEBUG] [Thread-65537] [transport.py] [_log()] starting thread (client mode): 0xd07a3d90
2025-11-18T02:25:05.118 [DEBUG] [Thread-65537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:25:05.138 [DEBUG] [Thread-65537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:25:05.138 [INFO] [Thread-65537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:25:05.141 [DEBUG] [Thread-65537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:25:05.141 [DEBUG] [Thread-65537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:25:05.141 [DEBUG] [Thread-65537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:25:05.141 [DEBUG] [Thread-65537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] client lang: <none>
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] server lang: <none>
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] kex follows: False
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:25:05.142 [DEBUG] [Thread-65537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:25:05.143 [DEBUG] [Thread-65537] [transport.py] [_log()] Compression: none
2025-11-18T02:25:05.143 [DEBUG] [Thread-65537] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:25:05.160 [DEBUG] [Thread-65537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:25:05.161 [DEBUG] [Thread-65537] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:25:05.161 [DEBUG] [Thread-65537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:25:05.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:25:05.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:25:05.163 [DEBUG] [Thread-65537] [transport.py] [_log()] userauth is OK
2025-11-18T02:25:05.163 [DEBUG] [Thread-65537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:25:05.163 [DEBUG] [Thread-65537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:25:05.163 [DEBUG] [Thread-65537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:25:05.163 [DEBUG] [Thread-65537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:25:05.188 [INFO] [Thread-65537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:25:05.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:25:11.918 [DEBUG] [Thread-65537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:25:11.918 [DEBUG] [Thread-65537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:25:11.918 [DEBUG] [Thread-65537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:25:11.959 [DEBUG] [Thread-65537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:25:11.959 [DEBUG] [Thread-65537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:25:11.962 [DEBUG] [Thread-65537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:25:12.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:25:12.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:25:12.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:25:12.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:25:12.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:25:12.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:25:12.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:25:12.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:25:12.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:25:12.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.017056 -999.00  +12.30  10.99     55   +3.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.2 11.0 167.0 14.8 12.8 -23.0 12.6 -22.2 12.4 -21.8 12.7 -22.5
2025-11-18T02:25:12.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:25:12.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:25:12.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.017056
2025-11-18T02:25:12.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:25:12.035 [DEBUG] [Thread-65537] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:25:12.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:25:12.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:25:12.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:25:12.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:25:12.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:24:58', tmtdew=9.69, humidity=51.65, cloud=0.0, wind=14.35, temperature=12.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:24:58', seeing=1.37, atlas_timestamp='2025-11-18T00:24:33.638', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.0677500000000002, 0.09025000000000105, 0.09199999999999875, 0.09750000000000014, 0.15625, 0.011999999999998678, 0.035250000000001336, 0.08349999999999902, 0.07099999999999973, 0.04824999999999946, 0.10749999999999993, 0.1999999999999993, 0.11824999999999974, -0.0010000000000012221, -0.008000000000000895, 0.05975000000000108, 0.1485000000000003, 0.17799999999999905, 0.15174999999999983, 0.11199999999999832, 0.09174999999999933, 0.06825000000000081, 0.06174999999999997, 0.08349999999999902, 0.3025000000000002, 0.2777499999999993, 0.19100000000000072, 0.12049999999999983, 0.09500000000000242, 0.09700000000000131, 0.10500000000000043, 0.35274999999999945], zp_timestamp='2025-11-18T00:22:00')
2025-11-18T02:25:12.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:25:12.133 [DEBUG] [Thread-65540] [transport.py] [_log()] starting thread (client mode): 0xd31cd6c0
2025-11-18T02:25:12.133 [DEBUG] [Thread-65540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:25:12.152 [DEBUG] [Thread-65540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:25:12.152 [INFO] [Thread-65540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] client lang: <none>
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] server lang: <none>
2025-11-18T02:25:12.160 [DEBUG] [Thread-65540] [transport.py] [_log()] kex follows: False
2025-11-18T02:25:12.161 [DEBUG] [Thread-65540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:25:12.161 [DEBUG] [Thread-65540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:25:12.161 [DEBUG] [Thread-65540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:25:12.161 [DEBUG] [Thread-65540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:25:12.161 [DEBUG] [Thread-65540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:25:12.161 [DEBUG] [Thread-65540] [transport.py] [_log()] Compression: none
2025-11-18T02:25:12.161 [DEBUG] [Thread-65540] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:25:12.221 [DEBUG] [Thread-65540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:25:12.221 [DEBUG] [Thread-65540] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:25:12.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:25:12.222 [DEBUG] [Thread-65540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:25:12.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:25:12.276 [DEBUG] [Thread-65540] [transport.py] [_log()] userauth is OK
2025-11-18T02:25:12.277 [DEBUG] [Thread-65540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:25:12.277 [DEBUG] [Thread-65540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:25:12.277 [DEBUG] [Thread-65540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:25:12.277 [DEBUG] [Thread-65540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:25:12.297 [INFO] [Thread-65540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:25:12.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:25:12.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:25:13.161 [DEBUG] [Thread-65540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:25:13.161 [DEBUG] [Thread-65540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:25:13.211 [DEBUG] [Thread-65540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:25:13.211 [DEBUG] [Thread-65540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:25:13.223 [DEBUG] [Thread-65540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:25:13.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:25:13.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:25:13.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:25:13.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:25:13.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:25:13.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:25:13.263 [DEBUG] [Thread-65540] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:25:19.245 [DEBUG] [Thread-65542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:25:34.282 [DEBUG] [Thread-65543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:25:43.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:25:43.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:25:43.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:25:43.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 25, 30), 9.62, 51.86, 0.0, 14.36, 12.22, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:25:43.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:25:30
2025-11-18T02:25:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:25:44.203 [DEBUG] [Thread-65544] [transport.py] [_log()] starting thread (client mode): 0xd0794ee0
2025-11-18T02:25:44.203 [DEBUG] [Thread-65544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:25:44.223 [DEBUG] [Thread-65544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:25:44.224 [INFO] [Thread-65544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:25:44.226 [DEBUG] [Thread-65544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:25:44.232 [DEBUG] [Thread-65544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:25:44.232 [DEBUG] [Thread-65544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] client lang: <none>
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] server lang: <none>
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] kex follows: False
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] Compression: none
2025-11-18T02:25:44.233 [DEBUG] [Thread-65544] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:25:44.251 [DEBUG] [Thread-65544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:25:44.252 [DEBUG] [Thread-65544] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:25:44.252 [DEBUG] [Thread-65544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:25:44.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:25:44.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:25:44.293 [DEBUG] [Thread-65544] [transport.py] [_log()] userauth is OK
2025-11-18T02:25:44.293 [DEBUG] [Thread-65544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:25:44.293 [DEBUG] [Thread-65544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:25:44.293 [DEBUG] [Thread-65544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:25:44.293 [DEBUG] [Thread-65544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:25:44.325 [INFO] [Thread-65544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:25:44.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:25:44.976 [DEBUG] [Thread-65544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:25:44.976 [DEBUG] [Thread-65544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:25:44.976 [DEBUG] [Thread-65544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:25:45.017 [DEBUG] [Thread-65544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:25:45.017 [DEBUG] [Thread-65544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:25:45.020 [DEBUG] [Thread-65544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:25:45.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:25:45.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:25:45.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:25:45.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:25:45.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:25:45.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:25:45.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:25:45.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:25:45.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:25:45.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.017403 -999.00  +12.30  10.91     56   +3.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.5 10.9 155.0 18.1 12.7 -22.9 12.6 -22.0 12.3 -21.6 12.7 -22.5
2025-11-18T02:25:45.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:25:45.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:25:45.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.017403
2025-11-18T02:25:45.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:25:45.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:25:45.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:25:45.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:25:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:25:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:25:30', tmtdew=9.62, humidity=51.86, cloud=0.0, wind=14.36, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:25:30', seeing=1.19, atlas_timestamp='2025-11-18T00:25:03.619', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.0677500000000002, 0.09025000000000105, 0.09199999999999875, 0.09750000000000014, 0.15625, 0.011999999999998678, 0.035250000000001336, 0.08349999999999902, 0.07099999999999973, 0.04824999999999946, 0.10749999999999993, 0.1999999999999993, 0.11824999999999974, -0.0010000000000012221, -0.008000000000000895, 0.05975000000000108, 0.1485000000000003, 0.17799999999999905, 0.15174999999999983, 0.11199999999999832, 0.09174999999999933, 0.06825000000000081, 0.06174999999999997, 0.08349999999999902, 0.3025000000000002, 0.2777499999999993, 0.19100000000000072, 0.12049999999999983, 0.09500000000000242, 0.09700000000000131, 0.10500000000000043, 0.35274999999999945], zp_timestamp='2025-11-18T00:22:00')
2025-11-18T02:25:45.044 [DEBUG] [Thread-65544] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:25:45.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:25:45.139 [DEBUG] [Thread-65547] [transport.py] [_log()] starting thread (client mode): 0xd07ad8d0
2025-11-18T02:25:45.139 [DEBUG] [Thread-65547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:25:45.154 [DEBUG] [Thread-65547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:25:45.154 [INFO] [Thread-65547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:25:45.162 [DEBUG] [Thread-65547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:25:45.162 [DEBUG] [Thread-65547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:25:45.162 [DEBUG] [Thread-65547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:25:45.162 [DEBUG] [Thread-65547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:25:45.162 [DEBUG] [Thread-65547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] client lang: <none>
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] server lang: <none>
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] kex follows: False
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] Compression: none
2025-11-18T02:25:45.163 [DEBUG] [Thread-65547] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:25:45.223 [DEBUG] [Thread-65547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:25:45.223 [DEBUG] [Thread-65547] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:25:45.224 [DEBUG] [Thread-65547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:25:45.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:25:45.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:25:45.284 [DEBUG] [Thread-65547] [transport.py] [_log()] userauth is OK
2025-11-18T02:25:45.284 [DEBUG] [Thread-65547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:25:45.284 [DEBUG] [Thread-65547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:25:45.284 [DEBUG] [Thread-65547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:25:45.284 [DEBUG] [Thread-65547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:25:45.303 [INFO] [Thread-65547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:25:45.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:25:45.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:25:46.188 [DEBUG] [Thread-65547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:25:46.189 [DEBUG] [Thread-65547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:25:46.236 [DEBUG] [Thread-65547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:25:46.236 [DEBUG] [Thread-65547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:25:46.245 [DEBUG] [Thread-65547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:25:46.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:25:46.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:25:46.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:25:46.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:25:46.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:25:46.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:25:46.279 [DEBUG] [Thread-65547] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:25:49.312 [DEBUG] [Thread-65549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:25:50.657 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:25:50.658 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:02.604 [DEBUG] [Thread-65550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:04.352 [DEBUG] [Thread-65551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:26:16.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:26:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:26:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 26, 2), 9.61, 51.91, 0.0, 14.49, 12.25, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:26:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:26:02
2025-11-18T02:26:17.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:26:17.224 [DEBUG] [Thread-65552] [transport.py] [_log()] starting thread (client mode): 0xd0794a90
2025-11-18T02:26:17.224 [DEBUG] [Thread-65552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:26:17.240 [DEBUG] [Thread-65552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:26:17.240 [INFO] [Thread-65552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] client lang: <none>
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] server lang: <none>
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] kex follows: False
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] Compression: none
2025-11-18T02:26:17.242 [DEBUG] [Thread-65552] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:26:17.250 [DEBUG] [Thread-65552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:26:17.251 [DEBUG] [Thread-65552] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:26:17.251 [DEBUG] [Thread-65552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:26:17.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:26:17.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:26:17.253 [DEBUG] [Thread-65552] [transport.py] [_log()] userauth is OK
2025-11-18T02:26:17.253 [DEBUG] [Thread-65552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:26:17.253 [DEBUG] [Thread-65552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:26:17.253 [DEBUG] [Thread-65552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:26:17.253 [DEBUG] [Thread-65552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:26:17.276 [INFO] [Thread-65552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:26:17.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:26:17.915 [DEBUG] [Thread-65552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:26:17.915 [DEBUG] [Thread-65552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:26:17.916 [DEBUG] [Thread-65552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:26:17.956 [DEBUG] [Thread-65552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:26:17.957 [DEBUG] [Thread-65552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:26:17.960 [DEBUG] [Thread-65552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:26:17.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:26:17.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:26:17.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:26:17.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:26:17.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:26:17.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:26:17.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:26:17.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:26:17.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:26:17.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.017750 -999.00  +12.30   8.87     56   +3.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 9.3 8.9 146.9 14.8 12.8 -22.9 12.6 -22.0 12.3 -21.7 12.7 -22.3
2025-11-18T02:26:17.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:26:17.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:26:17.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.017750
2025-11-18T02:26:17.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:26:17.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:26:17.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:26:17.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:26:17.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:26:17.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:26:02', tmtdew=9.61, humidity=51.91, cloud=0.0, wind=14.49, temperature=12.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:26:02', seeing=1.19, atlas_timestamp='2025-11-18T00:25:33.600', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:25:00')
2025-11-18T02:26:17.986 [DEBUG] [Thread-65552] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:26:18.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:26:18.075 [DEBUG] [Thread-65555] [transport.py] [_log()] starting thread (client mode): 0xd0794130
2025-11-18T02:26:18.075 [DEBUG] [Thread-65555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:26:18.090 [DEBUG] [Thread-65555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:26:18.090 [INFO] [Thread-65555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:26:18.097 [DEBUG] [Thread-65555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] client lang: <none>
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] server lang: <none>
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] kex follows: False
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] Compression: none
2025-11-18T02:26:18.098 [DEBUG] [Thread-65555] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:26:18.157 [DEBUG] [Thread-65555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:26:18.157 [DEBUG] [Thread-65555] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:26:18.157 [DEBUG] [Thread-65555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:26:18.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:26:18.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:26:18.220 [DEBUG] [Thread-65555] [transport.py] [_log()] userauth is OK
2025-11-18T02:26:18.220 [DEBUG] [Thread-65555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:26:18.221 [DEBUG] [Thread-65555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:26:18.221 [DEBUG] [Thread-65555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:26:18.221 [DEBUG] [Thread-65555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:26:18.241 [INFO] [Thread-65555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:26:18.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:26:18.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:26:19.146 [DEBUG] [Thread-65555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:26:19.146 [DEBUG] [Thread-65555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:26:19.194 [DEBUG] [Thread-65555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:26:19.194 [DEBUG] [Thread-65555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:26:19.203 [DEBUG] [Thread-65555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:26:19.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:26:19.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:26:19.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:26:19.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:26:19.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:26:19.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:26:19.236 [DEBUG] [Thread-65555] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:26:19.376 [DEBUG] [Thread-65557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:24.183 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:34.421 [DEBUG] [Thread-65558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:38.543 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:41.611 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:48.016 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:26:49.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:26:49.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
2025-11-18T02:26:49.448 [DEBUG] [Thread-65559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 26, 34), 9.56, 51.89, 0.0, 16.09, 12.22, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:26:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:26:34
2025-11-18T02:26:50.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:26:50.223 [DEBUG] [Thread-65560] [transport.py] [_log()] starting thread (client mode): 0xd31cd870
2025-11-18T02:26:50.223 [DEBUG] [Thread-65560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:26:50.243 [DEBUG] [Thread-65560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:26:50.243 [INFO] [Thread-65560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:26:50.246 [DEBUG] [Thread-65560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:26:50.246 [DEBUG] [Thread-65560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:26:50.246 [DEBUG] [Thread-65560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:26:50.246 [DEBUG] [Thread-65560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:26:50.246 [DEBUG] [Thread-65560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:26:50.246 [DEBUG] [Thread-65560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:26:50.246 [DEBUG] [Thread-65560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:26:50.246 [DEBUG] [Thread-65560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] client lang: <none>
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] server lang: <none>
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] kex follows: False
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] Compression: none
2025-11-18T02:26:50.247 [DEBUG] [Thread-65560] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:26:50.262 [DEBUG] [Thread-65560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:26:50.262 [DEBUG] [Thread-65560] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:26:50.262 [DEBUG] [Thread-65560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:26:50.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:26:50.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:26:50.263 [DEBUG] [Thread-65560] [transport.py] [_log()] userauth is OK
2025-11-18T02:26:50.263 [DEBUG] [Thread-65560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:26:50.263 [DEBUG] [Thread-65560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:26:50.263 [DEBUG] [Thread-65560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:26:50.263 [DEBUG] [Thread-65560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:26:50.272 [INFO] [Thread-65560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:26:50.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:26:50.861 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:50.862 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:26:50.921 [DEBUG] [Thread-65560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:26:50.921 [DEBUG] [Thread-65560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:26:50.921 [DEBUG] [Thread-65560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:26:50.962 [DEBUG] [Thread-65560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:26:50.962 [DEBUG] [Thread-65560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:26:50.964 [DEBUG] [Thread-65560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:26:50.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:26:50.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:26:50.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:26:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:26:50.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:26:50.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:26:50.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:26:50.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.018097 -999.00  +12.30  15.39     56   +3.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.4 15.4 164.0 18.2 12.7 -22.8 12.6 -22.0 12.3 -21.6 12.7 -22.3
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.018097
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:26:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:26:34', tmtdew=9.56, humidity=51.89, cloud=0.0, wind=16.09, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:26:34', seeing=1.17, atlas_timestamp='2025-11-18T00:26:03.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:25:00')
2025-11-18T02:26:50.983 [DEBUG] [Thread-65560] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:26:51.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:26:51.070 [DEBUG] [Thread-65563] [transport.py] [_log()] starting thread (client mode): 0xd31cf9a0
2025-11-18T02:26:51.070 [DEBUG] [Thread-65563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:26:51.085 [DEBUG] [Thread-65563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:26:51.085 [INFO] [Thread-65563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] client lang: <none>
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] server lang: <none>
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] kex follows: False
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] Compression: none
2025-11-18T02:26:51.093 [DEBUG] [Thread-65563] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:26:51.154 [DEBUG] [Thread-65563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:26:51.154 [DEBUG] [Thread-65563] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:26:51.154 [DEBUG] [Thread-65563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:26:51.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:26:51.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:26:51.212 [DEBUG] [Thread-65563] [transport.py] [_log()] userauth is OK
2025-11-18T02:26:51.212 [DEBUG] [Thread-65563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:26:51.212 [DEBUG] [Thread-65563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:26:51.212 [DEBUG] [Thread-65563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:26:51.212 [DEBUG] [Thread-65563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:26:51.227 [INFO] [Thread-65563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:26:51.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:26:51.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:26:52.159 [DEBUG] [Thread-65563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:26:52.159 [DEBUG] [Thread-65563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:26:52.207 [DEBUG] [Thread-65563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:26:52.207 [DEBUG] [Thread-65563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:26:52.215 [DEBUG] [Thread-65563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:26:52.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:26: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')
2025-11-18T02:26: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
2025-11-18T02:26:52.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:26:52.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:26:52.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:26:52.248 [DEBUG] [Thread-65563] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:27:02.662 [DEBUG] [Thread-65565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:27:04.476 [DEBUG] [Thread-65566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:27:19.515 [DEBUG] [Thread-65567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:27:22.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:27:22.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:27:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:27:22.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 27, 6), 9.57, 51.89, 0.0, 17.17, 12.25, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:27:22.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:27:06
2025-11-18T02:27:23.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:27:23.172 [DEBUG] [Thread-65568] [transport.py] [_log()] starting thread (client mode): 0xd07aca00
2025-11-18T02:27:23.172 [DEBUG] [Thread-65568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:27:23.193 [DEBUG] [Thread-65568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:27:23.193 [INFO] [Thread-65568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:27:23.196 [DEBUG] [Thread-65568] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:27:23.196 [DEBUG] [Thread-65568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:27:23.196 [DEBUG] [Thread-65568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:27:23.196 [DEBUG] [Thread-65568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:27:23.196 [DEBUG] [Thread-65568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:27:23.196 [DEBUG] [Thread-65568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] client lang: <none>
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] server lang: <none>
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] kex follows: False
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] Compression: none
2025-11-18T02:27:23.197 [DEBUG] [Thread-65568] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:27:23.215 [DEBUG] [Thread-65568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:27:23.216 [DEBUG] [Thread-65568] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:27:23.216 [DEBUG] [Thread-65568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:27:23.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:27:23.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:27:23.219 [DEBUG] [Thread-65568] [transport.py] [_log()] userauth is OK
2025-11-18T02:27:23.219 [DEBUG] [Thread-65568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:27:23.219 [DEBUG] [Thread-65568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:27:23.219 [DEBUG] [Thread-65568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:27:23.219 [DEBUG] [Thread-65568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:27:23.245 [INFO] [Thread-65568] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:27:23.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:27:23.833 [DEBUG] [Thread-65568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:27:23.833 [DEBUG] [Thread-65568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:27:23.834 [DEBUG] [Thread-65568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:27:23.874 [DEBUG] [Thread-65568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:27:23.874 [DEBUG] [Thread-65568] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:27:23.877 [DEBUG] [Thread-65568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:27:23.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:27:23.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:27:23.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:27:23.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:27:23.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:27:23.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:27:23.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:27:23.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:27:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:27:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.018502 -999.00  +12.30  11.73     56   +3.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.9 11.7 168.8 17.2 12.7 -22.9 12.6 -21.9 12.3 -21.7 12.7 -22.3
2025-11-18T02:27:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:27:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:27:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.018502
2025-11-18T02:27:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:27:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:27:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:27:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:27:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:27:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:27:06', tmtdew=9.57, humidity=51.89, cloud=0.0, wind=17.17, temperature=12.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:27:06', seeing=1.1, atlas_timestamp='2025-11-18T00:26:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:25:00')
2025-11-18T02:27:23.901 [DEBUG] [Thread-65568] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:27:23.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:27:23.998 [DEBUG] [Thread-65571] [transport.py] [_log()] starting thread (client mode): 0xd0710970
2025-11-18T02:27:23.998 [DEBUG] [Thread-65571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:27:24.013 [DEBUG] [Thread-65571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:27:24.013 [INFO] [Thread-65571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:27:24.021 [DEBUG] [Thread-65571] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:27:24.021 [DEBUG] [Thread-65571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:27:24.021 [DEBUG] [Thread-65571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:27:24.021 [DEBUG] [Thread-65571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] client lang: <none>
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] server lang: <none>
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] kex follows: False
2025-11-18T02:27:24.022 [DEBUG] [Thread-65571] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:27:24.023 [DEBUG] [Thread-65571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:27:24.023 [DEBUG] [Thread-65571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:27:24.023 [DEBUG] [Thread-65571] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:27:24.023 [DEBUG] [Thread-65571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:27:24.023 [DEBUG] [Thread-65571] [transport.py] [_log()] Compression: none
2025-11-18T02:27:24.023 [DEBUG] [Thread-65571] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:27:24.079 [DEBUG] [Thread-65571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:27:24.080 [DEBUG] [Thread-65571] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:27:24.080 [DEBUG] [Thread-65571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:27:24.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:27:24.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:27:24.136 [DEBUG] [Thread-65571] [transport.py] [_log()] userauth is OK
2025-11-18T02:27:24.136 [DEBUG] [Thread-65571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:27:24.137 [DEBUG] [Thread-65571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:27:24.137 [DEBUG] [Thread-65571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:27:24.137 [DEBUG] [Thread-65571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:27:24.153 [INFO] [Thread-65571] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:27:24.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:27:24.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:27:25.058 [DEBUG] [Thread-65571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:27:25.058 [DEBUG] [Thread-65571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:27:25.106 [DEBUG] [Thread-65571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:27:25.106 [DEBUG] [Thread-65571] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:27:25.115 [DEBUG] [Thread-65571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:27:25.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:27:25.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:27:25.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:27:25.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:27:25.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:27:25.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:27:25.149 [DEBUG] [Thread-65571] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:27:34.544 [DEBUG] [Thread-65573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:27:49.585 [DEBUG] [Thread-65574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:27:51.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:27:51.067 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:27:55.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:27:55.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:27:55.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:27:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 27, 38), 9.61, 51.91, 0.0, 16.13, 12.25, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:27:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:27:38
2025-11-18T02:27:55.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:27:56.063 [DEBUG] [Thread-65575] [transport.py] [_log()] starting thread (client mode): 0xd31cf6d0
2025-11-18T02:27:56.063 [DEBUG] [Thread-65575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:27:56.082 [DEBUG] [Thread-65575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:27:56.082 [INFO] [Thread-65575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:27:56.085 [DEBUG] [Thread-65575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:27:56.085 [DEBUG] [Thread-65575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:27:56.085 [DEBUG] [Thread-65575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] client lang: <none>
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] server lang: <none>
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] kex follows: False
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] Compression: none
2025-11-18T02:27:56.086 [DEBUG] [Thread-65575] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:27:56.102 [DEBUG] [Thread-65575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:27:56.103 [DEBUG] [Thread-65575] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:27:56.104 [DEBUG] [Thread-65575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:27:56.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:27:56.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:27:56.106 [DEBUG] [Thread-65575] [transport.py] [_log()] userauth is OK
2025-11-18T02:27:56.106 [DEBUG] [Thread-65575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:27:56.106 [DEBUG] [Thread-65575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:27:56.106 [DEBUG] [Thread-65575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:27:56.106 [DEBUG] [Thread-65575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:27:56.144 [INFO] [Thread-65575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:27:56.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:27:56.749 [DEBUG] [Thread-65575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:27:56.749 [DEBUG] [Thread-65575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:27:56.750 [DEBUG] [Thread-65575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:27:56.790 [DEBUG] [Thread-65575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:27:56.791 [DEBUG] [Thread-65575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:27:56.794 [DEBUG] [Thread-65575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:27:56.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:27:56.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:27:56.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:27:56.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:27:56.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:27:56.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:27:56.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:27:56.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:27:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:27:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.019196 -999.00  +12.30  12.98     56   +3.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.1 13.0 172.0 16.2 12.7 -22.8 12.6 -21.9 12.3 -21.5 12.7 -22.4
2025-11-18T02:27:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:27:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:27:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.019196
2025-11-18T02:27:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:27:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:27:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:27:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:27:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:27:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:27:38', tmtdew=9.61, humidity=51.91, cloud=0.0, wind=16.13, temperature=12.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:27:38', seeing=1.31, atlas_timestamp='2025-11-18T00:27:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:25:00')
2025-11-18T02:27:56.818 [DEBUG] [Thread-65575] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:27:56.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:27:56.914 [DEBUG] [Thread-65578] [transport.py] [_log()] starting thread (client mode): 0xd07ae650
2025-11-18T02:27:56.914 [DEBUG] [Thread-65578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:27:56.929 [DEBUG] [Thread-65578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:27:56.929 [INFO] [Thread-65578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] client lang: <none>
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] server lang: <none>
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] kex follows: False
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:27:56.937 [DEBUG] [Thread-65578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:27:56.938 [DEBUG] [Thread-65578] [transport.py] [_log()] Compression: none
2025-11-18T02:27:56.938 [DEBUG] [Thread-65578] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:27:56.996 [DEBUG] [Thread-65578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:27:56.996 [DEBUG] [Thread-65578] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:27:56.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:27:56.997 [DEBUG] [Thread-65578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:27:56.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:27:57.052 [DEBUG] [Thread-65578] [transport.py] [_log()] userauth is OK
2025-11-18T02:27:57.052 [DEBUG] [Thread-65578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:27:57.052 [DEBUG] [Thread-65578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:27:57.053 [DEBUG] [Thread-65578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:27:57.053 [DEBUG] [Thread-65578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:27:57.075 [INFO] [Thread-65578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:27:57.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:27:57.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:27:57.939 [DEBUG] [Thread-65578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:27:57.939 [DEBUG] [Thread-65578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:27:57.988 [DEBUG] [Thread-65578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:27:57.988 [DEBUG] [Thread-65578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:27:57.997 [DEBUG] [Thread-65578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:27:58.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:27:58.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:27:58.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:27:58.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:27:58.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:27:58.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:27:58.032 [DEBUG] [Thread-65578] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:28:02.718 [DEBUG] [Thread-65580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:04.617 [DEBUG] [Thread-65581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:19.656 [DEBUG] [Thread-65582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:28.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:28:28.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:28:28.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:28:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 28, 10), 9.59, 51.96, 0.0, 14.72, 12.23, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:28:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:28:10
2025-11-18T02:28:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:28:28.985 [DEBUG] [Thread-65583] [transport.py] [_log()] starting thread (client mode): 0xd0711c60
2025-11-18T02:28:28.985 [DEBUG] [Thread-65583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:28:29.006 [DEBUG] [Thread-65583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:28:29.006 [INFO] [Thread-65583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:28:29.009 [DEBUG] [Thread-65583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:28:29.009 [DEBUG] [Thread-65583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:28:29.009 [DEBUG] [Thread-65583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:28:29.009 [DEBUG] [Thread-65583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:28:29.009 [DEBUG] [Thread-65583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] client lang: <none>
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] server lang: <none>
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] kex follows: False
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:28:29.010 [DEBUG] [Thread-65583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:28:29.011 [DEBUG] [Thread-65583] [transport.py] [_log()] Compression: none
2025-11-18T02:28:29.011 [DEBUG] [Thread-65583] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:28:29.028 [DEBUG] [Thread-65583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:28:29.029 [DEBUG] [Thread-65583] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:28:29.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:28:29.030 [DEBUG] [Thread-65583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:28:29.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:28:29.032 [DEBUG] [Thread-65583] [transport.py] [_log()] userauth is OK
2025-11-18T02:28:29.032 [DEBUG] [Thread-65583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:28:29.032 [DEBUG] [Thread-65583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:28:29.032 [DEBUG] [Thread-65583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:28:29.032 [DEBUG] [Thread-65583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:28:29.049 [INFO] [Thread-65583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:28:29.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:28:29.670 [DEBUG] [Thread-65583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:28:29.670 [DEBUG] [Thread-65583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:28:29.671 [DEBUG] [Thread-65583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:28:29.711 [DEBUG] [Thread-65583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:28:29.711 [DEBUG] [Thread-65583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:28:29.714 [DEBUG] [Thread-65583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:28:29.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:28:29.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:28:29.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:28:29.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:28:29.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:28:29.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:28:29.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:28:29.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:28:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:28:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.019486 -999.00  +12.30  11.45     55   +3.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.5 11.4 146.0 18.2 12.7 -22.7 12.6 -22.0 12.4 -21.7 12.7 -22.3
2025-11-18T02:28:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:28:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:28:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.019486
2025-11-18T02:28:29.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:28:29.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:28:29.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:28:29.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:28:29.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:28:29.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:28:10', tmtdew=9.59, humidity=51.96, cloud=0.0, wind=14.72, temperature=12.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:28:10', seeing=1.2, atlas_timestamp='2025-11-18T00:28:03.590', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:25:00')
2025-11-18T02:28:29.735 [DEBUG] [Thread-65583] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:28:29.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:28:29.831 [DEBUG] [Thread-65586] [transport.py] [_log()] starting thread (client mode): 0xd0797b50
2025-11-18T02:28:29.831 [DEBUG] [Thread-65586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:28:29.846 [DEBUG] [Thread-65586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:28:29.846 [INFO] [Thread-65586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:28:29.853 [DEBUG] [Thread-65586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] client lang: <none>
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] server lang: <none>
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] kex follows: False
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:28:29.854 [DEBUG] [Thread-65586] [transport.py] [_log()] Compression: none
2025-11-18T02:28:29.855 [DEBUG] [Thread-65586] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:28:29.913 [DEBUG] [Thread-65586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:28:29.913 [DEBUG] [Thread-65586] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:28:29.914 [DEBUG] [Thread-65586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:28:29.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:28:29.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:28:29.968 [DEBUG] [Thread-65586] [transport.py] [_log()] userauth is OK
2025-11-18T02:28:29.968 [DEBUG] [Thread-65586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:28:29.968 [DEBUG] [Thread-65586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:28:29.969 [DEBUG] [Thread-65586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:28:29.969 [DEBUG] [Thread-65586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:28:29.986 [INFO] [Thread-65586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:28:29.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:28:29.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:28:30.842 [DEBUG] [Thread-65586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:28:30.842 [DEBUG] [Thread-65586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:28:30.890 [DEBUG] [Thread-65586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:28:30.890 [DEBUG] [Thread-65586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:28:30.898 [DEBUG] [Thread-65586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:28:30.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:28:30.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:28:30.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:28:30.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:28:30.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:28:30.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:28:30.931 [DEBUG] [Thread-65586] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:28:34.683 [DEBUG] [Thread-65588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:36.572 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:39.769 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:44.855 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:49.749 [DEBUG] [Thread-65589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:50.260 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:51.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:51.274 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:28:59.630 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:00.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:29:00.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:29:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:29:01.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 28, 42), 9.63, 51.88, 0.0, 16.9, 12.32, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:29:01.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:28:42
2025-11-18T02:29:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:29:01.867 [DEBUG] [Thread-65590] [transport.py] [_log()] starting thread (client mode): 0xd31cce50
2025-11-18T02:29:01.867 [DEBUG] [Thread-65590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:29:01.886 [DEBUG] [Thread-65590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:29:01.886 [INFO] [Thread-65590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] client lang: <none>
2025-11-18T02:29:01.890 [DEBUG] [Thread-65590] [transport.py] [_log()] server lang: <none>
2025-11-18T02:29:01.891 [DEBUG] [Thread-65590] [transport.py] [_log()] kex follows: False
2025-11-18T02:29:01.891 [DEBUG] [Thread-65590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:29:01.891 [DEBUG] [Thread-65590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:29:01.891 [DEBUG] [Thread-65590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:29:01.891 [DEBUG] [Thread-65590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:29:01.891 [DEBUG] [Thread-65590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:29:01.891 [DEBUG] [Thread-65590] [transport.py] [_log()] Compression: none
2025-11-18T02:29:01.891 [DEBUG] [Thread-65590] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:29:01.907 [DEBUG] [Thread-65590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:29:01.907 [DEBUG] [Thread-65590] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:29:01.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:29:01.908 [DEBUG] [Thread-65590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:29:01.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:29:01.910 [DEBUG] [Thread-65590] [transport.py] [_log()] userauth is OK
2025-11-18T02:29:01.911 [DEBUG] [Thread-65590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:29:01.911 [DEBUG] [Thread-65590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:29:01.911 [DEBUG] [Thread-65590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:29:01.911 [DEBUG] [Thread-65590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:29:01.926 [INFO] [Thread-65590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:29:01.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:29:02.487 [DEBUG] [Thread-65590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:29:02.487 [DEBUG] [Thread-65590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:29:02.487 [DEBUG] [Thread-65590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:29:02.527 [DEBUG] [Thread-65590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:29:02.527 [DEBUG] [Thread-65590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:29:02.529 [DEBUG] [Thread-65590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:29:02.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:29:02.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:29:02.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:29:02.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:29:02.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:29:02.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:29:02.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:29:02.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:29:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:29:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.019833 -999.00  +12.30  14.69     56   +3.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.3 14.7 161.2 18.1 12.7 -22.6 12.6 -21.9 12.3 -21.6 12.7 -22.3
2025-11-18T02:29:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:29:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:29:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.019833
2025-11-18T02:29:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:29:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:29:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:29:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:29:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:29:02.551 [DEBUG] [Thread-65590] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:29:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:28:42', tmtdew=9.63, humidity=51.88, cloud=0.0, wind=16.9, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:28:42', seeing=1.33, atlas_timestamp='2025-11-18T00:28:33.571', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:25:00')
2025-11-18T02:29:02.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:29:02.646 [DEBUG] [Thread-65593] [transport.py] [_log()] starting thread (client mode): 0xd31cf6d0
2025-11-18T02:29:02.647 [DEBUG] [Thread-65593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:29:02.661 [DEBUG] [Thread-65593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:29:02.661 [INFO] [Thread-65593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] client lang: <none>
2025-11-18T02:29:02.669 [DEBUG] [Thread-65593] [transport.py] [_log()] server lang: <none>
2025-11-18T02:29:02.670 [DEBUG] [Thread-65593] [transport.py] [_log()] kex follows: False
2025-11-18T02:29:02.670 [DEBUG] [Thread-65593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:29:02.670 [DEBUG] [Thread-65593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:29:02.670 [DEBUG] [Thread-65593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:29:02.670 [DEBUG] [Thread-65593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:29:02.670 [DEBUG] [Thread-65593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:29:02.670 [DEBUG] [Thread-65593] [transport.py] [_log()] Compression: none
2025-11-18T02:29:02.670 [DEBUG] [Thread-65593] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:29:02.729 [DEBUG] [Thread-65593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:29:02.730 [DEBUG] [Thread-65593] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:29:02.730 [DEBUG] [Thread-65593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:29:02.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:29:02.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:29:02.788 [DEBUG] [Thread-65593] [transport.py] [_log()] userauth is OK
2025-11-18T02:29:02.788 [DEBUG] [Thread-65593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:29:02.788 [DEBUG] [Thread-65593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:29:02.788 [DEBUG] [Thread-65593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:29:02.788 [DEBUG] [Thread-65593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:29:02.802 [DEBUG] [Thread-65595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:02.802 [INFO] [Thread-65593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:29:02.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:29:02.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:29:03.650 [DEBUG] [Thread-65593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:29:03.650 [DEBUG] [Thread-65593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:29:03.698 [DEBUG] [Thread-65593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:29:03.699 [DEBUG] [Thread-65593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:29:03.708 [DEBUG] [Thread-65593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:29:03.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:29:03.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:29:03.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:29:03.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:29:03.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:29:03.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:29:03.742 [DEBUG] [Thread-65593] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:29:04.046 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:04.777 [DEBUG] [Thread-65596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:19.815 [DEBUG] [Thread-65597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:23.432 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:27.832 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:29:33.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:29:33.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:29:33.948 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:34.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 29, 14), 9.64, 51.83, 0.0, 18.44, 12.28, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:29:34.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:29:14
2025-11-18T02:29:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:29:34.653 [DEBUG] [Thread-65598] [transport.py] [_log()] starting thread (client mode): 0xd31cd870
2025-11-18T02:29:34.654 [DEBUG] [Thread-65598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:29:34.675 [DEBUG] [Thread-65598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:29:34.675 [INFO] [Thread-65598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:29:34.678 [DEBUG] [Thread-65598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:29:34.678 [DEBUG] [Thread-65598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:29:34.678 [DEBUG] [Thread-65598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:29:34.678 [DEBUG] [Thread-65598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:29:34.678 [DEBUG] [Thread-65598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:29:34.678 [DEBUG] [Thread-65598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] client lang: <none>
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] server lang: <none>
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] kex follows: False
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:29:34.679 [DEBUG] [Thread-65598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:29:34.680 [DEBUG] [Thread-65598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:29:34.680 [DEBUG] [Thread-65598] [transport.py] [_log()] Compression: none
2025-11-18T02:29:34.680 [DEBUG] [Thread-65598] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:29:34.697 [DEBUG] [Thread-65598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:29:34.698 [DEBUG] [Thread-65598] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:29:34.699 [DEBUG] [Thread-65598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:29:34.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:29:34.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:29:34.701 [DEBUG] [Thread-65598] [transport.py] [_log()] userauth is OK
2025-11-18T02:29:34.701 [DEBUG] [Thread-65598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:29:34.702 [DEBUG] [Thread-65598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:29:34.702 [DEBUG] [Thread-65598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:29:34.702 [DEBUG] [Thread-65598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:29:34.724 [INFO] [Thread-65598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:29:34.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:29:34.843 [DEBUG] [Thread-65600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:35.357 [DEBUG] [Thread-65598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:29:35.358 [DEBUG] [Thread-65598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:29:35.358 [DEBUG] [Thread-65598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:29:35.398 [DEBUG] [Thread-65598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:29:35.399 [DEBUG] [Thread-65598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:29:35.401 [DEBUG] [Thread-65598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:29:35.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:29:35.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:29:35.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:29:35.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:29:35.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:29:35.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:29:35.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:29:35.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:29:35.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:29:35.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.020181 -999.00  +12.30  10.95     55   +3.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.9 10.9 151.4 14.8 12.7 -22.5 12.6 -22.0 12.3 -21.6 12.6 -22.3
2025-11-18T02:29:35.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:29:35.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:29:35.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.020181
2025-11-18T02:29:35.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:29:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:29:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:29:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:29:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:29:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:29:14', tmtdew=9.64, humidity=51.83, cloud=0.0, wind=18.44, temperature=12.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:29:14', seeing=1.33, atlas_timestamp='2025-11-18T00:29:03.638', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:27:00')
2025-11-18T02:29:35.427 [DEBUG] [Thread-65598] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:29:35.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:29:35.541 [DEBUG] [Thread-65602] [transport.py] [_log()] starting thread (client mode): 0xd317dab0
2025-11-18T02:29:35.541 [DEBUG] [Thread-65602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:29:35.555 [DEBUG] [Thread-65602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:29:35.555 [INFO] [Thread-65602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:29:35.563 [DEBUG] [Thread-65602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] client lang: <none>
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] server lang: <none>
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] kex follows: False
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] Compression: none
2025-11-18T02:29:35.564 [DEBUG] [Thread-65602] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:29:35.620 [DEBUG] [Thread-65602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:29:35.621 [DEBUG] [Thread-65602] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:29:35.621 [DEBUG] [Thread-65602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:29:35.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:29:35.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:29:35.676 [DEBUG] [Thread-65602] [transport.py] [_log()] userauth is OK
2025-11-18T02:29:35.677 [DEBUG] [Thread-65602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:29:35.677 [DEBUG] [Thread-65602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:29:35.677 [DEBUG] [Thread-65602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:29:35.677 [DEBUG] [Thread-65602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:29:35.696 [INFO] [Thread-65602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:29:35.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:29:35.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:29:36.537 [DEBUG] [Thread-65602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:29:36.537 [DEBUG] [Thread-65602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:29:36.585 [DEBUG] [Thread-65602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:29:36.585 [DEBUG] [Thread-65602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:29:36.594 [DEBUG] [Thread-65602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:29:36.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:29:36.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:29:36.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:29:36.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:29:36.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:29:36.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:29:36.626 [DEBUG] [Thread-65602] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:29:38.308 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:49.871 [DEBUG] [Thread-65604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:51.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:29:51.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:02.875 [DEBUG] [Thread-65605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:04.903 [DEBUG] [Thread-65606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:30:06.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:30:06.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:30:07.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 29, 46), 9.6, 51.78, 0.0, 18.42, 12.3, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:30:07.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:29:46
2025-11-18T02:30:07.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:30:07.559 [DEBUG] [Thread-65607] [transport.py] [_log()] starting thread (client mode): 0xd0796d40
2025-11-18T02:30:07.559 [DEBUG] [Thread-65607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:30:07.578 [DEBUG] [Thread-65607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:30:07.578 [INFO] [Thread-65607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] client lang: <none>
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] server lang: <none>
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] kex follows: False
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:30:07.580 [DEBUG] [Thread-65607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:30:07.581 [DEBUG] [Thread-65607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:30:07.581 [DEBUG] [Thread-65607] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:30:07.581 [DEBUG] [Thread-65607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:30:07.581 [DEBUG] [Thread-65607] [transport.py] [_log()] Compression: none
2025-11-18T02:30:07.581 [DEBUG] [Thread-65607] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:30:07.591 [DEBUG] [Thread-65607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:30:07.591 [DEBUG] [Thread-65607] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:30:07.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:30:07.591 [DEBUG] [Thread-65607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:30:07.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:30:07.592 [DEBUG] [Thread-65607] [transport.py] [_log()] userauth is OK
2025-11-18T02:30:07.592 [DEBUG] [Thread-65607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:30:07.592 [DEBUG] [Thread-65607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:30:07.592 [DEBUG] [Thread-65607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:30:07.592 [DEBUG] [Thread-65607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:30:07.601 [INFO] [Thread-65607] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:30:07.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:30:08.211 [DEBUG] [Thread-65607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:30:08.211 [DEBUG] [Thread-65607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:30:08.212 [DEBUG] [Thread-65607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:30:08.252 [DEBUG] [Thread-65607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:30:08.252 [DEBUG] [Thread-65607] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:30:08.256 [DEBUG] [Thread-65607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:30:08.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:30:08.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:30:08.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:30:08.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:30:08.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:30:08.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:30:08.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:30:08.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:30:08.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:30:08.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.020528 -999.00  +12.30  13.63     56   +3.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.6 13.6 164.8 15.2 12.7 -22.7 12.6 -21.9 12.3 -21.6 12.7 -22.1
2025-11-18T02:30:08.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:30:08.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:30:08.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.020528
2025-11-18T02:30:08.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:30:08.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:30:08.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:30:08.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:30:08.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:30:08.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:29:46', tmtdew=9.6, humidity=51.78, cloud=0.0, wind=18.42, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:29:47', seeing=1.45, atlas_timestamp='2025-11-18T00:29:33.619', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:27:00')
2025-11-18T02:30:08.291 [DEBUG] [Thread-65607] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:30:08.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:30:08.382 [DEBUG] [Thread-65610] [transport.py] [_log()] starting thread (client mode): 0xd3161930
2025-11-18T02:30:08.383 [DEBUG] [Thread-65610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:30:08.396 [DEBUG] [Thread-65610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:30:08.396 [INFO] [Thread-65610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:30:08.404 [DEBUG] [Thread-65610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:30:08.404 [DEBUG] [Thread-65610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] client lang: <none>
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] server lang: <none>
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] kex follows: False
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] Compression: none
2025-11-18T02:30:08.405 [DEBUG] [Thread-65610] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:30:08.464 [DEBUG] [Thread-65610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:30:08.464 [DEBUG] [Thread-65610] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:30:08.464 [DEBUG] [Thread-65610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:30:08.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:30:08.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:30:08.520 [DEBUG] [Thread-65610] [transport.py] [_log()] userauth is OK
2025-11-18T02:30:08.521 [DEBUG] [Thread-65610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:30:08.521 [DEBUG] [Thread-65610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:30:08.521 [DEBUG] [Thread-65610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:30:08.521 [DEBUG] [Thread-65610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:30:08.540 [INFO] [Thread-65610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:30:08.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:30:08.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:30:09.312 [DEBUG] [Thread-65610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:30:09.313 [DEBUG] [Thread-65610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:30:09.360 [DEBUG] [Thread-65610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:30:09.360 [DEBUG] [Thread-65610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:30:09.369 [DEBUG] [Thread-65610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:30:09.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:30:09.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:30:09.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:30:09.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:30:09.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:30:09.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:30:09.404 [DEBUG] [Thread-65610] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:30:19.927 [DEBUG] [Thread-65612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:34.961 [DEBUG] [Thread-65613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:30:39.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:30:39.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:30:40.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 30, 19), 9.58, 51.85, 0.0, 18.53, 12.33, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:30:40.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:30:19
2025-11-18T02:30:40.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:30:40.355 [DEBUG] [Thread-65614] [transport.py] [_log()] starting thread (client mode): 0xd31ceb90
2025-11-18T02:30:40.355 [DEBUG] [Thread-65614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:30:40.374 [DEBUG] [Thread-65614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:30:40.375 [INFO] [Thread-65614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:30:40.377 [DEBUG] [Thread-65614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:30:40.377 [DEBUG] [Thread-65614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:30:40.377 [DEBUG] [Thread-65614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:30:40.377 [DEBUG] [Thread-65614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] client lang: <none>
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] server lang: <none>
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] kex follows: False
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] Compression: none
2025-11-18T02:30:40.378 [DEBUG] [Thread-65614] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:30:40.391 [DEBUG] [Thread-65614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:30:40.392 [DEBUG] [Thread-65614] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:30:40.392 [DEBUG] [Thread-65614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:30:40.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:30:40.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:30:40.394 [DEBUG] [Thread-65614] [transport.py] [_log()] userauth is OK
2025-11-18T02:30:40.394 [DEBUG] [Thread-65614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:30:40.394 [DEBUG] [Thread-65614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:30:40.394 [DEBUG] [Thread-65614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:30:40.394 [DEBUG] [Thread-65614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:30:40.418 [INFO] [Thread-65614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:30:40.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:30:41.003 [DEBUG] [Thread-65614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:30:41.003 [DEBUG] [Thread-65614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:30:41.003 [DEBUG] [Thread-65614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:30:41.044 [DEBUG] [Thread-65614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:30:41.044 [DEBUG] [Thread-65614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:30:41.048 [DEBUG] [Thread-65614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:30:41.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:30:41.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:30:41.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:30:41.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:30:41.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:30:41.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:30:41.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.021222 -999.00  +12.30  10.56     55   +3.70 1 1 1 1 1     0    0 7.27 -55.92 ZNESW 10.2 10.6 164.9 15.7 12.7 -22.7 12.5 -22.0 12.3 -21.8 12.7 -22.3
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.021222
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:30:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:30:19', tmtdew=9.58, humidity=51.85, cloud=0.0, wind=18.53, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:30:19', seeing=1.53, atlas_timestamp='2025-11-18T00:30:33.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:27:00')
2025-11-18T02:30:41.064 [DEBUG] [Thread-65614] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:30:41.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:30:41.149 [DEBUG] [Thread-65617] [transport.py] [_log()] starting thread (client mode): 0xd317f340
2025-11-18T02:30:41.149 [DEBUG] [Thread-65617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:30:41.164 [DEBUG] [Thread-65617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:30:41.164 [INFO] [Thread-65617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] client lang: <none>
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] server lang: <none>
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] kex follows: False
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] Compression: none
2025-11-18T02:30:41.171 [DEBUG] [Thread-65617] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:30:41.228 [DEBUG] [Thread-65617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:30:41.228 [DEBUG] [Thread-65617] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:30:41.228 [DEBUG] [Thread-65617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:30:41.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:30:41.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:30:41.284 [DEBUG] [Thread-65617] [transport.py] [_log()] userauth is OK
2025-11-18T02:30:41.284 [DEBUG] [Thread-65617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:30:41.284 [DEBUG] [Thread-65617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:30:41.284 [DEBUG] [Thread-65617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:30:41.284 [DEBUG] [Thread-65617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:30:41.299 [INFO] [Thread-65617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:30:41.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:30:41.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:30:41.707 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:42.199 [DEBUG] [Thread-65617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:30:42.199 [DEBUG] [Thread-65617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:30:42.247 [DEBUG] [Thread-65617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:30:42.247 [DEBUG] [Thread-65617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:30:42.255 [DEBUG] [Thread-65617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:30:42.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:30:42.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:30:42.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:30:42.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:30:42.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:30:42.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:30:42.287 [DEBUG] [Thread-65617] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:30:44.746 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:49.988 [DEBUG] [Thread-65619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:51.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:30:51.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:31:02.942 [DEBUG] [Thread-65620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:31:05.027 [DEBUG] [Thread-65621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:31:12.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:31:12.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:31:12.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:31:12.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 30, 51), 9.65, 51.76, 0.0, 17.15, 12.3, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:31:12.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:30:51
2025-11-18T02:31:13.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:31:13.214 [DEBUG] [Thread-65622] [transport.py] [_log()] starting thread (client mode): 0xd317c2e0
2025-11-18T02:31:13.214 [DEBUG] [Thread-65622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:31:13.235 [DEBUG] [Thread-65622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:31:13.235 [INFO] [Thread-65622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:31:13.238 [DEBUG] [Thread-65622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] client lang: <none>
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] server lang: <none>
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] kex follows: False
2025-11-18T02:31:13.239 [DEBUG] [Thread-65622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:31:13.240 [DEBUG] [Thread-65622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:31:13.240 [DEBUG] [Thread-65622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:31:13.240 [DEBUG] [Thread-65622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:31:13.240 [DEBUG] [Thread-65622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:31:13.240 [DEBUG] [Thread-65622] [transport.py] [_log()] Compression: none
2025-11-18T02:31:13.240 [DEBUG] [Thread-65622] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:31:13.260 [DEBUG] [Thread-65622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:31:13.261 [DEBUG] [Thread-65622] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:31:13.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:31:13.262 [DEBUG] [Thread-65622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:31:13.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:31:13.264 [DEBUG] [Thread-65622] [transport.py] [_log()] userauth is OK
2025-11-18T02:31:13.264 [DEBUG] [Thread-65622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:31:13.264 [DEBUG] [Thread-65622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:31:13.264 [DEBUG] [Thread-65622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:31:13.264 [DEBUG] [Thread-65622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:31:13.282 [INFO] [Thread-65622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:31:13.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:31:14.033 [DEBUG] [Thread-65622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:31:14.033 [DEBUG] [Thread-65622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:31:14.033 [DEBUG] [Thread-65622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:31:14.074 [DEBUG] [Thread-65622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:31:14.074 [DEBUG] [Thread-65622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:31:14.077 [DEBUG] [Thread-65622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:31:14.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:31:14.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:31:14.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:31:14.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:31:14.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:31:14.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:31:14.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:31:14.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:31:14.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:31:14.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.021222 -999.00  +12.30  10.56     55   +3.70 1 1 1 1 1     0    0 7.27 -55.92 ZNESW 10.2 10.6 164.9 15.7 12.7 -22.7 12.5 -22.0 12.3 -21.8 12.7 -22.3
2025-11-18T02:31:14.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:31:14.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:31:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.021222
2025-11-18T02:31:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:31:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:31:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:31:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:31:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:31:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:30:51', tmtdew=9.65, humidity=51.76, cloud=0.0, wind=17.15, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:30:51', seeing=1.6, atlas_timestamp='2025-11-18T00:30:33.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:27:00')
2025-11-18T02:31:14.096 [DEBUG] [Thread-65622] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:31:14.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:31:14.183 [DEBUG] [Thread-65625] [transport.py] [_log()] starting thread (client mode): 0xd0756f80
2025-11-18T02:31:14.184 [DEBUG] [Thread-65625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:31:14.198 [DEBUG] [Thread-65625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:31:14.198 [INFO] [Thread-65625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:31:14.206 [DEBUG] [Thread-65625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:31:14.206 [DEBUG] [Thread-65625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:31:14.206 [DEBUG] [Thread-65625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:31:14.206 [DEBUG] [Thread-65625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:31:14.206 [DEBUG] [Thread-65625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:31:14.206 [DEBUG] [Thread-65625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:31:14.206 [DEBUG] [Thread-65625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] client lang: <none>
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] server lang: <none>
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] kex follows: False
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:31:14.207 [DEBUG] [Thread-65625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:31:14.208 [DEBUG] [Thread-65625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:31:14.208 [DEBUG] [Thread-65625] [transport.py] [_log()] Compression: none
2025-11-18T02:31:14.208 [DEBUG] [Thread-65625] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:31:14.265 [DEBUG] [Thread-65625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:31:14.266 [DEBUG] [Thread-65625] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:31:14.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:31:14.267 [DEBUG] [Thread-65625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:31:14.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:31:14.321 [DEBUG] [Thread-65625] [transport.py] [_log()] userauth is OK
2025-11-18T02:31:14.321 [DEBUG] [Thread-65625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:31:14.321 [DEBUG] [Thread-65625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:31:14.321 [DEBUG] [Thread-65625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:31:14.321 [DEBUG] [Thread-65625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:31:14.339 [INFO] [Thread-65625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:31:14.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:31:14.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:31:15.158 [DEBUG] [Thread-65625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:31:15.158 [DEBUG] [Thread-65625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:31:15.205 [DEBUG] [Thread-65625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:31:15.205 [DEBUG] [Thread-65625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:31:15.214 [DEBUG] [Thread-65625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:31:15.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:31:15.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:31:15.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:31:15.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:31:15.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:31:15.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:31:15.248 [DEBUG] [Thread-65625] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:31:20.055 [DEBUG] [Thread-65627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:31:35.085 [DEBUG] [Thread-65628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:31:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:31:45.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:31:45.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:31:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 31, 23), 9.62, 51.88, 0.0, 15.88, 12.3, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:31:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:31:23
2025-11-18T02:31:46.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:31:46.172 [DEBUG] [Thread-65629] [transport.py] [_log()] starting thread (client mode): 0xd07ae620
2025-11-18T02:31:46.172 [DEBUG] [Thread-65629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:31:46.192 [DEBUG] [Thread-65629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:31:46.193 [INFO] [Thread-65629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:31:46.196 [DEBUG] [Thread-65629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:31:46.196 [DEBUG] [Thread-65629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] client lang: <none>
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] server lang: <none>
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] kex follows: False
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:31:46.197 [DEBUG] [Thread-65629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:31:46.198 [DEBUG] [Thread-65629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:31:46.198 [DEBUG] [Thread-65629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:31:46.198 [DEBUG] [Thread-65629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:31:46.198 [DEBUG] [Thread-65629] [transport.py] [_log()] Compression: none
2025-11-18T02:31:46.198 [DEBUG] [Thread-65629] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:31:46.217 [DEBUG] [Thread-65629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:31:46.218 [DEBUG] [Thread-65629] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:31:46.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:31:46.219 [DEBUG] [Thread-65629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:31:46.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:31:46.221 [DEBUG] [Thread-65629] [transport.py] [_log()] userauth is OK
2025-11-18T02:31:46.221 [DEBUG] [Thread-65629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:31:46.221 [DEBUG] [Thread-65629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:31:46.221 [DEBUG] [Thread-65629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:31:46.221 [DEBUG] [Thread-65629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:31:46.256 [INFO] [Thread-65629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:31:46.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:31:46.906 [DEBUG] [Thread-65629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:31:46.906 [DEBUG] [Thread-65629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:31:46.906 [DEBUG] [Thread-65629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:31:46.946 [DEBUG] [Thread-65629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:31:46.946 [DEBUG] [Thread-65629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:31:46.949 [DEBUG] [Thread-65629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:31:46.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:31:46.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:31:46.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:31:46.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:31:46.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:31:46.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:31:46.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:31:46.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:31:46.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:31:46.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.021627 -999.00  +12.20  12.59     56   +3.70 1 1 1 1 1     0    0 7.16 -58.36 ZNESW 9.2 12.6 156.6 15.0 12.7 -22.7 12.5 -22.0 12.3 -21.6 12.7 -22.4
2025-11-18T02:31:46.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:31:46.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:31:46.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.021627
2025-11-18T02:31:46.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:31:46.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:31:46.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:31:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:31:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:31:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:31:23', tmtdew=9.62, humidity=51.88, cloud=0.0, wind=15.88, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:31:23', seeing=1.46, atlas_timestamp='2025-11-18T00:31:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.05274999999999963, 0.09875000000000078, 0.07649999999999935, 0.06649999999999956, 0.22125000000000128, 0.05599999999999916, 0.04625000000000057, 0.13299999999999912, 0.05400000000000027, 0.1042500000000004, 0.09500000000000064, 0.17050000000000054, 0.1712499999999988, -0.0015000000000000568, -0.016000000000000014, 0.09375, 0.13449999999999918, 0.12850000000000072, 0.08424999999999905, 0.17999999999999794, 0.16474999999999795, 0.06425000000000125, 0.07075000000000031, 0.13699999999999868, 0.28449999999999953, 0.1557499999999994, 0.20950000000000024, 0.24150000000000027, 0.13200000000000145, 0.1465000000000014, 0.2900000000000009, 0.26174999999999926], zp_timestamp='2025-11-18T00:27:00')
2025-11-18T02:31:46.976 [DEBUG] [Thread-65629] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:31:47.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:31:47.072 [DEBUG] [Thread-65632] [transport.py] [_log()] starting thread (client mode): 0xd07afca0
2025-11-18T02:31:47.072 [DEBUG] [Thread-65632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:31:47.087 [DEBUG] [Thread-65632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:31:47.087 [INFO] [Thread-65632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:31:47.094 [DEBUG] [Thread-65632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:31:47.094 [DEBUG] [Thread-65632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] client lang: <none>
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] server lang: <none>
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] kex follows: False
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] Compression: none
2025-11-18T02:31:47.095 [DEBUG] [Thread-65632] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:31:47.152 [DEBUG] [Thread-65632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:31:47.153 [DEBUG] [Thread-65632] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:31:47.153 [DEBUG] [Thread-65632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:31:47.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:31:47.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:31:47.208 [DEBUG] [Thread-65632] [transport.py] [_log()] userauth is OK
2025-11-18T02:31:47.208 [DEBUG] [Thread-65632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:31:47.208 [DEBUG] [Thread-65632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:31:47.209 [DEBUG] [Thread-65632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:31:47.209 [DEBUG] [Thread-65632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:31:47.228 [INFO] [Thread-65632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:31:47.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:31:47.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:31:48.105 [DEBUG] [Thread-65632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:31:48.106 [DEBUG] [Thread-65632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:31:48.153 [DEBUG] [Thread-65632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:31:48.153 [DEBUG] [Thread-65632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:31:48.162 [DEBUG] [Thread-65632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:31:48.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:31:48.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:31:48.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:31:48.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:31:48.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:31:48.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:31:48.198 [DEBUG] [Thread-65632] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:31:50.115 [DEBUG] [Thread-65634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:31:51.881 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:31:51.882 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:32:03.014 [DEBUG] [Thread-65635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:32:05.152 [DEBUG] [Thread-65636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:32:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:32:18.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:32:18.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:32:18.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 31, 55), 9.64, 51.83, 0.0, 16.09, 12.22, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:32:18.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:31:55
2025-11-18T02:32:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:32:19.131 [DEBUG] [Thread-65637] [transport.py] [_log()] starting thread (client mode): 0xd07ae230
2025-11-18T02:32:19.131 [DEBUG] [Thread-65637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:32:19.151 [DEBUG] [Thread-65637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:32:19.151 [INFO] [Thread-65637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:32:19.155 [DEBUG] [Thread-65637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:32:19.155 [DEBUG] [Thread-65637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:32:19.155 [DEBUG] [Thread-65637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:32:19.155 [DEBUG] [Thread-65637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:32:19.155 [DEBUG] [Thread-65637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:32:19.155 [DEBUG] [Thread-65637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:32:19.155 [DEBUG] [Thread-65637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] client lang: <none>
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] server lang: <none>
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] kex follows: False
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:32:19.156 [DEBUG] [Thread-65637] [transport.py] [_log()] Compression: none
2025-11-18T02:32:19.157 [DEBUG] [Thread-65637] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:32:19.167 [DEBUG] [Thread-65637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:32:19.167 [DEBUG] [Thread-65637] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:32:19.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:32:19.169 [DEBUG] [Thread-65637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:32:19.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:32:19.170 [DEBUG] [Thread-65637] [transport.py] [_log()] userauth is OK
2025-11-18T02:32:19.170 [DEBUG] [Thread-65637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:32:19.171 [DEBUG] [Thread-65637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:32:19.171 [DEBUG] [Thread-65637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:32:19.171 [DEBUG] [Thread-65637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:32:19.194 [INFO] [Thread-65637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:32:19.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:32:19.933 [DEBUG] [Thread-65637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:32:19.933 [DEBUG] [Thread-65637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:32:19.933 [DEBUG] [Thread-65637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:32:19.974 [DEBUG] [Thread-65637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:32:19.975 [DEBUG] [Thread-65637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:32:19.977 [DEBUG] [Thread-65637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:32:19.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:32:19.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:32:19.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:32:19.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:32:19.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:32:19.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:32:19.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:32:19.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:32:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:32:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.021917 -999.00  +12.20  10.69     56   +3.70 1 1 1 1 1     0    0 6.79 -62.63 ZNESW 11.1 10.7 160.0 13.8 12.7 -22.6 12.5 -22.0 12.3 -21.8 12.7 -22.4
2025-11-18T02:32:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:32:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:32:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.021917
2025-11-18T02:32:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:32:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:32:19.998 [DEBUG] [Thread-65637] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:32:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:32:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:32:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:32:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:31:55', tmtdew=9.64, humidity=51.83, cloud=0.0, wind=16.09, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:31:55', seeing=1.35, atlas_timestamp='2025-11-18T00:31:33.629', atlas_cloud=1, atlas_rain=1, zp_data=[0.12674999999999947, 0.10174999999999912, 0.12124999999999986, 0.1379999999999999, 0.1534999999999993, 0.13925000000000054, 0.06449999999999889, 0.17025000000000112, 0.11949999999999861, 0.10100000000000087, 0.12424999999999997, 0.125, 0.17499999999999893, 0.1687499999999993, 0.03549999999999898, 0.09499999999999886, 0.19674999999999976, 0.13949999999999996, 0.12199999999999989, 0.13624999999999865, 0.13599999999999923, 0.2107499999999991, 0.17425000000000068, 0.07474999999999987, 0.2129999999999992, 0.23000000000000043, 0.1437500000000007, 0.23749999999999893, 0.20800000000000018, 0.20300000000000118, 0.182500000000001, 0.3785000000000007, 0.1847499999999993], zp_timestamp='2025-11-18T00:31:00')
2025-11-18T02:32:20.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:32:20.092 [DEBUG] [Thread-65640] [transport.py] [_log()] starting thread (client mode): 0xd317c490
2025-11-18T02:32:20.092 [DEBUG] [Thread-65640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:32:20.111 [DEBUG] [Thread-65640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:32:20.111 [INFO] [Thread-65640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:32:20.119 [DEBUG] [Thread-65640] [transport.py] [_log()] client lang: <none>
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] server lang: <none>
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] kex follows: False
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] Compression: none
2025-11-18T02:32:20.120 [DEBUG] [Thread-65640] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:32:20.176 [DEBUG] [Thread-65640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:32:20.177 [DEBUG] [Thread-65640] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:32:20.177 [DEBUG] [Thread-65640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:32:20.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:32:20.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:32:20.183 [DEBUG] [Thread-65642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:32:20.232 [DEBUG] [Thread-65640] [transport.py] [_log()] userauth is OK
2025-11-18T02:32:20.233 [DEBUG] [Thread-65640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:32:20.233 [DEBUG] [Thread-65640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:32:20.233 [DEBUG] [Thread-65640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:32:20.233 [DEBUG] [Thread-65640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:32:20.252 [INFO] [Thread-65640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:32:20.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:32:20.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:32:21.070 [DEBUG] [Thread-65640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:32:21.070 [DEBUG] [Thread-65640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:32:21.117 [DEBUG] [Thread-65640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:32:21.117 [DEBUG] [Thread-65640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:32:21.127 [DEBUG] [Thread-65640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:32:21.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:32:21.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:32:21.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:32:21.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:32:21.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:32:21.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:32:21.162 [DEBUG] [Thread-65640] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:32:35.232 [DEBUG] [Thread-65643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:32:50.262 [DEBUG] [Thread-65644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:32:51.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:32:51.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:32:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:32:51.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 32, 27), 9.64, 51.78, 0.0, 15.92, 12.13, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:32:51.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:32:27
2025-11-18T02:32:51.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:32:52.067 [DEBUG] [Thread-65645] [transport.py] [_log()] starting thread (client mode): 0xd317ebc0
2025-11-18T02:32:52.067 [DEBUG] [Thread-65645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:32:52.084 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:32:52.085 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:32:52.088 [DEBUG] [Thread-65645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:32:52.088 [INFO] [Thread-65645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:32:52.091 [DEBUG] [Thread-65645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:32:52.091 [DEBUG] [Thread-65645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] client lang: <none>
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] server lang: <none>
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] kex follows: False
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] Compression: none
2025-11-18T02:32:52.092 [DEBUG] [Thread-65645] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:32:52.107 [DEBUG] [Thread-65645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:32:52.107 [DEBUG] [Thread-65645] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:32:52.107 [DEBUG] [Thread-65645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:32:52.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:32:52.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:32:52.108 [DEBUG] [Thread-65645] [transport.py] [_log()] userauth is OK
2025-11-18T02:32:52.108 [DEBUG] [Thread-65645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:32:52.109 [DEBUG] [Thread-65645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:32:52.109 [DEBUG] [Thread-65645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:32:52.109 [DEBUG] [Thread-65645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:32:52.128 [INFO] [Thread-65645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:32:52.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:32:52.769 [DEBUG] [Thread-65645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:32:52.769 [DEBUG] [Thread-65645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:32:52.770 [DEBUG] [Thread-65645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:32:52.810 [DEBUG] [Thread-65645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:32:52.810 [DEBUG] [Thread-65645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:32:52.814 [DEBUG] [Thread-65645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:32:52.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:32:52.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:32:52.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:32:52.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:32:52.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:32:52.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:32:52.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:32:52.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:32:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:32:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.022264 -999.00  +12.20   9.42     56   +3.70 1 1 1 1 1     0    0 7.12 -60.11 ZNESW 8.6 9.4 165.7 14.5 12.7 -22.9 12.5 -22.1 12.3 -21.8 12.7 -22.5
2025-11-18T02:32:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:32:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:32:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.022264
2025-11-18T02:32:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:32:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:32:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:32:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:32:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:32:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:32:27', tmtdew=9.64, humidity=51.78, cloud=0.0, wind=15.92, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:32:27', seeing=1.45, atlas_timestamp='2025-11-18T00:32:03.610', atlas_cloud=1, atlas_rain=1, zp_data=[0.12674999999999947, 0.10174999999999912, 0.12124999999999986, 0.1379999999999999, 0.1534999999999993, 0.13925000000000054, 0.06449999999999889, 0.17025000000000112, 0.11949999999999861, 0.10100000000000087, 0.12424999999999997, 0.125, 0.17499999999999893, 0.1687499999999993, 0.03549999999999898, 0.09499999999999886, 0.19674999999999976, 0.13949999999999996, 0.12199999999999989, 0.13624999999999865, 0.13599999999999923, 0.2107499999999991, 0.17425000000000068, 0.07474999999999987, 0.2129999999999992, 0.23000000000000043, 0.1437500000000007, 0.23749999999999893, 0.20800000000000018, 0.20300000000000118, 0.182500000000001, 0.3785000000000007, 0.1847499999999993], zp_timestamp='2025-11-18T00:31:00')
2025-11-18T02:32:52.838 [DEBUG] [Thread-65645] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:32:52.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:32:52.935 [DEBUG] [Thread-65648] [transport.py] [_log()] starting thread (client mode): 0xd31cf220
2025-11-18T02:32:52.935 [DEBUG] [Thread-65648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:32:52.950 [DEBUG] [Thread-65648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:32:52.950 [INFO] [Thread-65648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:32:52.957 [DEBUG] [Thread-65648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] client lang: <none>
2025-11-18T02:32:52.958 [DEBUG] [Thread-65648] [transport.py] [_log()] server lang: <none>
2025-11-18T02:32:52.959 [DEBUG] [Thread-65648] [transport.py] [_log()] kex follows: False
2025-11-18T02:32:52.959 [DEBUG] [Thread-65648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:32:52.959 [DEBUG] [Thread-65648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:32:52.959 [DEBUG] [Thread-65648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:32:52.959 [DEBUG] [Thread-65648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:32:52.959 [DEBUG] [Thread-65648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:32:52.959 [DEBUG] [Thread-65648] [transport.py] [_log()] Compression: none
2025-11-18T02:32:52.959 [DEBUG] [Thread-65648] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:32:53.017 [DEBUG] [Thread-65648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:32:53.017 [DEBUG] [Thread-65648] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:32:53.018 [DEBUG] [Thread-65648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:32:53.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:32:53.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:32:53.072 [DEBUG] [Thread-65648] [transport.py] [_log()] userauth is OK
2025-11-18T02:32:53.073 [DEBUG] [Thread-65648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:32:53.073 [DEBUG] [Thread-65648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:32:53.073 [DEBUG] [Thread-65648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:32:53.073 [DEBUG] [Thread-65648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:32:53.092 [INFO] [Thread-65648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:32:53.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:32:53.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:32:53.918 [DEBUG] [Thread-65648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:32:53.919 [DEBUG] [Thread-65648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:32:53.966 [DEBUG] [Thread-65648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:32:53.966 [DEBUG] [Thread-65648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:32:53.975 [DEBUG] [Thread-65648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:32:53.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:32:53.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:32:53.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:32:54.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:32:54.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:32:54.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:32:54.009 [DEBUG] [Thread-65648] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:33:03.111 [DEBUG] [Thread-65650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:33:05.293 [DEBUG] [Thread-65651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:33:20.330 [DEBUG] [Thread-65652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:33:24.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:33:24.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:33:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:33:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 32, 59), 9.58, 51.86, 0.0, 16.99, 12.23, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:33:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:32:59
2025-11-18T02:33:24.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:33:24.937 [DEBUG] [Thread-65653] [transport.py] [_log()] starting thread (client mode): 0xd07da200
2025-11-18T02:33:24.937 [DEBUG] [Thread-65653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:33:24.955 [DEBUG] [Thread-65653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:33:24.955 [INFO] [Thread-65653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:33:24.956 [DEBUG] [Thread-65653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] client lang: <none>
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] server lang: <none>
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] kex follows: False
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:33:24.957 [DEBUG] [Thread-65653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:33:24.958 [DEBUG] [Thread-65653] [transport.py] [_log()] Compression: none
2025-11-18T02:33:24.958 [DEBUG] [Thread-65653] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:33:24.967 [DEBUG] [Thread-65653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:33:24.968 [DEBUG] [Thread-65653] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:33:24.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:33:24.969 [DEBUG] [Thread-65653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:33:24.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:33:24.971 [DEBUG] [Thread-65653] [transport.py] [_log()] userauth is OK
2025-11-18T02:33:24.971 [DEBUG] [Thread-65653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:33:24.972 [DEBUG] [Thread-65653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:33:24.972 [DEBUG] [Thread-65653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:33:24.972 [DEBUG] [Thread-65653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:33:24.992 [INFO] [Thread-65653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:33:24.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:33:25.633 [DEBUG] [Thread-65653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:33:25.634 [DEBUG] [Thread-65653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:33:25.634 [DEBUG] [Thread-65653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:33:25.674 [DEBUG] [Thread-65653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:33:25.675 [DEBUG] [Thread-65653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:33:25.677 [DEBUG] [Thread-65653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:33:25.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:33:25.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:33:25.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:33:25.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:33:25.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:33:25.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:33:25.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:33:25.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:33:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:33:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.022611 -999.00  +12.20  12.30     56   +3.70 1 1 1 1 1     0    0 6.96 -57.77 ZNESW 11.7 12.3 165.8 14.4 12.6 -22.8 12.5 -22.1 12.3 -21.8 12.6 -22.5
2025-11-18T02:33:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:33:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:33:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.022611
2025-11-18T02:33:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:33:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:33:25.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:33:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:33:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:33:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:32:59', tmtdew=9.58, humidity=51.86, cloud=0.0, wind=16.99, temperature=12.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:33:00', seeing=1.45, atlas_timestamp='2025-11-18T00:32:33.590', atlas_cloud=1, atlas_rain=1, zp_data=[0.12674999999999947, 0.10174999999999912, 0.12124999999999986, 0.1379999999999999, 0.1534999999999993, 0.13925000000000054, 0.06449999999999889, 0.17025000000000112, 0.11949999999999861, 0.10100000000000087, 0.12424999999999997, 0.125, 0.17499999999999893, 0.1687499999999993, 0.03549999999999898, 0.09499999999999886, 0.19674999999999976, 0.13949999999999996, 0.12199999999999989, 0.13624999999999865, 0.13599999999999923, 0.2107499999999991, 0.17425000000000068, 0.07474999999999987, 0.2129999999999992, 0.23000000000000043, 0.1437500000000007, 0.23749999999999893, 0.20800000000000018, 0.20300000000000118, 0.182500000000001, 0.3785000000000007, 0.1847499999999993], zp_timestamp='2025-11-18T00:31:00')
2025-11-18T02:33:25.703 [DEBUG] [Thread-65653] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:33:25.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:33:25.799 [DEBUG] [Thread-65656] [transport.py] [_log()] starting thread (client mode): 0xd07adcc0
2025-11-18T02:33:25.799 [DEBUG] [Thread-65656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:33:25.814 [DEBUG] [Thread-65656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:33:25.814 [INFO] [Thread-65656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] client lang: <none>
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] server lang: <none>
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] kex follows: False
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:33:25.822 [DEBUG] [Thread-65656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:33:25.823 [DEBUG] [Thread-65656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:33:25.823 [DEBUG] [Thread-65656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:33:25.823 [DEBUG] [Thread-65656] [transport.py] [_log()] Compression: none
2025-11-18T02:33:25.823 [DEBUG] [Thread-65656] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:33:25.881 [DEBUG] [Thread-65656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:33:25.882 [DEBUG] [Thread-65656] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:33:25.882 [DEBUG] [Thread-65656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:33:25.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:33:25.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:33:25.940 [DEBUG] [Thread-65656] [transport.py] [_log()] userauth is OK
2025-11-18T02:33:25.941 [DEBUG] [Thread-65656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:33:25.941 [DEBUG] [Thread-65656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:33:25.941 [DEBUG] [Thread-65656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:33:25.941 [DEBUG] [Thread-65656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:33:25.960 [INFO] [Thread-65656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:33:25.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:33:25.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:33:26.809 [DEBUG] [Thread-65656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:33:26.809 [DEBUG] [Thread-65656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:33:26.856 [DEBUG] [Thread-65656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:33:26.856 [DEBUG] [Thread-65656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:33:26.865 [DEBUG] [Thread-65656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:33:26.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:33:26.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:33:26.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:33:26.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:33:26.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:33:26.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:33:26.901 [DEBUG] [Thread-65656] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:33:35.359 [DEBUG] [Thread-65658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:33:50.406 [DEBUG] [Thread-65659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:33:52.287 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:33:52.288 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:33:56.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:33:56.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:33:56.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:33:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 33, 32), 9.59, 51.81, 0.0, 17.01, 12.23, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:33:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:33:32
2025-11-18T02:33:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:33:57.886 [DEBUG] [Thread-65660] [transport.py] [_log()] starting thread (client mode): 0xd07ad870
2025-11-18T02:33:57.887 [DEBUG] [Thread-65660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:33:57.908 [DEBUG] [Thread-65660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:33:57.908 [INFO] [Thread-65660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] client lang: <none>
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] server lang: <none>
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] kex follows: False
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] Compression: none
2025-11-18T02:33:57.912 [DEBUG] [Thread-65660] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:33:57.930 [DEBUG] [Thread-65660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:33:57.930 [DEBUG] [Thread-65660] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:33:57.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:33:57.931 [DEBUG] [Thread-65660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:33:57.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:33:57.931 [DEBUG] [Thread-65660] [transport.py] [_log()] userauth is OK
2025-11-18T02:33:57.932 [DEBUG] [Thread-65660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:33:57.932 [DEBUG] [Thread-65660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:33:57.932 [DEBUG] [Thread-65660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:33:57.932 [DEBUG] [Thread-65660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:33:57.947 [INFO] [Thread-65660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:33:57.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:33:58.585 [DEBUG] [Thread-65660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:33:58.585 [DEBUG] [Thread-65660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:33:58.585 [DEBUG] [Thread-65660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:33:58.626 [DEBUG] [Thread-65660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:33:58.626 [DEBUG] [Thread-65660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:33:58.628 [DEBUG] [Thread-65660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:33:58.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:33:58.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:33:58.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:33:58.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:33:58.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:33:58.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:33:58.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:33:58.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:33:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:33:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.022959 -999.00  +12.20  10.56     56   +3.80 1 1 1 1 1     0    0 6.84 -66.86 ZNESW 10.7 10.6 154.8 16.6 12.6 -22.9 12.5 -22.1 12.3 -21.8 12.6 -22.4
2025-11-18T02:33:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:33:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:33:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.022959
2025-11-18T02:33:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:33:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:33:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:33:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:33:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:33:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:33:32', tmtdew=9.59, humidity=51.81, cloud=0.0, wind=17.01, temperature=12.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:33:32', seeing=1.23, atlas_timestamp='2025-11-18T00:33:03.658', atlas_cloud=1, atlas_rain=1, zp_data=[0.12674999999999947, 0.10174999999999912, 0.12124999999999986, 0.1379999999999999, 0.1534999999999993, 0.13925000000000054, 0.06449999999999889, 0.17025000000000112, 0.11949999999999861, 0.10100000000000087, 0.12424999999999997, 0.125, 0.17499999999999893, 0.1687499999999993, 0.03549999999999898, 0.09499999999999886, 0.19674999999999976, 0.13949999999999996, 0.12199999999999989, 0.13624999999999865, 0.13599999999999923, 0.2107499999999991, 0.17425000000000068, 0.07474999999999987, 0.2129999999999992, 0.23000000000000043, 0.1437500000000007, 0.23749999999999893, 0.20800000000000018, 0.20300000000000118, 0.182500000000001, 0.3785000000000007, 0.1847499999999993], zp_timestamp='2025-11-18T00:31:00')
2025-11-18T02:33:58.648 [DEBUG] [Thread-65660] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:33:58.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:33:58.733 [DEBUG] [Thread-65663] [transport.py] [_log()] starting thread (client mode): 0xd07ade10
2025-11-18T02:33:58.733 [DEBUG] [Thread-65663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:33:58.748 [DEBUG] [Thread-65663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:33:58.748 [INFO] [Thread-65663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] client lang: <none>
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] server lang: <none>
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] kex follows: False
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] Compression: none
2025-11-18T02:33:58.756 [DEBUG] [Thread-65663] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:33:58.813 [DEBUG] [Thread-65663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:33:58.813 [DEBUG] [Thread-65663] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:33:58.814 [DEBUG] [Thread-65663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:33:58.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:33:58.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:33:58.873 [DEBUG] [Thread-65663] [transport.py] [_log()] userauth is OK
2025-11-18T02:33:58.873 [DEBUG] [Thread-65663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:33:58.873 [DEBUG] [Thread-65663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:33:58.873 [DEBUG] [Thread-65663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:33:58.873 [DEBUG] [Thread-65663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:33:58.887 [INFO] [Thread-65663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:33:58.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:33:58.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:33:59.723 [DEBUG] [Thread-65663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:33:59.723 [DEBUG] [Thread-65663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:33:59.771 [DEBUG] [Thread-65663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:33:59.771 [DEBUG] [Thread-65663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:33:59.779 [DEBUG] [Thread-65663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:33:59.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:33:59.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:33:59.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:33:59.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:33:59.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:33:59.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:33:59.811 [DEBUG] [Thread-65663] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:34:03.184 [DEBUG] [Thread-65665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:34:05.431 [DEBUG] [Thread-65666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:34:20.462 [DEBUG] [Thread-65667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:34:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:34:29.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:34:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:34:30.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 34, 4), 9.56, 51.91, 0.0, 16.41, 12.17, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:34:30.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:34:04
2025-11-18T02:34:30.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:34:30.732 [DEBUG] [Thread-65668] [transport.py] [_log()] starting thread (client mode): 0xd0755000
2025-11-18T02:34:30.732 [DEBUG] [Thread-65668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:34:30.752 [DEBUG] [Thread-65668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:34:30.752 [INFO] [Thread-65668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:34:30.755 [DEBUG] [Thread-65668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] client lang: <none>
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] server lang: <none>
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] kex follows: False
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:34:30.756 [DEBUG] [Thread-65668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:34:30.757 [DEBUG] [Thread-65668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:34:30.757 [DEBUG] [Thread-65668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:34:30.757 [DEBUG] [Thread-65668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:34:30.757 [DEBUG] [Thread-65668] [transport.py] [_log()] Compression: none
2025-11-18T02:34:30.757 [DEBUG] [Thread-65668] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:34:30.775 [DEBUG] [Thread-65668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:34:30.776 [DEBUG] [Thread-65668] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:34:30.776 [DEBUG] [Thread-65668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:34:30.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:34:30.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:34:30.779 [DEBUG] [Thread-65668] [transport.py] [_log()] userauth is OK
2025-11-18T02:34:30.779 [DEBUG] [Thread-65668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:34:30.779 [DEBUG] [Thread-65668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:34:30.779 [DEBUG] [Thread-65668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:34:30.779 [DEBUG] [Thread-65668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:34:30.796 [INFO] [Thread-65668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:34:30.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:34:31.390 [DEBUG] [Thread-65668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:34:31.390 [DEBUG] [Thread-65668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:34:31.391 [DEBUG] [Thread-65668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:34:31.431 [DEBUG] [Thread-65668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:34:31.431 [DEBUG] [Thread-65668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:34:31.434 [DEBUG] [Thread-65668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:34:31.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:34:31.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:34:31.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:34:31.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:34:31.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:34:31.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:34:31.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:34:31.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:34:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:34:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.023306 -999.00  +12.20  10.94     56   +3.80 1 1 1 1 1     0    0 6.27 -73.90 ZNESW 9.4 10.9 161.2 14.8 12.6 -22.9 12.5 -22.2 12.3 -21.9 12.6 -22.7
2025-11-18T02:34:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:34:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:34:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.023306
2025-11-18T02:34:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:34:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:34:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:34:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:34:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:34:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:34:04', tmtdew=9.56, humidity=51.91, cloud=0.0, wind=16.41, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:34:04', seeing=1.26, atlas_timestamp='2025-11-18T00:33:33.638', atlas_cloud=1, atlas_rain=1, zp_data=[0.12674999999999947, 0.10174999999999912, 0.12124999999999986, 0.1379999999999999, 0.1534999999999993, 0.13925000000000054, 0.06449999999999889, 0.17025000000000112, 0.11949999999999861, 0.10100000000000087, 0.12424999999999997, 0.125, 0.17499999999999893, 0.1687499999999993, 0.03549999999999898, 0.09499999999999886, 0.19674999999999976, 0.13949999999999996, 0.12199999999999989, 0.13624999999999865, 0.13599999999999923, 0.2107499999999991, 0.17425000000000068, 0.07474999999999987, 0.2129999999999992, 0.23000000000000043, 0.1437500000000007, 0.23749999999999893, 0.20800000000000018, 0.20300000000000118, 0.182500000000001, 0.3785000000000007, 0.1847499999999993], zp_timestamp='2025-11-18T00:31:00')
2025-11-18T02:34:31.455 [DEBUG] [Thread-65668] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:34:31.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:34:31.555 [DEBUG] [Thread-65671] [transport.py] [_log()] starting thread (client mode): 0xd07d9690
2025-11-18T02:34:31.555 [DEBUG] [Thread-65671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:34:31.570 [DEBUG] [Thread-65671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:34:31.570 [INFO] [Thread-65671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:34:31.577 [DEBUG] [Thread-65671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:34:31.577 [DEBUG] [Thread-65671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] client lang: <none>
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] server lang: <none>
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] kex follows: False
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] Compression: none
2025-11-18T02:34:31.578 [DEBUG] [Thread-65671] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:34:31.636 [DEBUG] [Thread-65671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:34:31.637 [DEBUG] [Thread-65671] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:34:31.637 [DEBUG] [Thread-65671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:34:31.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:34:31.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:34:31.692 [DEBUG] [Thread-65671] [transport.py] [_log()] userauth is OK
2025-11-18T02:34:31.692 [DEBUG] [Thread-65671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:34:31.693 [DEBUG] [Thread-65671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:34:31.693 [DEBUG] [Thread-65671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:34:31.693 [DEBUG] [Thread-65671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:34:31.712 [INFO] [Thread-65671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:34:31.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:34:31.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:34:32.658 [DEBUG] [Thread-65671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:34:32.658 [DEBUG] [Thread-65671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:34:32.705 [DEBUG] [Thread-65671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:34:32.705 [DEBUG] [Thread-65671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:34:32.713 [DEBUG] [Thread-65671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:34:32.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:34:32.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:34:32.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:34:32.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:34:32.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:34:32.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:34:32.744 [DEBUG] [Thread-65671] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:34:35.492 [DEBUG] [Thread-65673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:34:50.532 [DEBUG] [Thread-65674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:34:52.491 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:34:52.492 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:35:02.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:35:02.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:35:02.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:35:03.252 [DEBUG] [Thread-65675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:35:03.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 34, 36), 9.5, 51.96, 0.0, 16.02, 12.15, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:35:03.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:34:36
2025-11-18T02:35:03.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:35:03.695 [DEBUG] [Thread-65676] [transport.py] [_log()] starting thread (client mode): 0xd07a3dc0
2025-11-18T02:35:03.695 [DEBUG] [Thread-65676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:35:03.718 [DEBUG] [Thread-65676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:35:03.718 [INFO] [Thread-65676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:35:03.721 [DEBUG] [Thread-65676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:35:03.722 [DEBUG] [Thread-65676] [transport.py] [_log()] client lang: <none>
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] server lang: <none>
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] kex follows: False
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] Compression: none
2025-11-18T02:35:03.723 [DEBUG] [Thread-65676] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:35:03.742 [DEBUG] [Thread-65676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:35:03.743 [DEBUG] [Thread-65676] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:35:03.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:35:03.743 [DEBUG] [Thread-65676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:35:03.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:35:03.745 [DEBUG] [Thread-65676] [transport.py] [_log()] userauth is OK
2025-11-18T02:35:03.745 [DEBUG] [Thread-65676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:35:03.746 [DEBUG] [Thread-65676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:35:03.746 [DEBUG] [Thread-65676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:35:03.746 [DEBUG] [Thread-65676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:35:03.769 [INFO] [Thread-65676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:35:03.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:35:05.561 [DEBUG] [Thread-65678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:35:05.757 [DEBUG] [Thread-65676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:35:05.757 [DEBUG] [Thread-65676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:35:05.757 [DEBUG] [Thread-65676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:35:05.797 [DEBUG] [Thread-65676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:35:05.797 [DEBUG] [Thread-65676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:35:05.800 [DEBUG] [Thread-65676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:35:05.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:35:05.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:35:05.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:35:05.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:35:05.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:35:05.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:35:05.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:35:05.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:35:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:35:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.024000 -999.00  +12.20  10.47     56   +3.80 1 1 1 1 1     0    0 6.96 -60.54 ZNESW 12.1 10.5 159.6 15.8 12.6 -23.0 12.5 -22.1 12.2 -21.8 12.6 -22.6
2025-11-18T02:35:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:35:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:35:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.024000
2025-11-18T02:35:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:35:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:35:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:35:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:35:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:35:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:34:36', tmtdew=9.5, humidity=51.96, cloud=0.0, wind=16.02, temperature=12.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:34:36', seeing=1.4, atlas_timestamp='2025-11-18T00:34:33.600', atlas_cloud=1, atlas_rain=1, zp_data=[0.12674999999999947, 0.10174999999999912, 0.12124999999999986, 0.1379999999999999, 0.1534999999999993, 0.13925000000000054, 0.06449999999999889, 0.17025000000000112, 0.11949999999999861, 0.10100000000000087, 0.12424999999999997, 0.125, 0.17499999999999893, 0.1687499999999993, 0.03549999999999898, 0.09499999999999886, 0.19674999999999976, 0.13949999999999996, 0.12199999999999989, 0.13624999999999865, 0.13599999999999923, 0.2107499999999991, 0.17425000000000068, 0.07474999999999987, 0.2129999999999992, 0.23000000000000043, 0.1437500000000007, 0.23749999999999893, 0.20800000000000018, 0.20300000000000118, 0.182500000000001, 0.3785000000000007, 0.1847499999999993], zp_timestamp='2025-11-18T00:31:00')
2025-11-18T02:35:05.834 [DEBUG] [Thread-65676] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:35:05.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:35:05.931 [DEBUG] [Thread-65680] [transport.py] [_log()] starting thread (client mode): 0xd07d9300
2025-11-18T02:35:05.931 [DEBUG] [Thread-65680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:35:05.946 [DEBUG] [Thread-65680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:35:05.946 [INFO] [Thread-65680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:35:05.953 [DEBUG] [Thread-65680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] client lang: <none>
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] server lang: <none>
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] kex follows: False
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] Compression: none
2025-11-18T02:35:05.954 [DEBUG] [Thread-65680] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:35:06.017 [DEBUG] [Thread-65680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:35:06.017 [DEBUG] [Thread-65680] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:35:06.017 [DEBUG] [Thread-65680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:35:06.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:35:06.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:35:06.072 [DEBUG] [Thread-65680] [transport.py] [_log()] userauth is OK
2025-11-18T02:35:06.073 [DEBUG] [Thread-65680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:35:06.073 [DEBUG] [Thread-65680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:35:06.073 [DEBUG] [Thread-65680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:35:06.073 [DEBUG] [Thread-65680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:35:06.093 [INFO] [Thread-65680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:35:06.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:35:06.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:35:06.975 [DEBUG] [Thread-65680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:35:06.976 [DEBUG] [Thread-65680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:35:07.023 [DEBUG] [Thread-65680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:35:07.023 [DEBUG] [Thread-65680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:35:07.032 [DEBUG] [Thread-65680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:35:07.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:35:07.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:35:07.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:35:07.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:35:07.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:35:07.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:35:07.067 [DEBUG] [Thread-65680] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:35:20.591 [DEBUG] [Thread-65682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:35:35.638 [DEBUG] [Thread-65683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:35:37.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:35:37.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:35:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:35:37.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 35, 8), 9.52, 51.88, 0.0, 15.05, 12.12, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:35:37.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:35:08
2025-11-18T02:35:37.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:35:37.984 [DEBUG] [Thread-65684] [transport.py] [_log()] starting thread (client mode): 0xd0757a60
2025-11-18T02:35:37.984 [DEBUG] [Thread-65684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:35:38.004 [DEBUG] [Thread-65684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:35:38.004 [INFO] [Thread-65684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:35:38.007 [DEBUG] [Thread-65684] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:35:38.007 [DEBUG] [Thread-65684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:35:38.007 [DEBUG] [Thread-65684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] client lang: <none>
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] server lang: <none>
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] kex follows: False
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] Compression: none
2025-11-18T02:35:38.008 [DEBUG] [Thread-65684] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:35:38.026 [DEBUG] [Thread-65684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:35:38.026 [DEBUG] [Thread-65684] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:35:38.027 [DEBUG] [Thread-65684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:35:38.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:35:38.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:35:38.029 [DEBUG] [Thread-65684] [transport.py] [_log()] userauth is OK
2025-11-18T02:35:38.029 [DEBUG] [Thread-65684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:35:38.029 [DEBUG] [Thread-65684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:35:38.029 [DEBUG] [Thread-65684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:35:38.029 [DEBUG] [Thread-65684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:35:38.048 [INFO] [Thread-65684] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:35:38.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:35:38.705 [DEBUG] [Thread-65684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:35:38.705 [DEBUG] [Thread-65684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:35:38.705 [DEBUG] [Thread-65684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:35:38.746 [DEBUG] [Thread-65684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:35:38.747 [DEBUG] [Thread-65684] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:35:38.750 [DEBUG] [Thread-65684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:35:38.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:35:38.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:35:38.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:35:38.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:35:38.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:35:38.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:35:38.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:35:38.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:35:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:35:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.024347 -999.00  +12.20  11.70     56   +3.80 1 1 1 1 1     0    0 7.00 -56.57 ZNESW 10.8 11.7 165.2 18.1 12.7 -23.0 12.5 -22.2 12.2 -21.9 12.5 -22.6
2025-11-18T02:35:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:35:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:35:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.024347
2025-11-18T02:35:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:35:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:35:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:35:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:35:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:35:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:35:08', tmtdew=9.52, humidity=51.88, cloud=0.0, wind=15.05, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:35:08', seeing=1.4, atlas_timestamp='2025-11-18T00:35:03.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:33:00')
2025-11-18T02:35:38.777 [DEBUG] [Thread-65684] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:35:38.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:35:38.873 [DEBUG] [Thread-65687] [transport.py] [_log()] starting thread (client mode): 0xd3161150
2025-11-18T02:35:38.873 [DEBUG] [Thread-65687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:35:38.888 [DEBUG] [Thread-65687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:35:38.888 [INFO] [Thread-65687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:35:38.895 [DEBUG] [Thread-65687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:35:38.895 [DEBUG] [Thread-65687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] client lang: <none>
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] server lang: <none>
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] kex follows: False
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] Compression: none
2025-11-18T02:35:38.896 [DEBUG] [Thread-65687] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:35:38.953 [DEBUG] [Thread-65687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:35:38.953 [DEBUG] [Thread-65687] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:35:38.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:35:38.954 [DEBUG] [Thread-65687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:35:38.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:35:39.008 [DEBUG] [Thread-65687] [transport.py] [_log()] userauth is OK
2025-11-18T02:35:39.009 [DEBUG] [Thread-65687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:35:39.009 [DEBUG] [Thread-65687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:35:39.009 [DEBUG] [Thread-65687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:35:39.009 [DEBUG] [Thread-65687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:35:39.028 [INFO] [Thread-65687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:35:39.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:35:39.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:35:39.894 [DEBUG] [Thread-65687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:35:39.894 [DEBUG] [Thread-65687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:35:39.941 [DEBUG] [Thread-65687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:35:39.941 [DEBUG] [Thread-65687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:35:39.950 [DEBUG] [Thread-65687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:35:39.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:35:39.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:35:39.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:35:39.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:35:39.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:35:39.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:35:39.985 [DEBUG] [Thread-65687] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:35:50.673 [DEBUG] [Thread-65689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:35:52.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:35:52.695 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:36:03.305 [DEBUG] [Thread-65690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:36:05.710 [DEBUG] [Thread-65691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:36:09.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:36:09.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:36:09.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
2025-11-18T02:36:10.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 35, 40), 9.55, 51.94, 0.0, 14.31, 12.13, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:36:10.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:35:40
2025-11-18T02:36:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:36:10.898 [DEBUG] [Thread-65692] [transport.py] [_log()] starting thread (client mode): 0xd0754250
2025-11-18T02:36:10.899 [DEBUG] [Thread-65692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:36:10.918 [DEBUG] [Thread-65692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:36:10.918 [INFO] [Thread-65692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:36:10.921 [DEBUG] [Thread-65692] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] client lang: <none>
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] server lang: <none>
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] kex follows: False
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] Compression: none
2025-11-18T02:36:10.922 [DEBUG] [Thread-65692] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:36:10.940 [DEBUG] [Thread-65692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:36:10.940 [DEBUG] [Thread-65692] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:36:10.941 [DEBUG] [Thread-65692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:36:10.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:36:10.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:36:10.943 [DEBUG] [Thread-65692] [transport.py] [_log()] userauth is OK
2025-11-18T02:36:10.943 [DEBUG] [Thread-65692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:36:10.943 [DEBUG] [Thread-65692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:36:10.943 [DEBUG] [Thread-65692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:36:10.943 [DEBUG] [Thread-65692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:36:10.961 [INFO] [Thread-65692] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:36:10.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:36:11.691 [DEBUG] [Thread-65692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:36:11.691 [DEBUG] [Thread-65692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:36:11.692 [DEBUG] [Thread-65692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:36:11.732 [DEBUG] [Thread-65692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:36:11.733 [DEBUG] [Thread-65692] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:36:11.735 [DEBUG] [Thread-65692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:36:11.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:36:11.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:36:11.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:36:11.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:36:11.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:36:11.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:36:11.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.024694 -999.00  +12.20  12.99     56   +3.80 1 1 1 1 1     0    0 6.81 -55.78 ZNESW 12.7 13.0 170.6 18.9 12.6 -23.1 12.5 -22.2 12.2 -21.8 12.6 -22.7
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.024694
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:36:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:35:40', tmtdew=9.55, humidity=51.94, cloud=0.0, wind=14.31, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:35:40', seeing=1.14, atlas_timestamp='2025-11-18T00:35:33.562', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:33:00')
2025-11-18T02:36:11.755 [DEBUG] [Thread-65692] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:36:11.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:36:11.842 [DEBUG] [Thread-65695] [transport.py] [_log()] starting thread (client mode): 0xd07ab220
2025-11-18T02:36:11.842 [DEBUG] [Thread-65695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:36:11.857 [DEBUG] [Thread-65695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:36:11.857 [INFO] [Thread-65695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:36:11.865 [DEBUG] [Thread-65695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:36:11.865 [DEBUG] [Thread-65695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:36:11.865 [DEBUG] [Thread-65695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:36:11.865 [DEBUG] [Thread-65695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] client lang: <none>
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] server lang: <none>
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] kex follows: False
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:36:11.866 [DEBUG] [Thread-65695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:36:11.867 [DEBUG] [Thread-65695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:36:11.867 [DEBUG] [Thread-65695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:36:11.867 [DEBUG] [Thread-65695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:36:11.867 [DEBUG] [Thread-65695] [transport.py] [_log()] Compression: none
2025-11-18T02:36:11.867 [DEBUG] [Thread-65695] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:36:11.924 [DEBUG] [Thread-65695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:36:11.925 [DEBUG] [Thread-65695] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:36:11.925 [DEBUG] [Thread-65695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:36:11.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:36:11.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:36:11.980 [DEBUG] [Thread-65695] [transport.py] [_log()] userauth is OK
2025-11-18T02:36:11.981 [DEBUG] [Thread-65695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:36:11.981 [DEBUG] [Thread-65695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:36:11.981 [DEBUG] [Thread-65695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:36:11.981 [DEBUG] [Thread-65695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:36:12.001 [INFO] [Thread-65695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:36:12.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:36:12.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:36:12.910 [DEBUG] [Thread-65695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:36:12.910 [DEBUG] [Thread-65695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:36:12.958 [DEBUG] [Thread-65695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:36:12.958 [DEBUG] [Thread-65695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:36:12.966 [DEBUG] [Thread-65695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:36:12.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:36:12.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:36:12.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:36:12.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:36:12.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:36:12.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:36:12.999 [DEBUG] [Thread-65695] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:36:20.738 [DEBUG] [Thread-65697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:36:35.777 [DEBUG] [Thread-65698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:36:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:36:43.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:36:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:36:43.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 36, 12), 9.54, 51.96, 0.0, 14.57, 12.1, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:36:43.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:36:12
2025-11-18T02:36:43.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:36:43.931 [DEBUG] [Thread-65699] [transport.py] [_log()] starting thread (client mode): 0xd07a9840
2025-11-18T02:36:43.931 [DEBUG] [Thread-65699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:36:43.951 [DEBUG] [Thread-65699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:36:43.951 [INFO] [Thread-65699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:36:43.954 [DEBUG] [Thread-65699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:36:43.954 [DEBUG] [Thread-65699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:36:43.954 [DEBUG] [Thread-65699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:36:43.954 [DEBUG] [Thread-65699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] client lang: <none>
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] server lang: <none>
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] kex follows: False
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:36:43.955 [DEBUG] [Thread-65699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:36:43.956 [DEBUG] [Thread-65699] [transport.py] [_log()] Compression: none
2025-11-18T02:36:43.956 [DEBUG] [Thread-65699] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:36:43.972 [DEBUG] [Thread-65699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:36:43.973 [DEBUG] [Thread-65699] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:36:43.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:36:43.974 [DEBUG] [Thread-65699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:36:43.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:36:44.017 [DEBUG] [Thread-65699] [transport.py] [_log()] userauth is OK
2025-11-18T02:36:44.017 [DEBUG] [Thread-65699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:36:44.017 [DEBUG] [Thread-65699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:36:44.017 [DEBUG] [Thread-65699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:36:44.017 [DEBUG] [Thread-65699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:36:44.038 [INFO] [Thread-65699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:36:44.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:36:44.680 [DEBUG] [Thread-65699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:36:44.680 [DEBUG] [Thread-65699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:36:44.681 [DEBUG] [Thread-65699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:36:44.721 [DEBUG] [Thread-65699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:36:44.721 [DEBUG] [Thread-65699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:36:44.723 [DEBUG] [Thread-65699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:36:44.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:36:44.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:36:44.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:36:44.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:36:44.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:36:44.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:36:44.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.025099 -999.00  +12.20   9.41     56   +3.80 1 1 1 1 1     0    0 7.19 -51.81 ZNESW 13.1 9.4 172.2 19.4 12.6 -23.2 12.5 -22.3 12.3 -21.8 12.6 -22.8
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.025099
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:36:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:36:12', tmtdew=9.54, humidity=51.96, cloud=0.0, wind=14.57, temperature=12.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:36:12', seeing=1.18, atlas_timestamp='2025-11-18T00:36:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:33:00')
2025-11-18T02:36:44.743 [DEBUG] [Thread-65699] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:36:44.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:36:44.828 [DEBUG] [Thread-65702] [transport.py] [_log()] starting thread (client mode): 0xd317ebc0
2025-11-18T02:36:44.828 [DEBUG] [Thread-65702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:36:44.846 [DEBUG] [Thread-65702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:36:44.846 [INFO] [Thread-65702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] client lang: <none>
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] server lang: <none>
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] kex follows: False
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] Compression: none
2025-11-18T02:36:44.854 [DEBUG] [Thread-65702] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:36:44.914 [DEBUG] [Thread-65702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:36:44.914 [DEBUG] [Thread-65702] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:36:44.914 [DEBUG] [Thread-65702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:36:44.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:36:44.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:36:44.972 [DEBUG] [Thread-65702] [transport.py] [_log()] userauth is OK
2025-11-18T02:36:44.972 [DEBUG] [Thread-65702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:36:44.972 [DEBUG] [Thread-65702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:36:44.972 [DEBUG] [Thread-65702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:36:44.972 [DEBUG] [Thread-65702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:36:44.987 [INFO] [Thread-65702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:36:44.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:36:44.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:36:45.877 [DEBUG] [Thread-65702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:36:45.877 [DEBUG] [Thread-65702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:36:45.925 [DEBUG] [Thread-65702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:36:45.925 [DEBUG] [Thread-65702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:36:45.937 [DEBUG] [Thread-65702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:36:45.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:36:45.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:36:45.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:36:45.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:36:45.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:36:45.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:36:45.970 [DEBUG] [Thread-65702] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:36:50.811 [DEBUG] [Thread-65704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:36:52.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:36:52.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:37:03.363 [DEBUG] [Thread-65705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:37:05.851 [DEBUG] [Thread-65706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:37:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:37:15.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:37:15.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:37:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 36, 44), 9.45, 52.63, 0.0, 15.9, 12.18, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:37:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:36:44
2025-11-18T02:37:16.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:37:16.925 [DEBUG] [Thread-65707] [transport.py] [_log()] starting thread (client mode): 0xd07aa1a0
2025-11-18T02:37:16.925 [DEBUG] [Thread-65707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:37:16.946 [DEBUG] [Thread-65707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:37:16.947 [INFO] [Thread-65707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] client lang: <none>
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] server lang: <none>
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] kex follows: False
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] Compression: none
2025-11-18T02:37:16.950 [DEBUG] [Thread-65707] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:37:16.965 [DEBUG] [Thread-65707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:37:16.965 [DEBUG] [Thread-65707] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:37:16.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:37:16.965 [DEBUG] [Thread-65707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:37:16.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:37:16.966 [DEBUG] [Thread-65707] [transport.py] [_log()] userauth is OK
2025-11-18T02:37:16.966 [DEBUG] [Thread-65707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:37:16.966 [DEBUG] [Thread-65707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:37:16.966 [DEBUG] [Thread-65707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:37:16.966 [DEBUG] [Thread-65707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:37:16.976 [INFO] [Thread-65707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:37:16.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:37:17.605 [DEBUG] [Thread-65707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:37:17.605 [DEBUG] [Thread-65707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:37:17.605 [DEBUG] [Thread-65707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:37:17.646 [DEBUG] [Thread-65707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:37:17.646 [DEBUG] [Thread-65707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:37:17.648 [DEBUG] [Thread-65707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:37:17.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:37:17.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:37:17.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:37:17.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:37:17.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:37:17.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:37:17.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.025446 -999.00  +12.20  15.26     57   +4.00 1 1 1 1 1     0    0 7.42 -47.78 ZNESW 15.0 15.3 160.2 20.4 12.6 -23.1 12.4 -22.2 12.3 -21.8 12.6 -22.8
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.025446
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:37:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:36:44', tmtdew=9.45, humidity=52.63, cloud=0.0, wind=15.9, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:36:44', seeing=1.22, atlas_timestamp='2025-11-18T00:36:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:33:00')
2025-11-18T02:37:17.667 [DEBUG] [Thread-65707] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:37:17.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:37:17.752 [DEBUG] [Thread-65710] [transport.py] [_log()] starting thread (client mode): 0xd07abc10
2025-11-18T02:37:17.752 [DEBUG] [Thread-65710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:37:17.768 [DEBUG] [Thread-65710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:37:17.768 [INFO] [Thread-65710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] client lang: <none>
2025-11-18T02:37:17.775 [DEBUG] [Thread-65710] [transport.py] [_log()] server lang: <none>
2025-11-18T02:37:17.776 [DEBUG] [Thread-65710] [transport.py] [_log()] kex follows: False
2025-11-18T02:37:17.776 [DEBUG] [Thread-65710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:37:17.776 [DEBUG] [Thread-65710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:37:17.776 [DEBUG] [Thread-65710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:37:17.776 [DEBUG] [Thread-65710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:37:17.776 [DEBUG] [Thread-65710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:37:17.776 [DEBUG] [Thread-65710] [transport.py] [_log()] Compression: none
2025-11-18T02:37:17.776 [DEBUG] [Thread-65710] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:37:17.830 [DEBUG] [Thread-65710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:37:17.831 [DEBUG] [Thread-65710] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:37:17.831 [DEBUG] [Thread-65710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:37:17.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:37:17.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:37:17.888 [DEBUG] [Thread-65710] [transport.py] [_log()] userauth is OK
2025-11-18T02:37:17.888 [DEBUG] [Thread-65710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:37:17.888 [DEBUG] [Thread-65710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:37:17.888 [DEBUG] [Thread-65710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:37:17.888 [DEBUG] [Thread-65710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:37:17.902 [INFO] [Thread-65710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:37:17.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:37:17.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:37:18.737 [DEBUG] [Thread-65710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:37:18.738 [DEBUG] [Thread-65710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:37:18.785 [DEBUG] [Thread-65710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:37:18.785 [DEBUG] [Thread-65710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:37:18.794 [DEBUG] [Thread-65710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:37:18.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:37:18.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')
2025-11-18T02:37:18.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
2025-11-18T02:37:18.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:37:18.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:37:18.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:37:18.829 [DEBUG] [Thread-65710] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:37:20.880 [DEBUG] [Thread-65712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:37:35.926 [DEBUG] [Thread-65713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:37:48.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:37:48.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:37:48.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:37:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 37, 16), 9.45, 52.61, 0.0, 16.15, 12.17, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:37:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:37:16
2025-11-18T02:37:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:37:49.848 [DEBUG] [Thread-65714] [transport.py] [_log()] starting thread (client mode): 0xd3161c60
2025-11-18T02:37:49.849 [DEBUG] [Thread-65714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:37:49.871 [DEBUG] [Thread-65714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:37:49.871 [INFO] [Thread-65714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] client lang: <none>
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] server lang: <none>
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] kex follows: False
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:37:49.874 [DEBUG] [Thread-65714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:37:49.875 [DEBUG] [Thread-65714] [transport.py] [_log()] Compression: none
2025-11-18T02:37:49.875 [DEBUG] [Thread-65714] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:37:49.890 [DEBUG] [Thread-65714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:37:49.891 [DEBUG] [Thread-65714] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:37:49.891 [DEBUG] [Thread-65714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:37:49.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:37:49.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:37:49.892 [DEBUG] [Thread-65714] [transport.py] [_log()] userauth is OK
2025-11-18T02:37:49.892 [DEBUG] [Thread-65714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:37:49.892 [DEBUG] [Thread-65714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:37:49.892 [DEBUG] [Thread-65714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:37:49.892 [DEBUG] [Thread-65714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:37:49.908 [INFO] [Thread-65714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:37:49.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:37:50.535 [DEBUG] [Thread-65714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:37:50.535 [DEBUG] [Thread-65714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:37:50.535 [DEBUG] [Thread-65714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:37:50.576 [DEBUG] [Thread-65714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:37:50.576 [DEBUG] [Thread-65714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:37:50.578 [DEBUG] [Thread-65714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:37:50.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:37:50.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:37:50.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:37:50.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:37:50.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:37:50.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:37:50.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:37:50.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.025793 -999.00  +12.30  14.18     56   +4.00 1 1 1 1 1     0    0 7.38 -41.90 ZNESW 13.0 14.2 162.8 19.0 12.6 -23.1 12.5 -22.3 12.2 -21.9 12.6 -22.6
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.025793
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:37:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:37:16', tmtdew=9.45, humidity=52.61, cloud=0.0, wind=16.15, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:37:48', seeing=1.27, atlas_timestamp='2025-11-18T00:37:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:33:00')
2025-11-18T02:37:50.599 [DEBUG] [Thread-65714] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:37:50.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:37:50.685 [DEBUG] [Thread-65717] [transport.py] [_log()] starting thread (client mode): 0xd07abac0
2025-11-18T02:37:50.685 [DEBUG] [Thread-65717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:37:50.702 [DEBUG] [Thread-65717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:37:50.702 [INFO] [Thread-65717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] client lang: <none>
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] server lang: <none>
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] kex follows: False
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] Compression: none
2025-11-18T02:37:50.710 [DEBUG] [Thread-65717] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:37:50.767 [DEBUG] [Thread-65717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:37:50.768 [DEBUG] [Thread-65717] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:37:50.768 [DEBUG] [Thread-65717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:37:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:37:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:37:50.824 [DEBUG] [Thread-65717] [transport.py] [_log()] userauth is OK
2025-11-18T02:37:50.824 [DEBUG] [Thread-65717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:37:50.824 [DEBUG] [Thread-65717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:37:50.824 [DEBUG] [Thread-65717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:37:50.824 [DEBUG] [Thread-65717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:37:50.841 [INFO] [Thread-65717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:37:50.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:37:50.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:37:50.951 [DEBUG] [Thread-65719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:37:51.696 [DEBUG] [Thread-65717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:37:51.696 [DEBUG] [Thread-65717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:37:51.744 [DEBUG] [Thread-65717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:37:51.744 [DEBUG] [Thread-65717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:37:51.752 [DEBUG] [Thread-65717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:37:51.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:37:51.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:37:51.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:37:51.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:37:51.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:37:51.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:37:51.784 [DEBUG] [Thread-65717] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:37:53.101 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:37:53.102 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:38:03.432 [DEBUG] [Thread-65720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:38:05.982 [DEBUG] [Thread-65721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:38:21.010 [DEBUG] [Thread-65722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:38:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:38:21.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:38:21.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:38:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 37, 48), 9.47, 52.56, 0.0, 18.37, 12.17, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:38:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:37:48
2025-11-18T02:38:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:38:22.762 [DEBUG] [Thread-65723] [transport.py] [_log()] starting thread (client mode): 0xd0700f10
2025-11-18T02:38:22.762 [DEBUG] [Thread-65723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:38:22.783 [DEBUG] [Thread-65723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:38:22.784 [INFO] [Thread-65723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] client lang: <none>
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] server lang: <none>
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] kex follows: False
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] Compression: none
2025-11-18T02:38:22.787 [DEBUG] [Thread-65723] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:38:22.806 [DEBUG] [Thread-65723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:38:22.806 [DEBUG] [Thread-65723] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:38:22.806 [DEBUG] [Thread-65723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:38:22.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:38:22.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:38:22.807 [DEBUG] [Thread-65723] [transport.py] [_log()] userauth is OK
2025-11-18T02:38:22.807 [DEBUG] [Thread-65723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:38:22.807 [DEBUG] [Thread-65723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:38:22.807 [DEBUG] [Thread-65723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:38:22.807 [DEBUG] [Thread-65723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:38:22.822 [INFO] [Thread-65723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:38:22.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:38:23.421 [DEBUG] [Thread-65723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:38:23.422 [DEBUG] [Thread-65723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:38:23.422 [DEBUG] [Thread-65723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:38:23.462 [DEBUG] [Thread-65723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:38:23.463 [DEBUG] [Thread-65723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:38:23.465 [DEBUG] [Thread-65723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:38:23.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:38:23.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:38:23.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:38:23.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:38:23.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:38:23.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:38:23.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:38:23.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:38:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:38:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.026430 -999.00  +12.30  13.12     56   +3.90 1 1 1 1 1     0    0 7.14 -42.09 ZNESW 11.6 13.1 160.6 16.9 12.6 -23.3 12.5 -22.4 12.2 -21.9 12.6 -22.8
2025-11-18T02:38:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:38:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:38:23.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.026430
2025-11-18T02:38:23.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:38:23.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:38:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:38:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:38:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:38:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:37:48', tmtdew=9.47, humidity=52.56, cloud=0.0, wind=18.37, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:38:20', seeing=1.47, atlas_timestamp='2025-11-18T00:38:03.552', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:36:00')
2025-11-18T02:38:23.490 [DEBUG] [Thread-65723] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:38:23.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:38:23.583 [DEBUG] [Thread-65726] [transport.py] [_log()] starting thread (client mode): 0xd31502e0
2025-11-18T02:38:23.583 [DEBUG] [Thread-65726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:38:23.598 [DEBUG] [Thread-65726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:38:23.599 [INFO] [Thread-65726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:38:23.606 [DEBUG] [Thread-65726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:38:23.606 [DEBUG] [Thread-65726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:38:23.606 [DEBUG] [Thread-65726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] client lang: <none>
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] server lang: <none>
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] kex follows: False
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] Compression: none
2025-11-18T02:38:23.607 [DEBUG] [Thread-65726] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:38:23.663 [DEBUG] [Thread-65726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:38:23.663 [DEBUG] [Thread-65726] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:38:23.663 [DEBUG] [Thread-65726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:38:23.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:38:23.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:38:23.720 [DEBUG] [Thread-65726] [transport.py] [_log()] userauth is OK
2025-11-18T02:38:23.720 [DEBUG] [Thread-65726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:38:23.720 [DEBUG] [Thread-65726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:38:23.720 [DEBUG] [Thread-65726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:38:23.720 [DEBUG] [Thread-65726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:38:23.734 [INFO] [Thread-65726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:38:23.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:38:23.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:38:24.575 [DEBUG] [Thread-65726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:38:24.575 [DEBUG] [Thread-65726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:38:24.623 [DEBUG] [Thread-65726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:38:24.623 [DEBUG] [Thread-65726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:38:24.632 [DEBUG] [Thread-65726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:38:24.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:38:24.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:38:24.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:38:24.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:38:24.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:38:24.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:38:24.668 [DEBUG] [Thread-65726] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:38:36.033 [DEBUG] [Thread-65728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:38:51.067 [DEBUG] [Thread-65729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:38:53.329 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:38:53.330 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:38:54.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:38:54.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:38:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:38:55.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 38, 52), 9.47, 52.24, 0.0, 17.68, 12.22, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:38:55.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:38:52
2025-11-18T02:38:55.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:38:55.596 [DEBUG] [Thread-65730] [transport.py] [_log()] starting thread (client mode): 0xd07ab760
2025-11-18T02:38:55.596 [DEBUG] [Thread-65730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:38:55.617 [DEBUG] [Thread-65730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:38:55.617 [INFO] [Thread-65730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:38:55.620 [DEBUG] [Thread-65730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:38:55.620 [DEBUG] [Thread-65730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] client lang: <none>
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] server lang: <none>
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] kex follows: False
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:38:55.621 [DEBUG] [Thread-65730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:38:55.622 [DEBUG] [Thread-65730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:38:55.622 [DEBUG] [Thread-65730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:38:55.622 [DEBUG] [Thread-65730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:38:55.622 [DEBUG] [Thread-65730] [transport.py] [_log()] Compression: none
2025-11-18T02:38:55.622 [DEBUG] [Thread-65730] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:38:55.641 [DEBUG] [Thread-65730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:38:55.641 [DEBUG] [Thread-65730] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:38:55.642 [DEBUG] [Thread-65730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:38:55.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:38:55.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:38:55.644 [DEBUG] [Thread-65730] [transport.py] [_log()] userauth is OK
2025-11-18T02:38:55.644 [DEBUG] [Thread-65730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:38:55.644 [DEBUG] [Thread-65730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:38:55.644 [DEBUG] [Thread-65730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:38:55.644 [DEBUG] [Thread-65730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:38:55.667 [INFO] [Thread-65730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:38:55.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:38:56.283 [DEBUG] [Thread-65730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:38:56.283 [DEBUG] [Thread-65730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:38:56.284 [DEBUG] [Thread-65730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:38:56.324 [DEBUG] [Thread-65730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:38:56.324 [DEBUG] [Thread-65730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:38:56.327 [DEBUG] [Thread-65730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:38:56.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:38:56.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:38:56.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:38:56.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:38:56.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:38:56.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:38:56.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:38:56.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:38:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:38:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.026835 -999.00  +12.20   9.94     56   +3.80 1 1 1 1 1     0    0 7.33 -39.80 ZNESW 11.2 9.9 162.1 13.8 12.6 -23.3 12.5 -22.4 12.2 -22.0 12.6 -22.9
2025-11-18T02:38:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:38:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:38:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.026835
2025-11-18T02:38:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:38:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:38:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:38:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:38:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:38:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:38:52', tmtdew=9.47, humidity=52.24, cloud=0.0, wind=17.68, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:38:52', seeing=1.17, atlas_timestamp='2025-11-18T00:38:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:36:00')
2025-11-18T02:38:56.350 [DEBUG] [Thread-65730] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:38:56.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:38:56.446 [DEBUG] [Thread-65733] [transport.py] [_log()] starting thread (client mode): 0xd317d810
2025-11-18T02:38:56.446 [DEBUG] [Thread-65733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:38:56.461 [DEBUG] [Thread-65733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:38:56.461 [INFO] [Thread-65733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:38:56.468 [DEBUG] [Thread-65733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:38:56.468 [DEBUG] [Thread-65733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] client lang: <none>
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] server lang: <none>
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] kex follows: False
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] Compression: none
2025-11-18T02:38:56.469 [DEBUG] [Thread-65733] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:38:56.527 [DEBUG] [Thread-65733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:38:56.528 [DEBUG] [Thread-65733] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:38:56.528 [DEBUG] [Thread-65733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:38:56.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:38:56.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:38:56.584 [DEBUG] [Thread-65733] [transport.py] [_log()] userauth is OK
2025-11-18T02:38:56.584 [DEBUG] [Thread-65733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:38:56.584 [DEBUG] [Thread-65733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:38:56.584 [DEBUG] [Thread-65733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:38:56.584 [DEBUG] [Thread-65733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:38:56.603 [INFO] [Thread-65733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:38:56.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:38:56.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:38:57.451 [DEBUG] [Thread-65733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:38:57.451 [DEBUG] [Thread-65733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:38:57.498 [DEBUG] [Thread-65733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:38:57.498 [DEBUG] [Thread-65733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:38:57.507 [DEBUG] [Thread-65733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:38:57.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:38:57.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:38:57.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:38:57.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:38:57.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:38:57.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:38:57.541 [DEBUG] [Thread-65733] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:39:03.509 [DEBUG] [Thread-65735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:39:06.095 [DEBUG] [Thread-65736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:39:21.129 [DEBUG] [Thread-65737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:39:27.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:39:27.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:39:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:39:28.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 39, 24), 9.47, 52.21, 0.0, 16.85, 12.18, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:39:28.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:39:24
2025-11-18T02:39:28.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:39:28.477 [DEBUG] [Thread-65738] [transport.py] [_log()] starting thread (client mode): 0xd07abac0
2025-11-18T02:39:28.477 [DEBUG] [Thread-65738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:39:28.497 [DEBUG] [Thread-65738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:39:28.497 [INFO] [Thread-65738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] client lang: <none>
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] server lang: <none>
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] kex follows: False
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:39:28.501 [DEBUG] [Thread-65738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:39:28.502 [DEBUG] [Thread-65738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:39:28.502 [DEBUG] [Thread-65738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:39:28.502 [DEBUG] [Thread-65738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:39:28.502 [DEBUG] [Thread-65738] [transport.py] [_log()] Compression: none
2025-11-18T02:39:28.502 [DEBUG] [Thread-65738] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:39:28.517 [DEBUG] [Thread-65738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:39:28.517 [DEBUG] [Thread-65738] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:39:28.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:39:28.518 [DEBUG] [Thread-65738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:39:28.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:39:28.520 [DEBUG] [Thread-65738] [transport.py] [_log()] userauth is OK
2025-11-18T02:39:28.520 [DEBUG] [Thread-65738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:39:28.520 [DEBUG] [Thread-65738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:39:28.520 [DEBUG] [Thread-65738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:39:28.521 [DEBUG] [Thread-65738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:39:28.538 [INFO] [Thread-65738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:39:28.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:39:29.143 [DEBUG] [Thread-65738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:39:29.143 [DEBUG] [Thread-65738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:39:29.144 [DEBUG] [Thread-65738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:39:29.185 [DEBUG] [Thread-65738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:39:29.185 [DEBUG] [Thread-65738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:39:29.188 [DEBUG] [Thread-65738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:39:29.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:39:29.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:39:29.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:39:29.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:39:29.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:39:29.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:39:29.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:39:29.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:39:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:39:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.027182 -999.00  +12.20  13.41     56   +3.90 1 1 1 1 1     0    0 7.38 -40.20 ZNESW 10.4 13.4 142.6 16.5 12.6 -23.2 12.5 -22.4 12.2 -21.8 12.5 -22.7
2025-11-18T02:39:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:39:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:39:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.027182
2025-11-18T02:39:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:39:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:39:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:39:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:39:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:39:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:39:24', tmtdew=9.47, humidity=52.21, cloud=0.0, wind=16.85, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:39:24', seeing=1.37, atlas_timestamp='2025-11-18T00:39:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:36:00')
2025-11-18T02:39:29.211 [DEBUG] [Thread-65738] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:39:29.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:39:29.309 [DEBUG] [Thread-65741] [transport.py] [_log()] starting thread (client mode): 0xd31615a0
2025-11-18T02:39:29.309 [DEBUG] [Thread-65741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:39:29.324 [DEBUG] [Thread-65741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:39:29.324 [INFO] [Thread-65741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] client lang: <none>
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] server lang: <none>
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] kex follows: False
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:39:29.332 [DEBUG] [Thread-65741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:39:29.333 [DEBUG] [Thread-65741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:39:29.333 [DEBUG] [Thread-65741] [transport.py] [_log()] Compression: none
2025-11-18T02:39:29.333 [DEBUG] [Thread-65741] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:39:29.394 [DEBUG] [Thread-65741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:39:29.395 [DEBUG] [Thread-65741] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:39:29.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:39:29.395 [DEBUG] [Thread-65741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:39:29.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:39:29.452 [DEBUG] [Thread-65741] [transport.py] [_log()] userauth is OK
2025-11-18T02:39:29.453 [DEBUG] [Thread-65741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:39:29.453 [DEBUG] [Thread-65741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:39:29.453 [DEBUG] [Thread-65741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:39:29.453 [DEBUG] [Thread-65741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:39:29.476 [INFO] [Thread-65741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:39:29.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:39:29.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:39:30.380 [DEBUG] [Thread-65741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:39:30.380 [DEBUG] [Thread-65741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:39:30.428 [DEBUG] [Thread-65741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:39:30.428 [DEBUG] [Thread-65741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:39:30.437 [DEBUG] [Thread-65741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:39:30.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:39:30.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:39: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') -> 00000000
2025-11-18T02:39:30.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:39:30.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:39:30.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:39:30.472 [DEBUG] [Thread-65741] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:39:36.162 [DEBUG] [Thread-65743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:39:51.201 [DEBUG] [Thread-65744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:39:53.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:39:53.534 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:40:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:40:00.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:40:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:40:01.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 39, 56), 9.45, 52.28, 0.0, 17.89, 12.05, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:40:01.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:39:56
2025-11-18T02:40:01.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:40:01.425 [DEBUG] [Thread-65745] [transport.py] [_log()] starting thread (client mode): 0xd317f4c0
2025-11-18T02:40:01.425 [DEBUG] [Thread-65745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:40:01.435 [DEBUG] [Thread-65745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:40:01.435 [INFO] [Thread-65745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] client lang: <none>
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] server lang: <none>
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] kex follows: False
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] Compression: none
2025-11-18T02:40:01.436 [DEBUG] [Thread-65745] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:40:01.444 [DEBUG] [Thread-65745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:40:01.444 [DEBUG] [Thread-65745] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:40:01.445 [DEBUG] [Thread-65745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:40:01.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:40:01.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:40:01.445 [DEBUG] [Thread-65745] [transport.py] [_log()] userauth is OK
2025-11-18T02:40:01.445 [DEBUG] [Thread-65745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:40:01.445 [DEBUG] [Thread-65745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:40:01.445 [DEBUG] [Thread-65745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:40:01.446 [DEBUG] [Thread-65745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:40:01.457 [INFO] [Thread-65745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:40:01.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:40:02.064 [DEBUG] [Thread-65745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:40:02.064 [DEBUG] [Thread-65745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:40:02.064 [DEBUG] [Thread-65745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:40:02.104 [DEBUG] [Thread-65745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:40:02.104 [DEBUG] [Thread-65745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:40:02.108 [DEBUG] [Thread-65745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:40:02.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:40:02.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:40:02.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:40:02.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:40:02.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:40:02.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:40:02.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:40:02.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:40:02.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:40:02.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.027472 -999.00  +12.20  14.23     56   +3.90 1 1 1 1 1     0    0 7.38 -39.39 ZNESW 10.7 14.2 155.2 15.9 12.6 -23.4 12.5 -22.5 12.2 -21.8 12.5 -22.8
2025-11-18T02:40:02.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:40:02.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:40:02.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.027472
2025-11-18T02:40:02.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:40:02.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:40:02.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:40:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:40:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:40:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:39:56', tmtdew=9.45, humidity=52.28, cloud=0.0, wind=17.89, temperature=12.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:39:56', seeing=1.58, atlas_timestamp='2025-11-18T00:39:33.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:36:00')
2025-11-18T02:40:02.133 [DEBUG] [Thread-65745] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:40:02.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:40:02.230 [DEBUG] [Thread-65748] [transport.py] [_log()] starting thread (client mode): 0xd317cca0
2025-11-18T02:40:02.230 [DEBUG] [Thread-65748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:40:02.245 [DEBUG] [Thread-65748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:40:02.245 [INFO] [Thread-65748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] client lang: <none>
2025-11-18T02:40:02.254 [DEBUG] [Thread-65748] [transport.py] [_log()] server lang: <none>
2025-11-18T02:40:02.255 [DEBUG] [Thread-65748] [transport.py] [_log()] kex follows: False
2025-11-18T02:40:02.255 [DEBUG] [Thread-65748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:40:02.255 [DEBUG] [Thread-65748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:40:02.255 [DEBUG] [Thread-65748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:40:02.255 [DEBUG] [Thread-65748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:40:02.255 [DEBUG] [Thread-65748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:40:02.255 [DEBUG] [Thread-65748] [transport.py] [_log()] Compression: none
2025-11-18T02:40:02.255 [DEBUG] [Thread-65748] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:40:02.315 [DEBUG] [Thread-65748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:40:02.315 [DEBUG] [Thread-65748] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:40:02.315 [DEBUG] [Thread-65748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:40:02.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:40:02.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:40:02.372 [DEBUG] [Thread-65748] [transport.py] [_log()] userauth is OK
2025-11-18T02:40:02.372 [DEBUG] [Thread-65748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:40:02.372 [DEBUG] [Thread-65748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:40:02.372 [DEBUG] [Thread-65748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:40:02.372 [DEBUG] [Thread-65748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:40:02.386 [INFO] [Thread-65748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:40:02.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:40:02.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:40:03.212 [DEBUG] [Thread-65748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:40:03.212 [DEBUG] [Thread-65748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:40:03.260 [DEBUG] [Thread-65748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:40:03.260 [DEBUG] [Thread-65748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:40:03.269 [DEBUG] [Thread-65748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:40:03.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:40: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')
2025-11-18T02:40:03.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:40:03.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:40:03.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:40:03.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:40:03.310 [DEBUG] [Thread-65748] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:40:03.591 [DEBUG] [Thread-65750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:40:06.231 [DEBUG] [Thread-65751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:40:21.274 [DEBUG] [Thread-65752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:40:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:40:33.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:40:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:40:33.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 40, 28), 9.44, 52.34, 0.0, 17.82, 12.08, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:40:33.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:40:28
2025-11-18T02:40:34.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:40:34.234 [DEBUG] [Thread-65753] [transport.py] [_log()] starting thread (client mode): 0xd0795a20
2025-11-18T02:40:34.234 [DEBUG] [Thread-65753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:40:34.255 [DEBUG] [Thread-65753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:40:34.255 [INFO] [Thread-65753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:40:34.258 [DEBUG] [Thread-65753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:40:34.258 [DEBUG] [Thread-65753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:40:34.258 [DEBUG] [Thread-65753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:40:34.258 [DEBUG] [Thread-65753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:40:34.258 [DEBUG] [Thread-65753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:40:34.258 [DEBUG] [Thread-65753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:40:34.258 [DEBUG] [Thread-65753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:40:34.258 [DEBUG] [Thread-65753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] client lang: <none>
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] server lang: <none>
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] kex follows: False
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] Compression: none
2025-11-18T02:40:34.259 [DEBUG] [Thread-65753] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:40:34.267 [DEBUG] [Thread-65753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:40:34.267 [DEBUG] [Thread-65753] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:40:34.268 [DEBUG] [Thread-65753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:40:34.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:40:34.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:40:34.269 [DEBUG] [Thread-65753] [transport.py] [_log()] userauth is OK
2025-11-18T02:40:34.269 [DEBUG] [Thread-65753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:40:34.269 [DEBUG] [Thread-65753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:40:34.270 [DEBUG] [Thread-65753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:40:34.270 [DEBUG] [Thread-65753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:40:34.287 [INFO] [Thread-65753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:40:34.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:40:34.853 [DEBUG] [Thread-65753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:40:34.853 [DEBUG] [Thread-65753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:40:34.853 [DEBUG] [Thread-65753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:40:34.894 [DEBUG] [Thread-65753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:40:34.894 [DEBUG] [Thread-65753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:40:34.896 [DEBUG] [Thread-65753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:40:34.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:40:34.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:40:34.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:40:34.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:40:34.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:40:34.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:40:34.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:40:34.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:40:34.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:40:34.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.027819 -999.00  +12.20  12.27     56   +3.80 1 1 1 1 1     0    0 7.54 -41.30 ZNESW 10.2 12.3 156.4 14.1 12.6 -23.3 12.4 -22.3 12.2 -22.0 12.5 -22.8
2025-11-18T02:40:34.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:40:34.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:40:34.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.027819
2025-11-18T02:40:34.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:40:34.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:40:34.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:40:34.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:40:34.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:40:34.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:40:28', tmtdew=9.44, humidity=52.34, cloud=0.0, wind=17.82, temperature=12.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:40:28', seeing=1.39, atlas_timestamp='2025-11-18T00:40:03.562', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:36:00')
2025-11-18T02:40:34.935 [DEBUG] [Thread-65753] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:40:34.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:40:35.008 [DEBUG] [Thread-65756] [transport.py] [_log()] starting thread (client mode): 0xd0795660
2025-11-18T02:40:35.008 [DEBUG] [Thread-65756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:40:35.029 [DEBUG] [Thread-65756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:40:35.029 [INFO] [Thread-65756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:40:35.036 [DEBUG] [Thread-65756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] client lang: <none>
2025-11-18T02:40:35.037 [DEBUG] [Thread-65756] [transport.py] [_log()] server lang: <none>
2025-11-18T02:40:35.038 [DEBUG] [Thread-65756] [transport.py] [_log()] kex follows: False
2025-11-18T02:40:35.038 [DEBUG] [Thread-65756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:40:35.038 [DEBUG] [Thread-65756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:40:35.038 [DEBUG] [Thread-65756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:40:35.038 [DEBUG] [Thread-65756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:40:35.038 [DEBUG] [Thread-65756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:40:35.038 [DEBUG] [Thread-65756] [transport.py] [_log()] Compression: none
2025-11-18T02:40:35.039 [DEBUG] [Thread-65756] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:40:35.100 [DEBUG] [Thread-65756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:40:35.100 [DEBUG] [Thread-65756] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:40:35.101 [DEBUG] [Thread-65756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:40:35.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:40:35.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:40:35.162 [DEBUG] [Thread-65756] [transport.py] [_log()] userauth is OK
2025-11-18T02:40:35.163 [DEBUG] [Thread-65756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:40:35.163 [DEBUG] [Thread-65756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:40:35.163 [DEBUG] [Thread-65756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:40:35.163 [DEBUG] [Thread-65756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:40:35.183 [INFO] [Thread-65756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:40:35.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:40:35.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:40:36.027 [DEBUG] [Thread-65756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:40:36.027 [DEBUG] [Thread-65756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:40:36.075 [DEBUG] [Thread-65756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:40:36.075 [DEBUG] [Thread-65756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:40:36.086 [DEBUG] [Thread-65756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:40:36.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:40:36.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:40:36.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:40:36.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:40:36.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:40:36.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:40:36.123 [DEBUG] [Thread-65756] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:40:36.301 [DEBUG] [Thread-65758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:40:51.349 [DEBUG] [Thread-65759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:40:53.738 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:40:53.738 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:03.662 [DEBUG] [Thread-65760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:06.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:41:06.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:41:06.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:41:06.376 [DEBUG] [Thread-65761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:06.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 41), 9.32, 52.89, 0.0, 17.94, 12.02, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:41:06.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:41:00
2025-11-18T02:41:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:41:07.081 [DEBUG] [Thread-65762] [transport.py] [_log()] starting thread (client mode): 0xd07d9510
2025-11-18T02:41:07.081 [DEBUG] [Thread-65762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:41:07.103 [DEBUG] [Thread-65762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:41:07.103 [INFO] [Thread-65762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] client lang: <none>
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] server lang: <none>
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] kex follows: False
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:41:07.104 [DEBUG] [Thread-65762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:41:07.105 [DEBUG] [Thread-65762] [transport.py] [_log()] Compression: none
2025-11-18T02:41:07.105 [DEBUG] [Thread-65762] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:41:07.118 [DEBUG] [Thread-65762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:41:07.118 [DEBUG] [Thread-65762] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:41:07.118 [DEBUG] [Thread-65762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:41:07.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:41:07.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:41:07.119 [DEBUG] [Thread-65762] [transport.py] [_log()] userauth is OK
2025-11-18T02:41:07.119 [DEBUG] [Thread-65762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:41:07.119 [DEBUG] [Thread-65762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:41:07.119 [DEBUG] [Thread-65762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:41:07.119 [DEBUG] [Thread-65762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:41:07.128 [INFO] [Thread-65762] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:41:07.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:41:07.710 [DEBUG] [Thread-65762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:41:07.710 [DEBUG] [Thread-65762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:41:07.711 [DEBUG] [Thread-65762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:41:07.751 [DEBUG] [Thread-65762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:41:07.751 [DEBUG] [Thread-65762] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:41:07.753 [DEBUG] [Thread-65762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:41:07.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:41:07.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:41:07.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:41:07.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:41:07.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:41:07.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:41:07.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:41:07.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:41:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:41:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.028166 -999.00  +12.20  10.74     56   +3.90 1 1 1 1 1     0    0 7.42 -38.79 ZNESW 12.8 10.7 150.0 15.3 12.6 -23.2 12.4 -22.3 12.2 -21.9 12.5 -22.7
2025-11-18T02:41:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:41:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:41:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.028166
2025-11-18T02:41:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:41:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:41:07.769 [DEBUG] [Thread-65762] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:41:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:41:07.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:41:07.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:41:07.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:41:00', tmtdew=9.32, humidity=52.89, cloud=0.0, wind=17.94, temperature=12.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:41:00', seeing=1.32, atlas_timestamp='2025-11-18T00:40:33.542', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, 0.020749999999999602, 0.08125000000000071, 0.024499999999999744, 0.045999999999999375, 0.08025000000000126, -0.013500000000000512, 0.04425000000000168, 0.03449999999999953, 0.04300000000000104, 0.07924999999999827, 0.08199999999999896, 0.11500000000000021, 0.06124999999999936, -0.0010000000000012221, 0.015499999999999403, 0.10125000000000028, 0.11249999999999893, 0.07599999999999874, 0.0982499999999984, 0.1399999999999988, 0.09374999999999822, 0.09475000000000122, 0.11625000000000085, 0.20899999999999963, 0.18549999999999933, 0.13874999999999993, 0.19149999999999956, 0.15300000000000047, 0.03300000000000125, 0.05500000000000149, 0.1490000000000009, 0.32924999999999915], zp_timestamp='2025-11-18T00:36:00')
2025-11-18T02:41:07.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:41:07.865 [DEBUG] [Thread-65765] [transport.py] [_log()] starting thread (client mode): 0xd3160d30
2025-11-18T02:41:07.865 [DEBUG] [Thread-65765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:41:07.882 [DEBUG] [Thread-65765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:41:07.882 [INFO] [Thread-65765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:41:07.889 [DEBUG] [Thread-65765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] client lang: <none>
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] server lang: <none>
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] kex follows: False
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] Compression: none
2025-11-18T02:41:07.890 [DEBUG] [Thread-65765] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:41:07.949 [DEBUG] [Thread-65765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:41:07.949 [DEBUG] [Thread-65765] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:41:07.950 [DEBUG] [Thread-65765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:41:07.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:41:07.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:41:08.004 [DEBUG] [Thread-65765] [transport.py] [_log()] userauth is OK
2025-11-18T02:41:08.004 [DEBUG] [Thread-65765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:41:08.005 [DEBUG] [Thread-65765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:41:08.005 [DEBUG] [Thread-65765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:41:08.005 [DEBUG] [Thread-65765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:41:08.026 [INFO] [Thread-65765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:41:08.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:41:08.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:41:08.901 [DEBUG] [Thread-65765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:41:08.901 [DEBUG] [Thread-65765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:41:08.949 [DEBUG] [Thread-65765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:41:08.949 [DEBUG] [Thread-65765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:41:08.958 [DEBUG] [Thread-65765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:41:08.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:41:08.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:41:08.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:41:08.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:41:08.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:41:08.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:41:08.993 [DEBUG] [Thread-65765] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:41:09.115 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:18.075 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:21.403 [DEBUG] [Thread-65767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:22.156 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:36.444 [DEBUG] [Thread-65768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:38.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:41:38.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:41:38.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:41:39.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 41, 32), 9.35, 52.81, 0.0, 17.04, 12.05, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:41:39.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:41:32
2025-11-18T02:41:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:41:39.898 [DEBUG] [Thread-65769] [transport.py] [_log()] starting thread (client mode): 0xd0796110
2025-11-18T02:41:39.898 [DEBUG] [Thread-65769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:41:39.917 [DEBUG] [Thread-65769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:41:39.917 [INFO] [Thread-65769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:41:39.920 [DEBUG] [Thread-65769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:41:39.920 [DEBUG] [Thread-65769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] client lang: <none>
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] server lang: <none>
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] kex follows: False
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:41:39.921 [DEBUG] [Thread-65769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:41:39.922 [DEBUG] [Thread-65769] [transport.py] [_log()] Compression: none
2025-11-18T02:41:39.922 [DEBUG] [Thread-65769] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:41:39.931 [DEBUG] [Thread-65769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:41:39.932 [DEBUG] [Thread-65769] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:41:39.932 [DEBUG] [Thread-65769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:41:39.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:41:39.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:41:39.935 [DEBUG] [Thread-65769] [transport.py] [_log()] userauth is OK
2025-11-18T02:41:39.935 [DEBUG] [Thread-65769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:41:39.935 [DEBUG] [Thread-65769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:41:39.935 [DEBUG] [Thread-65769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:41:39.936 [DEBUG] [Thread-65769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:41:39.960 [INFO] [Thread-65769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:41:39.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:41:40.586 [DEBUG] [Thread-65769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:41:40.586 [DEBUG] [Thread-65769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:41:40.586 [DEBUG] [Thread-65769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:41:40.627 [DEBUG] [Thread-65769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:41:40.627 [DEBUG] [Thread-65769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:41:40.629 [DEBUG] [Thread-65769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:41:40.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:41:40.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:41:40.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:41:40.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:41:40.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:41:40.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:41:40.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:41:40.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:41:40.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:41:40.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.028166 -999.00  +12.20  10.74     56   +3.90 1 1 1 1 1     0    0 7.42 -38.79 ZNESW 12.8 10.7 150.0 15.3 12.6 -23.2 12.4 -22.3 12.2 -21.9 12.5 -22.7
2025-11-18T02:41:40.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:41:40.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:41:40.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.028166
2025-11-18T02:41:40.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:41:40.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:41:40.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:41:40.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:41:40.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:41:40.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:41:32', tmtdew=9.35, humidity=52.81, cloud=0.0, wind=17.04, temperature=12.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:41:32', seeing=1.32, atlas_timestamp='2025-11-18T00:40:33.542', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:40:00')
2025-11-18T02:41:40.650 [DEBUG] [Thread-65769] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:41:40.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:41:40.735 [DEBUG] [Thread-65772] [transport.py] [_log()] starting thread (client mode): 0xd07969e0
2025-11-18T02:41:40.735 [DEBUG] [Thread-65772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:41:40.750 [DEBUG] [Thread-65772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:41:40.750 [INFO] [Thread-65772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] client lang: <none>
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] server lang: <none>
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] kex follows: False
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] Compression: none
2025-11-18T02:41:40.758 [DEBUG] [Thread-65772] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:41:40.818 [DEBUG] [Thread-65772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:41:40.818 [DEBUG] [Thread-65772] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:41:40.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:41:40.819 [DEBUG] [Thread-65772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:41:40.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:41:40.876 [DEBUG] [Thread-65772] [transport.py] [_log()] userauth is OK
2025-11-18T02:41:40.876 [DEBUG] [Thread-65772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:41:40.876 [DEBUG] [Thread-65772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:41:40.876 [DEBUG] [Thread-65772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:41:40.876 [DEBUG] [Thread-65772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:41:40.891 [INFO] [Thread-65772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:41:40.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:41:40.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:41:41.699 [DEBUG] [Thread-65772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:41:41.699 [DEBUG] [Thread-65772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:41:41.747 [DEBUG] [Thread-65772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:41:41.747 [DEBUG] [Thread-65772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:41:41.755 [DEBUG] [Thread-65772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:41:41.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:41:41.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:41:41.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:41:41.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:41:41.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:41:41.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:41:41.787 [DEBUG] [Thread-65772] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:41:51.472 [DEBUG] [Thread-65774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:53.940 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:41:53.941 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:03.749 [DEBUG] [Thread-65775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:06.519 [DEBUG] [Thread-65776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:42:11.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:42:11.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:42:12.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 42, 4), 9.34, 52.84, 0.0, 16.43, 12.08, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:42:12.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:42:04
2025-11-18T02:42:12.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:42:12.706 [DEBUG] [Thread-65777] [transport.py] [_log()] starting thread (client mode): 0xd0797bb0
2025-11-18T02:42:12.707 [DEBUG] [Thread-65777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:42:12.727 [DEBUG] [Thread-65777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:42:12.728 [INFO] [Thread-65777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] client lang: <none>
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] server lang: <none>
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] kex follows: False
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:42:12.731 [DEBUG] [Thread-65777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:42:12.732 [DEBUG] [Thread-65777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:42:12.732 [DEBUG] [Thread-65777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:42:12.732 [DEBUG] [Thread-65777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:42:12.732 [DEBUG] [Thread-65777] [transport.py] [_log()] Compression: none
2025-11-18T02:42:12.732 [DEBUG] [Thread-65777] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:42:12.750 [DEBUG] [Thread-65777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:42:12.751 [DEBUG] [Thread-65777] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:42:12.751 [DEBUG] [Thread-65777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:42:12.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:42:12.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:42:12.753 [DEBUG] [Thread-65777] [transport.py] [_log()] userauth is OK
2025-11-18T02:42:12.753 [DEBUG] [Thread-65777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:42:12.753 [DEBUG] [Thread-65777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:42:12.753 [DEBUG] [Thread-65777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:42:12.753 [DEBUG] [Thread-65777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:42:12.775 [INFO] [Thread-65777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:42:12.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:42:13.381 [DEBUG] [Thread-65777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:42:13.381 [DEBUG] [Thread-65777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:42:13.382 [DEBUG] [Thread-65777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:42:13.422 [DEBUG] [Thread-65777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:42:13.422 [DEBUG] [Thread-65777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:42:13.425 [DEBUG] [Thread-65777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:42:13.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:42:13.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:42:13.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:42:13.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:42:13.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:42:13.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:42:13.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:42:13.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:42:13.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:42:13.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.028861 -999.00  +12.10  10.02     56   +3.80 1 1 1 1 1     0    0 7.39 -38.23 ZNESW 12.3 10.0 152.0 13.7 12.5 -23.4 12.4 -22.4 12.2 -22.1 12.5 -22.9
2025-11-18T02:42:13.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:42:13.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:42:13.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.028861
2025-11-18T02:42:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:42:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:42:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:42:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:42:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:42:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:42:04', tmtdew=9.34, humidity=52.84, cloud=0.0, wind=16.43, temperature=12.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:42:04', seeing=1.16, atlas_timestamp='2025-11-18T00:41:33.590', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:40:00')
2025-11-18T02:42:13.450 [DEBUG] [Thread-65777] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:42:13.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:42:13.553 [DEBUG] [Thread-65780] [transport.py] [_log()] starting thread (client mode): 0xd0795f30
2025-11-18T02:42:13.553 [DEBUG] [Thread-65780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:42:13.568 [DEBUG] [Thread-65780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:42:13.568 [INFO] [Thread-65780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:42:13.575 [DEBUG] [Thread-65780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:42:13.576 [DEBUG] [Thread-65780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:42:13.576 [DEBUG] [Thread-65780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:42:13.576 [DEBUG] [Thread-65780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:42:13.576 [DEBUG] [Thread-65780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:42:13.576 [DEBUG] [Thread-65780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:42:13.576 [DEBUG] [Thread-65780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:42:13.576 [DEBUG] [Thread-65780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:42:13.576 [DEBUG] [Thread-65780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:42:13.577 [DEBUG] [Thread-65780] [transport.py] [_log()] client lang: <none>
2025-11-18T02:42:13.577 [DEBUG] [Thread-65780] [transport.py] [_log()] server lang: <none>
2025-11-18T02:42:13.577 [DEBUG] [Thread-65780] [transport.py] [_log()] kex follows: False
2025-11-18T02:42:13.577 [DEBUG] [Thread-65780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:42:13.577 [DEBUG] [Thread-65780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:42:13.577 [DEBUG] [Thread-65780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:42:13.577 [DEBUG] [Thread-65780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:42:13.577 [DEBUG] [Thread-65780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:42:13.578 [DEBUG] [Thread-65780] [transport.py] [_log()] Compression: none
2025-11-18T02:42:13.578 [DEBUG] [Thread-65780] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:42:13.632 [DEBUG] [Thread-65780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:42:13.633 [DEBUG] [Thread-65780] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:42:13.633 [DEBUG] [Thread-65780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:42:13.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:42:13.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:42:13.688 [DEBUG] [Thread-65780] [transport.py] [_log()] userauth is OK
2025-11-18T02:42:13.688 [DEBUG] [Thread-65780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:42:13.689 [DEBUG] [Thread-65780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:42:13.689 [DEBUG] [Thread-65780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:42:13.689 [DEBUG] [Thread-65780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:42:13.708 [INFO] [Thread-65780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:42:13.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:42:13.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:42:14.613 [DEBUG] [Thread-65780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:42:14.613 [DEBUG] [Thread-65780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:42:14.661 [DEBUG] [Thread-65780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:42:14.661 [DEBUG] [Thread-65780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:42:14.670 [DEBUG] [Thread-65780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:42:14.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:42: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')
2025-11-18T02:42:14.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
2025-11-18T02:42:14.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:42:14.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:42:14.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:42:14.705 [DEBUG] [Thread-65780] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:42:21.546 [DEBUG] [Thread-65782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:36.576 [DEBUG] [Thread-65783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:44.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:42:44.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:42:44.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
2025-11-18T02:42:44.763 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 42, 36), 9.39, 52.31, 0.0, 16.8, 12.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:42:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:42:36
2025-11-18T02:42:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:42:45.648 [DEBUG] [Thread-65784] [transport.py] [_log()] starting thread (client mode): 0xd0757760
2025-11-18T02:42:45.648 [DEBUG] [Thread-65784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:42:45.663 [DEBUG] [Thread-65784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:42:45.663 [INFO] [Thread-65784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:42:45.666 [DEBUG] [Thread-65784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:42:45.666 [DEBUG] [Thread-65784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:42:45.666 [DEBUG] [Thread-65784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:42:45.666 [DEBUG] [Thread-65784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:42:45.666 [DEBUG] [Thread-65784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:42:45.666 [DEBUG] [Thread-65784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] client lang: <none>
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] server lang: <none>
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] kex follows: False
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] Compression: none
2025-11-18T02:42:45.667 [DEBUG] [Thread-65784] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:42:45.684 [DEBUG] [Thread-65784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:42:45.684 [DEBUG] [Thread-65784] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:42:45.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:42:45.685 [DEBUG] [Thread-65784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:42:45.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:42:45.687 [DEBUG] [Thread-65784] [transport.py] [_log()] userauth is OK
2025-11-18T02:42:45.687 [DEBUG] [Thread-65784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:42:45.687 [DEBUG] [Thread-65784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:42:45.687 [DEBUG] [Thread-65784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:42:45.687 [DEBUG] [Thread-65784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:42:45.711 [INFO] [Thread-65784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:42:45.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:42:46.370 [DEBUG] [Thread-65784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:42:46.371 [DEBUG] [Thread-65784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:42:46.371 [DEBUG] [Thread-65784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:42:46.411 [DEBUG] [Thread-65784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:42:46.412 [DEBUG] [Thread-65784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:42:46.415 [DEBUG] [Thread-65784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:42:46.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:42:46.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:42:46.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:42:46.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:42:46.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:42:46.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:42:46.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:42:46.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:42:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:42:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.029208 -999.00  +12.10  10.05     56   +3.80 1 1 1 1 1     0    0 7.46 -38.87 ZNESW 10.7 10.1 144.4 16.8 12.6 -23.3 12.4 -22.4 12.2 -21.9 12.5 -22.9
2025-11-18T02:42:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:42:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:42:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.029208
2025-11-18T02:42:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:42:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:42:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:42:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:42:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:42:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:42:36', tmtdew=9.39, humidity=52.31, cloud=0.0, wind=16.8, temperature=12.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:42:36', seeing=1.25, atlas_timestamp='2025-11-18T00:42:03.571', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:40:00')
2025-11-18T02:42:46.439 [DEBUG] [Thread-65784] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:42:46.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:42:46.535 [DEBUG] [Thread-65787] [transport.py] [_log()] starting thread (client mode): 0xd317cd90
2025-11-18T02:42:46.535 [DEBUG] [Thread-65787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:42:46.550 [DEBUG] [Thread-65787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:42:46.550 [INFO] [Thread-65787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:42:46.557 [DEBUG] [Thread-65787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:42:46.557 [DEBUG] [Thread-65787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:42:46.557 [DEBUG] [Thread-65787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:42:46.557 [DEBUG] [Thread-65787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] client lang: <none>
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] server lang: <none>
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] kex follows: False
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] Compression: none
2025-11-18T02:42:46.558 [DEBUG] [Thread-65787] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:42:46.616 [DEBUG] [Thread-65787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:42:46.617 [DEBUG] [Thread-65787] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:42:46.617 [DEBUG] [Thread-65787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:42:46.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:42:46.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:42:46.672 [DEBUG] [Thread-65787] [transport.py] [_log()] userauth is OK
2025-11-18T02:42:46.673 [DEBUG] [Thread-65787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:42:46.673 [DEBUG] [Thread-65787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:42:46.673 [DEBUG] [Thread-65787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:42:46.673 [DEBUG] [Thread-65787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:42:46.692 [INFO] [Thread-65787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:42:46.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:42:46.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:42:47.535 [DEBUG] [Thread-65787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:42:47.536 [DEBUG] [Thread-65787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:42:47.583 [DEBUG] [Thread-65787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:42:47.583 [DEBUG] [Thread-65787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:42:47.592 [DEBUG] [Thread-65787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:42:47.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:42:47.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:42:47.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:42:47.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:42:47.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:42:47.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:42:47.627 [DEBUG] [Thread-65787] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:42:51.607 [DEBUG] [Thread-65789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:53.895 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:54.145 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:54.146 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:42:58.045 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:43:03.805 [DEBUG] [Thread-65790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:43:06.660 [DEBUG] [Thread-65791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:43:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:43:17.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:43:17.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:43:18.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 43, 8), 9.38, 52.36, 0.0, 16.78, 12.08, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:43:18.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:43:08
2025-11-18T02:43:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:43:18.554 [DEBUG] [Thread-65792] [transport.py] [_log()] starting thread (client mode): 0xd0711060
2025-11-18T02:43:18.554 [DEBUG] [Thread-65792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:43:18.567 [DEBUG] [Thread-65792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:43:18.567 [INFO] [Thread-65792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] client lang: <none>
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] server lang: <none>
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] kex follows: False
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] Compression: none
2025-11-18T02:43:18.571 [DEBUG] [Thread-65792] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:43:18.589 [DEBUG] [Thread-65792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:43:18.589 [DEBUG] [Thread-65792] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:43:18.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:43:18.590 [DEBUG] [Thread-65792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:43:18.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:43:18.592 [DEBUG] [Thread-65792] [transport.py] [_log()] userauth is OK
2025-11-18T02:43:18.593 [DEBUG] [Thread-65792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:43:18.593 [DEBUG] [Thread-65792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:43:18.593 [DEBUG] [Thread-65792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:43:18.593 [DEBUG] [Thread-65792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:43:18.620 [INFO] [Thread-65792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:43:18.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:43:19.270 [DEBUG] [Thread-65792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:43:19.271 [DEBUG] [Thread-65792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:43:19.271 [DEBUG] [Thread-65792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:43:19.311 [DEBUG] [Thread-65792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:43:19.312 [DEBUG] [Thread-65792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:43:19.315 [DEBUG] [Thread-65792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:43:19.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:43:19.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:43:19.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:43:19.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:43:19.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:43:19.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:43:19.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:43:19.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:43:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:43:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.029555 -999.00  +12.20  11.30     56   +3.90 1 1 1 1 1     0    0 7.29 -41.12 ZNESW 11.0 11.3 147.8 14.2 12.5 -23.3 12.4 -22.4 12.2 -22.0 12.5 -22.8
2025-11-18T02:43:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:43:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:43:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.029555
2025-11-18T02:43:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:43:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:43:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:43:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:43:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:43:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:43:08', tmtdew=9.38, humidity=52.36, cloud=0.0, wind=16.78, temperature=12.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:43:08', seeing=1.25, atlas_timestamp='2025-11-18T00:42:33.552', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:40:00')
2025-11-18T02:43:19.339 [DEBUG] [Thread-65792] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:43:19.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:43:19.436 [DEBUG] [Thread-65795] [transport.py] [_log()] starting thread (client mode): 0xd07adcf0
2025-11-18T02:43:19.436 [DEBUG] [Thread-65795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:43:19.453 [DEBUG] [Thread-65795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:43:19.453 [INFO] [Thread-65795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:43:19.460 [DEBUG] [Thread-65795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] client lang: <none>
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] server lang: <none>
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] kex follows: False
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:43:19.461 [DEBUG] [Thread-65795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:43:19.462 [DEBUG] [Thread-65795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:43:19.462 [DEBUG] [Thread-65795] [transport.py] [_log()] Compression: none
2025-11-18T02:43:19.462 [DEBUG] [Thread-65795] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:43:19.520 [DEBUG] [Thread-65795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:43:19.521 [DEBUG] [Thread-65795] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:43:19.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:43:19.522 [DEBUG] [Thread-65795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:43:19.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:43:19.576 [DEBUG] [Thread-65795] [transport.py] [_log()] userauth is OK
2025-11-18T02:43:19.576 [DEBUG] [Thread-65795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:43:19.576 [DEBUG] [Thread-65795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:43:19.576 [DEBUG] [Thread-65795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:43:19.576 [DEBUG] [Thread-65795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:43:19.595 [INFO] [Thread-65795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:43:19.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:43:19.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:43:20.426 [DEBUG] [Thread-65795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:43:20.426 [DEBUG] [Thread-65795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:43:20.475 [DEBUG] [Thread-65795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:43:20.475 [DEBUG] [Thread-65795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:43:20.484 [DEBUG] [Thread-65795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:43:20.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:43:20.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:43:20.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:43:20.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:43:20.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:43:20.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:43:20.518 [DEBUG] [Thread-65795] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:43:21.687 [DEBUG] [Thread-65797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:43:36.730 [DEBUG] [Thread-65798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:43:50.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:43:50.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:43:50.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:43:51.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 43, 40), 9.36, 52.78, 0.0, 16.07, 12.1, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:43:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:43:40
2025-11-18T02:43:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:43:51.442 [DEBUG] [Thread-65799] [transport.py] [_log()] starting thread (client mode): 0xd0795060
2025-11-18T02:43:51.442 [DEBUG] [Thread-65799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:43:51.462 [DEBUG] [Thread-65799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:43:51.462 [INFO] [Thread-65799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] client lang: <none>
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] server lang: <none>
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] kex follows: False
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:43:51.463 [DEBUG] [Thread-65799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:43:51.464 [DEBUG] [Thread-65799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:43:51.464 [DEBUG] [Thread-65799] [transport.py] [_log()] Compression: none
2025-11-18T02:43:51.464 [DEBUG] [Thread-65799] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:43:51.472 [DEBUG] [Thread-65799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:43:51.472 [DEBUG] [Thread-65799] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:43:51.472 [DEBUG] [Thread-65799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:43:51.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:43:51.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:43:51.473 [DEBUG] [Thread-65799] [transport.py] [_log()] userauth is OK
2025-11-18T02:43:51.474 [DEBUG] [Thread-65799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:43:51.474 [DEBUG] [Thread-65799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:43:51.474 [DEBUG] [Thread-65799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:43:51.474 [DEBUG] [Thread-65799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:43:51.487 [INFO] [Thread-65799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:43:51.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:43:51.755 [DEBUG] [Thread-65801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:43:52.141 [DEBUG] [Thread-65799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:43:52.141 [DEBUG] [Thread-65799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:43:52.141 [DEBUG] [Thread-65799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:43:52.181 [DEBUG] [Thread-65799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:43:52.181 [DEBUG] [Thread-65799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:43:52.184 [DEBUG] [Thread-65799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:43:52.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:43:52.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:43:52.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:43:52.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:43:52.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:43:52.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:43:52.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:43:52.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:43:52.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:43:52.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.029902 -999.00  +12.20  10.20     56   +3.90 1 1 1 1 1     0    0 7.23 -41.14 ZNESW 8.7 10.2 153.7 17.8 12.6 -23.3 12.4 -22.3 12.2 -21.9 12.5 -22.8
2025-11-18T02:43:52.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:43:52.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:43:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.029902
2025-11-18T02:43:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:43:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:43:52.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:43:52.208 [DEBUG] [Thread-65799] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:43:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:43:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:43:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:43:40', tmtdew=9.36, humidity=52.78, cloud=0.0, wind=16.07, temperature=12.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:43:40', seeing=1.25, atlas_timestamp='2025-11-18T00:43:03.533', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:40:00')
2025-11-18T02:43:52.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:43:52.310 [DEBUG] [Thread-65803] [transport.py] [_log()] starting thread (client mode): 0xd31cf3d0
2025-11-18T02:43:52.310 [DEBUG] [Thread-65803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:43:52.325 [DEBUG] [Thread-65803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:43:52.325 [INFO] [Thread-65803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] client lang: <none>
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] server lang: <none>
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] kex follows: False
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:43:52.333 [DEBUG] [Thread-65803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:43:52.334 [DEBUG] [Thread-65803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:43:52.334 [DEBUG] [Thread-65803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:43:52.334 [DEBUG] [Thread-65803] [transport.py] [_log()] Compression: none
2025-11-18T02:43:52.334 [DEBUG] [Thread-65803] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:43:52.396 [DEBUG] [Thread-65803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:43:52.396 [DEBUG] [Thread-65803] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:43:52.397 [DEBUG] [Thread-65803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:43:52.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:43:52.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:43:52.456 [DEBUG] [Thread-65803] [transport.py] [_log()] userauth is OK
2025-11-18T02:43:52.456 [DEBUG] [Thread-65803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:43:52.457 [DEBUG] [Thread-65803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:43:52.457 [DEBUG] [Thread-65803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:43:52.457 [DEBUG] [Thread-65803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:43:52.476 [INFO] [Thread-65803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:43:52.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:43:52.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:43:53.309 [DEBUG] [Thread-65803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:43:53.309 [DEBUG] [Thread-65803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:43:53.357 [DEBUG] [Thread-65803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:43:53.357 [DEBUG] [Thread-65803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:43:53.365 [DEBUG] [Thread-65803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:43:53.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:43:53.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:43:53.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
2025-11-18T02:43:53.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:43:53.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:43:53.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:43:53.397 [DEBUG] [Thread-65803] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:43:54.352 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:43:54.353 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:03.863 [DEBUG] [Thread-65805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:06.784 [DEBUG] [Thread-65806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:20.647 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:21.824 [DEBUG] [Thread-65807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:23.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:44:23.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:44:23.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:44:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 44, 12), 9.38, 52.68, 0.0, 16.3, 12.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:44:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:44:12
2025-11-18T02:44:24.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:44:24.343 [DEBUG] [Thread-65808] [transport.py] [_log()] starting thread (client mode): 0xd31ccbb0
2025-11-18T02:44:24.343 [DEBUG] [Thread-65808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:44:24.362 [DEBUG] [Thread-65808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:44:24.363 [INFO] [Thread-65808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] client lang: <none>
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] server lang: <none>
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] kex follows: False
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] Compression: none
2025-11-18T02:44:24.366 [DEBUG] [Thread-65808] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:44:24.384 [DEBUG] [Thread-65808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:44:24.385 [DEBUG] [Thread-65808] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:44:24.386 [DEBUG] [Thread-65808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:44:24.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:44:24.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:44:24.387 [DEBUG] [Thread-65808] [transport.py] [_log()] userauth is OK
2025-11-18T02:44:24.388 [DEBUG] [Thread-65808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:44:24.388 [DEBUG] [Thread-65808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:44:24.388 [DEBUG] [Thread-65808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:44:24.388 [DEBUG] [Thread-65808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:44:24.407 [INFO] [Thread-65808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:44:24.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:44:25.054 [DEBUG] [Thread-65808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:44:25.055 [DEBUG] [Thread-65808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:44:25.055 [DEBUG] [Thread-65808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:44:25.096 [DEBUG] [Thread-65808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:44:25.097 [DEBUG] [Thread-65808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:44:25.100 [DEBUG] [Thread-65808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:44:25.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:44:25.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:44:25.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:44:25.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:44:25.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:44:25.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:44:25.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.030250 -999.00  +12.20  11.25     56   +3.80 1 1 1 1 1     0    0 7.37 -37.30 ZNESW 10.6 11.2 153.6 12.8 12.5 -23.5 12.4 -22.6 12.2 -22.1 12.4 -23.0
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.030250
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:44:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:44:12', tmtdew=9.38, humidity=52.68, cloud=0.0, wind=16.3, temperature=12.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:44:12', seeing=1.53, atlas_timestamp='2025-11-18T00:43:33.600', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:42:00')
2025-11-18T02:44:25.120 [DEBUG] [Thread-65808] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:44:25.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:44:25.204 [DEBUG] [Thread-65811] [transport.py] [_log()] starting thread (client mode): 0xd317dc90
2025-11-18T02:44:25.204 [DEBUG] [Thread-65811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:44:25.219 [DEBUG] [Thread-65811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:44:25.219 [INFO] [Thread-65811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:44:25.226 [DEBUG] [Thread-65811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] client lang: <none>
2025-11-18T02:44:25.227 [DEBUG] [Thread-65811] [transport.py] [_log()] server lang: <none>
2025-11-18T02:44:25.228 [DEBUG] [Thread-65811] [transport.py] [_log()] kex follows: False
2025-11-18T02:44:25.228 [DEBUG] [Thread-65811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:44:25.228 [DEBUG] [Thread-65811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:44:25.228 [DEBUG] [Thread-65811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:44:25.228 [DEBUG] [Thread-65811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:44:25.228 [DEBUG] [Thread-65811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:44:25.228 [DEBUG] [Thread-65811] [transport.py] [_log()] Compression: none
2025-11-18T02:44:25.228 [DEBUG] [Thread-65811] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:44:25.285 [DEBUG] [Thread-65811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:44:25.286 [DEBUG] [Thread-65811] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:44:25.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:44:25.287 [DEBUG] [Thread-65811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:44:25.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:44:25.340 [DEBUG] [Thread-65811] [transport.py] [_log()] userauth is OK
2025-11-18T02:44:25.341 [DEBUG] [Thread-65811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:44:25.341 [DEBUG] [Thread-65811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:44:25.341 [DEBUG] [Thread-65811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:44:25.341 [DEBUG] [Thread-65811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:44:25.362 [INFO] [Thread-65811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:44:25.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:44:25.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:44:26.271 [DEBUG] [Thread-65811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:44:26.272 [DEBUG] [Thread-65811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:44:26.319 [DEBUG] [Thread-65811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:44:26.319 [DEBUG] [Thread-65811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:44:26.329 [DEBUG] [Thread-65811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:44:26.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:44:26.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:44:26.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:44:26.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:44:26.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:44:26.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:44:26.365 [DEBUG] [Thread-65811] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:44:29.654 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:33.742 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:36.854 [DEBUG] [Thread-65813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:51.891 [DEBUG] [Thread-65814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:54.554 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:54.555 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:44:56.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:44:56.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:44:56.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:44:57.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 44, 44), 9.34, 52.83, 0.0, 16.64, 12.08, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:44:57.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:44:44
2025-11-18T02:44:57.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:44:57.327 [DEBUG] [Thread-65815] [transport.py] [_log()] starting thread (client mode): 0xd317edd0
2025-11-18T02:44:57.327 [DEBUG] [Thread-65815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:44:57.347 [DEBUG] [Thread-65815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:44:57.347 [INFO] [Thread-65815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] client lang: <none>
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] server lang: <none>
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] kex follows: False
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] Compression: none
2025-11-18T02:44:57.351 [DEBUG] [Thread-65815] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:44:57.366 [DEBUG] [Thread-65815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:44:57.366 [DEBUG] [Thread-65815] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:44:57.366 [DEBUG] [Thread-65815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:44:57.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:44:57.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:44:57.367 [DEBUG] [Thread-65815] [transport.py] [_log()] userauth is OK
2025-11-18T02:44:57.367 [DEBUG] [Thread-65815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:44:57.367 [DEBUG] [Thread-65815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:44:57.367 [DEBUG] [Thread-65815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:44:57.367 [DEBUG] [Thread-65815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:44:57.381 [INFO] [Thread-65815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:44:57.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:44:58.133 [DEBUG] [Thread-65815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:44:58.133 [DEBUG] [Thread-65815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:44:58.133 [DEBUG] [Thread-65815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:44:58.174 [DEBUG] [Thread-65815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:44:58.174 [DEBUG] [Thread-65815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:44:58.177 [DEBUG] [Thread-65815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:44:58.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:44:58.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:44:58.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:44:58.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:44:58.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:44:58.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:44:58.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:44:58.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:44:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:44:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.030597 -999.00  +12.10  10.05     56   +3.80 1 1 1 1 1     0    0 7.26 -36.53 ZNESW 12.0 10.1 156.6 15.0 12.5 -23.4 12.4 -22.4 12.2 -22.1 12.5 -22.8
2025-11-18T02:44:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:44:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:44:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.030597
2025-11-18T02:44:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:44:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:44:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:44:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:44:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:44:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:44:44', tmtdew=9.34, humidity=52.83, cloud=0.0, wind=16.64, temperature=12.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:44:44', seeing=1.35, atlas_timestamp='2025-11-18T00:44:03.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:42:00')
2025-11-18T02:44:58.191 [DEBUG] [Thread-65815] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:44:58.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:44:58.276 [DEBUG] [Thread-65818] [transport.py] [_log()] starting thread (client mode): 0xd317e4d0
2025-11-18T02:44:58.276 [DEBUG] [Thread-65818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:44:58.294 [DEBUG] [Thread-65818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:44:58.294 [INFO] [Thread-65818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:44:58.301 [DEBUG] [Thread-65818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] client lang: <none>
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] server lang: <none>
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] kex follows: False
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] Compression: none
2025-11-18T02:44:58.302 [DEBUG] [Thread-65818] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:44:58.359 [DEBUG] [Thread-65818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:44:58.359 [DEBUG] [Thread-65818] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:44:58.359 [DEBUG] [Thread-65818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:44:58.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:44:58.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:44:58.416 [DEBUG] [Thread-65818] [transport.py] [_log()] userauth is OK
2025-11-18T02:44:58.416 [DEBUG] [Thread-65818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:44:58.416 [DEBUG] [Thread-65818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:44:58.416 [DEBUG] [Thread-65818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:44:58.416 [DEBUG] [Thread-65818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:44:58.431 [INFO] [Thread-65818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:44:58.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:44:58.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:44:59.312 [DEBUG] [Thread-65818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:44:59.312 [DEBUG] [Thread-65818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:44:59.360 [DEBUG] [Thread-65818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:44:59.360 [DEBUG] [Thread-65818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:44:59.368 [DEBUG] [Thread-65818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:44:59.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:44: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')
2025-11-18T02:44:59.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:44:59.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:44:59.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:44:59.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:44:59.399 [DEBUG] [Thread-65818] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:45:03.921 [DEBUG] [Thread-65820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:45:06.922 [DEBUG] [Thread-65821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:45:21.964 [DEBUG] [Thread-65822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:45:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:45:29.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:45:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:45:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 45, 16), 9.36, 52.76, 0.0, 17.19, 12.07, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:45:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:45:16
2025-11-18T02:45:30.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:45:30.328 [DEBUG] [Thread-65823] [transport.py] [_log()] starting thread (client mode): 0xd0795ff0
2025-11-18T02:45:30.328 [DEBUG] [Thread-65823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:45:30.349 [DEBUG] [Thread-65823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:45:30.349 [INFO] [Thread-65823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] client lang: <none>
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] server lang: <none>
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] kex follows: False
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] Compression: none
2025-11-18T02:45:30.352 [DEBUG] [Thread-65823] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:45:30.368 [DEBUG] [Thread-65823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:45:30.368 [DEBUG] [Thread-65823] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:45:30.369 [DEBUG] [Thread-65823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:45:30.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:45:30.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:45:30.370 [DEBUG] [Thread-65823] [transport.py] [_log()] userauth is OK
2025-11-18T02:45:30.371 [DEBUG] [Thread-65823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:45:30.371 [DEBUG] [Thread-65823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:45:30.371 [DEBUG] [Thread-65823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:45:30.371 [DEBUG] [Thread-65823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:45:30.385 [INFO] [Thread-65823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:45:30.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:45:31.006 [DEBUG] [Thread-65823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:45:31.006 [DEBUG] [Thread-65823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:45:31.007 [DEBUG] [Thread-65823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:45:31.047 [DEBUG] [Thread-65823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:45:31.047 [DEBUG] [Thread-65823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:45:31.050 [DEBUG] [Thread-65823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:45:31.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:45:31.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:45:31.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:45:31.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:45:31.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:45:31.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:45:31.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:45:31.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:45:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:45:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.031291 -999.00  +12.00  11.28     57   +3.80 1 1 1 1 1     0    0 7.40 -32.85 ZNESW 11.4 11.3 148.8 14.3 12.5 -23.5 12.4 -22.4 12.1 -22.0 12.4 -22.8
2025-11-18T02:45:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:45:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:45:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.031291
2025-11-18T02:45:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:45:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:45:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:45:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:45:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:45:31.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:45:16', tmtdew=9.36, humidity=52.76, cloud=0.0, wind=17.19, temperature=12.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:45:16', seeing=1.12, atlas_timestamp='2025-11-18T00:45:03.542', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:42:00')
2025-11-18T02:45:31.073 [DEBUG] [Thread-65823] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:45:31.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:45:31.170 [DEBUG] [Thread-65826] [transport.py] [_log()] starting thread (client mode): 0xd3151030
2025-11-18T02:45:31.170 [DEBUG] [Thread-65826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:45:31.186 [DEBUG] [Thread-65826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:45:31.186 [INFO] [Thread-65826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:45:31.193 [DEBUG] [Thread-65826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:45:31.194 [DEBUG] [Thread-65826] [transport.py] [_log()] client lang: <none>
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] server lang: <none>
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] kex follows: False
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] Compression: none
2025-11-18T02:45:31.195 [DEBUG] [Thread-65826] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:45:31.251 [DEBUG] [Thread-65826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:45:31.251 [DEBUG] [Thread-65826] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:45:31.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:45:31.251 [DEBUG] [Thread-65826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:45:31.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:45:31.308 [DEBUG] [Thread-65826] [transport.py] [_log()] userauth is OK
2025-11-18T02:45:31.308 [DEBUG] [Thread-65826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:45:31.308 [DEBUG] [Thread-65826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:45:31.308 [DEBUG] [Thread-65826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:45:31.308 [DEBUG] [Thread-65826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:45:31.331 [INFO] [Thread-65826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:45:31.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:45:31.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:45:32.260 [DEBUG] [Thread-65826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:45:32.260 [DEBUG] [Thread-65826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:45:32.308 [DEBUG] [Thread-65826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:45:32.309 [DEBUG] [Thread-65826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:45:32.317 [DEBUG] [Thread-65826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:45:32.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:45:32.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:45:32.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:45:32.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:45:32.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:45:32.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:45:32.351 [DEBUG] [Thread-65826] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:45:36.998 [DEBUG] [Thread-65828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:45:52.028 [DEBUG] [Thread-65829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:45:54.757 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:45:54.758 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:45:56.334 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:02.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:46:02.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:46:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:46:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 45, 48), 9.43, 52.69, 0.0, 18.63, 12.15, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:46:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:45:48
2025-11-18T02:46:03.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:46:03.314 [DEBUG] [Thread-65830] [transport.py] [_log()] starting thread (client mode): 0xd07a3d90
2025-11-18T02:46:03.314 [DEBUG] [Thread-65830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:46:03.334 [DEBUG] [Thread-65830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:46:03.334 [INFO] [Thread-65830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:46:03.337 [DEBUG] [Thread-65830] [transport.py] [_log()] client lang: <none>
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] server lang: <none>
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] kex follows: False
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] Compression: none
2025-11-18T02:46:03.338 [DEBUG] [Thread-65830] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:46:03.356 [DEBUG] [Thread-65830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:46:03.357 [DEBUG] [Thread-65830] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:46:03.358 [DEBUG] [Thread-65830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:46:03.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:46:03.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:46:03.360 [DEBUG] [Thread-65830] [transport.py] [_log()] userauth is OK
2025-11-18T02:46:03.360 [DEBUG] [Thread-65830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:46:03.361 [DEBUG] [Thread-65830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:46:03.361 [DEBUG] [Thread-65830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:46:03.361 [DEBUG] [Thread-65830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:46:03.399 [INFO] [Thread-65830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:46:03.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:46:03.995 [DEBUG] [Thread-65832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:04.025 [DEBUG] [Thread-65830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:46:04.025 [DEBUG] [Thread-65830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:46:04.025 [DEBUG] [Thread-65830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:46:04.066 [DEBUG] [Thread-65830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:46:04.067 [DEBUG] [Thread-65830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:46:04.069 [DEBUG] [Thread-65830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:46:04.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:46:04.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:46:04.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:46:04.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:46:04.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:46:04.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:46:04.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:46:04.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:46:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:46:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.031696 -999.00  +12.10  10.61     57   +3.80 1 1 1 1 1     0    0 7.55 -33.04 ZNESW 10.9 10.6 165.8 17.6 12.5 -23.3 12.4 -22.3 12.2 -22.0 12.4 -22.8
2025-11-18T02:46:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:46:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:46:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.031696
2025-11-18T02:46:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:46:04.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:46:04.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:46:04.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:46:04.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:46:04.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:45:48', tmtdew=9.43, humidity=52.69, cloud=0.0, wind=18.63, temperature=12.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:45:48', seeing=1.18, atlas_timestamp='2025-11-18T00:45:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:42:00')
2025-11-18T02:46:04.093 [DEBUG] [Thread-65830] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:46:04.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:46:04.189 [DEBUG] [Thread-65834] [transport.py] [_log()] starting thread (client mode): 0xd31cf9a0
2025-11-18T02:46:04.189 [DEBUG] [Thread-65834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:46:04.204 [DEBUG] [Thread-65834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:46:04.205 [INFO] [Thread-65834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:46:04.212 [DEBUG] [Thread-65834] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:46:04.212 [DEBUG] [Thread-65834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:46:04.212 [DEBUG] [Thread-65834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:46:04.212 [DEBUG] [Thread-65834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] client lang: <none>
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] server lang: <none>
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] kex follows: False
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] Compression: none
2025-11-18T02:46:04.213 [DEBUG] [Thread-65834] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:46:04.277 [DEBUG] [Thread-65834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:46:04.277 [DEBUG] [Thread-65834] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:46:04.278 [DEBUG] [Thread-65834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:46:04.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:46:04.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:46:04.332 [DEBUG] [Thread-65834] [transport.py] [_log()] userauth is OK
2025-11-18T02:46:04.333 [DEBUG] [Thread-65834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:46:04.333 [DEBUG] [Thread-65834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:46:04.333 [DEBUG] [Thread-65834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:46:04.333 [DEBUG] [Thread-65834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:46:04.352 [INFO] [Thread-65834] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:46:04.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:46:04.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:46:05.220 [DEBUG] [Thread-65834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:46:05.220 [DEBUG] [Thread-65834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:46:05.268 [DEBUG] [Thread-65834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:46:05.268 [DEBUG] [Thread-65834] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:46:05.277 [DEBUG] [Thread-65834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:46:05.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:46:05.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:46:05.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:46:05.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:46:05.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:46:05.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:46:05.312 [DEBUG] [Thread-65834] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:46:07.062 [DEBUG] [Thread-65836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:22.102 [DEBUG] [Thread-65837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:26.176 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:29.226 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:46:35.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:46:35.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:46:35.629 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 46, 20), 9.45, 52.63, 0.0, 17.35, 12.17, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:46:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:46:20
2025-11-18T02:46:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:46:36.250 [DEBUG] [Thread-65838] [transport.py] [_log()] starting thread (client mode): 0xd07ae3e0
2025-11-18T02:46:36.250 [DEBUG] [Thread-65838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:46:36.269 [DEBUG] [Thread-65838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:46:36.269 [INFO] [Thread-65838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:46:36.272 [DEBUG] [Thread-65838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:46:36.272 [DEBUG] [Thread-65838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:46:36.272 [DEBUG] [Thread-65838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:46:36.272 [DEBUG] [Thread-65838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:46:36.272 [DEBUG] [Thread-65838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:46:36.272 [DEBUG] [Thread-65838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:46:36.272 [DEBUG] [Thread-65838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:46:36.272 [DEBUG] [Thread-65838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] client lang: <none>
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] server lang: <none>
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] kex follows: False
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] Compression: none
2025-11-18T02:46:36.273 [DEBUG] [Thread-65838] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:46:36.289 [DEBUG] [Thread-65838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:46:36.289 [DEBUG] [Thread-65838] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:46:36.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:46:36.290 [DEBUG] [Thread-65838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:46:36.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:46:36.292 [DEBUG] [Thread-65838] [transport.py] [_log()] userauth is OK
2025-11-18T02:46:36.292 [DEBUG] [Thread-65838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:46:36.292 [DEBUG] [Thread-65838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:46:36.292 [DEBUG] [Thread-65838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:46:36.293 [DEBUG] [Thread-65838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:46:36.316 [INFO] [Thread-65838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:46:36.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:46:36.946 [DEBUG] [Thread-65838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:46:36.947 [DEBUG] [Thread-65838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:46:36.947 [DEBUG] [Thread-65838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:46:36.987 [DEBUG] [Thread-65838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:46:36.987 [DEBUG] [Thread-65838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:46:36.990 [DEBUG] [Thread-65838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:46:37.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:46:37.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:46:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:46:37.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:46:37.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:46:37.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:46:37.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:46:37.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:46:37.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:46:37.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.031986 -999.00  +12.10  11.71     56   +3.80 1 1 1 1 1     0    0 7.48 -33.92 ZNESW 11.7 11.7 142.6 15.2 12.5 -23.4 12.3 -22.4 12.2 -22.2 12.4 -22.9
2025-11-18T02:46:37.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:46:37.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:46:37.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.031986
2025-11-18T02:46:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:46:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:46:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:46:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:46:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:46:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:46:20', tmtdew=9.45, humidity=52.63, cloud=0.0, wind=17.35, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:46:20', seeing=1.18, atlas_timestamp='2025-11-18T00:46:03.590', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:42:00')
2025-11-18T02:46:37.015 [DEBUG] [Thread-65838] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:46:37.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:46:37.111 [DEBUG] [Thread-65841] [transport.py] [_log()] starting thread (client mode): 0xd0713700
2025-11-18T02:46:37.111 [DEBUG] [Thread-65841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:46:37.128 [DEBUG] [Thread-65841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:46:37.128 [INFO] [Thread-65841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:46:37.132 [DEBUG] [Thread-65843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:37.135 [DEBUG] [Thread-65841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:46:37.135 [DEBUG] [Thread-65841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:46:37.135 [DEBUG] [Thread-65841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:46:37.135 [DEBUG] [Thread-65841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:46:37.135 [DEBUG] [Thread-65841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:46:37.135 [DEBUG] [Thread-65841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] client lang: <none>
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] server lang: <none>
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] kex follows: False
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] Compression: none
2025-11-18T02:46:37.136 [DEBUG] [Thread-65841] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:46:37.196 [DEBUG] [Thread-65841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:46:37.196 [DEBUG] [Thread-65841] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:46:37.197 [DEBUG] [Thread-65841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:46:37.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:46:37.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:46:37.256 [DEBUG] [Thread-65841] [transport.py] [_log()] userauth is OK
2025-11-18T02:46:37.256 [DEBUG] [Thread-65841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:46:37.256 [DEBUG] [Thread-65841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:46:37.256 [DEBUG] [Thread-65841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:46:37.257 [DEBUG] [Thread-65841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:46:37.277 [INFO] [Thread-65841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:46:37.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:46:37.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:46:38.204 [DEBUG] [Thread-65841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:46:38.204 [DEBUG] [Thread-65841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:46:38.252 [DEBUG] [Thread-65841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:46:38.253 [DEBUG] [Thread-65841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:46:38.262 [DEBUG] [Thread-65841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:46:38.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:46:38.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:46:38.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:46:38.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:46:38.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:46:38.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:46:38.297 [DEBUG] [Thread-65841] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:46:52.171 [DEBUG] [Thread-65844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:54.961 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:46:54.962 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:47:04.072 [DEBUG] [Thread-65845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:47:07.201 [DEBUG] [Thread-65846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:47:08.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:47:08.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:47:08.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:47:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 46, 52), 9.51, 52.08, 0.0, 19.13, 12.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:47:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:46:52
2025-11-18T02:47:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:47:09.231 [DEBUG] [Thread-65847] [transport.py] [_log()] starting thread (client mode): 0xd07a3eb0
2025-11-18T02:47:09.232 [DEBUG] [Thread-65847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:47:09.251 [DEBUG] [Thread-65847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:47:09.251 [INFO] [Thread-65847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] client lang: <none>
2025-11-18T02:47:09.254 [DEBUG] [Thread-65847] [transport.py] [_log()] server lang: <none>
2025-11-18T02:47:09.255 [DEBUG] [Thread-65847] [transport.py] [_log()] kex follows: False
2025-11-18T02:47:09.255 [DEBUG] [Thread-65847] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:47:09.255 [DEBUG] [Thread-65847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:47:09.255 [DEBUG] [Thread-65847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:47:09.255 [DEBUG] [Thread-65847] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:47:09.255 [DEBUG] [Thread-65847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:47:09.255 [DEBUG] [Thread-65847] [transport.py] [_log()] Compression: none
2025-11-18T02:47:09.255 [DEBUG] [Thread-65847] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:47:09.272 [DEBUG] [Thread-65847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:47:09.273 [DEBUG] [Thread-65847] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:47:09.273 [DEBUG] [Thread-65847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:47:09.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:47:09.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:47:09.316 [DEBUG] [Thread-65847] [transport.py] [_log()] userauth is OK
2025-11-18T02:47:09.316 [DEBUG] [Thread-65847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:47:09.317 [DEBUG] [Thread-65847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:47:09.317 [DEBUG] [Thread-65847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:47:09.317 [DEBUG] [Thread-65847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:47:09.333 [INFO] [Thread-65847] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:47:09.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:47:09.980 [DEBUG] [Thread-65847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:47:09.980 [DEBUG] [Thread-65847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:47:09.981 [DEBUG] [Thread-65847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:47:10.021 [DEBUG] [Thread-65847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:47:10.021 [DEBUG] [Thread-65847] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:47:10.023 [DEBUG] [Thread-65847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:47:10.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:47:10.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:47:10.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:47:10.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:47:10.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:47:10.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:47:10.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:47:10.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:47:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:47:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.032333 -999.00  +12.00   9.68     56   +3.70 1 1 1 1 1     0    0 7.56 -33.20 ZNESW 11.6 9.7 159.4 13.9 12.5 -23.4 12.4 -22.4 12.1 -22.1 12.4 -22.8
2025-11-18T02:47:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:47:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:47:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.032333
2025-11-18T02:47:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:47:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:47:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:47:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:47:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:47:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:46:52', tmtdew=9.51, humidity=52.08, cloud=0.0, wind=19.13, temperature=12.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:46:53', seeing=1.12, atlas_timestamp='2025-11-18T00:46:33.571', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.021250000000000213, 0.07425000000000104, 0.043499999999998096, 0.037499999999999645, 0.08175000000000132, 0.014999999999998792, 0.034250000000000114, 0.05649999999999977, 0.053000000000000824, 0.1042500000000004, 0.09549999999999947, 0.11899999999999977, 0.08675000000000033, 0.02499999999999858, 0.01249999999999929, 0.04875000000000007, 0.09149999999999991, 0.12299999999999933, 0.13424999999999976, 0.15399999999999814, 0.08974999999999866, 0.05075000000000074, 0.042749999999999844, 0.0909999999999993, 0.13949999999999996, 0.13074999999999903, 0.20199999999999996, 0.2469999999999999, 0.12500000000000178, 0.0705000000000009, 0.06600000000000072, 0.10324999999999918], zp_timestamp='2025-11-18T00:42:00')
2025-11-18T02:47:10.047 [DEBUG] [Thread-65847] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:47:10.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:47:10.145 [DEBUG] [Thread-65850] [transport.py] [_log()] starting thread (client mode): 0xd31cf100
2025-11-18T02:47:10.145 [DEBUG] [Thread-65850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:47:10.159 [DEBUG] [Thread-65850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:47:10.160 [INFO] [Thread-65850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:47:10.167 [DEBUG] [Thread-65850] [transport.py] [_log()] client lang: <none>
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] server lang: <none>
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] kex follows: False
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] Compression: none
2025-11-18T02:47:10.168 [DEBUG] [Thread-65850] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:47:10.223 [DEBUG] [Thread-65850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:47:10.224 [DEBUG] [Thread-65850] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:47:10.224 [DEBUG] [Thread-65850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:47:10.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:47:10.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:47:10.281 [DEBUG] [Thread-65850] [transport.py] [_log()] userauth is OK
2025-11-18T02:47:10.281 [DEBUG] [Thread-65850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:47:10.282 [DEBUG] [Thread-65850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:47:10.282 [DEBUG] [Thread-65850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:47:10.282 [DEBUG] [Thread-65850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:47:10.300 [INFO] [Thread-65850] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:47:10.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:47:10.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:47:11.181 [DEBUG] [Thread-65850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:47:11.181 [DEBUG] [Thread-65850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:47:11.229 [DEBUG] [Thread-65850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:47:11.229 [DEBUG] [Thread-65850] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:47:11.237 [DEBUG] [Thread-65850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:47:11.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:47:11.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:47:11.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:47:11.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:47:11.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:47:11.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:47:11.272 [DEBUG] [Thread-65850] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:47:22.233 [DEBUG] [Thread-65852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:47:37.273 [DEBUG] [Thread-65853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:47:41.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:47:41.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:47:41.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:47:41.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 47, 25), 9.42, 52.39, 0.0, 19.02, 12.07, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:47:41.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:47:25
2025-11-18T02:47:42.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:47:42.216 [DEBUG] [Thread-65854] [transport.py] [_log()] starting thread (client mode): 0xd07af370
2025-11-18T02:47:42.216 [DEBUG] [Thread-65854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:47:42.237 [DEBUG] [Thread-65854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:47:42.237 [INFO] [Thread-65854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:47:42.240 [DEBUG] [Thread-65854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:47:42.240 [DEBUG] [Thread-65854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:47:42.240 [DEBUG] [Thread-65854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:47:42.240 [DEBUG] [Thread-65854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] client lang: <none>
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] server lang: <none>
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] kex follows: False
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] Compression: none
2025-11-18T02:47:42.241 [DEBUG] [Thread-65854] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:47:42.258 [DEBUG] [Thread-65854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:47:42.259 [DEBUG] [Thread-65854] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:47:42.259 [DEBUG] [Thread-65854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:47:42.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:47:42.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:47:42.261 [DEBUG] [Thread-65854] [transport.py] [_log()] userauth is OK
2025-11-18T02:47:42.262 [DEBUG] [Thread-65854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:47:42.262 [DEBUG] [Thread-65854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:47:42.262 [DEBUG] [Thread-65854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:47:42.262 [DEBUG] [Thread-65854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:47:42.287 [INFO] [Thread-65854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:47:42.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:47:42.952 [DEBUG] [Thread-65854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:47:42.952 [DEBUG] [Thread-65854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:47:42.952 [DEBUG] [Thread-65854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:47:42.993 [DEBUG] [Thread-65854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:47:42.994 [DEBUG] [Thread-65854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:47:42.996 [DEBUG] [Thread-65854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:47:43.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:47:43.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:47:43.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:47:43.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:47:43.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:47:43.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:47:43.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:47:43.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:47:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:47:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.032680 -999.00  +12.10  12.23     57   +3.90 1 1 1 1 1     0    0 7.26 -33.62 ZNESW 11.8 12.2 160.4 17.1 12.5 -23.3 12.3 -22.4 12.1 -21.9 12.4 -23.1
2025-11-18T02:47:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:47:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:47:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.032680
2025-11-18T02:47:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:47:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:47:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:47:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:47:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:47:43.023 [DEBUG] [Thread-65854] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:47:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:47:25', tmtdew=9.42, humidity=52.39, cloud=0.0, wind=19.02, temperature=12.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:47:25', seeing=1.17, atlas_timestamp='2025-11-18T00:47:03.552', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, -0.01574999999999882, 0.06874999999999964, -0.007500000000000284, -0.0004999999999988347, 0.06125000000000114, -0.016000000000000014, 0.0012500000000006395, 0.027499999999999858, 0.040000000000000924, 0.07574999999999932, 0.05000000000000071, 0.10099999999999909, 0.0572499999999998, -0.02850000000000108, 0.019999999999999574, 0.043250000000000455, 0.08649999999999913, 0.08949999999999925, 0.1222499999999993, 0.10999999999999943, 0.08274999999999721, 0.028750000000000497, 0.02024999999999899, 0.06400000000000006, 0.16500000000000092, 0.12424999999999997, 0.21649999999999991, 0.18100000000000094, 0.0730000000000004, 0.02800000000000047, 0.04200000000000159, 0.07574999999999932], zp_timestamp='2025-11-18T00:46:00')
2025-11-18T02:47:43.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:47:43.119 [DEBUG] [Thread-65857] [transport.py] [_log()] starting thread (client mode): 0xd317f340
2025-11-18T02:47:43.119 [DEBUG] [Thread-65857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:47:43.134 [DEBUG] [Thread-65857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:47:43.135 [INFO] [Thread-65857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] client lang: <none>
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] server lang: <none>
2025-11-18T02:47:43.142 [DEBUG] [Thread-65857] [transport.py] [_log()] kex follows: False
2025-11-18T02:47:43.143 [DEBUG] [Thread-65857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:47:43.143 [DEBUG] [Thread-65857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:47:43.143 [DEBUG] [Thread-65857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:47:43.143 [DEBUG] [Thread-65857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:47:43.143 [DEBUG] [Thread-65857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:47:43.143 [DEBUG] [Thread-65857] [transport.py] [_log()] Compression: none
2025-11-18T02:47:43.143 [DEBUG] [Thread-65857] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:47:43.204 [DEBUG] [Thread-65857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:47:43.205 [DEBUG] [Thread-65857] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:47:43.205 [DEBUG] [Thread-65857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:47:43.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:47:43.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:47:43.260 [DEBUG] [Thread-65857] [transport.py] [_log()] userauth is OK
2025-11-18T02:47:43.261 [DEBUG] [Thread-65857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:47:43.261 [DEBUG] [Thread-65857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:47:43.261 [DEBUG] [Thread-65857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:47:43.261 [DEBUG] [Thread-65857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:47:43.280 [INFO] [Thread-65857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:47:43.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:47:43.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:47:44.125 [DEBUG] [Thread-65857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:47:44.126 [DEBUG] [Thread-65857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:47:44.173 [DEBUG] [Thread-65857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:47:44.173 [DEBUG] [Thread-65857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:47:44.182 [DEBUG] [Thread-65857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:47:44.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:47:44.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:47:44.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:47:44.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:47:44.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:47:44.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:47:44.217 [DEBUG] [Thread-65857] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:47:52.298 [DEBUG] [Thread-65859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:47:55.163 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:47:55.165 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:04.129 [DEBUG] [Thread-65860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:07.344 [DEBUG] [Thread-65861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:48:14.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:48:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:48:14.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 47, 57), 9.27, 53.08, 0.0, 21.88, 12.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:48:14.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:47:57
2025-11-18T02:48:14.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:48:15.135 [DEBUG] [Thread-65862] [transport.py] [_log()] starting thread (client mode): 0xd0703970
2025-11-18T02:48:15.135 [DEBUG] [Thread-65862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:48:15.156 [DEBUG] [Thread-65862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:48:15.156 [INFO] [Thread-65862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:48:15.159 [DEBUG] [Thread-65862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:48:15.159 [DEBUG] [Thread-65862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:48:15.159 [DEBUG] [Thread-65862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:48:15.159 [DEBUG] [Thread-65862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:48:15.159 [DEBUG] [Thread-65862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:48:15.159 [DEBUG] [Thread-65862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] client lang: <none>
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] server lang: <none>
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] kex follows: False
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] Compression: none
2025-11-18T02:48:15.160 [DEBUG] [Thread-65862] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:48:15.177 [DEBUG] [Thread-65862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:48:15.178 [DEBUG] [Thread-65862] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:48:15.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:48:15.179 [DEBUG] [Thread-65862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:48:15.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:48:15.181 [DEBUG] [Thread-65862] [transport.py] [_log()] userauth is OK
2025-11-18T02:48:15.181 [DEBUG] [Thread-65862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:48:15.181 [DEBUG] [Thread-65862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:48:15.181 [DEBUG] [Thread-65862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:48:15.181 [DEBUG] [Thread-65862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:48:15.204 [INFO] [Thread-65862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:48:15.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:48:15.852 [DEBUG] [Thread-65862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:48:15.852 [DEBUG] [Thread-65862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:48:15.852 [DEBUG] [Thread-65862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:48:15.893 [DEBUG] [Thread-65862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:48:15.893 [DEBUG] [Thread-65862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:48:15.896 [DEBUG] [Thread-65862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:48:15.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:48:15.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:48:15.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:48:15.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:48:15.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:48:15.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:48:15.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:48:15.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.033027 -999.00  +12.10  16.18     58   +4.10 1 1 1 1 1     0    0 7.41 -32.10 ZNESW 17.2 16.2 165.0 24.4 12.5 -23.2 12.4 -22.3 12.1 -21.9 12.4 -22.7
2025-11-18T02:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:48:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.033027
2025-11-18T02:48:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:48:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:48:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:48:15.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:48:15.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:48:15.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:47:57', tmtdew=9.27, humidity=53.08, cloud=0.0, wind=21.88, temperature=12.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:47:57', seeing=1.04, atlas_timestamp='2025-11-18T00:47:33.533', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, -0.01574999999999882, 0.06874999999999964, -0.007500000000000284, -0.0004999999999988347, 0.06125000000000114, -0.016000000000000014, 0.0012500000000006395, 0.027499999999999858, 0.040000000000000924, 0.07574999999999932, 0.05000000000000071, 0.10099999999999909, 0.0572499999999998, -0.02850000000000108, 0.019999999999999574, 0.043250000000000455, 0.08649999999999913, 0.08949999999999925, 0.1222499999999993, 0.10999999999999943, 0.08274999999999721, 0.028750000000000497, 0.02024999999999899, 0.06400000000000006, 0.16500000000000092, 0.12424999999999997, 0.21649999999999991, 0.18100000000000094, 0.0730000000000004, 0.02800000000000047, 0.04200000000000159, 0.07574999999999932], zp_timestamp='2025-11-18T00:46:00')
2025-11-18T02:48:15.920 [DEBUG] [Thread-65862] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:48:16.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:48:16.018 [DEBUG] [Thread-65865] [transport.py] [_log()] starting thread (client mode): 0xd07aebf0
2025-11-18T02:48:16.019 [DEBUG] [Thread-65865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:48:16.034 [DEBUG] [Thread-65865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:48:16.034 [INFO] [Thread-65865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:48:16.041 [DEBUG] [Thread-65865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] client lang: <none>
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] server lang: <none>
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] kex follows: False
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:48:16.042 [DEBUG] [Thread-65865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:48:16.043 [DEBUG] [Thread-65865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:48:16.043 [DEBUG] [Thread-65865] [transport.py] [_log()] Compression: none
2025-11-18T02:48:16.043 [DEBUG] [Thread-65865] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:48:16.101 [DEBUG] [Thread-65865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:48:16.101 [DEBUG] [Thread-65865] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:48:16.101 [DEBUG] [Thread-65865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:48:16.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:48:16.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:48:16.156 [DEBUG] [Thread-65865] [transport.py] [_log()] userauth is OK
2025-11-18T02:48:16.157 [DEBUG] [Thread-65865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:48:16.157 [DEBUG] [Thread-65865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:48:16.157 [DEBUG] [Thread-65865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:48:16.157 [DEBUG] [Thread-65865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:48:16.178 [INFO] [Thread-65865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:48:16.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:48:16.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:48:17.041 [DEBUG] [Thread-65865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:48:17.041 [DEBUG] [Thread-65865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:48:17.089 [DEBUG] [Thread-65865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:48:17.089 [DEBUG] [Thread-65865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:48:17.098 [DEBUG] [Thread-65865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:48:17.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:48:17.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:48:17.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:48:17.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:48:17.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:48:17.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:48:17.133 [DEBUG] [Thread-65865] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:48:21.158 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:22.370 [DEBUG] [Thread-65867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:24.317 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:29.386 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:34.770 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:37.410 [DEBUG] [Thread-65868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:48:47.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:48:47.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:48:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 48, 29), 9.23, 53.26, 0.0, 20.73, 12.1, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:48:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:48:29
2025-11-18T02:48:47.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:48:48.133 [DEBUG] [Thread-65869] [transport.py] [_log()] starting thread (client mode): 0xd31ce9e0
2025-11-18T02:48:48.133 [DEBUG] [Thread-65869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:48:48.153 [DEBUG] [Thread-65869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:48:48.153 [INFO] [Thread-65869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] client lang: <none>
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] server lang: <none>
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] kex follows: False
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] Compression: none
2025-11-18T02:48:48.155 [DEBUG] [Thread-65869] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:48:48.163 [DEBUG] [Thread-65869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:48:48.163 [DEBUG] [Thread-65869] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:48:48.163 [DEBUG] [Thread-65869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:48:48.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:48:48.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:48:48.164 [DEBUG] [Thread-65869] [transport.py] [_log()] userauth is OK
2025-11-18T02:48:48.164 [DEBUG] [Thread-65869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:48:48.164 [DEBUG] [Thread-65869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:48:48.164 [DEBUG] [Thread-65869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:48:48.164 [DEBUG] [Thread-65869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:48:48.180 [INFO] [Thread-65869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:48:48.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:48:48.760 [DEBUG] [Thread-65869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:48:48.760 [DEBUG] [Thread-65869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:48:48.760 [DEBUG] [Thread-65869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:48:48.801 [DEBUG] [Thread-65869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:48:48.801 [DEBUG] [Thread-65869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:48:48.803 [DEBUG] [Thread-65869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:48:48.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:48:48.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:48:48.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:48:48.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:48:48.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:48:48.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:48:48.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.033722 -999.00  +12.20  15.77     57   +4.10 1 1 1 1 1     0    0 7.46 -30.11 ZNESW 15.8 15.8 152.7 25.1 12.5 -23.2 12.4 -22.4 12.1 -22.0 12.5 -22.8
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.033722
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:48:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:48:48.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:48:29', tmtdew=9.23, humidity=53.26, cloud=0.0, wind=20.73, temperature=12.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:48:29', seeing=1.07, atlas_timestamp='2025-11-18T00:48:33.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, -0.01574999999999882, 0.06874999999999964, -0.007500000000000284, -0.0004999999999988347, 0.06125000000000114, -0.016000000000000014, 0.0012500000000006395, 0.027499999999999858, 0.040000000000000924, 0.07574999999999932, 0.05000000000000071, 0.10099999999999909, 0.0572499999999998, -0.02850000000000108, 0.019999999999999574, 0.043250000000000455, 0.08649999999999913, 0.08949999999999925, 0.1222499999999993, 0.10999999999999943, 0.08274999999999721, 0.028750000000000497, 0.02024999999999899, 0.06400000000000006, 0.16500000000000092, 0.12424999999999997, 0.21649999999999991, 0.18100000000000094, 0.0730000000000004, 0.02800000000000047, 0.04200000000000159, 0.07574999999999932], zp_timestamp='2025-11-18T00:46:00')
2025-11-18T02:48:48.822 [DEBUG] [Thread-65869] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:48:48.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:48:48.910 [DEBUG] [Thread-65872] [transport.py] [_log()] starting thread (client mode): 0xd31cd3c0
2025-11-18T02:48:48.910 [DEBUG] [Thread-65872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:48:48.925 [DEBUG] [Thread-65872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:48:48.925 [INFO] [Thread-65872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] client lang: <none>
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] server lang: <none>
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] kex follows: False
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] Compression: none
2025-11-18T02:48:48.933 [DEBUG] [Thread-65872] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:48:48.991 [DEBUG] [Thread-65872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:48:48.991 [DEBUG] [Thread-65872] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:48:48.991 [DEBUG] [Thread-65872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:48:48.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:48:48.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:48:49.052 [DEBUG] [Thread-65872] [transport.py] [_log()] userauth is OK
2025-11-18T02:48:49.052 [DEBUG] [Thread-65872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:48:49.052 [DEBUG] [Thread-65872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:48:49.052 [DEBUG] [Thread-65872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:48:49.052 [DEBUG] [Thread-65872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:48:49.069 [INFO] [Thread-65872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:48:49.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:48:49.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:48:49.914 [DEBUG] [Thread-65872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:48:49.914 [DEBUG] [Thread-65872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:48:49.962 [DEBUG] [Thread-65872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:48:49.962 [DEBUG] [Thread-65872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:48:49.970 [DEBUG] [Thread-65872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:48:49.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:48:49.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:48:49.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:48:49.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:48:49.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:48:49.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:48:50.002 [DEBUG] [Thread-65872] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:48:52.439 [DEBUG] [Thread-65874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:54.174 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:55.367 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:55.368 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:48:58.545 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:04.200 [DEBUG] [Thread-65875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:07.487 [DEBUG] [Thread-65876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:18.015 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:49:20.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:49:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:49:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 49, 1), 9.22, 53.31, 0.0, 22.51, 12.2, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:49:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:49:01
2025-11-18T02:49:20.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:49:20.946 [DEBUG] [Thread-65877] [transport.py] [_log()] starting thread (client mode): 0xd0711ea0
2025-11-18T02:49:20.946 [DEBUG] [Thread-65877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:49:20.961 [DEBUG] [Thread-65877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:49:20.961 [INFO] [Thread-65877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:49:20.963 [DEBUG] [Thread-65877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] client lang: <none>
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] server lang: <none>
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] kex follows: False
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] Compression: none
2025-11-18T02:49:20.964 [DEBUG] [Thread-65877] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:49:20.978 [DEBUG] [Thread-65877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:49:20.978 [DEBUG] [Thread-65877] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:49:20.978 [DEBUG] [Thread-65877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:49:20.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:49:20.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:49:20.980 [DEBUG] [Thread-65877] [transport.py] [_log()] userauth is OK
2025-11-18T02:49:20.980 [DEBUG] [Thread-65877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:49:20.980 [DEBUG] [Thread-65877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:49:20.980 [DEBUG] [Thread-65877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:49:20.980 [DEBUG] [Thread-65877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:49:20.998 [INFO] [Thread-65877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:49:20.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:49:21.564 [DEBUG] [Thread-65877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:49:21.564 [DEBUG] [Thread-65877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:49:21.565 [DEBUG] [Thread-65877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:49:21.605 [DEBUG] [Thread-65877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:49:21.606 [DEBUG] [Thread-65877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:49:21.608 [DEBUG] [Thread-65877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:49:21.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:49:21.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:49:21.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:49:21.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:49:21.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:49:21.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:49:21.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:49:21.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:49:21.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:49:21.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.034069 -999.00  +12.20  13.34     57   +4.00 1 1 1 1 1     0    0 7.26 -31.13 ZNESW 14.2 13.3 166.0 21.4 12.5 -23.4 12.4 -22.4 12.1 -22.1 12.4 -22.8
2025-11-18T02:49:21.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:49:21.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:49:21.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.034069
2025-11-18T02:49:21.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:49:21.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:49:21.631 [DEBUG] [Thread-65877] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:49:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:49:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:49:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:49:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:49:01', tmtdew=9.22, humidity=53.31, cloud=0.0, wind=22.51, temperature=12.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:49:01', seeing=1.13, atlas_timestamp='2025-11-18T00:49:03.562', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, -0.01574999999999882, 0.06874999999999964, -0.007500000000000284, -0.0004999999999988347, 0.06125000000000114, -0.016000000000000014, 0.0012500000000006395, 0.027499999999999858, 0.040000000000000924, 0.07574999999999932, 0.05000000000000071, 0.10099999999999909, 0.0572499999999998, -0.02850000000000108, 0.019999999999999574, 0.043250000000000455, 0.08649999999999913, 0.08949999999999925, 0.1222499999999993, 0.10999999999999943, 0.08274999999999721, 0.028750000000000497, 0.02024999999999899, 0.06400000000000006, 0.16500000000000092, 0.12424999999999997, 0.21649999999999991, 0.18100000000000094, 0.0730000000000004, 0.02800000000000047, 0.04200000000000159, 0.07574999999999932], zp_timestamp='2025-11-18T00:46:00')
2025-11-18T02:49:21.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:49:21.718 [DEBUG] [Thread-65880] [transport.py] [_log()] starting thread (client mode): 0xd0795630
2025-11-18T02:49:21.719 [DEBUG] [Thread-65880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:49:21.734 [DEBUG] [Thread-65880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:49:21.734 [INFO] [Thread-65880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:49:21.741 [DEBUG] [Thread-65880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] client lang: <none>
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] server lang: <none>
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] kex follows: False
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] Compression: none
2025-11-18T02:49:21.742 [DEBUG] [Thread-65880] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:49:21.800 [DEBUG] [Thread-65880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:49:21.800 [DEBUG] [Thread-65880] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:49:21.801 [DEBUG] [Thread-65880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:49:21.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:49:21.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:49:21.856 [DEBUG] [Thread-65880] [transport.py] [_log()] userauth is OK
2025-11-18T02:49:21.857 [DEBUG] [Thread-65880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:49:21.857 [DEBUG] [Thread-65880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:49:21.857 [DEBUG] [Thread-65880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:49:21.857 [DEBUG] [Thread-65880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:49:21.876 [INFO] [Thread-65880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:49:21.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:49:21.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:49:22.451 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:22.520 [DEBUG] [Thread-65882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:22.718 [DEBUG] [Thread-65880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:49:22.718 [DEBUG] [Thread-65880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:49:22.766 [DEBUG] [Thread-65880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:49:22.767 [DEBUG] [Thread-65880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:49:22.776 [DEBUG] [Thread-65880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:49:22.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:49:22.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:49:22.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:49:22.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:49:22.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:49:22.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:49:22.811 [DEBUG] [Thread-65880] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:49:28.530 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:32.899 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:37.569 [DEBUG] [Thread-65883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:52.599 [DEBUG] [Thread-65884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:52.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:49:52.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:49:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:49:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 49, 33), 9.21, 53.34, 0.0, 21.14, 12.18, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:49:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:49:33
2025-11-18T02:49:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:49:53.765 [DEBUG] [Thread-65885] [transport.py] [_log()] starting thread (client mode): 0xd0710790
2025-11-18T02:49:53.766 [DEBUG] [Thread-65885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:49:53.785 [DEBUG] [Thread-65885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:49:53.786 [INFO] [Thread-65885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:49:53.787 [DEBUG] [Thread-65885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:49:53.787 [DEBUG] [Thread-65885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] client lang: <none>
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] server lang: <none>
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] kex follows: False
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] Compression: none
2025-11-18T02:49:53.788 [DEBUG] [Thread-65885] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:49:53.800 [DEBUG] [Thread-65885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:49:53.801 [DEBUG] [Thread-65885] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:49:53.801 [DEBUG] [Thread-65885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:49:53.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:49:53.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:49:53.803 [DEBUG] [Thread-65885] [transport.py] [_log()] userauth is OK
2025-11-18T02:49:53.804 [DEBUG] [Thread-65885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:49:53.804 [DEBUG] [Thread-65885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:49:53.804 [DEBUG] [Thread-65885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:49:53.804 [DEBUG] [Thread-65885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:49:53.828 [INFO] [Thread-65885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:49:53.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:49:54.459 [DEBUG] [Thread-65885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:49:54.459 [DEBUG] [Thread-65885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:49:54.460 [DEBUG] [Thread-65885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:49:54.500 [DEBUG] [Thread-65885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:49:54.501 [DEBUG] [Thread-65885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:49:54.503 [DEBUG] [Thread-65885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:49:54.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:49:54.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:49:54.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:49:54.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:49:54.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:49:54.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:49:54.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:49:54.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:49:54.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:49:54.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.034416 -999.00  +12.10  10.61     57   +4.00 1 1 1 1 1     0    0 7.60 -29.45 ZNESW 12.1 10.6 151.8 16.9 12.5 -23.4 12.3 -22.4 12.1 -22.1 12.4 -22.9
2025-11-18T02:49:54.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:49:54.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:49:54.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.034416
2025-11-18T02:49:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:49:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:49:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:49:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:49:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:49:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:49:33', tmtdew=9.21, humidity=53.34, cloud=0.0, wind=21.14, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:49:33', seeing=1.27, atlas_timestamp='2025-11-18T00:49:33.542', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, -0.01574999999999882, 0.06874999999999964, -0.007500000000000284, -0.0004999999999988347, 0.06125000000000114, -0.016000000000000014, 0.0012500000000006395, 0.027499999999999858, 0.040000000000000924, 0.07574999999999932, 0.05000000000000071, 0.10099999999999909, 0.0572499999999998, -0.02850000000000108, 0.019999999999999574, 0.043250000000000455, 0.08649999999999913, 0.08949999999999925, 0.1222499999999993, 0.10999999999999943, 0.08274999999999721, 0.028750000000000497, 0.02024999999999899, 0.06400000000000006, 0.16500000000000092, 0.12424999999999997, 0.21649999999999991, 0.18100000000000094, 0.0730000000000004, 0.02800000000000047, 0.04200000000000159, 0.07574999999999932], zp_timestamp='2025-11-18T00:46:00')
2025-11-18T02:49:54.523 [DEBUG] [Thread-65885] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:49:54.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:49:54.620 [DEBUG] [Thread-65888] [transport.py] [_log()] starting thread (client mode): 0xd31cc7f0
2025-11-18T02:49:54.620 [DEBUG] [Thread-65888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:49:54.635 [DEBUG] [Thread-65888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:49:54.635 [INFO] [Thread-65888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:49:54.643 [DEBUG] [Thread-65888] [transport.py] [_log()] client lang: <none>
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] server lang: <none>
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] kex follows: False
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] Compression: none
2025-11-18T02:49:54.644 [DEBUG] [Thread-65888] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:49:54.700 [DEBUG] [Thread-65888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:49:54.700 [DEBUG] [Thread-65888] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:49:54.701 [DEBUG] [Thread-65888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:49:54.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:49:54.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:49:54.756 [DEBUG] [Thread-65888] [transport.py] [_log()] userauth is OK
2025-11-18T02:49:54.756 [DEBUG] [Thread-65888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:49:54.757 [DEBUG] [Thread-65888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:49:54.757 [DEBUG] [Thread-65888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:49:54.757 [DEBUG] [Thread-65888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:49:54.776 [INFO] [Thread-65888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:49:54.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:49:54.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:49:55.570 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:55.571 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:49:55.604 [DEBUG] [Thread-65888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:49:55.604 [DEBUG] [Thread-65888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:49:55.651 [DEBUG] [Thread-65888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:49:55.651 [DEBUG] [Thread-65888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:49:55.660 [DEBUG] [Thread-65888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:49:55.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:49:55.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:49:55.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:49:55.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:49:55.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:49:55.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:49:55.695 [DEBUG] [Thread-65888] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:50:04.253 [DEBUG] [Thread-65890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:07.631 [DEBUG] [Thread-65891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:22.666 [DEBUG] [Thread-65892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:25.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:50:25.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:50:25.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:50:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 50, 5), 9.25, 53.17, 0.0, 21.03, 12.22, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:50:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:50:05
2025-11-18T02:50:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:50:26.644 [DEBUG] [Thread-65893] [transport.py] [_log()] starting thread (client mode): 0xd0754910
2025-11-18T02:50:26.644 [DEBUG] [Thread-65893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:50:26.665 [DEBUG] [Thread-65893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:50:26.665 [INFO] [Thread-65893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:50:26.668 [DEBUG] [Thread-65893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:50:26.668 [DEBUG] [Thread-65893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:50:26.668 [DEBUG] [Thread-65893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:50:26.668 [DEBUG] [Thread-65893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] client lang: <none>
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] server lang: <none>
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] kex follows: False
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] Compression: none
2025-11-18T02:50:26.669 [DEBUG] [Thread-65893] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:50:26.687 [DEBUG] [Thread-65893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:50:26.687 [DEBUG] [Thread-65893] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:50:26.688 [DEBUG] [Thread-65893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:50:26.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:50:26.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:50:26.689 [DEBUG] [Thread-65893] [transport.py] [_log()] userauth is OK
2025-11-18T02:50:26.690 [DEBUG] [Thread-65893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:50:26.690 [DEBUG] [Thread-65893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:50:26.690 [DEBUG] [Thread-65893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:50:26.690 [DEBUG] [Thread-65893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:50:26.725 [INFO] [Thread-65893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:50:26.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:50:27.360 [DEBUG] [Thread-65893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:50:27.360 [DEBUG] [Thread-65893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:50:27.360 [DEBUG] [Thread-65893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:50:27.401 [DEBUG] [Thread-65893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:50:27.401 [DEBUG] [Thread-65893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:50:27.404 [DEBUG] [Thread-65893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:50:27.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:50:27.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:50:27.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:50:27.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:50:27.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:50:27.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:50:27.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:50:27.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:50:27.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:50:27.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.034416 -999.00  +12.10  10.61     57   +4.00 1 1 1 1 1     0    0 7.60 -29.45 ZNESW 12.1 10.6 151.8 16.9 12.5 -23.4 12.3 -22.4 12.1 -22.1 12.4 -22.9
2025-11-18T02:50:27.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:50:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:50:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.034416
2025-11-18T02:50:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:50:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:50:27.426 [DEBUG] [Thread-65893] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:50:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:50:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:50:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:50:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:50:05', tmtdew=9.25, humidity=53.17, cloud=0.0, wind=21.03, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:50:05', seeing=1.27, atlas_timestamp='2025-11-18T00:49:33.542', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:49:00')
2025-11-18T02:50:27.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:50:27.523 [DEBUG] [Thread-65896] [transport.py] [_log()] starting thread (client mode): 0xd07571c0
2025-11-18T02:50:27.523 [DEBUG] [Thread-65896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:50:27.538 [DEBUG] [Thread-65896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:50:27.539 [INFO] [Thread-65896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] client lang: <none>
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] server lang: <none>
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] kex follows: False
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] Compression: none
2025-11-18T02:50:27.546 [DEBUG] [Thread-65896] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:50:27.604 [DEBUG] [Thread-65896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:50:27.604 [DEBUG] [Thread-65896] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:50:27.604 [DEBUG] [Thread-65896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:50:27.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:50:27.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:50:27.664 [DEBUG] [Thread-65896] [transport.py] [_log()] userauth is OK
2025-11-18T02:50:27.664 [DEBUG] [Thread-65896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:50:27.665 [DEBUG] [Thread-65896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:50:27.665 [DEBUG] [Thread-65896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:50:27.665 [DEBUG] [Thread-65896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:50:27.684 [INFO] [Thread-65896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:50:27.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:50:27.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:50:28.516 [DEBUG] [Thread-65896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:50:28.516 [DEBUG] [Thread-65896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:50:28.564 [DEBUG] [Thread-65896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:50:28.564 [DEBUG] [Thread-65896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:50:28.573 [DEBUG] [Thread-65896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:50:28.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:50:28.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:50:28.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:50:28.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:50:28.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:50:28.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:50:28.607 [DEBUG] [Thread-65896] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:50:36.371 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:37.696 [DEBUG] [Thread-65898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:39.438 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:52.734 [DEBUG] [Thread-65899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:55.776 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:55.777 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:50:58.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:50:58.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:50:58.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:50:59.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 50, 37), 9.21, 53.14, 0.0, 17.82, 12.07, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:50:59.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:50:37
2025-11-18T02:50:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:50:59.554 [DEBUG] [Thread-65900] [transport.py] [_log()] starting thread (client mode): 0xd07af430
2025-11-18T02:50:59.555 [DEBUG] [Thread-65900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:50:59.565 [DEBUG] [Thread-65900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:50:59.565 [INFO] [Thread-65900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] client lang: <none>
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] server lang: <none>
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] kex follows: False
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] Compression: none
2025-11-18T02:50:59.569 [DEBUG] [Thread-65900] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:50:59.586 [DEBUG] [Thread-65900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:50:59.586 [DEBUG] [Thread-65900] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:50:59.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:50:59.587 [DEBUG] [Thread-65900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:50:59.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:50:59.589 [DEBUG] [Thread-65900] [transport.py] [_log()] userauth is OK
2025-11-18T02:50:59.589 [DEBUG] [Thread-65900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:50:59.590 [DEBUG] [Thread-65900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:50:59.590 [DEBUG] [Thread-65900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:50:59.590 [DEBUG] [Thread-65900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:50:59.607 [INFO] [Thread-65900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:50:59.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:51:00.360 [DEBUG] [Thread-65900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:51:00.360 [DEBUG] [Thread-65900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:51:00.360 [DEBUG] [Thread-65900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:51:00.402 [DEBUG] [Thread-65900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:51:00.402 [DEBUG] [Thread-65900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:51:00.405 [DEBUG] [Thread-65900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:51:00.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:51:00.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:51:00.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:51:00.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:51:00.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:51:00.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:51:00.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:51:00.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:51:00.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:51:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.034763 -999.00  +12.10  10.51     57   +3.90 1 1 1 1 1     0    0 7.44 -26.97 ZNESW 11.4 10.5 147.6 17.7 12.4 -23.4 12.3 -22.4 12.2 -22.1 12.5 -23.0
2025-11-18T02:51:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:51:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:51:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.034763
2025-11-18T02:51:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:51:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:51:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:51:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:51:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:51:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:50:37', tmtdew=9.21, humidity=53.14, cloud=0.0, wind=17.82, temperature=12.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:50:37', seeing=1.37, atlas_timestamp='2025-11-18T00:50:03.523', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:49:00')
2025-11-18T02:51:00.426 [DEBUG] [Thread-65900] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:51:00.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:51:00.523 [DEBUG] [Thread-65903] [transport.py] [_log()] starting thread (client mode): 0xd07ae650
2025-11-18T02:51:00.523 [DEBUG] [Thread-65903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:51:00.538 [DEBUG] [Thread-65903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:51:00.538 [INFO] [Thread-65903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:51:00.545 [DEBUG] [Thread-65903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:51:00.546 [DEBUG] [Thread-65903] [transport.py] [_log()] client lang: <none>
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] server lang: <none>
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] kex follows: False
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] Compression: none
2025-11-18T02:51:00.547 [DEBUG] [Thread-65903] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:51:00.606 [DEBUG] [Thread-65903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:51:00.606 [DEBUG] [Thread-65903] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:51:00.607 [DEBUG] [Thread-65903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:51:00.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:51:00.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:51:00.664 [DEBUG] [Thread-65903] [transport.py] [_log()] userauth is OK
2025-11-18T02:51:00.664 [DEBUG] [Thread-65903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:51:00.665 [DEBUG] [Thread-65903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:51:00.665 [DEBUG] [Thread-65903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:51:00.665 [DEBUG] [Thread-65903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:51:00.682 [INFO] [Thread-65903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:51:00.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:51:00.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:51:01.499 [DEBUG] [Thread-65903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:51:01.499 [DEBUG] [Thread-65903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:51:01.547 [DEBUG] [Thread-65903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:51:01.547 [DEBUG] [Thread-65903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:51:01.555 [DEBUG] [Thread-65903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:51:01.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:51:01.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')
2025-11-18T02:51:01.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:51:01.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:51:01.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:51:01.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:51:01.591 [DEBUG] [Thread-65903] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:51:04.311 [DEBUG] [Thread-65905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:51:07.764 [DEBUG] [Thread-65906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:51:22.802 [DEBUG] [Thread-65907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:51:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:51:31.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:51:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:51:32.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 51, 9), 9.22, 53.11, 0.0, 16.69, 12.05, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:51:32.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:51:09
2025-11-18T02:51:32.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:51:32.556 [DEBUG] [Thread-65908] [transport.py] [_log()] starting thread (client mode): 0xd0702c50
2025-11-18T02:51:32.557 [DEBUG] [Thread-65908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:51:32.577 [DEBUG] [Thread-65908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:51:32.578 [INFO] [Thread-65908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] client lang: <none>
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] server lang: <none>
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] kex follows: False
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] Compression: none
2025-11-18T02:51:32.581 [DEBUG] [Thread-65908] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:51:32.598 [DEBUG] [Thread-65908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:51:32.598 [DEBUG] [Thread-65908] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:51:32.599 [DEBUG] [Thread-65908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:51:32.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:51:32.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:51:32.601 [DEBUG] [Thread-65908] [transport.py] [_log()] userauth is OK
2025-11-18T02:51:32.601 [DEBUG] [Thread-65908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:51:32.601 [DEBUG] [Thread-65908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:51:32.601 [DEBUG] [Thread-65908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:51:32.601 [DEBUG] [Thread-65908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:51:32.636 [INFO] [Thread-65908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:51:32.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:51:33.280 [DEBUG] [Thread-65908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:51:33.280 [DEBUG] [Thread-65908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:51:33.280 [DEBUG] [Thread-65908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:51:33.320 [DEBUG] [Thread-65908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:51:33.320 [DEBUG] [Thread-65908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:51:33.323 [DEBUG] [Thread-65908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:51:33.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:51:33.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:51:33.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:51:33.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:51:33.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:51:33.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:51:33.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:51:33.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:51:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:51:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.035168 -999.00  +12.10  12.21     57   +3.90 1 1 1 1 1     0    0 7.46 -28.47 ZNESW 11.7 12.2 151.2 15.8 12.5 -23.4 12.3 -22.4 12.1 -22.0 12.5 -23.1
2025-11-18T02:51:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:51:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:51:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.035168
2025-11-18T02:51:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:51:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:51:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:51:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:51:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:51:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:51:09', tmtdew=9.22, humidity=53.11, cloud=0.0, wind=16.69, temperature=12.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:51:09', seeing=1.37, atlas_timestamp='2025-11-18T00:50:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:49:00')
2025-11-18T02:51:33.349 [DEBUG] [Thread-65908] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:51:33.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:51:33.447 [DEBUG] [Thread-65911] [transport.py] [_log()] starting thread (client mode): 0xd07ae020
2025-11-18T02:51:33.447 [DEBUG] [Thread-65911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:51:33.464 [DEBUG] [Thread-65911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:51:33.464 [INFO] [Thread-65911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:51:33.474 [DEBUG] [Thread-65911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] client lang: <none>
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] server lang: <none>
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] kex follows: False
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] Compression: none
2025-11-18T02:51:33.475 [DEBUG] [Thread-65911] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:51:33.532 [DEBUG] [Thread-65911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:51:33.532 [DEBUG] [Thread-65911] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:51:33.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:51:33.533 [DEBUG] [Thread-65911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:51:33.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:51:33.588 [DEBUG] [Thread-65911] [transport.py] [_log()] userauth is OK
2025-11-18T02:51:33.588 [DEBUG] [Thread-65911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:51:33.589 [DEBUG] [Thread-65911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:51:33.589 [DEBUG] [Thread-65911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:51:33.589 [DEBUG] [Thread-65911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:51:33.606 [INFO] [Thread-65911] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:51:33.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:51:33.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:51:34.426 [DEBUG] [Thread-65911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:51:34.427 [DEBUG] [Thread-65911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:51:34.474 [DEBUG] [Thread-65911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:51:34.474 [DEBUG] [Thread-65911] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:51:34.483 [DEBUG] [Thread-65911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:51:34.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:51:34.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:51:34.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:51:34.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:51:34.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:51:34.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:51:34.520 [DEBUG] [Thread-65911] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:51:37.827 [DEBUG] [Thread-65913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:51:52.865 [DEBUG] [Thread-65914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:51:55.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:51:55.981 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:52:04.381 [DEBUG] [Thread-65915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:52:04.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:52:04.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:52:04.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:52:05.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 51, 41), 9.24, 53.03, 0.0, 14.98, 12.07, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:52:05.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:51:41
2025-11-18T02:52:05.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:52:05.523 [DEBUG] [Thread-65916] [transport.py] [_log()] starting thread (client mode): 0xd07576a0
2025-11-18T02:52:05.523 [DEBUG] [Thread-65916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:52:05.546 [DEBUG] [Thread-65916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:52:05.546 [INFO] [Thread-65916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] client lang: <none>
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] server lang: <none>
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] kex follows: False
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:52:05.549 [DEBUG] [Thread-65916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:52:05.550 [DEBUG] [Thread-65916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:52:05.550 [DEBUG] [Thread-65916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:52:05.550 [DEBUG] [Thread-65916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:52:05.550 [DEBUG] [Thread-65916] [transport.py] [_log()] Compression: none
2025-11-18T02:52:05.550 [DEBUG] [Thread-65916] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:52:05.567 [DEBUG] [Thread-65916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:52:05.568 [DEBUG] [Thread-65916] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:52:05.568 [DEBUG] [Thread-65916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:52:05.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:52:05.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:52:05.568 [DEBUG] [Thread-65916] [transport.py] [_log()] userauth is OK
2025-11-18T02:52:05.568 [DEBUG] [Thread-65916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:52:05.569 [DEBUG] [Thread-65916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:52:05.569 [DEBUG] [Thread-65916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:52:05.569 [DEBUG] [Thread-65916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:52:05.587 [INFO] [Thread-65916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:52:05.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:52:06.353 [DEBUG] [Thread-65916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:52:06.353 [DEBUG] [Thread-65916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:52:06.354 [DEBUG] [Thread-65916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:52:06.395 [DEBUG] [Thread-65916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:52:06.395 [DEBUG] [Thread-65916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:52:06.398 [DEBUG] [Thread-65916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:52:06.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:52:06.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:52:06.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:52:06.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:52:06.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:52:06.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:52:06.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:52:06.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:52:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:52:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.035458 -999.00  +12.10   9.81     57   +3.90 1 1 1 1 1     0    0 7.47 -26.85 ZNESW 12.7 9.8 152.4 17.3 12.5 -23.4 12.3 -22.3 12.1 -22.1 12.4 -23.0
2025-11-18T02:52:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:52:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:52:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.035458
2025-11-18T02:52:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:52:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:52:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:52:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:52:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:52:06.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:51:41', tmtdew=9.24, humidity=53.03, cloud=0.0, wind=14.98, temperature=12.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:51:41', seeing=1.23, atlas_timestamp='2025-11-18T00:51:03.571', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:49:00')
2025-11-18T02:52:06.419 [DEBUG] [Thread-65916] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:52:06.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:52:06.509 [DEBUG] [Thread-65919] [transport.py] [_log()] starting thread (client mode): 0xd07d9330
2025-11-18T02:52:06.510 [DEBUG] [Thread-65919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:52:06.525 [DEBUG] [Thread-65919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:52:06.525 [INFO] [Thread-65919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:52:06.533 [DEBUG] [Thread-65919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:52:06.533 [DEBUG] [Thread-65919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:52:06.533 [DEBUG] [Thread-65919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:52:06.533 [DEBUG] [Thread-65919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] client lang: <none>
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] server lang: <none>
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] kex follows: False
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] Compression: none
2025-11-18T02:52:06.534 [DEBUG] [Thread-65919] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:52:06.593 [DEBUG] [Thread-65919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:52:06.593 [DEBUG] [Thread-65919] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:52:06.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:52:06.594 [DEBUG] [Thread-65919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:52:06.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:52:06.648 [DEBUG] [Thread-65919] [transport.py] [_log()] userauth is OK
2025-11-18T02:52:06.649 [DEBUG] [Thread-65919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:52:06.649 [DEBUG] [Thread-65919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:52:06.649 [DEBUG] [Thread-65919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:52:06.649 [DEBUG] [Thread-65919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:52:06.668 [INFO] [Thread-65919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:52:06.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:52:06.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:52:07.532 [DEBUG] [Thread-65919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:52:07.532 [DEBUG] [Thread-65919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:52:07.579 [DEBUG] [Thread-65919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:52:07.579 [DEBUG] [Thread-65919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:52:07.588 [DEBUG] [Thread-65919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:52:07.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:52:07.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:52:07.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:52:07.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:52:07.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:52:07.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:52:07.624 [DEBUG] [Thread-65919] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:52:07.893 [DEBUG] [Thread-65921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:52:22.934 [DEBUG] [Thread-65922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:52:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:52:37.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:52:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:52:37.963 [DEBUG] [Thread-65923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:52:38.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 52, 13), 9.24, 53.01, 0.0, 15.74, 12.03, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:52:38.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:52:13
2025-11-18T02:52:38.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:52:38.568 [DEBUG] [Thread-65924] [transport.py] [_log()] starting thread (client mode): 0xd07a8a00
2025-11-18T02:52:38.568 [DEBUG] [Thread-65924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:52:38.588 [DEBUG] [Thread-65924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:52:38.588 [INFO] [Thread-65924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] client lang: <none>
2025-11-18T02:52:38.591 [DEBUG] [Thread-65924] [transport.py] [_log()] server lang: <none>
2025-11-18T02:52:38.592 [DEBUG] [Thread-65924] [transport.py] [_log()] kex follows: False
2025-11-18T02:52:38.592 [DEBUG] [Thread-65924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:52:38.592 [DEBUG] [Thread-65924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:52:38.592 [DEBUG] [Thread-65924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:52:38.592 [DEBUG] [Thread-65924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:52:38.592 [DEBUG] [Thread-65924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:52:38.592 [DEBUG] [Thread-65924] [transport.py] [_log()] Compression: none
2025-11-18T02:52:38.592 [DEBUG] [Thread-65924] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:52:38.610 [DEBUG] [Thread-65924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:52:38.610 [DEBUG] [Thread-65924] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:52:38.611 [DEBUG] [Thread-65924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:52:38.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:52:38.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:52:38.613 [DEBUG] [Thread-65924] [transport.py] [_log()] userauth is OK
2025-11-18T02:52:38.613 [DEBUG] [Thread-65924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:52:38.613 [DEBUG] [Thread-65924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:52:38.613 [DEBUG] [Thread-65924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:52:38.613 [DEBUG] [Thread-65924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:52:38.637 [INFO] [Thread-65924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:52:38.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:52:39.268 [DEBUG] [Thread-65924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:52:39.268 [DEBUG] [Thread-65924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:52:39.268 [DEBUG] [Thread-65924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:52:39.309 [DEBUG] [Thread-65924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:52:39.309 [DEBUG] [Thread-65924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:52:39.311 [DEBUG] [Thread-65924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:52:39.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:52:39.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:52:39.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:52:39.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:52:39.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:52:39.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:52:39.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:52:39.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:52:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:52:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.036152 -999.00  +12.10  11.12     57   +4.00 1 1 1 1 1     0    0 7.71 -25.15 ZNESW 12.5 11.1 147.0 17.4 12.4 -23.3 12.4 -22.4 12.1 -22.0 12.4 -22.8
2025-11-18T02:52:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:52:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:52:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.036152
2025-11-18T02:52:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:52:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:52:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:52:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:52:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:52:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:52:13', tmtdew=9.24, humidity=53.01, cloud=0.0, wind=15.74, temperature=12.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:52:13', seeing=1.2, atlas_timestamp='2025-11-18T00:52:03.533', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:49:00')
2025-11-18T02:52:39.328 [DEBUG] [Thread-65924] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:52:39.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:52:39.418 [DEBUG] [Thread-65927] [transport.py] [_log()] starting thread (client mode): 0xd07955d0
2025-11-18T02:52:39.418 [DEBUG] [Thread-65927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:52:39.433 [DEBUG] [Thread-65927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:52:39.433 [INFO] [Thread-65927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] client lang: <none>
2025-11-18T02:52:39.440 [DEBUG] [Thread-65927] [transport.py] [_log()] server lang: <none>
2025-11-18T02:52:39.441 [DEBUG] [Thread-65927] [transport.py] [_log()] kex follows: False
2025-11-18T02:52:39.441 [DEBUG] [Thread-65927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:52:39.441 [DEBUG] [Thread-65927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:52:39.441 [DEBUG] [Thread-65927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:52:39.441 [DEBUG] [Thread-65927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:52:39.441 [DEBUG] [Thread-65927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:52:39.441 [DEBUG] [Thread-65927] [transport.py] [_log()] Compression: none
2025-11-18T02:52:39.441 [DEBUG] [Thread-65927] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:52:39.499 [DEBUG] [Thread-65927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:52:39.499 [DEBUG] [Thread-65927] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:52:39.499 [DEBUG] [Thread-65927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:52:39.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:52:39.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:52:39.556 [DEBUG] [Thread-65927] [transport.py] [_log()] userauth is OK
2025-11-18T02:52:39.556 [DEBUG] [Thread-65927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:52:39.556 [DEBUG] [Thread-65927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:52:39.556 [DEBUG] [Thread-65927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:52:39.556 [DEBUG] [Thread-65927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:52:39.570 [INFO] [Thread-65927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:52:39.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:52:39.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:52:40.398 [DEBUG] [Thread-65927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:52:40.398 [DEBUG] [Thread-65927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:52:40.446 [DEBUG] [Thread-65927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:52:40.446 [DEBUG] [Thread-65927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:52:40.454 [DEBUG] [Thread-65927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:52:40.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:52:40.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:52:40.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:52:40.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:52:40.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:52:40.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:52:40.485 [DEBUG] [Thread-65927] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:52:52.992 [DEBUG] [Thread-65929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:52:56.186 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:52:56.187 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:53:04.458 [DEBUG] [Thread-65930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:53:08.044 [DEBUG] [Thread-65931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:53:10.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:53:10.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:53:10.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:53:11.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 52, 45), 9.15, 53.66, 0.0, 13.15, 11.94, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:53:11.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:52:45
2025-11-18T02:53:11.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:53:11.418 [DEBUG] [Thread-65932] [transport.py] [_log()] starting thread (client mode): 0xd31510f0
2025-11-18T02:53:11.418 [DEBUG] [Thread-65932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:53:11.438 [DEBUG] [Thread-65932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:53:11.438 [INFO] [Thread-65932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] client lang: <none>
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] server lang: <none>
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] kex follows: False
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] Compression: none
2025-11-18T02:53:11.441 [DEBUG] [Thread-65932] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:53:11.455 [DEBUG] [Thread-65932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:53:11.456 [DEBUG] [Thread-65932] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:53:11.456 [DEBUG] [Thread-65932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:53:11.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:53:11.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:53:11.456 [DEBUG] [Thread-65932] [transport.py] [_log()] userauth is OK
2025-11-18T02:53:11.456 [DEBUG] [Thread-65932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:53:11.456 [DEBUG] [Thread-65932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:53:11.456 [DEBUG] [Thread-65932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:53:11.456 [DEBUG] [Thread-65932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:53:11.472 [INFO] [Thread-65932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:53:11.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:53:12.280 [DEBUG] [Thread-65932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:53:12.280 [DEBUG] [Thread-65932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:53:12.280 [DEBUG] [Thread-65932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:53:12.321 [DEBUG] [Thread-65932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:53:12.322 [DEBUG] [Thread-65932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:53:12.324 [DEBUG] [Thread-65932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:53:12.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:53:12.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:53:12.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:53:12.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:53:12.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:53:12.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:53:12.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:53:12.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:53:12.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:53:12.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.036557 -999.00  +12.10  13.85     57   +4.00 1 1 1 1 1     0    0 7.70 -22.89 ZNESW 10.1 13.8 155.2 16.8 12.5 -23.4 12.3 -22.4 12.1 -21.8 12.4 -22.7
2025-11-18T02:53:12.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:53:12.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:53:12.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.036557
2025-11-18T02:53:12.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:53:12.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:53:12.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:53:12.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:53:12.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:53:12.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:52:45', tmtdew=9.15, humidity=53.66, cloud=0.0, wind=13.15, temperature=11.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:52:45', seeing=1.4, atlas_timestamp='2025-11-18T00:52:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:49:00')
2025-11-18T02:53:12.349 [DEBUG] [Thread-65932] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:53:12.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:53:12.448 [DEBUG] [Thread-65935] [transport.py] [_log()] starting thread (client mode): 0xd3151660
2025-11-18T02:53:12.448 [DEBUG] [Thread-65935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:53:12.462 [DEBUG] [Thread-65935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:53:12.462 [INFO] [Thread-65935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:53:12.470 [DEBUG] [Thread-65935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:53:12.470 [DEBUG] [Thread-65935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:53:12.470 [DEBUG] [Thread-65935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:53:12.470 [DEBUG] [Thread-65935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:53:12.470 [DEBUG] [Thread-65935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:53:12.470 [DEBUG] [Thread-65935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:53:12.470 [DEBUG] [Thread-65935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] client lang: <none>
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] server lang: <none>
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] kex follows: False
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:53:12.471 [DEBUG] [Thread-65935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:53:12.472 [DEBUG] [Thread-65935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:53:12.472 [DEBUG] [Thread-65935] [transport.py] [_log()] Compression: none
2025-11-18T02:53:12.472 [DEBUG] [Thread-65935] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:53:12.529 [DEBUG] [Thread-65935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:53:12.530 [DEBUG] [Thread-65935] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:53:12.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:53:12.531 [DEBUG] [Thread-65935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:53:12.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:53:12.584 [DEBUG] [Thread-65935] [transport.py] [_log()] userauth is OK
2025-11-18T02:53:12.585 [DEBUG] [Thread-65935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:53:12.585 [DEBUG] [Thread-65935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:53:12.585 [DEBUG] [Thread-65935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:53:12.585 [DEBUG] [Thread-65935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:53:12.605 [INFO] [Thread-65935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:53:12.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:53:12.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:53:13.458 [DEBUG] [Thread-65935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:53:13.458 [DEBUG] [Thread-65935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:53:13.506 [DEBUG] [Thread-65935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:53:13.506 [DEBUG] [Thread-65935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:53:13.515 [DEBUG] [Thread-65935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:53:13.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:53:13.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:53:13.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:53:13.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:53:13.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:53:13.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:53:13.550 [DEBUG] [Thread-65935] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:53:23.071 [DEBUG] [Thread-65937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:53:38.102 [DEBUG] [Thread-65938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:53:43.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:53:43.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:53:43.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:53:44.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 53, 17), 9.15, 53.68, 0.0, 14.19, 11.94, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:53:44.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:53:17
2025-11-18T02:53:44.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:53:44.471 [DEBUG] [Thread-65939] [transport.py] [_log()] starting thread (client mode): 0xd0756710
2025-11-18T02:53:44.472 [DEBUG] [Thread-65939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:53:44.491 [DEBUG] [Thread-65939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:53:44.492 [INFO] [Thread-65939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:53:44.495 [DEBUG] [Thread-65939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] client lang: <none>
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] server lang: <none>
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] kex follows: False
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] Compression: none
2025-11-18T02:53:44.496 [DEBUG] [Thread-65939] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:53:44.514 [DEBUG] [Thread-65939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:53:44.514 [DEBUG] [Thread-65939] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:53:44.515 [DEBUG] [Thread-65939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:53:44.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:53:44.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:53:44.557 [DEBUG] [Thread-65939] [transport.py] [_log()] userauth is OK
2025-11-18T02:53:44.557 [DEBUG] [Thread-65939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:53:44.557 [DEBUG] [Thread-65939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:53:44.557 [DEBUG] [Thread-65939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:53:44.557 [DEBUG] [Thread-65939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:53:44.583 [INFO] [Thread-65939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:53:44.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:53:45.204 [DEBUG] [Thread-65939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:53:45.204 [DEBUG] [Thread-65939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:53:45.204 [DEBUG] [Thread-65939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:53:45.245 [DEBUG] [Thread-65939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:53:45.245 [DEBUG] [Thread-65939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:53:45.248 [DEBUG] [Thread-65939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:53:45.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:53:45.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:53:45.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:53:45.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:53:45.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:53:45.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:53:45.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:53:45.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:53:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:53:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.036904 -999.00  +12.10  11.75     57   +4.00 1 1 1 1 1     0    0 7.61 -22.36 ZNESW 11.0 11.8 141.8 17.0 12.4 -23.3 12.3 -22.4 12.1 -22.0 12.4 -22.9
2025-11-18T02:53:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:53:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:53:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.036904
2025-11-18T02:53:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:53:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:53:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:53:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:53:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:53:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:53:17', tmtdew=9.15, humidity=53.68, cloud=0.0, wind=14.19, temperature=11.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:53:17', seeing=1.16, atlas_timestamp='2025-11-18T00:53:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:51:00')
2025-11-18T02:53:45.274 [DEBUG] [Thread-65939] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:53:45.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:53:45.369 [DEBUG] [Thread-65942] [transport.py] [_log()] starting thread (client mode): 0xd0755d20
2025-11-18T02:53:45.370 [DEBUG] [Thread-65942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:53:45.385 [DEBUG] [Thread-65942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:53:45.385 [INFO] [Thread-65942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] client lang: <none>
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] server lang: <none>
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] kex follows: False
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:53:45.393 [DEBUG] [Thread-65942] [transport.py] [_log()] Compression: none
2025-11-18T02:53:45.394 [DEBUG] [Thread-65942] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:53:45.452 [DEBUG] [Thread-65942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:53:45.452 [DEBUG] [Thread-65942] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:53:45.453 [DEBUG] [Thread-65942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:53:45.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:53:45.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:53:45.508 [DEBUG] [Thread-65942] [transport.py] [_log()] userauth is OK
2025-11-18T02:53:45.508 [DEBUG] [Thread-65942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:53:45.509 [DEBUG] [Thread-65942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:53:45.509 [DEBUG] [Thread-65942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:53:45.509 [DEBUG] [Thread-65942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:53:45.528 [INFO] [Thread-65942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:53:45.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:53:45.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:53:46.365 [DEBUG] [Thread-65942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:53:46.365 [DEBUG] [Thread-65942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:53:46.412 [DEBUG] [Thread-65942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:53:46.412 [DEBUG] [Thread-65942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:53:46.422 [DEBUG] [Thread-65942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:53:46.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:53:46.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:53:46.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:53:46.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:53:46.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:53:46.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:53:46.456 [DEBUG] [Thread-65942] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:53:53.132 [DEBUG] [Thread-65944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:53:56.389 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:53:56.390 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:54:04.532 [DEBUG] [Thread-65945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:54:08.173 [DEBUG] [Thread-65946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:54:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:54:16.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:54:16.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:54:17.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 53, 49), 9.03, 53.89, 0.0, 18.02, 11.87, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:54:17.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:53:49
2025-11-18T02:54:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:54:17.369 [DEBUG] [Thread-65947] [transport.py] [_log()] starting thread (client mode): 0xd07af670
2025-11-18T02:54:17.370 [DEBUG] [Thread-65947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:54:17.392 [DEBUG] [Thread-65947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:54:17.392 [INFO] [Thread-65947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:54:17.395 [DEBUG] [Thread-65947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:54:17.395 [DEBUG] [Thread-65947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:54:17.395 [DEBUG] [Thread-65947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:54:17.395 [DEBUG] [Thread-65947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:54:17.395 [DEBUG] [Thread-65947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:54:17.395 [DEBUG] [Thread-65947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:54:17.395 [DEBUG] [Thread-65947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:54:17.395 [DEBUG] [Thread-65947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] client lang: <none>
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] server lang: <none>
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] kex follows: False
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] Compression: none
2025-11-18T02:54:17.396 [DEBUG] [Thread-65947] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:54:17.413 [DEBUG] [Thread-65947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:54:17.413 [DEBUG] [Thread-65947] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:54:17.413 [DEBUG] [Thread-65947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:54:17.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:54:17.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:54:17.415 [DEBUG] [Thread-65947] [transport.py] [_log()] userauth is OK
2025-11-18T02:54:17.415 [DEBUG] [Thread-65947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:54:17.416 [DEBUG] [Thread-65947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:54:17.416 [DEBUG] [Thread-65947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:54:17.416 [DEBUG] [Thread-65947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:54:17.439 [INFO] [Thread-65947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:54:17.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:54:18.248 [DEBUG] [Thread-65947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:54:18.248 [DEBUG] [Thread-65947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:54:18.248 [DEBUG] [Thread-65947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:54:18.289 [DEBUG] [Thread-65947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:54:18.289 [DEBUG] [Thread-65947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:54:18.292 [DEBUG] [Thread-65947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:54:18.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:54:18.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:54:18.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:54:18.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:54:18.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:54:18.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:54:18.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:54:18.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:54:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:54:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.037194 -999.00  +12.10  12.38     57   +3.90 1 1 1 1 1     0    0 7.70 -22.95 ZNESW 11.7 12.4 141.8 14.8 12.4 -23.4 12.3 -22.4 12.1 -22.1 12.4 -23.0
2025-11-18T02:54:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:54:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:54:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.037194
2025-11-18T02:54:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:54:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:54:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:54:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:54:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:54:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:53:49', tmtdew=9.03, humidity=53.89, cloud=0.0, wind=18.02, temperature=11.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:53:49', seeing=0.97, atlas_timestamp='2025-11-18T00:53:33.562', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:51:00')
2025-11-18T02:54:18.316 [DEBUG] [Thread-65947] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:54:18.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:54:18.413 [DEBUG] [Thread-65950] [transport.py] [_log()] starting thread (client mode): 0xd0755510
2025-11-18T02:54:18.414 [DEBUG] [Thread-65950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:54:18.429 [DEBUG] [Thread-65950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:54:18.429 [INFO] [Thread-65950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:54:18.436 [DEBUG] [Thread-65950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:54:18.436 [DEBUG] [Thread-65950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] client lang: <none>
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] server lang: <none>
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] kex follows: False
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] Compression: none
2025-11-18T02:54:18.437 [DEBUG] [Thread-65950] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:54:18.496 [DEBUG] [Thread-65950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:54:18.496 [DEBUG] [Thread-65950] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:54:18.497 [DEBUG] [Thread-65950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:54:18.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:54:18.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:54:18.552 [DEBUG] [Thread-65950] [transport.py] [_log()] userauth is OK
2025-11-18T02:54:18.552 [DEBUG] [Thread-65950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:54:18.552 [DEBUG] [Thread-65950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:54:18.553 [DEBUG] [Thread-65950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:54:18.553 [DEBUG] [Thread-65950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:54:18.571 [INFO] [Thread-65950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:54:18.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:54:18.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:54:19.427 [DEBUG] [Thread-65950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:54:19.427 [DEBUG] [Thread-65950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:54:19.475 [DEBUG] [Thread-65950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:54:19.476 [DEBUG] [Thread-65950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:54:19.484 [DEBUG] [Thread-65950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:54:19.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:54: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')
2025-11-18T02:54:19.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:54:19.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:54:19.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:54:19.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:54:19.518 [DEBUG] [Thread-65950] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:54:23.210 [DEBUG] [Thread-65952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:54:38.249 [DEBUG] [Thread-65953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:54:49.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:54:49.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:54:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:54:50.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 54, 21), 9.05, 53.82, 0.0, 18.49, 11.89, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:54:50.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:54:21
2025-11-18T02:54:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:54:50.446 [DEBUG] [Thread-65954] [transport.py] [_log()] starting thread (client mode): 0xd0795ed0
2025-11-18T02:54:50.446 [DEBUG] [Thread-65954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:54:50.466 [DEBUG] [Thread-65954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:54:50.466 [INFO] [Thread-65954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:54:50.469 [DEBUG] [Thread-65954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] client lang: <none>
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] server lang: <none>
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] kex follows: False
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] Compression: none
2025-11-18T02:54:50.470 [DEBUG] [Thread-65954] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:54:50.486 [DEBUG] [Thread-65954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:54:50.486 [DEBUG] [Thread-65954] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:54:50.487 [DEBUG] [Thread-65954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:54:50.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:54:50.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:54:50.487 [DEBUG] [Thread-65954] [transport.py] [_log()] userauth is OK
2025-11-18T02:54:50.487 [DEBUG] [Thread-65954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:54:50.488 [DEBUG] [Thread-65954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:54:50.488 [DEBUG] [Thread-65954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:54:50.488 [DEBUG] [Thread-65954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:54:50.512 [INFO] [Thread-65954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:54:50.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:54:51.157 [DEBUG] [Thread-65954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:54:51.157 [DEBUG] [Thread-65954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:54:51.157 [DEBUG] [Thread-65954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:54:51.198 [DEBUG] [Thread-65954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:54:51.198 [DEBUG] [Thread-65954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:54:51.201 [DEBUG] [Thread-65954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:54:51.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:54:51.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:54:51.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:54:51.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:54:51.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:54:51.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:54:51.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:54:51.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:54:51.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:54:51.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.037599 -999.00  +12.10  11.04     57   +3.90 1 1 1 1 1     0    0 7.65 -21.23 ZNESW 12.2 11.0 159.2 16.3 12.4 -23.4 12.3 -22.4 12.1 -22.0 12.4 -23.0
2025-11-18T02:54:51.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:54:51.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:54:51.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.037599
2025-11-18T02:54:51.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:54:51.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:54:51.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:54:51.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:54:51.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:54:51.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:54:21', tmtdew=9.05, humidity=53.82, cloud=0.0, wind=18.49, temperature=11.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:54:21', seeing=1.29, atlas_timestamp='2025-11-18T00:54:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:51:00')
2025-11-18T02:54:51.226 [DEBUG] [Thread-65954] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:54:51.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:54:51.325 [DEBUG] [Thread-65957] [transport.py] [_log()] starting thread (client mode): 0xd0796740
2025-11-18T02:54:51.325 [DEBUG] [Thread-65957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:54:51.341 [DEBUG] [Thread-65957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:54:51.341 [INFO] [Thread-65957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:54:51.348 [DEBUG] [Thread-65957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:54:51.348 [DEBUG] [Thread-65957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:54:51.348 [DEBUG] [Thread-65957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:54:51.348 [DEBUG] [Thread-65957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:54:51.348 [DEBUG] [Thread-65957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:54:51.348 [DEBUG] [Thread-65957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] client lang: <none>
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] server lang: <none>
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] kex follows: False
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] Compression: none
2025-11-18T02:54:51.349 [DEBUG] [Thread-65957] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:54:51.412 [DEBUG] [Thread-65957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:54:51.412 [DEBUG] [Thread-65957] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:54:51.413 [DEBUG] [Thread-65957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:54:51.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:54:51.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:54:51.468 [DEBUG] [Thread-65957] [transport.py] [_log()] userauth is OK
2025-11-18T02:54:51.468 [DEBUG] [Thread-65957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:54:51.469 [DEBUG] [Thread-65957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:54:51.469 [DEBUG] [Thread-65957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:54:51.469 [DEBUG] [Thread-65957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:54:51.488 [INFO] [Thread-65957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:54:51.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:54:51.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:54:52.315 [DEBUG] [Thread-65957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:54:52.315 [DEBUG] [Thread-65957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:54:52.362 [DEBUG] [Thread-65957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:54:52.363 [DEBUG] [Thread-65957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:54:52.371 [DEBUG] [Thread-65957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:54:52.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:54:52.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:54:52.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:54:52.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:54:52.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:54:52.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:54:52.409 [DEBUG] [Thread-65957] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:54:53.275 [DEBUG] [Thread-65959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:54:56.603 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:54:56.604 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:55:04.606 [DEBUG] [Thread-65960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:55:08.310 [DEBUG] [Thread-65961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:55:22.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:55:22.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:55:22.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:55:23.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 54, 53), 9.04, 54.06, 0.0, 18.92, 11.87, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:55:23.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:54:53
2025-11-18T02:55:23.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:55:23.339 [DEBUG] [Thread-65962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:55:23.354 [DEBUG] [Thread-65963] [transport.py] [_log()] starting thread (client mode): 0xd31509d0
2025-11-18T02:55:23.354 [DEBUG] [Thread-65963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:55:23.375 [DEBUG] [Thread-65963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:55:23.375 [INFO] [Thread-65963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:55:23.378 [DEBUG] [Thread-65963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:55:23.378 [DEBUG] [Thread-65963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] client lang: <none>
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] server lang: <none>
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] kex follows: False
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:55:23.379 [DEBUG] [Thread-65963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:55:23.380 [DEBUG] [Thread-65963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:55:23.380 [DEBUG] [Thread-65963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:55:23.380 [DEBUG] [Thread-65963] [transport.py] [_log()] Compression: none
2025-11-18T02:55:23.380 [DEBUG] [Thread-65963] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:55:23.397 [DEBUG] [Thread-65963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:55:23.397 [DEBUG] [Thread-65963] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:55:23.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:55:23.398 [DEBUG] [Thread-65963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:55:23.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:55:23.400 [DEBUG] [Thread-65963] [transport.py] [_log()] userauth is OK
2025-11-18T02:55:23.400 [DEBUG] [Thread-65963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:55:23.400 [DEBUG] [Thread-65963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:55:23.400 [DEBUG] [Thread-65963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:55:23.400 [DEBUG] [Thread-65963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:55:23.424 [INFO] [Thread-65963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:55:23.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:55:24.060 [DEBUG] [Thread-65963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:55:24.060 [DEBUG] [Thread-65963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:55:24.060 [DEBUG] [Thread-65963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:55:24.101 [DEBUG] [Thread-65963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:55:24.101 [DEBUG] [Thread-65963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:55:24.104 [DEBUG] [Thread-65963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:55:24.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:55:24.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:55:24.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:55:24.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:55:24.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:55:24.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:55:24.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:55:24.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:55:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:55:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.037946 -999.00  +12.10  12.66     58   +4.10 1 1 1 1 1     0    0 7.63 -21.46 ZNESW 15.5 12.7 158.4 18.1 12.4 -23.4 12.3 -22.4 12.1 -21.9 12.4 -23.0
2025-11-18T02:55:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:55:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:55:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.037946
2025-11-18T02:55:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:55:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:55:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:55:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:55:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:55:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:54:53', tmtdew=9.04, humidity=54.06, cloud=0.0, wind=18.92, temperature=11.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:54:53', seeing=1.16, atlas_timestamp='2025-11-18T00:54:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:51:00')
2025-11-18T02:55:24.130 [DEBUG] [Thread-65963] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:55:24.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:55:24.229 [DEBUG] [Thread-65966] [transport.py] [_log()] starting thread (client mode): 0xd07af0d0
2025-11-18T02:55:24.229 [DEBUG] [Thread-65966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:55:24.244 [DEBUG] [Thread-65966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:55:24.244 [INFO] [Thread-65966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:55:24.252 [DEBUG] [Thread-65966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:55:24.252 [DEBUG] [Thread-65966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] client lang: <none>
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] server lang: <none>
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] kex follows: False
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:55:24.253 [DEBUG] [Thread-65966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:55:24.254 [DEBUG] [Thread-65966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:55:24.254 [DEBUG] [Thread-65966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:55:24.254 [DEBUG] [Thread-65966] [transport.py] [_log()] Compression: none
2025-11-18T02:55:24.254 [DEBUG] [Thread-65966] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:55:24.311 [DEBUG] [Thread-65966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:55:24.311 [DEBUG] [Thread-65966] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:55:24.312 [DEBUG] [Thread-65966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:55:24.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:55:24.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:55:24.368 [DEBUG] [Thread-65966] [transport.py] [_log()] userauth is OK
2025-11-18T02:55:24.369 [DEBUG] [Thread-65966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:55:24.369 [DEBUG] [Thread-65966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:55:24.369 [DEBUG] [Thread-65966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:55:24.369 [DEBUG] [Thread-65966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:55:24.388 [INFO] [Thread-65966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:55:24.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:55:24.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:55:25.246 [DEBUG] [Thread-65966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:55:25.246 [DEBUG] [Thread-65966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:55:25.294 [DEBUG] [Thread-65966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:55:25.294 [DEBUG] [Thread-65966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:55:25.303 [DEBUG] [Thread-65966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:55:25.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:55:25.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:55:25.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:55:25.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:55:25.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:55:25.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:55:25.335 [DEBUG] [Thread-65966] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:55:38.366 [DEBUG] [Thread-65968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:55:53.405 [DEBUG] [Thread-65969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:55:55.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:55:55.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:55:55.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:55:56.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 55, 25), 9.02, 54.16, 0.0, 19.11, 11.89, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:55:56.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:55:25
2025-11-18T02:55:56.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:55:56.344 [DEBUG] [Thread-65970] [transport.py] [_log()] starting thread (client mode): 0xd317faf0
2025-11-18T02:55:56.344 [DEBUG] [Thread-65970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:55:56.365 [DEBUG] [Thread-65970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:55:56.365 [INFO] [Thread-65970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] client lang: <none>
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] server lang: <none>
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] kex follows: False
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] Compression: none
2025-11-18T02:55:56.369 [DEBUG] [Thread-65970] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:55:56.384 [DEBUG] [Thread-65970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:55:56.384 [DEBUG] [Thread-65970] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:55:56.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:55:56.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:55:56.385 [DEBUG] [Thread-65970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:55:56.385 [DEBUG] [Thread-65970] [transport.py] [_log()] userauth is OK
2025-11-18T02:55:56.385 [DEBUG] [Thread-65970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:55:56.385 [DEBUG] [Thread-65970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:55:56.385 [DEBUG] [Thread-65970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:55:56.385 [DEBUG] [Thread-65970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:55:56.414 [INFO] [Thread-65970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:55:56.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:55:56.804 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:55:56.805 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:55:57.057 [DEBUG] [Thread-65970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:55:57.057 [DEBUG] [Thread-65970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:55:57.057 [DEBUG] [Thread-65970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:55:57.098 [DEBUG] [Thread-65970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:55:57.098 [DEBUG] [Thread-65970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:55:57.100 [DEBUG] [Thread-65970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:55:57.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:55:57.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:55:57.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:55:57.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:55:57.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:55:57.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:55:57.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:55:57.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.038583 -999.00  +12.10  10.85     57   +4.00 1 1 1 1 1     0    0 7.67 -24.64 ZNESW 13.4 10.8 146.8 18.0 12.4 -23.3 12.3 -22.4 12.1 -22.0 12.4 -22.6
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.038583
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:55:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:55:25', tmtdew=9.02, humidity=54.16, cloud=0.0, wind=19.11, temperature=11.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:55:25', seeing=1.16, atlas_timestamp='2025-11-18T00:55:33.571', atlas_cloud=1, atlas_rain=1, zp_data=[0.03074999999999939, 0.007749999999999702, 0.058750000000001634, -0.002500000000001279, 0.03449999999999953, 0.03575000000000017, 0.018499999999999517, 0.011250000000000426, 0.04949999999999832, 0.022999999999999687, 0.05274999999999963, 0.061500000000000554, 0.12199999999999989, 0.062249999999998806, -0.006000000000000227, 0.0019999999999988916, 0.031749999999998835, 0.09800000000000075, 0.09399999999999942, 0.10125000000000028, 0.09899999999999842, 0.08874999999999922, 0.05825000000000102, 0.007749999999999702, 0.067499999999999, 0.1645000000000003, 0.11074999999999946, 0.20250000000000057, 0.1039999999999992, 0.0470000000000006, 0.0519999999999996, 0.036000000000001364, 0.05874999999999986], zp_timestamp='2025-11-18T00:51:00')
2025-11-18T02:55:57.119 [DEBUG] [Thread-65970] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:55:57.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:55:57.204 [DEBUG] [Thread-65973] [transport.py] [_log()] starting thread (client mode): 0xd317e530
2025-11-18T02:55:57.204 [DEBUG] [Thread-65973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:55:57.222 [DEBUG] [Thread-65973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:55:57.222 [INFO] [Thread-65973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] client lang: <none>
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] server lang: <none>
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] kex follows: False
2025-11-18T02:55:57.230 [DEBUG] [Thread-65973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:55:57.231 [DEBUG] [Thread-65973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:55:57.231 [DEBUG] [Thread-65973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:55:57.231 [DEBUG] [Thread-65973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:55:57.231 [DEBUG] [Thread-65973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:55:57.231 [DEBUG] [Thread-65973] [transport.py] [_log()] Compression: none
2025-11-18T02:55:57.231 [DEBUG] [Thread-65973] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:55:57.287 [DEBUG] [Thread-65973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:55:57.288 [DEBUG] [Thread-65973] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:55:57.288 [DEBUG] [Thread-65973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:55:57.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:55:57.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:55:57.344 [DEBUG] [Thread-65973] [transport.py] [_log()] userauth is OK
2025-11-18T02:55:57.344 [DEBUG] [Thread-65973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:55:57.344 [DEBUG] [Thread-65973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:55:57.344 [DEBUG] [Thread-65973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:55:57.344 [DEBUG] [Thread-65973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:55:57.359 [INFO] [Thread-65973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:55:57.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:55:57.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:55:58.246 [DEBUG] [Thread-65973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:55:58.246 [DEBUG] [Thread-65973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:55:58.294 [DEBUG] [Thread-65973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:55:58.294 [DEBUG] [Thread-65973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:55:58.303 [DEBUG] [Thread-65973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:55:58.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:55:58.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:55:58.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:55:58.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:55:58.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:55:58.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:55:58.334 [DEBUG] [Thread-65973] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:56:04.687 [DEBUG] [Thread-65975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:56:08.433 [DEBUG] [Thread-65976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:56:23.474 [DEBUG] [Thread-65977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:56:28.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:56:28.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:56:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:56:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 55, 57), 8.98, 54.11, 0.0, 16.23, 11.95, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:56:29.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:55:57
2025-11-18T02:56:29.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:56:29.280 [DEBUG] [Thread-65978] [transport.py] [_log()] starting thread (client mode): 0xd07a91e0
2025-11-18T02:56:29.280 [DEBUG] [Thread-65978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:56:29.300 [DEBUG] [Thread-65978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:56:29.300 [INFO] [Thread-65978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:56:29.303 [DEBUG] [Thread-65978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:56:29.303 [DEBUG] [Thread-65978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:56:29.303 [DEBUG] [Thread-65978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:56:29.303 [DEBUG] [Thread-65978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:56:29.303 [DEBUG] [Thread-65978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] client lang: <none>
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] server lang: <none>
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] kex follows: False
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] Compression: none
2025-11-18T02:56:29.304 [DEBUG] [Thread-65978] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:56:29.323 [DEBUG] [Thread-65978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:56:29.323 [DEBUG] [Thread-65978] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:56:29.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:56:29.324 [DEBUG] [Thread-65978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:56:29.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:56:29.326 [DEBUG] [Thread-65978] [transport.py] [_log()] userauth is OK
2025-11-18T02:56:29.326 [DEBUG] [Thread-65978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:56:29.326 [DEBUG] [Thread-65978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:56:29.327 [DEBUG] [Thread-65978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:56:29.327 [DEBUG] [Thread-65978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:56:29.344 [INFO] [Thread-65978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:56:29.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:56:29.983 [DEBUG] [Thread-65978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:56:29.983 [DEBUG] [Thread-65978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:56:29.983 [DEBUG] [Thread-65978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:56:30.024 [DEBUG] [Thread-65978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:56:30.024 [DEBUG] [Thread-65978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:56:30.026 [DEBUG] [Thread-65978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:56:30.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:56:30.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:56:30.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:56:30.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:56:30.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:56:30.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:56:30.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.038987 -999.00  +12.10  11.57     57   +4.00 1 1 1 1 1     0    0 7.55 -24.61 ZNESW 11.8 11.6 145.6 15.2 12.4 -23.4 12.3 -22.5 12.1 -22.1 12.4 -22.9
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.038987
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:56:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:55:57', tmtdew=8.98, humidity=54.11, cloud=0.0, wind=16.23, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:55:57', seeing=2.12, atlas_timestamp='2025-11-18T00:56:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:54:00')
2025-11-18T02:56:30.045 [DEBUG] [Thread-65978] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:56:30.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:56:30.130 [DEBUG] [Thread-65981] [transport.py] [_log()] starting thread (client mode): 0xd3161c60
2025-11-18T02:56:30.130 [DEBUG] [Thread-65981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:56:30.146 [DEBUG] [Thread-65981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:56:30.146 [INFO] [Thread-65981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] client lang: <none>
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] server lang: <none>
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] kex follows: False
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] Compression: none
2025-11-18T02:56:30.154 [DEBUG] [Thread-65981] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:56:30.212 [DEBUG] [Thread-65981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:56:30.212 [DEBUG] [Thread-65981] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:56:30.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:56:30.212 [DEBUG] [Thread-65981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:56:30.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:56:30.268 [DEBUG] [Thread-65981] [transport.py] [_log()] userauth is OK
2025-11-18T02:56:30.269 [DEBUG] [Thread-65981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:56:30.269 [DEBUG] [Thread-65981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:56:30.269 [DEBUG] [Thread-65981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:56:30.269 [DEBUG] [Thread-65981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:56:30.283 [INFO] [Thread-65981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:56:30.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:56:30.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:56:31.080 [DEBUG] [Thread-65981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:56:31.080 [DEBUG] [Thread-65981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:56:31.128 [DEBUG] [Thread-65981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:56:31.128 [DEBUG] [Thread-65981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:56:31.136 [DEBUG] [Thread-65981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:56:31.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:56: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')
2025-11-18T02:56:31.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:56:31.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:56:31.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:56:31.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:56:31.167 [DEBUG] [Thread-65981] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:56:38.503 [DEBUG] [Thread-65983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:56:53.544 [DEBUG] [Thread-65984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:56:57.008 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:56:57.009 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:57:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:57:01.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:57:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:57:01.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 56, 29), 9.02, 53.96, 0.0, 17.12, 11.95, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:57:01.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:56:29
2025-11-18T02:57:02.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:57:02.200 [DEBUG] [Thread-65985] [transport.py] [_log()] starting thread (client mode): 0xd07a3dc0
2025-11-18T02:57:02.200 [DEBUG] [Thread-65985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:57:02.220 [DEBUG] [Thread-65985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:57:02.220 [INFO] [Thread-65985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:57:02.223 [DEBUG] [Thread-65985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] client lang: <none>
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] server lang: <none>
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] kex follows: False
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] Compression: none
2025-11-18T02:57:02.224 [DEBUG] [Thread-65985] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:57:02.237 [DEBUG] [Thread-65985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:57:02.237 [DEBUG] [Thread-65985] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:57:02.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:57:02.238 [DEBUG] [Thread-65985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:57:02.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:57:02.239 [DEBUG] [Thread-65985] [transport.py] [_log()] userauth is OK
2025-11-18T02:57:02.239 [DEBUG] [Thread-65985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:57:02.239 [DEBUG] [Thread-65985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:57:02.239 [DEBUG] [Thread-65985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:57:02.239 [DEBUG] [Thread-65985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:57:02.248 [INFO] [Thread-65985] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:57:02.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:57:02.860 [DEBUG] [Thread-65985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:57:02.860 [DEBUG] [Thread-65985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:57:02.860 [DEBUG] [Thread-65985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:57:02.901 [DEBUG] [Thread-65985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:57:02.901 [DEBUG] [Thread-65985] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:57:02.903 [DEBUG] [Thread-65985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:57:02.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:57:02.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:57:02.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:57:02.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:57:02.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:57:02.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:57:02.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:57:02.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:57:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:57:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.039335 -999.00  +12.10  13.45     57   +3.90 1 1 1 1 1     0    0 7.49 -26.71 ZNESW 11.9 13.4 153.2 18.2 12.4 -23.4 12.3 -22.5 12.1 -22.1 12.4 -22.9
2025-11-18T02:57:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:57:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:57:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.039335
2025-11-18T02:57:02.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:57:02.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:57:02.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:57:02.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:57:02.922 [DEBUG] [Thread-65985] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:57:02.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:57:02.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:56:29', tmtdew=9.02, humidity=53.96, cloud=0.0, wind=17.12, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:56:29', seeing=1.38, atlas_timestamp='2025-11-18T00:56:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:54:00')
2025-11-18T02:57:02.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:57:03.012 [DEBUG] [Thread-65988] [transport.py] [_log()] starting thread (client mode): 0xd31501c0
2025-11-18T02:57:03.012 [DEBUG] [Thread-65988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:57:03.027 [DEBUG] [Thread-65988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:57:03.027 [INFO] [Thread-65988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] client lang: <none>
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] server lang: <none>
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] kex follows: False
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:57:03.034 [DEBUG] [Thread-65988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:57:03.035 [DEBUG] [Thread-65988] [transport.py] [_log()] Compression: none
2025-11-18T02:57:03.035 [DEBUG] [Thread-65988] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:57:03.095 [DEBUG] [Thread-65988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:57:03.096 [DEBUG] [Thread-65988] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:57:03.096 [DEBUG] [Thread-65988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:57:03.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:57:03.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:57:03.157 [DEBUG] [Thread-65988] [transport.py] [_log()] userauth is OK
2025-11-18T02:57:03.157 [DEBUG] [Thread-65988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:57:03.157 [DEBUG] [Thread-65988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:57:03.157 [DEBUG] [Thread-65988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:57:03.157 [DEBUG] [Thread-65988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:57:03.170 [INFO] [Thread-65988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:57:03.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:57:03.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:57:04.021 [DEBUG] [Thread-65988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:57:04.022 [DEBUG] [Thread-65988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:57:04.069 [DEBUG] [Thread-65988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:57:04.070 [DEBUG] [Thread-65988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:57:04.078 [DEBUG] [Thread-65988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:57:04.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:57:04.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:57:04.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:57:04.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:57:04.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:57:04.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:57:04.116 [DEBUG] [Thread-65988] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:57:04.743 [DEBUG] [Thread-65990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:57:08.578 [DEBUG] [Thread-65991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:57:23.615 [DEBUG] [Thread-65992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:57:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:57:34.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:57:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:57:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 57, 1), 9.07, 53.96, 0.0, 16.8, 11.97, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:57:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:57:01
2025-11-18T02:57:34.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:57:35.119 [DEBUG] [Thread-65993] [transport.py] [_log()] starting thread (client mode): 0xd3152530
2025-11-18T02:57:35.119 [DEBUG] [Thread-65993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:57:35.137 [DEBUG] [Thread-65993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:57:35.137 [INFO] [Thread-65993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] client lang: <none>
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] server lang: <none>
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] kex follows: False
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:57:35.140 [DEBUG] [Thread-65993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:57:35.141 [DEBUG] [Thread-65993] [transport.py] [_log()] Compression: none
2025-11-18T02:57:35.141 [DEBUG] [Thread-65993] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:57:35.155 [DEBUG] [Thread-65993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:57:35.156 [DEBUG] [Thread-65993] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:57:35.156 [DEBUG] [Thread-65993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:57:35.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:57:35.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:57:35.157 [DEBUG] [Thread-65993] [transport.py] [_log()] userauth is OK
2025-11-18T02:57:35.157 [DEBUG] [Thread-65993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:57:35.157 [DEBUG] [Thread-65993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:57:35.157 [DEBUG] [Thread-65993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:57:35.157 [DEBUG] [Thread-65993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:57:35.165 [INFO] [Thread-65993] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:57:35.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:57:35.807 [DEBUG] [Thread-65993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:57:35.807 [DEBUG] [Thread-65993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:57:35.807 [DEBUG] [Thread-65993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:57:35.847 [DEBUG] [Thread-65993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:57:35.847 [DEBUG] [Thread-65993] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:57:35.849 [DEBUG] [Thread-65993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:57:35.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:57:35.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:57:35.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:57:35.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:57:35.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:57:35.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:57:35.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:57:35.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:57:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:57:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.039624 -999.00  +12.10  12.10     57   +3.90 1 1 1 1 1     0    0 7.45 -27.30 ZNESW 12.4 12.1 146.0 16.7 12.4 -23.3 12.3 -22.4 12.1 -22.0 12.4 -22.9
2025-11-18T02:57:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:57:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:57:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.039624
2025-11-18T02:57:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:57:35.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:57:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:57:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:57:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:57:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:57:01', tmtdew=9.07, humidity=53.96, cloud=0.0, wind=16.8, temperature=11.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:57:33', seeing=1.34, atlas_timestamp='2025-11-18T00:57:03.514', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:54:00')
2025-11-18T02:57:35.868 [DEBUG] [Thread-65993] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:57:35.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:57:35.953 [DEBUG] [Thread-65996] [transport.py] [_log()] starting thread (client mode): 0xd317d810
2025-11-18T02:57:35.953 [DEBUG] [Thread-65996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:57:35.971 [DEBUG] [Thread-65996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:57:35.972 [INFO] [Thread-65996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:57:35.981 [DEBUG] [Thread-65996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:57:35.981 [DEBUG] [Thread-65996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:57:35.981 [DEBUG] [Thread-65996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:57:35.981 [DEBUG] [Thread-65996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:57:35.981 [DEBUG] [Thread-65996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:57:35.981 [DEBUG] [Thread-65996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:57:35.981 [DEBUG] [Thread-65996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] client lang: <none>
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] server lang: <none>
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] kex follows: False
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] Compression: none
2025-11-18T02:57:35.982 [DEBUG] [Thread-65996] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:57:36.037 [DEBUG] [Thread-65996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:57:36.037 [DEBUG] [Thread-65996] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:57:36.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:57:36.038 [DEBUG] [Thread-65996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:57:36.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:57:36.097 [DEBUG] [Thread-65996] [transport.py] [_log()] userauth is OK
2025-11-18T02:57:36.097 [DEBUG] [Thread-65996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:57:36.097 [DEBUG] [Thread-65996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:57:36.097 [DEBUG] [Thread-65996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:57:36.097 [DEBUG] [Thread-65996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:57:36.117 [INFO] [Thread-65996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:57:36.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:57:36.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:57:36.997 [DEBUG] [Thread-65996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:57:36.997 [DEBUG] [Thread-65996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:57:37.045 [DEBUG] [Thread-65996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:57:37.046 [DEBUG] [Thread-65996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:57:37.054 [DEBUG] [Thread-65996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:57:37.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:57:37.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:57:37.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:57:37.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:57:37.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:57:37.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:57:37.089 [DEBUG] [Thread-65996] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:57:38.644 [DEBUG] [Thread-65998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:57:53.684 [DEBUG] [Thread-65999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:57:57.212 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:57:57.214 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:58:04.799 [DEBUG] [Thread-66000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:58:07.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:58:07.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:58:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:58:07.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 57, 33), 9.07, 53.94, 0.0, 17.8, 11.95, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:58:07.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:57:33
2025-11-18T02:58:07.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:58:08.060 [DEBUG] [Thread-66001] [transport.py] [_log()] starting thread (client mode): 0xd31521d0
2025-11-18T02:58:08.061 [DEBUG] [Thread-66001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:58:08.081 [DEBUG] [Thread-66001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:58:08.081 [INFO] [Thread-66001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] client lang: <none>
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] server lang: <none>
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] kex follows: False
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:58:08.084 [DEBUG] [Thread-66001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:58:08.085 [DEBUG] [Thread-66001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:58:08.085 [DEBUG] [Thread-66001] [transport.py] [_log()] Compression: none
2025-11-18T02:58:08.085 [DEBUG] [Thread-66001] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:58:08.100 [DEBUG] [Thread-66001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:58:08.100 [DEBUG] [Thread-66001] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:58:08.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:58:08.101 [DEBUG] [Thread-66001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:58:08.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:58:08.102 [DEBUG] [Thread-66001] [transport.py] [_log()] userauth is OK
2025-11-18T02:58:08.102 [DEBUG] [Thread-66001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:58:08.102 [DEBUG] [Thread-66001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:58:08.102 [DEBUG] [Thread-66001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:58:08.102 [DEBUG] [Thread-66001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:58:08.116 [INFO] [Thread-66001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:58:08.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:58:08.698 [DEBUG] [Thread-66001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:58:08.698 [DEBUG] [Thread-66001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:58:08.699 [DEBUG] [Thread-66001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:58:08.711 [DEBUG] [Thread-66003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:58:08.739 [DEBUG] [Thread-66001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:58:08.740 [DEBUG] [Thread-66001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:58:08.742 [DEBUG] [Thread-66001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:58:08.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:58:08.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:58:08.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:58:08.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:58:08.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:58:08.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:58:08.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:58:08.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:58:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:58:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.039972 -999.00  +12.00  13.38     57   +4.00 1 1 1 1 1     0    0 7.50 -25.31 ZNESW 16.4 13.4 144.0 19.2 12.4 -23.3 12.3 -22.4 12.1 -22.1 12.4 -23.0
2025-11-18T02:58:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:58:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:58:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.039972
2025-11-18T02:58:08.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:58:08.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:58:08.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:58:08.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:58:08.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:58:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:57:33', tmtdew=9.07, humidity=53.94, cloud=0.0, wind=17.8, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:58:05', seeing=1.29, atlas_timestamp='2025-11-18T00:57:33.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:54:00')
2025-11-18T02:58:08.768 [DEBUG] [Thread-66001] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:58:08.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:58:08.862 [DEBUG] [Thread-66005] [transport.py] [_log()] starting thread (client mode): 0xd07d9840
2025-11-18T02:58:08.862 [DEBUG] [Thread-66005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:58:08.877 [DEBUG] [Thread-66005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:58:08.877 [INFO] [Thread-66005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:58:08.885 [DEBUG] [Thread-66005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:58:08.885 [DEBUG] [Thread-66005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:58:08.885 [DEBUG] [Thread-66005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:58:08.885 [DEBUG] [Thread-66005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:58:08.885 [DEBUG] [Thread-66005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:58:08.885 [DEBUG] [Thread-66005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:58:08.885 [DEBUG] [Thread-66005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] client lang: <none>
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] server lang: <none>
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] kex follows: False
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:58:08.886 [DEBUG] [Thread-66005] [transport.py] [_log()] Compression: none
2025-11-18T02:58:08.887 [DEBUG] [Thread-66005] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:58:08.945 [DEBUG] [Thread-66005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:58:08.946 [DEBUG] [Thread-66005] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:58:08.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:58:08.947 [DEBUG] [Thread-66005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:58:08.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:58:09.001 [DEBUG] [Thread-66005] [transport.py] [_log()] userauth is OK
2025-11-18T02:58:09.001 [DEBUG] [Thread-66005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:58:09.002 [DEBUG] [Thread-66005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:58:09.002 [DEBUG] [Thread-66005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:58:09.002 [DEBUG] [Thread-66005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:58:09.027 [INFO] [Thread-66005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:58:09.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:58:09.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:58:09.865 [DEBUG] [Thread-66005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:58:09.865 [DEBUG] [Thread-66005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:58:09.914 [DEBUG] [Thread-66005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:58:09.914 [DEBUG] [Thread-66005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:58:09.922 [DEBUG] [Thread-66005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:58:09.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:58:09.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:58:09.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:58:09.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:58:09.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:58:09.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:58:09.956 [DEBUG] [Thread-66005] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:58:23.740 [DEBUG] [Thread-66007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:58:38.784 [DEBUG] [Thread-66008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:58:39.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:58:39.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:58:39.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:58:40.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 58, 37), 8.93, 54.12, 0.0, 20.82, 11.89, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:58:40.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:58:37
2025-11-18T02:58:40.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:58:40.902 [DEBUG] [Thread-66009] [transport.py] [_log()] starting thread (client mode): 0xd07da200
2025-11-18T02:58:40.902 [DEBUG] [Thread-66009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:58:40.921 [DEBUG] [Thread-66009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:58:40.922 [INFO] [Thread-66009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:58:40.924 [DEBUG] [Thread-66009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:58:40.924 [DEBUG] [Thread-66009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] client lang: <none>
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] server lang: <none>
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] kex follows: False
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] Compression: none
2025-11-18T02:58:40.925 [DEBUG] [Thread-66009] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:58:40.942 [DEBUG] [Thread-66009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:58:40.942 [DEBUG] [Thread-66009] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:58:40.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:58:40.943 [DEBUG] [Thread-66009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:58:40.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:58:40.945 [DEBUG] [Thread-66009] [transport.py] [_log()] userauth is OK
2025-11-18T02:58:40.946 [DEBUG] [Thread-66009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:58:40.946 [DEBUG] [Thread-66009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:58:40.946 [DEBUG] [Thread-66009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:58:40.946 [DEBUG] [Thread-66009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:58:40.961 [INFO] [Thread-66009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:58:40.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:58:41.591 [DEBUG] [Thread-66009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:58:41.592 [DEBUG] [Thread-66009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:58:41.592 [DEBUG] [Thread-66009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:58:41.633 [DEBUG] [Thread-66009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:58:41.633 [DEBUG] [Thread-66009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:58:41.638 [DEBUG] [Thread-66009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:58:41.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:58:41.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:58:41.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:58:41.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:58:41.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:58:41.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:58:41.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:58:41.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:58:41.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:58:41.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.039972 -999.00  +12.00  13.38     57   +4.00 1 1 1 1 1     0    0 7.50 -25.31 ZNESW 16.4 13.4 144.0 19.2 12.4 -23.3 12.3 -22.4 12.1 -22.1 12.4 -23.0
2025-11-18T02:58:41.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:58:41.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:58:41.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.039972
2025-11-18T02:58:41.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:58:41.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:58:41.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:58:41.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:58:41.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:58:41.667 [DEBUG] [Thread-66009] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:58:41.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:58:37', tmtdew=8.93, humidity=54.12, cloud=0.0, wind=20.82, temperature=11.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:58:37', seeing=1.21, atlas_timestamp='2025-11-18T00:57:33.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:54:00')
2025-11-18T02:58:41.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:58:41.762 [DEBUG] [Thread-66012] [transport.py] [_log()] starting thread (client mode): 0xd07a9c30
2025-11-18T02:58:41.762 [DEBUG] [Thread-66012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:58:41.777 [DEBUG] [Thread-66012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:58:41.777 [INFO] [Thread-66012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:58:41.785 [DEBUG] [Thread-66012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:58:41.785 [DEBUG] [Thread-66012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:58:41.785 [DEBUG] [Thread-66012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:58:41.785 [DEBUG] [Thread-66012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:58:41.785 [DEBUG] [Thread-66012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:58:41.785 [DEBUG] [Thread-66012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:58:41.786 [DEBUG] [Thread-66012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:58:41.786 [DEBUG] [Thread-66012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:58:41.786 [DEBUG] [Thread-66012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:58:41.786 [DEBUG] [Thread-66012] [transport.py] [_log()] client lang: <none>
2025-11-18T02:58:41.786 [DEBUG] [Thread-66012] [transport.py] [_log()] server lang: <none>
2025-11-18T02:58:41.786 [DEBUG] [Thread-66012] [transport.py] [_log()] kex follows: False
2025-11-18T02:58:41.786 [DEBUG] [Thread-66012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:58:41.786 [DEBUG] [Thread-66012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:58:41.787 [DEBUG] [Thread-66012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:58:41.787 [DEBUG] [Thread-66012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:58:41.787 [DEBUG] [Thread-66012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:58:41.787 [DEBUG] [Thread-66012] [transport.py] [_log()] Compression: none
2025-11-18T02:58:41.787 [DEBUG] [Thread-66012] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:58:41.841 [DEBUG] [Thread-66012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:58:41.842 [DEBUG] [Thread-66012] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:58:41.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:58:41.843 [DEBUG] [Thread-66012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:58:41.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:58:41.898 [DEBUG] [Thread-66012] [transport.py] [_log()] userauth is OK
2025-11-18T02:58:41.898 [DEBUG] [Thread-66012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:58:41.898 [DEBUG] [Thread-66012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:58:41.898 [DEBUG] [Thread-66012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:58:41.898 [DEBUG] [Thread-66012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:58:41.916 [INFO] [Thread-66012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:58:41.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:58:41.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:58:42.758 [DEBUG] [Thread-66012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:58:42.758 [DEBUG] [Thread-66012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:58:42.805 [DEBUG] [Thread-66012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:58:42.806 [DEBUG] [Thread-66012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:58:42.815 [DEBUG] [Thread-66012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:58:42.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:58:42.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:58:42.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
2025-11-18T02:58:42.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:58:42.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:58:42.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:58:42.849 [DEBUG] [Thread-66012] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:58:53.809 [DEBUG] [Thread-66014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:58:57.417 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:58:57.418 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:59:04.857 [DEBUG] [Thread-66015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:59:08.844 [DEBUG] [Thread-66016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:59:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:59:12.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:59:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:59:13.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 59, 9), 8.9, 54.22, 0.0, 20.1, 11.89, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:59:13.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:59:09
2025-11-18T02:59:13.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:59:13.807 [DEBUG] [Thread-66017] [transport.py] [_log()] starting thread (client mode): 0xd3162860
2025-11-18T02:59:13.808 [DEBUG] [Thread-66017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:59:13.822 [DEBUG] [Thread-66017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:59:13.822 [INFO] [Thread-66017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] client lang: <none>
2025-11-18T02:59:13.824 [DEBUG] [Thread-66017] [transport.py] [_log()] server lang: <none>
2025-11-18T02:59:13.825 [DEBUG] [Thread-66017] [transport.py] [_log()] kex follows: False
2025-11-18T02:59:13.825 [DEBUG] [Thread-66017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:59:13.825 [DEBUG] [Thread-66017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:59:13.825 [DEBUG] [Thread-66017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:59:13.825 [DEBUG] [Thread-66017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:59:13.825 [DEBUG] [Thread-66017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:59:13.825 [DEBUG] [Thread-66017] [transport.py] [_log()] Compression: none
2025-11-18T02:59:13.825 [DEBUG] [Thread-66017] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:59:13.837 [DEBUG] [Thread-66017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:59:13.838 [DEBUG] [Thread-66017] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:59:13.839 [DEBUG] [Thread-66017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:59:13.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:59:13.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:59:13.841 [DEBUG] [Thread-66017] [transport.py] [_log()] userauth is OK
2025-11-18T02:59:13.841 [DEBUG] [Thread-66017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:59:13.842 [DEBUG] [Thread-66017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:59:13.842 [DEBUG] [Thread-66017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:59:13.842 [DEBUG] [Thread-66017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:59:13.861 [INFO] [Thread-66017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:59:13.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:59:14.512 [DEBUG] [Thread-66017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:59:14.512 [DEBUG] [Thread-66017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:59:14.513 [DEBUG] [Thread-66017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:59:14.553 [DEBUG] [Thread-66017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:59:14.554 [DEBUG] [Thread-66017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:59:14.557 [DEBUG] [Thread-66017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:59:14.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:59:14.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:59:14.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:59:14.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:59:14.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:59:14.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:59:14.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:59:14.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:59:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:59:14.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.040723 -999.00  +12.00  14.63     58   +4.10 1 1 1 1 1     0    0 7.33 -27.98 ZNESW 13.5 14.6 146.4 20.3 12.4 -23.4 12.3 -22.4 12.1 -22.0 12.4 -22.8
2025-11-18T02:59:14.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:59:14.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:59:14.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.040723
2025-11-18T02:59:14.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:59:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:59:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:59:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:59:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:59:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:59:09', tmtdew=8.9, humidity=54.22, cloud=0.0, wind=20.1, temperature=11.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:59:09', seeing=1.21, atlas_timestamp='2025-11-18T00:58:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:54:00')
2025-11-18T02:59:14.581 [DEBUG] [Thread-66017] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:59:14.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:59:14.682 [DEBUG] [Thread-66020] [transport.py] [_log()] starting thread (client mode): 0xd0757c70
2025-11-18T02:59:14.682 [DEBUG] [Thread-66020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:59:14.699 [DEBUG] [Thread-66020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:59:14.699 [INFO] [Thread-66020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:59:14.706 [DEBUG] [Thread-66020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] client lang: <none>
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] server lang: <none>
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] kex follows: False
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:59:14.707 [DEBUG] [Thread-66020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:59:14.708 [DEBUG] [Thread-66020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:59:14.708 [DEBUG] [Thread-66020] [transport.py] [_log()] Compression: none
2025-11-18T02:59:14.708 [DEBUG] [Thread-66020] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:59:14.766 [DEBUG] [Thread-66020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:59:14.766 [DEBUG] [Thread-66020] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:59:14.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:59:14.767 [DEBUG] [Thread-66020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:59:14.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:59:14.825 [DEBUG] [Thread-66020] [transport.py] [_log()] userauth is OK
2025-11-18T02:59:14.825 [DEBUG] [Thread-66020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:59:14.825 [DEBUG] [Thread-66020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:59:14.825 [DEBUG] [Thread-66020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:59:14.825 [DEBUG] [Thread-66020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:59:14.844 [INFO] [Thread-66020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:59:14.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:59:14.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:59:15.684 [DEBUG] [Thread-66020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:59:15.684 [DEBUG] [Thread-66020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:59:15.736 [DEBUG] [Thread-66020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:59:15.736 [DEBUG] [Thread-66020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:59:15.749 [DEBUG] [Thread-66020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:59:15.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:59:15.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T02:59:15.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:59:15.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:59:15.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:59:15.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:59:15.796 [DEBUG] [Thread-66020] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:59:23.871 [DEBUG] [Thread-66022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:59:38.922 [DEBUG] [Thread-66023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:59:45.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T02:59:45.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T02:59:45.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T02:59:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 2, 59, 41), 9.0, 54.24, 0.0, 18.17, 12.0, 0, 0, 0, 2, 0, 0),)
2025-11-18T02:59:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 02:59:41
2025-11-18T02:59:46.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T02:59:46.791 [DEBUG] [Thread-66024] [transport.py] [_log()] starting thread (client mode): 0xd317ef20
2025-11-18T02:59:46.791 [DEBUG] [Thread-66024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:59:46.811 [DEBUG] [Thread-66024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T02:59:46.811 [INFO] [Thread-66024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T02:59:46.814 [DEBUG] [Thread-66024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:59:46.814 [DEBUG] [Thread-66024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T02:59:46.814 [DEBUG] [Thread-66024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:59:46.814 [DEBUG] [Thread-66024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:59:46.814 [DEBUG] [Thread-66024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] client lang: <none>
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] server lang: <none>
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] kex follows: False
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] Compression: none
2025-11-18T02:59:46.815 [DEBUG] [Thread-66024] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:59:46.831 [DEBUG] [Thread-66024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:59:46.831 [DEBUG] [Thread-66024] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:59:46.831 [DEBUG] [Thread-66024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T02:59:46.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T02:59:46.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:59:46.872 [DEBUG] [Thread-66024] [transport.py] [_log()] userauth is OK
2025-11-18T02:59:46.872 [DEBUG] [Thread-66024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:59:46.872 [DEBUG] [Thread-66024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:59:46.872 [DEBUG] [Thread-66024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T02:59:46.872 [DEBUG] [Thread-66024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:59:46.899 [INFO] [Thread-66024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:59:46.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:59:47.571 [DEBUG] [Thread-66024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:59:47.571 [DEBUG] [Thread-66024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:59:47.571 [DEBUG] [Thread-66024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T02:59:47.612 [DEBUG] [Thread-66024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:59:47.612 [DEBUG] [Thread-66024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:59:47.614 [DEBUG] [Thread-66024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:59:47.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:59:47.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T02:59:47.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T02:59:47.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T02:59:47.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:59:47.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T02:59:47.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.041071 -999.00  +12.10  13.74     58   +4.10 1 1 1 1 1     0    0 7.33 -29.33 ZNESW 13.5 13.7 149.6 20.6 12.4 -23.3 12.3 -22.5 12.1 -22.0 12.4 -22.8
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.041071
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T02:59:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T02:59:41', tmtdew=9.0, humidity=54.24, cloud=0.0, wind=18.17, temperature=12.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T02:59:41', seeing=1.22, atlas_timestamp='2025-11-18T00:59:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:58:00')
2025-11-18T02:59:47.633 [DEBUG] [Thread-66024] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:59:47.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T02:59:47.721 [DEBUG] [Thread-66027] [transport.py] [_log()] starting thread (client mode): 0xd07db1f0
2025-11-18T02:59:47.722 [DEBUG] [Thread-66027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T02:59:47.736 [DEBUG] [Thread-66027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T02:59:47.736 [INFO] [Thread-66027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T02:59:47.743 [DEBUG] [Thread-66027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T02:59:47.743 [DEBUG] [Thread-66027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] client lang: <none>
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] server lang: <none>
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] kex follows: False
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] Compression: none
2025-11-18T02:59:47.744 [DEBUG] [Thread-66027] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T02:59:47.804 [DEBUG] [Thread-66027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T02:59:47.804 [DEBUG] [Thread-66027] [transport.py] [_log()] Switch to new keys ...
2025-11-18T02:59:47.804 [DEBUG] [Thread-66027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T02:59:47.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T02:59:47.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T02:59:47.861 [DEBUG] [Thread-66027] [transport.py] [_log()] userauth is OK
2025-11-18T02:59:47.861 [DEBUG] [Thread-66027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T02:59:47.861 [DEBUG] [Thread-66027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T02:59:47.861 [DEBUG] [Thread-66027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T02:59:47.861 [DEBUG] [Thread-66027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T02:59:47.875 [INFO] [Thread-66027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T02:59:47.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T02:59:47.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T02:59:48.721 [DEBUG] [Thread-66027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T02:59:48.721 [DEBUG] [Thread-66027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T02:59:48.770 [DEBUG] [Thread-66027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T02:59:48.770 [DEBUG] [Thread-66027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T02:59:48.778 [DEBUG] [Thread-66027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T02:59:48.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T02:59: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')
2025-11-18T02:59:48.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T02:59:48.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T02:59:48.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T02:59:48.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T02:59:48.809 [DEBUG] [Thread-66027] [transport.py] [_log()] EOF in transport thread
2025-11-18T02:59:53.950 [DEBUG] [Thread-66029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:59:57.620 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T02:59:57.621 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:00:04.935 [DEBUG] [Thread-66030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:00:08.991 [DEBUG] [Thread-66031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:00:18.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:00:18.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:00:18.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:00:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 0, 13), 9.02, 54.14, 0.0, 16.64, 11.99, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:00:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:00:13
2025-11-18T03:00:19.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:00:19.760 [DEBUG] [Thread-66032] [transport.py] [_log()] starting thread (client mode): 0xd07a8a00
2025-11-18T03:00:19.760 [DEBUG] [Thread-66032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:00:19.780 [DEBUG] [Thread-66032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:00:19.780 [INFO] [Thread-66032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] client lang: <none>
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] server lang: <none>
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] kex follows: False
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] Compression: none
2025-11-18T03:00:19.783 [DEBUG] [Thread-66032] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:00:19.800 [DEBUG] [Thread-66032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:00:19.800 [DEBUG] [Thread-66032] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:00:19.801 [DEBUG] [Thread-66032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:00:19.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:00:19.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:00:19.803 [DEBUG] [Thread-66032] [transport.py] [_log()] userauth is OK
2025-11-18T03:00:19.803 [DEBUG] [Thread-66032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:00:19.803 [DEBUG] [Thread-66032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:00:19.803 [DEBUG] [Thread-66032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:00:19.803 [DEBUG] [Thread-66032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:00:19.827 [INFO] [Thread-66032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:00:19.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:00:20.507 [DEBUG] [Thread-66032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:00:20.507 [DEBUG] [Thread-66032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:00:20.507 [DEBUG] [Thread-66032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:00:20.548 [DEBUG] [Thread-66032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:00:20.548 [DEBUG] [Thread-66032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:00:20.551 [DEBUG] [Thread-66032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:00:20.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:00:20.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:00:20.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:00:20.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:00:20.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:00:20.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:00:20.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:00:20.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:00:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:00:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.041418 -999.00  +12.10  10.97     57   +4.00 1 1 1 1 1     0    0 7.32 -29.35 ZNESW 11.1 11.0 154.2 18.1 12.4 -23.3 12.3 -22.5 12.1 -22.0 12.4 -22.7
2025-11-18T03:00:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:00:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:00:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.041418
2025-11-18T03:00:20.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:00:20.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:00:20.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:00:20.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:00:20.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:00:20.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:00:13', tmtdew=9.02, humidity=54.14, cloud=0.0, wind=16.64, temperature=11.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:00:13', seeing=1.22, atlas_timestamp='2025-11-18T00:59:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:58:00')
2025-11-18T03:00:20.577 [DEBUG] [Thread-66032] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:00:20.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:00:20.671 [DEBUG] [Thread-66035] [transport.py] [_log()] starting thread (client mode): 0xd31ce530
2025-11-18T03:00:20.672 [DEBUG] [Thread-66035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:00:20.687 [DEBUG] [Thread-66035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:00:20.687 [INFO] [Thread-66035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:00:20.694 [DEBUG] [Thread-66035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] client lang: <none>
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] server lang: <none>
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] kex follows: False
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] Compression: none
2025-11-18T03:00:20.695 [DEBUG] [Thread-66035] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:00:20.757 [DEBUG] [Thread-66035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:00:20.757 [DEBUG] [Thread-66035] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:00:20.757 [DEBUG] [Thread-66035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:00:20.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:00:20.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:00:20.813 [DEBUG] [Thread-66035] [transport.py] [_log()] userauth is OK
2025-11-18T03:00:20.813 [DEBUG] [Thread-66035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:00:20.814 [DEBUG] [Thread-66035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:00:20.814 [DEBUG] [Thread-66035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:00:20.814 [DEBUG] [Thread-66035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:00:20.831 [INFO] [Thread-66035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:00:20.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:00:20.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:00:21.698 [DEBUG] [Thread-66035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:00:21.699 [DEBUG] [Thread-66035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:00:21.750 [DEBUG] [Thread-66035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:00:21.750 [DEBUG] [Thread-66035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:00:21.762 [DEBUG] [Thread-66035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:00:21.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:00:21.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:00:21.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:00:21.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:00:21.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:00:21.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:00:21.796 [DEBUG] [Thread-66035] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:00:24.016 [DEBUG] [Thread-66037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:00:39.048 [DEBUG] [Thread-66038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:00:51.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:00:51.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:00:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:00:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 0, 45), 9.01, 54.01, 0.0, 16.78, 11.89, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:00:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:00:45
2025-11-18T03:00:52.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:00:52.735 [DEBUG] [Thread-66039] [transport.py] [_log()] starting thread (client mode): 0xd317f4c0
2025-11-18T03:00:52.735 [DEBUG] [Thread-66039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:00:52.756 [DEBUG] [Thread-66039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:00:52.756 [INFO] [Thread-66039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:00:52.757 [DEBUG] [Thread-66039] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:00:52.757 [DEBUG] [Thread-66039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:00:52.757 [DEBUG] [Thread-66039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:00:52.757 [DEBUG] [Thread-66039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:00:52.757 [DEBUG] [Thread-66039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:00:52.757 [DEBUG] [Thread-66039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:00:52.757 [DEBUG] [Thread-66039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:00:52.757 [DEBUG] [Thread-66039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] client lang: <none>
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] server lang: <none>
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] kex follows: False
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] Compression: none
2025-11-18T03:00:52.758 [DEBUG] [Thread-66039] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:00:52.766 [DEBUG] [Thread-66039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:00:52.766 [DEBUG] [Thread-66039] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:00:52.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:00:52.767 [DEBUG] [Thread-66039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:00:52.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:00:52.768 [DEBUG] [Thread-66039] [transport.py] [_log()] userauth is OK
2025-11-18T03:00:52.768 [DEBUG] [Thread-66039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:00:52.768 [DEBUG] [Thread-66039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:00:52.768 [DEBUG] [Thread-66039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:00:52.768 [DEBUG] [Thread-66039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:00:52.788 [INFO] [Thread-66039] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:00:52.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:00:53.403 [DEBUG] [Thread-66039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:00:53.404 [DEBUG] [Thread-66039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:00:53.404 [DEBUG] [Thread-66039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:00:53.444 [DEBUG] [Thread-66039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:00:53.445 [DEBUG] [Thread-66039] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:00:53.447 [DEBUG] [Thread-66039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:00:53.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:00:53.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:00:53.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:00:53.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:00:53.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:00:53.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:00:53.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:00:53.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:00:53.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:00:53.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.041707 -999.00  +12.10  12.06     58   +4.00 1 1 1 1 1     0    0 7.29 -28.67 ZNESW 13.9 12.1 153.2 16.1 12.4 -23.5 12.2 -22.4 12.1 -22.0 12.4 -22.9
2025-11-18T03:00:53.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:00:53.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:00:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.041707
2025-11-18T03:00:53.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:00:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:00:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:00:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:00:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:00:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:00:45', tmtdew=9.01, humidity=54.01, cloud=0.0, wind=16.78, temperature=11.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:00:45', seeing=1.39, atlas_timestamp='2025-11-18T01:00:03.485', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:58:00')
2025-11-18T03:00:53.472 [DEBUG] [Thread-66039] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:00:53.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:00:53.570 [DEBUG] [Thread-66042] [transport.py] [_log()] starting thread (client mode): 0xd07db1f0
2025-11-18T03:00:53.570 [DEBUG] [Thread-66042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:00:53.584 [DEBUG] [Thread-66042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:00:53.584 [INFO] [Thread-66042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] client lang: <none>
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] server lang: <none>
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] kex follows: False
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:00:53.592 [DEBUG] [Thread-66042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:00:53.593 [DEBUG] [Thread-66042] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:00:53.593 [DEBUG] [Thread-66042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:00:53.593 [DEBUG] [Thread-66042] [transport.py] [_log()] Compression: none
2025-11-18T03:00:53.593 [DEBUG] [Thread-66042] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:00:53.649 [DEBUG] [Thread-66042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:00:53.649 [DEBUG] [Thread-66042] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:00:53.650 [DEBUG] [Thread-66042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:00:53.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:00:53.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:00:53.706 [DEBUG] [Thread-66042] [transport.py] [_log()] userauth is OK
2025-11-18T03:00:53.706 [DEBUG] [Thread-66042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:00:53.706 [DEBUG] [Thread-66042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:00:53.706 [DEBUG] [Thread-66042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:00:53.706 [DEBUG] [Thread-66042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:00:53.726 [INFO] [Thread-66042] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:00:53.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:00:53.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:00:54.078 [DEBUG] [Thread-66044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:00:54.545 [DEBUG] [Thread-66042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:00:54.546 [DEBUG] [Thread-66042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:00:54.594 [DEBUG] [Thread-66042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:00:54.594 [DEBUG] [Thread-66042] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:00:54.602 [DEBUG] [Thread-66042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:00:54.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:00:54.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:00:54.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:00:54.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:00:54.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:00:54.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:00:54.634 [DEBUG] [Thread-66042] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:00:57.825 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:00:57.826 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:03.982 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:05.012 [DEBUG] [Thread-66045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:09.127 [DEBUG] [Thread-66046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:11.591 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:15.664 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:24.160 [DEBUG] [Thread-66047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:24.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:01:24.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:01:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:01:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 1, 17), 8.96, 54.17, 0.0, 16.73, 11.9, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:01:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:01:17
2025-11-18T03:01:25.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:01:25.551 [DEBUG] [Thread-66048] [transport.py] [_log()] starting thread (client mode): 0xd0757400
2025-11-18T03:01:25.551 [DEBUG] [Thread-66048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:01:25.571 [DEBUG] [Thread-66048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:01:25.571 [INFO] [Thread-66048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:01:25.572 [DEBUG] [Thread-66048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:01:25.572 [DEBUG] [Thread-66048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:01:25.572 [DEBUG] [Thread-66048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:01:25.572 [DEBUG] [Thread-66048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] client lang: <none>
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] server lang: <none>
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] kex follows: False
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] Compression: none
2025-11-18T03:01:25.573 [DEBUG] [Thread-66048] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:01:25.590 [DEBUG] [Thread-66048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:01:25.590 [DEBUG] [Thread-66048] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:01:25.591 [DEBUG] [Thread-66048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:01:25.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:01:25.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:01:25.593 [DEBUG] [Thread-66048] [transport.py] [_log()] userauth is OK
2025-11-18T03:01:25.593 [DEBUG] [Thread-66048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:01:25.593 [DEBUG] [Thread-66048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:01:25.593 [DEBUG] [Thread-66048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:01:25.593 [DEBUG] [Thread-66048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:01:25.617 [INFO] [Thread-66048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:01:25.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:01:26.215 [DEBUG] [Thread-66048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:01:26.215 [DEBUG] [Thread-66048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:01:26.215 [DEBUG] [Thread-66048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:01:26.255 [DEBUG] [Thread-66048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:01:26.255 [DEBUG] [Thread-66048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:01:26.258 [DEBUG] [Thread-66048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:01:26.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:01:26.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:01:26.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:01:26.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:01:26.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:01:26.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:01:26.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:01:26.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:01:26.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:01:26.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.042055 -999.00  +12.10  10.34     58   +4.10 1 1 1 1 1     0    0 7.25 -27.76 ZNESW 11.5 10.3 155.2 17.9 12.4 -23.4 12.2 -22.4 12.1 -22.0 12.3 -22.9
2025-11-18T03:01:26.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:01:26.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:01:26.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.042055
2025-11-18T03:01:26.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:01:26.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:01:26.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:01:26.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:01:26.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:01:26.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:01:17', tmtdew=8.96, humidity=54.17, cloud=0.0, wind=16.73, temperature=11.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:01:17', seeing=1.1, atlas_timestamp='2025-11-18T01:00:33.552', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:58:00')
2025-11-18T03:01:26.282 [DEBUG] [Thread-66048] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:01:26.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:01:26.377 [DEBUG] [Thread-66051] [transport.py] [_log()] starting thread (client mode): 0xd07ae800
2025-11-18T03:01:26.377 [DEBUG] [Thread-66051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:01:26.392 [DEBUG] [Thread-66051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:01:26.392 [INFO] [Thread-66051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:01:26.400 [DEBUG] [Thread-66051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:01:26.400 [DEBUG] [Thread-66051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:01:26.400 [DEBUG] [Thread-66051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:01:26.400 [DEBUG] [Thread-66051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:01:26.400 [DEBUG] [Thread-66051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:01:26.400 [DEBUG] [Thread-66051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:01:26.400 [DEBUG] [Thread-66051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:01:26.401 [DEBUG] [Thread-66051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:01:26.401 [DEBUG] [Thread-66051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:01:26.401 [DEBUG] [Thread-66051] [transport.py] [_log()] client lang: <none>
2025-11-18T03:01:26.401 [DEBUG] [Thread-66051] [transport.py] [_log()] server lang: <none>
2025-11-18T03:01:26.401 [DEBUG] [Thread-66051] [transport.py] [_log()] kex follows: False
2025-11-18T03:01:26.401 [DEBUG] [Thread-66051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:01:26.401 [DEBUG] [Thread-66051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:01:26.401 [DEBUG] [Thread-66051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:01:26.402 [DEBUG] [Thread-66051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:01:26.402 [DEBUG] [Thread-66051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:01:26.402 [DEBUG] [Thread-66051] [transport.py] [_log()] Compression: none
2025-11-18T03:01:26.402 [DEBUG] [Thread-66051] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:01:26.458 [DEBUG] [Thread-66051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:01:26.459 [DEBUG] [Thread-66051] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:01:26.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:01:26.460 [DEBUG] [Thread-66051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:01:26.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:01:26.518 [DEBUG] [Thread-66051] [transport.py] [_log()] userauth is OK
2025-11-18T03:01:26.519 [DEBUG] [Thread-66051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:01:26.519 [DEBUG] [Thread-66051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:01:26.519 [DEBUG] [Thread-66051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:01:26.519 [DEBUG] [Thread-66051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:01:26.538 [INFO] [Thread-66051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:01:26.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:01:26.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:01:27.403 [DEBUG] [Thread-66051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:01:27.403 [DEBUG] [Thread-66051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:01:27.451 [DEBUG] [Thread-66051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:01:27.451 [DEBUG] [Thread-66051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:01:27.460 [DEBUG] [Thread-66051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:01:27.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:01:27.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:01:27.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:01:27.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:01:27.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:01:27.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:01:27.495 [DEBUG] [Thread-66051] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:01:39.194 [DEBUG] [Thread-66053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:54.235 [DEBUG] [Thread-66054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:57.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:01:57.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:01:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:01:58.037 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:58.038 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:01:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 1, 49), 8.81, 54.89, 0.0, 17.66, 11.95, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:01:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:01:49
2025-11-18T03:01:58.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:01:58.422 [DEBUG] [Thread-66055] [transport.py] [_log()] starting thread (client mode): 0xd07ae4d0
2025-11-18T03:01:58.423 [DEBUG] [Thread-66055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:01:58.433 [DEBUG] [Thread-66055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:01:58.433 [INFO] [Thread-66055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] client lang: <none>
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] server lang: <none>
2025-11-18T03:01:58.436 [DEBUG] [Thread-66055] [transport.py] [_log()] kex follows: False
2025-11-18T03:01:58.437 [DEBUG] [Thread-66055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:01:58.437 [DEBUG] [Thread-66055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:01:58.437 [DEBUG] [Thread-66055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:01:58.437 [DEBUG] [Thread-66055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:01:58.437 [DEBUG] [Thread-66055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:01:58.437 [DEBUG] [Thread-66055] [transport.py] [_log()] Compression: none
2025-11-18T03:01:58.437 [DEBUG] [Thread-66055] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:01:58.445 [DEBUG] [Thread-66055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:01:58.446 [DEBUG] [Thread-66055] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:01:58.446 [DEBUG] [Thread-66055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:01:58.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:01:58.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:01:58.447 [DEBUG] [Thread-66055] [transport.py] [_log()] userauth is OK
2025-11-18T03:01:58.447 [DEBUG] [Thread-66055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:01:58.447 [DEBUG] [Thread-66055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:01:58.447 [DEBUG] [Thread-66055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:01:58.447 [DEBUG] [Thread-66055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:01:58.469 [INFO] [Thread-66055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:01:58.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:01:59.176 [DEBUG] [Thread-66055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:01:59.176 [DEBUG] [Thread-66055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:01:59.176 [DEBUG] [Thread-66055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:01:59.217 [DEBUG] [Thread-66055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:01:59.217 [DEBUG] [Thread-66055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:01:59.221 [DEBUG] [Thread-66055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:01:59.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:01:59.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:01:59.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:01:59.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:01:59.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:01:59.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:01:59.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:01:59.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:01:59.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:01:59.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.042402 -999.00  +12.10  11.92     58   +4.10 1 1 1 1 1     0    0 7.45 -27.68 ZNESW 12.8 11.9 160.4 19.0 12.4 -23.3 12.3 -22.5 12.0 -22.0 12.4 -22.8
2025-11-18T03:01:59.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:01:59.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:01:59.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.042402
2025-11-18T03:01:59.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:01:59.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:01:59.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:01:59.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:01:59.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:01:59.244 [DEBUG] [Thread-66055] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:01:59.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:01:49', tmtdew=8.81, humidity=54.89, cloud=0.0, wind=17.66, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:01:49', seeing=1.24, atlas_timestamp='2025-11-18T01:01:03.533', atlas_cloud=1, atlas_rain=1, zp_data=[0.02325000000000088, 0.02775000000000105, 0.08025000000000126, 0.04049999999999976, 0.0365000000000002, 0.06575000000000131, 0.016000000000000014, 0.015249999999999986, 0.04749999999999943, 0.021000000000000796, 0.0677500000000002, 0.05400000000000027, 0.10999999999999943, 0.05524999999999913, 0.0, 0.0039999999999995595, 0.02674999999999983, 0.08300000000000018, 0.10899999999999999, 0.1112499999999983, 0.11999999999999922, 0.09624999999999773, 0.04625000000000057, 0.0337499999999995, 0.08299999999999841, 0.16050000000000075, 0.1322499999999991, 0.20749999999999957, 0.15700000000000003, 0.061500000000000554, 0.0600000000000005, 0.057000000000000384, 0.06574999999999953], zp_timestamp='2025-11-18T00:58:00')
2025-11-18T03:01:59.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:01:59.337 [DEBUG] [Thread-66058] [transport.py] [_log()] starting thread (client mode): 0xd07ab760
2025-11-18T03:01:59.337 [DEBUG] [Thread-66058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:01:59.351 [DEBUG] [Thread-66058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:01:59.352 [INFO] [Thread-66058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] client lang: <none>
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] server lang: <none>
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] kex follows: False
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:01:59.359 [DEBUG] [Thread-66058] [transport.py] [_log()] Compression: none
2025-11-18T03:01:59.360 [DEBUG] [Thread-66058] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:01:59.418 [DEBUG] [Thread-66058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:01:59.418 [DEBUG] [Thread-66058] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:01:59.419 [DEBUG] [Thread-66058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:01:59.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:01:59.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:01:59.475 [DEBUG] [Thread-66058] [transport.py] [_log()] userauth is OK
2025-11-18T03:01:59.475 [DEBUG] [Thread-66058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:01:59.475 [DEBUG] [Thread-66058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:01:59.475 [DEBUG] [Thread-66058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:01:59.475 [DEBUG] [Thread-66058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:01:59.498 [INFO] [Thread-66058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:01:59.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:01:59.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:02:00.383 [DEBUG] [Thread-66058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:02:00.383 [DEBUG] [Thread-66058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:02:00.431 [DEBUG] [Thread-66058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:02:00.431 [DEBUG] [Thread-66058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:02:00.440 [DEBUG] [Thread-66058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:02:00.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:02:00.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:02:00.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:02:00.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:02:00.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:02:00.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:02:00.475 [DEBUG] [Thread-66058] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:02:05.072 [DEBUG] [Thread-66060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:09.266 [DEBUG] [Thread-66061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:24.303 [DEBUG] [Thread-66062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:30.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:02:30.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:02:30.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:02:31.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 2, 21), 8.81, 54.89, 0.0, 17.84, 11.97, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:02:31.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:02:21
2025-11-18T03:02:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:02:31.425 [DEBUG] [Thread-66063] [transport.py] [_log()] starting thread (client mode): 0xd07a9b40
2025-11-18T03:02:31.425 [DEBUG] [Thread-66063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:02:31.445 [DEBUG] [Thread-66063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:02:31.445 [INFO] [Thread-66063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:02:31.448 [DEBUG] [Thread-66063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] client lang: <none>
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] server lang: <none>
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] kex follows: False
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] Compression: none
2025-11-18T03:02:31.449 [DEBUG] [Thread-66063] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:02:31.466 [DEBUG] [Thread-66063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:02:31.467 [DEBUG] [Thread-66063] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:02:31.467 [DEBUG] [Thread-66063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:02:31.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:02:31.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:02:31.469 [DEBUG] [Thread-66063] [transport.py] [_log()] userauth is OK
2025-11-18T03:02:31.469 [DEBUG] [Thread-66063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:02:31.470 [DEBUG] [Thread-66063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:02:31.470 [DEBUG] [Thread-66063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:02:31.470 [DEBUG] [Thread-66063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:02:31.484 [INFO] [Thread-66063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:02:31.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:02:32.113 [DEBUG] [Thread-66063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:02:32.113 [DEBUG] [Thread-66063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:02:32.113 [DEBUG] [Thread-66063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:02:32.154 [DEBUG] [Thread-66063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:02:32.154 [DEBUG] [Thread-66063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:02:32.157 [DEBUG] [Thread-66063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:02:32.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:02:32.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:02:32.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:02:32.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:02:32.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:02:32.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:02:32.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:02:32.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:02:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:02:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.043154 -999.00  +12.10  10.97     59   +4.30 1 1 1 1 1     0    0 7.04 -33.48 ZNESW 14.2 11.0 149.0 15.9 12.4 -23.4 12.3 -22.4 12.1 -22.1 12.4 -22.8
2025-11-18T03:02:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:02:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:02:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.043154
2025-11-18T03:02:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:02:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:02:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:02:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:02:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:02:32.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:02:21', tmtdew=8.81, humidity=54.89, cloud=0.0, wind=17.84, temperature=11.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:02:21', seeing=1.75, atlas_timestamp='2025-11-18T01:02:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, 0.015750000000000597, 0.056250000000000355, -0.025500000000000966, 0.061500000000000554, 0.06425000000000125, 0.03399999999999892, 0.023749999999999716, 0.03249999999999886, 0.027000000000001023, 0.05674999999999919, 0.08099999999999952, 0.1274999999999995, 0.08624999999999972, 0.009999999999999787, 0.02949999999999875, 0.03474999999999895, 0.10249999999999915, 0.09799999999999898, 0.08224999999999838, 0.10799999999999876, 0.06374999999999886, 0.04025000000000034, 0.03974999999999973, 0.053999999999998494, 0.1534999999999993, 0.15024999999999977, 0.21050000000000146, 0.20700000000000074, 0.09100000000000108, 0.036000000000001364, 0.028999999999999915, 0.10124999999999851], zp_timestamp='2025-11-18T01:00:00')
2025-11-18T03:02:32.181 [DEBUG] [Thread-66063] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:02:32.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:02:32.277 [DEBUG] [Thread-66066] [transport.py] [_log()] starting thread (client mode): 0xd31ced70
2025-11-18T03:02:32.277 [DEBUG] [Thread-66066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:02:32.296 [DEBUG] [Thread-66066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:02:32.297 [INFO] [Thread-66066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:02:32.304 [DEBUG] [Thread-66066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:02:32.304 [DEBUG] [Thread-66066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:02:32.304 [DEBUG] [Thread-66066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:02:32.304 [DEBUG] [Thread-66066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:02:32.304 [DEBUG] [Thread-66066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:02:32.304 [DEBUG] [Thread-66066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:02:32.304 [DEBUG] [Thread-66066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:02:32.304 [DEBUG] [Thread-66066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] client lang: <none>
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] server lang: <none>
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] kex follows: False
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] Compression: none
2025-11-18T03:02:32.305 [DEBUG] [Thread-66066] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:02:32.362 [DEBUG] [Thread-66066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:02:32.363 [DEBUG] [Thread-66066] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:02:32.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:02:32.364 [DEBUG] [Thread-66066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:02:32.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:02:32.418 [DEBUG] [Thread-66066] [transport.py] [_log()] userauth is OK
2025-11-18T03:02:32.419 [DEBUG] [Thread-66066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:02:32.419 [DEBUG] [Thread-66066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:02:32.419 [DEBUG] [Thread-66066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:02:32.419 [DEBUG] [Thread-66066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:02:32.438 [INFO] [Thread-66066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:02:32.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:02:32.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:02:33.302 [DEBUG] [Thread-66066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:02:33.302 [DEBUG] [Thread-66066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:02:33.350 [DEBUG] [Thread-66066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:02:33.350 [DEBUG] [Thread-66066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:02:33.359 [DEBUG] [Thread-66066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:02:33.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:02:33.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:02:33.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:02:33.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:02:33.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:02:33.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:02:33.393 [DEBUG] [Thread-66066] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:02:39.329 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:39.331 [DEBUG] [Thread-66068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:47.355 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:51.439 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:54.379 [DEBUG] [Thread-66069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:58.241 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:02:58.241 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:03:03.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:03:03.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:03:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:03:04.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 2, 53), 8.85, 54.41, 0.0, 15.02, 11.92, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:03:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:02:53
2025-11-18T03:03:04.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:03:04.319 [DEBUG] [Thread-66070] [transport.py] [_log()] starting thread (client mode): 0xd07af130
2025-11-18T03:03:04.319 [DEBUG] [Thread-66070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:03:04.339 [DEBUG] [Thread-66070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:03:04.339 [INFO] [Thread-66070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:03:04.342 [DEBUG] [Thread-66070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] client lang: <none>
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] server lang: <none>
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] kex follows: False
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] Compression: none
2025-11-18T03:03:04.343 [DEBUG] [Thread-66070] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:03:04.360 [DEBUG] [Thread-66070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:03:04.361 [DEBUG] [Thread-66070] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:03:04.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:03:04.362 [DEBUG] [Thread-66070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:03:04.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:03:04.363 [DEBUG] [Thread-66070] [transport.py] [_log()] userauth is OK
2025-11-18T03:03:04.364 [DEBUG] [Thread-66070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:03:04.364 [DEBUG] [Thread-66070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:03:04.364 [DEBUG] [Thread-66070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:03:04.364 [DEBUG] [Thread-66070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:03:04.381 [INFO] [Thread-66070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:03:04.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:03:05.137 [DEBUG] [Thread-66072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:03:05.176 [DEBUG] [Thread-66070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:03:05.177 [DEBUG] [Thread-66070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:03:05.177 [DEBUG] [Thread-66070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:03:05.217 [DEBUG] [Thread-66070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:03:05.218 [DEBUG] [Thread-66070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:03:05.221 [DEBUG] [Thread-66070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:03:05.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:03:05.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:03:05.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:03:05.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:03:05.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:03:05.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:03:05.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:03:05.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:03:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:03:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.043501 -999.00  +12.10  12.06     58   +4.20 1 1 1 1 1     0    0 7.09 -34.49 ZNESW 16.2 12.1 144.6 16.8 12.4 -23.4 12.3 -22.4 12.0 -22.0 12.4 -22.9
2025-11-18T03:03:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:03:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:03:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.043501
2025-11-18T03:03:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:03:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:03:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:03:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:03:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:03:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:02:53', tmtdew=8.85, humidity=54.41, cloud=0.0, wind=15.02, temperature=11.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:02:53', seeing=1.75, atlas_timestamp='2025-11-18T01:02:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, 0.015750000000000597, 0.056250000000000355, -0.025500000000000966, 0.061500000000000554, 0.06425000000000125, 0.03399999999999892, 0.023749999999999716, 0.03249999999999886, 0.027000000000001023, 0.05674999999999919, 0.08099999999999952, 0.1274999999999995, 0.08624999999999972, 0.009999999999999787, 0.02949999999999875, 0.03474999999999895, 0.10249999999999915, 0.09799999999999898, 0.08224999999999838, 0.10799999999999876, 0.06374999999999886, 0.04025000000000034, 0.03974999999999973, 0.053999999999998494, 0.1534999999999993, 0.15024999999999977, 0.21050000000000146, 0.20700000000000074, 0.09100000000000108, 0.036000000000001364, 0.028999999999999915, 0.10124999999999851], zp_timestamp='2025-11-18T01:00:00')
2025-11-18T03:03:05.245 [DEBUG] [Thread-66070] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:03:05.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:03:05.343 [DEBUG] [Thread-66074] [transport.py] [_log()] starting thread (client mode): 0xd0795540
2025-11-18T03:03:05.343 [DEBUG] [Thread-66074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:03:05.358 [DEBUG] [Thread-66074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:03:05.359 [INFO] [Thread-66074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] client lang: <none>
2025-11-18T03:03:05.366 [DEBUG] [Thread-66074] [transport.py] [_log()] server lang: <none>
2025-11-18T03:03:05.367 [DEBUG] [Thread-66074] [transport.py] [_log()] kex follows: False
2025-11-18T03:03:05.367 [DEBUG] [Thread-66074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:03:05.367 [DEBUG] [Thread-66074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:03:05.367 [DEBUG] [Thread-66074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:03:05.367 [DEBUG] [Thread-66074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:03:05.367 [DEBUG] [Thread-66074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:03:05.367 [DEBUG] [Thread-66074] [transport.py] [_log()] Compression: none
2025-11-18T03:03:05.367 [DEBUG] [Thread-66074] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:03:05.427 [DEBUG] [Thread-66074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:03:05.427 [DEBUG] [Thread-66074] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:03:05.427 [DEBUG] [Thread-66074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:03:05.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:03:05.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:03:05.482 [DEBUG] [Thread-66074] [transport.py] [_log()] userauth is OK
2025-11-18T03:03:05.483 [DEBUG] [Thread-66074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:03:05.483 [DEBUG] [Thread-66074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:03:05.483 [DEBUG] [Thread-66074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:03:05.483 [DEBUG] [Thread-66074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:03:05.503 [INFO] [Thread-66074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:03:05.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:03:05.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:03:06.335 [DEBUG] [Thread-66074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:03:06.335 [DEBUG] [Thread-66074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:03:06.385 [DEBUG] [Thread-66074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:03:06.386 [DEBUG] [Thread-66074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:03:06.395 [DEBUG] [Thread-66074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:03:06.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:03:06.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:03:06.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:03:06.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:03:06.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:03:06.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:03:06.434 [DEBUG] [Thread-66074] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:03:09.404 [DEBUG] [Thread-66076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:03:24.444 [DEBUG] [Thread-66077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:03:36.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:03:36.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:03:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:03:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 3, 25), 8.9, 54.24, 0.0, 13.8, 11.99, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:03:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:03:25
2025-11-18T03:03:37.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:03:37.434 [DEBUG] [Thread-66078] [transport.py] [_log()] starting thread (client mode): 0xd07a92a0
2025-11-18T03:03:37.434 [DEBUG] [Thread-66078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:03:37.454 [DEBUG] [Thread-66078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:03:37.454 [INFO] [Thread-66078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] client lang: <none>
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] server lang: <none>
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] kex follows: False
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:03:37.457 [DEBUG] [Thread-66078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:03:37.458 [DEBUG] [Thread-66078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:03:37.458 [DEBUG] [Thread-66078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:03:37.458 [DEBUG] [Thread-66078] [transport.py] [_log()] Compression: none
2025-11-18T03:03:37.458 [DEBUG] [Thread-66078] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:03:37.472 [DEBUG] [Thread-66078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:03:37.472 [DEBUG] [Thread-66078] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:03:37.472 [DEBUG] [Thread-66078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:03:37.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:03:37.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:03:37.473 [DEBUG] [Thread-66078] [transport.py] [_log()] userauth is OK
2025-11-18T03:03:37.473 [DEBUG] [Thread-66078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:03:37.473 [DEBUG] [Thread-66078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:03:37.473 [DEBUG] [Thread-66078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:03:37.473 [DEBUG] [Thread-66078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:03:37.482 [INFO] [Thread-66078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:03:37.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:03:38.109 [DEBUG] [Thread-66078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:03:38.109 [DEBUG] [Thread-66078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:03:38.109 [DEBUG] [Thread-66078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:03:38.150 [DEBUG] [Thread-66078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:03:38.150 [DEBUG] [Thread-66078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:03:38.152 [DEBUG] [Thread-66078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:03:38.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:03:38.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:03:38.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:03:38.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:03:38.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:03:38.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:03:38.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:03:38.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:03:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:03:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.043791 -999.00  +12.00  13.48     58   +4.20 1 1 1 1 1     0    0 7.17 -31.99 ZNESW 9.9 13.5 134.4 17.8 12.4 -23.5 12.3 -22.5 12.1 -22.1 12.3 -22.9
2025-11-18T03:03:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:03:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:03:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.043791
2025-11-18T03:03:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:03:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:03:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:03:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:03:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:03:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:03:25', tmtdew=8.9, humidity=54.24, cloud=0.0, wind=13.8, temperature=11.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:03:25', seeing=1.61, atlas_timestamp='2025-11-18T01:03:03.542', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, 0.015750000000000597, 0.056250000000000355, -0.025500000000000966, 0.061500000000000554, 0.06425000000000125, 0.03399999999999892, 0.023749999999999716, 0.03249999999999886, 0.027000000000001023, 0.05674999999999919, 0.08099999999999952, 0.1274999999999995, 0.08624999999999972, 0.009999999999999787, 0.02949999999999875, 0.03474999999999895, 0.10249999999999915, 0.09799999999999898, 0.08224999999999838, 0.10799999999999876, 0.06374999999999886, 0.04025000000000034, 0.03974999999999973, 0.053999999999998494, 0.1534999999999993, 0.15024999999999977, 0.21050000000000146, 0.20700000000000074, 0.09100000000000108, 0.036000000000001364, 0.028999999999999915, 0.10124999999999851], zp_timestamp='2025-11-18T01:00:00')
2025-11-18T03:03:38.181 [DEBUG] [Thread-66078] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:03:38.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:03:38.266 [DEBUG] [Thread-66081] [transport.py] [_log()] starting thread (client mode): 0xd31cd3c0
2025-11-18T03:03:38.266 [DEBUG] [Thread-66081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:03:38.281 [DEBUG] [Thread-66081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:03:38.282 [INFO] [Thread-66081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] client lang: <none>
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] server lang: <none>
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] kex follows: False
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] Compression: none
2025-11-18T03:03:38.291 [DEBUG] [Thread-66081] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:03:38.349 [DEBUG] [Thread-66081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:03:38.349 [DEBUG] [Thread-66081] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:03:38.350 [DEBUG] [Thread-66081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:03:38.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:03:38.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:03:38.408 [DEBUG] [Thread-66081] [transport.py] [_log()] userauth is OK
2025-11-18T03:03:38.408 [DEBUG] [Thread-66081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:03:38.408 [DEBUG] [Thread-66081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:03:38.408 [DEBUG] [Thread-66081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:03:38.408 [DEBUG] [Thread-66081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:03:38.423 [INFO] [Thread-66081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:03:38.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:03:38.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:03:39.288 [DEBUG] [Thread-66081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:03:39.288 [DEBUG] [Thread-66081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:03:39.336 [DEBUG] [Thread-66081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:03:39.336 [DEBUG] [Thread-66081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:03:39.344 [DEBUG] [Thread-66081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:03:39.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:03:39.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:03: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') -> 00000000
2025-11-18T03:03:39.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:03:39.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:03:39.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:03:39.376 [DEBUG] [Thread-66081] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:03:39.469 [DEBUG] [Thread-66083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:03:54.504 [DEBUG] [Thread-66084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:03:58.442 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:03:58.443 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:05.194 [DEBUG] [Thread-66085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:09.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:04:09.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:04:09.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:04:09.535 [DEBUG] [Thread-66086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:10.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 3, 57), 8.9, 54.21, 0.0, 14.28, 11.95, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:04:10.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:03:57
2025-11-18T03:04:10.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:04:10.340 [DEBUG] [Thread-66087] [transport.py] [_log()] starting thread (client mode): 0xd07d81f0
2025-11-18T03:04:10.340 [DEBUG] [Thread-66087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:04:10.361 [DEBUG] [Thread-66087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:04:10.361 [INFO] [Thread-66087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:04:10.364 [DEBUG] [Thread-66087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:04:10.364 [DEBUG] [Thread-66087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:04:10.364 [DEBUG] [Thread-66087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:04:10.364 [DEBUG] [Thread-66087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:04:10.364 [DEBUG] [Thread-66087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:04:10.364 [DEBUG] [Thread-66087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:04:10.364 [DEBUG] [Thread-66087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:04:10.364 [DEBUG] [Thread-66087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] client lang: <none>
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] server lang: <none>
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] kex follows: False
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:04:10.365 [DEBUG] [Thread-66087] [transport.py] [_log()] Compression: none
2025-11-18T03:04:10.366 [DEBUG] [Thread-66087] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:04:10.384 [DEBUG] [Thread-66087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:04:10.385 [DEBUG] [Thread-66087] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:04:10.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:04:10.386 [DEBUG] [Thread-66087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:04:10.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:04:10.388 [DEBUG] [Thread-66087] [transport.py] [_log()] userauth is OK
2025-11-18T03:04:10.388 [DEBUG] [Thread-66087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:04:10.388 [DEBUG] [Thread-66087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:04:10.388 [DEBUG] [Thread-66087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:04:10.388 [DEBUG] [Thread-66087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:04:10.404 [INFO] [Thread-66087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:04:10.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:04:11.048 [DEBUG] [Thread-66087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:04:11.048 [DEBUG] [Thread-66087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:04:11.048 [DEBUG] [Thread-66087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:04:11.089 [DEBUG] [Thread-66087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:04:11.090 [DEBUG] [Thread-66087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:04:11.093 [DEBUG] [Thread-66087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:04:11.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:04:11.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:04:11.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:04:11.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:04:11.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:04:11.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:04:11.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:04:11.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:04:11.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:04:11.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.044138 -999.00  +12.10  17.18     58   +4.20 1 1 1 1 1     0    0 7.26 -31.93 ZNESW 14.0 17.2 142.6 20.3 12.4 -23.4 12.2 -22.3 12.0 -22.1 12.3 -23.0
2025-11-18T03:04:11.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:04:11.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:04:11.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.044138
2025-11-18T03:04:11.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:04:11.117 [DEBUG] [Thread-66087] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:04:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:04:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:04:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:04:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:04:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:03:57', tmtdew=8.9, humidity=54.21, cloud=0.0, wind=14.28, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:03:57', seeing=1.61, atlas_timestamp='2025-11-18T01:03:33.523', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, 0.015750000000000597, 0.056250000000000355, -0.025500000000000966, 0.061500000000000554, 0.06425000000000125, 0.03399999999999892, 0.023749999999999716, 0.03249999999999886, 0.027000000000001023, 0.05674999999999919, 0.08099999999999952, 0.1274999999999995, 0.08624999999999972, 0.009999999999999787, 0.02949999999999875, 0.03474999999999895, 0.10249999999999915, 0.09799999999999898, 0.08224999999999838, 0.10799999999999876, 0.06374999999999886, 0.04025000000000034, 0.03974999999999973, 0.053999999999998494, 0.1534999999999993, 0.15024999999999977, 0.21050000000000146, 0.20700000000000074, 0.09100000000000108, 0.036000000000001364, 0.028999999999999915, 0.10124999999999851], zp_timestamp='2025-11-18T01:00:00')
2025-11-18T03:04:11.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:04:11.212 [DEBUG] [Thread-66090] [transport.py] [_log()] starting thread (client mode): 0xd07d8d00
2025-11-18T03:04:11.212 [DEBUG] [Thread-66090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:04:11.227 [DEBUG] [Thread-66090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:04:11.227 [INFO] [Thread-66090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:04:11.235 [DEBUG] [Thread-66090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:04:11.235 [DEBUG] [Thread-66090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] client lang: <none>
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] server lang: <none>
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] kex follows: False
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:04:11.236 [DEBUG] [Thread-66090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:04:11.237 [DEBUG] [Thread-66090] [transport.py] [_log()] Compression: none
2025-11-18T03:04:11.237 [DEBUG] [Thread-66090] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:04:11.294 [DEBUG] [Thread-66090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:04:11.295 [DEBUG] [Thread-66090] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:04:11.295 [DEBUG] [Thread-66090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:04:11.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:04:11.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:04:11.351 [DEBUG] [Thread-66090] [transport.py] [_log()] userauth is OK
2025-11-18T03:04:11.351 [DEBUG] [Thread-66090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:04:11.351 [DEBUG] [Thread-66090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:04:11.351 [DEBUG] [Thread-66090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:04:11.351 [DEBUG] [Thread-66090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:04:11.370 [INFO] [Thread-66090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:04:11.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:04:11.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:04:12.229 [DEBUG] [Thread-66090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:04:12.229 [DEBUG] [Thread-66090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:04:12.277 [DEBUG] [Thread-66090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:04:12.277 [DEBUG] [Thread-66090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:04:12.286 [DEBUG] [Thread-66090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:04:12.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:04:12.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:04:12.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:04:12.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:04:12.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:04:12.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:04:12.319 [DEBUG] [Thread-66090] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:04:14.068 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:22.104 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:24.562 [DEBUG] [Thread-66092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:26.172 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:39.609 [DEBUG] [Thread-66093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:42.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:04:42.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:04:42.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:04:42.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 4, 29), 8.89, 54.24, 0.0, 16.69, 11.9, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:04:42.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:04:29
2025-11-18T03:04:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:04:43.244 [DEBUG] [Thread-66094] [transport.py] [_log()] starting thread (client mode): 0xd31cec80
2025-11-18T03:04:43.244 [DEBUG] [Thread-66094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:04:43.265 [DEBUG] [Thread-66094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:04:43.265 [INFO] [Thread-66094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:04:43.268 [DEBUG] [Thread-66094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:04:43.268 [DEBUG] [Thread-66094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:04:43.268 [DEBUG] [Thread-66094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:04:43.268 [DEBUG] [Thread-66094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:04:43.268 [DEBUG] [Thread-66094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] client lang: <none>
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] server lang: <none>
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] kex follows: False
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:04:43.269 [DEBUG] [Thread-66094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:04:43.270 [DEBUG] [Thread-66094] [transport.py] [_log()] Compression: none
2025-11-18T03:04:43.270 [DEBUG] [Thread-66094] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:04:43.289 [DEBUG] [Thread-66094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:04:43.290 [DEBUG] [Thread-66094] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:04:43.291 [DEBUG] [Thread-66094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:04:43.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:04:43.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:04:43.293 [DEBUG] [Thread-66094] [transport.py] [_log()] userauth is OK
2025-11-18T03:04:43.293 [DEBUG] [Thread-66094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:04:43.293 [DEBUG] [Thread-66094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:04:43.293 [DEBUG] [Thread-66094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:04:43.293 [DEBUG] [Thread-66094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:04:43.317 [INFO] [Thread-66094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:04:43.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:04:43.950 [DEBUG] [Thread-66094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:04:43.950 [DEBUG] [Thread-66094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:04:43.950 [DEBUG] [Thread-66094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:04:43.991 [DEBUG] [Thread-66094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:04:43.992 [DEBUG] [Thread-66094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:04:43.994 [DEBUG] [Thread-66094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:04:44.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:04:44.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:04:44.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:04:44.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:04:44.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:04:44.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:04:44.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:04:44.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:04:44.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:04:44.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.044543 -999.00  +12.00  19.40     58   +4.20 1 1 1 1 1     0    0 7.08 -34.63 ZNESW 12.9 19.4 147.6 22.9 12.4 -23.4 12.3 -22.4 12.0 -22.0 12.3 -22.9
2025-11-18T03:04:44.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:04:44.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:04:44.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.044543
2025-11-18T03:04:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:04:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:04:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:04:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:04:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:04:44.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:04:29', tmtdew=8.89, humidity=54.24, cloud=0.0, wind=16.69, temperature=11.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:04:29', seeing=1.16, atlas_timestamp='2025-11-18T01:04:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, 0.015750000000000597, 0.056250000000000355, -0.025500000000000966, 0.061500000000000554, 0.06425000000000125, 0.03399999999999892, 0.023749999999999716, 0.03249999999999886, 0.027000000000001023, 0.05674999999999919, 0.08099999999999952, 0.1274999999999995, 0.08624999999999972, 0.009999999999999787, 0.02949999999999875, 0.03474999999999895, 0.10249999999999915, 0.09799999999999898, 0.08224999999999838, 0.10799999999999876, 0.06374999999999886, 0.04025000000000034, 0.03974999999999973, 0.053999999999998494, 0.1534999999999993, 0.15024999999999977, 0.21050000000000146, 0.20700000000000074, 0.09100000000000108, 0.036000000000001364, 0.028999999999999915, 0.10124999999999851], zp_timestamp='2025-11-18T01:00:00')
2025-11-18T03:04:44.019 [DEBUG] [Thread-66094] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:04:44.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:04:44.118 [DEBUG] [Thread-66097] [transport.py] [_log()] starting thread (client mode): 0xd317f940
2025-11-18T03:04:44.118 [DEBUG] [Thread-66097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:04:44.135 [DEBUG] [Thread-66097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:04:44.136 [INFO] [Thread-66097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:04:44.143 [DEBUG] [Thread-66097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:04:44.143 [DEBUG] [Thread-66097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:04:44.143 [DEBUG] [Thread-66097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:04:44.143 [DEBUG] [Thread-66097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:04:44.143 [DEBUG] [Thread-66097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:04:44.143 [DEBUG] [Thread-66097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:04:44.143 [DEBUG] [Thread-66097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:04:44.143 [DEBUG] [Thread-66097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] client lang: <none>
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] server lang: <none>
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] kex follows: False
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] Compression: none
2025-11-18T03:04:44.144 [DEBUG] [Thread-66097] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:04:44.202 [DEBUG] [Thread-66097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:04:44.203 [DEBUG] [Thread-66097] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:04:44.203 [DEBUG] [Thread-66097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:04:44.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:04:44.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:04:44.259 [DEBUG] [Thread-66097] [transport.py] [_log()] userauth is OK
2025-11-18T03:04:44.259 [DEBUG] [Thread-66097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:04:44.259 [DEBUG] [Thread-66097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:04:44.259 [DEBUG] [Thread-66097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:04:44.259 [DEBUG] [Thread-66097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:04:44.279 [INFO] [Thread-66097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:04:44.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:04:44.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:04:45.167 [DEBUG] [Thread-66097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:04:45.168 [DEBUG] [Thread-66097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:04:45.215 [DEBUG] [Thread-66097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:04:45.215 [DEBUG] [Thread-66097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:04:45.224 [DEBUG] [Thread-66097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:04:45.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:04:45.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:04:45.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:04:45.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:04:45.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:04:45.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:04:45.258 [DEBUG] [Thread-66097] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:04:54.638 [DEBUG] [Thread-66099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:58.644 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:04:58.645 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:05:05.263 [DEBUG] [Thread-66100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:05:09.672 [DEBUG] [Thread-66101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:05:15.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:05:15.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:05:15.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:05:15.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 5, 1), 8.87, 54.31, 0.0, 15.28, 11.85, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:05:15.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:05:01
2025-11-18T03:05:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:05:16.211 [DEBUG] [Thread-66102] [transport.py] [_log()] starting thread (client mode): 0xd07a9540
2025-11-18T03:05:16.211 [DEBUG] [Thread-66102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:05:16.230 [DEBUG] [Thread-66102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:05:16.230 [INFO] [Thread-66102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:05:16.232 [DEBUG] [Thread-66102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:05:16.232 [DEBUG] [Thread-66102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:05:16.232 [DEBUG] [Thread-66102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:05:16.232 [DEBUG] [Thread-66102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:05:16.232 [DEBUG] [Thread-66102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] client lang: <none>
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] server lang: <none>
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] kex follows: False
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:05:16.233 [DEBUG] [Thread-66102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:05:16.234 [DEBUG] [Thread-66102] [transport.py] [_log()] Compression: none
2025-11-18T03:05:16.234 [DEBUG] [Thread-66102] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:05:16.247 [DEBUG] [Thread-66102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:05:16.247 [DEBUG] [Thread-66102] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:05:16.247 [DEBUG] [Thread-66102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:05:16.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:05:16.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:05:16.249 [DEBUG] [Thread-66102] [transport.py] [_log()] userauth is OK
2025-11-18T03:05:16.249 [DEBUG] [Thread-66102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:05:16.250 [DEBUG] [Thread-66102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:05:16.250 [DEBUG] [Thread-66102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:05:16.250 [DEBUG] [Thread-66102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:05:16.268 [INFO] [Thread-66102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:05:16.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:05:16.863 [DEBUG] [Thread-66102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:05:16.863 [DEBUG] [Thread-66102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:05:16.863 [DEBUG] [Thread-66102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:05:16.903 [DEBUG] [Thread-66102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:05:16.903 [DEBUG] [Thread-66102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:05:16.906 [DEBUG] [Thread-66102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:05:16.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:05:16.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:05:16.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:05:16.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:05:16.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:05:16.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:05:16.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:05:16.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:05:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:05:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.044833 -999.00  +12.00   9.62     58   +4.20 1 1 1 1 1     0    0 7.17 -37.28 ZNESW 11.8 9.6 143.1 15.9 12.4 -23.4 12.2 -22.4 12.0 -22.1 12.4 -22.9
2025-11-18T03:05:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:05:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:05:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.044833
2025-11-18T03:05:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:05:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:05:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:05:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:05:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:05:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:05:01', tmtdew=8.87, humidity=54.31, cloud=0.0, wind=15.28, temperature=11.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:05:01', seeing=1.14, atlas_timestamp='2025-11-18T01:04:33.571', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, 0.015750000000000597, 0.056250000000000355, -0.025500000000000966, 0.061500000000000554, 0.06425000000000125, 0.03399999999999892, 0.023749999999999716, 0.03249999999999886, 0.027000000000001023, 0.05674999999999919, 0.08099999999999952, 0.1274999999999995, 0.08624999999999972, 0.009999999999999787, 0.02949999999999875, 0.03474999999999895, 0.10249999999999915, 0.09799999999999898, 0.08224999999999838, 0.10799999999999876, 0.06374999999999886, 0.04025000000000034, 0.03974999999999973, 0.053999999999998494, 0.1534999999999993, 0.15024999999999977, 0.21050000000000146, 0.20700000000000074, 0.09100000000000108, 0.036000000000001364, 0.028999999999999915, 0.10124999999999851], zp_timestamp='2025-11-18T01:00:00')
2025-11-18T03:05:16.934 [DEBUG] [Thread-66102] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:05:17.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:05:17.030 [DEBUG] [Thread-66105] [transport.py] [_log()] starting thread (client mode): 0xd317eb60
2025-11-18T03:05:17.030 [DEBUG] [Thread-66105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:05:17.046 [DEBUG] [Thread-66105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:05:17.046 [INFO] [Thread-66105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:05:17.053 [DEBUG] [Thread-66105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:05:17.053 [DEBUG] [Thread-66105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:05:17.053 [DEBUG] [Thread-66105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:05:17.053 [DEBUG] [Thread-66105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:05:17.053 [DEBUG] [Thread-66105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] client lang: <none>
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] server lang: <none>
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] kex follows: False
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] Compression: none
2025-11-18T03:05:17.054 [DEBUG] [Thread-66105] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:05:17.111 [DEBUG] [Thread-66105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:05:17.112 [DEBUG] [Thread-66105] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:05:17.112 [DEBUG] [Thread-66105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:05:17.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:05:17.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:05:17.167 [DEBUG] [Thread-66105] [transport.py] [_log()] userauth is OK
2025-11-18T03:05:17.167 [DEBUG] [Thread-66105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:05:17.167 [DEBUG] [Thread-66105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:05:17.167 [DEBUG] [Thread-66105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:05:17.167 [DEBUG] [Thread-66105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:05:17.186 [INFO] [Thread-66105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:05:17.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:05:17.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:05:18.020 [DEBUG] [Thread-66105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:05:18.020 [DEBUG] [Thread-66105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:05:18.068 [DEBUG] [Thread-66105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:05:18.069 [DEBUG] [Thread-66105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:05:18.077 [DEBUG] [Thread-66105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:05:18.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:05:18.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:05:18.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:05:18.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:05:18.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:05:18.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:05:18.113 [DEBUG] [Thread-66105] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:05:24.706 [DEBUG] [Thread-66107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:05:39.747 [DEBUG] [Thread-66108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:05:48.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:05:48.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:05:48.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:05:48.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 5, 33), 8.87, 54.31, 0.0, 15.0, 11.87, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:05:48.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:05:33
2025-11-18T03:05:48.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:05:48.923 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:05:49.050 [DEBUG] [Thread-66109] [transport.py] [_log()] starting thread (client mode): 0xd07d95a0
2025-11-18T03:05:49.050 [DEBUG] [Thread-66109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:05:49.063 [DEBUG] [Thread-66109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:05:49.063 [INFO] [Thread-66109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:05:49.065 [DEBUG] [Thread-66109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:05:49.065 [DEBUG] [Thread-66109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] client lang: <none>
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] server lang: <none>
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] kex follows: False
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] Compression: none
2025-11-18T03:05:49.066 [DEBUG] [Thread-66109] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:05:49.083 [DEBUG] [Thread-66109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:05:49.084 [DEBUG] [Thread-66109] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:05:49.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:05:49.085 [DEBUG] [Thread-66109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:05:49.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:05:49.087 [DEBUG] [Thread-66109] [transport.py] [_log()] userauth is OK
2025-11-18T03:05:49.087 [DEBUG] [Thread-66109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:05:49.088 [DEBUG] [Thread-66109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:05:49.088 [DEBUG] [Thread-66109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:05:49.088 [DEBUG] [Thread-66109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:05:49.108 [INFO] [Thread-66109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:05:49.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:05:49.702 [DEBUG] [Thread-66109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:05:49.702 [DEBUG] [Thread-66109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:05:49.702 [DEBUG] [Thread-66109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:05:49.742 [DEBUG] [Thread-66109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:05:49.742 [DEBUG] [Thread-66109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:05:49.744 [DEBUG] [Thread-66109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:05:49.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:05:49.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:05:49.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:05:49.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:05:49.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:05:49.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:05:49.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:05:49.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:05:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:05:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.045584 -999.00  +12.00  11.60     58   +4.00 1 1 1 1 1     0    0 7.07 -32.51 ZNESW 10.1 11.6 126.0 16.0 12.4 -23.5 12.2 -22.6 12.0 -22.0 12.4 -23.0
2025-11-18T03:05:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:05:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:05:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.045584
2025-11-18T03:05:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:05:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:05:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:05:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:05:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:05:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:05:33', tmtdew=8.87, humidity=54.31, cloud=0.0, wind=15.0, temperature=11.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:05:33', seeing=1.5, atlas_timestamp='2025-11-18T01:05:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:04:00')
2025-11-18T03:05:49.764 [DEBUG] [Thread-66109] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:05:49.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:05:49.864 [DEBUG] [Thread-66112] [transport.py] [_log()] starting thread (client mode): 0xd0700c10
2025-11-18T03:05:49.865 [DEBUG] [Thread-66112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:05:49.881 [DEBUG] [Thread-66112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:05:49.881 [INFO] [Thread-66112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:05:49.889 [DEBUG] [Thread-66112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:05:49.889 [DEBUG] [Thread-66112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:05:49.889 [DEBUG] [Thread-66112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:05:49.889 [DEBUG] [Thread-66112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:05:49.889 [DEBUG] [Thread-66112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:05:49.889 [DEBUG] [Thread-66112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:05:49.889 [DEBUG] [Thread-66112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:05:49.890 [DEBUG] [Thread-66112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:05:49.890 [DEBUG] [Thread-66112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:05:49.890 [DEBUG] [Thread-66112] [transport.py] [_log()] client lang: <none>
2025-11-18T03:05:49.890 [DEBUG] [Thread-66112] [transport.py] [_log()] server lang: <none>
2025-11-18T03:05:49.890 [DEBUG] [Thread-66112] [transport.py] [_log()] kex follows: False
2025-11-18T03:05:49.890 [DEBUG] [Thread-66112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:05:49.890 [DEBUG] [Thread-66112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:05:49.890 [DEBUG] [Thread-66112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:05:49.891 [DEBUG] [Thread-66112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:05:49.891 [DEBUG] [Thread-66112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:05:49.891 [DEBUG] [Thread-66112] [transport.py] [_log()] Compression: none
2025-11-18T03:05:49.891 [DEBUG] [Thread-66112] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:05:49.947 [DEBUG] [Thread-66112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:05:49.948 [DEBUG] [Thread-66112] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:05:49.949 [DEBUG] [Thread-66112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:05:49.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:05:49.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:05:50.004 [DEBUG] [Thread-66112] [transport.py] [_log()] userauth is OK
2025-11-18T03:05:50.005 [DEBUG] [Thread-66112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:05:50.005 [DEBUG] [Thread-66112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:05:50.005 [DEBUG] [Thread-66112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:05:50.005 [DEBUG] [Thread-66112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:05:50.027 [INFO] [Thread-66112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:05:50.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:05:50.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:05:50.892 [DEBUG] [Thread-66112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:05:50.892 [DEBUG] [Thread-66112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:05:50.939 [DEBUG] [Thread-66112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:05:50.940 [DEBUG] [Thread-66112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:05:50.948 [DEBUG] [Thread-66112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:05:50.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:05:50.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:05:50.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:05:50.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:05:50.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:05:50.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:05:50.983 [DEBUG] [Thread-66112] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:05:54.780 [DEBUG] [Thread-66114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:05:58.847 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:05:58.850 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:03.157 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:05.341 [DEBUG] [Thread-66115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:06.200 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:09.826 [DEBUG] [Thread-66116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:12.577 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:20.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:06:20.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:06:20.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:06:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 6, 5), 8.85, 54.36, 0.0, 14.8, 11.79, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:06:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:06:05
2025-11-18T03:06:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:06:21.918 [DEBUG] [Thread-66117] [transport.py] [_log()] starting thread (client mode): 0xd0710370
2025-11-18T03:06:21.919 [DEBUG] [Thread-66117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:06:21.939 [DEBUG] [Thread-66117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:06:21.939 [INFO] [Thread-66117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] client lang: <none>
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] server lang: <none>
2025-11-18T03:06:21.943 [DEBUG] [Thread-66117] [transport.py] [_log()] kex follows: False
2025-11-18T03:06:21.944 [DEBUG] [Thread-66117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:06:21.944 [DEBUG] [Thread-66117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:06:21.944 [DEBUG] [Thread-66117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:06:21.944 [DEBUG] [Thread-66117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:06:21.944 [DEBUG] [Thread-66117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:06:21.944 [DEBUG] [Thread-66117] [transport.py] [_log()] Compression: none
2025-11-18T03:06:21.944 [DEBUG] [Thread-66117] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:06:21.962 [DEBUG] [Thread-66117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:06:21.963 [DEBUG] [Thread-66117] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:06:21.963 [DEBUG] [Thread-66117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:06:21.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:06:21.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:06:21.966 [DEBUG] [Thread-66117] [transport.py] [_log()] userauth is OK
2025-11-18T03:06:21.966 [DEBUG] [Thread-66117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:06:21.966 [DEBUG] [Thread-66117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:06:21.966 [DEBUG] [Thread-66117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:06:21.966 [DEBUG] [Thread-66117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:06:21.990 [INFO] [Thread-66117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:06:21.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:06:22.581 [DEBUG] [Thread-66117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:06:22.581 [DEBUG] [Thread-66117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:06:22.581 [DEBUG] [Thread-66117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:06:22.622 [DEBUG] [Thread-66117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:06:22.622 [DEBUG] [Thread-66117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:06:22.624 [DEBUG] [Thread-66117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:06:22.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:06:22.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:06:22.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:06:22.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:06:22.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:06:22.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:06:22.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:06:22.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:06:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:06:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.045584 -999.00  +12.00  11.60     58   +4.00 1 1 1 1 1     0    0 7.07 -32.51 ZNESW 10.1 11.6 126.0 16.0 12.4 -23.5 12.2 -22.6 12.0 -22.0 12.4 -23.0
2025-11-18T03:06:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:06:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:06:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.045584
2025-11-18T03:06:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:06:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:06:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:06:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:06:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:06:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:06:05', tmtdew=8.85, humidity=54.36, cloud=0.0, wind=14.8, temperature=11.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:06:05', seeing=1.5, atlas_timestamp='2025-11-18T01:05:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:04:00')
2025-11-18T03:06:22.640 [DEBUG] [Thread-66117] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:06:22.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:06:22.736 [DEBUG] [Thread-66120] [transport.py] [_log()] starting thread (client mode): 0xd07aed70
2025-11-18T03:06:22.736 [DEBUG] [Thread-66120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:06:22.752 [DEBUG] [Thread-66120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:06:22.752 [INFO] [Thread-66120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:06:22.759 [DEBUG] [Thread-66120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] client lang: <none>
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] server lang: <none>
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] kex follows: False
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] Compression: none
2025-11-18T03:06:22.760 [DEBUG] [Thread-66120] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:06:22.823 [DEBUG] [Thread-66120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:06:22.824 [DEBUG] [Thread-66120] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:06:22.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:06:22.825 [DEBUG] [Thread-66120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:06:22.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:06:22.879 [DEBUG] [Thread-66120] [transport.py] [_log()] userauth is OK
2025-11-18T03:06:22.879 [DEBUG] [Thread-66120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:06:22.879 [DEBUG] [Thread-66120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:06:22.879 [DEBUG] [Thread-66120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:06:22.880 [DEBUG] [Thread-66120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:06:22.903 [INFO] [Thread-66120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:06:22.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:06:22.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:06:23.763 [DEBUG] [Thread-66120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:06:23.772 [DEBUG] [Thread-66120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:06:23.810 [DEBUG] [Thread-66120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:06:23.810 [DEBUG] [Thread-66120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:06:23.819 [DEBUG] [Thread-66120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:06:23.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:06:23.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:06:23.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:06:23.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:06:23.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:06:23.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:06:23.854 [DEBUG] [Thread-66120] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:06:24.853 [DEBUG] [Thread-66122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:39.900 [DEBUG] [Thread-66123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:53.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:06:53.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:06:53.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
2025-11-18T03:06:54.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 6, 37), 8.72, 54.97, 0.0, 14.91, 11.62, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:06:54.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:06:37
2025-11-18T03:06:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:06:54.847 [DEBUG] [Thread-66124] [transport.py] [_log()] starting thread (client mode): 0xd0721e10
2025-11-18T03:06:54.847 [DEBUG] [Thread-66124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:06:54.869 [DEBUG] [Thread-66124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:06:54.869 [INFO] [Thread-66124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:06:54.873 [DEBUG] [Thread-66124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] client lang: <none>
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] server lang: <none>
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] kex follows: False
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] Compression: none
2025-11-18T03:06:54.874 [DEBUG] [Thread-66124] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:06:54.889 [DEBUG] [Thread-66124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:06:54.889 [DEBUG] [Thread-66124] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:06:54.889 [DEBUG] [Thread-66124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:06:54.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:06:54.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:06:54.890 [DEBUG] [Thread-66124] [transport.py] [_log()] userauth is OK
2025-11-18T03:06:54.890 [DEBUG] [Thread-66124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:06:54.890 [DEBUG] [Thread-66124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:06:54.890 [DEBUG] [Thread-66124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:06:54.890 [DEBUG] [Thread-66124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:06:54.905 [INFO] [Thread-66124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:06:54.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:06:54.931 [DEBUG] [Thread-66126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:55.542 [DEBUG] [Thread-66124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:06:55.542 [DEBUG] [Thread-66124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:06:55.542 [DEBUG] [Thread-66124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:06:55.583 [DEBUG] [Thread-66124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:06:55.583 [DEBUG] [Thread-66124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:06:55.585 [DEBUG] [Thread-66124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:06:55.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:06:55.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:06:55.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:06:55.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:06:55.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:06:55.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:06:55.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:06:55.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:06:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:06:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.045874 -999.00  +11.90  11.98     58   +4.10 1 1 1 1 1     0    0 7.13 -30.98 ZNESW 10.4 12.0 131.0 12.5 12.3 -23.5 12.2 -22.5 12.0 -22.2 12.3 -23.0
2025-11-18T03:06:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:06:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:06:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.045874
2025-11-18T03:06:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:06:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:06:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:06:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:06:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:06:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:06:37', tmtdew=8.72, humidity=54.97, cloud=0.0, wind=14.91, temperature=11.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:06:37', seeing=1.22, atlas_timestamp='2025-11-18T01:06:03.514', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:04:00')
2025-11-18T03:06:55.604 [DEBUG] [Thread-66124] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:06:55.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:06:55.689 [DEBUG] [Thread-66128] [transport.py] [_log()] starting thread (client mode): 0xd07d8d00
2025-11-18T03:06:55.689 [DEBUG] [Thread-66128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:06:55.705 [DEBUG] [Thread-66128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:06:55.705 [INFO] [Thread-66128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:06:55.712 [DEBUG] [Thread-66128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] client lang: <none>
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] server lang: <none>
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] kex follows: False
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] Compression: none
2025-11-18T03:06:55.713 [DEBUG] [Thread-66128] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:06:55.770 [DEBUG] [Thread-66128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:06:55.770 [DEBUG] [Thread-66128] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:06:55.770 [DEBUG] [Thread-66128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:06:55.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:06:55.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:06:55.827 [DEBUG] [Thread-66128] [transport.py] [_log()] userauth is OK
2025-11-18T03:06:55.827 [DEBUG] [Thread-66128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:06:55.827 [DEBUG] [Thread-66128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:06:55.827 [DEBUG] [Thread-66128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:06:55.827 [DEBUG] [Thread-66128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:06:55.842 [INFO] [Thread-66128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:06:55.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:06:55.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:06:56.690 [DEBUG] [Thread-66128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:06:56.690 [DEBUG] [Thread-66128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:06:56.737 [DEBUG] [Thread-66128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:06:56.737 [DEBUG] [Thread-66128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:06:56.746 [DEBUG] [Thread-66128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:06:56.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:06:56.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:06:56.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:06:56.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:06:56.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:06:56.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:06:56.782 [DEBUG] [Thread-66128] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:06:59.053 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:06:59.054 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:07:05.397 [DEBUG] [Thread-66130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:07:09.957 [DEBUG] [Thread-66131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:07:24.987 [DEBUG] [Thread-66132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:07:26.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:07:26.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:07:26.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:07:27.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 7, 9), 8.69, 55.1, 0.0, 15.76, 11.64, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:07:27.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:07:09
2025-11-18T03:07:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:07:27.726 [DEBUG] [Thread-66133] [transport.py] [_log()] starting thread (client mode): 0xd07219c0
2025-11-18T03:07:27.726 [DEBUG] [Thread-66133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:07:27.746 [DEBUG] [Thread-66133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:07:27.746 [INFO] [Thread-66133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] client lang: <none>
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] server lang: <none>
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] kex follows: False
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:07:27.749 [DEBUG] [Thread-66133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:07:27.750 [DEBUG] [Thread-66133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:07:27.750 [DEBUG] [Thread-66133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:07:27.750 [DEBUG] [Thread-66133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:07:27.750 [DEBUG] [Thread-66133] [transport.py] [_log()] Compression: none
2025-11-18T03:07:27.750 [DEBUG] [Thread-66133] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:07:27.767 [DEBUG] [Thread-66133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:07:27.768 [DEBUG] [Thread-66133] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:07:27.768 [DEBUG] [Thread-66133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:07:27.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:07:27.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:07:27.770 [DEBUG] [Thread-66133] [transport.py] [_log()] userauth is OK
2025-11-18T03:07:27.770 [DEBUG] [Thread-66133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:07:27.771 [DEBUG] [Thread-66133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:07:27.771 [DEBUG] [Thread-66133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:07:27.771 [DEBUG] [Thread-66133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:07:27.788 [INFO] [Thread-66133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:07:27.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:07:28.435 [DEBUG] [Thread-66133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:07:28.435 [DEBUG] [Thread-66133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:07:28.435 [DEBUG] [Thread-66133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:07:28.476 [DEBUG] [Thread-66133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:07:28.476 [DEBUG] [Thread-66133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:07:28.479 [DEBUG] [Thread-66133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:07:28.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:07:28.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:07:28.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:07:28.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:07:28.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:07:28.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:07:28.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:07:28.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:07:28.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:07:28.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.046221 -999.00  +11.90   8.94     58   +4.00 1 1 1 1 1     0    0 7.01 -31.11 ZNESW 9.3 8.9 137.4 13.8 12.3 -23.6 12.2 -22.5 12.0 -22.2 12.3 -23.0
2025-11-18T03:07:28.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:07:28.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:07:28.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.046221
2025-11-18T03:07:28.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:07:28.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:07:28.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:07:28.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:07:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:07:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:07:09', tmtdew=8.69, humidity=55.1, cloud=0.0, wind=15.76, temperature=11.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:07:09', seeing=1.24, atlas_timestamp='2025-11-18T01:06:33.494', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:04:00')
2025-11-18T03:07:28.513 [DEBUG] [Thread-66133] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:07:28.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:07:28.611 [DEBUG] [Thread-66136] [transport.py] [_log()] starting thread (client mode): 0xd07973d0
2025-11-18T03:07:28.611 [DEBUG] [Thread-66136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:07:28.628 [DEBUG] [Thread-66136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:07:28.628 [INFO] [Thread-66136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] client lang: <none>
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] server lang: <none>
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] kex follows: False
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] Compression: none
2025-11-18T03:07:28.636 [DEBUG] [Thread-66136] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:07:28.694 [DEBUG] [Thread-66136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:07:28.694 [DEBUG] [Thread-66136] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:07:28.694 [DEBUG] [Thread-66136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:07:28.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:07:28.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:07:28.751 [DEBUG] [Thread-66136] [transport.py] [_log()] userauth is OK
2025-11-18T03:07:28.751 [DEBUG] [Thread-66136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:07:28.751 [DEBUG] [Thread-66136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:07:28.751 [DEBUG] [Thread-66136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:07:28.751 [DEBUG] [Thread-66136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:07:28.766 [INFO] [Thread-66136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:07:28.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:07:28.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:07:29.599 [DEBUG] [Thread-66136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:07:29.599 [DEBUG] [Thread-66136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:07:29.647 [DEBUG] [Thread-66136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:07:29.647 [DEBUG] [Thread-66136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:07:29.655 [DEBUG] [Thread-66136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:07:29.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:07:29.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:07:29.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:07:29.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:07:29.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:07:29.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:07:29.687 [DEBUG] [Thread-66136] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:07:40.018 [DEBUG] [Thread-66138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:07:55.060 [DEBUG] [Thread-66139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:07:59.256 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:07:59.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:07:59.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:07:59.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:07:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:08:00.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 7, 41), 8.6, 55.27, 0.0, 15.3, 11.59, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:08:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:07:41
2025-11-18T03:08:00.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:08:00.642 [DEBUG] [Thread-66140] [transport.py] [_log()] starting thread (client mode): 0xd0722800
2025-11-18T03:08:00.642 [DEBUG] [Thread-66140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:08:00.663 [DEBUG] [Thread-66140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:08:00.663 [INFO] [Thread-66140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:08:00.666 [DEBUG] [Thread-66140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:08:00.666 [DEBUG] [Thread-66140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:08:00.666 [DEBUG] [Thread-66140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:08:00.666 [DEBUG] [Thread-66140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:08:00.666 [DEBUG] [Thread-66140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:08:00.666 [DEBUG] [Thread-66140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] client lang: <none>
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] server lang: <none>
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] kex follows: False
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] Compression: none
2025-11-18T03:08:00.667 [DEBUG] [Thread-66140] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:08:00.683 [DEBUG] [Thread-66140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:08:00.684 [DEBUG] [Thread-66140] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:08:00.684 [DEBUG] [Thread-66140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:08:00.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:08:00.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:08:00.686 [DEBUG] [Thread-66140] [transport.py] [_log()] userauth is OK
2025-11-18T03:08:00.686 [DEBUG] [Thread-66140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:08:00.686 [DEBUG] [Thread-66140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:08:00.686 [DEBUG] [Thread-66140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:08:00.686 [DEBUG] [Thread-66140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:08:00.719 [INFO] [Thread-66140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:08:00.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:08:01.353 [DEBUG] [Thread-66140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:08:01.353 [DEBUG] [Thread-66140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:08:01.354 [DEBUG] [Thread-66140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:08:01.394 [DEBUG] [Thread-66140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:08:01.394 [DEBUG] [Thread-66140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:08:01.398 [DEBUG] [Thread-66140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:08:01.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:08:01.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:08:01.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:08:01.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:08:01.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:08:01.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:08:01.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:08:01.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:08:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:08:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.046569 -999.00  +11.90  12.54     59   +4.10 1 1 1 1 1     0    0 7.22 -31.71 ZNESW 13.2 12.5 144.2 15.9 12.3 -23.5 12.2 -22.5 12.0 -22.2 12.3 -23.1
2025-11-18T03:08:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:08:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:08:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.046569
2025-11-18T03:08:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:08:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:08:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:08:01.423 [DEBUG] [Thread-66140] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:08:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:08:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:08:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:07:41', tmtdew=8.6, humidity=55.27, cloud=0.0, wind=15.3, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:07:41', seeing=1.66, atlas_timestamp='2025-11-18T01:07:03.562', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:04:00')
2025-11-18T03:08:01.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:08:01.519 [DEBUG] [Thread-66143] [transport.py] [_log()] starting thread (client mode): 0xd0720a60
2025-11-18T03:08:01.520 [DEBUG] [Thread-66143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:08:01.535 [DEBUG] [Thread-66143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:08:01.535 [INFO] [Thread-66143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:08:01.542 [DEBUG] [Thread-66143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:08:01.542 [DEBUG] [Thread-66143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:08:01.542 [DEBUG] [Thread-66143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:08:01.542 [DEBUG] [Thread-66143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:08:01.542 [DEBUG] [Thread-66143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] client lang: <none>
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] server lang: <none>
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] kex follows: False
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] Compression: none
2025-11-18T03:08:01.543 [DEBUG] [Thread-66143] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:08:01.599 [DEBUG] [Thread-66143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:08:01.599 [DEBUG] [Thread-66143] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:08:01.600 [DEBUG] [Thread-66143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:08:01.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:08:01.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:08:01.655 [DEBUG] [Thread-66143] [transport.py] [_log()] userauth is OK
2025-11-18T03:08:01.655 [DEBUG] [Thread-66143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:08:01.655 [DEBUG] [Thread-66143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:08:01.655 [DEBUG] [Thread-66143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:08:01.655 [DEBUG] [Thread-66143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:08:01.674 [INFO] [Thread-66143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:08:01.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:08:01.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:08:02.566 [DEBUG] [Thread-66143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:08:02.567 [DEBUG] [Thread-66143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:08:02.614 [DEBUG] [Thread-66143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:08:02.614 [DEBUG] [Thread-66143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:08:02.623 [DEBUG] [Thread-66143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:08:02.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:08: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')
2025-11-18T03:08:02.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:08:02.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:08:02.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:08:02.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:08:02.661 [DEBUG] [Thread-66143] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:08:05.481 [DEBUG] [Thread-66145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:08:10.087 [DEBUG] [Thread-66146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:08:25.116 [DEBUG] [Thread-66147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:08:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:08:32.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:08:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:08:33.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 8, 13), 8.6, 55.27, 0.0, 14.61, 11.64, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:08:33.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:08:13
2025-11-18T03:08:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:08:33.603 [DEBUG] [Thread-66148] [transport.py] [_log()] starting thread (client mode): 0xd07228f0
2025-11-18T03:08:33.603 [DEBUG] [Thread-66148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:08:33.625 [DEBUG] [Thread-66148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:08:33.625 [INFO] [Thread-66148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:08:33.628 [DEBUG] [Thread-66148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:08:33.628 [DEBUG] [Thread-66148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:08:33.628 [DEBUG] [Thread-66148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:08:33.628 [DEBUG] [Thread-66148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:08:33.628 [DEBUG] [Thread-66148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] client lang: <none>
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] server lang: <none>
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] kex follows: False
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] Compression: none
2025-11-18T03:08:33.629 [DEBUG] [Thread-66148] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:08:33.645 [DEBUG] [Thread-66148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:08:33.646 [DEBUG] [Thread-66148] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:08:33.646 [DEBUG] [Thread-66148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:08:33.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:08:33.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:08:33.648 [DEBUG] [Thread-66148] [transport.py] [_log()] userauth is OK
2025-11-18T03:08:33.648 [DEBUG] [Thread-66148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:08:33.648 [DEBUG] [Thread-66148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:08:33.648 [DEBUG] [Thread-66148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:08:33.649 [DEBUG] [Thread-66148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:08:33.672 [INFO] [Thread-66148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:08:33.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:08:34.304 [DEBUG] [Thread-66148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:08:34.305 [DEBUG] [Thread-66148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:08:34.305 [DEBUG] [Thread-66148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:08:34.346 [DEBUG] [Thread-66148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:08:34.347 [DEBUG] [Thread-66148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:08:34.350 [DEBUG] [Thread-66148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:08:34.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:08:34.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:08:34.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:08:34.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:08:34.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:08:34.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:08:34.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:08:34.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:08:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:08:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.046916 -999.00  +11.90  14.79     59   +4.20 1 1 1 1 1     0    0 7.10 -33.69 ZNESW 12.8 14.8 141.4 18.4 12.3 -23.5 12.2 -22.5 12.0 -22.2 12.3 -23.0
2025-11-18T03:08:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:08:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:08:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.046916
2025-11-18T03:08:34.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:08:34.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:08:34.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:08:34.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:08:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:08:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:08:13', tmtdew=8.6, humidity=55.27, cloud=0.0, wind=14.61, temperature=11.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:08:13', seeing=1.43, atlas_timestamp='2025-11-18T01:07:33.542', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:06:00')
2025-11-18T03:08:34.378 [DEBUG] [Thread-66148] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:08:34.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:08:34.473 [DEBUG] [Thread-66151] [transport.py] [_log()] starting thread (client mode): 0xd0713700
2025-11-18T03:08:34.473 [DEBUG] [Thread-66151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:08:34.488 [DEBUG] [Thread-66151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:08:34.489 [INFO] [Thread-66151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:08:34.496 [DEBUG] [Thread-66151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] client lang: <none>
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] server lang: <none>
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] kex follows: False
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] Compression: none
2025-11-18T03:08:34.497 [DEBUG] [Thread-66151] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:08:34.555 [DEBUG] [Thread-66151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:08:34.555 [DEBUG] [Thread-66151] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:08:34.556 [DEBUG] [Thread-66151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:08:34.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:08:34.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:08:34.611 [DEBUG] [Thread-66151] [transport.py] [_log()] userauth is OK
2025-11-18T03:08:34.611 [DEBUG] [Thread-66151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:08:34.612 [DEBUG] [Thread-66151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:08:34.612 [DEBUG] [Thread-66151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:08:34.612 [DEBUG] [Thread-66151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:08:34.630 [INFO] [Thread-66151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:08:34.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:08:34.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:08:35.455 [DEBUG] [Thread-66151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:08:35.455 [DEBUG] [Thread-66151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:08:35.503 [DEBUG] [Thread-66151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:08:35.503 [DEBUG] [Thread-66151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:08:35.512 [DEBUG] [Thread-66151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:08:35.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:08:35.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:08:35.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:08:35.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:08:35.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:08:35.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:08:35.546 [DEBUG] [Thread-66151] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:08:40.147 [DEBUG] [Thread-66153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:08:55.183 [DEBUG] [Thread-66154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:08:59.462 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:08:59.463 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:09:05.537 [DEBUG] [Thread-66155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:09:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:09:05.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:09:05.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:09:06.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 8, 45), 8.68, 55.14, 0.0, 16.2, 11.6, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:09:06.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:08:45
2025-11-18T03:09:06.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:09:06.470 [DEBUG] [Thread-66156] [transport.py] [_log()] starting thread (client mode): 0xd0720af0
2025-11-18T03:09:06.470 [DEBUG] [Thread-66156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:09:06.490 [DEBUG] [Thread-66156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:09:06.490 [INFO] [Thread-66156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:09:06.493 [DEBUG] [Thread-66156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:09:06.493 [DEBUG] [Thread-66156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:09:06.493 [DEBUG] [Thread-66156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:09:06.493 [DEBUG] [Thread-66156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:09:06.493 [DEBUG] [Thread-66156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:09:06.493 [DEBUG] [Thread-66156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:09:06.493 [DEBUG] [Thread-66156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:09:06.493 [DEBUG] [Thread-66156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] client lang: <none>
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] server lang: <none>
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] kex follows: False
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] Compression: none
2025-11-18T03:09:06.494 [DEBUG] [Thread-66156] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:09:06.511 [DEBUG] [Thread-66156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:09:06.511 [DEBUG] [Thread-66156] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:09:06.512 [DEBUG] [Thread-66156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:09:06.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:09:06.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:09:06.514 [DEBUG] [Thread-66156] [transport.py] [_log()] userauth is OK
2025-11-18T03:09:06.514 [DEBUG] [Thread-66156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:09:06.514 [DEBUG] [Thread-66156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:09:06.514 [DEBUG] [Thread-66156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:09:06.515 [DEBUG] [Thread-66156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:09:06.536 [INFO] [Thread-66156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:09:06.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:09:07.176 [DEBUG] [Thread-66156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:09:07.176 [DEBUG] [Thread-66156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:09:07.177 [DEBUG] [Thread-66156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:09:07.217 [DEBUG] [Thread-66156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:09:07.217 [DEBUG] [Thread-66156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:09:07.220 [DEBUG] [Thread-66156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:09:07.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:09:07.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:09:07.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:09:07.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:09:07.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:09:07.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:09:07.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:09:07.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:09:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:09:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.047668 -999.00  +11.90  16.70     58   +4.10 1 1 1 1 1     0    0 7.30 -28.77 ZNESW 11.9 16.7 145.6 17.8 12.3 -23.5 12.2 -22.5 12.0 -22.1 12.3 -23.0
2025-11-18T03:09:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:09:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:09:07.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.047668
2025-11-18T03:09:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:09:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:09:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:09:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:09:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:09:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:08:45', tmtdew=8.68, humidity=55.14, cloud=0.0, wind=16.2, temperature=11.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:08:45', seeing=1.43, atlas_timestamp='2025-11-18T01:08:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:06:00')
2025-11-18T03:09:07.247 [DEBUG] [Thread-66156] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:09:07.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:09:07.343 [DEBUG] [Thread-66159] [transport.py] [_log()] starting thread (client mode): 0xd0720730
2025-11-18T03:09:07.343 [DEBUG] [Thread-66159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:09:07.362 [DEBUG] [Thread-66159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:09:07.362 [INFO] [Thread-66159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] client lang: <none>
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] server lang: <none>
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] kex follows: False
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:09:07.370 [DEBUG] [Thread-66159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:09:07.371 [DEBUG] [Thread-66159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:09:07.371 [DEBUG] [Thread-66159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:09:07.371 [DEBUG] [Thread-66159] [transport.py] [_log()] Compression: none
2025-11-18T03:09:07.371 [DEBUG] [Thread-66159] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:09:07.435 [DEBUG] [Thread-66159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:09:07.435 [DEBUG] [Thread-66159] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:09:07.435 [DEBUG] [Thread-66159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:09:07.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:09:07.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:09:07.491 [DEBUG] [Thread-66159] [transport.py] [_log()] userauth is OK
2025-11-18T03:09:07.491 [DEBUG] [Thread-66159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:09:07.491 [DEBUG] [Thread-66159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:09:07.491 [DEBUG] [Thread-66159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:09:07.491 [DEBUG] [Thread-66159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:09:07.510 [INFO] [Thread-66159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:09:07.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:09:07.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:09:08.347 [DEBUG] [Thread-66159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:09:08.348 [DEBUG] [Thread-66159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:09:08.395 [DEBUG] [Thread-66159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:09:08.395 [DEBUG] [Thread-66159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:09:08.404 [DEBUG] [Thread-66159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:09:08.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:09:08.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:09:08.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:09:08.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:09:08.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:09:08.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:09:08.438 [DEBUG] [Thread-66159] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:09:10.213 [DEBUG] [Thread-66161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:09:25.253 [DEBUG] [Thread-66162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:09:38.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:09:38.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:09:38.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:09:39.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 9, 17), 8.66, 55.22, 0.0, 16.94, 11.65, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:09:39.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:09:17
2025-11-18T03:09:39.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:09:39.385 [DEBUG] [Thread-66163] [transport.py] [_log()] starting thread (client mode): 0xd07207f0
2025-11-18T03:09:39.385 [DEBUG] [Thread-66163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:09:39.406 [DEBUG] [Thread-66163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:09:39.406 [INFO] [Thread-66163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:09:39.407 [DEBUG] [Thread-66163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:09:39.407 [DEBUG] [Thread-66163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:09:39.407 [DEBUG] [Thread-66163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:09:39.407 [DEBUG] [Thread-66163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:09:39.407 [DEBUG] [Thread-66163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:09:39.407 [DEBUG] [Thread-66163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:09:39.407 [DEBUG] [Thread-66163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:09:39.407 [DEBUG] [Thread-66163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] client lang: <none>
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] server lang: <none>
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] kex follows: False
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] Compression: none
2025-11-18T03:09:39.408 [DEBUG] [Thread-66163] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:09:39.422 [DEBUG] [Thread-66163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:09:39.422 [DEBUG] [Thread-66163] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:09:39.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:09:39.423 [DEBUG] [Thread-66163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:09:39.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:09:39.425 [DEBUG] [Thread-66163] [transport.py] [_log()] userauth is OK
2025-11-18T03:09:39.425 [DEBUG] [Thread-66163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:09:39.425 [DEBUG] [Thread-66163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:09:39.425 [DEBUG] [Thread-66163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:09:39.425 [DEBUG] [Thread-66163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:09:39.449 [INFO] [Thread-66163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:09:39.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:09:40.101 [DEBUG] [Thread-66163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:09:40.101 [DEBUG] [Thread-66163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:09:40.101 [DEBUG] [Thread-66163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:09:40.142 [DEBUG] [Thread-66163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:09:40.142 [DEBUG] [Thread-66163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:09:40.145 [DEBUG] [Thread-66163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:09:40.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:09:40.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:09:40.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:09:40.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:09:40.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:09:40.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:09:40.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:09:40.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:09:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:09:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.047957 -999.00  +11.80  14.16     59   +4.10 1 1 1 1 1     0    0 7.21 -27.47 ZNESW 15.2 14.2 139.8 15.6 12.3 -23.5 12.2 -22.5 11.9 -22.2 12.2 -23.1
2025-11-18T03:09:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:09:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:09:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.047957
2025-11-18T03:09:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:09:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:09:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:09:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:09:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:09:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:09:17', tmtdew=8.66, humidity=55.22, cloud=0.0, wind=16.94, temperature=11.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:09:17', seeing=1.43, atlas_timestamp='2025-11-18T01:09:03.485', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:06:00')
2025-11-18T03:09:40.168 [DEBUG] [Thread-66163] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:09:40.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:09:40.265 [DEBUG] [Thread-66166] [transport.py] [_log()] starting thread (client mode): 0xd0796c80
2025-11-18T03:09:40.265 [DEBUG] [Thread-66166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:09:40.275 [DEBUG] [Thread-66167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:09:40.281 [DEBUG] [Thread-66166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:09:40.281 [INFO] [Thread-66166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] client lang: <none>
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] server lang: <none>
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] kex follows: False
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] Compression: none
2025-11-18T03:09:40.288 [DEBUG] [Thread-66166] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:09:40.347 [DEBUG] [Thread-66166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:09:40.348 [DEBUG] [Thread-66166] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:09:40.349 [DEBUG] [Thread-66166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:09:40.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:09:40.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:09:40.403 [DEBUG] [Thread-66166] [transport.py] [_log()] userauth is OK
2025-11-18T03:09:40.404 [DEBUG] [Thread-66166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:09:40.404 [DEBUG] [Thread-66166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:09:40.404 [DEBUG] [Thread-66166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:09:40.404 [DEBUG] [Thread-66166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:09:40.423 [INFO] [Thread-66166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:09:40.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:09:40.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:09:41.310 [DEBUG] [Thread-66166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:09:41.310 [DEBUG] [Thread-66166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:09:41.358 [DEBUG] [Thread-66166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:09:41.358 [DEBUG] [Thread-66166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:09:41.367 [DEBUG] [Thread-66166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:09:41.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:09:41.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')
2025-11-18T03:09: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') -> 00000000
2025-11-18T03:09:41.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:09:41.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:09:41.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:09:41.400 [DEBUG] [Thread-66166] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:09:55.307 [DEBUG] [Thread-66169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:09:59.664 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:09:59.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:05.591 [DEBUG] [Thread-66170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:10.334 [DEBUG] [Thread-66171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:10:11.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:10:11.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:10:12.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 9, 49), 8.63, 55.34, 0.0, 17.45, 11.6, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:10:12.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:09:49
2025-11-18T03:10:12.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:10:12.358 [DEBUG] [Thread-66172] [transport.py] [_log()] starting thread (client mode): 0xd0796cb0
2025-11-18T03:10:12.358 [DEBUG] [Thread-66172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:10:12.376 [DEBUG] [Thread-66172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:10:12.377 [INFO] [Thread-66172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:10:12.380 [DEBUG] [Thread-66172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:10:12.380 [DEBUG] [Thread-66172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:10:12.380 [DEBUG] [Thread-66172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:10:12.380 [DEBUG] [Thread-66172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:10:12.380 [DEBUG] [Thread-66172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:10:12.380 [DEBUG] [Thread-66172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:10:12.380 [DEBUG] [Thread-66172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:10:12.380 [DEBUG] [Thread-66172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] client lang: <none>
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] server lang: <none>
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] kex follows: False
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] Compression: none
2025-11-18T03:10:12.381 [DEBUG] [Thread-66172] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:10:12.400 [DEBUG] [Thread-66172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:10:12.401 [DEBUG] [Thread-66172] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:10:12.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:10:12.402 [DEBUG] [Thread-66172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:10:12.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:10:12.403 [DEBUG] [Thread-66172] [transport.py] [_log()] userauth is OK
2025-11-18T03:10:12.403 [DEBUG] [Thread-66172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:10:12.403 [DEBUG] [Thread-66172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:10:12.404 [DEBUG] [Thread-66172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:10:12.404 [DEBUG] [Thread-66172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:10:12.436 [INFO] [Thread-66172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:10:12.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:10:13.751 [DEBUG] [Thread-66172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:10:13.752 [DEBUG] [Thread-66172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:10:13.752 [DEBUG] [Thread-66172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:10:13.792 [DEBUG] [Thread-66172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:10:13.793 [DEBUG] [Thread-66172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:10:13.796 [DEBUG] [Thread-66172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:10:13.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:10:13.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:10:13.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:10:13.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:10:13.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:10:13.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:10:13.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:10:13.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:10:13.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:10:13.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.048305 -999.00  +11.80  15.39     59   +4.20 1 1 1 1 1     0    0 7.30 -26.36 ZNESW 12.9 15.4 144.4 20.6 12.3 -23.5 12.2 -22.4 12.0 -22.2 12.2 -23.1
2025-11-18T03:10:13.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:10:13.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:10:13.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.048305
2025-11-18T03:10:13.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:10:13.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:10:13.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:10:13.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:10:13.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:10:13.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:09:49', tmtdew=8.63, humidity=55.34, cloud=0.0, wind=17.45, temperature=11.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:09:49', seeing=1.54, atlas_timestamp='2025-11-18T01:09:33.552', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:06:00')
2025-11-18T03:10:13.819 [DEBUG] [Thread-66172] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:10:13.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:10:13.917 [DEBUG] [Thread-66175] [transport.py] [_log()] starting thread (client mode): 0xd0796aa0
2025-11-18T03:10:13.917 [DEBUG] [Thread-66175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:10:13.935 [DEBUG] [Thread-66175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:10:13.935 [INFO] [Thread-66175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:10:13.943 [DEBUG] [Thread-66175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:10:13.943 [DEBUG] [Thread-66175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:10:13.943 [DEBUG] [Thread-66175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:10:13.943 [DEBUG] [Thread-66175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] client lang: <none>
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] server lang: <none>
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] kex follows: False
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] Compression: none
2025-11-18T03:10:13.944 [DEBUG] [Thread-66175] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:10:14.004 [DEBUG] [Thread-66175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:10:14.004 [DEBUG] [Thread-66175] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:10:14.005 [DEBUG] [Thread-66175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:10:14.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:10:14.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:10:14.060 [DEBUG] [Thread-66175] [transport.py] [_log()] userauth is OK
2025-11-18T03:10:14.060 [DEBUG] [Thread-66175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:10:14.060 [DEBUG] [Thread-66175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:10:14.060 [DEBUG] [Thread-66175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:10:14.060 [DEBUG] [Thread-66175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:10:14.080 [INFO] [Thread-66175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:10:14.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:10:14.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:10:15.010 [DEBUG] [Thread-66175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:10:15.010 [DEBUG] [Thread-66175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:10:15.058 [DEBUG] [Thread-66175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:10:15.058 [DEBUG] [Thread-66175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:10:15.067 [DEBUG] [Thread-66175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:10:15.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:10:15.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:10:15.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:10:15.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:10:15.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:10:15.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:10:15.102 [DEBUG] [Thread-66175] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:10:15.345 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:18.552 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:23.611 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:25.364 [DEBUG] [Thread-66177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:29.045 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:40.407 [DEBUG] [Thread-66178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:45.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:10:45.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:10:45.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
2025-11-18T03:10:45.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 10, 21), 8.59, 55.49, 0.0, 18.1, 11.65, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:10:45.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:10:21
2025-11-18T03:10:45.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:10:46.047 [DEBUG] [Thread-66179] [transport.py] [_log()] starting thread (client mode): 0xd0710160
2025-11-18T03:10:46.047 [DEBUG] [Thread-66179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:10:46.067 [DEBUG] [Thread-66179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:10:46.067 [INFO] [Thread-66179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] client lang: <none>
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] server lang: <none>
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] kex follows: False
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] Compression: none
2025-11-18T03:10:46.071 [DEBUG] [Thread-66179] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:10:46.087 [DEBUG] [Thread-66179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:10:46.088 [DEBUG] [Thread-66179] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:10:46.088 [DEBUG] [Thread-66179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:10:46.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:10:46.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:10:46.089 [DEBUG] [Thread-66179] [transport.py] [_log()] userauth is OK
2025-11-18T03:10:46.089 [DEBUG] [Thread-66179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:10:46.089 [DEBUG] [Thread-66179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:10:46.089 [DEBUG] [Thread-66179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:10:46.089 [DEBUG] [Thread-66179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:10:46.098 [INFO] [Thread-66179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:10:46.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:10:46.744 [DEBUG] [Thread-66179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:10:46.744 [DEBUG] [Thread-66179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:10:46.744 [DEBUG] [Thread-66179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:10:46.785 [DEBUG] [Thread-66179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:10:46.785 [DEBUG] [Thread-66179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:10:46.787 [DEBUG] [Thread-66179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:10:46.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:10:46.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:10:46.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:10:46.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:10:46.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:10:46.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:10:46.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:10:46.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.048652 -999.00  +11.80  14.93     59   +4.20 1 1 1 1 1     0    0 7.19 -25.86 ZNESW 11.6 14.9 133.2 17.0 12.3 -23.5 12.2 -22.5 12.0 -22.2 12.3 -23.1
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.048652
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:10:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:10:21', tmtdew=8.59, humidity=55.49, cloud=0.0, wind=18.1, temperature=11.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:10:21', seeing=1.11, atlas_timestamp='2025-11-18T01:10:03.533', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:06:00')
2025-11-18T03:10:46.806 [DEBUG] [Thread-66179] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:10:46.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:10:46.890 [DEBUG] [Thread-66182] [transport.py] [_log()] starting thread (client mode): 0xd0711c90
2025-11-18T03:10:46.890 [DEBUG] [Thread-66182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:10:46.905 [DEBUG] [Thread-66182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:10:46.906 [INFO] [Thread-66182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] client lang: <none>
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] server lang: <none>
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] kex follows: False
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:10:46.913 [DEBUG] [Thread-66182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:10:46.914 [DEBUG] [Thread-66182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:10:46.914 [DEBUG] [Thread-66182] [transport.py] [_log()] Compression: none
2025-11-18T03:10:46.914 [DEBUG] [Thread-66182] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:10:46.974 [DEBUG] [Thread-66182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:10:46.974 [DEBUG] [Thread-66182] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:10:46.975 [DEBUG] [Thread-66182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:10:46.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:10:46.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:10:47.031 [DEBUG] [Thread-66182] [transport.py] [_log()] userauth is OK
2025-11-18T03:10:47.031 [DEBUG] [Thread-66182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:10:47.031 [DEBUG] [Thread-66182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:10:47.031 [DEBUG] [Thread-66182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:10:47.031 [DEBUG] [Thread-66182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:10:47.047 [INFO] [Thread-66182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:10:47.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:10:47.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:10:47.880 [DEBUG] [Thread-66182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:10:47.880 [DEBUG] [Thread-66182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:10:47.934 [DEBUG] [Thread-66182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:10:47.934 [DEBUG] [Thread-66182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:10:47.942 [DEBUG] [Thread-66182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:10:47.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:10:47.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:10:47.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:10:47.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:10:47.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:10:47.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:10:47.977 [DEBUG] [Thread-66182] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:10:48.425 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:52.830 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:55.433 [DEBUG] [Thread-66184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:59.869 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:10:59.870 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:05.666 [DEBUG] [Thread-66185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:10.465 [DEBUG] [Thread-66186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:12.228 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:16.627 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:11:17.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:11:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:11:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 10, 53), 8.55, 55.97, 0.0, 18.33, 11.69, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:11:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:10:53
2025-11-18T03:11:18.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:11:18.914 [DEBUG] [Thread-66187] [transport.py] [_log()] starting thread (client mode): 0xd0797610
2025-11-18T03:11:18.915 [DEBUG] [Thread-66187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:11:18.934 [DEBUG] [Thread-66187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:11:18.934 [INFO] [Thread-66187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:11:18.935 [DEBUG] [Thread-66187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:11:18.935 [DEBUG] [Thread-66187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:11:18.935 [DEBUG] [Thread-66187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] client lang: <none>
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] server lang: <none>
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] kex follows: False
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] Compression: none
2025-11-18T03:11:18.936 [DEBUG] [Thread-66187] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:11:18.944 [DEBUG] [Thread-66187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:11:18.945 [DEBUG] [Thread-66187] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:11:18.945 [DEBUG] [Thread-66187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:11:18.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:11:18.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:11:18.946 [DEBUG] [Thread-66187] [transport.py] [_log()] userauth is OK
2025-11-18T03:11:18.947 [DEBUG] [Thread-66187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:11:18.947 [DEBUG] [Thread-66187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:11:18.947 [DEBUG] [Thread-66187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:11:18.947 [DEBUG] [Thread-66187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:11:18.961 [INFO] [Thread-66187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:11:18.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:11:19.662 [DEBUG] [Thread-66187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:11:19.662 [DEBUG] [Thread-66187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:11:19.662 [DEBUG] [Thread-66187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:11:19.702 [DEBUG] [Thread-66187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:11:19.703 [DEBUG] [Thread-66187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:11:19.705 [DEBUG] [Thread-66187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:11:19.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:11:19.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:11:19.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:11:19.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:11:19.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:11:19.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:11:19.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:11:19.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:11:19.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:11:19.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.049056 -999.00  +11.90  13.09     59   +4.30 1 1 1 1 1     0    0 7.16 -26.63 ZNESW 11.5 13.1 141.8 18.5 12.3 -23.5 -999.0 -999.0 12.0 -22.2 12.2 -23.0
2025-11-18T03:11:19.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:11:19.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:11:19.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.049056
2025-11-18T03:11:19.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:11:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:11:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:11:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:11:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:11:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:10:53', tmtdew=8.55, humidity=55.97, cloud=0.0, wind=18.33, temperature=11.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:10:54', seeing=1.03, atlas_timestamp='2025-11-18T01:10:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[0.014749999999999375, -0.0017499999999994742, 0.08624999999999972, 0.037499999999999645, 0.0019999999999988916, 0.05825000000000102, 0.005999999999998451, 0.03125, 0.03249999999999886, 0.04349999999999987, 0.07225000000000037, 0.061500000000000554, 0.12400000000000055, 0.06574999999999953, -0.0030000000000001137, 0.02099999999999902, 0.060249999999999915, 0.08450000000000024, 0.11099999999999888, 0.14624999999999844, 0.13799999999999812, 0.09774999999999956, 0.05025000000000013, 0.027749999999999275, 0.0860000000000003, 0.16949999999999932, 0.17074999999999996, 0.1844999999999999, 0.13049999999999962, 0.06100000000000172, 0.06300000000000061, 0.05600000000000094, 0.09274999999999878], zp_timestamp='2025-11-18T01:06:00')
2025-11-18T03:11:19.729 [DEBUG] [Thread-66187] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:11:19.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:11:19.826 [DEBUG] [Thread-66190] [transport.py] [_log()] starting thread (client mode): 0xd07af220
2025-11-18T03:11:19.827 [DEBUG] [Thread-66190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:11:19.842 [DEBUG] [Thread-66190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:11:19.842 [INFO] [Thread-66190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:11:19.851 [DEBUG] [Thread-66190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:11:19.851 [DEBUG] [Thread-66190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:11:19.851 [DEBUG] [Thread-66190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] client lang: <none>
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] server lang: <none>
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] kex follows: False
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:11:19.852 [DEBUG] [Thread-66190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:11:19.853 [DEBUG] [Thread-66190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:11:19.853 [DEBUG] [Thread-66190] [transport.py] [_log()] Compression: none
2025-11-18T03:11:19.853 [DEBUG] [Thread-66190] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:11:19.911 [DEBUG] [Thread-66190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:11:19.912 [DEBUG] [Thread-66190] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:11:19.912 [DEBUG] [Thread-66190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:11:19.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:11:19.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:11:19.970 [DEBUG] [Thread-66190] [transport.py] [_log()] userauth is OK
2025-11-18T03:11:19.971 [DEBUG] [Thread-66190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:11:19.971 [DEBUG] [Thread-66190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:11:19.971 [DEBUG] [Thread-66190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:11:19.971 [DEBUG] [Thread-66190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:11:19.990 [INFO] [Thread-66190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:11:19.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:11:19.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:11:20.837 [DEBUG] [Thread-66190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:11:20.837 [DEBUG] [Thread-66190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:11:20.885 [DEBUG] [Thread-66190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:11:20.885 [DEBUG] [Thread-66190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:11:20.893 [DEBUG] [Thread-66190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:11:20.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:11:20.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:11:20.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:11:20.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:11:20.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:11:20.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:11:20.926 [DEBUG] [Thread-66190] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:11:22.771 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:25.491 [DEBUG] [Thread-66192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:27.210 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:40.524 [DEBUG] [Thread-66193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:11:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:11:50.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:11:50.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:11:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 11, 25), 8.54, 55.99, 0.0, 17.15, 11.69, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:11:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:11:25
2025-11-18T03:11:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:11:51.847 [DEBUG] [Thread-66194] [transport.py] [_log()] starting thread (client mode): 0xd0711330
2025-11-18T03:11:51.848 [DEBUG] [Thread-66194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:11:51.872 [DEBUG] [Thread-66194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:11:51.872 [INFO] [Thread-66194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:11:51.876 [DEBUG] [Thread-66194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:11:51.876 [DEBUG] [Thread-66194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] client lang: <none>
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] server lang: <none>
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] kex follows: False
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:11:51.877 [DEBUG] [Thread-66194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:11:51.878 [DEBUG] [Thread-66194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:11:51.878 [DEBUG] [Thread-66194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:11:51.878 [DEBUG] [Thread-66194] [transport.py] [_log()] Compression: none
2025-11-18T03:11:51.878 [DEBUG] [Thread-66194] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:11:51.896 [DEBUG] [Thread-66194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:11:51.897 [DEBUG] [Thread-66194] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:11:51.897 [DEBUG] [Thread-66194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:11:51.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:11:51.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:11:51.941 [DEBUG] [Thread-66194] [transport.py] [_log()] userauth is OK
2025-11-18T03:11:51.941 [DEBUG] [Thread-66194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:11:51.941 [DEBUG] [Thread-66194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:11:51.941 [DEBUG] [Thread-66194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:11:51.941 [DEBUG] [Thread-66194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:11:51.979 [INFO] [Thread-66194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:11:51.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:11:52.628 [DEBUG] [Thread-66194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:11:52.629 [DEBUG] [Thread-66194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:11:52.629 [DEBUG] [Thread-66194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:11:52.670 [DEBUG] [Thread-66194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:11:52.670 [DEBUG] [Thread-66194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:11:52.673 [DEBUG] [Thread-66194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:11:52.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:11:52.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:11:52.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:11:52.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:11:52.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:11:52.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:11:52.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:11:52.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:11:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:11:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.049404 -999.00  +11.90  12.07     59   +4.30 1 1 1 1 1     0    0 7.04 -28.08 ZNESW 15.5 12.1 144.0 15.7 12.3 -23.5 12.2 -22.5 12.0 -22.1 12.3 -23.0
2025-11-18T03:11:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:11:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:11:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.049404
2025-11-18T03:11:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:11:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:11:52.699 [DEBUG] [Thread-66194] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:11:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:11:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:11:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:11:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:11:25', tmtdew=8.54, humidity=55.99, cloud=0.0, wind=17.15, temperature=11.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:11:26', seeing=1.18, atlas_timestamp='2025-11-18T01:11:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.08725000000000094, 0.10275000000000034, 0.06349999999999945, 0.05850000000000044, 0.06575000000000131, -0.011000000000001009, 0.011250000000000426, 0.03999999999999915, 0.06900000000000084, 0.06974999999999909, 0.07249999999999979, 0.13250000000000028, 0.09725000000000072, -0.031000000000000583, 0.04899999999999949, 0.07525000000000048, 0.11749999999999972, 0.11950000000000038, 0.13824999999999932, 0.1479999999999979, 0.08174999999999955, 0.052250000000000796, 0.03974999999999973, 0.08799999999999919, 0.20500000000000007, 0.1557499999999994, 0.19350000000000023, 0.23350000000000026, 0.09149999999999991, 0.062000000000001165, 0.08000000000000007, 0.1117499999999989], zp_timestamp='2025-11-18T01:10:00')
2025-11-18T03:11:52.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:11:52.802 [DEBUG] [Thread-66197] [transport.py] [_log()] starting thread (client mode): 0xd07132e0
2025-11-18T03:11:52.802 [DEBUG] [Thread-66197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:11:52.817 [DEBUG] [Thread-66197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:11:52.818 [INFO] [Thread-66197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:11:52.825 [DEBUG] [Thread-66197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:11:52.825 [DEBUG] [Thread-66197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:11:52.825 [DEBUG] [Thread-66197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:11:52.825 [DEBUG] [Thread-66197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:11:52.825 [DEBUG] [Thread-66197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:11:52.825 [DEBUG] [Thread-66197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:11:52.825 [DEBUG] [Thread-66197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:11:52.825 [DEBUG] [Thread-66197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] client lang: <none>
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] server lang: <none>
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] kex follows: False
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] Compression: none
2025-11-18T03:11:52.826 [DEBUG] [Thread-66197] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:11:52.884 [DEBUG] [Thread-66197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:11:52.884 [DEBUG] [Thread-66197] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:11:52.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:11:52.885 [DEBUG] [Thread-66197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:11:52.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:11:52.940 [DEBUG] [Thread-66197] [transport.py] [_log()] userauth is OK
2025-11-18T03:11:52.940 [DEBUG] [Thread-66197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:11:52.940 [DEBUG] [Thread-66197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:11:52.940 [DEBUG] [Thread-66197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:11:52.940 [DEBUG] [Thread-66197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:11:52.960 [INFO] [Thread-66197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:11:52.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:11:52.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:11:53.819 [DEBUG] [Thread-66197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:11:53.819 [DEBUG] [Thread-66197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:11:53.867 [DEBUG] [Thread-66197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:11:53.867 [DEBUG] [Thread-66197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:11:53.876 [DEBUG] [Thread-66197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:11:53.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:11:53.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:11:53.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:11:53.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:11:53.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:11:53.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:11:53.910 [DEBUG] [Thread-66197] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:11:55.554 [DEBUG] [Thread-66199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:00.072 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:00.073 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:05.732 [DEBUG] [Thread-66200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:10.605 [DEBUG] [Thread-66201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:12:23.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:12:23.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:12:24.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 11, 57), 8.5, 55.97, 0.0, 16.64, 11.6, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:12:24.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:11:57
2025-11-18T03:12:24.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:12:24.821 [DEBUG] [Thread-66202] [transport.py] [_log()] starting thread (client mode): 0xd0711f30
2025-11-18T03:12:24.821 [DEBUG] [Thread-66202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:12:24.834 [DEBUG] [Thread-66202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:12:24.834 [INFO] [Thread-66202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] client lang: <none>
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] server lang: <none>
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] kex follows: False
2025-11-18T03:12:24.837 [DEBUG] [Thread-66202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:12:24.838 [DEBUG] [Thread-66202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:12:24.838 [DEBUG] [Thread-66202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:12:24.838 [DEBUG] [Thread-66202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:12:24.838 [DEBUG] [Thread-66202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:12:24.838 [DEBUG] [Thread-66202] [transport.py] [_log()] Compression: none
2025-11-18T03:12:24.838 [DEBUG] [Thread-66202] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:12:24.853 [DEBUG] [Thread-66202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:12:24.853 [DEBUG] [Thread-66202] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:12:24.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:12:24.854 [DEBUG] [Thread-66202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:12:24.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:12:24.856 [DEBUG] [Thread-66202] [transport.py] [_log()] userauth is OK
2025-11-18T03:12:24.856 [DEBUG] [Thread-66202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:12:24.856 [DEBUG] [Thread-66202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:12:24.856 [DEBUG] [Thread-66202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:12:24.856 [DEBUG] [Thread-66202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:12:24.873 [INFO] [Thread-66202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:12:24.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:12:25.513 [DEBUG] [Thread-66202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:12:25.513 [DEBUG] [Thread-66202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:12:25.513 [DEBUG] [Thread-66202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:12:25.554 [DEBUG] [Thread-66202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:12:25.554 [DEBUG] [Thread-66202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:12:25.557 [DEBUG] [Thread-66202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:12:25.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:12:25.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:12:25.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:12:25.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:12:25.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:12:25.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:12:25.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:12:25.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:12:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:12:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.050098 -999.00  +11.90  11.02     59   +4.30 1 1 1 1 1     0    0 7.14 -30.25 ZNESW 14.7 11.0 153.4 14.9 12.3 -23.4 12.2 -22.5 12.0 -22.1 12.2 -23.0
2025-11-18T03:12:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:12:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:12:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.050098
2025-11-18T03:12:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:12:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:12:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:12:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:12:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:12:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:11:57', tmtdew=8.5, humidity=55.97, cloud=0.0, wind=16.64, temperature=11.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:11:58', seeing=1.11, atlas_timestamp='2025-11-18T01:12:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.08725000000000094, 0.10275000000000034, 0.06349999999999945, 0.05850000000000044, 0.06575000000000131, -0.011000000000001009, 0.011250000000000426, 0.03999999999999915, 0.06900000000000084, 0.06974999999999909, 0.07249999999999979, 0.13250000000000028, 0.09725000000000072, -0.031000000000000583, 0.04899999999999949, 0.07525000000000048, 0.11749999999999972, 0.11950000000000038, 0.13824999999999932, 0.1479999999999979, 0.08174999999999955, 0.052250000000000796, 0.03974999999999973, 0.08799999999999919, 0.20500000000000007, 0.1557499999999994, 0.19350000000000023, 0.23350000000000026, 0.09149999999999991, 0.062000000000001165, 0.08000000000000007, 0.1117499999999989], zp_timestamp='2025-11-18T01:10:00')
2025-11-18T03:12:25.583 [DEBUG] [Thread-66202] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:12:25.634 [DEBUG] [Thread-66205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:25.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:12:25.678 [DEBUG] [Thread-66206] [transport.py] [_log()] starting thread (client mode): 0xd3160070
2025-11-18T03:12:25.678 [DEBUG] [Thread-66206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:12:25.692 [DEBUG] [Thread-66206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:12:25.693 [INFO] [Thread-66206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:12:25.700 [DEBUG] [Thread-66206] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:12:25.700 [DEBUG] [Thread-66206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:12:25.700 [DEBUG] [Thread-66206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:12:25.700 [DEBUG] [Thread-66206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:12:25.700 [DEBUG] [Thread-66206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:12:25.700 [DEBUG] [Thread-66206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] client lang: <none>
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] server lang: <none>
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] kex follows: False
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:12:25.701 [DEBUG] [Thread-66206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:12:25.702 [DEBUG] [Thread-66206] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:12:25.702 [DEBUG] [Thread-66206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:12:25.702 [DEBUG] [Thread-66206] [transport.py] [_log()] Compression: none
2025-11-18T03:12:25.702 [DEBUG] [Thread-66206] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:12:25.760 [DEBUG] [Thread-66206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:12:25.761 [DEBUG] [Thread-66206] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:12:25.762 [DEBUG] [Thread-66206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:12:25.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:12:25.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:12:25.816 [DEBUG] [Thread-66206] [transport.py] [_log()] userauth is OK
2025-11-18T03:12:25.816 [DEBUG] [Thread-66206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:12:25.816 [DEBUG] [Thread-66206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:12:25.816 [DEBUG] [Thread-66206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:12:25.816 [DEBUG] [Thread-66206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:12:25.835 [INFO] [Thread-66206] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:12:25.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:12:25.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:12:26.713 [DEBUG] [Thread-66206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:12:26.713 [DEBUG] [Thread-66206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:12:26.760 [DEBUG] [Thread-66206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:12:26.760 [DEBUG] [Thread-66206] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:12:26.769 [DEBUG] [Thread-66206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:12:26.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:12:26.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:12:26.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:12:26.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:12:26.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:12:26.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:12:26.808 [DEBUG] [Thread-66206] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:12:31.311 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:34.386 [DEBUG] [Thread-80 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:40.662 [DEBUG] [Thread-66208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:55.689 [DEBUG] [Thread-66209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:12:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:12:56.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:12:56.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:12:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 12, 30), 8.49, 55.97, 0.0, 18.07, 11.59, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:12:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:12:30
2025-11-18T03:12:57.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:12:57.739 [DEBUG] [Thread-66210] [transport.py] [_log()] starting thread (client mode): 0xd3162e60
2025-11-18T03:12:57.739 [DEBUG] [Thread-66210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:12:57.759 [DEBUG] [Thread-66210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:12:57.759 [INFO] [Thread-66210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:12:57.762 [DEBUG] [Thread-66210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:12:57.762 [DEBUG] [Thread-66210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:12:57.762 [DEBUG] [Thread-66210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:12:57.762 [DEBUG] [Thread-66210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:12:57.762 [DEBUG] [Thread-66210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:12:57.762 [DEBUG] [Thread-66210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:12:57.762 [DEBUG] [Thread-66210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:12:57.762 [DEBUG] [Thread-66210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] client lang: <none>
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] server lang: <none>
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] kex follows: False
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] Compression: none
2025-11-18T03:12:57.763 [DEBUG] [Thread-66210] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:12:57.779 [DEBUG] [Thread-66210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:12:57.780 [DEBUG] [Thread-66210] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:12:57.780 [DEBUG] [Thread-66210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:12:57.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:12:57.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:12:57.782 [DEBUG] [Thread-66210] [transport.py] [_log()] userauth is OK
2025-11-18T03:12:57.783 [DEBUG] [Thread-66210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:12:57.783 [DEBUG] [Thread-66210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:12:57.783 [DEBUG] [Thread-66210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:12:57.783 [DEBUG] [Thread-66210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:12:57.817 [INFO] [Thread-66210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:12:57.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:12:58.426 [DEBUG] [Thread-66210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:12:58.426 [DEBUG] [Thread-66210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:12:58.427 [DEBUG] [Thread-66210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:12:58.467 [DEBUG] [Thread-66210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:12:58.468 [DEBUG] [Thread-66210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:12:58.470 [DEBUG] [Thread-66210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:12:58.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:12:58.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:12:58.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:12:58.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:12:58.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:12:58.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:12:58.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:12:58.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:12:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:12:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.050445 -999.00  +11.90  14.41     59   +4.30 1 1 1 1 1     0    0 7.05 -31.45 ZNESW 12.7 14.4 162.2 19.1 12.3 -23.5 12.2 -22.4 11.9 -22.1 12.2 -23.1
2025-11-18T03:12:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:12:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:12:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.050445
2025-11-18T03:12:58.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:12:58.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:12:58.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:12:58.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:12:58.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:12:58.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:12:30', tmtdew=8.49, humidity=55.97, cloud=0.0, wind=18.07, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:12:30', seeing=1.11, atlas_timestamp='2025-11-18T01:12:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.08725000000000094, 0.10275000000000034, 0.06349999999999945, 0.05850000000000044, 0.06575000000000131, -0.011000000000001009, 0.011250000000000426, 0.03999999999999915, 0.06900000000000084, 0.06974999999999909, 0.07249999999999979, 0.13250000000000028, 0.09725000000000072, -0.031000000000000583, 0.04899999999999949, 0.07525000000000048, 0.11749999999999972, 0.11950000000000038, 0.13824999999999932, 0.1479999999999979, 0.08174999999999955, 0.052250000000000796, 0.03974999999999973, 0.08799999999999919, 0.20500000000000007, 0.1557499999999994, 0.19350000000000023, 0.23350000000000026, 0.09149999999999991, 0.062000000000001165, 0.08000000000000007, 0.1117499999999989], zp_timestamp='2025-11-18T01:10:00')
2025-11-18T03:12:58.490 [DEBUG] [Thread-66210] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:12:58.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:12:58.586 [DEBUG] [Thread-66213] [transport.py] [_log()] starting thread (client mode): 0xd0710910
2025-11-18T03:12:58.586 [DEBUG] [Thread-66213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:12:58.601 [DEBUG] [Thread-66213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:12:58.601 [INFO] [Thread-66213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] client lang: <none>
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] server lang: <none>
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] kex follows: False
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] Compression: none
2025-11-18T03:12:58.609 [DEBUG] [Thread-66213] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:12:58.668 [DEBUG] [Thread-66213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:12:58.668 [DEBUG] [Thread-66213] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:12:58.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:12:58.669 [DEBUG] [Thread-66213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:12:58.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:12:58.724 [DEBUG] [Thread-66213] [transport.py] [_log()] userauth is OK
2025-11-18T03:12:58.724 [DEBUG] [Thread-66213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:12:58.724 [DEBUG] [Thread-66213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:12:58.724 [DEBUG] [Thread-66213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:12:58.724 [DEBUG] [Thread-66213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:12:58.746 [INFO] [Thread-66213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:12:58.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:12:58.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:12:59.608 [DEBUG] [Thread-66213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:12:59.608 [DEBUG] [Thread-66213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:12:59.655 [DEBUG] [Thread-66213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:12:59.655 [DEBUG] [Thread-66213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:12:59.664 [DEBUG] [Thread-66213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:12:59.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:12:59.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:12:59.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:12:59.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:12:59.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:12:59.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:12:59.698 [DEBUG] [Thread-66213] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:13:00.275 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:13:00.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:13:05.784 [DEBUG] [Thread-66215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:13:10.717 [DEBUG] [Thread-66216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:13:25.753 [DEBUG] [Thread-66217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:13:29.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:13:29.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:13:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:13:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 13, 2), 8.51, 55.9, 0.0, 17.17, 11.59, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:13:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:13:02
2025-11-18T03:13:30.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:13:30.644 [DEBUG] [Thread-66218] [transport.py] [_log()] starting thread (client mode): 0xd0796800
2025-11-18T03:13:30.645 [DEBUG] [Thread-66218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:13:30.665 [DEBUG] [Thread-66218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:13:30.665 [INFO] [Thread-66218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:13:30.668 [DEBUG] [Thread-66218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:13:30.668 [DEBUG] [Thread-66218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:13:30.668 [DEBUG] [Thread-66218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:13:30.668 [DEBUG] [Thread-66218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:13:30.668 [DEBUG] [Thread-66218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] client lang: <none>
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] server lang: <none>
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] kex follows: False
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:13:30.669 [DEBUG] [Thread-66218] [transport.py] [_log()] Compression: none
2025-11-18T03:13:30.670 [DEBUG] [Thread-66218] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:13:30.688 [DEBUG] [Thread-66218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:13:30.688 [DEBUG] [Thread-66218] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:13:30.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:13:30.689 [DEBUG] [Thread-66218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:13:30.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:13:30.691 [DEBUG] [Thread-66218] [transport.py] [_log()] userauth is OK
2025-11-18T03:13:30.691 [DEBUG] [Thread-66218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:13:30.691 [DEBUG] [Thread-66218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:13:30.691 [DEBUG] [Thread-66218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:13:30.692 [DEBUG] [Thread-66218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:13:30.715 [INFO] [Thread-66218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:13:30.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:13:31.348 [DEBUG] [Thread-66218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:13:31.348 [DEBUG] [Thread-66218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:13:31.348 [DEBUG] [Thread-66218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:13:31.390 [DEBUG] [Thread-66218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:13:31.390 [DEBUG] [Thread-66218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:13:31.393 [DEBUG] [Thread-66218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:13:31.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:13:31.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:13:31.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:13:31.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:13:31.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:13:31.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:13:31.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:13:31.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:13:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:13:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.050793 -999.00  +11.90  10.50     59   +4.20 1 1 1 1 1     0    0 6.92 -31.53 ZNESW 9.2 10.5 153.0 15.8 12.3 -23.6 12.2 -22.6 11.9 -22.2 12.2 -23.1
2025-11-18T03:13:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:13:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:13:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.050793
2025-11-18T03:13:31.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:13:31.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:13:31.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:13:31.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:13:31.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:13:31.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:13:02', tmtdew=8.51, humidity=55.9, cloud=0.0, wind=17.17, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:13:02', seeing=1.28, atlas_timestamp='2025-11-18T01:13:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.08725000000000094, 0.10275000000000034, 0.06349999999999945, 0.05850000000000044, 0.06575000000000131, -0.011000000000001009, 0.011250000000000426, 0.03999999999999915, 0.06900000000000084, 0.06974999999999909, 0.07249999999999979, 0.13250000000000028, 0.09725000000000072, -0.031000000000000583, 0.04899999999999949, 0.07525000000000048, 0.11749999999999972, 0.11950000000000038, 0.13824999999999932, 0.1479999999999979, 0.08174999999999955, 0.052250000000000796, 0.03974999999999973, 0.08799999999999919, 0.20500000000000007, 0.1557499999999994, 0.19350000000000023, 0.23350000000000026, 0.09149999999999991, 0.062000000000001165, 0.08000000000000007, 0.1117499999999989], zp_timestamp='2025-11-18T01:10:00')
2025-11-18T03:13:31.420 [DEBUG] [Thread-66218] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:13:31.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:13:40.783 [DEBUG] [Thread-66221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:13:55.817 [DEBUG] [Thread-66222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:14:00.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:14:00.479 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:14:05.842 [DEBUG] [Thread-66223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:14:10.844 [DEBUG] [Thread-66224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:14:25.872 [DEBUG] [Thread-66225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:14:40.900 [DEBUG] [Thread-66226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:14:55.932 [DEBUG] [Thread-66227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:15:00.683 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:15:00.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:15:05.918 [DEBUG] [Thread-66228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:15:10.961 [DEBUG] [Thread-66229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:15:25.990 [DEBUG] [Thread-66230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:15:41.018 [DEBUG] [Thread-66231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:15:45.211 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-18T03:15:56.045 [DEBUG] [Thread-66232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:16:00.886 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:16:00.887 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:16:05.992 [DEBUG] [Thread-66233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:16:11.072 [DEBUG] [Thread-66234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:16:15.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:16:15.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:16:15.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:16:15.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 15, 42), 8.45, 56.17, 0.0, 15.92, 11.57, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:16:15.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:15:42
2025-11-18T03:16:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:16:16.229 [DEBUG] [Thread-66235] [transport.py] [_log()] starting thread (client mode): 0xd0794820
2025-11-18T03:16:16.229 [DEBUG] [Thread-66235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:16:16.249 [DEBUG] [Thread-66235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:16:16.249 [INFO] [Thread-66235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:16:16.252 [DEBUG] [Thread-66235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:16:16.252 [DEBUG] [Thread-66235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:16:16.252 [DEBUG] [Thread-66235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:16:16.252 [DEBUG] [Thread-66235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:16:16.252 [DEBUG] [Thread-66235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:16:16.252 [DEBUG] [Thread-66235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:16:16.252 [DEBUG] [Thread-66235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] client lang: <none>
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] server lang: <none>
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] kex follows: False
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] Compression: none
2025-11-18T03:16:16.253 [DEBUG] [Thread-66235] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:16:16.271 [DEBUG] [Thread-66235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:16:16.272 [DEBUG] [Thread-66235] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:16:16.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:16:16.272 [DEBUG] [Thread-66235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:16:16.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:16:16.273 [DEBUG] [Thread-66235] [transport.py] [_log()] userauth is OK
2025-11-18T03:16:16.273 [DEBUG] [Thread-66235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:16:16.273 [DEBUG] [Thread-66235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:16:16.274 [DEBUG] [Thread-66235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:16:16.274 [DEBUG] [Thread-66235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:16:16.288 [INFO] [Thread-66235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:16:16.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:16:17.078 [DEBUG] [Thread-66235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:16:17.078 [DEBUG] [Thread-66235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:16:17.079 [DEBUG] [Thread-66235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:16:17.120 [DEBUG] [Thread-66235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:16:17.120 [DEBUG] [Thread-66235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:16:17.123 [DEBUG] [Thread-66235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:16:17.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:16:17.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:16:17.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:16:17.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:16:17.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:16:17.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:16:17.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:16:17.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:16:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:16:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.052471 -999.00  +11.80  12.33     60   +4.30 1 1 1 1 1     0    0 6.94 -31.10 ZNESW 10.9 12.3 162.2 16.6 12.2 -23.4 12.1 -22.4 11.9 -22.0 12.2 -22.8
2025-11-18T03:16:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:16:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:16:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.052471
2025-11-18T03:16:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:16:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:16:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:16:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:16:17.149 [DEBUG] [Thread-66235] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:16:17.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:16:17.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:15:42', tmtdew=8.45, humidity=56.17, cloud=0.0, wind=15.92, temperature=11.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:16:14', seeing=1.09, atlas_timestamp='2025-11-18T01:15:33.494', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.08725000000000094, 0.10275000000000034, 0.06349999999999945, 0.05850000000000044, 0.06575000000000131, -0.011000000000001009, 0.011250000000000426, 0.03999999999999915, 0.06900000000000084, 0.06974999999999909, 0.07249999999999979, 0.13250000000000028, 0.09725000000000072, -0.031000000000000583, 0.04899999999999949, 0.07525000000000048, 0.11749999999999972, 0.11950000000000038, 0.13824999999999932, 0.1479999999999979, 0.08174999999999955, 0.052250000000000796, 0.03974999999999973, 0.08799999999999919, 0.20500000000000007, 0.1557499999999994, 0.19350000000000023, 0.23350000000000026, 0.09149999999999991, 0.062000000000001165, 0.08000000000000007, 0.1117499999999989], zp_timestamp='2025-11-18T01:12:00')
2025-11-18T03:16:17.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:16:17.250 [DEBUG] [Thread-66238] [transport.py] [_log()] starting thread (client mode): 0xd07968f0
2025-11-18T03:16:17.250 [DEBUG] [Thread-66238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:16:17.271 [DEBUG] [Thread-66238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:16:17.271 [INFO] [Thread-66238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] client lang: <none>
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] server lang: <none>
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] kex follows: False
2025-11-18T03:16:17.282 [DEBUG] [Thread-66238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:16:17.283 [DEBUG] [Thread-66238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:16:17.283 [DEBUG] [Thread-66238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:16:17.283 [DEBUG] [Thread-66238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:16:17.283 [DEBUG] [Thread-66238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:16:17.283 [DEBUG] [Thread-66238] [transport.py] [_log()] Compression: none
2025-11-18T03:16:17.283 [DEBUG] [Thread-66238] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:16:17.342 [DEBUG] [Thread-66238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:16:17.342 [DEBUG] [Thread-66238] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:16:17.343 [DEBUG] [Thread-66238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:16:17.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:16:17.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:16:17.404 [DEBUG] [Thread-66238] [transport.py] [_log()] userauth is OK
2025-11-18T03:16:17.404 [DEBUG] [Thread-66238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:16:17.404 [DEBUG] [Thread-66238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:16:17.404 [DEBUG] [Thread-66238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:16:17.405 [DEBUG] [Thread-66238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:16:17.425 [INFO] [Thread-66238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:16:17.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:16:17.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:16:18.296 [DEBUG] [Thread-66238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:16:18.296 [DEBUG] [Thread-66238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:16:18.344 [DEBUG] [Thread-66238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:16:18.345 [DEBUG] [Thread-66238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:16:18.357 [DEBUG] [Thread-66238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:16:18.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:16:18.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:16: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
2025-11-18T03:16:18.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:16:18.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:16:18.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:16:18.401 [DEBUG] [Thread-66238] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:16:26.101 [DEBUG] [Thread-66240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:16:41.149 [DEBUG] [Thread-66241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:16:48.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:16:48.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:16:48.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:16:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 16, 46), 8.42, 56.05, 0.0, 17.98, 11.6, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:16:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:16:46
2025-11-18T03:16:49.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:16:49.346 [DEBUG] [Thread-66242] [transport.py] [_log()] starting thread (client mode): 0xd07af3d0
2025-11-18T03:16:49.346 [DEBUG] [Thread-66242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:16:49.366 [DEBUG] [Thread-66242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:16:49.366 [INFO] [Thread-66242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:16:49.369 [DEBUG] [Thread-66242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:16:49.369 [DEBUG] [Thread-66242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:16:49.369 [DEBUG] [Thread-66242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:16:49.369 [DEBUG] [Thread-66242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:16:49.369 [DEBUG] [Thread-66242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] client lang: <none>
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] server lang: <none>
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] kex follows: False
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] Compression: none
2025-11-18T03:16:49.370 [DEBUG] [Thread-66242] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:16:49.388 [DEBUG] [Thread-66242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:16:49.388 [DEBUG] [Thread-66242] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:16:49.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:16:49.389 [DEBUG] [Thread-66242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:16:49.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:16:49.391 [DEBUG] [Thread-66242] [transport.py] [_log()] userauth is OK
2025-11-18T03:16:49.391 [DEBUG] [Thread-66242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:16:49.391 [DEBUG] [Thread-66242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:16:49.391 [DEBUG] [Thread-66242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:16:49.392 [DEBUG] [Thread-66242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:16:49.427 [INFO] [Thread-66242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:16:49.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:16:50.079 [DEBUG] [Thread-66242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:16:50.079 [DEBUG] [Thread-66242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:16:50.079 [DEBUG] [Thread-66242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:16:50.120 [DEBUG] [Thread-66242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:16:50.120 [DEBUG] [Thread-66242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:16:50.123 [DEBUG] [Thread-66242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:16:50.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:16:50.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:16:50.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:16:50.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:16:50.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:16:50.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:16:50.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:16:50.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:16:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:16:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.052818 -999.00  +11.80  12.33     60   +4.30 1 1 1 1 1     0    0 6.85 -33.59 ZNESW 13.7 12.3 154.2 15.7 12.2 -23.5 12.1 -22.4 11.8 -22.0 12.2 -22.9
2025-11-18T03:16:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:16:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:16:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.052818
2025-11-18T03:16:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:16:50.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:16:50.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:16:50.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:16:50.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:16:50.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:16:46', tmtdew=8.42, humidity=56.05, cloud=0.0, wind=17.98, temperature=11.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:16:46', seeing=1.08, atlas_timestamp='2025-11-18T01:16:03.475', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.08725000000000094, 0.10275000000000034, 0.06349999999999945, 0.05850000000000044, 0.06575000000000131, -0.011000000000001009, 0.011250000000000426, 0.03999999999999915, 0.06900000000000084, 0.06974999999999909, 0.07249999999999979, 0.13250000000000028, 0.09725000000000072, -0.031000000000000583, 0.04899999999999949, 0.07525000000000048, 0.11749999999999972, 0.11950000000000038, 0.13824999999999932, 0.1479999999999979, 0.08174999999999955, 0.052250000000000796, 0.03974999999999973, 0.08799999999999919, 0.20500000000000007, 0.1557499999999994, 0.19350000000000023, 0.23350000000000026, 0.09149999999999991, 0.062000000000001165, 0.08000000000000007, 0.1117499999999989], zp_timestamp='2025-11-18T01:12:00')
2025-11-18T03:16:50.148 [DEBUG] [Thread-66242] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:16:50.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:16:50.235 [DEBUG] [Thread-66245] [transport.py] [_log()] starting thread (client mode): 0xd31cf340
2025-11-18T03:16:50.235 [DEBUG] [Thread-66245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:16:50.249 [DEBUG] [Thread-66245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:16:50.250 [INFO] [Thread-66245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:16:50.257 [DEBUG] [Thread-66245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:16:50.257 [DEBUG] [Thread-66245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] client lang: <none>
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] server lang: <none>
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] kex follows: False
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:16:50.258 [DEBUG] [Thread-66245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:16:50.259 [DEBUG] [Thread-66245] [transport.py] [_log()] Compression: none
2025-11-18T03:16:50.259 [DEBUG] [Thread-66245] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:16:50.315 [DEBUG] [Thread-66245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:16:50.316 [DEBUG] [Thread-66245] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:16:50.316 [DEBUG] [Thread-66245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:16:50.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:16:50.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:16:50.376 [DEBUG] [Thread-66245] [transport.py] [_log()] userauth is OK
2025-11-18T03:16:50.376 [DEBUG] [Thread-66245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:16:50.376 [DEBUG] [Thread-66245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:16:50.377 [DEBUG] [Thread-66245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:16:50.377 [DEBUG] [Thread-66245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:16:50.396 [INFO] [Thread-66245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:16:50.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:16:50.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:16:51.236 [DEBUG] [Thread-66245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:16:51.236 [DEBUG] [Thread-66245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:16:51.283 [DEBUG] [Thread-66245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:16:51.283 [DEBUG] [Thread-66245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:16:51.292 [DEBUG] [Thread-66245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:16:51.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:16:51.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:16:51.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:16:51.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:16:51.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:16:51.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:16:51.328 [DEBUG] [Thread-66245] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:16:56.179 [DEBUG] [Thread-66247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:17:01.096 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:17:01.097 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:17:06.082 [DEBUG] [Thread-66248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:17:11.221 [DEBUG] [Thread-66249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:17:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:17:21.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:17:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:17:22.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 17, 18), 8.41, 56.12, 0.0, 16.89, 11.62, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:17:22.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:17:18
2025-11-18T03:17:22.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:17:22.283 [DEBUG] [Thread-66250] [transport.py] [_log()] starting thread (client mode): 0xd07af670
2025-11-18T03:17:22.284 [DEBUG] [Thread-66250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:17:22.303 [DEBUG] [Thread-66250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:17:22.304 [INFO] [Thread-66250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:17:22.306 [DEBUG] [Thread-66250] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] client lang: <none>
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] server lang: <none>
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] kex follows: False
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] Compression: none
2025-11-18T03:17:22.307 [DEBUG] [Thread-66250] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:17:22.325 [DEBUG] [Thread-66250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:17:22.325 [DEBUG] [Thread-66250] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:17:22.326 [DEBUG] [Thread-66250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:17:22.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:17:22.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:17:22.369 [DEBUG] [Thread-66250] [transport.py] [_log()] userauth is OK
2025-11-18T03:17:22.369 [DEBUG] [Thread-66250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:17:22.369 [DEBUG] [Thread-66250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:17:22.369 [DEBUG] [Thread-66250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:17:22.370 [DEBUG] [Thread-66250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:17:22.393 [INFO] [Thread-66250] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:17:22.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:17:23.202 [DEBUG] [Thread-66250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:17:23.202 [DEBUG] [Thread-66250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:17:23.202 [DEBUG] [Thread-66250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:17:23.243 [DEBUG] [Thread-66250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:17:23.244 [DEBUG] [Thread-66250] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:17:23.246 [DEBUG] [Thread-66250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:17:23.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:17:23.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:17:23.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:17:23.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:17:23.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:17:23.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:17:23.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:17:23.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:17:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:17:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.053166 -999.00  +11.80  13.46     60   +4.30 1 1 1 1 1     0    0 6.82 -31.38 ZNESW 12.4 13.5 168.2 18.1 12.2 -23.5 12.1 -22.5 11.9 -22.0 12.2 -23.0
2025-11-18T03:17:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:17:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:17:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.053166
2025-11-18T03:17:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:17:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:17:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:17:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:17:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:17:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:17:18', tmtdew=8.41, humidity=56.12, cloud=0.0, wind=16.89, temperature=11.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:17:18', seeing=1.17, atlas_timestamp='2025-11-18T01:16:33.542', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.08725000000000094, 0.10275000000000034, 0.06349999999999945, 0.05850000000000044, 0.06575000000000131, -0.011000000000001009, 0.011250000000000426, 0.03999999999999915, 0.06900000000000084, 0.06974999999999909, 0.07249999999999979, 0.13250000000000028, 0.09725000000000072, -0.031000000000000583, 0.04899999999999949, 0.07525000000000048, 0.11749999999999972, 0.11950000000000038, 0.13824999999999932, 0.1479999999999979, 0.08174999999999955, 0.052250000000000796, 0.03974999999999973, 0.08799999999999919, 0.20500000000000007, 0.1557499999999994, 0.19350000000000023, 0.23350000000000026, 0.09149999999999991, 0.062000000000001165, 0.08000000000000007, 0.1117499999999989], zp_timestamp='2025-11-18T01:12:00')
2025-11-18T03:17:23.271 [DEBUG] [Thread-66250] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:17:23.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:17:23.367 [DEBUG] [Thread-66253] [transport.py] [_log()] starting thread (client mode): 0xd3151660
2025-11-18T03:17:23.367 [DEBUG] [Thread-66253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:17:23.381 [DEBUG] [Thread-66253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:17:23.381 [INFO] [Thread-66253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] client lang: <none>
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] server lang: <none>
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] kex follows: False
2025-11-18T03:17:23.389 [DEBUG] [Thread-66253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:17:23.390 [DEBUG] [Thread-66253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:17:23.390 [DEBUG] [Thread-66253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:17:23.390 [DEBUG] [Thread-66253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:17:23.390 [DEBUG] [Thread-66253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:17:23.390 [DEBUG] [Thread-66253] [transport.py] [_log()] Compression: none
2025-11-18T03:17:23.390 [DEBUG] [Thread-66253] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:17:23.453 [DEBUG] [Thread-66253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:17:23.453 [DEBUG] [Thread-66253] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:17:23.454 [DEBUG] [Thread-66253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:17:23.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:17:23.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:17:23.514 [DEBUG] [Thread-66253] [transport.py] [_log()] userauth is OK
2025-11-18T03:17:23.514 [DEBUG] [Thread-66253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:17:23.514 [DEBUG] [Thread-66253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:17:23.515 [DEBUG] [Thread-66253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:17:23.515 [DEBUG] [Thread-66253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:17:23.533 [INFO] [Thread-66253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:17:23.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:17:23.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:17:24.366 [DEBUG] [Thread-66253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:17:24.366 [DEBUG] [Thread-66253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:17:24.414 [DEBUG] [Thread-66253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:17:24.414 [DEBUG] [Thread-66253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:17:24.423 [DEBUG] [Thread-66253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:17:24.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:17:24.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:17:24.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:17:24.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:17:24.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:17:24.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:17:24.456 [DEBUG] [Thread-66253] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:17:26.244 [DEBUG] [Thread-66255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:17:41.286 [DEBUG] [Thread-66256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:17:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:17:54.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:17:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:17:55.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 17, 50), 8.36, 56.33, 0.0, 16.45, 11.59, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:17:55.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:17:50
2025-11-18T03:17:55.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:17:55.413 [DEBUG] [Thread-66257] [transport.py] [_log()] starting thread (client mode): 0xd0711720
2025-11-18T03:17:55.413 [DEBUG] [Thread-66257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:17:55.434 [DEBUG] [Thread-66257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:17:55.434 [INFO] [Thread-66257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:17:55.437 [DEBUG] [Thread-66257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:17:55.437 [DEBUG] [Thread-66257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:17:55.437 [DEBUG] [Thread-66257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] client lang: <none>
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] server lang: <none>
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] kex follows: False
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:17:55.438 [DEBUG] [Thread-66257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:17:55.439 [DEBUG] [Thread-66257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:17:55.439 [DEBUG] [Thread-66257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:17:55.439 [DEBUG] [Thread-66257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:17:55.439 [DEBUG] [Thread-66257] [transport.py] [_log()] Compression: none
2025-11-18T03:17:55.439 [DEBUG] [Thread-66257] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:17:55.458 [DEBUG] [Thread-66257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:17:55.458 [DEBUG] [Thread-66257] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:17:55.459 [DEBUG] [Thread-66257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:17:55.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:17:55.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:17:55.461 [DEBUG] [Thread-66257] [transport.py] [_log()] userauth is OK
2025-11-18T03:17:55.461 [DEBUG] [Thread-66257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:17:55.461 [DEBUG] [Thread-66257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:17:55.461 [DEBUG] [Thread-66257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:17:55.461 [DEBUG] [Thread-66257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:17:55.484 [INFO] [Thread-66257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:17:55.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:17:56.094 [DEBUG] [Thread-66257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:17:56.094 [DEBUG] [Thread-66257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:17:56.095 [DEBUG] [Thread-66257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:17:56.135 [DEBUG] [Thread-66257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:17:56.136 [DEBUG] [Thread-66257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:17:56.138 [DEBUG] [Thread-66257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:17:56.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:17:56.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:17:56.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:17:56.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:17:56.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:17:56.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:17:56.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:17:56.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:17:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:17:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.053513 -999.00  +11.80  10.63     60   +4.30 1 1 1 1 1     0    0 7.04 -31.63 ZNESW 9.1 10.6 153.4 16.7 12.2 -23.6 12.1 -22.4 11.9 -22.0 12.2 -22.9
2025-11-18T03:17:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:17:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:17:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.053513
2025-11-18T03:17:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:17:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:17:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:17:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:17:56.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:17:56.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:17:50', tmtdew=8.36, humidity=56.33, cloud=0.0, wind=16.45, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:17:50', seeing=1.14, atlas_timestamp='2025-11-18T01:17:03.523', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.02224999999999966, 0.10325000000000095, 0.03649999999999842, 0.061500000000000554, 0.08125000000000071, 0.006000000000000227, 0.03775000000000084, 0.0470000000000006, 0.04400000000000048, 0.08624999999999972, 0.05000000000000071, 0.15399999999999991, 0.11425000000000018, 0.03049999999999997, 0.0649999999999995, 0.043250000000000455, 0.10849999999999937, 0.13299999999999912, 0.11324999999999896, 0.12499999999999822, 0.13274999999999793, 0.016250000000001208, 0.07574999999999932, 0.1120000000000001, 0.1974999999999998, 0.19074999999999953, 0.23850000000000016, 0.19700000000000095, 0.1490000000000009, 0.062000000000001165, 0.049500000000001876, 0.08474999999999966], zp_timestamp='2025-11-18T01:15:00')
2025-11-18T03:17:56.162 [DEBUG] [Thread-66257] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:17:56.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:17:56.265 [DEBUG] [Thread-66260] [transport.py] [_log()] starting thread (client mode): 0xd07236d0
2025-11-18T03:17:56.266 [DEBUG] [Thread-66260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:17:56.280 [DEBUG] [Thread-66260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:17:56.280 [INFO] [Thread-66260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:17:56.287 [DEBUG] [Thread-66260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] client lang: <none>
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] server lang: <none>
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] kex follows: False
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] Compression: none
2025-11-18T03:17:56.288 [DEBUG] [Thread-66260] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:17:56.312 [DEBUG] [Thread-66262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:17:56.348 [DEBUG] [Thread-66260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:17:56.349 [DEBUG] [Thread-66260] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:17:56.349 [DEBUG] [Thread-66260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:17:56.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:17:56.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:17:56.404 [DEBUG] [Thread-66260] [transport.py] [_log()] userauth is OK
2025-11-18T03:17:56.404 [DEBUG] [Thread-66260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:17:56.404 [DEBUG] [Thread-66260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:17:56.405 [DEBUG] [Thread-66260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:17:56.405 [DEBUG] [Thread-66260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:17:56.423 [INFO] [Thread-66260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:17:56.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:17:56.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:17:57.235 [DEBUG] [Thread-66260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:17:57.235 [DEBUG] [Thread-66260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:17:57.282 [DEBUG] [Thread-66260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:17:57.282 [DEBUG] [Thread-66260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:17:57.291 [DEBUG] [Thread-66260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:17:57.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:17:57.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:17:57.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:17:57.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:17:57.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:17:57.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:17:57.322 [DEBUG] [Thread-66260] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:18:01.299 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:18:01.300 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:18:06.159 [DEBUG] [Thread-66263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:18:11.362 [DEBUG] [Thread-66264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:18:26.389 [DEBUG] [Thread-66265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:18:27.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:18:27.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:18:27.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:18:28.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 18, 22), 8.4, 56.17, 0.0, 15.6, 11.64, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:18:28.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:18:22
2025-11-18T03:18:28.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:18:28.301 [DEBUG] [Thread-66266] [transport.py] [_log()] starting thread (client mode): 0xd3163220
2025-11-18T03:18:28.301 [DEBUG] [Thread-66266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:18:28.321 [DEBUG] [Thread-66266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:18:28.321 [INFO] [Thread-66266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:18:28.324 [DEBUG] [Thread-66266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:18:28.324 [DEBUG] [Thread-66266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:18:28.324 [DEBUG] [Thread-66266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:18:28.324 [DEBUG] [Thread-66266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:18:28.324 [DEBUG] [Thread-66266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] client lang: <none>
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] server lang: <none>
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] kex follows: False
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] Compression: none
2025-11-18T03:18:28.325 [DEBUG] [Thread-66266] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:18:28.339 [DEBUG] [Thread-66266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:18:28.339 [DEBUG] [Thread-66266] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:18:28.339 [DEBUG] [Thread-66266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:18:28.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:18:28.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:18:28.340 [DEBUG] [Thread-66266] [transport.py] [_log()] userauth is OK
2025-11-18T03:18:28.340 [DEBUG] [Thread-66266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:18:28.340 [DEBUG] [Thread-66266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:18:28.340 [DEBUG] [Thread-66266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:18:28.340 [DEBUG] [Thread-66266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:18:28.349 [INFO] [Thread-66266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:18:28.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:18:29.126 [DEBUG] [Thread-66266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:18:29.126 [DEBUG] [Thread-66266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:18:29.126 [DEBUG] [Thread-66266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:18:29.167 [DEBUG] [Thread-66266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:18:29.167 [DEBUG] [Thread-66266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:18:29.169 [DEBUG] [Thread-66266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:18:29.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:18:29.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:18:29.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:18:29.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:18:29.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:18:29.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:18:29.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:18:29.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:18:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:18:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.053860 -999.00  +11.80  12.89     60   +4.30 1 1 1 1 1     0    0 6.99 -31.60 ZNESW 11.5 12.9 159.9 14.0 12.2 -23.3 12.1 -22.4 11.8 -21.9 12.1 -22.8
2025-11-18T03:18:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:18:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:18:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.053860
2025-11-18T03:18:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:18:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:18:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:18:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:18:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:18:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:18:22', tmtdew=8.4, humidity=56.17, cloud=0.0, wind=15.6, temperature=11.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:18:22', seeing=1.14, atlas_timestamp='2025-11-18T01:17:33.504', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.02224999999999966, 0.10325000000000095, 0.03649999999999842, 0.061500000000000554, 0.08125000000000071, 0.006000000000000227, 0.03775000000000084, 0.0470000000000006, 0.04400000000000048, 0.08624999999999972, 0.05000000000000071, 0.15399999999999991, 0.11425000000000018, 0.03049999999999997, 0.0649999999999995, 0.043250000000000455, 0.10849999999999937, 0.13299999999999912, 0.11324999999999896, 0.12499999999999822, 0.13274999999999793, 0.016250000000001208, 0.07574999999999932, 0.1120000000000001, 0.1974999999999998, 0.19074999999999953, 0.23850000000000016, 0.19700000000000095, 0.1490000000000009, 0.062000000000001165, 0.049500000000001876, 0.08474999999999966], zp_timestamp='2025-11-18T01:15:00')
2025-11-18T03:18:29.186 [DEBUG] [Thread-66266] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:18:29.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:18:29.272 [DEBUG] [Thread-66269] [transport.py] [_log()] starting thread (client mode): 0xd07a9ed0
2025-11-18T03:18:29.273 [DEBUG] [Thread-66269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:18:29.292 [DEBUG] [Thread-66269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:18:29.292 [INFO] [Thread-66269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] client lang: <none>
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] server lang: <none>
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] kex follows: False
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:18:29.299 [DEBUG] [Thread-66269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:18:29.300 [DEBUG] [Thread-66269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:18:29.300 [DEBUG] [Thread-66269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:18:29.300 [DEBUG] [Thread-66269] [transport.py] [_log()] Compression: none
2025-11-18T03:18:29.300 [DEBUG] [Thread-66269] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:18:29.357 [DEBUG] [Thread-66269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:18:29.357 [DEBUG] [Thread-66269] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:18:29.357 [DEBUG] [Thread-66269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:18:29.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:18:29.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:18:29.412 [DEBUG] [Thread-66269] [transport.py] [_log()] userauth is OK
2025-11-18T03:18:29.412 [DEBUG] [Thread-66269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:18:29.412 [DEBUG] [Thread-66269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:18:29.412 [DEBUG] [Thread-66269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:18:29.412 [DEBUG] [Thread-66269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:18:29.432 [INFO] [Thread-66269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:18:29.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:18:29.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:18:30.285 [DEBUG] [Thread-66269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:18:30.285 [DEBUG] [Thread-66269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:18:30.333 [DEBUG] [Thread-66269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:18:30.333 [DEBUG] [Thread-66269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:18:30.342 [DEBUG] [Thread-66269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:18:30.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:18:30.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:18:30.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:18:30.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:18:30.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:18:30.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:18:30.373 [DEBUG] [Thread-66269] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:18:41.416 [DEBUG] [Thread-66271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:18:56.456 [DEBUG] [Thread-66272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:19:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:19:00.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:19:00.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:19:01.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 18, 54), 8.41, 56.1, 0.0, 12.76, 11.62, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:19:01.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:18:54
2025-11-18T03:19:01.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:19:01.339 [DEBUG] [Thread-66273] [transport.py] [_log()] starting thread (client mode): 0xd3162bc0
2025-11-18T03:19:01.339 [DEBUG] [Thread-66273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:19:01.368 [DEBUG] [Thread-66273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:19:01.368 [INFO] [Thread-66273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:19:01.371 [DEBUG] [Thread-66273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:19:01.371 [DEBUG] [Thread-66273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] client lang: <none>
2025-11-18T03:19:01.372 [DEBUG] [Thread-66273] [transport.py] [_log()] server lang: <none>
2025-11-18T03:19:01.373 [DEBUG] [Thread-66273] [transport.py] [_log()] kex follows: False
2025-11-18T03:19:01.373 [DEBUG] [Thread-66273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:19:01.373 [DEBUG] [Thread-66273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:19:01.373 [DEBUG] [Thread-66273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:19:01.373 [DEBUG] [Thread-66273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:19:01.373 [DEBUG] [Thread-66273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:19:01.373 [DEBUG] [Thread-66273] [transport.py] [_log()] Compression: none
2025-11-18T03:19:01.373 [DEBUG] [Thread-66273] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:19:01.392 [DEBUG] [Thread-66273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:19:01.392 [DEBUG] [Thread-66273] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:19:01.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:19:01.394 [DEBUG] [Thread-66273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:19:01.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:19:01.395 [DEBUG] [Thread-66273] [transport.py] [_log()] userauth is OK
2025-11-18T03:19:01.396 [DEBUG] [Thread-66273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:19:01.396 [DEBUG] [Thread-66273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:19:01.396 [DEBUG] [Thread-66273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:19:01.396 [DEBUG] [Thread-66273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:19:01.430 [INFO] [Thread-66273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:19:01.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:19:01.504 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:19:01.505 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:19:02.033 [DEBUG] [Thread-66273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:19:02.033 [DEBUG] [Thread-66273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:19:02.033 [DEBUG] [Thread-66273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:19:02.074 [DEBUG] [Thread-66273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:19:02.074 [DEBUG] [Thread-66273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:19:02.077 [DEBUG] [Thread-66273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:19:02.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:19:02.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:19:02.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:19:02.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:19:02.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:19:02.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:19:02.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:19:02.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:19:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:19:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.054555 -999.00  +11.80   8.72     60   +4.30 1 1 1 1 1     0    0 6.90 -32.50 ZNESW 10.7 8.7 139.2 15.7 12.2 -23.4 12.0 -22.4 11.8 -22.1 12.1 -23.0
2025-11-18T03:19:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:19:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:19:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.054555
2025-11-18T03:19:02.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:19:02.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:19:02.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:19:02.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:19:02.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:19:02.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:18:54', tmtdew=8.41, humidity=56.1, cloud=0.0, wind=12.76, temperature=11.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:18:54', seeing=1.15, atlas_timestamp='2025-11-18T01:18:33.552', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.02224999999999966, 0.10325000000000095, 0.03649999999999842, 0.061500000000000554, 0.08125000000000071, 0.006000000000000227, 0.03775000000000084, 0.0470000000000006, 0.04400000000000048, 0.08624999999999972, 0.05000000000000071, 0.15399999999999991, 0.11425000000000018, 0.03049999999999997, 0.0649999999999995, 0.043250000000000455, 0.10849999999999937, 0.13299999999999912, 0.11324999999999896, 0.12499999999999822, 0.13274999999999793, 0.016250000000001208, 0.07574999999999932, 0.1120000000000001, 0.1974999999999998, 0.19074999999999953, 0.23850000000000016, 0.19700000000000095, 0.1490000000000009, 0.062000000000001165, 0.049500000000001876, 0.08474999999999966], zp_timestamp='2025-11-18T01:15:00')
2025-11-18T03:19:02.104 [DEBUG] [Thread-66273] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:19:02.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:19:02.200 [DEBUG] [Thread-66276] [transport.py] [_log()] starting thread (client mode): 0xd0711540
2025-11-18T03:19:02.200 [DEBUG] [Thread-66276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:19:02.215 [DEBUG] [Thread-66276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:19:02.215 [INFO] [Thread-66276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] client lang: <none>
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] server lang: <none>
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] kex follows: False
2025-11-18T03:19:02.222 [DEBUG] [Thread-66276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:19:02.223 [DEBUG] [Thread-66276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:19:02.223 [DEBUG] [Thread-66276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:19:02.223 [DEBUG] [Thread-66276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:19:02.223 [DEBUG] [Thread-66276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:19:02.223 [DEBUG] [Thread-66276] [transport.py] [_log()] Compression: none
2025-11-18T03:19:02.223 [DEBUG] [Thread-66276] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:19:02.279 [DEBUG] [Thread-66276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:19:02.279 [DEBUG] [Thread-66276] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:19:02.279 [DEBUG] [Thread-66276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:19:02.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:19:02.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:19:02.340 [DEBUG] [Thread-66276] [transport.py] [_log()] userauth is OK
2025-11-18T03:19:02.340 [DEBUG] [Thread-66276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:19:02.340 [DEBUG] [Thread-66276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:19:02.340 [DEBUG] [Thread-66276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:19:02.340 [DEBUG] [Thread-66276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:19:02.354 [INFO] [Thread-66276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:19:02.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:19:02.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:19:03.184 [DEBUG] [Thread-66276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:19:03.184 [DEBUG] [Thread-66276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:19:03.233 [DEBUG] [Thread-66276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:19:03.233 [DEBUG] [Thread-66276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:19:03.242 [DEBUG] [Thread-66276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:19:03.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:19:03.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:19:03.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:19:03.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:19:03.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:19:03.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:19:03.277 [DEBUG] [Thread-66276] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:19:06.212 [DEBUG] [Thread-66278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:19:11.484 [DEBUG] [Thread-66279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:19:26.515 [DEBUG] [Thread-66280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:19:33.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:19:33.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:19:33.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:19:33.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 19, 26), 8.41, 56.12, 0.0, 13.89, 11.59, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:19:33.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:19:26
2025-11-18T03:19:34.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:19:34.236 [DEBUG] [Thread-66281] [transport.py] [_log()] starting thread (client mode): 0xd07aeb60
2025-11-18T03:19:34.236 [DEBUG] [Thread-66281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:19:34.255 [DEBUG] [Thread-66281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:19:34.255 [INFO] [Thread-66281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:19:34.258 [DEBUG] [Thread-66281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:19:34.258 [DEBUG] [Thread-66281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:19:34.258 [DEBUG] [Thread-66281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:19:34.258 [DEBUG] [Thread-66281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:19:34.258 [DEBUG] [Thread-66281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:19:34.258 [DEBUG] [Thread-66281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] client lang: <none>
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] server lang: <none>
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] kex follows: False
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] Compression: none
2025-11-18T03:19:34.259 [DEBUG] [Thread-66281] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:19:34.276 [DEBUG] [Thread-66281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:19:34.277 [DEBUG] [Thread-66281] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:19:34.277 [DEBUG] [Thread-66281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:19:34.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:19:34.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:19:34.321 [DEBUG] [Thread-66281] [transport.py] [_log()] userauth is OK
2025-11-18T03:19:34.321 [DEBUG] [Thread-66281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:19:34.321 [DEBUG] [Thread-66281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:19:34.321 [DEBUG] [Thread-66281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:19:34.321 [DEBUG] [Thread-66281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:19:34.342 [INFO] [Thread-66281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:19:34.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:19:35.174 [DEBUG] [Thread-66281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:19:35.174 [DEBUG] [Thread-66281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:19:35.174 [DEBUG] [Thread-66281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:19:35.214 [DEBUG] [Thread-66281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:19:35.214 [DEBUG] [Thread-66281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:19:35.217 [DEBUG] [Thread-66281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:19:35.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:19:35.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:19:35.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:19:35.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:19:35.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:19:35.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:19:35.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:19:35.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:19:35.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:19:35.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.054902 -999.00  +11.90   9.11     60   +4.40 1 1 1 1 1     0    0 6.82 -31.92 ZNESW 12.2 9.1 163.2 11.3 12.2 -23.5 12.1 -22.4 11.8 -22.0 12.1 -22.9
2025-11-18T03:19:35.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:19:35.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:19:35.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.054902
2025-11-18T03:19:35.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:19:35.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:19:35.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:19:35.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:19:35.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:19:35.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:19:26', tmtdew=8.41, humidity=56.12, cloud=0.0, wind=13.89, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:19:26', seeing=1.17, atlas_timestamp='2025-11-18T01:19:03.533', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.02224999999999966, 0.10325000000000095, 0.03649999999999842, 0.061500000000000554, 0.08125000000000071, 0.006000000000000227, 0.03775000000000084, 0.0470000000000006, 0.04400000000000048, 0.08624999999999972, 0.05000000000000071, 0.15399999999999991, 0.11425000000000018, 0.03049999999999997, 0.0649999999999995, 0.043250000000000455, 0.10849999999999937, 0.13299999999999912, 0.11324999999999896, 0.12499999999999822, 0.13274999999999793, 0.016250000000001208, 0.07574999999999932, 0.1120000000000001, 0.1974999999999998, 0.19074999999999953, 0.23850000000000016, 0.19700000000000095, 0.1490000000000009, 0.062000000000001165, 0.049500000000001876, 0.08474999999999966], zp_timestamp='2025-11-18T01:15:00')
2025-11-18T03:19:35.242 [DEBUG] [Thread-66281] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:19:35.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:19:35.341 [DEBUG] [Thread-66284] [transport.py] [_log()] starting thread (client mode): 0xd07d83d0
2025-11-18T03:19:35.341 [DEBUG] [Thread-66284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:19:35.358 [DEBUG] [Thread-66284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:19:35.358 [INFO] [Thread-66284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:19:35.370 [DEBUG] [Thread-66284] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:19:35.370 [DEBUG] [Thread-66284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:19:35.370 [DEBUG] [Thread-66284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:19:35.370 [DEBUG] [Thread-66284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:19:35.370 [DEBUG] [Thread-66284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:19:35.370 [DEBUG] [Thread-66284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:19:35.370 [DEBUG] [Thread-66284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:19:35.370 [DEBUG] [Thread-66284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] client lang: <none>
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] server lang: <none>
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] kex follows: False
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] Compression: none
2025-11-18T03:19:35.371 [DEBUG] [Thread-66284] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:19:35.429 [DEBUG] [Thread-66284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:19:35.429 [DEBUG] [Thread-66284] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:19:35.429 [DEBUG] [Thread-66284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:19:35.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:19:35.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:19:35.491 [DEBUG] [Thread-66284] [transport.py] [_log()] userauth is OK
2025-11-18T03:19:35.491 [DEBUG] [Thread-66284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:19:35.492 [DEBUG] [Thread-66284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:19:35.492 [DEBUG] [Thread-66284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:19:35.492 [DEBUG] [Thread-66284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:19:35.512 [INFO] [Thread-66284] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:19:35.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:19:35.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:19:36.344 [DEBUG] [Thread-66284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:19:36.345 [DEBUG] [Thread-66284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:19:36.392 [DEBUG] [Thread-66284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:19:36.392 [DEBUG] [Thread-66284] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:19:36.401 [DEBUG] [Thread-66284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:19:36.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:19:36.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:19:36.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:19:36.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:19:36.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:19:36.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:19:36.436 [DEBUG] [Thread-66284] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:19:41.543 [DEBUG] [Thread-66286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:19:56.586 [DEBUG] [Thread-66287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:20:01.711 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:20:01.712 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:20:06.278 [DEBUG] [Thread-66288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:20:06.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:20:06.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:20:06.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:20:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 19, 58), 8.42, 56.27, 0.0, 13.25, 11.62, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:20:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:19:58
2025-11-18T03:20:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:20:07.387 [DEBUG] [Thread-66289] [transport.py] [_log()] starting thread (client mode): 0xd07ae5c0
2025-11-18T03:20:07.387 [DEBUG] [Thread-66289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:20:07.408 [DEBUG] [Thread-66289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:20:07.408 [INFO] [Thread-66289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:20:07.411 [DEBUG] [Thread-66289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:20:07.411 [DEBUG] [Thread-66289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] client lang: <none>
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] server lang: <none>
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] kex follows: False
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] Compression: none
2025-11-18T03:20:07.412 [DEBUG] [Thread-66289] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:20:07.436 [DEBUG] [Thread-66289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:20:07.436 [DEBUG] [Thread-66289] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:20:07.437 [DEBUG] [Thread-66289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:20:07.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:20:07.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:20:07.439 [DEBUG] [Thread-66289] [transport.py] [_log()] userauth is OK
2025-11-18T03:20:07.439 [DEBUG] [Thread-66289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:20:07.439 [DEBUG] [Thread-66289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:20:07.439 [DEBUG] [Thread-66289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:20:07.439 [DEBUG] [Thread-66289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:20:07.463 [INFO] [Thread-66289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:20:07.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:20:08.591 [DEBUG] [Thread-66289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:20:08.591 [DEBUG] [Thread-66289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:20:08.592 [DEBUG] [Thread-66289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:20:08.632 [DEBUG] [Thread-66289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:20:08.632 [DEBUG] [Thread-66289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:20:08.635 [DEBUG] [Thread-66289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:20:08.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:20:08.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:20:08.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:20:08.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:20:08.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:20:08.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:20:08.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:20:08.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:20:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:20:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.055306 -999.00  +11.90  11.92     59   +4.30 1 1 1 1 1     0    0 6.88 -30.32 ZNESW 9.4 11.9 140.4 12.8 12.2 -23.5 12.1 -22.4 11.8 -22.0 12.1 -22.9
2025-11-18T03:20:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:20:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:20:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.055306
2025-11-18T03:20:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:20:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:20:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:20:08.653 [DEBUG] [Thread-66289] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:20:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:20:08.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:20:08.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:19:58', tmtdew=8.42, humidity=56.27, cloud=0.0, wind=13.25, temperature=11.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:19:58', seeing=1.17, atlas_timestamp='2025-11-18T01:19:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.02224999999999966, 0.10325000000000095, 0.03649999999999842, 0.061500000000000554, 0.08125000000000071, 0.006000000000000227, 0.03775000000000084, 0.0470000000000006, 0.04400000000000048, 0.08624999999999972, 0.05000000000000071, 0.15399999999999991, 0.11425000000000018, 0.03049999999999997, 0.0649999999999995, 0.043250000000000455, 0.10849999999999937, 0.13299999999999912, 0.11324999999999896, 0.12499999999999822, 0.13274999999999793, 0.016250000000001208, 0.07574999999999932, 0.1120000000000001, 0.1974999999999998, 0.19074999999999953, 0.23850000000000016, 0.19700000000000095, 0.1490000000000009, 0.062000000000001165, 0.049500000000001876, 0.08474999999999966], zp_timestamp='2025-11-18T01:15:00')
2025-11-18T03:20:08.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:20:08.750 [DEBUG] [Thread-66292] [transport.py] [_log()] starting thread (client mode): 0xd31cc280
2025-11-18T03:20:08.750 [DEBUG] [Thread-66292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:20:08.765 [DEBUG] [Thread-66292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:20:08.765 [INFO] [Thread-66292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:20:08.773 [DEBUG] [Thread-66292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:20:08.773 [DEBUG] [Thread-66292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:20:08.774 [DEBUG] [Thread-66292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:20:08.774 [DEBUG] [Thread-66292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:20:08.774 [DEBUG] [Thread-66292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:20:08.774 [DEBUG] [Thread-66292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:20:08.774 [DEBUG] [Thread-66292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:20:08.774 [DEBUG] [Thread-66292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] client lang: <none>
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] server lang: <none>
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] kex follows: False
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:20:08.775 [DEBUG] [Thread-66292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:20:08.776 [DEBUG] [Thread-66292] [transport.py] [_log()] Compression: none
2025-11-18T03:20:08.776 [DEBUG] [Thread-66292] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:20:08.835 [DEBUG] [Thread-66292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:20:08.836 [DEBUG] [Thread-66292] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:20:08.836 [DEBUG] [Thread-66292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:20:08.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:20:08.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:20:08.892 [DEBUG] [Thread-66292] [transport.py] [_log()] userauth is OK
2025-11-18T03:20:08.892 [DEBUG] [Thread-66292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:20:08.893 [DEBUG] [Thread-66292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:20:08.893 [DEBUG] [Thread-66292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:20:08.893 [DEBUG] [Thread-66292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:20:08.916 [INFO] [Thread-66292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:20:08.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:20:08.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:20:09.808 [DEBUG] [Thread-66292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:20:09.808 [DEBUG] [Thread-66292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:20:09.857 [DEBUG] [Thread-66292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:20:09.857 [DEBUG] [Thread-66292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:20:09.866 [DEBUG] [Thread-66292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:20:09.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:20:09.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:20:09.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:20:09.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:20:09.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:20:09.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:20:09.903 [DEBUG] [Thread-66292] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:20:11.617 [DEBUG] [Thread-66294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:20:26.655 [DEBUG] [Thread-66295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:20:39.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:20:39.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:20:39.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:20:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 20, 30), 8.43, 56.22, 0.0, 13.45, 11.57, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:20:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:20:30
2025-11-18T03:20:40.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:20:40.872 [DEBUG] [Thread-66296] [transport.py] [_log()] starting thread (client mode): 0xd0754ac0
2025-11-18T03:20:40.872 [DEBUG] [Thread-66296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:20:40.892 [DEBUG] [Thread-66296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:20:40.892 [INFO] [Thread-66296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:20:40.895 [DEBUG] [Thread-66296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:20:40.895 [DEBUG] [Thread-66296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:20:40.895 [DEBUG] [Thread-66296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:20:40.895 [DEBUG] [Thread-66296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] client lang: <none>
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] server lang: <none>
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] kex follows: False
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] Compression: none
2025-11-18T03:20:40.896 [DEBUG] [Thread-66296] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:20:40.916 [DEBUG] [Thread-66296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:20:40.916 [DEBUG] [Thread-66296] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:20:40.917 [DEBUG] [Thread-66296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:20:40.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:20:40.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:20:40.920 [DEBUG] [Thread-66296] [transport.py] [_log()] userauth is OK
2025-11-18T03:20:40.920 [DEBUG] [Thread-66296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:20:40.920 [DEBUG] [Thread-66296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:20:40.920 [DEBUG] [Thread-66296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:20:40.920 [DEBUG] [Thread-66296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:20:40.940 [INFO] [Thread-66296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:20:40.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:20:41.587 [DEBUG] [Thread-66296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:20:41.587 [DEBUG] [Thread-66296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:20:41.587 [DEBUG] [Thread-66296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:20:41.628 [DEBUG] [Thread-66296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:20:41.629 [DEBUG] [Thread-66296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:20:41.632 [DEBUG] [Thread-66296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:20:41.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:20:41.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:20:41.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:20:41.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:20:41.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:20:41.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:20:41.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:20:41.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:20:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:20:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.055597 -999.00  +11.80   7.46     59   +4.30 1 1 1 1 1     0    0 6.91 -30.67 ZNESW 6.5 7.5 157.4 10.9 12.2 -23.4 12.1 -22.5 11.8 -22.1 12.1 -23.0
2025-11-18T03:20:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:20:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:20:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.055597
2025-11-18T03:20:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:20:41.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:20:41.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:20:41.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:20:41.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:20:41.658 [DEBUG] [Thread-66296] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:20:41.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:20:30', tmtdew=8.43, humidity=56.22, cloud=0.0, wind=13.45, temperature=11.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:20:30', seeing=1.17, atlas_timestamp='2025-11-18T01:20:03.581', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.0027500000000006963, 0.08725000000000094, -0.0035000000000007248, 0.06649999999999956, 0.09375, 0.009500000000000952, 0.05025000000000013, 0.046499999999999986, 0.053000000000000824, 0.06874999999999964, 0.06949999999999967, 0.14599999999999902, 0.05775000000000041, 0.0019999999999988916, 0.05699999999999861, 0.0782500000000006, 0.1255000000000006, 0.11399999999999899, 0.16024999999999956, 0.1319999999999979, 0.09174999999999933, 0.03125, 0.04075000000000095, 0.09350000000000058, 0.1775000000000002, 0.1667500000000004, 0.22049999999999947, 0.15700000000000003, 0.1460000000000008, 0.06800000000000139, 0.07900000000000063, 0.10725000000000051], zp_timestamp='2025-11-18T01:19:00')
2025-11-18T03:20:41.679 [DEBUG] [Thread-66299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:20:41.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:20:41.756 [DEBUG] [Thread-66300] [transport.py] [_log()] starting thread (client mode): 0xd31cdb70
2025-11-18T03:20:41.756 [DEBUG] [Thread-66300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:20:41.771 [DEBUG] [Thread-66300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:20:41.772 [INFO] [Thread-66300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:20:41.779 [DEBUG] [Thread-66300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] client lang: <none>
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] server lang: <none>
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] kex follows: False
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] Compression: none
2025-11-18T03:20:41.780 [DEBUG] [Thread-66300] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:20:41.840 [DEBUG] [Thread-66300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:20:41.840 [DEBUG] [Thread-66300] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:20:41.841 [DEBUG] [Thread-66300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:20:41.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:20:41.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:20:41.896 [DEBUG] [Thread-66300] [transport.py] [_log()] userauth is OK
2025-11-18T03:20:41.896 [DEBUG] [Thread-66300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:20:41.896 [DEBUG] [Thread-66300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:20:41.897 [DEBUG] [Thread-66300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:20:41.897 [DEBUG] [Thread-66300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:20:41.916 [INFO] [Thread-66300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:20:41.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:20:41.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:20:42.766 [DEBUG] [Thread-66300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:20:42.766 [DEBUG] [Thread-66300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:20:42.814 [DEBUG] [Thread-66300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:20:42.814 [DEBUG] [Thread-66300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:20:42.823 [DEBUG] [Thread-66300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:20:42.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:20:42.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')
2025-11-18T03:20:42.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:20:42.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:20:42.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:20:42.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:20:42.858 [DEBUG] [Thread-66300] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:20:56.710 [DEBUG] [Thread-66302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:21:01.917 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:21:01.918 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:21:06.355 [DEBUG] [Thread-66303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:21:11.738 [DEBUG] [Thread-66304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:21:12.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:21:12.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:21:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:21:13.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 21, 2), 8.42, 56.25, 0.0, 12.62, 11.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:21:13.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:21:02
2025-11-18T03:21:13.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:21:13.820 [DEBUG] [Thread-66305] [transport.py] [_log()] starting thread (client mode): 0xd07d8d30
2025-11-18T03:21:13.820 [DEBUG] [Thread-66305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:21:13.841 [DEBUG] [Thread-66305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:21:13.842 [INFO] [Thread-66305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:21:13.844 [DEBUG] [Thread-66305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] client lang: <none>
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] server lang: <none>
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] kex follows: False
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] Compression: none
2025-11-18T03:21:13.845 [DEBUG] [Thread-66305] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:21:13.863 [DEBUG] [Thread-66305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:21:13.863 [DEBUG] [Thread-66305] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:21:13.864 [DEBUG] [Thread-66305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:21:13.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:21:13.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:21:13.866 [DEBUG] [Thread-66305] [transport.py] [_log()] userauth is OK
2025-11-18T03:21:13.866 [DEBUG] [Thread-66305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:21:13.866 [DEBUG] [Thread-66305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:21:13.866 [DEBUG] [Thread-66305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:21:13.866 [DEBUG] [Thread-66305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:21:13.884 [INFO] [Thread-66305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:21:13.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:21:14.521 [DEBUG] [Thread-66305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:21:14.521 [DEBUG] [Thread-66305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:21:14.522 [DEBUG] [Thread-66305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:21:14.563 [DEBUG] [Thread-66305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:21:14.563 [DEBUG] [Thread-66305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:21:14.566 [DEBUG] [Thread-66305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:21:14.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:21:14.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:21:14.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:21:14.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:21:14.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:21:14.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:21:14.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:21:14.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:21:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:21:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.056001 -999.00  +11.80  11.31     60   +4.30 1 1 1 1 1     0    0 6.84 -30.72 ZNESW 9.9 11.3 164.2 15.5 12.2 -23.5 12.0 -22.5 11.8 -22.0 12.1 -23.1
2025-11-18T03:21:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:21:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:21:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.056001
2025-11-18T03:21:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:21:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:21:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:21:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:21:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:21:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:21:02', tmtdew=8.42, humidity=56.25, cloud=0.0, wind=12.62, temperature=11.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:21:02', seeing=1.22, atlas_timestamp='2025-11-18T01:20:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.0027500000000006963, 0.08725000000000094, -0.0035000000000007248, 0.06649999999999956, 0.09375, 0.009500000000000952, 0.05025000000000013, 0.046499999999999986, 0.053000000000000824, 0.06874999999999964, 0.06949999999999967, 0.14599999999999902, 0.05775000000000041, 0.0019999999999988916, 0.05699999999999861, 0.0782500000000006, 0.1255000000000006, 0.11399999999999899, 0.16024999999999956, 0.1319999999999979, 0.09174999999999933, 0.03125, 0.04075000000000095, 0.09350000000000058, 0.1775000000000002, 0.1667500000000004, 0.22049999999999947, 0.15700000000000003, 0.1460000000000008, 0.06800000000000139, 0.07900000000000063, 0.10725000000000051], zp_timestamp='2025-11-18T01:19:00')
2025-11-18T03:21:14.592 [DEBUG] [Thread-66305] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:21:14.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:21:14.689 [DEBUG] [Thread-66308] [transport.py] [_log()] starting thread (client mode): 0xd317f940
2025-11-18T03:21:14.689 [DEBUG] [Thread-66308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:21:14.705 [DEBUG] [Thread-66308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:21:14.705 [INFO] [Thread-66308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] client lang: <none>
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] server lang: <none>
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] kex follows: False
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:21:14.713 [DEBUG] [Thread-66308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:21:14.714 [DEBUG] [Thread-66308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:21:14.714 [DEBUG] [Thread-66308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:21:14.714 [DEBUG] [Thread-66308] [transport.py] [_log()] Compression: none
2025-11-18T03:21:14.714 [DEBUG] [Thread-66308] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:21:14.772 [DEBUG] [Thread-66308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:21:14.773 [DEBUG] [Thread-66308] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:21:14.773 [DEBUG] [Thread-66308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:21:14.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:21:14.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:21:14.828 [DEBUG] [Thread-66308] [transport.py] [_log()] userauth is OK
2025-11-18T03:21:14.828 [DEBUG] [Thread-66308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:21:14.829 [DEBUG] [Thread-66308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:21:14.829 [DEBUG] [Thread-66308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:21:14.829 [DEBUG] [Thread-66308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:21:14.847 [INFO] [Thread-66308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:21:14.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:21:14.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:21:15.694 [DEBUG] [Thread-66308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:21:15.695 [DEBUG] [Thread-66308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:21:15.742 [DEBUG] [Thread-66308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:21:15.742 [DEBUG] [Thread-66308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:21:15.751 [DEBUG] [Thread-66308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:21:15.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:21:15.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:21:15.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:21:15.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:21:15.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:21:15.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:21:15.787 [DEBUG] [Thread-66308] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:21:26.768 [DEBUG] [Thread-66310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:21:41.804 [DEBUG] [Thread-66311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:21:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:21:45.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:21:45.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:21:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 21, 34), 8.38, 56.23, 0.0, 14.61, 11.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:21:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:21:34
2025-11-18T03:21:46.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:21:46.742 [DEBUG] [Thread-66312] [transport.py] [_log()] starting thread (client mode): 0xd31cf100
2025-11-18T03:21:46.742 [DEBUG] [Thread-66312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:21:46.763 [DEBUG] [Thread-66312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:21:46.764 [INFO] [Thread-66312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:21:46.767 [DEBUG] [Thread-66312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:21:46.768 [DEBUG] [Thread-66312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:21:46.768 [DEBUG] [Thread-66312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:21:46.768 [DEBUG] [Thread-66312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:21:46.768 [DEBUG] [Thread-66312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:21:46.768 [DEBUG] [Thread-66312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:21:46.768 [DEBUG] [Thread-66312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:21:46.768 [DEBUG] [Thread-66312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:21:46.768 [DEBUG] [Thread-66312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:21:46.769 [DEBUG] [Thread-66312] [transport.py] [_log()] client lang: <none>
2025-11-18T03:21:46.769 [DEBUG] [Thread-66312] [transport.py] [_log()] server lang: <none>
2025-11-18T03:21:46.769 [DEBUG] [Thread-66312] [transport.py] [_log()] kex follows: False
2025-11-18T03:21:46.769 [DEBUG] [Thread-66312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:21:46.769 [DEBUG] [Thread-66312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:21:46.769 [DEBUG] [Thread-66312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:21:46.769 [DEBUG] [Thread-66312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:21:46.769 [DEBUG] [Thread-66312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:21:46.770 [DEBUG] [Thread-66312] [transport.py] [_log()] Compression: none
2025-11-18T03:21:46.770 [DEBUG] [Thread-66312] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:21:46.789 [DEBUG] [Thread-66312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:21:46.790 [DEBUG] [Thread-66312] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:21:46.790 [DEBUG] [Thread-66312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:21:46.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:21:46.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:21:46.792 [DEBUG] [Thread-66312] [transport.py] [_log()] userauth is OK
2025-11-18T03:21:46.792 [DEBUG] [Thread-66312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:21:46.792 [DEBUG] [Thread-66312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:21:46.792 [DEBUG] [Thread-66312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:21:46.792 [DEBUG] [Thread-66312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:21:46.813 [INFO] [Thread-66312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:21:46.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:21:47.461 [DEBUG] [Thread-66312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:21:47.461 [DEBUG] [Thread-66312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:21:47.461 [DEBUG] [Thread-66312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:21:47.502 [DEBUG] [Thread-66312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:21:47.503 [DEBUG] [Thread-66312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:21:47.505 [DEBUG] [Thread-66312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:21:47.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:21:47.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:21:47.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:21:47.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:21:47.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:21:47.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:21:47.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:21:47.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:21:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:21:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.056348 -999.00  +11.80  10.32     60   +4.30 1 1 1 1 1     0    0 6.94 -31.81 ZNESW 13.6 10.3 151.0 15.3 12.2 -23.5 12.0 -22.5 11.8 -22.0 12.2 -23.1
2025-11-18T03:21:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:21:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:21:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.056348
2025-11-18T03:21:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:21:47.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:21:47.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:21:47.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:21:47.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:21:47.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:21:34', tmtdew=8.38, humidity=56.23, cloud=0.0, wind=14.61, temperature=11.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:21:34', seeing=1.21, atlas_timestamp='2025-11-18T01:21:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.0027500000000006963, 0.08725000000000094, -0.0035000000000007248, 0.06649999999999956, 0.09375, 0.009500000000000952, 0.05025000000000013, 0.046499999999999986, 0.053000000000000824, 0.06874999999999964, 0.06949999999999967, 0.14599999999999902, 0.05775000000000041, 0.0019999999999988916, 0.05699999999999861, 0.0782500000000006, 0.1255000000000006, 0.11399999999999899, 0.16024999999999956, 0.1319999999999979, 0.09174999999999933, 0.03125, 0.04075000000000095, 0.09350000000000058, 0.1775000000000002, 0.1667500000000004, 0.22049999999999947, 0.15700000000000003, 0.1460000000000008, 0.06800000000000139, 0.07900000000000063, 0.10725000000000051], zp_timestamp='2025-11-18T01:19:00')
2025-11-18T03:21:47.530 [DEBUG] [Thread-66312] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:21:47.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:21:47.628 [DEBUG] [Thread-66315] [transport.py] [_log()] starting thread (client mode): 0xd31cdc60
2025-11-18T03:21:47.628 [DEBUG] [Thread-66315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:21:47.644 [DEBUG] [Thread-66315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:21:47.644 [INFO] [Thread-66315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:21:47.651 [DEBUG] [Thread-66315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] client lang: <none>
2025-11-18T03:21:47.652 [DEBUG] [Thread-66315] [transport.py] [_log()] server lang: <none>
2025-11-18T03:21:47.653 [DEBUG] [Thread-66315] [transport.py] [_log()] kex follows: False
2025-11-18T03:21:47.653 [DEBUG] [Thread-66315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:21:47.653 [DEBUG] [Thread-66315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:21:47.653 [DEBUG] [Thread-66315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:21:47.653 [DEBUG] [Thread-66315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:21:47.653 [DEBUG] [Thread-66315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:21:47.653 [DEBUG] [Thread-66315] [transport.py] [_log()] Compression: none
2025-11-18T03:21:47.653 [DEBUG] [Thread-66315] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:21:47.709 [DEBUG] [Thread-66315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:21:47.709 [DEBUG] [Thread-66315] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:21:47.710 [DEBUG] [Thread-66315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:21:47.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:21:47.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:21:47.764 [DEBUG] [Thread-66315] [transport.py] [_log()] userauth is OK
2025-11-18T03:21:47.764 [DEBUG] [Thread-66315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:21:47.764 [DEBUG] [Thread-66315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:21:47.765 [DEBUG] [Thread-66315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:21:47.765 [DEBUG] [Thread-66315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:21:47.783 [INFO] [Thread-66315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:21:47.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:21:47.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:21:48.614 [DEBUG] [Thread-66315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:21:48.614 [DEBUG] [Thread-66315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:21:48.662 [DEBUG] [Thread-66315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:21:48.662 [DEBUG] [Thread-66315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:21:48.671 [DEBUG] [Thread-66315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:21:48.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:21:48.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:21:48.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
2025-11-18T03:21:48.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:21:48.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:21:48.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:21:48.706 [DEBUG] [Thread-66315] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:21:56.831 [DEBUG] [Thread-66317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:22:02.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:22:02.121 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:22:06.433 [DEBUG] [Thread-66318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:22:11.881 [DEBUG] [Thread-66319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:22:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:22:18.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:22: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
2025-11-18T03:22:19.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 22, 6), 8.38, 56.22, 0.0, 16.39, 11.55, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:22:19.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:22:06
2025-11-18T03:22:19.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:22:19.713 [DEBUG] [Thread-66320] [transport.py] [_log()] starting thread (client mode): 0xd3162140
2025-11-18T03:22:19.714 [DEBUG] [Thread-66320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:22:19.734 [DEBUG] [Thread-66320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:22:19.734 [INFO] [Thread-66320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:22:19.737 [DEBUG] [Thread-66320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:22:19.737 [DEBUG] [Thread-66320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:22:19.737 [DEBUG] [Thread-66320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:22:19.737 [DEBUG] [Thread-66320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:22:19.737 [DEBUG] [Thread-66320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:22:19.737 [DEBUG] [Thread-66320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:22:19.737 [DEBUG] [Thread-66320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:22:19.737 [DEBUG] [Thread-66320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] client lang: <none>
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] server lang: <none>
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] kex follows: False
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] Compression: none
2025-11-18T03:22:19.738 [DEBUG] [Thread-66320] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:22:19.749 [DEBUG] [Thread-66320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:22:19.749 [DEBUG] [Thread-66320] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:22:19.749 [DEBUG] [Thread-66320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:22:19.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:22:19.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:22:19.750 [DEBUG] [Thread-66320] [transport.py] [_log()] userauth is OK
2025-11-18T03:22:19.750 [DEBUG] [Thread-66320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:22:19.750 [DEBUG] [Thread-66320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:22:19.750 [DEBUG] [Thread-66320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:22:19.750 [DEBUG] [Thread-66320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:22:19.766 [INFO] [Thread-66320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:22:19.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:22:20.449 [DEBUG] [Thread-66320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:22:20.449 [DEBUG] [Thread-66320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:22:20.449 [DEBUG] [Thread-66320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:22:20.490 [DEBUG] [Thread-66320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:22:20.490 [DEBUG] [Thread-66320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:22:20.492 [DEBUG] [Thread-66320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:22:20.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:22:20.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:22:20.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:22:20.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:22:20.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:22:20.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:22:20.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.057042 -999.00  +11.80   9.42     60   +4.30 1 1 1 1 1     0    0 6.90 -31.14 ZNESW 8.2 9.4 151.6 13.3 12.2 -23.5 12.1 -22.5 11.8 -22.1 12.1 -23.0
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.057042
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:22:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:22:06', tmtdew=8.38, humidity=56.22, cloud=0.0, wind=16.39, temperature=11.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:22:06', seeing=1.16, atlas_timestamp='2025-11-18T01:22:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.0027500000000006963, 0.08725000000000094, -0.0035000000000007248, 0.06649999999999956, 0.09375, 0.009500000000000952, 0.05025000000000013, 0.046499999999999986, 0.053000000000000824, 0.06874999999999964, 0.06949999999999967, 0.14599999999999902, 0.05775000000000041, 0.0019999999999988916, 0.05699999999999861, 0.0782500000000006, 0.1255000000000006, 0.11399999999999899, 0.16024999999999956, 0.1319999999999979, 0.09174999999999933, 0.03125, 0.04075000000000095, 0.09350000000000058, 0.1775000000000002, 0.1667500000000004, 0.22049999999999947, 0.15700000000000003, 0.1460000000000008, 0.06800000000000139, 0.07900000000000063, 0.10725000000000051], zp_timestamp='2025-11-18T01:19:00')
2025-11-18T03:22:20.511 [DEBUG] [Thread-66320] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:22:20.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:22:20.596 [DEBUG] [Thread-66323] [transport.py] [_log()] starting thread (client mode): 0xd31509d0
2025-11-18T03:22:20.596 [DEBUG] [Thread-66323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:22:20.612 [DEBUG] [Thread-66323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:22:20.612 [INFO] [Thread-66323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] client lang: <none>
2025-11-18T03:22:20.619 [DEBUG] [Thread-66323] [transport.py] [_log()] server lang: <none>
2025-11-18T03:22:20.620 [DEBUG] [Thread-66323] [transport.py] [_log()] kex follows: False
2025-11-18T03:22:20.620 [DEBUG] [Thread-66323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:22:20.620 [DEBUG] [Thread-66323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:22:20.620 [DEBUG] [Thread-66323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:22:20.620 [DEBUG] [Thread-66323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:22:20.620 [DEBUG] [Thread-66323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:22:20.620 [DEBUG] [Thread-66323] [transport.py] [_log()] Compression: none
2025-11-18T03:22:20.620 [DEBUG] [Thread-66323] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:22:20.679 [DEBUG] [Thread-66323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:22:20.679 [DEBUG] [Thread-66323] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:22:20.679 [DEBUG] [Thread-66323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-18T03:22:20.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-18T03:22:20.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:22:20.736 [DEBUG] [Thread-66323] [transport.py] [_log()] userauth is OK
2025-11-18T03:22:20.736 [DEBUG] [Thread-66323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:22:20.736 [DEBUG] [Thread-66323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:22:20.736 [DEBUG] [Thread-66323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-18T03:22:20.736 [DEBUG] [Thread-66323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:22:20.750 [INFO] [Thread-66323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:22:20.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-18T03:22:20.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:22:21.561 [DEBUG] [Thread-66323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:22:21.561 [DEBUG] [Thread-66323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:22:21.609 [DEBUG] [Thread-66323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:22:21.609 [DEBUG] [Thread-66323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:22:21.617 [DEBUG] [Thread-66323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:22:21.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:22:21.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-18T03:22:21.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-18T03:22:21.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:22:21.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:22:21.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:22:21.649 [DEBUG] [Thread-66323] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:22:26.910 [DEBUG] [Thread-66325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:22:41.952 [DEBUG] [Thread-66326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-18T03:22:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-18T03:22:51.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-18T03:22:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-18T03:22:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 18, 3, 22, 38), 8.29, 56.87, 0.0, 16.87, 11.45, 0, 0, 0, 2, 0, 0),)
2025-11-18T03:22:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-18 03:22:38
2025-11-18T03:22:52.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-18T03:22:52.566 [DEBUG] [Thread-66327] [transport.py] [_log()] starting thread (client mode): 0xd3162e00
2025-11-18T03:22:52.566 [DEBUG] [Thread-66327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:22:52.587 [DEBUG] [Thread-66327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-18T03:22:52.587 [INFO] [Thread-66327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] client lang: <none>
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] server lang: <none>
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] kex follows: False
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-18T03:22:52.590 [DEBUG] [Thread-66327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-18T03:22:52.591 [DEBUG] [Thread-66327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-18T03:22:52.591 [DEBUG] [Thread-66327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-18T03:22:52.591 [DEBUG] [Thread-66327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-18T03:22:52.591 [DEBUG] [Thread-66327] [transport.py] [_log()] Compression: none
2025-11-18T03:22:52.591 [DEBUG] [Thread-66327] [transport.py] [_log()] === End of kex handshake ===
2025-11-18T03:22:52.610 [DEBUG] [Thread-66327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-18T03:22:52.611 [DEBUG] [Thread-66327] [transport.py] [_log()] Switch to new keys ...
2025-11-18T03:22:52.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-18T03:22:52.612 [DEBUG] [Thread-66327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-18T03:22:52.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-18T03:22:52.613 [DEBUG] [Thread-66327] [transport.py] [_log()] userauth is OK
2025-11-18T03:22:52.614 [DEBUG] [Thread-66327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-18T03:22:52.614 [DEBUG] [Thread-66327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-18T03:22:52.614 [DEBUG] [Thread-66327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-18T03:22:52.614 [DEBUG] [Thread-66327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-18T03:22:52.649 [INFO] [Thread-66327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-18T03:22:52.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-18T03:22:53.283 [DEBUG] [Thread-66327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-18T03:22:53.284 [DEBUG] [Thread-66327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-18T03:22:53.284 [DEBUG] [Thread-66327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-18T03:22:53.324 [DEBUG] [Thread-66327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-18T03:22:53.325 [DEBUG] [Thread-66327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-18T03:22:53.328 [DEBUG] [Thread-66327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-18T03:22:53.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-18T03:22:53.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-18T03:22:53.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-18T03:22:53.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-18T03:22:53.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-18T03:22:53.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-18T03:22:53.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-18T03:22:53.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-18T03:22:53.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-18T03:22:53.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60997.057332 -999.00  +11.70  10.33     60   +4.30 1 1 1 1 1     0    0 6.77 -31.46 ZNESW 9.3 10.3 159.6 12.4 12.1 -23.4 12.0 -22.4 11.8 -22.2 12.1 -22.9
2025-11-18T03:22:53.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-18T03:22:53.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-18T03:22:53.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60997.057332
2025-11-18T03:22:53.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-18T03:22:53.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-18T03:22:53.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-18T03:22:53.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-18T03:22:53.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-18T03:22:53.355 [DEBUG] [Thread-66327] [transport.py] [_log()] EOF in transport thread
2025-11-18T03:22:53.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-18T03:22:38', tmtdew=8.29, humidity=56.87, cloud=0.0, wind=16.87, temperature=11.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-18T03:22:38', seeing=1.55, atlas_timestamp='2025-11-18T01:22:33.485', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.0027500000000006963, 0.08725000000000094, -0.0035000000000007248, 0.06649999999999956, 0.09375, 0.009500000000000952, 0.05025000000000013, 0.046499999999999986, 0.053000000000000824, 0.06874999999999964, 0.06949999999999967, 0.14599999999999902, 0.05775000000000041, 0.0019999999999988916, 0.05699999999999861, 0.0782500000000006, 0.1255000000000006, 0.11399999999999899, 0.16024999999999956, 0.1319999999999979, 0.09174999999999933, 0.03125, 0.04075000000000095, 0.09350000000000058, 0.1775000000000002, 0.1667500000000004, 0.22049999999999947, 0.15700000000000003, 0.1460000000000008, 0.06800000000000139, 0.07900000000000063, 0.10725000000000051], zp_timestamp='2025-11-18T01:19:00')
2025-11-18T03:22:53.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-18T03:22:53.453 [DEBUG] [Thread-66330] [transport.py] [_log()] starting thread (client mode): 0xd0757340
2025-11-18T03:22:53.453 [DEBUG] [Thread-66330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-18T03:22:53.468 [DEBUG] [Thread-66330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-18T03:22:53.469 [INFO] [Thread-66330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-18T03:22:53.476 [DEBUG] [Thread-66330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-18T03:22:53.476 [DEBUG] [Thread-66330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-18T03:22:53.476 [DEBUG] [Thread-66330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-18T03:22:53.476 [DEBUG] [Thread-66330] [transport.py] 
[file cut: first 33554432 bytes kept]
[document cut: first 32643604 of 33554432 characters kept]
